// ==UserScript==
// @name theme search
// @version 0.1
// @description add a button to search in the theme settings
// @author Rutger Valk-van de Klundert / Ruben @ Lightspeed HQ
// @run-at document-end
// @match https://*.webshopapp.com/admin/*
// @match https://*.shoplightspeed.com/admin/theme/preview/*
// @namespace https://greasyfork.org/users/428438
// ==/UserScript==
var $jscomp = $jscomp||{};
$jscomp.scope = {};
$jscomp.createTemplateTagFirstArg = function(r){
return r.raw=r
};
$jscomp.createTemplateTagFirstArgWithRaw = function(r,u){
r.raw=u;return r
};
var themeSearchFn = function(){
!function(q){
var h = Function("return this")()||eval("this");
"function" == typeof define&&define.amd ? define(["jsonq"],function(e){return h.jsonQ=q()}) : "object"==typeof module&&module.exports ? module.exports=q() : h.jsonQ=q()
}(function(q){
function h(a){
var b=a.keyAdded||[],
c=a.json,
d=a.path,
f=a.newJson;
return e.each(c,function(a,e){
var g=d ? JSON.parse(JSON.stringify(d)):[];g.push(a);"object"==p(c)&&(-1==b.indexOf(a)&&(b.push(a),f.jsonQ_path[a]=[]),f.jsonQ_path[a].push({path:g}));var k=p(e);"object"!=k&&"array"!=k||h({json:e,newJson:f,path:g,keyAdded:b})
}),
f
}
var e=function(a){
return new e.fn.init(a)
},
v=JSON.stringify,
r=JSON.parse;
e.settings={
sort:{order:"ASC",logic:function(a){return a},caseIgnore:!0,allLevel:!0}
};
var u={
topLevel:function(a){
var b=this.jsonQ_current,
c=this.cloneObj(e()),
d=c.jsonQ_current=[],
f="",
g=a.key;
a=a.method;
for(var k=0,m=b.length;k<m;k++){
var n=!1,l=b[k].path.concat([]);
if("parent"==a)0===l.length?n=!0:l.pop();
else{var p=l.lastIndexOf(g);-1==p?n=!0:l=l.slice(0,p+1)}
f==(f=JSON.stringify(l))||n||d.push({path:l})
}
return c.length=d.length,c.selector.push({method:a,key:g}),c
},
qualTrv:function(a){
var b=this.jsonQ_current,
c=this.cloneObj(e()),
d=c.jsonQ_current=[],
f=a.key,
g=e.clone(this.jsonQ_path[f])||[],
k=a.qualifier,
m=p(k);
a=a.method;
for(var n="find"==a,l=0,y=b.length;l<y;l++){
var h=b[l].path,
r=[],
v=!1;
if(!n){
if(0===h.length)continue;(r=h.concat([])).pop()
}
for(var w=0;w<g.length;w++){
var t=g[w].path;if(n){var q=t;q=(new RegExp("^"+h.join("~~"),"i")).test(q.join("~~"))}else q=t.concat([]),q.pop(),q=r.join()==q.join();if(q)u.qTest.call(this,m,k,t,d)&&(g.splice(w,1),w--),v=!0;else if(v)break
}
}
return"string"==m&&(c=this.filter.call(c,k)),
c.length=c.jsonQ_current.length,
c.selector.push({method:a,key:f,qualifier:k}),
c
},
qTest:function(a,b,c,d){
a="function"==a?b.call(this.pathValue(c)):"object"!=a||e.checkKeyValue(this.pathValue(c),b);return a&&d.push({path:c}),a
}
},
t={
baseConv:function(a,b,c){
if("string"==a){if(c.caseIgnore)return b.toLowerCase()}else{if("array"==a)return b.join();if("object"==a)return v(e.order(b))}return b
},
sortAry:function(a,b,c){
return a.sort(function(a,c){var d=b(a),e=b(c);return d<e?-1:e<d?1:0}),"desc"==c.order.toLowerCase()&&a.reverse(),a
}
};
e.fn=e.prototype={
init:function(a){
var b;
if(!a)return this;
if("string"==(b=p(a)))try{a=JSON.parse(a)}catch(c){throw"Not a valid json string.";}else if("object"!=b&&"array"!=b)throw"Not a valid json object.";
return this.jsonQ_root=a,this.jsonQ_path={},this.jsonQ_current=[{path:[]}],h({json:a,newJson:this,refresh:!0}),this.length=this.jsonQ_current.length,this.selector=[],this
},
pathValue:function(a){
return e.pathValue(this.jsonQ_root,a)
},
setPathValue:function(a,b){
return e.setPathValue(this.jsonQ_root,a,b),this
},
clone:function(){
return r(v(this.jsonQ_current))
},
cloneObj:function(a){
return a=a||{},e.each(this,function(b,c){a[b]=c}),a.selector=e.merge([],a.selector),a
},
value:function(a,b){
var c=this.jsonQ_current;if(b=!1!==b,a){for(var d=p(a),f=0,g=c.length;f<g;f++){var k=c[f].path;if("function"==d){var m=this.pathValue(k);m=b?e.clone(a(m)):a(m)}else m=b?e.clone(a):a;this.setPathValue(k,m)}return this}var n=[];
return this.each(function(a,b,c){n.push(c)}),n
},
append:function(a,b){
return this.appendAt("last",a,b)
},
prepend:function(a,b){
return this.appendAt("first",a,b)
},
appendAt:function(a,b,c){
var d=this.jsonQ_current;if(isNaN(a)&&"first"!=a&&"last"!=a)throw a+"is not a valid index.";for(var f=0,g=d.length;f<g;f++){var k=d[f].path.concat([]),m=k.pop();k=this.pathValue(k);var n=p(k[m]),l=k[m].length,h=0>a||"first"==a?0:l<a||"last"==a?l:a;"array"==n?(b=c?e.clone(b):b,k[m].splice(h,0,b)):"string"==n&&(n=k[m],k[m]=n.substring(0,h)+b+n.substring(h,l))}
return this
},
filter:function(a){
var b=this.jsonQ_current,c=this.cloneObj(e()),d=c.jsonQ_current=[],f=p(a);if(!a)return this;for(var g=0,k=b.length;g<k;g++)u.qTest.call(this,f,a,b[g].path,d);"string"==f&&(d=(d=/(nth|eq)\((.+)\)/.exec(a))?e.nthElm(b,d[2],!0):e.nthElm(b,a,!0),c.jsonQ_current=d);
return c.length=d.length,c.selector.push({method:"filter",qualifier:a}),c
},
find:function(a,b){
return u.qualTrv.call(this,{method:"find",key:a,qualifier:b})
},
sibling:function(a,b){
return u.qualTrv.call(this,{method:"sibling",key:a,qualifier:b})
},
parent:function(){
return u.topLevel.call(this,{method:"parent"})
},
closest:function(a){
return u.topLevel.call(this,{method:"closest",key:a})
},
path:function(){
return this.jsonQ_current[0].path
},
firstElm:function(){
return this.pathValue(this.jsonQ_current[0].path)
},
lastElm:function(){
return this.pathValue(this.jsonQ_current[this.length-1].path)
},
nthElm:function(a,b){
return e.nthElm(this.value(),a,b)
},
index:function(a,b){
return e.index(this.value(),a,b)
},
createXML:function(){
return e.createXML(this.value())
},
sort:function(a,b){
b=e.merge({},e.settings.sort,b);var c,d=this.find(a),f=d.clone(),g=[],k=[],m=p(d.pathValue(f[0].path)),n=function(a){for(;0!==a.length;){var b=a.pop();if(!isNaN(b)&&(b=d.pathValue(a),"array"==p(b)))return b}return null};var l=0;for(c=f.length;l<c;l++)g.push({pathHolder:f[l].path.concat([]),current:f[l].path.concat([])});for(c=function(a){return g.splice(a,1),--a};0!==g.length;)for(0,l=0;l<g.length;l++){f=g[l].current;var h=g[l].pathHolder,q=n(f),r=f.join();if(0===f.length||-1!=k.indexOf(r))l=c(l);else{var v=h.slice(f.length+1,h.length);t.sortAry(q,function(a){a=e.pathValue(a,v);return a=t.baseConv(m,a,b),b.logic(a)},b);b.allLevel?(h[f.length]=0,k.push(r)):l=c(l)}}
return e(d.jsonQ_root).find(a)
},
each:function(a){
for(var b=this.jsonQ_current,c=0,d=b.length;c<d;c++)a(c,b[c].path,this.pathValue(b[c].path));
return this
},
unique:function(){
return e.unique(this.value())
},
refresh:function(){
for(var a=this.selector,b=e(this.jsonQ_root),c=0,d=a.length;c<d;c++){var f=a[c],g=[];f.key&&g.push(f.key);f.qualifier&&g.push(f.qualifier);b=b[f.method].apply(b,g)}
return this.cloneObj.call(b,this),this
},
prettify:function(a){
return e.prettify(this.value(),a)
}
};
e.each=function(a,b){
for(var c in a)a.hasOwnProperty(c)&&b(c,a[c])
};
var p=e.objType=(x={"[object Array]":"array","[object Object]":"object","[object String]":"string","[object Number]":"number","[object Boolean]":"boolean","[object Null]":"null","[object Function]":"function"},
function(a){
a=Object.prototype.toString.call(a);return x[a]
}),x;
return e.merge=function(){
var a=arguments,b=p(a[0]),c=1,d=a.length,f=!1,g=a[0];if(0!==d&&("boolean"!=b||1!=d)){"boolean"==b&&(g=a[1],c=2,f=a[0]);for(b=function(a,b){var c=p(b),d=p(g[a]);!f||"array"!=c&&"object"!=c?g[a]=b:(g[a]=c!=d||"array"!=d&&"object"!=d?"array"==c?[]:{}:g[a],e.merge(f,g[a],b))};c<d;c++)e.each(a[c],b);return g}
},
e.merge(e,{
sort:function(a,b){
if(b=e.merge({},e.settings.sort,b),"array"==p(a))return t.sortAry(a,function(a){var c=p(a);return a=t.baseConv(c,a,b),b.logic(a)},b);throw"Only array is allowed to sort";
},
order:function(a){
if("object"!=typeof a)return a;var b=function(a){return isNaN(a)||(a=parseInt(a)),a},c=function(a){var d=p(a),e=Object.keys(a);"object"==d&&e.sort(function(a,c){var d=b(a),e=b(c);return d<e?-1:e<d?1:0});for(var k=0,m=e.length;k<m;k++){var n=e[k],l=a[n],h=p(l);"object"!=h&&"array"!=h||c(l);"object"==d&&(delete a[n],a[n]=l)}};
return c(a),a
},
clone:function(a){
var b=p(a);
return"object"==b||"array"==b?r(v(a)):a
},
index:function(a,b,c){
var d=p(b),f=a.length,g="object"==d||"array"==d||"function"==d;if("function"==d&&(c=!0),g&&!c)var k=v(e.order(b));for(var m=0;m<f;m++){var n=a[m];if(g){var l=p(n);if(l==d||c)if(c){if("function"==d)var h=b.call(n);else if("object"==d&&"object"==l)h=e.checkKeyValue(n,b);else if("array"==l)if("array"==d){l=0;for(var q=b.length;l<q&&(h=-1!=e.index(n,b[l]));l++);}else h=-1!=e.index(n,b);if(h)return m}else if(v(e.order(n))==k)return m}else if(b==n)return m}return-1
},
contains:function(a,b,c){
return-1!=e.index(a,b,c)
},
checkKeyValue:function(a,b){
for(var c in b)if(b.hasOwnProperty(c)&&!e.identical(b[c],a[c]))return!1;return!0
},
nthElm:function(a,b,c){
if(a[b])var d=a[b];else if("last"==b)d=a[a.length-1];else if("first"==b)d=a[0];else if("random"==b)d=a[Math.floor(Math.random()*a.length)];else if("even"==b)d=e.nthElm(a,"2n");else if("odd"==b)d=e.nthElm(a,"2n+1");else try{var f=[],g=a.length;if(!b.match(/^[0-9n*+-\/]+$/))throw"";b=b.replace(/([0-9])n/g,function(a,b){return b?b+"*n":a});for(var k=0;k<g;k++){var m=eval(b);if(g-1<m)break;f.push(a[m])}d=f}catch(n){d=a}return d=d||a,"array"!=p(d)&&c?[d]:d
},
prettify:function(a,b){
if("object"!=typeof a)throw"Only valid json object is allowed.";return b?JSON.stringify(a,null,"\t").replace(/\n/g,"</br>").replace(/\t/g," "):JSON.stringify(a,null,3)
},
identical:function(a,b){
function c(a){return"object"!=typeof a||null===a?a:Object.keys(a).sort().map(function(b){return{key:b,value:c(a[b])}})}return JSON.stringify(c(a))===JSON.stringify(c(b))
},
union:function(){
for(var a=arguments,b=[],c=a.length,d=0;d<c;d++)for(var f=a[d].length,g=0;g<f;g++){var k=a[d][g];-1==e.index(b,k)&&b.push(k)}return b
},
intersection:function(){
var a,b=arguments,c=[],d=b.length;if(1==d)c=b[0];else for(var f=0,g=b[0].length;f<g;f++){for(var k=b[0][f],m=a=1;m<d;m++)if(-1==e.index(b[m],k)){a=0;break}1==a&&c.push(k)}return c
},
shuffle:function(a){
for(var b=1,c=a.length;b<c;b++){var d=Math.floor(Math.random()*(b+1)),e=a[b];a[b]=a[d];a[d]=e}return a
},
suffle:function(a){
console.error("This method is deprecated. It was a miss spell of shuffle. Use jsonQ.shuffle instead.");e.shuffle(a)
},
unique:function(a){
for(var b=a.length,c=[],d=0;d<b;d++)-1==e.index(c,a[d])&&c.push(a[d]);return c
},
pathValue:function(a,b){
var c=0,d=b.length;if(null===a)return null;for(;c<d;){if(null===a[b[c]])return;a=a[b[c]];c+=1}return a
},
setPathValue:function(a,b,c){
var d=0,e=a,g=b.length;if(null===a)return null;for(;d<g;)"object"!=typeof e[b[d]]&&(e[b[d]]="number"==p(b[d+1])?[]:{}),d==b.length-1&&(e[b[d]]=c),e=e[b[d]],d+=1;return a
},
createXML:function(a){
var b=function(a,d){var c=0===(d=d||[]).length,g=p(a);return c&&d.push('<?xml version="1.0" encoding="ISO-8859-1"?><jsonXML>'),e.each(a,function(a,c){var e="array"==g?"arrayItem":a,f=p(c);d.push("<"+e+' type="'+f+'">');"object"==f||"array"==f?b(c,d):d.push("<![CDATA["+c+"]]\x3e");d.push("</"+e+">")}),c?(d.push("</jsonXML>"),d.join("")):d};return b(a)
},
append:function(a,b,c){
return e.appendAt(a,"last",b,c)
},
prepend:function(a,b,c){
return e.appendAt(a,"first",b,c)
},
appendAt:function(a,b,c,d){
if(!isNaN(b)||"first"==b||"last"==b){var f=p(a),g=a.length;b=0>b||"first"==b?0:g<b||"last"==b?g:b;return"array"==f?(c=d?e.clone(c):c,a.splice(b,0,c)):"string"==f&&(a=a.substring(0,b)+c+a.substring(b,g)),a}throw b+"is not a valid index.";
}
}),
e.fn.init.prototype=e.fn,e
});
0<document.querySelectorAll("#themeSearch").length&&document.querySelectorAll("#themeSearch").forEach(function(q){
q.remove()
});
var r = document.getElementById('searchbar').value,
u,
t=new XMLHttpRequest;
r&&0<r.length&&t.open("GET",location.origin+"/admin/theme/preview/settings.json",!1);
t.onload=function(){
if(200<=t.status&&400>t.status){
console.log(JSON.parse(t.responseText).theme_settings);
u=jsonQ(JSON.parse(t.responseText).theme_settings);
var q=u.find("settings").jsonQ_current.map(function(h){
return[h.path.slice(0,-2).join("/")+"/"+h.path.slice(0,-1).reduce(function(e,h){
return e[h]
},u.jsonQ_root).key,h.path.reduce(function(e,h){
return e[h]
},u.jsonQ_root).map(function(e,h){
return e.title.toLowerCase()
}),
h.path.reduce(function(e,h){
return e[h]
},u.jsonQ_root).map(function(e,h){
return e.key
})]
}).filter(function(h){
return 0<=h[1].findIndex(function(e){
return e.includes(r.toLowerCase())
})
});
console.log(q);
q='<div class="modal bg-visible dialog-visible" id="themeSearch"><div class="dialog small"><header><h2>Search results for "'+r+'":</h2><a class="close" href="#" onclick="document.body.removeChild(themeSearch)"></a></header><div id="modal-content"><div class="body" style="overflow-y: scroll;">'+q.map(function(h){return'<a href="#" onclick="Turbolinks.visit(\'/admin/theme/preview/'+h[0]+"', { action: 'replace' })\">/"+h[0]+"</a>"}).filter(function(h){return h}).join("<br>")+'</div><div class="buttons"><a class="btn close" href="#" title="search" onclick="themeSearchFn()">Search again</a><a class="btn close" href="#" title="close" onclick="document.body.removeChild(themeSearch)">Close</a></div></div></div></div>';
document.getElementsByTagName("body")[0].insertAdjacentHTML("beforeend",q)
} else alert("Theme settings could not be retrieved!")
};
t.send()
};
//themeSearchFn();
function search_(){
let search = document.createElement('input');
search.type = ('text'),
search.placeholder = ('theme search'),
search.id = ('searchbar');
document.querySelectorAll('h1.ItemsCenter')[0].appendChild(search);
let butt = document.createElement('button');
butt.type = 'button',
butt.setAttribute('onclick','themeSearchFn()'),
butt.innerHTML = 'search';
document.querySelectorAll('h1.ItemsCenter')[0].appendChild(butt);
};
//search_();
document.addEventListener("load", search_); //calls function when loaded