livebook/assets/css/js_interop.css
Jonatan Kłosko d93b5d8450
Set up image uploads for Markdown content (#132)
* 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>
2021-04-04 18:55:51 +02:00

91 lines
2.2 KiB
CSS

/*
Conditional elements display.
Verious hooks and callbacks dynamically set attributes
based on which we hide/show certain elements.
This way we don't have to engage the server in
solely client-side operations.
*/
/* === Global === */
[data-element="menu"]:not([data-js-shown]) {
@apply hidden;
}
/* === Session === */
[data-element="session"]:not([data-js-insert-mode])
[data-element="insert-mode-indicator"] {
@apply invisible;
}
[data-element="session"]
[data-element="cell"][data-type="markdown"]
[data-element="editor-box"] {
@apply hidden;
}
[data-element="session"][data-js-insert-mode]
[data-element="cell"][data-type="markdown"][data-js-focused]
[data-element="editor-box"] {
@apply block;
}
[data-element="session"][data-js-insert-mode]
[data-element="cell"][data-type="markdown"][data-js-focused]
[data-element="enable-insert-mode-button"] {
@apply hidden;
}
[data-element="session"]:not([data-js-insert-mode])
[data-element="cell"][data-type="markdown"][data-js-focused]
[data-element="insert-image-button"] {
@apply hidden;
}
[data-element="cell"][data-js-focused] {
@apply border-blue-300 border-opacity-100;
}
[data-element="cell"]:not([data-js-focused])
[data-element="actions"]:not(:focus-within) {
/* Note: using opacity, so the buttons are focusable (via tab navigation)
and when focused we show the actions back. */
@apply opacity-0 pointer-events-none;
}
[data-element="cell"]:not([data-js-focused]):hover
[data-element="actions"][data-primary] {
@apply opacity-100 pointer-events-auto;
}
[data-element="section-list-item"][data-js-is-viewed] {
@apply text-gray-900;
}
[data-element="cell"]:not([data-js-focused]):hover
[data-element="cell-focus-indicator"] {
@apply bg-blue-200;
}
[data-element="cell"][data-js-focused] [data-element="cell-focus-indicator"] {
@apply bg-blue-300;
}
[data-element="session"]:not([data-js-sections-panel-expanded])
[data-element="sections-panel"] {
@apply hidden;
}
[data-element="session"][data-js-sections-panel-expanded]
[data-element="sections-panel-toggle"] {
@apply text-gray-50 bg-gray-700;
}
[data-element="section-headline"]:not(:hover)
[data-element="section-name"]:not(:focus)
+ [data-element="section-actions"] {
@apply hidden;
}