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

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

@ -480,7 +480,7 @@
<vbox id="select-container-inner" class="dialog-dark" flex="1"> <vbox id="select-container-inner" class="dialog-dark" flex="1">
<scrollbox id="select-list" flex="1" orient="vertical"/> <scrollbox id="select-list" flex="1" orient="vertical"/>
<hbox id="select-buttons" pack="center"> <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> </hbox>
</vbox> </vbox>
<spacer flex="1000"/> <spacer flex="1000"/>