(text "{%- import \"components.html\" as components -%} {%- import \"macros.html\" as macros -%}") (text "") (html ("lang" "en") (head (meta ("charset" "UTF-8")) (meta ("name" "viewport") ("content" "width=device-width, initial-scale=1.0")) (meta ("http-equiv" "X-UA-Compatible") ("content" "ie=edge")) (meta ("http-equiv" "content-security-policy") ("content" "default-src 'self' blob: *.spotify.com musicbrainz.org; img-src * data:; media-src *; font-src *; style-src 'unsafe-inline' 'self' blob: *; script-src 'self' 'unsafe-inline' blob: *; object-src 'self' blob: *; upgrade-insecure-requests; connect-src * localhost; frame-src 'self' blob: data: *")) (link ("rel" "icon") ("href" "/public/favicon.svg")) (link ("rel" "stylesheet") ("href" "/css/style.css")) (text "{% if user -%} {%- endif %}") (text "") (script ("src" "/js/loader.js" )) (script ("src" "/js/atto.js" )) (meta ("name" "theme-color") ("content" "{{ config.color }}")) (meta ("name" "description") ("content" "{{ config.description }}")) (meta ("property" "og:type") ("content" "website")) (meta ("property" "og:site_name") ("content" "{{ config.name }}")) (meta ("name" "turbo-prefetch") ("content" "false")) (meta ("name" "turbo-refresh-method") ("content" "morph")) (meta ("name" "turbo-refresh-scroll") ("content" "preserve")) (script ("src" "https://unpkg.com/@hotwired/turbo@8.0.5/dist/turbo.es2017-esm.js") ("type" "module") ("async" "") ("defer" "")) (text "{% block head %}{% endblock %}")) (body (div ("id" "toast_zone")) (div ("id" "page") (text "{% if user and user.id == 0 -%}") ; account banned message (article (main (div ("class" "card-nest") (div ("class" "card small flex items-center gap-2 red") (icon (text "frown")) (str (text "general:label.account_banned"))) (div ("class" "card") (str (text "general:label.account_banned_body")))))) ; if we aren't banned, just show the page body (text "{% else %} {% block body %}{% endblock %} {%- endif %}") (text "")) ; random js (text "") (text "{% if user -%} {%- endif %}") ; dialogs (dialog ("id" "link_filter") (div ("class" "inner flex flex-col gap-2") ; warning stuff (p (text "Pressing continue will bring you to the following URL:")) (pre (code ("id" "link_filter_url"))) (p (text "Are sure you want to go there?")) (hr ("class" "margin")) (div ("class" "flex gap-2") (a ("class" "button primary") ("id" "link_filter_continue") ("rel" "noopener noreferrer") ("target" "_blank") ("onclick", "document.getElementById('link_filter').close()") (icon (text "external-link")) (str (text "dialog:action.continue"))) (button ("class" "secondary") ("type" "button") ("onclick", "document.getElementById('link_filter').close()") (icon (text "x")) (str (text "dialog:action.cancel")))))) (dialog ("id" "web_api_prompt") (div ("class" "inner flex flex-col gap-2") (form ("class" "flex gap-2 flex-col") ("onsubmit" "event.preventDefault()") (label ("for" "prompt") ("id" "web_api_prompt:msg")) (input ("id" "prompt") ("name" "prompt")) (div ("class" "flex justify-between") (div null?) (div ("class" "flex gap-2") (button ("class" "primary bold circle") ("onclick", "globalThis.web_api_prompt_submit(document.getElementById('prompt').value); document.getElementById('prompt').value = ''") ("type" "button") (icon (text "check")) (str (text "dialog:action.okay"))) (button ("class" "bold red camo") ("onclick", "globalThis.web_api_prompt_submit('')") ("type" "button") (icon (text "x")) (str (text "dialog:action.cancel")))))))) (dialog ("id" "web_api_prompt_long") (div ("class" "inner flex flex-col gap-2") (form ("class" "flex gap-2 flex-col") ("onsubmit" "event.preventDefault()") (label ("for" "prompt_long") ("id" "web_api_prompt_long:msg")) (input ("id" "prompt_long") ("name" "prompt_long")) (div ("class" "flex justify-between") (div null?) (div ("class" "flex gap-2") (button ("class" "primary bold circle") ("onclick", "globalThis.web_api_prompt_long_submit(document.getElementById('prompt_long').value); document.getElementById('prompt_long').value = ''") ("type" "button") (icon (text "check")) (str (text "dialog:action.okay"))) (button ("class" "bold red camo") ("onclick", "globalThis.web_api_prompt_long_submit('')") ("type" "button") (icon (text "x")) (str (text "dialog:action.cancel")))))))) (dialog ("id" "web_api_confirm") (div ("class" "inner flex flex-col gap-2") (form ("class" "flex gap-2 flex-col") ("onsubmit" "event.preventDefault()") (span ("id" "web_api_confirm:msg")) (div ("class" "flex justify-between") (div null?) (div ("class" "flex gap-2") (button ("class" "primary bold circle") ("onclick", "globalThis.web_api_confirm_submit(true)") ("type" "button") (icon (text "check")) (str (text "dialog:action.yes"))) (button ("class" "bold red camo") ("onclick", "globalThis.web_api_confirm_submit(false)") ("type" "button") (icon (text "x")) (str (text "dialog:action.no")))))))) (div ("class" "lightbox hidden") ("id" "lightbox") (button ("class" "lightbox_exit small square quaternary red") ("onclick" "trigger('ui::lightbox_close')") (icon (text "x"))) (a ("href" "") ("id" "lightbox_img_a") ("target" "_blank") (img ("id" "lightbox_img") ("loading" "lazy")))) ; tokens dialog (text "{% if user -%}") (dialog ("id" "tokens_dialog") (div ("class" "inner flex flex-col gap-2") (form ("class" "flex gap-2 flex-col") ("onsubmit" "event.preventDefault()") (div ("id" "tokens") ("style" "display: contents")) (div ("class" "flex justify-between") (a ("href" "/auth/login") ("class" "button") ("data-turbo", "false") (icon (text "plus")) (span (str (text "general:action.add_account")))) (button ("class" "quaternary") ("onclick" "document.getElementById('tokens_dialog').close()") ("type" "button") (icon (text "check"))))))) ; user scripts (text "{%- endif %} {% if user and use_user_theme -%} {{ components::theme(user=user, theme_preference=user.settings.theme_preference) }} {%- endif %} {% if user and user.connections.Spotify and config.connections.spotify_client_id and user.connections.Spotify[0].data.token and user.connections.Spotify[0].data.refresh_token %} {% elif user and user.connections.LastFm and config.connections.last_fm_key and user.connections.LastFm[0].data.session_token %} {%- endif %}")))