From 9ff7f32774fa1543b0c0cbf36c0a0d99915c3c59 Mon Sep 17 00:00:00 2001 From: Simon Lydell Date: Thu, 5 Sep 2013 14:49:52 +0200 Subject: [PATCH] Let hint commands take advantage of the new modes All the hint commands do now is: 1. Define `callback`. 2. Run `vim.enterMode('hints', [callback])`. Much DRY:er! --- extension/packages/commands.coffee | 45 ++++++++++++------------------ extension/packages/modes.coffee | 14 ++++++---- 2 files changed, 27 insertions(+), 32 deletions(-) diff --git a/extension/packages/commands.coffee b/extension/packages/commands.coffee index 1e53f77..f5e48e9 100644 --- a/extension/packages/commands.coffee +++ b/extension/packages/commands.coffee @@ -57,22 +57,20 @@ command_open_tab = (vim) -> # Copy element URL to the clipboard command_marker_yank = (vim) -> - markers = hints.injectHints(vim.window.document) - if markers.length > 0 - cb = (marker) -> - if url = marker.element.href - marker.element.focus() - utils.writeToClipboard(vim.window, url) - else if utils.isTextInputElement(marker.element) - utils.writeToClipboard(vim.window, marker.element.value) + callback = (marker) -> + if url = marker.element.href + marker.element.focus() + utils.writeToClipboard(vim.window, url) + else if utils.isTextInputElement(marker.element) + utils.writeToClipboard(vim.window, marker.element.value) - vim.enterMode('hints', [markers, cb]) + vim.enterMode('hints', [callback]) # Focus element command_marker_focus = (vim) -> - markers = hints.injectHints(vim.window.document) - if markers.length > 0 - vim.enterMode('hints', [markers, (marker) -> marker.element.focus()]) + callback = (marker) -> marker.element.focus() + + vim.enterMode('hints', [callback]) # Copy current URL to the clipboard command_yank = (vim) -> @@ -203,26 +201,19 @@ command_restore_tab = (vim) -> # Follow links with hint markers command_follow = (vim) -> - if document = vim.window.document - markers = hints.injectHints(document) - if markers.length > 0 - # This callback will be called with the selected marker as argument - cb = (marker) -> - marker.element.focus() - utils.simulateClick(marker.element) + callback = (marker) -> + marker.element.focus() + utils.simulateClick(marker.element) - vim.enterMode('hints', [markers, cb]) + vim.enterMode('hints', [callback]) # Follow links in a new Tab with hint markers command_follow_in_tab = (vim) -> - markers = hints.injectHints(vim.window.document) - if markers.length > 0 - # This callback will be called with the selected marker as argument - cb = (marker) -> - marker.element.focus() - utils.simulateClick(marker.element, { metaKey: true, ctrlKey: true }) + callback = (marker) -> + marker.element.focus() + utils.simulateClick(marker.element, { metaKey: true, ctrlKey: true }) - vim.enterMode('hints', [markers, cb]) + vim.enterMode('hints', [callback]) # Move current tab to the left command_tab_move_left = (vim) -> diff --git a/extension/packages/modes.coffee b/extension/packages/modes.coffee index 8f670d7..f8ec675 100644 --- a/extension/packages/modes.coffee +++ b/extension/packages/modes.coffee @@ -2,9 +2,13 @@ utils = require 'utils' hints = require 'hints' mode_hints = - enter: (vim, storage, [ markers, cb ]) -> + enter: (vim, storage, [ callback ]) -> + markers = hints.injectHints(vim.window.document) + if markers.length == 0 + vim.enterNormalMode() + return storage.markers = markers - storage.cb = cb + storage.callback = callback handleKeyDown: (vim, storage, event, keyStr) -> if utils.getHintChars().search(utils.regexpEscape(keyStr)) > -1 @@ -13,7 +17,7 @@ mode_hints = onEnterNormalMode: (vim, storage) -> hints.removeHints(vim.window.document) - storage.markers = storage.cb = undefined + storage.markers = storage.callback = undefined # Processes the char, updates and hides/shows markers hintCharHandler: (vim, storage, keyStr) -> @@ -21,7 +25,7 @@ mode_hints = # Get char and escape it to avoid problems with String.search key = utils.regexpEscape(keyStr) - { markers, cb } = storage + { markers, callback } = storage # First do a pre match - count how many markers will match with the new character entered if markers.reduce(((v, marker) -> v or marker.willMatch(key)), false) @@ -31,7 +35,7 @@ mode_hints = if marker.isMatched() # Add element features to the bloom filter marker.reward() - cb(marker) + callback(marker) vim.enterNormalMode() break -- 2.39.3