mirror of
https://gitflic.ru/project/photopea-v2/photopea-v-2.git
synced 2026-06-20 15:41:13 +00:00
Mirror "Templates" and "Plugins" community pages
This commit is contained in:
@@ -0,0 +1,236 @@
|
||||
|
||||
<!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" />
|
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i" />
|
||||
<link rel="stylesheet" href="templates.css" />
|
||||
|
||||
<title>PSD Templates</title>
|
||||
<meta name="description" content="Free PSD Templates">
|
||||
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-4249565-47"></script>
|
||||
<script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-4249565-47'); </script>
|
||||
|
||||
<script src="templates.js"></script>
|
||||
<script>
|
||||
|
||||
var tpls, IFR=false, TYPE=0, RSRC=[], OTPLS;
|
||||
var ccat = -1, caut = -1, citm = -1, ordr = 0, cscr = 0; // current scroll
|
||||
var lo=localStorage.getItem("ordr"); if(lo) lo=JSON.parse(lo); if(lo && lo[1]>Date.now()-30000) ordr=lo[0];
|
||||
var cont, cats, search, back, itms, kwds, add_link;
|
||||
function clearNode(node) { while(node.firstChild) node.removeChild(node.firstChild); }
|
||||
function isDisplayed(nd) { while(true) { if(nd==document) return true; if(nd==null) return false; nd=nd.parentNode; } }
|
||||
|
||||
function go() {
|
||||
cont = document.getElementById("cont");
|
||||
cats = document.getElementById("cats");
|
||||
kwds = document.getElementById("kwds");
|
||||
search = document.getElementById("search");
|
||||
back = document.getElementById("back"); cont.removeChild(back);
|
||||
itms = document.getElementById("itms");
|
||||
add_link = document.getElementById("add_link");
|
||||
window.addEventListener("resize",onResize,false); onResize();
|
||||
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "../papi/tpls.json?r="+Date.now(), true);
|
||||
request.onload = imgsLoaded;
|
||||
request.onerror = function(e) { console.log(e.target.response); }
|
||||
request.send();
|
||||
|
||||
if(Math.random()<0.01) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "../papi/img/reduce.php", true);
|
||||
request.send();
|
||||
}
|
||||
|
||||
if(Math.random()<0.01) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "https://www.photopea.com/papi/updateTemplates.php", true);
|
||||
request.send();
|
||||
}
|
||||
|
||||
window.onbeforeunload = trackScroll;
|
||||
}
|
||||
function trackScroll() { var scrl=[Date.now(),ccat,caut,itms.scrollTop]; if(citm==-1) localStorage.setItem("scrl",JSON.stringify(scrl)); }
|
||||
function onResize() {
|
||||
if(tpls) updateView();
|
||||
}
|
||||
|
||||
function imgsLoaded(e) {
|
||||
var hr=window.location.href, sch = hr.slice(hr.indexOf("/templates")+11);
|
||||
var uprt = sch.split("?");
|
||||
if(uprt[1]) {
|
||||
var prts=uprt[1].split("&");
|
||||
for(var i=0; i<prts.length; i++) {
|
||||
var kv=prts[i].split("=");
|
||||
if(kv[0]=="type") TYPE=parseInt(kv[1]);
|
||||
else if(kv[0]=="rsrc") RSRC=kv[1].length==0 ? [] : kv[1].split(",");
|
||||
//else console.log(kv);
|
||||
}
|
||||
}
|
||||
|
||||
IFR = window.top!=window.self;
|
||||
OTPLS = JSON.parse(e.target.response);
|
||||
tpls = JSON.parse(e.target.response);
|
||||
tpls.categories = tpls.categories[TYPE];
|
||||
for(var i=0; i<tpls.list.length; i++) if(tpls.list[i][0]!=TYPE) { tpls.list.splice(i,1); i--; }
|
||||
|
||||
rebuild(sch, true);
|
||||
}
|
||||
|
||||
function rebuild(sch, firstTime) {
|
||||
console.log(sch);
|
||||
if(!firstTime) trackScroll();
|
||||
citm=-1;
|
||||
if(caut<-1) caut=-1;
|
||||
if(sch[0]=="-") {
|
||||
if(sch[1]=="a") caut=-1;
|
||||
if(sch[1]=="c") ccat=-1;
|
||||
}
|
||||
else if(sch!="") {
|
||||
var ci = sch.slice(2).split("?")[0].split("&")[0]; // Facebook might add "?" parameters
|
||||
if(sch[0]=="c") {
|
||||
var cts=tpls["categories"];
|
||||
for(var c in cts) if(toCat(cts[c])==ci) ccat=parseInt(c.slice(1));
|
||||
}
|
||||
if(sch[0]=="t") {
|
||||
var lst=tpls["list"];
|
||||
for(var i=0; i<lst.length; i++) if(tempID(lst[i])==ci) citm = i;
|
||||
}
|
||||
if(sch[0]=="a") {
|
||||
var lst=tpls["authors"];
|
||||
for(var i=0; i<lst.length; i++) if(lst[i][0]==ci) caut = i;
|
||||
}
|
||||
if(sch=="authors" ) caut=-2;
|
||||
if(sch=="installed") caut=-3;
|
||||
}
|
||||
console.log(citm,caut);
|
||||
var tit="PSD Templates";
|
||||
if(ccat!=-1) tit=tpls.categories["c"+ccat] + " | "+tit;
|
||||
if (caut==-2) tit="Top Authors";
|
||||
else if(caut==-3) tit="Installed";
|
||||
else if(caut!=-1) tit="By "+tpls.authors [caut][ 1] + " | "+tit;
|
||||
if(citm!=-1) tit=tpls.list [citm][ 9] + " | "+tit;
|
||||
if(citm!=-1) document.head.children.namedItem("description").content = tpls.list[citm][9];
|
||||
document.title = tit;
|
||||
|
||||
updateView();
|
||||
|
||||
itms.scrollTop="0";
|
||||
var scrl = localStorage.getItem("scrl");
|
||||
if(scrl) {
|
||||
scrl=JSON.parse(scrl); if(scrl.length==null) return;
|
||||
if(citm==-1 && Date.now()-scrl[0]<60e3 && scrl[1]==ccat && scrl[2]==caut) itms.scrollTop = scrl[3];
|
||||
}
|
||||
}
|
||||
|
||||
function updateView() {
|
||||
var w = window.innerWidth, h=window.innerHeight;
|
||||
itms.style.height=(h-90)+"px";
|
||||
cats.style.height=(h- 1)+"px";
|
||||
|
||||
add_link.style.display=(false?"none":"inline-block");
|
||||
add_link.textContent = TYPE==0 ? "Add your own template!" : (TYPE==1 ? "Add your own plugin!":"");
|
||||
add_link.setAttribute("href",
|
||||
TYPE==0 ? "//www.photopea.com/tuts/publish-your-psd-templates-in-photopea/" : "//www.photopea.com/api/plugins");
|
||||
|
||||
var tpl=citm!=-1 ? tpls.list[citm]:null;
|
||||
var comp;
|
||||
if(ordr==0) comp=function(a,b) {return cost0(b)-cost0(a);}
|
||||
if(ordr==1) comp=function(a,b) {return cost1(b)-cost1(a);}
|
||||
if(ordr==2) comp=function(a,b) {return cost2(b)-cost2(a);}
|
||||
tpls.list.sort(comp);
|
||||
if(tpl) citm=tpls.list.indexOf(tpl);
|
||||
|
||||
if(citm==-1 && !isDisplayed(search)) { clearNode(cont); cont.appendChild(search); cont.appendChild(itms); }
|
||||
if(citm!=-1) { clearNode(cont); cont.appendChild(back); cont.appendChild(itms); }
|
||||
clearNode(itms);
|
||||
|
||||
var twds = kwds.value.trim().toLowerCase(), wds=twds.split(/[ ,]+/);
|
||||
var out = [];
|
||||
if (caut==-2) printAuthors (tpls, out);
|
||||
else if(caut==-3) printInstalled(tpls, out);
|
||||
else makeView(tpls,out,twds,wds,ccat,caut,citm);
|
||||
|
||||
itms.innerHTML=out.join("\n");
|
||||
|
||||
var out = [];
|
||||
getCats(tpls,ccat,out);
|
||||
cats.innerHTML = out.join("\n");
|
||||
|
||||
if(citm==-1) {
|
||||
var ords = document.getElementsByClassName("order");
|
||||
for(var i=0; i<3; i++) ords[i].setAttribute("class", "order"+(i==ordr ? " blue":""));
|
||||
}
|
||||
}
|
||||
|
||||
function backClicked(e) {
|
||||
if(IFR) rebuild("");
|
||||
else history.back();
|
||||
/*
|
||||
citm = -1;
|
||||
updateView();
|
||||
itms.scrollTo(0,cscr); */
|
||||
}
|
||||
function itemClicked(id) {
|
||||
if(IFR) {
|
||||
if(id==null) id = tpls.list[citm][3];
|
||||
var ii=RSRC.indexOf(id);
|
||||
var msg = "--ot "+id;
|
||||
if(TYPE!=0) {
|
||||
if(ii==-1) RSRC.push(id); else RSRC.splice(ii,1);
|
||||
msg = "--ur "+RSRC.join(",");
|
||||
updateView();
|
||||
}
|
||||
window.parent.postMessage(msg);
|
||||
}
|
||||
else window.open("//www.Photopea.com#t"+tempID(tpls.list[citm]));
|
||||
}
|
||||
function catClicked(nc) {
|
||||
if(nc==ccat) ccat=-1;
|
||||
else ccat=nc;
|
||||
citm=-1;
|
||||
updateView();
|
||||
}
|
||||
function setOrder(ord) {
|
||||
ordr=ord; localStorage.setItem("ordr",JSON.stringify([ordr, Date.now()]));
|
||||
updateView();
|
||||
itms.scrollTo(0,0);
|
||||
}
|
||||
var __time=0;
|
||||
function labelClicked(e) {
|
||||
var ot = __time; __time=Date.now(); if(__time-ot>200) return;
|
||||
var ci = tpls.list[citm];
|
||||
var str=tpls.authors[ci[1]][0]+","+ci[3];
|
||||
if(window.parent) window.parent.postMessage("--et "+str,"*");
|
||||
//alert(str);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body onload="go()" class="flexrow">
|
||||
|
||||
<div id="cats" class="scrollable">
|
||||
</div>
|
||||
|
||||
<div id="cont">
|
||||
<div id="search">
|
||||
<span onclick="setOrder(0)" class="order blue">Hot</span>
|
||||
<span onclick="setOrder(1)" class="order">New</span>
|
||||
<span onclick="setOrder(2)" class="order" style="margin-right:2em">Top</span>
|
||||
<span style="display:inline-block">
|
||||
<label>Search:</label> <input type="text" id="kwds" oninput="updateView()" style="margin-right:1.5em;"></input>
|
||||
</span>
|
||||
<a id="add_link" href="//www.photopea.com/tuts/publish-your-psd-templates-in-photopea/" target="_blank">Add your own template!</a>
|
||||
</div>
|
||||
<div id="back">
|
||||
<span class="back" onclick="backClicked()">< Back</span>
|
||||
</div>
|
||||
<div id="itms" class="scrollable"></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,236 @@
|
||||
|
||||
<!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" />
|
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i" />
|
||||
<link rel="stylesheet" href="templates.css" />
|
||||
|
||||
<title>PSD Templates</title>
|
||||
<meta name="description" content="Free PSD Templates">
|
||||
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-4249565-47"></script>
|
||||
<script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-4249565-47'); </script>
|
||||
|
||||
<script src="templates.js"></script>
|
||||
<script>
|
||||
|
||||
var tpls, IFR=false, TYPE=0, RSRC=[], OTPLS;
|
||||
var ccat = -1, caut = -1, citm = -1, ordr = 0, cscr = 0; // current scroll
|
||||
var lo=localStorage.getItem("ordr"); if(lo) lo=JSON.parse(lo); if(lo && lo[1]>Date.now()-30000) ordr=lo[0];
|
||||
var cont, cats, search, back, itms, kwds, add_link;
|
||||
function clearNode(node) { while(node.firstChild) node.removeChild(node.firstChild); }
|
||||
function isDisplayed(nd) { while(true) { if(nd==document) return true; if(nd==null) return false; nd=nd.parentNode; } }
|
||||
|
||||
function go() {
|
||||
cont = document.getElementById("cont");
|
||||
cats = document.getElementById("cats");
|
||||
kwds = document.getElementById("kwds");
|
||||
search = document.getElementById("search");
|
||||
back = document.getElementById("back"); cont.removeChild(back);
|
||||
itms = document.getElementById("itms");
|
||||
add_link = document.getElementById("add_link");
|
||||
window.addEventListener("resize",onResize,false); onResize();
|
||||
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "../papi/tpls.json?r="+Date.now(), true);
|
||||
request.onload = imgsLoaded;
|
||||
request.onerror = function(e) { console.log(e.target.response); }
|
||||
request.send();
|
||||
|
||||
if(Math.random()<0.01) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "../papi/img/reduce.php", true);
|
||||
request.send();
|
||||
}
|
||||
|
||||
if(Math.random()<0.01) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "https://www.photopea.com/papi/updateTemplates.php", true);
|
||||
request.send();
|
||||
}
|
||||
|
||||
window.onbeforeunload = trackScroll;
|
||||
}
|
||||
function trackScroll() { var scrl=[Date.now(),ccat,caut,itms.scrollTop]; if(citm==-1) localStorage.setItem("scrl",JSON.stringify(scrl)); }
|
||||
function onResize() {
|
||||
if(tpls) updateView();
|
||||
}
|
||||
|
||||
function imgsLoaded(e) {
|
||||
var hr=window.location.href, sch = hr.slice(hr.indexOf("/templates")+11);
|
||||
var uprt = sch.split("?");
|
||||
if(uprt[1]) {
|
||||
var prts=uprt[1].split("&");
|
||||
for(var i=0; i<prts.length; i++) {
|
||||
var kv=prts[i].split("=");
|
||||
if(kv[0]=="type") TYPE=parseInt(kv[1]);
|
||||
else if(kv[0]=="rsrc") RSRC=kv[1].length==0 ? [] : kv[1].split(",");
|
||||
//else console.log(kv);
|
||||
}
|
||||
}
|
||||
|
||||
IFR = window.top!=window.self;
|
||||
OTPLS = JSON.parse(e.target.response);
|
||||
tpls = JSON.parse(e.target.response);
|
||||
tpls.categories = tpls.categories[TYPE];
|
||||
for(var i=0; i<tpls.list.length; i++) if(tpls.list[i][0]!=TYPE) { tpls.list.splice(i,1); i--; }
|
||||
|
||||
rebuild(sch, true);
|
||||
}
|
||||
|
||||
function rebuild(sch, firstTime) {
|
||||
console.log(sch);
|
||||
if(!firstTime) trackScroll();
|
||||
citm=-1;
|
||||
if(caut<-1) caut=-1;
|
||||
if(sch[0]=="-") {
|
||||
if(sch[1]=="a") caut=-1;
|
||||
if(sch[1]=="c") ccat=-1;
|
||||
}
|
||||
else if(sch!="") {
|
||||
var ci = sch.slice(2).split("?")[0].split("&")[0]; // Facebook might add "?" parameters
|
||||
if(sch[0]=="c") {
|
||||
var cts=tpls["categories"];
|
||||
for(var c in cts) if(toCat(cts[c])==ci) ccat=parseInt(c.slice(1));
|
||||
}
|
||||
if(sch[0]=="t") {
|
||||
var lst=tpls["list"];
|
||||
for(var i=0; i<lst.length; i++) if(tempID(lst[i])==ci) citm = i;
|
||||
}
|
||||
if(sch[0]=="a") {
|
||||
var lst=tpls["authors"];
|
||||
for(var i=0; i<lst.length; i++) if(lst[i][0]==ci) caut = i;
|
||||
}
|
||||
if(sch=="authors" ) caut=-2;
|
||||
if(sch=="installed") caut=-3;
|
||||
}
|
||||
console.log(citm,caut);
|
||||
var tit="PSD Templates";
|
||||
if(ccat!=-1) tit=tpls.categories["c"+ccat] + " | "+tit;
|
||||
if (caut==-2) tit="Top Authors";
|
||||
else if(caut==-3) tit="Installed";
|
||||
else if(caut!=-1) tit="By "+tpls.authors [caut][ 1] + " | "+tit;
|
||||
if(citm!=-1) tit=tpls.list [citm][ 9] + " | "+tit;
|
||||
if(citm!=-1) document.head.children.namedItem("description").content = tpls.list[citm][9];
|
||||
document.title = tit;
|
||||
|
||||
updateView();
|
||||
|
||||
itms.scrollTop="0";
|
||||
var scrl = localStorage.getItem("scrl");
|
||||
if(scrl) {
|
||||
scrl=JSON.parse(scrl); if(scrl.length==null) return;
|
||||
if(citm==-1 && Date.now()-scrl[0]<60e3 && scrl[1]==ccat && scrl[2]==caut) itms.scrollTop = scrl[3];
|
||||
}
|
||||
}
|
||||
|
||||
function updateView() {
|
||||
var w = window.innerWidth, h=window.innerHeight;
|
||||
itms.style.height=(h-90)+"px";
|
||||
cats.style.height=(h- 1)+"px";
|
||||
|
||||
add_link.style.display=(false?"none":"inline-block");
|
||||
add_link.textContent = TYPE==0 ? "Add your own template!" : (TYPE==1 ? "Add your own plugin!":"");
|
||||
add_link.setAttribute("href",
|
||||
TYPE==0 ? "//www.photopea.com/tuts/publish-your-psd-templates-in-photopea/" : "//www.photopea.com/api/plugins");
|
||||
|
||||
var tpl=citm!=-1 ? tpls.list[citm]:null;
|
||||
var comp;
|
||||
if(ordr==0) comp=function(a,b) {return cost0(b)-cost0(a);}
|
||||
if(ordr==1) comp=function(a,b) {return cost1(b)-cost1(a);}
|
||||
if(ordr==2) comp=function(a,b) {return cost2(b)-cost2(a);}
|
||||
tpls.list.sort(comp);
|
||||
if(tpl) citm=tpls.list.indexOf(tpl);
|
||||
|
||||
if(citm==-1 && !isDisplayed(search)) { clearNode(cont); cont.appendChild(search); cont.appendChild(itms); }
|
||||
if(citm!=-1) { clearNode(cont); cont.appendChild(back); cont.appendChild(itms); }
|
||||
clearNode(itms);
|
||||
|
||||
var twds = kwds.value.trim().toLowerCase(), wds=twds.split(/[ ,]+/);
|
||||
var out = [];
|
||||
if (caut==-2) printAuthors (tpls, out);
|
||||
else if(caut==-3) printInstalled(tpls, out);
|
||||
else makeView(tpls,out,twds,wds,ccat,caut,citm);
|
||||
|
||||
itms.innerHTML=out.join("\n");
|
||||
|
||||
var out = [];
|
||||
getCats(tpls,ccat,out);
|
||||
cats.innerHTML = out.join("\n");
|
||||
|
||||
if(citm==-1) {
|
||||
var ords = document.getElementsByClassName("order");
|
||||
for(var i=0; i<3; i++) ords[i].setAttribute("class", "order"+(i==ordr ? " blue":""));
|
||||
}
|
||||
}
|
||||
|
||||
function backClicked(e) {
|
||||
if(IFR) rebuild("");
|
||||
else history.back();
|
||||
/*
|
||||
citm = -1;
|
||||
updateView();
|
||||
itms.scrollTo(0,cscr); */
|
||||
}
|
||||
function itemClicked(id) {
|
||||
if(IFR) {
|
||||
if(id==null) id = tpls.list[citm][3];
|
||||
var ii=RSRC.indexOf(id);
|
||||
var msg = "--ot "+id;
|
||||
if(TYPE!=0) {
|
||||
if(ii==-1) RSRC.push(id); else RSRC.splice(ii,1);
|
||||
msg = "--ur "+RSRC.join(",");
|
||||
updateView();
|
||||
}
|
||||
window.parent.postMessage(msg);
|
||||
}
|
||||
else window.open("//www.Photopea.com#t"+tempID(tpls.list[citm]));
|
||||
}
|
||||
function catClicked(nc) {
|
||||
if(nc==ccat) ccat=-1;
|
||||
else ccat=nc;
|
||||
citm=-1;
|
||||
updateView();
|
||||
}
|
||||
function setOrder(ord) {
|
||||
ordr=ord; localStorage.setItem("ordr",JSON.stringify([ordr, Date.now()]));
|
||||
updateView();
|
||||
itms.scrollTo(0,0);
|
||||
}
|
||||
var __time=0;
|
||||
function labelClicked(e) {
|
||||
var ot = __time; __time=Date.now(); if(__time-ot>200) return;
|
||||
var ci = tpls.list[citm];
|
||||
var str=tpls.authors[ci[1]][0]+","+ci[3];
|
||||
if(window.parent) window.parent.postMessage("--et "+str,"*");
|
||||
//alert(str);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body onload="go()" class="flexrow">
|
||||
|
||||
<div id="cats" class="scrollable">
|
||||
</div>
|
||||
|
||||
<div id="cont">
|
||||
<div id="search">
|
||||
<span onclick="setOrder(0)" class="order blue">Hot</span>
|
||||
<span onclick="setOrder(1)" class="order">New</span>
|
||||
<span onclick="setOrder(2)" class="order" style="margin-right:2em">Top</span>
|
||||
<span style="display:inline-block">
|
||||
<label>Search:</label> <input type="text" id="kwds" oninput="updateView()" style="margin-right:1.5em;"></input>
|
||||
</span>
|
||||
<a id="add_link" href="//www.photopea.com/tuts/publish-your-psd-templates-in-photopea/" target="_blank">Add your own template!</a>
|
||||
</div>
|
||||
<div id="back">
|
||||
<span class="back" onclick="backClicked()">< Back</span>
|
||||
</div>
|
||||
<div id="itms" class="scrollable"></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,236 @@
|
||||
|
||||
<!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" />
|
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i" />
|
||||
<link rel="stylesheet" href="templates.css" />
|
||||
|
||||
<title>PSD Templates</title>
|
||||
<meta name="description" content="Free PSD Templates">
|
||||
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-4249565-47"></script>
|
||||
<script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-4249565-47'); </script>
|
||||
|
||||
<script src="templates.js"></script>
|
||||
<script>
|
||||
|
||||
var tpls, IFR=false, TYPE=0, RSRC=[], OTPLS;
|
||||
var ccat = -1, caut = -1, citm = -1, ordr = 0, cscr = 0; // current scroll
|
||||
var lo=localStorage.getItem("ordr"); if(lo) lo=JSON.parse(lo); if(lo && lo[1]>Date.now()-30000) ordr=lo[0];
|
||||
var cont, cats, search, back, itms, kwds, add_link;
|
||||
function clearNode(node) { while(node.firstChild) node.removeChild(node.firstChild); }
|
||||
function isDisplayed(nd) { while(true) { if(nd==document) return true; if(nd==null) return false; nd=nd.parentNode; } }
|
||||
|
||||
function go() {
|
||||
cont = document.getElementById("cont");
|
||||
cats = document.getElementById("cats");
|
||||
kwds = document.getElementById("kwds");
|
||||
search = document.getElementById("search");
|
||||
back = document.getElementById("back"); cont.removeChild(back);
|
||||
itms = document.getElementById("itms");
|
||||
add_link = document.getElementById("add_link");
|
||||
window.addEventListener("resize",onResize,false); onResize();
|
||||
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "../papi/tpls.json?r="+Date.now(), true);
|
||||
request.onload = imgsLoaded;
|
||||
request.onerror = function(e) { console.log(e.target.response); }
|
||||
request.send();
|
||||
|
||||
if(Math.random()<0.01) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "../papi/img/reduce.php", true);
|
||||
request.send();
|
||||
}
|
||||
|
||||
if(Math.random()<0.01) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "https://www.photopea.com/papi/updateTemplates.php", true);
|
||||
request.send();
|
||||
}
|
||||
|
||||
window.onbeforeunload = trackScroll;
|
||||
}
|
||||
function trackScroll() { var scrl=[Date.now(),ccat,caut,itms.scrollTop]; if(citm==-1) localStorage.setItem("scrl",JSON.stringify(scrl)); }
|
||||
function onResize() {
|
||||
if(tpls) updateView();
|
||||
}
|
||||
|
||||
function imgsLoaded(e) {
|
||||
var hr=window.location.href, sch = hr.slice(hr.indexOf("/templates")+11);
|
||||
var uprt = sch.split("?");
|
||||
if(uprt[1]) {
|
||||
var prts=uprt[1].split("&");
|
||||
for(var i=0; i<prts.length; i++) {
|
||||
var kv=prts[i].split("=");
|
||||
if(kv[0]=="type") TYPE=parseInt(kv[1]);
|
||||
else if(kv[0]=="rsrc") RSRC=kv[1].length==0 ? [] : kv[1].split(",");
|
||||
//else console.log(kv);
|
||||
}
|
||||
}
|
||||
|
||||
IFR = window.top!=window.self;
|
||||
OTPLS = JSON.parse(e.target.response);
|
||||
tpls = JSON.parse(e.target.response);
|
||||
tpls.categories = tpls.categories[TYPE];
|
||||
for(var i=0; i<tpls.list.length; i++) if(tpls.list[i][0]!=TYPE) { tpls.list.splice(i,1); i--; }
|
||||
|
||||
rebuild(sch, true);
|
||||
}
|
||||
|
||||
function rebuild(sch, firstTime) {
|
||||
console.log(sch);
|
||||
if(!firstTime) trackScroll();
|
||||
citm=-1;
|
||||
if(caut<-1) caut=-1;
|
||||
if(sch[0]=="-") {
|
||||
if(sch[1]=="a") caut=-1;
|
||||
if(sch[1]=="c") ccat=-1;
|
||||
}
|
||||
else if(sch!="") {
|
||||
var ci = sch.slice(2).split("?")[0].split("&")[0]; // Facebook might add "?" parameters
|
||||
if(sch[0]=="c") {
|
||||
var cts=tpls["categories"];
|
||||
for(var c in cts) if(toCat(cts[c])==ci) ccat=parseInt(c.slice(1));
|
||||
}
|
||||
if(sch[0]=="t") {
|
||||
var lst=tpls["list"];
|
||||
for(var i=0; i<lst.length; i++) if(tempID(lst[i])==ci) citm = i;
|
||||
}
|
||||
if(sch[0]=="a") {
|
||||
var lst=tpls["authors"];
|
||||
for(var i=0; i<lst.length; i++) if(lst[i][0]==ci) caut = i;
|
||||
}
|
||||
if(sch=="authors" ) caut=-2;
|
||||
if(sch=="installed") caut=-3;
|
||||
}
|
||||
console.log(citm,caut);
|
||||
var tit="PSD Templates";
|
||||
if(ccat!=-1) tit=tpls.categories["c"+ccat] + " | "+tit;
|
||||
if (caut==-2) tit="Top Authors";
|
||||
else if(caut==-3) tit="Installed";
|
||||
else if(caut!=-1) tit="By "+tpls.authors [caut][ 1] + " | "+tit;
|
||||
if(citm!=-1) tit=tpls.list [citm][ 9] + " | "+tit;
|
||||
if(citm!=-1) document.head.children.namedItem("description").content = tpls.list[citm][9];
|
||||
document.title = tit;
|
||||
|
||||
updateView();
|
||||
|
||||
itms.scrollTop="0";
|
||||
var scrl = localStorage.getItem("scrl");
|
||||
if(scrl) {
|
||||
scrl=JSON.parse(scrl); if(scrl.length==null) return;
|
||||
if(citm==-1 && Date.now()-scrl[0]<60e3 && scrl[1]==ccat && scrl[2]==caut) itms.scrollTop = scrl[3];
|
||||
}
|
||||
}
|
||||
|
||||
function updateView() {
|
||||
var w = window.innerWidth, h=window.innerHeight;
|
||||
itms.style.height=(h-90)+"px";
|
||||
cats.style.height=(h- 1)+"px";
|
||||
|
||||
add_link.style.display=(false?"none":"inline-block");
|
||||
add_link.textContent = TYPE==0 ? "Add your own template!" : (TYPE==1 ? "Add your own plugin!":"");
|
||||
add_link.setAttribute("href",
|
||||
TYPE==0 ? "//www.photopea.com/tuts/publish-your-psd-templates-in-photopea/" : "//www.photopea.com/api/plugins");
|
||||
|
||||
var tpl=citm!=-1 ? tpls.list[citm]:null;
|
||||
var comp;
|
||||
if(ordr==0) comp=function(a,b) {return cost0(b)-cost0(a);}
|
||||
if(ordr==1) comp=function(a,b) {return cost1(b)-cost1(a);}
|
||||
if(ordr==2) comp=function(a,b) {return cost2(b)-cost2(a);}
|
||||
tpls.list.sort(comp);
|
||||
if(tpl) citm=tpls.list.indexOf(tpl);
|
||||
|
||||
if(citm==-1 && !isDisplayed(search)) { clearNode(cont); cont.appendChild(search); cont.appendChild(itms); }
|
||||
if(citm!=-1) { clearNode(cont); cont.appendChild(back); cont.appendChild(itms); }
|
||||
clearNode(itms);
|
||||
|
||||
var twds = kwds.value.trim().toLowerCase(), wds=twds.split(/[ ,]+/);
|
||||
var out = [];
|
||||
if (caut==-2) printAuthors (tpls, out);
|
||||
else if(caut==-3) printInstalled(tpls, out);
|
||||
else makeView(tpls,out,twds,wds,ccat,caut,citm);
|
||||
|
||||
itms.innerHTML=out.join("\n");
|
||||
|
||||
var out = [];
|
||||
getCats(tpls,ccat,out);
|
||||
cats.innerHTML = out.join("\n");
|
||||
|
||||
if(citm==-1) {
|
||||
var ords = document.getElementsByClassName("order");
|
||||
for(var i=0; i<3; i++) ords[i].setAttribute("class", "order"+(i==ordr ? " blue":""));
|
||||
}
|
||||
}
|
||||
|
||||
function backClicked(e) {
|
||||
if(IFR) rebuild("");
|
||||
else history.back();
|
||||
/*
|
||||
citm = -1;
|
||||
updateView();
|
||||
itms.scrollTo(0,cscr); */
|
||||
}
|
||||
function itemClicked(id) {
|
||||
if(IFR) {
|
||||
if(id==null) id = tpls.list[citm][3];
|
||||
var ii=RSRC.indexOf(id);
|
||||
var msg = "--ot "+id;
|
||||
if(TYPE!=0) {
|
||||
if(ii==-1) RSRC.push(id); else RSRC.splice(ii,1);
|
||||
msg = "--ur "+RSRC.join(",");
|
||||
updateView();
|
||||
}
|
||||
window.parent.postMessage(msg);
|
||||
}
|
||||
else window.open("//www.Photopea.com#t"+tempID(tpls.list[citm]));
|
||||
}
|
||||
function catClicked(nc) {
|
||||
if(nc==ccat) ccat=-1;
|
||||
else ccat=nc;
|
||||
citm=-1;
|
||||
updateView();
|
||||
}
|
||||
function setOrder(ord) {
|
||||
ordr=ord; localStorage.setItem("ordr",JSON.stringify([ordr, Date.now()]));
|
||||
updateView();
|
||||
itms.scrollTo(0,0);
|
||||
}
|
||||
var __time=0;
|
||||
function labelClicked(e) {
|
||||
var ot = __time; __time=Date.now(); if(__time-ot>200) return;
|
||||
var ci = tpls.list[citm];
|
||||
var str=tpls.authors[ci[1]][0]+","+ci[3];
|
||||
if(window.parent) window.parent.postMessage("--et "+str,"*");
|
||||
//alert(str);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body onload="go()" class="flexrow">
|
||||
|
||||
<div id="cats" class="scrollable">
|
||||
</div>
|
||||
|
||||
<div id="cont">
|
||||
<div id="search">
|
||||
<span onclick="setOrder(0)" class="order blue">Hot</span>
|
||||
<span onclick="setOrder(1)" class="order">New</span>
|
||||
<span onclick="setOrder(2)" class="order" style="margin-right:2em">Top</span>
|
||||
<span style="display:inline-block">
|
||||
<label>Search:</label> <input type="text" id="kwds" oninput="updateView()" style="margin-right:1.5em;"></input>
|
||||
</span>
|
||||
<a id="add_link" href="//www.photopea.com/tuts/publish-your-psd-templates-in-photopea/" target="_blank">Add your own template!</a>
|
||||
</div>
|
||||
<div id="back">
|
||||
<span class="back" onclick="backClicked()">< Back</span>
|
||||
</div>
|
||||
<div id="itms" class="scrollable"></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,236 @@
|
||||
|
||||
<!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" />
|
||||
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i" />
|
||||
<link rel="stylesheet" href="templates.css" />
|
||||
|
||||
<title>PSD Templates</title>
|
||||
<meta name="description" content="Free PSD Templates">
|
||||
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-4249565-47"></script>
|
||||
<script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-4249565-47'); </script>
|
||||
|
||||
<script src="templates.js"></script>
|
||||
<script>
|
||||
|
||||
var tpls, IFR=false, TYPE=0, RSRC=[], OTPLS;
|
||||
var ccat = -1, caut = -1, citm = -1, ordr = 0, cscr = 0; // current scroll
|
||||
var lo=localStorage.getItem("ordr"); if(lo) lo=JSON.parse(lo); if(lo && lo[1]>Date.now()-30000) ordr=lo[0];
|
||||
var cont, cats, search, back, itms, kwds, add_link;
|
||||
function clearNode(node) { while(node.firstChild) node.removeChild(node.firstChild); }
|
||||
function isDisplayed(nd) { while(true) { if(nd==document) return true; if(nd==null) return false; nd=nd.parentNode; } }
|
||||
|
||||
function go() {
|
||||
cont = document.getElementById("cont");
|
||||
cats = document.getElementById("cats");
|
||||
kwds = document.getElementById("kwds");
|
||||
search = document.getElementById("search");
|
||||
back = document.getElementById("back"); cont.removeChild(back);
|
||||
itms = document.getElementById("itms");
|
||||
add_link = document.getElementById("add_link");
|
||||
window.addEventListener("resize",onResize,false); onResize();
|
||||
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "../papi/tpls.json?r="+Date.now(), true);
|
||||
request.onload = imgsLoaded;
|
||||
request.onerror = function(e) { console.log(e.target.response); }
|
||||
request.send();
|
||||
|
||||
if(Math.random()<0.01) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "../papi/img/reduce.php", true);
|
||||
request.send();
|
||||
}
|
||||
|
||||
if(Math.random()<0.01) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", "https://www.photopea.com/papi/updateTemplates.php", true);
|
||||
request.send();
|
||||
}
|
||||
|
||||
window.onbeforeunload = trackScroll;
|
||||
}
|
||||
function trackScroll() { var scrl=[Date.now(),ccat,caut,itms.scrollTop]; if(citm==-1) localStorage.setItem("scrl",JSON.stringify(scrl)); }
|
||||
function onResize() {
|
||||
if(tpls) updateView();
|
||||
}
|
||||
|
||||
function imgsLoaded(e) {
|
||||
var hr=window.location.href, sch = hr.slice(hr.indexOf("/templates")+11);
|
||||
var uprt = sch.split("?");
|
||||
if(uprt[1]) {
|
||||
var prts=uprt[1].split("&");
|
||||
for(var i=0; i<prts.length; i++) {
|
||||
var kv=prts[i].split("=");
|
||||
if(kv[0]=="type") TYPE=parseInt(kv[1]);
|
||||
else if(kv[0]=="rsrc") RSRC=kv[1].length==0 ? [] : kv[1].split(",");
|
||||
//else console.log(kv);
|
||||
}
|
||||
}
|
||||
|
||||
IFR = window.top!=window.self;
|
||||
OTPLS = JSON.parse(e.target.response);
|
||||
tpls = JSON.parse(e.target.response);
|
||||
tpls.categories = tpls.categories[TYPE];
|
||||
for(var i=0; i<tpls.list.length; i++) if(tpls.list[i][0]!=TYPE) { tpls.list.splice(i,1); i--; }
|
||||
|
||||
rebuild(sch, true);
|
||||
}
|
||||
|
||||
function rebuild(sch, firstTime) {
|
||||
console.log(sch);
|
||||
if(!firstTime) trackScroll();
|
||||
citm=-1;
|
||||
if(caut<-1) caut=-1;
|
||||
if(sch[0]=="-") {
|
||||
if(sch[1]=="a") caut=-1;
|
||||
if(sch[1]=="c") ccat=-1;
|
||||
}
|
||||
else if(sch!="") {
|
||||
var ci = sch.slice(2).split("?")[0].split("&")[0]; // Facebook might add "?" parameters
|
||||
if(sch[0]=="c") {
|
||||
var cts=tpls["categories"];
|
||||
for(var c in cts) if(toCat(cts[c])==ci) ccat=parseInt(c.slice(1));
|
||||
}
|
||||
if(sch[0]=="t") {
|
||||
var lst=tpls["list"];
|
||||
for(var i=0; i<lst.length; i++) if(tempID(lst[i])==ci) citm = i;
|
||||
}
|
||||
if(sch[0]=="a") {
|
||||
var lst=tpls["authors"];
|
||||
for(var i=0; i<lst.length; i++) if(lst[i][0]==ci) caut = i;
|
||||
}
|
||||
if(sch=="authors" ) caut=-2;
|
||||
if(sch=="installed") caut=-3;
|
||||
}
|
||||
console.log(citm,caut);
|
||||
var tit="PSD Templates";
|
||||
if(ccat!=-1) tit=tpls.categories["c"+ccat] + " | "+tit;
|
||||
if (caut==-2) tit="Top Authors";
|
||||
else if(caut==-3) tit="Installed";
|
||||
else if(caut!=-1) tit="By "+tpls.authors [caut][ 1] + " | "+tit;
|
||||
if(citm!=-1) tit=tpls.list [citm][ 9] + " | "+tit;
|
||||
if(citm!=-1) document.head.children.namedItem("description").content = tpls.list[citm][9];
|
||||
document.title = tit;
|
||||
|
||||
updateView();
|
||||
|
||||
itms.scrollTop="0";
|
||||
var scrl = localStorage.getItem("scrl");
|
||||
if(scrl) {
|
||||
scrl=JSON.parse(scrl); if(scrl.length==null) return;
|
||||
if(citm==-1 && Date.now()-scrl[0]<60e3 && scrl[1]==ccat && scrl[2]==caut) itms.scrollTop = scrl[3];
|
||||
}
|
||||
}
|
||||
|
||||
function updateView() {
|
||||
var w = window.innerWidth, h=window.innerHeight;
|
||||
itms.style.height=(h-90)+"px";
|
||||
cats.style.height=(h- 1)+"px";
|
||||
|
||||
add_link.style.display=(false?"none":"inline-block");
|
||||
add_link.textContent = TYPE==0 ? "Add your own template!" : (TYPE==1 ? "Add your own plugin!":"");
|
||||
add_link.setAttribute("href",
|
||||
TYPE==0 ? "//www.photopea.com/tuts/publish-your-psd-templates-in-photopea/" : "//www.photopea.com/api/plugins");
|
||||
|
||||
var tpl=citm!=-1 ? tpls.list[citm]:null;
|
||||
var comp;
|
||||
if(ordr==0) comp=function(a,b) {return cost0(b)-cost0(a);}
|
||||
if(ordr==1) comp=function(a,b) {return cost1(b)-cost1(a);}
|
||||
if(ordr==2) comp=function(a,b) {return cost2(b)-cost2(a);}
|
||||
tpls.list.sort(comp);
|
||||
if(tpl) citm=tpls.list.indexOf(tpl);
|
||||
|
||||
if(citm==-1 && !isDisplayed(search)) { clearNode(cont); cont.appendChild(search); cont.appendChild(itms); }
|
||||
if(citm!=-1) { clearNode(cont); cont.appendChild(back); cont.appendChild(itms); }
|
||||
clearNode(itms);
|
||||
|
||||
var twds = kwds.value.trim().toLowerCase(), wds=twds.split(/[ ,]+/);
|
||||
var out = [];
|
||||
if (caut==-2) printAuthors (tpls, out);
|
||||
else if(caut==-3) printInstalled(tpls, out);
|
||||
else makeView(tpls,out,twds,wds,ccat,caut,citm);
|
||||
|
||||
itms.innerHTML=out.join("\n");
|
||||
|
||||
var out = [];
|
||||
getCats(tpls,ccat,out);
|
||||
cats.innerHTML = out.join("\n");
|
||||
|
||||
if(citm==-1) {
|
||||
var ords = document.getElementsByClassName("order");
|
||||
for(var i=0; i<3; i++) ords[i].setAttribute("class", "order"+(i==ordr ? " blue":""));
|
||||
}
|
||||
}
|
||||
|
||||
function backClicked(e) {
|
||||
if(IFR) rebuild("");
|
||||
else history.back();
|
||||
/*
|
||||
citm = -1;
|
||||
updateView();
|
||||
itms.scrollTo(0,cscr); */
|
||||
}
|
||||
function itemClicked(id) {
|
||||
if(IFR) {
|
||||
if(id==null) id = tpls.list[citm][3];
|
||||
var ii=RSRC.indexOf(id);
|
||||
var msg = "--ot "+id;
|
||||
if(TYPE!=0) {
|
||||
if(ii==-1) RSRC.push(id); else RSRC.splice(ii,1);
|
||||
msg = "--ur "+RSRC.join(",");
|
||||
updateView();
|
||||
}
|
||||
window.parent.postMessage(msg);
|
||||
}
|
||||
else window.open("//www.Photopea.com#t"+tempID(tpls.list[citm]));
|
||||
}
|
||||
function catClicked(nc) {
|
||||
if(nc==ccat) ccat=-1;
|
||||
else ccat=nc;
|
||||
citm=-1;
|
||||
updateView();
|
||||
}
|
||||
function setOrder(ord) {
|
||||
ordr=ord; localStorage.setItem("ordr",JSON.stringify([ordr, Date.now()]));
|
||||
updateView();
|
||||
itms.scrollTo(0,0);
|
||||
}
|
||||
var __time=0;
|
||||
function labelClicked(e) {
|
||||
var ot = __time; __time=Date.now(); if(__time-ot>200) return;
|
||||
var ci = tpls.list[citm];
|
||||
var str=tpls.authors[ci[1]][0]+","+ci[3];
|
||||
if(window.parent) window.parent.postMessage("--et "+str,"*");
|
||||
//alert(str);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body onload="go()" class="flexrow">
|
||||
|
||||
<div id="cats" class="scrollable">
|
||||
</div>
|
||||
|
||||
<div id="cont">
|
||||
<div id="search">
|
||||
<span onclick="setOrder(0)" class="order blue">Hot</span>
|
||||
<span onclick="setOrder(1)" class="order">New</span>
|
||||
<span onclick="setOrder(2)" class="order" style="margin-right:2em">Top</span>
|
||||
<span style="display:inline-block">
|
||||
<label>Search:</label> <input type="text" id="kwds" oninput="updateView()" style="margin-right:1.5em;"></input>
|
||||
</span>
|
||||
<a id="add_link" href="//www.photopea.com/tuts/publish-your-psd-templates-in-photopea/" target="_blank">Add your own template!</a>
|
||||
</div>
|
||||
<div id="back">
|
||||
<span class="back" onclick="backClicked()">< Back</span>
|
||||
</div>
|
||||
<div id="itms" class="scrollable"></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,56 @@
|
||||
|
||||
|
||||
body { background-color:#333333; font-family:"Open Sans"; color:#a5a5a5; padding:0; margin:0; font-size:14px; }
|
||||
|
||||
#cont { background-color:#1d1d1d; padding: 26px 0 0 30px; width:100%; }
|
||||
|
||||
a { /*text-decoration: inherit;*/ color: inherit; }
|
||||
|
||||
.title { display:block; color:white; }
|
||||
.item { position:relative; display:inline-block; margin:0 14px 20px 0; overflow:hidden; }
|
||||
.item img { height: 100%; width: 100%; object-fit: contain; cursor:pointer; }
|
||||
.item img:hover { object-fit: cover; }
|
||||
.cat { margin:9px; padding:2px 0px; cursor:pointer; }
|
||||
.top { margin-left: 0px; }
|
||||
.clickable: { cursor:pointer; }
|
||||
.blue { border-bottom: 3px solid #00eeff; margin-bottom:-3px; }
|
||||
.clickable:hover {color:#00eeff;}
|
||||
.back { display:inline-block; background-color:rgba(0,0,0,0.5); cursor:pointer; padding:6px 1em; margin: 0.2em 0 0.6em 0; font-size:1.5em; }
|
||||
.count { float:right; }
|
||||
.cat_title {font-size:1.6em; display:inline-block; margin:4px 0 10px 0;}
|
||||
.t2 {font-size:1.2em; }
|
||||
.openimg {opacity:0; text-align:center; font-size:4em; position:absolute; top:0; left:0; cursor:pointer;
|
||||
color:white; background-color:rgba(0,0,0,0.5); text-shadow: 0 0 8px black; }
|
||||
.openimg:hover {opacity:1;}
|
||||
h1 {font-size:2em; margin-top:0; margin-bottom:0.4em; font-weight:normal; }
|
||||
#cats { padding:0px 20px; min-width:180px; color:white; }
|
||||
#cats a { text-decoration:none; }
|
||||
#search { font-size:1.3em; margin-bottom: 24px; line-height:2em; }
|
||||
#kwds { font-size:1.0em; background-color: black; border:none; color:white; padding:3px; margin-left:0.5em; }
|
||||
|
||||
.order { margin-right:1.5em; cursor:pointer; }
|
||||
|
||||
.post {min-width:1000px; margin-top:4px;}
|
||||
.post_big { padding:24px; }
|
||||
.clc { text-decoration:none; }
|
||||
.clc:hover { color:#00eeff; }
|
||||
|
||||
.scrollable {
|
||||
overflow-y: scroll;
|
||||
/* for Firefox: */
|
||||
scrollbar-color: #222222 #1d1d1d;
|
||||
scrollbar-width: thin;
|
||||
}
|
||||
.scrollable::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
background: #1d1d1d;
|
||||
}
|
||||
.scrollable::-webkit-scrollbar-thumb {
|
||||
background: rgba(255,255,255,0.5);
|
||||
border-radius: 6px;
|
||||
margin:4px;
|
||||
}
|
||||
.flexrow {
|
||||
display:flex;
|
||||
flex-flow:row;
|
||||
}
|
||||
@@ -0,0 +1,309 @@
|
||||
|
||||
function printInstalled(tpls,out) {
|
||||
|
||||
console.log(OTPLS,RSRC);
|
||||
var list = OTPLS.list;
|
||||
|
||||
out.push("<h1>Installed</h1>");
|
||||
out.push("<table style=\"font-size:1.2em; line-height:1.7em;\">");
|
||||
out.push("<tr><th style=\"width:300px\">Name</th><th></th></tr>");
|
||||
|
||||
for(var ri=0; ri<RSRC.length; ri++) {
|
||||
var id=RSRC[ri], cr=null;
|
||||
for(var i=0; i<list.length; i++) if(list[i][3]==id) cr=list[i];
|
||||
out.push("<tr><td>")
|
||||
if(cr) {
|
||||
if(cr[0]==TYPE) out.push("<a class=\"clc\" "+OC("t-"+tempID(cr))+">"+shorten(cr[9],24)+"</a>");
|
||||
else out.push(shorten(cr[9],24));
|
||||
}
|
||||
else out.push("????");
|
||||
//out.push("</td><td>Uninstall</td></tr>");
|
||||
out.push("<td><a class=\"clickable\" onclick=\"itemClicked('"+id+"')\" style=\"cursor:pointer\" >Uninstall</a></td></tr>");
|
||||
}
|
||||
|
||||
out.push("</table>");
|
||||
}
|
||||
|
||||
function printAuthors(tps, out) {
|
||||
var as = JSON.parse(JSON.stringify(tps.authors)), list=tps.list;
|
||||
|
||||
var to = [0,"Total:",0,0,0,0];
|
||||
for(var i=0; i<list.length; i++) {
|
||||
var tpl=list[i], ca=as[tpl[1]];
|
||||
if(ca.length==2) ca.push(0,0,0,0); // tcount, usages, size, time
|
||||
ca[2]++; ca[3]+=tpl[7]; ca[4]+=tpl[8]; ca[5]=Math.max(ca[5],tpl[2]);
|
||||
to[2]++; to[3]+=tpl[7]; to[4]+=tpl[8]; to[5]=Math.max(to[5],tpl[2]);
|
||||
}
|
||||
var nas = []; for(var i=0; i<as.length; i++) if(as[i].length!=2) nas.push(as[i]); as=nas;
|
||||
|
||||
as.sort(function(a,b) { return b[3]-a[3]; }); as.push(to);
|
||||
|
||||
var tdr = "<td style=\"text-align:right; width:120px;\">";
|
||||
var thr = "<th style=\"text-align:right; width:120px;\">";
|
||||
|
||||
out.push("<h1>Best Contributors</h1>");
|
||||
out.push("<table style=\"font-size:1.2em; line-height:1.7em;\">");
|
||||
out.push("<tr><th></th><th>Name</th>"+thr+"#Templates</th>"+thr+"Usages</th>"+thr+"Total Size</th>"+thr+"Last One</th></tr>");
|
||||
|
||||
|
||||
for(var i=0; i<as.length; i++) {
|
||||
var ca = as[i], last=i+1==as.length;
|
||||
out.push(last ? "<tr style=\"font-weight:bold\">" : "<tr>");
|
||||
|
||||
if(!last) out.push("<td style=\"text-align:right;\">"+(i+1)+".</td>");
|
||||
else out.push("<td></td>");
|
||||
out.push("<td style=\"padding-left:10px;\"><a class=\"clc\" "+OC("a-"+ca[0])+">"+shorten(ca[1],24)+"</a></td>");
|
||||
out.push(tdr+ca[2]+"</td>");
|
||||
out.push(tdr+printNum(ca[3])+"</td>");
|
||||
out.push(tdr+printBytes(ca[4])+"</td>");
|
||||
out.push(tdr+"<small>"+printAge(ca[5])+" ago</small></td>");
|
||||
out.push("</tr>");
|
||||
}
|
||||
out.push("</table>");
|
||||
}
|
||||
|
||||
function makeView(tps,out,twds,wds,curc,caut,cit) {
|
||||
var list = tps.list, cts=tps.categories;
|
||||
if(cit==-1) {
|
||||
if(caut!=-1) out.push("<h1 style=\"font-size:2.4em\"><a "+OC("-a")+" class=\"clc\">×</a> <b>"+escapeHtml(tps.authors[caut][1])+"</b></h1>");
|
||||
var oi = out.length; out.push("");
|
||||
var N=0, U=0, S=0;
|
||||
for(var i=0; i<list.length; i++) {
|
||||
var tpl = list[i], cat=tpl[5], pcat=cat-(cat%10);
|
||||
if(caut!=-1 && tpl[1]!=caut) continue;
|
||||
if(curc!=-1) {
|
||||
if((curc%10)==0) { if(pcat!=curc) continue; }
|
||||
else if(curc!=cat) continue;
|
||||
}
|
||||
if(twds!="") {
|
||||
var occ=0, tot=(tpl[8] + " " + tpl[9] + " " + tps.authors[tpl[1]] + " " + cts["c"+tpl[5]]).toLowerCase();
|
||||
for(var j=0; j<wds.length; j++) {
|
||||
if(tot.indexOf(wds[j])!=-1) occ++;
|
||||
}
|
||||
if(occ==0) continue;
|
||||
}
|
||||
makeItem(tps,i, cts,out, false);
|
||||
N++; U+=tpl[7]; S+=tpl[8];
|
||||
}
|
||||
if(caut!=-1) out[oi]="<p>"+N+" Templates • "+printNum(U)+" "+uses()+" • "+printBytes(S)+"</p>";
|
||||
}
|
||||
else {
|
||||
var tpl = list[cit];
|
||||
makeItem(tps,cit,cts,out, true);
|
||||
out.push("<iframe src=\"comments.html#"+tempID(tpl)+"\" frameborder=\"0\" style=\"border:none; max-width:800px; width:calc(100% - 20px); height:800px; background-color:white;\"></iframe>");
|
||||
}
|
||||
}
|
||||
|
||||
function uses() { return TYPE==0?"uses":"installs"; }
|
||||
function shorten(str, lim) {
|
||||
return (str.length<lim) ?str:str.slice(0,lim-3)+"...";
|
||||
}
|
||||
function mmd(e) {
|
||||
var t=e.target; //if(t.tagName.toLowercase()!="img") return;
|
||||
var r = t.getBoundingClientRect();
|
||||
t.setAttribute("style", "object-position: "+(100*e.offsetX/r.width)+"% "+(100*e.offsetY/r.height)+"%;");
|
||||
}
|
||||
function mmo(e) {
|
||||
var t=e.target;
|
||||
t.setAttribute("style", "object-position: 50% 50%;");
|
||||
}
|
||||
function toID(str) { return str.toLowerCase().replace(/\s+/g, "-")+".html"; }
|
||||
function makeItem(tps, ind,cts,lst, big) {
|
||||
var tpl = tps.list[ind], gotR = RSRC.indexOf(tpl[3])!=-1;
|
||||
var rst = window.innerWidth-(245+30)-2; //console.log(iw);
|
||||
var num = 1; while(rst/num>300) num++;
|
||||
var cc = Math.floor(rst/num); //console.log(cc);
|
||||
var isz = cc-16; //console.log(isz);
|
||||
|
||||
var tit = escapeHtml(tpl[9]);
|
||||
var lim = ~~(isz/9); //console.log(tpl);
|
||||
|
||||
if(big) isz=rst/2;
|
||||
var wi = (isz+"px");
|
||||
var hi = ((isz*9.3/16)+"px");
|
||||
|
||||
lst.push("<div class=\"item "+(big?"flexrow":"tiny")+"\" "+(big?"":"style=\"width:"+wi+";\" ")+">");
|
||||
|
||||
var iurl = tpl[4]; //(Math.random()<0.5?"wide.png":"tall.png"); // tpl[3]
|
||||
//*
|
||||
|
||||
|
||||
lst.push("<div style=\"width:"+wi+"; min-width:"+wi+"; height:"+hi+"\">"); // ict
|
||||
if(!big) lst.push("<a "+OC("t-"+tempID(tpl))+" title=\""+tit+"\">");
|
||||
lst.push("<img src=\""+iurl+"\" loading=\"lazy\" onmousemove=\"mmd(event)\" onmouseout=\"mmo(event)\" "
|
||||
+(big ? "onclick=\"itemClicked()\" title=\"Open ""+tit+""\"" : "")+" />");
|
||||
//if(big) lst.push("<div class=\"openimg\" style=\"width:"+wi+"; height:"+hi+";\" "+(big ? "onclick=\"itemClicked("+ind+")\" title=\"Open ""+tit+""\"" : "")+"><br/><br/>Open</div>");
|
||||
if(!big) lst.push("</a>");
|
||||
lst.push("</div>"); // ict
|
||||
lst.push("<div class=\""+"post"+(big?"_big":"")+"\">"); // cmt
|
||||
|
||||
if(!big) lst.push("<a class=\"clc\" "+OC("t-"+tempID(tpl))+" title=\""+tit+"\">");
|
||||
var tag = big?"h1":"span";
|
||||
lst.push("<"+tag+" class=\"title "+(big?"t1":"t2")+"\" "+(big?"onclick=\"labelClicked()\"":"")+">" +
|
||||
(big?tit:shorten(tit,lim)) + (gotR?" ✅":"") + "</"+tag+">");
|
||||
if(!big) lst.push("</a>");
|
||||
|
||||
var au = tps.authors[tpl[1]];
|
||||
var cat = cts["c"+tpl[5]];
|
||||
lst.push("<span>")
|
||||
lst.push( "By <a class=\"clc\" "+OC("a-"+au[0] )+">" +escapeHtml(big?au[1]:shorten(au[1],~~(lim*0.7)))+"</a>");
|
||||
lst.push(" in <a class=\"clc\" "+OC("c-"+toCat(cat))+">" + cat+"</a>");
|
||||
lst.push("</span>");
|
||||
|
||||
if(big) {
|
||||
lst.push("<p>"+findLinks(escapeHtml(tpl[10]))+"</p>");
|
||||
lst.push("<p style=\"font-size:1.5em; margin-bottom: 0em;\">");
|
||||
var dstr = printDate(tpl[2]);
|
||||
|
||||
lst.push("<span title=\""+printNum(tpl[6])+" views"+"\">"+printNum(tpl[7])+" "+uses()+"</span>")
|
||||
lst.push(" • "+printBytes(tpl[8]));
|
||||
lst.push(" • <span title=\""+((0.001*Date.now()-tpl[2])/(60*60*24)).toFixed(2)+" days ago\">"+dstr+"</span>");// lst.push("<br/>");
|
||||
|
||||
lst.push("</p>");
|
||||
lst.push("<p style=\"font-size:1.2em; margin-top:0.5em;\">");
|
||||
var aurl = "//www.Photopea.com#t"+tempID(tpl);
|
||||
if(TYPE==0) lst.push("<a href=\""+aurl+"\" target=\"_blank\" class=\"clickable\" >photopea.com#t"+tempID(tpl)+"</a>");
|
||||
else lst.push("<a class=\"clickable\" onclick=\"itemClicked()\" style=\"cursor:pointer\" >"+(gotR?"Uninstall":"Install")+"</a>");
|
||||
lst.push("</p>");
|
||||
}
|
||||
else {
|
||||
lst.push("<br/><span>");
|
||||
|
||||
var us=tpl[7], ss=""; //us = Math.floor(Math.random()*1e9);
|
||||
if(us<1000) ss=us+"";
|
||||
else if(us<1e6) ss=(us/1e3).toFixed(us<1e4 ? 1 : 0)+"K";
|
||||
else if(us<1e9) ss=(us/1e6).toFixed(us<1e7 ? 1 : 0)+"M";
|
||||
|
||||
var sl=ss.length-3;
|
||||
if(ss[sl]=="." && ss[sl+1]=="0") ss=ss.slice(0,sl)+ss[sl+2];
|
||||
|
||||
lst.push(ss+" "+uses());
|
||||
|
||||
|
||||
var ts = printAge(tpl[2]);
|
||||
|
||||
lst.push(" • "+ts+" ago");
|
||||
lst.push("</span>");
|
||||
}
|
||||
lst.push("</div>"); // cmt
|
||||
lst.push("</div>");
|
||||
}
|
||||
|
||||
function OC(tgt) { // onclick
|
||||
if(IFR) return "onclick=\"rebuild('"+tgt+"')\" style=\"cursor:pointer;\"";
|
||||
if(tgt[0]=="-") tgt="";
|
||||
return "href=\""+(tgt==""?"/templates/":tgt)+"\"";
|
||||
}
|
||||
|
||||
function printAge(time) {
|
||||
var sts = [60, 60, 24, 30, 12,10000];
|
||||
var uns = ["sec","min","hour","day","month","year"];
|
||||
var td = (Date.now()/1000) - time, ts="";
|
||||
var lim = 1;
|
||||
for(var i=0; i<sts.length; i++) {
|
||||
var ol=lim; lim*=sts[i];
|
||||
if(td<lim) { var n=Math.round(td/ol); ts=n+" "+uns[i]+(n>1?"s":""); break; }
|
||||
}
|
||||
return ts;
|
||||
}
|
||||
function printBytes(bs) {
|
||||
var bst = bs.toString(2);
|
||||
var zrs=0; while(zrs+10<bst.length) zrs+=10;
|
||||
var num = (bs/Math.pow(2,zrs)), rn=Math.round(num), fxd=num.toFixed(1);
|
||||
num = (rn>99 || fxd[fxd.length-1]=="0") ? rn : fxd;
|
||||
|
||||
var ext = ["B","KB","MB","GB","TB","PB"][Math.floor(zrs/10)];
|
||||
return num+" "+ext;
|
||||
}
|
||||
|
||||
function printDate(d) {
|
||||
var dt = new Date(d*1000);
|
||||
var mon = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"][dt.getMonth()];
|
||||
return mon+" "+(dt.getDate())+", "+dt.getFullYear();
|
||||
}
|
||||
function printNum(f) { return f.toLocaleString('en-US', {maximumFractionDigits:2}); }
|
||||
function tempID(tpl) { return tpl[3].split("").reverse().join(""); }
|
||||
function isWhite(c) { return c==" " || c=="\n" || c=="\t"; }
|
||||
function isChar(c) { c=c.charCodeAt(0); return (65<=c && c<=90) || (97<=c && c<=122); }
|
||||
|
||||
function findLinks(str) {
|
||||
//return str;
|
||||
var iod = [];
|
||||
for(var i=0; i<str.length-2; i++) if(str[i]=="." && isChar(str[i+1]) && isChar(str[i+2])) iod.push(i);
|
||||
iod.reverse(); //console.log(iod);
|
||||
|
||||
var omit=["https://", "http://", "//", "www."];
|
||||
|
||||
var min = 1e9;
|
||||
for(var i=0; i<iod.length; i++) {
|
||||
var i0=iod[i], i1=i0; if(i0>min) continue;
|
||||
|
||||
while(i0>0 && !isWhite(str[i0-1])) i0--;
|
||||
while(i1<str.length-1 && !isWhite(str[i1+1])) i1++;
|
||||
if(str[i0]==" ") i0++; if(str[i1]==" ") i1--;
|
||||
var mid = str.slice(i0,i1+1), url=mid;
|
||||
for(var j=0; j<omit.length; j++) if(mid.startsWith(omit[j])) mid=mid.slice(omit[j].length);
|
||||
if(url.indexOf("//")==-1) url="//"+url;
|
||||
str = str.slice(0,i0)+"<a href=\""+url+"\" target=\"_blank\">"+mid+"</a>"+str.slice(i1+1);
|
||||
min=i0;
|
||||
}
|
||||
return str//.replaceAll("\n","<br/>");
|
||||
}
|
||||
|
||||
function escapeHtml(unsafe) {
|
||||
return unsafe
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
}
|
||||
|
||||
function getCatCounts(tps) {
|
||||
var list = tps.list, cts=tps.categories;
|
||||
var ccnt = JSON.parse(JSON.stringify(cts));
|
||||
for(var cat in ccnt) ccnt[cat]=0;
|
||||
for(var i=0; i<list.length; i++) {
|
||||
var tpl = list[i], cat=tpl[5], pcat=cat-(cat%10);
|
||||
ccnt["c"+cat]++; if(cat!=pcat) ccnt["c"+pcat]++;
|
||||
}
|
||||
return ccnt;
|
||||
}
|
||||
|
||||
function getCats(tps, curr,out) {
|
||||
var cts=tps.categories, ccnt = getCatCounts(tps);
|
||||
out.push("<br/>");
|
||||
out.push("<span class=\"cat top clickable\"><a "+OC("authors")+">AUTHORS</a></span>");
|
||||
out.push("<span class=\"cat_title\">CATEGORIES</span>");
|
||||
for(var cat in cts) {
|
||||
if(ccnt[cat]==0) continue;
|
||||
var cw = parseInt(cat.slice(1)), isTop = (cw%10)==0; //console.log(cw);
|
||||
out.push("<a "+OC(cw==curr ? "-c" : "c-"+toCat(cts[cat]))+">");
|
||||
out.push("<div class=\"cat"+(isTop?" top":"") + (cw==curr?" blue":"")+" clickable\" >"); // onclick=\"catClicked("+cw+")\"
|
||||
out.push(cts[cat]);
|
||||
out.push("<span class=\"count\">"+ccnt[cat]+"</span>");
|
||||
out.push("</div>");
|
||||
out.push("</a>");
|
||||
}
|
||||
if(TYPE!=0) out.push("<br/><span class=\"cat top clickable\"><a "+OC("installed")+">INSTALLED ("+RSRC.length+")</a></span>");
|
||||
}
|
||||
function toCat(cat) {
|
||||
var ioa=cat.indexOf(" &");
|
||||
if(ioa!=-1) cat=cat.slice(0,ioa)+cat.slice(ioa+2);
|
||||
var ioa=cat.indexOf(" /");
|
||||
if(ioa!=-1) cat=cat.slice(0,ioa)+cat.slice(ioa+2);
|
||||
return cat.toLowerCase().replace(/\s+/g, "-");
|
||||
}
|
||||
|
||||
|
||||
function cost0(v) {
|
||||
var age = (Date.now()*0.001 - v[2]) / (60*60*24); // age in days
|
||||
var cst = (v[7]+1) / age; // usages per day
|
||||
var ext = 20*Math.pow(Math.PI,-age*0.15);
|
||||
|
||||
return cst+ext;
|
||||
}
|
||||
function cost1(v) { return v[2]; }
|
||||
function cost2(v) { return v[7]; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user