var last_feeds = [];
var init_params = {};
+var hotkeys_map = false;
+var hotkey_prefix = false;
+var mobile_mode = false;
var _active_feed_id = false;
var _update_timeout = false;
if (feed_id < 0) is_cat = "true"; // KLUDGE
- var query = "?op=rpc&method=catchupFeed&feed_id=" +
+ var query = "op=rpc&method=catchupFeed&feed_id=" +
feed_id + "&is_cat=" + is_cat;
new Ajax.Request("backend.php", {
var ids = get_visible_article_ids();
- if (confirm(__("Mark %d displayed articles as read?").replace("%d", ids.length))) {
+ if (confirm(ngettext("Mark %d displayed article as read?", "Mark %d displayed articles as read?", ids.length).replace("%d", ids.length))) {
- var query = "?op=rpc&method=catchupSelected" +
+ var query = "op=rpc&method=catchupSelected" +
"&cmode=0&ids=" + param_escape(ids);
new Ajax.Request("backend.php", {
function catchup_article(article_id, callback) {
try {
- var query = "?op=rpc&method=catchupSelected" +
+ var query = "op=rpc&method=catchupSelected" +
"&cmode=0&ids=" + article_id;
new Ajax.Request("backend.php", {
});
} catch (e) {
- exception_error("mark_selected_feed", e);
+ exception_error("set_selected_article", e);
}
}
_active_feed_id = feed_id;
} catch (e) {
- exception_error("mark_selected_feed", e);
+ exception_error("set_selected_feed", e);
}
}
window.clearTimeout(_update_timeout);
new Ajax.Request("backend.php", {
- parameters: "?op=digest&method=digestinit",
+ parameters: "op=digest&method=digestinit",
onComplete: function(transport) {
fatal_error_check(transport);
parse_feeds(transport);
}, 500);
new Ajax.Request("backend.php", {
- parameters: "?op=digest&method=digestgetcontents&article_id=" +
+ parameters: "op=digest&method=digestgetcontents&article_id=" +
article_id,
onComplete: function(transport) {
fatal_error_check(transport);
}
if (article.marked)
- mark_part = "<img title='"+ __("Unstar article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_set.png'>";
+ mark_part = "<img title='"+ __("Unstar article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_set.svg'>";
else
- mark_part = "<img title='"+__("Star article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_unset.png'>";
+ mark_part = "<img title='"+__("Star article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_unset.svg'>";
if (article.published)
- publ_part = "<img title='"+__("Unpublish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_set.png'>";
+ publ_part = "<img title='"+__("Unpublish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_set.svg'>";
else
- publ_part = "<img title='"+__("Publish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_unset.png'>";
+ publ_part = "<img title='"+__("Publish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_unset.svg'>";
var tmp = "<div id=\"inner\">" +
"<div id=\"ops\">" +
}
}
+function close_feed() {
+ $("headlines").removeClassName("move");
+
+ if (mobile_mode) set_selected_feed(false);
+}
+
+function go_back() {
+ if ($("article").hasClassName("visible")) {
+ close_article();
+ } else {
+ close_feed();
+ }
+}
+
function close_article() {
$("content").removeClassName("move");
$("article").removeClassName("visible");
function viewfeed(feed_id, offset, replace, no_effects, no_indicator, callback) {
try {
+ $("headlines").addClassName("move");
+
if (!feed_id) feed_id = _active_feed_id;
if (offset == undefined) offset = 0;
if (replace == undefined) replace = (offset == 0);
if (!offset) $("headlines").scrollTop = 0;
- var query = "backend.php?op=digest&method=digestupdate&feed_id=" +
+ var query = "op=digest&method=digestupdate&feed_id=" +
param_escape(feed_id) + "&offset=" + offset +
"&seq=" + _update_seq;
return getInitParam('icons_url') + "/" + feed.id + '.ico';
if (feed.id == -1)
- return 'images/mark_set.png';
+ return 'images/mark_set.svg';
if (feed.id == -2)
- return 'images/pub_set.png';
+ return 'images/pub_set.svg';
if (feed.id == -3)
return 'images/fresh.png';
feed.title;
var tmp_html = "<li id=\"F-"+feed.id+"\" onclick=\"viewfeed("+feed.id+")\">" +
+ "<div class='unread-ctr'>" + "<span class=\"unread\">" + feed.unread + "</span></div>" +
icon_part + title +
- "<div class='unread-ctr'>" + "<span class=\"unread\">" + feed.unread + "</span>" +
- "</div>" + "</li>";
+ "</li>";
$("feeds-content").innerHTML += tmp_html;
if (d.getTime() / 1000 - article.updated < fresh_max)
li_class = "fresh";
- //"<img title='" + __("Mark as read") + "' onclick=\"view("+article.id+", true)\" src='images/digest_checkbox.png'>" +
-
var checkbox_part = "<input type=\"checkbox\" class=\"cb\" onclick=\"toggle_select_article(this)\"/>";
var date = new Date(article.updated * 1000);
$('feeds-content').innerHTML += "<li id='F-MORE-PROMPT'>" +
"<img src='images/blank_icon.gif'>" +
"<a href=\"#\" onclick=\"expand_feeds()\">" +
- __("%d more...").replace("%d", feeds.length-10) +
+ ngettext("%d more...", "%d more...", feeds.length-10).replace("%d", feeds.length-10) +
"</a>" + "</li>";
}
redraw_feedlist(feeds);
}
+ if (reply['hotkeys']) {
+ hotkeys_map = reply['hotkeys'];
+ }
+
} catch (e) {
- exception_error("parse_feeds", e);
+ console.log(e);
+ //exception_error("parse_feeds", e);
}
}
function init_second_stage() {
try {
new Ajax.Request("backend.php", {
- parameters: "backend.php?op=digest&method=digestinit",
+ parameters: "op=digest&method=digestinit&init=1",
onComplete: function(transport) {
parse_feeds(transport);
Element.hide("overlay");
document.onkeydown = hotkey_handler;
- window.setTimeout('viewfeed(-4)', 100);
- _update_timeout = window.setTimeout('update()', 5*1000);
- } });
+ if (!mobile_mode)
+ window.setTimeout('viewfeed(-4)', 100);
+ _update_timeout = window.setTimeout('update()', 5*1000);
+ } });
} catch (e) {
exception_error("init_second_stage", e);
}
}
-function init() {
+function init(mobile) {
try {
- dojo.require("dijit.Dialog");
+ mobile_mode = mobile;
new Ajax.Request("backend.php", {
parameters: {op: "rpc", method: "sanityCheck"},
try {
- var query = "?op=rpc&id=" + id + "&method=mark";
+ var query = "op=rpc&id=" + id + "&method=mark";
if (!img) return;
try {
- var query = "?op=rpc&id=" + id + "&method=publ";
+ var query = "op=rpc&id=" + id + "&method=publ";
if (note != undefined) {
query = query + "¬e=" + param_escape(note);
if (code == 6) {
window.location.href = "digest.php";
} else if (code == 5) {
- window.location.href = "db-updater.php";
+ window.location.href = "public.php?op=dbupdate";
} else {
if (msg == "") msg = "Unknown error";
var keychar = String.fromCharCode(keycode);
+ if (!shift_key) keychar = keychar.toLowerCase();
+
if (keycode == 16) return; // ignore lone shift
if (keycode == 17) return; // ignore lone ctrl
+ var hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")";
+ hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey;
+ hotkey_prefix = false;
+
+ var hotkey_action = false;
+ var hotkeys = getInitParam("hotkeys");
+
+ for (sequence in hotkeys[1]) {
+ if (sequence == hotkey) {
+ hotkey_action = hotkeys[1][sequence];
+ break;
+ }
+ }
+
switch (keycode) {
case 27: // esc
- close_article();
- break;
+ go_back();
+ return false;
+ }
+
+ switch (hotkey_action) {
+ case "next_feed":
+ var feeds = $$("#feeds li");
+ for (var i = 0; i < feeds.length; i++) {
+ var base_id = feeds[i].id.replace("F-", "");
+
+ if (base_id == _active_feed_id) {
+ if (feeds[i+1]) {
+ viewfeed(feeds[i+1].id.replace("F-", ""));
+ }
+ break;
+ }
+ }
+ return false;
+ case "prev_feed":
+ var feeds = $$("#feeds li");
+ for (var i = 0; i < feeds.length; i++) {
+ var base_id = feeds[i].id.replace("F-", "");
+
+ if (base_id == _active_feed_id) {
+ if (feeds[i-1]) {
+ viewfeed(feeds[i-1].id.replace("F-", ""));
+ }
+ break;
+ }
+ }
+ return false;
+ case "next_article":
+ return false;
+ case "prev_article":
+ return false;
default:
- console.log("KP: CODE=" + keycode + " CHAR=" + keychar);
+ console.log("unhandled action: " + hotkey_action + "; hotkey: " + hotkey);
}