vitro/webapp/web/src/widget/PopUpButton.js

192 lines
5 KiB
JavaScript

/*
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.PopUpButton");
dojo.provide("dojo.widget.DomPopUpButton");
dojo.provide("dojo.widget.HtmlPopUpButton");
dojo.deprecated("dojo.widget.PopUpButton, dojo.widget.DomPopUpButton, dojo.widget.HtmlPopUpButton", "use dojo.widget.DropDownButton", "0.4");
//dojo.require("dojo.widget.Button");
//dojo.require("dojo.widget.HtmlButton");
dojo.require("dojo.widget.Menu");
dojo.require("dojo.widget.MenuItem");
dojo.require("dojo.html");
dojo.widget.tags.addParseTreeHandler("dojo:PopUpButton");
/* PopUpButton
**************/
dojo.widget.PopUpButton = function () {
dojo.widget.PopUpButton.superclass.constructor.call(this);
}
dojo.inherits(dojo.widget.PopUpButton, dojo.widget.Widget);
dojo.lang.extend(dojo.widget.PopUpButton, {
widgetType: "PopUpButton",
label: ""
});
/* DomPopUpButton
*****************/
dojo.widget.DomPopUpButton = function(){
dojo.widget.DomPopUpButton.superclass.constructor.call(this);
}
dojo.inherits(dojo.widget.DomPopUpButton, dojo.widget.DomWidget);
dojo.lang.extend(dojo.widget.DomPopUpButton, {
widgetType: dojo.widget.PopUpButton.prototype.widgetType
});
/* HtmlPopUpButton
******************/
dojo.widget.HtmlPopUpButton = function () {
dojo.widget.HtmlPopUpButton.superclass.constructor.call(this);
}
dojo.inherits(dojo.widget.HtmlPopUpButton, dojo.widget.HtmlWidget);
dojo.lang.extend(dojo.widget.HtmlPopUpButton, {
widgetType: dojo.widget.PopUpButton.prototype.widgetType,
templateString: null,
templateCssPath: dojo.uri.dojoUri("src/widget/templates/PopUpButton.css"),
buildRendering: function (args, frag) {
dojo.style.insertCssFile(this.templateCssPath, null, true);
this.domNode = document.createElement("a");
this.domNode.className = "PopUpButton";
dojo.event.connect(this.domNode, "onmousedown", this, "onMouseDown");
// draw the arrow
var arrow = document.createElement("img");
arrow.src = dojo.uri.dojoUri("src/widget/templates/images/dropdownButtonsArrow.gif");
dojo.html.setClass(arrow, "downArrow");
this.domNode.appendChild(arrow);
this.menu = dojo.widget.fromScript("Menu");
dojo.html.addClass(this.menu.domNode, "PopUpButtonMenu");
dojo.event.connect(this.menu, "onSelect", this, "onSelect");
if (frag["dojo:" + this.widgetType.toLowerCase()].nodeRef) {
var node = frag["dojo:" + this.widgetType.toLowerCase()].nodeRef;
var options = node.getElementsByTagName("option");
for (var i = 0; i < options.length; i++) {
var properties = {
title: dojo.dom.textContent(options[i]),
value: options[i].value
}
this.addItem(dojo.widget.fromScript("MenuItem", properties));
}
}
},
addItem: function (item) {
// TODO: should be dojo.widget.MenuItem
if (item instanceof dojo.widget.html.MenuItem) {
this.menu.push(item);
} else {
// TODO: create one
var menuItem = dojo.widget.fromScript("MenuItem", {title: item});
this.menu.push(menuItem);
}
},
/* Enabled utility methods
**************************/
_enabled: true,
isEnabled: function() { return this._enabled; },
setEnabled: function(enabled, force, preventEvent) {
enabled = Boolean(enabled);
if (force || this._enabled != enabled) {
this._enabled = enabled;
if (!preventEvent) {
this._fireEvent(this._enabled ? "onEnable" : "onDisable");
this._fireEvent("onChangeEnabled");
}
}
dojo.html[(this._enabled ? "add" : "remove")
+ "Class"](this.domNode, "disabled");
return this._enabled;
},
enable: function(force, preventEvent) {
return this.setEnabled(true, force, preventEvent);
},
disable: function(force, preventEvent) {
return this.setEnabled(false, force, preventEvent);
},
toggleEnabled: function(force, preventEvent) {
return this.setEnabled(!this._enabled, force, preventEvent);
},
/* Select utility methods
**************************/
onSelect: function (item, e) {
this.domNode.firstChild.nodeValue = item.title;
},
onMouseDown: function (e) {
if (!this._menuVisible) {
this._showMenu(e);
dojo.lang.setTimeout(dojo.event.connect, 1, document, "onmousedown", this, "_hideMenu");
}
},
_fireEvent: function(evt) {
if(typeof this[evt] == "function") {
var args = [this];
for(var i = 1; i < arguments.length; i++) {
args.push(arguments[i]);
}
this[evt].apply(this, args);
}
},
_showMenu: function (e) {
if (!this._enabled) { return; }
this._menuVisible = true;
with (dojo.html) {
var y = getAbsoluteY(this.domNode) + getInnerHeight(this.domNode);
var x = getAbsoluteX(this.domNode);
}
document.body.appendChild(this.menu.domNode);
with (this.menu.domNode.style) {
top = y + "px";
left = x + "px";
}
},
_hideMenu: function (e) {
this.menu.domNode.parentNode.removeChild(this.menu.domNode);
dojo.event.disconnect(document, "onmousedown", this, "_hideMenu");
this._menuVisible = false;
}
});