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" /> |
