Skip to content

Instantly share code, notes, and snippets.

@hagb4rd
Last active November 22, 2018 22:34
Show Gist options
  • Save hagb4rd/46270a66ac5f63f791ecbfd4999940ba to your computer and use it in GitHub Desktop.
Save hagb4rd/46270a66ac5f63f791ecbfd4999940ba to your computer and use it in GitHub Desktop.
upload-image-to-imgur
<html>
<head>
<title>bit.ly/gistapp-image-upload</title>
<meta name="author" content="hagb4rd@gmail.com"></meta>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://unpkg.com/ea-webkit@latest/dist/webkit.min.js"></script>
<link rel="stylesheet"
href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/highlight.min.js"></script>
<style>
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
}
*::after, *::before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html {
color: #F0F0F0;
background: #600;
margin: 0 auto;
width: 76em;
font-family: PT Sans, DejaVu Sans, Arial, sans;
}
body {
color: #F0F0F0;
background: #600;
margin: 0;
}
h1 {
margin-top: 0;
}
button {
color: #000;
background: #ccc;
}
.box {
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto;
}
.row {
margin-right: -15px;
margin-left: -15px;
}
.row::before {
display: table;
content: " ";
}
.row::after {
clear: both;
}
.wrapper {
color: #000;
background: #ccc;
padding: 1em;
margin: 1em auto;
min-height: 300px;
border-top: 5px solid #69c773;
box-shadow: 0 2px 10px rgba(0,0,0,0.8);
}
.fileDisplayArea {
margin-top: 2em;
width: 100%;
margin: 0 auto;
}
img {
width: 100%;
margin: 0;
}
.pointer { cursor: pointer; }
.wait { cursor: wait; }
.progress { cursor: progress; }
.resize { cursor:ne-resize; }
</style>
</head>
<body>
<div class="box">
<div class="row">
<h1><a href="http://bit.ly/gistapp-image-upload">bit.ly/gistapp-image-upload</a></h1>
(<a href="https://repl.it/@hagb4rd/gistapp-image-upload">repl.it*</a> .. click Image-Preview for upload/slide)<br/>
</div>
<div class="row">
<div class="wrapper box">
<div>
Select an image file:
<input type="file" class="fileInput"></input>
</div>
<div class="logView row box"></div>
<div class="fileDisplayArea box row"></div>
</div>
</div>
</div>
<script>
var main=async()=>{
var cdn = {
'$': 'https://unpkg.com/ea-webkit@latest/dist/webkit.min.js',
'requirejs':'https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.5/require.min.js',
'ace':'https://cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ace.js'
};
await loadScript(cdn['$']);
window.webkit=window.Q=$;
//await loadScript(cdn['hyperhtml']);
console.log($);
var wrapper = document.querySelector('.wrapper');
var fileInput = wrapper.querySelector('.fileInput');
var fileDisplayArea = wrapper.querySelector('.fileDisplayArea');
fileInput.addEventListener('change', function(e) {
var file = fileInput.files[0];
var imageType = /image.*/;
if (file.type.match(imageType)) {
var reader = new FileReader();
reader.onload = function(e) {
fileDisplayArea.innerHTML = "";
var img = new Image();
img.src = reader.result;
img.classList.add('pointer');
img.addEventListener('click', postImage);
fileDisplayArea.appendChild(img);
}
reader.readAsDataURL(file);
} else {
fileDisplayArea.innerHTML = "File not supported!";
}
});
//creates this bookmarklet editor widget
$.toolbox()
.then(({editor, btnToolbox,btnBookmarklet}) => {
//this (or any) gist link
var defaultGistUrl = 'https://gist.github.com/hagb4rd/46270a66ac5f63f791ecbfd4999940ba/#file-index-html';
//load-gist-contents
$.gist.file(defaultGistUrl).then(file=>{
editor.session.setValue(file.content);
})
.then(()=>{
try {
document.querySelector('#_btnBookmarklet').addEventListener('click', (e)=>{ if(typeof(window.w)=='undefined') window.w=window.open('','w'); window.w.document.open(); window.w.document.write(editor.session.getValue()); window.w.document.close(); })
} catch(e) {
console.log(e);
}
})
})
};
var log = (s,parentElement='') => {
parentElement=parentElement||document.body||document.documentNode;
var block = document.createElement('code');
block.classList.add('json');
block.classList.add('row');
block.classList.add('box');
block.innerText = JSON.stringify(s);
// .replace(/</g,'&lt;')
// .replace(/\>/g,'&gt;')
// .replace(/&/g,'&amp;')
//
parentElement.appendChild(block);
hljs.configure({useBR: true});
hljs.highlightBlock(block);
return s;
}
var storage = {
token: 'image-file-reader-list',
save(url) {
var list = this.load();
list.push(url);
localStorage.setItem(this.token, JSON.stringify(list));
return list;
},
load() {
return JSON.parse(localStorage.getItem(this.token)||'[]');
}
}
var postImage = (e) => {
var img = e.target;
var parent = img.parentElement.parentElement;
var logView = parent.querySelector('.logView');
var imagePreview = parent.querySelector('.fileDisplayArea');
var fileInput = parent.querySelector('.fileInput');
img.removeEventListener('click',postImage);
img.classList.remove('pointer');
img.classList.add('wait');
var formData=new FormData();
formData.append('image', fileInput.files[0]);
fetch('https://api.imgur.com/3/upload?type=file', {
method:'POST',
mode: 'cors',
headers: {
'Authorization': 'Client-ID b57ad9a732b3083'
},
body:formData
})
.then(resp=>resp.json())
.then(resp=>{
console.log(resp);
if(resp.success && resp.data.link) {
storage.save(resp.data.link);
var link = document.createElement('a');
//
link.href = "http://hagb4rd.gizmore.org/gallery/slideshow.html?img="+ encodeURIComponent(resp.data.link);
link.setAttribute('target', 'imgur');
link.appendChild(img);
parent.appendChild(link);
}
img.classList.remove('wait');
return log(resp.data,logView);
})
.catch(err=>{
console.log(err);
img.classList.remove('wait');
return log(err,logView);
})
.then(()=>{
log(storage.load());
});
}
var loadScript = function(e) {
return new Promise((t, o) => {
var n = 'mk' + [...String(e)].reduce((e, t) => e ^= t.charCodeAt(0), 255),
a = document.querySelector('#' + n);
a ? t(a) : ((a = document.createElement('script')).setAttribute('async', ''), a.src = e, a.id = n, a.addEventListener('load', e => t(e)), a.addEventListener('error', e => o(e))),
(document.head || document.getElementsByTagName('head')[0] || document.documentElement).appendChild(a)
})
}
main();
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment