VulpesOS/assets/webapps/sms.gaiamobile.org/shared/js/template.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

12 lines
No EOL
2.3 KiB
JavaScript

;;;(function(exports){'use strict';var priv=new WeakMap();var rmatcher=/\$\{([^}]+)\}/g;var rentity=/[&<>"']/g;var rentities={'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;','\'':'&apos;'};function extract(node){var nodeId;if(typeof node==='string'){nodeId=node;node=document.getElementById(node);}else if(node){nodeId=node.id;}
if(!node){console.error('Can not find the node passed to Template',nodeId);return'';}
if(!node.firstChild){console.error('Node passed to Template should have a comment node',nodeId);return'';}
node=node.firstChild;do{if(node.nodeType===Node.COMMENT_NODE){return(node.nodeValue||'').trim();}}while((node=node.nextSibling));console.error('Nodes passed to Template should have a comment node',nodeId);return'';}
function Template(idOrNode){if(!(this instanceof Template)){return new Template(idOrNode);}
priv.set(this,{idOrNode:idOrNode});}
Template.prototype.extract=function(){var members=priv.get(this);if(!members.tmpl){members.tmpl=extract(members.idOrNode);delete members.idOrNode;}
return members.tmpl;};Template.prototype.toString=function(){return this.extract().slice();};Template.prototype.interpolate=function(data={},options={}){var safeList=options.safe;if(safeList&&!Array.isArray(safeList)){throw new TypeError(`If present "options.safe" must be an Array, not ${typeof options.safe}`);}
var hasSafeProperties=safeList&&safeList.length;return this.extract().replace(rmatcher,function(match,property){property=property.trim();if(!(property in data)){throw new Error(`No value provided for template identifier "${property}"`);}
var unsafeString=data[property];if(typeof unsafeString!=='string'){throw new TypeError(`"data.${property}" must be a String, not ${typeof unsafeString}`);}
var isPropertySafe=hasSafeProperties&&safeList.includes(property);return isPropertySafe?unsafeString:Template.escape(unsafeString);});};Template.prototype.prepare=function(data,options){var self=this;return{toString:function t_toString(){return self.interpolate(data,options);},toDocumentFragment:function t_toDocumentFragment(){var template=document.createElement('template');template.innerHTML=this.toString();return template.content.cloneNode(true);}};};Template.escape=function escape(str){if(typeof str!=='string'){return'';}
return str.replace(rentity,function(s){return rentities[s];});};exports.Template=Template;}(this));