diff options
| author | Phil Crosby | 2012-06-10 22:59:24 -0700 |
|---|---|---|
| committer | Phil Crosby | 2012-06-12 22:00:34 -0700 |
| commit | d4c6b5708a6c388026dc348b81dd168b345d60de (patch) | |
| tree | 76781720af45fc0c6aa71c2605ce8ab72cfa85f1 /background_scripts | |
| parent | 83b11294b06968ca71046098b8b0d0e3268cc7fe (diff) | |
| download | vimium-d4c6b5708a6c388026dc348b81dd168b345d60de.tar.bz2 | |
Port commands.js to coffeescript
Diffstat (limited to 'background_scripts')
| -rw-r--r-- | background_scripts/commands.coffee | 240 | ||||
| -rw-r--r-- | background_scripts/commands.js | 252 |
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"]; |
