case "collapse":
$cat_id = db_escape_string($_REQUEST["cid"]);
- toggle_collapse_cat($link, $cat_id);
+ $mode = (int) db_escape_string($_REQUEST['mode']);
+ toggle_collapse_cat($link, $cat_id, $mode);
return;
break;
return false;
}
-/* function render_feedlist(data) {
- try {
-
- var f = $("feeds-frame");
- f.innerHTML = data;
-// cache_invalidate("FEEDLIST");
-// cache_inject("FEEDLIST", data, getInitParam("num_feeds"));
- feedlist_init();
-
- } catch (e) {
- exception_error("render_feedlist", e);
- }
-} */
-
function viewNextFeedPage() {
try {
//if (!getActiveFeedId()) return;
}
if (cache_check) {
- var f = $("headlines-frame");
-
- clean_feed_selections();
setActiveFeedId(feed, is_cat);
- if (!is_cat) {
- var feedr = $("FEEDR-" + feed);
- if (feedr && !feedr.hasClassName("Selected")) {
- feedr.addClassName("Selected");
- }
- } else {
- var feedr = $("FCAT-" + feed_id);
- if (feedr && !feedr.hasClassName("Selected")) {
- feedr.addClassName("Selected");
- }
- }
-
- f.innerHTML = cache_find_param(cache_prefix + feed, unread_ctr);
+ $("headlines-frame").innerHTML = cache_find_param(cache_prefix + feed,
+ unread_ctr);
request_counters();
remove_splash();
}
}
-function toggleCollapseCat_af(effect) {
- //var caption = elem.id.replace("FCATLIST-", "");
-
- try {
-
- var elem = effect.element;
- var cat = elem.id.replace("FCATLIST-", "");
- var cap = $("FCAP-" + cat);
-
- if (Element.visible(elem)) {
- cap.innerHTML = cap.innerHTML.replace("…", "");
- } else {
- if (cap.innerHTML.lastIndexOf("…") != cap.innerHTML.length-3) {
- cap.innerHTML = cap.innerHTML + "…";
- }
- }
-
- } catch (e) {
- exception_error("toggleCollapseCat_af", e);
- }
-}
-
-function toggleCollapseCat(cat) {
- try {
-
- var cat_elem = $("FCAT-" + cat);
- var cat_list = $("FCATLIST-" + cat).parentNode;
- var caption = $("FCAP-" + cat);
-
- Effect.toggle('FCATLIST-' + cat, 'blind', { duration: 0.5,
- afterFinish: toggleCollapseCat_af });
-
- var img = cat_elem.getElementsByTagName("IMG")[0];
-
- if (img.src.match("-collapse"))
- img.src = img.src.replace("-collapse", "-uncollapse")
- else
- img.src = img.src.replace("-uncollapse", "-collapse")
-
- new Ajax.Request("backend.php",
- { parameters: "backend.php?op=feeds&subop=collapse&cid=" +
- param_escape(cat) } );
-
- } catch (e) {
- exception_error("toggleCollapseCat", e);
- }
-}
-
-function isCatCollapsed(cat) {
- try {
- return Element.visible("FCATLIST-" + cat);
- } catch (e) {
- exception_error("isCatCollapsed", e);
- }
-}
function feedlist_dragsorted(ctr) {
try {
try {
loading_set_progress(90);
- //console.log("in feedlist init");
+ console.log("in feedlist init");
hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
document.onkeydown = hotkey_handler;
setTimeout("hotkey_prefix_timeout()", 5*1000);
- if (getActiveFeedId()) {
+ if (getActiveFeedId()) {
//console.log("some feed is open on feedlist refresh, reloading");
//setTimeout("viewCurrentFeed()", 100);
} else {
- if (getInitParam("cdm_auto_catchup") != 1 && get_feed_unread(-3) > 0) {
- notify_silent_next();
+ if (getInitParam("cdm_auto_catchup") != 1) {
setTimeout("viewfeed(-3)", 100);
} else {
setTimeout("viewfeed(-5)", 100);
remove_splash();
}
- }
+ }
+
+ console.log("T:" +
+ getInitParam("cdm_auto_catchup") + " " + get_feed_unread(-3));
if (getInitParam("theme") == "" ||
getInitParam("theme_options").match("hide_footer")) {
function hide_footer() {
try {
- if (Element.visible("footer")) {
+ /* if (Element.visible("footer")) {
Element.hide("footer");
dijit.byId("main").resize();
//new Effect.Fade("footer", { afterFinish: hide_footer_af });
- }
+ } */
} catch (e) {
exception_error("hide_footer", e);
}
var treeItem;
setFeedUnread(id, (kind == "cat"), ctr);
-
-/* if (kind && kind == "cat") {
- var catctr = $("FCATCTR-" + id);
- if (catctr) {
- catctr.innerHTML = "(" + ctr + ")";
- if (ctr > 0) {
- catctr.addClassName("Unread");
- } else {
- catctr.removeClassName("Unread");
- }
- }
- continue;
- }
-
- var feedctr = $("FEEDCTR-" + id);
- var feedu = $("FEEDU-" + id);
- var feedr = $("FEEDR-" + id);
- var feed_img = $("FIMG-" + id);
- var feedlink = $("FEEDL-" + id);
- var feedupd = $("FLUPD-" + id);
-
- if (updated && feedlink) {
- if (error) {
- feedlink.title = __("Error:") + " " + error + " (" + updated + ")";
- } else {
- feedlink.title = __("Updated:") + " " + updated;
- }
- } else if (!updated && feedlink) {
- feedlink.title = __("Updated:") + " " + __("Never");
- }
- if (feedupd) {
- if (!updated) updated = "";
-
- if (error) {
- if (xmsg) {
- feedupd.innerHTML = updated + " " + xmsg + " (Error)";
- } else {
- feedupd.innerHTML = updated + " (Error)";
- }
- } else {
- if (xmsg) {
- feedupd.innerHTML = updated + " (" + xmsg + ")";
- } else {
- feedupd.innerHTML = updated;
- }
- }
+ if (kind != "cat") {
+ //setFeedValue(id, false, 'error', error);
+ setFeedValue(id, false, 'updated', updated);
}
-
- if (has_img && feed_img) {
- if (!feed_img.src.match(id + ".ico")) {
- feed_img.src = getInitParam("icons_url") + "/" + id + ".ico";
- }
- }
-
- if (feedlink && title) {
- feedlink.innerHTML = title;
- }
-
- if (feedctr && feedu && feedr) {
-
-// if (id == getActiveFeedId())
-// console.log("HAS CTR: " + feedu.innerHTML + " GOT CTR: " + ctr +
-// " IS_SCHED: " + scheduled_call);
-
- if (parseInt(ctr) > 0 &&
- parseInt(feedu.innerHTML) < parseInt(ctr) &&
- id == getActiveFeedId() && scheduled_call) {
-
- displayNewContentPrompt(id);
- }
-
- var row_needs_hl = (ctr > 0 && ctr > parseInt(feedu.innerHTML));
-
- feedu.innerHTML = ctr;
-
- if (error) {
- feedr.removeClassName("feed");
- feedr.addClassName("error");
- } else if (id > 0) {
- feedr.removeClassName("error");
- feedr.addClassName("feed");
- }
+ }
- if (ctr > 0) {
- feedctr.addClassName("Unread");
- feedr.addClassName("Unread");
-
- if (row_needs_hl &&
- !getInitParam("theme_options").match('no_highlights')) {
- new Effect.Highlight(feedr, {duration: 1, startcolor: "#fff7d5",
- queue: { position:'end', scope: 'EFQ-' + id, limit: 1 } } );
-
- cache_invalidate("F:" + id);
- }
- } else {
- feedctr.removeClassName("Unread");
- feedr.removeClassName("Unread");
- }
- } */
- }
-
hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
var feeds_stored = number_of_feeds;
- //console.log("Feed counters, C: " + feeds_found + ", S:" + feeds_stored);
-
if (feeds_stored != feeds_found) {
number_of_feeds = feeds_found;
console.log("Subscribed feed number changed, refreshing feedlist");
setTimeout('updateFeedList()', 50);
}
- } else {
-/* var fl = $("feeds-frame").innerHTML;
- if (fl) {
- cache_invalidate("FEEDLIST");
- cache_inject("FEEDLIST", fl, getInitParam("num_feeds"));
- } */
}
} catch (e) {
}
}
-function get_feed_unread(id) {
+function get_feed_unread(feed, is_cat) {
try {
- return parseInt($("FEEDU-" + id).innerHTML);
+ if (is_cat)
+ treeItem = treeModel.store._itemsByIdentity['CAT:' + feed];
+ else
+ treeItem = treeModel.store._itemsByIdentity['FEED:' + feed];
+
+ if (treeItem)
+ return treeModel.store.getValue(treeItem, 'unread');
+
} catch (e) {
- return -1;
+ //
}
+
+ return -1;
}
function get_cat_unread(id) {
- try {
- var ctr = $("FCATCTR-" + id).innerHTML;
- ctr = ctr.replace("(", "");
- ctr = ctr.replace(")", "");
- return parseInt(ctr);
- } catch (e) {
- return -1;
- }
+ return get_feed_unread(id, true);
}
function get_feed_entry_unread(elem) {
}
function hideOrShowFeeds(hide) {
+ var tree = dijit.byId("feedTree");
+
+ if (getInitParam("enable_feed_cats")) {
+
+ var cats = tree.model.store._arrayOfTopLevelItems;
+
+ cats.each(function(cat) {
+ var cat_unread = hideOrShowFeedsCategory(cat.items, hide);
+
+ var id = String(cat.id);
+ var node = tree._itemNodesMap[id];
+
+ if (node) {
+ if (hide && cat_unread == 0) {
+ Effect.Fade(node[0].rowNode, {duration : 0.3,
+ queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }});
+ } else {
+ Element.show(node[0].rowNode);
+ ++cat_unread;
+ }
+ }
+
+ });
+
+ } else {
+ hideOrShowFeedsCategory(tree.model.store._arrayOfTopLevelItems, hide);
+ }
/* try {
} */
}
-function hideOrShowFeedsCategory(cat_id, hide) {
+function hideOrShowFeedsCategory(feeds, hide) {
try {
+ //console.warn("hideOrShowFeedsCategory: function not implemented");
+ var tree = dijit.byId("feedTree");
+ var cat_unread = 0;
- var nodes;
+ feeds.each(function(feed) {
+ var id = String(feed.id);
+ var bare_id = parseInt(id.substr(id.indexOf(":")+1));
+
+ var unread = feed.unread[0];
+ var node = tree._itemNodesMap[id];
+
+ if (node) {
+ if (hide && unread == 0 && (bare_id > 0 || !getInitParam("hide_read_shows_special"))) {
+ Effect.Fade(node[0].rowNode, {duration : 0.3,
+ queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }});
+ } else {
+ Element.show(node[0].rowNode);
+ ++cat_unread;
+ }
+ }
+ });
+
+ return cat_unread;
+
+/* var nodes;
var cat_node;
if (cat_id) {
} else {
Element.show(cat_node);
}
- }
+ } */
} catch (e) {
exception_error("hideOrShowFeedsCategory", e);
}
}
-function getFeedName(id, is_cat) {
- var e;
+function getFeedName(feed, is_cat) {
+ return getFeedValue(feed, is_cat, 'name');
+}
- if (is_cat) {
- e = $("FCATN-" + id);
- } else {
- e = $("FEEDN-" + id);
- }
- if (e) {
- return e.innerHTML.stripTags();
- } else {
- return '';
+function getFeedValue(feed, is_cat, key) {
+
+ try {
+ if (is_cat)
+ treeItem = treeModel.store._itemsByIdentity['CAT:' + feed];
+ else
+ treeItem = treeModel.store._itemsByIdentity['FEED:' + feed];
+
+ if (treeItem)
+ return treeModel.store.getValue(treeItem, key);
+
+ } catch (e) {
+ //
}
+
+ return '';
}
function getNextUnreadCat(id) {
}
}
-function clean_feed_selections() {
- try {
- $$("#feedList li").invoke('removeClassName', 'Selected');
- } catch (e) {
- exception_error("clean_feed_selections", e);
- }
-}
-
function feedsSortByUnread() {
return feeds_sort_by_unread;
}
function setFeedUnread(feed, is_cat, unread) {
try {
+ setFeedValue(feed, is_cat, 'unread', parseInt(unread));
+ } catch (e) {
+ exception_error("setFeedUnread", e);
+ }
+}
+
+function setFeedValue(feed, is_cat, key, value) {
+ try {
+ if (!value) value = '';
+
if (is_cat)
treeItem = treeModel.store._itemsByIdentity['CAT:' + feed];
else
treeItem = treeModel.store._itemsByIdentity['FEED:' + feed];
if (treeItem)
- treeModel.store.setValue(treeItem, 'unread', parseInt(unread));
+ treeModel.store.setValue(treeItem, key, value);
} catch (e) {
- exception_error("setFeedUnread", e);
+ exception_error("setFeedValue", e);
+ }
+}
+
+function toggleCollapseCat(id) {
+ console.warn("toggleCollapseCat: function not implemented");
+}
+
+function selectFeed(feed, is_cat) {
+ try {
+ var tree = dijit.byId("feedTree");
+
+ if (is_cat)
+ treeNode = tree._itemNodesMap['CAT:' + feed];
+ else
+ treeNode = tree._itemNodesMap['FEED:' + feed];
+
+ if (treeNode) {
+ treeNode = treeNode[0];
+ tree._expandNode(treeNode);
+ tree._selectNode(treeNode);
+ }
+
+ } catch (e) {
+ exception_error("selectFeed", e);
}
}
# print "<div class=\"headlinesSubToolbar\">";
- $page_prev_link = "javascript:viewFeedGoPage(-1)";
- $page_next_link = "javascript:viewFeedGoPage(1)";
- $page_first_link = "javascript:viewFeedGoPage(0)";
+ $page_prev_link = "viewFeedGoPage(-1)";
+ $page_next_link = "viewFeedGoPage(1)";
+ $page_first_link = "viewFeedGoPage(0)";
- $catchup_page_link = "javascript:catchupPage()";
- $catchup_feed_link = "javascript:catchupCurrentFeed()";
- $catchup_sel_link = "javascript:catchupSelection()";
+ $catchup_page_link = "catchupPage()";
+ $catchup_feed_link = "catchupCurrentFeed()";
+ $catchup_sel_link = "catchupSelection()";
- $archive_sel_link = "javascript:archiveSelection()";
- $delete_sel_link = "javascript:deleteSelection()";
+ $archive_sel_link = "archiveSelection()";
+ $delete_sel_link = "deleteSelection()";
- $sel_all_link = "javascript:selectArticles('all')";
- $sel_unread_link = "javascript:selectArticles('unread')";
- $sel_none_link = "javascript:selectArticles('none')";
- $sel_inv_link = "javascript:selectArticles('invert')";
+ $sel_all_link = "selectArticles('all')";
+ $sel_unread_link = "selectArticles('unread')";
+ $sel_none_link = "selectArticles('none')";
+ $sel_inv_link = "selectArticles('invert')";
- $tog_unread_link = "javascript:selectionToggleUnread()";
- $tog_marked_link = "javascript:selectionToggleMarked()";
- $tog_published_link = "javascript:selectionTogglePublished()";
+ $tog_unread_link = "selectionToggleUnread()";
+ $tog_marked_link = "selectionToggleMarked()";
+ $tog_published_link = "selectionTogglePublished()";
+
+ print "<div id=\"subtoolbar_main\">";
+
+ print __('Select:')."
+ <a href=\"#\" onclick=\"$sel_all_link\">".__('All')."</a>,
+ <a href=\"#\" onclick=\"$sel_unread_link\">".__('Unread')."</a>,
+ <a href=\"#\" onclick=\"$sel_inv_link\">".__('Invert')."</a>,
+ <a href=\"#\" onclick=\"$sel_none_link\">".__('None')."</a></li>";
+
+ print " ";
+
+/* print "<span
+ onmouseover=\"enable_selection(false)\"
+ onmouseout=\"enable_selection(true)\"
+ onclick=\"toggleHeadlineActions()\" id=\"headlineActionsDrop\">".
+ __("Actions...") . " <img width='11' height'7'
+ src=\"images/down_arrow.png\">
+ </span>";
+
+ print "<ul id=\"headlineActionsBody\" style=\"display : none\">";
+
+ print "<li class=\"insensitive\">".__('Selection toggle:')."</li>
+ <li onclick=\"$tog_unread_link\"> ".__('Unread')."</li>
+ <li onclick=\"$tog_marked_link\"> ".__('Starred')."</li>
+ <li onclick=\"$tog_published_link\"> ".__('Published')."</li>
+ <li class=\"insensitive\">".__('Selection:')."</li>
+ <li onclick=\"$catchup_sel_link\"> ".__('Mark as read')."</li>";
+
+// print "<li onclick=\"$catchup_feed_link\"> ".__('Entire feed').
+// "</li>";
+
+ if ($feed_id != "0") {
+ print "<li onclick=\"$archive_sel_link\"> ".__('Archive')."</li>";
+ } else {
+ print "<li onclick=\"$archive_sel_link\"> ".__('Move back')."</li>";
+ print "<li onclick=\"$delete_sel_link\"> ".__('Delete')."</li>";
+
+ }
+
+ print "<li onclick=\"emailArticle(false)\"> ".
+ __('Forward by email')."</li>";
+
+ //print "<li><span class=\"insensitive\">--------</span></li>";
+ print "<li class=\"insensitive\">".__('Assign label:')."</li>";
+
+ print_labels_headlines_dropdown($link, $feed_id);
+
+ print "<li class=\"insensitive\">".__('Feed:')."</li>";
+ print "<li onclick=\"displayDlg('generatedFeed', '$feed_id:$is_cat:$rss_link')\"> ".__('View as RSS')."</li>";
+
+ print "</ul>"; */
+
+ print "<select dojoType=\"dijit.form.Select\"
+ onchange=\"headlineActionsChange(this)\">";
+ print "<option value=\"\">".__('Actions...')."</option>";
+
+# print "<optgroup label=\"".__("Selection toggle:")."\">";
+
+ print "<option value=\"$tog_unread_link\">".__('Toggle unread')."</option>
+ <option value=\"$tog_marked_link\">".__('Toggle starred')."</option>
+ <option value=\"$tog_published_link\">".__('Toggle published')."</option>";
+
+# print "</optgroup>
+# <optgroup label=\"".__("Selection:")."\">";
+
+ print "<option>----------</option>";
+
+ print "<option value=\"$catchup_sel_link\">".__('Mark as read')."</option>";
+
+ if ($feed_id != "0") {
+ print "<option value=\"$archive_sel_link\">".__('Archive')."</option>";
+ } else {
+ print "<option value=\"$archive_sel_link\">".__('Move back')."</option>";
+ print "<option value=\"$delete_sel_link\">".__('Delete')."</option>";
+
+ }
+
+ print "<option value=\"emailArticle(false)\">".__('Forward by email').
+ "</option>";
+
+# print "<optgroup label=\"".__("Assign label:")."\">";
+ print "<option>----------</option>";
+
+ print_labels_headlines_dropdown($link, $feed_id);
+
+ print "<option>----------</option>";
+
+# print "</optgroup>";
+
+ print "<option value=\"displayDlg('generatedFeed', '$feed_id:$is_cat:$rss_link')\">".__('View as RSS')."</option>";
+
+ print "</select>";
+
+ print "</div>";
print "<div id=\"subtoolbar_ftitle\">";
print "</div>";
- print __('Select:')."
- <a href=\"#\" onclick=\"$sel_all_link\">".__('All')."</a>,
- <a href=\"#\" onclick=\"$sel_unread_link\">".__('Unread')."</a>,
- <a href=\"#\" onclick=\"$sel_inv_link\">".__('Invert')."</a>,
- <a href=\"#\" onclick=\"$sel_none_link\">".__('None')."</a></li>";
-
- print " ";
-
- print "<span
- onmouseover=\"enable_selection(false)\"
- onmouseout=\"enable_selection(true)\"
- onclick=\"toggleHeadlineActions()\" id=\"headlineActionsDrop\">".
- __("Actions...") . " <img width='11' height'7'
- src=\"images/down_arrow.png\">
- </span>";
-
- print "<ul id=\"headlineActionsBody\" style=\"display : none\">";
-
- print "<li class=\"insensitive\">".__('Selection toggle:')."</li>
- <li onclick=\"$tog_unread_link\"> ".__('Unread')."</li>
- <li onclick=\"$tog_marked_link\"> ".__('Starred')."</li>
- <li onclick=\"$tog_published_link\"> ".__('Published')."</li>
- <li class=\"insensitive\">".__('Selection:')."</li>
- <li onclick=\"$catchup_sel_link\"> ".__('Mark as read')."</li>";
-
-// print "<li onclick=\"$catchup_feed_link\"> ".__('Entire feed').
-// "</li>";
-
- if ($feed_id != "0") {
- print "<li onclick=\"$archive_sel_link\"> ".__('Archive')."</li>";
- } else {
- print "<li onclick=\"$archive_sel_link\"> ".__('Move back')."</li>";
- print "<li onclick=\"$delete_sel_link\"> ".__('Delete')."</li>";
-
- }
-
- print "<li onclick=\"emailArticle(false)\"> ".
- __('Forward by email')."</li>";
-
- //print "<li><span class=\"insensitive\">--------</span></li>";
- print "<li class=\"insensitive\">".__('Assign label:')."</li>";
-
- print_labels_headlines_dropdown($link, $feed_id);
-
- print "<li class=\"insensitive\">".__('Feed:')."</li>";
- print "<li onclick=\"displayDlg('generatedFeed', '$feed_id:$is_cat:$rss_link')\"> ".__('View as RSS')."</li>";
-
- print "</ul>";
-
-# print "</div>";
}
function printCategoryHeader($link, $cat_id, $hidden = false, $can_browse = true,
$cat = feedlist_init_cat($link, $cat_id, $collapsed);
}
+ $updated = make_local_datetime($link, $line["updated_noms"], false);
+
array_push($cat['items'], feedlist_init_feed($link, $feed_id,
- $feed, $unread));
+ $feed, $unread, $line['last_error'], $updated));
}
if (!$enable_cats) {
}
function print_labels_headlines_dropdown($link, $feed_id) {
- print "<li onclick=\"javascript:addLabel()\">
- ".__("Create label...")."</li>";
+ print "<option value=\"addLabel()\">".__("Create label...")."</option>";
$result = db_query($link, "SELECT id, caption FROM ttrss_labels2 WHERE
owner_uid = '".$_SESSION["uid"]."' ORDER BY caption");
$id = $line["id"];
if ($feed_id < -10 && $feed_id == -11-$label_id) {
- print "<li id=\"LHDL-$id\"
- onclick=\"javascript:selectionRemoveLabel($label_id)\">
- $label_caption ".__('(remove)')."</li>";
+ print "<option id=\"LHDL-$id\"
+ value=\"selectionRemoveLabel($label_id)\">".
+ __('Remove:') . " $label_caption</option>";
} else {
- print "<li id=\"LHDL-$id\"
- onclick=\"javascript:selectionAssignLabel($label_id)\">
- $label_caption</li>";
+ print "<option id=\"LHDL-$id\"
+ value=\"selectionAssignLabel($label_id)\">".
+ __('Assign:') . " $label_caption</option>";
}
}
}
return $str;
}
- function toggle_collapse_cat($link, $cat_id) {
+ function toggle_collapse_cat($link, $cat_id, $mode) {
if ($cat_id > 0) {
+ $mode = bool_to_sql_bool($mode);
+
db_query($link, "UPDATE ttrss_feed_categories SET
- collapsed = NOT collapsed WHERE id = '$cat_id' AND owner_uid = " .
+ collapsed = $mode WHERE id = '$cat_id' AND owner_uid = " .
$_SESSION["uid"]);
} else {
$pref_name = '';
}
if ($pref_name) {
- if (get_pref($link, $pref_name)) {
- set_pref($link, $pref_name, 'false');
- } else {
+ if ($mode) {
set_pref($link, $pref_name, 'true');
+ } else {
+ set_pref($link, $pref_name, 'false');
}
}
}
$cat_unread = getCategoryUnread($link, $cat_id);
}
- $obj['id'] = 'CAT:' . $cat_id;
+ $obj['id'] = 'CAT:' . ((int)$cat_id);
$obj['items'] = array();
$obj['name'] = getCategoryTitle($link, $cat_id);
$obj['type'] = 'feed';
return $obj;
}
- function feedlist_init_feed($link, $feed_id, $title = false, $unread = false) {
+ function feedlist_init_feed($link, $feed_id, $title = false, $unread = false, $error = '', $updated = '') {
$obj = array();
if (!$title)
$obj['name'] = $title;
$obj['unread'] = (int) $unread;
$obj['type'] = 'feed';
+ $obj['error'] = $error;
+ $obj['updated'] = $updated;
return $obj;
}
try {
+ //dojo.require("dijit.layout.BorderContainer");
+ //dojo.require("dijit.layout.ContentPane");
+ dojo.require("dijit.Dialog");
+ dojo.require("dijit.form.Button");
+ //dojo.require("dojo.data.ItemFileReadStore");
+ //dojo.require("dojo.data.ItemFileWriteStore");
+ //dojo.require("dijit.Tree");
+
loading_set_progress(30);
var query = "?op=rpc&subop=sanityCheck";
closeInfoBox();
}
- if (!hotkeys_enabled) {
+ if (dialogs.length > 0 || !hotkeys_enabled) {
console.log("hotkeys disabled");
return;
}
<head>
<title>Tiny Tiny RSS : Preferences</title>
<link rel="stylesheet" type="text/css" href="tt-rss.css?<?php echo $dt_add ?>"/>
- <link rel="stylesheet" type="text/css" href="lib/modalbox/modalbox.css"/>
+ <link rel="stylesheet" type="text/css" href="lib/dijit/themes/claro/claro.css"/>
<?php $user_theme = get_user_theme_path($link);
if ($user_theme) { ?>
<script type="text/javascript" src="lib/prototype.js"></script>
<script type="text/javascript" src="lib/position.js"></script>
<script type="text/javascript" src="lib/scriptaculous/scriptaculous.js?load=effects,dragdrop,controls"></script>
- <script type="text/javascript" src="lib/modalbox/modalbox.js"></script>
+ <script type="text/javascript" src="lib/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
<script type="text/javascript" charset="utf-8" src="localized_js.php?<?php echo $dt_add ?>"></script>
</head>
-<body id="ttrssPrefs">
+<body id="ttrssPrefs" class="claro">
<div id="overlay">
<div id="overlay_inner">
-body#ttrssMain {
+body#ttrssMain, body#ttrssPrefs {
background : white;
color : black;
margin : 0px;
font-size : 12px;
}
-ul.feedList span.feedlink:hover {
- cursor : pointer;
- color : #4684ff;
-}
-
-
-ul.feedList img.hlLoading {
- margin-left : 5px;
- vertical-align : middle;
- height : 10px;
-}
-
-ul.feedList {
- list-style-type : none;
- margin : 5px 5px 5px 0px;
- padding : 0px 0px 0px 5px;
- font-size : 12px;
-}
-
-ul.feedList li.feedCat, ul.feedList li.virtCat {
- margin : 0px;
- padding : 3px 0px 3px 0px;
- color : #707070;
- font-size : 12px;
-}
-
-ul.feedList img.catCollapse {
- cursor : pointer;
- vertical-align : middle;
- width : 11px;
- height : 11px;
- padding-bottom : 3px;
-}
-
-ul.feedList span.catTitle {
- color : #707070;
- cursor : pointer;
-}
-
-ul.feedList span.catTitle:hover {
- color : #4684ff;
-}
-
-ul.feedList li.feedCat.Selected {
- margin : 0px;
- padding : 3px 0px 3px 0px;
- color : #4684ff;
- font-size : 12px;
-}
-
-ul.feedList li.feedCat.Selected span.catTitle {
- color : #4684ff;
- cursor : pointer;
-}
-
-ul.feedCatList {
- list-style-type : none;
- margin : 0px 0px 0px 20px;
- padding : 0px;
-}
-
-ul.feedCatList li {
- margin : 0px;
- padding : 0px 0px 2px 0px;
- color : black;
-}
-
-ul.feedList > li {
- padding : 0px 0px 2px 0px;
-}
-
-ul.feedCatList img, ul.feedList img {
- vertical-align : bottom;
-}
-
-li.feed.Unread,
-li.error.Unread,
-li.label.Unread,
-li.virt.Unread,
-li.tag.Unread {
- font-weight : bold;
-}
-
-li.error.Selected span.feedlink,
-li.error span.feedlink,
-li.error.Unread span.feedlink,
-li.error.Unread.Selected span.feedlink {
- color : #f04040;
-}
-
-li.feed.Selected span.feedlink,
-li.label.Selected span.feedlink,
-li.virt.Selected span.feedlink,
-li.tag.Selected span.feedlink {
- color : #4684ff;
-}
-
-li.feed.Unread.Selected span.feedlink,
-li.label.Unread.Selected span.feedlink,
-li.virt.Unread.Selected span.feedlink,
-li.tag.Unread.Selected span.feedlink {
- color : #4684ff;
-}
-
-li.feed.Unread.Selected,
-li.error.Unread.Selected,
-li.label.Unread.Selected,
-li.virt.Unread.Selected,
-li.tag.Unread.Selected {
- font-weight : bold;
-}
-
-li.feed {
- display : block;
-}
-
-ul.feedList img, img.tinyFeedIcon {
- margin : 0px 3px 0px 0px;
- width : 16px;
- height : 16px;
- vertical-align : middle;
- border-width : 0px;
-}
-
h1 {
font-size : 18px;
}
font-size : 11px;
font-family : "Lucida Grande", "Segoe UI", Tahoma, Arial, sans-serif;
color : gray;
- padding : 0px 5px 0px 0px;
+ padding : 0px;
margin : 0px;
overflow : hidden;
+ height : 21px;
}
-/* div.headlines-toolbar * {
- line-height : normal;
-} */
+div#headlines-toolbar .dijitSelect {
+ font-size : 11px;
+}
+
+div#headlines-toolbar div#subtoolbar_main {
+ display : table-cell;
+ width : 100%;
+ white-space : nowrap;
+ vertical-align : middle;
+}
div#headlines-toolbar div#subtoolbar_ftitle {
- float : right;
- /* line-height : 20px; */
+ display : table-cell;
+ text-align : right;
+ vertical-align : middle;
+ white-space : nowrap;
+ padding-right : 5px;
}
span.contentPreview {
#main_toolbar_form {
margin : 0px;
padding : 0px;
- display : inline;
+ display : table-cell;
+ white-space : nowrap;
+ width : 100%;
}
div.feedExtInfo {
padding : 1em;
}
-html, body, #main {
+html, body#ttrssMain, #main {
width: 100%;
height: 100%;
border: 0;
padding: 0;
margin: 0;
-}
-
-#toolbar div.actionChooser {
- /* margin-right : 5px; */
- float : right;
-}
-
-/* layout */
-
-/* #header {
- position : absolute;
- white-space: nowrap;
- top : 5px;
- left : 15px;
- right : 5px;
- height : 35px;
- color : #4684ff;
- font-size : 12px;
-}
-
-#feeds-holder {
- border-width : 1px 1px 0px 0px;
- border-style : solid solid;
- border-color : #C4D1E4 #88b0f0;
- top : 40px;
- left : 0px;
- position : absolute;
- width : 260px;
- overflow : auto;
- bottom : 0px;
- border-collapse : collapse;
-}
+}
#toolbar div.actionChooser {
- margin-right : 5px;
- float : right;
-}
-
-#toolbar {
- position : absolute;
- left : 261px;
- padding : 0px 0px 0px 10px;
- top : 40px;
- right : 0px;
- white-space: nowrap;
- height : 30px;
- background-image : url("images/toolbar.png");
- background-position : bottom left;
- background-repeat : repeat-x;
- font-size : 12px;
-}
-
-#toolbar input {
- vertical-align : middle;
-}
-
-div.headlines_normal {
- position : absolute;
- border-width : 1px 0px 0px 0px;
- border-style : solid;
- border-color : #88b0f0;
- left : 261px;
- height : 305px;
- top : 70px;
- right : 0px;
- overflow : hidden;
- font-size : 12px;
- border-collapse : collapse;
-}
-
-div.headlines_cdm {
- position : absolute;
- border-width : 1px 0px 1px 0px;
- border-style : solid;
- border-color : #88b0f0;
- left : 261px;
- bottom : 40px;
- top : 70px;
- right : 0px;
- overflow : hidden;
- font-size : 12px;
- border-collapse : collapse;
-}
-
-#content-frame {
- position : absolute;
- border-width : 1px 0px 0px 0px;
- border-style : solid;
- border-color : #88b0f0;
- overflow : auto;
- top : 390px;
- left : 261px;
- bottom : 40px;
- right : 0px;
- border-collapse : collapse;
+ display : table-cell;
+ text-align : right;
+ padding-right : 5px;
}
-#resize-grabber {
- height : 5px;
- border-width : 0px 0px 1px 0px;
- border-style : solid;
- border-color : #88b0f0;
- background : url("images/resize_horiz.png") top left;
- cursor : move;
- text-align : center;
-}
+/* preferences layout */
-#footer, #prefFooter {
+#prefFooter {
position : absolute;
bottom : 0px;
height : 20px;
color : black;
}
-#headlinesContainer {
- margin-left : 0px;
- background-color : white;
-}
-
-#headlineActionsTop {
- font-size : 12px;
-}
-
-#headlinesInnerContainer {
- overflow : auto;
- position : absolute;
- left : 0px;
- right : 0px;
- bottom : 0px;
- top : 25px;
-} */
-
-/* preferences layout */
-
#prefHeader {
color : #4684ff;
font-size : 12px;
}
-#userSwitch {
- position : absolute;
- bottom : 2px;
- right : 2px;
-}
-
-.catCtr.Unread, .feedCtr.Unread {
- font-weight : bold;
- color : #707070;
- display : inline;
-}
-
-.catCtr, .feedCtr {
- display : none;
-}
-
div.topLinks img {
vertical-align : middle;
cursor : pointer;
}
-#offlineModePic {
- margin-left : 5px;
-}
-
a.helpLinkPic img {
border-width : 0px;
vertical-align : middle;
}
-li.feedCatHolder {
- display : inline;
-}
-
table.prefFeedCatList {
background-color : white;
}
font-family : monospace;
}
-span#headlineActionsDrop {
- border : 1px solid #c0c0c0;
- padding : 1px 5px 1px 10px;
- color : #063064;
- cursor : pointer;
-}
-
-ul#headlineActionsBody {
- list-style-type : none;
- position : absolute;
- margin : 0px;
- padding : 0px;
- background-color : white;
- width : 150px;
- z-index : 4;
- top : auto;
- left : auto;
- border-width : 1px 1px 1px 1px;
- border-color : #c0c0c0;
- border-style : solid;
- margin-left : -1px;
- max-height : 250px;
- overflow : auto;
-
-}
-
-ul#headlineActionsBody li {
- padding : 2px 5px 2px 10px;
- color : black;
-}
-
-ul#headlineActionsBody li:hover {
- color : #4684ff;
- cursor : pointer;
- background : #ecf4ff;
-}
-
-ul#headlineActionsBody li.insensitive {
- color : gray;
-}
-
-ul#headlineActionsBody li.insensitive:hover {
- background : white;
- cursor : normal;
- color : gray;
-}
-
span.prefsLabelEntry {
padding : 2px;
}
color : #909090;
}
-div#offlineModeDrop div {
- padding : 2px 2px 2px 2px;
- text-align : left;
-}
-
-div#offlineModeDrop {
- position : absolute;
- margin : 0px;
- padding : 2px;
- background-color : white;
- z-index : 2;
- margin : 2px 0px 0px 0px;
- top : auto;
- right : 0px;
- border : 1px solid #cccccc;
- background : white;
- min-width : 170px;
- margin-left : -1px;
- max-height : 250px;
- overflow : auto;
- color : #909090;
-}
-
optgroup {
color : #4684ff;
font-style : normal;
vertical-align : middle;
}
+div.hlRight img {
+ max-width : 16px;
+ max-height : 16px;
+}
+
span.hlUpdated {
color : gray;
font-weight : medium;
#feeds-holder {
padding : 0px;
+ border-color : #88b0f0;
+ border-left-width : 0px;
+ border-bottom-width : 0px;
}
#headlines-wrap-inner {
#headlines-frame {
padding : 0px;
+ border-color : #88b0f0;
+ border-right-width : 0px;
}
#headlinesInnerContainer {
#content-insert {
padding : 0px;
+ border-color : #88b0f0;
+ border-bottom-width : 0px;
+ border-right-width : 0px;
}
.dijitTreeLabel.Unread {
font-weight : bold;
}
+.dijitTreeRow.Error {
+ color : red;
+}
+.dijitTreeRow.Hidden {
+ display : none;
+}
function setActiveFeedId(id, is_cat) {
try {
- //console.log("sAFID(" + id + ", " + is_cat + ")");
_active_feed_id = id;
if (is_cat != undefined) {
_active_feed_is_cat = is_cat;
}
+ selectFeed(id, is_cat);
+
} catch (e) {
exception_error("setActiveFeedId", e);
}
setTimeout("viewfeed(-5)", 100);
}
- setTimeout('updateFeedList(false, false)', 50);
+ setTimeout('updateFeedList()', 50);
closeInfoBox();
}
function updateFeedList() {
try {
- console.log("updateFeedList");
+ console.warn("updateFeedList: function not implemented");
/* var query_str = "backend.php?op=feeds";
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.Button");
- dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dijit.Tree");
+ dojo.require("dijit.form.Select");
+ dojo.require("dojo.parser");
dojo.addOnLoad(function() {
getLabelClass: function (item, opened) {
return (item.unread == 0) ? "dijitTreeLabel" : "dijitTreeLabel Unread";
},
+ getRowClass: function (item, opened) {
+ return (!item.error || item.error == '') ? "dijitTreeRow" :
+ "dijitTreeRow Error";
+ },
getLabel: function(item) {
if (item.unread > 0) {
return item.name + " (" + item.unread + ")";
return item.name;
}
},
+ onOpen: function (item, node) {
+ var id = String(item.id);
+ var cat_id = id.substr(id.indexOf(":")+1);
+
+ new Ajax.Request("backend.php",
+ { parameters: "backend.php?op=feeds&subop=collapse&cid=" +
+ param_escape(cat_id) + "&mode=1" } );
+ },
+ onClose: function (item, node) {
+ var id = String(item.id);
+ var cat_id = id.substr(id.indexOf(":")+1);
+
+ new Ajax.Request("backend.php",
+ { parameters: "backend.php?op=feeds&subop=collapse&cid=" +
+ param_escape(cat_id) + "&mode=0" } );
+
+ },
onClick: function (item, node) {
var id = String(item.id);
var is_cat = id.match("^CAT:");
feeds_sort_by_unread = getInitParam("feeds_sort_by_unread") == 1;
- remove_splash();
- feedlist_init();
-
- console.log("second stage ok");
-
loading_set_progress(60);
if (has_local_storage())
localStorage.clear();
+ console.log("second stage ok");
+
+ feedlist_init();
+
} catch (e) {
exception_error("init_second_stage", e);
}
function collapse_feedlist() {
try {
- //console.log("collapse_feedlist");
-
-/* var theme = getInitParam("theme");
- if (theme != "" &&
- !getInitParam("theme_options").match("collapse_feedlist")) return;
-
- var fl = $("feeds-holder");
- var fh = $("headlines-frame");
- var fc = $("content-frame");
- var ft = $("toolbar");
- var ff = $("footer");
- var fhdr = $("header");
- var fbtn = $("collapse_feeds_btn");
-
- if (!Element.visible(fl)) {
- Element.show(fl);
- fbtn.innerHTML = "<<";
-
- if (theme != "graycube") {
-
- fh.style.left = fl.offsetWidth + "px";
- ft.style.left = fl.offsetWidth + "px";
- if (fc) fc.style.left = fl.offsetWidth + "px";
- if (ff && theme != "compat") ff.style.left = (fl.offsetWidth-1) + "px";
-
- if (theme == "compact") fhdr.style.left = (fl.offsetWidth + 10) + "px";
- } else {
- fh.style.left = fl.offsetWidth + 40 + "px";
- ft.style.left = fl.offsetWidth + 40 +"px";
- if (fc) fc.style.left = fl.offsetWidth + 40 + "px";
- }
-
- query = "?op=rpc&subop=setpref&key=_COLLAPSED_FEEDLIST&value=false";
-
- new Ajax.Request("backend.php", { parameters: query });
-
- } else {
- Element.hide(fl);
- fbtn.innerHTML = ">>";
-
- if (theme != "graycube") {
-
- fh.style.left = "0px";
- ft.style.left = "0px";
- if (fc) fc.style.left = "0px";
- if (ff) ff.style.left = "0px";
-
- if (theme == "compact") fhdr.style.left = "10px";
-
- } else {
- fh.style.left = "20px";
- ft.style.left = "20px";
- if (fc) fc.style.left = "20px";
-
- }
-
- query = "?op=rpc&subop=setpref&key=_COLLAPSED_FEEDLIST&value=true";
-
- new Ajax.Request("backend.php", { parameters: query });
-
- } */
+ console.warn("collapse_feedlist: function not implemented");
query = "?op=rpc&subop=setpref&key=_COLLAPSED_FEEDLIST&value=true";
+ new Ajax.Request("backend.php", { parameters: query });
} catch (e) {
exception_error("collapse_feedlist", e);
<div id="toolbar" dojoType="dijit.layout.ContentPane" region="top">
- <div class="actionChooser">
- <select id="quickMenuChooser" onchange="quickMenuChange()">
- <option value="qmcDefault" selected="selected"><?php echo __('Actions...') ?></option>
- <option value="qmcSearch"><?php echo __('Search...') ?></option>
- <optgroup label="<?php echo __('Feed actions:') ?>">
- <option value="qmcAddFeed"><?php echo __('Subscribe to feed...') ?></option>
- <option value="qmcEditFeed"><?php echo __('Edit this feed...') ?></option>
- <option value="qmcRescoreFeed"><?php echo __('Rescore feed') ?></option>
- <option value="qmcRemoveFeed"><?php echo __('Unsubscribe') ?></option>
- </optgroup>
- <optgroup label="<?php echo __('All feeds:') ?>">
- <option value="qmcCatchupAll"><?php echo __('Mark as read') ?></option>
- <option value="qmcShowOnlyUnread"><?php echo __('(Un)hide read feeds') ?></option>
- </optgroup>
- <optgroup label="<?php echo __('Categories:') ?>">
-
- <option value="qmcToggleReorder"><?php echo __('Toggle reordering mode') ?></option>
- <option value="qmcResetCats"><?php echo __('Reset order') ?></option>
- </optgroup>
-
- <optgroup label="<?php echo __('Other actions:') ?>">
-
- <option value="qmcAddLabel"><?php echo __('Create label...') ?></option>
- <option value="qmcAddFilter"><?php echo __('Create filter...') ?></option>
- <option value="qmcResetUI"><?php echo __('Reset UI layout') ?></option>
- <option value="qmcHKhelp"><?php echo __('Keyboard shortcuts help') ?></option>
- </optgroup>
-
- </select>
- </div>
-
<form id="main_toolbar_form" action="" onsubmit='return false'>
<button id="collapse_feeds_btn" onclick="collapse_feedlist()"
</form>
+ <div class="actionChooser">
+ <select id="quickMenuChooser" onchange="quickMenuChange()">
+ <option value="qmcDefault" selected="selected"><?php echo __('Actions...') ?></option>
+ <option value="qmcSearch"><?php echo __('Search...') ?></option>
+ <optgroup label="<?php echo __('Feed actions:') ?>">
+ <option value="qmcAddFeed"><?php echo __('Subscribe to feed...') ?></option>
+ <option value="qmcEditFeed"><?php echo __('Edit this feed...') ?></option>
+ <option value="qmcRescoreFeed"><?php echo __('Rescore feed') ?></option>
+ <option value="qmcRemoveFeed"><?php echo __('Unsubscribe') ?></option>
+ </optgroup>
+ <optgroup label="<?php echo __('All feeds:') ?>">
+ <option value="qmcCatchupAll"><?php echo __('Mark as read') ?></option>
+ <option value="qmcShowOnlyUnread"><?php echo __('(Un)hide read feeds') ?></option>
+ </optgroup>
+ <optgroup label="<?php echo __('Categories:') ?>">
+
+ <option value="qmcToggleReorder"><?php echo __('Toggle reordering mode') ?></option>
+ <option value="qmcResetCats"><?php echo __('Reset order') ?></option>
+ </optgroup>
+
+ <optgroup label="<?php echo __('Other actions:') ?>">
+
+ <option value="qmcAddLabel"><?php echo __('Create label...') ?></option>
+ <option value="qmcAddFilter"><?php echo __('Create filter...') ?></option>
+ <option value="qmcResetUI"><?php echo __('Reset UI layout') ?></option>
+ <option value="qmcHKhelp"><?php echo __('Keyboard shortcuts help') ?></option>
+ </optgroup>
+
+ </select>
+ </div>
+
</div>
<div id="headlines-wrap-inner" dojoType="dijit.layout.BorderContainer" region="center">
</div>
</div>
-<div id="footer" dojoType="dijit.layout.ContentPane" region="bottom">
+<!-- <div id="footer" dojoType="dijit.layout.ContentPane" region="bottom">
<a href="http://tt-rss.org/">Tiny Tiny RSS</a>
<?php if (!defined('HIDE_VERSION')) { ?>
v<?php echo VERSION ?>
<?php } ?>
© 2005–<?php echo date('Y') ?> <a href="http://fakecake.org/">Andrew Dolgov</a>
-</div>
+</div> -->
</div>
if (!transport_error_check(transport)) return;
- clean_feed_selections();
-
var is_cat = false;
var feed_id = false;
img.src = img.alt;
}
- var f = $("headlines-frame");
try {
if (feed_cur_page == 0) {
- //console.log("resetting headlines scrollTop");
- f.scrollTop = 0;
+ $("headlines-frame").scrollTop = 0;
}
} catch (e) { };
$("headlinesInnerContainer").innerHTML = headlines_content.firstChild.nodeValue;
$("headlines-toolbar").innerHTML = headlines_toolbar.firstChild.nodeValue;
+ dojo.parser.parse("headlines-toolbar");
dijit.byId("main").resize();
var cache_prefix = "";
if (!disable_cache) {
cache_inject(cache_prefix + feed_id,
- headlines.firstChild.nodeValue, headlines_unread);
+ $("headlines-frame").innerHTML, headlines_unread);
}
} else {
console.warn("headlines_callback: returned no data");
- f.innerHTML = "<div class='whiteBox'>" + __('Could not update headlines (missing XML data)') + "</div>";
+ $('headlinesInnerContainer').innerHTML = "<div class='whiteBox'>" + __('Could not update headlines (missing XML data)') + "</div>";
}
} else {
} else {
console.warn("headlines_callback: returned no XML object");
- f.innerHTML = "<div class='whiteBox'>" + __('Could not update headlines (missing XML object)') + "</div>";
+ $('headlinesInnerContainer').innerHTML = "<div class='whiteBox'>" + __('Could not update headlines (missing XML object)') + "</div>";
}
}
+function headlineActionsChange(elem) {
+ try {
+ var op = elem[elem.selectedIndex].value;
+
+ eval(op);
+
+ elem.selectedIndex = 0;
+ } catch (e) {
+ exception_error("headlineActionsChange", e);
+ }
+}