add experimental operation history stack

This commit is contained in:
Andrew Dolgov 2006-12-04 09:26:09 +01:00
parent d4b4b9dece
commit 1dc8dba07c
4 changed files with 101 additions and 10 deletions

View File

@ -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"];

View File

@ -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);

View File

@ -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();
}

View File

@ -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();