aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--background_scripts/main.coffee2
-rw-r--r--content_scripts/mode_visual_edit.coffee6
-rw-r--r--content_scripts/vimium_frontend.coffee2
-rw-r--r--lib/settings.coffee1
-rw-r--r--lib/utils.coffee9
-rw-r--r--pages/options.coffee67
-rw-r--r--pages/options.html2
-rw-r--r--tests/unit_tests/completion_test.coffee3
-rw-r--r--tests/unit_tests/settings_test.coffee8
-rw-r--r--tests/unit_tests/test_chrome_stubs.coffee5
10 files changed, 62 insertions, 43 deletions
diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee
index d4b14f3c..28959d35 100644
--- a/background_scripts/main.coffee
+++ b/background_scripts/main.coffee
@@ -217,7 +217,7 @@ openUrlInIncognito = (request) ->
# We return null to avoid the return value from the copy operations being passed to sendResponse.
#
copyToClipboard = (request) -> Clipboard.copy(request.data); null
-pasteFromClipboard = (request) -> Clipboard.paste(); null
+pasteFromClipboard = (request) -> Clipboard.paste()
#
# Selects the tab with the ID specified in request.id
diff --git a/content_scripts/mode_visual_edit.coffee b/content_scripts/mode_visual_edit.coffee
index eaaf94d4..ce3caafe 100644
--- a/content_scripts/mode_visual_edit.coffee
+++ b/content_scripts/mode_visual_edit.coffee
@@ -374,8 +374,10 @@ class Movement extends CountPrefix
# it.
yank: (args = {}) ->
@yankedText = @selection.toString()
- @selection.deleteFromDocument() if @options.deleteFromDocument or args.deleteFromDocument
- @selection.collapseToStart() unless @options.parentMode
+ if @options.deleteFromDocument or args.deleteFromDocument
+ @selection.deleteFromDocument()
+ else
+ @selection.collapseToStart()
message = @yankedText.replace /\s+/g, " "
message = message[...12] + "..." if 15 < @yankedText.length
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 6f50fb9d..8f4c7e82 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -122,7 +122,6 @@ window.initializeModes = ->
# Complete initialization work that sould be done prior to DOMReady.
#
initializePreDomReady = ->
- initializeModes()
checkIfEnabledForUrl()
refreshCompletionKeys()
@@ -186,6 +185,7 @@ installListener = (element, event, callback) ->
installedListeners = false
window.installListeners = ->
unless installedListeners
+ initializeModes()
# Key event handlers fire on window before they do on document. Prefer window for key events so the page
# can't set handlers to grab the keys before us.
for type in [ "keydown", "keypress", "keyup", "click", "focus", "blur", "mousedown", "scroll" ]
diff --git a/lib/settings.coffee b/lib/settings.coffee
index 437e4d45..99a20963 100644
--- a/lib/settings.coffee
+++ b/lib/settings.coffee
@@ -163,6 +163,7 @@ Settings =
settingsVersion: Utils.getCurrentVersion()
helpDialog_showAdvancedCommands: false
+ optionsPage_showAdvancedOptions: false
Settings.init()
diff --git a/lib/utils.coffee b/lib/utils.coffee
index 93045f32..d4beff03 100644
--- a/lib/utils.coffee
+++ b/lib/utils.coffee
@@ -323,10 +323,11 @@ class SimpleCache
null
rotate: (force = false) ->
- if force or @entries < Object.keys(@cache).length or @expiry < new Date() - @lastRotation
- @lastRotation = new Date()
- @previous = @cache
- @cache = {}
+ Utils.nextTick =>
+ if force or @entries < Object.keys(@cache).length or @expiry < new Date() - @lastRotation
+ @lastRotation = new Date()
+ @previous = @cache
+ @cache = {}
clear: ->
@rotate true
diff --git a/pages/options.coffee b/pages/options.coffee
index 21e81c8f..1cbe88fa 100644
--- a/pages/options.coffee
+++ b/pages/options.coffee
@@ -181,6 +181,24 @@ class ExclusionRulesOnPopupOption extends ExclusionRulesOption
else
@url + "*"
+Options =
+ exclusionRules: ExclusionRulesOption
+ filterLinkHints: CheckBoxOption
+ hideHud: CheckBoxOption
+ keyMappings: TextOption
+ linkHintCharacters: NonEmptyTextOption
+ linkHintNumbers: NonEmptyTextOption
+ newTabUrl: NonEmptyTextOption
+ nextPatterns: NonEmptyTextOption
+ previousPatterns: NonEmptyTextOption
+ regexFindMode: CheckBoxOption
+ scrollStepSize: NumberOption
+ smoothScroll: CheckBoxOption
+ grabBackFocus: CheckBoxOption
+ searchEngines: TextOption
+ searchUrl: NonEmptyTextOption
+ userDefinedLinkHintCss: TextOption
+
initOptionsPage = ->
onUpdated = ->
$("saveOptions").removeAttribute "disabled"
@@ -197,18 +215,20 @@ initOptionsPage = ->
show $("linkHintCharacters")
hide $("linkHintNumbers")
- toggleAdvancedOptions =
- do (advancedMode=false) ->
- (event) ->
- if advancedMode
- $("advancedOptions").style.display = "none"
- $("advancedOptionsButton").innerHTML = "Show Advanced Options"
- else
- $("advancedOptions").style.display = "table-row-group"
- $("advancedOptionsButton").innerHTML = "Hide Advanced Options"
- advancedMode = !advancedMode
- $("advancedOptionsButton").blur()
- event.preventDefault()
+ maintainAdvancedOptions = ->
+ if bgSettings.get "optionsPage_showAdvancedOptions"
+ $("advancedOptions").style.display = "table-row-group"
+ $("advancedOptionsButton").innerHTML = "Hide Advanced Options"
+ else
+ $("advancedOptions").style.display = "none"
+ $("advancedOptionsButton").innerHTML = "Show Advanced Options"
+ maintainAdvancedOptions()
+
+ toggleAdvancedOptions = (event) ->
+ bgSettings.set "optionsPage_showAdvancedOptions", not bgSettings.get "optionsPage_showAdvancedOptions"
+ maintainAdvancedOptions()
+ $("advancedOptionsButton").blur()
+ event.preventDefault()
activateHelpDialog = ->
showHelpDialog chrome.extension.getBackgroundPage().helpDialogHtml(true, true, "Command Listing"), frameId
@@ -236,26 +256,8 @@ initOptionsPage = ->
document.activeElement.blur() if document?.activeElement?.blur
saveOptions()
- options =
- exclusionRules: ExclusionRulesOption
- filterLinkHints: CheckBoxOption
- hideHud: CheckBoxOption
- keyMappings: TextOption
- linkHintCharacters: NonEmptyTextOption
- linkHintNumbers: NonEmptyTextOption
- newTabUrl: NonEmptyTextOption
- nextPatterns: NonEmptyTextOption
- previousPatterns: NonEmptyTextOption
- regexFindMode: CheckBoxOption
- scrollStepSize: NumberOption
- smoothScroll: CheckBoxOption
- grabBackFocus: CheckBoxOption
- searchEngines: TextOption
- searchUrl: NonEmptyTextOption
- userDefinedLinkHintCss: TextOption
-
# Populate options. The constructor adds each new object to "Option.all".
- for name, type of options
+ for name, type of Options
new type(name,onUpdated)
maintainLinkHintsView()
@@ -317,3 +319,6 @@ document.addEventListener "DOMContentLoaded", ->
xhr.send()
+# Exported for tests.
+root = exports ? window
+root.Options = Options
diff --git a/pages/options.html b/pages/options.html
index 12a3ad21..22b041b7 100644
--- a/pages/options.html
+++ b/pages/options.html
@@ -283,7 +283,7 @@ b: http://b.com/?q=%s description
</span>
</td>
<td id="saveOptionsTableData" nowrap>
- <button id="advancedOptionsButton">Show Advanced Options</button>
+ <button id="advancedOptionsButton"></button>
<button id="saveOptions" disabled="true">No Changes</button>
</td>
</tr>
diff --git a/tests/unit_tests/completion_test.coffee b/tests/unit_tests/completion_test.coffee
index 4a0cf746..9ce0a466 100644
--- a/tests/unit_tests/completion_test.coffee
+++ b/tests/unit_tests/completion_test.coffee
@@ -4,9 +4,6 @@ extend(global, require "../../background_scripts/completion_engines.js")
extend(global, require "../../background_scripts/completion.js")
extend global, require "./test_chrome_stubs.js"
-global.document =
- createElement: -> {}
-
context "bookmark completer",
setup ->
@bookmark3 = { title: "bookmark3", url: "bookmark3.com" }
diff --git a/tests/unit_tests/settings_test.coffee b/tests/unit_tests/settings_test.coffee
index 6270ae3e..9dc25cef 100644
--- a/tests/unit_tests/settings_test.coffee
+++ b/tests/unit_tests/settings_test.coffee
@@ -7,6 +7,7 @@ Utils.isBackgroundPage = -> true
Utils.isExtensionPage = -> true
global.localStorage = {}
extend(global,require "../../lib/settings.js")
+extend(global,require "../../pages/options.js")
context "settings",
@@ -74,3 +75,10 @@ context "synced settings",
should "sync a key which is not a known setting (without crashing)", ->
chrome.storage.sync.set { notASetting: JSON.stringify("notAUsefullValue") }
+
+context "default valuess",
+
+ should "have a default value for every option", ->
+ for own key of Options
+ assert.isTrue key of Settings.defaults
+
diff --git a/tests/unit_tests/test_chrome_stubs.coffee b/tests/unit_tests/test_chrome_stubs.coffee
index c6a56521..0bb6ed81 100644
--- a/tests/unit_tests/test_chrome_stubs.coffee
+++ b/tests/unit_tests/test_chrome_stubs.coffee
@@ -8,6 +8,10 @@
exports.window = {}
exports.localStorage = {}
+global.document =
+ createElement: -> {}
+ addEventListener: ->
+
exports.chrome =
runtime:
getManifest: () ->
@@ -21,6 +25,7 @@ exports.chrome =
extension:
getURL: (path) -> path
+ getBackgroundPage: -> {}
tabs:
onSelectionChanged: