From c93b56c387403964fe40d7721bb78b8e283fdb6c Mon Sep 17 00:00:00 2001 From: Joshua Ramon Enslin Date: Thu, 17 Nov 2022 17:56:23 +0100 Subject: [PATCH] Bump GET parameter for force-refreshing CSS and JS --- public/assets/css/csvxml.css | 23 +++++++-- public/assets/css/csvxml.min.css | 2 +- public/assets/js/csvxmlV2.js | 80 ++++++++++++++++++++++++++++---- public/assets/js/csvxmlV2.min.js | 13 ++++-- 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 | 17 +++++-- 9 files changed, 119 insertions(+), 26 deletions(-) diff --git a/public/assets/css/csvxml.css b/public/assets/css/csvxml.css index a9f6a71..77f7aa9 100644 --- a/public/assets/css/csvxml.css +++ b/public/assets/css/csvxml.css @@ -1,7 +1,8 @@ /* * @import 'editMenu.css'; @import 'dialogue.css'; - */ + */@import 'editMenu.css'; +@import 'dialogue.css'; :root { --color-bg-normal: #FFF; --color-bg-raised: #EEE; @@ -55,7 +56,7 @@ body { margin: 0; background: var(--color-bg-normal); color: var(--color-fg-norm a { text-decoration: none; color: inherit; } -h1 { display: block; width: 100%; text-align: center; margin: 0 auto 1.5em auto; +h1 { display: block; width: 100%; text-align: center; margin: 0 auto .8em auto; padding: 1em 0; font-size: 2.5em; line-height: 1.2em; } h1 > * { display: inline-block; vertical-align: middle; color: var(--color-fg-less); } @@ -119,7 +120,23 @@ th { padding: .3em .5em; text-align: left; border-bottom: 2px solid var(--color- 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; } +#helpSection { margin-bottom: 0; font-size: .9em; + padding-bottom: 0; border-bottom: 1px solid var(--color-borders); } +#helpSection h3:before { content: " ? "; display: inline-block; + padding: .2em .5em; margin-right: .5em; + background: var(--color-borders); border-radius: .2em; + color: var(--color-borders-dark); } + +@media screen and (min-width: 75em) { + #helpSection > div { display: grid; grid-template-columns: 1fr 1fr; } + #helpSection > div > div { display: inline-block; grid-column: auto; } +} +@media screen and (min-width: 95em) { + #helpSection > div { grid-template-columns: 1fr 1fr 1fr; } +} + +body > div.uploader { margin-bottom: 0; } +body > div.uploader > form { background: var(--color-bg-raised2); border: 2px solid var(--color-bg-raised); padding: 1em 1em; margin-bottom: 0; } ul.fieldList { display: block; margin: .5em 0; padding: 0 0; list-style: none; } ul.fieldList > li { display: inline-block; margin: .1em; padding: .3em; diff --git a/public/assets/css/csvxml.min.css b/public/assets/css/csvxml.min.css index 46ec3a3..bf38129 100644 --- a/public/assets/css/csvxml.min.css +++ b/public/assets/css/csvxml.min.css @@ -1 +1 @@ -.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}}@media(prefers-color-scheme:dark){header#mainHeader,header nav,header nav>div>div{background:inherit;color:inherit}header#mainHeader{border-bottom:1px solid var(--color-bg-raised2)}} \ 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}@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: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 .8em;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)}#helpSection{margin-bottom:0;font-size:.9em;padding-bottom:0;border-bottom:1px solid var(--color-borders)}#helpSection h3:before{content:" ? ";display:inline-block;padding:.2em .5em;margin-right:.5em;background:var(--color-borders);border-radius:.2em;color:var(--color-borders-dark)}@media screen and (min-width:75em){#helpSection>div{display:grid;grid-template-columns:1fr 1fr}#helpSection>div>div{display:inline-block;grid-column:auto}}@media screen and (min-width:95em){#helpSection>div{grid-template-columns:1fr 1fr 1fr}}body>div.uploader{margin-bottom:0}body>div.uploader>form{background:var(--color-bg-raised2);border:2px solid var(--color-bg-raised);padding:1em;margin-bottom:0}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}}@media(prefers-color-scheme:dark){header#mainHeader,header nav,header nav>div>div{background:inherit;color:inherit}header#mainHeader{border-bottom:1px solid var(--color-bg-raised2)}} \ No newline at end of file diff --git a/public/assets/js/csvxmlV2.js b/public/assets/js/csvxmlV2.js index 426d13a..bbb7f08 100644 --- a/public/assets/js/csvxmlV2.js +++ b/public/assets/js/csvxmlV2.js @@ -332,6 +332,7 @@ class CsvxmlPage { fieldList; fieldListFlat; tls; + domHelpWrapper; domUploaderWrapper; domMainWrapper; selectedFields; @@ -350,6 +351,10 @@ class CsvxmlPage { this.tls = Object.freeze(tls); + let domHelpWrapper = document.createElement("div"); + domHelpWrapper.id = "helpSection"; + this.domHelpWrapper = domHelpWrapper; + let domUploaderWrapper = document.createElement("div"); domUploaderWrapper.id = "uploader"; domUploaderWrapper.classList.add("uploader"); @@ -454,14 +459,7 @@ class CsvxmlPage { } - listValidationErrors(validator) { - - console.log("Listing validation errors"); - - const dialogueContent = document.createElement("div"); - - const headline = document.createElement("h3"); - headline.textContent = this.tls.validation_errors; + generateDialogueCloseButton() { const cancelB = document.createElement("a"); cancelB.classList.add("icons"); @@ -472,8 +470,19 @@ class CsvxmlPage { cancelB.title = "Close"; cancelB.href = "#" + location.href; cancelB.addEventListener('click', CsvxmlDialogue.closeDialogue); - headline.appendChild(cancelB); + return cancelB; + } + + listValidationErrors(validator) { + + console.log("Listing validation errors"); + + const dialogueContent = document.createElement("div"); + + const headline = document.createElement("h3"); + headline.textContent = this.tls.validation_errors; + headline.appendChild(this.generateDialogueCloseButton()); dialogueContent.appendChild(headline); const domErrorsSection = document.createElement("div"); @@ -655,11 +664,63 @@ class CsvxmlPage { } + renderHelpTexts() { + + let app = this; + (async function() { + + function appendQA(question, answer) { + + const div = document.createElement("div"); + div.classList.add("qaDiv"); + + const qElem = document.createElement("h3"); + qElem.textContent = question; + qElem.style.cursor = "pointer"; + div.appendChild(qElem); + + qElem.addEventListener('click', function() { + + console.log("Listing validation errors"); + + const dialogueContent = document.createElement("div"); + + const headline = document.createElement("h3"); + headline.textContent = question; + headline.appendChild(app.generateDialogueCloseButton()); + dialogueContent.appendChild(headline); + + const answerDiv = document.createElement("div"); + answerDiv.textContent = answer; + dialogueContent.appendChild(answerDiv); + CsvxmlDialogue.drawDialogue(dialogueContent); + }); + + return div; + + } + + const div = document.createElement("div"); + + div.appendChild(appendQA(app.tls.help_where_am_i, app.tls.help_where_am_i_content)); + + app.domHelpWrapper.appendChild(div); + + })(); + + document.body.appendChild(this.domHelpWrapper); + + } + renderUploader() { let app = this; (async function() { + const h2 = document.createElement("h2"); + h2.textContent = app.tls.upload; + app.domUploaderWrapper.appendChild(h2); + const form = document.createElement("form"); const label = document.createElement("label"); @@ -961,6 +1022,7 @@ class CsvxmlPage { const page = new CsvxmlPage(fieldList, tls); page.renderGenHeader(); page.renderHeader(); + page.renderHelpTexts(); page.renderUploader(); page.renderMain(); diff --git a/public/assets/js/csvxmlV2.min.js b/public/assets/js/csvxmlV2.min.js index b9a1ff6..721b6cf 100644 --- a/public/assets/js/csvxmlV2.min.js +++ b/public/assets/js/csvxmlV2.min.js @@ -32,8 +32,8 @@ let dialogueArea=document.getElementById("dialogueArea");if(dialogueArea!==null& dialogueArea.parentElement.removeChild(dialogueArea);document.removeEventListener('keydown',CsvxmlDialogue.closeDialogueByEscape,false);}} static closeDialogueByEscape(e){if(e.keyCode===27){CsvxmlDialogue.closeDialogue(e);}} static drawDialogue(contents){let dialogueArea=document.createElement("div");dialogueArea.id="dialogueArea";let dialogue=document.createElement("div");dialogue.id="dialogue";dialogue.appendChild(contents);dialogueArea.appendChild(dialogue);document.body.appendChild(dialogueArea);document.addEventListener('keydown',CsvxmlDialogue.closeDialogueByEscape);return dialogue;}} -class CsvxmlPage{fieldList;fieldListFlat;tls;domUploaderWrapper;domMainWrapper;selectedFields;csvBySelectionButton;unsetSelectionButton;constructor(fieldList,tls){this.fieldList=Object.freeze(fieldList);let list={};for(let sectionName in fieldList){list=Object.assign(list,fieldList[sectionName]);} -this.fieldListFlat=Object.freeze(list);this.tls=Object.freeze(tls);let domUploaderWrapper=document.createElement("div");domUploaderWrapper.id="uploader";domUploaderWrapper.classList.add("uploader");this.domUploaderWrapper=domUploaderWrapper;let domMainWrapper=document.createElement("main");this.domMainWrapper=domMainWrapper;this.selectedFields=[];} +class CsvxmlPage{fieldList;fieldListFlat;tls;domHelpWrapper;domUploaderWrapper;domMainWrapper;selectedFields;csvBySelectionButton;unsetSelectionButton;constructor(fieldList,tls){this.fieldList=Object.freeze(fieldList);let list={};for(let sectionName in fieldList){list=Object.assign(list,fieldList[sectionName]);} +this.fieldListFlat=Object.freeze(list);this.tls=Object.freeze(tls);let domHelpWrapper=document.createElement("div");domHelpWrapper.id="helpSection";this.domHelpWrapper=domHelpWrapper;let domUploaderWrapper=document.createElement("div");domUploaderWrapper.id="uploader";domUploaderWrapper.classList.add("uploader");this.domUploaderWrapper=domUploaderWrapper;let domMainWrapper=document.createElement("main");this.domMainWrapper=domMainWrapper;this.selectedFields=[];} generateCsv(selectedFields=[]){let line1=[];let line2=[];let line3=[];for(let fieldName in this.fieldListFlat){console.log(fieldName);console.log(selectedFields);if(selectedFields.length!==0&&selectedFields.includes(fieldName)===false)continue;const field=this.fieldListFlat[fieldName];line1.push(fieldName);line2.push(field.name_human_readable);if(field.allowedValues!==undefined){let values=[];for(let key in field.allowedValues)values.push(field.allowedValues[key]);line3.push(values.join(","));} else line3.push("");} const csvLine1='"'+line1.join('";"')+'"';const csvLine2='"'+line2.join('";"')+'"';const csvLine3='"'+line3.join('";"')+'"';const toStore=csvLine1+"\n"+csvLine2+"\n"+csvLine3;const triggerLink=document.createElement('a');triggerLink.setAttribute('href','data:text/plain;charset=utf-8,'+encodeURIComponent(toStore));triggerLink.setAttribute('download',"csvxml_museum-digital_template.csv");triggerLink.style.display='none';document.body.appendChild(triggerLink);triggerLink.click();document.body.removeChild(triggerLink);} @@ -41,7 +41,8 @@ zipUploadToXml(validator){function runZipping(){let zip=new JSZip();let xmlFiles zip.generateAsync({type:"blob"}).then(function(content){const triggerLink=document.createElement('a');triggerLink.href=window.URL.createObjectURL(content);triggerLink.setAttribute('download',"csvxml.zip");triggerLink.style.display='none';document.body.appendChild(triggerLink);triggerLink.click();document.body.removeChild(triggerLink);});} if(typeof JSZip==="undefined"){const loadScript=document.createElement("script");loadScript.setAttribute("src","assets/js/jszip/dist/jszip.min.js");loadScript.addEventListener('load',function(){runZipping();},{passive:true,once:true});document.body.appendChild(loadScript);} else{runZipping();}} -listValidationErrors(validator){console.log("Listing validation errors");const dialogueContent=document.createElement("div");const headline=document.createElement("h3");headline.textContent=this.tls.validation_errors;const cancelB=document.createElement("a");cancelB.classList.add("icons");cancelB.classList.add("iconsClose");cancelB.classList.add("dialogueCloseX");cancelB.id="dialogueClose";cancelB.textContent="X";cancelB.title="Close";cancelB.href="#"+location.href;cancelB.addEventListener('click',CsvxmlDialogue.closeDialogue);headline.appendChild(cancelB);dialogueContent.appendChild(headline);const domErrorsSection=document.createElement("div");for(let errorType in validator.errors){if(validator.errors[errorType].length===0)continue;const ulHl=document.createElement("h4");ulHl.textContent=this.tls['errors_'+errorType]+" ("+validator.errors[errorType].length+")";ulHl.style.cursor="pointer";domErrorsSection.appendChild(ulHl);const ul=document.createElement("ul");for(let error of validator.errors[errorType]){const li=document.createElement("li");li.textContent=error;ul.appendChild(li);} +generateDialogueCloseButton(){const cancelB=document.createElement("a");cancelB.classList.add("icons");cancelB.classList.add("iconsClose");cancelB.classList.add("dialogueCloseX");cancelB.id="dialogueClose";cancelB.textContent="X";cancelB.title="Close";cancelB.href="#"+location.href;cancelB.addEventListener('click',CsvxmlDialogue.closeDialogue);return cancelB;} +listValidationErrors(validator){console.log("Listing validation errors");const dialogueContent=document.createElement("div");const headline=document.createElement("h3");headline.textContent=this.tls.validation_errors;headline.appendChild(this.generateDialogueCloseButton());dialogueContent.appendChild(headline);const domErrorsSection=document.createElement("div");for(let errorType in validator.errors){if(validator.errors[errorType].length===0)continue;const ulHl=document.createElement("h4");ulHl.textContent=this.tls['errors_'+errorType]+" ("+validator.errors[errorType].length+")";ulHl.style.cursor="pointer";domErrorsSection.appendChild(ulHl);const ul=document.createElement("ul");for(let error of validator.errors[errorType]){const li=document.createElement("li");li.textContent=error;ul.appendChild(li);} ulHl.addEventListener('click',function(){ul.classList.toggle("minimized");});domErrorsSection.appendChild(ul);} dialogueContent.appendChild(domErrorsSection);const domDlSection=document.createElement("div");const domDlA=document.createElement("span");domDlA.textContent=this.tls.download;domDlA.classList.add("buttonLike");let app=this;domDlA.addEventListener('click',function(){app.zipUploadToXml(validator);});domDlSection.appendChild(domDlA);dialogueContent.appendChild(domDlSection);dialogue=CsvxmlDialogue.drawDialogue(dialogueContent);} uploadFileForValidation(file){const reader=new FileReader();reader.readAsText(file);let app=this;document.body.classList.add("loading");reader.onload=function(){function handleValidation(){console.log("Read 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);} @@ -51,7 +52,9 @@ else{handleValidation();}};reader.onerror=function(){alert(reader.error);};} 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);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");const img=document.createElement("img");img.width="70";img.height="70";img.src="assets/img/mdlogo-csvxml.svg";img.alt="";h1.appendChild(img);const h1Span=document.createElement("span");h1Span.textContent="museum-digital:csvxml";h1.appendChild(h1Span);appHeader.appendChild(h1);document.body.appendChild(appHeader);} -renderUploader(){let app=this;(async function(){const form=document.createElement("form");const label=document.createElement("label");label.textContent=app.tls.select_csv_file_for_upload;label.setAttribute("for","fileToUpload");form.appendChild(label);const input=document.createElement("input");input.type="file";input.id="fileToUpload";input.setAttribute("tabindex","1");input.accept=".csv";input.required="required";input.addEventListener('change',async function(){app.uploadFileForValidation(input.files[0]);});form.appendChild(input);app.domUploaderWrapper.appendChild(form);})();document.body.appendChild(this.domUploaderWrapper);} +renderHelpTexts(){let app=this;(async function(){function appendQA(question,answer){const div=document.createElement("div");div.classList.add("qaDiv");const qElem=document.createElement("h3");qElem.textContent=question;qElem.style.cursor="pointer";div.appendChild(qElem);qElem.addEventListener('click',function(){console.log("Listing validation errors");const dialogueContent=document.createElement("div");const headline=document.createElement("h3");headline.textContent=question;headline.appendChild(app.generateDialogueCloseButton());dialogueContent.appendChild(headline);const answerDiv=document.createElement("div");answerDiv.textContent=answer;dialogueContent.appendChild(answerDiv);CsvxmlDialogue.drawDialogue(dialogueContent);});return div;} +const div=document.createElement("div");div.appendChild(appendQA(app.tls.help_where_am_i,app.tls.help_where_am_i_content));app.domHelpWrapper.appendChild(div);})();document.body.appendChild(this.domHelpWrapper);} +renderUploader(){let app=this;(async function(){const h2=document.createElement("h2");h2.textContent=app.tls.upload;app.domUploaderWrapper.appendChild(h2);const form=document.createElement("form");const label=document.createElement("label");label.textContent=app.tls.select_csv_file_for_upload;label.setAttribute("for","fileToUpload");form.appendChild(label);const input=document.createElement("input");input.type="file";input.id="fileToUpload";input.setAttribute("tabindex","1");input.accept=".csv";input.required="required";input.addEventListener('change',async function(){app.uploadFileForValidation(input.files[0]);});form.appendChild(input);app.domUploaderWrapper.appendChild(form);})();document.body.appendChild(this.domUploaderWrapper);} doForFieldList(callback){let fieldLists=document.getElementsByClassName("fieldList");for(let i=0,max=fieldLists.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 f28fbd9..6594216 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","privacy_policy":"Datenschutzerkl\u00e4rung","contact":"Kontakt","news":"Neuigkeiten","imprint":"Impressum","about":"\u00dcber"} \ 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","help_where_am_i":"What is this page for?","help_where_am_i_content":" CSVXML helps validate import object data for museum-digital following museum-digital's standard import format."} \ No newline at end of file diff --git a/public/json/tls.en.json b/public/json/tls.en.json index d27e12b..a212704 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","privacy_policy":"Privacy policy","contact":"Contact","news":"News","imprint":"Imprint","about":"About"} \ 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","help_where_am_i":"What is this page for?","help_where_am_i_content":" CSVXML helps validate import object data for museum-digital following museum-digital's standard import format."} \ No newline at end of file diff --git a/public/json/tls.hu.json b/public/json/tls.hu.json index b6e6f4e..7b8a86a 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","privacy_policy":"Privacy policy","contact":"Contact","news":"News","imprint":"Imprint","about":"About"} \ 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","help_where_am_i":"What is this page for?","help_where_am_i_content":" CSVXML helps validate import object data for museum-digital following museum-digital's standard import format."} \ No newline at end of file diff --git a/scripts/compile.php b/scripts/compile.php index 5cb52e5..d7ebdb8 100644 --- a/scripts/compile.php +++ b/scripts/compile.php @@ -59,6 +59,9 @@ function generateTranslationFile(string $lang):string { 'news' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'news'), 'imprint' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'imprint'), 'about' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'about'), + + 'help_where_am_i' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'help_where_am_i'), + 'help_where_am_i_content' => $tlLoader->tl("csvxml-overview", "csvxml_overview", 'help_where_am_i_content'), ]); } @@ -76,7 +79,7 @@ function generateAppShell():string { - + @@ -99,7 +102,7 @@ function generateAppShell():string { - + '; @@ -109,21 +112,29 @@ function generateAppShell():string { const SERVED_ROOT = __DIR__ . '/../public/'; const SERVED_JSON_ROOT = __DIR__ . '/../public/json/'; -if (!is_dir(SERVED_JSON_ROOT)) mkdir(SERVED_JSON_ROOT); +if (!is_dir(SERVED_JSON_ROOT)) { + echo "Will generate JSON root directory (" . SERVED_JSON_ROOT . ")" . PHP_EOL; + MD_STD::mkdir(SERVED_JSON_ROOT); +} foreach (ALLOWED_LANGS as $lang) { + echo "Will generate JSON list of fields for language: " . $lang . PHP_EOL; file_put_contents(SERVED_JSON_ROOT . 'fields.' . $lang . '.json', generateFieldsIndex($lang)); + echo "Will generate JSON list of translations for language: " . $lang . PHP_EOL; file_put_contents(SERVED_JSON_ROOT . 'tls.' . $lang . '.json', generateTranslationFile($lang)); } +echo "Will generate app shell" . PHP_EOL; file_put_contents(SERVED_ROOT . 'index.htm', generateAppShell()); +echo "Will minify CSS" . PHP_EOL; 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')); +echo "Will minify JS" . PHP_EOL; exec("minify \\ -o " . escapeshellarg(__DIR__ . '/../public/assets/js/csvxmlV2.min.js') . '\ ' . escapeshellarg(__DIR__ . '/../public/assets/js/csvxmlV2.js'));