diff options
| author | Stephen Blott | 2015-03-05 06:46:46 +0000 |
|---|---|---|
| committer | Stephen Blott | 2015-03-05 06:46:46 +0000 |
| commit | 07f754d5936232dbc86aa70235c89b07f1cc4712 (patch) | |
| tree | 3622d188dfdd3387c84a91dff5f3ba1f5569578a /lib | |
| parent | 6dde837b75edbdd794e26f50abbc7dfad14fbbaf (diff) | |
| parent | 8c40600b0c7930b8b7010c29066c8dbaf91b20cc (diff) | |
| download | vimium-07f754d5936232dbc86aa70235c89b07f1cc4712.tar.bz2 | |
Merge branch 'link-hint-text'
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/dom_utils.coffee | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 2ae9412e..f53e28d1 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -295,5 +295,24 @@ DomUtils = document.body.removeChild div coordinates + # Get the text content of an element (and its descendents), but omit the text content of previously-visited + # nodes. See #1514. + # NOTE(smblott). This is currently O(N^2) (when called on N elements). An alternative would be to mark + # each node visited, and then clear the marks when we're done. + textContent: do -> + visitedNodes = null + reset: -> visitedNodes = [] + get: (element) -> + nodes = document.createTreeWalker element, NodeFilter.SHOW_TEXT + texts = + while node = nodes.nextNode() + continue unless node.nodeType == 3 + continue if node in visitedNodes + text = node.data.trim() + continue unless 0 < text.length + visitedNodes.push node + text + texts.join " " + root = exports ? window root.DomUtils = DomUtils |
