@rathnasgala/theme 0.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.
Files changed (37) hide show
  1. package/package.json +20 -0
  2. package/payload/.gala/artifact-files/gitignore +5 -0
  3. package/payload/.gala/managed-files.json +51 -0
  4. package/payload/.gala/publish.yml.template +35 -0
  5. package/payload/eleventy.config.js +47 -0
  6. package/payload/lib/build-manifest.js +189 -0
  7. package/payload/lib/engagement-snapshot.js +43 -0
  8. package/payload/lib/publication-state.js +61 -0
  9. package/payload/lib/render-markdown.js +96 -0
  10. package/payload/lib/seo.js +287 -0
  11. package/payload/lib/site-config.js +23 -0
  12. package/payload/package-lock.json +2042 -0
  13. package/payload/package.json +21 -0
  14. package/payload/src/404.njk +12 -0
  15. package/payload/src/_data/buildManifest.js +3 -0
  16. package/payload/src/_data/engagementSnapshot.js +5 -0
  17. package/payload/src/_data/feedLinks.js +15 -0
  18. package/payload/src/_data/languages.js +10 -0
  19. package/payload/src/_data/site.js +5 -0
  20. package/payload/src/_includes/components/ui.njk +17 -0
  21. package/payload/src/_includes/layouts/base.njk +40 -0
  22. package/payload/src/_includes/layouts/post.njk +11 -0
  23. package/payload/src/assets/interactions.js +54 -0
  24. package/payload/src/assets/preferences.js +30 -0
  25. package/payload/src/assets/search.js +81 -0
  26. package/payload/src/assets/theme-mode.js +35 -0
  27. package/payload/src/assets/theme.css +125 -0
  28. package/payload/src/feed.11ty.js +46 -0
  29. package/payload/src/index.njk +8 -0
  30. package/payload/src/languages.11ty.js +38 -0
  31. package/payload/src/posts.11ty.js +35 -0
  32. package/payload/src/redirects.11ty.js +37 -0
  33. package/payload/src/search-index.11ty.js +23 -0
  34. package/payload/src/search.njk +16 -0
  35. package/payload/src/settings.njk +19 -0
  36. package/payload/src/sitemap.11ty.js +26 -0
  37. package/payload/static/robots.txt +2 -0
@@ -0,0 +1,37 @@
1
+ function html(value) {
2
+ return String(value)
3
+ .replaceAll('&', '&')
4
+ .replaceAll('<', '&lt;')
5
+ .replaceAll('>', '&gt;')
6
+ .replaceAll('"', '&quot;')
7
+ .replaceAll("'", '&#39;');
8
+ }
9
+
10
+ export default class PublishedSlugRedirects {
11
+ data() {
12
+ return {
13
+ pagination: {
14
+ data: 'buildManifest.redirects',
15
+ size: 1,
16
+ alias: 'redirect'
17
+ },
18
+ permalink: ({ redirect }) => `${redirect.relativeUrl}index.html`,
19
+ eleventyExcludeFromCollections: true
20
+ };
21
+ }
22
+
23
+ render({ redirect }) {
24
+ const target = html(redirect.targetUrl);
25
+ return `<!doctype html>
26
+ <html lang="${html(redirect.language)}">
27
+ <head>
28
+ <meta charset="utf-8">
29
+ <meta http-equiv="refresh" content="0; url=${target}">
30
+ <link rel="canonical" href="${target}">
31
+ <title>Post moved</title>
32
+ </head>
33
+ <body><p>This post moved to <a href="${target}">${target}</a>.</p></body>
34
+ </html>
35
+ `;
36
+ }
37
+ }
@@ -0,0 +1,23 @@
1
+ export default class SearchIndex {
2
+ data() {
3
+ return {
4
+ permalink: '/search-index.json',
5
+ eleventyExcludeFromCollections: true
6
+ };
7
+ }
8
+
9
+ render({ buildManifest }) {
10
+ const entries = buildManifest.posts
11
+ .filter(({ publicationState }) => publicationState === 'published')
12
+ .map((post) => ({
13
+ id: post.id,
14
+ language: post.language,
15
+ title: post.frontmatter.title,
16
+ description: post.frontmatter.description ?? null,
17
+ tags: post.frontmatter.tags ?? [],
18
+ url: post.pageUrl,
19
+ body: post.body
20
+ }));
21
+ return `${JSON.stringify({ schemaVersion: 1, entries })}\n`;
22
+ }
23
+ }
@@ -0,0 +1,16 @@
1
+ ---
2
+ layout: layouts/base.njk
3
+ title: Search
4
+ permalink: /search/index.html
5
+ searchPage: true
6
+ ---
7
+ <h1>Search</h1>
8
+ <section data-gala-search data-index-url="{{ '/search-index.json' | url }}">
9
+ <form class="gala-search" action="{{ '/search/' | url }}" role="search">
10
+ <label for="gala-search-query">Search published posts</label>
11
+ <input id="gala-search-query" name="q" type="search" autocomplete="off">
12
+ <button type="submit">Search</button>
13
+ </form>
14
+ <p data-search-status role="status" aria-live="polite">Enter a search term.</p>
15
+ <ol class="gala-search-results" data-search-results></ol>
16
+ </section>
@@ -0,0 +1,19 @@
1
+ ---
2
+ layout: layouts/base.njk
3
+ title: Settings
4
+ permalink: /settings/index.html
5
+ ---
6
+ <h1>Reader settings</h1>
7
+ <section aria-labelledby="theme-setting">
8
+ <h2 id="theme-setting">Theme</h2>
9
+ <button type="button" data-theme-mode-toggle aria-label="Color mode: system. Activate for light.">Theme: system</button>
10
+ </section>
11
+ <section aria-labelledby="language-setting">
12
+ <h2 id="language-setting">Language preference</h2>
13
+ <p>Your preference highlights matching choices. The language in the page URL always controls the content.</p>
14
+ <label>Preferred language
15
+ <select data-language-preference>
16
+ {% for language in languages %}<option value="{{ language | escape }}">{{ language }}</option>{% endfor %}
17
+ </select>
18
+ </label>
19
+ </section>
@@ -0,0 +1,26 @@
1
+ import { articleHreflang, renderSitemap } from '../lib/seo.js';
2
+
3
+ export default class Sitemap {
4
+ data() {
5
+ return { permalink: '/sitemap.xml' };
6
+ }
7
+
8
+ render({ buildManifest, site }) {
9
+ const published = buildManifest.posts.filter(
10
+ ({ publicationState }) => publicationState === 'published'
11
+ );
12
+ const hreflang = articleHreflang(published, site);
13
+ return renderSitemap(published.map((post) => {
14
+ const links = hreflang.get(post.source);
15
+ return {
16
+ url: post.pageUrl,
17
+ lastModified: post.frontmatter.editHistory?.at(-1)?.slice(0, 10)
18
+ ?? post.frontmatter.publishAfterDate,
19
+ variants: links
20
+ .filter(({ hreflang: language }) => language !== 'x-default')
21
+ .map(({ hreflang: language, href: url }) => ({ language, url })),
22
+ xDefaultUrl: links.find(({ hreflang: language }) => language === 'x-default').href
23
+ };
24
+ }));
25
+ }
26
+ }
@@ -0,0 +1,2 @@
1
+ User-agent: *
2
+ Allow: /