Download raw (3.4 KB)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> body { height: 100vh; overflow: auto; display: grid; grid-template-columns: 1fr 400px; font-size: 16px; font-family: sans-serif; padding: 2rem; column-gap: 2rem; margin: 0; box-sizing: border-box; } label { display: block; margin: .5rem 0; } main { font-family: 'stroke'; padding: 10px; font-size: 10vh; } #downloadLink { word-break: break-all; margin: .5rem 0; } #fontPublicStyles { width: 100%; height: 9rem; margin: .5rem 0; } </style> </head> <body> <main contenteditable> A quiver in the spine of the R. </main> <aside> <label>Skeleton: <select name="skeleton">{% for skeleton in skeletons %}<option value="{{ skeleton }}">{{ skeleton }}</option>{% endfor %}</select></label> <label>Scale X: <input type="number" name="scaleX" min="0" max="2" value="1" step=".1"></label> <label>Scale Y: <input type="number" name="scaleY" min="0" max="2" value="1" step=".1"></label> <label>Skew: <input type="number" name="skew" min="-70" max="70" value="0"></label> <label>Pen: <select name="pen"><option value="elliptical">elliptical</option></select></label> <label>Pen width: <input type="number" name="penWidth" min="10" max="1000" value="20"></label> <label>Pen minor width: <input type="number" name="penMinorWidth" min="10" max="1000" value="20"></label> <label>Pen angle: <input type="number" name="penAngle" min="0" max="90" value="30"></label> <a id="downloadLink" download></a> <textarea id="fontPublicStyles" rows="5"></textarea> </aside> <style id="fontStyles"> </style> <script> const elements = document.querySelectorAll('input, select'); const state = {}; // Add listeneres for fields changing for (let i = 0; i < elements.length; i++) { const field = elements[i]; state[field.name] = field.value; field.addEventListener('change', function () { // Update state state[this.name] = this.value; // Refresh font loadFont(); }) } function loadFont () { // const url = new URL(document.location.host + '/font'); // url.protocol = document.location.protocol; // // Extract data from state and add to url // for (key in state) { // url.searchParams.set(key, state[key]); // } const searchParams = new URLSearchParams(state), fontURL = '/font?' + searchParams.toString(), downloadLink = document.getElementById('downloadLink'), fontStyles = document.getElementById('fontStyles'), fontPublicStyles = document.getElementById('fontPublicStyles'), fontName = `stroke-${state.skeleton}-${state.scaleX}-${state.scaleY}-${state.skew}-${state.pen}-${state.penWidth}-${state.penMinorWidth}-${state.penAngle}`; console.log(fontURL); downloadLink.href = fontURL; downloadLink.innerText = '↓ ' + fontURL; fontPublicStyles.textContent = `@font-face {\n font-family: "${ fontName }";\n src: url("${fontURL}");\n}`; fontStyles.innerHTML = `@font-face { font-family: "stroke"; src: url("${fontURL}")}`; } loadFont(); </script> </body> </html>