tecitheme 0.1.5 → 0.1.8

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.
@@ -10,8 +10,12 @@
10
10
 
11
11
  if (dev && data.image) {
12
12
  backgroundImage = data.image;
13
- } else {
14
- backgroundImage = 'https://thunderheadeng-www.imgix.net'+data.image+'?w=1200&h=627&fit=crop&auto=compress&auto=format';
13
+ } else if (data.image) {
14
+ if (data.image.includes("gif")) {
15
+ backgroundImage = 'https://thunderheadeng-www.imgix.net'+data.image;
16
+ } else {
17
+ backgroundImage = 'https://thunderheadeng-www.imgix.net'+data.image+'?w=1200&h=627&fit=crop&auto=compress&auto=format';
18
+ }
15
19
  }
16
20
 
17
21
  </script>
@@ -9,16 +9,25 @@
9
9
  let figureImage;
10
10
  let figureLink;
11
11
 
12
- if (dev) {
12
+ if (dev && image) {
13
13
  figureImage = image
14
14
  figureLink = link ? link : image
15
- } else {
16
- figureImage = image.startsWith('http') ? image : 'https://thunderheadeng-www.imgix.net'+image+'?auto=compress&auto=format'
17
- figureLink = link ? link : image.startsWith('http') ? image : 'https://thunderheadeng-www.imgix.net'+image
15
+ } else if (image) {
16
+ if (image.startsWith('http')) {
17
+ figureImage = image;
18
+ figureLink = link ? link : image
19
+ } else if (image.includes("gif")) {
20
+ figureImage = 'https://thunderheadeng-www.imgix.net'+image;
21
+ figureLink = link ? link : 'https://thunderheadeng-www.imgix.net'+image
22
+ } else {
23
+ figureImage = 'https://thunderheadeng-www.imgix.net'+image+'?auto=compress&auto=format';
24
+ figureLink = link ? link : 'https://thunderheadeng-www.imgix.net'+image
25
+ }
18
26
  }
19
27
 
20
28
  </script>
21
29
 
30
+ {#if image}
22
31
  <section class="flex justify-center not-prose mb-8">
23
32
  <figure class="bg-white w-auto mx-auto shadow-lg border border-slate-100 p-2">
24
33
  <a href={figureLink}>
@@ -29,3 +38,4 @@
29
38
  {/if}
30
39
  </figure>
31
40
  </section>
41
+ {/if}
@@ -7,13 +7,29 @@ import Video from './Video.svelte'
7
7
  let figureImage;
8
8
  let figureLink;
9
9
 
10
- if (dev) {
10
+ if (dev && data.image) {
11
11
  figureImage = data.image
12
12
  figureLink = data.image
13
- } else {
13
+ } else if (data.image) {
14
14
  figureImage = data.image.startsWith('http') ? data.image : 'https://thunderheadeng-www.imgix.net'+data.image+'?w=576&ar=16:9&fit=crop&auto=compress&auto=format'
15
15
  figureLink = data.image.startsWith('http') ? data.image : 'https://thunderheadeng-www.imgix.net'+data.image
16
16
  }
17
+
18
+ if (dev && data.image) {
19
+ figureImage = data.image
20
+ figureLink = data.link ? data.link : data.image
21
+ } else if (data.image) {
22
+ if (data.image.startsWith('http')) {
23
+ figureImage = data.image;
24
+ figureLink = data.link ? data.link : data.image
25
+ } else if (data.image.includes("gif")) {
26
+ figureImage = 'https://thunderheadeng-www.imgix.net'+data.image;
27
+ figureLink = data.link ? data.link : 'https://thunderheadeng-www.imgix.net'+data.image
28
+ } else {
29
+ figureImage = 'https://thunderheadeng-www.imgix.net'+data.image+'?w=576&ar=16:9&fit=crop&auto=compress&auto=format';
30
+ figureLink = data.link ? data.link : 'https://thunderheadeng-www.imgix.net'+data.image
31
+ }
32
+ }
17
33
  </script>
18
34
 
19
35
  <section class="w-full mx-auto flex flex-col items-center md:flex-row md:items-start justify-center">
@@ -1,5 +1,4 @@
1
1
  <script>
2
- import { DateTime } from 'luxon';
3
2
  import { getContext } from 'svelte';
4
3
  import { paginate, PaginationNav } from 'svelte-paginate';
5
4
  import Icon from './Icon.svelte';
@@ -7,7 +6,6 @@
7
6
  export let data;
8
7
 
9
8
  let posts = getContext('newsPosts');
10
-
11
9
  let filteredPosts = [];
12
10
  let items = [];
13
11
  let currentPage = 1;
@@ -32,7 +30,7 @@
32
30
 
33
31
  function filterPosts(arr, terms) {
34
32
  for (let i = 0; i < arr.length; ) {
35
- if (termExists(arr[i].meta.categories, terms)) {
33
+ if (termExists(arr[i].categories, terms)) {
36
34
  i++;
37
35
  continue;
38
36
  }
@@ -100,20 +98,20 @@
100
98
  <div class="flex h-full flex-col items-stretch ">
101
99
  <time
102
100
  class="mb-1 block text-sm text-gray-500"
103
- datetime="{post.meta.date}"
104
- >{DateTime.fromISO(post.meta.date).toLocaleString()}</time
101
+ datetime="{post.date}"
102
+ >{new Date(post.date).toLocaleDateString('en-us', { weekday:"short", year:"numeric", month:"short", day:"numeric", timeZone: "UTC", timeZoneName: "short"})}</time
105
103
  >
106
104
  <h2 class="mb-2 text-xl font-semibold text-gray-900">
107
- <a href="/{post.path}">
108
- {post.meta.title}
105
+ <a href="{post.slug}">
106
+ {post.title}
109
107
  </a>
110
108
  </h2>
111
- {#if post.meta.summary}
109
+ {#if post.summary}
112
110
  <p class="mb-2 flex-1 text-base text-gray-500">
113
- <a href="/{post.path}">
114
- {post.meta.summary.length > 190
115
- ? post.meta.summary.substring(0, 190) + ' ...'
116
- : post.meta.summary}
111
+ <a href="{post.slug}">
112
+ {post.summary.length > 190
113
+ ? post.summary.substring(0, 190) + ' ...'
114
+ : post.summary}
117
115
  </a>
118
116
  </p>
119
117
  {:else}
@@ -121,9 +119,9 @@
121
119
  Missing Summary Text
122
120
  </p>
123
121
  {/if}
124
- {#if post.meta.categories}
122
+ {#if post.categories}
125
123
  <div class="flex w-full flex-wrap text-sm">
126
- {#each post.meta.categories.sort() as term}
124
+ {#each post.categories.sort() as term}
127
125
  <a
128
126
  class="mr-2 mb-2 inline-block"
129
127
  href="/news/filter/{term}"
@@ -140,7 +138,7 @@
140
138
  <p
141
139
  class="text-sm font-semibold text-teci-blue-light hover:text-teci-blue-dark"
142
140
  >
143
- <a href="/{post.path}">
141
+ <a href="{post.slug}">
144
142
  Read full article<span aria-hidden="true">&nbsp;→</span>
145
143
  </a>
146
144
  </p>
@@ -1,15 +1,14 @@
1
1
  <script>
2
2
  import { onMount } from "svelte";
3
3
  import { buildToC } from "../utils.js";
4
- import { DateTime } from "luxon";
5
4
 
6
5
  export let data;
7
6
  export let title;
8
7
  export let date;
9
8
  export let lastmod;
10
9
 
11
- let formattedDate = (date != undefined ? DateTime.fromISO(date).toLocaleString() : undefined)
12
- let formattedLastModDate = (lastmod != undefined ? DateTime.fromISO(lastmod).toLocaleString() : undefined)
10
+ let formattedDate = (date != undefined ? new Date(date).toLocaleDateString('en-us', { weekday:"short", year:"numeric", month:"short", day:"numeric", timeZone: "UTC", timeZoneName: "short"}) : undefined)
11
+ let formattedLastModDate = (lastmod != undefined ? new Date(lastmod).toLocaleDateString('en-us', { weekday:"short", year:"numeric", month:"short", day:"numeric", timeZone: "UTC", timeZoneName: "short"}) : undefined)
13
12
  let tocOpen = false;
14
13
  let tocBuilt = false;
15
14
  let w;
@@ -31,7 +30,7 @@
31
30
  {/if}
32
31
  <slot />
33
32
  {#if (formattedDate && data.showDate)}
34
- <p class="text-sm">Published: {formattedDate}{#if (formattedLastModDate != formattedDate && formattedLastModDate)}, Updated: {formattedLastModDate}{/if}</p>
33
+ <p class="text-sm">Published: {formattedDate}{#if (formattedLastModDate != formattedDate && formattedLastModDate)}&nbsp;&nbsp;|&nbsp;&nbsp;Last Updated: {formattedLastModDate}{/if}</p>
35
34
  {/if}
36
35
  </div>
37
36
  <aside class="relative w-0 {(data.toc || data.rightRail) ? 'md:w-60' : 'hidden'}">
@@ -0,0 +1,8 @@
1
+ export function getContent(content: any): Promise<{
2
+ title: any;
3
+ content: any;
4
+ summary: any;
5
+ date: Date;
6
+ slug: string;
7
+ categories: any;
8
+ }[]>;
package/get-content.js ADDED
@@ -0,0 +1,79 @@
1
+ // get-content.js
2
+ // HTML parser from https://github.com/html-to-text/node-html-to-text
3
+ import { convert } from "html-to-text"
4
+ import { dev } from "$app/env";
5
+
6
+ export async function getContent (content) {
7
+ let indexData = []
8
+ let iterableContentFiles = Object.entries([])
9
+ let sortedIndex = []
10
+
11
+ // Use 'content' variable to determine files to import.
12
+ switch (content) {
13
+ case "news":
14
+ iterableContentFiles = Object.entries(import.meta.glob("/src/routes/news/*(!(*index|*news)).md"));
15
+ break;
16
+ default:
17
+ iterableContentFiles = Object.entries(import.meta.glob("/src/routes/**/*(!(*index|*news)).md"));
18
+ }
19
+
20
+ const allContent = await Promise.all(
21
+ iterableContentFiles.map(async ([path, resolver]) => {
22
+ const contentPath = path.slice(11, -3);
23
+ const file = await resolver();
24
+ const metadata = file.metadata;
25
+ const today = new Date();
26
+
27
+ if (metadata.notIndexed || (dev ? false : metadata.draft) || (dev ? false : new Date(metadata.date) > today)) {
28
+ return
29
+ } else {
30
+ var html = file.default.render().html
31
+ var plaintext = convert(html, {
32
+ baseElements: {
33
+ orderBy: 'occurrence'
34
+ },
35
+ wordwrap: false,
36
+ selectors: [
37
+ {selector: 'h1', format: 'skip'},
38
+ {selector: 'h2', options: {uppercase: false}},
39
+ {selector: 'a', options: { ignoreHref: true }},
40
+ {selector: 'a.button', format: 'skip'},
41
+ {selector: 'a.btn', format: 'skip'},
42
+ {selector: 'ul', options: {itemPrefix: '- '}},
43
+ {selector: 'img', format: 'skip'}
44
+ ]
45
+ }).replace(/\n\n\n/gm, ' ').replace(/\n\n/g, ' ').replace(/\n/g, ' ').replace(/\"/g,'\'').trim()
46
+
47
+ if (metadata && contentPath && plaintext) {
48
+ return {
49
+ meta: metadata,
50
+ path: contentPath,
51
+ text: plaintext
52
+ }
53
+ }
54
+ }
55
+ })
56
+ )
57
+
58
+ for (let i = 0; i < allContent.length; i++) {
59
+ if (allContent[i]) {
60
+ let today = new Date();
61
+ let postdate = allContent[i].meta.date ? new Date(allContent[i].meta.date) : today
62
+ let entry = {
63
+ "title": allContent[i].meta.title,
64
+ "content": allContent[i].text,
65
+ "summary": allContent[i].meta.summary,
66
+ "date": postdate,
67
+ "slug": allContent[i].path,
68
+ "categories": allContent[i].meta.categories
69
+ }
70
+ indexData.push(entry)
71
+ } else {
72
+ continue;
73
+ }
74
+ }
75
+
76
+ sortedIndex = indexData.slice().sort((a, b) => (b.date - a.date))
77
+
78
+ return sortedIndex
79
+ }
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "tecitheme",
3
- "version": "0.1.5",
3
+ "version": "0.1.8",
4
4
  "svelte": true,
5
5
  "devDependencies": {
6
6
  "@jsdevtools/rehype-toc": "^3.0.2",
7
7
  "@sveltejs/adapter-netlify": "1.0.0-next.65",
8
- "@sveltejs/kit": "1.0.0-next.358",
8
+ "@sveltejs/kit": "1.0.0-next.371",
9
9
  "@tailwindcss/forms": "^0.5.2",
10
10
  "@tailwindcss/typography": "^0.5.2",
11
11
  "@types/cookie": "^0.5.1",
@@ -17,7 +17,8 @@
17
17
  "eslint": "^8.17.0",
18
18
  "eslint-config-prettier": "^8.5.0",
19
19
  "eslint-plugin-svelte3": "^4.0.0",
20
- "luxon": "^2.4.0",
20
+ "html-to-text": "^8.2.0",
21
+ "markdown-yaml-metadata-parser": "^3.0.0",
21
22
  "mdsvex": "^0.10.6",
22
23
  "postcss": "^8.4.14",
23
24
  "prettier": "^2.6.2",
@@ -26,7 +27,7 @@
26
27
  "rehype-slug": "^5.0.1",
27
28
  "rehype-stringify": "^9.0.3",
28
29
  "stream": "^0.0.2",
29
- "svelte": "^3.48.0",
30
+ "svelte": "^3.49.0",
30
31
  "svelte-check": "^2.7.2",
31
32
  "svelte-paginate": "^0.0.1",
32
33
  "svelte-preprocess": "^4.10.7",
@@ -42,7 +43,8 @@
42
43
  "dependencies": {
43
44
  "@lukeed/uuid": "^2.0.0",
44
45
  "cookie": "^0.5.0",
45
- "katex": "^0.15.6"
46
+ "katex": "^0.15.6",
47
+ "svelte": "^3.49.0"
46
48
  },
47
49
  "exports": {
48
50
  "./package.json": "./package.json",
@@ -68,6 +70,7 @@
68
70
  "./components/TrialForm.svelte": "./components/TrialForm.svelte",
69
71
  "./components/Video.svelte": "./components/Video.svelte",
70
72
  "./components/Wrap.svelte": "./components/Wrap.svelte",
73
+ "./get-content": "./get-content.js",
71
74
  "./layouts/blocks.svelte": "./layouts/blocks.svelte",
72
75
  "./req_utils": "./req_utils.js",
73
76
  "./utils": "./utils.js",