X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=js%2Ftt-rss.js;h=fb80f48993c9c9a38857d7ea0dda8d82ecc5429d;hb=b8cb4d08b3b06bc22541d3366016403207742503;hp=8a82e4c7d03f61d589efc2af9d3c747b0a19d674;hpb=675b51e8ff6bf0e9a34dd4c774e2d619e27df505;p=tt-rss.git diff --git a/js/tt-rss.js b/js/tt-rss.js index 8a82e4c7..fb80f489 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -1,7 +1,7 @@ var total_unread = 0; var global_unread = -1; var firsttime_update = true; -var _active_feed_id = 0; +var _active_feed_id = undefined; var _active_feed_is_cat = false; var hotkey_prefix = false; var hotkey_prefix_pressed = false; @@ -41,10 +41,6 @@ function setActiveFeedId(id, is_cat) { } selectFeed(id, is_cat); - - dijit.byId("include_children").attr("disabled", !(is_cat && id > 0)); - - } catch (e) { exception_error("setActiveFeedId", e); } @@ -170,6 +166,7 @@ function catchupAllFeeds() { } function viewCurrentFeed(method) { + console.log("viewCurrentFeed"); if (getActiveFeedId() != undefined) { viewfeed(getActiveFeedId(), method, activeFeedIsCat()); @@ -286,6 +283,31 @@ function init() { themeBeforeLayout(); } + dojo.require("dijit.ColorPalette"); + dojo.require("dijit.Dialog"); + dojo.require("dijit.form.Button"); + dojo.require("dijit.form.CheckBox"); + dojo.require("dijit.form.DropDownButton"); + dojo.require("dijit.form.FilteringSelect"); + dojo.require("dijit.form.Form"); + dojo.require("dijit.form.RadioButton"); + dojo.require("dijit.form.Select"); + dojo.require("dijit.form.SimpleTextarea"); + dojo.require("dijit.form.TextBox"); + dojo.require("dijit.form.ValidationTextBox"); + dojo.require("dijit.InlineEditBox"); + dojo.require("dijit.layout.AccordionContainer"); + dojo.require("dijit.layout.BorderContainer"); + dojo.require("dijit.layout.ContentPane"); + dojo.require("dijit.layout.TabContainer"); + dojo.require("dijit.Menu"); + dojo.require("dijit.ProgressBar"); + dojo.require("dijit.ProgressBar"); + dojo.require("dijit.Toolbar"); + dojo.require("dijit.Tree"); + dojo.require("dijit.tree.dndSource"); + dojo.require("dojo.data.ItemFileWriteStore"); + dojo.parser.parse(); if (!genericSanityCheck()) @@ -329,13 +351,6 @@ function init_second_stage() { dijit.getEnclosingWidget(toolbar.order_by).attr('value', getInitParam("default_view_order_by")); - - if (getInitParam("enable_feed_cats") == 0) - Element.hide(dijit.byId("include_children").domNode); - - dijit.byId("include_children").attr("checked", - getInitParam("default_include_children")); - feeds_sort_by_unread = getInitParam("feeds_sort_by_unread") == 1; loading_set_progress(30); @@ -376,7 +391,7 @@ function quickMenuGo(opid) { } if (opid == "qmcDigest") { - window.location.href = "digest.php"; + window.location.href = "backend.php?op=digest"; return; } @@ -438,12 +453,7 @@ function quickMenuGo(opid) { } if (opid == "qmcHKhelp") { - new Ajax.Request("backend.php", { - parameters: "?op=backend&method=help&topic=main", - onComplete: function(transport) { - $("hotkey_help_overlay").innerHTML = transport.responseText; - Effect.Appear("hotkey_help_overlay", {duration : 0.3}); - } }); + helpDialog("main"); } } catch (e) { @@ -540,6 +550,7 @@ function collapse_feedlist() { } function viewModeChanged() { + cache_clear(); return viewCurrentFeed(''); } @@ -622,374 +633,215 @@ function hotkey_handler(e) { var keychar = String.fromCharCode(keycode); if (keycode == 27) { // escape - if (Element.visible("hotkey_help_overlay")) { - Element.hide("hotkey_help_overlay"); - } hotkey_prefix = false; } if (keycode == 16) return; // ignore lone shift if (keycode == 17) return; // ignore lone ctrl - if ((keycode == 70 || keycode == 67 || keycode == 71 || keycode == 65) - && !hotkey_prefix) { + if (!shift_key) keychar = keychar.toLowerCase(); + + var hotkeys = getInitParam("hotkeys"); + + if (!hotkey_prefix && hotkeys[0].indexOf(keychar) != -1) { var date = new Date(); var ts = Math.round(date.getTime() / 1000); - hotkey_prefix = keycode; + hotkey_prefix = keychar; hotkey_prefix_pressed = ts; cmdline.innerHTML = keychar; Element.show(cmdline); - console.log("KP: PREFIX=" + keycode + " CHAR=" + keychar + " TS=" + ts); return true; } - if (Element.visible("hotkey_help_overlay")) { - Element.hide("hotkey_help_overlay"); - } - - /* Global hotkeys */ - Element.hide(cmdline); - if (!hotkey_prefix) { - - if (keycode == 27) { // escape - closeArticlePanel(); - return; - } - - if (keycode == 69) { // e - var id = getActiveArticleId(); - emailArticle(id); - } - - if ((keycode == 191 || keychar == '?') && shift_key) { // ? - - new Ajax.Request("backend.php", { - parameters: "?op=backend&method=help&topic=main", - onComplete: function(transport) { - $("hotkey_help_overlay").innerHTML = transport.responseText; - Effect.Appear("hotkey_help_overlay", {duration : 0.3}); - } }); - return false; - } - - if (keycode == 191 || keychar == '/') { // / - search(); - return false; - } - - if (keycode == 74 && !shift_key) { // j - var rv = dijit.byId("feedTree").getPreviousFeed( - getActiveFeedId(), activeFeedIsCat()); - - if (rv) viewfeed(rv[0], '', rv[1]); - - return; - } - - if (keycode == 75) { // k - var rv = dijit.byId("feedTree").getNextFeed( - getActiveFeedId(), activeFeedIsCat()); - - if (rv) viewfeed(rv[0], '', rv[1]); - - return; - } - - if (shift_key && keycode == 40) { // shift-down - catchupRelativeToArticle(1); - return; - } - - if (shift_key && keycode == 38) { // shift-up - catchupRelativeToArticle(0); - return; - } - - if (shift_key && keycode == 78) { // N - scrollArticle(50); - return; - } - - if (shift_key && keycode == 80) { // P - scrollArticle(-50); - return; - } - - if (keycode == 68 && shift_key) { // shift-D - dismissSelectedArticles(); - return; - } - - if (keycode == 88 && shift_key) { // shift-X - dismissReadArticles(); - return; - } - - if (keycode == 78 || keycode == 40) { // n, down - if (typeof moveToPost != 'undefined') { - moveToPost('next'); - return false; - } - } - - if (keycode == 80 || keycode == 38) { // p, up - if (typeof moveToPost != 'undefined') { - moveToPost('prev'); - return false; - } - } - - if (keycode == 83 && shift_key) { // S - selectionTogglePublished(undefined, false, true); - return; - } - - if (keycode == 83) { // s - selectionToggleMarked(undefined, false, true); - return; - } - - if (keycode == 85) { // u - selectionToggleUnread(undefined, false, true); - return; - } - - if (keycode == 84 && shift_key) { // T - var id = getActiveArticleId(); - if (id) { - editArticleTags(id, getActiveFeedId(), isCdmMode()); - return; - } - } + var hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")"; + hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey; + hotkey_prefix = false; - if (keycode == 9) { // tab - var id = getArticleUnderPointer(); - if (id) { - var cb = $("RCHK-" + id); + var hotkey_action = false; + var hotkeys = getInitParam("hotkeys"); - if (cb) { - cb.checked = !cb.checked; - toggleSelectRowById(cb, "RROW-" + id); - return false; - } - } - } - - if (keycode == 79) { // o - if (getActiveArticleId()) { - openArticleInNewWindow(getActiveArticleId()); - return; - } - } - - if (keycode == 81 && shift_key) { // Q - if (typeof catchupAllFeeds != 'undefined') { - catchupAllFeeds(); - return; - } - } - - if (keycode == 88 && !shift_key) { // x - if (activeFeedIsCat()) { - dijit.byId("feedTree").collapseCat(getActiveFeedId()); - return; - } + for (sequence in hotkeys[1]) { + if (sequence == hotkey) { + hotkey_action = hotkeys[1][sequence]; + break; } } - /* Prefix a */ + switch (hotkey_action) { + case "next_feed": + var rv = dijit.byId("feedTree").getNextFeed( + getActiveFeedId(), activeFeedIsCat()); - if (hotkey_prefix == 65) { // a - hotkey_prefix = false; - - if (keycode == 65) { // a - selectArticles('all'); - return; - } + if (rv) viewfeed(rv[0], '', rv[1]); + return true; + case "prev_feed": + var rv = dijit.byId("feedTree").getPreviousFeed( + getActiveFeedId(), activeFeedIsCat()); - if (keycode == 85) { // u - selectArticles('unread'); + if (rv) viewfeed(rv[0], '', rv[1]); + return true; + case "next_article": + moveToPost('next'); + return true; + case "prev_article": + moveToPost('prev'); + return true; + case "search_dialog": + search(); + return ; + case "toggle_mark": + selectionToggleMarked(undefined, false, true); + return true; + case "toggle_publ": + selectionTogglePublished(undefined, false, true); + return true; + case "toggle_unread": + selectionToggleUnread(undefined, false, true); + return true; + case "edit_tags": + var id = getActiveArticleId(); + if (id) { + editArticleTags(id, getActiveFeedId(), isCdmMode()); return; } - - if (keycode == 73) { // i - selectArticles('invert'); + return true; + case "dismiss_selected": + dismissSelectedArticles(); + return true; + case "dismiss_read": + return true; + case "open_in_new_window": + if (getActiveArticleId()) { + openArticleInNewWindow(getActiveArticleId()); return; } - - if (keycode == 78) { // n - selectArticles('none'); + return true; + case "catchup_below": + catchupRelativeToArticle(1); + return true; + case "catchup_above": + catchupRelativeToArticle(0); + return true; + case "article_scroll_down": + scrollArticle(50); + return true; + case "article_scroll_up": + scrollArticle(-50); + return true; + case "email_article": + emailArticle(); + return true; + case "select_all": + selectArticles('all'); + return true; + case "select_unread": + selectArticles('unread'); + return true; + case "select_marked": + selectArticles('marked'); + return true; + case "select_published": + selectArticles('published'); + return true; + case "select_invert": + selectArticles('invert'); + return true; + case "select_none": + selectArticles('none'); + return true; + case "feed_refresh": + if (getActiveFeedId() != undefined) { + viewfeed(getActiveFeedId(), '', activeFeedIsCat()); return; } - - } - - /* Prefix f */ - - if (hotkey_prefix == 70) { // f - - hotkey_prefix = false; - - if (keycode == 81) { // q - if (getActiveFeedId()) { - catchupCurrentFeed(); - return; - } - } - - if (keycode == 82) { // r - if (getActiveFeedId()) { - viewfeed(getActiveFeedId(), '', activeFeedIsCat()); - return; - } - } - - if (keycode == 65) { // a - toggleDispRead(); - return false; - } - - if (keycode == 85) { // u - if (getActiveFeedId()) { - viewfeed(getActiveFeedId(), ''); - return false; - } - } - - if (keycode == 69) { // e - - if (activeFeedIsCat()) - alert(__("You can't edit this kind of feed.")); - else - editFeed(getActiveFeedId()); + return true; + case "feed_unhide_read": + toggleDispRead(); + return true; + case "feed_subscribe": + quickAddFeed(); + return true; + 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=2&xdebug=2&csrf_token=" + + getInitParam("csrf_token")); + return true; + case "feed_edit": + if (activeFeedIsCat()) + alert(__("You can't edit this kind of feed.")); + else + editFeed(getActiveFeedId()); + return true; + case "feed_catchup": + if (getActiveFeedId() != undefined) { + catchupCurrentFeed(); return; - - return false; - } - - if (keycode == 83) { // s - quickAddFeed(); - return false; - } - - if (keycode == 67 && shift_key) { // C - if (typeof catchupAllFeeds != 'undefined') { - catchupAllFeeds(); - return false; - } - } - - if (keycode == 67) { // c - if (getActiveFeedId()) { - catchupCurrentFeed(); - return false; - } } - - if (keycode == 88) { // x - reverseHeadlineOrder(); + return true; + case "feed_reverse": + reverseHeadlineOrder(); + return true; + case "catchup_all": + catchupAllFeeds(); + return true; + case "cat_toggle_collapse": + if (activeFeedIsCat()) { + dijit.byId("feedTree").collapseCat(getActiveFeedId()); return; } - } - - /* Prefix c */ - - if (hotkey_prefix == 67) { // c - hotkey_prefix = false; - - if (keycode == 70) { // f - quickAddFilter(); - return false; - } - - if (keycode == 76) { // l - addLabel(); - return false; - } - - if (keycode == 83) { // s - if (typeof collapse_feedlist != 'undefined') { - collapse_feedlist(); + return true; + case "goto_all": + viewfeed(-4); + return true; + case "goto_fresh": + viewfeed(-3); + return true; + case "goto_marked": + viewfeed(-1); + return true; + case "goto_published": + viewfeed(-2); + return true; + case "goto_tagcloud": + displayDlg("printTagCloud"); + return true; + case "goto_prefs": + gotoPreferences(); + return true; + 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; } } - - if (keycode == 77) { // m - // TODO: sortable feedlist - return; - } - - if (keycode == 78) { // n - catchupRelativeToArticle(1); - return; - } - - if (keycode == 80) { // p - catchupRelativeToArticle(0); - return; - } - - - } - - /* Prefix g */ - - if (hotkey_prefix == 71) { // g - - hotkey_prefix = false; - - - if (keycode == 65) { // a - viewfeed(-4); - return false; - } - - if (keycode == 83) { // s - viewfeed(-1); - return false; - } - - if (keycode == 80 && shift_key) { // P - gotoPreferences(); - return false; - } - - if (keycode == 80) { // p - viewfeed(-2); - return false; - } - - if (keycode == 70) { // f - viewfeed(-3); - return false; - } - - if (keycode == 84) { // t - displayDlg("printTagCloud"); - return false; - } - } - - /* Cmd */ - - if (hotkey_prefix == 224 || hotkey_prefix == 91) { // f - hotkey_prefix = false; - return; - } - - if (hotkey_prefix) { - console.log("KP: PREFIX=" + hotkey_prefix + " CODE=" + keycode + " CHAR=" + keychar); - } else { - console.log("KP: CODE=" + keycode + " CHAR=" + keychar); + return true; + case "create_label": + addLabel(); + return true; + case "create_filter": + quickAddFilter(); + return true; + case "collapse_sidebar": + collapse_feedlist(); + return true; + case "help_dialog": + helpDialog("main"); + return false; + default: + console.log("unhandled action: " + hotkey_action + "; hotkey: " + hotkey); } - } catch (e) { exception_error("hotkey_handler", e); } @@ -1015,45 +867,6 @@ function reverseHeadlineOrder() { } } -function scheduleFeedUpdate(id, is_cat) { - try { - if (!id) { - id = getActiveFeedId(); - is_cat = activeFeedIsCat(); - } - - if (!id) { - alert(__("Please select some feed first.")); - return; - } - - var query = "?op=rpc&method=scheduleFeedUpdate&id=" + - param_escape(id) + - "&is_cat=" + param_escape(is_cat); - - console.log(query); - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - handle_rpc_json(transport); - - var reply = JSON.parse(transport.responseText); - var message = reply['message']; - - if (message) { - notify_info(message); - return; - } - - } }); - - - } catch (e) { - exception_error("scheduleFeedUpdate", e); - } -} - function newVersionDlg() { try { var query = "backend.php?op=dlg&method=newVersion";