backend/viewfeed: use JSON

This commit is contained in:
Andrew Dolgov 2011-03-18 12:55:45 +03:00
parent 009646d23a
commit bd202c3f89
4 changed files with 343 additions and 400 deletions

View File

@ -50,14 +50,9 @@
if ((!$op || $op == "rpc" || $op == "rss" || if ((!$op || $op == "rpc" || $op == "rss" ||
$op == "digestSend" || $op == "dlg" || $op == "digestSend" || $op == "dlg" ||
$op == "viewfeed" || $op == "publish" ||
$op == "globalUpdateFeeds") && !$_REQUEST["noxml"]) { $op == "globalUpdateFeeds") && !$_REQUEST["noxml"]) {
header("Content-Type: application/xml; charset=utf-8"); header("Content-Type: application/xml; charset=utf-8");
if (ENABLE_GZIP_OUTPUT) {
ob_start("ob_gzhandler");
}
} else { } else {
if (!$_REQUEST["noxml"]) { if (!$_REQUEST["noxml"]) {
header("Content-Type: text/html; charset=utf-8"); header("Content-Type: text/html; charset=utf-8");
@ -66,6 +61,10 @@
} }
} }
if (ENABLE_GZIP_OUTPUT) {
ob_start("ob_gzhandler");
}
if (SINGLE_USER_MODE) { if (SINGLE_USER_MODE) {
authenticate_user($link, "admin", null); authenticate_user($link, "admin", null);
} }
@ -246,10 +245,9 @@
case "viewfeed": case "viewfeed":
$print_exec_time = true;
$timing_info = getmicrotime(); $timing_info = getmicrotime();
print "<reply>"; $reply = array();
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("0", $timing_info); if ($_REQUEST["debug"]) $timing_info = print_checkpoint("0", $timing_info);
@ -269,8 +267,26 @@
* when there's nothing to load - e.g. no stuff in fresh feed */ * when there's nothing to load - e.g. no stuff in fresh feed */
if ($feed == -5) { if ($feed == -5) {
generate_dashboard_feed($link); print json_encode(generate_dashboard_feed($link));
print "</reply>"; return;
}
$result = false;
if ($feed < -10) {
$label_feed = -10-$feed;
$result = db_query($link, "SELECT id FROM ttrss_labels2 WHERE
id = '$label_feed' AND owner_uid = " . $_SESSION['uid']);
} else if (!$cat_view && $feed > 0) {
$result = db_query($link, "SELECT id FROM ttrss_feeds WHERE
id = '$feed' AND owner_uid = " . $_SESSION['uid']);
} else if ($cat_view) {
$result = db_query($link, "SELECT id FROM ttrss_feed_categories WHERE
id = '$feed' AND owner_uid = " . $_SESSION['uid']);
}
if ($result && db_num_rows($result) == 0) {
print json_encode(generate_error_feed($link, __("Feed not found.")));
return; return;
} }
@ -290,11 +306,14 @@
WHERE id = '$feed' AND owner_uid = ".$_SESSION["uid"]); WHERE id = '$feed' AND owner_uid = ".$_SESSION["uid"]);
} }
if (!$next_unread_feed) { $reply['headlines'] = array();
print "<headlines id=\"$feed\" is_cat=\"$cat_view\">";
} else { if (!$next_unread_feed)
print "<headlines id=\"$next_unread_feed\" is_cat=\"$cat_view\">"; $reply['headlines']['id'] = $feed;
} else
$reply['headlines']['id'] = $next_unread_feed;
$reply['headlines']['is_cat'] = (bool) $cat_view;
$override_order = false; $override_order = false;
@ -332,7 +351,7 @@
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("04", $timing_info); if ($_REQUEST["debug"]) $timing_info = print_checkpoint("04", $timing_info);
$ret = outputHeadlinesList($link, $feed, $subop, $ret = format_headlines_list($link, $feed, $subop,
$view_mode, $limit, $cat_view, $next_unread_feed, $offset, $view_mode, $limit, $cat_view, $next_unread_feed, $offset,
$vgroup_last_feed, $override_order); $vgroup_last_feed, $override_order);
@ -342,64 +361,45 @@
$disable_cache = $ret[3]; $disable_cache = $ret[3];
$vgroup_last_feed = $ret[4]; $vgroup_last_feed = $ret[4];
print "</headlines>"; $reply['headlines']['content'] = $ret[5];
$reply['headlines']['toolbar'] = $ret[6];
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("05", $timing_info); if ($_REQUEST["debug"]) $timing_info = print_checkpoint("05", $timing_info);
//print "<headlines-count value=\"$headlines_count\"/>";
//print "<vgroup-last-feed value=\"$vgroup_last_feed\"/>";
$headlines_unread = ccache_find($link, $returned_feed, $_SESSION["uid"], $headlines_unread = ccache_find($link, $returned_feed, $_SESSION["uid"],
$cat_view, true); $cat_view, true);
if ($headlines_unread == -1) { if ($headlines_unread == -1) {
$headlines_unread = getFeedUnread($link, $returned_feed, $cat_view); $headlines_unread = getFeedUnread($link, $returned_feed, $cat_view);
} }
//print "<headlines-unread value=\"$headlines_unread\"/>"; $reply['headlines-info'] = array("count" => (int) $headlines_count,
//printf("<disable-cache value=\"%d\"/>", $disable_cache);
print "<headlines-info><![CDATA[";
$info = array("count" => (int) $headlines_count,
"vgroup_last_feed" => $vgroup_last_feed, "vgroup_last_feed" => $vgroup_last_feed,
"unread" => (int) $headlines_unread, "unread" => (int) $headlines_unread,
"disable_cache" => (bool) $disable_cache); "disable_cache" => (bool) $disable_cache);
print json_encode($info); if ($_REQUEST["debug"]) $timing_info = print_checkpoint("20", $timing_info);
print "]]></headlines-info>";
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("10", $timing_info);
/* if (is_array($topmost_article_ids) && !get_pref($link, 'COMBINED_DISPLAY_MODE') && !$_SESSION["bw_limit"]) {
if (is_array($topmost_article_ids) && !get_pref($link, 'COMBINED_DISPLAY_MODE') && !$_SESSION["bw_limit"]) {
$articles = array(); $articles = array();
foreach ($topmost_article_ids as $id) { foreach ($topmost_article_ids as $id) {
array_push($articles, format_article($link, $id, $feed, false)); array_push($articles, format_article($link, $id, $feed, false));
} }
print "<articles><![CDATA["; $reply['articles'] = $articles;
print json_encode($articles); }
print "]]></articles>";
} */
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("20", $timing_info);
//if (get_pref($link, 'COMBINED_DISPLAY_MODE') || $subop) {
if ($subop) { if ($subop) {
print "<counters><![CDATA["; $reply['counters'] = getAllCounters($link, $omode, $feed);
print json_encode(getAllCounters($link, $omode, $feed));
print "]]></counters>";
} }
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("30", $timing_info); if ($_REQUEST["debug"]) $timing_info = print_checkpoint("30", $timing_info);
print_runtime_info($link); $reply['runtime-info'] = make_runtime_info($link);
print json_encode($reply);
print "</reply>";
break; // viewfeed break; // viewfeed
case "pref-feeds": case "pref-feeds":

