diff --git a/common/content/buffer.js b/common/content/buffer.js index 3e8c9e94..55336dcf 100644 --- a/common/content/buffer.js +++ b/common/content/buffer.js @@ -1508,7 +1508,7 @@ const Buffer = Module("buffer", { let xpath = ["input", "textarea[not(@disabled) and not(@readonly)]"]; let elements = [m for (m in util.evaluateXPath(xpath))].filter(function (elem) { - if (elem.readOnly || elem instanceof HTMLInputElement && ["file", "search", "text", "password"].indexOf(elem.type) < 0) + if (elem.readOnly || elem instanceof HTMLInputElement && set.has(Events.editableInputs, elem.type)) return false; let computedStyle = util.computedStyle(elem); return computedStyle.visibility != "hidden" && computedStyle.display != "none"; diff --git a/common/content/events.js b/common/content/events.js index feaf561e..8fd5792b 100644 --- a/common/content/events.js +++ b/common/content/events.js @@ -712,8 +712,8 @@ const Events = Module("events", { // displayed too. --djk function isInputField() { let elem = dactyl.focus; - return ((elem instanceof HTMLInputElement && !/image/.test(elem.type)) - || elem instanceof HTMLIsIndexElement); + return elem instanceof HTMLInputElement && set.has(Events.editableInputs, elem.type) + || elem instanceof HTMLIsIndexElement; } if (options["insertmode"] || isInputField()) @@ -743,7 +743,7 @@ const Events = Module("events", { let win = elem.ownerDocument && elem.ownerDocument.defaultView || elem; if (hasHTMLDocument(win) && !buffer.focusAllowed(win) - && isinstance(elem, [HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement])) + && isinstance(elem, [HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement])) elem.blur(); }, @@ -767,8 +767,8 @@ const Events = Module("events", { if (elem && elem.readOnly) return; - if ((elem instanceof HTMLInputElement && /^(search|text|password)$/.test(elem.type)) || - (elem instanceof HTMLSelectElement)) { + if (elem instanceof HTMLInputElement && set.has(Events.editableInputs, elem.type) || + elem instanceof HTMLSelectElement) { dactyl.mode = modes.INSERT; if (hasHTMLDocument(win)) buffer.lastInputField = elem; @@ -1104,13 +1104,14 @@ const Events = Module("events", { // } } }, { + editableInputs: set(["date", "datetime", "datetime-local", "email", "file", + "month", "number", "password", "range", "search", + "tel", "text", "time", "url", "week"]), isInputElemFocused: function () { let elem = dactyl.focus; - return ((elem instanceof HTMLInputElement && !/image/.test(elem.type)) || - elem instanceof HTMLTextAreaElement || - elem instanceof HTMLIsIndexElement || - elem instanceof HTMLObjectElement || - elem instanceof HTMLEmbedElement); + return elem instanceof HTMLInputElement && set.has(Events.editableInputs, elem.type) || + isinstance(elem, [HTMLIsIndexElement, HTMLEmbedElement, + HTMLObjectElement, HTMLTextAreaElement]); } }, { commands: function () { diff --git a/common/content/hints.js b/common/content/hints.js index dee0dc11..8c10e4b8 100644 --- a/common/content/hints.js +++ b/common/content/hints.js @@ -114,7 +114,7 @@ const Hints = Module("hints", { let type = elem.type; - if (elem instanceof HTMLInputElement && /(submit|button|reset)/.test(type)) + if (elem instanceof HTMLInputElement && set.has(Events.editableInputs, elem.type)) return [elem.value, false]; else { for (let [, option] in Iterator(options["hintinputs"].split(","))) { @@ -261,7 +261,7 @@ const Hints = Module("hints", { if (computedStyle.getPropertyValue("visibility") != "visible" || computedStyle.getPropertyValue("display") == "none") continue; - if (elem instanceof HTMLInputElement || elem instanceof HTMLSelectElement || elem instanceof HTMLTextAreaElement) + if (isinstance(elem, [HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement])) [hint.text, hint.showText] = this._getInputHint(elem, doc); else hint.text = elem.textContent.toLowerCase();