}
}
-function headlines_callback2(transport, active_feed_id, active_feed_is_cat, feed_cur_page) {
- debug("headlines_callback2 [page=" + feed_cur_page + "]");
-
- var f = document.getElementById("headlines-frame");
+function clean_feed_selections() {
try {
- if (feed_cur_page == 0) {
- debug("resetting headlines scrollTop");
- f.scrollTop = 0;
- }
- } catch (e) { };
+ var feeds = document.getElementById("feedList").getElementsByTagName("LI");
- if (transport.responseXML) {
- var headlines = transport.responseXML.getElementsByTagName("headlines")[0];
- var headlines_count_obj = transport.responseXML.getElementsByTagName("headlines-count")[0];
-
- var headlines_count = headlines_count_obj.getAttribute("value");
+ for (var i = 0; i < feeds.length; i++) {
+ if (feeds[i].id && feeds[i].id.match("FEEDR-")) {
+ feeds[i].className = feeds[i].className.replace("Selected", "");
+ }
+ }
+ } catch (e) {
+ exception_error("clean_feed_selections", e);
+ }
+}
- if (headlines_count == 0) _infscroll_disable = 1;
+function headlines_callback2(transport, active_feed_id, is_cat, feed_cur_page) {
+ try {
- var counters = transport.responseXML.getElementsByTagName("counters")[0];
- var articles = transport.responseXML.getElementsByTagName("article");
- var runtime_info = transport.responseXML.getElementsByTagName("runtime-info");
+ debug("headlines_callback2 [page=" + feed_cur_page + "]");
- if (feed_cur_page == 0) {
- if (headlines) {
- f.innerHTML = headlines.firstChild.nodeValue;
- } else {
- debug("headlines_callback: returned no data");
- f.innerHTML = "<div class='whiteBox'>" + __('Could not update headlines (missing XML data)') + "</div>";
+ clean_feed_selections();
+ setActiveFeedId(active_feed_id);
+
+ if (is_cat != undefined) {
+ active_feed_is_cat = is_cat;
+ }
+
+ if (!is_cat) {
+ var feedr = document.getElementById("FEEDR-" + active_feed_id);
+ if (feedr && !feedr.className.match("Selected")) {
+ feedr.className = feedr.className + "Selected";
+ }
+ }
+
+ var f = document.getElementById("headlines-frame");
+ try {
+ if (feed_cur_page == 0) {
+ debug("resetting headlines scrollTop");
+ f.scrollTop = 0;
}
- } else {
- if (headlines) {
- if (headlines_count > 0) {
- debug("adding some more headlines...");
+ } catch (e) { };
+
+ if (transport.responseXML) {
+ var headlines = transport.responseXML.getElementsByTagName("headlines")[0];
+ var headlines_count_obj = transport.responseXML.getElementsByTagName("headlines-count")[0];
+ var headlines_unread_obj = transport.responseXML.getElementsByTagName("headlines-unread")[0];
+ var disable_cache_obj = transport.responseXML.getElementsByTagName("disable-cache")[0];
- var c = document.getElementById("headlinesList");
+ var headlines_count = headlines_count_obj.getAttribute("value");
+ var headlines_unread = headlines_unread_obj.getAttribute("value");
+ var disable_cache = disable_cache_obj.getAttribute("value") != "0";
+
+ if (headlines_count == 0) _infscroll_disable = 1;
+
+ var counters = transport.responseXML.getElementsByTagName("counters")[0];
+ var articles = transport.responseXML.getElementsByTagName("article");
+ var runtime_info = transport.responseXML.getElementsByTagName("runtime-info");
- if (!c) {
- c = document.getElementById("headlinesInnerContainer");
+ if (feed_cur_page == 0) {
+ if (headlines) {
+ f.innerHTML = headlines.firstChild.nodeValue;
+
+ var cache_prefix = "";
+
+ if (is_cat) {
+ cache_prefix = "C:";
+ } else {
+ cache_prefix = "F:";
+ }
+
+ cache_invalidate(cache_prefix + active_feed_id);
+
+ if (!disable_cache) {
+ cache_inject(cache_prefix + active_feed_id,
+ headlines.firstChild.nodeValue, headlines_unread);
}
- c.innerHTML = c.innerHTML + headlines.firstChild.nodeValue;
} else {
- debug("no new headlines received");
+ debug("headlines_callback: returned no data");
+ f.innerHTML = "<div class='whiteBox'>" + __('Could not update headlines (missing XML data)') + "</div>";
+
}
} else {
- debug("headlines_callback: returned no data");
- notify_error("Error while trying to load more headlines");
- }
+ if (headlines) {
+ if (headlines_count > 0) {
+ debug("adding some more headlines...");
+
+ var c = document.getElementById("headlinesList");
+
+ if (!c) {
+ c = document.getElementById("headlinesInnerContainer");
+ }
- }
+ var ids = getSelectedArticleIds2();
+
+ c.innerHTML = c.innerHTML + headlines.firstChild.nodeValue;
- if (articles) {
- for (var i = 0; i < articles.length; i++) {
- var a_id = articles[i].getAttribute("id");
- debug("found id: " + a_id);
- cache_inject(a_id, articles[i].firstChild.nodeValue);
+ debug("restore selected ids: " + ids);
+
+ for (var i = 0; i < ids.length; i++) {
+ markHeadline(ids[i]);
+ }
+
+ } else {
+ debug("no new headlines received");
+ }
+ } else {
+ debug("headlines_callback: returned no data");
+ notify_error("Error while trying to load more headlines");
+ }
+
+ }
+
+ if (articles) {
+ for (var i = 0; i < articles.length; i++) {
+ var a_id = articles[i].getAttribute("id");
+ debug("found id: " + a_id);
+ cache_inject(a_id, articles[i].firstChild.nodeValue);
+ }
+ } else {
+ debug("no cached articles received");
+ }
+
+ if (counters) {
+ debug("parsing piggybacked counters: " + counters);
+ parse_counters(counters, false);
+ } else {
+ debug("counters container not found in reply");
+ }
+
+ if (runtime_info) {
+ debug("parsing runtime info: " + runtime_info[0]);
+ parse_runtime_info(runtime_info[0]);
+ } else {
+ debug("counters container not found in reply");
}
+
} else {
- debug("no cached articles received");
+ debug("headlines_callback: returned no XML object");
+ f.innerHTML = "<div class='whiteBox'>" + __('Could not update headlines (missing XML object)') + "</div>";
}
-
- if (counters) {
- debug("parsing piggybacked counters: " + counters);
- parse_counters(counters, false);
- } else {
- debug("counters container not found in reply");
+
+ if (typeof correctPNG != 'undefined') {
+ correctPNG();
}
-
- if (runtime_info) {
- debug("parsing runtime info: " + runtime_info[0]);
- parse_runtime_info(runtime_info[0]);
+
+ if (_cdm_wd_timeout) window.clearTimeout(_cdm_wd_timeout);
+
+ if (!document.getElementById("headlinesList") &&
+ getInitParam("cdm_auto_catchup") == 1) {
+ debug("starting CDM watchdog");
+ _cdm_wd_timeout = window.setTimeout("cdmWatchdog()", 5000);
+ _cdm_wd_vishist = new Array();
} else {
- debug("counters container not found in reply");
+ debug("not in CDM mode or watchdog disabled");
}
+
+ if (_tag_cdm_scroll) {
+ try {
+ document.getElementById("headlinesInnerContainer").scrollTop = _tag_cdm_scroll;
+ _tag_cdm_scroll = false;
+ debug("resetting headlinesInner scrollTop");
+
+ } catch (e) { }
+ }
+
+ _feed_cur_page = feed_cur_page;
+ _infscroll_request_sent = 0;
- } else {
- debug("headlines_callback: returned no XML object");
- f.innerHTML = "<div class='whiteBox'>" + __('Could not update headlines (missing XML object)') + "</div>";
- }
-
- if (typeof correctPNG != 'undefined') {
- correctPNG();
- }
-
- if (_cdm_wd_timeout) window.clearTimeout(_cdm_wd_timeout);
-
- if (!document.getElementById("headlinesList") &&
- getInitParam("cdm_auto_catchup") == 1) {
- debug("starting CDM watchdog");
- _cdm_wd_timeout = window.setTimeout("cdmWatchdog()", 5000);
- _cdm_wd_vishist = new Array();
- } else {
- debug("not in CDM mode or watchdog disabled");
- }
-
- if (_tag_cdm_scroll) {
- try {
- document.getElementById("headlinesInnerContainer").scrollTop = _tag_cdm_scroll;
- _tag_cdm_scroll = false;
- debug("resetting headlinesInner scrollTop");
-
- } catch (e) { }
+ notify("");
+ } catch (e) {
+ exception_error("headlines_callback2", e);
}
-
- _feed_cur_page = feed_cur_page;
-
- notify("");
}
function render_article(article) {
}
}
-function article_callback() {
- if (xmlhttp.readyState == 4) {
- debug("article_callback");
+function showArticleInHeadlines(id) {
+
+ try {
+
+ cleanSelected("headlinesList");
+
+ var crow = document.getElementById("RROW-" + id);
+
+ if (!crow) return;
+
+ var article_is_unread = crow.className.match("Unread");
+
+ crow.className = crow.className.replace("Unread", "");
+
+ selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
+
+ var upd_img_pic = document.getElementById("FUPDPIC-" + id);
+
+ var cache_prefix = "";
+
+ if (activeFeedIsCat()) {
+ cache_prefix = "C:";
+ } else {
+ cache_prefix = "F:";
+ }
+
+ var view_mode = false;
try {
- if (xmlhttp.responseXML) {
- var reply = xmlhttp.responseXML.firstChild.firstChild;
+ view_mode = document.forms['main_toolbar_form'].view_mode;
+ view_mode = view_mode[view_mode.selectedIndex].value;
+ } catch (e) {
+ exception_error("showArticleInHeadlines/viewmode", e, true);
+ }
- var articles = xmlhttp.responseXML.getElementsByTagName("article");
+ if (upd_img_pic && upd_img_pic.src.match("updated.png")) {
+ upd_img_pic.src = "images/blank_icon.gif";
- for (var i = 0; i < articles.length; i++) {
- var a_id = articles[i].getAttribute("id");
+ cache_invalidate(cache_prefix + getActiveFeedId());
- debug("found id: " + a_id);
+ cache_inject(cache_prefix + getActiveFeedId(),
+ document.getElementById("headlines-frame").innerHTML,
+ get_feed_unread(getActiveFeedId()));
- if (a_id == active_post_id) {
- debug("active article, rendering...");
- render_article(articles[i].firstChild.nodeValue);
- }
+ } else if (article_is_unread && view_mode == "all_articles") {
- cache_inject(a_id, articles[i].firstChild.nodeValue);
+ cache_invalidate(cache_prefix + getActiveFeedId());
+
+ cache_inject(cache_prefix + getActiveFeedId(),
+ document.getElementById("headlines-frame").innerHTML,
+ get_feed_unread(getActiveFeedId())-1);
+
+ } else if (article_is_unread) {
+ cache_invalidate(cache_prefix + getActiveFeedId());
+ }
+
+ markHeadline(id);
+
+ } catch (e) {
+ exception_error("showArticleInHeadlines", e);
+ }
+}
+
+function article_callback2(transport, id, feed_id) {
+ try {
+ debug("article_callback2 " + id);
+
+ if (transport.responseXML) {
+
+ active_real_feed_id = feed_id;
+ active_post_id = id;
+
+ showArticleInHeadlines(id);
+
+ var reply = transport.responseXML.firstChild.firstChild;
+
+ var articles = transport.responseXML.getElementsByTagName("article");
+
+ for (var i = 0; i < articles.length; i++) {
+ var a_id = articles[i].getAttribute("id");
+
+ debug("found id: " + a_id);
+
+ if (a_id == active_post_id) {
+ debug("active article, rendering...");
+ render_article(articles[i].firstChild.nodeValue);
}
-
- } else {
- debug("article_callback: returned no XML object");
- var f = document.getElementById("content-frame");
- f.innerHTML = "<div class='whiteBox'>" + __('Could not display article (missing XML object)') + "</div>";
+
+ cache_inject(a_id, articles[i].firstChild.nodeValue);
}
- } catch (e) {
- exception_error("article_callback", e);
+
+ } else {
+ debug("article_callback: returned no XML object");
+ var f = document.getElementById("content-frame");
+ f.innerHTML = "<div class='whiteBox'>" + __('Could not display article (missing XML object)') + "</div>";
}
var date = new Date();
setTimeout('updateFeedList(false, false)', 50);
_reload_feedlist_after_view = false;
} else {
- var counters = xmlhttp.responseXML.getElementsByTagName("counters")[0];
+ var counters = transport.responseXML.getElementsByTagName("counters")[0];
if (counters) {
debug("parsing piggybacked counters: " + counters);
}
notify("");
+ } catch (e) {
+ exception_error("article_callback2", e);
}
}
try {
debug("loading article: " + id + "/" + feed_id);
-
- active_real_feed_id = feed_id;
-
+
var cached_article = cache_find(id);
debug("cache check result: " + (cached_article != false));
var date = new Date();
- if (!xmlhttp_ready(xmlhttp) && last_article_view < date.getTime() / 1000 - 15) {
- debug("<b>xmlhttp seems to be stuck at view, aborting</b>");
- xmlhttp.abort();
- if (is_safari()) {
- debug("trying alternative reset method for Safari");
- xmlhttp = Ajax.getTransport();
- }
- }
+ var neighbor_ids = getRelativePostIds(active_post_id);
- if (xmlhttp_ready(xmlhttp)) {
+ /* only request uncached articles */
- active_post_id = id;
-
- cleanSelected("headlinesList");
-
- var crow = document.getElementById("RROW-" + active_post_id);
-
- var article_is_unread = crow.className.match("Unread");
- debug("article is unread: " + article_is_unread);
+ var cids_to_request = Array();
- crow.className = crow.className.replace("Unread", "");
-
- var upd_img_pic = document.getElementById("FUPDPIC-" + active_post_id);
-
- if (upd_img_pic) {
- upd_img_pic.src = "images/blank_icon.gif";
+ for (var i = 0; i < neighbor_ids.length; i++) {
+ if (!cache_check(neighbor_ids[i])) {
+ cids_to_request.push(neighbor_ids[i]);
}
+ }
- selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
- markHeadline(active_post_id);
-
- var neighbor_ids = getRelativePostIds(active_post_id);
-
- /* only request uncached articles */
-
- var cids_to_request = Array();
-
- for (var i = 0; i < neighbor_ids.length; i++) {
- if (!cache_check(neighbor_ids[i])) {
- cids_to_request.push(neighbor_ids[i]);
- }
- }
-
- debug("additional ids: " + cids_to_request.toString());
-
- /* additional info for piggyback counters */
-
- if (tagsAreDisplayed()) {
- query = query + "&omode=lt";
- } else {
- query = query + "&omode=flc";
- }
-
- var date = new Date();
- var timestamp = Math.round(date.getTime() / 1000);
- query = query + "&ts=" + timestamp;
-
- query = query + "&cids=" + cids_to_request.toString();
-
- if (!cached_article) {
+ debug("additional ids: " + cids_to_request.toString());
- notify_progress("Loading, please wait...");
+ /* additional info for piggyback counters */
- debug(query);
+ if (tagsAreDisplayed()) {
+ query = query + "&omode=lt";
+ } else {
+ query = query + "&omode=flc";
+ }
- xmlhttp.open("GET", query, true);
- xmlhttp.onreadystatechange=article_callback;
- xmlhttp.send(null);
- } else if (cached_article && article_is_unread) {
+ var date = new Date();
+ var timestamp = Math.round(date.getTime() / 1000);
+ query = query + "&ts=" + timestamp;
- query = query + "&mode=prefetch";
+ query = query + "&cids=" + cids_to_request.toString();
- debug(query);
+ var crow = document.getElementById("RROW-" + id);
+ var article_is_unread = crow.className.match("Unread");
- xmlhttp.open("GET", query, true);
- xmlhttp.onreadystatechange=article_callback;
- xmlhttp.send(null);
+ showArticleInHeadlines(id);
- render_article(cached_article);
+ if (!cached_article) {
- } else if (cached_article) {
+ notify_progress("Loading, please wait...");
- query = query + "&mode=prefetch_old";
+ } else if (cached_article && article_is_unread) {
- debug(query);
+ query = query + "&mode=prefetch";
- xmlhttp.open("GET", query, true);
- xmlhttp.onreadystatechange=article_callback;
- xmlhttp.send(null);
+ render_article(cached_article);
- render_article(cached_article);
+ } else if (cached_article) {
- }
+ query = query + "&mode=prefetch_old";
+ render_article(cached_article);
+ }
- cache_expire();
+ cache_expire();
- } else {
- debug("xmlhttp busy (@view)");
- printLockingError();
- }
+ new Ajax.Request(query, {
+ onComplete: function(transport) {
+ article_callback2(transport, id, feed_id);
+ } });
} catch (e) {
exception_error("view", e);
nc = nc.replace("Unread", "");
nc = nc.replace("Selected", "");
- if (row.className.match("Unread")) {
+ if (cmode == undefined || cmode == 2) {
+ if (row.className.match("Unread")) {
+ row.className = nc;
+ } else {
+ row.className = nc + "Unread";
+ }
+ } else if (cmode == 0) {
row.className = nc;
- } else {
+ } else if (cmode == 1) {
row.className = nc + "Unread";
}
- if (!cmode) cmode = 2;
+ if (cmode == undefined) cmode = 2;
var query = "backend.php?op=rpc&subop=catchupSelected&ids=" +
param_escape(id) + "&cmode=" + param_escape(cmode);
function selectionToggleUnread(cdm_mode, set_state, callback_func, no_error) {
try {
-/* if (!xmlhttp_ready(xmlhttp_rpc)) {
- printLockingError();
- return;
- } */
-
var rows;
if (cdm_mode) {
var query = "backend.php?op=rpc&subop=catchupSelected&ids=" +
param_escape(rows.toString()) + "&cmode=" + cmode;
-// _catchup_callback_func = callback_func;
-
- debug(callback_func);
-
notify_progress("Loading, please wait...");
-/* xmlhttp_rpc.open("GET", query, true);
- xmlhttp_rpc.onreadystatechange=catchup_callback;
- xmlhttp_rpc.send(null); */
-
new Ajax.Request(query, {
onComplete: function(transport) {
catchup_callback2(transport, callback_func);
var fn = getFeedName(getActiveFeedId(), active_feed_is_cat);
- var str = __("Mark all selected articles in %s as read?");
+ var str = __("Mark %d selected articles in %s as read?");
+ str = str.replace("%d", rows.length);
str = str.replace("%s", fn);
if (getInitParam("confirm_feed_catchup") == 1 && !confirm(str)) {
"&title=" + param_escape(title);
debug("LFS: " + query);
-
- xmlhttp_rpc.open("GET", query, true);
- xmlhttp_rpc.onreadystatechange=dlg_frefresh_callback;
- xmlhttp_rpc.send(null);
- }
+ new Ajax.Request(query, {
+ onComplete: function(transport) {
+ dlg_frefresh_callback(transport);
+ } });
+ }
}
function editArticleTags(id, feed_id, cdm_enabled) {
}
-function tag_saved_callback() {
- if (xmlhttp_rpc.readyState == 4) {
- try {
- debug("in tag_saved_callback");
+function tag_saved_callback(transport) {
+ try {
+ debug("in tag_saved_callback");
- closeInfoBox();
- notify("");
+ closeInfoBox();
+ notify("");
- if (tagsAreDisplayed()) {
- _reload_feedlist_after_view = true;
- }
+ if (tagsAreDisplayed()) {
+ _reload_feedlist_after_view = true;
+ }
- if (!_tag_active_cdm) {
- if (active_post_id == _tag_active_post_id) {
- debug("reloading current article");
- view(_tag_active_post_id, _tag_active_feed_id);
- }
- } else {
- debug("reloading current feed");
- viewCurrentFeed();
+ if (!_tag_active_cdm) {
+ if (active_post_id == _tag_active_post_id) {
+ debug("reloading current article");
+ view(_tag_active_post_id, _tag_active_feed_id);
}
-
- } catch (e) {
- exception_error("catchup_callback", e);
+ } else {
+ debug("reloading current feed");
+ viewCurrentFeed();
}
+
+ } catch (e) {
+ exception_error("catchup_callback", e);
}
}
function editTagsSave() {
- if (!xmlhttp_ready(xmlhttp_rpc)) {
- printLockingError();
- }
-
notify_progress("Saving article tags...");
var form = document.forms["tag_edit_form"];
debug(query);
- xmlhttp_rpc.open("GET", query, true);
- xmlhttp_rpc.onreadystatechange=tag_saved_callback;
- xmlhttp_rpc.send(null);
+ new Ajax.Request(query, {
+ onComplete: function(transport) {
+ tag_saved_callback(transport);
+ } });
}
}
-function cache_inject(id, article) {
- if (!cache_check(id)) {
- debug("cache_article: miss: " + id);
+function cache_inject(id, article, param) {
+ if (!cache_check_param(id, param)) {
+ debug("cache_article: miss: " + id + " [p=" + param + "]");
var cache_obj = new Array();
cache_obj["id"] = id;
cache_obj["data"] = article;
+ cache_obj["param"] = param;
article_cache.push(cache_obj);
} else {
- debug("cache_article: hit: " + id);
+ debug("cache_article: hit: " + id + " [p=" + param + "]");
}
}
return false;
}
+function cache_find_param(id, param) {
+ for (var i = 0; i < article_cache.length; i++) {
+ if (article_cache[i]["id"] == id && article_cache[i]["param"] == param) {
+ return article_cache[i]["data"];
+ }
+ }
+ return false;
+}
+
function cache_check(id) {
for (var i = 0; i < article_cache.length; i++) {
if (article_cache[i]["id"] == id) {
return false;
}
+function cache_check_param(id, param) {
+ for (var i = 0; i < article_cache.length; i++) {
+
+// debug("cache_check_param " + article_cache[i]["id"] + ":" +
+// article_cache[i]["param"] + " vs " + id + ":" + param);
+
+ if (article_cache[i]["id"] == id && article_cache[i]["param"] == param) {
+ return true;
+ }
+ }
+ return false;
+}
+
function cache_expire() {
while (article_cache.length > 20) {
article_cache.shift();
var e = document.getElementById("headlinesInnerContainer");
- if (e.scrollTop + e.offsetHeight > e.scrollHeight - 300) {
- if (!_infscroll_disable) {
- debug("more cowbell!");
- viewNextFeedPage();
+ // don't do infinite scrolling when Limit == All
+
+ var toolbar_form = document.forms["main_toolbar_form"];
+
+ var limit = toolbar_form.limit[toolbar_form.limit.selectedIndex];
+ if (limit.value != 0) {
+ if (e.scrollTop + e.offsetHeight > e.scrollHeight - 50) {
+ if (!_infscroll_disable) {
+ debug("more cowbell!");
+ viewNextFeedPage();
+ }
}
}
var query = "backend.php?op=rpc&subop=catchupSelected&ids=" +
param_escape(ids_to_mark.toString()) + "&cmode=0";
- xmlhttp_rpc.open("GET", query, true);
- xmlhttp_rpc.onreadystatechange=catchup_callback;
- xmlhttp_rpc.send(null);
-
+ new Ajax.Request(query, {
+ onComplete: function(transport) {
+ catchup_callback2(transport);
+ } });
+
}
}
exception_error("catchupRelativeToArticle", e);
}
}
+
+function cdmExpandArticle(a_id) {
+ try {
+ var id = 'CICD-' + a_id;
+
+ Effect.Appear(id, {duration : 0.5,
+ beforeStart: function(effect) {
+ var h_id = 'CICH-' + a_id;
+ var h_elem = document.getElementById(h_id);
+ if (h_elem) { h_elem.style.display = "none"; }
+
+ toggleUnread(a_id, 0);
+ }});
+
+
+ } catch (e) {
+ exception_error("appearBlockElementF", e);
+ }
+
+}
+
+