Index: go-back-with-backspace/is_editable.js |
diff --git a/go-back-with-backspace/is_editable.js b/go-back-with-backspace/is_editable.js |
index d0e4114ebee40f58b60fb4a8a973e24391118a08..9e26cdcd38ffaaa5020b69a9f12ce40e1fbfc945 100644 |
--- a/go-back-with-backspace/is_editable.js |
+++ b/go-back-with-backspace/is_editable.js |
@@ -1,11 +1,13 @@ |
// Determine whether focus is in an editable text field. |
-function isEditable(path) { |
- var target = path[0]; |
- |
+function isEditable(target) { |
// Elements may be explicitly marked as editable. |
if (target.isContentEditable) |
return true; |
+ // Entire documents may be editable. |
+ if (target.ownerDocument.designMode.toLowerCase() === 'on') |
+ return true; |
+ |
// Many types of input fields are editable, but not all (e.g., checkboxes). |
var nodeName = target.nodeName.toUpperCase(); |
var nodeType = target.type || ''; |
@@ -29,14 +31,16 @@ function isEditable(path) { |
// Certain CSS styles, on elements or their parents, also indicate editable |
// fields. |
- var pathLength = path.length; |
- for (var i = 0; i < pathLength; ++i) { |
- target = path[i]; |
+ while (target) { |
if (target.nodeType == 1) { // Only Elements have computed styles. |
- var userModify = getComputedStyle(path[i])['-webkit-user-select']; |
- if (userModify == 'read-write' || userModify == 'write-only') |
+ var userModify = getComputedStyle(target)['-webkit-user-modify']; |
+ if (userModify === 'read-write' || |
+ userModify === 'write-only' || |
+ userModify === 'read-write-plaintext-only') { |
return true; |
+ } |
} |
+ target = target.parentNode || null; |
} |
return false; |
} |