Skip to content

Commit 0ba6d96

Browse files
committed
list cfps + submit event link
1 parent 9da6e4f commit 0ba6d96

File tree

1 file changed

+63
-31
lines changed

1 file changed

+63
-31
lines changed

src/components/Calendar.vue

Lines changed: 63 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
class="inner-calendar-container card bg-secondary"
44
:class="expanded ? 'expanded' : 'minified'"
55
ref="container">
6-
<div class="flex between p-medium">
6+
<div class="flex between p-medium pb-small">
77
<h2 class="type-large color-text mb-none">
88
Events
99
</h2>
@@ -14,7 +14,7 @@
1414
<filter-icon :color="filtersOpen ? 'theme' : 'text'" class="ml-2xsmall block" size="1rem" />
1515
</button>
1616
</div>
17-
<div class="px-medium type-small">
17+
<div class="px-medium type-small mb-small">
1818
<i>Includes unofficial events</i>
1919
</div>
2020
<div v-if="filtersOpen" class="p-medium">
@@ -45,6 +45,10 @@
4545
<input type="checkbox" id="official" v-model="show.officialOnly" />
4646
<label for="official" class="ml-2xsmall">Show only official events</label>
4747
</div>
48+
<div class="flex middle col-sm-12">
49+
<input type="checkbox" id="CFP" v-model="show.types.CFP" />
50+
<label for="CFP" class="ml-2xsmall">List CFPs</label>
51+
</div>
4852
</div>
4953
<!-- <div class="px-medium pb-small border-bottom-bg">
5054
<input placeholder="Search by name, date, location..." class="search" />
@@ -54,10 +58,10 @@
5458
</h3>
5559
<template v-else>
5660
<article
57-
v-for="(event, i) in filteredEvents"
61+
v-for="(event, i) in shownItems"
5862
:key="event.id"
5963
:ref="`article-${i}`"
60-
class="px-medium py-small border-bottom-bg">
64+
class="px-medium py-small">
6165
<div class="badge">
6266
{{ event.eventType }}
6367
</div>
@@ -67,28 +71,47 @@
6771
{{ event.eventName }}
6872
</span>
6973
</a>
70-
<div class="flex middle">
71-
<calendar-icon size="1rem" color="white" class="mr-2xsmall" style="transform: translateY(-2px)" />
72-
{{ getDateString(new Date(event.date), new Date(event.dateEnd)) }}
73-
</div>
74-
<div v-if="event.location && event.location.trim() !== ''" class="flex">
75-
<marker-icon class="mr-2xsmall" size="1rem" style="transform: translateY(3px)" />
76-
{{ event.location }}
77-
</div>
78-
<div v-if="event.online" class="flex middle">
79-
<globe-icon class="mr-2xsmall" size="0.85rem" style="transform: translateY(-1px)" />
80-
Available Online
81-
</div>
82-
<div v-if="event.hostedByFoundation" class="flex middle">
83-
<robot-icon size="1rem" class="mr-2xsmall" style="transform: translateY(-2px)" />
84-
Hosted by Foundation
85-
</div>
86-
<details v-if="event.description && event.description.trim() !== ''">
87-
<summary class="color-link cursor-pointer flex middle" @click="showInfo($event.target.parentElement)">
88-
<chevron-icon color="theme" direction="right" class="chevron" size="1.25rem" />
89-
</summary>
90-
<div v-html="parseDescription(event.description || '')" class="description" />
91-
</details>
74+
<template v-if="event.eventType !== 'CFP'">
75+
<div class="flex middle">
76+
<calendar-icon size="1rem" color="white" class="mr-2xsmall" style="transform: translateY(-2px)" />
77+
{{ getDateString(new Date(event.date), new Date(event.dateEnd)) }}
78+
</div>
79+
<div v-if="event.location && event.location.trim() !== ''" class="flex">
80+
<marker-icon class="mr-2xsmall" size="1rem" style="transform: translateY(3px)" />
81+
{{ event.location }}
82+
</div>
83+
<div v-if="event.online" class="flex middle">
84+
<globe-icon class="mr-2xsmall" size="0.85rem" style="transform: translateY(-1px)" />
85+
Available Online
86+
</div>
87+
<div v-if="event.hostedByFoundation" class="flex middle">
88+
<robot-icon size="1rem" class="mr-2xsmall" style="transform: translateY(-2px)" />
89+
Hosted by Foundation
90+
</div>
91+
<details v-if="event.description && event.description.trim() !== ''">
92+
<summary class="color-link cursor-pointer flex middle" @click="showInfo($event.target.parentElement)">
93+
<chevron-icon color="theme" direction="right" class="chevron" size="1.25rem" />
94+
</summary>
95+
<div v-html="parseDescription(event.description || '')" class="description" />
96+
</details>
97+
</template>
98+
<template v-else>
99+
<div v-if="!isPast(new Date(event.cfpStart))" class="flex middle">
100+
<calendar-icon size="1rem" color="white" class="mr-2xsmall" style="transform: translateY(-2px)" />
101+
CFP start: {{ getDateString(new Date(event.cfpStart)) }}
102+
</div>
103+
<div class="flex middle">
104+
<calendar-icon size="1rem" color="white" class="mr-2xsmall" style="transform: translateY(-2px)" />
105+
CFP end: {{ getDateString(new Date(event.cfpEnd)) }}
106+
</div>
107+
</template>
108+
</article>
109+
<article class="px-medium py-small flex center mb-medium">
110+
<a href="https://forms.gle/1YnMYwySGtBc5BQn7" class="color-black type-no-underline">
111+
<button class="theme block">
112+
+ Add event
113+
</button>
114+
</a>
92115
</article>
93116
</template>
94117
<button v-if="!expanded" class="expand color-text" @click="expand($event.target.parentElement)">
@@ -112,7 +135,8 @@ export default {
112135
Conference: true,
113136
Workshop: true,
114137
'Meet-up': true,
115-
Tutorial: true
138+
Tutorial: true,
139+
CFP: false
116140
},
117141
past: false,
118142
officialOnly: false
@@ -138,17 +162,24 @@ export default {
138162
const index = getMonth(this.selectedDate)
139163
return monthNames[index]
140164
},
141-
filteredEvents() {
142-
const filtered = this.events
165+
shownItems() {
166+
const events = this.events
143167
.filter(({ eventType, date }) => {
168+
if (!this.show.past && isPast(new Date(date))) return false
144169
if (!this.show.types.Conference && eventType === 'Conference') return false
145170
if (!this.show.types['Meet-up'] && eventType === 'Meet-up') return false
146171
if (!this.show.types.Workshop && eventType === 'Workshop') return false
147172
if (!this.show.types.Tutorial && eventType === 'Tutorial') return false
148-
if (!this.show.past && isPast(new Date(date))) return false
149173
return true
150174
})
151-
return filtered
175+
const cfps = this.events
176+
.filter(({ cfpEnd }) => cfpEnd && !isPast(new Date(cfpEnd)))
177+
.map((event) => ({
178+
...event,
179+
eventType: 'CFP'
180+
}))
181+
if (this.show.types.CFP) return [...cfps, ...events]
182+
return events
152183
}
153184
},
154185
async mounted() {
@@ -161,6 +192,7 @@ export default {
161192
})
162193
},
163194
methods: {
195+
isPast,
164196
parseDescription: (t) => marked.parse(t),
165197
getDateString(date, dateEnd) {
166198
const monthIndex = getMonth(date)

0 commit comments

Comments
 (0)