aboutsummaryrefslogtreecommitdiffstats
path: root/background_scripts
diff options
context:
space:
mode:
authorPhil Crosby2012-06-10 22:59:24 -0700
committerPhil Crosby2012-06-12 22:00:34 -0700
commitd4c6b5708a6c388026dc348b81dd168b345d60de (patch)
tree76781720af45fc0c6aa71c2605ce8ab72cfa85f1 /background_scripts
parent83b11294b06968ca71046098b8b0d0e3268cc7fe (diff)
downloadvimium-d4c6b5708a6c388026dc348b81dd168b345d60de.tar.bz2
Port commands.js to coffeescript
Diffstat (limited to 'background_scripts')
-rw-r--r--background_scripts/commands.coffee240
-rw-r--r--background_scripts/commands.js252
2 files changed, 240 insertions, 252 deletions
diff --git a/background_scripts/commands.coffee b/background_scripts/commands.coffee
new file mode 100644
index 00000000..0d689043
--- /dev/null
+++ b/background_scripts/commands.coffee
@@ -0,0 +1,240 @@
+Commands =
+ init: ->
+ for command of commandDescriptions
+ @addCommand(command, commandDescriptions[command][0], commandDescriptions[command][1])
+
+ availableCommands: {}
+ keyToCommandRegistry: {}
+
+ # Registers a command, making it available to be optionally bound to a key.
+ # options:
+ # - background: whether this command needs to be run against the background page.
+ # - passCountToFunction: true if this command should have any digits which were typed prior to the
+ # command passed to it. This is used to implement e.g. "closing of 3 tabs".
+ addCommand: (command, description, options) ->
+ if @availableCommands[command]
+ console.log(command, "is already defined! Check commands.js for duplicates.")
+ return
+
+ options ||= {}
+ @availableCommands[command] =
+ description: description
+ isBackgroundCommand: options.background
+ passCountToFunction: options.passCountToFunction
+
+ mapKeyToCommand: (key, command) ->
+ unless @availableCommands[command]
+ console.log(command, "doesn't exist!")
+ return
+
+ @keyToCommandRegistry[key] =
+ command: command
+ isBackgroundCommand: @availableCommands[command].isBackgroundCommand
+ passCountToFunction: @availableCommands[command].passCountToFunction
+
+ unmapKey: (key) -> delete @keyToCommandRegistry[key]
+
+ # Lower-case the appropriate portions of named keys.
+ #
+ # A key name is one of three forms exemplified by <c-a> <left> or <c-f12>
+ # (prefixed normal key, named key, or prefixed named key). Internally, for
+ # simplicity, we would like prefixes and key names to be lowercase, though
+ # humans may prefer other forms <Left> or <C-a>.
+ # On the other hand, <c-a> and <c-A> are different named keys - for one of
+ # them you have to press "shift" as well.
+ normalizeKey: (key) ->
+ key.replace(/<[acm]-/ig, (match) -> match.toLowerCase())
+ .replace(/<([acm]-)?([a-zA-Z0-9]{2,5})>/g, (match, optionalPrefix, keyName) ->
+ "<" + (if optionalPrefix then optionalPrefix else "") + keyName.toLowerCase() + ">")
+
+ parseCustomKeyMappings: (customKeyMappings) ->
+ lines = customKeyMappings.split("\n")
+
+ for line in lines
+ continue if (line[0] == "\"" || line[0] == "#")
+ split_line = line.split(/\s+/)
+
+ lineCommand = split_line[0]
+
+ if (lineCommand == "map")
+ continue if (split_line.length != 3)
+ key = @normalizeKey(split_line[1])
+ vimiumCommand = split_line[2]
+
+ continue unless @availableCommands[vimiumCommand]
+
+ console.log("Mapping", key, "to", vimiumCommand)
+ @mapKeyToCommand(key, vimiumCommand)
+ else if (lineCommand == "unmap")
+ continue if (split_line.length != 2)
+
+ key = @normalizeKey(split_line[1])
+ console.log("Unmapping", key)
+ @unmapKey(key)
+ else if (lineCommand == "unmapAll")
+ @keyToCommandRegistry = {}
+
+ clearKeyMappingsAndSetDefaults: ->
+ @keyToCommandRegistry = {}
+
+ for key of defaultKeyMappings
+ @mapKeyToCommand(key, defaultKeyMappings[key])
+
+ # An ordered listing of all available commands, grouped by type. This is the order they will
+ # be shown in the help page.
+ commandGroups:
+ pageNavigation:
+ ["scrollDown", "scrollUp", "scrollLeft", "scrollRight",
+ "scrollToTop", "scrollToBottom", "scrollToLeft", "scrollToRight", "scrollPageDown",
+ "scrollPageUp", "scrollFullPageUp", "scrollFullPageDown",
+ "reload", "toggleViewSource", "copyCurrentUrl", "linkHints.activateModeToCopyLinkUrl",
+ "openCopiedUrlInCurrentTab", "openCopiedUrlInNewTab", "goUp",
+ "enterInsertMode", "focusInput",
+ "linkHints.activateMode", "linkHints.activateModeToOpenInNewTab", "linkHints.activateModeWithQueue",
+ "vomnibar.activate", "vomnibar.activateWithCurrentUrl", "vomnibar.activateTabSelection",
+ "goPrevious", "goNext", "nextFrame"]
+ findCommands: ["enterFindMode", "performFind", "performBackwardsFind"]
+ historyNavigation:
+ ["goBack", "goForward"]
+ tabManipulation:
+ ["nextTab", "previousTab", "firstTab", "lastTab", "createTab", "removeTab", "restoreTab"]
+ misc:
+ ["showHelp"]
+
+ # Rarely used commands are not shown by default in the help dialog or in the README. The goal is to present
+ # a focused, high-signal set of commands to the new and casual user. Only those truly hungry for more power
+ # from Vimium will uncover these gems.
+ advancedCommands: [
+ "scrollToLeft", "scrollToRight",
+ "goUp", "focusInput", "linkHints.activateModeWithQueue",
+ "goPrevious", "goNext"]
+
+defaultKeyMappings =
+ "?": "showHelp"
+ "j": "scrollDown"
+ "k": "scrollUp"
+ "h": "scrollLeft"
+ "l": "scrollRight"
+ "gg": "scrollToTop"
+ "G": "scrollToBottom"
+ "zH": "scrollToLeft"
+ "zL": "scrollToRight"
+ "<c-e>": "scrollDown"
+ "<c-y>": "scrollUp"
+
+ "d": "scrollPageDown"
+ "u": "scrollPageUp"
+ "r": "reload"
+ "gs": "toggleViewSource"
+
+ "i": "enterInsertMode"
+
+ "H": "goBack"
+ "L": "goForward"
+ "gu": "goUp"
+
+ "gi": "focusInput"
+
+ "f": "linkHints.activateMode"
+ "F": "linkHints.activateModeToOpenInNewTab"
+ "<a-f>": "linkHints.activateModeWithQueue"
+
+ "/": "enterFindMode"
+ "n": "performFind"
+ "N": "performBackwardsFind"
+
+ "[[": "goPrevious"
+ "]]": "goNext"
+
+ "yy": "copyCurrentUrl"
+ "yf": "linkHints.activateModeToCopyLinkUrl"
+
+ "p": "openCopiedUrlInCurrentTab"
+ "P": "openCopiedUrlInNewTab"
+
+ "K": "nextTab"
+ "J": "previousTab"
+ "gt": "nextTab"
+ "gT": "previousTab"
+ "g0": "firstTab"
+ "g$": "lastTab"
+
+ "t": "createTab"
+ "x": "removeTab"
+ "X": "restoreTab"
+
+ "o": "vomnibar.activate"
+ "O": "vomnibar.activateWithCurrentUrl"
+
+ "T": "vomnibar.activateTabSelection"
+
+ "gf": "nextFrame"
+
+
+# This is a mapping of: commandIdentifier => [description, options].
+commandDescriptions =
+ # Navigating the current page
+ showHelp: ["Show help", { background: true }]
+ scrollDown: ["Scroll down"]
+ scrollUp: ["Scroll up"]
+ scrollLeft: ["Scroll left"]
+ scrollRight: ["Scroll right"]
+ scrollToTop: ["Scroll to the top of the page"]
+ scrollToBottom: ["Scroll to the bottom of the page"]
+ scrollToLeft: ["Scroll all the way to the left"]
+
+ scrollToRight: ["Scroll all the way to the right"]
+ scrollPageDown: ["Scroll a page down"]
+ scrollPageUp: ["Scroll a page up"]
+ scrollFullPageDown: ["Scroll a full page down"]
+ scrollFullPageUp: ["Scroll a full page up"]
+
+ reload: ["Reload the page"]
+ toggleViewSource: ["View page source"]
+
+ copyCurrentUrl: ["Copy the current URL to the clipboard"]
+ 'linkHints.activateModeToCopyLinkUrl': ["Copy a link URL to the clipboard"]
+ openCopiedUrlInCurrentTab: ["Open the clipboard's URL in the current tab", { background: true }]
+ openCopiedUrlInNewTab: ["Open the clipboard's URL in a new tab", { background: true }]
+
+ enterInsertMode: ["Enter insert mode"]
+
+ focusInput: ["Focus the first (or n-th) text box on the page", { passCountToFunction: true }]
+
+ 'linkHints.activateMode': ["Open a link in the current tab"]
+ 'linkHints.activateModeToOpenInNewTab': ["Open a link in a new tab"]
+ 'linkHints.activateModeWithQueue': ["Open multiple links in a new tab"]
+
+ enterFindMode: ["Enter find mode"]
+ performFind: ["Cycle forward to the next find match"]
+ performBackwardsFind: ["Cycle backward to the previous find match"]
+
+ goPrevious: ["Follow the link labeled previous or <"]
+ goNext: ["Follow the link labeled next or >"]
+
+ # Navigating your history
+ goBack: ["Go back in history", { passCountToFunction: true }]
+ goForward: ["Go forward in history", { passCountToFunction: true }]
+
+ # Navigating the URL hierarchy
+ goUp: ["Go up the URL hierarchy", { passCountToFunction: true }]
+
+ # Manipulating tabs
+ nextTab: ["Go one tab right", { background: true }]
+ previousTab: ["Go one tab left", { background: true }]
+ firstTab: ["Go to the first tab", { background: true }]
+ lastTab: ["Go to the last tab", { background: true }]
+ createTab: ["Create new tab", { background: true }]
+ removeTab: ["Close current tab", { background: true }]
+ restoreTab: ["Restore closed tab", { background: true }]
+
+ "vomnibar.activate": ["Open URL, bookmark, or history entry"]
+ "vomnibar.activateWithCurrentUrl": ["Open URL, bookmark, history entry, starting with the current URL"]
+ "vomnibar.activateTabSelection": ["Search through your open tabs"]
+
+ nextFrame: ["Cycle forward to the next frame on the page", { background: true, passCountToFunction: true }]
+
+Commands.init()
+
+root = exports ? window
+root.Commands = Commands
diff --git a/background_scripts/commands.js b/background_scripts/commands.js
deleted file mode 100644
index c9061822..00000000
--- a/background_scripts/commands.js
+++ /dev/null
@@ -1,252 +0,0 @@
-var availableCommands = {};
-var keyToCommandRegistry = {};
-
-/*
- * Registers a command, making it available to be optionally bound to a key.
- * options:
- * - background: whether this command needs to be run against the background page.
- * - passCountToFunction: true if this command should have any digits which were typed prior to the
- * command passed to it. This is used to implement e.g. "closing of 3 tabs".
- */
-function addCommand(command, description, options) {
- if (availableCommands[command]) {
- console.log(command, "is already defined! Check commands.js for duplicates.");
- return;
- }
-
- options = options || {};
- availableCommands[command] = { description: description,
- isBackgroundCommand: options.background,
- passCountToFunction: options.passCountToFunction
- };
-}
-
-function mapKeyToCommand(key, command) {
- if (!availableCommands[command]) {
- console.log(command, "doesn't exist!");
- return;
- }
-
- keyToCommandRegistry[key] = { command: command,
- isBackgroundCommand: availableCommands[command].isBackgroundCommand,
- passCountToFunction: availableCommands[command].passCountToFunction
- };
-}
-
-function unmapKey(key) { delete keyToCommandRegistry[key]; }
-
-/* Lower-case the appropriate portions of named keys.
- *
- * A key name is one of three forms exemplified by <c-a> <left> or <c-f12>
- * (prefixed normal key, named key, or prefixed named key). Internally, for
- * simplicity, we would like prefixes and key names to be lowercase, though
- * humans may prefer other forms <Left> or <C-a>.
- * On the other hand, <c-a> and <c-A> are different named keys - for one of
- * them you have to press "shift" as well.
- */
-function normalizeKey(key) {
- return key.replace(/<[acm]-/ig, function(match){ return match.toLowerCase(); })
- .replace(/<([acm]-)?([a-zA-Z0-9]{2,5})>/g, function(match, optionalPrefix, keyName){
- return "<" + ( optionalPrefix ? optionalPrefix : "") + keyName.toLowerCase() + ">";
- });
-}
-
-function parseCustomKeyMappings(customKeyMappings) {
- lines = customKeyMappings.split("\n");
-
- for (var i = 0; i < lines.length; i++) {
- if (lines[i][0] == "\"" || lines[i][0] == "#") { continue }
- split_line = lines[i].split(/\s+/);
-
- var lineCommand = split_line[0];
-
- if (lineCommand == "map") {
- if (split_line.length != 3) { continue; }
- var key = normalizeKey(split_line[1]);
- var vimiumCommand = split_line[2];
-
- if (!availableCommands[vimiumCommand]) { continue }
-
- console.log("Mapping", key, "to", vimiumCommand);
- mapKeyToCommand(key, vimiumCommand);
- }
- else if (lineCommand == "unmap") {
- if (split_line.length != 2) { continue; }
-
- var key = normalizeKey(split_line[1]);
-
- console.log("Unmapping", key);
- unmapKey(key);
- }
- else if (lineCommand == "unmapAll") {
- keyToCommandRegistry = {};
- }
- }
-}
-
-function clearKeyMappingsAndSetDefaults() {
- keyToCommandRegistry = {};
-
- var defaultKeyMappings = {
- "?": "showHelp",
- "j": "scrollDown",
- "k": "scrollUp",
- "h": "scrollLeft",
- "l": "scrollRight",
- "gg": "scrollToTop",
- "G": "scrollToBottom",
- "zH": "scrollToLeft",
- "zL": "scrollToRight",
- "<c-e>": "scrollDown",
- "<c-y>": "scrollUp",
-
- "d": "scrollPageDown",
- "u": "scrollPageUp",
- "r": "reload",
- "gs": "toggleViewSource",
-
- "i": "enterInsertMode",
-
- "H": "goBack",
- "L": "goForward",
- "gu": "goUp",
-
- "gi": "focusInput",
-
- "f": "linkHints.activateMode",
- "F": "linkHints.activateModeToOpenInNewTab",
- "<a-f>": "linkHints.activateModeWithQueue",
-
- "/": "enterFindMode",
- "n": "performFind",
- "N": "performBackwardsFind",
-
- "[[": "goPrevious",
- "]]": "goNext",
-
- "yy": "copyCurrentUrl",
- "yf": "linkHints.activateModeToCopyLinkUrl",
-
- "p": "openCopiedUrlInCurrentTab",
- "P": "openCopiedUrlInNewTab",
-
- "K": "nextTab",
- "J": "previousTab",
- "gt": "nextTab",
- "gT": "previousTab",
- "g0": "firstTab",
- "g$": "lastTab",
-
- "t": "createTab",
- "x": "removeTab",
- "X": "restoreTab",
-
- "o": "vomnibar.activate",
- "O": "vomnibar.activateWithCurrentUrl",
-
- "T": "vomnibar.activateTabSelection",
-
- "gf": "nextFrame",
- };
-
- for (var key in defaultKeyMappings)
- mapKeyToCommand(key, defaultKeyMappings[key]);
-}
-
-// This is a mapping of: commandIdentifier => [description, options].
-var commandDescriptions = {
- // Navigating the current page
- showHelp: ["Show help", { background: true }],
- scrollDown: ["Scroll down"],
- scrollUp: ["Scroll up"],
- scrollLeft: ["Scroll left"],
- scrollRight: ["Scroll right"],
- scrollToTop: ["Scroll to the top of the page"],
- scrollToBottom: ["Scroll to the bottom of the page"],
- scrollToLeft: ["Scroll all the way to the left"],
-
- scrollToRight: ["Scroll all the way to the right"],
- scrollPageDown: ["Scroll a page down"],
- scrollPageUp: ["Scroll a page up"],
- scrollFullPageDown: ["Scroll a full page down"],
- scrollFullPageUp: ["Scroll a full page up"],
-
- reload: ["Reload the page"],
- toggleViewSource: ["View page source"],
-
- copyCurrentUrl: ["Copy the current URL to the clipboard"],
- 'linkHints.activateModeToCopyLinkUrl': ["Copy a link URL to the clipboard"],
- openCopiedUrlInCurrentTab: ["Open the clipboard's URL in the current tab", { background: true }],
- openCopiedUrlInNewTab: ["Open the clipboard's URL in a new tab", { background: true }],
-
- enterInsertMode: ["Enter insert mode"],
-
- focusInput: ["Focus the first (or n-th) text box on the page", { passCountToFunction: true }],
-
- 'linkHints.activateMode': ["Open a link in the current tab"],
- 'linkHints.activateModeToOpenInNewTab': ["Open a link in a new tab"],
- 'linkHints.activateModeWithQueue': ["Open multiple links in a new tab"],
-
- enterFindMode: ["Enter find mode"],
- performFind: ["Cycle forward to the next find match"],
- performBackwardsFind: ["Cycle backward to the previous find match"],
-
- goPrevious: ["Follow the link labeled previous or <"],
- goNext: ["Follow the link labeled next or >"],
-
- // Navigating your history
- goBack: ["Go back in history", { passCountToFunction: true }],
- goForward: ["Go forward in history", { passCountToFunction: true }],
-
- // Navigating the URL hierarchy
- goUp: ["Go up the URL hierarchy", { passCountToFunction: true }],
-
- // Manipulating tabs
- nextTab: ["Go one tab right", { background: true }],
- previousTab: ["Go one tab left", { background: true }],
- firstTab: ["Go to the first tab", { background: true }],
- lastTab: ["Go to the last tab", { background: true }],
- createTab: ["Create new tab", { background: true }],
- removeTab: ["Close current tab", { background: true }],
- restoreTab: ["Restore closed tab", { background: true }],
-
- "vomnibar.activate": ["Open URL, bookmark, or history entry"],
- "vomnibar.activateWithCurrentUrl": ["Open URL, bookmark, history entry, starting with the current URL"],
- "vomnibar.activateTabSelection": ["Search through your open tabs"],
-
- nextFrame: ["Cycle forward to the next frame on the page", { background: true, passCountToFunction: true }]
-};
-
-for (var command in commandDescriptions)
- addCommand(command, commandDescriptions[command][0], commandDescriptions[command][1]);
-
-
-// An ordered listing of all available commands, grouped by type. This is the order they will
-// be shown in the help page.
-var commandGroups = {
- pageNavigation:
- ["scrollDown", "scrollUp", "scrollLeft", "scrollRight",
- "scrollToTop", "scrollToBottom", "scrollToLeft", "scrollToRight", "scrollPageDown",
- "scrollPageUp", "scrollFullPageUp", "scrollFullPageDown",
- "reload", "toggleViewSource", "copyCurrentUrl", "linkHints.activateModeToCopyLinkUrl",
- "openCopiedUrlInCurrentTab", "openCopiedUrlInNewTab", "goUp",
- "enterInsertMode", "focusInput",
- "linkHints.activateMode", "linkHints.activateModeToOpenInNewTab", "linkHints.activateModeWithQueue",
- "vomnibar.activate", "vomnibar.activateWithCurrentUrl", "vomnibar.activateTabSelection",
- "goPrevious", "goNext", "nextFrame"],
- findCommands: ["enterFindMode", "performFind", "performBackwardsFind"],
- historyNavigation:
- ["goBack", "goForward"],
- tabManipulation:
- ["nextTab", "previousTab", "firstTab", "lastTab", "createTab", "removeTab", "restoreTab"],
- misc:
- ["showHelp"]
-};
-
-// Rarely used commands are not shown by default in the help dialog or in the README. The goal is to present
-// a focused, high-signal set of commands to the new and casual user. Only those truly hungry for more power
-// from Vimium will uncover these gems.
-var advancedCommands = [
- "scrollToLeft", "scrollToRight",
- "goUp", "focusInput", "linkHints.activateModeWithQueue",
- "goPrevious", "goNext"];