📄 docs.js
字号:
/* 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.docs");dojo.require("dojo.io.*");dojo.require("dojo.event.topic");dojo.require("dojo.rpc.JotService");dojo.require("dojo.dom");dojo.require("dojo.uri.Uri");dojo.require("dojo.Deferred");dojo.require("dojo.DeferredList");/* * TODO: * * Package summary needs to compensate for "is" * Handle host environments * Deal with dojo.widget weirdness * Parse parameters * Limit function parameters to only the valid ones (Involves packing parameters onto meta during rewriting) * */dojo.docs = new function() { this._url = dojo.uri.dojoUri("docscripts"); this._rpc = new dojo.rpc.JotService; this._rpc.serviceUrl = dojo.uri.dojoUri("docscripts/jsonrpc.php");};dojo.lang.mixin(dojo.docs, { _count: 0, _callbacks: {function_names: []}, _cache: {}, // Saves the JSON objects in cache require: function(/*String*/ require, /*bool*/ sync) { dojo.debug("require(): " + require); var parts = require.split("/"); var size = parts.length; var deferred = new dojo.Deferred; var args = { mimetype: "text/json", load: function(type, data){ dojo.debug("require(): loaded for " + require); if(parts[0] != "function_names") { for(var i = 0, part; part = parts[i]; i++){ data = data[part]; } } deferred.callback(data); }, error: function(){ deferred.errback(); } }; if(location.protocol == "file:"){ if(size){ if(parts[parts.length - 1] == "documentation"){ parts[parts.length - 1] = "meta"; } if(parts[0] == "function_names"){ args.url = [this._url, "local_json", "function_names"].join("/"); }else{ var dirs = parts[0].split("."); args.url = [this._url, "local_json", dirs[0]].join("/"); if(dirs.length > 1){ args.url = [args.url, dirs[1]].join("."); } } } } dojo.io.bind(args); return deferred; }, getFunctionNames: function(){ return this.require("function_names"); // dojo.Deferred }, unFormat: function(/*String*/ string){ var fString = string; if(string.charAt(string.length - 1) == "_"){ fString = [string.substring(0, string.length - 1), "*"].join(""); } return fString; }, getMeta: function(/*String*/ pkg, /*String*/ name, /*Function*/ callback, /*String?*/ id){ // summary: Gets information about a function in regards to its meta data if(typeof name == "function"){ // pId: a // pkg: ignore id = callback; callback = name; name = pkg; pkg = null; dojo.debug("getMeta(" + name + ")"); }else{ dojo.debug("getMeta(" + pkg + "/" + name + ")"); } if(!id){ id = "_"; } }, _withPkg: function(/*String*/ type, /*Object*/ data, /*Object*/ evt, /*Object*/ input, /*String*/ newType){ dojo.debug("_withPkg(" + evt.name + ") has package: " + data[0]); evt.pkg = data[0]; if("load" == type && evt.pkg){ evt.type = newType; }else{ if(evt.callbacks && evt.callbacks.length){ evt.callbacks.shift()("error", {}, evt, evt.input); } } }, _gotMeta: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){ dojo.debug("_gotMeta(" + evt.name + ")"); var cached = dojo.docs._getCache(evt.pkg, evt.name, "meta", "functions", evt.id); if(cached.summary){ data.summary = cached.summary; } if(evt.callbacks && evt.callbacks.length){ evt.callbacks.shift()(type, data, evt, evt.input); } }, getSrc: function(/*String*/ name, /*Function*/ callback, /*String?*/ id){ // summary: Gets src file (created by the doc parser) dojo.debug("getSrc(" + name + ")"); if(!id){ id = "_"; } }, getDoc: function(/*String*/ name, /*Function*/ callback, /*String?*/ id){ // summary: Gets external documentation stored on Jot for a given function dojo.debug("getDoc(" + name + ")"); if(!id){ id = "_"; } var input = {}; input.type = "doc"; input.name = name; input.callbacks = [callback]; }, _gotDoc: function(/*String*/ type, /*Array*/ data, /*Object*/ evt, /*Object*/ input){ dojo.debug("_gotDoc(" + evt.type + ")"); evt[evt.type] = data; if(evt.expects && evt.expects.doc){ for(var i = 0, expect; expect = evt.expects.doc[i]; i++){ if(!(expect in evt)){ dojo.debug("_gotDoc() waiting for more data"); return; } } } var cache = dojo.docs._getCache(evt.pkg, "meta", "functions", evt.name, evt.id, "meta"); var description = evt.fn.description; cache.description = description; data = { returns: evt.fn.returns, id: evt.id, variables: [] } if(!cache.parameters){ cache.parameters = {}; } for(var i = 0, param; param = evt.param[i]; i++){ var fName = param["DocParamForm/name"]; if(!cache.parameters[fName]){ cache.parameters[fName] = {}; } cache.parameters[fName].description = param["DocParamForm/desc"] } data.description = cache.description; data.parameters = cache.parameters; evt.type = "doc"; if(evt.callbacks && evt.callbacks.length){ evt.callbacks.shift()("load", data, evt, input); } }, getPkgDoc: function(/*String*/ name, /*Function*/ callback){ // summary: Gets external documentation stored on Jot for a given package dojo.debug("getPkgDoc(" + name + ")"); var input = {}; }, getPkgInfo: function(/*String*/ name, /*Function*/ callback){ // summary: Gets a combination of the metadata and external documentation for a given package dojo.debug("getPkgInfo(" + name + ")"); var input = { expects: { pkginfo: ["pkgmeta", "pkgdoc"] }, callback: callback }; dojo.docs.getPkgMeta(input, name, dojo.docs._getPkgInfo); dojo.docs.getPkgDoc(input, name, dojo.docs._getPkgInfo); }, _getPkgInfo: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){ dojo.debug("_getPkgInfo() for " + evt.type); var input = {}; var results = {}; if(typeof key == "object"){ input = key; input[evt.type] = data; if(input.expects && input.expects.pkginfo){ for(var i = 0, expect; expect = input.expects.pkginfo[i]; i++){ if(!(expect in input)){ dojo.debug("_getPkgInfo() waiting for more data"); return; } } } results = input.pkgmeta; results.description = input.pkgdoc; } if(input.callback){ input.callback("load", results, evt); } }, getInfo: function(/*String*/ name, /*Function*/ callback){ dojo.debug("getInfo(" + name + ")"); var input = { expects: { "info": ["meta", "doc"] }, callback: callback } dojo.docs.getMeta(input, name, dojo.docs._getInfo); dojo.docs.getDoc(input, name, dojo.docs._getInfo); }, _getInfo: function(/*String*/ type, /*String*/ data, /*Object*/ evt, /*Object*/ input){ dojo.debug("_getInfo(" + evt.type + ")"); if(input && input.expects && input.expects.info){ input[evt.type] = data; for(var i = 0, expect; expect = input.expects.info[i]; i++){ if(!(expect in input)){ dojo.debug("_getInfo() waiting for more data"); return; } } } if(input.callback){ input.callback("load", dojo.docs._getCache(evt.pkg, "meta", "functions", evt.name, evt.id, "meta"), evt, input); } }, _getMainText: function(/*String*/ text){ // summary: Grabs the innerHTML from a Jot Rech Text node dojo.debug("_getMainText()"); return text.replace(/^<html[^<]*>/, "").replace(/<\/html>$/, "").replace(/<\w+\s*\/>/g, ""); }, getPackageMeta: function(/*Object*/ input){ dojo.debug("getPackageMeta(): " + input.package); return this.require(input.package + "/meta", input.sync); }, getFunctionMeta: function(/*Object*/ input){ var package = input.package || ""; var name = input.name; var id = input.id || "_"; dojo.debug("getFunctionMeta(): " + name); if(!name) return; if(package){ return this.require(package + "/meta/functions/" + name + "/" + id + "/meta"); }else{ this.getFunctionNames(); } }, getFunctionDocumentation: function(/*Object*/ input){ var package = input.package || ""; var name = input.name; var id = input.id || "_"; dojo.debug("getFunctionDocumentation(): " + name); if(!name) return; if(package){ return this.require(package + "/meta/functions/" + name + "/" + id + "/documentation"); } }, _onDocSearch: function(/*Object*/ input){ var _this = this; var name = input.name.toLowerCase(); if(!name) return; this.getFunctionNames().addCallback(function(data){ dojo.debug("_onDocSearch(): function names loaded for " + name); var output = []; var list = []; var closure = function(pkg, fn) { return function(data){ dojo.debug("_onDocSearch(): package meta loaded for: " + pkg); if(data.functions){ var functions = data.functions; for(var key in functions){ if(fn == key){ var ids = functions[key]; for(var id in ids){ var fnMeta = ids[id]; output.push({ package: pkg, name: fn, id: id, summary: fnMeta.summary }); } } } } return output; } } pkgLoop: for(var pkg in data){ if(pkg.toLowerCase() == name){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -