From 05d6865cb3448d18a170b024649d6264fc5a848d Mon Sep 17 00:00:00 2001 From: Joshua Ramon Enslin Date: Mon, 7 Nov 2022 21:11:34 +0100 Subject: [PATCH] Move minifying and bundling JS and CSS to compile.php, add header Close #17 --- l10n/importer | 2 +- public/assets/css/csvxml.css | 74 ++++++++++++- public/assets/css/csvxml.min.css | 36 +------ public/assets/img/mdlogo-code-128px.png | Bin 0 -> 1957 bytes public/assets/js/csvxmlV2.js | 73 ++++++++++++- public/assets/js/csvxmlV2.min.js | 135 +++++++++++++----------- public/index.htm | 4 +- public/json/tls.de.json | 2 +- public/json/tls.en.json | 2 +- public/json/tls.hu.json | 2 +- scripts/compile.php | 20 +++- 11 files changed, 236 insertions(+), 114 deletions(-) create mode 100644 public/assets/img/mdlogo-code-128px.png diff --git a/l10n/importer b/l10n/importer index a596774..22603ca 160000 --- a/l10n/importer +++ b/l10n/importer @@ -1 +1 @@ -Subproject commit a5967745828dc7c1f72039821d4859ba708d38f3 +Subproject commit 22603ca7b823b5191ae64c58ce9e9526b279ffe3 diff --git a/public/assets/css/csvxml.css b/public/assets/css/csvxml.css index 52dc75a..be85ac6 100644 --- a/public/assets/css/csvxml.css +++ b/public/assets/css/csvxml.css @@ -1,11 +1,13 @@ -@import 'editMenu.css'; +/* + * @import 'editMenu.css'; @import 'dialogue.css'; + */ :root { --color-bg-normal: #FFF; --color-bg-raised: #EEE; --color-bg-raised2: #FAFAFA; --color-fg-normal: #000; - --color-fg-less: #212121; + --color-fg-less: #212121; --color-borders: #D6D6D6; --color-borders-dark: #646464; @@ -48,12 +50,14 @@ * { box-sizing: border-box; z-index: 1; } -body { margin: 2em; background: var(--color-bg-normal); color: var(--color-fg-normal); +body { margin: 0; background: var(--color-bg-normal); color: var(--color-fg-normal); font-family: sourceSansPro, Arial, Helvetica, Times; font-size: 1.2em; line-height: 1.5em; } a { text-decoration: none; color: inherit; } -h1 { display: block; max-width: 600px; margin: 0 auto 1.5em auto; line-height: 1.2em; } +h1 { display: block; width: 100%; text-align: center; margin: 0 auto 1.5em auto; + padding: 1em 0; + font-size: 2.5em; line-height: 1.2em; } h1 > * { display: inline-block; vertical-align: middle; color: var(--color-fg-less); } h1 img { height: 2em; margin-right: .5em; border-radius: .1em; opacity: .7; transition: opacity .4s; } h1 img:hover { opacity: 1; } @@ -121,7 +125,7 @@ ul.fieldList { display: block; margin: .5em 0; padding: 0 0; list-style: none; } ul.fieldList > li { display: inline-block; margin: .1em; padding: .3em; border: 1px solid var(--color-borders); background: var(--color-bg-raised2); color: var(--color-fg-normal); - cursor: pointer; transition: background .4s, border .4s, box-shadow .4s;; } + cursor: pointer; transition: background .4s, border .4s, box-shadow .4s; } ul.fieldList > li:hover { background: var(--color-bg-normal); border-color: var(--color-fg-less); } ul.fieldList > li.requiredField:before { display: inline-block; content: " \002612 "; margin-right: .5em; } ul.fieldList > li.humanTLToggled { border-color: var(--color-accent-hover); background: var(--color-accent-hover); box-shadow: 0 8px 6px -6px black; } @@ -155,7 +159,67 @@ ul.fieldList > li.humanTLToggled { border-color: var(--color-accent-hover); back to { transform: rotate(360deg); } } + +header { display: block; width: 100%; padding: 0 2em; font-size: 1rem; z-index: 2; } +header#mainHeader { margin-bottom: 2em; + background: var(--color-fg-less); color: var(--color-bg-raised2); display: table; } +header#mainHeader > * { display: table-cell; } +@media screen and (max-width: 70em) { + header#mainHeader > * { min-width: 20%; } +} +header#mainHeader > *:last-child { text-align: right; } + +header#mainHeader, header#mainHeader * { z-index: 5; } +header#mainHeader:hover, +header#mainHeader *:hover { z-index: 6; } +header * { z-index: 2; } +header > * { display: inline-block; vertical-align: middle; } + +header h2 { font-size: 1.1em; color: inherit; } + +header select { background: inherit; font-size: .85rem; border: 0; } +header select option { color: var(--color-fg-normal); } + +header nav { color: var(--color-bg-raised2); } +header nav > * { position: relative; display: inline-block; flex: 1; font-size: 1rem; padding: .7em 0; } + +header#mainHeader img { display: inline-block; height: 1.9em; margin-right: .5em; vertical-align: middle; filter: invert(1); transition: opacity .4s; } +header#mainHeader h2 { display: inline-block; vertical-align: middle; font-weight: normal; } +header#mainHeader > a:focus > img, +header#mainHeader > a:hover > img { opacity: .7; } + +@media screen and (min-width: 75em) { + + header nav > div > div { display: none; position: absolute; right: 0; top: 100%; width: 300px; + background: var(--color-fg-less); text-align: left; } + header nav > div > a { padding: .95em 1em; transition: background .4s, color .4s; } + header nav > div:focus > a, + header nav > div:hover > a { color: var(--color-gray); } + header nav > div > a:focus + div, + header nav > div:hover > div { display: block; animation: fade-in .4s; } + header nav > div > a:focus + div > a, + header nav > div:hover > div > a { display: block; padding: .5em 1em; cursor: pointer; + transition: background .4s, color .4s; } + header nav > div > a:focus + div > a:focus, + header nav > div:hover > div > a:hover { background: var(--color-fg-normal); color: var(--color-bg-normal); } + header { padding: 0 10em; } +} + @media screen and (max-width: 75em) { body { font-size: 1.08em; } h1 img { display: none; } + header .branding { padding: .7rem; } + header nav:before { content: " \2630 "; display: inline-block; position: absolute; right: 3rem; top: 0; + padding: .8rem 0; font-size: 1.5em; text-align: right; } + header nav > * { display: none; } + + header nav:hover:before { display: none; } + header nav:hover { position: absolute; left: 0; top: 0; display: flex; + width: 100%; min-height: 90vh; padding: 2em 1em .5em 1em; background: var(--color-bg-normal); color: var(--color-fg-normal); + border-bottom: 1px solid var(--color-borders); box-shadow: 2px 2px 4px var(--color-borders); + z-index: 3; animation: fade-in .4s; } + + header nav:hover > * { display: block; flex: 1; min-width: 40vw; padding: 1em; font-size: 1em; } + header nav:hover > div a { display: block; padding: .2em 0; } + header { padding: 0 1em; } } diff --git a/public/assets/css/csvxml.min.css b/public/assets/css/csvxml.min.css index 86b2e44..15f9bbb 100644 --- a/public/assets/css/csvxml.min.css +++ b/public/assets/css/csvxml.min.css @@ -1,35 +1 @@ -@import 'editMenu.css';@import 'dialogue.css';:root{--color-bg-normal:#FFF;--color-bg-raised:#EEE;--color-bg-raised2:#FAFAFA;--color-fg-normal:#000;--color-fg-less:#212121;--color-borders:#D6D6D6;--color-borders-dark:#646464;--color-accent-normal:#FFCCBC;--color-accent-hover:#CB9B8C} -@media(prefers-color-scheme:dark){:root{--color-bg-normal:#000;--color-bg-raised:#273000;--color-bg-raised2:#121212;--color-fg-normal:#FFF;--color-fg-less:#EEE;--color-borders:#37474F;--color-borders-dark:#BDBDBD;--color-accent-normal:#FFC107;--color-accent-hover:#FFA000}} -@font-face{font-family:sourceSansPro;src:local('Source-Sans-Pro'),local('Source Sans Pro'),url(../fonts/SourceSansPro-Regular.woff2)format('woff2'),url(../fonts/SourceSansPro-Regular.ttf)format('truetype');font-display:swap}*{box-sizing:border-box;z-index:1} -body{margin:2em;background:var(--color-bg-normal);color:var(--color-fg-normal);font-family:sourceSansPro,Arial,Helvetica,Times;font-size:1.2em;line-height:1.5em} -a{text-decoration:none;color:inherit} -h1{display:block;max-width:600px;margin:0 auto 1.5em auto;line-height:1.2em} -h1>*{display:inline-block;vertical-align:middle;color:var(--color-fg-less)} -h1 img{height:2em;margin-right:.5em;border-radius:.1em;opacity:.7;transition:opacity.4s} -h1 img:hover{opacity:1} -main,body>div,body>form{display:block;max-width:90vw;margin:0 auto 3em auto;padding-bottom:3em} -form>div{margin-bottom:1em} -label{display:block;font-weight:bold;margin-bottom:.5em}.invisible{display:none!important;opacity:0}.buttonLike,select,button,textarea,input{display:block;width:100%;padding:.5em.5em;border:2.5px solid var(--color-bg-raised);background:inherit;color:var(--color-fg-less);font-family:roboto;font-size:1em;border-radius:.2em;transition:border.2s}.buttonLike{display:inline-block;text-align:center} -input[type="submit"],button{padding:.5em.8em}.buttonLike,input[type="submit"],button{background:var(--color-accent-normal);color:var(--color-fg-less);border:none;font-weight:bold;text-transform:uppercase;transition:background.2s,color.2s} -textarea{line-height:1.2em} -select:hover,textarea:hover,input:hover{border-color:#888}.buttonLike:focus,input[type="submit"]:focus,button:focus,.buttonLike:hover,input[type="submit"]:hover,button:hover{background:var(--color-accent-hover);color:#000} -aside.buttonLike+.buttonLike,aside button+button{margin-top:.5em} -aside>h4:first-child{margin-top:0} -select:focus,textarea:focus,input:focus{border-color:var(--color-accent-hover);box-shadow:none} -textarea:invalid,input:invalid{box-shadow:none} -textarea:invalid:focus,input:invalid:focus{border-right-width:1em} -textarea{min-height:30vh} -table{width:100%;max-height:60vh;margin:2em 0;border-collapse:collapse;overflow:auto} -th{padding:.3em.5em;text-align:left;border-bottom:2px solid var(--color-fg-less)} -tbody>tr:nth-child(2n+1){background:var(--color-bg-raised2)} -td{padding:.3em.5em;border-bottom:1px solid var(--color-borders)} -body>div.uploader{background:var(--color-bg-raised2);border:2px solid var(--color-bg-raised);padding:1em 1em} -ul.fieldList{display:block;margin:.5em 0;padding:0 0;list-style:none} -ul.fieldList>li{display:inline-block;margin:.1em;padding:.3em;border:1px solid var(--color-borders);background:var(--color-bg-raised2);color:var(--color-fg-normal);cursor:pointer;transition:background.4s,border.4s,box-shadow.4s} -ul.fieldList>li:hover{background:var(--color-bg-normal);border-color:var(--color-fg-less)} -ul.fieldList>li.requiredField:before{display:inline-block;content:" \002612 ";margin-right:.5em} -ul.fieldList>li.humanTLToggled{border-color:var(--color-accent-hover);background:var(--color-accent-hover);box-shadow:0 8px 6px-6px black}.options>.buttonLike{display:inline-block;width:auto;margin:.15em 0;padding:.4em.5em;text-transform:inherit;cursor:pointer;background:initial;border:2px solid var(--color-borders);opacity:1;transition:background.4s,opacity.4s}.options>.buttonLike:hover{background:var(--color-borders)}.actionList{margin:1em 0 1em 1em;padding:.5em 0}.actionList>li a{display:inline-block;padding:.3em;border-radius:.3em;transition:background.4s}.actionList>li a:hover{background:var(--color-accent-hover)}.loading:before,.loading:after{content:" ";display:block;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);height:64px;width:64px;margin:0;padding:0;border-radius:50%;border:8px solid var(--color-accent-hover);border-color:var(--color-accent-hover)transparent transparent transparent;z-index:100;animation:rotating 1.2s cubic-bezier(0.5,0,0.5,1)infinite;animation-delay:-0.15s}.loading:after{animation-delay:-0.45s} -@keyframes rotating{from{transform:rotate(0deg)} -to{transform:rotate(360deg)}} -@media screen and(max-width:75em){body{font-size:1.08em} -h1 img{display:none}} \ No newline at end of file +.newToolTip{position:fixed;display:none!important;min-width:300px!important;max-width:600px;background:var(--color-fg-less)!important;color:var(--color-bg-normal);text-align:left;font-size:.95rem;border-radius:.2em;box-shadow:1px 1px 4px var(--color-borders-dark);z-index:3000;white-space:initial!important}#newToolTipMain:before{content:attr(data-title);display:block;padding:.5em 1em;max-width:598px;background:var(--color-fg-less);color:var(--color-bg-raised2);font-weight:700;box-shadow:0 4px 2px -2px var(--color-borders-dark)}#newToolTipMain>*{padding:.5rem 1rem!important}#newToolTipMain>table td{padding:.5rem 1em;vertical-align:top}@media screen and (min-width:75em){#newToolTipMain.visible{display:block!important}}#newToolTipMain img{max-width:200px;max-height:300px}dl#newToolTipMain dt{padding-bottom:0;font-weight:700}dl#newToolTipMain dd{margin:-1em 0 0;padding:0}.newToolTipMain p+.toolTipHierarchy{padding-bottom:0!important}#newToolTipMain>h5{padding:0 1rem!important;margin:-.5rem 0!important}.copyToDialogue{cursor:pointer}@keyframes pulseBorderSize{0%{border-width:1em}50%{border-width:1.2em}100%{border-width:1em}}@keyframes fade-in-and-vanish{0%{opacity:0;z-index:1000}5%{opacity:.4}15%{opacity:1;padding:.8em}75%{opacity:1;padding:.8em}85%{opacity:.4;transform:translateY(0px)}99%{opacity:0;transform:translateY(-30px)}100%{opacity:0;z-index:0}}#dialogueArea{display:block;position:fixed;left:0;top:0;width:100%;height:100%;max-width:initial;max-height:initial;background:rgba(0,0,0,.7);backdrop-filter:blur(3px);z-index:10000}#dialogue{display:block;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);min-width:60vw;min-height:2em;max-width:90vw;max-height:90vh;overflow-y:auto;padding:1.5em 1em;background:var(--color-bg-normal);border-radius:.3em;box-shadow:2px 2px 4px var(--color-fg-less),-2px -2px 4px var(--color-fg-less)}#dialogue h3{margin-top:0;padding-top:0;text-transform:initial;color:var(--color-fg-less)}#confirmButtons{text-align:right}#dialogue .buttonLike{margin:.5em 0 .2em .5em;background:0 0;transition:background .4s,color .4s}#dialogue .buttonLike:hover{background:var(--color-borders-dark);color:var(--color-bg-normal)}#dialogue input[type=text],#dialogue textarea{padding:.5em;border-radius:.1em;border:2px solid var(--color-borders);transition:border .4s}#dialogue input[type=text]:hover,#dialogue textarea:hover{border-color:var(--color-fg-normal)}#dialogue button{padding:.6em .8em;font-size:.8em;background:var(--color-bg-normal);border:1px solid var(--color-borders);transition:.4s}#dialogue button:focus,#dialogue button:hover{background:var(--color-fg-less);color:var(--color-bg-normal);border-color:var(--color-fg-less)}#dialogue form>*{display:block;width:100%}#dialogue form label{font-weight:700;color:var(--color-fg-less)}#dialogueClose{float:right;display:inline-block;padding:0 .6em .2em;background:var(--color-bg-raised);border-radius:100%;cursor:pointer;transition:.4s}#dialogueClose:hover{background:var(--color-fg-less);color:var(--color-bg-normal)}#dialogue ul{margin-left:1em;padding-left:0;transition:.4s}#dialogue ul.minimized{height:20px;background-color:var(--color-accent-normal);background-size:20px 20px;background-image:repeating-linear-gradient(to right,var(--color-fg-normal),var(--color-fg-normal) 1px,var(--color-accent-normal) 1px,var(--color-accent-normal))}#dialogue ul.minimized>*{display:none}:root{--color-bg-normal: #FFF;--color-bg-raised: #EEE;--color-bg-raised2: #FAFAFA;--color-fg-normal: #000;--color-fg-less: #212121;--color-borders: #D6D6D6;--color-borders-dark: #646464;--color-accent-normal: #FFCCBC;--color-accent-hover: #CB9B8C}@media(prefers-color-scheme:dark){:root{--color-bg-normal: #000;--color-bg-raised: #273000;--color-bg-raised2: #121212;--color-fg-normal: #FFF;--color-fg-less: #EEE;--color-borders: #37474F;--color-borders-dark: #BDBDBD;--color-accent-normal: #FFC107;--color-accent-hover: #FFA000}}@font-face{font-family:sourceSansPro;src:local(Source-Sans-Pro),local('Source Sans Pro'),url(../fonts/SourceSansPro-Regular.woff2) format('woff2'),url(../fonts/SourceSansPro-Regular.ttf) format('truetype');font-display:swap}*{box-sizing:border-box;z-index:1}body{margin:0;background:var(--color-bg-normal);color:var(--color-fg-normal);font-family:sourceSansPro,Arial,Helvetica,Times;font-size:1.2em;line-height:1.5em}a{text-decoration:none;color:inherit}h1{display:block;width:100%;text-align:center;margin:0 auto 1.5em;padding:1em 0;font-size:2.5em;line-height:1.2em}h1>*{display:inline-block;vertical-align:middle;color:var(--color-fg-less)}h1 img{height:2em;margin-right:.5em;border-radius:.1em;opacity:.7;transition:opacity .4s}h1 img:hover{opacity:1}main,body>div,body>form{display:block;max-width:90vw;margin:0 auto 3em;padding-bottom:3em}form>div{margin-bottom:1em}label{display:block;font-weight:700;margin-bottom:.5em}.invisible{display:none!important;opacity:0}.buttonLike,select,button,textarea,input{display:block;width:100%;padding:.5em;border:2.5px solid var(--color-bg-raised);background:inherit;color:var(--color-fg-less);font-family:roboto;font-size:1em;border-radius:.2em;transition:border .2s}.buttonLike{display:inline-block;text-align:center}input[type=submit],button{padding:.5em .8em}.buttonLike,input[type=submit],button{background:var(--color-accent-normal);color:var(--color-fg-less);border:none;font-weight:700;text-transform:uppercase;transition:background .2s,color .2s}textarea{line-height:1.2em}select:hover,textarea:hover,input:hover{border-color:#888}.buttonLike:focus,input[type=submit]:focus,button:focus,.buttonLike:hover,input[type=submit]:hover,button:hover{background:var(--color-accent-hover);color:#000}aside .buttonLike+.buttonLike,aside button+button{margin-top:.5em}aside>h4:first-child{margin-top:0}select:focus,textarea:focus,input:focus{border-color:var(--color-accent-hover);box-shadow:none}textarea:invalid,input:invalid{box-shadow:none}textarea:invalid:focus,input:invalid:focus{border-right-width:1em}textarea{min-height:30vh}table{width:100%;max-height:60vh;margin:2em 0;border-collapse:collapse;overflow:auto}th{padding:.3em .5em;text-align:left;border-bottom:2px solid var(--color-fg-less)}tbody>tr:nth-child(2n+1){background:var(--color-bg-raised2)}td{padding:.3em .5em;border-bottom:1px solid var(--color-borders)}body>div.uploader{background:var(--color-bg-raised2);border:2px solid var(--color-bg-raised);padding:1em}ul.fieldList{display:block;margin:.5em 0;padding:0;list-style:none}ul.fieldList>li{display:inline-block;margin:.1em;padding:.3em;border:1px solid var(--color-borders);background:var(--color-bg-raised2);color:var(--color-fg-normal);cursor:pointer;transition:background .4s,border .4s,box-shadow .4s}ul.fieldList>li:hover{background:var(--color-bg-normal);border-color:var(--color-fg-less)}ul.fieldList>li.requiredField:before{display:inline-block;content:" \002612 ";margin-right:.5em}ul.fieldList>li.humanTLToggled{border-color:var(--color-accent-hover);background:var(--color-accent-hover);box-shadow:0 8px 6px -6px #000}.options>.buttonLike{display:inline-block;width:auto;margin:.15em 0;padding:.4em .5em;text-transform:inherit;cursor:pointer;background:initial;border:2px solid var(--color-borders);opacity:1;transition:background .4s,opacity .4s}.options>.buttonLike:hover{background:var(--color-borders)}.actionList{margin:1em 0 1em 1em;padding:.5em 0}.actionList>li a{display:inline-block;padding:.3em;border-radius:.3em;transition:background .4s}.actionList>li a:hover{background:var(--color-accent-hover)}.loading:before,.loading:after{content:" ";display:block;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);height:64px;width:64px;margin:0;padding:0;border-radius:50%;border:8px solid var(--color-accent-hover);border-color:var(--color-accent-hover) transparent transparent transparent;z-index:100;animation:rotating 1.2s cubic-bezier(0.5,0,0.5,1) infinite;animation-delay:-.15s}.loading:after{animation-delay:-.45s}@keyframes rotating{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}header{display:block;width:100%;padding:0 2em;font-size:1rem;z-index:2}header#mainHeader{margin-bottom:2em;background:var(--color-fg-less);color:var(--color-bg-raised2);display:table}header#mainHeader>*{display:table-cell}@media screen and (max-width:70em){header#mainHeader>*{min-width:20%}}header#mainHeader>*:last-child{text-align:right}header#mainHeader,header#mainHeader *{z-index:5}header#mainHeader:hover,header#mainHeader *:hover{z-index:6}header *{z-index:2}header>*{display:inline-block;vertical-align:middle}header h2{font-size:1.1em;color:inherit}header select{background:inherit;font-size:.85rem;border:0}header select option{color:var(--color-fg-normal)}header nav{color:var(--color-bg-raised2)}header nav>*{position:relative;display:inline-block;flex:1;font-size:1rem;padding:.7em 0}header#mainHeader img{display:inline-block;height:1.9em;margin-right:.5em;vertical-align:middle;filter:invert(1);transition:opacity .4s}header#mainHeader h2{display:inline-block;vertical-align:middle;font-weight:400}header#mainHeader>a:focus>img,header#mainHeader>a:hover>img{opacity:.7}@media screen and (min-width:75em){header nav>div>div{display:none;position:absolute;right:0;top:100%;width:300px;background:var(--color-fg-less);text-align:left}header nav>div>a{padding:.95em 1em;transition:background .4s,color .4s}header nav>div:focus>a,header nav>div:hover>a{color:var(--color-gray)}header nav>div>a:focus+div,header nav>div:hover>div{display:block;animation:fade-in .4s}header nav>div>a:focus+div>a,header nav>div:hover>div>a{display:block;padding:.5em 1em;cursor:pointer;transition:background .4s,color .4s}header nav>div>a:focus+div>a:focus,header nav>div:hover>div>a:hover{background:var(--color-fg-normal);color:var(--color-bg-normal)}header{padding:0 10em}}@media screen and (max-width:75em){body{font-size:1.08em}h1 img{display:none}header .branding{padding:.7rem}header nav:before{content:" \2630 ";display:inline-block;position:absolute;right:3rem;top:0;padding:.8rem 0;font-size:1.5em;text-align:right}header nav>*{display:none}header nav:hover:before{display:none}header nav:hover{position:absolute;left:0;top:0;display:flex;width:100%;min-height:90vh;padding:2em 1em .5em;background:var(--color-bg-normal);color:var(--color-fg-normal);border-bottom:1px solid var(--color-borders);box-shadow:2px 2px 4px var(--color-borders);z-index:3;animation:fade-in .4s}header nav:hover>*{display:block;flex:1;min-width:40vw;padding:1em;font-size:1em}header nav:hover>div a{display:block;padding:.2em 0}header{padding:0 1em}} \ No newline at end of file diff --git a/public/assets/img/mdlogo-code-128px.png b/public/assets/img/mdlogo-code-128px.png new file mode 100644 index 0000000000000000000000000000000000000000..99e028cdee9bc3dc13b5a9a3ed9efe237d313fd6 GIT binary patch literal 1957 zcmb_dc{JPG7XAexEm|%OC3RbO8QZI&gP~q|X0CdgmJXqWtK>?87($CGHKa7<(wc|H zP&GtV4Jk1XL6o3ZNO}$7hANsEQyw?{+HSP+UI=h>~9mDoorh@NDzaE~qlK+#Vg1chh z!H*-7pK_J?$I|C8juKpNG@0TzM?R&mVyKerV8`(jmxgNUeN=wJw1c2JI(N)jes)iY z(z3YFJ{zlw3|F;d-6mty>DY|xtxorG3s;SJndd=&FsOvP(JLJ4(>bxCldpSdQ^(|7 zmE>cL)q!9u;EyDLArH#>K@4sy;YotD!~TarMok!4!Z&P{LzFtImdb5zZe~tT*SI7= zoI5eB*PsqhIR_o>g_b1t0={DbKl`znFy)g3_{T87caD_E{rJ6j< zKsIV~0DXLIWAgCAlMs^@FL% zzn;m&N!)1(m&anU^E(L%l957zb)zyWegs#|r1sj$8iz(}RkW5$mmoI_)-3z0GEzprxhcr8hy1Kgg z9j~ut@e#d!eaz8O3(|vweOlOY0~iB_7KhvJLgi#6gO)}$@OvLBZ(Q~8cot^l>5a7JgW44^cr2-@CE7`J%X3oJOOSS5$}r7*3P?g$ozT ztE#$3M&t@EM?LO)`aM^Kd2WB8VBS9Oa+C`1eSRF4ot2l@&0;BI*a?WkCr+FQ=g)zG znXjA6q)j(R-DjQI=X?Ri*&|UKi}F+_cX#*2<>j%<(CXQ)K%=S*gl@hQFKV)(Is-8P zm-)cqRGk?dFn%NyuKR+`Y4meo4x^LpmQP;ozweE zOdjl;3U?XqAk61qEsXM}cC>6D#%dnwnwNOsAK@`!tq!de4gk^A`%d zu;v#Ton47XYtdt6EwzR?j&?X7R756wP3o}_b*tc_mSqmkumQ_X@Pua>t_l_gBPN!7 zd2HH!Ln^7V|DBRKFF$f6+c%F2U! zlhd(~)Siuvx7-FI@lds!39Yn}DDu$hN!*M1TGHkoSsyGU=w3J+t{=a2xbAjU77+gx zh?y%)SE_SW>u>u@l{~``|R-7{%^85s*1+6?&hd>zT+QIAGn@Bj`Qgw6nv$8? z{+=*+me=2JFQ^@2F!o%^-c#TIp7}UM(!h2KU@%+3pINoy_qSIy`W}4UIP~gzg=Zd0 znbi_;PKQ@$_TUSjYm4|i+m+alO}0{>H5%*Z@{1@GQic>@V{5B_@uCfBIDTTerz1|P zpYPEYZG8qhruVX(X|9`qN)_C-5!Xo}k$zpybtt7rh&15D`p!S2tGPITf22aPNLSKy)!c>S3frMnrIXX#Sc^>PycsO zx`ufAPyorwjoRIs-QjadY=3|Mi^=3zMOC5|tZlEN ztV~kWNF}E2dlo~!!v!Fqa~AHDZ(=>QCTb2p3`PQOMjxA;wAT|!MS7&_P|=Su(`&XT z<+P2K^y>bYWqwBt)}!`@|;y15C@QhyFAcgFt*x!2HW z$8UfjLgp&OK{Gwcrg$ElT!#Kt(8~=%Wa`7)J|zs$=@8x1r|oOwp^2Yh1cU6o(`PqX wZ`y8lo*yC)mZ%p$WTXwd{Xa*^zplwMQ@v;6ow@i@T{Kbwdut~viiKzFpBO!?qW}N^ literal 0 HcmV?d00001 diff --git a/public/assets/js/csvxmlV2.js b/public/assets/js/csvxmlV2.js index a1dab42..bcd2145 100644 --- a/public/assets/js/csvxmlV2.js +++ b/public/assets/js/csvxmlV2.js @@ -502,6 +502,8 @@ class CsvxmlPage { listValidationErrors(validator) { + console.log("Listing validation errors"); + const dialogueContent = document.createElement("div"); const headline = document.createElement("h3"); @@ -571,17 +573,21 @@ class CsvxmlPage { let app = this; + document.body.classList.add("loading"); + reader.onload = function() { // On loading success, check if the upload is valid JSON console.log("Read file"); // Validate the file let validator = new CsvxmlValidator(app.fieldListFlat, reader.result); + document.body.classList.remove("loading"); if (validator.isValid() === true) { alert("Document is valid. Press ok to download."); app.zipUploadToXml(validator); } else { + console.log("Identified invalid upload document"); app.listValidationErrors(validator); } @@ -592,9 +598,69 @@ class CsvxmlPage { } - renderHeader() { + renderGenHeader() { const header = document.createElement("header"); + header.id = "mainHeader"; + + const logoArea = document.createElement("a"); + logoArea.id = "logoArea"; + logoArea.href = "https://www.museum-digital.org/"; + + const logoImg = document.createElement("img"); + logoImg.src = "assets/img/mdlogo-code-128px.png"; + logoImg.alt = "Logo of museum-digital"; + logoArea.appendChild(logoImg); + + const h2 = document.createElement("h2"); + h2.textContent = "museum-digital"; + logoArea.appendChild(h2); + + header.appendChild(logoArea); + + // Right side of the header + const nav = document.createElement("nav"); + + const lAbout = document.createElement("a"); + lAbout.href = "https://en.about.museum-digital.org/about"; + lAbout.textContent = this.tls.about; + nav.appendChild(lAbout); + + const lContactList = document.createElement("div"); + + const lContact = document.createElement("a"); + lContact.textContent = this.tls.contact; + lContact.href = "https://en.about.museum-digital.org/contact/"; + lContactList.appendChild(lContact); + + const lContactDiv = document.createElement("div"); + + const lImprint = document.createElement("a"); + lImprint.textContent = this.tls.imprint; + lImprint.href = "https://en.about.museum-digital.org/impressum"; + lContactDiv.appendChild(lImprint); + + const lPrivacy = document.createElement("a"); + lPrivacy.textContent = this.tls.privacy_policy; + lPrivacy.href = "https://en.about.museum-digital.org/privacy/"; + lContactDiv.appendChild(lPrivacy); + + lContactList.appendChild(lContactDiv); + nav.appendChild(lContactList); + + const lNews = document.createElement("a") + lNews.textContent = this.tls.news; + lNews.href = "https://blog.museum-digital.org/"; + nav.appendChild(lNews); + + header.appendChild(nav); + document.body.appendChild(header); + + } + + renderHeader() { + + const appHeader = document.createElement("header"); const h1 = document.createElement("h1"); @@ -609,9 +675,9 @@ class CsvxmlPage { h1Span.textContent = "museum-digital:csvxml"; h1.appendChild(h1Span); - header.appendChild(h1); + appHeader.appendChild(h1); - document.body.appendChild(header); + document.body.appendChild(appHeader); } @@ -919,6 +985,7 @@ class CsvxmlPage { document.body.classList.remove("loading"); const page = new CsvxmlPage(fieldList, tls); + page.renderGenHeader(); page.renderHeader(); page.renderUploader(); page.renderMain(); diff --git a/public/assets/js/csvxmlV2.min.js b/public/assets/js/csvxmlV2.min.js index 6ccae3d..aa7c9ff 100644 --- a/public/assets/js/csvxmlV2.min.js +++ b/public/assets/js/csvxmlV2.min.js @@ -1,67 +1,76 @@ -"use strict";if('serviceWorker' in navigator){console.log("Registering service worker");navigator.serviceWorker.register('/sw.js')} -class CsvxmlValidator{fieldList;toValidate;errors;constructor(fieldList,csvRaw){this.errors={parsing:[],mandatoryTags:[],duplicateInvNos:[],dependentColumns:[],controlledLists:[],mainImageResource:[],};this.fieldList=Object.freeze(fieldList);const lines=csvRaw.trim().replace("\r\n","\n").split("\n");let separator;let delimiter;if(csvRaw.substr(0,1)==='"'){separator='";"';delimiter='"'}else{separator=';';delimiter=''} -let headersFields=lines.shift();let headers;if(delimiter==="")headers=headersFields.split(separator);else headers=headersFields.substr(1,headersFields.length-2).split(separator);let expectedFieldCount=headers.length;let toValidate=[];let lineCounter=1;for(let line of lines){if(delimiter!==''){line=line.substr(1,line.length-2)} -if(line.length<=headers.length)continue;let lineContents={};let fields=line.split(separator);if(fields.length!==headers.length){this.errors.parsing.push("Number of columns in line "+lineCounter+" does not match number of headers")} -for(let i=0,max=fields.length;i - + @@ -27,7 +27,7 @@ - + \ No newline at end of file diff --git a/public/json/tls.de.json b/public/json/tls.de.json index 0cbd9e4..f28fbd9 100644 --- a/public/json/tls.de.json +++ b/public/json/tls.de.json @@ -1 +1 @@ -{"remarks":"Notizen","download":"Download","upload":"Hochladen","select_csv_file_for_upload":"Bitte w\u00e4hlen Sie eine CSV Datei als Basis zum Erstellen von XML Dateien","currently_approved_tags":"Derzeit zum Import verf\u00fcgbare Tags \/ Felder","download_csv_all":"CSV-Vorlage mit allen Feldern runterladen","download_csv_by_selection":"CSV-Vorlage auf Basis der Auswahl herunterladen","select_required_fields":"Pflichtfelder ausw\u00e4hlen","select_all_fields":"Alle Felder ausw\u00e4hlen","unset_selection":"Auswahl entfernen","file_format":"Dateiformat","validation_errors":"Validierungsfehler","errors_parsing":"Parsing-Fehler","errors_mandatoryTags":"Fehlende Pflichtfelder","errors_duplicateInvNos":"Doppelte Inventarnummern","errors_dependentColumns":"Spaltenabh\u00e4ngigkeiten nicht ber\u00fccksichtigt","errors_controlledLists":"Kontrollierte Werte","errors_mainImageResource":"Fehlende Haupt-Bilder oder Ressourcen","allowed_values":"Zugelassene Werte"} \ No newline at end of file +{"remarks":"Notizen","download":"Download","upload":"Hochladen","select_csv_file_for_upload":"Bitte w\u00e4hlen Sie eine CSV Datei als Basis zum Erstellen von XML Dateien","currently_approved_tags":"Derzeit zum Import verf\u00fcgbare Tags \/ Felder","download_csv_all":"CSV-Vorlage mit allen Feldern runterladen","download_csv_by_selection":"CSV-Vorlage auf Basis der Auswahl herunterladen","select_required_fields":"Pflichtfelder ausw\u00e4hlen","select_all_fields":"Alle Felder ausw\u00e4hlen","unset_selection":"Auswahl entfernen","file_format":"Dateiformat","validation_errors":"Validierungsfehler","errors_parsing":"Parsing-Fehler","errors_mandatoryTags":"Fehlende Pflichtfelder","errors_duplicateInvNos":"Doppelte Inventarnummern","errors_dependentColumns":"Spaltenabh\u00e4ngigkeiten nicht ber\u00fccksichtigt","errors_controlledLists":"Kontrollierte Werte","errors_mainImageResource":"Fehlende Haupt-Bilder oder Ressourcen","allowed_values":"Zugelassene Werte","privacy_policy":"Datenschutzerkl\u00e4rung","contact":"Kontakt","news":"Neuigkeiten","imprint":"Impressum","about":"\u00dcber"} \ No newline at end of file diff --git a/public/json/tls.en.json b/public/json/tls.en.json index cc6d147..d27e12b 100644 --- a/public/json/tls.en.json +++ b/public/json/tls.en.json @@ -1 +1 @@ -{"remarks":"Remarks","download":"Download","upload":"Upload","select_csv_file_for_upload":"Please select a CSV file to create XML files","currently_approved_tags":"Currently approved tags (column names) for md:import","download_csv_all":"Download CSV template with all fields","download_csv_by_selection":"Download CSV template based on selection","select_required_fields":"Select required fields","select_all_fields":"Select all fields","unset_selection":"Unset selection","file_format":"File format","validation_errors":"Validation errors","errors_parsing":"Parse errors","errors_mandatoryTags":"Missing mandatory tags","errors_duplicateInvNos":"Duplicate inventory numbers","errors_dependentColumns":"Column dependencies unresolved","errors_controlledLists":"Controlled lists","errors_mainImageResource":"Missing main images or resources","allowed_values":"Allowed values"} \ No newline at end of file +{"remarks":"Remarks","download":"Download","upload":"Upload","select_csv_file_for_upload":"Please select a CSV file to create XML files","currently_approved_tags":"Currently approved tags (column names) for md:import","download_csv_all":"Download CSV template with all fields","download_csv_by_selection":"Download CSV template based on selection","select_required_fields":"Select required fields","select_all_fields":"Select all fields","unset_selection":"Unset selection","file_format":"File format","validation_errors":"Validation errors","errors_parsing":"Parse errors","errors_mandatoryTags":"Missing mandatory tags","errors_duplicateInvNos":"Duplicate inventory numbers","errors_dependentColumns":"Column dependencies unresolved","errors_controlledLists":"Controlled lists","errors_mainImageResource":"Missing main images or resources","allowed_values":"Allowed values","privacy_policy":"Privacy policy","contact":"Contact","news":"News","imprint":"Imprint","about":"About"} \ No newline at end of file diff --git a/public/json/tls.hu.json b/public/json/tls.hu.json index c8f82a8..b6e6f4e 100644 --- a/public/json/tls.hu.json +++ b/public/json/tls.hu.json @@ -1 +1 @@ -{"remarks":"Megjegyz\u00e9sek","download":"Let\u00f6lt\u00e9s","upload":"Felt\u00f6lt\u00e9s","select_csv_file_for_upload":"Please select a CSV file to create XML files","currently_approved_tags":"Jelenleg j\u00f3v\u00e1hagyott c\u00edmk\u00e9k (oszlopnevek) az md:importhoz","download_csv_all":"Download CSV template with all fields","download_csv_by_selection":"Download CSV template based on selection","select_required_fields":"K\u00f6telez\u0151 mez\u0151k kijel\u00f6l\u00e9se","select_all_fields":"\u00d6sszes mez\u0151 kijel\u00f6l\u00e9s","unset_selection":"Kijel\u00f6l\u00e9s megsz\u00fcntet\u00e9se","file_format":"Kiterjeszt\u00e9s","validation_errors":"Validation errors","errors_parsing":"Parse errors","errors_mandatoryTags":"Missing mandatory tags","errors_duplicateInvNos":"Duplicate inventory numbers","errors_dependentColumns":"Column dependencies unresolved","errors_controlledLists":"Controlled lists","errors_mainImageResource":"Missing main images or resources","allowed_values":"Allowed values"} \ No newline at end of file +{"remarks":"Megjegyz\u00e9sek","download":"Let\u00f6lt\u00e9s","upload":"Felt\u00f6lt\u00e9s","select_csv_file_for_upload":"Please select a CSV file to create XML files","currently_approved_tags":"Jelenleg j\u00f3v\u00e1hagyott c\u00edmk\u00e9k (oszlopnevek) az md:importhoz","download_csv_all":"Download CSV template with all fields","download_csv_by_selection":"Download CSV template based on selection","select_required_fields":"K\u00f6telez\u0151 mez\u0151k kijel\u00f6l\u00e9se","select_all_fields":"\u00d6sszes mez\u0151 kijel\u00f6l\u00e9s","unset_selection":"Kijel\u00f6l\u00e9s megsz\u00fcntet\u00e9se","file_format":"Kiterjeszt\u00e9s","validation_errors":"Validation errors","errors_parsing":"Parse errors","errors_mandatoryTags":"Missing mandatory tags","errors_duplicateInvNos":"Duplicate inventory numbers","errors_dependentColumns":"Column dependencies unresolved","errors_controlledLists":"Controlled lists","errors_mainImageResource":"Missing main images or resources","allowed_values":"Allowed values","privacy_policy":"Privacy policy","contact":"Contact","news":"News","imprint":"Imprint","about":"About"} \ No newline at end of file diff --git a/scripts/compile.php b/scripts/compile.php index 5528b67..0cc71a2 100644 --- a/scripts/compile.php +++ b/scripts/compile.php @@ -53,6 +53,12 @@ function generateTranslationFile(string $lang):string { 'errors_controlledLists' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'errors_controlledLists'), 'errors_mainImageResource' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'errors_mainImageResource'), 'allowed_values' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'allowed_values'), + + 'privacy_policy' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'privacy_policy'), + 'contact' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'contact'), + 'news' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'news'), + 'imprint' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'imprint'), + 'about' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'about'), ]); } @@ -70,7 +76,7 @@ function generateAppShell():string { - + @@ -93,7 +99,7 @@ function generateAppShell():string { - + '; @@ -111,3 +117,13 @@ foreach (ALLOWED_LANGS as $lang) { } file_put_contents(SERVED_ROOT . 'index.htm', generateAppShell()); + +exec("minify \\ + -o " . escapeshellarg(__DIR__ . '/../public/assets/css/csvxml.min.css') . '\\ + ' . escapeshellarg(__DIR__ . '/../public/assets/css/editMenu.css') . '\\ + ' . escapeshellarg(__DIR__ . '/../public/assets/css/dialogue.css') . '\\ + ' . escapeshellarg(__DIR__ . '/../public/assets/css/csvxml.css')); + +exec("minify \\ + -o " . escapeshellarg(__DIR__ . '/../public/assets/js/csvxmlV2.min.js') . '\ + ' . escapeshellarg(__DIR__ . '/../public/assets/js/csvxmlV2.js'));