blob: d0e4114ebee40f58b60fb4a8a973e24391118a08 [file] [log] [blame]
// 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;
// Many types of input fields are editable, but not all (e.g., checkboxes).
var nodeName = target.nodeName.toUpperCase();
var nodeType = target.type || '';
nodeType = nodeType.toLowerCase();
if (nodeName === 'TEXTAREA' ||
(nodeName === 'INPUT' && (nodeType === 'text' ||
nodeType === 'password' ||
nodeType === 'search' ||
nodeType === 'date' ||
nodeType === 'datetime' ||
nodeType === 'datetime-local' ||
nodeType === 'email' ||
nodeType === 'month' ||
nodeType === 'number' ||
nodeType === 'tel' ||
nodeType === 'time' ||
nodeType === 'url' ||
nodeType === 'week'))) {
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;
}