diff options
Diffstat (limited to 'tt-rss.js')
-rw-r--r-- | tt-rss.js | 424 |
1 files changed, 423 insertions, 1 deletions
@@ -14,7 +14,7 @@ var active_feed_is_cat = false; var number_of_feeds = 0; var sanity_check_done = false; var _hfd_scrolltop = 0; - +var hotkey_prefix = false; var init_params = new Object(); function tagsAreDisplayed() { @@ -900,4 +900,426 @@ function rescoreCurrentFeed() { } } +function hotkey_handler(e) { + + try { + + 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 || keycode == 71) && !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'; + } + + 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 && shift_key) { // t + var id = getActiveArticleId(); + if (id) { + editArticleTags(id, getActiveFeedId(), isCdmMode()); + } + } + + if (keycode == 84) { // t + var id = getActiveArticleId(); + if (id) { + var cb = document.getElementById("RCHK-" + id); + + if (cb) { + cb.checked = !cb.checked; + toggleSelectRowById(cb, "RROW-" + id); + } + } + } + + 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(); + } + } + + } + + /* Prefix g */ + + if (hotkey_prefix == 71) { // g + + hotkey_prefix = false; + + if (keycode == 83) { // s + return viewfeed(-1); + } + + if (keycode == 80 && shift_key) { // P + return gotoPreferences(); + } + + if (keycode == 80) { // p + return viewfeed(-2); + } + + if (keycode == 70) { // f + return viewfeed(-3); + } + + + } + +/* + if (keycode == 48) { // 0 + return setHotkeyZone(0); + } + + if (keycode == 49) { // 1 + return setHotkeyZone(1); + } + + if (keycode == 50) { // 2 + return setHotkeyZone(2); + } + + if (keycode == 51) { // 3 + return setHotkeyZone(3); + } + + if (keycode == 82) { // r + return scheduleFeedUpdate(true); + } + + if (keycode == 83) { // s + return displayDlg("search", getActiveFeedId()); + } + + if (keycode == 85) { // u + if (getActiveFeedId()) { + return viewfeed(getActiveFeedId(), "ForceUpdate"); + } + } + + if (keycode == 65) { // a + return toggleDispRead(); + } + + var feedlist = document.getElementById('feedList'); + + if (keycode == 74) { // j + var feed = getActiveFeedId(); + var new_feed = getRelativeFeedId(feedlist, feed, 'prev'); + if (new_feed) viewfeed(new_feed, ''); + } + + if (keycode == 75) { // k + var feed = getActiveFeedId(); + var new_feed = getRelativeFeedId(feedlist, feed, 'next'); + if (new_feed) viewfeed(new_feed, ''); + } + + if (shift_key && (keycode == 78 || keycode == 40)) { // shift - n, down + return catchupRelativeToArticle(1); + } + + if (shift_key && (keycode == 80 || keycode == 38)) { // shift - p, up + return catchupRelativeToArticle(0); + } + + 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 == 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'; + } + + debug_mode_enabled = !debug_mode_enabled; + } + + if (keycode == 191 && shift_key) { // ? + if (!Element.visible("hotkey_help_overlay")) { + Element.show("hotkey_help_overlay"); + } else { + Element.hide("hotkey_help_overlay"); + } + } + + if (keycode == 69 && shift_key) { // e + return editFeedDlg(getActiveFeedId()); + } + + if (keycode == 70 && shift_key) { // f + if (getActiveFeedId()) { + return catchupCurrentFeed(); + } + } + + if (keycode == 80 && shift_key) { // p + if (getActiveFeedId()) { + return catchupPage(); + } + } + + if (keycode == 86) { // v + if (getActiveArticleId()) { + openArticleInNewWindow(getActiveArticleId()); + } + } + + if (keycode == 84) { // t + + var id = getActiveArticleId(); + + if (id) { + + var cb = document.getElementById("RCHK-" + id); + + if (cb) { + cb.checked = !cb.checked; + toggleSelectRowById(cb, "RROW-" + id); + } + } + } + + if (keycode == 67) { // c + var id = getActiveArticleId(); + + if (id) { + toggleUnread(id, 0); + } + } + + if (keycode == 67 && shift_key) { // c + if (typeof collapse_feedlist != 'undefined') { + return collapse_feedlist(); + } + } + + if (keycode == 81 && shift_key) { // shift + q + if (typeof catchupAllFeeds != 'undefined') { + return catchupAllFeeds(); + } + } + + if (keycode == 73 && shift_key) { // shift + i + if (document.getElementById("subtoolbar_search")) { + if (Element.visible("subtoolbar_search")) { + Element.hide("subtoolbar_search"); + Element.show("subtoolbar_ftitle"); + setTimeout("Element.focus('subtoolbar_search_box')", 100); + } else { + Element.show("subtoolbar_search"); + Element.hide("subtoolbar_ftitle"); + } + } + } + + if (keycode == 27) { // escape + if (Element.visible("hotkey_help_overlay")) { + Element.hide("hotkey_help_overlay"); + } + } */ + + if (typeof localHotkeyHandler != 'undefined') { + try { + return localHotkeyHandler(e); + } catch (e) { + exception_error("hotkey_handler, local:", e); + } + } + + if (hotkey_prefix) { + debug("KP: PREFIX=" + hotkey_prefix + " CODE=" + keycode); + + } else { + debug("KP: CODE=" + keycode); + } + + + } catch (e) { + exception_error("hotkey_handler", e); + } +} + |