105 lines
3.5 KiB
HTML
105 lines
3.5 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
{% for url in INCLUDED_CSS %}
|
|
<link
|
|
rel="stylesheet"
|
|
type="text/css"
|
|
href="{{ static_url_for('static', url ) }}"
|
|
/>
|
|
{% endfor %} {% block styles %}{% endblock %}
|
|
<style>
|
|
@font-face {
|
|
font-family: 'Material Icons';
|
|
font-style: normal;
|
|
font-weight: 400;
|
|
src: url("{{ static_url_for('static', 'fonts/material-icons-v50.woff2') }}")
|
|
format('woff2');
|
|
}
|
|
</style>
|
|
<title>{% block title %}{{ SITE_TITLE }}{% endblock %}</title>
|
|
<meta charset="utf-8" />
|
|
<meta
|
|
name="viewport"
|
|
content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no"
|
|
/>
|
|
<meta name="mobile-web-app-capable" content="yes" />
|
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
<link
|
|
rel="apple-touch-icon"
|
|
href="{{ LNBITS_APPLE_TOUCH_ICON or static_url_for('static', 'images/maskable_icon.png') }}"
|
|
/>
|
|
{% if web_manifest %}
|
|
<link async="async" rel="manifest" href="{{ web_manifest }}" />
|
|
{% endif %} {% block head_scripts %}{% endblock %}
|
|
</head>
|
|
|
|
<body data-theme="bitcoin">
|
|
<div id="vue">
|
|
<q-layout view="hHh lpR lfr" v-cloak>
|
|
<lnbits-disclaimer v-if="g.user && !g.isPublicPage"></lnbits-disclaimer>
|
|
<lnbits-qrcode-scanner :callback="g.scanner"></lnbits-qrcode-scanner>
|
|
<lnbits-theme></lnbits-theme>
|
|
<lnbits-header></lnbits-header>
|
|
<lnbits-drawer v-if="g.user && !g.isPublicPage"></lnbits-drawer>
|
|
{% block page_container %}
|
|
<q-page-container>
|
|
<q-page class="q-px-md q-py-lg" :class="{'q-px-lg': $q.screen.gt.xs}">
|
|
<lnbits-wallet-new
|
|
v-if="g.user && !g.isPublicPage"
|
|
></lnbits-wallet-new>
|
|
<lnbits-header-wallets
|
|
v-if="g.user && !g.isPublicPage"
|
|
></lnbits-header-wallets>
|
|
<!-- block page content from static extensions -->
|
|
<div
|
|
v-if="$route.path.startsWith('{{ normalize_path(request.path) }}')"
|
|
>
|
|
{% block page %}{% endblock %}
|
|
</div>
|
|
<!-- vue router-view -->
|
|
<router-view :key="$route.path"></router-view>
|
|
</q-page>
|
|
</q-page-container>
|
|
{% endblock %}
|
|
<!-- Footer -->
|
|
{% block footer %}
|
|
<lnbits-footer />
|
|
{% endblock %}
|
|
</q-layout>
|
|
</div>
|
|
<script type="text/javascript">
|
|
const RENDERED_ROUTE = '{{ normalize_path(request.path) }}'
|
|
const WINDOW_SETTINGS = {{ WINDOW_SETTINGS | tojson }}
|
|
Object.keys(WINDOW_SETTINGS).forEach(key => {
|
|
window[key] = WINDOW_SETTINGS[key]
|
|
})
|
|
</script>
|
|
<!-- vue templates -->
|
|
{% include('components.vue') %} {% include('pages.vue') %}
|
|
<!-- vue extension templates -->
|
|
{% block vue_templates %}{% endblock %}
|
|
<!-- scripts libraries -->
|
|
{% for url in INCLUDED_JS %}
|
|
<script src="{{ static_url_for('static', url) }}"></script>
|
|
{% endfor %}
|
|
<!-- user init -->
|
|
{% if user %}
|
|
<script>
|
|
window.g.user = LNbits.map.user(JSON.parse({{ user | tojson | safe }}));
|
|
{% if not public %}
|
|
window.g.isPublicPage = false
|
|
{% endif %}
|
|
</script>
|
|
{% endif %}
|
|
<!-- scripts from extensions -->
|
|
{% block scripts %}{% endblock %}
|
|
<!-- modules js -->
|
|
<script src="/static/modules/components.umd.js"></script>
|
|
<!-- components js -->
|
|
{% for url in INCLUDED_COMPONENTS %}
|
|
<script src="{{ static_url_for('static', url) }}"></script>
|
|
{% endfor %}
|
|
</body>
|
|
</html>
|