diff options
| author | Alex Kovar | 2010-10-20 18:03:23 -0500 | 
|---|---|---|
| committer | Alex Kovar | 2010-10-20 18:03:23 -0500 | 
| commit | 8feb7df5e4185e2f28262a3524f7fb3d9b1e470d (patch) | |
| tree | 1f5c08710e7bc1e9163d0e7f77d747a6654e5cb6 /bookmarks.js | |
| parent | 58e494b82b5fee3662fca48543f86caabb16fc48 (diff) | |
| download | vimium-8feb7df5e4185e2f28262a3524f7fb3d9b1e470d.tar.bz2 | |
initial code for bookmark mode completion dialog
Diffstat (limited to 'bookmarks.js')
| -rw-r--r-- | bookmarks.js | 97 | 
1 files changed, 47 insertions, 50 deletions
diff --git a/bookmarks.js b/bookmarks.js index faa82148..6708067e 100644 --- a/bookmarks.js +++ b/bookmarks.js @@ -36,12 +36,14 @@ function activateBookmarkFindMode() {        }        this.renderHUD(); +      this.completionDialog.show();        this.keyPressListener.enable();      },      disable: function() {        this.enabled = false;        this.keyPressListener.disable(); +      this.completionDialog.hide()        HUD.hide();      },      getQueryString: function() { @@ -61,71 +63,84 @@ function activateBookmarkFindMode() {    // private method    var initialize = function() { +    var self = this;      this.initialized = true;      this.finder = new BookmarkFinder({        onResultsFound: function(bookmarks) { -        BookmarkMode.bookmarksFound = bookmarks; -        for(var i=0;i<bookmarks.length;i++) {  -          console.log(bookmarks[i].title) +        self.bookmarksFound = bookmarks; +        if(bookmarks.length>10) { +          bookmarks=bookmarks.slice(0, 10)          } +        self.completionDialog.showCompletions(self.getQueryString(), bookmarks)        }      }); +    this.completionDialog = new CompletionDialog({ +      onSelect: function(selection) { +        var url = selection.url +        var isABookmarklet = function(url) { +          return url.indexOf("javascript:")===0 +        } + +        if(!self.newTab || isABookmarklet(url)) { +          window.location=url +        } +        else { +          window.open(url) +        } +         +        self.disable(); +      }, +      renderOption: function(searchString, selection) { + +        var displaytext = selection.title + " (" + selection.url + ")" + +        if(displaytext.length>70) { +          displaytext = displaytext.substr(0, 70)+"..." +        } + +        return displaytext.split(new RegExp(searchString, "i")).join("<strong>"+searchString+"</strong>") +      }, +      initialSearchText: "Type a bookmark name or URL" +    }) +      this.keyPressListener = new KeyPressListener({ -      keyDown: function(key) { +      keyDown: function(event) {          // shift key will toggle between new tab/same tab          if (event.keyCode == keyCodes.shiftKey) { -          BookmarkMode.invertNewTabSetting(); +          self.invertNewTabSetting();            shiftWasPressedWhileToggled = true            return          } -        if(event.keyCode == keyCodes.enter) { -          var bookmarksFound = BookmarkMode.bookmarksFound; -          if(bookmarksFound && bookmarksFound.length>0) { -            var url = bookmarksFound[0].url -            var isABookmarklet = function(url) { -              return url.indexOf("javascript:")===0 -            } - -            if(!BookmarkMode.newTab || isABookmarklet(url)) { -              window.location=url -            } -            else { -              window.open(url) -            } -             -            BookmarkMode.disable(); -          } -        } -          var keyChar = getKeyChar(event);          if (!keyChar)            return;          // TODO(philc): Ignore keys that have modifiers.          if (isEscape(event)) { -          BookmarkMode.disable(); +          self.disable();          }           else if (event.keyCode == keyCodes.backspace || event.keyCode == keyCodes.deleteKey) { -          if (BookmarkMode.query.length == 0) { -            BookmarkMode.disable(); +          if (self.query.length == 0) { +            self.disable();            } else { -            BookmarkMode.query.pop(); +            self.query.pop(); +            self.finder.find(self.getQueryString())            }          }  -        else { -          BookmarkMode.query.push(keyChar); +        else if(keyChar!=="up" && keyChar!=="down" && keyChar!=="left" && keyChar!="right") { +          self.query.push(keyChar); +          self.finder.find(self.getQueryString())          }  -        BookmarkMode.finder.find(BookmarkMode.getQueryString())          event.stopPropagation();          event.preventDefault();        },        keyUp: function(event) {          // shift key will toggle between new tab/same tab          if (event.keyCode == keyCodes.shiftKey && shiftWasPressedWhileToggled) { -          BookmarkMode.invertNewTabSetting(); +          self.invertNewTabSetting();            shiftWasPressedWhileToggled = false          }          event.stopPropagation(); @@ -142,28 +157,10 @@ function activateBookmarkFindMode() {    }    BookmarkFinder.prototype = {      find: function(query) { -      console.log("You typed: " + query)        this.port.postMessage({query:query})      }    } -  var KeyPressListener = function(handlers) { -    this.handlers = handlers;  -  } - -  KeyPressListener.prototype = { -    enable: function() { -      var handlers = this.handlers; -      (handlers.keyDown && document.addEventListener("keydown", handlers.keyDown, true)); -      (handlers.keyUp && document.addEventListener("keyup", handlers.keyUp, true)); -    }, -    disable: function() { -      var handlers = this.handlers; -      (handlers.keyDown && document.removeEventListener("keydown", handlers.keyDown, true)); -      (handlers.keyUp && document.removeEventListener("keyup", handlers.keyUp, true)); -    } -  } -    //export global    window.BookmarkMode = BookmarkMode;  | 
