var cids_requested = [];
var loaded_article_ids = [];
var _last_headlines_update = 0;
+var _headlines_scroll_offset = 0;
var current_first_id = 0;
var _catchup_request_sent = false;
$("headlines-frame").scrollTop = 0;
$("floatingTitle").style.visibility = "hidden";
- $("floatingTitle").setAttribute("rowid", 0);
+ $("floatingTitle").setAttribute("data-article-id", 0);
$("floatingTitle").innerHTML = "";
}
} catch (e) { };
tmp.innerHTML = reply['headlines']['content'];
dojo.parser.parse(tmp);
+ var new_rows = [];
+
while (tmp.hasChildNodes()) {
var row = tmp.removeChild(tmp.firstChild);
dijit.byId("headlines-frame").domNode.appendChild(row);
loaded_article_ids.push(row.id);
+
+ if (!isCdmMode() || row.hasClassName("cdmFeedTitle")) {
+ new_rows.push(row);
+ } else if (isCdmMode()) {
+ var titleWrap = $$("#" + row.id + " .titleWrap")[0];
+
+ if (titleWrap) {
+ new_rows.push(titleWrap);
+ }
+ }
}
}
markHeadline(ids[i]);
}
- initHeadlinesMenu();
+ initHeadlinesMenu(new_rows);
if (_infscroll_disable) {
hsp.innerHTML = "<a href='#' onclick='openNextUnreadFeed()'>" +
function showArticleInHeadlines(id, noexpand) {
try {
- selectArticles("none");
-
- var crow = $("RROW-" + id);
-
- if (!crow) return;
-
- var article_is_unread = crow.hasClassName("Unread");
+ var row = $("RROW-" + id);
+ if (!row) return;
if (!noexpand)
- crow.removeClassName("Unread");
- crow.addClassName("active");
+ row.removeClassName("Unread");
- selectArticles('none');
-
- var view_mode = false;
+ row.addClassName("active");
- try {
- view_mode = document.forms['main_toolbar_form'].view_mode;
- view_mode = view_mode[view_mode.selectedIndex].value;
- } catch (e) {
- //
- }
+ selectArticles('none');
markHeadline(id);
- if (article_is_unread && !noexpand)
- _force_scheduled_update = true;
-
} catch (e) {
exception_error("showArticleInHeadlines", e);
}
var ft = $("floatingTitle");
- if (ft && ft.getAttribute("rowid") == "RROW-" + id) {
+ if (ft && ft.getAttribute("data-article-id") == id) {
var fte = ft.getElementsByClassName("markedPic");
for (var i = 0; i < fte.length; i++)
var ft = $("floatingTitle");
- if (ft && ft.getAttribute("rowid") == "RROW-" + id) {
+ if (ft && ft.getAttribute("data-article-id") == id) {
var fte = ft.getElementsByClassName("pubPic");
for (var i = 0; i < fte.length; i++)
$$("#headlines-frame > div[id*=RROW][class*=Selected]").each(
function(child) {
- rv.push(child.id.replace("RROW-", ""));
+ rv.push(child.getAttribute("data-article-id"));
});
return rv;
var children = $$("#headlines-frame > div[id*=RROW-]");
children.each(function(child) {
- rv.push(child.id.replace("RROW-", ""));
- });
+ if (Element.visible(child)) {
+ rv.push(child.getAttribute("data-article-id"));
+ }
+ });
return rv;
var children = $$(query);
children.each(function(child) {
- var id = child.id.replace("RROW-", "");
+ var id = child.getAttribute("data-article-id");
var cb = dijit.getEnclosingWidget(
child.getElementsByClassName("rchk")[0]);
});
var tmph = dojo.connect(dialog, 'onLoad', function() {
- dojo.disconnect(tmph);
+ dojo.disconnect(tmph);
new Ajax.Autocompleter('tags_str', 'tags_choices',
"backend.php?op=article&method=completeTags",
try {
if (!isCdmMode() || !getInitParam("cdm_expanded")) return;
- $$("#headlines-frame > div[id*=RROW]").each(
+ $$("#headlines-frame span.cencw[id]").each(
function(child) {
- if (child.offsetTop <= $("headlines-frame").scrollTop +
+ var row = $("RROW-" + child.id.replace("CENCW-", ""));
+
+ if (row && row.offsetTop <= $("headlines-frame").scrollTop +
$("headlines-frame").offsetHeight) {
- var cencw = $("CENCW-" + child.id.replace("RROW-", ""));
+ //console.log("unpacking: " + child.id);
- if (cencw) {
- cencw.innerHTML = htmlspecialchars_decode(cencw.innerHTML);
- cencw.setAttribute('id', '');
+ child.innerHTML = htmlspecialchars_decode(child.innerHTML);
+ child.removeAttribute('id');
- PluginHost.run(PluginHost.HOOK_ARTICLE_RENDERED_CDM, child);
+ PluginHost.run(PluginHost.HOOK_ARTICLE_RENDERED_CDM, row);
- Element.show(cencw);
- }
+ Element.show(child);
}
}
);
function headlines_scroll_handler(e) {
try {
+
+ // rate-limit in case of smooth scrolling and similar abominations
+ if (Math.max(e.scrollTop, _headlines_scroll_offset) - Math.min(e.scrollTop, _headlines_scroll_offset) < 25) {
+ return;
+ }
+
+ _headlines_scroll_offset = e.scrollTop;
+
var hsp = $("headlines-spacer");
unpackVisibleHeadlines();
if (isCdmMode() && getInitParam("cdm_auto_catchup") == 1 &&
getSelectedArticleIds2().length <= 1 &&
getInitParam("cdm_expanded")) {
+
var rows = $$("#headlines-frame > div[id*=RROW]");
for (var i = 0; i < rows.length; i++) {
if ($("headlines-frame").scrollTop <= child.offsetTop &&
child.offsetTop - $("headlines-frame").scrollTop < 100 &&
- child.id.replace("RROW-", "") != _active_article_id) {
+ child.getAttribute("data-article-id") != _active_article_id) {
if (_active_article_id) {
var row = $("RROW-" + _active_article_id);
if (row) row.removeClassName("active");
}
- _active_article_id = child.id.replace("RROW-", "");
+ _active_article_id = child.getAttribute("data-article-id");
showArticleInHeadlines(_active_article_id, true);
updateSelectedPrompt();
break;
if (child.hasClassName("Unread") && $("headlines-frame").scrollTop >
(child.offsetTop + child.offsetHeight/2)) {
- var id = child.id.replace("RROW-", "");
+ var id = child.getAttribute("data-article-id")
if (catchup_id_batch.indexOf(id) == -1)
catchup_id_batch.push(id);
scrollToRowId(row.id);
$("floatingTitle").style.visibility = "hidden";
- $("floatingTitle").setAttribute("rowid", false);
+ $("floatingTitle").setAttribute("data-article-id", 0);
}
} catch (e) {
}
}
-function dismissArticles(ids) {
- try {
-
- console.log("dismissArticles: " + ids);
-
- for (var i = 0; i < ids.length; i++) {
- var elem = $("RROW-" + ids[i]);
-
- new Effect.Fade(elem, {
- duration: 0.5, afterFinish: function (obj) {
- Element.remove(obj.element);
- }
- });
-
- if (ids[i] == getActiveArticleId()) {
- setActiveArticleId(0);
- }
- }
-
- selectionToggleUnread(false, false, false, ids);
-
- } catch (e) {
- exception_error("dismissArticles", e);
- }
-
-}
-
-function dismissArticle(id) {
- try {
- dismissArticles([id]);
- } catch (e) {
- exception_error("dismissArticle", e);
- }
-}
-
-function dismissSelectedArticles() {
- try {
- dismissArticles(getSelectedArticleIds2());
- } catch (e) {
- exception_error("dismissSelectedArticles", e);
- }
-}
-
-function dismissReadArticles() {
- try {
- var ids = getLoadedArticleIds();
- var tmp = [];
-
- ids.each(function(id) {
- var elem = $("RROW-" + id);
-
- if (elem && !elem.hasClassName("Unread")) {
- tmp.push(id);
- }
-
- });
-
- dismissArticles(tmp);
-
- } catch (e) {
- exception_error("dismissReadArticles", e);
- }
-}
-
function cdmClicked(event, id) {
try {
//var shift_key = event.shiftKey;
function openArticleInNewWindow(id) {
toggleUnread(id, 0, false);
- window.open("backend.php?op=article&method=redirect&id=" + id);
+
+ var w = window.open("");
+ w.opener = null;
+ w.location = "backend.php?op=article&method=redirect&id=" + id;
}
function isCdmMode() {
function initFloatingMenu() {
try {
- if (dijit.byId("floatingMenu"))
- dijit.byId("floatingMenu").destroyRecursive();
+ if (!dijit.byId("floatingMenu")) {
var menu = new dijit.Menu({
id: "floatingMenu",
targetNodeIds: ["floatingTitle"]
});
- var id = $("floatingTitle").getAttribute("rowid").replace("RROW-", "");
+ var tmph = dojo.connect(menu, '_openMyself', function (event) {
+ var callerNode = event.target, match = null, tries = 0;
+
+ while (match == null && callerNode && tries <= 3) {
+ match = callerNode.getAttribute("data-article-id");
+ callerNode = callerNode.parentNode;
+ ++tries;
+ }
+
+ if (match) this.callerRowId = match;
+
+ });
- headlinesMenuCommon(menu, id);
+ headlinesMenuCommon(menu);
menu.startup();
+ }
+
} catch (e) {
exception_error("initFloatingMenu", e);
}
}
-function headlinesMenuCommon(menu, base_id) {
+function headlinesMenuCommon(menu) {
try {
menu.addChild(new dijit.MenuItem({
label: __("Open original article"),
onClick: function(event) {
- openArticleInNewWindow(base_id ? base_id : this.getParent().callerRowId);
+ openArticleInNewWindow(this.getParent().callerRowId);
}}));
menu.addChild(new dijit.MenuItem({
label: __("Display article URL"),
onClick: function(event) {
- displayArticleUrl(base_id ? base_id : this.getParent().callerRowId);
+ displayArticleUrl(this.getParent().callerRowId);
}}));
menu.addChild(new dijit.MenuSeparator());
onClick: function(event) {
var ids = getSelectedArticleIds2();
// cast to string
- var id = (base_id ? base_id : this.getParent().callerRowId) + "";
+ var id = (this.getParent().callerRowId) + "";
ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id];
selectionToggleUnread(undefined, false, true, ids);
onClick: function(event) {
var ids = getSelectedArticleIds2();
// cast to string
- var id = (base_id ? base_id : this.getParent().callerRowId) + "";
+ var id = (this.getParent().callerRowId) + "";
ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id];
selectionToggleMarked(undefined, false, true, ids);
onClick: function(event) {
var ids = getSelectedArticleIds2();
// cast to string
- var id = (base_id ? base_id : this.getParent().callerRowId) + "";
+ var id = (this.getParent().callerRowId) + "";
ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id];
selectionTogglePublished(undefined, false, true, ids);
menu.addChild(new dijit.MenuItem({
label: __("Mark above as read"),
onClick: function(event) {
- catchupRelativeToArticle(0, base_id ? base_id : this.getParent().callerRowId);
+ catchupRelativeToArticle(0, this.getParent().callerRowId);
}}));
menu.addChild(new dijit.MenuItem({
label: __("Mark below as read"),
onClick: function(event) {
- catchupRelativeToArticle(1, base_id ? base_id : this.getParent().callerRowId);
+ catchupRelativeToArticle(1, this.getParent().callerRowId);
}}));
onClick: function(event) {
var ids = getSelectedArticleIds2();
// cast to string
- var id = (base_id ? base_id : this.getParent().ownerMenu.callerRowId) + "";
+ var id = (this.getParent().ownerMenu.callerRowId) + "";
ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id];
onClick: function(event) {
var ids = getSelectedArticleIds2();
// cast to string
- var id = (base_id ? base_id : this.getParent().ownerMenu.callerRowId) + "";
+ var id = (this.getParent().ownerMenu.callerRowId) + "";
ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id];
}
}
-function initHeadlinesMenu() {
+function initHeadlinesMenu(append_rows) {
try {
- if (dijit.byId("headlinesMenu"))
- dijit.byId("headlinesMenu").destroyRecursive();
-
- var ids = [];
-
- if (!isCdmMode()) {
- nodes = $$("#headlines-frame > div[id*=RROW]");
- } else {
- nodes = $$("#headlines-frame span[id*=RTITLE]");
- }
+ if (!append_rows) {
- nodes.each(function(node) {
- ids.push(node.id);
- });
+ if (dijit.byId("headlinesMenu"))
+ dijit.byId("headlinesMenu").destroyRecursive();
- var menu = new dijit.Menu({
- id: "headlinesMenu",
- targetNodeIds: ids
- });
+ var ids = [];
- var tmph = dojo.connect(menu, '_openMyself', function (event) {
- var callerNode = event.target, match = null, tries = 0;
-
- while (match == null && callerNode && tries <= 3) {
- match = callerNode.id.match("^[A-Z]+[-]([0-9]+)$");
- callerNode = callerNode.parentNode;
- ++tries;
+ if (!isCdmMode()) {
+ nodes = $$("#headlines-frame > div[id*=RROW]");
+ } else {
+ nodes = $$("#headlines-frame span[id*=RTITLE]");
}
- if (match) this.callerRowId = parseInt(match[1]);
-
- });
-
- headlinesMenuCommon(menu, false);
-
- menu.startup();
-
- /* vgroup feed title menu */
-
- var nodes = $$("#headlines-frame > div[class='cdmFeedTitle']");
- var ids = [];
-
- nodes.each(function(node) {
- ids.push(node.id);
- });
-
- if (ids.length > 0) {
- if (dijit.byId("headlinesFeedTitleMenu"))
- dijit.byId("headlinesFeedTitleMenu").destroyRecursive();
+ nodes.each(function (node) {
+ ids.push(node.id);
+ });
var menu = new dijit.Menu({
- id: "headlinesFeedTitleMenu",
+ id: "headlinesMenu",
targetNodeIds: ids
});
var callerNode = event.target, match = null, tries = 0;
while (match == null && callerNode && tries <= 3) {
- console.log(callerNode.id);
- match = callerNode.id.match("^[A-Z]+[-]([0-9]+)$");
+ match = callerNode.getAttribute("data-article-id")
callerNode = callerNode.parentNode;
++tries;
+ }
- console.log(match[1]);
+ if (match) this.callerRowId = match;
+
+ });
+
+ headlinesMenuCommon(menu);
+
+ menu.startup();
+
+ } else {
+ var menu = dijit.byId("headlinesMenu");
+
+ append_rows.each(function (row) {
+ if (!row.hasClassName("cdmFeedTitle")) {
+ menu.bindDomNode(row);
}
+ });
+ }
+
+ /* vgroup feed title menu */
- if (match) this.callerRowId = parseInt(match[1]);
+ if (!append_rows) {
+ var nodes = $$("#headlines-frame > div[class='cdmFeedTitle']");
+ var ids = [];
+
+ nodes.each(function(node) {
+ ids.push(node.id);
});
- menu.addChild(new dijit.MenuItem({
- label: __("Select articles in group"),
- onClick: function(event) {
- selectArticles("all",
- "#headlines-frame > div[id*=RROW]"+
- "[orig-feed-id='"+menu.callerRowId+"']");
+ if (ids.length > 0) {
+ if (dijit.byId("headlinesFeedTitleMenu"))
+ dijit.byId("headlinesFeedTitleMenu").destroyRecursive();
- }}));
+ var menu = new dijit.Menu({
+ id: "headlinesFeedTitleMenu",
+ targetNodeIds: ids
+ });
- menu.addChild(new dijit.MenuItem({
- label: __("Mark group as read"),
- onClick: function(event) {
- selectArticles("none");
- selectArticles("all",
- "#headlines-frame > div[id*=RROW]"+
- "[orig-feed-id='"+menu.callerRowId+"']");
+ var tmph = dojo.connect(menu, '_openMyself', function (event) {
+ var callerNode = event.target, match = null, tries = 0;
- catchupSelection();
- }}));
+ while (match == null && callerNode && tries <= 3) {
+ match = callerNode.getAttribute("data-feed-id")
+ callerNode = callerNode.parentNode;
+ ++tries;
+ }
+ if (match) this.callerRowId = match;
- menu.addChild(new dijit.MenuItem({
- label: __("Mark feed as read"),
- onClick: function(event) {
- catchupFeedInGroup(menu.callerRowId);
- }}));
+ });
- menu.addChild(new dijit.MenuItem({
- label: __("Edit feed"),
- onClick: function(event) {
- editFeed(menu.callerRowId);
- }}));
+ menu.addChild(new dijit.MenuItem({
+ label: __("Select articles in group"),
+ onClick: function (event) {
+ selectArticles("all",
+ "#headlines-frame > div[id*=RROW]" +
+ "[data-orig-feed-id='" + menu.callerRowId + "']");
- menu.startup();
+ }
+ }));
+
+ menu.addChild(new dijit.MenuItem({
+ label: __("Mark group as read"),
+ onClick: function (event) {
+ selectArticles("none");
+ selectArticles("all",
+ "#headlines-frame > div[id*=RROW]" +
+ "[data-orig-feed-id='" + menu.callerRowId + "']");
+
+ catchupSelection();
+ }
+ }));
+
+ menu.addChild(new dijit.MenuItem({
+ label: __("Mark feed as read"),
+ onClick: function (event) {
+ catchupFeedInGroup(menu.callerRowId);
+ }
+ }));
+ menu.addChild(new dijit.MenuItem({
+ label: __("Edit feed"),
+ onClick: function (event) {
+ editFeed(menu.callerRowId);
+ }
+ }));
+
+ menu.startup();
+ }
+ } else {
+ var menu = dijit.byId("headlinesFeedTitleMenu");
+
+ append_rows.each(function (row) {
+ if (row.hasClassName("cdmFeedTitle")) {
+ menu.bindDomNode(row);
+ }
+ });
}
} catch (e) {
var header = child.getElementsByClassName("cdmHeader")[0];
- if (unread_only || child.id != $("floatingTitle").getAttribute("rowid")) {
- if (child.id != $("floatingTitle").getAttribute("rowid")) {
- $("floatingTitle").setAttribute("rowid", child.id);
+ if (unread_only || child.getAttribute("data-article-id") != $("floatingTitle").getAttribute("data-article-id")) {
+ if (child.getAttribute("data-article-id") != $("floatingTitle").getAttribute("data-article-id")) {
+
+ $("floatingTitle").setAttribute("data-article-id", child.getAttribute("data-article-id"));
$("floatingTitle").innerHTML = header.innerHTML;
$("floatingTitle").firstChild.innerHTML = "<img class='anchor markedPic' src='images/page_white_go.png' onclick=\"scrollToRowId('"+child.id+"')\">" + $("floatingTitle").firstChild.innerHTML;
function catchupCurrentBatchIfNeeded() {
if (catchup_id_batch.length > 0) {
window.clearTimeout(catchup_timeout_id);
- catchup_timeout_id = window.setTimeout('catchupBatchedArticles()', 1000);
+ catchup_timeout_id = window.setTimeout(catchupBatchedArticles, 1000);
if (catchup_id_batch.length >= 10) {
catchupBatchedArticles();