@shardworks/spider-apparatus 0.1.139 → 0.1.141
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/dist/types.d.ts
CHANGED
|
@@ -442,6 +442,8 @@ export interface ChoiceQuestionSpec {
|
|
|
442
442
|
label: string;
|
|
443
443
|
/** Optional long-form context, explanation, or instructions for this question. */
|
|
444
444
|
details?: string;
|
|
445
|
+
/** Optional classification tags for filtering and grouping in the UI. */
|
|
446
|
+
tags?: string[];
|
|
445
447
|
/** Key → display label options map. */
|
|
446
448
|
options: Record<string, string>;
|
|
447
449
|
/** When true, the patron can supply a freeform answer instead of selecting. */
|
|
@@ -453,6 +455,8 @@ export interface BooleanQuestionSpec {
|
|
|
453
455
|
label: string;
|
|
454
456
|
/** Optional long-form context, explanation, or instructions for this question. */
|
|
455
457
|
details?: string;
|
|
458
|
+
/** Optional classification tags for filtering and grouping in the UI. */
|
|
459
|
+
tags?: string[];
|
|
456
460
|
}
|
|
457
461
|
export interface TextQuestionSpec {
|
|
458
462
|
type: 'text';
|
|
@@ -460,6 +464,8 @@ export interface TextQuestionSpec {
|
|
|
460
464
|
label: string;
|
|
461
465
|
/** Optional long-form context, explanation, or instructions for this question. */
|
|
462
466
|
details?: string;
|
|
467
|
+
/** Optional classification tags for filtering and grouping in the UI. */
|
|
468
|
+
tags?: string[];
|
|
463
469
|
}
|
|
464
470
|
export type QuestionSpec = ChoiceQuestionSpec | BooleanQuestionSpec | TextQuestionSpec;
|
|
465
471
|
/** Discriminated choice answer — selected from options or freeform custom. */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shardworks/spider-apparatus",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.141",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
"hono": "^4.7.11",
|
|
20
20
|
"yaml": "^2.0.0",
|
|
21
21
|
"zod": "4.3.6",
|
|
22
|
-
"@shardworks/nexus-core": "0.1.
|
|
23
|
-
"@shardworks/stacks-apparatus": "0.1.
|
|
24
|
-
"@shardworks/
|
|
25
|
-
"@shardworks/
|
|
26
|
-
"@shardworks/
|
|
27
|
-
"@shardworks/
|
|
28
|
-
"@shardworks/
|
|
22
|
+
"@shardworks/nexus-core": "0.1.141",
|
|
23
|
+
"@shardworks/stacks-apparatus": "0.1.141",
|
|
24
|
+
"@shardworks/clerk-apparatus": "0.1.141",
|
|
25
|
+
"@shardworks/fabricator-apparatus": "0.1.141",
|
|
26
|
+
"@shardworks/animator-apparatus": "0.1.141",
|
|
27
|
+
"@shardworks/tools-apparatus": "0.1.141",
|
|
28
|
+
"@shardworks/codexes-apparatus": "0.1.141"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "25.5.0"
|
|
@@ -184,3 +184,131 @@ describe('feedback.js custom choice option', () => {
|
|
|
184
184
|
);
|
|
185
185
|
});
|
|
186
186
|
});
|
|
187
|
+
|
|
188
|
+
// ── Tag badge rendering ──────────────────────────────────────────────
|
|
189
|
+
|
|
190
|
+
describe('feedback.js tag badge rendering', () => {
|
|
191
|
+
it('defines a renderTags helper function', () => {
|
|
192
|
+
assert.match(
|
|
193
|
+
feedbackJs,
|
|
194
|
+
/function renderTags\(spec\)/,
|
|
195
|
+
'must define a renderTags helper function',
|
|
196
|
+
);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it('renders tag badges with the .tag CSS class', () => {
|
|
200
|
+
assert.match(
|
|
201
|
+
feedbackJs,
|
|
202
|
+
/class="tag"/,
|
|
203
|
+
'must render tags with class="tag"',
|
|
204
|
+
);
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it('returns empty string when spec.tags is falsy or empty', () => {
|
|
208
|
+
assert.match(
|
|
209
|
+
feedbackJs,
|
|
210
|
+
/!spec\.tags\s*\|\|\s*spec\.tags\.length\s*===\s*0.*return\s*''/,
|
|
211
|
+
'renderTags must return empty string for falsy or empty tags',
|
|
212
|
+
);
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it('calls renderTags in choice question renderer after question-label', () => {
|
|
216
|
+
assert.match(
|
|
217
|
+
feedbackJs,
|
|
218
|
+
/question-label.*?<\/span>'\s*\+\s*renderTags\(spec\)\s*\+\s*'<\/div>/,
|
|
219
|
+
'choice renderer must call renderTags after question-label span',
|
|
220
|
+
);
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
it('calls renderTags in boolean question renderer after boolean-label', () => {
|
|
224
|
+
assert.match(
|
|
225
|
+
feedbackJs,
|
|
226
|
+
/boolean-label.*?<\/span>'\s*\+\s*renderTags\(spec\)/,
|
|
227
|
+
'boolean renderer must call renderTags after boolean-label span',
|
|
228
|
+
);
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
it('calls renderTags in text question renderer after label', () => {
|
|
232
|
+
assert.match(
|
|
233
|
+
feedbackJs,
|
|
234
|
+
/<\/label>'\s*\n\s*\+\s*renderTags\(spec\)\s*\n\s*\+\s*'<textarea/,
|
|
235
|
+
'text renderer must call renderTags between label and textarea',
|
|
236
|
+
);
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
// ── Tag filter toolbar ───────────────────────────────────────────────
|
|
241
|
+
|
|
242
|
+
describe('feedback.js tag filter toolbar', () => {
|
|
243
|
+
it('creates toolbar element with tag-filter-toolbar ID', () => {
|
|
244
|
+
assert.match(
|
|
245
|
+
feedbackJs,
|
|
246
|
+
/id\s*=\s*'tag-filter-toolbar'/,
|
|
247
|
+
'must create a toolbar element with id tag-filter-toolbar',
|
|
248
|
+
);
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
it('creates tag filter buttons with tag-filter-btn class', () => {
|
|
252
|
+
assert.match(
|
|
253
|
+
feedbackJs,
|
|
254
|
+
/tag-filter-btn/,
|
|
255
|
+
'must create buttons with tag-filter-btn class',
|
|
256
|
+
);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
it('stores active tag filter state in activeTagFilters variable', () => {
|
|
260
|
+
assert.match(
|
|
261
|
+
feedbackJs,
|
|
262
|
+
/var activeTagFilters\s*=\s*\{\}/,
|
|
263
|
+
'must declare activeTagFilters state variable',
|
|
264
|
+
);
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
it('defines an applyTagFilters function', () => {
|
|
268
|
+
assert.match(
|
|
269
|
+
feedbackJs,
|
|
270
|
+
/function applyTagFilters\(\)/,
|
|
271
|
+
'must define an applyTagFilters function',
|
|
272
|
+
);
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
it('sorts tags alphabetically for toolbar display', () => {
|
|
276
|
+
assert.match(
|
|
277
|
+
feedbackJs,
|
|
278
|
+
/Object\.keys\(tagSet\)\.sort\(\)/,
|
|
279
|
+
'must sort tags alphabetically using .sort()',
|
|
280
|
+
);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
it('includes a clear filters button with tag-filter-clear class', () => {
|
|
284
|
+
assert.match(
|
|
285
|
+
feedbackJs,
|
|
286
|
+
/tag-filter-clear/,
|
|
287
|
+
'must include a clear filters element with tag-filter-clear class',
|
|
288
|
+
);
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
it('displays showing count with tag-filter-count class', () => {
|
|
292
|
+
assert.match(
|
|
293
|
+
feedbackJs,
|
|
294
|
+
/tag-filter-count/,
|
|
295
|
+
'must include a count display with tag-filter-count class',
|
|
296
|
+
);
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
it('clears activeTagFilters in navigateToList', () => {
|
|
300
|
+
assert.match(
|
|
301
|
+
feedbackJs,
|
|
302
|
+
/activeTagFilters\s*=\s*\{\};\s*\n\s*detailView/,
|
|
303
|
+
'navigateToList must reset activeTagFilters before hiding detail view',
|
|
304
|
+
);
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
it('removes existing toolbar before re-rendering', () => {
|
|
308
|
+
assert.match(
|
|
309
|
+
feedbackJs,
|
|
310
|
+
/getElementById\('tag-filter-toolbar'\);\s*\n\s*if\s*\(oldToolbar\)\s*oldToolbar\.remove\(\)/,
|
|
311
|
+
'renderDetail must remove existing tag-filter-toolbar on re-render',
|
|
312
|
+
);
|
|
313
|
+
});
|
|
314
|
+
});
|
|
@@ -7,6 +7,50 @@
|
|
|
7
7
|
margin-bottom: 12px;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
+
/* ── Tag filter toolbar ─────────────────────────────────────────────── */
|
|
11
|
+
|
|
12
|
+
.tag-filter-btn {
|
|
13
|
+
padding: 4px 10px;
|
|
14
|
+
font-size: 11px;
|
|
15
|
+
font-family: inherit;
|
|
16
|
+
border: 1px solid var(--border);
|
|
17
|
+
border-radius: 4px;
|
|
18
|
+
background: var(--surface);
|
|
19
|
+
color: var(--text-dim);
|
|
20
|
+
cursor: pointer;
|
|
21
|
+
transition: all 0.15s;
|
|
22
|
+
}
|
|
23
|
+
.tag-filter-btn:hover {
|
|
24
|
+
border-color: var(--cyan);
|
|
25
|
+
color: var(--text);
|
|
26
|
+
}
|
|
27
|
+
.tag-filter-btn.active {
|
|
28
|
+
background: var(--cyan);
|
|
29
|
+
border-color: var(--cyan);
|
|
30
|
+
color: var(--bg);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.tag-filter-count {
|
|
34
|
+
font-size: 11px;
|
|
35
|
+
color: var(--text-dim);
|
|
36
|
+
margin-left: auto;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.tag-filter-clear {
|
|
40
|
+
padding: 4px 10px;
|
|
41
|
+
font-size: 11px;
|
|
42
|
+
font-family: inherit;
|
|
43
|
+
border: 1px solid var(--border);
|
|
44
|
+
border-radius: 4px;
|
|
45
|
+
background: transparent;
|
|
46
|
+
color: var(--text-dim);
|
|
47
|
+
cursor: pointer;
|
|
48
|
+
}
|
|
49
|
+
.tag-filter-clear:hover {
|
|
50
|
+
color: var(--text);
|
|
51
|
+
border-color: var(--text-dim);
|
|
52
|
+
}
|
|
53
|
+
|
|
10
54
|
/* ── Request cards (list view) ───────────────────────────────────────── */
|
|
11
55
|
|
|
12
56
|
.request-card {
|
|
@@ -76,6 +120,20 @@
|
|
|
76
120
|
color: var(--text-bright);
|
|
77
121
|
}
|
|
78
122
|
|
|
123
|
+
/* ── Tag badges ─────────────────────────────────────────────────────── */
|
|
124
|
+
|
|
125
|
+
.tag {
|
|
126
|
+
display: inline-block;
|
|
127
|
+
padding: 2px 8px;
|
|
128
|
+
font-size: 11px;
|
|
129
|
+
font-weight: 500;
|
|
130
|
+
color: var(--text-dim);
|
|
131
|
+
background: var(--surface2);
|
|
132
|
+
border-radius: 4px;
|
|
133
|
+
margin-left: 6px;
|
|
134
|
+
vertical-align: middle;
|
|
135
|
+
}
|
|
136
|
+
|
|
79
137
|
/* ── Choice option rows ──────────────────────────────────────────────── */
|
|
80
138
|
|
|
81
139
|
.option {
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
var localAnswers = {};
|
|
9
9
|
var pollTimer = null;
|
|
10
10
|
var debounceTimers = {};
|
|
11
|
+
var activeTagFilters = {};
|
|
11
12
|
|
|
12
13
|
// ── API endpoints ──────────────────────────────────────────────────────
|
|
13
14
|
|
|
@@ -186,6 +187,70 @@
|
|
|
186
187
|
}
|
|
187
188
|
questionsContainer.innerHTML = html;
|
|
188
189
|
|
|
190
|
+
// Tag filter toolbar
|
|
191
|
+
var oldToolbar = document.getElementById('tag-filter-toolbar');
|
|
192
|
+
if (oldToolbar) oldToolbar.remove();
|
|
193
|
+
|
|
194
|
+
var tagSet = {};
|
|
195
|
+
for (var t = 0; t < qKeys.length; t++) {
|
|
196
|
+
var qSpec = req.questions[qKeys[t]];
|
|
197
|
+
if (qSpec.tags && qSpec.tags.length > 0) {
|
|
198
|
+
for (var tt = 0; tt < qSpec.tags.length; tt++) {
|
|
199
|
+
tagSet[qSpec.tags[tt]] = true;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
var allTags = Object.keys(tagSet).sort();
|
|
204
|
+
|
|
205
|
+
if (allTags.length > 0) {
|
|
206
|
+
var toolbar = document.createElement('div');
|
|
207
|
+
toolbar.id = 'tag-filter-toolbar';
|
|
208
|
+
toolbar.className = 'toolbar';
|
|
209
|
+
|
|
210
|
+
for (var b = 0; b < allTags.length; b++) {
|
|
211
|
+
var btn = document.createElement('button');
|
|
212
|
+
btn.className = 'tag-filter-btn' + (activeTagFilters[allTags[b]] ? ' active' : '');
|
|
213
|
+
btn.setAttribute('data-tag', allTags[b]);
|
|
214
|
+
btn.textContent = allTags[b];
|
|
215
|
+
toolbar.appendChild(btn);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
var countSpan = document.createElement('span');
|
|
219
|
+
countSpan.className = 'tag-filter-count';
|
|
220
|
+
countSpan.style.display = 'none';
|
|
221
|
+
toolbar.appendChild(countSpan);
|
|
222
|
+
|
|
223
|
+
var clearBtn = document.createElement('button');
|
|
224
|
+
clearBtn.className = 'tag-filter-clear';
|
|
225
|
+
clearBtn.textContent = 'Clear filters';
|
|
226
|
+
clearBtn.style.display = 'none';
|
|
227
|
+
toolbar.appendChild(clearBtn);
|
|
228
|
+
|
|
229
|
+
toolbar.addEventListener('click', function (e) {
|
|
230
|
+
if (e.target.matches('.tag-filter-btn')) {
|
|
231
|
+
var tag = e.target.getAttribute('data-tag');
|
|
232
|
+
if (activeTagFilters[tag]) {
|
|
233
|
+
delete activeTagFilters[tag];
|
|
234
|
+
e.target.classList.remove('active');
|
|
235
|
+
} else {
|
|
236
|
+
activeTagFilters[tag] = true;
|
|
237
|
+
e.target.classList.add('active');
|
|
238
|
+
}
|
|
239
|
+
applyTagFilters();
|
|
240
|
+
} else if (e.target.matches('.tag-filter-clear')) {
|
|
241
|
+
activeTagFilters = {};
|
|
242
|
+
var btns = toolbar.querySelectorAll('.tag-filter-btn');
|
|
243
|
+
for (var j = 0; j < btns.length; j++) {
|
|
244
|
+
btns[j].classList.remove('active');
|
|
245
|
+
}
|
|
246
|
+
applyTagFilters();
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
questionsContainer.parentNode.insertBefore(toolbar, questionsContainer);
|
|
251
|
+
applyTagFilters();
|
|
252
|
+
}
|
|
253
|
+
|
|
189
254
|
// Action bar
|
|
190
255
|
if (isPending) {
|
|
191
256
|
var total = qKeys.length;
|
|
@@ -212,7 +277,7 @@
|
|
|
212
277
|
var isCustomSelected = answer != null && 'custom' in answer;
|
|
213
278
|
|
|
214
279
|
var html = '<div class="question-card' + readonlyClass + '" data-question-key="' + esc(qKey) + '">'
|
|
215
|
-
+ '<div class="question-header"><span class="question-label">' + esc(spec.label) + '</span
|
|
280
|
+
+ '<div class="question-header"><span class="question-label">' + esc(spec.label) + '</span>' + renderTags(spec) + '</div>'
|
|
216
281
|
+ '<div class="options-list">';
|
|
217
282
|
|
|
218
283
|
var optKeys = Object.keys(spec.options);
|
|
@@ -264,7 +329,7 @@
|
|
|
264
329
|
var html = '<div class="question-card' + readonlyClass + '" data-question-key="' + esc(qKey) + '">'
|
|
265
330
|
+ '<div class="boolean-item' + stateClass + '" data-question-key="' + esc(qKey) + '">'
|
|
266
331
|
+ '<div class="boolean-toggle">' + icon + '</div>'
|
|
267
|
-
+ '<span class="boolean-label">' + esc(spec.label) + '</span>'
|
|
332
|
+
+ '<span class="boolean-label">' + esc(spec.label) + '</span>' + renderTags(spec)
|
|
268
333
|
+ '</div>';
|
|
269
334
|
|
|
270
335
|
html += renderDetails(spec);
|
|
@@ -279,6 +344,7 @@
|
|
|
279
344
|
var html = '<div class="question-card' + readonlyClass + '" data-question-key="' + esc(qKey) + '">'
|
|
280
345
|
+ '<div class="text-question">'
|
|
281
346
|
+ '<label>' + esc(spec.label) + '</label>'
|
|
347
|
+
+ renderTags(spec)
|
|
282
348
|
+ '<textarea data-question-key="' + esc(qKey) + '" data-text-input="true">'
|
|
283
349
|
+ esc(answer) + '</textarea>'
|
|
284
350
|
+ '</div>';
|
|
@@ -288,6 +354,17 @@
|
|
|
288
354
|
return html;
|
|
289
355
|
}
|
|
290
356
|
|
|
357
|
+
// ── Shared tag badge renderer ───────────────────────────────────────────
|
|
358
|
+
|
|
359
|
+
function renderTags(spec) {
|
|
360
|
+
if (!spec.tags || spec.tags.length === 0) return '';
|
|
361
|
+
var html = '';
|
|
362
|
+
for (var i = 0; i < spec.tags.length; i++) {
|
|
363
|
+
html += '<span class="tag">' + esc(spec.tags[i]) + '</span>';
|
|
364
|
+
}
|
|
365
|
+
return html;
|
|
366
|
+
}
|
|
367
|
+
|
|
291
368
|
// ── Shared details renderer ────────────────────────────────────────────
|
|
292
369
|
|
|
293
370
|
function renderDetails(spec) {
|
|
@@ -298,6 +375,59 @@
|
|
|
298
375
|
+ '</details>';
|
|
299
376
|
}
|
|
300
377
|
|
|
378
|
+
// ── Tag filter application ─────────────────────────────────────────────
|
|
379
|
+
|
|
380
|
+
function applyTagFilters() {
|
|
381
|
+
var cards = questionsContainer.querySelectorAll('.question-card');
|
|
382
|
+
var filterKeys = Object.keys(activeTagFilters);
|
|
383
|
+
var toolbar = document.getElementById('tag-filter-toolbar');
|
|
384
|
+
|
|
385
|
+
if (filterKeys.length === 0) {
|
|
386
|
+
for (var i = 0; i < cards.length; i++) {
|
|
387
|
+
cards[i].style.display = '';
|
|
388
|
+
}
|
|
389
|
+
if (toolbar) {
|
|
390
|
+
var countEl = toolbar.querySelector('.tag-filter-count');
|
|
391
|
+
var clearEl = toolbar.querySelector('.tag-filter-clear');
|
|
392
|
+
if (countEl) countEl.style.display = 'none';
|
|
393
|
+
if (clearEl) clearEl.style.display = 'none';
|
|
394
|
+
}
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
var visibleCount = 0;
|
|
399
|
+
var totalCount = cards.length;
|
|
400
|
+
for (var i = 0; i < cards.length; i++) {
|
|
401
|
+
var qKey = cards[i].getAttribute('data-question-key');
|
|
402
|
+
var spec = currentRequest.questions[qKey];
|
|
403
|
+
var match = false;
|
|
404
|
+
if (spec && spec.tags) {
|
|
405
|
+
for (var j = 0; j < spec.tags.length; j++) {
|
|
406
|
+
if (activeTagFilters[spec.tags[j]]) {
|
|
407
|
+
match = true;
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
if (match) {
|
|
413
|
+
cards[i].style.display = '';
|
|
414
|
+
visibleCount++;
|
|
415
|
+
} else {
|
|
416
|
+
cards[i].style.display = 'none';
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
if (toolbar) {
|
|
421
|
+
var countEl = toolbar.querySelector('.tag-filter-count');
|
|
422
|
+
var clearEl = toolbar.querySelector('.tag-filter-clear');
|
|
423
|
+
if (countEl) {
|
|
424
|
+
countEl.textContent = 'Showing ' + visibleCount + ' of ' + totalCount;
|
|
425
|
+
countEl.style.display = '';
|
|
426
|
+
}
|
|
427
|
+
if (clearEl) clearEl.style.display = '';
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
301
431
|
// ── Auto-save ──────────────────────────────────────────────────────────
|
|
302
432
|
|
|
303
433
|
function saveAnswer(questionKey, body, newLocalVal) {
|
|
@@ -371,6 +501,7 @@
|
|
|
371
501
|
clearTimeout(debounceTimers[dKeys[i]]);
|
|
372
502
|
}
|
|
373
503
|
debounceTimers = {};
|
|
504
|
+
activeTagFilters = {};
|
|
374
505
|
|
|
375
506
|
detailView.style.display = 'none';
|
|
376
507
|
listView.style.display = '';
|