tools.cobbled-paths/templates/catalogue.html
2024-09-10 00:36:05 +02:00

158 lines
5.3 KiB
HTML

{% extends "base.html" %}
{% block body_class %}catalogue{% endblock %}
{% block body %}
<header class="controls">
<details class="collection-menu" id="collection-menu">
<summary id="current-figfont">swan.flf</summary>
<div>
{% for type, type_data in collection.items()%}
<details>
<summary>{{type}} <span>{{type_data['ascii']}}</span></summary>
<div class="collection" style="--index: {{loop.index}};">
{% for database in databases.keys() %}
{% set fonts = type_data['fonts']|selectattr('database', 'equalto', database) %}
{% for f in fonts %}
<div data-path="{{f['path']}}" data-name="{{f['name']}}" class="{{f['database']}} figfont">
<img class="thumbnail" src="{{f['thumbnail']}}">
{{f['name']}}
</div>
{% endfor %}
{% endfor %}
<a class="specimen-link" href="/specimen/{{type}}" target="_blank">see all {{type}}</a>
</div>
</details>
{% endfor %}
<div class="collection-menu-back">
{% for database, legend in databases.items() %}
<div class="legend {{database}}"><strong>{{database}}</strong> {{legend}}</div>
{% endfor %}
</div>
</div>
</details>
<hr>
<label>input</label>
<input class="get-input" id="text-input" type="text" value="{{params['text']}}" data-name="t" data-frame="svg-iframe"/>
<label for="upper-checkbox">uppercase</label>
<input id="upper-checkbox" type="checkbox"/>
<button id="button-svg">generate</button>
<label>weight</label>
<input class="get-input" type="range" min="1" max="8" value="{{params['weight']}}" data-name="w" data-frame="svg-iframe"/>
<!-- <label class="fix-label" for="fix-checkbox"
title="custom regex to try to map unrecognized character to ones that are processed by svgbob">
autofix</label>
<input id="fix-checkbox" type="checkbox"
class="body-class-check" value="check-fix" checked/> -->
</header>
<div class="font catalogue reload" id="main">
<iframe class="f-double" id="svg-iframe"
src="/writing/{{ 'static/db/jave/stroke/swan.flf'.split('/') | join('$') }}">
</iframe>
</div>
<script>
let button_svg = document.getElementById('button-svg');
let svg_iframe = document.getElementById('svg-iframe');
let pad_iframe = document.getElementById('pad-iframe');
let figfonts = document.querySelectorAll('.figfont');
let current = document.getElementById('current-figfont');
let new_url = new URL(svg_iframe.src);
function updateGET(frame, param, value){
// object from GET parameters
let [base_src, params_src] = frame.src.split("?");
let params = new URLSearchParams(params_src);
// update param
params.set(param, value);
// reconstituate URL
let new_src = base_src + "?" + params.toString();
// set and refresh
frame.src = new_src;
}
// --- change current figfont
for(let figfont of figfonts){
figfont.addEventListener('click', function(){
let encoded_path = figfont.dataset.path.split('/').join('$');
let figname = figfont.dataset.name;
let svg_src = svg_iframe.src;
svg_src = svg_src.split('/');
svg_src[svg_src.length-1] = encoded_path;
svg_src = svg_src.join('/');
current.innerHTML = figname;
new_url = new URL(svg_src);
document.getElementById('main').classList.add("reload");
document.getElementById('collection-menu').removeAttribute("open");
svg_iframe.src = svg_src;
});
}
// --- svg generation button
button_svg.addEventListener('click', function(){
svg_iframe.src = new_url;
document.getElementById('main').classList.add("reload");
});
// --- get-input but on the pad and checkbox but on the pad
let inputs = document.getElementsByClassName('get-input');
for(let input of inputs){
input.addEventListener('change', function(){
let frame = document.getElementById(input.dataset.frame);
const url = new URL(frame.src);
if(input.type == 'checkbox'){
url.searchParams.set(input.dataset.name, input.checked);
}
else{
url.searchParams.set(input.dataset.name, input.value);
}
new_url = url;
});
}
let upper_checkbox = document.getElementById('upper-checkbox');
let text_input = document.getElementById('text-input');
upper_checkbox.addEventListener('change', function(){
if(upper_checkbox.checked){
text_input.value = text_input.value.toUpperCase();
let frame = document.getElementById("svg-iframe");
const url = new URL(frame.src);
url.searchParams.set(text_input.dataset.name, text_input.value);
new_url = url;
}
else{
text_input.value = text_input.value.toLowerCase();
let frame = document.getElementById("svg-iframe");
const url = new URL(frame.src);
url.searchParams.set(text_input.dataset.name, text_input.value);
new_url = url;
}
})
svg_iframe.addEventListener("load", function() {
document.getElementById('main').classList.remove("reload");
});
</script>
{% endblock %}