From 1dc8dba07c9c57016a7bac4dd8ce3804024597b9 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 4 Dec 2006 09:26:09 +0100 Subject: add experimental operation history stack --- feedlist.js | 7 +++++- functions.js | 16 ++++++------ tt-rss.js | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ viewfeed.js | 6 ++++- 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(); -- cgit v1.2.3