blob: 6f8c538eeca1e8fa256a794f6fbd91a2e1740102 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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) 2024 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_duration = 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_duration)
}, this.timeout + this.animation_duration)
}
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_duration)
}
}
}
|