151 lines
4.4 KiB
HTML
151 lines
4.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="${request.lang}">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Pairgoth</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="description" content="Pairgoth Go Paring Engine">
|
|
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
|
<script type="text/javascript">
|
|
// #[[
|
|
let initFunctions = [];
|
|
function onLoad(fct) {
|
|
if (typeof(fct) == "function") initFunctions.push(fct);
|
|
}
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
initFunctions.forEach(fct => {
|
|
fct();
|
|
});
|
|
});
|
|
// ]]#
|
|
</script>
|
|
<style>
|
|
body.initial {
|
|
display: none;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body class="vert flex initial">
|
|
#* Debugging code to list all web context properties
|
|
<blockquote>
|
|
#foreach($attr in $application.getAttributeNames())
|
|
<div>$attr = $application.getAttribute($attr)</div>
|
|
#end
|
|
</blockquote>
|
|
*#
|
|
#if($params.id)
|
|
#set($tour = $api.get("tour/${params.id}"))
|
|
#end
|
|
<div id="header" class="horz flex">
|
|
<div id="logo">
|
|
<a href="/"><img src="/img/logov2.svg"/></a>
|
|
</div>
|
|
#if($tour)
|
|
#translate('tour-menu.inc.html')
|
|
#end
|
|
<div id="header-right">
|
|
<div id="lang">
|
|
<i class="$translate.flags[$request.lang] flag"></i>
|
|
</div>
|
|
#if($session.logged)
|
|
<div id="logout">
|
|
<i class="fa fa-sign-out"></i>
|
|
</div>
|
|
#end
|
|
</div>
|
|
</div>
|
|
<div id="center">
|
|
<div id="inner">
|
|
#if($tour && $tour.error)
|
|
<script type="text/javascript">
|
|
onLoad(()=>{
|
|
showError("$esc.javascript($tour.error)");
|
|
});
|
|
</script>
|
|
#else
|
|
#translate($page)
|
|
#end
|
|
</div>
|
|
</div>
|
|
<div id="footer" class="horz flex">
|
|
<div id="version">pairgoth v$version</div>
|
|
<div id="contact"><a href="mailto:pairgoth-dev@jeudego.org">contact</a></div>
|
|
</div>
|
|
<div id="feedback">
|
|
<div id="success" class="hidden"></div>
|
|
<div id="error" class="hidden"></div>
|
|
</div>
|
|
<div id="backdrop"></div>
|
|
<div id="dimmer"></div>
|
|
<div id="lang-list">
|
|
#foreach($lang in $translate.flags.entrySet())
|
|
#if($lang != $request.lang)
|
|
<a class="lang" data-lang="$lang.key" href="#"><i class="$lang.value flag"></i> $lang.key</a>
|
|
#end
|
|
#end
|
|
</div>
|
|
<script type="text/javascript" src="/lib/store2-2.14.2.min.js"></script>
|
|
<script type="text/javascript" src="/lib/tablesort-5.4.0/tablesort.min.js"></script>
|
|
<script type="text/javascript" src="/lib/tablesort-5.4.0/sorts/tablesort.number.min.js"></script>
|
|
<link rel="stylesheet" href="/lib/tablesort-5.4.0/tablesort.css"/>
|
|
<script type="text/javascript" src="/lib/imaskjs-7.1.3/imask.min.js"></script>
|
|
<script type="text/javascript" src="/js/api.js?v=$version"></script>
|
|
<script type="text/javascript" src="/js/main.js?v=$version"></script>
|
|
<script type="text/javascript" src="/js/domhelper.js?v=$version"></script>
|
|
<link rel="stylesheet" href="/lib/fork-awesome-1.2.0/fork-awesome.min.css"/>
|
|
<link rel="stylesheet" href="/css/main.css?v=$version"/>
|
|
#if($css)
|
|
<link rel="stylesheet" href="${css}?v=$version"/>
|
|
#end
|
|
<script type="text/javascript">
|
|
const lang = '${request.lang}';
|
|
const locale = '${request.locale}';
|
|
// #[[
|
|
onLoad(() => {
|
|
$('body').removeClass('initial');
|
|
$('#lang').on('click', e => {
|
|
$('#lang-list').toggleClass('shown');
|
|
});
|
|
$('.lang').on('click', e => {
|
|
let lang = e.target.closest('.lang').data('lang');
|
|
document.location.href = document.location.href.replace(/\/[a-z]{2}\//, `/${lang}/`);
|
|
return false;
|
|
});
|
|
document.on('click', e => {
|
|
if ($('#lang-list').hasClass('shown') && !e.target.closest('.lang,#lang')) {
|
|
$('#lang-list').removeClass('shown');
|
|
}
|
|
});
|
|
$('.popup .popup-footer .close').on('click', e => {
|
|
let popup = e.target.closest('.popup');
|
|
if (popup) {
|
|
popup.classList.remove('shown');
|
|
$('body').removeClass('dimmed');
|
|
}
|
|
});
|
|
$('#logout').on('click', e => {
|
|
api.postJson('logout', {})
|
|
.then(ret => {
|
|
if (ret !== 'error') {
|
|
document.location.href = '/index';
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
// syntaxic sugar for IMask
|
|
NodeList.prototype.imask = function(options) {
|
|
this.forEach(function (elem, i) {
|
|
elem.imask(options);
|
|
});
|
|
return this;
|
|
}
|
|
HTMLInputElement.prototype.imask = function(options) {
|
|
IMask(this, options);
|
|
}
|
|
|
|
// ]]#
|
|
</script>
|
|
</body>
|
|
</html>
|