diff options
| -rw-r--r-- | background_scripts/main.coffee | 2 | ||||
| -rw-r--r-- | content_scripts/mode_visual_edit.coffee | 6 | ||||
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 2 | ||||
| -rw-r--r-- | lib/settings.coffee | 1 | ||||
| -rw-r--r-- | lib/utils.coffee | 9 | ||||
| -rw-r--r-- | pages/options.coffee | 67 | ||||
| -rw-r--r-- | pages/options.html | 2 | ||||
| -rw-r--r-- | tests/unit_tests/completion_test.coffee | 3 | ||||
| -rw-r--r-- | tests/unit_tests/settings_test.coffee | 8 | ||||
| -rw-r--r-- | tests/unit_tests/test_chrome_stubs.coffee | 5 |
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: |
