diff options
Diffstat (limited to 'src/log.ts')
-rw-r--r-- | src/log.ts | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/log.ts b/src/log.ts new file mode 100644 index 0000000..e99004e --- /dev/null +++ b/src/log.ts @@ -0,0 +1,49 @@ +/* + This file is part of jshelper (https://codeberg.org/metamuffin/jshelper) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2023 metamuffin <metamuffin.org> +*/ +import { e } from "./element.ts" + +export class Logger<T = HTMLElement> { + public element: HTMLElement = e("div", { class: "jsh-log" }) + constructor( + private map_fn: (value: T) => HTMLElement = e => { + if (e instanceof HTMLElement) return e; + else throw new Error("logger: map_fn required if T is not HTMLElement"); + }, + private reverse = false, + private timeout = 3000, + private animation_dduration = 1000, + ) { + + } + + private add(v: T) { + const el = this.map_fn(v) + if (this.reverse) this.element.prepend(el) + else this.element.append(el) + return el + } + + log(value: T) { + const el = this.add(value) + el.classList.add("jsh-log-line", "jsh-log-line-timeout") + setTimeout(() => { + el.classList.add("jsh-log-line-disappear") + setTimeout(() => { + this.element.removeChild(el) + }, this.animation_dduration) + }, this.timeout + this.animation_dduration) + } + log_persistent(value: T): () => void { + const el = this.add(value) + el.classList.add("jsh-log-line", "jsh-log-line-persistent") + return () => { + el.classList.add("jsh-log-line-disappear") + setTimeout(() => { + this.element.removeChild(el) + }, this.animation_dduration) + } + } +} |