mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-08 14:03:49 +00:00
97 lines
3.0 KiB
JavaScript
97 lines
3.0 KiB
JavaScript
var MenuListHelperUI = {
|
|
get _container() {
|
|
delete this._container;
|
|
return this._container = document.getElementById("menulist-container");
|
|
},
|
|
|
|
get _popup() {
|
|
delete this._popup;
|
|
return this._popup = document.getElementById("menulist-popup");
|
|
},
|
|
|
|
get _title() {
|
|
delete this._title;
|
|
return this._title = document.getElementById("menulist-title");
|
|
},
|
|
|
|
_firePopupEvent: function firePopupEvent(aEventName) {
|
|
let menupopup = this._currentList.menupopup;
|
|
if (menupopup.hasAttribute(aEventName)) {
|
|
let func = new Function("event", menupopup.getAttribute(aEventName));
|
|
func.call(this);
|
|
}
|
|
},
|
|
|
|
_currentList: null,
|
|
show: function mn_show(aMenulist) {
|
|
this._currentList = aMenulist;
|
|
this._container.setAttribute("for", aMenulist.id);
|
|
this._title.value = aMenulist.title || "";
|
|
this._firePopupEvent("onpopupshowing");
|
|
|
|
let container = this._container;
|
|
let listbox = this._popup.lastChild;
|
|
while (listbox.firstChild)
|
|
listbox.removeChild(listbox.firstChild);
|
|
|
|
let children = this._currentList.menupopup.children;
|
|
for (let i = 0; i < children.length; i++) {
|
|
let child = children[i];
|
|
let item = document.createElement("richlistitem");
|
|
if (child.disabled)
|
|
item.setAttribute("disabled", "true");
|
|
if (child.hidden)
|
|
item.setAttribute("hidden", "true");
|
|
|
|
// Add selected as a class name instead of an attribute to not being overidden
|
|
// by the richlistbox behavior (it sets the "current" and "selected" attribute
|
|
item.setAttribute("class", "option-command action-button" + (child.selected ? " selected" : ""));
|
|
|
|
let image = document.createElement("image");
|
|
image.setAttribute("src", child.image || "");
|
|
item.appendChild(image);
|
|
|
|
let label = document.createElement("label");
|
|
label.setAttribute("value", child.label);
|
|
item.appendChild(label);
|
|
|
|
listbox.appendChild(item);
|
|
}
|
|
|
|
window.addEventListener("resize", this, true);
|
|
this.sizeToContent();
|
|
container.hidden = false;
|
|
BrowserUI.pushPopup(this, [this._popup]);
|
|
},
|
|
|
|
hide: function mn_hide() {
|
|
this._currentList = null;
|
|
this._container.removeAttribute("for");
|
|
this._container.hidden = true;
|
|
window.removeEventListener("resize", this, true);
|
|
BrowserUI.popPopup(this);
|
|
},
|
|
|
|
selectByIndex: function mn_selectByIndex(aIndex) {
|
|
this._currentList.selectedIndex = aIndex;
|
|
|
|
// Dispatch a xul command event to the attached menulist
|
|
if (this._currentList.dispatchEvent) {
|
|
let evt = document.createEvent("XULCommandEvent");
|
|
evt.initCommandEvent("command", true, true, window, 0, false, false, false, false, null);
|
|
this._currentList.dispatchEvent(evt);
|
|
}
|
|
|
|
this.hide();
|
|
},
|
|
|
|
sizeToContent: function sizeToContent() {
|
|
let style = document.defaultView.getComputedStyle(this._container, null);
|
|
this._popup.width = window.innerWidth - (parseInt(style.paddingLeft) + parseInt(style.paddingRight));
|
|
},
|
|
|
|
handleEvent: function handleEvent(aEvent) {
|
|
this.sizeToContent();
|
|
}
|
|
};
|