Bug 572716 - Escape does not dismiss SelectHelper popup [r=mfinkle]

This commit is contained in:
Matt Brubeck 2010-06-17 23:55:58 -04:00
Родитель 007c11b739
Коммит 7b7f49203f
2 изменённых файлов: 31 добавлений и 18 удалений

Просмотреть файл

@ -1410,11 +1410,6 @@ var FormHelper = {
return this._helperSpacer = document.getElementById("form-helper-spacer");
},
get _selectContainer() {
delete this._selectContainer;
return this._selectContainer = document.getElementById("select-container");
},
get _autofillContainer() {
delete this._autofillContainer;
return this._autofillContainer = document.getElementById("form-helper-autofill");
@ -1463,11 +1458,7 @@ var FormHelper = {
let currentIsSelect = this._isValidSelectElement(aNewElement);
if (currentIsSelect && !previousIsSelect) {
this._selectContainer.style.maxHeight = (window.innerHeight / 1.8) + "px";
let rootNode = this._container;
rootNode.insertBefore(this._selectContainer, rootNode.lastChild);
SelectHelper.dock(this._container);
SelectHelper.show(aNewElement);
}
else if (currentIsSelect && previousIsSelect) {
@ -1475,10 +1466,7 @@ var FormHelper = {
SelectHelper.show(aNewElement);
}
else if (!currentIsSelect && previousIsSelect) {
let rootNode = this._container.parentNode;
rootNode.insertBefore(this._selectContainer, rootNode.lastChild);
SelectHelper.close();
SelectHelper.hide();
}
},
@ -1981,10 +1969,15 @@ MenulistWrapper.prototype = {
};
var SelectHelper = {
_panel: null,
_list: null,
_control: null,
_selectedIndexes: [],
_docked: false,
get _panel() {
delete this._panel;
return this._panel = document.getElementById("select-container");
},
_getSelectedIndexes: function() {
let indexes = [];
@ -2056,14 +2049,29 @@ var SelectHelper = {
}
}
this._panel = document.getElementById("select-container");
this._panel.hidden = false;
if (!this._docked)
BrowserUI.pushPopup(this, this._panel);
this._scrollElementIntoView(firstSelected);
this._list.addEventListener("click", this, false);
},
dock: function dock(aContainer) {
aContainer.insertBefore(this._panel, aContainer.lastChild);
this._panel.style.maxHeight = (window.innerHeight / 1.8) + "px";
this._docked = true;
},
undock: function undock() {
let rootNode = Elements.stack;
rootNode.insertBefore(this._panel, rootNode.lastChild);
this._panel.style.maxHeight = "";
this._docked = false;
},
_scrollElementIntoView: function(aElement) {
if (!aElement)
return;
@ -2132,9 +2140,14 @@ var SelectHelper = {
this._list = empty;
},
close: function() {
hide: function() {
this._list.removeEventListener("click", this, false);
this._panel.hidden = true;
if (this._docked)
this.undock();
else
BrowserUI.popPopup();
this.reset();
},

Просмотреть файл

@ -480,7 +480,7 @@
<vbox id="select-container-inner" class="dialog-dark" flex="1">
<scrollbox id="select-list" flex="1" orient="vertical"/>
<hbox id="select-buttons" pack="center">
<button id="select-buttons-done" class="button-dark" label="&formHelper.done;" oncommand="SelectHelper.close();"/>
<button id="select-buttons-done" class="button-dark" label="&formHelper.done;" oncommand="SelectHelper.hide();"/>
</hbox>
</vbox>
<spacer flex="1000"/>