summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--feedlist.js7
-rw-r--r--functions.js16
-rw-r--r--tt-rss.js82
-rw-r--r--viewfeed.js6
4 files changed, 101 insertions, 10 deletions
diff --git a/feedlist.js b/feedlist.js
index 53fc4c6e4..d324c6a80 100644
--- a/feedlist.js
+++ b/feedlist.js
@@ -14,11 +14,16 @@ function feedlist_callback() {
}
}
-function viewfeed(feed, subop, is_cat, subop_param) {
+function viewfeed(feed, subop, is_cat, subop_param, skip_history) {
try {
enableHotkeys();
+ if (!skip_history) {
+ history_push('FEED:' + feed + ':' + subop + ':' + is_cat +
+ ':' + subop_param);
+ }
+
var toolbar_query = Form.serialize("main_toolbar_form");
var toolbar_form = document.forms["main_toolbar_form"];
diff --git a/functions.js b/functions.js
index 4b610816d..6512d6adc 100644
--- a/functions.js
+++ b/functions.js
@@ -226,14 +226,6 @@ function hotkey_handler(e) {
}
}
- if (typeof localHotkeyHandler != 'undefined') {
- try {
- localHotkeyHandler(keycode);
- } catch (e) {
- exception_error("hotkey_handler, local:", e);
- }
- }
-
if (keycode == 68 && shift_key) { // d
if (!debug_mode_enabled) {
document.getElementById('debug_output').style.display = 'block';
@@ -245,6 +237,14 @@ function hotkey_handler(e) {
debug_mode_enabled = !debug_mode_enabled;
}
+ if (typeof localHotkeyHandler != 'undefined') {
+ try {
+ return localHotkeyHandler(e);
+ } catch (e) {
+ exception_error("hotkey_handler, local:", e);
+ }
+ }
+
debug("KP=" + keycode);
} catch (e) {
exception_error("hotkey_handler", e);
diff --git a/tt-rss.js b/tt-rss.js
index 472c90a6b..863020505 100644
--- a/tt-rss.js
+++ b/tt-rss.js
@@ -20,6 +20,8 @@ var xmlhttp_ctr = Ajax.getTransport();
var init_params = new Object();
+var op_history = new Array();
+
function toggleTags() {
display_tags = !display_tags;
@@ -654,3 +656,83 @@ function feedEditSave() {
}
}
+function localHotkeyHandler(e) {
+
+ var keycode;
+
+ if (window.event) {
+ keycode = window.event.keyCode;
+ } else if (e) {
+ keycode = e.which;
+ }
+
+ var shift_key = false;
+
+ try {
+ shift_key = e.shiftKey;
+ } catch (e) { }
+
+ if (keycode == 66 && shift_key) { // shift-B
+
+ var op = history_pop();
+
+ if (op) {
+ var op_s = op.split(":");
+
+ var i;
+ for (i = 0; i < op_s.length; i++) {
+ if (op_s[i] == 'undefined') {
+ op_s[i] = undefined;
+ }
+
+ if (op_s[i] == 'false') {
+ op_s[i] = false;
+ }
+
+ if (op_s[i] == 'true') {
+ op_s[i] = true;
+ }
+
+ }
+
+ debug("history split: " + op_s);
+
+ if (op_s[0] == "ARTICLE") {
+ debug("history: reverting to article " + op_s[1] + "/" + op_s[2]);
+ view(op_s[1], op_s[2], true);
+ }
+
+ if (op_s[0] == "FEED") {
+ viewfeed(op_s[1], op_s[2], op_s[3], op_s[4], true);
+ }
+
+ } else {
+ notify("No operation to undo");
+ }
+
+ return false;
+
+ }
+
+ debug("LKP=" + keycode);
+}
+
+function history_push(op) {
+ debug("history_push: " + op);
+ op_history.push(op);
+
+ while (op_history.length > 30) {
+ op_history.shift();
+ }
+}
+
+function history_pop() {
+ var op = op_history.pop();
+ debug("history_pop: " + op);
+ return op;
+}
+
+function history_clear() {
+ debug("history_clear");
+ op_history.clear();
+}
diff --git a/viewfeed.js b/viewfeed.js
index 7a499fd3b..155fdd841 100644
--- a/viewfeed.js
+++ b/viewfeed.js
@@ -51,10 +51,14 @@ function article_callback() {
}
}
-function view(id, feed_id) {
+function view(id, feed_id, skip_history) {
try {
debug("loading article: " + id + "/" + feed_id);
+
+ if (!skip_history) {
+ history_push("ARTICLE:" + id + ":" + feed_id);
+ }
enableHotkeys();