diff options
author | Andrew Dolgov <[email protected]> | 2008-05-15 16:57:14 +0100 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2008-05-15 16:57:14 +0100 |
commit | 4298481d698393bbc2950330416af549599b595f (patch) | |
tree | 0e46eacd9d90fefa7b47a5d51f61cb40c1c5e450 /functions.js | |
parent | 61992f57718b766c5a8e345f3b3bd5b3a99e115f (diff) |
rework hotkeys (incomplete)
Diffstat (limited to 'functions.js')
-rw-r--r-- | functions.js | 222 |
1 files changed, 206 insertions, 16 deletions
diff --git a/functions.js b/functions.js index 4c574eaf1..ed9a08e54 100644 --- a/functions.js +++ b/functions.js @@ -1,7 +1,7 @@ var hotkeys_enabled = true; var debug_mode_enabled = false; var xmlhttp_rpc = Ajax.getTransport(); - +var hotkey_prefix = false; var hotkey_zone = 0; /* add method to remove element from array */ @@ -79,7 +79,9 @@ function open_article_callback(transport) { if (link) { debug("link url: " + link.firstChild.nodeValue); - window.open(link.firstChild.nodeValue, "_blank"); + var w = window.open(link.firstChild.nodeValue, "_blank"); + + if (!w) { notify_error("Failed to load article in new window"); } if (id) { id = id.firstChild.nodeValue; @@ -214,23 +216,202 @@ function hotkey_handler(e) { var keycode; var shift_key = false; + var feedlist = document.getElementById('feedList'); + try { shift_key = e.shiftKey; } catch (e) { } + if (window.event) { + keycode = window.event.keyCode; + } else if (e) { + keycode = e.which; + } + + if (keycode == 27) { // escape + if (Element.visible("hotkey_help_overlay")) { + Element.hide("hotkey_help_overlay"); + } + hotkey_prefix = false; + closeInfoBox(); + } + if (!hotkeys_enabled) { debug("hotkeys disabled"); return; } + + if (keycode == 16) return; // ignore lone shift + + if ((keycode == 70 || keycode == 67) && !hotkey_prefix) { + hotkey_prefix = keycode; + debug("KP: PREFIX=" + keycode); + return; + } + + if (Element.visible("hotkey_help_overlay")) { + Element.hide("hotkey_help_overlay"); + } + + /* Global hotkeys */ + + if (!hotkey_prefix) { + + if (keycode == 68 && shift_key) { // d + if (!debug_mode_enabled) { + document.getElementById('debug_output').style.display = 'block'; + debug('debug mode activated'); + } else { + document.getElementById('debug_output').style.display = 'none'; + } - if (window.event) { - keycode = window.event.keyCode; - } else if (e) { - keycode = e.which; + debug_mode_enabled = !debug_mode_enabled; + return; + } + + if (keycode == 191 && shift_key) { // ? + if (!Element.visible("hotkey_help_overlay")) { + Element.show("hotkey_help_overlay"); + } else { + Element.hide("hotkey_help_overlay"); + } + return; + } + + if (keycode == 191) { // / + return displayDlg("search", getActiveFeedId()); + } + + if (keycode == 74) { // j + var feed = getActiveFeedId(); + var new_feed = getRelativeFeedId(feedlist, feed, 'prev'); + if (new_feed) viewfeed(new_feed, ''); + return; + } + + if (keycode == 75) { // k + var feed = getActiveFeedId(); + var new_feed = getRelativeFeedId(feedlist, feed, 'next'); + if (new_feed) viewfeed(new_feed, ''); + return; + } + + if (keycode == 78 || keycode == 40) { // n, down + if (typeof moveToPost != 'undefined') { + return moveToPost('next'); + } + } + + if (keycode == 80 || keycode == 38) { // p, up + if (typeof moveToPost != 'undefined') { + return moveToPost('prev'); + } + } + + if (keycode == 83 && shift_key) { // S + var id = getActiveArticleId(); + if (id) { + togglePub(id); + } + return; + } + + if (keycode == 83) { // s + var id = getActiveArticleId(); + if (id) { + toggleMark(id); + } + return; + } + + + if (keycode == 85) { // u + var id = getActiveArticleId(); + if (id) { + toggleUnread(id); + } + return; + } + + if (keycode == 84) { // t + /* FIXME: edit tags */ + return notify_error("Function not implemented"); + } + + if (keycode == 84) { // t + /* FIXME: edit tags */ + return notify_error("Function not implemented"); + } + + if (keycode == 79) { // o + if (getActiveArticleId()) { + openArticleInNewWindow(getActiveArticleId()); + } + } + } + /* Prefix f */ + + if (hotkey_prefix == 70) { // f + + hotkey_prefix = false; + + if (keycode == 65) { // a + return toggleDispRead(); + } + + if (keycode == 85 && shift_key) { // r + return scheduleFeedUpdate(true); + } + + if (keycode == 85) { // u + if (getActiveFeedId()) { + return viewfeed(getActiveFeedId(), "ForceUpdate"); + } + } + + if (keycode == 69) { // e + return editFeedDlg(getActiveFeedId()); + } + + if (keycode == 83) { // s + return displayDlg("quickAddFeed"); + } + + if (keycode == 67 && shift_key) { // C + if (typeof catchupAllFeeds != 'undefined') { + return catchupAllFeeds(); + } + } + + if (keycode == 67) { // c + if (getActiveFeedId()) { + return catchupCurrentFeed(); + } + } + + } + + /* Prefix c */ + + if (hotkey_prefix == 67) { // c + hotkey_prefix = false; + + if (keycode == 70) { // f + return displayDlg("quickAddFilter", getActiveFeedId()); + } + + if (keycode == 83) { // s + if (typeof collapse_feedlist != 'undefined') { + return collapse_feedlist(); + } + } + + } +/* if (keycode == 48) { // 0 return setHotkeyZone(0); } @@ -310,16 +491,12 @@ function hotkey_handler(e) { debug_mode_enabled = !debug_mode_enabled; } - if (keycode == 190 && shift_key) { // > - viewFeedGoPage(1); - } - - if (keycode == 188 && shift_key) { // < - viewFeedGoPage(-1); - } - if (keycode == 191 && shift_key) { // ? - viewFeedGoPage(0); + if (!Element.visible("hotkey_help_overlay")) { + Element.show("hotkey_help_overlay"); + } else { + Element.hide("hotkey_help_overlay"); + } } if (keycode == 69 && shift_key) { // e @@ -392,6 +569,12 @@ function hotkey_handler(e) { } } + if (keycode == 27) { // escape + if (Element.visible("hotkey_help_overlay")) { + Element.hide("hotkey_help_overlay"); + } + } */ + if (typeof localHotkeyHandler != 'undefined') { try { return localHotkeyHandler(e); @@ -400,7 +583,14 @@ function hotkey_handler(e) { } } - debug("KP=" + keycode); + if (hotkey_prefix) { + debug("KP: PREFIX=" + hotkey_prefix + " CODE=" + keycode); + + } else { + debug("KP: CODE=" + keycode); + } + + } catch (e) { exception_error("hotkey_handler", e); } |