From dfb2c58e3d76cfc0131a1e30cba4ae8d23853726 Mon Sep 17 00:00:00 2001 From: Jez Ng Date: Sun, 19 Aug 2012 23:27:44 -0700 Subject: More refactoring-cleanup. * vimium_frontend now has a pretty decent set of exports * Generic linkHints code has been moved to DomUtils, so future features can reuse the code. --- content_scripts/link_hints.coffee | 26 ++++++++------------------ content_scripts/vimium_frontend.coffee | 17 ----------------- lib/dom_utils.coffee | 28 ++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 35 deletions(-) diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index 34ecb431..5cdbc6a7 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -54,7 +54,14 @@ LinkHints = @setOpenLinkMode(openInNewTab, withQueue, copyLinkUrl) hintMarkers = @markerMatcher.fillInMarkers(@createMarkerFor(el) for el in @getVisibleClickableElements()) - @hintMarkerContainingDiv = @displayHints(hintMarkers) + + DomUtils.addCssToPage(settings.get("userDefinedLinkHintCss"), "vimiumLinkHintCss") + # Note(philc): Append these markers as top level children instead of as child nodes to the link itself, + # because some clickable elements cannot contain children, e.g. submit buttons. This has the caveat + # that if you scroll the page and the link has position=fixed, the marker will not stay fixed. + @hintMarkerContainingDiv = DomUtils.addElementList(hintMarkers, + { id: "vimiumHintMarkerContainer", className: "vimiumReset" }) + # handlerStack is declared by vimiumFrontend.js handlerStack.push({ keydown: @onKeyDownInMode.bind(this, hintMarkers), @@ -104,23 +111,6 @@ LinkHints = marker - displayHints: (hintMarkers) -> - if (!document.getElementById("vimiumLinkHintCss")) - # linkHintCss is declared by vimiumFrontend.js and contains the user supplied css overrides. - addCssToPage(settings.get("userDefinedLinkHintCss"), "vimiumLinkHintCss") - - # Note(philc): Append these markers as top level children instead of as child nodes to the link itself, - # because some clickable elements cannot contain children, e.g. submit buttons. This has the caveat - # that if you scroll the page and the link has position=fixed, the marker will not stay fixed. - # Also note that adding these nodes to document.body all at once is significantly faster than one-by-one. - hintMarkerContainingDiv = document.createElement("div") - hintMarkerContainingDiv.id = "vimiumHintMarkerContainer" - hintMarkerContainingDiv.className = "vimiumReset" - hintMarkerContainingDiv.appendChild(marker) for marker in hintMarkers - - document.documentElement.appendChild(hintMarkerContainingDiv) - hintMarkerContainingDiv - # # Returns all clickable elements that are not hidden and are in the current viewport. # We prune invisible elements partly for performance reasons, but moreso it's to decrease the number diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 0fc8d518..4de0a695 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -977,20 +977,6 @@ Tween = value = (elapsed / state.duration) * (state.to - state.from) + state.from state.onUpdate(value) -# -# Adds the given CSS to the page. -# -addCssToPage = (css, id) -> - head = document.getElementsByTagName("head")[0] - if (!head) - head = document.createElement("head") - document.documentElement.appendChild(head) - style = document.createElement("style") - style.id = id - style.type = "text/css" - style.appendChild(document.createTextNode(css)) - head.appendChild(style) - initializePreDomReady() window.addEventListener("DOMContentLoaded", initializeOnDomReady) @@ -1000,11 +986,8 @@ window.onbeforeunload = -> scrollX: window.scrollX scrollY: window.scrollY) -# TODO(philc): Export a more tighter, more coherent interface. root = exports ? window -root.window = window root.settings = settings -root.addCssToPage = addCssToPage root.HUD = HUD root.handlerStack = handlerStack root.frameId = frameId diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 924afbbe..57930f80 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -1,4 +1,19 @@ DomUtils = + # + # Adds the given CSS to the page. + # + addCssToPage: (css, id) -> + return if document.getElementById(id) + head = document.getElementsByTagName("head")[0] + if (!head) + head = document.createElement("head") + document.documentElement.appendChild(head) + style = document.createElement("style") + style.id = id + style.type = "text/css" + style.appendChild(document.createTextNode(css)) + head.appendChild(style) + # # Runs :callback if the DOM has loaded, otherwise runs it on load # @@ -7,6 +22,19 @@ DomUtils = window.addEventListener("DOMContentLoaded", -> loaded = true) (callback) -> if loaded then callback() else window.addEventListener("DOMContentLoaded", callback) + # + # Adds a list of elements to a page. + # Note that adding these nodes all at once (via the parent div) is significantly faster than one-by-one. + # + addElementList: (els, overlayOptions) -> + parent = document.createElement("div") + parent.id = overlayOptions.id if overlayOptions.id? + parent.className = overlayOptions.className if overlayOptions.className? + parent.appendChild(el) for el in els + + document.documentElement.appendChild(parent) + parent + # # Remove an element from its DOM tree. # -- cgit v1.2.3