diff --git a/.eleventy.js b/.eleventy.js index 9157ae3..622a9b2 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -55,7 +55,7 @@ module.exports = function(eleventyConfig) { }); return { - pathPrefix:"blog", + pathPrefix: process.env.PATH_PREFIX || '/', dir: { data: "data", input: "content", diff --git a/.gitignore b/.gitignore index 07f0cbd..7722e70 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ node_modules **/.obsidian dist *.mp3 +*.mp4 .env .DS_Store */.vscode diff --git a/.vscode/launch.json b/.vscode/launch.json index dc6a541..6da3a18 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,9 +4,6 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ - - - { "type": "node", "request": "launch", diff --git a/.vscode/settings.json b/.vscode/settings.json index d12ec1c..0d91422 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,17 @@ "files.exclude": { // "dist/": true "**/.obsidian/": 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 +} } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 6c6ba63..a948861 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -2,19 +2,28 @@ "version": "2.0.0", "tasks": [ { - "label": "Simple Browser", - "command": "${input:openSimpleBrowser}", - "problemMatcher": [] - } - ], - "inputs": [ - { - "id": "openSimpleBrowser", - "type": "command", - "command": "simpleBrowser.show", - "args": [ - "http://localhost:8081" - ] + "label": "Deploy Site", + "type": "shell", + "command": "./deploy.sh", + "options": { + "env": { + "PRODUCTION_SERVER": "rpg", + "PRODUCTION_PATH": "/docker/rpg.ascorrea.com/apps/html", + "SITE_URL": "https://rpg.ascorrea.com", + "CDN_URL": "https://podcast.rpg.cdn.ascorrea.com", + "FOUNDRY_BASE_URL": "https://podcast.rpg.cdn.ascorrea.com", + "PATH_PREFIX": "/" + } + }, + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "reveal": "always", + "panel": "shared" + }, + "problemMatcher": [] } ] } \ No newline at end of file diff --git a/content/episodes/episodes.11tydata.js b/content/episodes/episodes.11tydata.js index b76d95a..00d5b9f 100644 --- a/content/episodes/episodes.11tydata.js +++ b/content/episodes/episodes.11tydata.js @@ -1,17 +1,83 @@ -const {seasonEpisodeFormat} = require('../../utils/filters'); +const {seasonEpisodeFormat, episodeNumber} = require('../../utils/filters'); +const fs = require('fs/promises'); +path = require('path') module.exports = { "layout": "episode", "tags":['episode'], "eleventyComputed": { "episode": "{{page.fileSlug | episodeNumber: episode}}", - "image": "{{page.url}}/../image.jpg", - "podcast": (data) => { - return { - "enclosureUrl": data.podcast.enclosureUrl ||`${data.site.cdn}/${seasonEpisodeFormat(null, data).toLowerCase()}.mp3`, - "transcriptUrl": data.podcast.transcriptUrl ||`${data.site.cdn}/${seasonEpisodeFormat(null, data).toLowerCase()}.srt`, - "title": data.podcast.title || `${seasonEpisodeFormat(null, data)}: ${data.title || "Episode " + data.episode}`, - "image" : data.podcast.image || data.image || "{{page.url}}/../image.jpg" - }} + "image": async (data) => { + const image_locations_promises = [ + data.image, + `${data.page.filePathStem}.jpg`, + `${data.page.filePathStem}.png`, + '../image.jpg', + '../image.png', + '../../image.jpg', + '../../image.png' + ].filter(image_path=>image_path).map((image_path)=> + fs.access(path.resolve(data.page.inputPath, image_path)) + .then(()=>path.resolve(data.page.filePathStem, image_path)) + .catch(()=>null) + ) + return (await Promise.all(image_locations_promises)).find(i=>i) + }, + "podcast": podcastData } +} + +async function podcastData (data) { + var file_stem + if (data.season === 1) { + file_stem = `ep${data.episode}` + } else { + file_stem = `${seasonEpisodeFormat(null, data).toLowerCase()}` + } + const mp3_exists_promise = new Promise ((resolve, reject) => { + if (data.podcast.enclosureUrl) { + 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) { + resolve(`${url}`) + } else { + reject(new Error(`No file at ${url}`)); + } + }) + } + }).catch((e)=>{return null}) + + const transcript_exists_promise = new Promise ((resolve, reject) => { + if (data.podcast.transcriptUrl) { + 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) { + resolve(`${url}`) + } else { + reject(new Error(`No file at ${url}`)); + } + }) + } + }).catch((e)=>{return null}) + + const result = { + "enclosureUrl": await mp3_exists_promise, + "transcriptUrl": await transcript_exists_promise, + "title": data.podcast.title || `${seasonEpisodeFormat(null, data)}: ${data.title || "Episode " + data.episode}`, + "image" : data.podcast.image || data.image + } + + if (result.enclosureUrl != null) { + return result + } else { + return false + } } \ No newline at end of file diff --git a/content/episodes/s01/s01.11tydata.js b/content/episodes/s01/s01.11tydata.js index 8aaec86..b47d698 100644 --- a/content/episodes/s01/s01.11tydata.js +++ b/content/episodes/s01/s01.11tydata.js @@ -1,3 +1,4 @@ +const podcastData = require('../episodes.11tydata').eleventyComputed.podcast; module.exports = { "season": 1, @@ -6,8 +7,9 @@ module.exports = { ], "stylesheets": ["/css/s04.css"], "eleventyComputed": { - "podcast": (data)=>({ - "title": `E${data.episode}: ${data.title}` - }) + "podcast": async (data)=>{ + var result = {...await podcastData(data),"title": `E${data.episode}: ${data.title}`} + return result } +} } \ No newline at end of file diff --git a/content/episodes/s02/image.jpg b/content/episodes/s02/image.jpg new file mode 100755 index 0000000..a0ac99d Binary files /dev/null and b/content/episodes/s02/image.jpg differ diff --git a/content/episodes/search-index.11ty.js b/content/episodes/search-index.11ty.js new file mode 100644 index 0000000..86a5ef2 --- /dev/null +++ b/content/episodes/search-index.11ty.js @@ -0,0 +1,23 @@ +import markdownit from 'markdown-it'; +import { convert } from 'html-to-text'; +const md = markdownit({html: true}) + +class SearchIndex { + data() { + return {eleventyExcludeFromCollections:["episode"], layout: null} + } + + render (data) { + const documents = data.collections.episode.map((episode)=>{ + return { + url:`${this.url(episode.url)}`, + title: episode.data.title, + text: convert (episode.content), + season: episode.data.season, + episode: episode.data.episode + }}) + return JSON.stringify(documents); + } +} + +export default SearchIndex \ No newline at end of file diff --git a/content/episodes/search.hbs b/content/episodes/search.hbs new file mode 100644 index 0000000..47e3d27 --- /dev/null +++ b/content/episodes/search.hbs @@ -0,0 +1,84 @@ +--- +layout: base-with-heading +title: Search Episodes +eleventyExcludeFromCollections: ["episode"] +override:tags: [] +override:eleventyComputed: [] +--- + + + +
