This commit is contained in:
ponas committed 2019-02-23 23:17:51 +01:00
1 parent ec1f6d699c
commit 47375e6400
12 files changed
+170 -139

No files matched your search

+14 -14
View File
@@ -1,4 +1,4 @@
const { neufNormalizer } = require('./src/wordpress')
const { neufNormalizer } = require('./src/wordpress')
module.exports = {
siteMetadata: {
@@ -22,21 +22,21 @@ module.exports = {
// Set to true to debug endpoints on 'gatsby build'
verboseOutput: true,
includedRoutes: [
"**/*/*/categories",
"**/*/*/events",
"**/*/*/event_types",
"**/*/*/posts",
"**/*/*/pages",
"**/*/*/media",
"**/*/*/tags",
"**/*/*/taxonomies",
"**/*/*/users",
'**/*/*/categories',
'**/*/*/events',
'**/*/*/event_types',
'**/*/*/posts',
'**/*/*/pages',
'**/*/*/media',
'**/*/*/tags',
'**/*/*/taxonomies',
'**/*/*/users',
],
excludedRoutes: [
"/yoast/**",
"**/*/*/comments",
"**/*/*/settings",
"**/*/*/users/me",
'/yoast/**',
'**/*/*/comments',
'**/*/*/settings',
'**/*/*/users/me',
],
normalizer: neufNormalizer,
},
+18 -13
View File
@@ -184,16 +184,19 @@ exports.createPages = ({ actions, graphql }) => {
const eventTypeTemplate = path.resolve(`./src/templates/event-type.js`)
_.each(result.data.allWordpressWpEventTypes.edges, ({ node: event_type }) => {
createPage({
path: event_type.fields.link,
component: eventTypeTemplate,
context: {
name: event_type.name,
slug: event_type.slug,
},
})
})
_.each(
result.data.allWordpressWpEventTypes.edges,
({ node: event_type }) => {
createPage({
path: event_type.fields.link,
component: eventTypeTemplate,
context: {
name: event_type.name,
slug: event_type.slug,
},
})
}
)
})
.then(() => {
return graphql(`
@@ -312,9 +315,11 @@ exports.onCreateNode = ({ node, actions, getNode }) => {
})
}
if ((node.internal.type === 'wordpress__POST') ||
(node.internal.type === 'wordpress__wp_events') ||
(node.internal.type === 'wordpress__wp_event_types')) {
if (
node.internal.type === 'wordpress__POST' ||
node.internal.type === 'wordpress__wp_events' ||
node.internal.type === 'wordpress__wp_event_types'
) {
const link = new URL(node.link).pathname
createNodeField({
node,
+28 -25
View File
@@ -3,38 +3,43 @@ import PropTypes from 'prop-types'
import { Link, graphql } from 'gatsby'
import Img from 'gatsby-image'
import moment from 'moment';
import moment from 'moment'
import 'moment/locale/nb'
moment.locale('nb')
export default class EventList extends React.Component {
render_event(event) {
return (
<Link
to={event.fields.link}
className="event"
key={event.id}
>
<Link to={event.fields.link} className="event" key={event.id}>
<div className="event-image">
{event.featured_media && event.featured_media.localFile &&
<Img fluid={event.featured_media.localFile.childImageSharp.fluid} />}
{event.featured_media && event.featured_media.localFile && (
<Img fluid={event.featured_media.localFile.childImageSharp.fluid} />
)}
</div>
<header className="event-header">
<h2 className="event-title">
{event.title}
</h2>
<h2 className="event-title">{event.title}</h2>
<div className="event-meta">
<span className="event-start">{moment(event.start_time).format('HH:mm')}</span>
<span className="event-date">
<span className="event-date-weekday">{moment(event.start_time).format('dddd')} </span>
<span className="event-date-day">{moment(event.start_time).format('D.')} </span>
<span className="event-date-month">{moment(event.start_time).format('MMMM')} </span>
{/* Only specify year if different. */}
{!moment(event.start_time).isSame(new Date(), 'year') &&
<span className="event-date-year">{moment(event.start_time).format('YYYY')} </span>
}
<span className="event-start">
{moment(event.start_time).format('HH:mm')}
</span>
{event.event_types && event.event_types.length &&
<span className="event-date">
<span className="event-date-weekday">
{moment(event.start_time).format('dddd')}{' '}
</span>
<span className="event-date-day">
{moment(event.start_time).format('D.')}{' '}
</span>
<span className="event-date-month">
{moment(event.start_time).format('MMMM')}{' '}
</span>
{/* Only specify year if different. */}
{!moment(event.start_time).isSame(new Date(), 'year') && (
<span className="event-date-year">
{moment(event.start_time).format('YYYY')}{' '}
</span>
)}
</span>
{event.event_types && event.event_types.length && (
<div className="event-types">
<ul className="event-types-list">
{event.event_types.map(type => (
@@ -49,7 +54,7 @@ export default class EventList extends React.Component {
))}
</ul>
</div>
}
)}
</div>
</header>
</Link>
@@ -63,9 +68,7 @@ export default class EventList extends React.Component {
<section className="events">
<h1 className="section-title">{title}</h1>
<div className="event-list">
{events.map(({ node: event }) => (
this.render_event(event)
))}
{events.map(({ node: event }) => this.render_event(event))}
</div>
</section>
)
+11 -2
View File
@@ -3,8 +3,17 @@ import { Link, graphql } from 'gatsby'
const Footer = () => (
<footer>
<p>Studentene i Oslo har sitt naturlige tilholdssted på Det Norske Studentersamfund, i hyggelige lokaler på Chateau Neuf øverst på Majorstuen. Her er det åpent alle dager unntatt søndag, og enten man ønsker en tur i baren, på kafé, på debatt, på konsert, teater eller kino, har man muligheten på Det Norske Studentersamfund.</p>
<p>Chateau Neuf – Det Norske Studentersamfund | Slemdalsveien 15, 0369 Oslo | Ansvarlig redaktør: Stein-Olav Moe Fause | <a href="#">Logg inn</a></p>
<p>
Studentene i Oslo har sitt naturlige tilholdssted på Det Norske
Studentersamfund, i hyggelige lokaler på Chateau Neuf øverst på
Majorstuen. Her er det åpent alle dager unntatt søndag, og enten man
ønsker en tur i baren, på kafé, på debatt, på konsert, teater eller kino,
har man muligheten på Det Norske Studentersamfund.
</p>
<p>
Chateau Neuf – Det Norske Studentersamfund | Slemdalsveien 15, 0369 Oslo |
Ansvarlig redaktør: Stein-Olav Moe Fause | <a href="#">Logg inn</a>
</p>
</footer>
)
+6 -9
View File
@@ -11,17 +11,14 @@ export default class IndexPage extends React.Component {
<h1 className="section-title">{title}</h1>
<div className="post-list">
{posts.map(({ node: post }) => (
<Link
to={post.fields.link}
className="post"
key={post.id}
>
<img className="post-image" src="https://studentersamfundet.no/wp-content/uploads/2018/10/Fjor%C3%A5rets-festival_Fotograf-Karin-Kaczykowski-i-Studentenes-Fotoklubb-1280x720.jpg" />
<Link to={post.fields.link} className="post" key={post.id}>
<img
className="post-image"
src="https://studentersamfundet.no/wp-content/uploads/2018/10/Fjor%C3%A5rets-festival_Fotograf-Karin-Kaczykowski-i-Studentenes-Fotoklubb-1280x720.jpg"
/>
<div className="post-text">
<header className="post-header">
<h2 className="post-title">
{post.title}
</h2>
<h2 className="post-title">{post.title}</h2>
{/*<div className="post-meta">{post.date}</div>*/}
</header>
<div className="post-body">
+6 -3
View File
@@ -14,9 +14,12 @@ const Author = props => {
// The `authored_wordpress__POST` returns a simple array instead of an array
// of edges / nodes. We therefore need to convert the array here.
const posts = (totalCount === 0) ? [] : authored_wordpress__POST.map(post => ({
node: post,
}))
const posts =
totalCount === 0
? []
: authored_wordpress__POST.map(post => ({
node: post,
}))
return (
<Layout>
+3 -1
View File
@@ -30,7 +30,9 @@ export const pageQuery = graphql`
title
}
}
allWordpressPost(filter: { categories: { elemMatch: { slug: { eq: $slug } } } }) {
allWordpressPost(
filter: { categories: { elemMatch: { slug: { eq: $slug } } } }
) {
totalCount
edges {
node {
+1 -3
View File
@@ -27,9 +27,7 @@ EventProgram.propTypes = {
export const pageQuery = graphql`
query {
allWordpressWpEvents(
sort: { fields: date, order: DESC }
) {
allWordpressWpEvents(sort: { fields: date, order: DESC }) {
edges {
node {
...EventListFields
+1 -1
View File
@@ -34,7 +34,7 @@ export const pageQuery = graphql`
}
}
allWordpressWpEvents(
filter: { event_types: { elemMatch: { slug: { eq: $slug } } } },
filter: { event_types: { elemMatch: { slug: { eq: $slug } } } }
sort: { fields: date, order: DESC }
) {
totalCount
+35 -29
View File
@@ -9,7 +9,7 @@ import moment from 'moment'
import 'moment/locale/nb'
moment.locale('nb')
const formatPrices = (regular, student) => {
const formatPrices = (regular, student) => {
let cc = ''
if (regular && regular != 0) {
cc += regular
@@ -31,61 +31,67 @@ export const EventTemplate = ({
ticketUrl,
priceStudent,
priceRegular,
eventTypes
eventTypes,
}) => {
return (
<section className="event-page">
<div className="event-hero">
<div className="event-hero_text">
<h1>
{title}
</h1>
<h1>{title}</h1>
<div className="event-meta">
<div className="venue">
i {venue}
</div>
<div className="venue">i {venue}</div>
<div className="event-date">
Dag:{' '}
<span className="event-date-weekday">{moment(startTime).format('dddd')} </span>
<span className="event-date-day">{moment(startTime).format('D.')} </span>
<span className="event-date-month">{moment(startTime).format('MMMM')} </span>
<span className="event-date-weekday">
{moment(startTime).format('dddd')}{' '}
</span>
<span className="event-date-day">
{moment(startTime).format('D.')}{' '}
</span>
<span className="event-date-month">
{moment(startTime).format('MMMM')}{' '}
</span>
{/* Only specify year if different. */}
{!moment(startTime).isSame(new Date(), 'year') &&
<span className="event-date-year">{moment(startTime).format('YYYY')} </span>
}
{!moment(startTime).isSame(new Date(), 'year') && (
<span className="event-date-year">
{moment(startTime).format('YYYY')}{' '}
</span>
)}
</div>
<div className="event-time-start">
Start: {moment(startTime).format('HH:mm')}
Start: {moment(startTime).format('HH:mm')}
</div>
{/* TODO: make the API stop assuming event duration is 2 hours when unspecified? */}
{endTime &&
{endTime && (
<div className="event-time-end">
Slutt: {moment(endTime).format('HH:mm')}
</div>
}
)}
<div className="price">
Pris: {formatPrices(priceRegular, priceStudent)}
Pris: {formatPrices(priceRegular, priceStudent)}
</div>
{ticketUrl &&
<a className="ticket-url" href={ticketUrl}>Kjøp billetter</a>
}
{facebookUrl &&
<a className="facebook-url" href={facebookUrl}>Se Facebook-event</a>
}
{eventTypes && eventTypes.length &&
{ticketUrl && (
<a className="ticket-url" href={ticketUrl}>
Kjøp billetter
</a>
)}
{facebookUrl && (
<a className="facebook-url" href={facebookUrl}>
Se Facebook-event
</a>
)}
{eventTypes && eventTypes.length && (
<div>
<h4>Konsept</h4>
<ul className="event-types">
{eventTypes.map(type => (
<li key={`${type.slug}`}>
<Link to={type.fields.link}>
{type.name}
</Link>
<Link to={type.fields.link}>{type.name}</Link>
</li>
))}
</ul>
</div>
}
)}
</div>
</div>
<div className="event-hero_image">
+41 -34
View File
@@ -16,49 +16,56 @@ export const BlogPostTemplate = ({
featuredMedia,
}) => {
return (
<section className={`post-page ${hasFeaturedMedia ? 'has-featured-media' : 'no-featured-media'}`}>
<section
className={`post-page ${
hasFeaturedMedia ? 'has-featured-media' : 'no-featured-media'
}`}
>
<div className="post-hero">
<div className="post-hero_text">
<h1>
{title}
</h1>
<h1>{title}</h1>
<div className="post-meta">
<p>
{date} av <Link to={`/author/${author.slug}`}>{author.name}</Link>
</p>
</div>
</div>
{hasFeaturedMedia && <div className="post-hero_image">
<Img fluid={featuredMedia.localFile.childImageSharp.fluid} />
</div>}
{hasFeaturedMedia && (
<div className="post-hero_image">
<Img fluid={featuredMedia.localFile.childImageSharp.fluid} />
</div>
)}
</div>
<div className="post-content" dangerouslySetInnerHTML={{ __html: content }} />
{categories && categories.length ? (
<div>
<h4>Categories</h4>
<ul className="taglist">
{categories.map(category => (
<li key={`${category.slug}cat`}>
<Link to={`/categories/${category.slug}/`}>
{category.name}
</Link>
</li>
))}
</ul>
</div>
) : null}
{tags && tags.length ? (
<div>
<h4>Tags</h4>
<ul className="taglist">
{tags.map(tag => (
<li key={`${tag.slug}tag`}>
<Link to={`/tags/${tag.slug}/`}>{tag.name}</Link>
</li>
))}
</ul>
</div>
) : null}
<div
className="post-content"
dangerouslySetInnerHTML={{ __html: content }}
/>
{categories && categories.length ? (
<div>
<h4>Categories</h4>
<ul className="taglist">
{categories.map(category => (
<li key={`${category.slug}cat`}>
<Link to={`/categories/${category.slug}/`}>
{category.name}
</Link>
</li>
))}
</ul>
</div>
) : null}
{tags && tags.length ? (
<div>
<h4>Tags</h4>
<ul className="taglist">
{tags.map(tag => (
<li key={`${tag.slug}tag`}>
<Link to={`/tags/${tag.slug}/`}>{tag.name}</Link>
</li>
))}
</ul>
</div>
) : null}
</section>
)
}
+6 -5
View File
@@ -1,6 +1,6 @@
const Entities = require('html-entities').AllHtmlEntities;
const Entities = require('html-entities').AllHtmlEntities
const htmlEntities = new Entities();
const htmlEntities = new Entities()
const neufNormalizer = ({ entities }) => {
entities = decodeTitles(entities)
@@ -9,7 +9,7 @@ const neufNormalizer = ({ entities }) => {
}
exports.neufNormalizer = neufNormalizer
const decodeTitles = entities => {
return entities.map(e => {
if (e.title) {
@@ -20,12 +20,13 @@ const decodeTitles = entities => {
}
const mapEventsToEventTypes = entities => {
const eventTaxonomies = [`wordpress__wp_event_types`, ]
const eventTaxonomies = [`wordpress__wp_event_types`]
const eventTypes = entities.filter(e => eventTaxonomies.includes(e.__type))
return entities.map(e => {
// Replace event types with links to their nodes.
let eventHasType = e.event_types && Array.isArray(e.event_types) && e.event_types.length
let eventHasType =
e.event_types && Array.isArray(e.event_types) && e.event_types.length
if (eventTypes.length && eventHasType) {
e.event_types___NODE = e.event_types.map(
t =>