📄 doc.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.doc");dojo.require("dojo.io.*");dojo.require("dojo.event.topic");dojo.require("dojo.rpc.JotService");dojo.require("dojo.dom");/* * 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) * Package display page * */dojo.doc._count = 0;dojo.doc._keys = {};dojo.doc._myKeys = [];dojo.doc._callbacks = {function_names: []};dojo.doc._cache = {}; // Saves the JSON objects in cachedojo.doc._rpc = new dojo.rpc.JotService;dojo.doc._rpc.serviceUrl = "http://dojotoolkit.org/~pottedmeat/jsonrpc.php";dojo.lang.mixin(dojo.doc, { functionNames: function(/*mixed*/ selectKey, /*Function*/ callback){ // summary: Returns an ordered list of package and function names. dojo.debug("functionNames()"); if(!selectKey){ selectKey = ++dojo.doc._count; } dojo.doc._buildCache({ type: "function_names", callbacks: [dojo.doc._functionNames, callback], selectKey: selectKey }); }, _functionNames: function(/*String*/ type, /*Array*/ data, /*Object*/ evt){ dojo.debug("_functionNames()"); var searchData = []; for(var key in data){ // Add the package if it doesn't exist in its children if(!dojo.lang.inArray(data[key], key)){ searchData.push([key, key]); } // Add the functions for(var pkg_key in data[key]){ searchData.push([data[key][pkg_key], data[key][pkg_key]]); } } searchData = searchData.sort(dojo.doc._sort); if(evt.callbacks && evt.callbacks.length){ var callback = evt.callbacks.shift(); callback.call(null, type, searchData, evt); } }, getMeta: function(/*mixed*/ selectKey, /*Function*/ callback, /*Function*/ name, /*String?*/ id){ // summary: Gets information about a function in regards to its meta data dojo.debug("getMeta(" + name + ")"); if(!selectKey){ selectKey = ++dojo.doc._count; } dojo.doc._buildCache({ type: "meta", callbacks: [callback], name: name, id: id, selectKey: selectKey }); }, _getMeta: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){ dojo.debug("_getMeta(" + evt.name + ") has package: " + evt.pkg + " with: " + type); if("load" == type && evt.pkg){ evt.type = "meta"; dojo.doc._buildCache(evt); }else{ if(evt.callbacks && evt.callbacks.length){ var callback = evt.callbacks.shift(); callback.call(null, "error", {}, evt); } } }, getSrc: function(/*mixed*/ selectKey, /*Function*/ callback, /*String*/ name, /*String?*/ id){ // summary: Gets src file (created by the doc parser) dojo.debug("getSrc()"); if(!selectKey){ selectKey = ++dojo.doc._count; } dojo.doc._buildCache({ type: "src", callbacks: [callback], name: name, id: id, selectKey: selectKey }); }, _getSrc: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){ dojo.debug("_getSrc()"); if(evt.pkg){ evt.type = "src"; dojo.doc._buildCache(evt); }else{ if(evt.callbacks && evt.callbacks.length){ var callback = evt.callbacks.shift(); callback.call(null, "error", {}, evt); } } }, getDoc: function(/*mixed*/ selectKey, /*Function*/ callback, /*String*/ name, /*String?*/ id){ // summary: Gets external documentation stored on jot dojo.debug("getDoc()"); if(!selectKey){ selectKey = ++dojo.doc._count; } var input = { type: "doc", callbacks: [callback], name: name, id: id, selectKey: selectKey } dojo.doc.functionPackage(dojo.doc._getDoc, input); }, _getDoc: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){ dojo.debug("_getDoc(" + evt.pkg + "/" + evt.name + ")"); dojo.doc._keys[evt.selectKey] = {count: 0}; var search = {}; search.forFormName = "DocFnForm"; search.limit = 1; if(!evt.id){ search.filter = "it/DocFnForm/require = '" + evt.pkg + "' and it/DocFnForm/name = '" + evt.name + "' and not(it/DocFnForm/id)"; }else{ search.filter = "it/DocFnForm/require = '" + evt.pkg + "' and it/DocFnForm/name = '" + evt.name + "' and it/DocFnForm/id = '" + evt.id + "'"; } dojo.debug(dojo.json.serialize(search)); dojo.doc._rpc.callRemote("search", search).addCallbacks(function(data){ evt.type = "fn"; dojo.doc._gotDoc("load", data.list[0], evt); }, function(data){ evt.type = "fn"; dojo.doc._gotDoc("error", {}, evt); }); search.forFormName = "DocParamForm"; if(!evt.id){ search.filter = "it/DocParamForm/fns = '" + evt.pkg + "=>" + evt.name + "'"; }else{ search.filter = "it/DocParamForm/fns = '" + evt.pkg + "=>" + evt.name + "=>" + evt.id + "'"; } delete search.limit; dojo.doc._rpc.callRemote("search", search).addCallbacks(function(data){ evt.type = "param"; dojo.doc._gotDoc("load", data.list, evt); }, function(data){ evt.type = "param"; dojo.doc._gotDoc("error", {}, evt); }); }, _gotDoc: function(/*String*/ type, /*Array*/ data, /*Object*/ evt){ dojo.debug("_gotDoc(" + evt.type + ") for " + evt.selectKey); dojo.doc._keys[evt.selectKey][evt.type] = data; if(++dojo.doc._keys[evt.selectKey].count == 2){ dojo.debug("_gotDoc() finished"); var keys = dojo.doc._keys[evt.selectKey]; var description = ''; if(!keys.fn){ keys.fn = {} } if(keys.fn["main/text"]){ description = dojo.dom.createDocumentFromText(keys.fn["main/text"]).childNodes[0].innerHTML; if(!description){ description = keys.fn["main/text"]; } } data = { description: description, returns: keys.fn["DocFnForm/returns"], id: keys.fn["DocFnForm/id"], parameters: {}, variables: [] } for(var i = 0, param; param = keys["param"][i]; i++){ data.parameters[param["DocParamForm/name"]] = { description: param["DocParamForm/desc"] }; } delete dojo.doc._keys[evt.selectKey]; if(evt.callbacks && evt.callbacks.length){ var callback = evt.callbacks.shift(); callback.call(null, "load", data, evt); } } }, getPkgMeta: function(/*mixed*/ selectKey, /*Function*/ callback, /*String*/ name){ dojo.debug("getPkgMeta(" + name + ")"); if(!selectKey){ selectKey = ++dojo.doc._count; } dojo.doc._buildCache({ type: "pkgmeta", callbacks: [callback], name: name, selectKey: selectKey }); }, _getPkgMeta: function(/*Object*/ input){ dojo.debug("_getPkgMeta(" + input.name + ")"); input.type = "pkgmeta"; dojo.doc._buildCache(input); }, _onDocSearch: function(/*Object*/ input){ dojo.debug("_onDocSearch(" + input.name + ")"); if(!input.name){ return; } if(!input.selectKey){ input.selectKey = ++dojo.doc._count; } input.callbacks = [dojo.doc._onDocSearchFn]; input.name = input.name.toLowerCase(); input.type = "function_names"; dojo.doc._buildCache(input); }, _onDocSearchFn: function(/*String*/ type, /*Array*/ data, /*Object*/ evt){ dojo.debug("_onDocSearchFn(" + evt.name + ")"); var packages = []; var size = 0; pkgLoop: for(var pkg in data){ for(var i = 0, fn; fn = data[pkg][i]; i++){ if(fn.toLowerCase().indexOf(evt.name) != -1){ // Build a list of all packages that need to be loaded and their loaded state. ++size; packages.push(pkg); continue pkgLoop; } } } dojo.doc._keys[evt.selectKey] = {}; dojo.doc._keys[evt.selectKey].pkgs = packages; dojo.doc._keys[evt.selectKey].pkg = evt.name; // Remember what we were searching for dojo.doc._keys[evt.selectKey].loaded = 0; for(var i = 0, pkg; pkg = packages[i]; i++){ setTimeout("dojo.doc.getPkgMeta(\"" + evt.selectKey + "\", dojo.doc._onDocResults, \"" + pkg + "\");", i*10); } }, _onDocResults: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){ dojo.debug("_onDocResults(" + evt.name + "/" + dojo.doc._keys[evt.selectKey].pkg + ") " + type); ++dojo.doc._keys[evt.selectKey].loaded; if(dojo.doc._keys[evt.selectKey].loaded == dojo.doc._keys[evt.selectKey].pkgs.length){ var info = dojo.doc._keys[evt.selectKey]; var pkgs = info.pkgs; var name = info.pkg; delete dojo.doc._keys[evt.selectKey]; var results = {selectKey: evt.selectKey, docResults: []}; data = dojo.doc._cache; for(var i = 0, pkg; pkg = pkgs[i]; i++){ if(!data[pkg]){ continue; } for(var fn in data[pkg]["meta"]){ if(fn.toLowerCase().indexOf(name) == -1){ continue; } if(fn != "requires"){ for(var pId in data[pkg]["meta"][fn]){ var result = { pkg: pkg, name: fn, summary: "" } if(data[pkg]["meta"][fn][pId].summary){ result.summary = data[pkg]["meta"][fn][pId].summary; } results.docResults.push(result); } } } } dojo.debug("Publishing docResults"); dojo.doc._printResults(results); } },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -