Skip to content

Instantly share code, notes, and snippets.

@hagb4rd
Last active December 6, 2022 01:57
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save hagb4rd/6843803a6674fe1b9ead6f1e60f14f15 to your computer and use it in GitHub Desktop.
Save hagb4rd/6843803a6674fe1b9ead6f1e60f14f15 to your computer and use it in GitHub Desktop.
bookmarklets
(async(window, document)=>{
// https://gist.github.com/hagb4rd/6843803a6674fe1b9ead6f1e60f14f15#file-queue-download-images-js
// -----------
// queue() returns a promise returning function. 'tasks' is an array of higher order functions that return 'promise returning'/'async' functions [()=>async(){ }].
// the purpose of that wrapping is not to start resolving the promise immediately, but being able to map parameters for the task.
//'concurrent' is the max. number of tasks to be executed in parallel.
function queue(tasks, concurrent) {
return function() {
var result = new Array(tasks.length);
var running = 0;
var pending = tasks.length;
var cursor = 0;
function next(onDone, onError) {
if (cursor < tasks.length && running < concurrent) {
let index = cursor;
++cursor;
++running;
function save(v) {
result[index] = v;
--running;
--pending;
if (pending === 0)
onDone(result);
else
next(onDone, onError);
return v;
}
//execute task/resolve promise, and save result
tasks[index]().then(save, save);
//load next task
next(onDone, onError);
}
}
return new Promise(function(resolve, reject) {
next(function(result) {
resolve(result);
}, reject);
});
}
}
window.urlcreate=(u=`https://content4.coedcherry.com/watch-my-gf/184395/91122_#.jpg`,n=1,m=20)=>[...(new Array(m-n+1)).keys()].map(x=>(x+n)).map(x=>{ var pad=u.match(/#+/)[0].length; return u.replace(`#`.repeat(pad), String(x).padStart(pad, '0'));})
window.loadImage=(u)=>new Promise((resolve,reject)=>{var i=new Image(); i.onload=(e)=>resolve(i); i.onerror=(e)=>{var a=document.createElement('a');a.target='imageview';a.href=u; a.innerText=u;resolve(a)}; i.src=u; });
window.findImageLinks=(extensions=['.jpg','.png','.jpeg','.gif','.tif','.wbem'])=>[...document.querySelectorAll('a')].map(a=>a.href).filter(href=>extensions.some(ext=>ext==href.slice(-ext.length)));
window.prepend=(elem)=>(document.body||document.rootElement).prepend(elem);
window.loadImages=(list)=>(document.documentElement.innerHTML=``,list.map(u=>()=>(console.log(u), loadImage(u)).then(x=>prepend(x))).reduce((prev,next)=>prev.then(next),Promise.resolve()))
window.linkedImages=(d)=>{
d=d||window.document;
var xs=d.querySelectorAll("[href$=\".jpg\"],[href$=\".png\"]")
var is=[...xs].map(x=>x.href);
return is;
}
window.embedImages=(minW=250,minH=250)=>[...document.querySelectorAll('img')].filter(({width, height})=>(width>=minW && height>=minH));
window.dataUrlFromCanvas=(img)=>new Promise((resolve,reject) => {
if(img instanceof Image) {
try {
var n=document.createElement("CANVAS");
n.height=img.height;
n.width=img.width;
n.getContext("2d").drawImage(img,0,0);
var dataUrl=n.toDataURL("image/jpeg");
return resolve(dataUrl);
} catch(err) {
reject(err.message);
}
} else {
var e=new Image();
e.crossOrigin='Anonymous';
var n=document.createElement("CANVAS");
e.addEventListener("error", (e)=>reject(e.message));
e.addEventListener("load", () => {
try {
n.height=e.height;
n.width=e.width;
n.getContext("2d").drawImage(e,0,0);
var dataUrl=n.toDataURL("image/jpeg");
resolve(dataUrl);
} catch(err) {
reject(err.message);
}
});
e.src = img.src ? img.src : img;
}
})
window.dataUrlByFileReader = (url) => new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onerror=(e)=>reject(e);
xhr.onload = function () {
var reader = new FileReader();
reader.onerror = function(e) {
reject(e.message)
}
reader.onloadend = function () {
resolve(reader.result);
}
reader.readAsDataURL(xhr.response);
};
xhr.open('GET', url);
xhr.send();
})
window.readAsDataUrl=async(img)=>{
var dataUrl;
try {
dataUrl=await dataUrlFromCanvas(img);
return dataUrl;
} catch(err) {
conole.log(err);
}
try {
dataUrl=await dataUrlFromCanvas(`https://jslave.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
conole.log(err);
}
try {
dataUrl=await dataUrlFromCanvas(`https://jslave2.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
conole.log(err);
}
try {
dataUrl=await dataUrlByFileReader(img);
return dataUrl;
} catch(err) {
console.log(err);
}
try {
dataUrl=await dataUrlByFileReader(`https://jslave.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
console.log(err);
}
try {
dataUrl=await dataUrlByFileReader(`https://jslave2.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
console.log(err);
}
throw Error('could not resolve create dataUrl');
};
window.download=async(image,name)=>{
try {
var a=document.createElement('a');
var dataUrl=await readAsDataUrl(image);
a.href=dataUrl;
a.setAttribute('download', name);
a.style.display='none';
(document.body || document.documentElement).appendChild(a);
console.log('dowload:'+name);
console.log(image);
a.click();
} catch (err) {
console.log(err, [image, name]);
}
return [image, name]
}
window.downloadText=async(txt,name)=>{
try {
var rndName=()=>Date.now()+(Math.random()*100000|0)+'.txt'
name=name||rndName();
var a=document.createElement('a');
var dataUrl=`data:text/plain;charset=utf-8,${encodeURIComponent(txt)}`;
a.href=dataUrl;
a.setAttribute('download', name);
a.style.display='none';
(document.body || document.documentElement).appendChild(a);
console.log(`downloading: ${name}`);
console.log(`--------------`);
console.log(txt);
a.click();
} catch (err) {
console.log(err, [txt, name]);
}
return [txt, name]
}
window.downloadLinkedImages=()=>{
return [...linkedImages()].map((url)=>{
var name=`${location.host}${location.pathname.replace(/\//g,'.')}.${url.split(/\//).pop()}`;
return ()=>download(url,name)
})
};
window.downloadImages=(w=250,h=250)=>embedImages(w,h).map((i)=>{
var url=new URL(i.src);
var name=[url.host].concat(i.alt?i.alt.match(/\w+/g):[]).concat(url.pathname.match(/[^/\?]+/g)).filter(x=>!!x).join('-');
return ()=>download(i.src,name);
});
downloadText(findImageLinks().join('\n'));
})(window, window.document)
//Bookmarklet
(async function(window,document) {
var urlcreate=(u=`https://content4.coedcherry.com/watch-my-gf/184395/91122_#.jpg`,n=1,m=20)=>[...(new Array(m-n+1)).keys()].map(x=>(x+n)).map(x=>{ var pad=u.match(/#+/)[0].length; return u.replace(`#`.repeat(pad), String(x).padStart(pad, '0'));})
var loadImage=(u)=>new Promise((resolve,reject)=>{var i=new Image(); i.onload=(e)=>resolve(i); i.onerror=(e)=>{var a=document.createElement('a');a.target='imageview';a.href=u; a.innerText=u;resolve(a)}; i.src=u; });
var findImageLinks=(extensions=['.jpg','.png','.jpeg','.gif','.tif','.wbem'])=>[...document.querySelectorAll('a')].map(a=>a.href).filter(href=>extensions.some(ext=>ext==href.slice(-ext.length)));
var prepend=(elem)=>(document.body||document.rootElement).prepend(elem);
var loadImages=(list)=>(document.documentElement.innerHTML=``,list.map(u=>()=>(console.log(u), loadImage(u)).then(x=>prepend(x))).reduce((prev,next)=>prev.then(next),Promise.resolve()))
var downloadText=(text,filename)=>{
//var toDataUrl=(s)=>`data:text/plain;base64,${btoa(s)}`;
var toDataUrl=(s)=>`data:text/plain;charset=utf-8,`+ encodeURIComponent(s);
var a=document.createElement('a');
a.setAttribute('download',filename||'images'+(String(Math.floor(Math.random()*99999))).padStart(6,'0')+'.txt');
a.href=toDataUrl(text);
a.style.visibility='hidden';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
downloadText(findImageLinks().join('\n'));
})(window,window.document)
var main = async() => {
// https://gist.github.com/hagb4rd/6843803a6674fe1b9ead6f1e60f14f15#file-queue-download-images-js
// -----------
// queue() returns a promise returning function. 'tasks' is an array of higher order functions that return 'promise returning'/'async' functions [()=>async(){ }].
// the purpose of that wrapping is not to start resolving the promise immediately, but being able to map parameters for the task.
//'concurrent' is the max. number of tasks to be executed in parallel.
function queue(tasks, concurrent) {
return function() {
var result = new Array(tasks.length);
var running = 0;
var pending = tasks.length;
var cursor = 0;
function next(onDone, onError) {
if (cursor < tasks.length && running < concurrent) {
let index = cursor;
++cursor;
++running;
function save(v) {
result[index] = v;
--running;
--pending;
if (pending === 0)
onDone(result);
else
next(onDone, onError);
return v;
}
//execute task/resolve promise, and save result
tasks[index]().then(save, save);
//load next task
next(onDone, onError);
}
}
return new Promise(function(resolve, reject) {
next(function(result) {
resolve(result);
}, reject);
});
}
}
var linkedImages=(d)=>{
d=d||window.document;
var xs=d.querySelectorAll("[href$=\".jpg\"],[href$=\".png\"]")
var is=[...xs].map(x=>x.href);
return is;
}
var embedImages=(minW=250,minH=250)=>[...document.querySelectorAll('img')].filter(({width, height})=>(width>=minW && height>=minH));
var dataUrlFromCanvas=(img)=>new Promise((resolve,reject) => {
if(img instanceof Image) {
try {
n.height=img.height;
n.width=img.width;
n.getContext("2d").drawImage(img,0,0);
var dataUrl=n.toDataURL("image/jpeg");
return resolve(dataUrl);
} catch(err) {
reject(err.message);
}
} else {
var e=new Image();
e.crossOrigin='Anonymous';
var n=document.createElement("CANVAS");
e.addEventListener("error", (e)=>reject(e.message));
e.addEventListener("load", () => {
try {
n.height=e.height;
n.width=e.width;
n.getContext("2d").drawImage(e,0,0);
var dataUrl=n.toDataURL("image/jpeg");
resolve(dataUrl);
} catch(err) {
reject(err.message);
}
});
e.src = img.src ? img.src : img;
}
})
var dataUrlByFileReader = (url) => new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onerror=(e)=>reject(e);
xhr.onload = function () {
var reader = new FileReader();
reader.onerror = function(e) {
reject(e.message)
}
reader.onloadend = function () {
resolve(reader.result);
}
reader.readAsDataURL(xhr.response);
};
xhr.open('GET', url);
xhr.send();
})
var readAsDataUrl=async(img)=>{
var dataUrl;
try {
dataUrl=await dataUrlFromCanvas(img);
return dataUrl;
} catch(err) {
conole.log(err);
}
try {
dataUrl=await dataUrlFromCanvas(`https://jslave.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
conole.log(err);
}
try {
dataUrl=await dataUrlFromCanvas(`https://jslave2.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
conole.log(err);
}
try {
dataUrl=await dataUrlByFileReader(img);
return dataUrl;
} catch(err) {
console.log(err);
}
try {
dataUrl=await dataUrlByFileReader(`https://jslave.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
console.log(err);
}
try {
dataUrl=await dataUrlByFileReader(`https://jslave2.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
console.log(err);
}
throw Error('could not resolve create dataUrl');
};
var download=async(image,name)=>{
try {
var a=document.createElement('a');
var dataUrl=await readAsDataUrl(image);
a.href=dataUrl;
a.setAttribute('download', name);
a.style.display='none';
(document.body || document.documentElement).appendChild(a);
a.click();
} catch (err) {
console.log(err, [image, name]);
}
return [image, name]
}
var downloadLinkedImages=()=>{
return [...linkedImages()].map((url)=>{
var name=`${location.host}${location.pathname.replace(/\//g,'.')}.${url.split(/\//).pop()}`;
return ()=>download(url,name)
})
};
var downloadImages=(w=350,h=350)=>embedImages(w,h).map((i)=>{
var url=new URL(i.src);
var name=[url.host].concat(i.alt?i.alt.match(/\w+/g):[]).concat(url.pathname.match(/[^/\?]+/g)).filter(x=>!!x).join('-');
var ext=name.slice(name.lastIndexOf('.')); ['jpg','jpeg','gif','tif','wbem'].includes(ext) || (name+=".jpg")
return ()=>download(i.src,name);
});
//download max. 2 images in parallel
var queueImages=queue(downloadImages(350,350),2);
var queueLinkedImages=queue(downloadLinkedImages(),2);
var A=[],B=[];
try {
A=await queueImages();
console.log('A',A);
} catch(err) {
console.log(err)
}
try {
B=await queueLinkedImages();
console.log('B',B);
} catch(err) {
console.log(err)
}
return [A,B]
};
main().then(console.log).catch(console.log);
//Bookmarklet
//javascript:(function(){!function(){var e;(async()=>{function t(e,t){return function(){var r=new Array(e.length),o=0,a=e.length,n=0;return new Promise(function(c,l){!function c(l,s){if(n<e.length&&o<t){let t=n;function i(e){return r[t]=e,--o,0==--a?l(r):c(l,s),e}++n,++o,e[t]().then(i,i),c(l,s)}}(function(e){c(e)},l)})}}var r=e=>new Promise((t,r)=>{if(e instanceof Image)try{n.height=e.height,n.width=e.width,n.getContext("2d").drawImage(e,0,0);var o=n.toDataURL("image/jpeg");return t(o)}catch(e){r(e.message)}else{var a=new Image;a.crossOrigin="Anonymous";var n=document.createElement("CANVAS");a.addEventListener("error",e=>r(e.message)),a.addEventListener("load",()=>{try{n.height=a.height,n.width=a.width,n.getContext("2d").drawImage(a,0,0);var e=n.toDataURL("image/jpeg");t(e)}catch(e){r(e.message)}}),a.src=e.src?e.src:e}}),o=e=>new Promise((t,r)=>{var o=new XMLHttpRequest;o.responseType="blob",o.onerror=(e=>r(e)),o.onload=function(){var e=new FileReader;e.onerror=function(e){r(e.message)},e.onloadend=function(){t(e.result)},e.readAsDataURL(o.response)},o.open("GET",e),o.send()}),a=async(e,t)=>{try{var a=document.createElement("a"),n=await(async e=>{try{return await r(e)}catch(e){conole.log(e)}try{return await r(`https://jslave.herokuapp.com/proxy/?url=${e}`)}catch(e){conole.log(e)}try{return await r(`https://jslave2.herokuapp.com/proxy/?url=${e}`)}catch(e){conole.log(e)}try{return await o(e)}catch(e){console.log(e)}try{return await o(`https://jslave.herokuapp.com/proxy/?url=${e}`)}catch(e){console.log(e)}try{return await o(`https://jslave2.herokuapp.com/proxy/?url=${e}`)}catch(e){console.log(e)}throw Error("could not resolve create dataUrl")})(e);a.href=n,a.setAttribute("download",t),a.style.display="none",(document.body||document.documentElement).appendChild(a),a.click()}catch(r){console.log(r,[e,t])}return[e,t]},n=t(((e=250,t=250)=>((e=250,t=250)=>[...document.querySelectorAll("img")].filter(({width:r,height:o})=>r>=e&&o>=t))(e,t).map(e=>{var t=new URL(e.src),r=[t.host].concat(e.alt?e.alt.match(/\w+/g):[]).concat(t.pathname.match(/[^/\?]+/g)).filter(e=>!!e).join("-");return()=>a(e.src,r)}))(100,100),2),c=t((()=>[...[...(e=e||window.document).querySelectorAll('[href$=".jpg"],[href$=".png"]')].map(e=>e.href)].map(e=>{var t=`${location.host}${location.pathname.replace(/\//g,".")}.${e.split(/\//).pop()}`;return()=>a(e,t)}))(),2),l=[],s=[];try{l=await n(),console.log("A",l)}catch(e){console.log(e)}try{s=await c(),console.log("B",s)}catch(e){console.log(e)}})()}();})();
var main = async() => {
// https://gist.github.com/hagb4rd/6843803a6674fe1b9ead6f1e60f14f15#file-queue-download-images-js
// -----------
// queue() returns a promise returning function. 'tasks' is an array of higher order functions that return 'promise returning'/'async' functions [()=>async(){ }].
// the purpose of that wrapping is not to start resolving the promise immediately, but being able to map parameters for the task.
//'concurrent' is the max. number of tasks to be executed in parallel.
function queue(tasks, concurrent) {
return function() {
var result = new Array(tasks.length);
var running = 0;
var pending = tasks.length;
var cursor = 0;
function next(onDone, onError) {
if (cursor < tasks.length && running < concurrent) {
let index = cursor;
++cursor;
++running;
function save(v) {
result[index] = v;
--running;
--pending;
if (pending === 0)
onDone(result);
else
next(onDone, onError);
return v;
}
//execute task/resolve promise, and save result
tasks[index]().then(save, save);
//load next task
next(onDone, onError);
}
}
return new Promise(function(resolve, reject) {
next(function(result) {
resolve(result);
}, reject);
});
}
}
var linkedImages=(d)=>{
d=d||window.document;
var xs=d.querySelectorAll("[href$=\".jpg\"],[href$=\".png\"]")
var is=[...xs].map(x=>x.href);
return is;
}
var embedImages=(minW=250,minH=250)=>[...document.querySelectorAll('img')].filter(({width, height})=>(width>=minW && height>=minH));
var dataUrlFromCanvas=(img)=>new Promise((resolve,reject) => {
if(img instanceof Image) {
try {
n.height=img.height;
n.width=img.width;
n.getContext("2d").drawImage(img,0,0);
var dataUrl=n.toDataURL("image/jpeg");
return resolve(dataUrl);
} catch(err) {
reject(err.message);
}
} else {
var e=new Image();
e.crossOrigin='Anonymous';
var n=document.createElement("CANVAS");
e.addEventListener("error", (e)=>reject(e.message));
e.addEventListener("load", () => {
try {
n.height=e.height;
n.width=e.width;
n.getContext("2d").drawImage(e,0,0);
var dataUrl=n.toDataURL("image/jpeg");
resolve(dataUrl);
} catch(err) {
reject(err.message);
}
});
e.src = img.src ? img.src : img;
}
})
var dataUrlByFileReader = (url) => new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onerror=(e)=>reject(e);
xhr.onload = function () {
var reader = new FileReader();
reader.onerror = function(e) {
reject(e.message)
}
reader.onloadend = function () {
resolve(reader.result);
}
reader.readAsDataURL(xhr.response);
};
xhr.open('GET', url);
xhr.send();
})
var readAsDataUrl=async(img)=>{
var dataUrl;
try {
dataUrl=await dataUrlFromCanvas(img);
return dataUrl;
} catch(err) {
conole.log(err);
}
try {
dataUrl=await dataUrlFromCanvas(`https://jslave.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
conole.log(err);
}
try {
dataUrl=await dataUrlFromCanvas(`https://jslave2.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
conole.log(err);
}
try {
dataUrl=await dataUrlByFileReader(img);
return dataUrl;
} catch(err) {
console.log(err);
}
try {
dataUrl=await dataUrlByFileReader(`https://jslave.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
console.log(err);
}
try {
dataUrl=await dataUrlByFileReader(`https://jslave2.herokuapp.com/proxy/?url=${img}`);
return dataUrl;
} catch(err) {
console.log(err);
}
throw Error('could not resolve create dataUrl');
};
var download=async(image,name)=>{
try {
var a=document.createElement('a');
var dataUrl=await readAsDataUrl(image);
a.href=dataUrl;
a.setAttribute('download', name);
a.style.display='none';
(document.body || document.documentElement).appendChild(a);
a.click();
} catch (err) {
console.log(err, [image, name]);
}
return [image, name]
}
var downloadLinkedImages=()=>{
return [...linkedImages()].map((url)=>{
var name=`${location.host}${location.pathname.replace(/\//g,'.')}.${url.split(/\//).pop()}`;
return ()=>download(url,name)
})
};
var downloadImages=(w=250,h=250)=>embedImages(w,h).map((i)=>{
var url=new URL(i.src);
var name=[url.host].concat(i.alt?i.alt.match(/\w+/g):[]).concat(url.pathname.match(/[^/\?]+/g)).filter(x=>!!x).join('-');
return ()=>download(i.src,name);
});
//download max. 2 images in parallel
var queueImages=queue(downloadImages(100,100),2);
var queueLinkedImages=queue(downloadLinkedImages(),2);
var A=[],B=[];
try {
A=await queueImages();
console.log('A',A);
} catch(err) {
console.log(err)
}
try {
B=await queueLinkedImages();
console.log('B',B);
} catch(err) {
console.log(err)
}
return [A,B]
};
main().then(console.log).catch(console.log);
//Bookmarklet
//javascript:(function(){!function(){var e;(async()=>{function t(e,t){return function(){var r=new Array(e.length),o=0,a=e.length,n=0;return new Promise(function(c,l){!function c(l,s){if(n<e.length&&o<t){let t=n;function i(e){return r[t]=e,--o,0==--a?l(r):c(l,s),e}++n,++o,e[t]().then(i,i),c(l,s)}}(function(e){c(e)},l)})}}var r=e=>new Promise((t,r)=>{if(e instanceof Image)try{n.height=e.height,n.width=e.width,n.getContext("2d").drawImage(e,0,0);var o=n.toDataURL("image/jpeg");return t(o)}catch(e){r(e.message)}else{var a=new Image;a.crossOrigin="Anonymous";var n=document.createElement("CANVAS");a.addEventListener("error",e=>r(e.message)),a.addEventListener("load",()=>{try{n.height=a.height,n.width=a.width,n.getContext("2d").drawImage(a,0,0);var e=n.toDataURL("image/jpeg");t(e)}catch(e){r(e.message)}}),a.src=e.src?e.src:e}}),o=e=>new Promise((t,r)=>{var o=new XMLHttpRequest;o.responseType="blob",o.onerror=(e=>r(e)),o.onload=function(){var e=new FileReader;e.onerror=function(e){r(e.message)},e.onloadend=function(){t(e.result)},e.readAsDataURL(o.response)},o.open("GET",e),o.send()}),a=async(e,t)=>{try{var a=document.createElement("a"),n=await(async e=>{try{return await r(e)}catch(e){conole.log(e)}try{return await r(`https://jslave.herokuapp.com/proxy/?url=${e}`)}catch(e){conole.log(e)}try{return await r(`https://jslave2.herokuapp.com/proxy/?url=${e}`)}catch(e){conole.log(e)}try{return await o(e)}catch(e){console.log(e)}try{return await o(`https://jslave.herokuapp.com/proxy/?url=${e}`)}catch(e){console.log(e)}try{return await o(`https://jslave2.herokuapp.com/proxy/?url=${e}`)}catch(e){console.log(e)}throw Error("could not resolve create dataUrl")})(e);a.href=n,a.setAttribute("download",t),a.style.display="none",(document.body||document.documentElement).appendChild(a),a.click()}catch(r){console.log(r,[e,t])}return[e,t]},n=t(((e=250,t=250)=>((e=250,t=250)=>[...document.querySelectorAll("img")].filter(({width:r,height:o})=>r>=e&&o>=t))(e,t).map(e=>{var t=new URL(e.src),r=[t.host].concat(e.alt?e.alt.match(/\w+/g):[]).concat(t.pathname.match(/[^/\?]+/g)).filter(e=>!!e).join("-");return()=>a(e.src,r)}))(100,100),2),c=t((()=>[...[...(e=e||window.document).querySelectorAll('[href$=".jpg"],[href$=".png"]')].map(e=>e.href)].map(e=>{var t=`${location.host}${location.pathname.replace(/\//g,".")}.${e.split(/\//).pop()}`;return()=>a(e,t)}))(),2),l=[],s=[];try{l=await n(),console.log("A",l)}catch(e){console.log(e)}try{s=await c(),console.log("B",s)}catch(e){console.log(e)}})()}();})();
(async function(window,document) {
//you can load any gist here by pasting its link as this urls hash (after #)
try {
//ea-webkit
await loadScript('https://unpkg.com/ea-webkit@latest/dist/webkit.min.js');
console.log($);
//creates this bookmarklet editor widget
$.toolbox()
.then(({editor, btnToolbox,btnBookmarklet}) => {
//this (or any) gist link
var defaultGistUrl = 'https://gist.github.com/hagb4rd/6843803a6674fe1b9ead6f1e60f14f15#file-toolbox-js';
//var defaultGistUrl = 'https://gist.github.com/hagb4rd/6843803a6674fe1b9ead6f1e60f14f15#file-queue-download-images-js';
//var defaultGistUrl = 'https://gist.github.com/hagb4rd/6843803a6674fe1b9ead6f1e60f14f15#download-linked-images-text-js'
//load-gist-contents
$.gist.file(defaultGistUrl).then(file=>{
editor.session.setValue(file.content)
})
})
window.loadScript=loadScript;
function loadScript(e='') {
return new Promise((t,n)=>{
var i='mk'+(e=>[...String(e)].reduce((e,t)=>e^=t.charCodeAt(0),255))(e);
var r=document.querySelector('[src="' + e + '"]');r?t():((r=document.createElement('script')).id=i,r.setAttribute('async',''),r.addEventListener('load',e=>t()),r.addEventListener('error',e=>n()),r.src=e,(document.head||document.body||document.documentElement).appendChild(r))
});
};
} catch(err) {
console.log(err);
throw err;
}
})(window,window.document)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment