diff options
author | mensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2008-11-13 09:49:11 +0000 |
---|---|---|
committer | mensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2008-11-13 09:49:11 +0000 |
commit | e44a7e37b6c7b5961adaffc62b9042b8d442938e (patch) | |
tree | 95b67c356e93163467db2451f2b8cce84ed5d582 /includes/js/dojox/help/_base.js | |
parent | a62b9742ee5e28bcec6872d88f50f25b820914f6 (diff) | |
download | semanticscuttle-e44a7e37b6c7b5961adaffc62b9042b8d442938e.tar.gz semanticscuttle-e44a7e37b6c7b5961adaffc62b9042b8d442938e.tar.bz2 |
New feature: basic Ajax suggestion for tags and implementation of Dojo toolkit
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@151 b3834d28-1941-0410-a4f8-b48e95affb8f
Diffstat (limited to 'includes/js/dojox/help/_base.js')
-rw-r--r-- | includes/js/dojox/help/_base.js | 473 |
1 files changed, 473 insertions, 0 deletions
diff --git a/includes/js/dojox/help/_base.js b/includes/js/dojox/help/_base.js new file mode 100644 index 0000000..109f3ca --- /dev/null +++ b/includes/js/dojox/help/_base.js @@ -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; + } + } + } +}; + +} |