astro-accelerator-utils 0.1.11 → 0.1.12
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/index.d.mts +3 -3
- package/index.mjs +3 -1
- package/lib/postQueries.d.mts +4 -0
- package/lib/postQueries.mjs +4 -0
- package/lib/v1/navigation.d.mts +42 -0
- package/lib/v1/navigation.mjs +131 -0
- package/package.json +1 -1
package/index.d.mts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
import { Cache } from "./lib/v1/cache.mjs";
|
|
1
2
|
import { DateFormatter } from "./lib/v1/dates.mjs";
|
|
2
3
|
import { Markdown } from "./lib/v1/markdown.mjs";
|
|
4
|
+
import { Navigation } from "./lib/v1/navigation.mjs";
|
|
3
5
|
import { Posts } from "./lib/v1/posts.mjs";
|
|
4
6
|
import { UrlFormatter } from "./lib/v1/urls.mjs";
|
|
5
|
-
import { Cache } from "./lib/v1/cache.mjs";
|
|
6
7
|
import * as PostQueries from "./lib/postQueries.mjs";
|
|
7
8
|
import * as PostFiltering from "./lib/postFiltering.mjs";
|
|
8
9
|
import * as PostOrdering from "./lib/postOrdering.mjs";
|
|
9
10
|
import * as PostPaging from "./lib/postPaging.mjs";
|
|
10
11
|
import * as FooterMenu from "./lib/footerMenu.mjs";
|
|
11
|
-
import * as Navigation from "./lib/navigation.mjs";
|
|
12
12
|
import * as Taxonomy from "./lib/taxonomy.mjs";
|
|
13
|
-
export { DateFormatter, Markdown, Posts, UrlFormatter,
|
|
13
|
+
export { Cache, DateFormatter, Markdown, Navigation, Posts, UrlFormatter, PostQueries, PostFiltering, PostOrdering, PostPaging, FooterMenu, Taxonomy };
|
package/index.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Cache } from './lib/v1/cache.mjs';
|
|
2
2
|
import { DateFormatter } from './lib/v1/dates.mjs';
|
|
3
3
|
import { Markdown } from './lib/v1/markdown.mjs';
|
|
4
|
+
import { Navigation } from './lib/v1/navigation.mjs';
|
|
4
5
|
import { Posts } from './lib/v1/posts.mjs';
|
|
5
6
|
import { UrlFormatter } from './lib/v1/urls.mjs';
|
|
6
7
|
|
|
@@ -13,11 +14,12 @@ import * as Navigation from './lib/navigation.mjs';
|
|
|
13
14
|
import * as Taxonomy from './lib/taxonomy.mjs';
|
|
14
15
|
|
|
15
16
|
export {
|
|
17
|
+
Cache,
|
|
16
18
|
DateFormatter,
|
|
17
19
|
Markdown,
|
|
20
|
+
Navigation,
|
|
18
21
|
Posts,
|
|
19
22
|
UrlFormatter,
|
|
20
|
-
Cache,
|
|
21
23
|
PostQueries,
|
|
22
24
|
PostFiltering,
|
|
23
25
|
PostOrdering,
|
package/lib/postQueries.d.mts
CHANGED
|
@@ -27,6 +27,7 @@ export function getAuthors(frontmatter: Frontmatter): Promise<AuthorList>;
|
|
|
27
27
|
export function getAuthorInfo(slug: string): Promise<AuthorInfo>;
|
|
28
28
|
/**
|
|
29
29
|
* Returns a list of breadcrumbs
|
|
30
|
+
* @deprecated Use Navigation.breadcrumbs
|
|
30
31
|
* @param {URL} currentUrl
|
|
31
32
|
* @param {Site} site
|
|
32
33
|
* @returns {Promise<NavPage[]>}
|
|
@@ -34,6 +35,7 @@ export function getAuthorInfo(slug: string): Promise<AuthorInfo>;
|
|
|
34
35
|
export function getBreadcrumbs(currentUrl: URL, site: Site): Promise<NavPage[]>;
|
|
35
36
|
/**
|
|
36
37
|
* Converts a MarkdownInstance into a NavPage
|
|
38
|
+
* @deprecated Use Navigation.mapNavPage()
|
|
37
39
|
* @param {MarkdownInstance} page
|
|
38
40
|
* @param {Site}
|
|
39
41
|
* @returns {NavPage}
|
|
@@ -41,12 +43,14 @@ export function getBreadcrumbs(currentUrl: URL, site: Site): Promise<NavPage[]>;
|
|
|
41
43
|
export function mapNavPage(page: MarkdownInstance, site: any): NavPage;
|
|
42
44
|
/**
|
|
43
45
|
* Walks the tree to set current page
|
|
46
|
+
* @deprecated Use Navigation.setCurrentPage()
|
|
44
47
|
* @param {NavPage[]} pages
|
|
45
48
|
* @param {URL} currentUrl
|
|
46
49
|
*/
|
|
47
50
|
export function setCurrentPage(pages: NavPage[], currentUrl: URL): void;
|
|
48
51
|
/**
|
|
49
52
|
* Pops matching page from array
|
|
53
|
+
* @deprecated Use Navigation.popMatchingPage()
|
|
50
54
|
* @param {MarkdownInstance[]} allPages
|
|
51
55
|
* @param {string} search
|
|
52
56
|
* @returns
|
package/lib/postQueries.mjs
CHANGED
|
@@ -148,6 +148,7 @@ export async function getAuthorInfo (slug) {
|
|
|
148
148
|
|
|
149
149
|
/**
|
|
150
150
|
* Returns a list of breadcrumbs
|
|
151
|
+
* @deprecated Use Navigation.breadcrumbs
|
|
151
152
|
* @param {URL} currentUrl
|
|
152
153
|
* @param {Site} site
|
|
153
154
|
* @returns {Promise<NavPage[]>}
|
|
@@ -181,6 +182,7 @@ export async function getBreadcrumbs (currentUrl, site) {
|
|
|
181
182
|
|
|
182
183
|
/**
|
|
183
184
|
* Converts a MarkdownInstance into a NavPage
|
|
185
|
+
* @deprecated Use Navigation.mapNavPage()
|
|
184
186
|
* @param {MarkdownInstance} page
|
|
185
187
|
* @param {Site}
|
|
186
188
|
* @returns {NavPage}
|
|
@@ -222,6 +224,7 @@ export function mapNavPage (page, site) {
|
|
|
222
224
|
|
|
223
225
|
/**
|
|
224
226
|
* Walks the tree to set current page
|
|
227
|
+
* @deprecated Use Navigation.setCurrentPage()
|
|
225
228
|
* @param {NavPage[]} pages
|
|
226
229
|
* @param {URL} currentUrl
|
|
227
230
|
*/
|
|
@@ -235,6 +238,7 @@ export function setCurrentPage (pages, currentUrl) {
|
|
|
235
238
|
|
|
236
239
|
/**
|
|
237
240
|
* Pops matching page from array
|
|
241
|
+
* @deprecated Use Navigation.popMatchingPage()
|
|
238
242
|
* @param {MarkdownInstance[]} allPages
|
|
239
243
|
* @param {string} search
|
|
240
244
|
* @returns
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef { import("../../types/Astro").MarkdownInstance } MarkdownInstance
|
|
3
|
+
* @typedef { import("../../types/NavPage").NavPage } NavPage
|
|
4
|
+
*/
|
|
5
|
+
export class Navigation {
|
|
6
|
+
/**
|
|
7
|
+
* Constructor
|
|
8
|
+
* @param {Posts} posts
|
|
9
|
+
* @param {UrlFormatter} urlFormatter
|
|
10
|
+
*/
|
|
11
|
+
constructor(posts: Posts, urlFormatter: UrlFormatter);
|
|
12
|
+
posts: Posts;
|
|
13
|
+
urlFormatter: UrlFormatter;
|
|
14
|
+
/**
|
|
15
|
+
* Returns a list of breadcrumbs
|
|
16
|
+
* @param {URL} currentUrl
|
|
17
|
+
* @param {string} subfolder
|
|
18
|
+
* @returns {NavPage[]}
|
|
19
|
+
*/
|
|
20
|
+
breadcrumbs(currentUrl: URL, subfolder: string): NavPage[];
|
|
21
|
+
/**
|
|
22
|
+
* Walks a NavPage tree to set current page
|
|
23
|
+
* @param {NavPage[]} pages
|
|
24
|
+
* @param {URL} currentUrl
|
|
25
|
+
*/
|
|
26
|
+
setCurrentPage(pages: NavPage[], currentUrl: URL): void;
|
|
27
|
+
/**
|
|
28
|
+
* Converts a MarkdownInstance into a NavPage
|
|
29
|
+
* @param {MarkdownInstance} page
|
|
30
|
+
* @returns {NavPage}
|
|
31
|
+
*/
|
|
32
|
+
mapNavPage(page: MarkdownInstance): NavPage;
|
|
33
|
+
/**
|
|
34
|
+
* Pops matching page from array
|
|
35
|
+
* @param {MarkdownInstance[]} allPages
|
|
36
|
+
* @param {string} search
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
popMatchingPage(allPages: MarkdownInstance[], search: string): import("../../types/Astro").MarkdownInstance;
|
|
40
|
+
}
|
|
41
|
+
export type MarkdownInstance = import("../../types/Astro").MarkdownInstance;
|
|
42
|
+
export type NavPage = import("../../types/NavPage").NavPage;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef { import("../../types/Astro").MarkdownInstance } MarkdownInstance
|
|
3
|
+
* @typedef { import("../../types/NavPage").NavPage } NavPage
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export class Navigation {
|
|
7
|
+
/**
|
|
8
|
+
* Constructor
|
|
9
|
+
* @param {Posts} posts
|
|
10
|
+
* @param {UrlFormatter} urlFormatter
|
|
11
|
+
*/
|
|
12
|
+
constructor(posts, urlFormatter) {
|
|
13
|
+
/* istanbul ignore next */
|
|
14
|
+
this.posts = posts;
|
|
15
|
+
this.urlFormatter = urlFormatter;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Returns a list of breadcrumbs
|
|
20
|
+
* @param {URL} currentUrl
|
|
21
|
+
* @param {string} subfolder
|
|
22
|
+
* @returns {NavPage[]}
|
|
23
|
+
*/
|
|
24
|
+
breadcrumbs (currentUrl, subfolder) {
|
|
25
|
+
const allPages = this.posts.all();
|
|
26
|
+
|
|
27
|
+
const pathParts = currentUrl.pathname.split('/');
|
|
28
|
+
|
|
29
|
+
if (subfolder.length > 0) {
|
|
30
|
+
// Running in a subfolder
|
|
31
|
+
pathParts.shift();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** @type {NavPage[]} */
|
|
35
|
+
const navPages = [];
|
|
36
|
+
let path = '';
|
|
37
|
+
|
|
38
|
+
pathParts.forEach((part) => {
|
|
39
|
+
path += part.length > 0 ? '/' + part : '';
|
|
40
|
+
const match = this.popMatchingPage(allPages, path);
|
|
41
|
+
|
|
42
|
+
if (match) {
|
|
43
|
+
navPages.push(this.mapNavPage(match));
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
this.setCurrentPage(navPages, currentUrl);
|
|
48
|
+
|
|
49
|
+
return navPages;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Walks a NavPage tree to set current page
|
|
54
|
+
* @param {NavPage[]} pages
|
|
55
|
+
* @param {URL} currentUrl
|
|
56
|
+
*/
|
|
57
|
+
setCurrentPage (pages, currentUrl) {
|
|
58
|
+
pages.forEach(p => {
|
|
59
|
+
p.isOpen = currentUrl.pathname.startsWith(p.url);
|
|
60
|
+
p.ariaCurrent = p.url == currentUrl.pathname
|
|
61
|
+
? 'page'
|
|
62
|
+
: false;
|
|
63
|
+
|
|
64
|
+
if (p.children) {
|
|
65
|
+
this.setCurrentPage(p.children, currentUrl);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Converts a MarkdownInstance into a NavPage
|
|
72
|
+
* @param {MarkdownInstance} page
|
|
73
|
+
* @returns {NavPage}
|
|
74
|
+
*/
|
|
75
|
+
mapNavPage (page) {
|
|
76
|
+
let url = page.url == null || (page.url ?? '').length == 0
|
|
77
|
+
? '/'
|
|
78
|
+
: page.url;
|
|
79
|
+
|
|
80
|
+
// Send visitors straight to the first page
|
|
81
|
+
if (page.frontmatter.paged) {
|
|
82
|
+
url += '/1/';
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
url = this.urlFormatter.addSlashToAddress(url);
|
|
86
|
+
|
|
87
|
+
if (page.frontmatter.layout == 'src/layouts/Redirect.astro') {
|
|
88
|
+
// Skips past the redirect
|
|
89
|
+
url = page.frontmatter.redirect;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** @type {NavPage} */
|
|
93
|
+
const entry = {
|
|
94
|
+
section: page.frontmatter.navSection ?? page.frontmatter.navTitle ?? page.frontmatter.title,
|
|
95
|
+
title: page.frontmatter.navTitle ?? page.frontmatter.title,
|
|
96
|
+
url: url,
|
|
97
|
+
order: page.frontmatter.navOrder,
|
|
98
|
+
children: [],
|
|
99
|
+
// These are later set to the correct value, but not now as we want to cache
|
|
100
|
+
isOpen: false,
|
|
101
|
+
ariaCurrent: false
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return entry;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Pops matching page from array
|
|
109
|
+
* @param {MarkdownInstance[]} allPages
|
|
110
|
+
* @param {string} search
|
|
111
|
+
* @returns
|
|
112
|
+
*/
|
|
113
|
+
popMatchingPage (allPages, search) {
|
|
114
|
+
const numberToRemove = 1;
|
|
115
|
+
let indexToRemove = -1;
|
|
116
|
+
let match = null;
|
|
117
|
+
|
|
118
|
+
for (let i = 0; i < allPages.length; i++) {
|
|
119
|
+
if (allPages[i].url == search) {
|
|
120
|
+
indexToRemove = i;
|
|
121
|
+
match = allPages[i];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (match) {
|
|
126
|
+
allPages.splice(indexToRemove, numberToRemove);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return match;
|
|
130
|
+
}
|
|
131
|
+
}
|