livebook/lib/livebook_web/components/layouts/root.html.heex
2024-05-10 13:28:30 +08:00

69 lines
2.6 KiB
Text

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="csrf-token" content={get_csrf_token()} />
<link rel="icon" type="image/svg+xml" href={~p"/favicon.svg"} />
<link rel="alternate icon" type="image/png" href={~p"/favicon.png"} />
<.live_title>
<%= assigns[:page_title] || "Livebook" %>
</.live_title>
<link phx-track-static rel="stylesheet" href={~p"/assets/app.css"} />
<script>
window.LIVEBOOK_BASE_URL_PATH = "<%= Livebook.Config.base_url_path() %>";
</script>
<!--
The main JS file is loaded asynchronously as a module, so we inline
the live reloader listener here to make sure it is already registered
when the event is dispatched.
-->
<script :if={Mix.env() == :dev} type="text/javascript">
window.addEventListener(
"phx:live_reload:attached",
({ detail: reloader }) => {
// Enable server log streaming to client. Disable with reloader.disableServerLogs()
reloader.enableServerLogs();
// Open configured PLUG_EDITOR at file:line of the clicked element's HEEx component
//
// * click with "c" key pressed to open at caller location
// * click with "d" key pressed to open at function component definition location
//
let keyDown;
window.addEventListener("keydown", (event) => (keyDown = event.key));
window.addEventListener("keyup", (event) => (keyDown = null));
window.addEventListener(
"click",
(event) => {
if (keyDown === "c") {
event.preventDefault();
event.stopImmediatePropagation();
reloader.openEditorAtCaller(e.target);
} else if (keyDown === "d") {
event.preventDefault();
event.stopImmediatePropagation();
reloader.openEditorAtDef(event.target);
}
},
true,
);
window.liveReloader = reloader;
},
);
</script>
<%!-- This prevents the script to be loaded twice in Chrome --%>
<link rel="modulepreload" href={~p"/assets/app.js"} />
<script phx-track-static type="module" src={~p"/assets/app.js"}>
</script>
</head>
<body
class="bg-white"
data-feature-flags={Livebook.Config.enabled_feature_flags() |> Enum.join(",")}
data-within-iframe={Livebook.Config.within_iframe?()}
>
<%= @inner_content %>
</body>
</html>