-var active_post_id = false;
-
var article_cache = new Array();
+var _active_article_id = 0;
+
var vgroup_last_feed = false;
var post_under_pointer = false;
var catchup_id_batch = [];
var catchup_timeout_id = false;
-var feed_precache_timeout_id = false;
-var precache_idle_timeout_id = false;
var cids_requested = [];
+var loaded_article_ids = [];
+
+var _post_preview_timeout = false;
var has_storage = 'sessionStorage' in window && window['sessionStorage'] !== null;
if (getInitParam("cdm_auto_catchup") == 1) {
content = content + "<div id='headlines-spacer'></div>";
}
-
- cache_headlines(feed_id, is_cat, reply['headlines']['toolbar'], content);
return;
}
setActiveFeedId(feed_id, is_cat);
- dijit.getEnclosingWidget(
+ /* dijit.getEnclosingWidget(
document.forms["main_toolbar_form"].update).attr('disabled',
- is_cat || feed_id <= 0);
+ is_cat || feed_id <= 0); */
try {
- if (offset == 0 && infscroll_req == false) {
+ if (infscroll_req == false) {
$("headlines-frame").scrollTop = 0;
}
} catch (e) { };
var articles = reply['articles'];
//var runtime_info = reply['runtime-info'];
- if (offset == 0 && infscroll_req == false) {
+ if (infscroll_req == false) {
+ loaded_article_ids = [];
+
dijit.byId("headlines-frame").attr('content',
reply['headlines']['content']);
reply['headlines']['toolbar']);
$$("#headlines-frame > div[id*=RROW]").each(function(row) {
- if ($$("#headlines-frame DIV[id="+row.id+"]").length > 1) {
+ if (loaded_article_ids.indexOf(row.id) != -1) {
row.parentNode.removeChild(row);
+ } else {
+ loaded_article_ids.push(row.id);
}
});
var c = dijit.byId("headlines-frame");
var ids = getSelectedArticleIds2();
- var num_added = 0;
+ var new_elems = [];
$("headlines-tmp").innerHTML = reply['headlines']['content'];
$$("#headlines-tmp > div").each(function(row) {
if (row.className == 'cdmFeedTitle') {
- row.addClassName('new');
row.style.display = 'none';
c.domNode.appendChild(row);
- ++num_added;
- } else if ($$("#headlines-frame DIV[id="+row.id+"]").length == 0) {
+ new_elems.push(row);
+ } else if (loaded_article_ids.indexOf(row.id) == -1) {
row.style.display = 'none';
- row.addClassName('new');
c.domNode.appendChild(row);
- ++num_added;
+ new_elems.push(row);
+ loaded_article_ids.push(row.id);
} else {
row.parentNode.removeChild(row);
}
c.domNode.appendChild(hsp);
}
- console.log("added " + num_added + " headlines");
+ console.log("added " + new_elems.size() + " headlines");
- if (num_added == 0)
+ if (new_elems.size() == 0)
_infscroll_disable = true;
console.log("restore selected ids: " + ids);
initHeadlinesMenu();
- $$("#headlines-frame > div[class*=new]").each(
- function(child) {
- child.removeClassName('new');
- if (!Element.visible(child))
- new Effect.Appear(child, { duration : 0.5 });
+ new_elems.each(function(child) {
+ var cb = dijit.byId(child.id.replace("RROW-", "RCHK-"));
+
+ if (!cb) {
+ dojo.parser.parse(child);
+
+ if (!Element.visible(child))
+ new Effect.Appear(child, { duration : 0.5 });
+ } else {
+ c.domNode.removeChild(child);
+ }
});
} else {
}
}
- if (headlines_count > 0)
- cache_headlines(feed_id, is_cat, reply['headlines']['toolbar'], $("headlines-frame").innerHTML);
-
if (articles) {
for (var i = 0; i < articles.length; i++) {
var a_id = articles[i]['id'];
console.log("no cached articles received");
}
- // do not precache stuff after fresh feed
- if (feed_id != -3)
- precache_headlines();
-
if (counters)
parse_counters(counters);
else
- request_counters();
+ request_counters(true);
- } else {
+ } else if (transport.responseText) {
console.error("Invalid object received: " + transport.responseText);
dijit.byId("headlines-frame").attr('content', "<div class='whiteBox'>" +
__('Could not update headlines (invalid object received - see error console for details)') +
"</div>");
+ } else {
+ //notify_error("Error communicating with server.");
+ Element.show(dijit.byId("net-alert").domNode);
}
_infscroll_request_sent = 0;
+ unpackVisibleHeadlines();
+
notify("");
} catch (e) {
function showArticleInHeadlines(id) {
try {
-
selectArticles("none");
var crow = $("RROW-" + id);
var article_is_unread = crow.hasClassName("Unread");
crow.removeClassName("Unread");
+ crow.addClassName("active");
selectArticles('none');
- var upd_img_pic = $("FUPDPIC-" + id);
-
var view_mode = false;
try {
//
}
- if (upd_img_pic && (upd_img_pic.src.match("updated.png") ||
- upd_img_pic.src.match("fresh_sign.png"))) {
-
- upd_img_pic.src = "images/blank_icon.gif";
-
- cache_headlines(getActiveFeedId(), activeFeedIsCat(), null, $("headlines-frame").innerHTML);
-
- } else if (article_is_unread && view_mode == "all_articles") {
- cache_headlines(getActiveFeedId(), activeFeedIsCat(), null, $("headlines-frame").innerHTML);
- }
-
markHeadline(id);
if (article_is_unread)
if (reply) {
- var upic = $('FUPDPIC-' + id);
-
- if (upic) upic.src = 'images/blank_icon.gif';
-
reply.each(function(article) {
- if (active_post_id == article['id']) {
+ if (getActiveArticleId() == article['id']) {
render_article(article['content']);
}
cids_requested.remove(article['id']);
// return;
// }
- } else {
+ } else if (transport.responseText) {
console.error("Invalid object received: " + transport.responseText);
render_article("<div class='whiteBox'>" +
__('Could not display article (invalid object received - see error console for details)') + "</div>");
+ } else {
+ Element.show(dijit.byId("net-alert").domNode);
}
- request_counters();
+ var unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length
+ request_counters(unread_in_buffer == 0);
- headlines_scroll_handler($("headlines-frame"));
+ //headlines_scroll_handler($("headlines-frame"));
/* try {
if (!_infscroll_disable &&
function view(id) {
try {
+ var oldrow = $("RROW-" + getActiveArticleId());
+ if (oldrow) oldrow.removeClassName("active");
+
+ var crow = $("RROW-" + id);
+
+ if (!crow) return;
+
console.log("loading article: " + id);
var cached_article = cache_get("article:" + id);
console.log("cache check result: " + (cached_article != false));
- hideAuxDlg();
-
var query = "?op=article&method=view&id=" + param_escape(id);
var neighbor_ids = getRelativePostIds(id);
query = query + "&cids=" + cids_to_request.toString();
- var crow = $("RROW-" + id);
var article_is_unread = crow.hasClassName("Unread");
- active_post_id = id;
+ setActiveArticleId(id);
showArticleInHeadlines(id);
- precache_headlines();
-
- if (!cached_article) {
-
- var upic = $('FUPDPIC-' + id);
-
- if (upic) {
- upic.src = getInitParam("sign_progress");
- }
-
- } else if (cached_article && article_is_unread) {
+ if (cached_article && article_is_unread) {
query = query + "&mode=prefetch";
console.warn(e);
} */
- headlines_scroll_handler($("headlines-frame"));
+ //headlines_scroll_handler($("headlines-frame"));
return;
}
query = query + "&mark=0";
}
- cache_headlines(getActiveFeedId(), activeFeedIsCat(), null, $("headlines-frame").innerHTML);
-
if (!client_only) {
new Ajax.Request("backend.php", {
parameters: query,
query = query + "&pub=0";
}
- cache_headlines(getActiveFeedId(), activeFeedIsCat(), null, $("headlines-frame").innerHTML);
-
if (!client_only) {
new Ajax.Request("backend.php", {
parameters: query,
}
}
-function moveToPost(mode) {
+function moveToPost(mode, noscroll) {
try {
var prev_id = false;
var next_id = false;
- if (!$('RROW-' + active_post_id)) {
- active_post_id = false;
+ if (!$('RROW-' + getActiveArticleId())) {
+ setActiveArticleId(0);
}
- if (active_post_id == false) {
+ if (!getActiveArticleId()) {
next_id = rows[0];
prev_id = rows[rows.length-1]
} else {
for (var i = 0; i < rows.length; i++) {
- if (rows[i] == active_post_id) {
+ if (rows[i] == getActiveArticleId()) {
// Account for adjacent identical article ids.
if (i > 0) prev_id = rows[i-1];
for (var j = i+1; j < rows.length; j++) {
- if (rows[j] != active_post_id) {
+ if (rows[j] != getActiveArticleId()) {
next_id = rows[j];
break;
}
}
if (mode == "next") {
- if (next_id) {
+ if (next_id || getActiveArticleId()) {
if (isCdmMode()) {
- cdmExpandArticle(next_id);
- cdmScrollToArticleId(next_id);
+ var article = $("RROW-" + getActiveArticleId());
+ var ctr = $("headlines-frame");
- } else {
+ if (!noscroll && article && article.offsetTop + article.offsetHeight >
+ ctr.scrollTop + ctr.offsetHeight) {
+
+ scrollArticle(ctr.offsetHeight/4);
+
+ } else if (next_id) {
+ cdmExpandArticle(next_id);
+ cdmScrollToArticleId(next_id, true);
+ }
+
+ } else if (next_id) {
correctHeadlinesOffset(next_id);
view(next_id, getActiveFeedId());
}
}
if (mode == "prev") {
- if (prev_id) {
+ if (prev_id || getActiveArticleId()) {
if (isCdmMode()) {
- cdmExpandArticle(prev_id);
- cdmScrollToArticleId(prev_id);
- } else {
+
+ var article = $("RROW-" + getActiveArticleId());
+ var prev_article = $("RROW-" + prev_id);
+ var ctr = $("headlines-frame");
+
+ if (!getInitParam("cdm_expanded")) {
+
+ if (!noscroll && article.offsetTop < ctr.scrollTop) {
+ scrollArticle(-ctr.offsetHeight/4);
+ } else {
+ cdmExpandArticle(prev_id);
+ cdmScrollToArticleId(prev_id, true);
+ }
+ } else {
+
+ if (!noscroll && article && article.offsetTop < ctr.scrollTop) {
+ scrollArticle(-ctr.offsetHeight/3);
+ } else if (!noscroll && prev_article &&
+ prev_article.offsetTop < ctr.scrollTop) {
+ cdmExpandArticle(prev_id);
+ scrollArticle(-ctr.offsetHeight/4);
+ } else if (prev_id) {
+ cdmExpandArticle(prev_id);
+ cdmScrollToArticleId(prev_id, noscroll);
+ }
+ }
+
+ } else if (prev_id) {
correctHeadlinesOffset(prev_id);
view(prev_id, getActiveFeedId());
}
function toggleSelected(id, force_on) {
try {
- var cb = $("RCHK-" + id);
+ var cb = dijit.byId("RCHK-" + id);
var row = $("RROW-" + id);
if (row) {
if (row.hasClassName('Selected') && !force_on) {
row.removeClassName('Selected');
- if (cb) cb.checked = false;
+ if (cb) cb.attr("checked", false);
} else {
row.addClassName('Selected');
- if (cb) cb.checked = true;
+ if (cb) cb.attr("checked", true);
}
}
} catch (e) {
if (row.hasClassName("Unread")) {
row.removeClassName("Unread");
- if (effect) {
- new Effect.Highlight(row, {duration: 1, startcolor: "#fff7d5",
- afterFinish: toggleUnread_afh,
- queue: { position:'end', scope: 'TMRQ-' + id, limit: 1 } } );
- }
-
} else {
row.addClassName("Unread");
}
row.removeClassName("Unread");
- if (effect) {
- new Effect.Highlight(row, {duration: 1, startcolor: "#fff7d5",
- afterFinish: toggleUnread_afh,
- queue: { position:'end', scope: 'TMRQ-' + id, limit: 1 } } );
- }
-
} else if (cmode == 1) {
row.addClassName("Unread");
}
}
}
-function selectionToggleUnread(set_state, callback, no_error) {
+function selectionToggleUnread(set_state, callback, no_error, ids) {
try {
- var rows = getSelectedArticleIds2();
+ var rows = ids ? ids : getSelectedArticleIds2();
if (rows.length == 0 && !no_error) {
alert(__("No articles are selected."));
}
}
-function selectionToggleMarked() {
+// sel_state ignored
+function selectionToggleMarked(sel_state, callback, no_error, ids) {
try {
- var rows = getSelectedArticleIds2();
+ var rows = ids ? ids : getSelectedArticleIds2();
- if (rows.length == 0) {
+ if (rows.length == 0 && !no_error) {
alert(__("No articles are selected."));
return;
}
parameters: query,
onComplete: function(transport) {
handle_rpc_json(transport);
+ if (callback) callback(transport);
} });
}
}
}
-function selectionTogglePublished() {
+// sel_state ignored
+function selectionTogglePublished(sel_state, callback, no_error, ids) {
try {
- var rows = getSelectedArticleIds2();
+ var rows = ids ? ids : getSelectedArticleIds2();
- if (rows.length == 0) {
+ if (rows.length == 0 && !no_error) {
alert(__("No articles are selected."));
return;
}
children.each(function(child) {
var id = child.id.replace("RROW-", "");
- var cb = $("RCHK-" + id);
+ var cb = dijit.byId("RCHK-" + id);
if (mode == "all") {
child.addClassName("Selected");
- cb.checked = true;
+ if (cb) cb.attr("checked", true);
} else if (mode == "unread") {
if (child.hasClassName("Unread")) {
child.addClassName("Selected");
- cb.checked = true;
+ if (cb) cb.attr("checked", true);
} else {
child.removeClassName("Selected");
- cb.checked = false;
+ if (cb) cb.attr("checked", false);
}
} else if (mode == "marked") {
var img = $("FMPIC-" + child.id.replace("RROW-", ""));
if (img && img.src.match("mark_set")) {
child.addClassName("Selected");
- cb.checked = true;
+ if (cb) cb.attr("checked", true);
} else {
child.removeClassName("Selected");
- cb.checked = false;
+ if (cb) cb.attr("checked", false);
}
} else if (mode == "published") {
var img = $("FPPIC-" + child.id.replace("RROW-", ""));
if (img && img.src.match("pub_set")) {
child.addClassName("Selected");
- cb.checked = true;
+ if (cb) cb.attr("checked", true);
} else {
child.removeClassName("Selected");
- cb.checked = false;
+ if (cb) cb.attr("checked", false);
}
} else if (mode == "invert") {
if (child.hasClassName("Selected")) {
child.removeClassName("Selected");
- cb.checked = false;
+ if (cb) cb.attr("checked", false);
} else {
child.addClassName("Selected");
- cb.checked = true;
+ if (cb) cb.attr("checked", true);
}
} else {
child.removeClassName("Selected");
- cb.checked = false;
+ if (cb) cb.attr("checked", false);
}
});
}
}
-function catchupPage() {
-
- var fn = getFeedName(getActiveFeedId(), activeFeedIsCat());
-
- var str = __("Mark all visible articles in %s as read?");
-
- str = str.replace("%s", fn);
-
- if (getInitParam("confirm_feed_catchup") == 1 && !confirm(str)) {
- return;
- }
-
- selectArticles('all');
- selectionToggleUnread(false, 'viewCurrentFeed()', true);
- selectArticles('none');
-}
-
function deleteSelection() {
try {
var str;
if (getActiveFeedId() != 0) {
- str = __("Delete %d selected articles in %s?");
+ str = ngettext("Delete %d selected article in %s?", "Delete %d selected articles in %s?" , rows.length);
} else {
- str = __("Delete %d selected articles?");
+ str = ngettext("Delete %d selected article?", "Delete %d selected articles?", rows.length);
}
str = str.replace("%d", rows.length);
var op;
if (getActiveFeedId() != 0) {
- str = __("Archive %d selected articles in %s?");
+ str = ngettext("Archive %d selected article in %s?", "Archive %d selected articles in %s?", rows.length);
op = "archive";
} else {
- str = __("Move %d archived articles back?");
+ str = ngettext("Move %d archived article back?", "Move %d archived articles back?", rows.length);
+
+ str += " " + __("Please note that unstarred articles might get purged on next feed update.");
+
op = "unarchive";
}
var fn = getFeedName(getActiveFeedId(), activeFeedIsCat());
- var str = __("Mark %d selected articles in %s as read?");
+ var str = ngettext("Mark %d selected article in %s as read?", "Mark %d selected articles in %s as read?", rows.length);
str = str.replace("%d", rows.length);
str = str.replace("%s", fn);
}
function editArticleTags(id) {
- var query = "backend.php?op=dlg&method=editArticleTags¶m=" + param_escape(id);
+ var query = "backend.php?op=article&method=editArticleTags¶m=" + param_escape(id);
if (dijit.byId("editTagsDlg"))
dijit.byId("editTagsDlg").destroyRecursive();
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
- notify('');
- dialog.hide();
+ try {
+ notify('');
+ dialog.hide();
- var data = JSON.parse(transport.responseText);
+ var data = JSON.parse(transport.responseText);
- if (data) {
- var tags_str = article.tags;
- var id = tags_str.id;
+ if (data) {
+ var id = data.id;
- var tags = $("ATSTR-" + id);
- var tooltip = dijit.byId("ATSTRTIP-" + id);
+ console.log(id);
- if (tags) tags.innerHTML = tags_str.content;
- if (tooltip) tooltip.attr('label', tags_str.content_full);
+ var tags = $("ATSTR-" + id);
+ var tooltip = dijit.byId("ATSTRTIP-" + id);
- cache_delete("article:" + id);
+ if (tags) tags.innerHTML = data.content;
+ if (tooltip) tooltip.attr('label', data.content_full);
+ }
+ } catch (e) {
+ exception_error("editArticleTags/inner", e);
}
}});
}
-function cdmScrollToArticleId(id) {
+function cdmScrollToArticleId(id, force) {
try {
var ctr = $("headlines-frame");
var e = $("RROW-" + id);
if (!e || !ctr) return;
- ctr.scrollTop = e.offsetTop;
+ if (force || e.offsetTop+e.offsetHeight > (ctr.scrollTop+ctr.offsetHeight) ||
+ e.offsetTop < ctr.scrollTop) {
+
+ // expanded cdm has a 4px margin now
+ ctr.scrollTop = parseInt(e.offsetTop) - 4;
+ }
} catch (e) {
exception_error("cdmScrollToArticleId", e);
}
}
+function setActiveArticleId(id) {
+ _active_article_id = id;
+}
+
function getActiveArticleId() {
- return active_post_id;
+ return _active_article_id;
}
-function postMouseIn(id) {
+function postMouseIn(e, id) {
post_under_pointer = id;
+
+ if (_post_preview_timeout) window.clearTimeout(_post_preview_timeout);
+
+ /* if (!isCdmMode() || !getInitParam("cdm_expanded")) {
+ _post_preview_timeout = window.setTimeout(function() {
+ displaySmallArticlePreview(e, id);
+ }, 1000);
+ } */
+}
+
+function displaySmallArticlePreview(e, id) {
+ try {
+ var query = "?op=rpc&method=cdmarticlepreview&id=" + id;
+
+ new Ajax.Request("backend.php", {
+ parameters: query,
+ onComplete: function(transport) {
+ cexc = $("CEXC-" + id);
+ preview = $("small_article_preview");
+ row = $("RROW-" + id);
+ ctr = $("headlines-frame");
+
+ if (id != getActiveArticleId() && (!isCdmMode() || (cexc && Element.visible(cexc))) && row && preview) {
+ preview.innerHTML = transport.responseText;
+ new Effect.Appear(preview, {duration:0.2});
+
+ preview.setStyle({
+ left: (e.clientX + 20) + 'px',
+ top: (row.offsetTop + row.offsetHeight*2 + 20 - ctr.scrollTop) + 'px' });
+
+ }
+
+ } });
+
+
+ } catch (e) {
+ exception_error("displaySmallArticlePreview", e);
+ }
}
function postMouseOut(id) {
post_under_pointer = false;
+
+ if (_post_preview_timeout) window.clearTimeout(_post_preview_timeout);
+
+ if (Element.visible("small_article_preview"))
+ Element.hide("small_article_preview");
+}
+
+function unpackVisibleHeadlines() {
+ try {
+
+ if (!isCdmMode()) return;
+
+ $$("#headlines-frame > div[id*=RROW]").each(
+ function(child) {
+ if (child.offsetTop <= $("headlines-frame").scrollTop +
+ $("headlines-frame").offsetHeight) {
+
+ var cencw = $("CENCW-" + child.id.replace("RROW-", ""));
+
+ if (cencw) {
+ cencw.innerHTML = htmlspecialchars_decode(cencw.innerHTML);
+ cencw.setAttribute('id', '');
+ Element.show(cencw);
+ }
+ }
+ }
+ );
+
+
+ } catch (e) {
+ exception_error("unpackVisibleHeadlines", e);
+ }
}
function headlines_scroll_handler(e) {
try {
var hsp = $("headlines-spacer");
+ unpackVisibleHeadlines();
+
if (!_infscroll_disable) {
if ((hsp && e.scrollTop + e.offsetHeight >= hsp.offsetTop - hsp.offsetHeight) ||
(e.scrollHeight != 0 &&
$$("#headlines-frame > div[id*=RROW][class*=Unread]").each(
function(child) {
- if ($("headlines-frame").scrollTop >
+ if (child.hasClassName("Unread") && $("headlines-frame").scrollTop >
(child.offsetTop + child.offsetHeight/2)) {
var id = child.id.replace("RROW-", "");
if (!_infscroll_request_sent) {
catchup_timeout_id = window.setTimeout('catchupBatchedArticles()',
- 2000);
+ 500);
}
}
}
if (ids_to_mark.length == 0) {
alert(__("No articles found to mark"));
} else {
- var msg = __("Mark %d article(s) as read?").replace("%d", ids_to_mark.length);
+ var msg = ngettext("Mark %d article as read?", "Mark %d articles as read?", ids_to_mark.length).replace("%d", ids_to_mark.length);
if (getInitParam("confirm_feed_catchup") != 1 || confirm(msg)) {
}
}
-function cdmExpandArticle(id) {
+function cdmCollapseArticle(event, id) {
try {
+ var row = $("RROW-" + id);
+ var elem = $("CICD-" + id);
- hideAuxDlg();
+ if (elem && row) {
+ var collapse = $$("div#RROW-" + id +
+ " span[class='collapseBtn']")[0];
- var elem = $("CICD-" + active_post_id);
+ Element.hide(elem);
+ Element.show("CEXC-" + id);
+ Element.hide(collapse);
+ row.removeClassName("active");
- var upd_img_pic = $("FUPDPIC-" + id);
+ markHeadline(id, false);
- if (upd_img_pic && (upd_img_pic.src.match("updated.png") ||
- upd_img_pic.src.match("fresh_sign.png"))) {
+ if (id == getActiveArticleId()) {
+ setActiveArticleId(0);
+ }
- upd_img_pic.src = "images/blank_icon.gif";
+ if (event) Event.stop(event);
}
- if (id == active_post_id && Element.visible(elem))
+ } catch (e) {
+ exception_error("cdmCollapseArticle", e);
+ }
+}
+
+function cdmExpandArticle(id) {
+ try {
+ console.log("cdmExpandArticle " + id);
+
+ if (!$("RROW-" + id)) return false;
+
+ var oldrow = $("RROW-" + getActiveArticleId());
+
+ var elem = $("CICD-" + getActiveArticleId());
+
+ if (id == getActiveArticleId() && Element.visible(elem))
return true;
selectArticles("none");
var old_offset = $("RROW-" + id).offsetTop;
- if (active_post_id && elem && !getInitParam("cdm_expanded")) {
+ if (getActiveArticleId() && elem && !getInitParam("cdm_expanded")) {
+ var collapse = $$("div#RROW-" + getActiveArticleId() +
+ " span[class='collapseBtn']")[0];
+
Element.hide(elem);
- Element.show("CEXC-" + active_post_id);
+ Element.show("CEXC-" + getActiveArticleId());
+ Element.hide(collapse);
}
- active_post_id = id;
+ if (oldrow) oldrow.removeClassName("active");
+
+ setActiveArticleId(id);
elem = $("CICD-" + id);
+ var collapse = $$("div#RROW-" + id +
+ " span[class='collapseBtn']")[0];
+
+ var cencw = $("CENCW-" + id);
+
if (!Element.visible(elem)) {
+ if (cencw) {
+ cencw.innerHTML = htmlspecialchars_decode(cencw.innerHTML);
+ cencw.setAttribute('id', '');
+ Element.show(cencw);
+ }
+
Element.show(elem);
Element.hide("CEXC-" + id);
+ Element.show(collapse);
}
var new_offset = $("RROW-" + id).offsetTop;
- $("headlines-frame").scrollTop += (new_offset-old_offset);
-
- if ($("RROW-" + id).offsetTop != old_offset)
- $("headlines-frame").scrollTop = new_offset;
+ if (old_offset > new_offset)
+ $("headlines-frame").scrollTop -= (old_offset-new_offset);
toggleUnread(id, 0, true);
toggleSelected(id);
+ $("RROW-" + id).addClassName("active");
} catch (e) {
exception_error("cdmExpandArticle", e);
return post_under_pointer;
}
-function zoomToArticle(event, id) {
- try {
- var cached_article = cache_get("article: " + id);
-
- if (dijit.byId("ATAB-" + id))
- if (!event || !event.shiftKey)
- return dijit.byId("content-tabs").selectChild(dijit.byId("ATAB-" + id));
-
- if (dijit.byId("ATSTRTIP-" + id))
- dijit.byId("ATSTRTIP-" + id).destroyRecursive();
-
- if (cached_article) {
- //closeArticlePanel();
-
- var article_pane = new dijit.layout.ContentPane({
- title: __("Loading...") , content: cached_article,
- style: 'padding : 0px;',
- id: 'ATAB-' + id,
- closable: true });
-
- dijit.byId("content-tabs").addChild(article_pane);
-
- if (!event || !event.shiftKey)
- dijit.byId("content-tabs").selectChild(article_pane);
-
- if ($("PTITLE-" + id))
- article_pane.attr('title', $("PTITLE-" + id).innerHTML);
-
- } else {
-
- var query = "?op=rpc&method=getArticles&ids=" + param_escape(id);
-
- notify_progress("Loading, please wait...", true);
-
- new Ajax.Request("backend.php", {
- parameters: query,
- onComplete: function(transport) {
- notify('');
-
- var reply = JSON.parse(transport.responseText);
-
- if (reply) {
- //closeArticlePanel();
-
- var content = reply[0]['content'];
-
- var article_pane = new dijit.layout.ContentPane({
- title: "article-" + id , content: content,
- style: 'padding : 0px;',
- id: 'ATAB-' + id,
- closable: true });
-
- dijit.byId("content-tabs").addChild(article_pane);
-
- if (!event || !event.shiftKey)
- dijit.byId("content-tabs").selectChild(article_pane);
-
- if ($("PTITLE-" + id))
- article_pane.attr('title', $("PTITLE-" + id).innerHTML);
- }
-
- } });
- }
-
- } catch (e) {
- exception_error("zoomToArticle", e);
- }
-}
-
function scrollArticle(offset) {
try {
if (!isCdmMode()) {
if (ctr) ctr.innerHTML = elem.labels;
});
-
- cache_headlines(getActiveFeedId(), activeFeedIsCat(), null, $("headlines-frame").innerHTML);
-
}
} catch (e) {
exception_error("show_labels_in_headlines", e);
}
}
-/* function toggleHeadlineActions() {
- try {
- var e = $("headlineActionsBody");
- var p = $("headlineActionsDrop");
-
- if (!Element.visible(e)) {
- Element.show(e);
- } else {
- Element.hide(e);
- }
-
- e.scrollTop = 0;
- e.style.left = (p.offsetLeft + 1) + "px";
- e.style.top = (p.offsetTop + p.offsetHeight + 2) + "px";
-
- } catch (e) {
- exception_error("toggleHeadlineActions", e);
- }
-} */
-
-/* function publishWithNote(id, def_note) {
- try {
- if (!def_note) def_note = '';
-
- var note = prompt(__("Please enter a note for this article:"), def_note);
-
- if (note != undefined) {
- togglePub(id, false, false, note);
- }
-
- } catch (e) {
- exception_error("publishWithNote", e);
- }
-} */
-
function dismissArticle(id) {
try {
var elem = $("RROW-" + id);
+ if (!elem) return;
+
toggleUnread(id, 0, true);
new Effect.Fade(elem, {duration : 0.5});
- active_post_id = false;
+ if (id == getActiveArticleId()) {
+ setActiveArticleId(0);
+ }
} catch (e) {
exception_error("dismissArticle", e);
var elem = $("RROW-" + ids[i]);
if (elem.className && elem.hasClassName("Selected") &&
- ids[i] != active_post_id) {
+ ids[i] != getActiveArticleId()) {
new Effect.Fade(elem, {duration : 0.5});
sel.push(ids[i]);
} else {
try {
//var shift_key = event.shiftKey;
- hideAuxDlg();
-
if (!event.ctrlKey) {
if (!getInitParam("cdm_expanded")) {
return cdmExpandArticle(id);
} else {
+ var elem = $("RROW-" + getActiveArticleId());
+
+ if (elem) elem.removeClassName("active");
+
selectArticles("none");
toggleSelected(id);
var elem = $("RROW-" + id);
var article_is_unread = elem.hasClassName("Unread");
- if (elem)
- elem.removeClassName("Unread");
-
- var upd_img_pic = $("FUPDPIC-" + id);
-
- if (upd_img_pic && (upd_img_pic.src.match("updated.png") ||
- upd_img_pic.src.match("fresh_sign.png"))) {
-
- upd_img_pic.src = "images/blank_icon.gif";
- }
+ elem.removeClassName("Unread");
+ elem.addClassName("active");
- active_post_id = id;
+ setActiveArticleId(id);
if (article_is_unread) {
decrementFeedCounter(getActiveFeedId(), activeFeedIsCat());
handle_rpc_json(transport);
} });
- return true;
+ return !event.shiftKey;
}
} else {
}
toggleUnread(id, 0, false);
- zoomToArticle(event, id);
+
+ openArticleInNewWindow(id);
}
+ var unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length
+ request_counters(unread_in_buffer == 0);
+
} catch (e) {
exception_error("cdmClicked");
}
return false;
}
-function postClicked(event, id) {
- try {
-
- if (!event.ctrlKey) {
- return true;
- } else {
- postOpenInNewTab(event, id);
- return false;
- }
-
- } catch (e) {
- exception_error("postClicked");
- }
-}
-
-function hlOpenInNewTab(event, id) {
- toggleUnread(id, 0, false);
- zoomToArticle(event, id);
-}
-
-function postOpenInNewTab(event, id) {
- closeArticlePanel(id);
- zoomToArticle(event, id);
-}
-
function hlClicked(event, id) {
try {
if (event.which == 2) {
view(id);
return true;
- } else if (event.altKey) {
+ } else if (event.ctrlKey) {
+ toggleSelected(id, true);
+ toggleUnread(id, 0, false);
openArticleInNewWindow(id);
- } else if (!event.ctrlKey) {
- view(id);
return false;
} else {
- toggleSelected(id);
- toggleUnread(id, 0, false);
- zoomToArticle(event, id);
+ view(id);
return false;
}
return getInitParam("combined_display_mode");
}
-function markHeadline(id) {
+function markHeadline(id, marked) {
+ if (marked == undefined) marked = true;
+
var row = $("RROW-" + id);
if (row) {
- var check = $("RCHK-" + id);
+ var check = dijit.byId("RCHK-" + id);
if (check) {
- check.checked = true;
+ check.attr("checked", marked);
}
- row.addClassName("Selected");
+ if (marked)
+ row.addClassName("Selected");
+ else
+ row.removeClassName("Selected");
}
}
function closeArticlePanel() {
- var tabs = dijit.byId("content-tabs");
- var child = tabs.selectedChildWidget;
-
- if (child && tabs.getIndexOfChild(child) > 0) {
- tabs.removeChild(child);
- child.destroy();
- } else {
- if (dijit.byId("content-insert"))
- dijit.byId("headlines-wrap-inner").removeChild(
- dijit.byId("content-insert"));
- }
+ if (dijit.byId("content-insert"))
+ dijit.byId("headlines-wrap-inner").removeChild(
+ dijit.byId("content-insert"));
}
function initHeadlinesMenu() {
}}));
menu.addChild(new dijit.MenuItem({
- label: __("View in a tt-rss tab"),
+ label: __("Display article URL"),
+ onClick: function(event) {
+ displayArticleUrl(this.getParent().callerRowId);
+ }}));
+
+ menu.addChild(new dijit.MenuSeparator());
+
+ menu.addChild(new dijit.MenuItem({
+ label: __("Toggle unread"),
onClick: function(event) {
- hlOpenInNewTab(event, this.getParent().callerRowId);
+ var ids = getSelectedArticleIds2();
+ // cast to string
+ var id = this.getParent().callerRowId + "";
+ ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id];
+
+ selectionToggleUnread(undefined, false, true, ids);
+ }}));
+
+ menu.addChild(new dijit.MenuItem({
+ label: __("Toggle marked"),
+ onClick: function(event) {
+ var ids = getSelectedArticleIds2();
+ // cast to string
+ var id = this.getParent().callerRowId + "";
+ ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id];
+
+ selectionToggleMarked(undefined, false, true, ids);
+ }}));
+
+ menu.addChild(new dijit.MenuItem({
+ label: __("Toggle published"),
+ onClick: function(event) {
+ var ids = getSelectedArticleIds2();
+ // cast to string
+ var id = this.getParent().callerRowId + "";
+ ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id];
+
+ selectionTogglePublished(undefined, false, true, ids);
}}));
menu.addChild(new dijit.MenuSeparator());
var bare_id = id.substr(id.indexOf(":")+1);
var name = label.name[0];
- bare_id = -11-bare_id;
+ bare_id = feed_to_label_id(bare_id);
labelAddMenu.addChild(new dijit.MenuItem({
label: name,
sessionStorage.removeItem(id);
}
-function cache_headlines(feed, is_cat, toolbar_obj, content_obj) {
- if (toolbar_obj && content_obj) {
- cache_set("feed:" + feed + ":" + is_cat,
- JSON.stringify({toolbar: toolbar_obj, content: content_obj}));
- } else {
- try {
- obj = cache_get("feed:" + feed + ":" + is_cat);
-
- if (obj) {
- obj = JSON.parse(obj);
-
- if (toolbar_obj) obj.toolbar = toolbar_obj;
- if (content_obj) obj.content = content_obj;
-
- cache_set("feed:" + feed + ":" + is_cat, JSON.stringify(obj));
- }
-
- } catch (e) {
- console.warn("cache_headlines failed: " + e);
- }
+function cancelSearch() {
+ try {
+ _search_query = "";
+ viewCurrentFeed();
+ } catch (e) {
+ exception_error("cancelSearch", e);
}
}
-function render_local_headlines(feed, is_cat, obj) {
+function setSelectionScore() {
try {
+ var ids = getSelectedArticleIds2();
- dijit.byId("headlines-toolbar").attr('content',
- obj.toolbar);
+ if (ids.length > 0) {
+ console.log(ids);
- dijit.byId("headlines-frame").attr('content',
- obj.content);
+ var score = prompt(__("Please enter new score for selected articles:"), score);
- dojo.parser.parse('headlines-toolbar');
+ if (score != undefined) {
+ var query = "op=rpc&method=setScore&id=" + param_escape(ids.toString()) +
+ "&score=" + param_escape(score);
- $("headlines-frame").scrollTop = 0;
- selectArticles('none');
- setActiveFeedId(feed, is_cat);
- initHeadlinesMenu();
-
- dijit.getEnclosingWidget(
- document.forms["main_toolbar_form"].update).attr('disabled',
- is_cat || feed <= 0);
-
- precache_headlines();
+ new Ajax.Request("backend.php", {
+ parameters: query,
+ onComplete: function(transport) {
+ var reply = JSON.parse(transport.responseText);
+ if (reply) {
+ console.log(ids);
+
+ ids.each(function(id) {
+ var row = $("RROW-" + id);
+
+ if (row) {
+ var pic = row.getElementsByClassName("hlScorePic")[0];
+
+ if (pic) {
+ pic.src = pic.src.replace(/score_.*?\.png/,
+ reply["score_pic"]);
+ pic.setAttribute("score", score);
+ }
+ }
+ });
+ }
+ } });
+ }
+ } else {
+ alert(__("No articles are selected."));
+ }
} catch (e) {
- exception_error("render_local_headlines", e);
+ exception_error("setSelectionScore", e);
}
}
-function precache_headlines_idle() {
+function changeScore(id, pic) {
try {
- if (!feed_precache_timeout_id) {
- if (get_timestamp() - _viewfeed_last > 120) {
+ var score = pic.getAttribute("score");
- var feeds = dijit.byId("feedTree").getVisibleUnreadFeeds();
- var uncached = [];
+ var new_score = prompt(__("Please enter new score for this article:"), score);
- feeds.each(function(item) {
- if (parseInt(item[0]) > 0 && !cache_get("feed:" + item[0] + ":" + item[1]))
- uncached.push(item);
- });
+ if (new_score != undefined) {
- if (uncached.length > 0) {
- var rf = uncached[Math.floor(Math.random()*uncached.length)];
- viewfeed(rf[0], '', rf[1], 0, true);
- }
- }
- }
- precache_idle_timeout_id = setTimeout("precache_headlines_idle()", 1000*30);
+ var query = "op=rpc&method=setScore&id=" + param_escape(id) +
+ "&score=" + param_escape(new_score);
+ new Ajax.Request("backend.php", {
+ parameters: query,
+ onComplete: function(transport) {
+ var reply = JSON.parse(transport.responseText);
+
+ if (reply) {
+ pic.src = pic.src.replace(/score_.*?\.png/, reply["score_pic"]);
+ pic.setAttribute("score", new_score);
+ }
+ } });
+ }
} catch (e) {
- exception_error("precache_headlines_idle", e);
+ exception_error("changeScore", e);
}
}
-function precache_headlines() {
+function displayArticleUrl(id) {
try {
+ var query = "op=rpc&method=getlinktitlebyid&id=" + param_escape(id);
- if (!feed_precache_timeout_id) {
- feed_precache_timeout_id = window.setTimeout(function() {
- var nuf = getNextUnreadFeed(getActiveFeedId(), activeFeedIsCat());
- var nf = dijit.byId("feedTree").getNextFeed(getActiveFeedId(), activeFeedIsCat());
-
- if (nuf && !cache_get("feed:" + nuf + ":" + activeFeedIsCat()))
- viewfeed(nuf, '', activeFeedIsCat(), 0, true);
-
- if (nf && nf[0] != nuf && !cache_get("feed:" + nf[0] + ":" + nf[1]))
- viewfeed(nf[0], '', nf[1], 0, true);
-
- window.setTimeout(function() {
- feed_precache_timeout_id = false;
- }, 3000);
- }, 1000);
- }
+ new Ajax.Request("backend.php", {
+ parameters: query,
+ onComplete: function(transport) {
+ var reply = JSON.parse(transport.responseText);
+ if (reply && reply.link) {
+ prompt(__("Article URL:"), reply.link);
+ }
+ } });
} catch (e) {
- exception_error("precache_headlines", e);
+ exception_error("changeScore", e);
}
}
-function cancelSearch() {
+function openSelectedAttachment(elem) {
try {
- _search_query = "";
- viewCurrentFeed();
+ var url = elem[elem.selectedIndex].value;
+
+ if (url) {
+ window.open(url);
+ elem.selectedIndex = 0;
+ }
+
} catch (e) {
- exception_error("cancelSearch", e);
+ exception_error("openSelectedAttachment", e);
}
}