further objectification

This commit is contained in:
Andrew Dolgov 2018-12-01 17:42:21 +03:00
parent 072c03fbac
commit 1d82bd4f19
5 changed files with 367 additions and 387 deletions

View File

@ -139,7 +139,7 @@
<script type="text/javascript"> <script type="text/javascript">
Event.observe(window, 'load', function() { Event.observe(window, 'load', function() {
init(); App.init();
}); });
</script> </script>
</head> </head>
@ -187,7 +187,7 @@
<form id="main_toolbar_form" action="" onsubmit='return false'> <form id="main_toolbar_form" action="" onsubmit='return false'>
<select name="view_mode" title="<?php echo __('Show articles') ?>" <select name="view_mode" title="<?php echo __('Show articles') ?>"
onchange="viewModeChanged()" onchange="App.onViewModeChanged()"
dojoType="dijit.form.Select"> dojoType="dijit.form.Select">
<option selected="selected" value="adaptive"><?php echo __('Adaptive') ?></option> <option selected="selected" value="adaptive"><?php echo __('Adaptive') ?></option>
<option value="all_articles"><?php echo __('All Articles') ?></option> <option value="all_articles"><?php echo __('All Articles') ?></option>
@ -199,7 +199,7 @@
</select> </select>
<select title="<?php echo __('Sort articles') ?>" <select title="<?php echo __('Sort articles') ?>"
onchange="viewModeChanged()" onchange="App.onViewModeChanged()"
dojoType="dijit.form.Select" name="order_by"> dojoType="dijit.form.Select" name="order_by">
<option selected="selected" value="default"><?php echo __('Default') ?></option> <option selected="selected" value="default"><?php echo __('Default') ?></option>
<option value="feed_dates"><?php echo __('Newest first') ?></option> <option value="feed_dates"><?php echo __('Newest first') ?></option>

View File

