1 line
9.0 KiB
JavaScript

"use strict";const MAX_INPUT_SIZE=1048576;'serviceWorker'in navigator&&(console.log("Registering service worker"),navigator.serviceWorker.register('/sw.js'));class ConcPage{lang;tls;domWrapper;domUploaderWrapper;domResultsWrapper;domMainWrapper;constructor(d,e){this.lang=d,this.tls=Object.freeze(e);let c=document.createElement("div");c.id="contentWrapper",this.domWrapper=c;let a=document.createElement("div");a.id="uploader",a.classList.add("uploader"),this.domUploaderWrapper=a;let b=document.createElement("div");b.id="results",b.classList.add("results"),this.domResultsWrapper=b;let f=document.createElement("main");this.domMainWrapper=f}downloadFromString(b,c){const d=new Blob([c],{type:"text/plain"}),a=document.createElement("a");a.download=b,a.href=window.URL.createObjectURL(d),a.dataset.downloadurl=["text/plain",a.download,a.href].join(":");const e=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0});a.dispatchEvent(e),a.remove()}renderGenHeader(){const b=document.createElement("header");b.id="mainHeader";const a=document.createElement("a");a.id="logoArea",a.href="https://www.museum-digital.org/";const d=document.createElement("img");d.src="/static/img/mdlogo-code.svg",d.alt="Logo of museum-digital",a.appendChild(d);const l=document.createElement("h2");l.textContent="museum-digital",a.appendChild(l),b.appendChild(a);const c=document.createElement("nav"),f=document.createElement("a");f.href="https://en.about.museum-digital.org/about",f.textContent=this.tls.about,c.appendChild(f);const g=document.createElement("div"),h=document.createElement("a");h.textContent=this.tls.contact,h.href="https://en.about.museum-digital.org/contact/",g.appendChild(h);const i=document.createElement("div"),e=document.createElement("a");e.textContent=this.tls.imprint,e.href="https://en.about.museum-digital.org/impressum",i.appendChild(e);const j=document.createElement("a");j.textContent=this.tls.privacy_policy,j.href="https://en.about.museum-digital.org/privacy/",i.appendChild(j),g.appendChild(i),c.appendChild(g);const k=document.createElement("a");k.textContent=this.tls.news,k.href="https://blog.museum-digital.org/",c.appendChild(k),b.appendChild(c),document.body.appendChild(b)}renderHeader(){const b=document.createElement("header");b.id="appHeader";const c=document.createElement("h1"),a=document.createElement("img");a.width="70",a.height="70",a.src="/static/img/mdlogo-code.svg",a.alt="",c.appendChild(a),c.appendChild(this.createPlainTextElem("span","museum-digital:"+this.tls.concordance_checker)),b.appendChild(c),document.body.appendChild(b)}createP(b){const a=document.createElement("p");return a.textContent=b,a}createPlainTextElem(b,c){const a=document.createElement(b);return a.textContent=c,a}renderText(){const a=document.createElement("h2");a.textContent=this.tls.quality_assessment_tools,this.domMainWrapper.appendChild(a),this.domMainWrapper.appendChild(this.createP(this.tls.intro)),this.domWrapper.appendChild(this.domMainWrapper)}generateBoilerplateForTableSection(f){const a=document.createElement("div"),c=document.createElement("h3");c.textContent=f,a.appendChild(c);const b=document.createElement("table"),d=document.createElement("thead");b.appendChild(d);const e=document.createElement("tbody");return b.appendChild(e),a.appendChild(b),{section:a,thead:d,tbody:e}}generateListResponse(d,e,a,b){while(this.domResultsWrapper.firstChild)this.domResultsWrapper.removeChild(this.domResultsWrapper.firstChild);if(b.passed.length===void 0){const c=this.generateBoilerplateForTableSection(this.tls.passed),d=document.createElement("tr");for(const b of['Input','Match']){const a=document.createElement("th");a.textContent=b,d.appendChild(a)}c.thead.appendChild(d);for(const f in b.passed){const d=b.passed[f],e=document.createElement("tr");e.appendChild(this.createPlainTextElem("td",f)),a[d]?e.appendChild(this.createPlainTextElem("td",a[d])):(valueTd.textContent=d,e.appendChild(this.createPlainTextElem("td",d))),c.tbody.appendChild(e)}this.domResultsWrapper.appendChild(c.section)}const c=this;if(b.not_passed.length!==0){const f=this.generateBoilerplateForTableSection(this.tls.not_yet_matched),h=document.createElement("tr");for(const b of['Input','Select Your Match']){const a=document.createElement("th");a.textContent=b,h.appendChild(a)}f.thead.appendChild(h);let i=[];for(let e of b.not_passed){const d=document.createElement("tr");d.appendChild(this.createPlainTextElem("td",e));const g=document.createElement("td"),c=document.createElement("select");c.setAttribute('data-input',e);for(const d in a){const b=document.createElement("option");b.value=d,b.textContent=a[d],c.appendChild(b)}i.push(c),g.appendChild(c),d.appendChild(g),f.tbody.appendChild(d)}this.domResultsWrapper.appendChild(f.section);const g=document.createElement("button");g.textContent=this.tls.generate_code_snippet,f.section.appendChild(g);const j=document.createElement("div");g.addEventListener('click',function(){let g=[],h=!1;a[1]!==void 0&&a[1]!==null&&(h=!0);for(let a of i){let b=("'"+a.getAttribute("data-input")+"'").padEnd(40," ")+" => ";h===!0?b+=a.value+",":b+="'"+a.value+"',",b+=' // '+e[a.value],g.push(b),a.setAttribute("readonly","readonly")}const f=" ".repeat(8)+g.join("\n"+" ".repeat(8));console.log(f);const b=c.createP(f);b.id="resultsP",b.style.fontFamily="Monospace, Courier",b.style.whiteSpace="pre-wrap",j.appendChild(b),b.scrollIntoView({block:"start",behavior:"smooth"}),c.downloadFromString("new-concordance-"+d+'.htm',f)}),this.domResultsWrapper.appendChild(j)}this.domResultsWrapper.scrollIntoView({block:"start",behavior:"smooth"})}renderUploader(){const a=document.createElement("select"),e=document.documentElement.getAttribute("data-lists").split(',');for(const c of e){const b=document.createElement("option");b.textContent=this.tls[c],b.value=c,a.appendChild(b)}this.domUploaderWrapper.appendChild(a);const b=document.createElement("textarea");b.placeholder=this.tls.one_line_per_entry,this.domUploaderWrapper.appendChild(b);const c=document.createElement("button");c.textContent=this.tls.submit,this.domUploaderWrapper.appendChild(c);const d=this;c.addEventListener('click',async function(h){h.stopPropagation(),h.preventDefault();const e=await window.fetch('/static/json/tls.'+a.value+'.en.json',{method:'GET',cache:'no-cache'});if(e.status!==200){const a=await c.text();window.alert(a)}const i=await e.json(),f=await window.fetch('/static/json/tls.'+a.value+'.'+d.lang+'.json',{method:'GET',cache:'no-cache'});if(f.status!==200){const a=await c.text();window.alert(a)}const j=await f.json();let g=[];g.push('terms='+encodeURIComponent(b.value));const c=await window.fetch('/api/evaluate/'+a.value,{method:'POST',cache:'no-cache',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:g.join("&")});if(c.status!==200){const a=await c.text();window.alert(a)}const k=await c.json();d.generateListResponse(a.value,i,j,k)}),this.domWrapper.appendChild(this.domUploaderWrapper),this.domWrapper.appendChild(this.domResultsWrapper)}renderFooter(){const e=document.createElement("footer"),c=document.createElement("div");if('serviceWorker'in navigator){const a=document.createElement("span");a.textContent=this.tls.reload_application,a.setAttribute("tabindex",1),a.addEventListener('click',function(a){Promise.all(['conc-cache-v1'].map(function(a){caches.has(a).then(function(b){b===!0&&caches.delete(a).then(function(a){})})})),location.reload()},{passive:!0,once:!0}),c.appendChild(a)}const h=document.documentElement.getAttribute("data-allowed-langs").split(','),f=document.createElement("div");for(let b of h){const a=document.createElement("a");a.href="#"+b,a.textContent=b,a.style.textTranform="uppercase",a.addEventListener('click',function(a){a.preventDefault(),sessionStorage.setItem("lang",b),location.reload()}),f.appendChild(a)}c.appendChild(f),e.appendChild(c);const a=document.createElement("p"),d=document.createElement("a");d.textContent="MIT-Licensed",d.href="https://opensource.org/license/mit",a.appendChild(d),a.appendChild(this.createPlainTextElem("span"," @ "));const b=document.createElement("a");b.textContent="Joshua Ramon Enslin",b.href="https://www.jrenslin.de",b.setAttribute("rel","author"),a.appendChild(b),a.appendChild(this.createPlainTextElem("span",", "));const g=document.createElement("span");g.textContent="2023",a.appendChild(g),e.appendChild(a),document.body.appendChild(e)}}(async function(){function c(){const c=document.documentElement.getAttribute("data-allowed-langs").split(','),a=sessionStorage.getItem("lang");if(a!==void 0&&c.includes(a))return a;if(navigator.language===void 0)return'en';const b=navigator.language.toLowerCase().substr(0,2);return console.log(b),c.includes(b)?b:'en'}const a=c();document.documentElement.setAttribute("lang",a),document.body.classList.add("loading");let e=0,b;function d(){document.body.classList.remove("loading");const c=new ConcPage(a,b);c.renderGenHeader(),c.renderHeader(),c.renderText(),c.renderUploader(),document.body.appendChild(c.domWrapper),c.renderFooter()}window.fetch('/static/json/tls.'+a+'.json',{method:'GET',cache:'no-cache',credentials:'same-origin'}).then(function(a){return a.json()}).then(function(a){b=a,d()})})()