diff options
| -rw-r--r-- | background_scripts/main.coffee | 9 | ||||
| -rw-r--r-- | background_scripts/marks.coffee | 4 | ||||
| -rw-r--r-- | content_scripts/hud.coffee | 4 | ||||
| -rw-r--r-- | content_scripts/marks.coffee | 2 | ||||
| -rw-r--r-- | content_scripts/mode_find.coffee | 12 | ||||
| -rw-r--r-- | lib/settings.coffee | 22 | ||||
| -rw-r--r-- | manifest.json | 2 | ||||
| -rw-r--r-- | pages/blank.html | 22 | ||||
| -rw-r--r-- | pages/completion_engines.html | 22 | ||||
| -rw-r--r-- | pages/help_dialog.html | 22 | ||||
| -rw-r--r-- | pages/hud.coffee | 5 | ||||
| -rw-r--r-- | pages/logging.html | 22 | ||||
| -rw-r--r-- | pages/options.html | 22 | ||||
| -rw-r--r-- | pages/vimium_resources.html | 24 | 
14 files changed, 148 insertions, 46 deletions
| diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee index 70739eae..4fb754f8 100644 --- a/background_scripts/main.coffee +++ b/background_scripts/main.coffee @@ -101,8 +101,13 @@ TabOperations =        index: request.tab.index + 1        active: true        windowId: request.tab.windowId -      openerTabId: request.tab.id -    chrome.tabs.create tabConfig, callback +    chrome.tabs.create tabConfig, (tab) -> +      # NOTE(mrmr1993, 2017-02-08): Firefox currently doesn't support openerTabId (issue 1238314) and throws +      # a type error if it is present. We work around this by attempting to set it separately from creating +      # the tab. +      try chrome.tabs.update tab.id, { openerTabId : request.tab.id }, callback +      catch +        callback.apply this, arguments  toggleMuteTab = do ->    muteTab = (tab) -> chrome.tabs.update tab.id, {muted: !tab.mutedInfo.muted} diff --git a/background_scripts/marks.coffee b/background_scripts/marks.coffee index 33c467a7..a6491b9e 100644 --- a/background_scripts/marks.coffee +++ b/background_scripts/marks.coffee @@ -30,7 +30,7 @@ Marks =    saveMark: (markInfo) ->      item = {}      item[@getLocationKey markInfo.markName] = markInfo -    chrome.storage.sync.set item +    Settings.storage.set item    # Goto a global mark.  We try to find the original tab.  If we can't find that, then we try to find another    # tab with the original URL, and use that.  And if we can't find such an existing tab, then we create a new @@ -39,7 +39,7 @@ Marks =      chrome.storage.local.get "vimiumSecret", (items) =>        vimiumSecret = items.vimiumSecret        key = @getLocationKey req.markName -      chrome.storage.sync.get key, (items) => +      Settings.storage.get key, (items) =>          markInfo = items[key]          if markInfo.vimiumSecret != vimiumSecret            # This is a different Vimium instantiation, so markInfo.tabId is definitely out of date. diff --git a/content_scripts/hud.coffee b/content_scripts/hud.coffee index 407b90e1..c2170914 100644 --- a/content_scripts/hud.coffee +++ b/content_scripts/hud.coffee @@ -35,7 +35,9 @@ HUD =        @tween.fade 1.0, 150    search: (data) -> -    @findMode.findInPlace data.query +    # NOTE(mrmr1993): On Firefox, window.find moves the window focus away from the HUD. We use postFindFocus +    # to put it back, so the user can continue typing. +    @findMode.findInPlace data.query, {"postFindFocus": @hudUI.iframeElement.contentWindow}      # Show the number of matches in the HUD UI.      matchCount = if FindMode.query.parsedQuery.length > 0 then FindMode.query.matchCount else 0 diff --git a/content_scripts/marks.coffee b/content_scripts/marks.coffee index 808f0a1d..37b062ba 100644 --- a/content_scripts/marks.coffee +++ b/content_scripts/marks.coffee @@ -64,7 +64,7 @@ Marks =            if @isGlobalMark event, markName              # This key must match @getLocationKey() in the back end.              key = "vimiumGlobalMark|#{markName}" -            chrome.storage.sync.get key, (items) -> +            Settings.storage.get key, (items) ->                if key of items                  chrome.runtime.sendMessage handler: 'gotoMark', markName: markName                  HUD.showForDuration "Jumped to global mark '#{markName}'", 1000 diff --git a/content_scripts/mode_find.coffee b/content_scripts/mode_find.coffee index 0178527b..63825600 100644 --- a/content_scripts/mode_find.coffee +++ b/content_scripts/mode_find.coffee @@ -87,7 +87,7 @@ class FindMode extends Mode      selection.removeAllRanges()      selection.addRange range -  findInPlace: (query) -> +  findInPlace: (query, options) ->      # If requested, restore the scroll position (so that failed searches leave the scroll position unchanged).      @checkReturnToViewPort()      FindMode.updateQuery query @@ -95,7 +95,7 @@ class FindMode extends Mode      # match as the user adds matching characters, or removes previously-matched characters. See #1434.      @restoreSelection()      query = if FindMode.query.isRegex then FindMode.getNextQueryFromRegexMatches(0) else FindMode.query.parsedQuery -    FindMode.query.hasResults = FindMode.execute query +    FindMode.query.hasResults = FindMode.execute query, options    @updateQuery: (query) ->      @query.rawQuery = query @@ -178,7 +178,13 @@ class FindMode extends Mode        # ignore the selectionchange event generated by find()        document.removeEventListener("selectionchange", @restoreDefaultSelectionHighlight, true) -    result = window.find(query, options.caseSensitive, options.backwards, true, false, true, false) +    try +      result = window.find(query, options.caseSensitive, options.backwards, true, false, true, false) +    catch # Failed searches throw on Firefox. + +    # window.find focuses the |window| that it is called on. This gives us an opportunity to (re-)focus +    # another element/window, if that isn't the behaviour we want. +    options.postFindFocus?.focus()      if options.colorSelection        setTimeout( diff --git a/lib/settings.coffee b/lib/settings.coffee index e16261d0..51f6b504 100644 --- a/lib/settings.coffee +++ b/lib/settings.coffee @@ -10,9 +10,11 @@  #  # In all cases except Settings.defaults, values are stored as jsonified strings. +storageArea = if chrome.storage.sync? then "sync" else "local" +  Settings =    debug: false -  storage: chrome.storage.sync +  storage: chrome.storage[storageArea]    cache: {}    isLoaded: false    onLoadedCallbacks: [] @@ -25,6 +27,14 @@ Settings =        @cache = if Utils.isBackgroundPage() then localStorage else extend {}, localStorage        @runOnLoadedCallbacks() +    # Test chrome.storage.sync to see if it is enabled. +    # NOTE(mrmr1993, 2017-04-18): currently the API is defined in FF, but it is disabled behind a flag in +    # about:config. Every use sets chrome.runtime.lastError, so we use that to check whether we can use it. +    chrome.storage.sync.get null, => +      if chrome.runtime.lastError +        storageArea = "local" +        @storage = chrome.storage[storageArea] +      chrome.storage.local.get null, (localItems) =>        localItems = {} if chrome.runtime.lastError        @storage.get null, (syncedItems) => @@ -32,7 +42,7 @@ Settings =            @handleUpdateFromChromeStorage key, value for own key, value of extend localItems, syncedItems          chrome.storage.onChanged.addListener (changes, area) => -          @propagateChangesFromChromeStorage changes if area == "sync" +          @propagateChangesFromChromeStorage changes if area == storageArea          @runOnLoadedCallbacks() @@ -71,9 +81,9 @@ Settings =      if @shouldSyncKey key        if shouldSetInSyncedStorage          setting = {}; setting[key] = @cache[key] -        @log "   chrome.storage.sync.set(#{key})" +        @log "   chrome.storage.#{storageArea}.set(#{key})"          @storage.set setting -      if Utils.isBackgroundPage() +      if Utils.isBackgroundPage() and storageArea == "sync"          # Remove options installed by the "copyNonDefaultsToChromeStorage-20150717" migration; see below.          @log "   chrome.storage.local.remove(#{key})"          chrome.storage.local.remove key @@ -98,7 +108,7 @@ Settings =    nuke: (key) ->      delete localStorage[key]      chrome.storage.local.remove key -    chrome.storage.sync.remove key +    chrome.storage.sync?.remove key    # For development only.    log: (args...) -> @@ -169,7 +179,7 @@ Settings =        # az: http://www.amazon.com/s/?field-keywords=%s Amazon        # qw: https://www.qwant.com/?q=%s Qwant        """ -    newTabUrl: "chrome://newtab" +    newTabUrl: "about:newtab"      grabBackFocus: false      regexFindMode: false      waitForEnterForFilteredHints: false # Note: this defaults to true for new users; see below. diff --git a/manifest.json b/manifest.json index 5dceb6d5..b6b4bd4e 100644 --- a/manifest.json +++ b/manifest.json @@ -36,7 +36,7 @@    "content_scripts": [      {        "_comment": -        "IMPORTANT: All resources listed here must also be listed in ./pages/vimium_resources.html.", +        "IMPORTANT: All resources listed here must also be listed with the others -- in order -- in ./pages/*.html",        "matches": ["<all_urls>"],        "js": ["lib/utils.js",               "lib/keyboard_utils.js", diff --git a/pages/blank.html b/pages/blank.html index c238282d..8f10c7f6 100644 --- a/pages/blank.html +++ b/pages/blank.html @@ -1,7 +1,27 @@  <html>    <head>      <title>New Tab</title> -    <link rel="import" href="vimium_resources.html"> +    <script src="../lib/utils.js"></script> +    <script src="../lib/keyboard_utils.js"></script> +    <script src="../lib/dom_utils.js"></script> +    <script src="../lib/rect.js"></script> +    <script src="../lib/handler_stack.js"></script> +    <script src="../lib/settings.js"></script> +    <script src="../lib/find_mode_history.js"></script> +    <script src="../content_scripts/mode.js"></script> +    <script src="../content_scripts/ui_component.js"></script> +    <script src="../content_scripts/link_hints.js"></script> +    <script src="../content_scripts/vomnibar.js"></script> +    <script src="../content_scripts/scroller.js"></script> +    <script src="../content_scripts/marks.js"></script> +    <script src="../content_scripts/mode_insert.js"></script> +    <script src="../content_scripts/mode_find.js"></script> +    <script src="../content_scripts/mode_key_handler.js"></script> +    <script src="../content_scripts/mode_visual.js"></script> +    <script src="../content_scripts/hud.js"></script> +    <script src="../content_scripts/vimium_frontend.js"></script> +    <link rel="stylesheet" type="text/css" href="../content_scripts/vimium.css" /> +    </head>    <body>    </body> diff --git a/pages/completion_engines.html b/pages/completion_engines.html index 0c350664..0c86edf7 100644 --- a/pages/completion_engines.html +++ b/pages/completion_engines.html @@ -4,7 +4,27 @@      <!-- We re-use some styling from the options page, so that the look and feel here is similar -->      <link rel="stylesheet" type="text/css" href="options.css">      <link rel="stylesheet" type="text/css" href="completion_engines.css"> -    <link rel="import" href="vimium_resources.html"> +    <script src="../lib/utils.js"></script> +    <script src="../lib/keyboard_utils.js"></script> +    <script src="../lib/dom_utils.js"></script> +    <script src="../lib/rect.js"></script> +    <script src="../lib/handler_stack.js"></script> +    <script src="../lib/settings.js"></script> +    <script src="../lib/find_mode_history.js"></script> +    <script src="../content_scripts/mode.js"></script> +    <script src="../content_scripts/ui_component.js"></script> +    <script src="../content_scripts/link_hints.js"></script> +    <script src="../content_scripts/vomnibar.js"></script> +    <script src="../content_scripts/scroller.js"></script> +    <script src="../content_scripts/marks.js"></script> +    <script src="../content_scripts/mode_insert.js"></script> +    <script src="../content_scripts/mode_find.js"></script> +    <script src="../content_scripts/mode_key_handler.js"></script> +    <script src="../content_scripts/mode_visual.js"></script> +    <script src="../content_scripts/hud.js"></script> +    <script src="../content_scripts/vimium_frontend.js"></script> +    <link rel="stylesheet" type="text/css" href="../content_scripts/vimium.css" /> +      <script src="../background_scripts/completion_engines.js"></script>      <script src="completion_engines.js"></script>    </head> diff --git a/pages/help_dialog.html b/pages/help_dialog.html index 7bc0d86c..b2d14dab 100644 --- a/pages/help_dialog.html +++ b/pages/help_dialog.html @@ -1,7 +1,27 @@  <html>    <head>      <title>Vimium Help</title> -    <link rel="import" href="vimium_resources.html"> +    <script src="../lib/utils.js"></script> +    <script src="../lib/keyboard_utils.js"></script> +    <script src="../lib/dom_utils.js"></script> +    <script src="../lib/rect.js"></script> +    <script src="../lib/handler_stack.js"></script> +    <script src="../lib/settings.js"></script> +    <script src="../lib/find_mode_history.js"></script> +    <script src="../content_scripts/mode.js"></script> +    <script src="../content_scripts/ui_component.js"></script> +    <script src="../content_scripts/link_hints.js"></script> +    <script src="../content_scripts/vomnibar.js"></script> +    <script src="../content_scripts/scroller.js"></script> +    <script src="../content_scripts/marks.js"></script> +    <script src="../content_scripts/mode_insert.js"></script> +    <script src="../content_scripts/mode_find.js"></script> +    <script src="../content_scripts/mode_key_handler.js"></script> +    <script src="../content_scripts/mode_visual.js"></script> +    <script src="../content_scripts/hud.js"></script> +    <script src="../content_scripts/vimium_frontend.js"></script> +    <link rel="stylesheet" type="text/css" href="../content_scripts/vimium.css" /> +      <script type="text/javascript" src="ui_component_server.js"></script>      <script type="text/javascript" src="help_dialog.js"></script>    </head> diff --git a/pages/hud.coffee b/pages/hud.coffee index 36e4cbd2..af528203 100644 --- a/pages/hud.coffee +++ b/pages/hud.coffee @@ -58,7 +58,10 @@ handlers =      hud.innerText = "/\u200A" # \u200A is a "hair space", to leave enough space before the caret/first char.      inputElement = document.createElement "span" -    inputElement.contentEditable = "plaintext-only" +    try # NOTE(mrmr1993): Chrome supports non-standard "plaintext-only", which is what we *really* want. +      inputElement.contentEditable = "plaintext-only" +    catch # Fallback to standard-compliant version. +      inputElement.contentEditable = "true"      inputElement.id = "hud-find-input"      hud.appendChild inputElement diff --git a/pages/logging.html b/pages/logging.html index bc4ffb80..6eff58c4 100644 --- a/pages/logging.html +++ b/pages/logging.html @@ -1,7 +1,27 @@  <html>    <head>      <title>Vimium Logging</title> -    <link rel="import" href="vimium_resources.html"> +    <script src="../lib/utils.js"></script> +    <script src="../lib/keyboard_utils.js"></script> +    <script src="../lib/dom_utils.js"></script> +    <script src="../lib/rect.js"></script> +    <script src="../lib/handler_stack.js"></script> +    <script src="../lib/settings.js"></script> +    <script src="../lib/find_mode_history.js"></script> +    <script src="../content_scripts/mode.js"></script> +    <script src="../content_scripts/ui_component.js"></script> +    <script src="../content_scripts/link_hints.js"></script> +    <script src="../content_scripts/vomnibar.js"></script> +    <script src="../content_scripts/scroller.js"></script> +    <script src="../content_scripts/marks.js"></script> +    <script src="../content_scripts/mode_insert.js"></script> +    <script src="../content_scripts/mode_find.js"></script> +    <script src="../content_scripts/mode_key_handler.js"></script> +    <script src="../content_scripts/mode_visual.js"></script> +    <script src="../content_scripts/hud.js"></script> +    <script src="../content_scripts/vimium_frontend.js"></script> +    <link rel="stylesheet" type="text/css" href="../content_scripts/vimium.css" /> +      <script src="logging.js"></script>      <style type="text/css">        body { diff --git a/pages/options.html b/pages/options.html index 92bed6f0..34ff70f9 100644 --- a/pages/options.html +++ b/pages/options.html @@ -2,7 +2,27 @@    <head>      <title>Vimium Options</title>      <link rel="stylesheet" type="text/css" href="options.css"> -    <link rel="import" href="vimium_resources.html"> +    <script src="../lib/utils.js"></script> +    <script src="../lib/keyboard_utils.js"></script> +    <script src="../lib/dom_utils.js"></script> +    <script src="../lib/rect.js"></script> +    <script src="../lib/handler_stack.js"></script> +    <script src="../lib/settings.js"></script> +    <script src="../lib/find_mode_history.js"></script> +    <script src="../content_scripts/mode.js"></script> +    <script src="../content_scripts/ui_component.js"></script> +    <script src="../content_scripts/link_hints.js"></script> +    <script src="../content_scripts/vomnibar.js"></script> +    <script src="../content_scripts/scroller.js"></script> +    <script src="../content_scripts/marks.js"></script> +    <script src="../content_scripts/mode_insert.js"></script> +    <script src="../content_scripts/mode_find.js"></script> +    <script src="../content_scripts/mode_key_handler.js"></script> +    <script src="../content_scripts/mode_visual.js"></script> +    <script src="../content_scripts/hud.js"></script> +    <script src="../content_scripts/vimium_frontend.js"></script> +    <link rel="stylesheet" type="text/css" href="../content_scripts/vimium.css" /> +      <script type="text/javascript" src="options.js"></script>    </head> diff --git a/pages/vimium_resources.html b/pages/vimium_resources.html deleted file mode 100644 index 2fad22a2..00000000 --- a/pages/vimium_resources.html +++ /dev/null @@ -1,24 +0,0 @@ -<!-- All content scripts (and CSS) listed in the manifest must be listed here too. -     These load Vimium on Vimium's internal pages (such as the options page).  --> - -<script src="/lib/utils.js"></script> -<script src="/lib/keyboard_utils.js"></script> -<script src="/lib/dom_utils.js"></script> -<script src="/lib/rect.js"></script> -<script src="/lib/handler_stack.js"></script> -<script src="/lib/settings.js"></script> -<script src="/lib/find_mode_history.js"></script> -<script src="/content_scripts/mode.js"></script> -<script src="/content_scripts/ui_component.js"></script> -<script src="/content_scripts/link_hints.js"></script> -<script src="/content_scripts/vomnibar.js"></script> -<script src="/content_scripts/scroller.js"></script> -<script src="/content_scripts/marks.js"></script> -<script src="/content_scripts/mode_insert.js"></script> -<script src="/content_scripts/mode_find.js"></script> -<script src="/content_scripts/mode_key_handler.js"></script> -<script src="/content_scripts/mode_visual.js"></script> -<script src="/content_scripts/hud.js"></script> -<script src="/content_scripts/vimium_frontend.js"></script> - -<link rel="stylesheet" type="text/css" href="/content_scripts/vimium.css" /> | 
