code: function isEditable(node) {
  	return node
  		&& !isEditingHost(node)
  		&& (node.nodeType != Node.ELEMENT_NODE || node.contentEditable != "false")
  		&& (isEditingHost(node.parentNode) || isEditable(node.parentNode))
  		&& (isHtmlElement(node)
  		|| (node.nodeType == Node.ELEMENT_NODE && node.namespaceURI == "http://www.w3.org/2000/svg" && node.localName == "svg")
  		|| (node.nodeType == Node.ELEMENT_NODE && node.namespaceURI == "http://www.w3.org/1998/Math/MathML" && node.localName == "math")
  		|| (node.nodeType != Node.ELEMENT_NODE && isHtmlElement(node.parentNode)));
  }
docs: "Something is editable if it is a node; it is not an editing host; it does not have a contenteditable attribute set to the false state; its parent is an editing host or editable; and either it is an HTML element, or it is an svg or math element, or it is not an Element and its parent is an HTML element."