-
Notifications
You must be signed in to change notification settings - Fork 0
/
stencil-18.1.min.js
25 lines (25 loc) · 9.51 KB
/
stencil-18.1.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
stencil.js
version 18.1 - 20 Jun 2015
Kingston Chan - Released under the MIT licence
https://github.com/kgston/stencil.JS
*/
var stencil=stencil||{};stencil.opts=$.extend(stencil.opts||{},function(){return{debug:!1,defaultOutputElement:"stencil-output",fetchTimeout:3E4,ieNs:""}}());stencil.flags=$.extend(stencil.flags||{},function(){return{escapeHtml:!0}}());stencil.attributes=$.extend(stencil.attributes||{},function(){return{destination:"data-stencil-destination",childStencils:"data-stencil-childs",recurse:"data-stencil-recurse",selector:"data-stencil-selector",imgsrc:"data-stencil-imgsrc"}}());
stencil=$.extend(stencil||{},function(){return{stencilHolder:{},fetch:function(a,d){if(null==a)stencil.util.log("Stencil: No valid URL was passed in");else{var c=$.Deferred();$.ajax({url:a,method:"GET",dataType:"html",timeout:stencil.opts.fetchTimeout}).done(function(b){b=b.replace(/\x3c!--((.|\n)*?)--\x3e/gm,"");b=$(b).filter("stencil");0===b.length&&stencil.util.log("Stencil: No stencils found at <"+a+">");var f=[];b.each(function(a){a=$(this);var b=d||a.attr(stencil.attributes.destination)||"none";
a=stencil.define(a.attr("id"),b,null,a);stencil.util.buildRecursiveLinkages(a);f.push(a);c.notify(a)});c.resolve(f)}).fail(function(b){c.reject(b);stencil.util.log("Stencil: Failed to fetched template at <"+a+"> due to "+b.status+" - "+b.statusText)});return c.promise()}},define:function(a,d,c,b){var f=function(a,b,c){return{guid:stencil.util.guid(),tagID:a,template:c,childStencils:{},isStandard:!0,destination:b,existingContent:"",clear:function(){$(this.destination).empty().append(this.existingContent)},
getChild:function(a){var b=this.childStencils,c=null;if(0===Object.keys(b).length)return null;0<=Object.keys(b).indexOf(a)?c=b[a]:Object.keys(b).every(function(d){d=b[d].getChild(a);if(null==d)return!0;c=d;return!1});return c},render:function(a,b,c){if(!Array.isArray(a))if(stencil.util.isObject(a))a=[a];else return"undefined"===typeof a?stencil.util.log("Stencil - "+this.tagID+": has no data, skipping..."):stencil.util.log("Stencil - "+this.tagID+": dataset in an invalid format, detected: "+typeof a),
!1;else if(null==a||0===a.length)return stencil.util.log("Stencil - "+this.tagID+": was not passed in data"),!1;var d=this.destination,f=!1,e;if(null==c){c=$(d);if("none"===d||"none"===b||"string"===b||"fragment"===b)if("none"===b||"string"===b||"fragment"===b)e=$(document.createElement("div"));else return stencil.util.log('Stencil: Only render output type "none", "fragment" or "string" is supported for stencils with no destination'),!1;else e=c.filter(":first").clone();f=!0}else e=c.find(d.replace(/\\(?=\{|\})/g,
"\\\\\\"));var g=this.template,h=this.childStencils,m=this.isStandard;if(e.length)"append"===b||"prepend"===b?(this.existingContent=e.html(),e.empty()):"none"===b?(c.empty(),e.empty()):"string"!==b&&"fragment"!==b&&e.empty();else return stencil.util.log("Stencil: Destination ID - "+d+" not found!"),!1;a.forEach(function(a,b){a.lpIdx=b;a.ctIdx=b+1;for(var c=g,f=/\{\{[\w.\[\]/]*\}\}/;0<=c.search(f);){var n=c.match(f)[0],l=stencil.util.getKeyParts(n),l=stencil.util.getKeyValue(a,l);null==l&&(l="");c=
c.replace(n,l)}var k=e;m&&(f=stencil.util.createWrapper(e,"stencil-replicator","append"),k=e.find(f));k.append(c);m||k.removeClass(d.replace(".",""));Object.keys(h).forEach(function(b){var c=a[b];null!=a.global&&(Array.isArray(c)?c.forEach(function(b){b.global=a.global}):stencil.util.isObject(c)&&(c.global=a.global));h[b].render(c,null,k)});k.find("select["+stencil.attributes.selector+"]").each(function(){var b=this.getAttribute(stencil.attributes.selector),b=stencil.util.getKeyParts(b);stencil.util.selectOption($(this),
stencil.util.getKeyValue(a,b))});k.find("img["+stencil.attributes.imgsrc+"]").each(function(){var b=this.getAttribute(stencil.attributes.imgsrc)+"/noEsc",b=stencil.util.getKeyParts(b);this.setAttribute("src",stencil.util.getKeyValue(a,b));this.removeAttribute(stencil.attributes.imgsrc)})});"prepend"===b&&e.append(this.existingContent);if(f){stencil.util.cleanUpStencils(e);if("none"===b||"fragment"===b)return e.children();if("string"===b)return e.html();"append"!==b&&c.empty();c.append(e.children());
return!0}}}},e=function(a){var b=f(a.tagID,a.destination,a.template);Object.keys(a.childStencils).forEach(function(c){b.childStencils[c]=e(a.childStencils[c])});return b},g;if(null!=stencil.stencilHolder[a]&&null==b){a=stencil.stencilHolder[a];var h=e(a);null==d&&(d=stencil.util.createWrapper($(a.destination),c||stencil.opts.defaultOutputElement,"after"));h.destination=d;return h}h=b?!1:!0;b=b||$("#"+stencil.util.escapeCSS(a));if(b.length)null==d&&(d=b.attr(stencil.attributes.destination)),null==
d&&(d=stencil.util.createWrapper(b,c||stencil.opts.defaultOutputElement,"after")),b=b.detach();else return stencil.util.log("Stencil: Tag ID '"+a+"' provided is not found!"),null;c=b.attr(stencil.attributes.childStencils);null!=c&&""!=c&&(null==g&&(g=[]),c.split(" ").forEach(function(a){""!=a&&g.push(a)}));c={};stencil.util.log("Stencil: Searching for child stencils in "+a);0!==b.find("stencil").length&&(c=stencil.util.findStencils(b));stencil.util.log("Stencil: Completed child stencil generation for "+
a+", "+Object.keys(c).length+" child stencil");c=$.extend(c,function p(a){var b={},c=a.attr(stencil.attributes.childStencils);null!=c&&""!=c&&c.split(" ").forEach(function(c){if(""!=c){stencil.util.log("Stencil: Building specified child stencil: "+c);var d=a.find("#"+stencil.util.escapeCSS(c));if(d.length){var e=stencil.util.guid();d.addClass(e);var e="."+e,g=p(d);b[c]=f(c,e,d.html());b[c].childStencils=g;b[c].isStandard=!1;d.empty()}else stencil.util.log("Stencil: Specified child stencil: "+c+" not found!")}});
return b}(b));d=f(a,d,b.html());d.childStencils=c;stencil.stencilHolder[a]=d;h&&stencil.util.buildRecursiveLinkages(d);return d},build:function(a){a=null==a?$("body"):$("#"+a);return 0===a.length?(stencil.util.log("Stencil: Unable to start build process as starting element ID cannot be found"),null):stencil.util.findStencils(a)},util:{guid:function(){var a=(new Date).getTime();window.performance&&"function"===typeof window.performance.now&&(a+=performance.now());return"stencil-"+"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,
function(d){var c=(a+16*Math.random())%16|0;a=Math.floor(a/16);return("x"==d?c:c&3|8).toString(16)})},selectOption:function(a,d){a.children().each(function(){if(this.value==d)return this.setAttribute("selected",""),!1});a.removeAttr(stencil.attributes.selector)},outerHTML:function(a){return a.clone().wrap("<p>").parent().html()},createWrapper:function(a,d,c){var b=stencil.util.guid(),f=document.createElement(stencil.opts.ieNs+d);f.className=""===f.className?b:f.className+" "+b;a[c](f);return stencil.util.escapeCSS(stencil.opts.ieNs)+
d+"."+b},findStencils:function(a){function d(a,c){for(var e=a.childNodes,g=0;g<e.length;g++){var h;h=e[g];h="STENCIL"===h.nodeName||"stencil"===h.nodeName?!0:!1;h?null!=e[g].attributes[stencil.attributes.recurse]?(h=stencil.util.createWrapper($(e[g]),stencil.opts.defaultOutputElement,"after"),c[e[g].attributes[stencil.attributes.recurse].value]={recurse:!0,tempDestination:h},e[g].remove()):c[e[g].id]=stencil.define(e[g].id,null,"stencil-output",$(e[g])):d(e[g],c)}}var c={};d(a.get(0),c);return c},
buildRecursiveLinkages:function(a){Object.keys(a.childStencils).forEach(function(d){var c=a.childStencils[d];c.recurse?(a.childStencils[d]=stencil.stencilHolder[d],a.template=a.template.replace(c.tempDestination.split(".")[1],a.childStencils[d].destination.split(".")[1])):stencil.util.buildRecursiveLinkages(c)})},cleanUpStencils:function(a){function d(a){if(function(a){return 0<=a.nodeName.indexOf("STENCIL")||0<=a.nodeName.indexOf("stencil")?!0:!1}(a))0===a.childNodes.length&&a.parentNode.removeChild(a),
$(a).children().unwrap().each(function(){d(this)});else{a=a.childNodes;for(var b=0;b<a.length;b++)d(a[b])}}a.children().each(function(){d(this)})},escapeCSS:function(a){a=String(a);for(var d=a.length,c=-1,b,f="",e=a.charCodeAt(0);++c<d;){b=a.charCodeAt(c);if(0==b)throw new InvalidCharacterError("Invalid character: the input contains U+0000.");f=1<=b&&31>=b||127==b||0==c&&48<=b&&57>=b||1==c&&48<=b&&57>=b&&45==e?f+("\\"+b.toString(16)+" "):128<=b||45==b||95==b||48<=b&&57>=b||65<=b&&90>=b||97<=b&&122>=
b?f+a.charAt(c):f+("\\"+a.charAt(c))}return f},escapeHTML:function(a){if(null==a)return a;var d={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(a).replace(/[&<>"'\/]/g,function(a){return d[a]})},getKeyParts:function(a){keyParts=a.replace(/\{|\}/g,"").split("/");return{key:keyParts.shift(),flags:keyParts}},getKeyValue:function(a,d){var c=JSON.parse(JSON.stringify(a));d.key.split(/[\.\[\]]/).every(function(a,f){if(""===a)return!0;c=null==c[a]?stencil.util.log("Stencil: "+
a+" of "+d.key+" not found"):c[a];return null!=c?!0:!1});return function(a,c){var d={escapeHtml:{esc:function(){return stencil.util.escapeHTML(a)},noEsc:function(){return a},"default":function(){return stencil.flags.escapeHtml?this.esc():this.noEsc()},trigger:function(){return 0<=c.indexOf("esc")?this.esc():0<=c.indexOf("noEsc")?this.noEsc():this["default"]()}}};Object.keys(d).forEach(function(c){a=d[c].trigger()});return a}(c,d.flags)},isIE:function(){var a=navigator.userAgent.toLowerCase();return-1!=
a.indexOf("msie")?parseInt(a.split("msie")[1]):!1},isObject:function(a){return a===Object(a)},log:function(a){stencil.opts.debug&&console.log(a)}}}}());(function(){var a=stencil.util.isIE();0!=a&&10>a&&(document.createElement("stencil"),document.createElement("stencil-replicator"),document.createElement("stencil-output"),stencil.opts.ieNs="STENCIL:")})(); //# sourceMappingURL=stencil-18.1.min.map