| /* |
| 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.widget.DocPane"); |
| |
| dojo.require("dojo.widget.*"); |
| dojo.require("dojo.io.*"); |
| dojo.require("dojo.event.*"); |
| dojo.require("dojo.widget.HtmlWidget"); |
| dojo.require("dojo.widget.Editor2"); |
| dojo.require("dojo.widget.Dialog"); |
| |
| dojo.require("dojo.html.common"); |
| dojo.require("dojo.html.display"); |
| |
| dojo.widget.DocPane = function(){ |
| dojo.event.topic.subscribe("/docs/function/results", this, "onDocResults"); |
| dojo.event.topic.subscribe("/docs/package/results", this, "onPkgResults"); |
| dojo.event.topic.subscribe("/docs/function/detail", this, "onDocSelectFunction"); |
| } |
| |
| dojo.widget.defineWidget( |
| "dojo.widget.DocPane", |
| dojo.widget.HtmlWidget, |
| { |
| // summary |
| // This widget is used by the API documentation system; |
| // Users aren't expected to use this widget directly. |
| |
| // Template parameters |
| dialog: null, |
| dialogBg: null, |
| dialogFg: null, |
| logIn: null, |
| edit: null, |
| save: null, |
| cancel: null, |
| detail: null, |
| result: null, |
| packag: null, |
| fn: null, |
| fnLink: null, |
| count: null, |
| row: null, |
| summary: null, |
| description: null, |
| variables: null, |
| vRow: null, |
| vLink: null, |
| vDesc: null, |
| methods: null, |
| mRow: null, |
| mLink: null, |
| mDesc: null, |
| requires: null, |
| rRow: null, |
| rRow2: null, |
| rH3: null, |
| rLink: null, |
| parameters: null, |
| pRow: null, |
| pLink: null, |
| pDesc: null, |
| pOpt: null, |
| pType: null, |
| sType: null, |
| sName: null, |
| sParams: null, |
| sPType: null, |
| sPTypeSave: null, |
| sPName: null, |
| sPNameSave: null, |
| pkgDescription: null, |
| |
| // Fields and methods |
| _appends: [], |
| templatePath: dojo.uri.dojoUri("src/widget/templates/DocPane.html"), |
| templateCssPath: dojo.uri.dojoUri("src/widget/templates/DocPane.css"), |
| isContainer: true, |
| fillInTemplate: function(){ |
| this.requires = dojo.html.removeNode(this.requires); |
| this.rRow.style.display = "none"; |
| this.rRow2.style.display = "none"; |
| |
| this.methods = dojo.html.removeNode(this.methods); |
| this.mRow.style.display = "none"; |
| |
| this.dialog = dojo.widget.createWidget("dialog", {}, this.dialog); |
| this.dialog.setCloseControl(this.cancel); |
| dojo.html.setOpacity(this.dialogBg, 0.8); |
| dojo.html.setOpacity(this.dialogFg, 1); |
| |
| dojo.event.connect(this.edit, "onclick", dojo.lang.hitch(this, function(){ |
| if(!this._isLoggedIn){ |
| this.dialog.show(); |
| } |
| })); |
| dojo.event.connect(this.logIn, "onclick", this, "_logIn"); |
| dojo.event.connect(this.save, "onclick", this, "_save"); |
| dojo.event.connect(dojo.docs, "logInSuccess", this, "_loggedIn"); |
| |
| /* |
| this.pkgDescription = dojo.widget.createWidget("editor2", { |
| toolbarAlwaysVisible: true |
| }, this.pkgDescription); |
| */ |
| |
| this.homeSave = this.containerNode.cloneNode(true); |
| this.detailSave = dojo.html.removeNode(this.detail); |
| this.resultSave = dojo.html.removeNode(this.result); |
| this.packageSave = dojo.html.removeNode(this.packag); |
| this.results = dojo.html.removeNode(this.results); |
| this.rowParent = this.row.parentNode; |
| this.rowSave = dojo.html.removeNode(this.row); |
| this.vParent = this.vRow.parentNode; |
| this.vSave = dojo.html.removeNode(this.vRow); |
| this.pParent = this.pRow.parentNode; |
| this.pSave = dojo.html.removeNode(this.pRow); |
| this.sPTypeSave = dojo.html.removeNode(this.sPType); |
| this.sPNameSave = dojo.html.removeNode(this.sPName); |
| this.navSave = dojo.html.removeNode(this.nav); |
| }, |
| |
| _logIn: function(){ |
| dojo.docs.setUserName(this.userName.value); |
| dojo.docs.setPassword(this.password.value); |
| }, |
| |
| _loggedIn: function(){ |
| this._isLoggedIn = true; |
| this.dialog.hide(); |
| this.pkgEditor = dojo.widget.createWidget("editor2", { |
| toolbarAlwaysVisible: true |
| }, this.pkgDescription); |
| }, |
| |
| _save: function(){ |
| if(this.pkgEditor){ |
| dojo.docs.savePackage(this._pkgPath, { |
| description: this.pkgEditor.getEditorContent() |
| }); |
| } |
| }, |
| |
| onDocSelectFunction: function(message){ |
| dojo.debug("onDocSelectFunction()"); |
| for(var key in message){ |
| dojo.debug(key + ": " + dojo.json.serialize(message[key])); |
| } |
| var meta = message.meta; |
| if(meta){ |
| var variables = meta.variables; |
| var this_variables = meta.this_variables; |
| var child_variables = meta.child_variables; |
| var parameters = meta.parameters; |
| } |
| var doc = message.doc; |
| dojo.debug(dojo.json.serialize(doc)); |
| |
| var appends = this._appends; |
| dojo.html.removeChildren(this.domNode); |
| this.fn.innerHTML = message.name; |
| |
| this.variables.style.display = "block"; |
| var all = []; |
| if(variables){ |
| all = variables; |
| } |
| if(this_variables){ |
| all = all.concat(this_variables); |
| } |
| if(child_variables){ |
| all = all.concat(child_variables); |
| } |
| if(!all.length){ |
| this.variables.style.display = "none"; |
| }else{ |
| for(var i = 0, one; one = all[i]; i++){ |
| this.vLink.innerHTML = one; |
| this.vDesc.parentNode.style.display = "none"; |
| appends.push(this.vParent.appendChild(this.vSave.cloneNode(true))); |
| } |
| } |
| |
| this.sParams.innerHTML = ""; |
| var first = true; |
| for(var param in parameters){ |
| var paramType = parameters[param].type; |
| var paramSummary = parameters[param].summary; |
| var paramName = param; |
| this.parameters.style.display = "block"; |
| this.pLink.innerHTML = paramName; |
| this.pOpt.style.display = "none"; |
| if(parameters[param].opt){ |
| this.pOpt.style.display = "inline"; |
| } |
| this.pType.parentNode.style.display = "none"; |
| if(parameters[param][0]){ |
| this.pType.parentNode.style.display = "inline"; |
| this.pType.innerHTML = paramType; |
| } |
| this.pDesc.parentNode.style.display = "none"; |
| if(paramSummary){ |
| this.pDesc.parentNode.style.display = "inline"; |
| this.pDesc.innerHTML = paramSummary; |
| } |
| appends.push(this.pParent.appendChild(this.pSave.cloneNode(true))); |
| |
| if(!first) { |
| this.sParams.appendChild(document.createTextNode(", ")); |
| } |
| first = false; |
| if(paramType){ |
| dojo.debug(this.sPTypeSave); |
| this.sPTypeSave.innerHTML = paramType; |
| this.sParams.appendChild(this.sPTypeSave.cloneNode(true)); |
| this.sParams.appendChild(document.createTextNode(" ")); |
| } |
| dojo.debug(this.sPNameSave); |
| this.sPNameSave.innerHTML = paramName; |
| this.sParams.appendChild(this.sPNameSave.cloneNode(true)) |
| } |
| |
| if(message.returns){ |
| this.sType.innerHTML = message.returns; |
| }else{ |
| this.sType.innerHTML = "void"; |
| } |
| |
| this.sName.innerHTML = message.name; |
| |
| this.domNode.appendChild(this.navSave); |
| this.domNode.appendChild(this.detailSave.cloneNode(true)); |
| |
| for(var i = 0, append; append = appends[i]; i++){ |
| dojo.html.removeNode(append); |
| } |
| }, |
| |
| onPkgResult: function(/*Object*/ results){ |
| if(this.pkgEditor){ |
| this.pkgEditor.close(true); |
| dojo.debug(this.pkgDescription); |
| } |
| var methods = results.methods; |
| var requires = results.requires; |
| var description = results.description; |
| this._pkgPath = results.path; |
| var requireLinks = []; |
| var appends = this._appends; |
| while(appends.length){ |
| dojo.html.removeNode(appends.shift()); |
| } |
| |
| dojo.html.removeChildren(this.domNode); |
| |
| this.pkg.innerHTML = results.pkg; |
| |
| var hasRequires = false; |
| for(var env in requires){ |
| hasRequires = true; |
| |
| this.rH3.style.display = "none"; |
| if(env != "common"){ |
| this.rH3.style.display = ""; |
| this.rH3.innerHTML = env; |
| } |
| |
| for(var i = 0, require; require = requires[env][i]; i++){ |
| requireLinks.push({ |
| name: require |
| }); |
| this.rLink.innerHTML = require; |
| this.rLink.href = "#" + require; |
| var rRow2 = this.rRow2.parentNode.insertBefore(this.rRow2.cloneNode(true), this.rRow2); |
| rRow2.style.display = ""; |
| appends.push(rRow2); |
| } |
| var rRow = this.rRow.parentNode.insertBefore(this.rRow.cloneNode(true), this.rRow); |
| rRow.style.display = ""; |
| appends.push(rRow); |
| } |
| |
| if(hasRequires){ |
| appends.push(this.packageSave.appendChild(this.requires.cloneNode(true))); |
| } |
| |
| if(results.size){ |
| for(var i = 0, method; method = methods[i]; i++){ |
| this.mLink.innerHTML = method.name; |
| this.mLink.href = "#" + method.name; |
| this.mDesc.parentNode.style.display = "none"; |
| if(method.summary){ |
| this.mDesc.parentNode.style.display = "inline"; |
| this.mDesc.innerHTML = method.summary; |
| } |
| var mRow = this.mRow.parentNode.insertBefore(this.mRow.cloneNode(true), this.mRow); |
| mRow.style.display = ""; |
| appends.push(mRow); |
| } |
| appends.push(this.packageSave.appendChild(this.methods.cloneNode(true))); |
| } |
| |
| this.domNode.appendChild(this.packageSave); |
| |
| /* |
| dojo.debug(description); |
| function fillContent(){ |
| this.pkgDescription.replaceEditorContent(description); |
| this.pkgDescription._updateHeight(); |
| } |
| if(this.pkgDescription.isLoaded){ |
| fillContent(); |
| }else{ |
| dojo.event.connect(this.pkgDescription, "onLoad", dojo.lang.hitch(this, fillContent)); |
| } |
| */ |
| this.pkgDescription.innerHTML = description; |
| |
| function makeSelect(fOrP, x){ |
| return function(e) { |
| dojo.event.topic.publish("/docs/" + fOrP + "/select", x); |
| } |
| } |
| |
| var as = this.domNode.getElementsByTagName("a"); |
| for(var i = 0, a; a = as[i]; i++){ |
| if(a.className == "docMLink"){ |
| dojo.event.connect(a, "onclick", makeSelect("function", methods[i])); |
| }else if(a.className == "docRLink"){ |
| dojo.event.connect(a, "onclick", makeSelect("package", requireLinks[i])); |
| } |
| } |
| }, |
| |
| onDocResults: function(fns){ |
| dojo.debug("onDocResults(): called"); |
| |
| if(fns.length == 1){ |
| dojo.event.topic.publish("/docs/function/select", fns[0]); |
| return; |
| } |
| |
| dojo.html.removeChildren(this.domNode); |
| |
| this.count.innerHTML = fns.length; |
| var appends = []; |
| for(var i = 0, fn; fn = fns[i]; i++){ |
| this.fnLink.innerHTML = fn.name; |
| this.fnLink.href = "#" + fn.name; |
| if(fn.id){ |
| this.fnLink.href = this.fnLink.href + "," + fn.id; |
| } |
| this.summary.parentNode.style.display = "none"; |
| if(fn.summary){ |
| this.summary.parentNode.style.display = "inline"; |
| this.summary.innerHTML = fn.summary; |
| } |
| appends.push(this.rowParent.appendChild(this.rowSave.cloneNode(true))); |
| } |
| |
| function makeSelect(x){ |
| return function(e) { |
| dojo.event.topic.publish("/docs/function/select", x); |
| } |
| } |
| |
| this.domNode.appendChild(this.resultSave.cloneNode(true)); |
| var as = this.domNode.getElementsByTagName("a"); |
| for(var i = 0, a; a = as[i]; i++){ |
| dojo.event.connect(a, "onclick", makeSelect(fns[i])); |
| } |
| |
| for(var i = 0, append; append = appends[i]; i++){ |
| this.rowParent.removeChild(append); |
| } |
| } |
| } |
| ); |