(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"))f
(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.color }}"))
(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"))
(a
("href" "/auth/login")
("class" "button")
("data-turbo", "false")
(icon (text "plus"))
(span (str (text "general:action.add_account"))))
(div
("class" "flex justify-between")
(div null?)
(div
("class" "flex gap-2")
(button
("class" "quaternary")
("onclick" "document.getElementById('tokens_dialog').close()")
("type" "button")
(icon (text "check"))
(span "{{ text \"dialog:action.okay\" }}")))))))
; 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 %}")))