@kenjura/ursa 0.55.0 → 0.58.0
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/CHANGELOG.md +16 -0
- package/README.md +14 -1
- package/meta/default.css +188 -159
- package/meta/menu.js +362 -536
- package/meta/search.js +287 -41
- package/package.json +1 -1
- package/src/helper/automenu.js +30 -17
- package/src/helper/build/autoIndex.js +2 -1
- package/src/helper/build/menu.js +1 -1
- package/src/helper/fullTextIndex.js +275 -0
- package/src/helper/linkValidator.js +59 -50
- package/src/jobs/generate.js +34 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# 0.58.0
|
|
2
|
+
2025-12-26
|
|
3
|
+
|
|
4
|
+
- new menu UI with 2-pane horizontal layout
|
|
5
|
+
|
|
6
|
+
# 0.57.0
|
|
7
|
+
2025-12-26
|
|
8
|
+
|
|
9
|
+
- added full-text indexing and search using lunr.js
|
|
10
|
+
- all links in generated html will be full links with extensions (e.g. /folder/page.html)
|
|
11
|
+
|
|
12
|
+
# 0.56.0
|
|
13
|
+
2025-12-23
|
|
14
|
+
|
|
15
|
+
- restored metadata to directory index JSON files
|
|
16
|
+
|
|
1
17
|
# 0.55.0
|
|
2
18
|
2025-12-21
|
|
3
19
|
|
package/README.md
CHANGED
|
@@ -242,4 +242,17 @@ Generates the site once using default directories.
|
|
|
242
242
|
|
|
243
243
|
## Requirements
|
|
244
244
|
|
|
245
|
-
SOURCE folder should have at least an index.md in it.
|
|
245
|
+
SOURCE folder should have at least an index.md in it.
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
## Link logic
|
|
249
|
+
Links are allowed to be extensionless. Link resolution works as follows:
|
|
250
|
+
- If link has an extension, look for exact match, and 404 if not found
|
|
251
|
+
- If link has no extension:
|
|
252
|
+
- Look for exact match with .md, .txt, .yml extensions (in that order)
|
|
253
|
+
- If not found, assume the path is a folder, and look for:
|
|
254
|
+
- index.md, index.txt, _index.md, _index.txt
|
|
255
|
+
- home.md, home.txt, _home.md, _home.txt
|
|
256
|
+
- (folder name).md, (folder name).txt
|
|
257
|
+
- If any of these are found, link to that file's html version
|
|
258
|
+
- If still not found, 404
|
package/meta/default.css
CHANGED
|
@@ -180,15 +180,54 @@ nav#nav-global {
|
|
|
180
180
|
font-style: italic;
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
+
/* Search section styling (for combined path/full-text results) */
|
|
184
|
+
.search-section {
|
|
185
|
+
border-bottom: 1px solid var(--nav-top-bg);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.search-section:last-child {
|
|
189
|
+
border-bottom: none;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.search-section-header {
|
|
193
|
+
padding: 8px 16px;
|
|
194
|
+
font-size: 0.75em;
|
|
195
|
+
font-weight: 600;
|
|
196
|
+
text-transform: uppercase;
|
|
197
|
+
letter-spacing: 0.5px;
|
|
198
|
+
color: var(--text-color);
|
|
199
|
+
opacity: 0.6;
|
|
200
|
+
background-color: color-mix(in srgb, var(--nav-top-bg) 50%, transparent);
|
|
201
|
+
border-bottom: 1px solid var(--nav-top-bg);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.search-show-more {
|
|
205
|
+
display: block;
|
|
206
|
+
width: 100%;
|
|
207
|
+
padding: 8px 16px;
|
|
208
|
+
background: transparent;
|
|
209
|
+
border: none;
|
|
210
|
+
color: var(--link-color);
|
|
211
|
+
font-size: 0.85em;
|
|
212
|
+
cursor: pointer;
|
|
213
|
+
text-align: center;
|
|
214
|
+
transition: background-color 0.2s ease;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.search-show-more:hover {
|
|
218
|
+
background-color: var(--nav-top-bg);
|
|
219
|
+
text-decoration: underline;
|
|
220
|
+
}
|
|
221
|
+
|
|
183
222
|
nav#nav-main {
|
|
184
223
|
position: fixed;
|
|
185
224
|
top: calc(var(--global-nav-height));
|
|
186
225
|
left: 0;
|
|
187
226
|
width: 260px;
|
|
188
227
|
max-height: calc(100vh - var(--global-nav-height));
|
|
189
|
-
overflow
|
|
190
|
-
padding: 0
|
|
191
|
-
font-size: 0.
|
|
228
|
+
overflow: hidden;
|
|
229
|
+
padding: 0;
|
|
230
|
+
font-size: 0.85rem;
|
|
192
231
|
transition: transform 0.2s ease;
|
|
193
232
|
}
|
|
194
233
|
|
|
@@ -204,114 +243,88 @@ body:has(nav#nav-main.collapsed) article#main-content {
|
|
|
204
243
|
}
|
|
205
244
|
|
|
206
245
|
nav#nav-main {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
background: transparent;
|
|
214
|
-
}
|
|
215
|
-
&::-webkit-scrollbar-thumb {
|
|
216
|
-
background: rgba(128, 128, 128, 0.3);
|
|
217
|
-
border-radius: 3px;
|
|
246
|
+
/* Column-based menu styles */
|
|
247
|
+
|
|
248
|
+
.menu-loading {
|
|
249
|
+
padding: 1rem;
|
|
250
|
+
opacity: 0.6;
|
|
251
|
+
text-align: center;
|
|
218
252
|
}
|
|
219
|
-
|
|
220
|
-
|
|
253
|
+
|
|
254
|
+
/* Container that clips the columns */
|
|
255
|
+
.menu-columns-container {
|
|
256
|
+
width: 100%;
|
|
257
|
+
height: calc(100vh - var(--global-nav-height) - 40px);
|
|
258
|
+
overflow: hidden;
|
|
259
|
+
position: relative;
|
|
221
260
|
}
|
|
222
|
-
|
|
223
|
-
/*
|
|
224
|
-
.menu-
|
|
261
|
+
|
|
262
|
+
/* Wrapper that holds all columns and transforms for scrolling */
|
|
263
|
+
.menu-columns-wrapper {
|
|
225
264
|
display: flex;
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
padding: 0.5rem 1rem;
|
|
229
|
-
margin: 0 8px 0.5rem 8px;
|
|
230
|
-
border-bottom: 1px solid rgba(128, 128, 128, 0.2);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
.menu-breadcrumb button {
|
|
234
|
-
background: none;
|
|
235
|
-
border: none;
|
|
236
|
-
color: var(--text-color);
|
|
237
|
-
cursor: pointer;
|
|
238
|
-
padding: 4px 8px;
|
|
239
|
-
border-radius: 4px;
|
|
240
|
-
font-size: 1rem;
|
|
241
|
-
opacity: 0.7;
|
|
242
|
-
transition: all 0.2s ease;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
.menu-breadcrumb button:hover {
|
|
246
|
-
opacity: 1;
|
|
247
|
-
background: rgba(128, 128, 128, 0.2);
|
|
265
|
+
height: 100%;
|
|
266
|
+
transition: transform 0.25s ease-out;
|
|
248
267
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
overflow: hidden;
|
|
257
|
-
|
|
268
|
+
|
|
269
|
+
/* Individual column */
|
|
270
|
+
.menu-column {
|
|
271
|
+
width: 130px;
|
|
272
|
+
min-width: 130px;
|
|
273
|
+
height: 100%;
|
|
274
|
+
overflow-y: auto;
|
|
275
|
+
overflow-x: hidden;
|
|
276
|
+
border-right: 1px solid rgba(128, 128, 128, 0.15);
|
|
277
|
+
|
|
278
|
+
/* Scrollbar styling */
|
|
279
|
+
&::-webkit-scrollbar {
|
|
280
|
+
width: 4px;
|
|
281
|
+
}
|
|
282
|
+
&::-webkit-scrollbar-track {
|
|
283
|
+
background: transparent;
|
|
284
|
+
}
|
|
285
|
+
&::-webkit-scrollbar-thumb {
|
|
286
|
+
background: rgba(128, 128, 128, 0.2);
|
|
287
|
+
border-radius: 2px;
|
|
288
|
+
}
|
|
289
|
+
&::-webkit-scrollbar-thumb:hover {
|
|
290
|
+
background: rgba(128, 128, 128, 0.4);
|
|
291
|
+
}
|
|
258
292
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
list-style: none;
|
|
263
|
-
margin: 0;
|
|
264
|
-
padding: 0;
|
|
293
|
+
|
|
294
|
+
.menu-column:last-child {
|
|
295
|
+
border-right: none;
|
|
265
296
|
}
|
|
266
|
-
|
|
267
|
-
|
|
297
|
+
|
|
298
|
+
/* Column list */
|
|
299
|
+
.menu-column-list {
|
|
268
300
|
list-style: none;
|
|
269
301
|
margin: 0;
|
|
270
|
-
padding: 0;
|
|
302
|
+
padding: 4px 0;
|
|
271
303
|
}
|
|
272
|
-
|
|
273
|
-
|
|
304
|
+
|
|
305
|
+
/* Column item */
|
|
306
|
+
.menu-column-item {
|
|
274
307
|
margin: 0;
|
|
275
308
|
padding: 0;
|
|
276
309
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
.menu-item-row {
|
|
310
|
+
|
|
311
|
+
.menu-column-item-row {
|
|
280
312
|
display: flex;
|
|
281
313
|
align-items: center;
|
|
282
|
-
padding:
|
|
283
|
-
margin:
|
|
284
|
-
border-radius:
|
|
314
|
+
padding: 6px 8px;
|
|
315
|
+
margin: 1px 4px;
|
|
316
|
+
border-radius: 4px;
|
|
285
317
|
cursor: pointer;
|
|
286
|
-
transition:
|
|
287
|
-
gap:
|
|
318
|
+
transition: background-color 0.15s ease;
|
|
319
|
+
gap: 4px;
|
|
288
320
|
}
|
|
289
|
-
|
|
290
|
-
.menu-item-row:hover {
|
|
291
|
-
background-color: rgba(128, 128, 128, 0.
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
/* Icon container */
|
|
295
|
-
.menu-icon {
|
|
296
|
-
display: flex;
|
|
297
|
-
align-items: center;
|
|
298
|
-
justify-content: center;
|
|
299
|
-
width: 20px;
|
|
300
|
-
height: 20px;
|
|
301
|
-
flex-shrink: 0;
|
|
302
|
-
font-size: 16px;
|
|
303
|
-
opacity: 0.7;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
.menu-icon img {
|
|
307
|
-
width: 18px;
|
|
308
|
-
height: 18px;
|
|
309
|
-
object-fit: contain;
|
|
310
|
-
border-radius: 3px;
|
|
321
|
+
|
|
322
|
+
.menu-column-item-row:hover {
|
|
323
|
+
background-color: rgba(128, 128, 128, 0.15);
|
|
311
324
|
}
|
|
312
|
-
|
|
313
|
-
/*
|
|
314
|
-
.menu-label {
|
|
325
|
+
|
|
326
|
+
/* Label styling */
|
|
327
|
+
.menu-column-label {
|
|
315
328
|
flex: 1;
|
|
316
329
|
text-decoration: none;
|
|
317
330
|
color: var(--text-color);
|
|
@@ -320,89 +333,105 @@ nav#nav-main {
|
|
|
320
333
|
overflow: hidden;
|
|
321
334
|
text-overflow: ellipsis;
|
|
322
335
|
font-weight: 400;
|
|
323
|
-
line-height: 1.
|
|
336
|
+
line-height: 1.3;
|
|
324
337
|
text-transform: capitalize;
|
|
338
|
+
font-size: 0.8rem;
|
|
325
339
|
}
|
|
326
|
-
|
|
327
|
-
.menu-item-row:hover .menu-label {
|
|
340
|
+
|
|
341
|
+
.menu-column-item-row:hover .menu-column-label {
|
|
328
342
|
opacity: 1;
|
|
329
343
|
}
|
|
330
|
-
|
|
331
|
-
/*
|
|
332
|
-
.menu-
|
|
344
|
+
|
|
345
|
+
/* Arrow for folders */
|
|
346
|
+
.menu-column-arrow {
|
|
333
347
|
opacity: 0.4;
|
|
334
|
-
font-size:
|
|
335
|
-
|
|
336
|
-
cursor: pointer;
|
|
337
|
-
transition: opacity 0.15s ease;
|
|
348
|
+
font-size: 12px;
|
|
349
|
+
flex-shrink: 0;
|
|
338
350
|
}
|
|
339
|
-
|
|
340
|
-
.menu-item-row:hover .menu-
|
|
341
|
-
opacity: 0.
|
|
351
|
+
|
|
352
|
+
.menu-column-item.has-children .menu-column-item-row:hover .menu-column-arrow {
|
|
353
|
+
opacity: 0.8;
|
|
342
354
|
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
355
|
+
|
|
356
|
+
/* Selected item (on path to current doc) */
|
|
357
|
+
.menu-column-item.selected > .menu-column-item-row {
|
|
358
|
+
background-color: rgba(128, 128, 128, 0.2);
|
|
346
359
|
}
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
opacity:
|
|
351
|
-
font-size: 12px;
|
|
352
|
-
padding: 0 4px;
|
|
353
|
-
cursor: pointer;
|
|
354
|
-
transition: opacity 0.15s ease;
|
|
355
|
-
font-weight: bold;
|
|
360
|
+
|
|
361
|
+
.menu-column-item.selected > .menu-column-item-row .menu-column-label {
|
|
362
|
+
font-weight: 500;
|
|
363
|
+
opacity: 1;
|
|
356
364
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
365
|
+
|
|
366
|
+
/* Current page item */
|
|
367
|
+
.menu-column-item.current-page > .menu-column-item-row {
|
|
368
|
+
background-color: rgba(0, 255, 255, 0.2);
|
|
360
369
|
}
|
|
361
|
-
|
|
362
|
-
.menu-
|
|
363
|
-
|
|
370
|
+
|
|
371
|
+
.menu-column-item.current-page > .menu-column-item-row .menu-column-label {
|
|
372
|
+
font-weight: 600;
|
|
373
|
+
opacity: 1;
|
|
364
374
|
}
|
|
365
|
-
|
|
366
|
-
/*
|
|
367
|
-
.
|
|
368
|
-
|
|
375
|
+
|
|
376
|
+
/* Scroll buttons */
|
|
377
|
+
.menu-scroll-btn {
|
|
378
|
+
position: absolute;
|
|
379
|
+
top: 50%;
|
|
380
|
+
transform: translateY(-50%);
|
|
381
|
+
width: 24px;
|
|
382
|
+
height: 48px;
|
|
383
|
+
background: rgba(0, 0, 0, 0.4);
|
|
384
|
+
border: none;
|
|
385
|
+
color: var(--text-color);
|
|
386
|
+
font-size: 18px;
|
|
387
|
+
cursor: pointer;
|
|
388
|
+
z-index: 10;
|
|
389
|
+
border-radius: 4px;
|
|
390
|
+
transition: all 0.2s ease;
|
|
391
|
+
display: flex;
|
|
392
|
+
align-items: center;
|
|
393
|
+
justify-content: center;
|
|
369
394
|
}
|
|
370
|
-
|
|
371
|
-
.
|
|
372
|
-
|
|
373
|
-
font-weight: 500;
|
|
395
|
+
|
|
396
|
+
.menu-scroll-btn:hover:not(:disabled) {
|
|
397
|
+
background: rgba(0, 0, 0, 0.6);
|
|
374
398
|
}
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
font-size: 0.9rem;
|
|
399
|
+
|
|
400
|
+
.menu-scroll-btn:disabled {
|
|
401
|
+
cursor: default;
|
|
379
402
|
}
|
|
380
|
-
|
|
381
|
-
.menu-
|
|
382
|
-
|
|
403
|
+
|
|
404
|
+
.menu-scroll-btn.scroll-left {
|
|
405
|
+
left: 2px;
|
|
383
406
|
}
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
margin-left: 0;
|
|
388
|
-
padding-left: 0;
|
|
407
|
+
|
|
408
|
+
.menu-scroll-btn.scroll-right {
|
|
409
|
+
right: 2px;
|
|
389
410
|
}
|
|
390
|
-
|
|
391
|
-
/*
|
|
392
|
-
.menu-
|
|
393
|
-
|
|
394
|
-
|
|
411
|
+
|
|
412
|
+
/* Scroll indicator for current doc */
|
|
413
|
+
.menu-scroll-indicator {
|
|
414
|
+
position: absolute;
|
|
415
|
+
bottom: 8px;
|
|
416
|
+
left: 50%;
|
|
417
|
+
transform: translateX(-50%);
|
|
418
|
+
z-index: 10;
|
|
395
419
|
}
|
|
396
|
-
|
|
397
|
-
.menu-
|
|
398
|
-
|
|
420
|
+
|
|
421
|
+
.menu-scroll-indicator .scroll-to-current {
|
|
422
|
+
background: rgba(0, 255, 255, 0.3);
|
|
423
|
+
border: 1px solid rgba(0, 255, 255, 0.5);
|
|
424
|
+
color: var(--text-color);
|
|
425
|
+
padding: 4px 12px;
|
|
426
|
+
border-radius: 12px;
|
|
427
|
+
font-size: 0.75rem;
|
|
428
|
+
cursor: pointer;
|
|
429
|
+
transition: all 0.2s ease;
|
|
430
|
+
white-space: nowrap;
|
|
399
431
|
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
margin-top: 0.5rem;
|
|
404
|
-
padding-top: 0.5rem;
|
|
405
|
-
border-top: 1px solid rgba(128, 128, 128, 0.15);
|
|
432
|
+
|
|
433
|
+
.menu-scroll-indicator .scroll-to-current:hover {
|
|
434
|
+
background: rgba(0, 255, 255, 0.5);
|
|
406
435
|
}
|
|
407
436
|
}
|
|
408
437
|
|