blob: a9a4683492e0f8ee27c7596dbd00441c1479c248 [file] [log] [blame]
/*
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);
}
}
}
);