aboutsummaryrefslogtreecommitdiffstats
path: root/pages
diff options
context:
space:
mode:
Diffstat (limited to 'pages')
-rw-r--r--pages/blank.html23
-rw-r--r--pages/completion_engines.html23
-rw-r--r--pages/help_dialog.coffee9
-rw-r--r--pages/help_dialog.html25
-rw-r--r--pages/hud.coffee32
-rw-r--r--pages/hud.html3
-rw-r--r--pages/logging.coffee1
-rw-r--r--pages/logging.html23
-rw-r--r--pages/options.coffee99
-rw-r--r--pages/options.css7
-rw-r--r--pages/options.html82
-rw-r--r--pages/popup.html2
-rw-r--r--pages/vimium_resources.html24
-rw-r--r--pages/vomnibar.coffee14
-rw-r--r--pages/vomnibar.html1
15 files changed, 302 insertions, 66 deletions
diff --git a/pages/blank.html b/pages/blank.html
index c238282d..d026912e 100644
--- a/pages/blank.html
+++ b/pages/blank.html
@@ -1,7 +1,28 @@
<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/mode_normal.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..3313b26c 100644
--- a/pages/completion_engines.html
+++ b/pages/completion_engines.html
@@ -4,7 +4,28 @@
<!-- 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/mode_normal.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.coffee b/pages/help_dialog.coffee
index 4ac9116b..08180a72 100644
--- a/pages/help_dialog.coffee
+++ b/pages/help_dialog.coffee
@@ -73,7 +73,7 @@ HelpDialog =
for key in command.keys.sort compareKeys
@instantiateHtmlTemplate keysElement, "#keysTemplate", (element) ->
lastElement = element
- $$(element, ".vimiumHelpDialogKey").innerHTML = Utils.escapeHtml key
+ $$(element, ".vimiumHelpDialogKey").textContent = key
# And strip off the trailing ", ", if necessary.
lastElement.removeChild $$ lastElement, ".commaSeparator" if lastElement
@@ -83,7 +83,7 @@ HelpDialog =
commandNameElement.textContent = command.command
commandNameElement.title = "Click to copy \"#{command.command}\" to clipboard."
commandNameElement.addEventListener "click", ->
- chrome.runtime.sendMessage handler: "copyToClipboard", data: commandNameElement.textContent
+ HUD.copyToClipboard commandNameElement.textContent
HUD.showForDuration("Yanked #{commandNameElement.textContent}.", 2000)
@showAdvancedCommands(@getShowAdvancedCommands())
@@ -109,7 +109,7 @@ HelpDialog =
vimiumHelpDialogContainer.scrollTop += scrollHeightDelta if 0 < scrollHeightDelta
showAdvancedCommands: (visible) ->
- document.getElementById("toggleAdvancedCommands").innerHTML =
+ document.getElementById("toggleAdvancedCommands").textContent =
if visible then "Hide advanced commands" else "Show advanced commands"
# Add/remove the showAdvanced class to show/hide advanced commands.
@@ -131,6 +131,9 @@ UIComponentServer.registerHandler (event) ->
# Abandon any HUD which might be showing within the help dialog.
HUD.abandon()
+document.addEventListener "DOMContentLoaded", ->
+ DomUtils.injectUserCss() # Manually inject custom user styles.
+
root = exports ? window
root.HelpDialog = HelpDialog
root.isVimiumHelpDialog = true
diff --git a/pages/help_dialog.html b/pages/help_dialog.html
index 7bc0d86c..7f053265 100644
--- a/pages/help_dialog.html
+++ b/pages/help_dialog.html
@@ -1,7 +1,28 @@
<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/mode_normal.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>
@@ -87,7 +108,7 @@
<a class="vimiumHelDialogLink" target="_blank"
href="https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb/reviews">Leave us
feedback</a>.<br/>
- Found a bug? <a class="vimiumHelDialogLink" target="_blank" href="http://github.com/philc/vimium/issues">Report it here</a>.
+ Found a bug? <a class="vimiumHelDialogLink" target="_blank" href="https://github.com/philc/vimium/issues">Report it here</a>.
</div>
<div class="vimiumReset vimiumColumn" style="text-align:right">
<span class="vimiumReset">Version <span id="help-dialog-version"></span></span><br/>
diff --git a/pages/hud.coffee b/pages/hud.coffee
index 36e4cbd2..5ff2e07e 100644
--- a/pages/hud.coffee
+++ b/pages/hud.coffee
@@ -12,25 +12,28 @@ setTextInInputElement = (inputElement, text) ->
selection.removeAllRanges()
selection.addRange range
+document.addEventListener "DOMContentLoaded", ->
+ DomUtils.injectUserCss() # Manually inject custom user styles.
+
document.addEventListener "keydown", (event) ->
inputElement = document.getElementById "hud-find-input"
return unless inputElement? # Don't do anything if we're not in find mode.
- if (event.keyCode in [keyCodes.backspace, keyCodes.deleteKey] and inputElement.textContent.length == 0) or
- event.keyCode == keyCodes.enter or KeyboardUtils.isEscape event
+ if (KeyboardUtils.isBackspace(event) and inputElement.textContent.length == 0) or
+ event.key == "Enter" or KeyboardUtils.isEscape event
UIComponentServer.postMessage
name: "hideFindMode"
- exitEventIsEnter: event.keyCode == keyCodes.enter
+ exitEventIsEnter: event.key == "Enter"
exitEventIsEscape: KeyboardUtils.isEscape event
- else if event.keyCode == keyCodes.upArrow
+ else if event.key == "ArrowUp"
if rawQuery = FindModeHistory.getQuery findMode.historyIndex + 1
findMode.historyIndex += 1
findMode.partialQuery = findMode.rawQuery if findMode.historyIndex == 0
setTextInInputElement inputElement, rawQuery
findMode.executeQuery()
- else if event.keyCode == keyCodes.downArrow
+ else if event.key == "ArrowDown"
findMode.historyIndex = Math.max -1, findMode.historyIndex - 1
rawQuery = if 0 <= findMode.historyIndex then FindModeHistory.getQuery findMode.historyIndex else findMode.partialQuery
setTextInInputElement inputElement, rawQuery
@@ -58,7 +61,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
@@ -89,5 +95,19 @@ handlers =
" (No matches)"
countElement.textContent = if showMatchText then countText else ""
+ copyToClipboard: (data) ->
+ focusedElement = document.activeElement
+ Clipboard.copy data
+ focusedElement?.focus()
+ window.parent.focus()
+ UIComponentServer.postMessage {name: "unfocusIfFocused"}
+
+ pasteFromClipboard: ->
+ focusedElement = document.activeElement
+ data = Clipboard.paste()
+ focusedElement?.focus()
+ window.parent.focus()
+ UIComponentServer.postMessage {name: "pasteResponse", data}
+
UIComponentServer.registerHandler ({data}) -> handlers[data.name ? data]? data
FindModeHistory.init()
diff --git a/pages/hud.html b/pages/hud.html
index 60d737e1..7bd27171 100644
--- a/pages/hud.html
+++ b/pages/hud.html
@@ -2,9 +2,12 @@
<head>
<title>HUD</title>
<link rel="stylesheet" type="text/css" href="../content_scripts/vimium.css" />
+ <script type="text/javascript" src="../lib/utils.js"></script>
<script type="text/javascript" src="../lib/dom_utils.js"></script>
+ <script type="text/javascript" src="../lib/settings.js"></script>
<script type="text/javascript" src="../lib/keyboard_utils.js"></script>
<script type="text/javascript" src="../lib/find_mode_history.js"></script>
+ <script type="text/javascript" src="../lib/clipboard.js"></script>
<script type="text/javascript" src="ui_component_server.js"></script>
<script type="text/javascript" src="hud.js"></script>
</head>
diff --git a/pages/logging.coffee b/pages/logging.coffee
index 3ccef4ff..a437b442 100644
--- a/pages/logging.coffee
+++ b/pages/logging.coffee
@@ -1,6 +1,7 @@
$ = (id) -> document.getElementById id
document.addEventListener "DOMContentLoaded", ->
+ DomUtils.injectUserCss() # Manually inject custom user styles.
$("vimiumVersion").innerText = Utils.getCurrentVersion()
chrome.storage.local.get "installDate", (items) ->
diff --git a/pages/logging.html b/pages/logging.html
index bc4ffb80..17aafd70 100644
--- a/pages/logging.html
+++ b/pages/logging.html
@@ -1,7 +1,28 @@
<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/mode_normal.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.coffee b/pages/options.coffee
index 7021322a..9e95bcd3 100644
--- a/pages/options.coffee
+++ b/pages/options.coffee
@@ -39,9 +39,14 @@ class Option
bgSettings.clear @field
@fetch()
+ @onSaveCallbacks: []
+ @onSave: (callback) ->
+ @onSaveCallbacks.push callback
+
# Static method.
@saveOptions: ->
Option.all.map (option) -> option.save()
+ callback() for callback in @onSaveCallbacks
# Abstract method; only implemented in sub-classes.
# Populate the option's DOM element (@element) with the setting's current value.
@@ -93,8 +98,10 @@ class ExclusionRulesOption extends Option
element
populateElement: (rules) ->
- for rule in rules
- @appendRule rule
+ # For the case of restoring a backup, we first have to remove existing rules.
+ exclusionRules = $ "exclusionRules"
+ exclusionRules.deleteRow 1 while exclusionRules.rows[1]
+ @appendRule rule for rule in rules
# Append a row for a new rule. Return the newly-added element.
appendRule: (rule) ->
@@ -193,6 +200,7 @@ Options =
nextPatterns: NonEmptyTextOption
previousPatterns: NonEmptyTextOption
regexFindMode: CheckBoxOption
+ ignoreKeyboardLayout: CheckBoxOption
scrollStepSize: NumberOption
smoothScroll: CheckBoxOption
grabBackFocus: CheckBoxOption
@@ -203,7 +211,7 @@ Options =
initOptionsPage = ->
onUpdated = ->
$("saveOptions").removeAttribute "disabled"
- $("saveOptions").innerHTML = "Save Changes"
+ $("saveOptions").textContent = "Save Changes"
# Display either "linkHintNumbers" or "linkHintCharacters", depending upon "filterLinkHints".
maintainLinkHintsView = ->
@@ -221,10 +229,10 @@ initOptionsPage = ->
maintainAdvancedOptions = ->
if bgSettings.get "optionsPage_showAdvancedOptions"
$("advancedOptions").style.display = "table-row-group"
- $("advancedOptionsButton").innerHTML = "Hide Advanced Options"
+ $("advancedOptionsButton").textContent = "Hide Advanced Options"
else
$("advancedOptions").style.display = "none"
- $("advancedOptionsButton").innerHTML = "Show Advanced Options"
+ $("advancedOptionsButton").textContent = "Show Advanced Options"
maintainAdvancedOptions()
toggleAdvancedOptions = (event) ->
@@ -237,9 +245,10 @@ initOptionsPage = ->
HelpDialog.toggle showAllCommandDetails: true
saveOptions = ->
+ $("linkHintCharacters").value = $("linkHintCharacters").value.toLowerCase()
Option.saveOptions()
$("saveOptions").disabled = true
- $("saveOptions").innerHTML = "No Changes"
+ $("saveOptions").textContent = "Saved"
$("saveOptions").addEventListener "click", saveOptions
$("advancedOptionsButton").addEventListener "click", toggleAdvancedOptions
@@ -248,7 +257,7 @@ initOptionsPage = ->
for element in document.getElementsByClassName "nonEmptyTextOption"
element.className = element.className + " example info"
- element.innerHTML = "Leave empty to reset this option."
+ element.textContent = "Leave empty to reset this option."
window.onbeforeunload = -> "You have unsaved changes to options." unless $("saveOptions").disabled
@@ -264,10 +273,30 @@ initOptionsPage = ->
maintainLinkHintsView()
initPopupPage = ->
- chrome.tabs.getSelected null, (tab) ->
+ chrome.tabs.query { active: true, currentWindow: true }, ([tab]) ->
exclusions = null
document.getElementById("optionsLink").setAttribute "href", chrome.runtime.getURL("pages/options.html")
+ tabPorts = chrome.extension.getBackgroundPage().portsForTab[tab.id]
+ unless tabPorts and Object.keys(tabPorts).length > 0
+ # The browser has disabled Vimium on this page. Place a message explaining this into the popup.
+ document.body.innerHTML = """
+ <div style="width: 400px; margin: 5px;">
+ <p style="margin-bottom: 5px;">
+ Vimium is not running on this page.
+ </p>
+ <p style="margin-bottom: 5px;">
+ Your browser does not run web extensions like Vimium on certain pages,
+ usually for security reasons.
+ </p>
+ <p>
+ Unless your browser's developers change their policy, then unfortunately it is not possible to make Vimium (or any other
+ web extension, for that matter) work on this page.
+ </p>
+ </div>
+ """
+ return
+
# As the active URL, we choose the most recently registered URL from a frame in the tab, or the tab's own
# URL.
url = chrome.extension.getBackgroundPage().urlForTab[tab.id] || tab.url
@@ -285,12 +314,12 @@ initPopupPage = ->
onUpdated = ->
$("helpText").innerHTML = "Type <strong>Ctrl-Enter</strong> to save and close."
$("saveOptions").removeAttribute "disabled"
- $("saveOptions").innerHTML = "Save Changes"
+ $("saveOptions").textContent = "Save Changes"
updateState() if exclusions
saveOptions = ->
Option.saveOptions()
- $("saveOptions").innerHTML = "Saved"
+ $("saveOptions").textContent = "Saved"
$("saveOptions").disabled = true
$("saveOptions").addEventListener "click", saveOptions
@@ -309,6 +338,7 @@ initPopupPage = ->
#
# Initialization.
document.addEventListener "DOMContentLoaded", ->
+ DomUtils.injectUserCss() # Manually inject custom user styles.
xhr = new XMLHttpRequest()
xhr.open 'GET', chrome.extension.getURL('pages/exclusions.html'), true
xhr.onreadystatechange = ->
@@ -320,6 +350,55 @@ document.addEventListener "DOMContentLoaded", ->
xhr.send()
+#
+# Backup and restore. "?" is for the tests."
+DomUtils?.documentReady ->
+ # Only initialize backup/restore on the options page (not the popup).
+ return unless location.pathname == "/pages/options.html"
+
+ restoreSettingsVersion = null
+
+ populateBackupLinkUrl = ->
+ backup = settingsVersion: bgSettings.get "settingsVersion"
+ for option in Option.all
+ backup[option.field] = option.readValueFromElement()
+ # Create the blob in the background page so it isn't garbage collected when the page closes in FF.
+ bgWin = chrome.extension.getBackgroundPage()
+ blob = new bgWin.Blob [ JSON.stringify backup, null, 2 ]
+ $("backupLink").href = bgWin.URL.createObjectURL blob
+
+ $("backupLink").addEventListener "mousedown", populateBackupLinkUrl, true
+
+ $("chooseFile").addEventListener "change", (event) ->
+ document.activeElement?.blur()
+ files = event.target.files
+ if files.length == 1
+ file = files[0]
+ reader = new FileReader
+ reader.readAsText file
+ reader.onload = (event) ->
+ try
+ backup = JSON.parse reader.result
+ catch
+ alert "Failed to parse Vimium backup."
+ return
+
+ restoreSettingsVersion = backup["settingsVersion"] if "settingsVersion" of backup
+ for option in Option.all
+ if option.field of backup
+ option.populateElement backup[option.field]
+ option.onUpdated()
+
+ Option.onSave ->
+ # If we're restoring a backup, then restore the backed up settingsVersion.
+ if restoreSettingsVersion?
+ bgSettings.set "settingsVersion", restoreSettingsVersion
+ restoreSettingsVersion = null
+ # Reset the restore-backup input.
+ $("chooseFile").value = ""
+ # We need to apply migrations in case we are restoring an old backup.
+ bgSettings.applyMigrations()
+
# Exported for tests.
root = exports ? window
extend root, {Options, isVimiumOptionsPage: true}
diff --git a/pages/options.css b/pages/options.css
index 490ae164..dab342a3 100644
--- a/pages/options.css
+++ b/pages/options.css
@@ -115,7 +115,7 @@ input#scrollStepSize {
textarea#userDefinedLinkHintCss, textarea#keyMappings, textarea#searchEngines {
width: 100%;;
min-height: 140px;
- white-space: nowrap;
+ white-space: pre;
}
input#previousPatterns, input#nextPatterns {
width: 100%;
@@ -227,7 +227,10 @@ input.pattern, input.passKeys, .exclusionHeaderText {
#saveOptionsTableData {
float: right;
}
-#saveOptions {
+#saveOptions, #exclusionAddButton {
white-space: nowrap;
width: 110px;
}
+#backupLink {
+ cursor: pointer;
+}
diff --git a/pages/options.html b/pages/options.html
index 92bed6f0..b118bbd9 100644
--- a/pages/options.html
+++ b/pages/options.html
@@ -2,7 +2,28 @@
<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/mode_normal.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>
@@ -46,7 +67,7 @@ unmapAll
<a href="#" id="showCommands">Show available commands</a>.
</div>
</div>
- <textarea id="keyMappings" type="text"></textarea>
+ <textarea id="keyMappings" type="text" tabIndex="1"></textarea>
</td>
</tr>
<tr>
@@ -95,11 +116,11 @@ b: http://b.com/?q=%s description
</td>
</tr>
<tr id="linkHintNumbersContainer">
- <td class="caption">Numbers used<br/> for link hints</td>
+ <td class="caption">Characters used<br/> for link hints</td>
<td verticalAlign="top">
<div class="help">
<div class="example">
- The numbers placed next to each link after typing "f" to enter link-hint mode.
+ The characters placed next to each link after typing "f" to enter link-hint mode.
</div>
</div>
<input id="linkHintNumbers" type="text" />
@@ -125,7 +146,7 @@ b: http://b.com/?q=%s description
</div>
<label>
<input id="filterLinkHints" type="checkbox"/>
- Use the link's name and numbers for link-hint filtering
+ Use the link's name and characters for link-hint filtering
</label>
</td>
</tr>
@@ -182,7 +203,22 @@ b: http://b.com/?q=%s description
</div>
<label>
<input id="regexFindMode" type="checkbox"/>
- Treat find queries as regular expressions
+ Treat find queries as JavaScript regular expressions
+ </label>
+ </td>
+ </tr>
+ <tr>
+ <td class="caption"></td>
+ <td verticalAlign="top" class="booleanOption">
+ <div class="help">
+ <div class="example">
+ This forces the use of <code>en-US</code> QWERTY layout and
+ can be helpful for non-Latin keyboards.
+ </div>
+ </div>
+ <label>
+ <input id="ignoreKeyboardLayout" type="checkbox"/>
+ Ignore keyboard layout
</label>
</td>
</tr>
@@ -228,7 +264,7 @@ b: http://b.com/?q=%s description
<td verticalAlign="top">
<div class="help">
<div class="example">
- The search engine to use in the Vomnibar <br> (e.g.: "http://duckduckgo.com/?q=").
+ The search engine to use in the Vomnibar <br> (e.g.: "https://duckduckgo.com/?q=").
</div>
</div>
<input id="searchUrl" type="text" />
@@ -236,11 +272,12 @@ b: http://b.com/?q=%s description
</td>
</tr>
<tr>
- <td class="caption">CSS for link hints</td>
+ <td class="caption">CSS for Vimium UI</td>
<td verticalAlign="top">
<div class="help">
<div class="example">
- The CSS used to style the characters next to each link hint.<br/><br/>
+ These styles are applied to link hints, the Vomnibar, the help dialog, the exclusions pop-up and the HUD.<br />
+ By default, this CSS is used to style the characters next to each link hint.<br/><br/>
These styles are used in addition to and take precedence over Vimium's
default styles.
</div>
@@ -280,6 +317,33 @@ b: http://b.com/?q=%s description
</tr>
-->
</tbody>
+ <tbody id='backupAndRestore'>
+ <tr>
+ <td colspan="2"><header>Backup and Restore</header></td>
+ </tr>
+ <tr>
+ <td class="caption">Backup</td>
+ <td>
+ <div class="help">
+ <div class="example">
+ Click to backup your settings, or right-click and select <i>Save As</i>.
+ </div>
+ </div>
+ <a id="backupLink" download="vimium-options.json">Click to download backup</a>
+ </td>
+ </tr>
+ <tr>
+ <td class="caption">Restore</td>
+ <td>
+ <div class="help">
+ <div class="example">
+ Choose a backup file to restore, then click <i>Save Changes</i>, below, to confirm.
+ </div>
+ </div>
+ <input id="chooseFile" type="file" accept=".json" style="width: 200px;"/>
+ </td>
+ </tr>
+ </tbody>
</table>
</div>
diff --git a/pages/popup.html b/pages/popup.html
index fdf116e5..03c466d6 100644
--- a/pages/popup.html
+++ b/pages/popup.html
@@ -13,7 +13,6 @@
}
#helpText, #stateLine, #state { color: #979ca0; }
- #exclusionAddButton { width: 80px; }
#saveOptions {
margin-top: 5px; /* Match #exclusionAddButton */
@@ -49,6 +48,7 @@
</style>
<script src="../lib/utils.js"></script>
+ <script src="../lib/dom_utils.js"></script>
<script src="../lib/settings.js"></script>
<script 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" />
diff --git a/pages/vomnibar.coffee b/pages/vomnibar.coffee
index 95ef8151..8c790ca8 100644
--- a/pages/vomnibar.coffee
+++ b/pages/vomnibar.coffee
@@ -106,17 +106,17 @@ class VomnibarUI
if (KeyboardUtils.isEscape(event))
return "dismiss"
else if (key == "up" ||
- (event.shiftKey && event.keyCode == keyCodes.tab) ||
+ (event.shiftKey && event.key == "Tab") ||
(event.ctrlKey && (key == "k" || key == "p")))
return "up"
- else if (event.keyCode == keyCodes.tab && !event.shiftKey)
+ else if (event.key == "Tab" && !event.shiftKey)
return "tab"
else if (key == "down" ||
(event.ctrlKey && (key == "j" || key == "n")))
return "down"
- else if (event.keyCode == keyCodes.enter)
+ else if (event.key == "Enter")
return "enter"
- else if event.keyCode == keyCodes.backspace || event.keyCode == keyCodes.deleteKey
+ else if KeyboardUtils.isBackspace event
return "delete"
null
@@ -125,8 +125,7 @@ class VomnibarUI
@lastAction = action = @actionFromKeyEvent event
return true unless action # pass through
- openInNewTab = @forceNewTab ||
- (event.shiftKey || event.ctrlKey || event.altKey || KeyboardUtils.isPrimaryModifierKey(event))
+ openInNewTab = @forceNewTab || event.shiftKey || event.ctrlKey || event.altKey || event.metaKey
if (action == "dismiss")
@hide()
else if action in [ "tab", "down" ]
@@ -336,5 +335,8 @@ UIComponentServer.registerHandler (event) ->
when "hidden" then Vomnibar.onHidden()
when "activate" then Vomnibar.activate event.data
+document.addEventListener "DOMContentLoaded", ->
+ DomUtils.injectUserCss() # Manually inject custom user styles.
+
root = exports ? window
root.Vomnibar = Vomnibar
diff --git a/pages/vomnibar.html b/pages/vomnibar.html
index 87acc081..19736d78 100644
--- a/pages/vomnibar.html
+++ b/pages/vomnibar.html
@@ -2,6 +2,7 @@
<head>
<title>Vomnibar</title>
<script type="text/javascript" src="../lib/utils.js"></script>
+ <script type="text/javascript" src="../lib/settings.js"></script>
<script type="text/javascript" src="../lib/keyboard_utils.js"></script>
<script type="text/javascript" src="../lib/dom_utils.js"></script>
<script type="text/javascript" src="../lib/handler_stack.js"></script>