var article_cache = new Array(); var _active_article_id = 0; var vgroup_last_feed = false; var post_under_pointer = false; var last_requested_article = false; var catchup_id_batch = []; var catchup_timeout_id = false; var cids_requested = []; var loaded_article_ids = []; var _last_headlines_update = 0; var has_storage = 'sessionStorage' in window && window['sessionStorage'] !== null; function headlines_callback2(transport, offset, background, infscroll_req) { try { handle_rpc_json(transport); console.log("headlines_callback2 [offset=" + offset + "] B:" + background + " I:" + infscroll_req); var is_cat = false; var feed_id = false; var reply = false; try { reply = JSON.parse(transport.responseText); } catch (e) { console.error(e); } if (reply) { is_cat = reply['headlines']['is_cat']; feed_id = reply['headlines']['id']; if (background) { var content = reply['headlines']['content']; content = content + "
"; return; } if (feed_id != getActiveFeedId() || is_cat != activeFeedIsCat()) return; /* dijit.getEnclosingWidget( document.forms["main_toolbar_form"].update).attr('disabled', is_cat || feed_id <= 0); */ 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) < 30) { _infscroll_disable = 1; } else { _infscroll_disable = 0; } var counters = reply['counters']; var articles = reply['articles']; //var runtime_info = reply['runtime-info']; if (infscroll_req == false) { loaded_article_ids = []; dijit.byId("headlines-frame").attr('content', reply['headlines']['content']); dijit.byId("headlines-toolbar").attr('content', reply['headlines']['toolbar']); $$("#headlines-frame > div[id*=RROW]").each(function(row) { if (loaded_article_ids.indexOf(row.id) != -1) { row.parentNode.removeChild(row); } else { loaded_article_ids.push(row.id); } }); var hsp = $("headlines-spacer"); if (!hsp) hsp = new Element("DIV", {"id": "headlines-spacer"}); dijit.byId('headlines-frame').domNode.appendChild(hsp); initHeadlinesMenu(); if (_search_query) { $("feed_title").innerHTML += "" + " (" + __("Cancel search") + ")" + ""; } } else { if (headlines_count > 0 && feed_id == getActiveFeedId() && is_cat == activeFeedIsCat()) { console.log("adding some more headlines: " + headlines_count); var c = dijit.byId("headlines-frame"); var ids = getSelectedArticleIds2(); var new_elems = []; $("headlines-tmp").innerHTML = reply['headlines']['content']; var hsp = $("headlines-spacer"); if (hsp) c.domNode.removeChild(hsp); $$("#headlines-tmp > div").each(function(row) { if (row.className == 'cdmFeedTitle') { row.style.display = 'none'; c.domNode.appendChild(row); new_elems.push(row); } else if (loaded_article_ids.indexOf(row.id) == -1) { row.style.display = 'none'; c.domNode.appendChild(row); new_elems.push(row); loaded_article_ids.push(row.id); } else { row.parentNode.removeChild(row); } }); if (!hsp) hsp = new Element("DIV", {"id": "headlines-spacer"}); if (getInitParam("cdm_auto_catchup") == 1) { c.domNode.appendChild(hsp); } console.log("added " + new_elems.size() + " headlines"); if (new_elems.size() == 0) _infscroll_disable = true; console.log("restore selected ids: " + ids); for (var i = 0; i < ids.length; i++) { markHeadline(ids[i]); } initHeadlinesMenu(); new_elems.each(function(child) { dojo.parser.parse(child); if (!Element.visible(child)) new Effect.Appear(child, { duration : 0.5 }); }); } else { console.log("no new headlines received"); var hsp = $("headlines-spacer"); if (hsp) hsp.innerHTML = ""; } } if (articles) { for (var i = 0; i < articles.length; i++) { var a_id = articles[i]['id']; cache_set("article:" + a_id, articles[i]['content']); } } else { console.log("no cached articles received"); } if (counters) parse_counters(counters); else request_counters(true); } else if (transport.responseText) { console.error("Invalid object received: " + transport.responseText); dijit.byId("headlines-frame").attr('content', "
" +
__("Loading, please wait...");
loadMoreHeadlines();
return;
}
} else {
if (hsp) hsp.innerHTML = "";
}
if (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 >
(child.offsetTop + child.offsetHeight/2)) {
var id = child.id.replace("RROW-", "");
if (catchup_id_batch.indexOf(id) == -1)
catchup_id_batch.push(id);
//console.log("auto_catchup_batch: " + catchup_id_batch.toString());
}
});
if (catchup_id_batch.length > 0) {
window.clearTimeout(catchup_timeout_id);
if (!_infscroll_request_sent) {
catchup_timeout_id = window.setTimeout('catchupBatchedArticles()',
500);
}
}
}
} catch (e) {
console.warn("headlines_scroll_handler: " + e);
}
}
function catchupBatchedArticles() {
try {
if (catchup_id_batch.length > 0 && !_infscroll_request_sent) {
// make a copy of the array
var batch = catchup_id_batch.slice();
var query = "?op=rpc&method=catchupSelected" +
"&cmode=0&ids=" + param_escape(batch.toString());
console.log(query);
new Ajax.Request("backend.php", {
parameters: query,
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);
});
} });
}
} catch (e) {
exception_error("catchupBatchedArticles", e);
}
}
function catchupRelativeToArticle(below, id) {
try {
if (!id) id = getActiveArticleId();
if (!id) {
alert(__("No article is selected."));
return;
}
var visible_ids = getVisibleArticleIds();
var ids_to_mark = new Array();
if (!below) {
for (var i = 0; i < visible_ids.length; i++) {
if (visible_ids[i] != id) {
var e = $("RROW-" + visible_ids[i]);
if (e && e.hasClassName("Unread")) {
ids_to_mark.push(visible_ids[i]);
}
} else {
break;
}
}
} else {
for (var i = visible_ids.length-1; i >= 0; i--) {
if (visible_ids[i] != id) {
var e = $("RROW-" + visible_ids[i]);
if (e && e.hasClassName("Unread")) {
ids_to_mark.push(visible_ids[i]);
}
} else {
break;
}
}
}
if (ids_to_mark.length == 0) {
alert(__("No articles found to mark"));
} else {
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)) {
for (var i = 0; i < ids_to_mark.length; i++) {
var e = $("RROW-" + ids_to_mark[i]);
e.removeClassName("Unread");
}
var query = "?op=rpc&method=catchupSelected" +
"&cmode=0" + "&ids=" + param_escape(ids_to_mark.toString());
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
handle_rpc_json(transport);
} });
}
}
} catch (e) {
exception_error("catchupRelativeToArticle", e);
}
}
function cdmCollapseArticle(event, id, unmark) {
try {
if (unmark == undefined) unmark = true;
var row = $("RROW-" + id);
var elem = $("CICD-" + id);
if (elem && row) {
var collapse = $$("div#RROW-" + id +
" span[class='collapseBtn']")[0];
Element.hide(elem);
Element.show("CEXC-" + id);
Element.hide(collapse);
if (unmark) {
row.removeClassName("active");
markHeadline(id, false);
if (id == getActiveArticleId()) {
setActiveArticleId(0);
}
updateSelectedPrompt();
}
if (event) Event.stop(event);
PluginHost.run(PluginHost.HOOK_ARTICLE_COLLAPSED, id);
if (row.offsetTop < $("headlines-frame").scrollTop)
scrollToRowId(row.id);
Element.hide("floatingTitle");
$("floatingTitle").setAttribute("rowid", false);
}
} catch (e) {
exception_error("cdmCollapseArticle", e);
}
}
function cdmExpandArticle(id, noexpand) {
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 (getActiveArticleId() && elem && !getInitParam("cdm_expanded")) {
var collapse = $$("div#RROW-" + getActiveArticleId() +
" span[class='collapseBtn']")[0];
Element.hide(elem);
Element.show("CEXC-" + getActiveArticleId());
Element.hide(collapse);
}
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) && !noexpand) {
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;
if (old_offset > new_offset)
$("headlines-frame").scrollTop -= (old_offset-new_offset);
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 getArticleUnderPointer() {
return post_under_pointer;
}
function scrollArticle(offset) {
try {
if (!isCdmMode()) {
var ci = $("content-insert");
if (ci) {
ci.scrollTop += offset;
}
} else {
var hi = $("headlines-frame");
if (hi) {
hi.scrollTop += offset;
}
}
} catch (e) {
exception_error("scrollArticle", e);
}
}
function show_labels_in_headlines(transport) {
try {
var data = JSON.parse(transport.responseText);
if (data) {
data['info-for-headlines'].each(function(elem) {
$$(".HLLCTR-" + elem.id).each(function(ctr) {
ctr.innerHTML = elem.labels;
});
});
}
} catch (e) {
exception_error("show_labels_in_headlines", e);
}
}
function dismissArticle(id) {
try {
var elem = $("RROW-" + id);
if (!elem) return;
toggleUnread(id, 0, true);
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);
}
} catch (e) {
exception_error("dismissArticle", e);
}
}
function dismissSelectedArticles() {
try {
var ids = getVisibleArticleIds();
var tmp = [];
var sel = [];
for (var i = 0; i < ids.length; i++) {
var elem = $("RROW-" + ids[i]);
if (elem.className && elem.hasClassName("Selected") &&
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);
} catch (e) {
exception_error("dismissSelectedArticles", e);
}
}
function dismissReadArticles() {
try {
var ids = getVisibleArticleIds();
var tmp = [];
for (var i = 0; i < ids.length; i++) {
var elem = $("RROW-" + ids[i]);
if (elem.className && !elem.hasClassName("Unread") &&
!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]);
}
}
} catch (e) {
exception_error("dismissReadArticles", e);
}
}
function getVisibleArticleIds() {
var ids = [];
try {
getLoadedArticleIds().each(function(id) {
var elem = $("RROW-" + id);
if (elem && Element.visible(elem))
ids.push(id);
});
} catch (e) {
exception_error("getVisibleArticleIds", e);
}
return ids;
}
function cdmClicked(event, id) {
try {
//var shift_key = event.shiftKey;
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");
elem.removeClassName("Unread");
elem.addClassName("active");
setActiveArticleId(id);
if (article_is_unread) {
decrementFeedCounter(getActiveFeedId(), activeFeedIsCat());
}
var query = "?op=rpc&method=catchupSelected" +
"&cmode=0&ids=" + param_escape(id);
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
handle_rpc_json(transport);
} });
return !event.shiftKey;
}
} else {
toggleSelected(id, true);
var elem = $("RROW-" + id);
var article_is_unread = elem.hasClassName("Unread");
if (article_is_unread) {
decrementFeedCounter(getActiveFeedId(), activeFeedIsCat());
}
toggleUnread(id, 0, false);
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 hlClicked(event, id) {
try {
if (event.which == 2) {
view(id);
return true;
} else if (event.ctrlKey) {
toggleSelected(id, true);
toggleUnread(id, 0, false);
openArticleInNewWindow(id);
return false;
} else {
view(id);
return false;
}
} catch (e) {
exception_error("hlClicked");
}
}
function getFirstVisibleHeadlineId() {
var rows = getVisibleArticleIds();
return rows[0];
}
function getLastVisibleHeadlineId() {
var rows = getVisibleArticleIds();
return rows[rows.length-1];
}
function openArticleInNewWindow(id) {
toggleUnread(id, 0, false);
window.open("backend.php?op=article&method=redirect&id=" + id);
}
function isCdmMode() {
return getInitParam("combined_display_mode");
}
function markHeadline(id, marked) {
if (marked == undefined) marked = true;
var row = $("RROW-" + id);
if (row) {
var check = dijit.getEnclosingWidget(
row.getElementsByClassName("rchk")[0]);
if (check) {
check.attr("checked", marked);
}
if (marked)
row.addClassName("Selected");
else
row.removeClassName("Selected");
}
}
function getRelativePostIds(id, limit) {
var tmp = [];
try {
if (!limit) limit = 6; //3
var ids = getVisibleArticleIds();
for (var i = 0; i < ids.length; i++) {
if (ids[i] == id) {
for (var k = 1; k <= limit; k++) {
//if (i > k-1) tmp.push(ids[i-k]);
if (i < ids.length-k) tmp.push(ids[i+k]);
}
break;
}
}
} catch (e) {
exception_error("getRelativePostIds", e);
}
return tmp;
}
function correctHeadlinesOffset(id) {
try {
var container = $("headlines-frame");
var row = $("RROW-" + id);
if (!container || !row) return;
var viewport = container.offsetHeight;
var rel_offset_top = row.offsetTop - container.scrollTop;
var rel_offset_bottom = row.offsetTop + row.offsetHeight - container.scrollTop;
//console.log("Rtop: " + rel_offset_top + " Rbtm: " + rel_offset_bottom);
//console.log("Vport: " + viewport);
if (rel_offset_top <= 0 || rel_offset_top > viewport) {
container.scrollTop = row.offsetTop;
} else if (rel_offset_bottom > viewport) {
/* doesn't properly work with Opera in some cases because
Opera fucks up element scrolling */
container.scrollTop = row.offsetTop + row.offsetHeight - viewport;
}
} catch (e) {
exception_error("correctHeadlinesOffset", e);
}
}
function headlineActionsChange(elem) {
try {
eval(elem.value);
elem.attr('value', 'false');
} catch (e) {
exception_error("headlineActionsChange", e);
}
}
function closeArticlePanel() {
if (dijit.byId("content-insert"))
dijit.byId("headlines-wrap-inner").removeChild(
dijit.byId("content-insert"));
}
function initFloatingMenu() {
try {
if (dijit.byId("floatingMenu"))
dijit.byId("floatingMenu").destroyRecursive();
var menu = new dijit.Menu({
id: "floatingMenu",
targetNodeIds: ["floatingTitle"]
});
var id = $("floatingTitle").getAttribute("rowid").replace("RROW-", "");
headlinesMenuCommon(menu, id);
menu.startup();
} catch (e) {
exception_error("initFloatingMenu", e);
}
}
function headlinesMenuCommon(menu, base_id) {
try {
menu.addChild(new dijit.MenuItem({
label: __("Open original article"),
onClick: function(event) {
openArticleInNewWindow(base_id ? base_id : this.getParent().callerRowId);
}}));
menu.addChild(new dijit.MenuItem({
label: __("Display article URL"),
onClick: function(event) {
displayArticleUrl(base_id ? base_id : this.getParent().callerRowId);
}}));
menu.addChild(new dijit.MenuSeparator());
menu.addChild(new dijit.MenuItem({
label: __("Toggle unread"),
onClick: function(event) {
var ids = getSelectedArticleIds2();
// cast to string
var id = (base_id ? base_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 starred"),
onClick: function(event) {
var ids = getSelectedArticleIds2();
// cast to string
var id = (base_id ? base_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 = (base_id ? base_id : this.getParent().callerRowId) + "";
ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id];
selectionTogglePublished(undefined, false, true, ids);
}}));
menu.addChild(new dijit.MenuSeparator());
menu.addChild(new dijit.MenuItem({
label: __("Mark above as read"),
onClick: function(event) {
catchupRelativeToArticle(0, base_id ? base_id : 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);
}}));
var labels = dijit.byId("feedTree").model.getItemsInCategory(-2);
if (labels) {
menu.addChild(new dijit.MenuSeparator());
var labelAddMenu = new dijit.Menu({ownerMenu: menu});
var labelDelMenu = new dijit.Menu({ownerMenu: menu});
labels.each(function(label) {
var id = label.id[0];
var bare_id = id.substr(id.indexOf(":")+1);
var name = label.name[0];
bare_id = feed_to_label_id(bare_id);
labelAddMenu.addChild(new dijit.MenuItem({
label: name,
labelId: bare_id,
onClick: function(event) {
var ids = getSelectedArticleIds2();
// cast to string
var id = (base_id ? base_id : this.getParent().ownerMenu.callerRowId) + "";
ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id];
selectionAssignLabel(this.labelId, ids);
}}));
labelDelMenu.addChild(new dijit.MenuItem({
label: name,
labelId: bare_id,
onClick: function(event) {
var ids = getSelectedArticleIds2();
// cast to string
var id = (base_id ? base_id : this.getParent().ownerMenu.callerRowId) + "";
ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id];
selectionRemoveLabel(this.labelId, ids);
}}));
});
menu.addChild(new dijit.PopupMenuItem({
label: __("Assign label"),
popup: labelAddMenu,
}));
menu.addChild(new dijit.PopupMenuItem({
label: __("Remove label"),
popup: labelDelMenu,
}));
}
} catch (e) {
exception_error("headlinesMenuCommon", e);
}
}
function initHeadlinesMenu() {
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]");
}
nodes.each(function(node) {
ids.push(node.id);
});
var menu = new dijit.Menu({
id: "headlinesMenu",
targetNodeIds: 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 (match) this.callerRowId = parseInt(match[1]);
});
headlinesMenuCommon(menu, false);
menu.startup();
} catch (e) {
exception_error("initHeadlinesMenu", e);
}
}
function cache_set(id, obj) {
//console.log("cache_set: " + id);
if (has_storage)
try {
sessionStorage[id] = obj;
} catch (e) {
sessionStorage.clear();
}
}
function cache_get(id) {
if (has_storage)
return sessionStorage[id];
}
function cache_clear() {
if (has_storage)
sessionStorage.clear();
}
function cache_delete(id) {
if (has_storage)
sessionStorage.removeItem(id);
}
function cancelSearch() {
try {
_search_query = "";
viewCurrentFeed();
} catch (e) {
exception_error("cancelSearch", e);
}
}
function setSelectionScore() {
try {
var ids = getSelectedArticleIds2();
if (ids.length > 0) {
console.log(ids);
var score = prompt(__("Please enter new score for selected articles:"), score);
if (score != undefined) {
var query = "op=article&method=setScore&id=" + param_escape(ids.toString()) +
"&score=" + param_escape(score);
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("setSelectionScore", e);
}
}
function changeScore(id, pic) {
try {
var score = pic.getAttribute("score");
var new_score = prompt(__("Please enter new score for this article:"), score);
if (new_score != undefined) {
var query = "op=article&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("changeScore", e);
}
}
function displayArticleUrl(id) {
try {
var query = "op=rpc&method=getlinktitlebyid&id=" + param_escape(id);
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("changeScore", e);
}
}
function openSelectedAttachment(elem) {
try {
var url = elem[elem.selectedIndex].value;
if (url) {
window.open(url);
elem.selectedIndex = 0;
}
} catch (e) {
exception_error("openSelectedAttachment", e);
}
}
function scrollToRowId(id) {
try {
var row = $(id);
if (row)
$("headlines-frame").scrollTop = row.offsetTop;
} catch (e) {
exception_error("scrollToRowId", e);
}
}
function updateFloatingTitle() {
try {
var hf = $("headlines-frame");
var elems = $$("#headlines-frame > div[id*=RROW]");
for (var i = 0; i < elems.length; i++) {
var child = elems[i];
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;
$("floatingTitle").firstChild.innerHTML = "
" + $("floatingTitle").firstChild.innerHTML;
initFloatingMenu();
PluginHost.run(PluginHost.HOOK_FLOATING_TITLE, child);
}
if (child.offsetTop < hf.scrollTop - header.offsetHeight &&
child.offsetTop + child.offsetHeight - hf.scrollTop > header.offsetHeight)
Element.show("floatingTitle");
else
Element.hide("floatingTitle");
return;
}
}
} catch (e) {
exception_error("updateFloatingTitle", e);
}
}