aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--background_scripts/main.coffee9
-rw-r--r--background_scripts/marks.coffee4
-rw-r--r--content_scripts/hud.coffee4
-rw-r--r--content_scripts/marks.coffee2
-rw-r--r--content_scripts/mode_find.coffee12
-rw-r--r--lib/settings.coffee22
-rw-r--r--manifest.json2
-rw-r--r--pages/blank.html22
-rw-r--r--pages/completion_engines.html22
-rw-r--r--pages/help_dialog.html22
-rw-r--r--pages/hud.coffee5
-rw-r--r--pages/logging.html22
-rw-r--r--pages/options.html22
-rw-r--r--pages/vimium_resources.html24
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" />