diff options
Diffstat (limited to 'src/content')
| -rw-r--r-- | src/content/follow.js | 14 | ||||
| -rw-r--r-- | src/content/hint.js | 6 | ||||
| -rw-r--r-- | src/content/index.js | 9 | 
3 files changed, 19 insertions, 10 deletions
| diff --git a/src/content/follow.js b/src/content/follow.js index 4cb3866..7e1cd01 100644 --- a/src/content/follow.js +++ b/src/content/follow.js @@ -8,6 +8,7 @@ export default class Follow {      this.doc = doc;      this.hintElements = {};      this.keys = []; +    this.onActivatedCallbacks = [];      // TODO activate input elements and push button elements      let links = Follow.getTargetElements(doc); @@ -36,7 +37,7 @@ export default class Follow {      } else if (keyCode === KeyboardEvent.DOM_VK_ENTER ||                 keyCode === KeyboardEvent.DOM_VK_RETURN) {        let chars = Follow.codeChars(this.keys); -      this.hintElements[chars].activate(); +      this.activate(this.hintElements[chars].target);        return;      } else if (Follow.availableKey(keyCode)) {        this.keys.push(keyCode); @@ -64,7 +65,7 @@ export default class Follow {        return;      } else if (shown.length === 1) {        this.remove(); -      this.hintElements[chars].activate(); +      this.activate(this.hintElements[chars].target);      }      shown.forEach((key) => { @@ -75,7 +76,6 @@ export default class Follow {      });    } -    remove() {      this.doc.removeEventListener('keydown', this.boundKeydown);      Object.keys(this.hintElements).forEach((key) => { @@ -83,6 +83,14 @@ export default class Follow {      });    } +  activate(element) { +    this.onActivatedCallbacks.forEach(f => f(element)); +  } + +  onActivated(f) { +    this.onActivatedCallbacks.push(f); +  } +    static availableKey(keyCode) {      return (        KeyboardEvent.DOM_VK_0 <= keyCode && keyCode <= KeyboardEvent.DOM_VK_9 || diff --git a/src/content/hint.js b/src/content/hint.js index c75ca8b..cc46fd6 100644 --- a/src/content/hint.js +++ b/src/content/hint.js @@ -33,10 +33,4 @@ export default class Hint {    remove() {      this.element.remove();    } - -  activate() { -    if (this.target.tagName.toLowerCase() === 'a') { -      this.target.click(); -    } -  }  } diff --git a/src/content/index.js b/src/content/index.js index a9ccd63..fc79f6c 100644 --- a/src/content/index.js +++ b/src/content/index.js @@ -8,6 +8,13 @@ import messages from '../messages';  consoleFrames.initialize(window.document); +const startFollows = (newTab) => { +  let follow = new Follow(window.document, newTab); +  follow.onActivated((element) => { +    element.click(); +  }); +}; +  window.addEventListener('keypress', (e) => {    if (e.target instanceof HTMLInputElement) {      return; @@ -34,7 +41,7 @@ const execOperation = (operation) => {    case operations.SCROLL_RIGHT:      return scrolls.scrollRight(window);    case operations.FOLLOW_START: -    return new Follow(window.document, operation.newTab); +    return startFollows(operation.newTab);    case operations.NAVIGATE_HISTORY_PREV:      return navigates.historyPrev(window);    case operations.NAVIGATE_HISTORY_NEXT: | 
