svelte-log-view 7.0.0 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/LogView.svelte +40 -35
- package/src/log.css +2 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svelte-log-view",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.1",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"provenance": true
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"playwright": "^1.57.0",
|
|
52
52
|
"reader-line-iterator": "^1.2.3",
|
|
53
53
|
"semantic-release": "^25.0.2",
|
|
54
|
-
"svelte": "^5.46.
|
|
54
|
+
"svelte": "^5.46.1",
|
|
55
55
|
"vite": "^7.3.0",
|
|
56
56
|
"vite-plugin-compression2": "^2.4.0"
|
|
57
57
|
},
|
package/src/LogView.svelte
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* line 2 | -> offsetEntries. |
|
|
7
7
|
* ---------- |
|
|
8
8
|
* | line 4 | | |
|
|
9
|
-
* | line 5 | | ->
|
|
9
|
+
* | line 5 | | -> numberOfVisibleEntries. | -> maxBufferedEntries
|
|
10
10
|
* | line 5 | | |
|
|
11
11
|
* ---------- |
|
|
12
12
|
* line 6 /
|
|
@@ -14,20 +14,28 @@
|
|
|
14
14
|
|
|
15
15
|
let {
|
|
16
16
|
source /** data source */,
|
|
17
|
-
|
|
17
|
+
entries = $bindable([]),
|
|
18
18
|
offsetEntries = $bindable(
|
|
19
19
|
0
|
|
20
|
-
) /** number of
|
|
20
|
+
) /** number of entries from the top to the 1st. visible */,
|
|
21
21
|
follow = $bindable(true),
|
|
22
22
|
selected = $bindable(0),
|
|
23
|
-
numberOfEntriesToFetch = 10 /** number of
|
|
23
|
+
numberOfEntriesToFetch = 10 /** number of entries to fetch if we reach outside of the buffered area */,
|
|
24
24
|
maxBufferedEntries = 1024,
|
|
25
|
-
|
|
25
|
+
entryElement
|
|
26
26
|
} = $props();
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
let
|
|
30
|
-
|
|
28
|
+
let contentHeight = $state();
|
|
29
|
+
let numberOfVisibleEntries = $derived.by(() => {
|
|
30
|
+
console.log("contentHeight",contentHeight);
|
|
31
|
+
const n = Math.ceil(contentHeight / entryHeight);
|
|
32
|
+
return n;
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
let visibleEntries = $derived.by(() => {
|
|
36
|
+
return entries.slice(offsetEntries, offsetEntries + numberOfVisibleEntries);
|
|
37
|
+
});
|
|
38
|
+
let entryHeight = 19.13;
|
|
31
39
|
|
|
32
40
|
onDestroy(() => source.abort());
|
|
33
41
|
|
|
@@ -49,15 +57,6 @@
|
|
|
49
57
|
if (entries.lenght >= maxBufferedEntries) {
|
|
50
58
|
entries.shift();
|
|
51
59
|
}
|
|
52
|
-
|
|
53
|
-
if (entries.length <= visibleEntries) {
|
|
54
|
-
visible = entries;
|
|
55
|
-
} else {
|
|
56
|
-
if (!follow) {
|
|
57
|
-
visible = entries.slice(offsetEntries, visibleEntries);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
60
|
if (follow) {
|
|
62
61
|
setSelected(entries.length - 1);
|
|
63
62
|
current = entries[entries.length - 1];
|
|
@@ -71,7 +70,7 @@
|
|
|
71
70
|
|
|
72
71
|
if (selected > entries.length - 1) {
|
|
73
72
|
selected = entries.length - 1;
|
|
74
|
-
offsetEntries = entries.length -
|
|
73
|
+
offsetEntries = entries.length - numberOfVisibleEntries;
|
|
75
74
|
}
|
|
76
75
|
|
|
77
76
|
if (selected < 0) {
|
|
@@ -99,11 +98,14 @@
|
|
|
99
98
|
offsetEntries = selected;
|
|
100
99
|
}
|
|
101
100
|
|
|
102
|
-
if (selected >= offsetEntries +
|
|
103
|
-
offsetEntries = selected -
|
|
101
|
+
if (selected >= offsetEntries + numberOfVisibleEntries) {
|
|
102
|
+
offsetEntries = selected - numberOfVisibleEntries + 1;
|
|
104
103
|
}
|
|
105
104
|
|
|
106
|
-
|
|
105
|
+
visibleEntries = entries.slice(
|
|
106
|
+
offsetEntries,
|
|
107
|
+
offsetEntries + numberOfVisibleEntries
|
|
108
|
+
);
|
|
107
109
|
}
|
|
108
110
|
|
|
109
111
|
function setFollow(flag) {
|
|
@@ -129,21 +131,21 @@
|
|
|
129
131
|
break;
|
|
130
132
|
case "PageUp":
|
|
131
133
|
setFollow(false);
|
|
132
|
-
setSelected(selected -
|
|
134
|
+
setSelected(selected - numberOfVisibleEntries);
|
|
133
135
|
break;
|
|
134
136
|
case "PageDown":
|
|
135
137
|
setFollow(false);
|
|
136
|
-
setSelected(selected +
|
|
137
|
-
break;
|
|
138
|
-
case "End":
|
|
139
|
-
case "G":
|
|
140
|
-
setFollow(false);
|
|
141
|
-
setSelected(entries.length - 1);
|
|
138
|
+
setSelected(selected + numberOfVisibleEntries);
|
|
142
139
|
break;
|
|
143
140
|
case "Home":
|
|
144
141
|
case "g":
|
|
145
142
|
setFollow(false);
|
|
146
|
-
setSelected(
|
|
143
|
+
setSelected(Number.MIN_SAFE_INTEGER + 1);
|
|
144
|
+
break;
|
|
145
|
+
case "End":
|
|
146
|
+
case "G":
|
|
147
|
+
setFollow(false);
|
|
148
|
+
setSelected(Number.MAX_SAFE_INTEGER - 1);
|
|
147
149
|
break;
|
|
148
150
|
case "f":
|
|
149
151
|
setFollow(!follow);
|
|
@@ -153,15 +155,18 @@
|
|
|
153
155
|
|
|
154
156
|
function onclick(event) {
|
|
155
157
|
setFollow(false);
|
|
156
|
-
|
|
157
|
-
const rowHeight = totalHeight / visibleEntries;
|
|
158
|
-
setSelected(offsetEntries + Math.floor(event.clientY / rowHeight));
|
|
158
|
+
setSelected(offsetEntries + Math.floor(event.clientY / entryHeight));
|
|
159
159
|
}
|
|
160
160
|
</script>
|
|
161
161
|
|
|
162
162
|
<svelte:window {onkeydown} />
|
|
163
|
-
<log-content
|
|
164
|
-
{
|
|
165
|
-
|
|
163
|
+
<log-content
|
|
164
|
+
{onclick}
|
|
165
|
+
{onkeydown}
|
|
166
|
+
bind:clientHeight={contentHeight}
|
|
167
|
+
role="presentation"
|
|
168
|
+
>
|
|
169
|
+
{#each visibleEntries as entry, i (i)}
|
|
170
|
+
{@render entryElement(entry, selected, offsetEntries + i, follow)}
|
|
166
171
|
{/each}
|
|
167
172
|
</log-content>
|