View File

@ -44,7 +44,7 @@ function viewfeed(feed, subop, is_cat, offset) {
/* if (getInitParam("theme") == "" || getInitParam("theme") == "compact") { /* if (getInitParam("theme") == "" || getInitParam("theme") == "compact") {
if (getInitParam("hide_feedlist") == 1) { if (getInitParam("hide_feedlist") == 1) {
Element.hide("feeds-holder"); Element.hide("feeds-holder");
} }
} */ } */
dijit.byId("content-tabs").selectChild( dijit.byId("content-tabs").selectChild(
@ -79,7 +79,7 @@ function viewfeed(feed, subop, is_cat, offset) {
return; return;
} }
_infscroll_request_sent = timestamp; _infscroll_request_sent = timestamp;
} }
hideAuxDlg(); hideAuxDlg();
@ -141,7 +141,7 @@ function viewfeed(feed, subop, is_cat, offset) {
console.log(query); console.log(query);
/* var unread_ctr = -1; /* var unread_ctr = -1;
if (!is_cat) unread_ctr = getFeedUnread(feed); if (!is_cat) unread_ctr = getFeedUnread(feed);
var cache_check = false; var cache_check = false;
@ -149,7 +149,7 @@ function viewfeed(feed, subop, is_cat, offset) {
if (unread_ctr != -1 && !page_offset && !force_nocache && !subop) { if (unread_ctr != -1 && !page_offset && !force_nocache && !subop) {
var cache_prefix = ""; var cache_prefix = "";
if (is_cat) { if (is_cat) {
cache_prefix = "C:"; cache_prefix = "C:";
} else { } else {
@ -163,8 +163,8 @@ function viewfeed(feed, subop, is_cat, offset) {
if (cache_check) { if (cache_check) {
setActiveFeedId(feed, is_cat); setActiveFeedId(feed, is_cat);
$("headlines-frame").innerHTML = cache_find_param(cache_prefix + feed, $("headlines-frame").innerHTML = cache_find_param(cache_prefix + feed,
unread_ctr); unread_ctr);
request_counters(); request_counters();
@ -181,34 +181,30 @@ function viewfeed(feed, subop, is_cat, offset) {
new Ajax.Request("backend.php", { new Ajax.Request("backend.php", {
parameters: query, parameters: query,
onComplete: function(transport) { onComplete: function(transport) {
setFeedExpandoIcon(feed, is_cat, 'images/blank_icon.gif'); setFeedExpandoIcon(feed, is_cat, 'images/blank_icon.gif');
headlines_callback2(transport, page_offset); headlines_callback2(transport, page_offset);
} }); } });
// } // }
} catch (e) { } catch (e) {
exception_error("viewfeed", e); exception_error("viewfeed", e);
} }
} }
function feedlist_init() { function feedlist_init() {
try { try {
console.log("in feedlist init"); console.log("in feedlist init");
hideOrShowFeeds(getInitParam("hide_read_feeds") == 1); hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
document.onkeydown = hotkey_handler; document.onkeydown = hotkey_handler;
setTimeout("hotkey_prefix_timeout()", 5*1000); setTimeout("hotkey_prefix_timeout()", 5*1000);
if (!getActiveFeedId()) { if (!getActiveFeedId()) {
if (getInitParam("cdm_auto_catchup") != 1) { setTimeout("viewfeed(-3)", 100);
setTimeout("viewfeed(-3)", 100); }
} else {
setTimeout("viewfeed(-5)", 100);
}
}
console.log("T:" + console.log("T:" +
getInitParam("cdm_auto_catchup") + " " + getFeedUnread(-3)); getInitParam("cdm_auto_catchup") + " " + getFeedUnread(-3));
hideOrShowFeeds(getInitParam("hide_read_feeds") == 1); hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
@ -230,7 +226,7 @@ function request_counters_real() {
new Ajax.Request("backend.php", { new Ajax.Request("backend.php", {
parameters: query, parameters: query,
onComplete: function(transport) { onComplete: function(transport) {
try { try {
handle_rpc_json(transport); handle_rpc_json(transport);
} catch (e) { } catch (e) {
@ -316,7 +312,7 @@ function parse_counters(elems, scheduled_call) {
// TODO: enable new content notification for categories // TODO: enable new content notification for categories
if (!activeFeedIsCat() && id == getActiveFeedId() if (!activeFeedIsCat() && id == getActiveFeedId()
&& ctr > getFeedUnread(id) && scheduled_call) { && ctr > getFeedUnread(id) && scheduled_call) {
displayNewContentPrompt(id); displayNewContentPrompt(id);
} }
@ -329,7 +325,7 @@ function parse_counters(elems, scheduled_call) {
if (id > 0) { if (id > 0) {
if (has_img) { if (has_img) {
setFeedIcon(id, false, setFeedIcon(id, false,
getInitParam("icons_url") + "/" + id + ".ico"); getInitParam("icons_url") + "/" + id + ".ico");
} else { } else {
setFeedIcon(id, false, 'images/blank_icon.gif'); setFeedIcon(id, false, 'images/blank_icon.gif');
@ -337,7 +333,7 @@ function parse_counters(elems, scheduled_call) {
} }
} }
} }
hideOrShowFeeds(getInitParam("hide_read_feeds") == 1); hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
} catch (e) { } catch (e) {
@ -349,7 +345,7 @@ function getFeedUnread(feed, is_cat) {
try { try {
var tree = dijit.byId("feedTree"); var tree = dijit.byId("feedTree");
if (tree && tree.model) if (tree && tree.model)
return tree.model.getFeedUnread(feed, is_cat); return tree.model.getFeedUnread(feed, is_cat);
} catch (e) { } catch (e) {
@ -370,20 +366,20 @@ function hideOrShowFeeds(hide) {
return tree.hideRead(hide, getInitParam("hide_read_shows_special")); return tree.hideRead(hide, getInitParam("hide_read_shows_special"));
} }
function getFeedName(feed, is_cat) { function getFeedName(feed, is_cat) {
var tree = dijit.byId("feedTree"); var tree = dijit.byId("feedTree");
if (tree && tree.model) if (tree && tree.model)
return tree.model.getFeedValue(feed, is_cat, 'name'); return tree.model.getFeedValue(feed, is_cat, 'name');
} }
function getFeedValue(feed, is_cat, key) { function getFeedValue(feed, is_cat, key) {
try { try {
var tree = dijit.byId("feedTree"); var tree = dijit.byId("feedTree");
if (tree && tree.model) if (tree && tree.model)
return tree.model.getFeedValue(feed, is_cat, key); return tree.model.getFeedValue(feed, is_cat, key);
} catch (e) { } catch (e) {
// //
} }
@ -394,7 +390,7 @@ function setFeedUnread(feed, is_cat, unread) {
try { try {
var tree = dijit.byId("feedTree"); var tree = dijit.byId("feedTree");
if (tree && tree.model) if (tree && tree.model)
return tree.model.setFeedUnread(feed, is_cat, unread); return tree.model.setFeedUnread(feed, is_cat, unread);
} catch (e) { } catch (e) {
@ -406,7 +402,7 @@ function setFeedValue(feed, is_cat, key, value) {
try { try {
var tree = dijit.byId("feedTree"); var tree = dijit.byId("feedTree");
if (tree && tree.model) if (tree && tree.model)
return tree.model.setFeedValue(feed, is_cat, key, value); return tree.model.setFeedValue(feed, is_cat, key, value);
} catch (e) { } catch (e) {

View File

@ -4019,136 +4019,137 @@
mb_strtolower(strip_tags($title), 'utf-8')); mb_strtolower(strip_tags($title), 'utf-8'));
} }
function print_headline_subtoolbar($link, $feed_site_url, $feed_title, function format_headline_subtoolbar($link, $feed_site_url, $feed_title,
$feed_id, $is_cat, $search, $match_on, $feed_id, $is_cat, $search, $match_on,
$search_mode, $view_mode, $error) { $search_mode, $view_mode, $error) {
$page_prev_link = "viewFeedGoPage(-1)"; $page_prev_link = "viewFeedGoPage(-1)";
$page_next_link = "viewFeedGoPage(1)"; $page_next_link = "viewFeedGoPage(1)";
$page_first_link = "viewFeedGoPage(0)"; $page_first_link = "viewFeedGoPage(0)";
$catchup_page_link = "catchupPage()"; $catchup_page_link = "catchupPage()";
$catchup_feed_link = "catchupCurrentFeed()"; $catchup_feed_link = "catchupCurrentFeed()";
$catchup_sel_link = "catchupSelection()"; $catchup_sel_link = "catchupSelection()";
$archive_sel_link = "archiveSelection()"; $archive_sel_link = "archiveSelection()";
$delete_sel_link = "deleteSelection()"; $delete_sel_link = "deleteSelection()";
$sel_all_link = "selectArticles('all')"; $sel_all_link = "selectArticles('all')";
$sel_unread_link = "selectArticles('unread')"; $sel_unread_link = "selectArticles('unread')";
$sel_none_link = "selectArticles('none')"; $sel_none_link = "selectArticles('none')";
$sel_inv_link = "selectArticles('invert')"; $sel_inv_link = "selectArticles('invert')";
$tog_unread_link = "selectionToggleUnread()"; $tog_unread_link = "selectionToggleUnread()";
$tog_marked_link = "selectionToggleMarked()"; $tog_marked_link = "selectionToggleMarked()";
$tog_published_link = "selectionTogglePublished()"; $tog_published_link = "selectionTogglePublished()";
print "<div id=\"subtoolbar_main\">"; $reply = "<div id=\"subtoolbar_main\">";
print __('Select:')." $reply .= __('Select:')."
<a href=\"#\" onclick=\"$sel_all_link\">".__('All')."</a>, <a href=\"#\" onclick=\"$sel_all_link\">".__('All')."</a>,
<a href=\"#\" onclick=\"$sel_unread_link\">".__('Unread')."</a>, <a href=\"#\" onclick=\"$sel_unread_link\">".__('Unread')."</a>,
<a href=\"#\" onclick=\"$sel_inv_link\">".__('Invert')."</a>, <a href=\"#\" onclick=\"$sel_inv_link\">".__('Invert')."</a>,
<a href=\"#\" onclick=\"$sel_none_link\">".__('None')."</a></li>"; <a href=\"#\" onclick=\"$sel_none_link\">".__('None')."</a></li>";
print " "; $reply .= " ";
print "<select dojoType=\"dijit.form.Select\" $reply .= "<select dojoType=\"dijit.form.Select\"
onchange=\"headlineActionsChange(this)\">"; onchange=\"headlineActionsChange(this)\">";
print "<option value=\"false\">".__('Actions...')."</option>"; $reply .= "<option value=\"false\">".__('Actions...')."</option>";
print "<option value=\"0\" disabled=\"1\">".__('Selection toggle:')."</option>"; $reply .= "<option value=\"0\" disabled=\"1\">".__('Selection toggle:')."</option>";
print "<option value=\"$tog_unread_link\">".__('Unread')."</option> $reply .= "<option value=\"$tog_unread_link\">".__('Unread')."</option>
<option value=\"$tog_marked_link\">".__('Starred')."</option> <option value=\"$tog_marked_link\">".__('Starred')."</option>
<option value=\"$tog_published_link\">".__('Published')."</option>"; <option value=\"$tog_published_link\">".__('Published')."</option>";
print "<option value=\"0\" disabled=\"1\">".__('Selection:')."</option>"; $reply .= "<option value=\"0\" disabled=\"1\">".__('Selection:')."</option>";
print "<option value=\"$catchup_sel_link\">".__('Mark as read')."</option>"; $reply .= "<option value=\"$catchup_sel_link\">".__('Mark as read')."</option>";
if ($feed_id != "0") { if ($feed_id != "0") {
print "<option value=\"$archive_sel_link\">".__('Archive')."</option>"; $reply .= "<option value=\"$archive_sel_link\">".__('Archive')."</option>";
} else { } else {
print "<option value=\"$archive_sel_link\">".__('Move back')."</option>"; $reply .= "<option value=\"$archive_sel_link\">".__('Move back')."</option>";
print "<option value=\"$delete_sel_link\">".__('Delete')."</option>"; $reply .= "<option value=\"$delete_sel_link\">".__('Delete')."</option>";
}
print "<option value=\"emailArticle(false)\">".__('Forward by email').
"</option>";
$rss_link = htmlspecialchars(get_self_url_prefix() .
"/backend.php?op=rss&id=$feed_id&is_cat=$is_cat&view_mode=$view_mode$search_q");
print "<option value=\"0\" disabled=\"1\">".__('Feed:')."</option>";
print "<option value=\"catchupPage()\">".__('Mark as read')."</option>";
print "<option value=\"displayDlg('generatedFeed', '$feed_id:$is_cat:$rss_link')\">".__('View as RSS')."</option>";
print "</select>";
print "</div>";
print "<div id=\"subtoolbar_ftitle\">";
if ($feed_site_url) {
$target = "target=\"_blank\"";
print "<a title=\"".__("Visit the website")."\" $target href=\"$feed_site_url\">".
truncate_string($feed_title,30)."</a>";
if ($error) {
print " (<span class=\"error\" title=\"$error\">Error</span>)";
}
} else {
if ($feed_id < -10) {
$label_id = -11-$feed_id;
$result = db_query($link, "SELECT fg_color, bg_color
FROM ttrss_labels2 WHERE id = '$label_id' AND owner_uid = " .
$_SESSION["uid"]);
if (db_num_rows($result) != 0) {
$fg_color = db_fetch_result($result, 0, "fg_color");
$bg_color = db_fetch_result($result, 0, "bg_color");
print "<span style='background : $bg_color; color : $fg_color'>";
print $feed_title;
print "</span>";
} else {
print $feed_title;
}
} else {
print $feed_title;
}
}
if ($search) {
$search_q = "&q=$search&m=$match_on&smode=$search_mode";
} else {
$search_q = "";
}
// Adaptive doesn't really make any sense for generated feeds
// All Articles is the default, so no need to insert it either
if ($view_mode == "adaptive" || $view_mode == "all_articles")
$view_mode = "";
else
$view_mode = "&view-mode=$view_mode";
print "
<a href=\"#\"
title=\"".__("View as RSS feed")."\"
onclick=\"displayDlg('generatedFeed', '$feed_id:$is_cat:$rss_link')\">
<img class=\"noborder\" style=\"vertical-align : middle\" src=\"images/feed-icon-12x12.png\"></a>";
print "</div>";
} }
$reply .= "<option value=\"emailArticle(false)\">".__('Forward by email').
"</option>";
$rss_link = htmlspecialchars(get_self_url_prefix() .
"/backend.php?op=rss&id=$feed_id&is_cat=$is_cat&view_mode=$view_mode$search_q");
$reply .= "<option value=\"0\" disabled=\"1\">".__('Feed:')."</option>";
$reply .= "<option value=\"catchupPage()\">".__('Mark as read')."</option>";
$reply .= "<option value=\"displayDlg('generatedFeed', '$feed_id:$is_cat:$rss_link')\">".__('View as RSS')."</option>";
$reply .= "</select>";
$reply .= "</div>";
$reply .= "<div id=\"subtoolbar_ftitle\">";
if ($feed_site_url) {
$target = "target=\"_blank\"";
$reply .= "<a title=\"".__("Visit the website")."\" $target href=\"$feed_site_url\">".
truncate_string($feed_title,30)."</a>";
if ($error) {
$reply .= " (<span class=\"error\" title=\"$error\">Error</span>)";
}
} else {
if ($feed_id < -10) {
$label_id = -11-$feed_id;
$result = db_query($link, "SELECT fg_color, bg_color
FROM ttrss_labels2 WHERE id = '$label_id' AND owner_uid = " .
$_SESSION["uid"]);
if (db_num_rows($result) != 0) {
$fg_color = db_fetch_result($result, 0, "fg_color");
$bg_color = db_fetch_result($result, 0, "bg_color");
$reply .= "<span style='background : $bg_color; color : $fg_color'>";
$reply .= $feed_title;
$reply .= "</span>";
} else {
$reply .= $feed_title;
}
} else {
$reply .= $feed_title;
}
}
if ($search) {
$search_q = "&q=$search&m=$match_on&smode=$search_mode";
} else {
$search_q = "";
}
// Adaptive doesn't really make any sense for generated feeds
// All Articles is the default, so no need to insert it either
if ($view_mode == "adaptive" || $view_mode == "all_articles")
$view_mode = "";
else
$view_mode = "&view-mode=$view_mode";
$reply .= "
<a href=\"#\"
title=\"".__("View as RSS feed")."\"
onclick=\"displayDlg('generatedFeed', '$feed_id:$is_cat:$rss_link')\">
<img class=\"noborder\" style=\"vertical-align : middle\" src=\"images/feed-icon-12x12.png\"></a>";
$reply .= "</div>";
return $reply;
}
function outputFeedList($link, $special = true) { function outputFeedList($link, $special = true) {
$feedlist = array(); $feedlist = array();
@ -4730,12 +4731,14 @@
} }
function outputHeadlinesList($link, $feed, $subop, $view_mode, $limit, $cat_view, function format_headlines_list($link, $feed, $subop, $view_mode, $limit, $cat_view,
$next_unread_feed, $offset, $vgr_last_feed = false, $next_unread_feed, $offset, $vgr_last_feed = false,
$override_order = false) { $override_order = false) {
$disable_cache = false; $disable_cache = false;
$reply = array();
$timing_info = getmicrotime(); $timing_info = getmicrotime();
$topmost_article_ids = array(); $topmost_article_ids = array();
@ -4780,8 +4783,7 @@
"SELECT id FROM ttrss_feeds WHERE id = '$feed' LIMIT 1"); "SELECT id FROM ttrss_feeds WHERE id = '$feed' LIMIT 1");
if (db_num_rows($result) == 0) { if (db_num_rows($result) == 0) {
print "<div align='center'>".__('Feed not found.')."</div>"; $reply['content'] = "<div align='center'>".__('Feed not found.')."</div>";
return;
} }
} }
@ -4837,34 +4839,17 @@
$vgroup_last_feed = $vgr_last_feed; $vgroup_last_feed = $vgr_last_feed;
/* if ($feed == -2) {
$feed_site_url = article_publish_url($link);
} */
/// STOP ////////////////////////////////////////////////////////////////////////////////// /// STOP //////////////////////////////////////////////////////////////////////////////////
print "<toolbar><![CDATA[";
if (!$offset) { if (!$offset) {
// print "<div id=\"headlinesContainer\" $rtl_tag>";
if (!$result) {
print "<div align='center'>".__("Could not display feed (query failed). Please check label match syntax or local configuration.")."</div>";
return;
}
if (db_num_rows($result) > 0) { if (db_num_rows($result) > 0) {
print_headline_subtoolbar($link, $feed_site_url, $feed_title, $reply['toolbar'] = format_headline_subtoolbar($link, $feed_site_url, $feed_title,
$feed, $cat_view, $search, $match_on, $search_mode, $view_mode, $feed, $cat_view, $search, $match_on, $search_mode, $view_mode,
$last_error); $last_error);
// print "<div id=\"headlinesInnerContainer\" onscroll=\"headlines_scroll_handler()\">";
} }
} }
print "]]></toolbar><content><![CDATA[";
$headlines_count = db_num_rows($result); $headlines_count = db_num_rows($result);
if (db_num_rows($result) > 0) { if (db_num_rows($result) > 0) {
@ -5006,7 +4991,7 @@
$vf_catchup_link = "(<a onclick='javascript:catchupFeedInGroup($feed_id);' href='#'>".__('mark as read')."</a>)"; $vf_catchup_link = "(<a onclick='javascript:catchupFeedInGroup($feed_id);' href='#'>".__('mark as read')."</a>)";
print "<div class='cdmFeedTitle'>". $reply['content'] .= "<div class='cdmFeedTitle'>".
"<div style=\"float : right\">$feed_icon_img</div>". "<div style=\"float : right\">$feed_icon_img</div>".
"<a href=\"#\" onclick=\"viewfeed($feed_id)\">". "<a href=\"#\" onclick=\"viewfeed($feed_id)\">".
$line["feed_title"]."</a> $vf_catchup_link</div>"; $line["feed_title"]."</a> $vf_catchup_link</div>";
@ -5017,36 +5002,36 @@
$mouseover_attrs = "onmouseover='postMouseIn($id)' $mouseover_attrs = "onmouseover='postMouseIn($id)'
onmouseout='postMouseOut($id)'"; onmouseout='postMouseOut($id)'";
print "<div class='$class' id='RROW-$id' $mouseover_attrs>"; $reply['content'] .= "<div class='$class' id='RROW-$id' $mouseover_attrs>";
print "<div class='hlUpdPic'>$update_pic</div>"; $reply['content'] .= "<div class='hlUpdPic'>$update_pic</div>";
print "<div class='hlLeft'>"; $reply['content'] .= "<div class='hlLeft'>";
print "<input type=\"checkbox\" onclick=\"tSR(this)\" $reply['content'] .= "<input type=\"checkbox\" onclick=\"tSR(this)\"
id=\"RCHK-$id\">"; id=\"RCHK-$id\">";
print "$marked_pic"; $reply['content'] .= "$marked_pic";
print "$published_pic"; $reply['content'] .= "$published_pic";
print "</div>"; $reply['content'] .= "</div>";
print "<div onclick='return hlClicked(event, $id)' $reply['content'] .= "<div onclick='return hlClicked(event, $id)'
class=\"hlTitle\"><span class='hlContent$hlc_suffix'>"; class=\"hlTitle\"><span class='hlContent$hlc_suffix'>";
print "<a id=\"RTITLE-$id\" $reply['content'] .= "<a id=\"RTITLE-$id\"
href=\"" . htmlspecialchars($line["link"]) . "\" href=\"" . htmlspecialchars($line["link"]) . "\"
onclick=\"return false;\">" . onclick=\"return false;\">" .
$line["title"]; $line["title"];
if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) { if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) {
if ($content_preview) { if ($content_preview) {
print "<span class=\"contentPreview\"> - $content_preview</span>"; $reply['content'] .= "<span class=\"contentPreview\"> - $content_preview</span>";
} }
} }
print "</a></span>"; $reply['content'] .= "</a></span>";
print $labels_str; $reply['content'] .= $labels_str;
/* if (!get_pref($link, 'VFEED_GROUP_BY_FEED')) { /* if (!get_pref($link, 'VFEED_GROUP_BY_FEED')) {
if (@$line["feed_title"]) { if (@$line["feed_title"]) {
@ -5057,23 +5042,21 @@
} }
} */ } */
print "</div>"; $reply['content'] .= "</div>";
$reply['content'] .= "<div class=\"hlRight\">";
$reply['content'] .= "<span class=\"hlUpdated\">$updated_fmt</span>";
print "<div class=\"hlRight\">"; $reply['content'] .= $score_pic;
print "<span class=\"hlUpdated\">$updated_fmt</span>";
print $score_pic;
if ($line["feed_title"] && !get_pref($link, 'VFEED_GROUP_BY_FEED')) { if ($line["feed_title"] && !get_pref($link, 'VFEED_GROUP_BY_FEED')) {
print "<span onclick=\"viewfeed($feed_id)\" $reply['content'] .= "<span onclick=\"viewfeed($feed_id)\"
title=\"".htmlspecialchars($line['feed_title'])."\"> title=\"".htmlspecialchars($line['feed_title'])."\">
$feed_icon_img<span>"; $feed_icon_img<span>";
} }
print "</div>"; $reply['content'] .= "</div>";
print "</div>"; $reply['content'] .= "</div>";
} else { } else {
@ -5095,7 +5078,7 @@
//$feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\" alt=\"\">"; //$feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\" alt=\"\">";
} }
print "<div class='cdmFeedTitle'>". $reply['content'] .= "<div class='cdmFeedTitle'>".
"<div style=\"float : right\">$feed_icon_img</div>". "<div style=\"float : right\">$feed_icon_img</div>".
"<a href=\"#\" onclick=\"viewfeed($feed_id)\">". "<a href=\"#\" onclick=\"viewfeed($feed_id)\">".
$line["feed_title"]."</a> $vf_catchup_link</div>"; $line["feed_title"]."</a> $vf_catchup_link</div>";
@ -5107,31 +5090,31 @@
$mouseover_attrs = "onmouseover='postMouseIn($id)' $mouseover_attrs = "onmouseover='postMouseIn($id)'
onmouseout='postMouseOut($id)'"; onmouseout='postMouseOut($id)'";
print "<div class=\"$class\" $reply['content'] .= "<div class=\"$class\"
id=\"RROW-$id\" $mouseover_attrs'>"; id=\"RROW-$id\" $mouseover_attrs'>";
print "<div class=\"cdmHeader\">"; $reply['content'] .= "<div class=\"cdmHeader\">";
print "<div style='float : right'>"; $reply['content'] .= "<div style='float : right'>";
print "<span class='updated'>$updated_fmt</span>"; $reply['content'] .= "<span class='updated'>$updated_fmt</span>";
print "$score_pic"; $reply['content'] .= "$score_pic";
if (!get_pref($link, "VFEED_GROUP_BY_FEED") && $line["feed_title"]) { if (!get_pref($link, "VFEED_GROUP_BY_FEED") && $line["feed_title"]) {
print "<span style=\"cursor : pointer\" $reply['content'] .= "<span style=\"cursor : pointer\"
title=\"".htmlspecialchars($line["feed_title"])."\" title=\"".htmlspecialchars($line["feed_title"])."\"
onclick=\"viewfeed($feed_id)\">$feed_icon_img</span>"; onclick=\"viewfeed($feed_id)\">$feed_icon_img</span>";
} }
print "<div class=\"updPic\">$update_pic</div>"; $reply['content'] .= "<div class=\"updPic\">$update_pic</div>";
print "</div>"; $reply['content'] .= "</div>";
print "<input type=\"checkbox\" onclick=\"toggleSelectRowById(this, $reply['content'] .= "<input type=\"checkbox\" onclick=\"toggleSelectRowById(this,
'RROW-$id')\" id=\"RCHK-$id\"/>"; 'RROW-$id')\" id=\"RCHK-$id\"/>";
print "$marked_pic"; $reply['content'] .= "$marked_pic";
print "$published_pic"; $reply['content'] .= "$published_pic";
print "<span id=\"RTITLE-$id\" $reply['content'] .= "<span id=\"RTITLE-$id\"
onclick=\"return cdmClicked(event, $id);\" onclick=\"return cdmClicked(event, $id);\"
class=\"titleWrap$hlc_suffix\"> class=\"titleWrap$hlc_suffix\">
<a class=\"title\" <a class=\"title\"
@ -5141,25 +5124,25 @@
truncate_string($line["title"], 100) . truncate_string($line["title"], 100) .
" $entry_author</a>"; " $entry_author</a>";
print $labels_str; $reply['content'] .= $labels_str;
if (!$expand_cdm) if (!$expand_cdm)
$content_hidden = "style=\"display : none\""; $content_hidden = "style=\"display : none\"";
else else
$excerpt_hidden = "style=\"display : none\""; $excerpt_hidden = "style=\"display : none\"";
print "<span $excerpt_hidden $reply['content'] .= "<span $excerpt_hidden
id=\"CEXC-$id\" class=\"cdmExcerpt\"> - $content_preview</span>"; id=\"CEXC-$id\" class=\"cdmExcerpt\"> - $content_preview</span>";
print "</span>"; $reply['content'] .= "</span>";
print "</div>"; $reply['content'] .= "</div>";
print "<div class=\"cdmContent\" $content_hidden $reply['content'] .= "<div class=\"cdmContent\" $content_hidden
onclick=\"return cdmClicked(event, $id);\" onclick=\"return cdmClicked(event, $id);\"
id=\"CICD-$id\">"; id=\"CICD-$id\">";
print "<div class=\"cdmContentInner\">"; $reply['content'] .= "<div class=\"cdmContentInner\">";
if ($line["orig_feed_id"]) { if ($line["orig_feed_id"]) {
@ -5168,23 +5151,23 @@
if (db_num_rows($tmp_result) != 0) { if (db_num_rows($tmp_result) != 0) {
print "<div clear='both'>"; $reply['content'] .= "<div clear='both'>";
print __("Originally from:"); $reply['content'] .= __("Originally from:");
print "&nbsp;"; $reply['content'] .= "&nbsp;";
$tmp_line = db_fetch_assoc($tmp_result); $tmp_line = db_fetch_assoc($tmp_result);
print "<a target='_blank' $reply['content'] .= "<a target='_blank'
href=' " . htmlspecialchars($tmp_line['site_url']) . "'>" . href=' " . htmlspecialchars($tmp_line['site_url']) . "'>" .
$tmp_line['title'] . "</a>"; $tmp_line['title'] . "</a>";
print "&nbsp;"; $reply['content'] .= "&nbsp;";
print "<a target='_blank' href='" . htmlspecialchars($tmp_line['feed_url']) . "'>"; $reply['content'] .= "<a target='_blank' href='" . htmlspecialchars($tmp_line['feed_url']) . "'>";
print "<img title='".__('Feed URL')."'class='tinyFeedIcon' src='images/pub_set.gif'></a>"; $reply['content'] .= "<img title='".__('Feed URL')."'class='tinyFeedIcon' src='images/pub_set.gif'></a>";
print "</div>"; $reply['content'] .= "</div>";
} }
} }
@ -5210,13 +5193,13 @@
$article_content = ''; $article_content = '';
} }
print "<div id=\"POSTNOTE-$id\">"; $reply['content'] .= "<div id=\"POSTNOTE-$id\">";
if ($line['note']) { if ($line['note']) {
print format_article_note($id, $line['note']); $reply['content'] .= format_article_note($id, $line['note']);
} }
print "</div>"; $reply['content'] .= "</div>";
print "<span id=\"CWRAP-$id\">$article_content</span>"; $reply['content'] .= "<span id=\"CWRAP-$id\">$article_content</span>";
$tmp_result = db_query($link, "SELECT always_display_enclosures FROM $tmp_result = db_query($link, "SELECT always_display_enclosures FROM
ttrss_feeds WHERE id = ". ttrss_feeds WHERE id = ".
@ -5226,24 +5209,24 @@
$always_display_enclosures = sql_bool_to_bool(db_fetch_result($tmp_result, $always_display_enclosures = sql_bool_to_bool(db_fetch_result($tmp_result,
0, "always_display_enclosures")); 0, "always_display_enclosures"));
print format_article_enclosures($link, $id, $always_display_enclosures, $reply['content'] .= format_article_enclosures($link, $id, $always_display_enclosures,
$article_content); $article_content);
print "</div>"; $reply['content'] .= "</div>";
print "<div class=\"cdmFooter\">"; $reply['content'] .= "<div class=\"cdmFooter\">";
$tags_str = format_tags_string(get_article_tags($link, $id), $id); $tags_str = format_tags_string(get_article_tags($link, $id), $id);
print "<img src='".theme_image($link, $reply['content'] .= "<img src='".theme_image($link,
'images/tag.png')."' alt='Tags' title='Tags'> 'images/tag.png')."' alt='Tags' title='Tags'>
<span id=\"ATSTR-$id\">$tags_str</span> <span id=\"ATSTR-$id\">$tags_str</span>
<a title=\"".__('Edit tags for this article')."\" <a title=\"".__('Edit tags for this article')."\"
href=\"#\" onclick=\"editArticleTags($id, $feed_id, true)\">(+)</a>"; href=\"#\" onclick=\"editArticleTags($id, $feed_id, true)\">(+)</a>";
print "<div style=\"float : right\">"; $reply['content'] .= "<div style=\"float : right\">";
print "<img src=\"images/art-zoom.png\" $reply['content'] .= "<img src=\"images/art-zoom.png\"
onclick=\"zoomToArticle(event, $id)\" onclick=\"zoomToArticle(event, $id)\"
style=\"cursor : pointer\" style=\"cursor : pointer\"
alt='Zoom' alt='Zoom'
@ -5251,36 +5234,36 @@
//$note_escaped = htmlspecialchars($line['note'], ENT_QUOTES); //$note_escaped = htmlspecialchars($line['note'], ENT_QUOTES);
print "<img src=\"images/art-pub-note.png\" $reply['content'] .= "<img src=\"images/art-pub-note.png\"
style=\"cursor : pointer\" style=\"cursor : pointer\" style=\"cursor : pointer\" style=\"cursor : pointer\"
onclick=\"editArticleNote($id)\" onclick=\"editArticleNote($id)\"
alt='PubNote' title='".__('Edit article note')."'>"; alt='PubNote' title='".__('Edit article note')."'>";
if (DIGEST_ENABLE) { if (DIGEST_ENABLE) {
print "<img src=\"".theme_image($link, 'images/art-email.png')."\" $reply['content'] .= "<img src=\"".theme_image($link, 'images/art-email.png')."\"
style=\"cursor : pointer\" style=\"cursor : pointer\"
onclick=\"emailArticle($id)\" onclick=\"emailArticle($id)\"
alt='Zoom' title='".__('Forward by email')."'>"; alt='Zoom' title='".__('Forward by email')."'>";
} }
if (ENABLE_TWEET_BUTTON) { if (ENABLE_TWEET_BUTTON) {
print "<img src=\"".theme_image($link, 'images/art-tweet.png')."\" $reply['content'] .= "<img src=\"".theme_image($link, 'images/art-tweet.png')."\"
class='tagsPic' style=\"cursor : pointer\" class='tagsPic' style=\"cursor : pointer\"
onclick=\"tweetArticle($id)\" onclick=\"tweetArticle($id)\"
alt='Zoom' title='".__('Share on Twitter')."'>"; alt='Zoom' title='".__('Share on Twitter')."'>";
} }
print "<img src=\"images/digest_checkbox.png\" $reply['content'] .= "<img src=\"images/digest_checkbox.png\"
style=\"cursor : pointer\" style=\"cursor : pointer\" style=\"cursor : pointer\" style=\"cursor : pointer\"
onclick=\"dismissArticle($id)\" onclick=\"dismissArticle($id)\"
alt='Dismiss' title='".__('Dismiss article')."'>"; alt='Dismiss' title='".__('Dismiss article')."'>";
print "</div>"; $reply['content'] .= "</div>";
print "</div>"; $reply['content'] .= "</div>";
print "</div>"; $reply['content'] .= "</div>";
print "</div>"; $reply['content'] .= "</div>";
} }
@ -5309,9 +5292,9 @@
} }
if (!$offset && $message) { if (!$offset && $message) {
print "<div class='whiteBox'>$message"; $reply['content'] .= "<div class='whiteBox'>$message";
print "<p class=\"small\"><span class=\"insensitive\">"; $reply['content'] .= "<p class=\"small\"><span class=\"insensitive\">";
$result = db_query($link, "SELECT ".SUBSTRING_FOR_DATE."(MAX(last_updated), 1, 19) AS last_updated FROM ttrss_feeds $result = db_query($link, "SELECT ".SUBSTRING_FOR_DATE."(MAX(last_updated), 1, 19) AS last_updated FROM ttrss_feeds
WHERE owner_uid = " . $_SESSION['uid']); WHERE owner_uid = " . $_SESSION['uid']);
@ -5319,7 +5302,7 @@
$last_updated = db_fetch_result($result, 0, "last_updated"); $last_updated = db_fetch_result($result, 0, "last_updated");
$last_updated = make_local_datetime($link, $last_updated, false); $last_updated = make_local_datetime($link, $last_updated, false);
printf(__("Feeds last updated at %s"), $last_updated); $reply['content'] .= sprintf(__("Feeds last updated at %s"), $last_updated);
$result = db_query($link, "SELECT COUNT(id) AS num_errors $result = db_query($link, "SELECT COUNT(id) AS num_errors
FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]); FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]);
@ -5327,11 +5310,11 @@
$num_errors = db_fetch_result($result, 0, "num_errors"); $num_errors = db_fetch_result($result, 0, "num_errors");
if ($num_errors > 0) { if ($num_errors > 0) {
print "<br/>"; $reply['content'] .= "<br/>";
print "<a class=\"insensitive\" href=\"#\" onclick=\"showFeedsWithErrors()\">". $reply['content'] .= "<a class=\"insensitive\" href=\"#\" onclick=\"showFeedsWithErrors()\">".
__('Some feeds have update errors (click for details)')."</a>"; __('Some feeds have update errors (click for details)')."</a>";
} }
print "</span></p></div>"; $reply['content'] .= "</span></p></div>";
} }
} }
@ -5340,9 +5323,10 @@
# print "</div>"; # print "</div>";
# } # }
print "]]></content>"; #print "]]></content>";
return array($topmost_article_ids, $headlines_count, $feed, $disable_cache, $vgroup_last_feed); return array($topmost_article_ids, $headlines_count, $feed, $disable_cache,
$vgroup_last_feed, $reply['content'], $reply['toolbar']);
} }
// from here: http://www.roscripts.com/Create_tag_cloud-71.html // from here: http://www.roscripts.com/Create_tag_cloud-71.html
@ -6608,16 +6592,34 @@
return $headlines; return $headlines;
} }
function generate_error_feed($link, $error) {
$reply = array();
$reply['headlines']['id'] = -6;
$reply['headlines']['is_cat'] = false;
$reply['headlines']['toolbar'] = '';
$reply['headlines']['content'] = "<div class='whiteBox'>". $error . "</div>";
$reply['headlines-info'] = array("count" => 0,
"vgroup_last_feed" => '',
"unread" => 0,
"disable_cache" => true);
return $reply;
}
function generate_dashboard_feed($link) { function generate_dashboard_feed($link) {
print "<headlines id=\"-5\" is_cat=\"\">"; $reply = array();
print "<toolbar><![CDATA[]]></toolbar>"; $reply['headlines']['id'] = -5;
$reply['headlines']['is_cat'] = false;
print '<content><![CDATA['; $reply['headlines']['toolbar'] = '';
$reply['headlines']['content'] = "<div class='whiteBox'>".__('No feed selected.');
print "<div class='whiteBox'>".__('No feed selected.'); $reply['headlines']['content'] .= "<p class=\"small\"><span class=\"insensitive\">";
print "<p class=\"small\"><span class=\"insensitive\">";
$result = db_query($link, "SELECT ".SUBSTRING_FOR_DATE."(MAX(last_updated), 1, 19) AS last_updated FROM ttrss_feeds $result = db_query($link, "SELECT ".SUBSTRING_FOR_DATE."(MAX(last_updated), 1, 19) AS last_updated FROM ttrss_feeds
WHERE owner_uid = " . $_SESSION['uid']); WHERE owner_uid = " . $_SESSION['uid']);
@ -6625,7 +6627,7 @@
$last_updated = db_fetch_result($result, 0, "last_updated"); $last_updated = db_fetch_result($result, 0, "last_updated");
$last_updated = make_local_datetime($link, $last_updated, false); $last_updated = make_local_datetime($link, $last_updated, false);
printf(__("Feeds last updated at %s"), $last_updated); $reply['headlines']['content'] .= sprintf(__("Feeds last updated at %s"), $last_updated);
$result = db_query($link, "SELECT COUNT(id) AS num_errors $result = db_query($link, "SELECT COUNT(id) AS num_errors
FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]); FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]);
@ -6633,26 +6635,18 @@
$num_errors = db_fetch_result($result, 0, "num_errors"); $num_errors = db_fetch_result($result, 0, "num_errors");
if ($num_errors > 0) { if ($num_errors > 0) {
print "<br/>"; $reply['headlines']['content'] .= "<br/>";
print "<a class=\"insensitive\" href=\"#\" onclick=\"showFeedsWithErrors()\">". $reply['headlines']['content'] .= "<a class=\"insensitive\" href=\"#\" onclick=\"showFeedsWithErrors()\">".
__('Some feeds have update errors (click for details)')."</a>"; __('Some feeds have update errors (click for details)')."</a>";
} }
print "</span></p>"; $reply['headlines']['content'] .= "</span></p>";
print "]]></content>"; $reply['headlines-info'] = array("count" => 0,
print "</headlines>";
print "<headlines-info><![CDATA[";
$info = array("count" => 0,
"vgroup_last_feed" => '', "vgroup_last_feed" => '',
"unread" => 0, "unread" => 0,
"disable_cache" => true); "disable_cache" => true);
print json_encode($info); return $reply;
print "]]></headlines-info>";
} }
function save_email_address($link, $email) { function save_email_address($link, $email) {

View File

@ -25,47 +25,35 @@ function headlines_callback2(transport, feed_cur_page) {
var is_cat = false; var is_cat = false;
var feed_id = false; var feed_id = false;
if (transport.responseXML) { var reply;
var headlines = transport.responseXML.getElementsByTagName("headlines")[0];
if (headlines) {
is_cat = headlines.getAttribute("is_cat");
feed_id = headlines.getAttribute("id");
setActiveFeedId(feed_id, is_cat);
}
}
var update_btn = document.forms["main_toolbar_form"].update;
update_btn.disabled = !(feed_id >= 0 && !is_cat);
try { try {
if (feed_cur_page == 0) { reply = JSON.parse(transport.responseText);
$("headlines-frame").scrollTop = 0; } catch (e) {
} console.error(e);
} catch (e) { }; }
if (transport.responseXML) { if (reply) {
var response = transport.responseXML;
var headlines = response.getElementsByTagName("headlines")[0]; is_cat = reply['headlines']['is_cat'];
feed_id = reply['headlines']['id'];
var headlines_content = headlines.getElementsByTagName("content")[0]; setActiveFeedId(feed_id, is_cat);
var headlines_toolbar = headlines.getElementsByTagName("toolbar")[0];
var headlines_info = response.getElementsByTagName("headlines-info")[0]; var update_btn = document.forms["main_toolbar_form"].update;
if (headlines_info) update_btn.disabled = !(feed_id >= 0 && !is_cat);
headlines_info = JSON.parse(headlines_info.firstChild.nodeValue);
else {
console.error("didn't find headlines-info object in response");
return;
}
var headlines_count = headlines_info.count; try {
var headlines_unread = headlines_info.unread; if (feed_cur_page == 0) {
var disable_cache = headlines_info.disable_cache; $("headlines-frame").scrollTop = 0;
}
} catch (e) { };
vgroup_last_feed = headlines_info.vgroup_last_feed; var headlines_count = reply['headlines-info']['count'];
var headlines_unread = reply['headlines-info']['unread'];
vgroup_last_feed = reply['headlines-info']['vgroup_last_feed'];
if (parseInt(headlines_count) < getInitParam("default_article_limit")) { if (parseInt(headlines_count) < getInitParam("default_article_limit")) {
_infscroll_disable = 1; _infscroll_disable = 1;
@ -73,82 +61,49 @@ function headlines_callback2(transport, feed_cur_page) {
_infscroll_disable = 0; _infscroll_disable = 0;
} }
var counters = response.getElementsByTagName("counters")[0]; var counters = reply['counters'];
var articles = response.getElementsByTagName("article"); var articles = reply['articles'];
var runtime_info = response.getElementsByTagName("runtime-info"); var runtime_info = reply['runtime-info'];
if (feed_cur_page == 0) { if (feed_cur_page == 0) {
if (headlines) { dijit.byId("headlines-frame").attr('content',
dijit.byId("headlines-frame").attr('content', reply['headlines']['content']);
headlines_content.firstChild.nodeValue);
dijit.byId("headlines-toolbar").attr('content', dijit.byId("headlines-toolbar").attr('content',
headlines_toolbar.firstChild.nodeValue); reply['headlines']['toolbar']);
initHeadlinesMenu();
} else {
if (headlines_count > 0) {
console.log("adding some more headlines...");
var c = dijit.byId("headlines-frame");
var ids = getSelectedArticleIds2();
$("headlines-tmp").innerHTML = reply['headlines']['content'];
$$("#headlines-tmp > div").each(function(row) {
c.domNode.appendChild(row);
});
console.log("restore selected ids: " + ids);
for (var i = 0; i < ids.length; i++) {
markHeadline(ids[i]);
}
initHeadlinesMenu(); initHeadlinesMenu();
/* var cache_prefix = "";
if (is_cat) {
cache_prefix = "C:";
} else {
cache_prefix = "F:";
}
cache_invalidate(cache_prefix + feed_id);
if (!disable_cache) {
cache_inject(cache_prefix + feed_id,
$("headlines-frame").innerHTML, headlines_unread);
} */
} else { } else {
console.warn("headlines_callback: returned no data"); console.log("no new headlines received");
dijit.byId("headlines-frame").attr('content',
"<div class='whiteBox'>" +
__('Could not update headlines (missing XML data)') + "</div>");
} }
} else {
if (headlines) {
if (headlines_count > 0) {
console.log("adding some more headlines...");
var c = dijit.byId("headlines-frame");
var ids = getSelectedArticleIds2();
//c.attr('content', c.attr('content') +
// headlines_content.firstChild.nodeValue);
$("headlines-tmp").innerHTML = headlines_content.firstChild.nodeValue;
$$("#headlines-tmp > div").each(function(row) {
c.domNode.appendChild(row);
});
console.log("restore selected ids: " + ids);
for (var i = 0; i < ids.length; i++) {
markHeadline(ids[i]);
}
initHeadlinesMenu();
} else {
console.log("no new headlines received");
}
} else {
console.warn("headlines_callback: returned no data");
notify_error("Error while trying to load more headlines");
}
} }
if (articles) { if (articles) {
for (var i = 0; i < articles.length; i++) { for (var i = 0; i < articles.length; i++) {
var a_id = articles[i].getAttribute("id"); var a_id = articles[i]['id'];
//console.log("found id: " + a_id); cache_inject(a_id, articles[i]['content']);
cache_inject(a_id, articles[i].firstChild.nodeValue);
} }
} else { } else {
console.log("no cached articles received"); console.log("no cached articles received");
@ -162,11 +117,9 @@ function headlines_callback2(transport, feed_cur_page) {
} else { } else {
console.warn("headlines_callback: returned no XML object"); console.warn("headlines_callback: returned no XML object");
dijit.byId("headlines-frame").attr('content', "<div class='whiteBox'>" + dijit.byId("headlines-frame").attr('content', "<div class='whiteBox'>" +
__('Could not update headlines (missing XML object)') + "</div>"); __('Could not update headlines (invalid object received)') + "</div>");
} }
_feed_cur_page = feed_cur_page; _feed_cur_page = feed_cur_page;
_infscroll_request_sent = 0; _infscroll_request_sent = 0;