html-template-tag
Version:
ES6 Tagged Template for compiling HTML template strings.
2 lines (1 loc) • 1.16 kB
JavaScript
;var e=require("html-es6cape"),t=require("html-element-attributes"),n=Object.values(t.htmlElementAttributes).flat();var r=["action","archive","background","cite","classid","codebase","content","data","dynsrc","formaction","href","icon","imagesrcset","longdesc","lowsrc","manifest","nohref","onload","poster","popovertargetaction","profile","src","srcset","style","usemap"];module.exports=function(t){for(var i=[],a=1;a<arguments.length;a++)i[a-1]=arguments[a];return t.raw.reduce(function(a,o,s){var c=!t.raw[s-1].endsWith("$"),u=i[s-1];return Array.isArray(u)?u=u.join(""):c?u=e(u):a=a.slice(0,-1),function(e){return n.some(function(t){return e.endsWith("".concat(t,"="))})}(a)&&(a+='"',o='"'+o),function(e){return r.some(function(t){return e.endsWith("".concat(t,"="))||e.endsWith("".concat(t,'="'))})}(a)&&c&&(console.warn("[html-template-tag] Trying to interpolate inside an URI attribute. This can lead to security vulnerabilities. The interpolation has been removed. If you are sure you want to interpolate inside an URI attribute, please escape this interpolation with an extra '$' sign in front of it.",{acc:a,subst:u,lit:o}),u=""),a+u+o})};