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

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.Manager");
  9. dojo.require("dojo.lang.array");
  10. dojo.require("dojo.lang.func");
  11. dojo.require("dojo.event.*");
  12. dojo.widget.manager = new function () {
  13. this.widgets = [];
  14. this.widgetIds = [];
  15. this.topWidgets = {};
  16. var widgetTypeCtr = {};
  17. var renderPrefixCache = [];
  18. this.getUniqueId = function (widgetType) {
  19. var widgetId;
  20. do {
  21. widgetId = widgetType + "_" + (widgetTypeCtr[widgetType] != undefined ? ++widgetTypeCtr[widgetType] : widgetTypeCtr[widgetType] = 0);
  22. } while (this.getWidgetById(widgetId));
  23. return widgetId;
  24. };
  25. this.add = function (widget) {
  26. this.widgets.push(widget);
  27. if (!widget.extraArgs["id"]) {
  28. widget.extraArgs["id"] = widget.extraArgs["ID"];
  29. }
  30. if (widget.widgetId == "") {
  31. if (widget["id"]) {
  32. widget.widgetId = widget["id"];
  33. } else {
  34. if (widget.extraArgs["id"]) {
  35. widget.widgetId = widget.extraArgs["id"];
  36. } else {
  37. widget.widgetId = this.getUniqueId(widget.ns + "_" + widget.widgetType);
  38. }
  39. }
  40. }
  41. if (this.widgetIds[widget.widgetId]) {
  42. dojo.debug("widget ID collision on ID: " + widget.widgetId);
  43. }
  44. this.widgetIds[widget.widgetId] = widget;
  45. };
  46. this.destroyAll = function () {
  47. for (var x = this.widgets.length - 1; x >= 0; x--) {
  48. try {
  49. this.widgets[x].destroy(true);
  50. delete this.widgets[x];
  51. }
  52. catch (e) {
  53. }
  54. }
  55. };
  56. this.remove = function (widgetIndex) {
  57. if (dojo.lang.isNumber(widgetIndex)) {
  58. var tw = this.widgets[widgetIndex].widgetId;
  59. delete this.topWidgets[tw];
  60. delete this.widgetIds[tw];
  61. this.widgets.splice(widgetIndex, 1);
  62. } else {
  63. this.removeById(widgetIndex);
  64. }
  65. };
  66. this.removeById = function (id) {
  67. if (!dojo.lang.isString(id)) {
  68. id = id["widgetId"];
  69. if (!id) {
  70. dojo.debug("invalid widget or id passed to removeById");
  71. return;
  72. }
  73. }
  74. for (var i = 0; i < this.widgets.length; i++) {
  75. if (this.widgets[i].widgetId == id) {
  76. this.remove(i);
  77. break;
  78. }
  79. }
  80. };
  81. this.getWidgetById = function (id) {
  82. if (dojo.lang.isString(id)) {
  83. return this.widgetIds[id];
  84. }
  85. return id;
  86. };
  87. this.getWidgetsByType = function (type) {
  88. var lt = type.toLowerCase();
  89. var getType = (type.indexOf(":") < 0 ? function (x) {
  90. return x.widgetType.toLowerCase();
  91. } : function (x) {
  92. return x.getNamespacedType();
  93. });
  94. var ret = [];
  95. dojo.lang.forEach(this.widgets, function (x) {
  96. if (getType(x) == lt) {
  97. ret.push(x);
  98. }
  99. });
  100. return ret;
  101. };
  102. this.getWidgetsByFilter = function (unaryFunc, onlyOne) {
  103. var ret = [];
  104. dojo.lang.every(this.widgets, function (x) {
  105. if (unaryFunc(x)) {
  106. ret.push(x);
  107. if (onlyOne) {
  108. return false;
  109. }
  110. }
  111. return true;
  112. });
  113. return (onlyOne ? ret[0] : ret);
  114. };
  115. this.getAllWidgets = function () {
  116. return this.widgets.concat();
  117. };
  118. this.getWidgetByNode = function (node) {
  119. var w = this.getAllWidgets();
  120. node = dojo.byId(node);
  121. for (var i = 0; i < w.length; i++) {
  122. if (w[i].domNode == node) {
  123. return w[i];
  124. }
  125. }
  126. return null;
  127. };
  128. this.byId = this.getWidgetById;
  129. this.byType = this.getWidgetsByType;
  130. this.byFilter = this.getWidgetsByFilter;
  131. this.byNode = this.getWidgetByNode;
  132. var knownWidgetImplementations = {};
  133. var widgetPackages = ["dojo.widget"];
  134. for (var i = 0; i < widgetPackages.length; i++) {
  135. widgetPackages[widgetPackages[i]] = true;
  136. }
  137. this.registerWidgetPackage = function (pname) {
  138. if (!widgetPackages[pname]) {
  139. widgetPackages[pname] = true;
  140. widgetPackages.push(pname);
  141. }
  142. };
  143. this.getWidgetPackageList = function () {
  144. return dojo.lang.map(widgetPackages, function (elt) {
  145. return (elt !== true ? elt : undefined);
  146. });
  147. };
  148. this.getImplementation = function (widgetName, ctorObject, mixins, ns) {
  149. var impl = this.getImplementationName(widgetName, ns);
  150. if (impl) {
  151. var ret = ctorObject ? new impl(ctorObject) : new impl();
  152. return ret;
  153. }
  154. };
  155. function buildPrefixCache() {
  156. for (var renderer in dojo.render) {
  157. if (dojo.render[renderer]["capable"] === true) {
  158. var prefixes = dojo.render[renderer].prefixes;
  159. for (var i = 0; i < prefixes.length; i++) {
  160. renderPrefixCache.push(prefixes[i].toLowerCase());
  161. }
  162. }
  163. }
  164. }
  165. var findImplementationInModule = function (lowerCaseWidgetName, module) {
  166. if (!module) {
  167. return null;
  168. }
  169. for (var i = 0, l = renderPrefixCache.length, widgetModule; i <= l; i++) {
  170. widgetModule = (i < l ? module[renderPrefixCache[i]] : module);
  171. if (!widgetModule) {
  172. continue;
  173. }
  174. for (var name in widgetModule) {
  175. if (name.toLowerCase() == lowerCaseWidgetName) {
  176. return widgetModule[name];
  177. }
  178. }
  179. }
  180. return null;
  181. };
  182. var findImplementation = function (lowerCaseWidgetName, moduleName) {
  183. var module = dojo.evalObjPath(moduleName, false);
  184. return (module ? findImplementationInModule(lowerCaseWidgetName, module) : null);
  185. };
  186. this.getImplementationName = function (widgetName, ns) {
  187. var lowerCaseWidgetName = widgetName.toLowerCase();
  188. ns = ns || "dojo";
  189. var imps = knownWidgetImplementations[ns] || (knownWidgetImplementations[ns] = {});
  190. var impl = imps[lowerCaseWidgetName];
  191. if (impl) {
  192. return impl;
  193. }
  194. if (!renderPrefixCache.length) {
  195. buildPrefixCache();
  196. }
  197. var nsObj = dojo.ns.get(ns);
  198. if (!nsObj) {
  199. dojo.ns.register(ns, ns + ".widget");
  200. nsObj = dojo.ns.get(ns);
  201. }
  202. if (nsObj) {
  203. nsObj.resolve(widgetName);
  204. }
  205. impl = findImplementation(lowerCaseWidgetName, nsObj.module);
  206. if (impl) {
  207. return (imps[lowerCaseWidgetName] = impl);
  208. }
  209. nsObj = dojo.ns.require(ns);
  210. if ((nsObj) && (nsObj.resolver)) {
  211. nsObj.resolve(widgetName);
  212. impl = findImplementation(lowerCaseWidgetName, nsObj.module);
  213. if (impl) {
  214. return (imps[lowerCaseWidgetName] = impl);
  215. }
  216. }
  217. dojo.deprecated("dojo.widget.Manager.getImplementationName", "Could not locate widget implementation for "" + widgetName + "" in "" + nsObj.module + "" registered to namespace "" + nsObj.name + "". " + "Developers must specify correct namespaces for all non-Dojo widgets", "0.5");
  218. for (var i = 0; i < widgetPackages.length; i++) {
  219. impl = findImplementation(lowerCaseWidgetName, widgetPackages[i]);
  220. if (impl) {
  221. return (imps[lowerCaseWidgetName] = impl);
  222. }
  223. }
  224. throw new Error("Could not locate widget implementation for "" + widgetName + "" in "" + nsObj.module + "" registered to namespace "" + nsObj.name + """);
  225. };
  226. this.resizing = false;
  227. this.onWindowResized = function () {
  228. if (this.resizing) {
  229. return;
  230. }
  231. try {
  232. this.resizing = true;
  233. for (var id in this.topWidgets) {
  234. var child = this.topWidgets[id];
  235. if (child.checkSize) {
  236. child.checkSize();
  237. }
  238. }
  239. }
  240. catch (e) {
  241. }
  242. finally {
  243. this.resizing = false;
  244. }
  245. };
  246. if (typeof window != "undefined") {
  247. dojo.addOnLoad(this, "onWindowResized");
  248. dojo.event.connect(window, "onresize", this, "onWindowResized");
  249. }
  250. };
  251. (function () {
  252. var dw = dojo.widget;
  253. var dwm = dw.manager;
  254. var h = dojo.lang.curry(dojo.lang, "hitch", dwm);
  255. var g = function (oldName, newName) {
  256. dw[(newName || oldName)] = h(oldName);
  257. };
  258. g("add", "addWidget");
  259. g("destroyAll", "destroyAllWidgets");
  260. g("remove", "removeWidget");
  261. g("removeById", "removeWidgetById");
  262. g("getWidgetById");
  263. g("getWidgetById", "byId");
  264. g("getWidgetsByType");
  265. g("getWidgetsByFilter");
  266. g("getWidgetsByType", "byType");
  267. g("getWidgetsByFilter", "byFilter");
  268. g("getWidgetByNode", "byNode");
  269. dw.all = function (n) {
  270. var widgets = dwm.getAllWidgets.apply(dwm, arguments);
  271. if (arguments.length > 0) {
  272. return widgets[n];
  273. }
  274. return widgets;
  275. };
  276. g("registerWidgetPackage");
  277. g("getImplementation", "getWidgetImplementation");
  278. g("getImplementationName", "getWidgetImplementationName");
  279. dw.widgets = dwm.widgets;
  280. dw.widgetIds = dwm.widgetIds;
  281. dw.root = dwm.root;
  282. })();