sodajs
Version:
Light weight but powerful template engine for JavaScript.
1 lines • 11.3 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.soda=t():e.soda=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=3)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(1),u=n(2),s="undefined"!=typeof document?document:{},l=function(){function e(){var t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"soda-";r(this,e),this._prefix=t}return o(e,[{key:"setDocument",value:function(e){s=e}},{key:"run",value:function(e,t){var n=this,r=s.createElement("div");s.documentMode<9&&(r.style.display="none",s.body.appendChild(r)),r.innerHTML=e,(0,u.nodes2Arr)(r.childNodes).map(function(e){n.compileNode(e,t)});var i=r.innerHTML;return s.documentMode<9&&s.body.removeChild(r),i}},{key:"prefix",value:function(e){this._prefix=e}},{key:"_getPrefixReg",value:function(){return new RegExp("^"+this._prefix)}},{key:"_getPrefixedDirectiveMap",value:function(){var t=this,n={};return e.sodaDirectives.map(function(e){var r=t._prefix+e.name;n[r]=e}),n}},{key:"_removeSodaMark",value:function(e,t){e.removeAttribute(t)}},{key:"compileNode",value:function(t,n){var r=this,o=this._getPrefixReg(),l=e.sodaDirectives,f=this._getPrefixedDirectiveMap();!function c(e,t){e.nodeType===(e.TEXT_NODE||3)&&(e.nodeValue=e.nodeValue.replace(a.VALUE_OUT_REG,function(e,n){var o=r.parseSodaExpression(n,t);return"object"===(void 0===o?"undefined":i(o))&&(o=JSON.stringify(o,null,2)),o})),e.attributes&&e.attributes.length&&(l.map(function(n){var i=n.name,o=n.opt,a=r._prefix+i;if((0,u.exist)(e.getAttribute(a))){var l=e.getAttribute(a);o.link.bind(r)({expression:l,scope:t,el:e,parseSodaExpression:r.parseSodaExpression.bind(r),getValue:r.getValue.bind(r),compileNode:r.compileNode.bind(r),document:s}),r._removeSodaMark(e,a)}}),(0,u.nodes2Arr)(e.attributes).filter(function(e){return!f[e.name]}).map(function(n){if(o.test(n.name)){var i=n.name.replace(o,"");if(i&&(0,u.exist)(n.value)){var a=r.parseComplexExpression(n.value,t);!1!==a&&(0,u.exist)(a)&&e.setAttribute(i,a),r._removeSodaMark(e,n.name)}}else(0,u.exist)(n.value)&&(n.value=r.parseComplexExpression(n.value,t))})),(0,u.nodes2Arr)(e.childNodes).map(function(e){c(e,t)})}(t,n)}},{key:"getEvalFunc",value:function(t){return new Function("getValue","sodaFilterMap","return function sodaExp(scope){ return "+t+"}")(this.getValue,e.sodaFilterMap)}},{key:"getValue",value:function(e,t){a.CONST_REGG.lastIndex=0;t.replace(a.CONST_REGG,function(t){return"undefined"==typeof e[t]?t:e[t]});if("true"===t)return!0;if("false"===t)return!1;return function n(t,r){var i=r.indexOf(".");if(i>-1){var o=r.substr(0,i);if(r=r.substr(i+1),"undefined"!=typeof e[o]&&a.CONST_REG.test(o)&&(o=e[o]),"undefined"!=typeof t[o]&&null!==t[o])return n(t[o],r);return""}r=r.trim(),"undefined"!=typeof e[r]&&a.CONST_REG.test(r)&&(r=e[r]);var u;if("undefined"!=typeof t[r])u=t[r];else{u=""}return u}(e,t)}},{key:"parseComplexExpression",value:function(e,t){var n=this,r=a.ONLY_VALUE_OUT_REG.exec(e);if(r){var i=r[1];return this.parseSodaExpression(i,t)}return e.replace(a.VALUE_OUT_REG,function(e,r){return n.parseSodaExpression(r,t)})}},{key:"parseSodaExpression",value:function(e,t){var n=this;e=e.replace(a.STRING_REG,function(e,n,r){var i=(0,u.getRandom)();return t[i]=n||r,i}),e=e.replace(a.OR_REG,a.OR_REPLACE).split("|");for(var r=0;r<e.length;r++)e[r]=(e[r].replace(new RegExp(a.OR_REPLACE,"g"),"||")||"").trim();for(var i=e[0]||"",o=e.slice(1);a.ATTR_REG_NG.test(i);)a.ATTR_REG.lastIndex=0,i=i.replace(a.ATTR_REG,function(e,r){var i=(0,u.getAttrVarKey)(),o=n.parseSodaExpression(r,t);return t[i]=o,"."+i});return i=i.replace(a.OBJECT_REG,function(e){return"getValue(scope,'"+e.trim()+"')"}),i=this.parseFilter(o,i),this.getEvalFunc(i)(t)}},{key:"parseFilter",value:function(t,n){var r=e.sodaFilterMap;return function i(){var e=t.shift();if(e){for(var e=e.split(":"),o=e.slice(1)||[],u=(e[0]||"").trim(),s=0;s<o.length;s++)a.OBJECT_REG_NG.test(o[s])&&(o[s]="getValue(scope,'"+o[s]+"')");r[u]&&(o.unshift(n),o=o.join(","),n="sodaFilterMap['"+u+"']("+o+")"),i()}}(),n}}],[{key:"filter",value:function(e,t){this.sodaFilterMap[e]=t}},{key:"getFilter",value:function(e){return this.sodaFilterMap[e]}},{key:"directive",value:function(e,t){var n=t.priority,r=n===undefined?0:n,i=void 0;for(i=0;i<this.sodaDirectives.length;i++){var o=this.sodaDirectives[i],a=o.opt.priority,u=a===undefined?0:a;if(r<u);else if(r>=u)break}this.sodaDirectives.splice(i,0,{name:e,opt:t})}},{key:"discribe",value:function(e,t){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{compile:!0};this.template[e]={funcOrStr:t,option:n}}},{key:"getTmpl",value:function(e,t){var n=this.template[e],r=n.funcOrStr,i=n.option,o=i===undefined?{}:i,a=void 0;return a="function"==typeof r?r.apply(null,t):r,{template:a,option:o}}}]),e}();l.sodaDirectives=[],l.sodaFilterMap={},l.template={},t["default"]=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.IDENTOR_REG=/[a-zA-Z_\$]+[\w\$]*/g,t.STRING_REG=/"([^"]*)"|'([^']*)'/g,t.NUMBER_REG=/\d+|\d*\.\d+/g,t.OBJECT_REG=/[a-zA-Z_\$]+[\w\$]*(?:\s*\.\s*(?:[a-zA-Z_\$]+[\w\$]*|\d+))*/g,t.OBJECT_REG_NG=/[a-zA-Z_\$]+[\w\$]*(?:\s*\.\s*(?:[a-zA-Z_\$]+[\w\$]*|\d+))*/,t.ATTR_REG=/\[([^\[\]]*)\]/g,t.ATTR_REG_NG=/\[([^\[\]]*)\]/,t.ATTR_REG_DOT=/\.([a-zA-Z_\$]+[\w\$]*)/g,t.NOT_ATTR_REG=/[^\.|]([a-zA-Z_\$]+[\w\$]*)/g,t.OR_REG=/\|\|/g,t.OR_REPLACE="OR_OPERATOR",t.CONST_PRIFIX="_$C$_",t.CONST_REG=/^_\$C\$_/,t.CONST_REGG=/_\$C\$_[^\.]+/g,t.VALUE_OUT_REG=/\{\{([^\}]*)\}\}/g,t.ONLY_VALUE_OUT_REG=/^\{\{([^\}]*)\}\}$/},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.assign=t.nodes2Arr=t.exist=t.getRandom=t.getAttrVarKey=undefined;var r=n(1),i=(t.getAttrVarKey=function(){return r.CONST_PRIFIX+~~(1e6*Math.random())},t.getRandom=function(){return"$$"+~~(1e6*Math.random())},t.exist=function(e){return null!==e&&e!==undefined&&""!==e&&void 0!==e},t.nodes2Arr=function(e){for(var t=[],n=0;n<e.length;n++)t.push(e[n]);return t},Object.getOwnPropertySymbols),o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable,u=function(e){if(null===e||e===undefined)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)};t.assign=Object.assign||function(e,t){for(var n,r,s=u(e),l=1;l<arguments.length;l++){n=Object(arguments[l]);for(var f in n)o.call(n,f)&&(s[f]=n[f]);if(i){r=i(n);for(var c=0;c<r.length;c++)a.call(n,r[c])&&(s[r[c]]=n[r[c]])}}return s}},function(e,t,n){"use strict";var r=n(0),i=function(e){return e&&e.__esModule?e:{"default":e}}(r),o=n(2);n(4),n(5),n(6),n(7),n(8),n(9),n(10);var a=new i["default"],u=function(e,t){return a.run(e,t)},s={prefix:function(e){a.prefix(e)},filter:function(e,t){i["default"].filter(e,t)},directive:function(e,t){i["default"].directive(e,t)},setDocument:function(e){a.setDocument(e)},discribe:function(e,t,n){i["default"].discribe(e,t,n)},Soda:i["default"]},l=(0,o.assign)(u,s);e.exports=l},function(e,t,n){"use strict";var r=n(0);(function(e){return e&&e.__esModule?e:{"default":e}})(r)["default"].directive("repeat",{priority:10,link:function(e){var t,n,r,i=this,o=e.scope,a=e.el,u=e.expression,s=e.getValue,l=(e.parseSodaExpression,e.compileNode),f=/\s+by\s+([^\s]+)$/,c=u.replace(f,function(e,t){return t&&(r=(t||"").trim()),""}),d=/([^\s]+)\s+in\s+([^\s]+)|\(([^,]+)\s*,\s*([^)]+)\)\s+in\s+([^\s]+)/,p=d.exec(c);if(p){if(p[1]&&p[2]){if(t=(p[1]||"").trim(),n=(p[2]||"").trim(),!t||!n)return}else p[3]&&p[4]&&p[5]&&(r=(p[3]||"").trim(),t=(p[4]||"").trim(),n=(p[5]||"").trim());r=r||"$index";var v=s(o,n)||[],_=function(e){var n=a.cloneNode(!0),u=Object.create(o);u[r]=e,u[t]=v[e],n.removeAttribute(i._prefix+"repeat"),a.parentNode.insertBefore(n,a),l(n,u)};if("length"in v)for(var m=0;m<v.length;m++)_(m);else for(var m in v)v.hasOwnProperty(m)&&_(m);a.parentNode.removeChild(a),a.childNodes&&a.childNodes.length&&(a.innerHTML="")}}})},function(e,t,n){"use strict";var r=n(0);(function(e){return e&&e.__esModule?e:{"default":e}})(r)["default"].directive("if",{priority:9,link:function(e){var t=e.expression,n=e.parseSodaExpression,r=e.scope,i=e.el;n(t,r)||(i.parentNode&&i.parentNode.removeChild(i),i.innerHTML="")}})},function(e,t,n){"use strict";var r=n(0),i=function(e){return e&&e.__esModule?e:{"default":e}}(r),o=function(e){return new RegExp("(^|\\s+)"+e+"(\\s+|$)","g")},a=function(e,t){if(!e.className)return void(e.className=t);e.className.match(o(t))||(e.className+=" "+t)};i["default"].directive("class",{link:function(e){var t=e.scope,n=e.el,r=e.expression,i=e.parseSodaExpression,o=i(r,t);o&&a(n,o)}})},function(e,t,n){"use strict";var r=n(0);(function(e){return e&&e.__esModule?e:{"default":e}})(r)["default"].directive("html",{link:function(e){var t=e.expression,n=e.scope,r=e.el,i=e.parseSodaExpression,o=i(t,n);o&&(r.innerHTML=o)}})},function(e,t,n){"use strict";var r=n(0);(function(e){return e&&e.__esModule?e:{"default":e}})(r)["default"].directive("replace",{link:function(e){var t=e.scope,n=e.el,r=e.expression,i=e.parseSodaExpression,o=e.document,a=i(r,t);if(a){var u=o.createElement("div");if(u.innerHTML=a,n.parentNode)for(;u.childNodes[0];)n.parentNode.insertBefore(u.childNodes[0],n)}n.parentNode&&n.parentNode.removeChild(n)}})},function(e,t,n){"use strict";var r=n(0);(function(e){return e&&e.__esModule?e:{"default":e}})(r)["default"].directive("style",{link:function(e){var t=e.scope,n=e.el,r=e.expression,i=e.parseSodaExpression,o=i(r,t);if(o){var a=[];for(var u in o)if(o.hasOwnProperty(u)){var s=function(e,t){return/opacity|z-index/.test(e)?parseFloat(t):isNaN(t)?t:t+"px"}(u,o[u]);a.push([u,s].join(":"))}for(var l=n.style,u=0;u<l.length;u++){var f=l[u];o[f]||a.push([f,l[f]].join(":"))}var c=a.join(";");n.setAttribute("style",c)}}})},function(e,t,n){"use strict";var r=n(0),i=function(e){return e&&e.__esModule?e:{"default":e}}(r);i["default"].directive("include",{priority:8,link:function(e){var t=e.scope,n=e.el,r=e.parseSodaExpression,o=e.expression,a=/\{\{([^\}]*)\}\}/g,u=o.replace(a,function(e,n){return r(n,t)});u=u.split(":");var s=u[0],l=u.slice(1),f=i["default"].getTmpl(s,l),c=f.template,d=f.option,p=d===undefined?{}:d;c&&(p.compile?n.outerHTML=this.run(c,t):n.outerHTML=c)}})}])});