Parse.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:7k
- /*
- Copyright (c) 2004-2006, The Dojo Foundation
- All Rights Reserved.
- Licensed under the Academic Free License version 2.1 or above OR the
- modified BSD license. For more information on Dojo licensing, see:
- http://dojotoolkit.org/community/licensing.shtml
- */
- dojo.provide("dojo.widget.Parse");
- dojo.require("dojo.widget.Manager");
- dojo.require("dojo.dom");
- dojo.widget.Parse = function (fragment) {
- this.propertySetsList = [];
- this.fragment = fragment;
- this.createComponents = function (frag, parentComp) {
- var comps = [];
- var built = false;
- try {
- if (frag && frag.tagName && (frag != frag.nodeRef)) {
- var djTags = dojo.widget.tags;
- var tna = String(frag.tagName).split(";");
- for (var x = 0; x < tna.length; x++) {
- var ltn = tna[x].replace(/^s+|s+$/g, "").toLowerCase();
- frag.tagName = ltn;
- var ret;
- if (djTags[ltn]) {
- built = true;
- ret = djTags[ltn](frag, this, parentComp, frag.index);
- comps.push(ret);
- } else {
- if (ltn.indexOf(":") == -1) {
- ltn = "dojo:" + ltn;
- }
- ret = dojo.widget.buildWidgetFromParseTree(ltn, frag, this, parentComp, frag.index);
- if (ret) {
- built = true;
- comps.push(ret);
- }
- }
- }
- }
- }
- catch (e) {
- dojo.debug("dojo.widget.Parse: error:", e);
- }
- if (!built) {
- comps = comps.concat(this.createSubComponents(frag, parentComp));
- }
- return comps;
- };
- this.createSubComponents = function (fragment, parentComp) {
- var frag, comps = [];
- for (var item in fragment) {
- frag = fragment[item];
- if (frag && typeof frag == "object" && (frag != fragment.nodeRef) && (frag != fragment.tagName) && (!dojo.dom.isNode(frag))) {
- comps = comps.concat(this.createComponents(frag, parentComp));
- }
- }
- return comps;
- };
- this.parsePropertySets = function (fragment) {
- return [];
- };
- this.parseProperties = function (fragment) {
- var properties = {};
- for (var item in fragment) {
- if ((fragment[item] == fragment.tagName) || (fragment[item] == fragment.nodeRef)) {
- } else {
- var frag = fragment[item];
- if (frag.tagName && dojo.widget.tags[frag.tagName.toLowerCase()]) {
- } else {
- if (frag[0] && frag[0].value != "" && frag[0].value != null) {
- try {
- if (item.toLowerCase() == "dataprovider") {
- var _this = this;
- this.getDataProvider(_this, frag[0].value);
- properties.dataProvider = this.dataProvider;
- }
- properties[item] = frag[0].value;
- var nestedProperties = this.parseProperties(frag);
- for (var property in nestedProperties) {
- properties[property] = nestedProperties[property];
- }
- }
- catch (e) {
- dojo.debug(e);
- }
- }
- }
- switch (item.toLowerCase()) {
- case "checked":
- case "disabled":
- if (typeof properties[item] != "boolean") {
- properties[item] = true;
- }
- break;
- }
- }
- }
- return properties;
- };
- this.getDataProvider = function (objRef, dataUrl) {
- dojo.io.bind({url:dataUrl, load:function (type, evaldObj) {
- if (type == "load") {
- objRef.dataProvider = evaldObj;
- }
- }, mimetype:"text/javascript", sync:true});
- };
- this.getPropertySetById = function (propertySetId) {
- for (var x = 0; x < this.propertySetsList.length; x++) {
- if (propertySetId == this.propertySetsList[x]["id"][0].value) {
- return this.propertySetsList[x];
- }
- }
- return "";
- };
- this.getPropertySetsByType = function (componentType) {
- var propertySets = [];
- for (var x = 0; x < this.propertySetsList.length; x++) {
- var cpl = this.propertySetsList[x];
- var cpcc = cpl.componentClass || cpl.componentType || null;
- var propertySetId = this.propertySetsList[x]["id"][0].value;
- if (cpcc && (propertySetId == cpcc[0].value)) {
- propertySets.push(cpl);
- }
- }
- return propertySets;
- };
- this.getPropertySets = function (fragment) {
- var ppl = "dojo:propertyproviderlist";
- var propertySets = [];
- var tagname = fragment.tagName;
- if (fragment[ppl]) {
- var propertyProviderIds = fragment[ppl].value.split(" ");
- for (var propertySetId in propertyProviderIds) {
- if ((propertySetId.indexOf("..") == -1) && (propertySetId.indexOf("://") == -1)) {
- var propertySet = this.getPropertySetById(propertySetId);
- if (propertySet != "") {
- propertySets.push(propertySet);
- }
- } else {
- }
- }
- }
- return this.getPropertySetsByType(tagname).concat(propertySets);
- };
- this.createComponentFromScript = function (nodeRef, componentName, properties, ns) {
- properties.fastMixIn = true;
- var ltn = (ns || "dojo") + ":" + componentName.toLowerCase();
- if (dojo.widget.tags[ltn]) {
- return [dojo.widget.tags[ltn](properties, this, null, null, properties)];
- }
- return [dojo.widget.buildWidgetFromParseTree(ltn, properties, this, null, null, properties)];
- };
- };
- dojo.widget._parser_collection = {"dojo":new dojo.widget.Parse()};
- dojo.widget.getParser = function (name) {
- if (!name) {
- name = "dojo";
- }
- if (!this._parser_collection[name]) {
- this._parser_collection[name] = new dojo.widget.Parse();
- }
- return this._parser_collection[name];
- };
- dojo.widget.createWidget = function (name, props, refNode, position) {
- var isNode = false;
- var isNameStr = (typeof name == "string");
- if (isNameStr) {
- var pos = name.indexOf(":");
- var ns = (pos > -1) ? name.substring(0, pos) : "dojo";
- if (pos > -1) {
- name = name.substring(pos + 1);
- }
- var lowerCaseName = name.toLowerCase();
- var namespacedName = ns + ":" + lowerCaseName;
- isNode = (dojo.byId(name) && !dojo.widget.tags[namespacedName]);
- }
- if ((arguments.length == 1) && (isNode || !isNameStr)) {
- var xp = new dojo.xml.Parse();
- var tn = isNode ? dojo.byId(name) : name;
- return dojo.widget.getParser().createComponents(xp.parseElement(tn, null, true))[0];
- }
- function fromScript(placeKeeperNode, name, props, ns) {
- props[namespacedName] = {dojotype:[{value:lowerCaseName}], nodeRef:placeKeeperNode, fastMixIn:true};
- props.ns = ns;
- return dojo.widget.getParser().createComponentFromScript(placeKeeperNode, name, props, ns);
- }
- props = props || {};
- var notRef = false;
- var tn = null;
- var h = dojo.render.html.capable;
- if (h) {
- tn = document.createElement("span");
- }
- if (!refNode) {
- notRef = true;
- refNode = tn;
- if (h) {
- dojo.body().appendChild(refNode);
- }
- } else {
- if (position) {
- dojo.dom.insertAtPosition(tn, refNode, position);
- } else {
- tn = refNode;
- }
- }
- var widgetArray = fromScript(tn, name.toLowerCase(), props, ns);
- if ((!widgetArray) || (!widgetArray[0]) || (typeof widgetArray[0].widgetType == "undefined")) {
- throw new Error("createWidget: Creation of "" + name + "" widget failed.");
- }
- try {
- if (notRef && widgetArray[0].domNode.parentNode) {
- widgetArray[0].domNode.parentNode.removeChild(widgetArray[0].domNode);
- }
- }
- catch (e) {
- dojo.debug(e);
- }
- return widgetArray[0];
- };