Move public files to /public subdirectory
phpcs-errors:221 phpunit-status:successful phpstan-errors:0
This commit is contained in:
144
public/assets/css/csvxml.css
Normal file
144
public/assets/css/csvxml.css
Normal file
@ -0,0 +1,144 @@
|
||||
@import 'editMenu.css';
|
||||
|
||||
/* ==============
|
||||
| Load fonts
|
||||
|================ */
|
||||
|
||||
@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');
|
||||
}
|
||||
|
||||
/* ==============
|
||||
| General
|
||||
|================ */
|
||||
|
||||
* { box-sizing: border-box; z-index: 1; }
|
||||
|
||||
body { margin: 2em; background: #FFF;
|
||||
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; }
|
||||
h1 > * { display: inline-block; vertical-align: middle; color: #212121; }
|
||||
h1 img { height: 2em; margin-right: .2em; border-radius: .1em; opacity: .7; transition: opacity .4s; }
|
||||
h1 img:hover { opacity: 1; }
|
||||
|
||||
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 #EEE;
|
||||
background: inherit; color: #424242; 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: #FFCCBC; color: #424242; 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: #CB9B8C; 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: #CB9B8C; 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 #424242; }
|
||||
tbody > tr:nth-child(2n + 1) { background: #F2F2F2; }
|
||||
td { padding: .3em .5em; border-bottom: 1px solid #D6D6D6; }
|
||||
|
||||
body > div.uploader { background: #F2F2F2; border: 2px solid #EEE; padding: 1em 1em; }
|
||||
|
||||
ul.fieldList { display: block; margin: .5em 0; padding: 0 0; list-style: none; }
|
||||
ul.fieldList > li { display: inline-block; padding: .3em; margin: .1em; border: 1px solid #D6D6D6; background: #FAFAFA; cursor: pointer; transition: background .4s, border .4s, box-shadow .4s;; }
|
||||
ul.fieldList > li:hover { background: #FFF; border-color: #212121; }
|
||||
ul.fieldList > li.requiredField:before { display: inline-block; content: " \002612 "; margin-right: .5em; }
|
||||
ul.fieldList > li.humanTLToggled { border-color: #CB9B8C; background: #CB9B8C; box-shadow: 0 8px 6px -6px black; }
|
||||
|
||||
.options > a.buttonLike { display: inline-block; width: auto;
|
||||
margin: .15em 0; padding: .4em .5em;
|
||||
text-transform: inherit; cursor: pointer;
|
||||
background: initial; border: 2px solid #D6D6D6;
|
||||
opacity: 1;
|
||||
transition: background .4s, opacity .4s; }
|
||||
.options > a.buttonLike:hover { background: #D6D6D6; }
|
||||
|
||||
.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: #CB9B8C; }
|
||||
|
||||
/* =============
|
||||
| Dark mode
|
||||
|============ */
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body { background: #263238; color: #ECEFF1; }
|
||||
input, select, textarea { background: inherit; color: inherit; border: 3px solid #37474F; transition: border .4s, box-shadow .4s; }
|
||||
a.buttonLike:focus,
|
||||
.options > a.buttonLike:focus,
|
||||
button:focus,
|
||||
select:focus,
|
||||
textarea:focus,
|
||||
input:focus,
|
||||
textarea:active,
|
||||
input:active,
|
||||
a.buttonLike:hover,
|
||||
.options > a.buttonLike:hover,
|
||||
ul.fieldList > li:hover,
|
||||
button:hover,
|
||||
select:hover,
|
||||
textarea:hover,
|
||||
input:hover { background: inherit; border-color: #FFF; box-shadow: initial; border-radius: .2em; }
|
||||
ul.fieldList > li,
|
||||
.options > a.buttonLike,
|
||||
a.buttonLike, button, input[type="submit"] { background: inherit; color: #FFF; border: 3px solid #FFC107; border-radius: .2em; transition: background .4s, color .4s, border .4s; }
|
||||
ul.fieldList > li { border-color: #37474F; }
|
||||
ul.fieldList > li.humanTLToggled,
|
||||
.options > a.buttonLike:hover,
|
||||
a.buttonLike:hover, button:hover { background: #FFC107; color: #000; border-color: #FFA000; }
|
||||
|
||||
a { color: #CFD8DC; }
|
||||
|
||||
.tiles > section h2 { background: #37474F; color: inherit; }
|
||||
.tiles > section:hover h2 { background: rgba(0,0,0,.2); color: inherit; }
|
||||
|
||||
h1, h1 > * { color: #CFD8DC; }
|
||||
body > div.uploader { background: inherit; border-color: #37474F; }
|
||||
|
||||
}
|
38
public/assets/css/csvxml.min.css
vendored
Normal file
38
public/assets/css/csvxml.min.css
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
@import 'editMenu.css';@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')}*{box-sizing:border-box;z-index:1}
|
||||
body{margin:2em;background:#FFF;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}
|
||||
h1>*{display:inline-block;vertical-align:middle;color:#212121}
|
||||
h1 img{height:2em;margin-right:.2em;border-radius:.1em;opacity:.7;transition:opacity.4s}
|
||||
h1 img:hover{opacity:1}
|
||||
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 #EEE;background:inherit;color:#424242;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:#FFCCBC;color:#424242;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:#CB9B8C;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:#CB9B8C;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 #424242}
|
||||
tbody>tr:nth-child(2n+1){background:#F2F2F2}
|
||||
td{padding:.3em.5em;border-bottom:1px solid #D6D6D6}
|
||||
body>div.uploader{background:#F2F2F2;border:2px solid #EEE;padding:1em 1em}
|
||||
ul.fieldList{display:block;margin:.5em 0;padding:0 0;list-style:none}
|
||||
ul.fieldList>li{display:inline-block;padding:.3em;margin:.1em;border:1px solid #D6D6D6;background:#FAFAFA;cursor:pointer;transition:background.4s,border.4s,box-shadow.4s}
|
||||
ul.fieldList>li:hover{background:#FFF;border-color:#212121}
|
||||
ul.fieldList>li.requiredField:before{display:inline-block;content:" \002612 ";margin-right:.5em}
|
||||
ul.fieldList>li.humanTLToggled{border-color:#CB9B8C;background:#CB9B8C;box-shadow:0 8px 6px-6px black}.options>a.buttonLike{display:inline-block;width:auto;margin:.15em 0;padding:.4em.5em;text-transform:inherit;cursor:pointer;background:initial;border:2px solid #D6D6D6;opacity:1;transition:background.4s,opacity.4s}.options>a.buttonLike:hover{background:#D6D6D6}.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:#CB9B8C}
|
||||
@media(prefers-color-scheme:dark){body{background:#263238;color:#ECEFF1}
|
||||
input,select,textarea{background:inherit;color:inherit;border:3px solid #37474F;transition:border.4s,box-shadow.4s}
|
||||
a.buttonLike:focus,.options>a.buttonLike:focus,button:focus,select:focus,textarea:focus,input:focus,textarea:active,input:active,a.buttonLike:hover,.options>a.buttonLike:hover,ul.fieldList>li:hover,button:hover,select:hover,textarea:hover,input:hover{background:inherit;border-color:#FFF;box-shadow:initial;border-radius:.2em}
|
||||
ul.fieldList>li,.options>a.buttonLike,a.buttonLike,button,input[type="submit"]{background:inherit;color:#FFF;border:3px solid #FFC107;border-radius:.2em;transition:background.4s,color.4s,border.4s}
|
||||
ul.fieldList>li{border-color:#37474F}
|
||||
ul.fieldList>li.humanTLToggled,.options>a.buttonLike:hover,a.buttonLike:hover,button:hover{background:#FFC107;color:#000;border-color:#FFA000}
|
||||
a{color:#CFD8DC}.tiles>section h2{background:#37474F;color:inherit}.tiles>section:hover h2{background:rgba(0,0,0,.2);color:inherit}
|
||||
h1,h1>*{color:#CFD8DC}
|
||||
body>div.uploader{background:inherit;border-color:#37474F}}
|
48
public/assets/css/editMenu.css
Normal file
48
public/assets/css/editMenu.css
Normal file
@ -0,0 +1,48 @@
|
||||
/* ========
|
||||
| New tooltip
|
||||
|= ======== */
|
||||
|
||||
.newToolTip { position: fixed; display: none !important; min-width: 300px !important; max-width: 600px;
|
||||
background: #212121 !important; color: #FFF; text-align: left; font-size: .95rem;
|
||||
border-radius: .2em; box-shadow: 1px 1px 4px #646464; z-index: 3000; white-space: initial !important; }
|
||||
#newToolTipMain:before { content: attr(data-title); display: block; padding: .5em 1em; max-width: 598px;
|
||||
background: #212121; color: #BDBDBD; font-weight: bold;
|
||||
box-shadow: 0px 4px 2px -2px #646464; }
|
||||
#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: bold; }
|
||||
dl#newToolTipMain dd { margin: -1em 0 0 0; padding: 0 0 0 0; }
|
||||
|
||||
.newToolTipMain p + .toolTipHierarchy { padding-bottom: 0 !important; }
|
||||
#newToolTipMain > h5 { padding: 0 1rem !important; margin: -.5rem 0 !important; }
|
||||
.toolTipHierarchy { margin: 0; padding: 0; border-top: 1px solid #424242; list-style: none; }
|
||||
.toolTipHierarchy ul { margin: 0; padding: .2em 0 .2em 0; list-style: none; }
|
||||
.toolTipHierarchy ul ul { padding: .1em 0 .1em 1.2em; }
|
||||
.toolTipHierarchy ul > li:before { content: " \002514 "; display: inline-block; padding-right: .4em; }
|
||||
|
||||
.copyToDialogue { cursor: pointer; }
|
||||
|
||||
/* ========
|
||||
| Animations
|
||||
|= ======== */
|
||||
|
||||
@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; }
|
||||
}
|
BIN
public/assets/fonts/SourceSansPro-Light.ttf
Normal file
BIN
public/assets/fonts/SourceSansPro-Light.ttf
Normal file
Binary file not shown.
BIN
public/assets/fonts/SourceSansPro-Regular.ttf
Normal file
BIN
public/assets/fonts/SourceSansPro-Regular.ttf
Normal file
Binary file not shown.
BIN
public/assets/fonts/SourceSansPro-Regular.woff2
Normal file
BIN
public/assets/fonts/SourceSansPro-Regular.woff2
Normal file
Binary file not shown.
401
public/assets/img/mdlogo-code.svg
Normal file
401
public/assets/img/mdlogo-code.svg
Normal file
@ -0,0 +1,401 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1020"
|
||||
height="1020"
|
||||
id="svg2985"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="mdlogo-code.svg"
|
||||
inkscape:export-filename="mdlogo-code-512px.png"
|
||||
inkscape:export-xdpi="48.189999"
|
||||
inkscape:export-ydpi="48.189999">
|
||||
<defs
|
||||
id="defs2987" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="0.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="0"
|
||||
inkscape:zoom="0.98994949"
|
||||
inkscape:cx="373.81018"
|
||||
inkscape:cy="657.9954"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="3680"
|
||||
inkscape:window-height="1930"
|
||||
inkscape:window-x="80"
|
||||
inkscape:window-y="150"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="5"
|
||||
fit-margin-left="5"
|
||||
fit-margin-right="5"
|
||||
fit-margin-bottom="5"
|
||||
showguides="false" />
|
||||
<metadata
|
||||
id="metadata2990">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(8,-40.362183)">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:8.82220364;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect845"
|
||||
width="1011.1779"
|
||||
height="1011.1778"
|
||||
x="-3.5888982"
|
||||
y="44.773335"
|
||||
ry="0" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot3763"
|
||||
style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
|
||||
transform="matrix(1.0379746,0,0,1.0379746,-169.56958,-12.773255)"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997"><flowRegion
|
||||
id="flowRegion3765"
|
||||
style="font-family:sans-serif;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"><rect
|
||||
id="rect3767"
|
||||
width="1008.1323"
|
||||
height="1000.051"
|
||||
x="-6.0609155"
|
||||
y="50.290859"
|
||||
style="font-family:sans-serif;text-align:end;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" /></flowRegion><flowPara
|
||||
id="flowPara3769"
|
||||
style="font-size:40px;line-height:1.25;font-family:sans-serif;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"> </flowPara></flowRoot> <text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-stretch:normal;font-size:12.45569611px;line-height:0%;font-family:'Bookman Old Style';-inkscape-font-specification:'Bookman Old Style Semi-Light';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.03797472;stroke-opacity:1"
|
||||
x="348.29947"
|
||||
y="659.89093"
|
||||
id="text3771"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3773"
|
||||
x="348.29947"
|
||||
y="663.27887"
|
||||
style="font-size:381.58416748px;line-height:10;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.03797472;stroke-opacity:1" /></text>
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833"
|
||||
width="79.41317"
|
||||
height="79.41317"
|
||||
x="98.490639"
|
||||
y="742.45844"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-3"
|
||||
width="79.413177"
|
||||
height="79.41317"
|
||||
x="98.490639"
|
||||
y="626.96552"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6"
|
||||
width="79.41317"
|
||||
height="79.41317"
|
||||
x="98.490639"
|
||||
y="511.47241"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:10.21611977;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-3-7"
|
||||
width="82.178253"
|
||||
height="47.530357"
|
||||
x="97.108063"
|
||||
y="429.24481"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-5"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="271.73004"
|
||||
y="742.45844"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-3-3"
|
||||
width="79.41317"
|
||||
height="79.41317"
|
||||
x="271.73004"
|
||||
y="626.96552"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="271.73004"
|
||||
y="511.47241"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-5-6"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="444.96948"
|
||||
y="742.45844"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-3-3-2"
|
||||
width="79.41317"
|
||||
height="79.41317"
|
||||
x="444.96948"
|
||||
y="626.96545"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="444.96948"
|
||||
y="511.47235"
|
||||
rx="0"
|
||||
ry="39.706581"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:10.21612072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-1"
|
||||
width="47.530357"
|
||||
height="82.178246"
|
||||
x="201.05171"
|
||||
y="510.08987"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:10.21612072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-1-2"
|
||||
width="47.530357"
|
||||
height="82.178246"
|
||||
x="374.29114"
|
||||
y="510.08987"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="595.11035"
|
||||
y="742.45844"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7-0"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="710.60327"
|
||||
y="742.45844"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:transform-center-x="-9.9165682"
|
||||
inkscape:transform-center-y="47.832846"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7-9"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="826.09625"
|
||||
y="742.45844"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7-3"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="595.11035"
|
||||
y="626.96552"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7-3-6"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="595.11035"
|
||||
y="511.47241"
|
||||
rx="0"
|
||||
ry="39.706581"
|
||||
inkscape:transform-center-x="-29.166407"
|
||||
inkscape:transform-center-y="139.41528"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7-3-6-0"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="710.60327"
|
||||
y="511.47241"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:transform-center-x="-29.166375"
|
||||
inkscape:transform-center-y="139.41528"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7-6"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="826.09625"
|
||||
y="626.96552"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7-3-2"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="826.09625"
|
||||
y="511.47241"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7-3-6-6"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="826.09625"
|
||||
y="395.97949"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:transform-center-x="-29.166404"
|
||||
inkscape:transform-center-y="139.4153"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.98119068;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7-3-6-6-1"
|
||||
width="79.413162"
|
||||
height="79.41317"
|
||||
x="826.09625"
|
||||
y="280.48651"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:transform-center-x="-29.166404"
|
||||
inkscape:transform-center-y="139.41528"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:9.61340618;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-3"
|
||||
width="41.781116"
|
||||
height="82.780952"
|
||||
x="443.28558"
|
||||
y="509.78845"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:9.61340523;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-75"
|
||||
width="82.780945"
|
||||
height="41.78112"
|
||||
x="443.28558"
|
||||
y="550.78833"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:9.61340523;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7-3-6-3"
|
||||
width="82.780945"
|
||||
height="41.78112"
|
||||
x="593.42645"
|
||||
y="550.78839"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:transform-center-x="-30.4033"
|
||||
inkscape:transform-center-y="73.349637"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:9.61340523;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect833-6-5-9-7-3-6-5"
|
||||
width="41.781116"
|
||||
height="82.780952"
|
||||
x="634.42627"
|
||||
y="509.78851"
|
||||
rx="0"
|
||||
ry="0"
|
||||
inkscape:transform-center-x="-15.345135"
|
||||
inkscape:transform-center-y="145.32765"
|
||||
inkscape:export-xdpi="96.379997"
|
||||
inkscape:export-ydpi="96.379997" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 14 KiB |
202
public/assets/img/mdlogo-csvxml.svg
Normal file
202
public/assets/img/mdlogo-csvxml.svg
Normal file
@ -0,0 +1,202 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1000mm"
|
||||
height="1000mm"
|
||||
viewBox="0 0 1000 1000"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="mdlogo-csvxml.svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.04"
|
||||
inkscape:cx="4890.6004"
|
||||
inkscape:cy="12712.02"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="2046"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="54"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(9.5367432e-7,703)">
|
||||
<rect
|
||||
style="fill:#ff8080;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect997-6-7"
|
||||
width="475"
|
||||
height="200"
|
||||
x="50"
|
||||
y="97" />
|
||||
<rect
|
||||
style="fill:#aa0000;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect997"
|
||||
width="475"
|
||||
height="200"
|
||||
x="50"
|
||||
y="-703" />
|
||||
<rect
|
||||
style="fill:#aa4400;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect997-0"
|
||||
width="475"
|
||||
height="200"
|
||||
x="525"
|
||||
y="-703" />
|
||||
<rect
|
||||
style="fill:#d40000;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect997-6"
|
||||
width="475"
|
||||
height="200"
|
||||
x="50"
|
||||
y="-503" />
|
||||
<rect
|
||||
style="fill:#d45500;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect997-0-2"
|
||||
width="475"
|
||||
height="200"
|
||||
x="525"
|
||||
y="-503" />
|
||||
<rect
|
||||
style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect997-0-2-6"
|
||||
width="475"
|
||||
height="200"
|
||||
x="525"
|
||||
y="-303" />
|
||||
<rect
|
||||
style="fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect997-0-2-6-1"
|
||||
width="475"
|
||||
height="200"
|
||||
x="525"
|
||||
y="-103" />
|
||||
<rect
|
||||
style="fill:#ffb380;fill-opacity:1;stroke:none;stroke-width:20.88254929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect997-0-2-6-1-8"
|
||||
width="475"
|
||||
height="200"
|
||||
x="525"
|
||||
y="97" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:22.35199928;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect815"
|
||||
width="597.64825"
|
||||
height="597.64825"
|
||||
x="11.175858"
|
||||
y="-361.82413"
|
||||
rx="20"
|
||||
ry="20" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.4702857, 2.4702857;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect870"
|
||||
width="80"
|
||||
height="80"
|
||||
x="134.99998"
|
||||
y="-183.00003" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028572, 2.47028572;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect870-5"
|
||||
width="80"
|
||||
height="80"
|
||||
x="55"
|
||||
y="-103.00003" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028572, 2.47028572;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect870-3"
|
||||
width="80"
|
||||
height="80"
|
||||
x="134.99998"
|
||||
y="-23.000032" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028572, 2.47028572;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect870-56"
|
||||
width="80"
|
||||
height="80"
|
||||
x="214.99998"
|
||||
y="-262.99997" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:16.59635544;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect870-3-2"
|
||||
width="63.403645"
|
||||
height="63.403645"
|
||||
x="223.29817"
|
||||
y="65.298225" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028573, 2.47028573;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect870-9"
|
||||
width="80"
|
||||
height="80"
|
||||
x="-485"
|
||||
y="-57.000008"
|
||||
transform="scale(-1)" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028575, 2.47028575;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect870-5-1"
|
||||
width="80"
|
||||
height="80"
|
||||
x="-565"
|
||||
y="23.000032"
|
||||
transform="scale(-1)" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028575, 2.47028575;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect870-3-27"
|
||||
width="80"
|
||||
height="80"
|
||||
x="-485"
|
||||
y="103.00006"
|
||||
transform="scale(-1)" />
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:24.70285606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.47028575, 2.47028575;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect870-56-0"
|
||||
width="80"
|
||||
height="80"
|
||||
x="-405.00006"
|
||||
y="-137.00003"
|
||||
transform="scale(-1)" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:16.59635544;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
id="rect870-3-2-9"
|
||||
width="63.403645"
|
||||
height="63.403645"
|
||||
x="-396.70184"
|
||||
y="191.29825"
|
||||
transform="scale(-1)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.2 KiB |
130
public/assets/js/csvxml-overview.js
Normal file
130
public/assets/js/csvxml-overview.js
Normal file
@ -0,0 +1,130 @@
|
||||
(function() {
|
||||
|
||||
let csvBySelectionButton = document.getElementById("csvBySelection");
|
||||
let unsetSelectionButton = document.getElementById("unsetSelection");
|
||||
|
||||
function checkCSVBySelectionAccessibility() {
|
||||
|
||||
let selected = document.getElementsByClassName("humanTLToggled");
|
||||
if (selected.length === 0) {
|
||||
csvBySelectionButton.classList.add("invisible");
|
||||
unsetSelection.classList.add("invisible");
|
||||
}
|
||||
else {
|
||||
csvBySelectionButton.classList.remove("invisible");
|
||||
unsetSelection.classList.remove("invisible");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Takes a callback function
|
||||
function doForFieldList(callback) {
|
||||
let fieldLists = document.getElementsByClassName("fieldList");
|
||||
for (let i = 0, max = fieldLists.length; i < max; i++) {
|
||||
|
||||
let fields = fieldLists[i].getElementsByTagName("li");
|
||||
for (let j = 0, maxj = fields.length; j < maxj; j++) {
|
||||
|
||||
callback(fields[j]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function toggleListFieldSelectionState(field) {
|
||||
|
||||
let newValue = field.getAttribute("data-alt");
|
||||
field.setAttribute("data-alt", field.textContent);
|
||||
field.textContent = newValue;
|
||||
field.classList.toggle("humanTLToggled");
|
||||
|
||||
if (field.classList.contains("humanTLToggled") === false) return;
|
||||
|
||||
let dependencies = field.getAttribute("data-dependencies");
|
||||
if (dependencies !== undefined && dependencies !== null) {
|
||||
let linkedFields = dependencies.split(";");
|
||||
for (let i = 0, max = linkedFields.length; i < max; i++) {
|
||||
let linkedField = document.getElementById(linkedFields[i]);
|
||||
if (linkedField.classList.contains("humanTLToggled") === true) continue;
|
||||
toggleListFieldSelectionState(linkedField);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
doForFieldList(function(field) {
|
||||
|
||||
// Each field should switch its visible content and human-readable
|
||||
// translation on a click.
|
||||
field.addEventListener('click', function(e) {
|
||||
|
||||
toggleListFieldSelectionState(field);
|
||||
checkCSVBySelectionAccessibility();
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
csvBySelectionButton.addEventListener('click', function(e) {
|
||||
|
||||
let selectionForm = document.createElement("form");
|
||||
selectionForm.method = "POST";
|
||||
selectionForm.action = "csv.php";
|
||||
|
||||
let hiddenInput = document.createElement("input");
|
||||
hiddenInput.type = "hidden";
|
||||
hiddenInput.name = "selectedFields";
|
||||
hiddenInput.value = "";
|
||||
|
||||
let selected = document.getElementsByClassName("humanTLToggled");
|
||||
for (let i = 0, max = selected.length; i < max; i++) {
|
||||
hiddenInput.value += selected[i].getAttribute("data-value") + ",";
|
||||
}
|
||||
|
||||
selectionForm.appendChild(hiddenInput);
|
||||
document.documentElement.appendChild(selectionForm);
|
||||
selectionForm.submit();
|
||||
|
||||
});
|
||||
|
||||
let selectRequired = document.getElementById("selectRequired");
|
||||
selectRequired.addEventListener('click', function(e) {
|
||||
|
||||
doForFieldList(function(field) {
|
||||
if (field.classList.contains("requiredField") === false) return;
|
||||
if (field.classList.contains("humanTLToggled") === true) return;
|
||||
|
||||
toggleListFieldSelectionState(field);
|
||||
checkCSVBySelectionAccessibility();
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
let selectAll = document.getElementById("selectAll");
|
||||
selectAll.addEventListener('click', function(e) {
|
||||
|
||||
doForFieldList(function(field) {
|
||||
if (field.classList.contains("humanTLToggled") === true) return;
|
||||
|
||||
toggleListFieldSelectionState(field);
|
||||
checkCSVBySelectionAccessibility();
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
unsetSelectionButton.addEventListener('click', function(e) {
|
||||
|
||||
doForFieldList(function(field) {
|
||||
if (field.classList.contains("humanTLToggled") === false) return;
|
||||
|
||||
toggleListFieldSelectionState(field);
|
||||
checkCSVBySelectionAccessibility();
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
})();
|
5
public/assets/js/csvxml-overview.min.js
vendored
Normal file
5
public/assets/js/csvxml-overview.min.js
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
(function(){let csvBySelectionButton=document.getElementById("csvBySelection");let unsetSelectionButton=document.getElementById("unsetSelection");function checkCSVBySelectionAccessibility(){let selected=document.getElementsByClassName("humanTLToggled");if(selected.length===0){csvBySelectionButton.classList.add("invisible");unsetSelection.classList.add("invisible")}else{csvBySelectionButton.classList.remove("invisible");unsetSelection.classList.remove("invisible")}}
|
||||
function doForFieldList(callback){let fieldLists=document.getElementsByClassName("fieldList");for(let i=0,max=fieldLists.length;i<max;i++){let fields=fieldLists[i].getElementsByTagName("li");for(let j=0,maxj=fields.length;j<maxj;j++){callback(fields[j])}}}
|
||||
function toggleListFieldSelectionState(field){let newValue=field.getAttribute("data-alt");field.setAttribute("data-alt",field.textContent);field.textContent=newValue;field.classList.toggle("humanTLToggled");if(field.classList.contains("humanTLToggled")===!1)return;let dependencies=field.getAttribute("data-dependencies");if(dependencies!==undefined&&dependencies!==null){let linkedFields=dependencies.split(";");for(let i=0,max=linkedFields.length;i<max;i++){let linkedField=document.getElementById(linkedFields[i]);if(linkedField.classList.contains("humanTLToggled")===!0)continue;toggleListFieldSelectionState(linkedField)}}}
|
||||
doForFieldList(function(field){field.addEventListener('click',function(e){toggleListFieldSelectionState(field);checkCSVBySelectionAccessibility()})});csvBySelectionButton.addEventListener('click',function(e){let selectionForm=document.createElement("form");selectionForm.method="POST";selectionForm.action="csv.php";let hiddenInput=document.createElement("input");hiddenInput.type="hidden";hiddenInput.name="selectedFields";hiddenInput.value="";let selected=document.getElementsByClassName("humanTLToggled");for(let i=0,max=selected.length;i<max;i++){hiddenInput.value+=selected[i].getAttribute("data-value")+","}
|
||||
selectionForm.appendChild(hiddenInput);document.documentElement.appendChild(selectionForm);selectionForm.submit()});let selectRequired=document.getElementById("selectRequired");selectRequired.addEventListener('click',function(e){doForFieldList(function(field){if(field.classList.contains("requiredField")===!1)return;if(field.classList.contains("humanTLToggled")===!0)return;toggleListFieldSelectionState(field);checkCSVBySelectionAccessibility()})});let selectAll=document.getElementById("selectAll");selectAll.addEventListener('click',function(e){doForFieldList(function(field){if(field.classList.contains("humanTLToggled")===!0)return;toggleListFieldSelectionState(field);checkCSVBySelectionAccessibility()})});unsetSelectionButton.addEventListener('click',function(e){doForFieldList(function(field){if(field.classList.contains("humanTLToggled")===!1)return;toggleListFieldSelectionState(field);checkCSVBySelectionAccessibility()})})})()
|
73
public/assets/js/newToolTip.js
Normal file
73
public/assets/js/newToolTip.js
Normal file
@ -0,0 +1,73 @@
|
||||
/**
|
||||
* A simple implementation of a tooltip.
|
||||
*
|
||||
* @author Joshua Ramon Enslin <joshua@jrenslin.de>
|
||||
*/
|
||||
|
||||
function generateToolTips() {
|
||||
|
||||
/**
|
||||
* Function for setting the alignment of an element.
|
||||
*
|
||||
* @param {Event} e Event triggering the execution of this function.
|
||||
* @param {DOMElement} elem Dom element to position.
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
function getDirection(e, elem) {
|
||||
|
||||
if (window.innerHeight < e.clientY + elem.clientHeight) {
|
||||
elem.style.top = "";
|
||||
elem.style.bottom = (window.innerHeight - e.clientY) + "px";
|
||||
}
|
||||
else {
|
||||
elem.style.bottom = "";
|
||||
elem.style.top = (e.clientY + 2) + "px";
|
||||
}
|
||||
if (window.innerWidth < e.clientX + elem.clientWidth) {
|
||||
elem.style.left = "";
|
||||
elem.style.right = (window.innerWidth - e.clientX) + "px";
|
||||
} else {
|
||||
elem.style.right = "";
|
||||
elem.style.left = (e.clientX + 2) + "px";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
let triggers = document.getElementsByClassName("newToolTipTag");
|
||||
for (let i = 0, max = triggers.length; i < max; i++) {
|
||||
|
||||
let trigger = triggers[i];
|
||||
let dataTarget = trigger.getAttribute("data-for");
|
||||
let target = document.getElementById("tooltip_" + dataTarget);
|
||||
|
||||
trigger.addEventListener("mouseover", function(e) {
|
||||
let newMain = document.getElementById("newToolTipMain");
|
||||
if (newMain !== null) return;
|
||||
newMain = target.cloneNode(true);
|
||||
newMain.id = "newToolTipMain";
|
||||
document.getElementsByTagName("body")[0].appendChild(newMain);
|
||||
newMain.classList.add("visible");
|
||||
getDirection(e, newMain);
|
||||
});
|
||||
trigger.addEventListener("mousemove", function(e) {
|
||||
let newMain = document.getElementById("newToolTipMain");
|
||||
getDirection(e, newMain);
|
||||
});
|
||||
trigger.addEventListener("mouseout", function(e) {
|
||||
let newMain = document.getElementById("newToolTipMain");
|
||||
if (newMain.classList.contains("sticked")) return;
|
||||
newMain.classList.remove("visible");
|
||||
document.getElementsByTagName("body")[0].removeChild(newMain);
|
||||
});
|
||||
/*
|
||||
trigger.addEventListener("click", function(e) {
|
||||
document.getElementById("newToolTipMain").classList.toggle("sticked");
|
||||
});
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
generateToolTips();
|
76
public/csv.php
Normal file
76
public/csv.php
Normal file
@ -0,0 +1,76 @@
|
||||
<?PHP
|
||||
/**
|
||||
* Generates a CSV template based on the field list provided for CSVXML.
|
||||
*
|
||||
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
|
||||
*/
|
||||
declare(strict_types = 1);
|
||||
require_once __DIR__ . "/../functions/functions.php";
|
||||
|
||||
if (session_status() != PHP_SESSION_ACTIVE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
// This array contains all available languages
|
||||
$allowed_langs = ['ar', 'de', 'en', 'hu', 'id', 'it', 'pl','pt'];
|
||||
|
||||
// Some languages are in translation. They will only be available for logged in users.
|
||||
|
||||
if (isset($_GET['navlang'])) {
|
||||
$_SESSION['lang'] = $_GET['navlang'];
|
||||
if (!in_array($_SESSION['lang'], $allowed_langs)) $_SESSION['lang'] = 'de';
|
||||
}
|
||||
else if (!isset($_SESSION['lang'])) {
|
||||
$_SESSION['lang'] = MD_STD::lang_getfrombrowser($allowed_langs, 'en', "", false);
|
||||
}
|
||||
$lang = $_SESSION['lang'];
|
||||
|
||||
if (!empty($_POST) and !empty($_POST['selectedFields'])) {
|
||||
$selectionActive = true;
|
||||
$selectedFields = explode(",", trim($_POST['selectedFields'], ","));
|
||||
}
|
||||
else $selectionActive = false;
|
||||
|
||||
require __DIR__ . "/../values/availableFields.php";
|
||||
|
||||
$line1 = $line2 = $line3 = $line4 = [];
|
||||
|
||||
foreach ($availableFields as $headline => $fields) {
|
||||
|
||||
$i = 0;
|
||||
$tLine1 = $tLine2 = $tLine3 = $tLine4 = [];
|
||||
$tLine1[] = $headline;
|
||||
|
||||
foreach($fields as $fieldName => $field) {
|
||||
|
||||
if ($selectionActive === true and !in_array($fieldName, $selectedFields)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($i !== 0) $tLine1[] = "";
|
||||
$tLine2[] = $fieldName;
|
||||
$tLine3[] = $field['name_human_readable'];
|
||||
# $tLine4[] = $field['remark'];
|
||||
if (!empty($field['allowedValues'])) $tLine4[] = end($field['allowedValues']);
|
||||
else $tLine4[] = $field['name_human_readable'];
|
||||
|
||||
$i++;
|
||||
}
|
||||
|
||||
if (empty($tLine2) or count($tLine2) === 0) continue;
|
||||
|
||||
for ($i = 1; $i <= 4; $i++) {
|
||||
${"line$i"} = array_merge(${"line$i"}, ${"tLine$i"});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
header('Content-Type: text/csv; charset=utf-8');
|
||||
if ($selectionActive === true)
|
||||
header("Content-Disposition: attachment; filename=csvxml_museum-digital_template-{$lang}_selection.csv");
|
||||
else
|
||||
header("Content-Disposition: attachment; filename=csvxml_museum-digital_template-{$lang}.csv");
|
||||
|
||||
for ($i = 2; $i <= 4; $i++) {
|
||||
echo mb_convert_encoding('"' . implode("\";\"", ${"line$i"}) . '"' . PHP_EOL, 'utf-16', 'utf-8');;
|
||||
}
|
108
public/index.php
Normal file
108
public/index.php
Normal file
@ -0,0 +1,108 @@
|
||||
<?PHP
|
||||
/**
|
||||
* New start page for CSVXML.
|
||||
*
|
||||
* @link https://groupit.museum-digital.de/csvxml/
|
||||
*
|
||||
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
|
||||
*/
|
||||
declare(strict_types = 1);
|
||||
require_once __DIR__ . "/../functions/functions.php";
|
||||
|
||||
if (session_status() != PHP_SESSION_ACTIVE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
// This array contains all available languages
|
||||
$allowed_langs = ['ar', 'de', 'en', 'hu', 'id', 'it', 'pl','pt'];
|
||||
|
||||
// Some languages are in translation. They will only be available for logged in users.
|
||||
|
||||
if (isset($_GET['navlang'])) {
|
||||
$_SESSION['lang'] = $_GET['navlang'];
|
||||
if (!in_array($_SESSION['lang'], $allowed_langs)) $_SESSION['lang'] = 'de';
|
||||
}
|
||||
else if (!isset($_SESSION['lang'])) {
|
||||
$_SESSION['lang'] = MD_STD::lang_getfrombrowser($allowed_langs, 'en', "", false);
|
||||
}
|
||||
$lang = $_SESSION['lang'];
|
||||
|
||||
$tlLoader = new MDTlLoader("csxml_start", $lang);
|
||||
|
||||
$toInject = '
|
||||
<script src="assets/js/newToolTip.js" type="text/javascript" defer></script>
|
||||
';
|
||||
echo printHTMLHead($toInject);
|
||||
|
||||
echo '
|
||||
|
||||
<div class="uploader">
|
||||
<form enctype="multipart/form-data" action="upload.php" method="POST">
|
||||
<input type="hidden" id="csrf-token" name="csrf-token" aria-label="Anti-CSRF Token" value="' . htmlspecialchars(getAntiCsrfToken()) . '" />
|
||||
<label for="fileToUpload">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'select_csv_file_for_upload') . '</label>
|
||||
<input name="uploaded" type="file" accept=".csv" id="fileToUpload" required />
|
||||
<button type="submit">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'upload') . '</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2>' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'currently_approved_tags') . '</h2>
|
||||
<div class="options">
|
||||
<a href="csv.php" class="buttonLike">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'download_csv_all') . '</a>
|
||||
<a class="buttonLike invisible" id="csvBySelection">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'download_csv_by_selection') . '</a>
|
||||
<br />
|
||||
<a class="buttonLike" id="selectRequired">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'select_required_fields') . '</a>
|
||||
<a class="buttonLike" id="selectAll">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'select_all_fields') . '</a>
|
||||
<a class="buttonLike invisible" id="unsetSelection">' . $tlLoader->tl("csvxml-overview", "csvxml_overview", 'unset_selection') . '</a>
|
||||
</div>
|
||||
';
|
||||
|
||||
require __DIR__ . "/../values/availableFields.php";
|
||||
|
||||
$tooltips = [];
|
||||
foreach ($availableFields as $headline => $fields) {
|
||||
|
||||
echo "
|
||||
<h3>{$headline}</h3>
|
||||
<ul class='fieldList'>
|
||||
";
|
||||
|
||||
foreach($fields as $fieldName => $field) {
|
||||
|
||||
if (!empty($field['remark']) or !empty($field['explica'])) $hasTooltip = true;
|
||||
else $hasTooltip = false;
|
||||
|
||||
echo "
|
||||
<li id='{$fieldName}' data-alt='{$field['name_human_readable']}' data-value='{$fieldName}' data-for='{$fieldName}' class='";
|
||||
if ($hasTooltip === true) echo " newToolTipTag";
|
||||
if (!empty($field['required']) and $field['required'] === true) echo " requiredField";
|
||||
echo "'";
|
||||
if (!empty($field['dependsOn'])) {
|
||||
echo " data-dependencies='" . htmlspecialchars(implode(";", $field['dependsOn'])) . "'";
|
||||
}
|
||||
echo ">{$fieldName}";
|
||||
|
||||
if (!empty($field['explica'])) $toolTipExplica = "</p><h5>General</h5><p>" . $field['explica'];
|
||||
else $toolTipExplica = "";
|
||||
$toolTip = generateHelpTooltip($fieldName, $field['name_human_readable'], "{$field['remark']}{$toolTipExplica}");
|
||||
if ($hasTooltip) $tooltips[] = $toolTip[0];
|
||||
echo "</li>";
|
||||
}
|
||||
|
||||
echo '
|
||||
</ul>
|
||||
';
|
||||
|
||||
}
|
||||
|
||||
echo '
|
||||
</div>
|
||||
|
||||
';
|
||||
echo implode($tooltips);
|
||||
|
||||
echo '
|
||||
|
||||
</body>
|
||||
</html>
|
||||
';
|
391
public/index3.php
Normal file
391
public/index3.php
Normal file
@ -0,0 +1,391 @@
|
||||
<?PHP
|
||||
declare(strict_types = 1);
|
||||
require_once __DIR__ . "/../functions/functions.php";
|
||||
|
||||
if (session_status() != PHP_SESSION_ACTIVE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
// This array contains all available languages
|
||||
$allowed_langs = ['ar', 'de', 'en', 'hu', 'id', 'it', 'pl','pt'];
|
||||
|
||||
// Some languages are in translation. They will only be available for logged in users.
|
||||
|
||||
if (isset($_GET['navlang'])) {
|
||||
$_SESSION['lang'] = $_GET['navlang'];
|
||||
if (!in_array($_SESSION['lang'], $allowed_langs)) $_SESSION['lang'] = 'de';
|
||||
}
|
||||
else if (!isset($_SESSION['lang'])) {
|
||||
$_SESSION['lang'] = MD_STD::lang_getfrombrowser($allowed_langs, 'en', "", false);
|
||||
}
|
||||
$lang = $_SESSION['lang'];
|
||||
|
||||
$filename = $_GET['fnam'];
|
||||
$csv_datei = MD_STD::realpath(__DIR__ . '/../csv/' . $filename);
|
||||
|
||||
// Get allowed values * $fieldNoMultiplicator
|
||||
$fieldNoMultiplicator = 10;
|
||||
require __DIR__ . "/../values/availableFields.php";
|
||||
|
||||
$allowed = $eventpart = $eventpartsure = $fieldsWithDependency = $fieldsWithAllowedValueSet = [];
|
||||
|
||||
foreach ($availableFields as $categoryName => $fieldCategory) {
|
||||
$allowed = array_merge($allowed, array_keys($fieldCategory));
|
||||
|
||||
// Extended operations for events
|
||||
if (strpos($categoryName, $basis['event']) !== false) {
|
||||
foreach ($fieldCategory as $key => $value) {
|
||||
if (strpos($key, "_annotation") !== false or strpos($key, "_gnd") !== false) continue;
|
||||
if (strpos($key, "_sure") !== false) $eventpartsure[] = $key;
|
||||
else $eventpart[] = $key;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($fieldCategory as $key => $value) {
|
||||
if (!empty($value["dependsOn"])) {
|
||||
$fieldsWithDependency[$key] = $value['dependsOn'];
|
||||
}
|
||||
if (!empty($value["allowedValues"])) {
|
||||
$fieldsWithAllowedValueSet[$key] = $value['allowedValues'];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$allowed_inclusion_kind_of = ['inclusion_kind_of', 'Schenkung', 'Kauf', 'Grabung', 'Notbergung', 'Erbschaft', 'Stiftung', 'Enteignung', 'Ursprungsbestand', 'Ajándékozás','Vétel','Feltárás','Hivatalos átadás','Csere','Gyűjtés','Saját előállítás','Törzsanyag','Letét', 'endowment', 'dispossession', 'old stock', ''];
|
||||
|
||||
echo printHTMLHead();
|
||||
|
||||
echo '<div class="maincontent">';
|
||||
echo 'Please wait ... (checking validity)';
|
||||
echo '<form action="index.php" style="margin:0px;padding:0px;">';
|
||||
echo '<input type="submit" value="Reload" />';
|
||||
echo '</form>';
|
||||
|
||||
///// Check #1
|
||||
//echo '<pre>';print_r($allowed);echo '</pre>';
|
||||
echo '1: Only allowed tags (column names) used?';
|
||||
$fp = fopen ( $csv_datei, 'r' );
|
||||
$y = 1;
|
||||
$error = 0;
|
||||
$zeile = fgetcsv( $fp, 100000, ';' );
|
||||
$maxLoopLen = count($zeile);
|
||||
for ($x = 0; $x < $maxLoopLen; $x++) {
|
||||
|
||||
$zeile[$x] = str_replace("\xEF\xBB\xBF", "", $zeile[$x]);
|
||||
$inhalt[$y][$x] = $zeile[$x];
|
||||
if (!in_array($inhalt[1][$x], $allowed)) {
|
||||
echo '<br><i style="font-style:normal;color:#990000;">ERROR in column ' . $x . ' created by value: ' . $inhalt[1][$x] . '</i>';
|
||||
$error = $error + 1;
|
||||
}
|
||||
//echo '<br/>';var_dump($inhalt[1][$x]);
|
||||
}
|
||||
fclose($fp);
|
||||
$erstezeile = $zeile;
|
||||
if ($error != 0) echo '<br><b style="color:#990000;">Not allowed tags found !</b>'; else echo '<br><i style="font-style:normal;color:#009900;">Only allowed tags used !</i>';
|
||||
|
||||
//// Check #2
|
||||
echo '<br><br>2: Not allowed multiple use of tags (column names)?';
|
||||
$compare = array_unique($zeile);
|
||||
|
||||
$result = identical_values($zeile, $compare);
|
||||
if ($result == false) {
|
||||
echo '<br><b style="color:#990000;">There are dublicate column names !</b>';
|
||||
$error = $error + 1;
|
||||
}
|
||||
else {
|
||||
echo '<br><i style="font-style:normal;color:#009900;">No dublicate column names !</i>';
|
||||
}
|
||||
|
||||
|
||||
//// Get values into memory for following checks
|
||||
$fp = fopen($csv_datei, 'r');
|
||||
$y = 0;
|
||||
while ($zeile = fgetcsv($fp, 100000, ';')) {
|
||||
|
||||
$y++;
|
||||
$maxLoopLen = count($zeile);
|
||||
for ($x = 0; $x < $maxLoopLen; $x++) {
|
||||
$inhalt[$y][$x] = str_replace("'", "\'", $zeile[$x]);
|
||||
}
|
||||
}
|
||||
fclose($fp);
|
||||
|
||||
///// Check #3
|
||||
echo '<br><br>3: Mandatory tags available and always filled in?';
|
||||
unset($inv_array);
|
||||
$inv_error = 0;
|
||||
|
||||
/**
|
||||
* Function for finding duplicates?.
|
||||
*
|
||||
* @param array $array Input array.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function get_duplicates(array $array):array {
|
||||
return array_unique(array_diff_assoc($array, array_unique($array)));
|
||||
|
||||
}
|
||||
|
||||
$mandatory = ['inventory_number','object_type','object_title','object_description'];
|
||||
foreach ($mandatory as $tMandatoryField) {
|
||||
if (!in_array($tMandatoryField, $erstezeile)) {
|
||||
echo '<br><i style="font-style:normal;color:#990000;">Mandatory: Column <b>' . $tMandatoryField . '</b> missing</i>';
|
||||
$error = $error + 1;
|
||||
$inv_error = $inv_error + 1;
|
||||
}
|
||||
else {
|
||||
$spaltenr = array_search($tMandatoryField, $erstezeile);
|
||||
for ($j = 0; $j < $y; $j++) {
|
||||
if ($inhalt[$j + 1][$spaltenr] == '') {
|
||||
echo '<br><i style="font-style:normal;color:#990000;">Missing value for <b>' . $tMandatoryField . '</b> in row ' . ($j + 1) . '</i>';
|
||||
$error = $error + 1;
|
||||
$inv_error = $inv_error + 1;
|
||||
}
|
||||
if ($tMandatoryField == 'inventory_number') {
|
||||
$inv_array[] = $inhalt[$j + 1][$spaltenr];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($inv_error == 0) echo '<br><i style="font-style:normal;color:#009900;">All mandatory tags available and with values !</i>';
|
||||
|
||||
|
||||
///// Check #4
|
||||
echo '<br><br>4: Inventory_number unique ?';
|
||||
if (in_array('inventory_number', $erstezeile)) {
|
||||
$doppelte_inv = get_duplicates($inv_array);
|
||||
$doppelte_inv = array_values($doppelte_inv);
|
||||
if (!empty($doppelte_inv)) {
|
||||
foreach ($doppelte_inv as $tDublicateInvNo) {
|
||||
echo '<br><i style="font-style:normal;color:#990000;">Multiple use of inventory_number <b>' . $tDublicateInvNo . '</b></i>';
|
||||
$error = $error + 1;
|
||||
}
|
||||
}
|
||||
else echo '<br><i style="font-style:normal;color:#009900;">All inventory_numbers are unique !</i>';
|
||||
}
|
||||
else {
|
||||
echo '<br><b style="font-style:normal;color:#990000;">Aborted, column inventory_number is missing</b>';
|
||||
$error = $error + 1;
|
||||
}
|
||||
|
||||
///// Check #5
|
||||
echo '<br><br>5: Dependent colums observed ?<br>';
|
||||
|
||||
|
||||
// Check for correct handling of dependent fields
|
||||
foreach ($fieldsWithDependency as $tField => $tDependentFields) {
|
||||
|
||||
if (array_search($tField, $erstezeile) === false) continue;
|
||||
|
||||
foreach ($tDependentFields as $tDependentField) {
|
||||
if (array_search($tDependentField, $erstezeile) === false) {
|
||||
$depencymessage[] = "Dependency issue at column $tField: Corresponding column $tDependentField is missing";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!empty($depencymessage)) {
|
||||
echo '<b style="color:#990000;">Dependent columns were not observed !</b>';
|
||||
foreach ($depencymessage as $tDepMsg) {
|
||||
echo '<br>' . $tDepMsg;
|
||||
$error = $error + 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
echo '<i style="font-style:normal;color:#009900;">Dependent columns were observed !</i>';
|
||||
}
|
||||
|
||||
///// Check #6
|
||||
echo '<br><br>6: Dependency of content observed?';
|
||||
|
||||
$crosscheck1 = ['object_other_title','detailed_description','detailed_description','inscription','inscription','dimensions_separate_length_value', 'dimensions_separate_width_value', 'dimensions_separate_height_value', 'dimensions_separate_diameter_value', 'dimensions_separate_wall_thickness_value', 'dimensions_separate_weight_value','closer_location','bought_for','worth_value','worth_insurance_value'];
|
||||
$crosscheck2 = ['object_other_title_kind_of','detailed_description_md','detailed_description_extern','inscription_md','inscription_extern','dimensions_separate_length_unit', 'dimensions_separate_width_unit', 'dimensions_separate_height_unit', 'dimensions_separate_diameter_unit', 'dimensions_separate_wall_thickness_unit', 'dimensions_separate_weight_unit','closer_location_as','bought_for_currency','worth_unit','worth_insurance_unit'];
|
||||
|
||||
$depcon_error = 0;
|
||||
foreach ($crosscheck1 as $l => $tCrossCheck) {
|
||||
|
||||
if (in_array($tCrossCheck, $erstezeile)) {
|
||||
|
||||
for ($j = 1; $j < ($y + 1); $j++) {
|
||||
if ($inhalt[$j][array_search($crosscheck2[$l], $erstezeile)] !== '' and $inhalt[$j][array_search($tCrossCheck, $erstezeile)] == '') {
|
||||
echo '<br>Tag <b>' . $crosscheck2[$l] . '</b> given but no entry for <b>' . $tCrossCheck . '</b> (row ' . $j . ')';
|
||||
$depcon_error++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
foreach ($eventpart as $l => $tEventPart) {
|
||||
if (in_array($tEventPart, $erstezeile)) {
|
||||
for ($j = 1; $j < ($y + 1); $j++) {
|
||||
if ($inhalt[$j][array_search($eventpartsure[$l], $erstezeile)] !== '' and $inhalt[$j][array_search($tEventPart, $erstezeile)] == '') {
|
||||
echo '<br>Tag <b>' . $eventpartsure[$l] . '</b> given but no entry for <b>' . $tEventPart . '</b> (row ' . $j . ')';
|
||||
$depcon_error++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (in_array('dimensions_separate_show_md', $erstezeile)) {
|
||||
for ($j = 1; $j < ($y + 1); $j++) {
|
||||
if ($inhalt[$j][array_search('dimensions_separate_show_md', $erstezeile)] !== '' and ($inhalt[$j][array_search('dimensions_separate_length_value', $erstezeile)] == '') and $inhalt[$j][array_search('dimensions_separate_width_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_heigt_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_weight_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_diameter_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_wall_thickness_value', $erstezeile)] == '') {
|
||||
echo '<br>Tag <b>dimensions_separate_show_md</b> given but no separate values available (row ' . $j . ')';
|
||||
$depcon_error = $depcon_error + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (in_array('dimensions_separate_show_extern', $erstezeile)) {
|
||||
for ($j = 1; $j < ($y + 1); $j++) {
|
||||
if ($inhalt[$j][array_search('dimensions_separate_show_extern', $erstezeile)] !== '' and ($inhalt[$j][array_search('dimensions_separate_length_value', $erstezeile)] == '') and $inhalt[$j][array_search('dimensions_separate_width_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_heigt_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_weight_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_diameter_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_wall_thickness_value', $erstezeile)] == '') {
|
||||
echo '<br>Tag <b>dimensions_separate_show_extern</b> given but no separate values available (row ' . $j . ')';
|
||||
$depcon_error = $depcon_error + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
for ($im=1;$im<11;$im++)
|
||||
{
|
||||
if (in_array('image_name'.$im,$erstezeile))
|
||||
{
|
||||
for ($j=1;$j<($y+1);$j++)
|
||||
{
|
||||
if ($inhalt[$j][array_search('image_rights'.$im,$erstezeile)]!=='')
|
||||
{
|
||||
echo '<br>TAG <b>image_name'.$im.'</b> given but no value available for image_rights'.$im.' (row '.$j.')';
|
||||
$depcon_error=$depcon_error+1;
|
||||
}
|
||||
if ($inhalt[$j][array_search('image_visible'.$im,$erstezeile)]!=='')
|
||||
{
|
||||
echo '<br>TAG <b>image_name'.$im.'</b> given but no value available for image_visible'.$im.' (row '.$j.')';
|
||||
$depcon_error=$depcon_error+1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
if ($depcon_error == 0) echo '<br><i style="font-style:normal;color:#009900;">Dependency of content was observed !</i>';
|
||||
|
||||
///// Check #7
|
||||
echo '<br><br>7: Not allowed values in controlled lists?<br>';
|
||||
for ($i = 2; $i <= $y; $i++) {
|
||||
|
||||
foreach ($inhalt[$i] as $key => $value) {
|
||||
|
||||
$columnName = $inhalt[1][$key];
|
||||
// If the field is not restricted, then continue
|
||||
if (!isset($fieldsWithAllowedValueSet[$columnName])) continue;
|
||||
|
||||
// For others: check if the value is from the list of allowed values.
|
||||
if (!in_array($value, $fieldsWithAllowedValueSet[$columnName])) {
|
||||
|
||||
// It may be that the value is empty together with all dependent fields,
|
||||
// because it's in a repeat field that was needed earlier.
|
||||
if (empty($value) && !empty($fieldsWithDependency[$columnName])) {
|
||||
|
||||
$allDependentsEmpty = true;
|
||||
foreach ($fieldsWithDependency[$columnName] as $depField) {
|
||||
// Find keys of dependent field
|
||||
$depFieldKey = array_search($depField, $inhalt[1]);
|
||||
if (!empty($inhalt[$i][$depFieldKey])) {
|
||||
$allDependentsEmpty = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($allDependentsEmpty === true) continue;
|
||||
|
||||
}
|
||||
|
||||
$errormessage[] = "Disallowed value in column <code>{$columnName}</code> on row <code>{$i}</code>: <em>" . $value . "</em> (allowed values: <small>" . implode(", ", $fieldsWithAllowedValueSet[$columnName]) . "</small>)";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($errormessage) and $errormessage != '') {
|
||||
echo '<b style="color:#990000;">Columns with controlled values contain invalid values !</b>';
|
||||
foreach ($errormessage as $tMsg) {
|
||||
echo '<br>' . $tMsg;
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
echo '<i style="font-style:normal;color:#009900;">Values in controlled fields are all valid !</i>';
|
||||
}
|
||||
|
||||
///// Check #8
|
||||
unset($errormessage);
|
||||
echo '<br><br>8: Main image or main resource given?<br>';
|
||||
$hasanyimage = 0;
|
||||
for ($im = 1; $im < 29; $im++)
|
||||
{
|
||||
if (array_search('image_name' . $im, $erstezeile) != '') {$imagemain[$im]['name'] = array_search('image_name' . $im, $erstezeile);$hasanyimage++;
|
||||
}
|
||||
if (array_search('image_visible' . $im, $erstezeile) != '') $imagemain[$im]['visible'] = array_search('image_visible' . $im, $erstezeile);
|
||||
if (array_search('image_main' . $im, $erstezeile) != '') $imagemain[$im]['main'] = array_search('image_main' . $im, $erstezeile);
|
||||
}
|
||||
|
||||
if ($hasanyimage > 0) {
|
||||
$imagemain = array_values($imagemain);
|
||||
for ($i = 1; $i <= $y; $i++)
|
||||
{
|
||||
if ($i > 1) {
|
||||
//check if in a row any image_name is given
|
||||
$maimg = $hatimg = 0;
|
||||
foreach ($imagemain as $im => $tMainImage) {
|
||||
if ($inhalt[$i][$tMainImage] != '') $hatimg++;
|
||||
}
|
||||
if ($hatimg > 0) {
|
||||
// first check: how many main-images?
|
||||
foreach ($imagemain as $im => $tMainImage) {
|
||||
if ($inhalt[$i][$imagemain[$im]['main']] == 'y') {
|
||||
$maimg++;
|
||||
$merk = $im;
|
||||
}
|
||||
}
|
||||
// if there is exacly one main-image, is it visible?
|
||||
if ($maimg == 1) {
|
||||
if ($inhalt[$i][$imagemain[$merk]['visible']] == 'n') {
|
||||
$errormessage[] = '<b style="font-weight:normal;color:#990000">Main image in row ' . $i . ' is not visible</b>';
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($maimg == 0 and $hatimg > 0) $errormessage[] = '<b style="font-weight:normal;color:#990000">There is no visible main image given in row ' . $i . '</b>';
|
||||
if ($maimg > 1 and $hatimg > 0) $errormessage[] = '<b style="font-weight:normal;color:#990000">There are ' . $maimg . ' main images given in row ' . $i . '</b>';
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($errormessage)) {
|
||||
echo '<b style="color:#990000;">There is not one main image for each object !</b>';
|
||||
foreach ($errormessage as $tMsg) {
|
||||
echo '<br>' . $tMsg;
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
echo '<i style="font-style:normal;color:#009900;">For each object that has images attached exactly one main image is given !</i>';
|
||||
}
|
||||
}
|
||||
else {
|
||||
echo '<i style="font-style:normal;color:#009900;">No images to be imported !</i>';
|
||||
}
|
||||
|
||||
echo '<hr>';
|
||||
if ($error + $depcon_error > 0) {
|
||||
echo '
|
||||
<p>Error(s) found: ' . ($error + $depcon_error) . '</p>';
|
||||
}
|
||||
else {
|
||||
echo '<a href="index6.php?fnam=' . htmlspecialchars($_GET['fnam']) . '" class="buttonLike">Create XML for md:import (utf8)</a><br>';
|
||||
}
|
||||
echo '</div>';
|
||||
echo '
|
||||
|
||||
</body>
|
||||
</html>
|
||||
';
|
86
public/index6.php
Normal file
86
public/index6.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?PHP
|
||||
declare(strict_types = 1);
|
||||
require_once __DIR__ . "/../functions/functions.php";
|
||||
|
||||
if (session_status() != PHP_SESSION_ACTIVE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
// This array contains all available languages
|
||||
$allowed_langs = ['ar', 'de', 'en', 'hu', 'id', 'it', 'pl','pt'];
|
||||
|
||||
// Some languages are in translation. They will only be available for logged in users.
|
||||
|
||||
if (isset($_GET['navlang'])) {
|
||||
$_SESSION['lang'] = $_GET['navlang'];
|
||||
if (!in_array($_SESSION['lang'], $allowed_langs)) $_SESSION['lang'] = 'de';
|
||||
}
|
||||
else if (!isset($_SESSION['lang'])) {
|
||||
$_SESSION['lang'] = MD_STD::lang_getfrombrowser($allowed_langs, 'en', "", false);
|
||||
}
|
||||
$lang = $_SESSION['lang'];
|
||||
|
||||
if (empty($filename = trim($_GET['fnam'], " ,./"))) {
|
||||
echo "Error: Invalid file name";
|
||||
exit;
|
||||
}
|
||||
$csv_datei = MD_STD::realpath(__DIR__ . '/../csv/' . $filename);
|
||||
|
||||
if (is_dir(__DIR__ . "/../xml")) rrmdir(__DIR__ . '/../xml');
|
||||
mkdir(__DIR__ . "/../xml", 0755);
|
||||
|
||||
if (!($fp = fopen($csv_datei, 'r'))) {
|
||||
throw new MDmainEntityNotExistentException("Failed opening file");
|
||||
}
|
||||
$y = 0;
|
||||
while ($zeile = fgetcsv($fp, 100000, ';')) {
|
||||
|
||||
$zeile = str_replace("\xEF\xBB\xBF", '', $zeile);
|
||||
|
||||
$y++;
|
||||
|
||||
$zieldatei = 'xml/' . $y . '.xml';
|
||||
if (!$handle = fopen($zieldatei, 'w')) {
|
||||
echo "Cannot open file ($zieldatei)";exit;
|
||||
}
|
||||
|
||||
$xmlDoc = new DOMDocument("1.0", "UTF-8");
|
||||
$xmlDoc->preserveWhiteSpace = false;
|
||||
$xmlDoc->formatOutput = true;
|
||||
# $xmlDoc->encoding = 'utf-8';
|
||||
$xmlMainElem = $xmlDoc->createElement("record");
|
||||
$record_node = $xmlDoc->appendChild($xmlMainElem); //add record element to XML node
|
||||
# $rss_node->setAttribute("version", "2.0"); //set RSS version
|
||||
|
||||
$lineCount = count($zeile);
|
||||
|
||||
for ($x = 0; $x < $lineCount; $x++) {
|
||||
$inhalt[$y][$x] = $zeile[$x];
|
||||
if ($inhalt[$y][$x] == '') $inhalt[$y][$x] = 'ERSATZ';
|
||||
|
||||
$record_node->appendChild(createTextDomElement($xmlDoc, trim($inhalt[1][$x]), trim($inhalt[$y][$x])));
|
||||
|
||||
}
|
||||
|
||||
$somecontent = '<?xml version="1.0" encoding="UTF-8"?>' . $xmlDoc->saveXML($xmlDoc->documentElement);
|
||||
|
||||
# $somecontent .= '</record>';
|
||||
//if ($y>1)
|
||||
//{
|
||||
if (fwrite($handle, $somecontent) === FALSE) {
|
||||
echo "Cannot write to file ($filename)";exit;
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
}
|
||||
fclose($fp);
|
||||
|
||||
|
||||
echo printHTMLHead();
|
||||
|
||||
echo '
|
||||
<div>
|
||||
' . ($y - 1) . ' files created<br />
|
||||
<hr/>
|
||||
<a href="zipit.php" class="buttonLike">Download as ZIP</a>
|
||||
</div>';
|
29
public/upload.php
Normal file
29
public/upload.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?PHP
|
||||
declare(strict_types = 1);
|
||||
require_once __DIR__ . "/../functions/functions.php";
|
||||
|
||||
$target = __DIR__ . "/../csv/" . basename($_FILES['uploaded']['name']);
|
||||
$targetpart = basename($_FILES['uploaded']['name']);
|
||||
|
||||
if (session_status() != PHP_SESSION_ACTIVE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
if (validateAntiCsrfToken() === false) {
|
||||
throw new MDWrongCsrfTokenException();
|
||||
}
|
||||
|
||||
//This is our size condition
|
||||
if ($uploaded_size > 40000000) {
|
||||
echo "Your file is too large.<br>";
|
||||
return;
|
||||
}
|
||||
|
||||
//Here we check that $ok was not set to 0 by an error
|
||||
//If everything is ok we try to upload it
|
||||
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) {
|
||||
echo "Sorry, there was a problem uploading your file.";
|
||||
return;
|
||||
}
|
||||
|
||||
header("Location: index3.php?fnam=" . basename($_FILES['uploaded']['name']));
|
43
public/zipit.php
Normal file
43
public/zipit.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?PHP
|
||||
require_once __DIR__ . "/../inc/zip.php";
|
||||
require_once __DIR__ . "/../functions/functions.php";
|
||||
|
||||
$fileTime = date("D, d M Y H:i:s T");
|
||||
$fileDir = __DIR__ . '/../xml/';
|
||||
|
||||
$zip = new Zip();
|
||||
//$zip->setComment("Example Zip file.\nCreated on " . date('l jS \of F Y h:i:s A'));
|
||||
|
||||
if ($handle = opendir($fileDir)) {
|
||||
/* This is the correct way to loop over the directory. */
|
||||
while (false !== ($file = readdir($handle))) {
|
||||
if (strpos($file, ".xml") !== false) {
|
||||
$pathData = pathinfo($fileDir . $file);
|
||||
$fileName = $pathData['filename'];
|
||||
if ($file != '1.xml')
|
||||
$zip->addFile(MD_STD::file_get_contents($fileDir . $file), $file, filectime($fileDir . $file));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ini_get('zlib.output_compression')) {
|
||||
ini_set('zlib.output_compression', 'Off');
|
||||
}
|
||||
|
||||
$zip->finalize(); // Not scrictly necessary, the next line will call it anyway.
|
||||
$zipData = $zip->getZipData();
|
||||
$length = strlen($zipData);
|
||||
|
||||
header('Pragma: public');
|
||||
header("Last-Modified: " . $fileTime);
|
||||
header("Expires: 0");
|
||||
header("Accept-Ranges: bytes");
|
||||
header("Connection: close");
|
||||
header("Content-Type: application/zip");
|
||||
header('Content-Disposition: attachment; filename="csv_xml.zip";' );
|
||||
header("Content-Transfer-Encoding: binary");
|
||||
header("Content-Length: " . $length);
|
||||
echo $zipData;
|
||||
|
||||
rrmdir(__DIR__ . '/../xml');
|
||||
|
Reference in New Issue
Block a user