@ -255,6 +255,60 @@ const Utils = {
PluginHost.run(PluginHost.HOOK_RUNTIME_INFO_LOADED, data); PluginHost.run(PluginHost.HOOK_RUNTIME_INFO_LOADED, data);
}, },
backendSanityCallback: function (transport) {
const reply = JSON.parse(transport.responseText);
if (!reply) {
fatalError(3, "Sanity check: invalid RPC reply", transport.responseText);
return;
}
const error_code = reply['error']['code'];
if (error_code && error_code != 0) {
return fatalError(error_code, reply['error']['message']);
}
console.log("sanity check ok");
const params = reply['init-params'];
if (params) {
console.log('reading init-params...');
for (const k in params) {
if (params.hasOwnProperty(k)) {
switch (k) {
case "label_base_index":
_label_base_index = parseInt(params[k])
break;
case "hotkeys":
// filter mnemonic definitions (used for help panel) from hotkeys map
// i.e. *(191)|Ctrl-/ -> *(191)
const tmp = [];
for (const sequence in params[k][1]) {
const filtered = sequence.replace(/\|.*$/, "");
tmp[filtered] = params[k][1][sequence];
}
params[k][1] = tmp;
break;
}
console.log("IP:", k, "=>", params[k]);
}
}
init_params = params;
// PluginHost might not be available on non-index pages
window.PluginHost && PluginHost.run(PluginHost.HOOK_PARAMS_LOADED, init_params);
}
App.initSecondStage();
}
}; };
function report_error(message, filename, lineno, colno, error) { function report_error(message, filename, lineno, colno, error) {
@ -1193,62 +1247,6 @@ function unsubscribeFeed(feed_id, title) {
return false; return false;
} }
function backend_sanity_check_callback(transport) {
const reply = JSON.parse(transport.responseText);
if (!reply) {
fatalError(3, "Sanity check: invalid RPC reply", transport.responseText);
return;
}
const error_code = reply['error']['code'];
if (error_code && error_code != 0) {
return fatalError(error_code, reply['error']['message']);
}
console.log("sanity check ok");
const params = reply['init-params'];
if (params) {
console.log('reading init-params...');
for (const k in params) {
if (params.hasOwnProperty(k)) {
switch (k) {
case "label_base_index":
_label_base_index = parseInt(params[k])
break;
case "hotkeys":
// filter mnemonic definitions (used for help panel) from hotkeys map
// i.e. *(191)|Ctrl-/ -> *(191)
const tmp = [];
for (const sequence in params[k][1]) {
const filtered = sequence.replace(/\|.*$/, "");
tmp[filtered] = params[k][1][sequence];
}
params[k][1] = tmp;
break;
}
console.log("IP:", k, "=>", params[k]);
}
}
init_params = params;
// PluginHost might not be available on non-index pages
window.PluginHost && PluginHost.run(PluginHost.HOOK_PARAMS_LOADED, init_params);
}
init_second_stage();
}
// noinspection JSUnusedGlobalSymbols // noinspection JSUnusedGlobalSymbols
function genUrlChangeKey(feed, is_cat) { function genUrlChangeKey(feed, is_cat) {
if (confirm(__("Generate new syndication address for this feed?"))) { if (confirm(__("Generate new syndication address for this feed?"))) {

View File

@ -5,6 +5,158 @@ let hotkey_actions = {};
const App = { const App = {
global_unread: -1, global_unread: -1,
init: function() {
window.onerror = function (message, filename, lineno, colno, error) {
report_error(message, filename, lineno, colno, error);
};
require(["dojo/_base/kernel",
"dojo/ready",
"dojo/parser",
"dojo/_base/loader",
"dojo/_base/html",
"dojo/query",
"dijit/ProgressBar",
"dijit/ColorPalette",
"dijit/Dialog",
"dijit/form/Button",
"dijit/form/ComboButton",
"dijit/form/CheckBox",
"dijit/form/DropDownButton",
"dijit/form/FilteringSelect",
"dijit/form/Form",
"dijit/form/RadioButton",
"dijit/form/Select",
"dijit/form/MultiSelect",
"dijit/form/SimpleTextarea",
"dijit/form/TextBox",
"dijit/form/ComboBox",
"dijit/form/ValidationTextBox",
"dijit/InlineEditBox",
"dijit/layout/AccordionContainer",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dijit/layout/TabContainer",
"dijit/PopupMenuItem",
"dijit/Menu",
"dijit/Toolbar",
"dijit/Tree",
"dijit/tree/dndSource",
"dijit/tree/ForestStoreModel",
"dojo/data/ItemFileWriteStore",
"fox/FeedStoreModel",
"fox/FeedTree"], function (dojo, ready, parser) {
ready(function () {
try {
parser.parse();
if (!App.genericSanityCheck())
return false;
setLoadingProgress(30);
init_hotkey_actions();
const a = document.createElement('audio');
const hasAudio = !!a.canPlayType;
const hasSandbox = "sandbox" in document.createElement("iframe");
const hasMp3 = !!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, ''));
const clientTzOffset = new Date().getTimezoneOffset() * 60;
const params = {
op: "rpc", method: "sanityCheck", hasAudio: hasAudio,
hasMp3: hasMp3,
clientTzOffset: clientTzOffset,
hasSandbox: hasSandbox
};
xhrPost("backend.php", params, (transport) => {
try {
Utils.backendSanityCallback(transport);
} catch (e) {
console.error(e);
}
});
} catch (e) {
exception_error(e);
}
});
});
},
initSecondStage: function () {
Feeds.reload();
Article.closeArticlePanel();
if (parseInt(getCookie("ttrss_fh_width")) > 0) {
dijit.byId("feeds-holder").domNode.setStyle(
{width: getCookie("ttrss_fh_width") + "px"});
}
dijit.byId("main").resize();
dojo.connect(dijit.byId('feeds-holder'), 'resize',
function (args) {
if (args && args.w >= 0) {
setCookie("ttrss_fh_width", args.w, getInitParam("cookie_lifetime"));
}
});
dojo.connect(dijit.byId('content-insert'), 'resize',
function (args) {
if (args && args.w >= 0 && args.h >= 0) {
setCookie("ttrss_ci_width", args.w, getInitParam("cookie_lifetime"));
setCookie("ttrss_ci_height", args.h, getInitParam("cookie_lifetime"));
}
});
delCookie("ttrss_test");
const toolbar = document.forms["main_toolbar_form"];
dijit.getEnclosingWidget(toolbar.view_mode).attr('value',
getInitParam("default_view_mode"));
dijit.getEnclosingWidget(toolbar.order_by).attr('value',
getInitParam("default_view_order_by"));
const hash_feed_id = hash_get('f');
const hash_feed_is_cat = hash_get('c') == "1";
if (hash_feed_id != undefined) {
Feeds.setActiveFeedId(hash_feed_id, hash_feed_is_cat);
}
setLoadingProgress(50);
ArticleCache.clear();
_widescreen_mode = getInitParam("widescreen");
this.switchPanelMode(_widescreen_mode);
Headlines.initScrollHandler();
console.log("second stage ok");
if (getInitParam("simple_update")) {
console.log("scheduling simple feed updater...");
window.setTimeout(update_random_feed, 30 * 1000);
}
},
genericSanityCheck: function() {
setCookie("ttrss_test", "TEST");
if (getCookie("ttrss_test") != "TEST") {
return fatalError(2);
}
return true;
},
updateTitle: function() { updateTitle: function() {
let tmp = "Tiny Tiny RSS"; let tmp = "Tiny Tiny RSS";
@ -14,6 +166,10 @@ const App = {
document.title = tmp; document.title = tmp;
}, },
onViewModeChanged: function() {
ArticleCache.clear();
return Feeds.viewCurrentFeed('');
},
isCombinedMode: function() { isCombinedMode: function() {
return getInitParam("combined_display_mode"); return getInitParam("combined_display_mode");
}, },
@ -73,7 +229,7 @@ const App = {
Article.closeArticlePanel(); Article.closeArticlePanel();
if (article_id) view(article_id); if (article_id) Article.view(article_id);
xhrPost("backend.php", {op: "rpc", method: "setpanelmode", wide: wide ? 1 : 0}); xhrPost("backend.php", {op: "rpc", method: "setpanelmode", wide: wide ? 1 : 0});
}, },
@ -102,176 +258,80 @@ function search() {
dialog.show(); dialog.show();
} }
function genericSanityCheck() {
setCookie("ttrss_test", "TEST");
if (getCookie("ttrss_test") != "TEST") {
return fatalError(2);
}
return true;
}
function init() {
window.onerror = function(message, filename, lineno, colno, error) {
report_error(message, filename, lineno, colno, error);
};
require(["dojo/_base/kernel",
"dojo/ready",
"dojo/parser",
"dojo/_base/loader",
"dojo/_base/html",
"dojo/query",
"dijit/ProgressBar",
"dijit/ColorPalette",
"dijit/Dialog",
"dijit/form/Button",
"dijit/form/ComboButton",
"dijit/form/CheckBox",
"dijit/form/DropDownButton",
"dijit/form/FilteringSelect",
"dijit/form/Form",
"dijit/form/RadioButton",
"dijit/form/Select",
"dijit/form/MultiSelect",
"dijit/form/SimpleTextarea",
"dijit/form/TextBox",
"dijit/form/ComboBox",
"dijit/form/ValidationTextBox",
"dijit/InlineEditBox",
"dijit/layout/AccordionContainer",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dijit/layout/TabContainer",
"dijit/PopupMenuItem",
"dijit/Menu",
"dijit/Toolbar",
"dijit/Tree",
"dijit/tree/dndSource",
"dijit/tree/ForestStoreModel",
"dojo/data/ItemFileWriteStore",
"fox/FeedStoreModel",
"fox/FeedTree" ], function (dojo, ready, parser) {
ready(function() {
try {
parser.parse();
if (!genericSanityCheck())
return false;
setLoadingProgress(30);
init_hotkey_actions();
const a = document.createElement('audio');
const hasAudio = !!a.canPlayType;
const hasSandbox = "sandbox" in document.createElement("iframe");
const hasMp3 = !!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, ''));
const clientTzOffset = new Date().getTimezoneOffset() * 60;
const params = {
op: "rpc", method: "sanityCheck", hasAudio: hasAudio,
hasMp3: hasMp3,
clientTzOffset: clientTzOffset,
hasSandbox: hasSandbox
};
xhrPost("backend.php", params, (transport) => {
try {
backend_sanity_check_callback(transport);
} catch (e) {
console.error(e);
}
});
} catch (e) {
exception_error(e);
}
});
});
}
function init_hotkey_actions() { function init_hotkey_actions() {
hotkey_actions["next_feed"] = function() { hotkey_actions["next_feed"] = function () {
const rv = dijit.byId("feedTree").getNextFeed( const rv = dijit.byId("feedTree").getNextFeed(
Feeds.getActiveFeedId(), Feeds.activeFeedIsCat()); Feeds.getActiveFeedId(), Feeds.activeFeedIsCat());
if (rv) Feeds.viewfeed({feed: rv[0], is_cat: rv[1], delayed: true}) if (rv) Feeds.viewfeed({feed: rv[0], is_cat: rv[1], delayed: true})
}; };
hotkey_actions["prev_feed"] = function() { hotkey_actions["prev_feed"] = function () {
const rv = dijit.byId("feedTree").getPreviousFeed( const rv = dijit.byId("feedTree").getPreviousFeed(
Feeds.getActiveFeedId(), Feeds.activeFeedIsCat()); Feeds.getActiveFeedId(), Feeds.activeFeedIsCat());
if (rv) Feeds.viewfeed({feed: rv[0], is_cat: rv[1], delayed: true}) if (rv) Feeds.viewfeed({feed: rv[0], is_cat: rv[1], delayed: true})
}; };
hotkey_actions["next_article"] = function() { hotkey_actions["next_article"] = function () {
moveToPost('next'); moveToPost('next');
}; };
hotkey_actions["prev_article"] = function() { hotkey_actions["prev_article"] = function () {
moveToPost('prev'); moveToPost('prev');
}; };
hotkey_actions["next_article_noscroll"] = function() { hotkey_actions["next_article_noscroll"] = function () {
moveToPost('next', true); moveToPost('next', true);
}; };
hotkey_actions["prev_article_noscroll"] = function() { hotkey_actions["prev_article_noscroll"] = function () {
moveToPost('prev', true); moveToPost('prev', true);
}; };
hotkey_actions["next_article_noexpand"] = function() { hotkey_actions["next_article_noexpand"] = function () {
moveToPost('next', true, true); moveToPost('next', true, true);
}; };
hotkey_actions["prev_article_noexpand"] = function() { hotkey_actions["prev_article_noexpand"] = function () {
moveToPost('prev', true, true); moveToPost('prev', true, true);
}; };
hotkey_actions["search_dialog"] = function() { hotkey_actions["search_dialog"] = function () {
search(); search();
}; };
hotkey_actions["toggle_mark"] = function() { hotkey_actions["toggle_mark"] = function () {
selectionToggleMarked(); selectionToggleMarked();
}; };
hotkey_actions["toggle_publ"] = function() { hotkey_actions["toggle_publ"] = function () {
selectionTogglePublished(); selectionTogglePublished();
}; };
hotkey_actions["toggle_unread"] = function() { hotkey_actions["toggle_unread"] = function () {
selectionToggleUnread({no_error: 1}); selectionToggleUnread({no_error: 1});
}; };
hotkey_actions["edit_tags"] = function() { hotkey_actions["edit_tags"] = function () {
const id = getActiveArticleId(); const id = getActiveArticleId();
if (id) { if (id) {
editArticleTags(id); editArticleTags(id);
} }
} }
hotkey_actions["open_in_new_window"] = function() { hotkey_actions["open_in_new_window"] = function () {
if (getActiveArticleId()) { if (getActiveArticleId()) {
Article.openArticleInNewWindow(getActiveArticleId()); Article.openArticleInNewWindow(getActiveArticleId());
} }
}; };
hotkey_actions["catchup_below"] = function() { hotkey_actions["catchup_below"] = function () {
catchupRelativeToArticle(1); catchupRelativeToArticle(1);
}; };
hotkey_actions["catchup_above"] = function() { hotkey_actions["catchup_above"] = function () {
catchupRelativeToArticle(0); catchupRelativeToArticle(0);
}; };
hotkey_actions["article_scroll_down"] = function() { hotkey_actions["article_scroll_down"] = function () {
scrollArticle(40); scrollArticle(40);
}; };
hotkey_actions["article_scroll_up"] = function() { hotkey_actions["article_scroll_up"] = function () {
scrollArticle(-40); scrollArticle(-40);
}; };
hotkey_actions["close_article"] = function() { hotkey_actions["close_article"] = function () {
if (App.isCombinedMode()) { if (App.isCombinedMode()) {
cdmCollapseActive(); cdmCollapseActive();
} else { } else {
Article.closeArticlePanel(); Article.closeArticlePanel();
} }
}; };
hotkey_actions["email_article"] = function() { hotkey_actions["email_article"] = function () {
if (typeof emailArticle != "undefined") { if (typeof emailArticle != "undefined") {
emailArticle(); emailArticle();
} else if (typeof mailtoArticle != "undefined") { } else if (typeof mailtoArticle != "undefined") {
@ -280,37 +340,37 @@ function init_hotkey_actions() {
alert(__("Please enable mail plugin first.")); alert(__("Please enable mail plugin first."));
} }
}; };
hotkey_actions["select_all"] = function() { hotkey_actions["select_all"] = function () {
selectArticles('all'); selectArticles('all');
}; };
hotkey_actions["select_unread"] = function() { hotkey_actions["select_unread"] = function () {
selectArticles('unread'); selectArticles('unread');
}; };
hotkey_actions["select_marked"] = function() { hotkey_actions["select_marked"] = function () {
selectArticles('marked'); selectArticles('marked');
}; };
hotkey_actions["select_published"] = function() { hotkey_actions["select_published"] = function () {
selectArticles('published'); selectArticles('published');
}; };
hotkey_actions["select_invert"] = function() { hotkey_actions["select_invert"] = function () {
selectArticles('invert'); selectArticles('invert');
}; };
hotkey_actions["select_none"] = function() { hotkey_actions["select_none"] = function () {
selectArticles('none'); selectArticles('none');
}; };
hotkey_actions["feed_refresh"] = function() { hotkey_actions["feed_refresh"] = function () {
if (Feeds.getActiveFeedId() != undefined) { if (Feeds.getActiveFeedId() != undefined) {
Feeds.viewfeed({feed: Feeds.getActiveFeedId(), is_cat: Feeds.activeFeedIsCat()}); Feeds.viewfeed({feed: Feeds.getActiveFeedId(), is_cat: Feeds.activeFeedIsCat()});
return; return;
} }
}; };
hotkey_actions["feed_unhide_read"] = function() { hotkey_actions["feed_unhide_read"] = function () {
Feeds.toggleDispRead(); Feeds.toggleDispRead();
}; };
hotkey_actions["feed_subscribe"] = function() { hotkey_actions["feed_subscribe"] = function () {
quickAddFeed(); quickAddFeed();
}; };
hotkey_actions["feed_debug_update"] = function() { hotkey_actions["feed_debug_update"] = function () {
if (!Feeds.activeFeedIsCat() && parseInt(Feeds.getActiveFeedId()) > 0) { if (!Feeds.activeFeedIsCat() && parseInt(Feeds.getActiveFeedId()) > 0) {
window.open("backend.php?op=feeds&method=update_debugger&feed_id=" + Feeds.getActiveFeedId() + window.open("backend.php?op=feeds&method=update_debugger&feed_id=" + Feeds.getActiveFeedId() +
"&csrf_token=" + getInitParam("csrf_token")); "&csrf_token=" + getInitParam("csrf_token"));
@ -319,58 +379,57 @@ function init_hotkey_actions() {
} }
}; };
hotkey_actions["feed_debug_viewfeed"] = function() { hotkey_actions["feed_debug_viewfeed"] = function () {
Feeds.viewfeed({feed: Feeds.getActiveFeedId(), is_cat: Feeds.activeFeedIsCat(), viewfeed_debug: true}); Feeds.viewfeed({feed: Feeds.getActiveFeedId(), is_cat: Feeds.activeFeedIsCat(), viewfeed_debug: true});
}; };
hotkey_actions["feed_edit"] = function() { hotkey_actions["feed_edit"] = function () {
if (Feeds.activeFeedIsCat()) if (Feeds.activeFeedIsCat())
alert(__("You can't edit this kind of feed.")); alert(__("You can't edit this kind of feed."));
else else
editFeed(Feeds.getActiveFeedId()); editFeed(Feeds.getActiveFeedId());
}; };
hotkey_actions["feed_catchup"] = function() { hotkey_actions["feed_catchup"] = function () {
if (Feeds.getActiveFeedId() != undefined) { if (Feeds.getActiveFeedId() != undefined) {
Feeds.catchupCurrentFeed(); Feeds.catchupCurrentFeed();
return; return;
} }
}; };
hotkey_actions["feed_reverse"] = function() { hotkey_actions["feed_reverse"] = function () {
reverseHeadlineOrder(); Headlines.reverseHeadlineOrder();
}; };
hotkey_actions["feed_toggle_vgroup"] = function() { hotkey_actions["feed_toggle_vgroup"] = function () {
xhrPost("backend.php", {op: "rpc", method: "togglepref", key: "VFEED_GROUP_BY_FEED"}, () => { xhrPost("backend.php", {op: "rpc", method: "togglepref", key: "VFEED_GROUP_BY_FEED"}, () => {
Feeds.viewCurrentFeed(); Feeds.viewCurrentFeed();
}) })
}; };
hotkey_actions["catchup_all"] = function() { hotkey_actions["catchup_all"] = function () {
Feeds.catchupAllFeeds(); Feeds.catchupAllFeeds();
}; };
hotkey_actions["cat_toggle_collapse"] = function() { hotkey_actions["cat_toggle_collapse"] = function () {
if (Feeds.activeFeedIsCat()) { if (Feeds.activeFeedIsCat()) {
dijit.byId("feedTree").collapseCat(Feeds.getActiveFeedId()); dijit.byId("feedTree").collapseCat(Feeds.getActiveFeedId());
return;
} }
}; };
hotkey_actions["goto_all"] = function() { hotkey_actions["goto_all"] = function () {
Feeds.viewfeed({feed: -4}); Feeds.viewfeed({feed: -4});
}; };
hotkey_actions["goto_fresh"] = function() { hotkey_actions["goto_fresh"] = function () {
Feeds.viewfeed({feed: -3}); Feeds.viewfeed({feed: -3});
}; };
hotkey_actions["goto_marked"] = function() { hotkey_actions["goto_marked"] = function () {
Feeds.viewfeed({feed: -1}); Feeds.viewfeed({feed: -1});
}; };
hotkey_actions["goto_published"] = function() { hotkey_actions["goto_published"] = function () {
Feeds.viewfeed({feed: -2}); Feeds.viewfeed({feed: -2});
}; };
hotkey_actions["goto_tagcloud"] = function() { hotkey_actions["goto_tagcloud"] = function () {
Utils.displayDlg(__("Tag cloud"), "printTagCloud"); Utils.displayDlg(__("Tag cloud"), "printTagCloud");
}; };
hotkey_actions["goto_prefs"] = function() { hotkey_actions["goto_prefs"] = function () {
gotoPreferences(); gotoPreferences();
}; };
hotkey_actions["select_article_cursor"] = function() { hotkey_actions["select_article_cursor"] = function () {
const id = getArticleUnderPointer(); const id = getArticleUnderPointer();
if (id) { if (id) {
const row = $("RROW-" + id); const row = $("RROW-" + id);
@ -389,16 +448,16 @@ function init_hotkey_actions() {
} }
} }
}; };
hotkey_actions["create_label"] = function() { hotkey_actions["create_label"] = function () {
addLabel(); addLabel();
}; };
hotkey_actions["create_filter"] = function() { hotkey_actions["create_filter"] = function () {
quickAddFilter(); quickAddFilter();
}; };
hotkey_actions["collapse_sidebar"] = function() { hotkey_actions["collapse_sidebar"] = function () {
Feeds.viewCurrentFeed(); Feeds.viewCurrentFeed();
}; };
hotkey_actions["toggle_embed_original"] = function() { hotkey_actions["toggle_embed_original"] = function () {
if (typeof embedOriginalArticle != "undefined") { if (typeof embedOriginalArticle != "undefined") {
if (getActiveArticleId()) if (getActiveArticleId())
embedOriginalArticle(getActiveArticleId()); embedOriginalArticle(getActiveArticleId());
@ -406,7 +465,7 @@ function init_hotkey_actions() {
alert(__("Please enable embed_original plugin first.")); alert(__("Please enable embed_original plugin first."));
} }
}; };
hotkey_actions["toggle_widescreen"] = function() { hotkey_actions["toggle_widescreen"] = function () {
if (!App.isCombinedMode()) { if (!App.isCombinedMode()) {
_widescreen_mode = !_widescreen_mode; _widescreen_mode = !_widescreen_mode;
@ -419,10 +478,10 @@ function init_hotkey_actions() {
alert(__("Widescreen is not available in combined mode.")); alert(__("Widescreen is not available in combined mode."));
} }
}; };
hotkey_actions["help_dialog"] = function() { hotkey_actions["help_dialog"] = function () {
Utils.helpDialog("main"); Utils.helpDialog("main");
}; };
hotkey_actions["toggle_combined_mode"] = function() { hotkey_actions["toggle_combined_mode"] = function () {
notify_progress("Loading, please wait..."); notify_progress("Loading, please wait...");
const value = App.isCombinedMode() ? "false" : "true"; const value = App.isCombinedMode() ? "false" : "true";
@ -435,79 +494,16 @@ function init_hotkey_actions() {
Feeds.viewCurrentFeed(); Feeds.viewCurrentFeed();
}) })
}; };
hotkey_actions["toggle_cdm_expanded"] = function() { hotkey_actions["toggle_cdm_expanded"] = function () {
notify_progress("Loading, please wait..."); notify_progress("Loading, please wait...");
const value = getInitParam("cdm_expanded") ? "false" : "true"; const value = getInitParam("cdm_expanded") ? "false" : "true";
xhrPost("backend.php", { op: "rpc", method: "setpref", key: "CDM_EXPANDED", value: value }, () => { xhrPost("backend.php", {op: "rpc", method: "setpref", key: "CDM_EXPANDED", value: value}, () => {
setInitParam("cdm_expanded", !getInitParam("cdm_expanded")); setInitParam("cdm_expanded", !getInitParam("cdm_expanded"));
Feeds.viewCurrentFeed(); Feeds.viewCurrentFeed();
}); });
}; };
}
function init_second_stage() {
Feeds.reload();
Article.closeArticlePanel();
if (parseInt(getCookie("ttrss_fh_width")) > 0) {
dijit.byId("feeds-holder").domNode.setStyle(
{width: getCookie("ttrss_fh_width") + "px" });
}
dijit.byId("main").resize();
var tmph = dojo.connect(dijit.byId('feeds-holder'), 'resize',
function (args) {
if (args && args.w >= 0) {
setCookie("ttrss_fh_width", args.w, getInitParam("cookie_lifetime"));
}
});
var tmph = dojo.connect(dijit.byId('content-insert'), 'resize',
function (args) {
if (args && args.w >= 0 && args.h >= 0) {
setCookie("ttrss_ci_width", args.w, getInitParam("cookie_lifetime"));
setCookie("ttrss_ci_height", args.h, getInitParam("cookie_lifetime"));
}
});
delCookie("ttrss_test");
const toolbar = document.forms["main_toolbar_form"];
dijit.getEnclosingWidget(toolbar.view_mode).attr('value',
getInitParam("default_view_mode"));
dijit.getEnclosingWidget(toolbar.order_by).attr('value',
getInitParam("default_view_order_by"));
const hash_feed_id = hash_get('f');
const hash_feed_is_cat = hash_get('c') == "1";
if (hash_feed_id != undefined) {
Feeds.setActiveFeedId(hash_feed_id, hash_feed_is_cat);
}
setLoadingProgress(50);
// can't use cache_clear() here because viewfeed might not have initialized yet
if ('sessionStorage' in window && window['sessionStorage'] !== null)
sessionStorage.clear();
_widescreen_mode = getInitParam("widescreen");
App.switchPanelMode(_widescreen_mode);
Headlines.initScrollHandler();
console.log("second stage ok");
if (getInitParam("simple_update")) {
console.log("scheduling simple feed updater...");
window.setTimeout(update_random_feed, 30*1000);
}
} }
function quickMenuGo(opid) { function quickMenuGo(opid) {
@ -584,33 +580,10 @@ function quickMenuGo(opid) {
} }
} }
function viewModeChanged() {
cache_clear();
return Feeds.viewCurrentFeed('');
}
function inPreferences() { function inPreferences() {
return false; return false;
} }
function reverseHeadlineOrder() {
const toolbar = document.forms["main_toolbar_form"];
const order_by = dijit.getEnclosingWidget(toolbar.order_by);
let value = order_by.attr('value');
if (value == "date_reverse")
value = "default";
else
value = "date_reverse";
order_by.attr('value', value);
Feeds.viewCurrentFeed();
}
function update_random_feed() { function update_random_feed() {
console.log("in update_random_feed"); console.log("in update_random_feed");

View File

@ -13,7 +13,29 @@ let loaded_article_ids = [];
let current_first_id = 0; let current_first_id = 0;
let last_search_query; let last_search_query;
let has_storage = 'sessionStorage' in window && window['sessionStorage'] !== null; const ArticleCache = {
has_storage: 'sessionStorage' in window && window['sessionStorage'] !== null,
set: function(id, obj) {
if (this.has_storage)
try {
sessionStorage["article:" + id] = obj;
} catch (e) {
sessionStorage.clear();
}
},
get: function(id) {
if (this.has_storage)
return sessionStorage["article:" + id];
},
clear: function() {
if (this.has_storage)
sessionStorage.clear();
},
del: function(id) {
if (this.has_storage)
sessionStorage.removeItem("article:" + id);
},
};
const Article = { const Article = {
closeArticlePanel: function () { closeArticlePanel: function () {
@ -58,6 +80,62 @@ const Article = {
} catch (e) { } catch (e) {
} }
}, },
view: function(id, noexpand) {
setActiveArticleId(id);
if (!noexpand) {
console.log("loading article", id);
const cids = [];
/* only request uncached articles */
getRelativePostIds(id).each((n) => {
if (!ArticleCache.get(n))
cids.push(n);
});
const cached_article = ArticleCache.get(id);
if (cached_article) {
console.log('rendering cached', id);
this.renderArticle(cached_article);
return false;
}
xhrPost("backend.php", {op: "article", method: "view", id: id, cids: cids.toString()}, (transport) => {
try {
const reply = Utils.handleRpcJson(transport);
if (reply) {
reply.each(function (article) {
if (getActiveArticleId() == article['id']) {
Article.renderArticle(article['content']);
}
ArticleCache.set(article['id'], article['content']);
});
} else {
console.error("Invalid object received: " + transport.responseText);
Article.renderArticle("<div class='whiteBox'>" +
__('Could not display article (invalid object received - see error console for details)') + "</div>");
}
//const unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length;
//request_counters(unread_in_buffer == 0);
notify("");
} catch (e) {
exception_error(e);
}
})
}
return false;
},
} }
const Headlines = { const Headlines = {
@ -409,67 +487,23 @@ const Headlines = {
notify(""); notify("");
}, },
reverseHeadlineOrder: function() {
const toolbar = document.forms["main_toolbar_form"];
const order_by = dijit.getEnclosingWidget(toolbar.order_by);
let value = order_by.attr('value');
if (value == "date_reverse")
value = "default";
else
value = "date_reverse";
order_by.attr('value', value);
Feeds.viewCurrentFeed();
},
}; };
function view(id, noexpand) {
setActiveArticleId(id);
if (!noexpand) {
console.log("loading article", id);
const cids = [];
/* only request uncached articles */
getRelativePostIds(id).each((n) => {
if (!cache_get("article:" + n))
cids.push(n);
});
const cached_article = cache_get("article:" + id);
if (cached_article) {
console.log('rendering cached', id);
Article.renderArticle(cached_article);
return false;
}
xhrPost("backend.php", {op: "article", method: "view", id: id, cids: cids.toString()}, (transport) => {
try {
const reply = Utils.handleRpcJson(transport);
if (reply) {
reply.each(function(article) {
if (getActiveArticleId() == article['id']) {
Article.renderArticle(article['content']);
}
//cids_requested.remove(article['id']);
cache_set("article:" + article['id'], article['content']);
});
} else {
console.error("Invalid object received: " + transport.responseText);
Article.renderArticle("<div class='whiteBox'>" +
__('Could not display article (invalid object received - see error console for details)') + "</div>");
}
//const unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length;
//request_counters(unread_in_buffer == 0);
notify("");
} catch (e) {
exception_error(e);
}
})
}
return false;
}
function toggleMark(id, client_only) { function toggleMark(id, client_only) {
const query = { op: "rpc", id: id, method: "mark" }; const query = { op: "rpc", id: id, method: "mark" };
const row = $("RROW-" + id); const row = $("RROW-" + id);
@ -576,7 +610,7 @@ function moveToPost(mode, noscroll, noexpand) {
} else if (next_id) { } else if (next_id) {
correctHeadlinesOffset(next_id); correctHeadlinesOffset(next_id);
view(next_id, noexpand); Article.view(next_id, noexpand);
} }
} }
} }
@ -601,7 +635,7 @@ function moveToPost(mode, noscroll, noexpand) {
} else if (prev_id) { } else if (prev_id) {
correctHeadlinesOffset(prev_id); correctHeadlinesOffset(prev_id);
view(prev_id, noexpand); Article.view(prev_id, noexpand);
} }
} }
} }
@ -918,7 +952,7 @@ function archiveSelection() {
} }
for (let i = 0; i < rows.length; i++) { for (let i = 0; i < rows.length; i++) {
cache_delete("article:" + rows[i]); ArticleCache.del(rows[i]);
} }
const query = {op: "rpc", method: op, ids: rows.toString()}; const query = {op: "rpc", method: op, ids: rows.toString()};
@ -1224,7 +1258,7 @@ function hlClicked(event, id) {
Article.openArticleInNewWindow(id); Article.openArticleInNewWindow(id);
setActiveArticleId(id); setActiveArticleId(id);
} else { } else {
view(id); Article.view(id);
} }
return false; return false;
@ -1505,31 +1539,6 @@ function initHeadlinesMenu() {
} }
} }
function cache_set(id, obj) {
//console.log("cache_set: " + id);
if (has_storage)
try {
sessionStorage[id] = obj;
} catch (e) {
sessionStorage.clear();
}
}
function cache_get(id) {
if (has_storage)
return sessionStorage[id];
}
function cache_clear() {
if (has_storage)
sessionStorage.clear();
}
function cache_delete(id) {
if (has_storage)
sessionStorage.removeItem(id);
}
// noinspection JSUnusedGlobalSymbols // noinspection JSUnusedGlobalSymbols
function setSelectionScore() { function setSelectionScore() {
const ids = getSelectedArticleIds2(); const ids = getSelectedArticleIds2();

View File

@ -19,7 +19,7 @@ function editArticleNote(id) {
dialog.hide(); dialog.hide();
if (reply) { if (reply) {
cache_delete("article:" + id); ArticleCache.del(id);
var elem = $("POSTNOTE-" + id); var elem = $("POSTNOTE-" + id);