aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts
diff options
context:
space:
mode:
Diffstat (limited to 'content_scripts')
-rw-r--r--content_scripts/hud.coffee2
-rw-r--r--content_scripts/link_hints.coffee17
-rw-r--r--content_scripts/scroller.coffee11
-rw-r--r--content_scripts/vimium_frontend.coffee100
-rw-r--r--content_scripts/vomnibar.coffee2
5 files changed, 32 insertions, 100 deletions
diff --git a/content_scripts/hud.coffee b/content_scripts/hud.coffee
index f38d6b45..84b8abeb 100644
--- a/content_scripts/hud.coffee
+++ b/content_scripts/hud.coffee
@@ -48,7 +48,7 @@ HUD =
-> ready and document.body != null
# A preference which can be toggled in the Options page. */
- enabled: -> !settings.get("hideHud")
+ enabled: -> !Settings.get("hideHud")
class Tween
opacity: 0
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee
index 3cebac4c..2bcc7508 100644
--- a/content_scripts/link_hints.coffee
+++ b/content_scripts/link_hints.coffee
@@ -26,20 +26,15 @@ LinkHints =
linkActivator: undefined
# While in delayMode, all keypresses have no effect.
delayMode: false
- # Handle the link hinting marker generation and matching. Must be initialized after settings have been
+ # Handle the link hinting marker generation and matching. Must be initialized after Settings have been
# loaded, so that we can retrieve the option setting.
getMarkerMatcher: ->
- if settings.get("filterLinkHints") then filterHints else alphabetHints
+ if Settings.get("filterLinkHints") then filterHints else alphabetHints
# lock to ensure only one instance runs at a time
isActive: false
# Call this function on exit (if defined).
onExit: null
- #
- # To be called after linkHints has been generated from linkHintsBase.
- #
- init: ->
-
# We need this as a top-level function because our command system doesn't yet support arguments.
activateModeToOpenInNewTab: -> @activateMode(OPEN_IN_NEW_BG_TAB)
activateModeToOpenInNewForegroundTab: -> @activateMode(OPEN_IN_NEW_FG_TAB)
@@ -60,7 +55,7 @@ LinkHints =
# For these modes, we filter out those elements which don't have an HREF (since there's nothing we can do
# with them).
elements = (el for el in elements when el.element.href?) if mode in [ COPY_LINK_URL, OPEN_INCOGNITO ]
- if settings.get "filterLinkHints"
+ if Settings.get "filterLinkHints"
# When using text filtering, we sort the elements such that we visit descendants before their ancestors.
# This allows us to exclude the text used for matching descendants from that used for matching their
# ancestors.
@@ -389,7 +384,7 @@ alphabetHints =
# may be of different lengths.
#
hintStrings: (linkCount) ->
- linkHintCharacters = settings.get("linkHintCharacters")
+ linkHintCharacters = Settings.get("linkHintCharacters")
# Determine how many digits the link hints will require in the worst case. Usually we do not need
# all of these digits for every link single hint, so we can show shorter hints for a few of the links.
digitsNeeded = Math.ceil(@logXOfBase(linkCount, linkHintCharacters.length))
@@ -460,7 +455,7 @@ filterHints =
@labelMap[forElement] = labelText
generateHintString: (linkHintNumber) ->
- (numberToHintString linkHintNumber + 1, settings.get "linkHintNumbers").toUpperCase()
+ (numberToHintString linkHintNumber + 1, Settings.get "linkHintNumbers").toUpperCase()
generateLinkText: (element) ->
linkText = ""
@@ -519,7 +514,7 @@ filterHints =
if (!@hintKeystrokeQueue.pop() && !@linkTextKeystrokeQueue.pop())
return { linksMatched: [] }
else if (keyChar)
- if (settings.get("linkHintNumbers").indexOf(keyChar) >= 0)
+ if (Settings.get("linkHintNumbers").indexOf(keyChar) >= 0)
@hintKeystrokeQueue.push(keyChar)
else
# since we might renumber the hints, the current hintKeyStrokeQueue
diff --git a/content_scripts/scroller.coffee b/content_scripts/scroller.coffee
index 27fc9cdc..81c71fcd 100644
--- a/content_scripts/scroller.coffee
+++ b/content_scripts/scroller.coffee
@@ -117,8 +117,7 @@ checkVisibility = (element) ->
# CoreScroller contains the core function (scroll) and logic for relative scrolls. All scrolls are ultimately
# translated to relative scrolls. CoreScroller is not exported.
CoreScroller =
- init: (frontendSettings) ->
- @settings = frontendSettings
+ init: ->
@time = 0
@lastEvent = null
@keyIsDown = false
@@ -139,7 +138,7 @@ CoreScroller =
@time += 1
# Return true if CoreScroller would not initiate a new scroll right now.
- wouldNotInitiateScroll: -> @lastEvent?.repeat and @settings.get "smoothScroll"
+ wouldNotInitiateScroll: -> @lastEvent?.repeat and Settings.get "smoothScroll"
# Calibration fudge factors for continuous scrolling. The calibration value starts at 1.0. We then
# increase it (until it exceeds @maxCalibration) if we guess that the scroll is too slow, or decrease it
@@ -153,7 +152,7 @@ CoreScroller =
scroll: (element, direction, amount, continuous = true) ->
return unless amount
- unless @settings.get "smoothScroll"
+ unless Settings.get "smoothScroll"
# Jump scrolling.
performScroll element, direction, amount
checkVisibility element
@@ -215,11 +214,11 @@ CoreScroller =
# Scroller contains the two main scroll functions which are used by clients.
Scroller =
- init: (frontendSettings) ->
+ init: ->
handlerStack.push
_name: 'scroller/active-element'
DOMActivate: (event) -> handlerStack.alwaysContinueBubbling -> activatedElement = event.target
- CoreScroller.init frontendSettings
+ CoreScroller.init()
# scroll the active element in :direction by :amount * :factor.
# :factor is needed because :amount can take on string values, which scrollBy converts to element dimensions.
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index ea1f5930..7ad75514 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -42,62 +42,6 @@ textInputXPath = (->
)()
#
-# settings provides a browser-global localStorage-backed dict. get() and set() are synchronous, but load()
-# must be called beforehand to ensure get() will return up-to-date values.
-#
-settings =
- isLoaded: false
- port: null
- eventListeners: {}
- values:
- scrollStepSize: null
- linkHintCharacters: null
- linkHintNumbers: null
- filterLinkHints: null
- hideHud: null
- previousPatterns: null
- nextPatterns: null
- regexFindMode: null
- userDefinedLinkHintCss: null
- helpDialog_showAdvancedCommands: null
- smoothScroll: null
- grabBackFocus: null
- searchEngines: null
-
- init: ->
- @port = chrome.runtime.connect name: "settings"
- @port.onMessage.addListener (response) => @receiveMessage response
-
- # If the port is closed, the background page has gone away (since we never close it ourselves). Stub the
- # settings object so we don't keep trying to connect to the extension even though it's gone away.
- @port.onDisconnect.addListener =>
- @port = null
- for own property, value of this
- # @get doesn't depend on @port, so we can continue to support it to try and reduce errors.
- @[property] = (->) if "function" == typeof value and property != "get"
-
- get: (key) -> @values[key]
-
- set: (key, value) ->
- @init() unless @port
-
- @values[key] = value
- @port.postMessage operation: "set", key: key, value: value
-
- load: ->
- @init() unless @port
- @port.postMessage operation: "fetch", values: @values
-
- receiveMessage: (response) ->
- @values = response.values if response.values?
- @values[response.key] = response.value if response.key? and response.value?
- @isLoaded = true
- listener() while listener = @eventListeners.load?.pop()
-
- addEventListener: (eventName, callback) ->
- (@eventListeners[eventName] ||= []).push callback
-
-#
# Give this frame a unique (non-zero) id.
#
frameId = 1 + Math.floor(Math.random()*999999999)
@@ -119,15 +63,15 @@ class GrabBackFocus extends Mode
_name: "grab-back-focus-mousedown"
mousedown: => @alwaysContinueBubbling => @exit()
- activate = =>
- return @exit() unless settings.get "grabBackFocus"
- @push
- _name: "grab-back-focus-focus"
- focus: (event) => @grabBackFocus event.target
- # An input may already be focused. If so, grab back the focus.
- @grabBackFocus document.activeElement if document.activeElement
-
- if settings.isLoaded then activate() else settings.addEventListener "load", activate
+ Settings.use "grabBackFocus", (grabBackFocus) =>
+ if grabBackFocus
+ @push
+ _name: "grab-back-focus-focus"
+ focus: (event) => @grabBackFocus event.target
+ # An input may already be focused. If so, grab back the focus.
+ @grabBackFocus document.activeElement if document.activeElement
+ else
+ @exit()
grabBackFocus: (element) ->
return @continueBubbling unless DomUtils.isEditable element
@@ -176,15 +120,12 @@ window.initializeModes = ->
new NormalMode
new PassKeysMode
new InsertMode permanent: true
- Scroller.init settings
+ Scroller.init()
#
# Complete initialization work that sould be done prior to DOMReady.
#
initializePreDomReady = ->
- settings.addEventListener("load", LinkHints.init.bind(LinkHints))
- settings.load()
-
initializeModes()
checkIfEnabledForUrl()
refreshCompletionKeys()
@@ -261,13 +202,11 @@ window.installListeners = ->
#
# Whenever we get the focus:
-# - Reload settings (they may have changed).
# - Tell the background page this frame's URL.
# - Check if we should be enabled.
#
onFocus = (event) ->
if event.target == window
- settings.load()
chrome.runtime.sendMessage handler: "frameFocused", frameId: frameId
checkIfEnabledForUrl true
@@ -364,14 +303,14 @@ extend window,
scrollToTop: -> Scroller.scrollTo "y", 0
scrollToLeft: -> Scroller.scrollTo "x", 0
scrollToRight: -> Scroller.scrollTo "x", "max"
- scrollUp: -> Scroller.scrollBy "y", -1 * settings.get("scrollStepSize")
- scrollDown: -> Scroller.scrollBy "y", settings.get("scrollStepSize")
+ scrollUp: -> Scroller.scrollBy "y", -1 * Settings.get("scrollStepSize")
+ scrollDown: -> Scroller.scrollBy "y", Settings.get("scrollStepSize")
scrollPageUp: -> Scroller.scrollBy "y", "viewSize", -1/2
scrollPageDown: -> Scroller.scrollBy "y", "viewSize", 1/2
scrollFullPageUp: -> Scroller.scrollBy "y", "viewSize", -1
scrollFullPageDown: -> Scroller.scrollBy "y", "viewSize"
- scrollLeft: -> Scroller.scrollBy "x", -1 * settings.get("scrollStepSize")
- scrollRight: -> Scroller.scrollBy "x", settings.get("scrollStepSize")
+ scrollLeft: -> Scroller.scrollBy "x", -1 * Settings.get("scrollStepSize")
+ scrollRight: -> Scroller.scrollBy "x", Settings.get("scrollStepSize")
extend window,
reload: -> window.location.reload()
@@ -717,7 +656,7 @@ updateFindModeQuery = ->
# the query can be treated differently (e.g. as a plain string versus regex depending on the presence of
# escape sequences. '\' is the escape character and needs to be escaped itself to be used as a normal
# character. here we grep for the relevant escape sequences.
- findModeQuery.isRegex = settings.get 'regexFindMode'
+ findModeQuery.isRegex = Settings.get 'regexFindMode'
hasNoIgnoreCaseFlag = false
findModeQuery.parsedQuery = findModeQuery.rawQuery.replace /(\\{1,2})([rRI]?)/g, (match, slashes, flag) ->
return match if flag == "" or slashes.length != 1
@@ -1029,12 +968,12 @@ findAndFollowRel = (value) ->
return true
window.goPrevious = ->
- previousPatterns = settings.get("previousPatterns") || ""
+ previousPatterns = Settings.get("previousPatterns") || ""
previousStrings = previousPatterns.split(",").filter( (s) -> s.trim().length )
findAndFollowRel("prev") || findAndFollowLink(previousStrings)
window.goNext = ->
- nextPatterns = settings.get("nextPatterns") || ""
+ nextPatterns = Settings.get("nextPatterns") || ""
nextStrings = nextPatterns.split(",").filter( (s) -> s.trim().length )
findAndFollowRel("next") || findAndFollowLink(nextStrings)
@@ -1089,7 +1028,7 @@ window.showHelpDialog = (html, fid) ->
VimiumHelpDialog =
# This setting is pulled out of local storage. It's false by default.
- getShowAdvancedCommands: -> settings.get("helpDialog_showAdvancedCommands")
+ getShowAdvancedCommands: -> Settings.get("helpDialog_showAdvancedCommands")
init: () ->
this.dialogElement = document.getElementById("vimiumHelpDialog")
@@ -1105,7 +1044,7 @@ window.showHelpDialog = (html, fid) ->
event.preventDefault()
showAdvanced = VimiumHelpDialog.getShowAdvancedCommands()
VimiumHelpDialog.showAdvancedCommands(!showAdvanced)
- settings.set("helpDialog_showAdvancedCommands", !showAdvanced)
+ Settings.set("helpDialog_showAdvancedCommands", !showAdvanced)
showAdvancedCommands: (visible) ->
VimiumHelpDialog.dialogElement.getElementsByClassName("toggleAdvancedCommands")[0].innerHTML =
@@ -1184,7 +1123,6 @@ window.onbeforeunload = ->
scrollY: window.scrollY)
root = exports ? window
-root.settings = settings
root.handlerStack = handlerStack
root.frameId = frameId
root.windowIsFocused = windowIsFocused
diff --git a/content_scripts/vomnibar.coffee b/content_scripts/vomnibar.coffee
index 4bd8e8fd..6c08ce92 100644
--- a/content_scripts/vomnibar.coffee
+++ b/content_scripts/vomnibar.coffee
@@ -8,7 +8,7 @@ Vomnibar =
# the form "keyword=X", for direct activation of a custom search engine.
parseRegistryEntry: (registryEntry = { options: [] }, callback = null) ->
options = {}
- searchEngines = settings.get("searchEngines") ? ""
+ searchEngines = Settings.get("searchEngines") ? ""
SearchEngines.refreshAndUse searchEngines, (engines) ->
for option in registryEntry.options
[ key, value ] = option.split "="