Bug 522312: keyboard arrow keys should let you move between form fields [r=mark.finkle]

This commit is contained in:
Vivien Nicolas 2009-11-25 15:51:03 -05:00
Родитель 900e620ac1
Коммит 643269dce5
1 изменённых файлов: 39 добавлений и 2 удалений

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

@ -1118,7 +1118,7 @@ var FormHelper = {
_getAll: function() {
let doc = getBrowser().contentDocument;
let prefix = doc.documentElement.wrappedJSObject.namespaceURI ? "xhtml" : "";
let expression = "//input|//select|//button".replace("//", "//" + prefix + ":");
let expression = "//input|//select|//button|//textarea".replace("//", "//" + prefix + ":");
let nodes = doc.evaluate(expression,
doc,
this._nsResolver,
@ -1150,7 +1150,7 @@ var FormHelper = {
for (let i = elements.length; i>0; --i) {
if (elements[i] == this._currentElement)
return elements[--i];
}
}
return null;
},
@ -1211,6 +1211,7 @@ var FormHelper = {
open: function formHelperOpen(aElement) {
this._open = true;
window.addEventListener("keypress", this, true);
this._container.hidden = false;
this._helperSpacer.hidden = false;
@ -1232,11 +1233,47 @@ var FormHelper = {
Browser.contentScrollboxScroller.scrollBy(0, 0);
bv.onAfterVisibleMove();
window.removeEventListener("keypress", this, true);
this._container.hidden = true;
this._currentElement = null;
this._open = false;
},
handleEvent: function formHelperHandleEvent(aEvent) {
let currentElement = this.getCurrentElement();
if (aEvent.type != "keypress")
return;
let keyCode = aEvent.keyCode || aEvent.charCode;
switch (keyCode) {
case aEvent.DOM_VK_DOWN:
if (currentElement instanceof HTMLTextAreaElement) {
let existSelection = currentElement.selectionEnd - currentElement.selectionStart;
let isEnd = (currentElement.textLength == currentElement.selectionEnd);
if (!isEnd || existSelection)
return;
}
this.goToNext();
aEvent.preventDefault();
aEvent.stopPropagation();
break;
case aEvent.DOM_VK_UP:
if (currentElement instanceof HTMLTextAreaElement) {
let existSelection = currentElement.selectionEnd - currentElement.selectionStart;
let isStart = (currentElement.selectionEnd == 0);
if (!isStart || existSelection)
return;
}
this.goToPrevious();
aEvent.preventDefault();
aEvent.stopPropagation();
break;
}
},
zoom: function formHelperZoom(aElement) {
let zoomLevel = Browser._getZoomLevelForElement(aElement);
zoomLevel = Math.min(Math.max(kBrowserFormZoomLevelMin, zoomLevel), kBrowserFormZoomLevelMax);