var cids_requested = [];
var loaded_article_ids = [];
-
-var _post_preview_timeout = false;
+var _last_headlines_update = 0;
var has_storage = 'sessionStorage' in window && window['sessionStorage'] !== null;
try {
handle_rpc_json(transport);
- loading_set_progress(25);
-
console.log("headlines_callback2 [offset=" + offset + "] B:" + background + " I:" + infscroll_req);
var is_cat = false;
if (background) {
var content = reply['headlines']['content'];
- if (getInitParam("cdm_auto_catchup") == 1) {
- content = content + "<div id='headlines-spacer'></div>";
- }
+ content = content + "<div id='headlines-spacer'></div>";
return;
}
- setActiveFeedId(feed_id, is_cat);
+ if (feed_id != getActiveFeedId() || is_cat != activeFeedIsCat())
+ return;
/* dijit.getEnclosingWidget(
document.forms["main_toolbar_form"].update).attr('disabled',
try {
if (infscroll_req == false) {
$("headlines-frame").scrollTop = 0;
+
+ Element.hide("floatingTitle");
+ $("floatingTitle").setAttribute("rowid", 0);
+ $("floatingTitle").innerHTML = "";
}
} catch (e) { };
+ $("headlines-frame").removeClassName("cdm");
+ $("headlines-frame").removeClassName("normal");
+
+ $("headlines-frame").addClassName(isCdmMode() ? "cdm" : "normal");
+
var headlines_count = reply['headlines-info']['count'];
vgroup_last_feed = reply['headlines-info']['vgroup_last_feed'];
- if (parseInt(headlines_count) < getInitParam("default_article_limit")) {
+ if (parseInt(headlines_count) < 30) {
_infscroll_disable = 1;
} else {
_infscroll_disable = 0;
}
});
- if (getInitParam("cdm_auto_catchup") == 1) {
- var hsp = $("headlines-spacer");
- if (!hsp) hsp = new Element("DIV", {"id": "headlines-spacer"});
- dijit.byId('headlines-frame').domNode.appendChild(hsp);
- }
+ var hsp = $("headlines-spacer");
+ if (!hsp) hsp = new Element("DIV", {"id": "headlines-spacer"});
+ dijit.byId('headlines-frame').domNode.appendChild(hsp);
initHeadlinesMenu();
if (!hsp) hsp = new Element("DIV", {"id": "headlines-spacer"});
- fixHeadlinesOrder(getLoadedArticleIds());
-
if (getInitParam("cdm_auto_catchup") == 1) {
c.domNode.appendChild(hsp);
}
initHeadlinesMenu();
new_elems.each(function(child) {
- var cb = dijit.byId(child.id.replace("RROW-", "RCHK-"));
-
- if (!cb) {
- dojo.parser.parse(child);
+ dojo.parser.parse(child);
- if (!Element.visible(child))
- new Effect.Appear(child, { duration : 0.5 });
- } else {
- c.domNode.removeChild(child);
- }
+ if (!Element.visible(child))
+ new Effect.Appear(child, { duration : 0.5 });
});
} else {
}
_infscroll_request_sent = 0;
+ _last_headlines_update = new Date().getTime();
unpackVisibleHeadlines();
+ // if we have some more space in the buffer, why not try to fill it
+
+ if (!_infscroll_disable && $("headlines-spacer") &&
+ $("headlines-spacer").offsetTop < $("headlines-frame").offsetHeight) {
+
+ window.setTimeout(function() {
+ loadMoreHeadlines();
+ }, 250);
+ }
+
notify("");
} catch (e) {
c.domNode.scrollTop = 0;
} catch (e) { };
+ PluginHost.run(PluginHost.HOOK_ARTICLE_RENDERED, article);
+
c.attr('content', article);
correctHeadlinesOffset(getActiveArticleId());
}
}
-function showArticleInHeadlines(id) {
+function showArticleInHeadlines(id, noexpand) {
try {
selectArticles("none");
var article_is_unread = crow.hasClassName("Unread");
- crow.removeClassName("Unread");
+ if (!noexpand)
+ crow.removeClassName("Unread");
crow.addClassName("active");
selectArticles('none');
markHeadline(id);
- if (article_is_unread)
+ if (article_is_unread && !noexpand)
_force_scheduled_update = true;
} catch (e) {
}
}
-function view(id) {
+function view(id, activefeed, noexpand) {
try {
var oldrow = $("RROW-" + getActiveArticleId());
if (oldrow) oldrow.removeClassName("active");
var crow = $("RROW-" + id);
if (!crow) return;
+ if (noexpand) {
+ setActiveArticleId(id);
+ showArticleInHeadlines(id, noexpand);
+ return;
+ }
console.log("loading article: " + id);
try {
var query = "?op=rpc&id=" + id + "&method=mark";
- var img = $("FMPIC-" + id);
+ var row = $("RROW-" + id);
+ if (!row) return;
- if (!img) return;
+ var imgs = [];
- if (img.src.match("mark_unset")) {
- img.src = img.src.replace("mark_unset", "mark_set");
- img.alt = __("Unstar article");
- query = query + "&mark=1";
+ var row_imgs = row.getElementsByClassName("markedPic");
- } else {
- img.src = img.src.replace("mark_set", "mark_unset");
- img.alt = __("Star article");
- query = query + "&mark=0";
+ for (var i = 0; i < row_imgs.length; i++)
+ imgs.push(row_imgs[i]);
+
+ var ft = $("floatingTitle");
+
+ if (ft && ft.getAttribute("rowid") == "RROW-" + id) {
+ var fte = ft.getElementsByClassName("markedPic");
+
+ for (var i = 0; i < fte.length; i++)
+ imgs.push(fte[i]);
}
+ for (i = 0; i < imgs.length; i++) {
+ var img = imgs[i];
+
+ if (!row.hasClassName("marked")) {
+ img.src = img.src.replace("mark_unset", "mark_set");
+ img.alt = __("Unstar article");
+ query = query + "&mark=1";
+ } else {
+ img.src = img.src.replace("mark_set", "mark_unset");
+ img.alt = __("Star article");
+ query = query + "&mark=0";
+ }
+ }
+
+ row.toggleClassName("marked");
+
if (!client_only) {
new Ajax.Request("backend.php", {
parameters: query,
query = query + "¬e=undefined";
}
- var img = $("FPPIC-" + id);
+ var row = $("RROW-" + id);
+ if (!row) return;
- if (!img) return;
+ var imgs = [];
- if (img.src.match("pub_unset") || note != undefined) {
- img.src = img.src.replace("pub_unset", "pub_set");
- img.alt = __("Unpublish article");
- query = query + "&pub=1";
+ var row_imgs = row.getElementsByClassName("pubPic");
- } else {
- img.src = img.src.replace("pub_set", "pub_unset");
- img.alt = __("Publish article");
+ for (var i = 0; i < row_imgs.length; i++)
+ imgs.push(row_imgs[i]);
+
+ var ft = $("floatingTitle");
- query = query + "&pub=0";
+ if (ft && ft.getAttribute("rowid") == "RROW-" + id) {
+ var fte = ft.getElementsByClassName("pubPic");
+
+ for (var i = 0; i < fte.length; i++)
+ imgs.push(fte[i]);
}
+ for (i = 0; i < imgs.length; i++) {
+ var img = imgs[i];
+
+ if (!row.hasClassName("published") || note != undefined) {
+ img.src = img.src.replace("pub_unset", "pub_set");
+ img.alt = __("Unpublish article");
+ query = query + "&pub=1";
+ } else {
+ img.src = img.src.replace("pub_set", "pub_unset");
+ img.alt = __("Publish article");
+ query = query + "&pub=0";
+ }
+ }
+
+ if (note != undefined)
+ row.addClassName("published");
+ else
+ row.toggleClassName("published");
+
if (!client_only) {
new Ajax.Request("backend.php", {
parameters: query,
}
}
-function moveToPost(mode, noscroll) {
+function moveToPost(mode, noscroll, noexpand) {
try {
scrollArticle(ctr.offsetHeight/4);
} else if (next_id) {
- cdmExpandArticle(next_id);
+ cdmExpandArticle(next_id, noexpand);
cdmScrollToArticleId(next_id, true);
}
} else if (next_id) {
correctHeadlinesOffset(next_id);
- view(next_id, getActiveFeedId());
+ view(next_id, getActiveFeedId(), noexpand);
}
}
}
if (!getInitParam("cdm_expanded")) {
- if (!noscroll && article.offsetTop < ctr.scrollTop) {
+ if (!noscroll && article && article.offsetTop < ctr.scrollTop) {
scrollArticle(-ctr.offsetHeight/4);
} else {
- cdmExpandArticle(prev_id);
+ cdmExpandArticle(prev_id, noexpand);
cdmScrollToArticleId(prev_id, true);
}
} else {
scrollArticle(-ctr.offsetHeight/3);
} else if (!noscroll && prev_article &&
prev_article.offsetTop < ctr.scrollTop) {
- cdmExpandArticle(prev_id);
+ cdmExpandArticle(prev_id, noexpand);
scrollArticle(-ctr.offsetHeight/4);
} else if (prev_id) {
- cdmExpandArticle(prev_id);
+ cdmExpandArticle(prev_id, noexpand);
cdmScrollToArticleId(prev_id, noscroll);
}
}
} else if (prev_id) {
correctHeadlinesOffset(prev_id);
- view(prev_id, getActiveFeedId());
+ view(prev_id, getActiveFeedId(), noexpand);
}
}
}
function toggleSelected(id, force_on) {
try {
-
- var cb = dijit.byId("RCHK-" + id);
var row = $("RROW-" + id);
if (row) {
+ var cb = dijit.getEnclosingWidget(
+ row.getElementsByClassName("rchk")[0]);
+
if (row.hasClassName('Selected') && !force_on) {
row.removeClassName('Selected');
if (cb) cb.attr("checked", false);
if (cb) cb.attr("checked", true);
}
}
+
+ updateSelectedPrompt();
} catch (e) {
exception_error("toggleSelected", e);
}
}
+function updateSelectedPrompt() {
+ try {
+ var count = getSelectedArticleIds2().size();
+ var elem = $("selected_prompt");
+
+ if (elem) {
+ elem.innerHTML = ngettext("%d article selected",
+ "%d articles selected", count).replace("%d", count);
+
+ if (count > 0)
+ Element.show(elem);
+ else
+ Element.hide(elem);
+ }
+
+ } catch (e) {
+ exception_error("updateSelectedPrompt", e);
+ }
+}
+
function toggleUnread_afh(effect) {
try {
return;
}
- var query = "?op=rpc&method=removeFromLabel&ids=" +
+ var query = "?op=article&method=removeFromLabel&ids=" +
param_escape(ids.toString()) + "&lid=" + param_escape(id);
console.log(query);
return;
}
- var query = "?op=rpc&method=assignToLabel&ids=" +
+ var query = "?op=article&method=assignToLabel&ids=" +
param_escape(ids.toString()) + "&lid=" + param_escape(id);
console.log(query);
children.each(function(child) {
var id = child.id.replace("RROW-", "");
- var cb = dijit.byId("RCHK-" + id);
+
+ var cb = dijit.getEnclosingWidget(
+ child.getElementsByClassName("rchk")[0]);
if (mode == "all") {
child.addClassName("Selected");
if (cb) cb.attr("checked", false);
}
} else if (mode == "marked") {
- var img = $("FMPIC-" + child.id.replace("RROW-", ""));
-
- if (img && img.src.match("mark_set")) {
+ if (child.hasClassName("marked")) {
child.addClassName("Selected");
if (cb) cb.attr("checked", true);
} else {
if (cb) cb.attr("checked", false);
}
} else if (mode == "published") {
- var img = $("FPPIC-" + child.id.replace("RROW-", ""));
-
- if (img && img.src.match("pub_set")) {
+ if (child.hasClassName("published")) {
child.addClassName("Selected");
if (cb) cb.attr("checked", true);
} else {
}
});
+ updateSelectedPrompt();
+
} catch (e) {
exception_error("selectArticles", e);
}
}
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);
}
}});
dojo.disconnect(tmph);
new Ajax.Autocompleter('tags_str', 'tags_choices',
- "backend.php?op=rpc&method=completeTags",
+ "backend.php?op=article&method=completeTags",
{ tokens: ',', paramName: "search" });
});
function setActiveArticleId(id) {
_active_article_id = id;
+ PluginHost.run(PluginHost.HOOK_ARTICLE_SET_ACTIVE, _active_article_id);
}
function getActiveArticleId() {
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(
var cencw = $("CENCW-" + child.id.replace("RROW-", ""));
if (cencw) {
+ PluginHost.run(PluginHost.HOOK_ARTICLE_RENDERED_CDM, child);
+
cencw.innerHTML = htmlspecialchars_decode(cencw.innerHTML);
cencw.setAttribute('id', '');
Element.show(cencw);
}
);
-
} catch (e) {
exception_error("unpackVisibleHeadlines", e);
}
unpackVisibleHeadlines();
+ // set topmost child in the buffer as active
+ if (getInitParam("cdm_auto_catchup") == 1 &&
+ (!isCdmMode() || getInitParam("cdm_expanded"))) {
+ var rows = $$("#headlines-frame > div[id*=RROW]");
+
+ for (var i = 0; i < rows.length; i++) {
+ var child = rows[i];
+
+ if ($("headlines-frame").scrollTop < child.offsetTop &&
+ child.offsetTop - $("headlines-frame").scrollTop < 100) {
+
+ if (_active_article_id) {
+ var row = $("RROW-" + _active_article_id);
+ if (row) row.removeClassName("active");
+ }
+
+ _active_article_id = child.id.replace("RROW-", "");
+ showArticleInHeadlines(_active_article_id, true);
+ updateSelectedPrompt();
+ break;
+ }
+ }
+ }
+
if (!_infscroll_disable) {
if ((hsp && e.scrollTop + e.offsetHeight >= hsp.offsetTop - hsp.offsetHeight) ||
(e.scrollHeight != 0 &&
if (hsp) hsp.innerHTML = "";
}
+ if (getInitParam("cdm_expanded") && isCdmMode()) {
+ updateFloatingTitle();
+ }
+
if (getInitParam("cdm_auto_catchup") == 1) {
+ // let's get DOM some time to settle down
+ var ts = new Date().getTime();
+ if (ts - _last_headlines_update < 100) return;
+
$$("#headlines-frame > div[id*=RROW][class*=Unread]").each(
function(child) {
if (child.hasClassName("Unread") && $("headlines-frame").scrollTop >
//console.log("auto_catchup_batch: " + catchup_id_batch.toString());
}
+
});
if (catchup_id_batch.length > 0) {
onComplete: function(transport) {
handle_rpc_json(transport);
+ reply = JSON.parse(transport.responseText);
+ var batch = reply.ids;
+
batch.each(function(id) {
+ console.log(id);
var elem = $("RROW-" + id);
if (elem) elem.removeClassName("Unread");
catchup_id_batch.remove(id);
}
}
-function cdmCollapseArticle(event, id) {
+function cdmCollapseArticle(event, id, unmark) {
try {
+ if (unmark == undefined) unmark = true;
+
var row = $("RROW-" + id);
var elem = $("CICD-" + id);
Element.hide(elem);
Element.show("CEXC-" + id);
Element.hide(collapse);
- row.removeClassName("active");
- markHeadline(id, false);
+ if (unmark) {
+ row.removeClassName("active");
+
+ markHeadline(id, false);
- if (id == getActiveArticleId()) {
- setActiveArticleId(0);
+ if (id == getActiveArticleId()) {
+ setActiveArticleId(0);
+ }
+
+ updateSelectedPrompt();
}
if (event) Event.stop(event);
+
+ PluginHost.run(PluginHost.HOOK_ARTICLE_COLLAPSED, id);
}
} catch (e) {
}
}
-function cdmExpandArticle(id) {
+function cdmExpandArticle(id, noexpand) {
try {
console.log("cdmExpandArticle " + id);
var cencw = $("CENCW-" + id);
- if (!Element.visible(elem)) {
+ if (!Element.visible(elem) && !noexpand) {
if (cencw) {
cencw.innerHTML = htmlspecialchars_decode(cencw.innerHTML);
cencw.setAttribute('id', '');
if (old_offset > new_offset)
$("headlines-frame").scrollTop -= (old_offset-new_offset);
- toggleUnread(id, 0, true);
+ if (!noexpand)
+ toggleUnread(id, 0, true);
toggleSelected(id);
$("RROW-" + id).addClassName("active");
+ PluginHost.run(PluginHost.HOOK_ARTICLE_EXPANDED, id);
+
} catch (e) {
exception_error("cdmExpandArticle", e);
}
return false;
}
-function fixHeadlinesOrder(ids) {
- try {
- for (var i = 0; i < ids.length; i++) {
- var e = $("RROW-" + ids[i]);
-
- if (e) {
- if (i % 2 == 0) {
- e.removeClassName("even");
- e.addClassName("odd");
- } else {
- e.removeClassName("odd");
- e.addClassName("even");
- }
- }
- }
- } catch (e) {
- exception_error("fixHeadlinesOrder", e);
- }
-}
-
function getArticleUnderPointer() {
return post_under_pointer;
}
new Effect.Fade(elem, {duration : 0.5});
+ // Remove the content, too
+ var elem_content = $("CICD-" + id);
+ if (elem_content) {
+ Element.remove(elem_content);
+ }
+
if (id == getActiveArticleId()) {
setActiveArticleId(0);
}
ids[i] != getActiveArticleId()) {
new Effect.Fade(elem, {duration : 0.5});
sel.push(ids[i]);
+
+ // Remove the content, too
+ var elem_content = $("CICD-" + ids[i]);
+ if (elem_content) {
+ Element.remove(elem_content);
+ }
} else {
tmp.push(ids[i]);
}
if (sel.length > 0)
selectionToggleUnread(false);
- fixHeadlinesOrder(tmp);
} catch (e) {
exception_error("dismissSelectedArticles", e);
!elem.hasClassName("Selected")) {
new Effect.Fade(elem, {duration : 0.5});
+
+ // Remove the content, too
+ var elem_content = $("CICD-" + ids[i]);
+ if (elem_content) {
+ Element.remove(elem_content);
+ }
} else {
tmp.push(ids[i]);
}
}
- fixHeadlinesOrder(tmp);
-
} catch (e) {
- exception_error("dismissSelectedArticles", e);
+ exception_error("dismissReadArticles", e);
}
}
var row = $("RROW-" + id);
if (row) {
- var check = dijit.byId("RCHK-" + id);
+ var check = dijit.getEnclosingWidget(
+ row.getElementsByClassName("rchk")[0]);
if (check) {
check.attr("checked", marked);
}}));
menu.addChild(new dijit.MenuItem({
- label: __("Toggle marked"),
+ label: __("Toggle starred"),
onClick: function(event) {
var ids = getSelectedArticleIds2();
// cast to string
}
}
-
-function player(elem) {
- var aid = elem.getAttribute("audio-id");
- var status = elem.getAttribute("status");
-
- var audio = $(aid);
-
- if (audio) {
- if (status == 0) {
- audio.play();
- status = 1;
- elem.innerHTML = __("Playing...");
- elem.title = __("Click to pause");
- elem.addClassName("playing");
- } else {
- audio.pause();
- status = 0;
- elem.innerHTML = __("Play");
- elem.title = __("Click to play");
- elem.removeClassName("playing");
- }
-
- elem.setAttribute("status", status);
- } else {
- alert("Your browser doesn't seem to support HTML5 audio.");
- }
-}
-
function cache_set(id, obj) {
//console.log("cache_set: " + id);
if (has_storage)
var score = prompt(__("Please enter new score for selected articles:"), score);
if (score != undefined) {
- var query = "op=rpc&method=setScore&id=" + param_escape(ids.toString()) +
+ var query = "op=article&method=setScore&id=" + param_escape(ids.toString()) +
"&score=" + param_escape(score);
new Ajax.Request("backend.php", {
if (new_score != undefined) {
- var query = "op=rpc&method=setScore&id=" + param_escape(id) +
+ var query = "op=article&method=setScore&id=" + param_escape(id) +
"&score=" + param_escape(new_score);
new Ajax.Request("backend.php", {
exception_error("openSelectedAttachment", e);
}
}
+
+function updateFloatingTitle() {
+ try {
+ var hf = $("headlines-frame");
+ var child = $("RROW-" + _active_article_id);
+
+ if (child && child.offsetTop + child.offsetHeight > hf.scrollTop) {
+
+ var header = child.getElementsByClassName("cdmHeader")[0];
+
+ if (child.id != $("floatingTitle").getAttribute("rowid")) {
+ $("floatingTitle").setAttribute("rowid", child.id);
+ $("floatingTitle").innerHTML = header.innerHTML;
+ }
+
+ if (child.offsetTop < hf.scrollTop - header.offsetHeight - 100 &&
+ child.offsetTop + child.offsetHeight - hf.scrollTop > 100)
+ Element.show("floatingTitle");
+ else
+ Element.hide("floatingTitle");
+ }
+
+ } catch (e) {
+ exception_error("updateFloatingTitle", e);
+ }
+}