[Dojo-checkins] r1448 - trunk/src/widget

dojo-checkins at dojotoolkit.org dojo-checkins at dojotoolkit.org
Tue Sep 13 13:06:11 PDT 2005


Author: psowden
Date: Tue Sep 13 13:06:10 2005
New Revision: 1448

Modified:
   trunk/src/widget/Manager.js
Log:
adding support for widget.render.* package prefixes


Modified: trunk/src/widget/Manager.js
==============================================================================
--- trunk/src/widget/Manager.js	(original)
+++ trunk/src/widget/Manager.js	Tue Sep 13 13:06:10 2005
@@ -103,6 +103,9 @@
 		var impl = this.getImplementationName(widgetName);
 				
 		if(impl){
+//			var props = [];
+//			for (var prop in impl) { props.push(prop); }
+//			dj_debug(props.join(", "));
 			var item = new impl(ctorObject);
 			//alert(impl+": "+item);
 			return item;
@@ -121,42 +124,50 @@
 		 * can construct a widget.
 		 */
 
-		// first, search the knownImplementations list for a suitable match
-		var impl = knownWidgetImplementations[widgetName.toLowerCase()];
-		if(impl){
-			return impl;
-		}
+		var lowerCaseWidgetName = widgetName.toLowerCase();
 
-		// if we didn't get one there, then we need to run through the
-		// classname location algorithm
+		var impl = knownWidgetImplementations[lowerCaseWidgetName];
+		if (impl) { return impl; }
+
+		// first store a list of the render prefixes we are capable of rendering
+		var renderPrefixes = [];
+		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++) {
+					renderPrefixes.push(prefixes[i].toLowerCase());
+				}
+			}
+		}
 
 		// look for a rendering-context specific version of our widget name
 		for(var i = 0; i < widgetPackages.length; i++){
-			var pn = widgetPackages[i];
-			var pkg = dj_eval_object_path(pn);
+			var widgetPackage = dj_eval_object_path(widgetPackages[i]);
 
-			for(var x in pkg){
-				var xlc = (new String(x)).toLowerCase();
-				for(var y in dojo.render){
-					if((dojo.render[y]["capable"])&&(dojo.render[y].capable === true)){
-						var ps = dojo.render[y].prefixes;
-						for(var z=0; z<ps.length; z++){
-							if((ps[z]+widgetName).toLowerCase() == xlc){
-								knownWidgetImplementations[xlc] = pkg[x];
-								return pkg[x];
-							}
-						}
-					}
+			for (var j = 0; j < renderPrefixes.length; j++) {
+				if (!widgetPackage[renderPrefixes[j]]) { continue; }
+				for (var widgetClass in widgetPackage[renderPrefixes[j]]) {
+					if (widgetClass.toLowerCase() != lowerCaseWidgetName) { continue; }
+					dj_debug(widgetPackage[renderPrefixes[j]][widgetClass]);
+					knownWidgetImplementations[lowerCaseWidgetName] =
+						widgetPackage[renderPrefixes[j]][widgetClass];
+					return knownWidgetImplementations[lowerCaseWidgetName];
 				}
-				/*
-				// this is the fallback to the base class. There's still some debate as to whether or not this is a good idea.
-				if((widgetName.toLowerCase()== xlc)&&(typeof pkg[x] == "function")){
-					knownWidgetImplementations[xlc] = pkg[x];
-					return pkg[x];
+			}
+
+			for (var j = 0; j < renderPrefixes.length; j++) {
+				for (var widgetClass in widgetPackage) {
+					if (widgetClass.toLowerCase() !=
+						(renderPrefixes[j] + lowerCaseWidgetName)) { continue; }
+	
+					knownWidgetImplementations[lowerCaseWidgetName] =
+						widgetPackage[widgetClass];
+					return knownWidgetImplementations[lowerCaseWidgetName];
 				}
-				*/
 			}
 		}
+		
+		throw new Error('Could not locate "' + widgetName + '" class');
 	}
 
 	// FIXME: does it even belong in this name space?


More information about the Dojo-checkins mailing list