From e0fe4a08f8ade63223ec3184419b8a2922c8c78e Mon Sep 17 00:00:00 2001 From: James Purser Date: Wed, 29 Sep 2021 21:25:05 +1000 Subject: [PATCH] Fixed up episode pager, started work on Single top level Podcast Page --- components/css/styles.css | 8 ++++ components/episodesidebar.js | 11 +++-- components/navbar.js | 7 ++-- components/storysidebar.js | 5 ++- lib/rss.js | 16 +++++++ package-lock.json | 33 +++++++++++++++ package.json | 3 +- pages/index.js | 62 ++++++++++++++++++++++------ pages/podcasts.js | 28 +++++++++++++ pages/podcasts/current.js | 2 +- pages/podcasts/shows/[...episode].js | 6 +-- pages/sections/[page].js | 2 +- 12 files changed, 155 insertions(+), 28 deletions(-) create mode 100755 lib/rss.js create mode 100755 pages/podcasts.js diff --git a/components/css/styles.css b/components/css/styles.css index 6956ad7..bcd0030 100755 --- a/components/css/styles.css +++ b/components/css/styles.css @@ -258,4 +258,12 @@ position: absolute; bottom: 0; left: 0; + } + + .page_body { + text-align: justify; + } + + h1 { + font-size: 4rem } \ No newline at end of file diff --git a/components/episodesidebar.js b/components/episodesidebar.js index 9e2938d..83e3940 100755 --- a/components/episodesidebar.js +++ b/components/episodesidebar.js @@ -2,10 +2,13 @@ import Link from 'next/link' const EpisodeSideBar = (epdata) => (
- {epdata.episodes.map((episode) => ( -
-

{episode.title}

-
+

Latest Episodes

+
+ {epdata.epdata.episodes.map((episode) => ( +
+

{episode.title}

+
+
))}
diff --git a/components/navbar.js b/components/navbar.js index ae7c544..2e152e6 100755 --- a/components/navbar.js +++ b/components/navbar.js @@ -17,10 +17,9 @@ const NavBar = (props, sections) => { - - Current Podcasts - Archived Podcasts - + News and such diff --git a/components/storysidebar.js b/components/storysidebar.js index 9d0fb76..358d7f4 100755 --- a/components/storysidebar.js +++ b/components/storysidebar.js @@ -2,10 +2,13 @@ import Link from 'next/link' const StorySideBar = (storydata) => (
+

Latest Stories

+
{storydata.stories.articles.map((article) => (
-

{article.title}

+

{article.title}

+
))}
diff --git a/lib/rss.js b/lib/rss.js new file mode 100755 index 0000000..0e5ce2b --- /dev/null +++ b/lib/rss.js @@ -0,0 +1,16 @@ +import Parser from 'rss-parser' + +export const FEEDS = [ + { + name: "tad", + url: "https://tad.angrybeanie.com/feed/" + } +]; + +export async function getFeed(feedUrl) { + let parser = new Parser(); + + let feed = await parser.parseURL(feedUrl); + + return feed; +} diff --git a/package-lock.json b/package-lock.json index 369486b..c93c5ef 100755 --- a/package-lock.json +++ b/package-lock.json @@ -1190,6 +1190,11 @@ "iconv-lite": "^0.6.2" } }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, "errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -3514,6 +3519,15 @@ "inherits": "^2.0.1" } }, + "rss-parser": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/rss-parser/-/rss-parser-3.12.0.tgz", + "integrity": "sha512-aqD3E8iavcCdkhVxNDIdg1nkBI17jgqF+9OqPS1orwNaOgySdpvq6B+DoONLhzjzwV8mWg37sb60e4bmLK117A==", + "requires": { + "entities": "^2.0.3", + "xml2js": "^0.4.19" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -3553,6 +3567,11 @@ } } }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "scheduler": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", @@ -4049,6 +4068,20 @@ "is-typed-array": "^1.1.6" } }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 17a4175..ef8e67a 100755 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "react-ga": "^3.3.0", "react-h5-audio-player": "^3.7.1", "react-paginate": "^6.5.0", - "react-router-dom": "^5.2.1" + "react-router-dom": "^5.2.1", + "rss-parser": "^3.12.0" } } diff --git a/pages/index.js b/pages/index.js index 484e475..9f0129c 100755 --- a/pages/index.js +++ b/pages/index.js @@ -2,36 +2,72 @@ import Layout from "../components/main" import LatestEpisodes from "../components/latestepisodes" import Link from 'next/link' import getConfig from 'next/config' +import Head from 'next/head' +import Image from 'next/image'; +import { FEEDS, getFeed } from "../lib/rss" export async function getServerSideProps(context) { const { serverRuntimeConfig, publicRuntimeConfig } = getConfig() const res = await fetch(serverRuntimeConfig.base_path +`/api/collections/1`) const artdata = await res.json() + const article = artdata.articles[0] - const epres = await fetch(serverRuntimeConfig.base_path + '/api/podcasts/episodes/latest/0/3') + const epres = await fetch(serverRuntimeConfig.base_path + '/api/podcasts/episodes/latest/0/1') const epdata = await epres.json() - const secres = await fetch(serverRuntimeConfig.base_path + `/api/sections`) - const secdata = await secres.json() + const flickr = await fetch('https://www.flickr.com/services/feeds/photos_public.gne?id=25875680@N05&lang=en-us&format=json&nojsoncallback=1') + const flickrdata = await flickr.json() + const firstimage = flickrdata.items[0] const pagedata = {'title': 'Angry Beanie'} + + const tadfeed = FEEDS.find((tadfeed) => tadfeed.name === "tad"); + const tadfullfeed = await getFeed(tadfeed.url) + const tadfirstitem = tadfullfeed.items[0] return { - props: { articles: artdata, sections : secdata, pagedata, episodedata: epdata, config: serverRuntimeConfig}, // will be passed to the page component as props + props: { article, pagedata, episodedata: epdata.episodes, config: serverRuntimeConfig, tadfirstitem, firstimage}, // will be passed to the page component as props } } function HomePage (props) { - return ( - {props.articles.articles.map((article) => ( -
-

{article.title}

-
+ return ( +
+ + {props.pagedata.title} + +
+
+ Angry Beanie +
+
+

Latest Blog Post

+ {props.article.title} + {props.article.abstract} +
+ {props.episodedata.map((episode) => ( +
+

Latest Podcast

+ {episode.title} + +
+
+ ))} +
+

Latest Tech And Disability Post

+ {props.tadfirstitem.title} +
+
+

Latest Photo

+ +
- ))} -
- - ); +
+ ); } export default HomePage \ No newline at end of file diff --git a/pages/podcasts.js b/pages/podcasts.js new file mode 100755 index 0000000..a8df3ed --- /dev/null +++ b/pages/podcasts.js @@ -0,0 +1,28 @@ +import "../components/main.js" +import Layout from "../components/main.js" +import Link from 'next/link' +import getConfig from 'next/config' +import Image from 'next/image'; + +export async function getServerSideProps(context) { + const { serverRuntimeConfig, publicRuntimeConfig } = getConfig() + const secres = await fetch(serverRuntimeConfig.base_path + `/api/sections`) + const secdata = await secres.json() + + const podcastres = await fetch(serverRuntimeConfig.base_path + `/api/podcasts/bystatus/1`) + const podcastdata = await podcastres.json() + + const episodedata = "hi there" + + const pagedata = {'title': 'Angry Beanie - Current Podcast Projects'} + + return { + props: { sections : secdata, podcastdata, episodedata, pagedata }, // will be passed to the page component as props + } +} + +const Podcasts = ({sections, podcastdata, episodedata, pagedata}) => ( + +) + +export default Podcasts \ No newline at end of file diff --git a/pages/podcasts/current.js b/pages/podcasts/current.js index 34ad80d..65a19da 100755 --- a/pages/podcasts/current.js +++ b/pages/podcasts/current.js @@ -26,7 +26,7 @@ const PodcastCurrent = ({sections, podcastdata, episodedata, pagedata}) => (

Current Podcasts

{podcastdata.shows.map((podcast) => (

{podcast.title}

diff --git a/pages/podcasts/shows/[...episode].js b/pages/podcasts/shows/[...episode].js index dcdddea..cf6a86b 100755 --- a/pages/podcasts/shows/[...episode].js +++ b/pages/podcasts/shows/[...episode].js @@ -4,8 +4,8 @@ import Layout from "../../../components/main.js" import * as gtag from "../../../lib/gtag" import AudioPlayer from "react-h5-audio-player"; import 'react-h5-audio-player/lib/styles.css'; -//import EpisodeSideBar from "../../../components/episodesidebar" -import EpisodePager from '../../../components/episodepager.js'; +import EpisodeSideBar from "../../../components/episodesidebar" + export async function getServerSideProps(context) { const { serverRuntimeConfig, publicRuntimeConfig } = getConfig() @@ -53,7 +53,7 @@ const Episode = ( props ) => { />
- + ) } diff --git a/pages/sections/[page].js b/pages/sections/[page].js index b7fb0c8..ec45e19 100755 --- a/pages/sections/[page].js +++ b/pages/sections/[page].js @@ -21,7 +21,7 @@ export async function getServerSideProps(context) { function Page ({articles, sections, pagedata}) { return (

{pagedata.title}

-
+
); }