//>>built define("dojox/mobile/parser", [ "dojo/_base/kernel", "dojo/_base/config", "dojo/_base/lang", "dojo/_base/window", "dojo/ready" ], function(dojo, config, lang, win, ready){ // module: // dojox/mobile/parser // summary: // A lightweight parser. var dm = lang.getObject("dojox.mobile", true); var parser = new function(){ // summary: // A lightweight parser. // description: // dojox.mobile.parser is an extremely small subset of // dojo.parser. It has no extended features over dojo.parser, so // there is no reason you have to use dojox.mobile.parser instead // of dojo.parser. However, if dojox.mobile.parser's capability is // enough for your application, use of it could reduce the total // code size. this.instantiate = function(/* Array */nodes, /* Object? */mixin, /* Object? */args){ // summary: // Function for instantiating a list of widget nodes. // nodes: // The list of DOMNodes to walk and instantiate widgets on. mixin = mixin || {}; args = args || {}; var i, ws = []; if(nodes){ for(i = 0; i < nodes.length; i++){ var n = nodes[i]; var cls = lang.getObject(n.getAttribute("dojoType") || n.getAttribute("data-dojo-type")); var proto = cls.prototype; var params = {}, prop, v, t; lang.mixin(params, eval('({'+(n.getAttribute("data-dojo-props")||"")+'})')); lang.mixin(params, args.defaults); lang.mixin(params, mixin); for(prop in proto){ v = n.getAttributeNode(prop); v = v && v.nodeValue; t = typeof proto[prop]; if(!v && (t !== "boolean" || v !== "")){ continue; } if(t === "string"){ params[prop] = v; }else if(t === "number"){ params[prop] = v - 0; }else if(t === "boolean"){ params[prop] = (v !== "false"); }else if(t === "object"){ params[prop] = eval("(" + v + ")"); } } params["class"] = n.className; params.style = n.style && n.style.cssText; v = n.getAttribute("data-dojo-attach-point"); if(v){ params.dojoAttachPoint = v; } v = n.getAttribute("data-dojo-attach-event"); if(v){ params.dojoAttachEvent = v; } var instance = new cls(params, n); ws.push(instance); var jsId = n.getAttribute("jsId") || n.getAttribute("data-dojo-id"); if(jsId){ lang.setObject(jsId, instance); } } for(i = 0; i < ws.length; i++){ var w = ws[i]; !args.noStart && w.startup && !w._started && w.startup(); } } return ws; }; this.parse = function(rootNode, args){ // summary: // Function to handle parsing for widgets in the current document. // It is not as powerful as the full parser, but it will handle basic // use cases fine. // rootNode: // The root node in the document to parse from if(!rootNode){ rootNode = win.body(); }else if(!args && rootNode.rootNode){ // Case where 'rootNode' is really a params object. args = rootNode; rootNode = rootNode.rootNode; } var nodes = rootNode.getElementsByTagName("*"); var i, list = []; for(i = 0; i < nodes.length; i++){ var n = nodes[i]; if(n.getAttribute("dojoType") || n.getAttribute("data-dojo-type")){ list.push(n); } } var mixin = args && args.template ? {template: true} : null; return this.instantiate(list, mixin, args); }; }(); if(config.parseOnLoad){ ready(100, parser, "parse"); } dm.parser = parser; // for backward compatibility dojo.parser = parser; // in case user application calls dojo.parser return parser; });