mirror of
https://github.com/gchq/CyberChef.git
synced 2024-11-02 14:11:02 +01:00
Background magic is now debounced to prevent it firing too often.
This commit is contained in:
parent
6992858e67
commit
572f035877
@ -1303,6 +1303,30 @@ export function sendStatusMessage(msg) {
|
|||||||
console.debug(msg);
|
console.debug(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const debounceTimeouts = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Debouncer to stop functions from being executed multiple times in a
|
||||||
|
* short space of time
|
||||||
|
* https://davidwalsh.name/javascript-debounce-function
|
||||||
|
*
|
||||||
|
* @param {function} func - The function to be executed after the debounce time
|
||||||
|
* @param {number} wait - The time (ms) to wait before executing the function
|
||||||
|
* @param {string} id - Unique ID to reference the timeout for the function
|
||||||
|
* @param {object} scope - The object to bind to the debounced function
|
||||||
|
* @param {array} args - Array of arguments to be passed to func
|
||||||
|
* @returns {function}
|
||||||
|
*/
|
||||||
|
export function debounce(func, wait, id, scope, args) {
|
||||||
|
return function() {
|
||||||
|
const later = function() {
|
||||||
|
func.apply(scope, args);
|
||||||
|
};
|
||||||
|
clearTimeout(debounceTimeouts[id]);
|
||||||
|
debounceTimeouts[id] = setTimeout(later, wait);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Polyfills
|
* Polyfills
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* @license Apache-2.0
|
* @license Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Utils from "../core/Utils";
|
import Utils, { debounce } from "../core/Utils";
|
||||||
import {fromBase64} from "../core/lib/Base64";
|
import {fromBase64} from "../core/lib/Base64";
|
||||||
import Manager from "./Manager";
|
import Manager from "./Manager";
|
||||||
import HTMLCategory from "./HTMLCategory";
|
import HTMLCategory from "./HTMLCategory";
|
||||||
@ -41,7 +41,6 @@ class App {
|
|||||||
this.autoBakePause = false;
|
this.autoBakePause = false;
|
||||||
this.progress = 0;
|
this.progress = 0;
|
||||||
this.ingId = 0;
|
this.ingId = 0;
|
||||||
this.timeouts = {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -295,7 +294,7 @@ class App {
|
|||||||
minSize: minimise ? [0, 0, 0] : [240, 310, 450],
|
minSize: minimise ? [0, 0, 0] : [240, 310, 450],
|
||||||
gutterSize: 4,
|
gutterSize: 4,
|
||||||
expandToMin: true,
|
expandToMin: true,
|
||||||
onDrag: this.debounce(function() {
|
onDrag: debounce(function() {
|
||||||
this.manager.recipe.adjustWidth();
|
this.manager.recipe.adjustWidth();
|
||||||
this.manager.input.calcMaxTabs();
|
this.manager.input.calcMaxTabs();
|
||||||
this.manager.output.calcMaxTabs();
|
this.manager.output.calcMaxTabs();
|
||||||
@ -723,6 +722,7 @@ class App {
|
|||||||
this.updateTitle(false, null, true);
|
this.updateTitle(false, null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the page title to contain the new recipe
|
* Update the page title to contain the new recipe
|
||||||
*
|
*
|
||||||
@ -766,29 +766,6 @@ class App {
|
|||||||
this.loadURIParams();
|
this.loadURIParams();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Debouncer to stop functions from being executed multiple times in a
|
|
||||||
* short space of time
|
|
||||||
* https://davidwalsh.name/javascript-debounce-function
|
|
||||||
*
|
|
||||||
* @param {function} func - The function to be executed after the debounce time
|
|
||||||
* @param {number} wait - The time (ms) to wait before executing the function
|
|
||||||
* @param {string} id - Unique ID to reference the timeout for the function
|
|
||||||
* @param {object} scope - The object to bind to the debounced function
|
|
||||||
* @param {array} args - Array of arguments to be passed to func
|
|
||||||
* @returns {function}
|
|
||||||
*/
|
|
||||||
debounce(func, wait, id, scope, args) {
|
|
||||||
return function() {
|
|
||||||
const later = function() {
|
|
||||||
func.apply(scope, args);
|
|
||||||
};
|
|
||||||
clearTimeout(this.timeouts[id]);
|
|
||||||
this.timeouts[id] = setTimeout(later, wait);
|
|
||||||
}.bind(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default App;
|
export default App;
|
||||||
|
@ -45,7 +45,7 @@ div#output {
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
#operations {
|
#operations.split {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* @license Apache-2.0
|
* @license Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import ChefWorker from "worker-loader?inline&fallback=false!../../core/ChefWorker";
|
import ChefWorker from "worker-loader?inline&fallback=false!../../core/ChefWorker.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Waiter to handle conversations with a ChefWorker in the background.
|
* Waiter to handle conversations with a ChefWorker in the background.
|
||||||
|
@ -5,9 +5,9 @@
|
|||||||
* @license Apache-2.0
|
* @license Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import LoaderWorker from "worker-loader?inline&fallback=false!../workers/LoaderWorker";
|
import LoaderWorker from "worker-loader?inline&fallback=false!../workers/LoaderWorker.js";
|
||||||
import InputWorker from "worker-loader?inline&fallback=false!../workers/InputWorker";
|
import InputWorker from "worker-loader?inline&fallback=false!../workers/InputWorker.mjs";
|
||||||
import Utils from "../../core/Utils.mjs";
|
import Utils, { debounce } from "../../core/Utils.mjs";
|
||||||
import { toBase64 } from "../../core/lib/Base64.mjs";
|
import { toBase64 } from "../../core/lib/Base64.mjs";
|
||||||
import { isImage } from "../../core/lib/FileType.mjs";
|
import { isImage } from "../../core/lib/FileType.mjs";
|
||||||
|
|
||||||
@ -270,7 +270,7 @@ class InputWaiter {
|
|||||||
this.showLoadingInfo(r.data, true);
|
this.showLoadingInfo(r.data, true);
|
||||||
break;
|
break;
|
||||||
case "setInput":
|
case "setInput":
|
||||||
this.app.debounce(this.set, 50, "setInput", this, [r.data.inputObj, r.data.silent])();
|
debounce(this.set, 50, "setInput", this, [r.data.inputObj, r.data.silent])();
|
||||||
break;
|
break;
|
||||||
case "inputAdded":
|
case "inputAdded":
|
||||||
this.inputAdded(r.data.changeTab, r.data.inputNum);
|
this.inputAdded(r.data.changeTab, r.data.inputNum);
|
||||||
@ -316,7 +316,7 @@ class InputWaiter {
|
|||||||
*/
|
*/
|
||||||
bakeAll() {
|
bakeAll() {
|
||||||
this.app.progress = 0;
|
this.app.progress = 0;
|
||||||
this.app.debounce(this.manager.controls.toggleBakeButtonFunction, 20, "toggleBakeButton", this, ["loading"]);
|
debounce(this.manager.controls.toggleBakeButtonFunction, 20, "toggleBakeButton", this, ["loading"]);
|
||||||
this.inputWorker.postMessage({
|
this.inputWorker.postMessage({
|
||||||
action: "bakeAll"
|
action: "bakeAll"
|
||||||
});
|
});
|
||||||
@ -681,7 +681,7 @@ class InputWaiter {
|
|||||||
* @param {event} e
|
* @param {event} e
|
||||||
*/
|
*/
|
||||||
debounceInputChange(e) {
|
debounceInputChange(e) {
|
||||||
this.app.debounce(this.inputChange, 50, "inputChange", this, [e])();
|
debounce(this.inputChange, 50, "inputChange", this, [e])();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
* @license Apache-2.0
|
* @license Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Utils from "../../core/Utils.mjs";
|
import Utils, { debounce } from "../../core/Utils.mjs";
|
||||||
import Dish from "../../core/Dish.mjs";
|
import Dish from "../../core/Dish.mjs";
|
||||||
import FileSaver from "file-saver";
|
import FileSaver from "file-saver";
|
||||||
import ZipWorker from "worker-loader?inline&fallback=false!../workers/ZipWorker";
|
import ZipWorker from "worker-loader?inline&fallback=false!../workers/ZipWorker.mjs";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Waiter to handle events related to the output
|
* Waiter to handle events related to the output
|
||||||
@ -369,7 +369,7 @@ class OutputWaiter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.setOutputInfo(length, lines, output.data.duration);
|
this.setOutputInfo(length, lines, output.data.duration);
|
||||||
this.backgroundMagic();
|
debounce(this.backgroundMagic, 50, "backgroundMagic", this, [])();
|
||||||
}
|
}
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
}
|
}
|
||||||
@ -717,7 +717,7 @@ class OutputWaiter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.app.debounce(this.set, 50, "setOutput", this, [inputNum])();
|
debounce(this.set, 50, "setOutput", this, [inputNum])();
|
||||||
|
|
||||||
document.getElementById("output-html").scroll(0, 0);
|
document.getElementById("output-html").scroll(0, 0);
|
||||||
document.getElementById("output-text").scroll(0, 0);
|
document.getElementById("output-text").scroll(0, 0);
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
* @license Apache-2.0
|
* @license Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { debounce } from "../../core/Utils.mjs";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Waiter to handle events related to the window object.
|
* Waiter to handle events related to the window object.
|
||||||
*/
|
*/
|
||||||
@ -25,7 +27,7 @@ class WindowWaiter {
|
|||||||
* continuous resetting).
|
* continuous resetting).
|
||||||
*/
|
*/
|
||||||
windowResize() {
|
windowResize() {
|
||||||
this.app.debounce(this.app.resetLayout, 200, "windowResize", this.app, [])();
|
debounce(this.app.resetLayout, 200, "windowResize", this.app, [])();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +5,9 @@
|
|||||||
* @license Apache-2.0
|
* @license Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import ChefWorker from "worker-loader?inline&fallback=false!../../core/ChefWorker";
|
import ChefWorker from "worker-loader?inline&fallback=false!../../core/ChefWorker.js";
|
||||||
import DishWorker from "worker-loader?inline&fallback=false!../workers/DishWorker";
|
import DishWorker from "worker-loader?inline&fallback=false!../workers/DishWorker.mjs";
|
||||||
|
import { debounce } from "../../core/Utils.mjs";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Waiter to handle conversations with the ChefWorker
|
* Waiter to handle conversations with the ChefWorker
|
||||||
@ -281,7 +282,7 @@ class WorkerWaiter {
|
|||||||
*/
|
*/
|
||||||
setBakingStatus(bakingStatus) {
|
setBakingStatus(bakingStatus) {
|
||||||
this.app.baking = bakingStatus;
|
this.app.baking = bakingStatus;
|
||||||
this.app.debounce(this.manager.controls.toggleBakeButtonFunction, 20, "toggleBakeButton", this, [bakingStatus ? "cancel" : "bake"])();
|
debounce(this.manager.controls.toggleBakeButtonFunction, 20, "toggleBakeButton", this, [bakingStatus ? "cancel" : "bake"])();
|
||||||
|
|
||||||
if (bakingStatus) this.manager.output.hideMagicButton();
|
if (bakingStatus) this.manager.output.hideMagicButton();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user