]> git.wh0rd.org Git - tt-rss.git/commitdiff
convert hotkey_action switch to a dict
authorPhilippe Mongeau <ph.mongeau@gmail.com>
Mon, 25 Mar 2013 02:12:28 +0000 (22:12 -0400)
committerPhilippe Mongeau <ph.mongeau@gmail.com>
Wed, 27 Mar 2013 00:40:32 +0000 (20:40 -0400)
this will permit plugins to register hockey actions.

js/tt-rss.js

index 54ac077f43deedbbc55fe1182dac8b67dbdbac87..942e31e1c1fd94a122faf0013b95d634068c79e1 100644 (file)
@@ -205,6 +205,8 @@ function genericSanityCheck() {
        return true;
 }
 
+var hotkey_actions = {};
+
 function init() {
        try {
                //dojo.registerModulePath("fox", "../../js/");
@@ -252,6 +254,233 @@ function init() {
                        onComplete: function(transport) {
                                        backend_sanity_check_callback(transport);
                                } });
+               
+               hotkey_actions["next_feed"] = function() {
+                               var rv = dijit.byId("feedTree").getNextFeed(
+                                               getActiveFeedId(), activeFeedIsCat());
+
+                               if (rv) viewfeed(rv[0], '', rv[1]);
+               };
+               hotkey_actions["prev_feed"] = function() {
+                               var rv = dijit.byId("feedTree").getPreviousFeed(
+                                               getActiveFeedId(), activeFeedIsCat());
+
+                               if (rv) viewfeed(rv[0], '', rv[1]);
+               };
+               hotkey_actions["next_article"] = function() {
+                               moveToPost('next');
+               };
+               hotkey_actions["prev_article"] = function() {
+                               moveToPost('prev');
+               };
+               hotkey_actions["next_article_noscroll"] = function() {
+                               moveToPost('next', true);
+               };
+               hotkey_actions["prev_article_noscroll"] = function() {
+                               moveToPost('prev', true);
+               };
+               hotkey_actions["collapse_article"] = function() {
+                               var id = getActiveArticleId();
+                               var elem = $("CICD-"+id);
+                               if(elem.visible()) {
+                                       cdmCollapseArticle(null, id);
+                               }
+                               else {
+                                       cdmExpandArticle(id);
+                               }
+               };
+               hotkey_actions["search_dialog"] = function() {
+                               search();
+               };
+               hotkey_actions["toggle_mark"] = function() {
+                               selectionToggleMarked(undefined, false, true);
+               };
+               hotkey_actions["toggle_publ"] = function() {
+                               selectionTogglePublished(undefined, false, true);
+               };
+               hotkey_actions["toggle_unread"] = function() {
+                               selectionToggleUnread(undefined, false, true);
+               };
+               hotkey_actions["edit_tags"] = function() {
+                               var id = getActiveArticleId();
+                               if (id) {
+                                       editArticleTags(id, getActiveFeedId(), isCdmMode());
+                               };
+                       }
+               hotkey_actions["dismiss_selected"] = function() {
+                               dismissSelectedArticles();
+               };
+               hotkey_actions["open_in_new_window"] = function() {
+                               if (getActiveArticleId()) {
+                                       openArticleInNewWindow(getActiveArticleId());
+                                       return;
+                               }
+               };
+               hotkey_actions["catchup_below"] = function() {
+                               catchupRelativeToArticle(1);
+               };
+               hotkey_actions["catchup_above"] = function() {
+                               catchupRelativeToArticle(0);
+               };
+               hotkey_actions["article_scroll_down"] = function() {
+                               var ctr = $("content_insert") ? $("content_insert") : $("headlines-frame");
+
+                               scrollArticle(ctr.offsetHeight/3);
+               };
+               hotkey_actions["article_scroll_up"] = function() {
+                               var ctr = $("content_insert") ? $("content_insert") : $("headlines-frame");
+
+                               scrollArticle(-ctr.offsetHeight/3);
+               };
+               hotkey_actions["close_article"] = function() {
+                               if (isCdmMode()) {
+                                       if (!getInitParam("cdm_expanded")) {
+                                               cdmCollapseArticle(false, getActiveArticleId());
+                                       } else {
+                                               dismissArticle(getActiveArticleId());
+                                       }
+                               } else {
+                                       closeArticlePanel();
+                               }
+               };
+               hotkey_actions["email_article"] = function() {
+                               if (typeof emailArticle != "undefined") {
+                                       emailArticle();
+                               } else if (typeof mailtoArticle != "undefined") {
+                                       mailtoArticle();
+                               } else {
+                                       alert(__("Please enable mail plugin first."));
+                               }
+               };
+               hotkey_actions["select_all"] = function() {
+                               selectArticles('all');
+               };
+               hotkey_actions["select_unread"] = function() {
+                               selectArticles('unread');
+               };
+               hotkey_actions["select_marked"] = function() {
+                               selectArticles('marked');
+               };
+               hotkey_actions["select_published"] = function() {
+                               selectArticles('published');
+               };
+               hotkey_actions["select_invert"] = function() {
+                               selectArticles('invert');
+               };
+               hotkey_actions["select_none"] = function() {
+                               selectArticles('none');
+               };
+               hotkey_actions["feed_refresh"] = function() {
+                               if (getActiveFeedId() != undefined) {
+                                       viewfeed(getActiveFeedId(), '', activeFeedIsCat());
+                                       return;
+                               }
+               };
+               hotkey_actions["feed_unhide_read"] = function() {
+                               toggleDispRead();
+               };
+               hotkey_actions["feed_subscribe"] = function() {
+                               quickAddFeed();
+               };
+               hotkey_actions["feed_debug_update"] = function() {
+                               window.open("backend.php?op=feeds&method=view&feed=" + getActiveFeedId() +
+                                       "&view_mode=adaptive&order_by=default&update=&m=ForceUpdate&cat=" +
+                                       activeFeedIsCat() + "&DevForceUpdate=1&debug=1&xdebug=1&csrf_token=" +
+                                       getInitParam("csrf_token"));
+               };
+               hotkey_actions["feed_edit"] = function() {
+                               if (activeFeedIsCat())
+                                       alert(__("You can't edit this kind of feed."));
+                               else
+                                       editFeed(getActiveFeedId());
+               };
+               hotkey_actions["feed_catchup"] = function() {
+                               if (getActiveFeedId() != undefined) {
+                                       catchupCurrentFeed();
+                                       return;
+                               }
+               };
+               hotkey_actions["feed_reverse"] = function() {
+                               reverseHeadlineOrder();
+               };
+               hotkey_actions["catchup_all"] = function() {
+                               catchupAllFeeds();
+               };
+               hotkey_actions["cat_toggle_collapse"] = function() {
+                               if (activeFeedIsCat()) {
+                                       dijit.byId("feedTree").collapseCat(getActiveFeedId());
+                                       return;
+                               }
+               };
+               hotkey_actions["goto_all"] = function() {
+                               viewfeed(-4);
+               };
+               hotkey_actions["goto_fresh"] = function() {
+                               viewfeed(-3);
+               };
+               hotkey_actions["goto_marked"] = function() {
+                               viewfeed(-1);
+               };
+               hotkey_actions["goto_published"] = function() {
+                               viewfeed(-2);
+               };
+               hotkey_actions["goto_tagcloud"] = function() {
+                               displayDlg("printTagCloud");
+               };
+               hotkey_actions["goto_prefs"] = function() {
+                               gotoPreferences();
+               };
+               hotkey_actions["select_article_cursor"] = function() {
+                               var id = getArticleUnderPointer();
+                               if (id) {
+                                       var cb = dijit.byId("RCHK-" + id);
+                                       if (cb) {
+                                               cb.attr("checked", !cb.attr("checked"));
+                                               toggleSelectRowById(cb, "RROW-" + id);
+                                               return false;
+                                       }
+                               }
+               };
+               hotkey_actions["create_label"] = function() {
+                               addLabel();
+               };
+               hotkey_actions["create_filter"] = function() {
+                               quickAddFilter();
+               };
+               hotkey_actions["collapse_sidebar"] = function() {
+                               collapse_feedlist();
+               };
+               hotkey_actions["toggle_embed_original"] = function() {
+                               if (typeof embedOriginalArticle != "undefined") {
+                                       if (getActiveArticleId())
+                                               embedOriginalArticle(getActiveArticleId());
+                               } else {
+                                       alert(__("Please enable embed_original plugin first."));
+                               }
+               };
+               hotkey_actions["toggle_widescreen"] = function() {
+                               if (!isCdmMode()) {
+                                       _widescreen_mode = !_widescreen_mode;
+
+                                       switchPanelMode(_widescreen_mode);
+                               }
+               };
+               hotkey_actions["help_dialog"] = function() {
+                               helpDialog("main");
+               };
+               hotkey_actions["toggle_combined_mode"] = function() {
+                               notify_progress("Loading, please wait...");
+
+                               var value = isCdmMode() ? "false" : "true";
+                               var query = "?op=rpc&method=setpref&key=COMBINED_DISPLAY_MODE&value=" + value;
+
+                               new Ajax.Request("backend.php", {
+                                       parameters: query,
+                                       onComplete: function(transport) {
+                                               window.location.reload();
+                                       } });
+               };
+
 
        } catch (e) {
                exception_error("init", e);
@@ -603,229 +832,8 @@ function hotkey_handler(e) {
                        }
                }
 
