Parse.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:7k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.widget.Parse");
  9. dojo.require("dojo.widget.Manager");
  10. dojo.require("dojo.dom");
  11. dojo.widget.Parse = function (fragment) {
  12. this.propertySetsList = [];
  13. this.fragment = fragment;
  14. this.createComponents = function (frag, parentComp) {
  15. var comps = [];
  16. var built = false;
  17. try {
  18. if (frag && frag.tagName && (frag != frag.nodeRef)) {
  19. var djTags = dojo.widget.tags;
  20. var tna = String(frag.tagName).split(";");
  21. for (var x = 0; x < tna.length; x++) {
  22. var ltn = tna[x].replace(/^s+|s+$/g, "").toLowerCase();
  23. frag.tagName = ltn;
  24. var ret;
  25. if (djTags[ltn]) {
  26. built = true;
  27. ret = djTags[ltn](frag, this, parentComp, frag.index);
  28. comps.push(ret);
  29. } else {
  30. if (ltn.indexOf(":") == -1) {
  31. ltn = "dojo:" + ltn;
  32. }
  33. ret = dojo.widget.buildWidgetFromParseTree(ltn, frag, this, parentComp, frag.index);
  34. if (ret) {
  35. built = true;
  36. comps.push(ret);
  37. }
  38. }
  39. }
  40. }
  41. }
  42. catch (e) {
  43. dojo.debug("dojo.widget.Parse: error:", e);
  44. }
  45. if (!built) {
  46. comps = comps.concat(this.createSubComponents(frag, parentComp));
  47. }
  48. return comps;
  49. };
  50. this.createSubComponents = function (fragment, parentComp) {
  51. var frag, comps = [];
  52. for (var item in fragment) {
  53. frag = fragment[item];
  54. if (frag && typeof frag == "object" && (frag != fragment.nodeRef) && (frag != fragment.tagName) && (!dojo.dom.isNode(frag))) {
  55. comps = comps.concat(this.createComponents(frag, parentComp));
  56. }
  57. }
  58. return comps;
  59. };
  60. this.parsePropertySets = function (fragment) {
  61. return [];
  62. };
  63. this.parseProperties = function (fragment) {
  64. var properties = {};
  65. for (var item in fragment) {
  66. if ((fragment[item] == fragment.tagName) || (fragment[item] == fragment.nodeRef)) {
  67. } else {
  68. var frag = fragment[item];
  69. if (frag.tagName && dojo.widget.tags[frag.tagName.toLowerCase()]) {
  70. } else {
  71. if (frag[0] && frag[0].value != "" && frag[0].value != null) {
  72. try {
  73. if (item.toLowerCase() == "dataprovider") {
  74. var _this = this;
  75. this.getDataProvider(_this, frag[0].value);
  76. properties.dataProvider = this.dataProvider;
  77. }
  78. properties[item] = frag[0].value;
  79. var nestedProperties = this.parseProperties(frag);
  80. for (var property in nestedProperties) {
  81. properties[property] = nestedProperties[property];
  82. }
  83. }
  84. catch (e) {
  85. dojo.debug(e);
  86. }
  87. }
  88. }
  89. switch (item.toLowerCase()) {
  90.   case "checked":
  91.   case "disabled":
  92. if (typeof properties[item] != "boolean") {
  93. properties[item] = true;
  94. }
  95. break;
  96. }
  97. }
  98. }
  99. return properties;
  100. };
  101. this.getDataProvider = function (objRef, dataUrl) {
  102. dojo.io.bind({url:dataUrl, load:function (type, evaldObj) {
  103. if (type == "load") {
  104. objRef.dataProvider = evaldObj;
  105. }
  106. }, mimetype:"text/javascript", sync:true});
  107. };
  108. this.getPropertySetById = function (propertySetId) {
  109. for (var x = 0; x < this.propertySetsList.length; x++) {
  110. if (propertySetId == this.propertySetsList[x]["id"][0].value) {
  111. return this.propertySetsList[x];
  112. }
  113. }
  114. return "";
  115. };
  116. this.getPropertySetsByType = function (componentType) {
  117. var propertySets = [];
  118. for (var x = 0; x < this.propertySetsList.length; x++) {
  119. var cpl = this.propertySetsList[x];
  120. var cpcc = cpl.componentClass || cpl.componentType || null;
  121. var propertySetId = this.propertySetsList[x]["id"][0].value;
  122. if (cpcc && (propertySetId == cpcc[0].value)) {
  123. propertySets.push(cpl);
  124. }
  125. }
  126. return propertySets;
  127. };
  128. this.getPropertySets = function (fragment) {
  129. var ppl = "dojo:propertyproviderlist";
  130. var propertySets = [];
  131. var tagname = fragment.tagName;
  132. if (fragment[ppl]) {
  133. var propertyProviderIds = fragment[ppl].value.split(" ");
  134. for (var propertySetId in propertyProviderIds) {
  135. if ((propertySetId.indexOf("..") == -1) && (propertySetId.indexOf("://") == -1)) {
  136. var propertySet = this.getPropertySetById(propertySetId);
  137. if (propertySet != "") {
  138. propertySets.push(propertySet);
  139. }
  140. } else {
  141. }
  142. }
  143. }
  144. return this.getPropertySetsByType(tagname).concat(propertySets);
  145. };
  146. this.createComponentFromScript = function (nodeRef, componentName, properties, ns) {
  147. properties.fastMixIn = true;
  148. var ltn = (ns || "dojo") + ":" + componentName.toLowerCase();
  149. if (dojo.widget.tags[ltn]) {
  150. return [dojo.widget.tags[ltn](properties, this, null, null, properties)];
  151. }
  152. return [dojo.widget.buildWidgetFromParseTree(ltn, properties, this, null, null, properties)];
  153. };
  154. };
  155. dojo.widget._parser_collection = {"dojo":new dojo.widget.Parse()};
  156. dojo.widget.getParser = function (name) {
  157. if (!name) {
  158. name = "dojo";
  159. }
  160. if (!this._parser_collection[name]) {
  161. this._parser_collection[name] = new dojo.widget.Parse();
  162. }
  163. return this._parser_collection[name];
  164. };
  165. dojo.widget.createWidget = function (name, props, refNode, position) {
  166. var isNode = false;
  167. var isNameStr = (typeof name == "string");
  168. if (isNameStr) {
  169. var pos = name.indexOf(":");
  170. var ns = (pos > -1) ? name.substring(0, pos) : "dojo";
  171. if (pos > -1) {
  172. name = name.substring(pos + 1);
  173. }
  174. var lowerCaseName = name.toLowerCase();
  175. var namespacedName = ns + ":" + lowerCaseName;
  176. isNode = (dojo.byId(name) && !dojo.widget.tags[namespacedName]);
  177. }
  178. if ((arguments.length == 1) && (isNode || !isNameStr)) {
  179. var xp = new dojo.xml.Parse();
  180. var tn = isNode ? dojo.byId(name) : name;
  181. return dojo.widget.getParser().createComponents(xp.parseElement(tn, null, true))[0];
  182. }
  183. function fromScript(placeKeeperNode, name, props, ns) {
  184. props[namespacedName] = {dojotype:[{value:lowerCaseName}], nodeRef:placeKeeperNode, fastMixIn:true};
  185. props.ns = ns;
  186. return dojo.widget.getParser().createComponentFromScript(placeKeeperNode, name, props, ns);
  187. }
  188. props = props || {};
  189. var notRef = false;
  190. var tn = null;
  191. var h = dojo.render.html.capable;
  192. if (h) {
  193. tn = document.createElement("span");
  194. }
  195. if (!refNode) {
  196. notRef = true;
  197. refNode = tn;
  198. if (h) {
  199. dojo.body().appendChild(refNode);
  200. }
  201. } else {
  202. if (position) {
  203. dojo.dom.insertAtPosition(tn, refNode, position);
  204. } else {
  205. tn = refNode;
  206. }
  207. }
  208. var widgetArray = fromScript(tn, name.toLowerCase(), props, ns);
  209. if ((!widgetArray) || (!widgetArray[0]) || (typeof widgetArray[0].widgetType == "undefined")) {
  210. throw new Error("createWidget: Creation of "" + name + "" widget failed.");
  211. }
  212. try {
  213. if (notRef && widgetArray[0].domNode.parentNode) {
  214. widgetArray[0].domNode.parentNode.removeChild(widgetArray[0].domNode);
  215. }
  216. }
  217. catch (e) {
  218. dojo.debug(e);
  219. }
  220. return widgetArray[0];
  221. };