Upload files to 'Data-Matrix'

main
anthony 4 weeks ago
parent 7a0a6099bd
commit 035ccf2375

@ -0,0 +1,427 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta content="width=device-width,initial-scale=1,user-scalable=no" name="viewport"/>
<title>Datamatrix generator</title>
<link rel="shortcut icon" href="favicon.png" type="image/png"/>
<style type="text/css">
* {margin:0; padding:0; box-sizing:border-box;}
#box {background:url('data:image/gif;base64,R0lGODlhBgAGAIAAAO7u7t7e3iH5BAAAAAAALAAAAAAGAAYAAAIKhIOXgKGuDIOzAAA7') #eeeff1;}
body {font-size:12px; background:#ffe;}
body,
textarea {text-align:center; font-family:arial;}
input {}
input[type='number'],
input[type='color'] {width:5em;}
input[type='number'] {padding:0.25em; text-align:right;}
select {width:9em; font-size:11px; padding:0.25em 0.2em;}
option {padding:0.25em 0.2em;}
textarea {resize:none; padding:2.5em; color:#358; background:#eef2f4; font-size:2em; border:0; width:100%;}
#set {user-select:none; background:#fff; overflow:hidden;}
#set table {border-collapse:collapse; padding:2em; font-size:11px; text-transform:uppercase; margin:2em auto;}
#set th,
#set td {padding:0.4em 0.5em;}
#set th {text-align:right; color:#567;}
#set td {text-align:left;}
/* res beautifier */
#res {color:#789; padding:2em; text-align:left; font-family:'Lucida Console', Monaco, monospace;}
#res b {font-weight:normal;}
#res i {font-style:normal;}
#res .obj {color:#789;}
#res .obj b {color:#345; font-weight:bold;}
#res .key {color:#45a;}
#res .num {color:#12a;}
#res .txt {color:#9ab;}
#res .txt i {color:#384;}
#res .clr {color:#9ab;}
#res .clr i {color:#731;}
#res a {color:#67a;}
#res a:hover {color:#67e;}
#box {overflow:hidden; position:relative; height:300px; padding:3em;}
#box svg {display:block; position:absolute; right:50%; bottom:50%; transform:translate( 50%, 50%); cursor:pointer;}
#box svg {max-width:100%; max-height:100%;}
/* minimized options for small screen */
.opt {display:block; padding:1em; background:#0ae; color:#fff; text-decoration:none;}
.opt:hover {background:#0af;}
#op2.opt {background:#ea0;}
#op2.opt:hover {background:#fa0;}
#set table,
#set .legend,
#set #op2.opt,
#set.show #op1.opt {display:none;}
#set.show table {display:table;}
#set.show #op2.opt {display:block;}
@media (min-width: 620px) {
html,
body,
#box,
#set,
#txt,
#msg,
#hnt {display:block; position:absolute; top:0; right:0; left:0; bottom:0;}
html,
body {overflow:hidden;}
#box {height:auto;}
#txt,
#hnt {height:250px; top:auto; border-top:3px #eee solid;}
#set,
#hnt {width:270px; left:auto;}
#set table {font-size:10px;}
#box,
#txt {right:270px}
#box,
#set {bottom:250px;}
#hnt {overflow:auto;}
#msg {width:100%; height:100%;}
#set {overflow-y:auto;}
#set .legend {display:block;}
#set table {display:table;}
#set .opt {display:none !important;}
}
@media (min-width:900px) {
#set,
#hnt {width:30%}
#box,
#txt {right:30%}
}
@media (min-width:1024px) {
#set table {font-size:11px;}
}
@media (min-width:1600px) {
#set,
#hnt {width:480px}
#box,
#txt {right:480px}
}
.legend {padding:1.5em 0.5em; border-bottom:1px #eee solid;}
</style>
<script src="datamatrix.min.js"></script>
</head>
<body>
<div id="box"></div>
<div id="set">
<a id="op1" class="opt" href="#">Show settings</a>
<a id="op2" class="opt" href="#">Hide settings</a>
<div class="legend">
<h3>DATAMATRIX SETTINGS</h3>
</div>
<table><tr><th>
<label for="in1">Height or Dim</label></th><td><input
id="in1" type="number" value="256" min="256" max="61440" step="64"/></td></tr><tr><th>
<label for="in2">Rectangle</label></th><td><input
id="in2" type="checkbox"/></td></tr><tr><th>
<label for="in3">Padding</label></th><td><input
id="in3" type="number" value="2" min="0" max="10"/></td></tr><tr><th>
<label for="in4">Faces</label></th><td><input
id="in4" type="color" value="#000000"/></td></tr><tr><th>
<label for="in5">Background color</label></th><td><input
id="in5" type="color" value="#f2f4f8"/></td></tr><tr><th>
<label for="in6">Background opaque</label></th><td><input
id="in6" type="checkbox"/></td></tr><tr><th>
<label for="in7">Optimized SVG SIZE</label></th><td><input
id="in7" type="checkbox" checked="checked"/></td></tr></table>
</div>
<div id="txt"><textarea id="msg"></textarea></div>
<div id="hnt"><pre id="res"></pre></div>
<script>
'use strict';
(function() {
/**
This script is not optimized
*/
var
box = document.getElementById('box'),
txt = document.getElementById('msg'),
res = document.getElementById('res'),
set = document.getElementById('set'),
op1 = document.getElementById('op1'),
op2 = document.getElementById('op2'),
in1 = document.getElementById('in1'),
in2 = document.getElementById('in2'),
in3 = document.getElementById('in3'),
in4 = document.getElementById('in4'),
in5 = document.getElementById('in5'),
in6 = document.getElementById('in6'),
in7 = document.getElementById('in7'),
current = function( o ) {
o._value = o.value;
},
updated = function( o ) {
return o._value == o.value;
},
clear = function( o ) {
while( o.childNodes[ 0 ] ) {
o.removeChild( o.childNodes[ 0 ] );
}
},
hint = function( d ) {
var
c = 0,
s = [];
/* beautify: remove default values */
if( 256 == d.dim ) delete d.dim;
if( 2 == d.pad ) delete d.pad;
if( 0 == d.rct ) delete d.rct;
if( 0 == d.pal[ 1 ] ) delete d.pal.pop();
if( d.pal[ 0 ] == '#000000' && !d.pal[ 1 ] ) delete d.pal;
if( 0 == d.vrb ) delete d.vrb;
for( var k in d ) {
var
v = d[ k ];
if( 1 * v == v )
v = ' <i class="num">' + v + '</i>';
else if ( Array == v.constructor )
v = '[<i class="clr">"<i>' + v.join('</i>"</i>, <i class="clr">"<i>') + '</i>"</i>]';
else
v = ' <i class="txt">"<i>' + v + '</i>"</i>';
s.push( (s.length ? ',' : ' ') + '<b class="key">' + k + '</b> : ' + v );
c++;
}
res.innerHTML = '<b class="obj"><b>DATAMatrix</b>(</b>'
+ (( 1 == c )
? '<i class="txt">"<i>' + d.msg + '</i>"</i>'
: '{\n\n ' + s.join('\n ') + '\n\n}')
+ '<b class="obj">)</b>;\n'
+ '\n\n/**\n\n Source code and documentation:\n <a href="https://github.com/datalog/datamatrix-svg">https://github.com/datalog/datamatrix-svg</a>\n\n*/\n\n\n';
},
download = function( d ) {
/**
ATTN!
We are going to download "WHAT WAS RENDERED" by browser
not "WHAT WAS GENERATED" by datamatrix.js
*/
function replace( d, r ) {
return d.replace( new RegExp( Object.keys( r ).join('|'), 'gi'), function( m ) {
return r[ m ];
});
}
var
d = '<!--\n\nhttps://github.com/datalog/datamatrix-svg\n\n-->' + replace( d, {
/* removing useless spaces */
'M ' : 'M'
,' M ' : 'M'
,' V ' : 'V'
,' v ' : 'v'
,' H ' : 'H'
,' h ' : 'h'
,' Z' : 'Z'
,' z' : 'z'
,' />' : '/>'
,'></path>': '/>'
,'svg xmlns="http://www.w3.org/2000/svg"':'svg'
}),
n = 'datamatrix-' + replace( new Date().toISOString().slice( 0, 19 ), {
':' : ''
,'-' : ''
,'T' : '-'
}) + '.svg',
b = new Blob( [ d ], { type:'image/svg+xml'} );
if( window.navigator.msSaveOrOpenBlob ) {
window.navigator.msSaveOrOpenBlob( b, n );
} else {
var
a = document.createElement("a"),
u = URL.createObjectURL( b );
a.href = u;
a.download = n;
document.body.appendChild( a );
a.click();
setTimeout( function() {
document.body.removeChild( a );
window.URL.revokeObjectURL( u );
}, 0);
}
return false;
};
op1.onclick = function() {
set.className = 'show';
return false;
};
op2.onclick = function() {
set.className = 'hide';
return false;
};
in1.onchange =
in2.onchange =
in3.onchange =
in4.onchange =
in6.onchange =
in7.onchange = function() {
box.update();
};
in5.onchange = function() {
in6.checked = true;
box.update();
};
txt.onkeyup = function() {
if( updated( txt ) ) return;
box.update();
current( txt );
};
box.update = function() {
clear( box );
var
time = new Date(),
data = {
msg : txt.value
,dim : in1.value | 0
,rct : in2.checked | 0
,pad : in3.value | 0
,pal : [ in4.value, in6.checked | 0 && in5.value ]
,vrb : ( in7.checked ) ? 0 : 1
};
box.appendChild( DATAMatrix( data ) )
.onclick = function() {
return download( box.innerHTML );
};
console.log('DATAMatrix generation time: ' + ( new Date() - time ) + ' ms');
hint( data );
};
txt.value = [
'Your message here'
,'https://github.com/datalog/datamatrix-svg'
,'Pure javascript Datamatrix generator'
,'Type here...'
,'This is Data Matrix'
,'Abyssus abyssum invocat'
,'Amor non est medicabilis herbis'
,'Nulla dies sine linea'
,'Cogitations poenam nemo patitur'
,'Verbaque praevisam rem non invita sequentur'
][ ( Math.random() * 10 ) | 0 ];
current( txt );
box.update();
txt.focus();
})();
</script>
</body>
</html>
Loading…
Cancel
Save