blob: 05587784c914e2c4bfbb965b578b45fd236d02f0 [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.demoEngine.DemoNavigator");
dojo.require("dojo.widget.*");
dojo.require("dojo.widget.HtmlWidget");
dojo.require("dojo.widget.Button");
dojo.require("dojo.widget.demoEngine.DemoItem");
dojo.require("dojo.io.*");
dojo.require("dojo.lfx.*");
dojo.require("dojo.lang.common");
dojo.widget.defineWidget("my.widget.demoEngine.DemoNavigator",
dojo.widget.HtmlWidget,
{
templatePath: dojo.uri.dojoUri("src/widget/demoEngine/templates/DemoNavigator.html"),
templateCssPath: dojo.uri.dojoUri("src/widget/demoEngine/templates/DemoNavigator.css"),
postCreate: function() {
dojo.html.addClass(this.domNode,this.domNodeClass);
dojo.html.addClass(this.demoListWrapperNode,this.demoListWrapperClass);
dojo.html.addClass(this.demoListContainerNode,this.demoListContainerClass);
if (dojo.render.html.ie) {
dojo.debug("render ie");
dojo.html.hide(this.demoListWrapperNode);
} else {
dojo.debug("render non-ie");
dojo.lfx.html.fadeHide(this.demoListWrapperNode, 0).play();
}
this.getRegistry(this.demoRegistryUrl);
this.demoContainer = dojo.widget.createWidget("DemoContainer",{returnImage: this.returnImage},this.demoNode);
dojo.event.connect(this.demoContainer,"returnToDemos", this, "returnToDemos");
this.demoContainer.hide();
},
returnToDemos: function() {
this.demoContainer.hide();
if (dojo.render.html.ie) {
dojo.debug("render ie");
dojo.html.show(this.navigationContainer) ;
} else {
dojo.debug("render non-ie");
dojo.lfx.html.fadeShow(this.navigationContainer,250).play();
}
//if (dojo.render.html.ie) {
// dojo.html.setOpacity(this.navigationContainer);
//}
dojo.lang.forEach(this.categoriesChildren, dojo.lang.hitch(this, function(child){
child.checkSize();
}));
dojo.lang.forEach(this.demoListChildren, dojo.lang.hitch(this, function(child){
child.checkSize();
}));
},
show: function() {
//dojo.widget.demoEngine.DemoNavigator.superclass.show.call(this);
dojo.html.show(this.domNode);
dojo.html.setOpacity(this.domNode,1);
//dojo.html.setOpacity(this.navigationContainer);
//dojo.html.show(this.navigationContainer);
dojo.html.setOpacity(this.navigationContainer,1);
dojo.lang.forEach(this.categoriesChildren, dojo.lang.hitch(this, function(child){
child.checkSize();
}));
dojo.lang.forEach(this.demoListChildren, dojo.lang.hitch(this, function(child){
child.checkSize();
}));
},
getRegistry: function(url) {
dojo.io.bind({
url: url,
load: dojo.lang.hitch(this,this.processRegistry),
mimetype: "text/json"
});
},
processRegistry: function(type,registry,e) {
dojo.debug("Processing Registry");
this.registry = registry;
dojo.lang.forEach(this.registry.navigation, dojo.lang.hitch(this,this.addCategory));
},
addCategory: function(category) {
var newCat = dojo.widget.createWidget("Button",{caption: category.name});
if(!dojo.lang.isObject(this.registry.categories)) {
this.registry.categories=function(){};
}
this.registry.categories[category.name] = category;
this.categoriesChildren.push(newCat);
this.categoriesButtonsNode.appendChild(newCat.domNode);
newCat.domNode.categoryName = category.name;
dojo.event.connect(newCat,"onClick", this, "onSelectCategory");
},
addDemo: function(demoName) {
var demo = this.registry.definitions[demoName];
if (dojo.render.html.ie) {
dojo.html.show(this.demoListWrapperNode)
} else {
dojo.lfx.html.fadeShow(this.demoListWrapperNode, 250).play();
}
var newDemo = dojo.widget.createWidget("DemoItem",{viewDemoImage: this.viewDemoImage, name: demoName, description: demo.description, thumbnail: demo.thumbnail});
this.demoListChildren.push(newDemo);
this.demoListContainerNode.appendChild(newDemo.domNode);
dojo.event.connect(newDemo,"onSelectDemo",this,"onSelectDemo");
},
onSelectCategory: function(e) {
catName = e.currentTarget.categoryName;
dojo.debug("Selected Category: " + catName);
//Remove current list of demos
dojo.lang.forEach(this.demoListChildren, function(child) {
child.destroy();
});
this.demoListChildren=[];
//add demos from this cat
dojo.lang.forEach(this.registry.categories[catName].demos, dojo.lang.hitch(this,function(demoName){
this.addDemo(demoName);
}));
},
onSelectDemo: function(e) {
//Attach to this to do something when a demo is selected
dojo.debug("Demo Selected: " + e.target.name);
if (dojo.render.html.ie) {
dojo.debug("render ie");
dojo.html.hide(this.navigationContainer) ;
this.demoContainer.show();
this.demoContainer.showDemo();
} else {
dojo.debug("render non-ie");
dojo.lfx.html.fadeHide(this.navigationContainer,250,null,dojo.lang.hitch(this, function() {
this.demoContainer.show();
this.demoContainer.showDemo();
})).play();
}
this.demoContainer.loadDemo(this.registry.definitions[e.target.name].url);
this.demoContainer.setName(e.target.name);
this.demoContainer.setSummary(this.registry.definitions[e.target.name].description);
}
},
"",
function() {
this.demoRegistryUrl="demoRegistry.json";
this.registry=function(){};
this.categoriesNode="";
this.categoriesButtonsNode="";
this.navigationContainer="";
this.domNodeClass="demoNavigator";
this.demoNode="";
this.demoContainer="";
this.demoListWrapperNode="";
this.demoListWrapperClass="demoNavigatorListWrapper";
this.demoListContainerClass="demoNavigatorListContainer";
this.returnImage="images/dojoDemos.gif";
this.viewDemoImage="images/viewDemo.png";
this.demoListChildren = [];
this.categoriesChildren = [];
}
);