aboutsummaryrefslogtreecommitdiff
path: root/_www/functions.js
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2021-09-25 13:23:43 +0700
committerShulhan <ms@kilabit.info>2021-09-25 13:23:43 +0700
commit264cb9882e6878d1b8038de153424f69a2fc2ac4 (patch)
tree0bf21702b937633b00cec9b829d5a8c651b0aaeb /_www/functions.js
parent1eac43241745b46aa16fdae17945409f8cf85203 (diff)
downloadgorankusu-264cb9882e6878d1b8038de153424f69a2fc2ac4.tar.xz
_www: store the variables, headers, and parameters to local storage
When user click "Run" button on any HttpTarget or WebSocketTarget, the application will store each dynamic values of input in Target's Variables, HttpTarget/WebSocketTarget Headers and Parameters into local storage. By storing the dynamic values of form input, different users can have their own dynamic values and automatically loaded when they re-open the Trunks website again.
Diffstat (limited to '_www/functions.js')
-rw-r--r--_www/functions.js88
1 files changed, 83 insertions, 5 deletions
diff --git a/_www/functions.js b/_www/functions.js
index c0bbc73..2ffd981 100644
--- a/_www/functions.js
+++ b/_www/functions.js
@@ -1,13 +1,13 @@
import { WuiInputNumber } from "./wui/input/number.js";
import { WuiInputString } from "./wui/input/string.js";
-import { CLASS_INPUT, CLASS_INPUT_LABEL, FormInputKindNumber } from "./interface.js";
-export function GenerateFormInput(parent, fi) {
+import { CLASS_INPUT, CLASS_INPUT_LABEL, FormInputKindNumber, } from "./interface.js";
+export function GenerateFormInput(parent, fi, value) {
switch (fi.kind) {
case FormInputKindNumber:
let wui_input_number_opts = {
label: fi.label,
hint: fi.hint,
- value: +fi.value,
+ value: +value,
class_input: CLASS_INPUT,
class_label: CLASS_INPUT_LABEL,
is_hint_toggled: true,
@@ -28,7 +28,7 @@ export function GenerateFormInput(parent, fi) {
let wui_input_string_opts = {
label: fi.label,
hint: fi.hint,
- value: fi.value,
+ value: value,
class_input: CLASS_INPUT,
class_label: CLASS_INPUT_LABEL,
is_hint_toggled: true,
@@ -64,4 +64,82 @@ export function HttpMethodToString(m) {
}
return "???";
}
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQXNCLE1BQU0sdUJBQXVCLENBQUE7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQTtBQUUxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFhLG1CQUFtQixFQUF1QixNQUFNLGdCQUFnQixDQUFBO0FBRXBILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxNQUFtQixFQUFFLEVBQWE7SUFDbkUsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFO1FBQ2hCLEtBQUssbUJBQW1CO1lBQ3ZCLElBQUkscUJBQXFCLEdBQXVCO2dCQUMvQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7Z0JBQ2YsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO2dCQUNiLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLO2dCQUNoQixXQUFXLEVBQUUsV0FBVztnQkFDeEIsV0FBVyxFQUFFLGlCQUFpQjtnQkFDOUIsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLGVBQWUsRUFBRSxDQUFDLFNBQWlCLEVBQUUsRUFBRTtvQkFDdEMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFBO2dCQUMxQixDQUFDO2FBQ0QsQ0FBQTtZQUNELElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRTtnQkFDWCxxQkFBcUIsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQTthQUNsQztZQUNELElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRTtnQkFDWCxxQkFBcUIsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQTthQUNsQztZQUNELElBQUksZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQTtZQUNoRSxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ3ZDLE1BQUs7UUFFTjtZQUNDLElBQUkscUJBQXFCLEdBQXVCO2dCQUMvQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7Z0JBQ2YsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO2dCQUNiLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSztnQkFDZixXQUFXLEVBQUUsV0FBVztnQkFDeEIsV0FBVyxFQUFFLGlCQUFpQjtnQkFDOUIsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLGVBQWUsRUFBRSxDQUFDLFNBQWlCLEVBQUUsRUFBRTtvQkFDdEMsRUFBRSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUE7Z0JBQ3JCLENBQUM7YUFDRCxDQUFBO1lBQ0QsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1lBQ2hFLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDdkMsTUFBSztLQUNOO0FBQ0YsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxDQUFTO0lBQzNDLFFBQVEsQ0FBQyxFQUFFO1FBQ1YsS0FBSyxDQUFDO1lBQ0wsT0FBTyxLQUFLLENBQUE7UUFDYixLQUFLLENBQUM7WUFDTCxPQUFPLFNBQVMsQ0FBQTtRQUNqQixLQUFLLENBQUM7WUFDTCxPQUFPLFFBQVEsQ0FBQTtRQUNoQixLQUFLLENBQUM7WUFDTCxPQUFPLE1BQU0sQ0FBQTtRQUNkLEtBQUssQ0FBQztZQUNMLE9BQU8sU0FBUyxDQUFBO1FBQ2pCLEtBQUssQ0FBQztZQUNMLE9BQU8sT0FBTyxDQUFBO1FBQ2YsS0FBSyxDQUFDO1lBQ0wsT0FBTyxNQUFNLENBQUE7UUFDZCxLQUFLLENBQUM7WUFDTCxPQUFPLEtBQUssQ0FBQTtRQUNiLEtBQUssQ0FBQztZQUNMLE9BQU8sT0FBTyxDQUFBO0tBQ2Y7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNiLENBQUMifQ== \ No newline at end of file
+//
+// LoadHttpTargetHeader get HttpTarget header from local storage by key.
+// If no header exist in storage return the one from HttpTarget itself.
+//
+export function LoadHttpTargetHeader(target, httpTarget, key) {
+ let storageKey = `${target.ID}.http.${httpTarget.ID}.header.${key}`;
+ return (window.localStorage.getItem(storageKey) ||
+ httpTarget.Headers[key].value);
+}
+//
+// LoadHttpTargetParam get HttpTarget parameter from local storage by key.
+// If no parameter exist in storage return the one from HttpTarget itself.
+//
+export function LoadHttpTargetParam(target, httpTarget, key) {
+ let storageKey = `${target.ID}.http.${httpTarget.ID}.var.${key}`;
+ return (window.localStorage.getItem(storageKey) ||
+ httpTarget.Params[key].value);
+}
+//
+// LoadTargetVar get target variable from local storage or return the original
+// value.
+//
+export function LoadTargetVar(target, key) {
+ let storageKey = `${target.ID}.var.${key}`;
+ return window.localStorage.getItem(storageKey) || target.Vars[key].value;
+}
+//
+// LoadWsTargetHeader get the WebSocketTarget from local storage by key.
+//
+export function LoadWsTargetHeader(target, wsTarget, key) {
+ let storageKey = `${target.ID}.ws.${wsTarget.ID}.header.${key}`;
+ return (window.localStorage.getItem(storageKey) ||
+ wsTarget.Headers[key].value);
+}
+//
+// LoadWsTargetParam get the WebSocketTarget parameter from local storage or
+// return the one from wsTarget if its not exist.
+//
+export function LoadWsTargetParam(target, wsTarget, key) {
+ let storageKey = `${target.ID}.ws.${wsTarget.ID}.var.${key}`;
+ return (window.localStorage.getItem(storageKey) ||
+ wsTarget.Params[key].value);
+}
+//
+// Save the variables on the Target, Params and Headers on HttpTarget or
+// WebSocket to local storage.
+//
+export function Save(target, httpTarget, wsTarget) {
+ for (const k in target.Vars) {
+ let fi = target.Vars[k];
+ let key = `${target.ID}.var.${k}`;
+ window.localStorage.setItem(key, fi.value);
+ }
+ if (httpTarget) {
+ for (const k in httpTarget.Headers) {
+ let fi = httpTarget.Headers[k];
+ let key = `${target.ID}.http.${httpTarget.ID}.header.${k}`;
+ window.localStorage.setItem(key, fi.value);
+ }
+ for (const k in httpTarget.Params) {
+ let fi = httpTarget.Params[k];
+ let key = `${target.ID}.http.${httpTarget.ID}.param.${k}`;
+ window.localStorage.setItem(key, fi.value);
+ }
+ }
+ if (wsTarget) {
+ for (const k in wsTarget.Headers) {
+ let fi = wsTarget.Headers[k];
+ let key = `${target.ID}.http.${wsTarget.ID}.header.${k}`;
+ window.localStorage.setItem(key, fi.value);
+ }
+ for (const k in wsTarget.Params) {
+ let fi = wsTarget.Params[k];
+ let key = `${target.ID}.ws.${wsTarget.ID}.param.${k}`;
+ window.localStorage.setItem(key, fi.value);
+ }
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQXNCLE1BQU0sdUJBQXVCLENBQUE7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQTtBQUUxRSxPQUFPLEVBQ04sV0FBVyxFQUNYLGlCQUFpQixFQUVqQixtQkFBbUIsR0FLbkIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV2QixNQUFNLFVBQVUsaUJBQWlCLENBQ2hDLE1BQW1CLEVBQ25CLEVBQWEsRUFDYixLQUFhO0lBRWIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFO1FBQ2hCLEtBQUssbUJBQW1CO1lBQ3ZCLElBQUkscUJBQXFCLEdBQXVCO2dCQUMvQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7Z0JBQ2YsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO2dCQUNiLEtBQUssRUFBRSxDQUFDLEtBQUs7Z0JBQ2IsV0FBVyxFQUFFLFdBQVc7Z0JBQ3hCLFdBQVcsRUFBRSxpQkFBaUI7Z0JBQzlCLGVBQWUsRUFBRSxJQUFJO2dCQUNyQixlQUFlLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUU7b0JBQ3RDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQTtnQkFDMUIsQ0FBQzthQUNELENBQUE7WUFDRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1gscUJBQXFCLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUE7YUFDbEM7WUFDRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1gscUJBQXFCLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUE7YUFDbEM7WUFDRCxJQUFJLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUN4QyxxQkFBcUIsQ0FDckIsQ0FBQTtZQUNELE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JB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 \ No newline at end of file