summaryrefslogtreecommitdiff
path: root/tt-rss.js
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2008-05-16 02:38:32 +0100
committerAndrew Dolgov <[email protected]>2008-05-16 02:38:32 +0100
commit93f66472ef7571c0ed494a92c12dccff03dcfbf5 (patch)
tree86048c22739034ef8fac9153b84fa828875aa8ca /tt-rss.js
parent238eff0165cd80b3915d6fc53b4ad8bc866e03dc (diff)
misc fixes, rework hotkeys code placement
Diffstat (limited to 'tt-rss.js')
-rw-r--r--tt-rss.js424
1 files changed, 423 insertions, 1 deletions
diff --git a/tt-rss.js b/tt-rss.js
index a8a54fb4c..3e691245d 100644
--- a/tt-rss.js
+++ b/tt-rss.js
@@ -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);
+ }
+}
+