|
@@ -21,108 +21,92 @@ function activeFeedIsCat() {
|
|
}
|
|
}
|
|
|
|
|
|
function getActiveFeedId() {
|
|
function getActiveFeedId() {
|
|
- try {
|
|
|
|
- return _active_feed_id;
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("getActiveFeedId", e);
|
|
|
|
- }
|
|
|
|
|
|
+ return _active_feed_id;
|
|
}
|
|
}
|
|
|
|
|
|
function setActiveFeedId(id, is_cat) {
|
|
function setActiveFeedId(id, is_cat) {
|
|
- try {
|
|
|
|
- hash_set('f', id);
|
|
|
|
- hash_set('c', is_cat ? 1 : 0);
|
|
|
|
|
|
+ hash_set('f', id);
|
|
|
|
+ hash_set('c', is_cat ? 1 : 0);
|
|
|
|
|
|
- _active_feed_id = id;
|
|
|
|
- _active_feed_is_cat = is_cat;
|
|
|
|
|
|
+ _active_feed_id = id;
|
|
|
|
+ _active_feed_is_cat = is_cat;
|
|
|
|
|
|
- $("headlines-frame").setAttribute("feed-id", id);
|
|
|
|
- $("headlines-frame").setAttribute("is-cat", is_cat ? 1 : 0);
|
|
|
|
|
|
+ $("headlines-frame").setAttribute("feed-id", id);
|
|
|
|
+ $("headlines-frame").setAttribute("is-cat", is_cat ? 1 : 0);
|
|
|
|
|
|
- selectFeed(id, is_cat);
|
|
|
|
|
|
+ selectFeed(id, is_cat);
|
|
|
|
|
|
- PluginHost.run(PluginHost.HOOK_FEED_SET_ACTIVE, _active_article_id);
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("setActiveFeedId", e);
|
|
|
|
- }
|
|
|
|
|
|
+ PluginHost.run(PluginHost.HOOK_FEED_SET_ACTIVE, _active_article_id);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
function updateFeedList() {
|
|
function updateFeedList() {
|
|
- try {
|
|
|
|
|
|
|
|
-// $("feeds-holder").innerHTML = "<div id=\"feedlistLoading\">" +
|
|
|
|
-// __("Loading, please wait...") + "</div>";
|
|
|
|
|
|
+ Element.show("feedlistLoading");
|
|
|
|
|
|
- Element.show("feedlistLoading");
|
|
|
|
-
|
|
|
|
- resetCounterCache();
|
|
|
|
|
|
+ resetCounterCache();
|
|
|
|
|
|
- if (dijit.byId("feedTree")) {
|
|
|
|
- dijit.byId("feedTree").destroyRecursive();
|
|
|
|
- }
|
|
|
|
|
|
+ if (dijit.byId("feedTree")) {
|
|
|
|
+ dijit.byId("feedTree").destroyRecursive();
|
|
|
|
+ }
|
|
|
|
|
|
- var store = new dojo.data.ItemFileWriteStore({
|
|
|
|
|
|
+ var store = new dojo.data.ItemFileWriteStore({
|
|
url: "backend.php?op=pref_feeds&method=getfeedtree&mode=2"});
|
|
url: "backend.php?op=pref_feeds&method=getfeedtree&mode=2"});
|
|
|
|
|
|
- var treeModel = new fox.FeedStoreModel({
|
|
|
|
- store: store,
|
|
|
|
- query: {
|
|
|
|
- "type": getInitParam('enable_feed_cats') == 1 ? "category" : "feed"
|
|
|
|
- },
|
|
|
|
- rootId: "root",
|
|
|
|
- rootLabel: "Feeds",
|
|
|
|
- childrenAttrs: ["items"]
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- var tree = new fox.FeedTree({
|
|
|
|
- model: treeModel,
|
|
|
|
- onClick: function (item, node) {
|
|
|
|
- var id = String(item.id);
|
|
|
|
- var is_cat = id.match("^CAT:");
|
|
|
|
- var feed = id.substr(id.indexOf(":")+1);
|
|
|
|
- viewfeed({feed: feed, is_cat: is_cat});
|
|
|
|
- return false;
|
|
|
|
|
|
+ var treeModel = new fox.FeedStoreModel({
|
|
|
|
+ store: store,
|
|
|
|
+ query: {
|
|
|
|
+ "type": getInitParam('enable_feed_cats') == 1 ? "category" : "feed"
|
|
},
|
|
},
|
|
- openOnClick: false,
|
|
|
|
- showRoot: false,
|
|
|
|
- persist: true,
|
|
|
|
- id: "feedTree",
|
|
|
|
- }, "feedTree");
|
|
|
|
|
|
+ rootId: "root",
|
|
|
|
+ rootLabel: "Feeds",
|
|
|
|
+ childrenAttrs: ["items"]
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ var tree = new fox.FeedTree({
|
|
|
|
+ model: treeModel,
|
|
|
|
+ onClick: function (item, node) {
|
|
|
|
+ var id = String(item.id);
|
|
|
|
+ var is_cat = id.match("^CAT:");
|
|
|
|
+ var feed = id.substr(id.indexOf(":")+1);
|
|
|
|
+ viewfeed({feed: feed, is_cat: is_cat});
|
|
|
|
+ return false;
|
|
|
|
+ },
|
|
|
|
+ openOnClick: false,
|
|
|
|
+ showRoot: false,
|
|
|
|
+ persist: true,
|
|
|
|
+ id: "feedTree",
|
|
|
|
+ }, "feedTree");
|
|
|
|
|
|
/* var menu = new dijit.Menu({id: 'feedMenu'});
|
|
/* var menu = new dijit.Menu({id: 'feedMenu'});
|
|
|
|
|
|
- menu.addChild(new dijit.MenuItem({
|
|
|
|
|
|
+ menu.addChild(new dijit.MenuItem({
|
|
label: "Simple menu item"
|
|
label: "Simple menu item"
|
|
- }));
|
|
|
|
|
|
+ }));
|
|
|
|
|
|
// menu.bindDomNode(tree.domNode); */
|
|
// menu.bindDomNode(tree.domNode); */
|
|
|
|
|
|
- var tmph = dojo.connect(dijit.byId('feedMenu'), '_openMyself', function (event) {
|
|
|
|
- console.log(dijit.getEnclosingWidget(event.target));
|
|
|
|
- dojo.disconnect(tmph);
|
|
|
|
- });
|
|
|
|
|
|
+ var tmph = dojo.connect(dijit.byId('feedMenu'), '_openMyself', function (event) {
|
|
|
|
+ console.log(dijit.getEnclosingWidget(event.target));
|
|
|
|
+ dojo.disconnect(tmph);
|
|
|
|
+ });
|
|
|
|
|
|
- $("feeds-holder").appendChild(tree.domNode);
|
|
|
|
|
|
+ $("feeds-holder").appendChild(tree.domNode);
|
|
|
|
|
|
- var tmph = dojo.connect(tree, 'onLoad', function() {
|
|
|
|
- dojo.disconnect(tmph);
|
|
|
|
- Element.hide("feedlistLoading");
|
|
|
|
|
|
+ var tmph = dojo.connect(tree, 'onLoad', function() {
|
|
|
|
+ dojo.disconnect(tmph);
|
|
|
|
+ Element.hide("feedlistLoading");
|
|
|
|
|
|
|
|
+ try {
|
|
feedlist_init();
|
|
feedlist_init();
|
|
|
|
|
|
-// var node = dijit.byId("feedTree")._itemNodesMap['FEED:-2'][0].domNode
|
|
|
|
-// menu.bindDomNode(node);
|
|
|
|
-
|
|
|
|
loading_set_progress(25);
|
|
loading_set_progress(25);
|
|
- });
|
|
|
|
-
|
|
|
|
- tree.startup();
|
|
|
|
-
|
|
|
|
|
|
+ } catch (e) {
|
|
|
|
+ exception_error(e);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("updateFeedList", e);
|
|
|
|
- }
|
|
|
|
|
|
+ tree.startup();
|
|
}
|
|
}
|
|
|
|
|
|
function catchupAllFeeds() {
|
|
function catchupAllFeeds() {
|
|
@@ -218,46 +202,49 @@ function genericSanityCheck() {
|
|
|
|
|
|
|
|
|
|
function init() {
|
|
function init() {
|
|
- try {
|
|
|
|
- //dojo.registerModulePath("fox", "../../js/");
|
|
|
|
-
|
|
|
|
- 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/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/FeedTree" ], function (dojo, ready, parser) {
|
|
|
|
-
|
|
|
|
- ready(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/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/FeedTree" ], function (dojo, ready, parser) {
|
|
|
|
+
|
|
|
|
+ ready(function() {
|
|
|
|
+
|
|
|
|
+ try {
|
|
parser.parse();
|
|
parser.parse();
|
|
|
|
|
|
if (!genericSanityCheck())
|
|
if (!genericSanityCheck())
|
|
@@ -274,24 +261,25 @@ function init() {
|
|
|
|
|
|
init_hotkey_actions();
|
|
init_hotkey_actions();
|
|
|
|
|
|
- new Ajax.Request("backend.php", {
|
|
|
|
- parameters: {op: "rpc", method: "sanityCheck", hasAudio: hasAudio,
|
|
|
|
|
|
+ new Ajax.Request("backend.php", {
|
|
|
|
+ parameters: {
|
|
|
|
+ op: "rpc", method: "sanityCheck", hasAudio: hasAudio,
|
|
hasMp3: hasMp3,
|
|
hasMp3: hasMp3,
|
|
clientTzOffset: clientTzOffset,
|
|
clientTzOffset: clientTzOffset,
|
|
- hasSandbox: hasSandbox},
|
|
|
|
- onComplete: function(transport) {
|
|
|
|
|
|
+ hasSandbox: hasSandbox
|
|
|
|
+ },
|
|
|
|
+ onComplete: function (transport) {
|
|
backend_sanity_check_callback(transport);
|
|
backend_sanity_check_callback(transport);
|
|
- } });
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- });
|
|
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ } catch (e) {
|
|
|
|
+ exception_error(e);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ });
|
|
|
|
|
|
- });
|
|
|
|
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("init", e);
|
|
|
|
- }
|
|
|
|
|
|
+ });
|
|
}
|
|
}
|
|
|
|
|
|
function init_hotkey_actions() {
|
|
function init_hotkey_actions() {
|
|
@@ -587,192 +575,177 @@ function init_hotkey_actions() {
|
|
}
|
|
}
|
|
|
|
|
|
function init_second_stage() {
|
|
function init_second_stage() {
|
|
|
|
+ updateFeedList();
|
|
|
|
+ closeArticlePanel();
|
|
|
|
|
|
- try {
|
|
|
|
- updateFeedList();
|
|
|
|
- closeArticlePanel();
|
|
|
|
-
|
|
|
|
- if (parseInt(getCookie("ttrss_fh_width")) > 0) {
|
|
|
|
- dijit.byId("feeds-holder").domNode.setStyle(
|
|
|
|
- {width: getCookie("ttrss_fh_width") + "px" });
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- dijit.byId("main").resize();
|
|
|
|
|
|
+ if (parseInt(getCookie("ttrss_fh_width")) > 0) {
|
|
|
|
+ dijit.byId("feeds-holder").domNode.setStyle(
|
|
|
|
+ {width: getCookie("ttrss_fh_width") + "px" });
|
|
|
|
+ }
|
|
|
|
|
|
- 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"));
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
|
|
+ dijit.byId("main").resize();
|
|
|
|
|
|
- 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"));
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
|
|
+ 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"));
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
|
|
- delCookie("ttrss_test");
|
|
|
|
|
|
+ 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"));
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
|
|
- var toolbar = document.forms["main_toolbar_form"];
|
|
|
|
|
|
+ delCookie("ttrss_test");
|
|
|
|
|
|
- dijit.getEnclosingWidget(toolbar.view_mode).attr('value',
|
|
|
|
- getInitParam("default_view_mode"));
|
|
|
|
|
|
+ var toolbar = document.forms["main_toolbar_form"];
|
|
|
|
|
|
- dijit.getEnclosingWidget(toolbar.order_by).attr('value',
|
|
|
|
- getInitParam("default_view_order_by"));
|
|
|
|
|
|
+ dijit.getEnclosingWidget(toolbar.view_mode).attr('value',
|
|
|
|
+ getInitParam("default_view_mode"));
|
|
|
|
|
|
- feeds_sort_by_unread = getInitParam("feeds_sort_by_unread") == 1;
|
|
|
|
|
|
+ dijit.getEnclosingWidget(toolbar.order_by).attr('value',
|
|
|
|
+ getInitParam("default_view_order_by"));
|
|
|
|
|
|
- var hash_feed_id = hash_get('f');
|
|
|
|
- var hash_feed_is_cat = hash_get('c') == "1";
|
|
|
|
|
|
+ feeds_sort_by_unread = getInitParam("feeds_sort_by_unread") == 1;
|
|
|
|
|
|
- if (hash_feed_id != undefined) {
|
|
|
|
- setActiveFeedId(hash_feed_id, hash_feed_is_cat);
|
|
|
|
- }
|
|
|
|
|
|
+ var hash_feed_id = hash_get('f');
|
|
|
|
+ var hash_feed_is_cat = hash_get('c') == "1";
|
|
|
|
|
|
- loading_set_progress(50);
|
|
|
|
|
|
+ if (hash_feed_id != undefined) {
|
|
|
|
+ setActiveFeedId(hash_feed_id, hash_feed_is_cat);
|
|
|
|
+ }
|
|
|
|
|
|
- // can't use cache_clear() here because viewfeed might not have initialized yet
|
|
|
|
- if ('sessionStorage' in window && window['sessionStorage'] !== null)
|
|
|
|
- sessionStorage.clear();
|
|
|
|
|
|
+ loading_set_progress(50);
|
|
|
|
|
|
- var hotkeys = getInitParam("hotkeys");
|
|
|
|
- var tmp = [];
|
|
|
|
|
|
+ // can't use cache_clear() here because viewfeed might not have initialized yet
|
|
|
|
+ if ('sessionStorage' in window && window['sessionStorage'] !== null)
|
|
|
|
+ sessionStorage.clear();
|
|
|
|
|
|
- for (sequence in hotkeys[1]) {
|
|
|
|
- filtered = sequence.replace(/\|.*$/, "");
|
|
|
|
- tmp[filtered] = hotkeys[1][sequence];
|
|
|
|
- }
|
|
|
|
|
|
+ var hotkeys = getInitParam("hotkeys");
|
|
|
|
+ var tmp = [];
|
|
|
|
|
|
- hotkeys[1] = tmp;
|
|
|
|
- setInitParam("hotkeys", hotkeys);
|
|
|
|
|
|
+ for (sequence in hotkeys[1]) {
|
|
|
|
+ filtered = sequence.replace(/\|.*$/, "");
|
|
|
|
+ tmp[filtered] = hotkeys[1][sequence];
|
|
|
|
+ }
|
|
|
|
|
|
- _widescreen_mode = getInitParam("widescreen");
|
|
|
|
- switchPanelMode(_widescreen_mode);
|
|
|
|
|
|
+ hotkeys[1] = tmp;
|
|
|
|
+ setInitParam("hotkeys", hotkeys);
|
|
|
|
|
|
- console.log("second stage ok");
|
|
|
|
|
|
+ _widescreen_mode = getInitParam("widescreen");
|
|
|
|
+ switchPanelMode(_widescreen_mode);
|
|
|
|
|
|
- if (getInitParam("simple_update")) {
|
|
|
|
- console.log("scheduling simple feed updater...");
|
|
|
|
- window.setTimeout(update_random_feed, 30*1000);
|
|
|
|
- }
|
|
|
|
|
|
+ console.log("second stage ok");
|
|
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("init_second_stage", e);
|
|
|
|
|
|
+ if (getInitParam("simple_update")) {
|
|
|
|
+ console.log("scheduling simple feed updater...");
|
|
|
|
+ window.setTimeout(update_random_feed, 30*1000);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function quickMenuGo(opid) {
|
|
function quickMenuGo(opid) {
|
|
- try {
|
|
|
|
- switch (opid) {
|
|
|
|
- case "qmcPrefs":
|
|
|
|
- gotoPreferences();
|
|
|
|
- break;
|
|
|
|
- case "qmcLogout":
|
|
|
|
- gotoLogout();
|
|
|
|
- break;
|
|
|
|
- case "qmcTagCloud":
|
|
|
|
- displayDlg(__("Tag cloud"), "printTagCloud");
|
|
|
|
- break;
|
|
|
|
- case "qmcSearch":
|
|
|
|
- search();
|
|
|
|
- break;
|
|
|
|
- case "qmcAddFeed":
|
|
|
|
- quickAddFeed();
|
|
|
|
- break;
|
|
|
|
- case "qmcDigest":
|
|
|
|
- window.location.href = "backend.php?op=digest";
|
|
|
|
- break;
|
|
|
|
- case "qmcEditFeed":
|
|
|
|
- if (activeFeedIsCat())
|
|
|
|
- alert(__("You can't edit this kind of feed."));
|
|
|
|
- else
|
|
|
|
- editFeed(getActiveFeedId());
|
|
|
|
- break;
|
|
|
|
- case "qmcRemoveFeed":
|
|
|
|
- var actid = getActiveFeedId();
|
|
|
|
|
|
+ switch (opid) {
|
|
|
|
+ case "qmcPrefs":
|
|
|
|
+ gotoPreferences();
|
|
|
|
+ break;
|
|
|
|
+ case "qmcLogout":
|
|
|
|
+ gotoLogout();
|
|
|
|
+ break;
|
|
|
|
+ case "qmcTagCloud":
|
|
|
|
+ displayDlg(__("Tag cloud"), "printTagCloud");
|
|
|
|
+ break;
|
|
|
|
+ case "qmcSearch":
|
|
|
|
+ search();
|
|
|
|
+ break;
|
|
|
|
+ case "qmcAddFeed":
|
|
|
|
+ quickAddFeed();
|
|
|
|
+ break;
|
|
|
|
+ case "qmcDigest":
|
|
|
|
+ window.location.href = "backend.php?op=digest";
|
|
|
|
+ break;
|
|
|
|
+ case "qmcEditFeed":
|
|
|
|
+ if (activeFeedIsCat())
|
|
|
|
+ alert(__("You can't edit this kind of feed."));
|
|
|
|
+ else
|
|
|
|
+ editFeed(getActiveFeedId());
|
|
|
|
+ break;
|
|
|
|
+ case "qmcRemoveFeed":
|
|
|
|
+ var actid = getActiveFeedId();
|
|
|
|
|
|
- if (activeFeedIsCat()) {
|
|
|
|
- alert(__("You can't unsubscribe from the category."));
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
+ if (activeFeedIsCat()) {
|
|
|
|
+ alert(__("You can't unsubscribe from the category."));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
- if (!actid) {
|
|
|
|
- alert(__("Please select some feed first."));
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
+ if (!actid) {
|
|
|
|
+ alert(__("Please select some feed first."));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
- var fn = getFeedName(actid);
|
|
|
|
|
|
+ var fn = getFeedName(actid);
|
|
|
|
|
|
- var pr = __("Unsubscribe from %s?").replace("%s", fn);
|
|
|
|
|
|
+ var pr = __("Unsubscribe from %s?").replace("%s", fn);
|
|
|
|
|
|
- if (confirm(pr)) {
|
|
|
|
- unsubscribeFeed(actid);
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case "qmcCatchupAll":
|
|
|
|
- catchupAllFeeds();
|
|
|
|
- break;
|
|
|
|
- case "qmcShowOnlyUnread":
|
|
|
|
- toggleDispRead();
|
|
|
|
- break;
|
|
|
|
- case "qmcAddFilter":
|
|
|
|
- quickAddFilter();
|
|
|
|
- break;
|
|
|
|
- case "qmcAddLabel":
|
|
|
|
- addLabel();
|
|
|
|
- break;
|
|
|
|
- case "qmcRescoreFeed":
|
|
|
|
- rescoreCurrentFeed();
|
|
|
|
- break;
|
|
|
|
- case "qmcToggleWidescreen":
|
|
|
|
- if (!isCdmMode()) {
|
|
|
|
- _widescreen_mode = !_widescreen_mode;
|
|
|
|
|
|
+ if (confirm(pr)) {
|
|
|
|
+ unsubscribeFeed(actid);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case "qmcCatchupAll":
|
|
|
|
+ catchupAllFeeds();
|
|
|
|
+ break;
|
|
|
|
+ case "qmcShowOnlyUnread":
|
|
|
|
+ toggleDispRead();
|
|
|
|
+ break;
|
|
|
|
+ case "qmcAddFilter":
|
|
|
|
+ quickAddFilter();
|
|
|
|
+ break;
|
|
|
|
+ case "qmcAddLabel":
|
|
|
|
+ addLabel();
|
|
|
|
+ break;
|
|
|
|
+ case "qmcRescoreFeed":
|
|
|
|
+ rescoreCurrentFeed();
|
|
|
|
+ break;
|
|
|
|
+ case "qmcToggleWidescreen":
|
|
|
|
+ if (!isCdmMode()) {
|
|
|
|
+ _widescreen_mode = !_widescreen_mode;
|
|
|
|
|
|
- // reset stored sizes because geometry changed
|
|
|
|
- setCookie("ttrss_ci_width", 0);
|
|
|
|
- setCookie("ttrss_ci_height", 0);
|
|
|
|
|
|
+ // reset stored sizes because geometry changed
|
|
|
|
+ setCookie("ttrss_ci_width", 0);
|
|
|
|
+ setCookie("ttrss_ci_height", 0);
|
|
|
|
|
|
- switchPanelMode(_widescreen_mode);
|
|
|
|
- } else {
|
|
|
|
- alert(__("Widescreen is not available in combined mode."));
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case "qmcHKhelp":
|
|
|
|
- helpDialog("main");
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- console.log("quickMenuGo: unknown action: " + opid);
|
|
|
|
|
|
+ switchPanelMode(_widescreen_mode);
|
|
|
|
+ } else {
|
|
|
|
+ alert(__("Widescreen is not available in combined mode."));
|
|
}
|
|
}
|
|
-
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("quickMenuGo", e);
|
|
|
|
|
|
+ break;
|
|
|
|
+ case "qmcHKhelp":
|
|
|
|
+ helpDialog("main");
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ console.log("quickMenuGo: unknown action: " + opid);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function toggleDispRead() {
|
|
function toggleDispRead() {
|
|
- try {
|
|
|
|
|
|
|
|
- var hide = !(getInitParam("hide_read_feeds") == "1");
|
|
|
|
|
|
+ var hide = !(getInitParam("hide_read_feeds") == "1");
|
|
|
|
|
|
- hideOrShowFeeds(hide);
|
|
|
|
|
|
+ hideOrShowFeeds(hide);
|
|
|
|
|
|
- var query = "?op=rpc&method=setpref&key=HIDE_READ_FEEDS&value=" +
|
|
|
|
- param_escape(hide);
|
|
|
|
|
|
+ var query = "?op=rpc&method=setpref&key=HIDE_READ_FEEDS&value=" +
|
|
|
|
+ param_escape(hide);
|
|
|
|
|
|
- setInitParam("hide_read_feeds", hide);
|
|
|
|
|
|
+ setInitParam("hide_read_feeds", hide);
|
|
|
|
|
|
- new Ajax.Request("backend.php", {
|
|
|
|
- parameters: query,
|
|
|
|
- onComplete: function(transport) {
|
|
|
|
- } });
|
|
|
|
|
|
+ new Ajax.Request("backend.php", {
|
|
|
|
+ parameters: query,
|
|
|
|
+ onComplete: function(transport) {
|
|
|
|
+ } });
|
|
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("toggleDispRead", e);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
function parse_runtime_info(data) {
|
|
function parse_runtime_info(data) {
|
|
@@ -825,18 +798,13 @@ function parse_runtime_info(data) {
|
|
}
|
|
}
|
|
|
|
|
|
function collapse_feedlist() {
|
|
function collapse_feedlist() {
|
|
- try {
|
|
|
|
- Element.toggle("feeds-holder");
|
|
|
|
|
|
+ Element.toggle("feeds-holder");
|
|
|
|
|
|
- var splitter = $("feeds-holder_splitter");
|
|
|
|
|
|
+ var splitter = $("feeds-holder_splitter");
|
|
|
|
|
|
- Element.visible("feeds-holder") ? splitter.show() : splitter.hide();
|
|
|
|
|
|
+ Element.visible("feeds-holder") ? splitter.show() : splitter.hide();
|
|
|
|
|
|
- dijit.byId("main").resize();
|
|
|
|
-
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("collapse_feedlist", e);
|
|
|
|
- }
|
|
|
|
|
|
+ dijit.byId("main").resize();
|
|
}
|
|
}
|
|
|
|
|
|
function viewModeChanged() {
|
|
function viewModeChanged() {
|
|
@@ -875,88 +843,83 @@ function rescoreCurrentFeed() {
|
|
}
|
|
}
|
|
|
|
|
|
function hotkey_handler(e) {
|
|
function hotkey_handler(e) {
|
|
- try {
|
|
|
|
|
|
|
|
- if (e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA") return;
|
|
|
|
|
|
+ if (e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA") return;
|
|
|
|
|
|
- var keycode = false;
|
|
|
|
- var shift_key = false;
|
|
|
|
- var ctrl_key = false;
|
|
|
|
- var alt_key = false;
|
|
|
|
- var meta_key = false;
|
|
|
|
|
|
+ var keycode = false;
|
|
|
|
+ var shift_key = false;
|
|
|
|
+ var ctrl_key = false;
|
|
|
|
+ var alt_key = false;
|
|
|
|
+ var meta_key = false;
|
|
|
|
|
|
- var cmdline = $('cmdline');
|
|
|
|
|
|
+ var cmdline = $('cmdline');
|
|
|
|
|
|
- shift_key = e.shiftKey;
|
|
|
|
- ctrl_key = e.ctrlKey;
|
|
|
|
- alt_key = e.altKey;
|
|
|
|
- meta_key = e.metaKey;
|
|
|
|
|
|
+ shift_key = e.shiftKey;
|
|
|
|
+ ctrl_key = e.ctrlKey;
|
|
|
|
+ alt_key = e.altKey;
|
|
|
|
+ meta_key = e.metaKey;
|
|
|
|
|
|
- if (window.event) {
|
|
|
|
- keycode = window.event.keyCode;
|
|
|
|
- } else if (e) {
|
|
|
|
- keycode = e.which;
|
|
|
|
- }
|
|
|
|
|
|
+ if (window.event) {
|
|
|
|
+ keycode = window.event.keyCode;
|
|
|
|
+ } else if (e) {
|
|
|
|
+ keycode = e.which;
|
|
|
|
+ }
|
|
|
|
|
|
- var keychar = String.fromCharCode(keycode);
|
|
|
|
|
|
+ var keychar = String.fromCharCode(keycode);
|
|
|
|
|
|
- if (keycode == 27) { // escape
|
|
|
|
- hotkey_prefix = false;
|
|
|
|
- }
|
|
|
|
|
|
+ if (keycode == 27) { // escape
|
|
|
|
+ hotkey_prefix = false;
|
|
|
|
+ }
|
|
|
|
|
|
- if (keycode == 16) return; // ignore lone shift
|
|
|
|
- if (keycode == 17) return; // ignore lone ctrl
|
|
|
|
|
|
+ if (keycode == 16) return; // ignore lone shift
|
|
|
|
+ if (keycode == 17) return; // ignore lone ctrl
|
|
|
|
|
|
- keychar = keychar.toLowerCase();
|
|
|
|
|
|
+ keychar = keychar.toLowerCase();
|
|
|
|
|
|
- var hotkeys = getInitParam("hotkeys");
|
|
|
|
|
|
+ var hotkeys = getInitParam("hotkeys");
|
|
|
|
|
|
- if (!hotkey_prefix && hotkeys[0].indexOf(keychar) != -1) {
|
|
|
|
|
|
+ if (!hotkey_prefix && hotkeys[0].indexOf(keychar) != -1) {
|
|
|
|
|
|
- var date = new Date();
|
|
|
|
- var ts = Math.round(date.getTime() / 1000);
|
|
|
|
|
|
+ var date = new Date();
|
|
|
|
+ var ts = Math.round(date.getTime() / 1000);
|
|
|
|
|
|
- hotkey_prefix = keychar;
|
|
|
|
- hotkey_prefix_pressed = ts;
|
|
|
|
|
|
+ hotkey_prefix = keychar;
|
|
|
|
+ hotkey_prefix_pressed = ts;
|
|
|
|
|
|
- cmdline.innerHTML = keychar;
|
|
|
|
- Element.show(cmdline);
|
|
|
|
|
|
+ cmdline.innerHTML = keychar;
|
|
|
|
+ Element.show(cmdline);
|
|
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
|
|
- Element.hide(cmdline);
|
|
|
|
|
|
+ Element.hide(cmdline);
|
|
|
|
|
|
- var hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")";
|
|
|
|
|
|
+ var hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")";
|
|
|
|
|
|
- // ensure ^*char notation
|
|
|
|
- if (shift_key) hotkey = "*" + hotkey;
|
|
|
|
- if (ctrl_key) hotkey = "^" + hotkey;
|
|
|
|
- if (alt_key) hotkey = "+" + hotkey;
|
|
|
|
- if (meta_key) hotkey = "%" + hotkey;
|
|
|
|
|
|
+ // ensure ^*char notation
|
|
|
|
+ if (shift_key) hotkey = "*" + hotkey;
|
|
|
|
+ if (ctrl_key) hotkey = "^" + hotkey;
|
|
|
|
+ if (alt_key) hotkey = "+" + hotkey;
|
|
|
|
+ if (meta_key) hotkey = "%" + hotkey;
|
|
|
|
|
|
- hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey;
|
|
|
|
- hotkey_prefix = false;
|
|
|
|
|
|
+ hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey;
|
|
|
|
+ hotkey_prefix = false;
|
|
|
|
|
|
- var hotkey_action = false;
|
|
|
|
- var hotkeys = getInitParam("hotkeys");
|
|
|
|
|
|
+ var hotkey_action = false;
|
|
|
|
+ var hotkeys = getInitParam("hotkeys");
|
|
|
|
|
|
- for (sequence in hotkeys[1]) {
|
|
|
|
- if (sequence == hotkey) {
|
|
|
|
- hotkey_action = hotkeys[1][sequence];
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ for (sequence in hotkeys[1]) {
|
|
|
|
+ if (sequence == hotkey) {
|
|
|
|
+ hotkey_action = hotkeys[1][sequence];
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
- var action = hotkey_actions[hotkey_action];
|
|
|
|
-
|
|
|
|
- if (action != null) {
|
|
|
|
- action();
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
|
|
+ var action = hotkey_actions[hotkey_action];
|
|
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("hotkey_handler", e);
|
|
|
|
|
|
+ if (action != null) {
|
|
|
|
+ action();
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -965,33 +928,21 @@ function inPreferences() {
|
|
}
|
|
}
|
|
|
|
|
|
function reverseHeadlineOrder() {
|
|
function reverseHeadlineOrder() {
|
|
- try {
|
|
|
|
-
|
|
|
|
- /* var query_str = "?op=rpc&method=togglepref&key=REVERSE_HEADLINES";
|
|
|
|
-
|
|
|
|
- new Ajax.Request("backend.php", {
|
|
|
|
- parameters: query_str,
|
|
|
|
- onComplete: function(transport) {
|
|
|
|
- viewCurrentFeed();
|
|
|
|
- } }); */
|
|
|
|
|
|
|
|
- var toolbar = document.forms["main_toolbar_form"];
|
|
|
|
- var order_by = dijit.getEnclosingWidget(toolbar.order_by);
|
|
|
|
|
|
+ var toolbar = document.forms["main_toolbar_form"];
|
|
|
|
+ var order_by = dijit.getEnclosingWidget(toolbar.order_by);
|
|
|
|
|
|
- var value = order_by.attr('value');
|
|
|
|
|
|
+ var value = order_by.attr('value');
|
|
|
|
|
|
- if (value == "date_reverse")
|
|
|
|
- value = "default";
|
|
|
|
- else
|
|
|
|
- value = "date_reverse";
|
|
|
|
|
|
+ if (value == "date_reverse")
|
|
|
|
+ value = "default";
|
|
|
|
+ else
|
|
|
|
+ value = "date_reverse";
|
|
|
|
|
|
- order_by.attr('value', value);
|
|
|
|
|
|
+ order_by.attr('value', value);
|
|
|
|
|
|
- viewCurrentFeed();
|
|
|
|
|
|
+ viewCurrentFeed();
|
|
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("reverseHeadlineOrder", e);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
function handle_rpc_json(transport, scheduled_call) {
|
|
function handle_rpc_json(transport, scheduled_call) {
|
|
@@ -1065,99 +1016,79 @@ function handle_rpc_json(transport, scheduled_call) {
|
|
else
|
|
else
|
|
notify_error("Communication problem with server.");
|
|
notify_error("Communication problem with server.");
|
|
|
|
|
|
- console.log(e);
|
|
|
|
- //exception_error("handle_rpc_json", e, transport);
|
|
|
|
|
|
+ console.error(e);
|
|
}
|
|
}
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
function switchPanelMode(wide) {
|
|
function switchPanelMode(wide) {
|
|
- try {
|
|
|
|
- if (isCdmMode()) return;
|
|
|
|
-
|
|
|
|
- article_id = getActiveArticleId();
|
|
|
|
|
|
+ if (isCdmMode()) return;
|
|
|
|
|
|
- if (wide) {
|
|
|
|
- dijit.byId("headlines-wrap-inner").attr("design", 'sidebar');
|
|
|
|
- dijit.byId("content-insert").attr("region", "trailing");
|
|
|
|
|
|
+ article_id = getActiveArticleId();
|
|
|
|
|
|
- dijit.byId("content-insert").domNode.setStyle({width: '50%',
|
|
|
|
- height: 'auto',
|
|
|
|
- borderTopWidth: '0px' });
|
|
|
|
-
|
|
|
|
- if (parseInt(getCookie("ttrss_ci_width")) > 0) {
|
|
|
|
- dijit.byId("content-insert").domNode.setStyle(
|
|
|
|
- {width: getCookie("ttrss_ci_width") + "px" });
|
|
|
|
- }
|
|
|
|
|
|
+ if (wide) {
|
|
|
|
+ dijit.byId("headlines-wrap-inner").attr("design", 'sidebar');
|
|
|
|
+ dijit.byId("content-insert").attr("region", "trailing");
|
|
|
|
|
|
- $("headlines-frame").setStyle({ borderBottomWidth: '0px' });
|
|
|
|
- $("headlines-frame").addClassName("wide");
|
|
|
|
|
|
+ dijit.byId("content-insert").domNode.setStyle({width: '50%',
|
|
|
|
+ height: 'auto',
|
|
|
|
+ borderTopWidth: '0px' });
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
+ if (parseInt(getCookie("ttrss_ci_width")) > 0) {
|
|
|
|
+ dijit.byId("content-insert").domNode.setStyle(
|
|
|
|
+ {width: getCookie("ttrss_ci_width") + "px" });
|
|
|
|
+ }
|
|
|
|
|
|
- dijit.byId("content-insert").attr("region", "bottom");
|
|
|
|
|
|
+ $("headlines-frame").setStyle({ borderBottomWidth: '0px' });
|
|
|
|
+ $("headlines-frame").addClassName("wide");
|
|
|
|
|
|
- dijit.byId("content-insert").domNode.setStyle({width: 'auto',
|
|
|
|
- height: '50%',
|
|
|
|
- borderTopWidth: '0px'});
|
|
|
|
|
|
+ } else {
|
|
|
|
|
|
- if (parseInt(getCookie("ttrss_ci_height")) > 0) {
|
|
|
|
- dijit.byId("content-insert").domNode.setStyle(
|
|
|
|
- {height: getCookie("ttrss_ci_height") + "px" });
|
|
|
|
- }
|
|
|
|
|
|
+ dijit.byId("content-insert").attr("region", "bottom");
|
|
|
|
|
|
- $("headlines-frame").setStyle({ borderBottomWidth: '1px' });
|
|
|
|
- $("headlines-frame").removeClassName("wide");
|
|
|
|
|
|
+ dijit.byId("content-insert").domNode.setStyle({width: 'auto',
|
|
|
|
+ height: '50%',
|
|
|
|
+ borderTopWidth: '0px'});
|
|
|
|
|
|
|
|
+ if (parseInt(getCookie("ttrss_ci_height")) > 0) {
|
|
|
|
+ dijit.byId("content-insert").domNode.setStyle(
|
|
|
|
+ {height: getCookie("ttrss_ci_height") + "px" });
|
|
}
|
|
}
|
|
|
|
|
|
- closeArticlePanel();
|
|
|
|
|
|
+ $("headlines-frame").setStyle({ borderBottomWidth: '1px' });
|
|
|
|
+ $("headlines-frame").removeClassName("wide");
|
|
|
|
|
|
- if (article_id) view(article_id);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- new Ajax.Request("backend.php", {
|
|
|
|
- parameters: "op=rpc&method=setpanelmode&wide=" + (wide ? 1 : 0),
|
|
|
|
- onComplete: function(transport) {
|
|
|
|
- console.log(transport.responseText);
|
|
|
|
- } });
|
|
|
|
|
|
+ closeArticlePanel();
|
|
|
|
|
|
|
|
+ if (article_id) view(article_id);
|
|
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("switchPanelMode", e);
|
|
|
|
- }
|
|
|
|
|
|
+ new Ajax.Request("backend.php", {
|
|
|
|
+ parameters: "op=rpc&method=setpanelmode&wide=" + (wide ? 1 : 0),
|
|
|
|
+ onComplete: function(transport) {
|
|
|
|
+ console.log(transport.responseText);
|
|
|
|
+ } });
|
|
}
|
|
}
|
|
|
|
|
|
function update_random_feed() {
|
|
function update_random_feed() {
|
|
- try {
|
|
|
|
- console.log("in update_random_feed");
|
|
|
|
-
|
|
|
|
- new Ajax.Request("backend.php", {
|
|
|
|
- parameters: "op=rpc&method=updateRandomFeed",
|
|
|
|
- onComplete: function(transport) {
|
|
|
|
- handle_rpc_json(transport, true);
|
|
|
|
- window.setTimeout(update_random_feed, 30*1000);
|
|
|
|
- } });
|
|
|
|
|
|
+ console.log("in update_random_feed");
|
|
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("update_random_feed", e);
|
|
|
|
- }
|
|
|
|
|
|
+ new Ajax.Request("backend.php", {
|
|
|
|
+ parameters: "op=rpc&method=updateRandomFeed",
|
|
|
|
+ onComplete: function(transport) {
|
|
|
|
+ handle_rpc_json(transport, true);
|
|
|
|
+ window.setTimeout(update_random_feed, 30*1000);
|
|
|
|
+ } });
|
|
}
|
|
}
|
|
|
|
|
|
function hash_get(key) {
|
|
function hash_get(key) {
|
|
- try {
|
|
|
|
- kv = window.location.hash.substring(1).toQueryParams();
|
|
|
|
- return kv[key];
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("hash_get", e);
|
|
|
|
- }
|
|
|
|
|
|
+ kv = window.location.hash.substring(1).toQueryParams();
|
|
|
|
+ return kv[key];
|
|
}
|
|
}
|
|
function hash_set(key, value) {
|
|
function hash_set(key, value) {
|
|
- try {
|
|
|
|
- kv = window.location.hash.substring(1).toQueryParams();
|
|
|
|
- kv[key] = value;
|
|
|
|
- window.location.hash = $H(kv).toQueryString();
|
|
|
|
- } catch (e) {
|
|
|
|
- exception_error("hash_set", e);
|
|
|
|
- }
|
|
|
|
|
|
+ kv = window.location.hash.substring(1).toQueryParams();
|
|
|
|
+ kv[key] = value;
|
|
|
|
+ window.location.hash = $H(kv).toQueryString();
|
|
}
|
|
}
|