From ee1f45f4c77703b85c63bca1888b1c9cab3168da Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 23 May 2006 07:55:26 +0100 Subject: unify frontend hotkey handlers --- functions.js | 111 ++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 84 insertions(+), 27 deletions(-) (limited to 'functions.js') diff --git a/functions.js b/functions.js index f642cda85..c03176255 100644 --- a/functions.js +++ b/functions.js @@ -14,10 +14,13 @@ function exception_error(location, e) { msg = "Exception: " + e.name + ", " + e.message + "\nFunction: " + location + "()" + "\nLocation: " + base_fname + ":" + e.lineNumber; + } else { msg = "Exception: " + e + "\nFunction: " + location + "()"; } + debug("EXCEPTION: " + msg + ""); + alert(msg); } @@ -148,40 +151,85 @@ var seq = ""; function hotkey_handler(e) { - var keycode; - - if (!hotkeys_enabled) return; - - if (window.event) { - keycode = window.event.keyCode; - } else if (e) { - keycode = e.which; - } - - if (keycode == 13 || keycode == 27) { - seq = ""; - } else { - seq = seq + "" + keycode; - } - - if (document.getElementById("piggie")) { + try { - if (seq.match("807371717369")) { + var keycode; + + if (!hotkeys_enabled) return; + + if (window.event) { + keycode = window.event.keyCode; + } else if (e) { + keycode = e.which; + } + + if (keycode == 13 || keycode == 27) { seq = ""; - localPiggieFunction(true); } else { - localPiggieFunction(false); + seq = seq + "" + keycode; } - } - if (typeof localHotkeyHandler != 'undefined') { - try { - localHotkeyHandler(keycode); - } catch (e) { - exception_error("hotkey_handler", e); + var m_ctx = getMainContext(); + var f_ctx = getFeedsContext(); + var h_ctx = getHeadlinesContext(); + + if (keycode == 82) { // r + return m_ctx.scheduleFeedUpdate(true); + } + + if (keycode == 85) { // u + if (getActiveFeedId()) { + return f_ctx.viewfeed(getActiveFeedId(), 0, "ForceUpdate"); + } + } + + if (keycode == 65) { // a + return m_ctx.toggleDispRead(); + } + + var f_doc = m_ctx.frames["feeds-frame"].document; + var feedlist = f_doc.getElementById('feedList'); + + if (keycode == 74) { // j + var feed = getActiveFeedId(); + var new_feed = getRelativeFeedId(feedlist, feed, 'prev'); + if (new_feed) viewfeed(new_feed, 0, ''); + } + + if (keycode == 75) { // k + var feed = getActiveFeedId(); + var new_feed = getRelativeFeedId(feedlist, feed, 'next'); + if (new_feed) viewfeed(new_feed, 0, ''); } - } + if (keycode == 78 || keycode == 40) { // n, down + return h_ctx.moveToPost('next'); + } + + if (keycode == 80 || keycode == 38) { // p, up + return h_ctx.moveToPost('prev'); + } + + if (document.getElementById("piggie")) { + + if (seq.match("807371717369")) { + seq = ""; + localPiggieFunction(true); + } else { + localPiggieFunction(false); + } + } + + if (typeof localHotkeyHandler != 'undefined') { + try { + localHotkeyHandler(keycode); + } catch (e) { + exception_error("hotkey_handler, local:", e); + } + } + } catch (e) { + exception_error("hotkey_handler", e); + } } function cleanSelectedList(element) { @@ -1070,6 +1118,15 @@ function getFeedsContext() { } } + +function getHeadlinesContext() { + try { + return getMainContext().frames["headlines-frame"]; + } catch (e) { + exception_error("getHeadlinesContext", e); + } +} + function debug(msg) { var ctx = getMainContext(); -- cgit v1.2.3