aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content_scripts/link_hints.coffee36
-rw-r--r--lib/dom_utils.coffee41
2 files changed, 35 insertions, 42 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee
index 2ffe818f..fe36cee0 100644
--- a/content_scripts/link_hints.coffee
+++ b/content_scripts/link_hints.coffee
@@ -130,7 +130,41 @@ LinkHints =
# of digits needed to enumerate all of the links on screen.
#
getVisibleClickableElements: ->
- resultSet = DomUtils.getClickableElements()
+ elements = Array::slice.call(document.documentElement.getElementsByTagName "*")
+ resultSet = []
+
+ for element in elements
+ isClickable = false
+ tagName = element.tagName.toLowerCase()
+ isClickable = (->
+ if element.hasAttribute "onclick"
+ true
+ else if element.hasAttribute "tabindex"
+ true
+ else if element.getAttribute "role" in ["button", "link"]
+ true
+ else if element.getAttribute("class")?.toLowerCase().indexOf("button") >= 0
+ true
+ else if element.getAttribute("contentEditable")?.toLowerCase() in ["", "contentEditable", "true"]
+ true
+ else if tagName == "a"
+ true
+ else if tagName == "img"
+ mapName = element.getAttribute "usemap"
+ if mapName
+ map = document.querySelector(mapName.replace /^#/, "")
+ areas = Array::slice.call(map.getElementsByTagName "area")
+ resultSet.concat areas
+ false
+ else if (tagName == "input" and DomUtils.isSelectable element) or tagName == "textarea"
+ not (element.disabled or element.readOnly)
+ else if (tagName == "input" and element.getAttribute("type")?.toLowerCase() != "hidden") or
+ tagName in ["button", "select"]
+ not element.disabled
+ else
+ false
+ )()
+ resultSet.push element if isClickable
visibleElements = []
diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee
index 46bf3639..a0ac0bd3 100644
--- a/lib/dom_utils.coffee
+++ b/lib/dom_utils.coffee
@@ -42,47 +42,6 @@ DomUtils =
document.evaluate(xpath, document.documentElement, namespaceResolver, resultType, null)
#
- # Returns all the clickable element children of contextNode. This also can include contextNode itself.
- #
- getClickableElements: (contextNode = document.documentElement) ->
- elements = Array::slice.call(contextNode?.getElementsByTagName "*")
- elements.unshift contextNode # Check the contextNode as well.
- clickableElements = []
- for element in elements
- isClickable = false
- tagName = element.tagName.toLowerCase()
- isClickable = (->
- if element.hasAttribute "onclick"
- true
- else if element.hasAttribute "tabindex"
- true
- else if element.getAttribute "role" in ["button", "link"]
- true
- else if element.getAttribute("class")?.toLowerCase().indexOf("button") >= 0
- true
- else if element.getAttribute("contentEditable")?.toLowerCase() in ["", "contentEditable", "true"]
- true
- else if tagName == "a"
- true
- else if tagName == "img"
- mapName = element.getAttribute "usemap"
- if mapName
- map = document.querySelector(mapName.replace /^#/, "")
- areas = Array::slice.call(map.getElementsByTagName "area")
- elements.concat areas
- false
- else if (tagName == "input" and DomUtils.isSelectable element) or tagName == "textarea"
- not (element.disabled or element.readOnly)
- else if (tagName == "input" and element.getAttribute("type")?.toLowerCase() != "hidden") or
- tagName in ["button", "select"]
- not element.disabled
- else
- false
- )()
- clickableElements.push element if isClickable
- clickableElements
-
- #
# Returns the first visible clientRect of an element if it exists. Otherwise it returns null.
#
getVisibleClientRect: (element) ->