diff --git a/.eleventy.js b/.eleventy.js index 864eb8e..47ca8f6 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -30,10 +30,10 @@ module.exports = function(eleventyConfig) { {compile: (inputContent, inputPath)=>{ const parsed = parseSync(inputContent.toString(), {type:'srt'}) return async (data) => { - data.transcript = parsed + data.segments = parsed.map((i,idx)=>({id:idx, ...i.data})) data.layout = "transcript" // data.tags = ['transcript'] - return JSON.stringify(parsed) + return JSON.stringify(parsed.map((i,idx)=>({id:idx, ...i.data}))) } }}) diff --git a/content/episodes/episodes.11tydata.js b/content/episodes/episodes.11tydata.js index ea33996..86d686e 100644 --- a/content/episodes/episodes.11tydata.js +++ b/content/episodes/episodes.11tydata.js @@ -29,9 +29,9 @@ module.exports = { async function podcastData (data) { var file_stem - if (data.season === 1) { + if (data.season == 1) { file_stem = `ep${data.episode}` - } if (data.season === 2) { + } else if (data.season == 2) { file_stem = `${seasonEpisodeFormat(null, {...data, episodePrefix: "ep"}).toLowerCase()}` } else { file_stem = `${seasonEpisodeFormat(null, data).toLowerCase()}` diff --git a/content/episodes/search-transcripts.hbs b/content/episodes/search-transcripts.hbs index e1de6b4..6f986a9 100644 --- a/content/episodes/search-transcripts.hbs +++ b/content/episodes/search-transcripts.hbs @@ -23,14 +23,14 @@ override:eleventyComputed: [] let search_index_promise = fetch('../transcript-index') .then((res)=>res.json()) .then((documents)=>{ - docs = documents.map(({title, episode, season, url, cues})=>cues.map(({startTime, text})=>({title, episode, season, url, startTime, text}))).flat() - console.log(documents) + docs = documents.map(({title, episode, season, url, transcriptPageUrl, segments})=>segments.map(({start, text, id})=>({segment_id:id, title, episode, season, transcriptPageUrl, url, start, text}))).flat() + console.log(docs) idx = lunr(function(){ - this.ref('id') + this.ref('index') this.field('text') this.metadataWhitelist = ['position'] docs.forEach(function (doc, idx) { - doc.id = idx; + doc.index = idx; this.add(doc); }, this) }) @@ -44,14 +44,15 @@ override:eleventyComputed: [] results.forEach(r => { r.title = docs[r.ref].title, r.url = docs[r.ref].url + r.id = docs[r.ref].id }) - console.log('Form submitted!', results) + console.log('Form submitted!', searchQuery, results) const results_ol = document.getElementById("results").querySelector('ol') results_ol.innerHTML = "" results.forEach(r => { const el = document.createElement('li') - const {url, title, text, season, episode, startTime} = docs[r.ref] - el.innerHTML = `${title} (Season ${season}, episode ${episode})
${Duration.fromObject({seconds:startTime}).toFormat("hh:mm:ss")}
${text}
` + const {segment_id, url, title, text, season, episode, start, transcriptPageUrl} = docs[r.ref] + el.innerHTML = `${title} (Season ${season}, episode ${episode})${Duration.fromObject({seconds:start/1000}).toFormat("hh:mm:ss")}
${text}
` results_ol.appendChild(el) }) } diff --git a/content/episodes/transcript-index.11ty.js b/content/episodes/transcript-index.11ty.js index 9f330b5..02f19cb 100644 --- a/content/episodes/transcript-index.11ty.js +++ b/content/episodes/transcript-index.11ty.js @@ -8,23 +8,20 @@ class SearchIndex { } 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"), + const episodesWithTranscript = data.collections.episode.filter(e=>e.data.podcast?.transcriptPage) + const result = episodesWithTranscript.map((episode)=>{ + const transcriptPage = data.collections.transcript.find(t=>t.data.episode==episode.data.episode && t.data.season == episode.data.season) + if (!transcriptPage) {return null} + return { + transcriptPageUrl: this.url(transcriptPage.url), 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})) - })) + segments: transcriptPage.data.segments + } }) - const result = await Promise.all(promises) - return JSON.stringify(result) + return JSON.stringify(result.filter(r=>r)) } } diff --git a/content/transcripts/transcripts.11tydata.js b/content/transcripts/transcripts.11tydata.js new file mode 100644 index 0000000..2acb303 --- /dev/null +++ b/content/transcripts/transcripts.11tydata.js @@ -0,0 +1,9 @@ +const {extractSeasonEpisode, episodeNumber} = require('../../utils/filters'); + +module.exports = { + "tags":["transcript"], + "eleventyComputed": { + "episode": (data) => extractSeasonEpisode(data.page.fileSlug).episode, + "season": (data) => extractSeasonEpisode(data.page.fileSlug).season || 1, + } +} \ No newline at end of file diff --git a/content/transcripts/transcripts.json b/content/transcripts/transcripts.json deleted file mode 100644 index bab9734..0000000 --- a/content/transcripts/transcripts.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "tags":["transcript"] -} \ No newline at end of file diff --git a/layouts/transcript.hbs b/layouts/transcript.hbs index 9b8c0c1..5067ed4 100644 --- a/layouts/transcript.hbs +++ b/layouts/transcript.hbs @@ -2,10 +2,60 @@ layout: base --- -{{#each transcript}} -