X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=js%2Ffunctions.js;h=29dbe70cf80b0b9acb33beec4df935e0baf33231;hb=da1a3c2cc5621bccdb844cfbd03e377ada079fa9;hp=100da5f8591ae38b99ca347a7f305c73a86f0b7b;hpb=ef129fed2af2c756d25bb532a37fec1bf3888e1d;p=tt-rss.git diff --git a/js/functions.js b/js/functions.js index 100da5f8..29dbe70c 100755 --- a/js/functions.js +++ b/js/functions.js @@ -5,6 +5,9 @@ let _label_base_index = -1024; let loading_progress = 0; let notify_hide_timerid = false; +let hotkey_prefix = 0; +let hotkey_prefix_pressed = false; + Ajax.Base.prototype.initialize = Ajax.Base.prototype.initialize.wrap( function (callOriginal, options) { @@ -27,14 +30,14 @@ Ajax.Base.prototype.initialize = Ajax.Base.prototype.initialize.wrap( function xhrPost(url, params, complete) { console.log("xhrPost:", params); - new Ajax.Request(url, { + return new Ajax.Request(url, { parameters: params, onComplete: complete }); } function xhrJson(url, params, complete) { - xhrPost(url, params, (reply) => { + return xhrPost(url, params, (reply) => { try { const obj = JSON.parse(reply.responseText); complete(obj); @@ -498,9 +501,6 @@ function hotkey_prefix_timeout() { hotkey_prefix = false; Element.hide('cmdline'); } - - setTimeout(hotkey_prefix_timeout, 1000); - } function uploadIconHandler(rc) { @@ -1087,8 +1087,25 @@ function backend_sanity_check_callback(transport) { console.log('reading init-params...'); for (const k in params) { - console.log("IP:", k, "=>", params[k]); - if (k == "label_base_index") _label_base_index = parseInt(params[k]); + switch (k) { + case "label_base_index": + _label_base_index = parseInt(params[k]) + break; + case "hotkeys": + // filter mnemonic definitions (used for help panel) from hotkeys map + // i.e. *(191)|Ctrl-/ -> *(191) + + const tmp = []; + for (const sequence in params[k][1]) { + const filtered = sequence.replace(/\|.*$/, ""); + tmp[filtered] = params[k][1][sequence]; + } + + params[k][1] = tmp; + break; + } + + console.log("IP:", k, "=>", params[k]); } init_params = params; @@ -1101,9 +1118,7 @@ function backend_sanity_check_callback(transport) { } function genUrlChangeKey(feed, is_cat) { - const ok = confirm(__("Generate new syndication address for this feed?")); - - if (ok) { + if (confirm(__("Generate new syndication address for this feed?"))) { notify_progress("Trying to change address...", true); @@ -1375,12 +1390,8 @@ function showFeedsWithErrors() { removeSelected: function() { const sel_rows = this.getSelectedFeeds(); - console.log(sel_rows); - if (sel_rows.length > 0) { - const ok = confirm(__("Remove selected feeds?")); - - if (ok) { + if (confirm(__("Remove selected feeds?"))) { notify_progress("Removing selected feeds...", true); const query = { op: "pref-feeds", method: "remove", @@ -1537,3 +1548,58 @@ function openArticlePopup(id) { w.opener = null; w.location = "backend.php?op=article&method=view&mode=raw&html=1&zoom=1&id=" + id + "&csrf_token=" + getInitParam("csrf_token"); } + +function keyevent_to_action(e) { + + const hotkeys_map = getInitParam("hotkeys"); + const keycode = e.which; + const keychar = String.fromCharCode(keycode).toLowerCase(); + + if (keycode == 27) { // escape and drop prefix + hotkey_prefix = false; + } + + if (keycode == 16 || keycode == 17) return; // ignore lone shift / ctrl + + if (!hotkey_prefix && hotkeys_map[0].indexOf(keychar) != -1) { + + const date = new Date(); + const ts = Math.round(date.getTime() / 1000); + + hotkey_prefix = keychar; + hotkey_prefix_pressed = ts; + + $("cmdline").innerHTML = keychar; + Element.show("cmdline"); + + e.stopPropagation(); + + return false; + } + + Element.hide("cmdline"); + + let hotkey_name = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")"; + + // ensure ^*char notation + if (e.shiftKey) hotkey_name = "*" + hotkey_name; + if (e.ctrlKey) hotkey_name = "^" + hotkey_name; + if (e.altKey) hotkey_name = "+" + hotkey_name; + if (e.metaKey) hotkey_name = "%" + hotkey_name; + + const hotkey_full = hotkey_prefix ? hotkey_prefix + " " + hotkey_name : hotkey_name; + hotkey_prefix = false; + + let action_name = false; + + for (const sequence in hotkeys_map[1]) { + if (sequence == hotkey_full) { + action_name = hotkeys_map[1][sequence]; + break; + } + } + + console.log('keyevent_to_action', hotkey_full, '=>', action_name); + + return action_name; +} \ No newline at end of file