diff --git a/.gitignore b/.gitignore
index 7722e70..3c94ab5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ dist
.env
.DS_Store
*/.vscode
+.cache
\ No newline at end of file
diff --git a/.vscode/markdown.code-snippets b/.vscode/markdown.code-snippets
new file mode 100644
index 0000000..8d9a369
--- /dev/null
+++ b/.vscode/markdown.code-snippets
@@ -0,0 +1,39 @@
+{
+"Season 5 Show Notes": {
+ "prefix": ";s5",
+ "body":[
+ "---",
+ "title: ${title}",
+ "date: ${date}",
+ "---",
+ "{% prologue %}",
+ "${newspaperName}",
+ "===",
+ "${newspaperTagline}",
+ "{% timeTag date %}",
+ "\n## ${newspaperHeadline}",
+ "${newspaperSubheadline}\n",
+ "${article}"
+ "{% endprologue%}",
+ "\n{% alternateTitles%}",
+ "\n${alternateTitles}\n",
+ "{% endalternateTitles%}",
+ ]
+ },
+ "Season 1 Show Notes": {
+ "prefix": ";s1",
+ "body":[
+ "---",
+ "title: ${title}",
+ "date: ${date}",
+ "---",
+ "# Prologue",
+ "",
+ "\n# Episode {{episode}}",
+ "\n## ${headline}",
+ "**${subHeadline}**",
+ "\n${content}\n",
+ "
"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 0d91422..50bb5fe 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,18 +1,22 @@
{
"files.exclude": {
- // "dist/": true
- "**/.obsidian/": true
+ "dist/": false,
+ "**/.obsidian/": true,
+ "node_modules":true
},
"files.associations": {
"*.md": "markdown-eleventy"
},
-
"terminal.integrated.env.osx": {
"VSCODE_HISTFILE": "${workspaceFolder}/.vscode/.zsh_history",
},
"[markdown-eleventy]": {
"editor.wordWrap": "on",
"editor.wordWrapColumn": 80, // Optional: Set to your preferred wrap column
- "editor.quickSuggestions": false // Optional: Disable suggestions for Markdown
+ "editor.quickSuggestions": {
+ "comments": "off",
+ "strings": "off",
+ "other": "off"
+ } // Optional: Disable suggestions for Markdown
}
}
\ No newline at end of file
diff --git a/content/episodes/episodes.11tydata.js b/content/episodes/episodes.11tydata.js
index 00d5b9f..2bd4cd6 100644
--- a/content/episodes/episodes.11tydata.js
+++ b/content/episodes/episodes.11tydata.js
@@ -39,7 +39,6 @@ async function podcastData (data) {
resolve(data.podcast.enclosureUrl)
} else {
const url = `${data.site.cdn}/${file_stem}.mp3`
- console.log(`Inferring URL @ ${url} for ${data.page.url}`)
fetch(url, { method: "HEAD" })
.then((res)=>{
if (res.ok) {
@@ -56,7 +55,6 @@ async function podcastData (data) {
resolve(data.podcast.transcriptUrl)
} else {
const url = `${data.site.cdn}/${file_stem}.srt`
- console.log(`Inferring URL @ ${url}`)
fetch(url, { method: "HEAD" })
.then((res)=>{
if (res.ok) {
diff --git a/content/episodes/image.jpg b/content/episodes/image.jpg
new file mode 100755
index 0000000..f8c94a8
Binary files /dev/null and b/content/episodes/image.jpg differ
diff --git a/content/episodes/s05/e32.md b/content/episodes/s05/e32.md
index 1134512..3f7e7ff 100644
--- a/content/episodes/s05/e32.md
+++ b/content/episodes/s05/e32.md
@@ -2,7 +2,6 @@
title: I'm A Little Mindfreak
date: 2024-12-16
---
-
{% prologue %}
Mindflayer Monday
===
diff --git a/content/episodes/search-index.11ty.js b/content/episodes/search-index.11ty.js
index 86a5ef2..8261685 100644
--- a/content/episodes/search-index.11ty.js
+++ b/content/episodes/search-index.11ty.js
@@ -1,6 +1,4 @@
-import markdownit from 'markdown-it';
-import { convert } from 'html-to-text';
-const md = markdownit({html: true})
+const { convert } = require('html-to-text');
class SearchIndex {
data() {
@@ -12,7 +10,12 @@ class SearchIndex {
return {
url:`${this.url(episode.url)}`,
title: episode.data.title,
- text: convert (episode.content),
+ text: convert (episode.content, {
+ selectors: [
+ { selector: 'hr', format: 'skip' },
+ { selector: 'img', format: 'skip'}
+ ]
+ }),
season: episode.data.season,
episode: episode.data.episode
}})
@@ -20,4 +23,4 @@ class SearchIndex {
}
}
-export default SearchIndex
\ No newline at end of file
+module.exports = SearchIndex
\ No newline at end of file
diff --git a/content/episodes/search-transcripts.hbs b/content/episodes/search-transcripts.hbs
new file mode 100644
index 0000000..e1de6b4
--- /dev/null
+++ b/content/episodes/search-transcripts.hbs
@@ -0,0 +1,60 @@
+---
+layout: base-with-heading
+title: Search Transcripts
+eleventyExcludeFromCollections: ["episode"]
+override:tags: []
+override:eleventyComputed: []
+---
+
+
+
+
+
\ No newline at end of file
diff --git a/content/episodes/transcript-index.11ty.js b/content/episodes/transcript-index.11ty.js
new file mode 100644
index 0000000..9f330b5
--- /dev/null
+++ b/content/episodes/transcript-index.11ty.js
@@ -0,0 +1,31 @@
+import {parseText} from 'media-captions';
+import Fetch from "@11ty/eleventy-fetch";
+import path from 'path';
+
+class SearchIndex {
+ data() {
+ return {eleventyExcludeFromCollections:["episode"], layout: null}
+ }
+
+ async render (data) {
+ const episodesWithTranscript = data.collections.episode.filter(e=>e.data.podcast?.transcriptUrl)
+ const promises = episodesWithTranscript.map((episode)=>{
+ const {transcriptUrl} = episode.data.podcast
+ return Fetch(transcriptUrl, {type:'text', duration: "1d"})
+ .then(srt_buffer=>parseText(srt_buffer.toString(), {type:'srt'}))
+ .then(({cues})=>cues)
+ .then((cues)=>({
+ name: path.basename(transcriptUrl,".srt"),
+ episode: episode.data.episode,
+ season: episode.data.season,
+ title: episode.data.title,
+ url: `${this.url(episode.url)}`,
+ cues: cues.map(({id, startTime, text})=>({id,startTime,text}))
+ }))
+ })
+ const result = await Promise.all(promises)
+ return JSON.stringify(result)
+ }
+}
+
+export default SearchIndex
\ No newline at end of file
diff --git a/content/members/index.hbs b/content/members/index.hbs
index bb57271..c89195c 100644
--- a/content/members/index.hbs
+++ b/content/members/index.hbs
@@ -8,6 +8,9 @@ links:
- name: Discord
url: discord
iconClasses: bi bi-discord
+ - name: Search Episodes (Beta)
+ url: /episodes/search
+ iconClasses: bi bi-binoculars
- name: GM Tools
url: gm-tools
iconClasses: bi bi-journal-bookmark
diff --git a/layouts/episode.hbs b/layouts/episode.hbs
index da83724..75a5844 100644
--- a/layouts/episode.hbs
+++ b/layouts/episode.hbs
@@ -13,12 +13,20 @@ eleventyComputed:
{{#if podcast}}
Download
{{#if podcast.transcriptUrl}}| Transcript{{/if}}
+
+
{{/if}}
{{#each tags}}
diff --git a/package-lock.json b/package-lock.json
index 9e756b8..cb75d6c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,7 @@
"version": "1.0.0",
"license": "ISC",
"dependencies": {
+ "@11ty/eleventy-fetch": "^5.0.1",
"@11ty/eleventy-navigation": "^0.3.5",
"@11ty/eleventy-plugin-handlebars": "^1.0.0",
"@11ty/eleventy-plugin-rss": "^2.0.2",
@@ -22,12 +23,33 @@
"htmlparser2": "^9.1.0",
"luxon": "^3.5.0",
"markdown-it": "^14.1.0",
+ "media-captions": "^0.0.18",
"music-metadata": "^10.5.1",
"npx": "^10.2.2",
"podcast": "^2.0.1",
"sass": "^1.80.3"
}
},
+ "node_modules/@11ty/eleventy-fetch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@11ty/eleventy-fetch/-/eleventy-fetch-5.0.1.tgz",
+ "integrity": "sha512-n79UhOAWG7XcJkRIoV8cZBpKgGln6mn+2UgsZkP6Xjgg8BqiMfxlYMJrNobSDdw3utyRAs8w/ZAPXoc18qrvMw==",
+ "license": "MIT",
+ "dependencies": {
+ "@rgrove/parse-xml": "^4.2.0",
+ "debug": "^4.3.7",
+ "flat-cache": "^6.1.1",
+ "graceful-fs": "^4.2.11",
+ "p-queue": "6.6.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/11ty"
+ }
+ },
"node_modules/@11ty/eleventy-navigation": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@11ty/eleventy-navigation/-/eleventy-navigation-0.3.5.tgz",
@@ -103,6 +125,15 @@
"node": ">= 6"
}
},
+ "node_modules/@keyv/serialize": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.2.tgz",
+ "integrity": "sha512-+E/LyaAeuABniD/RvUezWVXKpeuvwLEA9//nE9952zBaOdBd2mQ3pPoM8cUe2X6IcMByfuSLzmYqnYshG60+HQ==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^6.0.3"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -405,6 +436,15 @@
"url": "https://opencollective.com/popperjs"
}
},
+ "node_modules/@rgrove/parse-xml": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@rgrove/parse-xml/-/parse-xml-4.2.0.tgz",
+ "integrity": "sha512-UuBOt7BOsKVOkFXRe4Ypd/lADuNIfqJXv8GvHqtXaTYXPPKkj2nS2zPllVsrtRjcomDhIJVBnZwfmlI222WH8g==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/@sec-ant/readable-stream": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
@@ -899,6 +939,26 @@
"node": ">=0.10.0"
}
},
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
@@ -950,6 +1010,30 @@
"node": ">=8"
}
},
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
"node_modules/cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
@@ -970,6 +1054,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/cacheable": {
+ "version": "1.8.6",
+ "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.6.tgz",
+ "integrity": "sha512-RNBnqNhWBtgYNe4mF4395e6260Q9loh6zT2CDFia9LSJor5+vOsvkxhd7GAtg3U4m8i38adn1Q3jiCU1N33/gg==",
+ "license": "MIT",
+ "dependencies": {
+ "hookified": "^1.5.1",
+ "keyv": "^5.2.1"
+ }
+ },
"node_modules/call-bind": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
@@ -1471,6 +1565,12 @@
"node": ">= 8"
}
},
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "license": "MIT"
+ },
"node_modules/expand-brackets": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
@@ -1632,6 +1732,23 @@
"node": ">=8"
}
},
+ "node_modules/flat-cache": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.4.tgz",
+ "integrity": "sha512-Km+tVF9BLnxaYqX2R9OKLkwSPvGjDXXlciDC8oBr/nSM4xMCNO8X9s0w5i6lNoE8E/6BEzSJBUF5Bar+TXmKJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "cacheable": "^1.8.6",
+ "flatted": "^3.3.2",
+ "hookified": "^1.5.1"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz",
+ "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==",
+ "license": "ISC"
+ },
"node_modules/for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -1791,6 +1908,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
+ },
"node_modules/gulp-header": {
"version": "1.8.12",
"resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz",
@@ -2226,6 +2349,12 @@
"node": "*"
}
},
+ "node_modules/hookified": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.6.0.tgz",
+ "integrity": "sha512-se7cpwTA+iA/eY548Bu03JJqBiEZAqU2jnyKdj5B5qurtBg64CZGHTgqCv4Yh7NWu6FGI09W61MCq+NoPj9GXA==",
+ "license": "MIT"
+ },
"node_modules/html-minifier": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz",
@@ -2552,6 +2681,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/keyv": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.2.3.tgz",
+ "integrity": "sha512-AGKecUfzrowabUv0bH1RIR5Vf7w+l4S3xtQAypKaUpTdIR1EbrAcTxHCrpo9Q+IWeUlFE2palRtgIQcgm+PQJw==",
+ "license": "MIT",
+ "dependencies": {
+ "@keyv/serialize": "^1.0.2"
+ }
+ },
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -2721,6 +2859,15 @@
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
"integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="
},
+ "node_modules/media-captions": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/media-captions/-/media-captions-0.0.18.tgz",
+ "integrity": "sha512-JW18P6FuHdyLSGwC4TQ0kF3WdNj/+wMw2cKOb8BnmY6vSJGtnwJ+vkYj+IjHOV34j3XMc70HDeB/QYKR7E7fuQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
"node_modules/media-typer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
@@ -7588,6 +7735,43 @@
"node": ">=0.10.0"
}
},
+ "node_modules/p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-queue": {
+ "version": "6.6.2",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz",
+ "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==",
+ "license": "MIT",
+ "dependencies": {
+ "eventemitter3": "^4.0.4",
+ "p-timeout": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-timeout": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
+ "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
+ "license": "MIT",
+ "dependencies": {
+ "p-finally": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/param-case": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
diff --git a/package.json b/package.json
index d2e08b3..fd033b9 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
"author": "",
"license": "ISC",
"dependencies": {
+ "@11ty/eleventy-fetch": "^5.0.1",
"@11ty/eleventy-navigation": "^0.3.5",
"@11ty/eleventy-plugin-handlebars": "^1.0.0",
"@11ty/eleventy-plugin-rss": "^2.0.2",
@@ -25,6 +26,7 @@
"htmlparser2": "^9.1.0",
"luxon": "^3.5.0",
"markdown-it": "^14.1.0",
+ "media-captions": "^0.0.18",
"music-metadata": "^10.5.1",
"npx": "^10.2.2",
"podcast": "^2.0.1",