* Implement cells bin
* Temporarily keep cells source
* Send complete bin entries from session to clients when a cell gets removed
* Polish styles
* Hydrate bin entries on section deletion as well
* Add password input
* Save empty string for password in .livemd file
* Update lib/livebook_web/live/session_live/cell_component.ex
* Changed radio button it to select
* Changed radio button it to select
* Moved select it to the top
* Keep the elements in the select ordered
* Update lib/livebook_web/helpers.ex
Co-authored-by: Jonatan Kłosko <jonatanklosko@gmail.com>
* Update lib/livebook_web/live/session_live/input_cell_settings_component.ex
Co-authored-by: Jonatan Kłosko <jonatanklosko@gmail.com>
* Update lib/livebook_web/live/session_live/input_cell_settings_component.ex
Co-authored-by: Jonatan Kłosko <jonatanklosko@gmail.com>
* Add textarea input
* Add textarea input
* Added operation in the io_proxy to IO.getn
* Update lib/livebook/evaluator/io_proxy.ex
Co-authored-by: José Valim <jose.valim@gmail.com>
* Update lib/livebook_web/live/session_live/cell_component.ex
Co-authored-by: José Valim <jose.valim@gmail.com>
* Update lib/livebook_web/live/session_live/cell_component.ex
Co-authored-by: José Valim <jose.valim@gmail.com>
* Support for utf8 characters in getn function
* Support for utf8 characters in getn function
* Perform test with special characters
* Accepting latin1 and unicode values
* Update lib/livebook/evaluator/io_proxy.ex
Co-authored-by: Jonatan Kłosko <jonatanklosko@gmail.com>
* Added split_at function for better performance
* Update lib/livebook/evaluator/io_proxy.ex
Co-authored-by: Jonatan Kłosko <jonatanklosko@gmail.com>
Co-authored-by: José Valim <jose.valim@gmail.com>
* Display the time in seconds
Show the evaluation time next to the cell indicator
* Test session data
* Send evaluation time to session
Start the evaluation time inside the evaluator, display the time in seconds
or milliseconds.
The output is not a string but a map
* Add metadata to evaluation_response
* Wrap the evaluation indicator in a tooltip
• Add metadata argument to the evaluation_response message
• Use a tooltip to display the evaluation time
* Display the toolip below the indicator
* Remove the evaluation start time
* Make the tooltip optional
* Rename finish_cell_evaluation
* Evaluator tests
* Update test to accespt metadata
* Pass the evaluated time as a third argument
* Make status tooltip more generic
Co-authored-by: Jonatan Kłosko <jonatanklosko@gmail.com>
* Add support for Mix runtime as a default
* Support default runtime options in the CLI
* Set cell status to queued while runtime is being started
* Clean up tests
* Render basic input
* Make each cell type a separate struct
* Add operation to set input value
* Prototype communication
* Make input name editable
* Refactoring
* Unify cell attribute setters
* IO tests
* Document input communication protocol in Runtime
* Add more tests
* Add persistence
* Fix status update on cell attributes change
* Rework persistence
* Integrate input cell with insert mode
* Add missing users keybinding
* Mimic autofocus for dynamically inserted elements
* Support input type selection
* Support URL input and set up validation
* Convert input error into a more meaningful io error
* Add missing client checks
* Consume every input only once per evaluation
* Fixes
* Add explore page
* Move sidebar to a configurable component
* Fix homepage test
* Add images
* Store example notebooks in files and make explore notebooks linkable
* Fix tests
* Raise on invalid notebook slug
* Keep just the file contents in notebook info
* Move notebook lookup to Explore
* Exclude notebooks in progress
Because we unregistered standard_error, if there
was an error booting livebook, we would fail to
print the error. This commit makes sure the original
standard error is added back whenever the proxy
process terminates.
* Delegate output formatting rules to Kino
* Update naming
* Group output components and views
* Fallback to inspect when Kino.Render.to_output/1 fails
* Update naming
* Add reference to Kino
* Add support for LiveWidget.VegaLite
* LiveWidget -> Kino
* Show an error when rendering unsupported Kino widget
* Match on Kino.Widget
* Add catch-all for unknown outputs
* Change anchor tags for sections to be based on the titles, not randomly generated
* Update lib/livebook_web/helpers.ex
Co-authored-by: Jonatan Kłosko <jonatanklosko@gmail.com>
* Optimise data view recomputation for delta operations
* Use generic access_by_id/1 for nested updates
* Use access_by_id/1 for nested notebook updates
* Use Enum.split_while
* Add embedded runtime for evaluating code in the Livebook VM
* Update lib/livebook_web/live/session_live/embedded_live.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Use standard error proxy globally in the Livebook node
* Add configuration env variable for setting the default runtime
* Increase evaluation response assertion timeouts
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Add initial user config modal
* Assign user ids
* Update session data to hold user ids
* Get users list for specific ids
* Render user avatar
* User update
* Refactor user changes
* Subscribe to individual user updates
* Show users in side panel
* Add sidebar to homepage
* Don't generate the same color twice in a row
* Add documentation notes
* Fix tests
* Add tests
* Keep users in session data
* Rename color to hex_color
* Set up importing notebook from URL or clipboard
* Extract loading functions into separate module
* Replace import icon with text
* Add TLS peer verification
* Remove unnecessary tests setup step
* Force menu items into a single line
* Add shortcut for saving the notebook
* Make the disk icon always show file dialog
* Split runtime and file settings into separate modals
* Add ctrl+s to the shortcuts list
* Add togglable menu to the session page
* Make sure newly saved file appears in the file selector
* Fix path seletor force reloading
* Remove notebook generated in tests
* Add test for file list refresh after save
This ignores "\e(B" which sometimes shows up even when the other RFC
1468 Japanese character set switch codes aren't used. This also updates
defmodifier so that it can be used with non-CSI escape codes (the
ones that start with '[').
* Allow server-side re-ordering of sections
* `Livebook.Notenook.move_section` definition
* Management and implementation of requests
* tests
This commit allows a person to send a request to the server to move a
section. However, the functionality in not yet available in the UI.
* Allow "Move up" and "Move down" functionality for sections
* Rendering of up and down "arrows" at Section's side
* Request from UI on click
This commit enables a user to move a section upwards or downwards, much
like a cell. However, after the section moves, the focus is not changed
to it.
* Apply formatting
* Define a function to update cell status
* Defines a common function for `move_cell` and `move_section` to use to
update cell status.
* Buffer IO evaluation output
* Respect CR in IOProxy
* Handle CR when adding cell output rather than during each render
* Optimise CR handling in buffer
* Add token authentication
* Restructure CLI
* Allow port configuration
* Further refactoring
* Make sure livebook node starts with unique name
* Improve startup error handling
* Further refactoring
* Add authentication tests
* Add authentication view for entering the token
* Fix auth tests
* Always use random Livebook name for distribution
* Don't enable ANSI on Windows
* Define CLI Task behaviour and move generic logic to the main module
* Generalize convertion from cli arguments to configuration
* Randomly generate secret key base
* Update test/livebook_web/plugs/auth_plug_test.exs
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Override app config in persistent manner
* Update lib/litebook_cli.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Move auth error to ErrorView
* Unify node name configuration and allow it via CLI
* Set all applications configs at once
* Move token generation to application.ex to work outside CLI
* Clean up overriding configuration
* Store auth token in separate cookies
* Update lib/livebook_cli/server.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update lib/livebook_web/endpoint.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update lib/livebook_web/plugs/auth_plug.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Add cell image upload modal
* Add controller for serving the images and handle this on markdown side
* Use per-session images dir
* Add etag header to session image responses
* Adjust markdown image styling
* Properly manage session images dir
* Add tests
* Set maximum file size for image uploads
* Move images dir specifics to the Session module
* Move images when nonpersistent session becomes persistent
* Update lib/livebook_web/live/session_live.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update lib/livebook_web/live/session_live.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update lib/livebook_web/live/session_live/cell_upload_component.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Test that close gets rid of session temporary dir
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Add notebook indicators
* Make evaluation status button point to the corresponding cell
* Rename introductory notebook
* Update path highlight when chosen for saving
* Allow specifying nonexistent directories when saving and create those
* Update lib/livebook_web/live/session_live/indicators_component.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update lib/livebook_web/live/session_live/indicators_component.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update lib/livebook_web/live/session_live/indicators_component.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update lib/livebook_web/live/session_live/indicators_component.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update lib/livebook_web/live/session_live/indicators_component.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Limit module result to a single line
* Add introductory notebook to get started with
* Don't show tooltip on focused elements
* Update lib/livebook/notebook/hello_livebook.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update lib/livebook/notebook/hello_livebook.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update lib/livebook/notebook/hello_livebook.ex
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update notebook settings reference
* Add note on package authors
* Add tests
* Update Phoenix version to git master
Co-authored-by: José Valim <jose.valim@dashbit.co>
* Update cell actions
* Add new focus indicator
* Update headings typography
* Update cell actions and insert buttons
* Add sidebar menu
* Add settings modal
* Update homepage
* Update settings dialog
* Rename classes
* Add floating menu
* Update icon colors on hover
* Fix homepage tests
* Format assets source
* Update monaco editor
* Fix editor width on resize
* Add more padding to the notebook content
* Update settings dialog title
* Show reevaluate button when the cell is in evaluated state
* Show section actions on focus or hover only
* Pre-fill runtime selector with the current configuration
* Ignore cmd + enter in Markdown cells
* Set up Escript packaging
* Use MD5 digest sa ETAG
* Make sure changes to the static files recompile the relevant module
* Manually start the application in Escript
* Set up basic CLI
* Run formatter
* Start Elixir app before anything else
* Improve version output
* Build Escript to project root directory
* Improve assets handling
* Move plug related modules under plugs directory
* Include bundled assets in the repository
* Use the same plug with different static providers in prod and dev
* Refactor providers
* Rename StaticProvidedPlug to StaticPlug
* Show all sections and enable cross-section focus navigation
* Move focus to the client
* Add shortcut for evaluating all cells
* Fix and expand tests
* Make section links scroll to the given section
* Implement moving cells with keyboard shortcuts
* Add tests for cell movement operation
* Refactor
* Does not mark cells as stale if Elixir cells did not change order
* Prototype standalone mode with mix
* Move runtime initialization into separate LiveViews
* Make standalone node initialization async
* Refactor async node initialization
* Automatically scroll to the bottom of output
* Refactor streaming output
* Move MessageEmitter under Utils
* Add path selector to the mix runtime picker
* Update runtime descriptions
* Add successful or error message at the end of output
* Run formatter
* Rename Standalone to ElixirStandalone for consistency
* Show only directories when looking for a mix project
* Update docs
* Extract shared standalone logic
* Make the remote primary process monitor Manager instead of session
* Further refactoring and docs
* Add tests for collectable Callback
* Add missing macro doc
* Apply review suggestions
* Decouple sending asynchronous notifications from the runtime initialization
* Apply suggestions
* Ignore compilation warnings in the Evaluator tests
* Make Cmd + Enter evaluate cell even in navigation mode
* Fix homepage responsiveness
* Improve setting insert mode with mouse
* Extend LiveMarkdown format to support Elixir snippets in Markdown cells
* Highlight Markdown code blocks using Monaco editor API
* Use livebook metadata for forcing markdown as well
* Keep track of connected clients in session data
* Add API for confirming and purging deltas
* Send delta confirmation from clients once received
* Update naming
* Fix and extend Data tests
* Update naming
* Basic filesystem navigation
* Add file picker modal
* Implement autosave when dirty and show the status
* Add hompage link in the session view
* Improve file picker and use in both places
* Move session list to homepage
* Some refactoring
* Show import messages if any
* Fix and extend tests
* Show a message when there are no sessions running
* Rename import to fork and make that clear in notebook name
* Fix old route
* Show info when no file is connected to the given session
* Show runtime type next to filename
* Show button for joining session when a running path is selected
* Move modal components to SessionLive namespace
* Add FileGuard to lock files used for notebook persistence
* Use radio for specifying persistence type
* Don't lock nil path
* Simplify FileGuard implementation
* Test notebook persistence
* Fix typo
* Further simplify FileGuard
* Improve file listing
* Don't show parent dir when there's a basename being typed
* Add path component tests
* Tiny UI improvements
* Add icon for entering insert mode on a markdown cell
* Highlight selected section
* Improve contenteditable elements
* Highlight notebook/section name while editing
* Update keybindings and add help modal
* Add more evaluation shortcuts
* Add shortcut to the help modal
* Show appropriate shortcuts depending on the user system
* Handle missing user-agent header
* Conditionally render shortcut based on user agent
* Implement vim-style navigation
* Remove warning
* Determine platform based on socket on mount
* Improve shortcuts list UI
* Initial file import/export
* Add renderer tests
* Refactor renderer
* Depend only on EarmarkParser
* Add test for export
* Add import tests
* Improve import
* Document the ExMd file format
* Rename ExMd to ExMarkdown
* Rename ExMarkdown to LiveMarkdown
* Build iodata when exporting a notebook
* Persist metadata as a single JSON object
* Move Markdown to LiveMarkdown.MarkdownHelpers
* Make LiveMarkdown private
* Always move primary heading to the top during import
* Hint the user not to use heading 1 and 2
* Return a list of messages from the import function
* Update headings warning
* Add import and export test for non-elixir snippets
* Merge markdown renderer into MarkdownHelpers
* Add import messages on AST rewrites
* Isolate evaluation in separate node for each session
* Start new remote upon first evaluation and handle nodedown
* Add UI for managing evaluation node, improve naming and structure
* Show runtime initialization errors and some fixes
* Improve standalone node initialization
* Correctly handle multiple sessions connecting to the same node
* Fix session tests concerning evaluation
* Documentation and some refactoring
* Various improvements
* Configure schedulers to get to sleep immediately after evaluation
* Move EvaluatorSpervisor into the Remote namespace
* Fix evaluators cleanup
* Add tests
* Improve flash messages
* Introduce remote genserver taking care of cleanup
* Redefine the Runtime protocol to serve as an interface for evaluation
* Cleanup operations
* Use reference for communication with a standalone node
* Use shortnames for distribution by default
* Update node configuration and make sure epmd is running
* Rename Remote to ErlDist
* Adjust result length
* Add more keyboard navigation actions
* Improve inserted/deleted cells focus and add some tests
* Some refactoring
* Run formatter
* Render evaluation outputs and result
* Fix auto-scrolling to not be interrupted by editor focus
* Add cell output tests
* Run formatter
* Show cell status
* Apply review suggestions
* Change EEx strings to Live EEx
* Set up markdown rendering, update theme.
* Improve focus and handle expanding for markdown cells
* Add keybindings for expanding/navigating cells
* Improve editor autofocus when navigating with shortcuts
* Add tests
* Render markdown on the client
* Don't render cell initial data and make a request instead
* Set up editor and client side delta handling
* Synchronize deltas on the server
* Document the client code, add more tests
* Implement delta on the server, use compact representation when transmitting changes
* Simplify transformation implementation and add documentation
* Add session and data tests
* Add more delta tests
* Clean up evaluator tests wait timeout
* Sync session data within LV client
* Add basic session UI
* Add operations for setting notebook and section name
* Update notebook and section name from the UI
* Some cleanup
* Return current data upon client registartion to avoid race conditions
* Small fixes
* Define session data structure and some operations
* Make code evaluation request async, so that we don't need an intermediary process
* Simplify id typespecs
* Make operation application composable
* Keep a separate evaluation queue per section and actually support concurrent evaluation
* Small fixes
* Validate queued cell type and set evaluation timestamp
* Apply review suggestions
* Add tests
* Store evaluating_cell_id instead of section status
* Add dynamic supervisor for managing evaluator processes
* Some fixes
* Refactor operation application
* Upon cell deletion mark dependent cells as stale
* Add code evaluation server
* Capture evaluator standard output and send to the caller
* Return full error info from evaluator
* Add support for deleting evaluation from hitory
* Fix a typo
* Start IOProxy once per Evalutor
* Apply review suggestions