|
|
|
|
|
<!DOCTYPE html> |
|
|
|
|
|
<html> |
|
|
<head> |
|
|
<meta charset="utf-8" /> |
|
|
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0" /> |
|
|
|
|
|
<style> |
|
|
body { background-color:#474747; overflow:hidden; } |
|
|
label { color:white; font-family:sans-serif; font-size:0.8em; } |
|
|
img { margin-right:4px; cursor:pointer; } |
|
|
button { padding:0 4px; } |
|
|
#cont { |
|
|
margin-top:4px; |
|
|
overflow-y: scroll; |
|
|
|
|
|
scrollbar-color: #222222 rgba(0,0,0, 0.2 ); |
|
|
scrollbar-width: thin; |
|
|
} |
|
|
#cont::-webkit-scrollbar { |
|
|
width: 10px; |
|
|
background: rgba(0,0,0,0.2); |
|
|
} |
|
|
#cont::-webkit-scrollbar-thumb { |
|
|
background: #222222; |
|
|
margin:2px; |
|
|
} |
|
|
</style> |
|
|
<script> |
|
|
var imgs = [], hits = [], done=0; |
|
|
|
|
|
var UNS = location.href.indexOf("uns")!=-1, PAGE=1, sTop=-1, cont, keyws; |
|
|
|
|
|
function update(page) { |
|
|
cont = document.getElementById("cont"); |
|
|
keyws = document.getElementById("keyws"); |
|
|
if(page==null) { PAGE=1; hits=[]; sTop=-1; } |
|
|
else { PAGE = page; sTop=cont.scrollTop; } |
|
|
|
|
|
var ikey = keyws.value; |
|
|
if(document.getElementById("isolated").checked) ikey += " isolated"; |
|
|
ikey = ikey.trim(); |
|
|
console.log(JSON.stringify(ikey)); |
|
|
|
|
|
var url; |
|
|
if(!UNS) { |
|
|
url = "https://pixabay.com/api/?image_type=photo"+(ikey==""?"":"&q="+encodeURIComponent(ikey))+"&per_page="+100+"&page="+PAGE+"&key=10554583-a5eacb61c2e61105fdfb6eb88&safesearch=true"; |
|
|
} |
|
|
else { |
|
|
|
|
|
url = "https://api.unsplash.com/search/photos?per_page="+30+"&query="+encodeURIComponent(ikey)+"&page="+PAGE; |
|
|
} |
|
|
var fnam = "gallery"+(UNS?"1":""); |
|
|
if(ikey=="") { |
|
|
if(!UNS && Math.random()<0.005) url="gallery.php?url="+encodeURIComponent(url)+"&fnam="+fnam; |
|
|
else url=fnam+".json"; |
|
|
} |
|
|
console.log(url); |
|
|
|
|
|
|
|
|
var req = new XMLHttpRequest(); |
|
|
req.open("GET", url, true); |
|
|
if(UNS) req.setRequestHeader("Authorization", "Client-ID 3twt3nS_LYzp4nViMBB3tmWU0F-wyHUpgfrG1nIuiYs"); |
|
|
req.onload = imgsLoaded.bind(this); |
|
|
req.onerror = function(e) { console.log(e.target.response); } |
|
|
req.send(); |
|
|
} |
|
|
function imgsLoaded(e) { |
|
|
|
|
|
var obj = JSON.parse(e.target.response); |
|
|
var list = obj["hits"]?obj["hits"]:obj["results"]; |
|
|
|
|
|
hits = hits.concat(list); |
|
|
|
|
|
var iw = window.innerWidth-29, th=100; |
|
|
cont.setAttribute("style","height:"+(window.innerHeight-42)+"px;"); |
|
|
while(cont.firstChild) cont.removeChild(cont.firstChild); |
|
|
cont.scrollTop = 0; |
|
|
|
|
|
|
|
|
var heis = []; |
|
|
for(var i=0; i<hits.length; ) { |
|
|
var totw = 0, j=i; |
|
|
while(j<hits.length) { |
|
|
var hit = hits[j], w=hit["previewWidth"], h=hit["previewHeight"]; |
|
|
if(w==null) { w=hit["width"]; h=hit["height"]; } |
|
|
|
|
|
var nw=w*(th/h); |
|
|
if(j<=i+1 || totw+nw < iw) { totw+=nw; j++; } |
|
|
else break; |
|
|
} |
|
|
var num = j-i; |
|
|
while(i<j) { |
|
|
heis.push(Math.min(th*2,th*((iw-num*4)/totw))); i++; |
|
|
} |
|
|
} |
|
|
|
|
|
imgs=[]; |
|
|
|
|
|
for(var i=0; i<hits.length; i++) { |
|
|
var hit = hits[i]; |
|
|
var img = document.createElement("img"); |
|
|
img.setAttribute("src",hit["previewURL"]?hit["previewURL"]:hit["urls"]["thumb"]); |
|
|
img.setAttribute("height",heis[i]+"px"); |
|
|
img.addEventListener("click", imgClick); |
|
|
cont.appendChild(img); |
|
|
imgs.push(img); |
|
|
} |
|
|
if(sTop!=-1) cont.scrollTop=sTop; |
|
|
|
|
|
cont.appendChild(document.createElement("br")); |
|
|
var more = document.createElement("button"); |
|
|
more.onclick = function(e) { update(PAGE+1); } |
|
|
more.textContent="Load More"; |
|
|
if(keyws.value!="") cont.appendChild(more); |
|
|
|
|
|
console.log(hits); |
|
|
} |
|
|
function imgClick(e) { |
|
|
var ind = imgs.indexOf(e.currentTarget); |
|
|
var hit = hits[ind]; console.log(hit); |
|
|
var url = hit["largeImageURL"]; if(url==null) url = hit["urls"]["full"]; |
|
|
var x = "app.open(\""+url+"\",null,true);"; |
|
|
window.parent.postMessage(x, "*"); |
|
|
} |
|
|
function msg(e) { alert("These images come from www."+(UNS?"Unsplash":"PixaBay")+".com and are free to use for any purpose."); } |
|
|
|
|
|
window.onresize = update; |
|
|
</script> |
|
|
</head> |
|
|
|
|
|
<body onload="update()"> |
|
|
<div style="height:22px; overflow:hidden;"> |
|
|
<button onclick="msg()">?</button> |
|
|
<label>Keywords:</label> <input type="text" id="keyws" onchange="update()" value=""></input> |
|
|
<input type="checkbox" id="isolated" style="vertical-align:middle;" onchange="update()" /> <label for="isolated">Isolated</label> |
|
|
</div> |
|
|
|
|
|
<div id="cont"></div> |
|
|
</body> |
|
|
</html> |
|
|
|