diff options
Diffstat (limited to 'pages')
| -rw-r--r-- | pages/blank.html | 1 | ||||
| -rw-r--r-- | pages/completion_engines.html | 1 | ||||
| -rw-r--r-- | pages/help_dialog.coffee | 2 | ||||
| -rw-r--r-- | pages/help_dialog.html | 1 | ||||
| -rw-r--r-- | pages/hud.coffee | 14 | ||||
| -rw-r--r-- | pages/hud.html | 1 | ||||
| -rw-r--r-- | pages/logging.html | 1 | ||||
| -rw-r--r-- | pages/options.coffee | 57 | ||||
| -rw-r--r-- | pages/options.css | 3 | ||||
| -rw-r--r-- | pages/options.html | 35 |
10 files changed, 110 insertions, 6 deletions
diff --git a/pages/blank.html b/pages/blank.html index 8f10c7f6..d026912e 100644 --- a/pages/blank.html +++ b/pages/blank.html @@ -19,6 +19,7 @@ <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" /> diff --git a/pages/completion_engines.html b/pages/completion_engines.html index 0c86edf7..3313b26c 100644 --- a/pages/completion_engines.html +++ b/pages/completion_engines.html @@ -22,6 +22,7 @@ <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" /> diff --git a/pages/help_dialog.coffee b/pages/help_dialog.coffee index f36155e4..08180a72 100644 --- a/pages/help_dialog.coffee +++ b/pages/help_dialog.coffee @@ -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()) diff --git a/pages/help_dialog.html b/pages/help_dialog.html index 1da54efd..7f053265 100644 --- a/pages/help_dialog.html +++ b/pages/help_dialog.html @@ -19,6 +19,7 @@ <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" /> diff --git a/pages/hud.coffee b/pages/hud.coffee index 0d2ec2f7..5ff2e07e 100644 --- a/pages/hud.coffee +++ b/pages/hud.coffee @@ -95,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 3e8cf976..7bd27171 100644 --- a/pages/hud.html +++ b/pages/hud.html @@ -7,6 +7,7 @@ <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.html b/pages/logging.html index 6eff58c4..17aafd70 100644 --- a/pages/logging.html +++ b/pages/logging.html @@ -19,6 +19,7 @@ <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" /> diff --git a/pages/options.coffee b/pages/options.coffee index 035dd403..86b6122d 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) -> @@ -323,6 +330,52 @@ document.addEventListener "DOMContentLoaded", -> xhr.send() +# +# Backup and restore. "?" is for the tests." +DomUtils?.documentReady -> + 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 5e2a3dfc..dab342a3 100644 --- a/pages/options.css +++ b/pages/options.css @@ -231,3 +231,6 @@ input.pattern, input.passKeys, .exclusionHeaderText { white-space: nowrap; width: 110px; } +#backupLink { + cursor: pointer; +} diff --git a/pages/options.html b/pages/options.html index 46307b6f..b118bbd9 100644 --- a/pages/options.html +++ b/pages/options.html @@ -20,6 +20,7 @@ <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" /> @@ -66,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> @@ -271,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> @@ -315,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> |
