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 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d2c6e433e89482f1c76488f536abfabc0183fb86 |
--- /dev/null |
+++ b/go-back-with-backspace/is_editable.js |
@@ -0,0 +1,32 @@ |
+// Determine whether focus is in an editable text field. |
+function isEditable(path) { |
+ var target = path[0]; |
+ |
+ // Elements may be explicitly marked as editable. |
+ if (target.isContentEditable) |
+ return true; |
+ |
+ // Several types of input fields are editable, but not all (e.g., checkboxes). |
+ var nodeName = target.nodeName; |
+ var nodeType = target.type; |
+ if (nodeName === 'TEXTAREA' || |
+ (nodeName === 'INPUT' && (nodeType === 'text' || |
+ nodeType === 'email' || |
+ nodeType === 'password' || |
+ nodeType === 'search'))) { |
+ return true; |
+ } |
+ |
+ // 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]; |
+ if (target.nodeType == 1) { // Only Elements have computed styles. |
+ var userModify = getComputedStyle(path[i])['-webkit-user-select']; |
+ if (userModify == 'read-write' || userModify == 'write-only') |
+ return true; |
+ } |
+ } |
+ return false; |
+} |