]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojox/help/_base.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / help / _base.js
diff --git a/static/dojo-release-1.1.1/dojox/help/_base.js b/static/dojo-release-1.1.1/dojox/help/_base.js
new file mode 100644 (file)
index 0000000..109f3ca
--- /dev/null
@@ -0,0 +1,473 @@
+if(!dojo._hasResource["dojox.help._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.help._base"] = true;
+dojo.provide("dojox.help._base");
+dojo.require("dojox.rpc.Service");
+dojo.require("dojo.io.script");
+
+dojo.experimental("dojox.help");
+console.warn("Script causes side effects (on numbers, strings, and booleans). Call dojox.help.noConflict() if you plan on executing code.");
+
+dojox.help = {
+       // summary:
+       //              Adds the help function to all variables.
+       locate: function(/*String*/ searchFor, /*String|Object|String[]|Object[]*/ searchIn, /*Number*/ maxResults){
+               // summary:
+               //              Search for dojo functionality that has something to do with the given string.
+               //  description:
+               //              Search for locally available data; variable names and any cached
+               //              documentation results for matches containing our search parameter
+               // searchFor
+               //              The string to search for.
+               // searchIn:
+               //              The namespaces to search in. Defaults to dojox.help._namespaces
+               // maxResults:
+               //              The maximum number of results.
+               maxResults = maxResults || 20;
+               var namespaces = [];
+               var roots = {};
+               var root;
+               if(searchIn){
+                       if(!dojo.isArray(searchIn)){
+                               searchIn = [searchIn];
+                       }
+                       for(var i = 0, namespace; namespace = searchIn[i]; i++){
+                               root = namespace;
+                               if(dojo.isString(namespace)){
+                                       namespace = dojo.getObject(namespace);
+                                       if(!namespace){
+                                               continue;
+                                       }
+                               }else if(dojo.isObject(namespace)){
+                                       root = namespace.__name__;
+                               }else{
+                                       continue;
+                               }
+                               // Add to a list of namespace objects (in object form)
+                               namespaces.push(namespace);
+                               if(root){
+                                       root = root.split(".")[0];
+                                       if(!roots[root] && dojo.indexOf(dojox.help._namespaces, root) == -1){
+                                               // Refresh anything that's not part of our global namespace list
+                                               dojox.help.refresh(root);
+                                       }
+                                       roots[root] = true;
+                               }
+                       }
+               }
+               if(!namespaces.length){
+                       namespaces.push({ __name__: "window" });
+                       dojo.forEach(dojox.help._namespaces, function(item){ roots[item] = true; });
+               }
+
+               var found = [];
+               out:
+               for(var i = 0, namespace; namespace = namespaces[i]; i++){
+                       var name = namespace.__name__ || "";
+                       var shorter = dojo.some(namespaces, function(item){
+                               // Return true if we find a namespace below
+                               // the current namespace
+                               item = item.__name__ || "";
+                               return (name.indexOf(item + ".") == 0);
+                       });
+                       if(name && !shorter){
+                               root = name.split(".")[0];
+                               var names = [];
+                               if(name == "window"){
+                                       for(root in dojox.help._names){
+                                               if(dojo.isArray(dojox.help._names[root])){
+                                                       names = names.concat(dojox.help._names[root]);
+                                               }
+                                       }
+                               }else{
+                                       names = dojox.help._names[root];
+                               }
+                               for(var j = 0, variable; variable = names[j]; j++){
+                                       if((name == "window" || variable.indexOf(name + ".") == 0) && variable.toLowerCase().indexOf(searchFor) != -1){
+                                               if(variable.slice(-10) == ".prototype"){ continue; }
+                                               var obj = dojo.getObject(variable);
+                                               if(obj){
+                                                       found.push([variable, obj]);
+                                                       if(found.length == maxResults){
+                                                               break out;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               dojox.help._displayLocated(found);
+               if(!+dojo.isFF){
+                       return "";
+               }
+       },
+       refresh: function(/*String?*/ namespace, /*Boolean?*/ recursive){
+               // summary:
+               //              Useful if you reset some values, and want to restore their
+               //              help function
+               // namespace:
+               //              The string-representation of a namespace.
+               // recursive:
+               //              Whether to recurse through the namespace.
+               if(arguments.length < 2){
+                       recursive = true;
+               }
+               dojox.help._recurse(namespace, recursive);
+       },
+       noConflict: function(/*Object?*/ item){
+               // summary:
+               //              Use this function when you want to resolve the problems
+               //              created by including a dojox.help package.
+               // item:
+               //              If you pass an item, only that item will be cleaned
+               if(arguments.length){
+                       return dojox.help._noConflict(item);
+               }else{
+                       while(dojox.help._overrides.length){
+                               var override = dojox.help._overrides.pop();
+                               var parent = override[0];
+                               var key = override[1];
+                               var child = parent[key];
+                               parent[key] = dojox.help._noConflict(child);
+                       }
+               }
+       },
+       init: function(/*String[]*/ namespaces, /*Boolen?*/ noConflict){
+               // summary:
+               //              Should be called by one of the implementations. Runs startup code
+               // namespaces:
+               //              Any namespaces to add to the default (dojox.help._namespaces)
+               // noConflict:
+               //              Whether to start in noConflict mode
+               if(namespaces){
+                       dojox.help._namespaces.concat(namespaces);
+               }
+               dojo.addOnLoad(function(){
+                       dojo.require = (function(require){
+                               return function(){
+                                       dojox.help.noConflict();
+                                       require.apply(dojo, arguments);
+                                       if(dojox.help._timer){
+                                               clearTimeout(dojox.help._timer);
+                                       }
+                                       dojox.help._timer = setTimeout(function(){
+                                               dojo.addOnLoad(function(){
+                                                       dojox.help.refresh();
+                                                       dojox.help._timer = false;
+                                               });
+                                       }, 500);
+                               }
+                       })(dojo.require);
+
+                       dojox.help._recurse();
+               });
+       },
+       _noConflict: function(item){
+               if(item instanceof String){
+                       return item.toString();
+               }else if(item instanceof Number){
+                       return +item;
+               }else if(item instanceof Boolean){
+                       return (item == true);
+               }else if(dojo.isObject(item)){
+                       delete item.__name__;
+                       delete item.help;
+               }
+               return item;
+       },
+       _namespaces: ["dojo", "dojox", "dijit", "djConfig"],
+       _rpc: new dojox.rpc.Service(dojo.moduleUrl("dojox.rpc", "documentation.smd")),
+       _attributes: ["summary", "type", "returns", "parameters"],
+       _clean: function(self){
+               var obj = {};
+               for(var i = 0, attribute; attribute = dojox.help._attributes[i]; i++){
+                       var value = self["__" + attribute + "__"];
+                       if(value){
+                               obj[attribute] = value;
+                       }
+               }
+               return obj;
+       },
+       _displayLocated: function(located){
+               // summary:
+               //              Stub function to be overridden in one of the dojox.help packages
+               throw new Error("_displayLocated should be overridden in one of the dojox.help packages");
+       },
+       _displayHelp: function(loading, obj){
+               // summary:
+               //              Stub function to be overridden in one of the dojox.help packages
+               throw new Error("_displayHelp should be overridden in one of the dojox.help packages");
+       },
+       _addVersion: function(obj){
+               if(obj.name){
+                       obj.version = [dojo.version.major, dojo.version.minor, dojo.version.patch].join(".");
+                       var parts = obj.name.split(".");
+                       if(parts[0] == "dojo" || parts[0] == "dijit" || parts[0] == "dojox"){
+                               obj.project = parts[0];
+                       }
+               }
+               return obj;
+       },
+       _stripPrototype: function(original){
+               var name = original.replace(/\.prototype(\.|$)/g, ".");
+               var search = name;
+               if(name.slice(-1) == "."){
+                       search = name = name.slice(0, -1);
+               }else{
+                       name = original;
+               }
+               return [search, name];
+       },
+       _help: function(){
+               var name = this.__name__;
+               var search = dojox.help._stripPrototype(name)[0];
+               var attributes = [];
+               for(var i = 0, attribute; attribute = dojox.help._attributes[i]; i++){
+                       if(!this["__" + attribute + "__"]){
+                               attributes.push(attribute);
+                       }
+               }
+
+               dojox.help._displayHelp(true, { name: this.__name__ });
+
+               if(!attributes.length || this.__searched__){
+                       dojox.help._displayHelp(false, dojox.help._clean(this));
+               }else{
+                       this.__searched__ = true;
+                       dojox.help._rpc.get(dojox.help._addVersion({
+                               name: search,
+                               exact: true,
+                               attributes: attributes
+                       })).addCallback(this, function(data){
+                               if(this.toString === dojox.help._toString){
+                                       this.toString(data);
+                               }
+                               if(data && data.length){
+                                       data = data[0];
+                                       for(var i = 0, attribute; attribute = dojox.help._attributes[i]; i++){
+                                               if(data[attribute]){
+                                                       this["__" + attribute + "__"] = data[attribute];
+                                               }
+                                       }
+                                       dojox.help._displayHelp(false, dojox.help._clean(this));
+                               }else{
+                                       dojox.help._displayHelp(false, false);
+                               }
+                       });
+               }
+               if(!+dojo.isFF){
+                       return "";
+               }
+       },
+       _parse: function(data){
+               delete this.__searching__;
+               if(data && data.length){
+                       var parameters = data[0].parameters;
+
+                       if(parameters){
+                               var signature = ["function ", this.__name__, "("];
+                               this.__parameters__ = parameters;
+                               for(var i = 0, parameter; parameter = parameters[i]; i++){
+                                       if(i){
+                                               signature.push(", ");
+                                       }
+                                       signature.push(parameter.name);
+                                       if(parameter.types){
+                                               var types = [];
+                                               for(var j = 0, type; type = parameter.types[j]; j++){
+                                                       types.push(type.title);
+                                               }
+                                               if(types.length){
+                                                       signature.push(": ");
+                                                       signature.push(types.join("|"));
+                                               }
+                                       }
+                                       if(parameter.repeating){
+                                               signature.push("...");
+                                       }
+                                       if(parameter.optional){
+                                               signature.push("?");
+                                       }
+                               }
+                               signature.push(")");
+
+                               this.__source__ = this.__source__.replace(/function[^\(]*\([^\)]*\)/, signature.join(""));
+                       }
+
+                       if(this.__output__){
+                               delete this.__output__;
+                               console.log(this);
+                       }
+               }else{
+                       dojox.help._displayHelp(false, false);
+               }
+       },
+       _toStrings: {},
+       _toString: function(data){
+               if(!this.__source__){
+                       return this.__name__;
+               }
+
+               var first = (!this.__parameters__);
+               this.__parameters__ = [];
+
+               if(data){
+                       dojox.help._parse.call(this, data);
+               }else if(first){
+                       this.__searching__ = true;
+                       dojox.help._toStrings[dojox.help._stripPrototype(this.__name__)[0]] = this;
+                       if(dojox.help._toStringTimer){
+                               clearTimeout(dojox.help._toStringTimer);
+                       }
+                       dojox.help._toStringTimer = setTimeout(function(){ dojox.help.__toString(); }, 50);
+               }
+
+               if(!first || !this.__searching__){
+                       return this.__source__;
+               }
+
+               var message = "function Loading info for " + this.__name__ + "... (watch console for result) {}";
+
+               if(!+dojo.isFF){
+                       this.__output__ = true;
+                       return message;
+               }
+
+               return {
+                       toString: dojo.hitch(this, function(){
+                               // Detect if this was called by Firebug
+                               this.__output__ = true;
+                               return message;
+                       })
+               };
+       },
+       __toString: function(){
+               if(dojox.help._toStringTimer){
+                       clearTimeout(dojox.help._toStringTimer);
+               }
+
+               var names = [];
+               dojox.help.noConflict(dojox.help._toStrings);
+               for(var name in dojox.help._toStrings){
+                       names.push(name);
+               }
+               while(names.length){
+                       dojox.help._rpc.batch(dojox.help._addVersion({
+                               names: names.splice(-50, 50),
+                               exact: true,
+                               attributes: ["parameters"]
+                       })).addCallback(this, function(datas){
+                               for(var i = 0, data; data = datas[i]; i++){
+                                       fn = dojox.help._toStrings[data.name];
+                                       if(fn){
+                                               dojox.help._parse.call(fn, [data]);
+                                               delete dojox.help._toStrings[data.name];
+                                       }
+                               }
+                       });
+               }
+       },
+       _overrides: [],
+       _recursions: [],
+       _names: {},
+       _recurse: function(/*String?*/ namespace, /*Boolean?*/ recursive){
+               if(arguments.length < 2){
+                       recursive = true;
+               }
+
+               var items = [];
+
+               if(namespace && dojo.isString(namespace)){
+                       dojox.help.__recurse(dojo.getObject(namespace), namespace, namespace, items, recursive);
+               }else{
+                       for(var i = 0, namespace; namespace = dojox.help._namespaces[i]; i++){
+                               if(window[namespace]){
+                                       dojox.help._recursions.push([window[namespace], namespace, namespace]);
+                                       window[namespace].__name__ = namespace;
+                                       if(!window[namespace].help){
+                                               window[namespace].help = dojox.help._help;
+                                       }
+                               }
+                       }
+               }
+
+               while(dojox.help._recursions.length){
+                       var recursion = dojox.help._recursions.shift();
+                       dojox.help.__recurse(recursion[0], recursion[1], recursion[2], items, recursive);
+               }
+
+               for(var i = 0, item; item = items[i]; i++){
+                       delete item.__seen__;
+               }
+       },
+       __recurse: function(namespace, root, name, items, recursive){
+               for(var key in namespace){
+                       if(key.match(/([^\w_.$]|__[\w_.$]+__)/)){
+                               continue;
+                       }
+
+                       var item = namespace[key];
+                       if(typeof item == "undefined"
+                               || item === document
+                               || item === window
+                               || item === dojox.help._toString
+                               || item === dojox.help._help
+                               || item === null
+                               || (+dojo.isIE && item.tagName)
+                               || item.__seen__
+                       ) {
+                               continue;
+                       }
+
+                       var isFunction = dojo.isFunction(item);
+                       var isObject = dojo.isObject(item) && !dojo.isArray(item) && !item.nodeType;
+
+                       var itemName = (name) ? (name + "." + key) : key;
+
+                       if(itemName == "dojo._blockAsync"){
+                               continue;
+                       }
+
+                       if(!item.__name__){
+                               var parent = null;
+                               if(dojo.isString(item)){
+                                       parent = String;
+                               }else if(typeof item == "number"){
+                                       parent = Number;
+                               }else if(typeof item == "boolean"){
+                                       parent = Boolean;
+                               }
+                               if(parent){
+                                       item = namespace[key] = new parent(item);
+                               }
+                       }
+
+                       item.__seen__ = true;
+                       item.__name__ = itemName;
+                       (dojox.help._names[root] = dojox.help._names[root] || []).push(itemName);
+                       items.push(item);
+                       if(!isFunction){
+                               dojox.help._overrides.push([namespace, key]);
+                       }
+
+                       if((isFunction || isObject) && recursive){
+                               dojox.help._recursions.push([item, root, itemName]);
+                       }
+
+                       if(isFunction){
+                               if(!item.__source__){
+                                       item.__source__ = item.toString().replace(/^function\b ?/, "function " + itemName);
+                               }
+                               if(item.toString === Function.prototype.toString){
+                                       item.toString = dojox.help._toString;
+                               }
+                       }
+
+                       if(!item.help){
+                               item.help = dojox.help._help;
+                       }
+               }
+       }
+};
+
+}