diff options
| author | Alex Kovar | 2010-09-26 22:15:54 -0500 |
|---|---|---|
| committer | Alex Kovar | 2010-09-26 22:15:54 -0500 |
| commit | 41d7be473851a0caf43cddb228df225069d051bc (patch) | |
| tree | ca047c7703d49da6b689e4303a043f28a2769a76 | |
| parent | 0d15a8fbdf78ab1a12783406bf678339882323a5 (diff) | |
| download | vimium-41d7be473851a0caf43cddb228df225069d051bc.tar.bz2 | |
added initial code for "bookmark find mode"
| -rw-r--r-- | background_page.html | 9 | ||||
| -rw-r--r-- | bookmarks.js | 159 | ||||
| -rw-r--r-- | commands.js | 7 | ||||
| -rw-r--r-- | manifest.json | 5 | ||||
| -rw-r--r-- | vimiumFrontend.js | 3 |
5 files changed, 178 insertions, 5 deletions
diff --git a/background_page.html b/background_page.html index 94595b2b..991992b8 100644 --- a/background_page.html +++ b/background_page.html @@ -60,7 +60,8 @@ getCurrentTabUrl: getCurrentTabUrl, getZoomLevel: getZoomLevel, saveZoomLevel: saveZoomLevel, - getSetting: getSetting + getSetting: getSetting, + getBookmarks: getBookmarks }; var sendRequestHandlers = { @@ -245,6 +246,12 @@ returnPort.postMessage({ key: args.key, value: value }); } + function getBookmarks(args, port) { + chrome.bookmarks.search(args.query, function(bookmarks) { + port.postMessage({bookmarks:bookmarks}) + }) + } + /* * Persists the current zoom level for a given domain */ diff --git a/bookmarks.js b/bookmarks.js new file mode 100644 index 00000000..fef4ed53 --- /dev/null +++ b/bookmarks.js @@ -0,0 +1,159 @@ + +function activateBookmarkFindModeToOpenInNewTab() { + BookmarkMode.openInNewTab(true) + BookmarkMode.enable() +} + +function activateBookmarkFindMode() { + BookmarkMode.openInNewTab(false) + BookmarkMode.enable() +} + +(function() { + // so when they let go of shift after hitting capital "B" it won't + // untoggle it + var shiftWasPressedWhileToggled = false; + + var BookmarkMode = { + isEnabled: function() { + return this.enabled + }, + openInNewTab: function(newTab) { + this.newTab = newTab + }, + invertNewTabSetting: function() { + this.newTab = !this.newTab; + if(this.isEnabled()) { + this.renderHUD() + } + }, + enable: function() { + this.enabled = true; + this.query = []; + + if(!this.initialized) { + initialize.call(this) + } + + this.renderHUD(); + + this.keyPressListener.enable(); + }, + disable: function() { + this.enabled = false; + this.keyPressListener.disable(); + HUD.hide(); + }, + getQueryString: function() { + return this.query.join("") + }, + find: function(query) { + this.finder.find(query) + }, + renderHUD: function() { + if (this.newTab) + HUD.show("Open bookmark in new tab"); + else + HUD.show("Open bookmark in current tab"); + } + + } + + // private method + var initialize = function() { + 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) + } + } + }); + + this.keyPressListener = new KeyPressListener({ + keyDown: function(key) { + // shift key will toggle between new tab/same tab + if (event.keyCode == keyCodes.shiftKey) { + BookmarkMode.invertNewTabSetting(); + shiftWasPressedWhileToggled = true + return + } + + if(event.keyCode == keyCodes.enter) { + var bookmarksFound = BookmarkMode.bookmarksFound; + if(bookmarksFound && bookmarksFound.length>0) { + var url = bookmarksFound[0].url + if(BookmarkMode.newTab) + window.open(url) + else window.location=url + } + } + + var keyChar = getKeyChar(event); + if (!keyChar) + return; + + // TODO(philc): Ignore keys that have modifiers. + if (isEscape(event)) { + BookmarkMode.disable(); + } + else if (event.keyCode == keyCodes.backspace || event.keyCode == keyCodes.deleteKey) { + if (BookmarkMode.query.length == 0) { + BookmarkMode.disable(); + } else { + BookmarkMode.query.pop(); + } + } + else { + BookmarkMode.query.push(keyChar); + } + + BookmarkMode.finder.find(BookmarkMode.getQueryString()) + }, + keyUp: function(event) { + // shift key will toggle between new tab/same tab + if (event.keyCode == keyCodes.shiftKey && shiftWasPressedWhileToggled) { + BookmarkMode.invertNewTabSetting(); + shiftWasPressedWhileToggled = false + } + event.stopPropagation(); + event.preventDefault(); + } + }) + } + + var BookmarkFinder = function(config) { + this.port = chrome.extension.connect({ name: "getBookmarks" }) + this.port.onMessage.addListener(function(msg) { + (config.onResultsFound && config.onResultsFound(msg.bookmarks)) + }) + } + 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; + +}()) diff --git a/commands.js b/commands.js index a9fa0aba..e9a0bd41 100644 --- a/commands.js +++ b/commands.js @@ -127,6 +127,8 @@ function clearKeyMappingsAndSetDefaults() { mapKeyToCommand('t', 'createTab'); mapKeyToCommand('d', 'removeTab'); mapKeyToCommand('u', 'restoreTab'); + mapKeyToCommand('b', 'activateBookmarkFindMode'); + mapKeyToCommand('B', 'activateBookmarkFindModeToOpenInNewTab') } // Navigating the current page: @@ -157,6 +159,9 @@ addCommand('focusInput', 'Focus the first (or n-th) text box on the pag addCommand('activateLinkHintsMode', 'Enter link hints mode to open links in current tab'); addCommand('activateLinkHintsModeToOpenInNewTab', 'Enter link hints mode to open links in new tab'); +addCommand('activateBookmarkFindMode', 'Find bookmarks to open in current tab'); +addCommand('activateBookmarkFindModeToOpenInNewTab', 'Find bookmarks to open in new tab'); + addCommand('enterFindMode', 'Enter find mode'); addCommand('performFind', 'Cycle forward to the next find match'); addCommand('performBackwardsFind', 'Cycle backward to the previous find match'); @@ -192,5 +197,5 @@ var commandGroups = { tabManipulation: ["nextTab", "previousTab", "createTab", "removeTab", "restoreTab"], misc: - ["showHelp"] + ["showHelp", "activateBookmarkFindMode", "activateBookmarkFindModeToOpenInNewTab"] }; diff --git a/manifest.json b/manifest.json index 97966dd5..baba4e09 100644 --- a/manifest.json +++ b/manifest.json @@ -8,7 +8,7 @@ "background_page": "background_page.html", "options_page": "options.html", "permissions": [ - "tabs" + "tabs", "bookmarks" ], "content_scripts": [ { @@ -16,7 +16,8 @@ "js": ["lib/keyboardUtils.js", "lib/clipboard.js", "linkHints.js", - "vimiumFrontend.js" + "vimiumFrontend.js", + "bookmarks.js" ], "run_at": "document_start" } diff --git a/vimiumFrontend.js b/vimiumFrontend.js index 334e3a77..da850909 100644 --- a/vimiumFrontend.js +++ b/vimiumFrontend.js @@ -202,6 +202,7 @@ function scrollFullPageDown() { window.scrollBy(0, window.innerHeight); } function scrollLeft() { window.scrollBy(-1 * settings["scrollStepSize"], 0); } function scrollRight() { window.scrollBy(settings["scrollStepSize"], 0); } + function focusInput(count) { var xpath = '//input[@type="text" or @type="search"]'; var results = document.evaluate(xpath, document.documentElement, null, @@ -272,7 +273,7 @@ function toggleViewSourceCallback(url) { function onKeydown(event) { var keyChar = ""; - if (linkHintsModeActivated) + if (linkHintsModeActivated || BookmarkMode.isEnabled()) return; // Ignore modifier keys by themselves. |
