[Bug 619513] Clicking directly on a select element in content should keep the select UI synced [r=mfinkle]

This commit is contained in:
Vivien Nicolas 2010-12-16 05:02:27 +01:00
Родитель 6f829b48b8
Коммит 50c177986d
2 изменённых файлов: 26 добавлений и 15 удалений

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

@ -2249,7 +2249,7 @@ var SelectHelperUI = {
return this._textbox = document.getElementById("select-helper-textbox");
},
show: function(aList) {
show: function selectHelperShow(aList) {
this.showFilter = false;
this._textbox.blur();
this._list = aList;
@ -2310,20 +2310,20 @@ var SelectHelperUI = {
this._textbox.hidden = !val;
},
dock: function dock(aContainer) {
dock: function selectHelperDock(aContainer) {
aContainer.insertBefore(this._panel, aContainer.lastChild);
this.resize();
this._docked = true;
},
undock: function undock() {
undock: function selectHelperUndock() {
let rootNode = Elements.stack;
rootNode.insertBefore(this._panel, rootNode.lastChild);
this._panel.style.maxHeight = "";
this._docked = false;
},
reset: function() {
reset: function selectHelperReset() {
this._updateControl();
let empty = this._container.cloneNode(false);
this._container.parentNode.replaceChild(empty, this._container);
@ -2334,11 +2334,11 @@ var SelectHelperUI = {
this._textbox.value = "";
},
resize: function resize() {
resize: function selectHelperResize() {
this._panel.style.maxHeight = (window.innerHeight / 1.8) + "px";
},
hide: function() {
hide: function selectHelperResize() {
this.showFilter = false;
this._container.removeEventListener("click", this, false);
this._panel.removeEventListener("overflow", this, true);
@ -2353,7 +2353,7 @@ var SelectHelperUI = {
this.reset();
},
filter: function(aValue) {
filter: function selectHelperFilter(aValue) {
let reg = new RegExp(aValue, "gi");
let options = this._container.childNodes;
for (let i = 0; i < options.length; i++) {
@ -2363,7 +2363,7 @@ var SelectHelperUI = {
}
},
unselectAll: function() {
unselectAll: function selectHelperUnselectAll() {
if (!this._list)
return;
@ -2374,7 +2374,7 @@ var SelectHelperUI = {
});
},
selectByIndex: function(aIndex) {
selectByIndex: function selectHelperSelectByIndex(aIndex) {
if (!this._list)
return;
@ -2390,7 +2390,7 @@ var SelectHelperUI = {
}
},
_getSelectedIndexes: function() {
_getSelectedIndexes: function _selectHelperGetSelectedIndexes() {
let indexes = [];
if (!this._list)
return indexes;
@ -2405,7 +2405,7 @@ var SelectHelperUI = {
return indexes;
},
_scrollElementIntoView: function(aElement) {
_scrollElementIntoView: function _selectHelperScrollElementIntoView(aElement) {
if (!aElement)
return;
@ -2432,7 +2432,7 @@ var SelectHelperUI = {
}
},
_forEachOption: function(aCallback) {
_forEachOption: function _selectHelperForEachOption(aCallback) {
let children = this._container.children;
for (let i = 0; i < children.length; i++) {
let item = children[i];
@ -2442,7 +2442,7 @@ var SelectHelperUI = {
}
},
_updateControl: function() {
_updateControl: function _selectHelperUpdateControl() {
let currentSelectedIndexes = this._getSelectedIndexes();
let isIdentical = (this._selectedIndexes && this._selectedIndexes.length == currentSelectedIndexes.length);
@ -2461,7 +2461,7 @@ var SelectHelperUI = {
Browser.selectedBrowser.messageManager.sendAsyncMessage("FormAssist:ChoiceChange", { });
},
handleEvent: function(aEvent) {
handleEvent: function selectHelperHandleEvent(aEvent) {
switch (aEvent.type) {
case "click":
let item = aEvent.target;
@ -2486,7 +2486,7 @@ var SelectHelperUI = {
}
},
onSelect: function(aIndex, aSelected, aClearAll) {
onSelect: function selectHelperOnSelect(aIndex, aSelected, aClearAll) {
let json = {
index: aIndex,
selected: aSelected,

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

@ -138,6 +138,17 @@ FormAssistant.prototype = {
aElement.focus();
}
// If the element is a <select/> element and the user has manually click
// it we need to inform the UI of such a change to keep in sync with the
// new selected options once the event is finished
if (aElement instanceof HTMLSelectElement) {
let self = this;
let timer = new Util.Timeout(function() {
sendAsyncMessage("FormAssist:Show", self._getJSON());
});
timer.once(0);
}
return false;
}