From 479928bd6460a6b1748f3cad4fe6baa9d65cb14a Mon Sep 17 00:00:00 2001 From: Martin Stubenschrott Date: Tue, 13 Nov 2007 21:31:01 +0000 Subject: [PATCH] made followLink() a function in vimperator.buffer. so also other modules can use it --- content/buffers.js | 32 ++++++++++++++++++++++++++++++++ content/hints.js | 25 ++++++++----------------- content/vimperator.js | 2 +- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/content/buffers.js b/content/buffers.js index 857d9e7e..fd586662 100644 --- a/content/buffers.js +++ b/content/buffers.js @@ -192,6 +192,38 @@ vimperator.Buffer = function () //{{{ return result; }, + // artificially "clicks" a link in order to open it + followLink: function (elem, where, offsetX, offsetY) + { + var doc = window.content.document; + var view = window.document.defaultView; + //var view = doc.defaultView; + offsetX = offsetX || 1; + offsetY = offsetY || 1; + + var new_tab = false, new_window = false; + switch (where) + { + case vimperator.NEW_TAB: + case vimperator.NEW_BACKGROUND_TAB: + new_tab = true; + break; + case vimperator.NEW_WINDOW: + new_window = true; + break; + default: + vimperator.log("Invalid where argument for followLink()"); + } + + var evt = doc.createEvent("MouseEvents"); + evt.initMouseEvent("mousedown", true, true, view, 1, offsetX, offsetY, 0, 0, /*ctrl*/ new_tab, /*event.altKey*/0, /*event.shiftKey*/ new_window, /*event.metaKey*/ new_tab, 0, null); + elem.dispatchEvent(evt); + + //var evt = doc.createEvent("MouseEvents"); + evt.initMouseEvent("click", true, true, view, 1, offsetX, offsetY, 0, 0, /*ctrl*/ new_tab, /*event.altKey*/0, /*event.shiftKey*/ new_window, /*event.metaKey*/ new_tab, 0, null); + elem.dispatchEvent(evt); + }, + // in contrast to vim, returns the selection if one is made, // otherwise tries to guess the current word unter the text cursor // NOTE: might change the selection diff --git a/content/hints.js b/content/hints.js index 7b3891c2..2b478d29 100644 --- a/content/hints.js +++ b/content/hints.js @@ -72,12 +72,12 @@ vimperator.Hints = function () //{{{ // this function 'click' an element, which also works // for javascript links - function openHint(new_tab, new_window) + function openHint(where) { if (valid_hints.length < 1) return false; - var x = 0, y = 0; + var x = 1, y = 1; var elem = valid_hints[hintNumber - 1] || valid_hints[0]; var elemTagName = elem.localName.toLowerCase(); elem.focus(); @@ -88,20 +88,11 @@ vimperator.Hints = function () //{{{ if (elemTagName == "area") { var coords = elem.getAttribute("coords").split(","); - x = Number(coords[0]); - y = Number(coords[1]); + x = Number(coords[0]) + 1; + y = Number(coords[1]) + 1; } - var doc = window.content.document; - var view = window.document.defaultView; - - var evt = doc.createEvent("MouseEvents"); - evt.initMouseEvent("mousedown", true, true, view, 1, x + 1, y + 1, 0, 0, /*ctrl*/ new_tab, /*event.altKey*/0, /*event.shiftKey*/ new_window, /*event.metaKey*/ new_tab, 0, null); - elem.dispatchEvent(evt); - - var evt = doc.createEvent("MouseEvents"); - evt.initMouseEvent("click", true, true, view, 1, x + 1, y + 1, 0, 0, /*ctrl*/ new_tab, /*event.altKey*/0, /*event.shiftKey*/ new_window, /*event.metaKey*/ new_tab, 0, null); - elem.dispatchEvent(evt); + vimperator.buffer.followLink(elem, where, x, y); return true; } @@ -441,11 +432,11 @@ vimperator.Hints = function () //{{{ case ";": focusHint(); break; case "a": saveHint(false); break; case "s": saveHint(true); break; - case "o": openHint(false, false); break; + case "o": openHint(vimperator.CURRENT_TAB); break; case "O": vimperator.commandline.open(":", "open " + loc, vimperator.modes.EX); break; - case "t": openHint(true, false); break; + case "t": openHint(vimperator.NEW_TAB); break; case "T": vimperator.commandline.open(":", "tabopen " + loc, vimperator.modes.EX); break; - case "w": openHint(false, true); break; + case "w": openHint(vimperator.NEW_WINDOW); break; case "W": vimperator.commandline.open(":", "winopen " + loc, vimperator.modes.EX); break; case "y": yankHint(false); break; case "Y": yankHint(true); break; diff --git a/content/vimperator.js b/content/vimperator.js index 22a2528a..d04097ce 100644 --- a/content/vimperator.js +++ b/content/vimperator.js @@ -50,7 +50,7 @@ const vimperator = (function () //{{{ get mode() { return vimperator.modes.main; }, set mode(value) { vimperator.modes.main = value; }, - // Global contants + // Global constants CURRENT_TAB: 1, NEW_TAB: 2, NEW_BACKGROUND_TAB: 3,