photo unsplash.com
A Pen by Moncho Varela on CodePen.
photo unsplash.com
A Pen by Moncho Varela on CodePen.
| <link href='http://fonts.googleapis.com/css?family=Oswald:400,300' rel='stylesheet' type='text/css'> | |
| <!-- main --> | |
| <div class="wrapper"> | |
| <h1>Simply File to Data Uri converter</h1> | |
| <input type="file" id="files" class="inputFile" name="files[]" /> | |
| </div> | |
| <!-- lightbox --> | |
| <div class="overlay"> | |
| <a href="#" class="close_overlay">x</a> | |
| <div class="output"></div> | |
| </div> |
| var img2data = (function() { | |
| 'use strict'; | |
| return { | |
| // this.qS(foo) | |
| qS: function(el) { | |
| return document.querySelector(el); | |
| }, | |
| run: function() { | |
| this.convert(); | |
| }, | |
| convert: function() { | |
| // vars | |
| var fls = this.qS('#files'), | |
| output = this.qS('.output'), | |
| overlay = this.qS('.overlay'), | |
| close_overlay = this.qS('.close_overlay'); | |
| fls.addEventListener('change', function(e) { | |
| var file = fls.files[0], | |
| txtType = /text.*/, // all text files | |
| imgType = /image.*/, // all image files | |
| fR = new FileReader(); // fileReader start | |
| fR.onload = function(e) { | |
| // if text | |
| if (file.type.match(txtType)) { | |
| var rS = fR.result, | |
| // template | |
| render = '<a class="btn" href="'+rS+'" target="blank">Preview</a><ul>'+ | |
| '<li><b>Name: </b> '+file.name+'</li>'+ | |
| '<li><b>Size: </b> '+file.size+'</li>'+ | |
| '<li><b>Type: </b> '+file.type+'</li>'+ | |
| '<li><b>Data uri: </b></li>'+ | |
| '</ul>'+ | |
| '<pre class="textarea">'+rS+'</pre>'; | |
| output.innerHTML = render; | |
| // if image | |
| } else if(file.type.match(imgType)) { | |
| var rS2 = fR.result, | |
| // template | |
| tmpl = '<a class="btn" href="'+rS2+'" target="blank">Preview</a>'+ | |
| '<img class="thumb" src="'+rS2+'" alt="'+file.name+'"><ul>'+ | |
| '<li><b>Name: </b> '+file.name+'</li>'+ | |
| '<li><b>Size: </b> '+file.size+'</li>'+ | |
| '<li><b>Type: </b> '+file.type+'</li>'+ | |
| '<li><b>Data uri: </b></li>'+ | |
| '</ul>'+ | |
| '<pre class="textarea">'+rS2+'</pre>'; | |
| output.innerHTML = tmpl; | |
| // if not support | |
| }else{ | |
| output.innerHTML = '<h1>Sorry the file is not supported!</h1>'; | |
| } | |
| }; | |
| // on loaded add events | |
| fR.onloadend = function(e) { | |
| overlay.classList.add('show'); // add class | |
| close_overlay.onclick = function(){ | |
| overlay.classList.remove('show'); // remove class | |
| fls.value = ''; // remove files | |
| }; | |
| }; | |
| // convert to data uri | |
| fR.readAsDataURL(file); | |
| }); | |
| } | |
| }; | |
| })(); | |
| img2data.run(); |
| *, | |
| *:after, | |
| *:before { | |
| -webkit-box-sizing: border-box; | |
| -moz-box-sizing: border-box; | |
| box-sizing: border-box; | |
| } | |
| /* = scroll | |
| ----------------------------*/ | |
| ::-webkit-scrollbar { | |
| width: 8px; | |
| } | |
| ::-webkit-scrollbar { | |
| background: #ecf0f1; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: #fff; | |
| } | |
| /* = body | |
| ----------------------------*/ | |
| html,body{ | |
| position:relative; | |
| height:100%; | |
| } | |
| body{ | |
| background:url(http://31.media.tumblr.com/d83b99e22981d5e58e2bd74ed2494087/tumblr_n4ef3ynCZP1st5lhmo1_1280.jpg) no-repeat center center fixed #eee; | |
| background-size:cover; | |
| color:#7f8c8d; | |
| overflow:hidden; | |
| } | |
| .wrapper{ | |
| display: block; | |
| margin: 15% auto; | |
| width: 90%; | |
| text-align: center; | |
| } | |
| /* = title | |
| ----------------------------*/ | |
| .wrapper h1,h1{ | |
| font-family: 'Oswald', 'sans-serif'; | |
| font-weight: 400; | |
| font-size: 39px; | |
| color: #E74C3C; | |
| text-shadow: 0 2px 3px #FFF,0 4px 3px #FFF,0 5px 1px #756969; | |
| } | |
| /* = input file | |
| ----------------------------*/ | |
| .inputFile { | |
| color: transparent; | |
| outline:none; | |
| cursor:pointer; | |
| display:block; | |
| margin:0 auto; | |
| width:150px; | |
| } | |
| .inputFile::-webkit-file-upload-button { | |
| visibility: hidden; | |
| } | |
| .inputFile::before { | |
| content: 'Select file'; | |
| margin: 10px; | |
| color: #FFF; | |
| display: inline-block; | |
| background: #E74C3C; | |
| border: 1px solid #E74C3C; | |
| padding: 5px; | |
| width: 97px; | |
| height: 50px; | |
| line-height: 40px; | |
| text-align: center; | |
| text-decoration:none; | |
| outline: none; | |
| white-space: nowrap; | |
| -webkit-user-select: none; | |
| cursor: pointer; | |
| font-family: 'Oswald', 'sans-serif'; | |
| font-weight: 300; | |
| font-size: 20px; | |
| box-shadow: 0 6px 6px -6px #474747; | |
| border-radius: 2px; | |
| transition:all 0.2s ease; | |
| } | |
| .inputFile:hover::before { | |
| border-color: #eee; | |
| background: #C0392B; | |
| color: #eee; | |
| transition:all 0.2s ease; | |
| } | |
| .inputFile:active { | |
| outline: 0; | |
| } | |
| .inputFile:active::before { | |
| border-color: #FFF; | |
| background: #2B8AC0; | |
| color: #FFF; | |
| } | |
| .btn{ | |
| margin:5px; | |
| color: #FFF; | |
| display: inline-block; | |
| background: #E74C3C; | |
| border: 1px solid #E74C3C; | |
| padding: 8px 10px; | |
| text-align: center; | |
| text-decoration:none; | |
| outline: none; | |
| white-space: nowrap; | |
| cursor: pointer; | |
| font-family: 'Oswald', 'sans-serif'; | |
| font-weight: 300; | |
| font-size: 20px; | |
| box-shadow: 0 6px 6px -6px #474747; | |
| border-radius: 2px; | |
| transition:all 0.2s ease; | |
| } | |
| .btn:hover{ | |
| border-color: #eee; | |
| background: #C0392B; | |
| color: #eee; | |
| transition:all 0.2s ease; | |
| } | |
| /* = lightbox | |
| ----------------------------*/ | |
| .overlay{ | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| padding: 0; | |
| margin: 0; | |
| opacity: 0; | |
| visibility: hidden; | |
| width: 100%; | |
| height:199%; | |
| background:#ecf0f1; | |
| -webkit-transition: all 0.5s ease; | |
| transition: all 0.5s ease; | |
| } | |
| .close_overlay { | |
| position: absolute; | |
| top: 0; | |
| right: 0; | |
| margin: 0; | |
| padding: 0; | |
| text-align: center; | |
| font-family: sans-serif; | |
| text-decoration: none; | |
| font-size: 40px; | |
| width: 50px; | |
| height: 50px; | |
| line-height: 45px; | |
| color:#95a5a6; | |
| transition: all 0.5s ease; | |
| } | |
| .close_overlay:hover{ | |
| background: #E74C3C; | |
| color: #ECF0F1; | |
| transition:all 0.5s ease; | |
| } | |
| .show{ | |
| opacity: 1; | |
| visibility: visible; | |
| z-index: 999999999; | |
| } | |
| .output { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| margin: 5% auto; | |
| padding: 1em; | |
| width: 600px; | |
| height: 500px; | |
| overflow:auto; | |
| } | |
| .output ul { | |
| width: 100%; | |
| list-style: none; | |
| margin: 0; | |
| padding: 3px; | |
| display: block; | |
| color: #A7A7A7; | |
| font-size: 13px; | |
| } | |
| .output ul b{ | |
| color: #868686; | |
| } | |
| .textarea { | |
| overflow: auto; | |
| width: 100%; | |
| height: 200px; | |
| margin: auto; | |
| margin-bottom:16px; | |
| display: block; | |
| border: 1px solid #ecf0f1; | |
| background: #ecf0f1; | |
| color: #7f8c8d; | |
| font-size:13px; | |
| font-family:monospace,sans-serif; | |
| word-break: break-all; | |
| word-wrap: break-word; | |
| white-space: pre; | |
| white-space: -moz-pre-wrap; | |
| white-space: pre-wrap; | |
| white-space: pre\9; | |
| } | |
| .thumb { | |
| display: block; | |
| width: 50%; | |
| height: auto; | |
| margin: 10px auto; | |
| box-shadow: 0 6px 6px -6px #000; | |
| } |