mirror of
				https://github.com/livebook-dev/livebook.git
				synced 2025-10-25 21:06:08 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			92 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| defmodule LivebookWeb do
 | |
|   def static_paths, do: ~w(assets images favicon.svg favicon.png robots.txt)
 | |
| 
 | |
|   def controller do
 | |
|     quote do
 | |
|       use Phoenix.Controller,
 | |
|         formats: [:html, :json],
 | |
|         layouts: [html: LivebookWeb.Layouts]
 | |
| 
 | |
|       import Plug.Conn
 | |
| 
 | |
|       unquote(verified_routes())
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def live_view do
 | |
|     quote do
 | |
|       use Phoenix.LiveView, layout: {LivebookWeb.Layouts, :live}
 | |
| 
 | |
|       unquote(html_helpers())
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def live_component do
 | |
|     quote do
 | |
|       use Phoenix.LiveComponent
 | |
| 
 | |
|       unquote(html_helpers())
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def router do
 | |
|     quote do
 | |
|       use Phoenix.Router, helpers: false
 | |
| 
 | |
|       import Plug.Conn
 | |
|       import Phoenix.Controller
 | |
|       import Phoenix.LiveView.Router
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def html do
 | |
|     quote do
 | |
|       use Phoenix.Component
 | |
| 
 | |
|       # Import convenience functions from controllers
 | |
|       import Phoenix.Controller,
 | |
|         only: [get_csrf_token: 0, view_module: 1, view_template: 1]
 | |
| 
 | |
|       # Include general helpers for rendering HTML
 | |
|       unquote(html_helpers())
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   defp html_helpers do
 | |
|     quote do
 | |
|       # HTML escaping functionality
 | |
|       import Phoenix.HTML
 | |
| 
 | |
|       # Core UI components
 | |
|       import LivebookWeb.CoreComponents
 | |
|       import LivebookWeb.FormComponents
 | |
|       import LivebookWeb.Confirm
 | |
| 
 | |
|       # Shortcut for generating JS commands
 | |
|       alias Phoenix.LiveView.JS
 | |
| 
 | |
|       # Routes generation with the ~p sigil
 | |
|       unquote(verified_routes())
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def verified_routes do
 | |
|     quote do
 | |
|       use Phoenix.VerifiedRoutes,
 | |
|         endpoint: LivebookWeb.Endpoint,
 | |
|         router: LivebookWeb.Router,
 | |
|         statics: LivebookWeb.static_paths()
 | |
| 
 | |
|       # We don't know the hostname Livebook runs on, so we don't use
 | |
|       # absolute URL helpers
 | |
|       import Phoenix.VerifiedRoutes, only: :sigils
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   @doc """
 | |
|   When used, dispatch to the appropriate controller/view/etc.
 | |
|   """
 | |
|   defmacro __using__(which) when is_atom(which) do
 | |
|     apply(__MODULE__, which, [])
 | |
|   end
 | |
| end
 |