[Dojo-checkins] r811 - src/webui/widgets
dojo-checkins at dojotoolkit.org
dojo-checkins at dojotoolkit.org
Wed Jun 29 16:22:44 PDT 2005
Author: david
Date: Wed Jun 29 16:22:43 2005
New Revision: 811
Added:
src/webui/widgets/Tabs.js
Modified:
src/webui/widgets/DropdownButtons.js
Log:
cleaned up dd buttons, added initial tabs (needs work)
Modified: src/webui/widgets/DropdownButtons.js
==============================================================================
--- src/webui/widgets/DropdownButtons.js (original)
+++ src/webui/widgets/DropdownButtons.js Wed Jun 29 16:22:43 2005
@@ -11,7 +11,6 @@
dojo.hostenv.loadModule("dojo.webui.DomWidget");
dojo.hostenv.loadModule("dojo.webui.WidgetManager");
dojo.hostenv.loadModule("dojo.graphics.*");
-dojo.hostenv.loadModule("dojo.graphics.htmlEffects");
dojo.webui.widgets.HTMLDropdownButtons = function() {
Added: src/webui/widgets/Tabs.js
==============================================================================
--- (empty file)
+++ src/webui/widgets/Tabs.js Wed Jun 29 16:22:43 2005
@@ -0,0 +1,158 @@
+/* Example markup:
+
+<ul dojoType="tabs">
+ <li><a href="/tab1">Tab 1</a></li>
+ <li><a href="/tab2">Tab 2</a></li>
+ <li><a href="/tab3">Tab 3</a></li>
+ <li><a href="/tab4">Tab 4</a></li>
+ <li><a href="#info">More Info</a></li>
+</ul>
+*/
+
+dojo.hostenv.startPackage("dojo.webui.widgets.Tabs");
+dojo.hostenv.startPackage("dojo.webui.widgets.HTMLTabs");
+
+dojo.hostenv.loadModule("dojo.xml.*"); // FIXME: Shouldn't need to include
+dojo.hostenv.loadModule("dojo.io.*");
+dojo.hostenv.loadModule("dojo.webui.DomWidget");
+dojo.hostenv.loadModule("dojo.webui.widgets.Parse");
+dojo.hostenv.loadModule("dojo.webui.WidgetManager");
+dojo.hostenv.loadModule("dojo.graphics.*");
+
+dojo.webui.widgets.HTMLTabs = function() {
+ dojo.webui.Widget.call(this);
+ dojo.webui.DomWidget.call(this, true);
+ dojo.webui.HTMLWidget.call(this);
+
+ this.widgetType = "Tabs";
+ this.templatePath = null; // prolly not
+ this.templateCSSPath = null; // maybe
+
+ this.domNode = null;
+ this.panelContainer = null;
+
+ this.tabs = [];
+ this.panels = [];
+ this.selected = -1;
+
+ this.buildRendering = function(args, frag) {
+ this.domNode = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
+ if(!this.domNode) { dj_error("HTMLTabs: No node reference"); }
+
+ this.panelContainer = document.createElement("div");
+ this.panelContainer.className = "dojoTabPanelContainer";
+ var next = this.domNode.nextSibling;
+ if(next) {
+ this.domNode.parentNode.insertBefore(this.panelContainer, next);
+ } else {
+ this.domNode.parentNode.appendChild(this.panelContainer);
+ }
+
+ var li = dojo.xml.domUtil.getFirstChildTag(this.domNode);
+ while(li) {
+ var a = li.getElementsByTagName("a").item(0);
+ this.addTab(a);
+ li = dojo.xml.domUtil.getNextSiblingTag(li);
+ }
+
+ if(this.selected == -1) { this.selected = 0; }
+ this.selectTab(null, this.tabs[this.selected]);
+ }
+
+ this.addTab = function(title, url) {
+ if(title && title.tagName && title.tagName.toLowerCase() == "a") {
+ // init case
+ var a = title;
+ var li = a.parentNode;
+ title = a.innerHTML;
+ url = a.getAttribute("href");
+ } else {
+ // programmatically adding
+ var li = document.createElement("li");
+ var a = document.createElement("a");
+ a.innerHTML = title;
+ a.href = url;
+ li.appendChild(a);
+ this.domNode.appendChild(li);
+ }
+
+ dojo.event.connect(a, "onclick", this, "selectTab");
+
+ this.tabs.push(li);
+ var panel = {url: url, loaded: false, id: url.charAt(0) == "#" ? url.substring(1) : null};
+ this.panels.push(panel);
+ if(panel.id) { this.getPanel(panel); }
+
+ if(this.selected == -1 && dojo.xml.htmlUtil.hasClass(li, "current")) {
+ this.selected = this.tabs.length-1;
+ }
+ }
+
+ this.selectTab = function(e, target) {
+ if(e) {
+ if(e.target) {
+ target = e.target;
+ while(target && (target.tagName||"").toLowerCase() != "li") {
+ target = target.parentNode;
+ }
+ }
+ if(e.preventDefault) { e.preventDefault(); }
+ }
+
+ dojo.xml.htmlUtil.removeClass(this.tabs[this.selected], "current");
+
+ for(var i = 0; i < this.tabs.length; i++) {
+ if(this.tabs[i] == target) {
+ dojo.xml.htmlUtil.addClass(this.tabs[i], "current");
+ this.selected = i;
+ break;
+ }
+ }
+
+ var panel = this.panels[this.selected];
+ if(panel) {
+ this.getPanel(panel);
+ this.hidePanels(panel);
+ document.getElementById(panel.id).style.display = "";
+ }
+ }
+
+ this.getPanel = function(panel) {
+ if(!panel || panel.loaded) { return; }
+
+ if(panel.id) {
+ var id = panel.id;
+ var node = document.getElementById(id);
+ } else {
+ var id = dojo.xml.domUtil.getUniqueId();
+ var node = document.createElement("div");
+ node.innerHTML = "Loading...";
+ node.id = id;
+
+ dojo.io.bind({
+ url: panel.url,
+ mimetype: "text/html",
+ handler: function(type, data, e) {
+ document.getElementById(id).innerHTML = data;
+ }
+ });
+ }
+
+ this.panelContainer.appendChild(node);
+ panel.id = node.id;
+ panel.loaded = true;
+ }
+
+ this.hidePanels = function(except) {
+ for(var i = 0; i < this.panels.length; i++) {
+ if(this.panels[i] != except && this.panels[i].id) {
+ var p = document.getElementById(this.panels[i].id);
+ if(p) {
+ p.style.display = "none";
+ }
+ }
+ }
+ }
+}
+dj_inherits(dojo.webui.widgets.HTMLTabs, dojo.webui.DomWidget);
+dojo.webui.widgets.tags.addParseTreeHandler("dojo:tabs");
More information about the Dojo-checkins
mailing list