|
Struts example source code file (Manager.js)
The Struts Manager.js source code/* 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.Manager"); dojo.require("dojo.lang.array"); dojo.require("dojo.lang.func"); dojo.require("dojo.event.*"); dojo.widget.manager = new function () { this.widgets = []; this.widgetIds = []; this.topWidgets = {}; var widgetTypeCtr = {}; var renderPrefixCache = []; this.getUniqueId = function (widgetType) { var widgetId; do { widgetId = widgetType + "_" + (widgetTypeCtr[widgetType] != undefined ? ++widgetTypeCtr[widgetType] : widgetTypeCtr[widgetType] = 0); } while (this.getWidgetById(widgetId)); return widgetId; }; this.add = function (widget) { this.widgets.push(widget); if (!widget.extraArgs["id"]) { widget.extraArgs["id"] = widget.extraArgs["ID"]; } if (widget.widgetId == "") { if (widget["id"]) { widget.widgetId = widget["id"]; } else { if (widget.extraArgs["id"]) { widget.widgetId = widget.extraArgs["id"]; } else { widget.widgetId = this.getUniqueId(widget.ns + "_" + widget.widgetType); } } } if (this.widgetIds[widget.widgetId]) { dojo.debug("widget ID collision on ID: " + widget.widgetId); } this.widgetIds[widget.widgetId] = widget; }; this.destroyAll = function () { for (var x = this.widgets.length - 1; x >= 0; x--) { try { this.widgets[x].destroy(true); delete this.widgets[x]; } catch (e) { } } }; this.remove = function (widgetIndex) { if (dojo.lang.isNumber(widgetIndex)) { var tw = this.widgets[widgetIndex].widgetId; delete this.topWidgets[tw]; delete this.widgetIds[tw]; this.widgets.splice(widgetIndex, 1); } else { this.removeById(widgetIndex); } }; this.removeById = function (id) { if (!dojo.lang.isString(id)) { id = id["widgetId"]; if (!id) { dojo.debug("invalid widget or id passed to removeById"); return; } } for (var i = 0; i < this.widgets.length; i++) { if (this.widgets[i].widgetId == id) { this.remove(i); break; } } }; this.getWidgetById = function (id) { if (dojo.lang.isString(id)) { return this.widgetIds[id]; } return id; }; this.getWidgetsByType = function (type) { var lt = type.toLowerCase(); var getType = (type.indexOf(":") < 0 ? function (x) { return x.widgetType.toLowerCase(); } : function (x) { return x.getNamespacedType(); }); var ret = []; dojo.lang.forEach(this.widgets, function (x) { if (getType(x) == lt) { ret.push(x); } }); return ret; }; this.getWidgetsByFilter = function (unaryFunc, onlyOne) { var ret = []; dojo.lang.every(this.widgets, function (x) { if (unaryFunc(x)) { ret.push(x); if (onlyOne) { return false; } } return true; }); return (onlyOne ? ret[0] : ret); }; this.getAllWidgets = function () { return this.widgets.concat(); }; this.getWidgetByNode = function (node) { var w = this.getAllWidgets(); node = dojo.byId(node); for (var i = 0; i < w.length; i++) { if (w[i].domNode == node) { return w[i]; } } return null; }; this.byId = this.getWidgetById; this.byType = this.getWidgetsByType; this.byFilter = this.getWidgetsByFilter; this.byNode = this.getWidgetByNode; var knownWidgetImplementations = {}; var widgetPackages = ["dojo.widget"]; for (var i = 0; i < widgetPackages.length; i++) { widgetPackages[widgetPackages[i]] = true; } this.registerWidgetPackage = function (pname) { if (!widgetPackages[pname]) { widgetPackages[pname] = true; widgetPackages.push(pname); } }; this.getWidgetPackageList = function () { return dojo.lang.map(widgetPackages, function (elt) { return (elt !== true ? elt : undefined); }); }; this.getImplementation = function (widgetName, ctorObject, mixins, ns) { var impl = this.getImplementationName(widgetName, ns); if (impl) { var ret = ctorObject ? new impl(ctorObject) : new impl(); return ret; } }; function buildPrefixCache() { for (var renderer in dojo.render) { if (dojo.render[renderer]["capable"] === true) { var prefixes = dojo.render[renderer].prefixes; for (var i = 0; i < prefixes.length; i++) { renderPrefixCache.push(prefixes[i].toLowerCase()); } } } } var findImplementationInModule = function (lowerCaseWidgetName, module) { if (!module) { return null; } for (var i = 0, l = renderPrefixCache.length, widgetModule; i <= l; i++) { widgetModule = (i < l ? module[renderPrefixCache[i]] : module); if (!widgetModule) { continue; } for (var name in widgetModule) { if (name.toLowerCase() == lowerCaseWidgetName) { return widgetModule[name]; } } } return null; }; var findImplementation = function (lowerCaseWidgetName, moduleName) { var module = dojo.evalObjPath(moduleName, false); return (module ? findImplementationInModule(lowerCaseWidgetName, module) : null); }; this.getImplementationName = function (widgetName, ns) { var lowerCaseWidgetName = widgetName.toLowerCase(); ns = ns || "dojo"; var imps = knownWidgetImplementations[ns] || (knownWidgetImplementations[ns] = {}); var impl = imps[lowerCaseWidgetName]; if (impl) { return impl; } if (!renderPrefixCache.length) { buildPrefixCache(); } var nsObj = dojo.ns.get(ns); if (!nsObj) { dojo.ns.register(ns, ns + ".widget"); nsObj = dojo.ns.get(ns); } if (nsObj) { nsObj.resolve(widgetName); } impl = findImplementation(lowerCaseWidgetName, nsObj.module); if (impl) { return (imps[lowerCaseWidgetName] = impl); } nsObj = dojo.ns.require(ns); if ((nsObj) && (nsObj.resolver)) { nsObj.resolve(widgetName); impl = findImplementation(lowerCaseWidgetName, nsObj.module); if (impl) { return (imps[lowerCaseWidgetName] = impl); } } 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"); for (var i = 0; i < widgetPackages.length; i++) { impl = findImplementation(lowerCaseWidgetName, widgetPackages[i]); if (impl) { return (imps[lowerCaseWidgetName] = impl); } } throw new Error("Could not locate widget implementation for \"" + widgetName + "\" in \"" + nsObj.module + "\" registered to namespace \"" + nsObj.name + "\""); }; this.resizing = false; this.onWindowResized = function () { if (this.resizing) { return; } try { this.resizing = true; for (var id in this.topWidgets) { var child = this.topWidgets[id]; if (child.checkSize) { child.checkSize(); } } } catch (e) { } finally { this.resizing = false; } }; if (typeof window != "undefined") { dojo.addOnLoad(this, "onWindowResized"); dojo.event.connect(window, "onresize", this, "onWindowResized"); } }; (function () { var dw = dojo.widget; var dwm = dw.manager; var h = dojo.lang.curry(dojo.lang, "hitch", dwm); var g = function (oldName, newName) { dw[(newName || oldName)] = h(oldName); }; g("add", "addWidget"); g("destroyAll", "destroyAllWidgets"); g("remove", "removeWidget"); g("removeById", "removeWidgetById"); g("getWidgetById"); g("getWidgetById", "byId"); g("getWidgetsByType"); g("getWidgetsByFilter"); g("getWidgetsByType", "byType"); g("getWidgetsByFilter", "byFilter"); g("getWidgetByNode", "byNode"); dw.all = function (n) { var widgets = dwm.getAllWidgets.apply(dwm, arguments); if (arguments.length > 0) { return widgets[n]; } return widgets; }; g("registerWidgetPackage"); g("getImplementation", "getWidgetImplementation"); g("getImplementationName", "getWidgetImplementationName"); dw.widgets = dwm.widgets; dw.widgetIds = dwm.widgetIds; dw.root = dwm.root; })(); Other Struts examples (source code examples)Here is a short list of links related to this Struts Manager.js source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.