-               switch (hotkey_action) {
-               case "next_feed":
-                       var rv = dijit.byId("feedTree").getNextFeed(
-                                       getActiveFeedId(), activeFeedIsCat());
-
-                       if (rv) viewfeed(rv[0], '', rv[1]);
-                       return false;
-               case "prev_feed":
-                       var rv = dijit.byId("feedTree").getPreviousFeed(
-                                       getActiveFeedId(), activeFeedIsCat());
-
-                       if (rv) viewfeed(rv[0], '', rv[1]);
-                       return false;
-               case "next_article":
-                       moveToPost('next');
-                       return false;
-               case "prev_article":
-                       moveToPost('prev');
-                       return false;
-               case "next_article_noscroll":
-                       moveToPost('next', true);
-                       return false;
-               case "prev_article_noscroll":
-                       moveToPost('prev', true);
-                       return false;
-               case "search_dialog":
-                       search();
-                       return ;
-               case "toggle_mark":
-                       selectionToggleMarked(undefined, false, true);
-                       return false;
-               case "toggle_publ":
-                       selectionTogglePublished(undefined, false, true);
-                       return false;
-               case "toggle_unread":
-                       selectionToggleUnread(undefined, false, true);
-                       return false;
-               case "edit_tags":
-                       var id = getActiveArticleId();
-                       if (id) {
-                               editArticleTags(id, getActiveFeedId(), isCdmMode());
-                               return;
-                       }
-                       return false;
-               case "dismiss_selected":
-                       dismissSelectedArticles();
-                       return false;
-               case "dismiss_read":
-                       return false;
-               case "open_in_new_window":
-                       if (getActiveArticleId()) {
-                               openArticleInNewWindow(getActiveArticleId());
-                               return;
-                       }
-                       return false;
-               case "catchup_below":
-                       catchupRelativeToArticle(1);
-                       return false;
-               case "catchup_above":
-                       catchupRelativeToArticle(0);
-                       return false;
-               case "article_scroll_down":
-                       var ctr = $("content_insert") ? $("content_insert") : $("headlines-frame");
-
-                       scrollArticle(ctr.offsetHeight/3);
-                       return false;
-               case "article_scroll_up":
-                       var ctr = $("content_insert") ? $("content_insert") : $("headlines-frame");
-
-                       scrollArticle(-ctr.offsetHeight/3);
-                       return false;
-               case "close_article":
-                       if (isCdmMode()) {
-                               if (!getInitParam("cdm_expanded")) {
-                                       cdmCollapseArticle(false, getActiveArticleId());
-                               } else {
-                                       dismissArticle(getActiveArticleId());
-                               }
-                       } else {
-                               closeArticlePanel();
-                       }
-                       return false;
-               case "email_article":
-                       if (typeof emailArticle != "undefined") {
-                               emailArticle();
-                       } else if (typeof mailtoArticle != "undefined") {
-                               mailtoArticle();
-                       } else {
-                               alert(__("Please enable mail plugin first."));
-                       }
-                       return false;
-               case "select_all":
-                       selectArticles('all');
-                       return false;
-               case "select_unread":
-                       selectArticles('unread');
-                       return false;
-               case "select_marked":
-                       selectArticles('marked');
-                       return false;
-               case "select_published":
-                       selectArticles('published');
-                       return false;
-               case "select_invert":
-                       selectArticles('invert');
-                       return false;
-               case "select_none":
-                       selectArticles('none');
-                       return false;
-               case "feed_refresh":
-                       if (getActiveFeedId() != undefined) {
-                               viewfeed(getActiveFeedId(), '', activeFeedIsCat());
-                               return;
-                       }
-                       return false;
-               case "feed_unhide_read":
-                       toggleDispRead();
-                       return false;
-               case "feed_subscribe":
-                       quickAddFeed();
-                       return false;
-               case "feed_debug_update":
-                       window.open("backend.php?op=feeds&method=view&feed=" + getActiveFeedId() +
-                               "&view_mode=adaptive&order_by=default&update=&m=ForceUpdate&cat=" +
-                               activeFeedIsCat() + "&DevForceUpdate=1&debug=1&xdebug=1&csrf_token=" +
-                               getInitParam("csrf_token"));
-                       return false;
-               case "feed_edit":
-                       if (activeFeedIsCat())
-                               alert(__("You can't edit this kind of feed."));
-                       else
-                               editFeed(getActiveFeedId());
-                       return false;
-               case "feed_catchup":
-                       if (getActiveFeedId() != undefined) {
-                               catchupCurrentFeed();
-                               return;
-                       }
-                       return false;
-               case "feed_reverse":
-                       reverseHeadlineOrder();
-                       return false;
-               case "catchup_all":
-                       catchupAllFeeds();
-                       return false;
-               case "cat_toggle_collapse":
-                       if (activeFeedIsCat()) {
-                               dijit.byId("feedTree").collapseCat(getActiveFeedId());
-                               return;
-                       }
-                       return false;
-               case "goto_all":
-                       viewfeed(-4);
-                       return false;
-               case "goto_fresh":
-                       viewfeed(-3);
-                       return false;
-               case "goto_marked":
-                       viewfeed(-1);
-                       return false;
-               case "goto_published":
-                       viewfeed(-2);
-                       return false;
-               case "goto_tagcloud":
-                       displayDlg("printTagCloud");
-                       return false;
-               case "goto_prefs":
-                       gotoPreferences();
-                       return false;
-               case "select_article_cursor":
-                       var id = getArticleUnderPointer();
-                       if (id) {
-                               var cb = dijit.byId("RCHK-" + id);
-                               if (cb) {
-                                       cb.attr("checked", !cb.attr("checked"));
-                                       toggleSelectRowById(cb, "RROW-" + id);
-                                       return false;
-                               }
-                       }
-                       return false;
-               case "create_label":
-                       addLabel();
-                       return false;
-               case "create_filter":
-                       quickAddFilter();
-                       return false;
-               case "collapse_sidebar":
-                       collapse_feedlist();
-                       return false;
-               case "toggle_embed_original":
-                       if (typeof embedOriginalArticle != "undefined") {
-                               if (getActiveArticleId())
-                                       embedOriginalArticle(getActiveArticleId());
-                       } else {
-                               alert(__("Please enable embed_original plugin first."));
-                       }
-                       return false;
-               case "toggle_widescreen":
-                       if (!isCdmMode()) {
-                               _widescreen_mode = !_widescreen_mode;
-
-                               switchPanelMode(_widescreen_mode);
-                       }
-                       return false;
-               case "help_dialog":
-                       helpDialog("main");
-                       return false;
-               case "toggle_combined_mode":
-                       notify_progress("Loading, please wait...");
-
-                       var value = isCdmMode() ? "false" : "true";
-                       var query = "?op=rpc&method=setpref&key=COMBINED_DISPLAY_MODE&value=" + value;
-
-                       new Ajax.Request("backend.php", {
-                               parameters: query,
-                               onComplete: function(transport) {
-                                       window.location.reload();
-                               } });
-
-                       return false;
-               default:
-                       console.log("unhandled action: " + hotkey_action + "; hotkey: " + hotkey);
-               }
+               var action = hotkey_actions[hotkey_action];
+               if(action != null) action();
 
        } catch (e) {
                exception_error("hotkey_handler", e);