further objectification
This commit is contained in:
parent
072c03fbac
commit
1d82bd4f19
|
@ -139,7 +139,7 @@
|
|||
|
||||
<script type="text/javascript">
|
||||
Event.observe(window, 'load', function() {
|
||||
init();
|
||||
App.init();
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
@ -187,7 +187,7 @@
|
|||
<form id="main_toolbar_form" action="" onsubmit='return false'>
|
||||
|
||||
<select name="view_mode" title="<?php echo __('Show articles') ?>"
|
||||
onchange="viewModeChanged()"
|
||||
onchange="App.onViewModeChanged()"
|
||||
dojoType="dijit.form.Select">
|
||||
<option selected="selected" value="adaptive"><?php echo __('Adaptive') ?></option>
|
||||
<option value="all_articles"><?php echo __('All Articles') ?></option>
|
||||
|
@ -199,7 +199,7 @@
|
|||
</select>
|
||||
|
||||
<select title="<?php echo __('Sort articles') ?>"
|
||||
onchange="viewModeChanged()"
|
||||
onchange="App.onViewModeChanged()"
|
||||
dojoType="dijit.form.Select" name="order_by">
|
||||
<option selected="selected" value="default"><?php echo __('Default') ?></option>
|
||||
<option value="feed_dates"><?php echo __('Newest first') ?></option>
|
||||
|
|
110
js/functions.js
110
js/functions.js
|
@ -255,6 +255,60 @@ const Utils = {
|
|||
|
||||
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) {
|
||||
|
@ -1193,62 +1247,6 @@ function unsubscribeFeed(feed_id, title) {
|
|||
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
|
||||
function genUrlChangeKey(feed, is_cat) {
|
||||
if (confirm(__("Generate new syndication address for this feed?"))) {
|
||||
|
|
449
js/tt-rss.js
449
js/tt-rss.js
|
@ -5,6 +5,158 @@ let hotkey_actions = {};
|
|||
|
||||
const App = {
|
||||
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() {
|
||||
let tmp = "Tiny Tiny RSS";
|
||||
|
||||
|
@ -14,6 +166,10 @@ const App = {
|
|||
|
||||
document.title = tmp;
|
||||
},
|
||||
onViewModeChanged: function() {
|
||||
ArticleCache.clear();
|
||||
return Feeds.viewCurrentFeed('');
|
||||
},
|
||||
isCombinedMode: function() {
|
||||
return getInitParam("combined_display_mode");
|
||||
},
|
||||
|
@ -73,7 +229,7 @@ const App = {
|
|||
|
||||
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});
|
||||
},
|
||||
|
@ -102,176 +258,80 @@ function search() {
|
|||
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() {
|
||||
hotkey_actions["next_feed"] = function() {
|
||||
hotkey_actions["next_feed"] = function () {
|
||||
const rv = dijit.byId("feedTree").getNextFeed(
|
||||
Feeds.getActiveFeedId(), Feeds.activeFeedIsCat());
|
||||
|
||||
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(
|
||||
Feeds.getActiveFeedId(), Feeds.activeFeedIsCat());
|
||||
|
||||
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');
|
||||
};
|
||||
hotkey_actions["prev_article"] = function() {
|
||||
hotkey_actions["prev_article"] = function () {
|
||||
moveToPost('prev');
|
||||
};
|
||||
hotkey_actions["next_article_noscroll"] = function() {
|
||||
hotkey_actions["next_article_noscroll"] = function () {
|
||||
moveToPost('next', true);
|
||||
};
|
||||
hotkey_actions["prev_article_noscroll"] = function() {
|
||||
hotkey_actions["prev_article_noscroll"] = function () {
|
||||
moveToPost('prev', true);
|
||||
};
|
||||
hotkey_actions["next_article_noexpand"] = function() {
|
||||
hotkey_actions["next_article_noexpand"] = function () {
|
||||
moveToPost('next', true, true);
|
||||
};
|
||||
hotkey_actions["prev_article_noexpand"] = function() {
|
||||
hotkey_actions["prev_article_noexpand"] = function () {
|
||||
moveToPost('prev', true, true);
|
||||
};
|
||||
hotkey_actions["search_dialog"] = function() {
|
||||
hotkey_actions["search_dialog"] = function () {
|
||||
search();
|
||||
};
|
||||
hotkey_actions["toggle_mark"] = function() {
|
||||
hotkey_actions["toggle_mark"] = function () {
|
||||
selectionToggleMarked();
|
||||
};
|
||||
hotkey_actions["toggle_publ"] = function() {
|
||||
hotkey_actions["toggle_publ"] = function () {
|
||||
selectionTogglePublished();
|
||||
};
|
||||
hotkey_actions["toggle_unread"] = function() {
|
||||
hotkey_actions["toggle_unread"] = function () {
|
||||
selectionToggleUnread({no_error: 1});
|
||||
};
|
||||
hotkey_actions["edit_tags"] = function() {
|
||||
hotkey_actions["edit_tags"] = function () {
|
||||
const id = getActiveArticleId();
|
||||
if (id) {
|
||||
editArticleTags(id);
|
||||
}
|
||||
}
|
||||
hotkey_actions["open_in_new_window"] = function() {
|
||||
hotkey_actions["open_in_new_window"] = function () {
|
||||
if (getActiveArticleId()) {
|
||||
Article.openArticleInNewWindow(getActiveArticleId());
|
||||
}
|
||||
};
|
||||
hotkey_actions["catchup_below"] = function() {
|
||||
hotkey_actions["catchup_below"] = function () {
|
||||
catchupRelativeToArticle(1);
|
||||
};
|
||||
hotkey_actions["catchup_above"] = function() {
|
||||
hotkey_actions["catchup_above"] = function () {
|
||||
catchupRelativeToArticle(0);
|
||||
};
|
||||
hotkey_actions["article_scroll_down"] = function() {
|
||||
hotkey_actions["article_scroll_down"] = function () {
|
||||
scrollArticle(40);
|
||||
};
|
||||
hotkey_actions["article_scroll_up"] = function() {
|
||||
hotkey_actions["article_scroll_up"] = function () {
|
||||
scrollArticle(-40);
|
||||
};
|
||||
hotkey_actions["close_article"] = function() {
|
||||
hotkey_actions["close_article"] = function () {
|
||||
if (App.isCombinedMode()) {
|
||||
cdmCollapseActive();
|
||||
} else {
|
||||
Article.closeArticlePanel();
|
||||
}
|
||||
};
|
||||
hotkey_actions["email_article"] = function() {
|
||||
hotkey_actions["email_article"] = function () {
|
||||
if (typeof emailArticle != "undefined") {
|
||||
emailArticle();
|
||||
} else if (typeof mailtoArticle != "undefined") {
|
||||
|
@ -280,37 +340,37 @@ function init_hotkey_actions() {
|
|||
alert(__("Please enable mail plugin first."));
|
||||
}
|
||||
};
|
||||
hotkey_actions["select_all"] = function() {
|
||||
hotkey_actions["select_all"] = function () {
|
||||
selectArticles('all');
|
||||
};
|
||||
hotkey_actions["select_unread"] = function() {
|
||||
hotkey_actions["select_unread"] = function () {
|
||||
selectArticles('unread');
|
||||
};
|
||||
hotkey_actions["select_marked"] = function() {
|
||||
hotkey_actions["select_marked"] = function () {
|
||||
selectArticles('marked');
|
||||
};
|
||||
hotkey_actions["select_published"] = function() {
|
||||
hotkey_actions["select_published"] = function () {
|
||||
selectArticles('published');
|
||||
};
|
||||
hotkey_actions["select_invert"] = function() {
|
||||
hotkey_actions["select_invert"] = function () {
|
||||
selectArticles('invert');
|
||||
};
|
||||
hotkey_actions["select_none"] = function() {
|
||||
hotkey_actions["select_none"] = function () {
|
||||
selectArticles('none');
|
||||
};
|
||||
hotkey_actions["feed_refresh"] = function() {
|
||||
hotkey_actions["feed_refresh"] = function () {
|
||||
if (Feeds.getActiveFeedId() != undefined) {
|
||||
Feeds.viewfeed({feed: Feeds.getActiveFeedId(), is_cat: Feeds.activeFeedIsCat()});
|
||||
return;
|
||||
}
|
||||
};
|
||||
hotkey_actions["feed_unhide_read"] = function() {
|
||||
hotkey_actions["feed_unhide_read"] = function () {
|
||||
Feeds.toggleDispRead();
|
||||
};
|
||||
hotkey_actions["feed_subscribe"] = function() {
|
||||
hotkey_actions["feed_subscribe"] = function () {
|
||||
quickAddFeed();
|
||||
};
|
||||
hotkey_actions["feed_debug_update"] = function() {
|
||||
hotkey_actions["feed_debug_update"] = function () {
|
||||
if (!Feeds.activeFeedIsCat() && parseInt(Feeds.getActiveFeedId()) > 0) {
|
||||
window.open("backend.php?op=feeds&method=update_debugger&feed_id=" + Feeds.getActiveFeedId() +
|
||||
"&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});
|
||||
};
|
||||
|
||||
hotkey_actions["feed_edit"] = function() {
|
||||
hotkey_actions["feed_edit"] = function () {
|
||||
if (Feeds.activeFeedIsCat())
|
||||
alert(__("You can't edit this kind of feed."));
|
||||
else
|
||||
editFeed(Feeds.getActiveFeedId());
|
||||
};
|
||||
hotkey_actions["feed_catchup"] = function() {
|
||||
hotkey_actions["feed_catchup"] = function () {
|
||||
if (Feeds.getActiveFeedId() != undefined) {
|
||||
Feeds.catchupCurrentFeed();
|
||||
return;
|
||||
}
|
||||
};
|
||||
hotkey_actions["feed_reverse"] = function() {
|
||||
reverseHeadlineOrder();
|
||||
hotkey_actions["feed_reverse"] = function () {
|
||||
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"}, () => {
|
||||
Feeds.viewCurrentFeed();
|
||||
})
|
||||
};
|
||||
hotkey_actions["catchup_all"] = function() {
|
||||
hotkey_actions["catchup_all"] = function () {
|
||||
Feeds.catchupAllFeeds();
|
||||
};
|
||||
hotkey_actions["cat_toggle_collapse"] = function() {
|
||||
hotkey_actions["cat_toggle_collapse"] = function () {
|
||||
if (Feeds.activeFeedIsCat()) {
|
||||
dijit.byId("feedTree").collapseCat(Feeds.getActiveFeedId());
|
||||
return;
|
||||
}
|
||||
};
|
||||
hotkey_actions["goto_all"] = function() {
|
||||
hotkey_actions["goto_all"] = function () {
|
||||
Feeds.viewfeed({feed: -4});
|
||||
};
|
||||
hotkey_actions["goto_fresh"] = function() {
|
||||
hotkey_actions["goto_fresh"] = function () {
|
||||
Feeds.viewfeed({feed: -3});
|
||||
};
|
||||
hotkey_actions["goto_marked"] = function() {
|
||||
hotkey_actions["goto_marked"] = function () {
|
||||
Feeds.viewfeed({feed: -1});
|
||||
};
|
||||
hotkey_actions["goto_published"] = function() {
|
||||
hotkey_actions["goto_published"] = function () {
|
||||
Feeds.viewfeed({feed: -2});
|
||||
};
|
||||
hotkey_actions["goto_tagcloud"] = function() {
|
||||
hotkey_actions["goto_tagcloud"] = function () {
|
||||
Utils.displayDlg(__("Tag cloud"), "printTagCloud");
|
||||
};
|
||||
hotkey_actions["goto_prefs"] = function() {
|
||||
hotkey_actions["goto_prefs"] = function () {
|
||||
gotoPreferences();
|
||||
};
|
||||
hotkey_actions["select_article_cursor"] = function() {
|
||||
hotkey_actions["select_article_cursor"] = function () {
|
||||
const id = getArticleUnderPointer();
|
||||
if (id) {
|
||||
const row = $("RROW-" + id);
|
||||
|
@ -389,16 +448,16 @@ function init_hotkey_actions() {
|
|||
}
|
||||
}
|
||||
};
|
||||
hotkey_actions["create_label"] = function() {
|
||||
hotkey_actions["create_label"] = function () {
|
||||
addLabel();
|
||||
};
|
||||
hotkey_actions["create_filter"] = function() {
|
||||
hotkey_actions["create_filter"] = function () {
|
||||
quickAddFilter();
|
||||
};
|
||||
hotkey_actions["collapse_sidebar"] = function() {
|
||||
hotkey_actions["collapse_sidebar"] = function () {
|
||||
Feeds.viewCurrentFeed();
|
||||
};
|
||||
hotkey_actions["toggle_embed_original"] = function() {
|
||||
hotkey_actions["toggle_embed_original"] = function () {
|
||||
if (typeof embedOriginalArticle != "undefined") {
|
||||
if (getActiveArticleId())
|
||||
embedOriginalArticle(getActiveArticleId());
|
||||
|
@ -406,7 +465,7 @@ function init_hotkey_actions() {
|
|||
alert(__("Please enable embed_original plugin first."));
|
||||
}
|
||||
};
|
||||
hotkey_actions["toggle_widescreen"] = function() {
|
||||
hotkey_actions["toggle_widescreen"] = function () {
|
||||
if (!App.isCombinedMode()) {
|
||||
_widescreen_mode = !_widescreen_mode;
|
||||
|
||||
|
@ -419,10 +478,10 @@ function init_hotkey_actions() {
|
|||
alert(__("Widescreen is not available in combined mode."));
|
||||
}
|
||||
};
|
||||
hotkey_actions["help_dialog"] = function() {
|
||||
hotkey_actions["help_dialog"] = function () {
|
||||
Utils.helpDialog("main");
|
||||
};
|
||||
hotkey_actions["toggle_combined_mode"] = function() {
|
||||
hotkey_actions["toggle_combined_mode"] = function () {
|
||||
notify_progress("Loading, please wait...");
|
||||
|
||||
const value = App.isCombinedMode() ? "false" : "true";
|
||||
|
@ -435,79 +494,16 @@ function init_hotkey_actions() {
|
|||
Feeds.viewCurrentFeed();
|
||||
})
|
||||
};
|
||||
hotkey_actions["toggle_cdm_expanded"] = function() {
|
||||
hotkey_actions["toggle_cdm_expanded"] = function () {
|
||||
notify_progress("Loading, please wait...");
|
||||
|
||||
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"));
|
||||
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) {
|
||||
|
@ -584,33 +580,10 @@ function quickMenuGo(opid) {
|
|||
}
|
||||
}
|
||||
|
||||
function viewModeChanged() {
|
||||
cache_clear();
|
||||
return Feeds.viewCurrentFeed('');
|
||||
}
|
||||
|
||||
function inPreferences() {
|
||||
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() {
|
||||
console.log("in update_random_feed");
|
||||
|
||||
|
|
187
js/viewfeed.js
187
js/viewfeed.js
|
@ -13,7 +13,29 @@ let loaded_article_ids = [];
|
|||
let current_first_id = 0;
|
||||
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 = {
|
||||
closeArticlePanel: function () {
|
||||
|
@ -58,6 +80,62 @@ const Article = {
|
|||
} 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 = {
|
||||
|
@ -409,67 +487,23 @@ const Headlines = {
|
|||
|
||||
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) {
|
||||
const query = { op: "rpc", id: id, method: "mark" };
|
||||
const row = $("RROW-" + id);
|
||||
|
@ -576,7 +610,7 @@ function moveToPost(mode, noscroll, noexpand) {
|
|||
|
||||
} else if (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) {
|
||||
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++) {
|
||||
cache_delete("article:" + rows[i]);
|
||||
ArticleCache.del(rows[i]);
|
||||
}
|
||||
|
||||
const query = {op: "rpc", method: op, ids: rows.toString()};
|
||||
|
@ -1224,7 +1258,7 @@ function hlClicked(event, id) {
|
|||
Article.openArticleInNewWindow(id);
|
||||
setActiveArticleId(id);
|
||||
} else {
|
||||
view(id);
|
||||
Article.view(id);
|
||||
}
|
||||
|
||||
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
|
||||
function setSelectionScore() {
|
||||
const ids = getSelectedArticleIds2();
|
||||
|
|
|
@ -19,7 +19,7 @@ function editArticleNote(id) {
|
|||
dialog.hide();
|
||||
|
||||
if (reply) {
|
||||
cache_delete("article:" + id);
|
||||
ArticleCache.del(id);
|
||||
|
||||
var elem = $("POSTNOTE-" + id);
|
||||
|
||||
|
|
Loading…
Reference in New Issue