Skip to content

Commit f2e91c7

Browse files
committed
Initial Commit
0 parents  commit f2e91c7

40 files changed

+8401
-0
lines changed

.editorconfig

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[*]
2+
indent_style = space
3+
tab_width = 2
4+
insert_final_newline = true

.github/ISSUE_TEMPLATE/Request.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
name: "Request"
3+
title: "Request : "
4+
about: Request a talk.
5+
labels: request
6+
---

.github/ISSUE_TEMPLATE/Talk.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
name: "Talk"
3+
title: "Talk : "
4+
about: Propose a Talk.
5+
labels: proposal
6+
---

.github/ISSUE_TEMPLATE/Workshop.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
name: "Workshop"
3+
title: "Workshop : "
4+
about: Request a workshop.
5+
labels: workshop
6+
---

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
dist/
2+
node_modules/

.vuepress/components/EventDefault.vue

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<template>
2+
<section>
3+
<h3 v-if="title" class="title">{{ title }}</h3>
4+
<div v-if="recording" class="recording">
5+
<iframe :src="recording" width="100%" height="100%" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen />
6+
</div>
7+
<div v-if="description" v-html="description"></div>
8+
<EventSpeaker v-if="speaker" :speaker="speaker" :bio="bio" />
9+
<ItemRow v-if="deck">
10+
<Icon name="deck" slot="icon" />
11+
<a :href="deck" target="_blank">Speaker Deck</a>
12+
</ItemRow>
13+
<ItemRow v-if="issue">
14+
<Icon name="github" slot="icon" />
15+
<a :href="issue" target="_blank">{{ issue | filename }} </a>
16+
</ItemRow>
17+
</section>
18+
</template>
19+
20+
<script>
21+
export default {
22+
props: ['title', 'description', 'speaker', 'bio', 'deck', 'issue', 'recording'],
23+
filters: {
24+
filename (value) {
25+
return value.split('/').pop()
26+
}
27+
}
28+
}
29+
</script>
30+
31+
<style scoped>
32+
.talk {
33+
position: relative;
34+
}
35+
36+
.recording {
37+
width: 100%;
38+
padding-top: 56.29%;
39+
position: relative;
40+
}
41+
42+
iframe {
43+
position: absolute;
44+
top: 0;
45+
left: 0;
46+
right: 0;
47+
bottom: 0;
48+
}
49+
</style>

.vuepress/components/EventGallery.vue

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<template>
2+
<Carousel class="gallery" :perPage="1" :autoplay="true" :loop="true" :navigationEnabled="true">
3+
<Slide v-for="photo in photos" :key="photo" class="slide">
4+
<img class="img" :src="photo" />
5+
</Slide>
6+
</Carousel>
7+
</template>
8+
9+
<script>
10+
import { Carousel, Slide } from '../../node_modules/vue-carousel/src/index.js'
11+
12+
export default {
13+
props: ['photos'],
14+
components: { Carousel, Slide }
15+
}
16+
</script>
17+
18+
<style scoped>
19+
.slide {
20+
display: flex;
21+
flex-direction: column;
22+
justify-content: center;
23+
}
24+
25+
.img {
26+
object-fit: contain;
27+
}
28+
</style>

.vuepress/components/EventPage.vue

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<template>
2+
<div class="event">
3+
<header>
4+
<h1 class="title">
5+
<a :href="'https://meetup.com/vue-bangalore/events/' + $page.frontmatter.meetup" target="_blank">
6+
<span class="title-hashtag">VueBLR #{{ $page.frontmatter.id }}</span>
7+
</a>
8+
<span class="title-text">{{ $page.frontmatter.title }}</span>
9+
</h1>
10+
</header>
11+
12+
<main class="agenda">
13+
<EventGallery :photos="$page.frontmatter.photos" />
14+
15+
<h2>Agenda</h2>
16+
<ul>
17+
<li v-for="(item, index) in $page.frontmatter.agenda" :key="index">
18+
<component :is="use(item.type)" v-bind="item" />
19+
</li>
20+
</ul>
21+
</main>
22+
23+
<footer>
24+
<section v-if="date">
25+
<h2>Details</h2>
26+
27+
<p><strong>Date:</strong> {{ date.toDateString() }}</p>
28+
<p><strong>Time:</strong> {{ $page.frontmatter.time }}</p>
29+
<p><strong>Venue:</strong> {{ $page.frontmatter.venue.name }} (<a :href="$page.frontmatter.venue.map" target="_blank" rel="noopener noreferrer">see on map</a>)</p>
30+
</section>
31+
32+
<section v-if="widget">
33+
<h2>Register</h2>
34+
<iframe :src="widget" frameborder="10" height="600" width="100%"></iframe>
35+
</section>
36+
37+
<h2>Sponsors</h2>
38+
<EventSponsor v-for="(item, index) in $page.frontmatter.sponsors" :key="item.sponsor" v-bind="item" />
39+
40+
<h2>Organizers</h2>
41+
<EventSpeaker v-for="(item, index) in $page.frontmatter.organizers" :key="item" :speaker="item" />
42+
</footer>
43+
</div>
44+
</template>
45+
46+
<script>
47+
export default {
48+
methods: {
49+
use (type) {
50+
switch (type) {
51+
case 'talk': return 'EventTalk';
52+
case 'show': return 'EventShow';
53+
case 'tell': return 'EventTell';
54+
case 'workshop': return 'EventWorkshop';
55+
case 'Q&A': return 'EventQuestion';
56+
default: return 'EventDefault';
57+
}
58+
}
59+
},
60+
computed: {
61+
date() {
62+
return this.$page.frontmatter.date ? new Date(this.$page.frontmatter.date) : null
63+
},
64+
widget() {
65+
return this.$page.frontmatter.townscript ? "https://www.townscript.com/widget/" + this.$page.frontmatter.townscript : null;
66+
}
67+
}
68+
}
69+
</script>
70+
71+
<style scoped>
72+
.title-hashtag {
73+
opacity: .75;
74+
display: inline-block;
75+
margin-right: 1rem;
76+
}
77+
</style>
78+
79+
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<template>
2+
<section class="talk">
3+
<h3 class="title">{{ title }}</h3>
4+
<EventSpeaker :speaker="speaker" />
5+
</section>
6+
</template>
7+
8+
<script>
9+
export default {
10+
props: ['title', 'speaker', 'deck', 'issue'],
11+
filters: {
12+
filename (value) {
13+
return value.split('/').pop()
14+
}
15+
}
16+
}
17+
</script>
18+
19+
<style scoped>
20+
.talk {
21+
position: relative;
22+
}
23+
.title::before {
24+
content: "Q & A";
25+
font-size: .5rem;
26+
position: absolute;
27+
top: -.6em;
28+
opacity: .75;
29+
}
30+
</style>
31+

.vuepress/components/EventShow.vue

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<template>
2+
<section class="talk">
3+
<h3 class="title"><u>Show &amp; Tell</u>: {{ title }}</h3>
4+
<div class="recording" v-if="recording">
5+
<iframe :src="recording" width="100%" height="100%" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen />
6+
</div>
7+
<div v-if="description" v-html="description" class="description"></div>
8+
<EventSpeaker :speaker="speaker" :bio="bio" />
9+
<ItemRow v-if="deck">
10+
<Icon name="deck" slot="icon" />
11+
<a :href="deck" target="_blank">Speaker Deck</a>
12+
</ItemRow>
13+
<ItemRow v-if="website">
14+
<Icon name="website" slot="icon" />
15+
<a :href="website" target="_blank">{{ website }}</a>
16+
</ItemRow>
17+
</section>
18+
</template>
19+
20+
<script>
21+
export default {
22+
props: ['title', 'speaker', 'website', 'bio', 'description', 'recording', 'deck'],
23+
filters: {
24+
filename (value) {
25+
return value.split('/').pop()
26+
}
27+
}
28+
}
29+
</script>
30+
31+
<style scoped>
32+
.talk {
33+
position: relative;
34+
}
35+
36+
.description {
37+
margin-bottom: 1rem;
38+
}
39+
40+
.recording {
41+
width: 100%;
42+
padding-top: 56.29%;
43+
position: relative;
44+
}
45+
46+
iframe {
47+
position: absolute;
48+
top: 0;
49+
left: 0;
50+
right: 0;
51+
bottom: 0;
52+
}
53+
</style>

.vuepress/components/EventSpeaker.vue

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<template>
2+
<ItemRow>
3+
<img v-if="twitter" slot="icon" :src="'//avatars.io/twitter/' + twitter" class="avatar">
4+
<a :href="'https://twitter.com/' + twitter" target="_blank">
5+
{{ name }}
6+
</a>
7+
{{ bio }}
8+
</ItemRow>
9+
</template>
10+
11+
<script>
12+
export default {
13+
props: ['speaker', 'bio'],
14+
computed: {
15+
name () {
16+
return this.speaker.replace(/<[^>]+>/, '')
17+
},
18+
twitter () {
19+
const matches = /<@([^>]+)>/.exec(this.speaker)
20+
21+
if (matches) return matches[1]
22+
}
23+
}
24+
}
25+
</script>
26+
27+
<style scoped>
28+
.wrapper {
29+
display: -webkit-box !important;
30+
align-items: center;
31+
}
32+
.avatar {
33+
height: 5rem !important;
34+
width: 5rem !important;
35+
}
36+
</style>

.vuepress/components/EventSponsor.vue

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<template>
2+
<ItemRow>
3+
<img slot="icon" :src="'//avatars.io/twitter/' + twitter" class="avatar">
4+
<a :href="'https://twitter.com/' + twitter" target="_blank">
5+
{{ name }}
6+
</a>
7+
<span>&nbsp;- {{ type | toName }}</span>
8+
</ItemRow>
9+
</template>
10+
11+
<script>
12+
export default {
13+
props: ['sponsor', 'type'],
14+
computed: {
15+
name () {
16+
return this.sponsor.replace(/<[^>]+>/, '')
17+
},
18+
twitter () {
19+
const matches = /<@([^>]+)>/.exec(this.sponsor)
20+
21+
if (matches) return matches[1]
22+
}
23+
},
24+
filters: {
25+
toName(value) {
26+
return value[0].toUpperCase() + value.substr(1) + ' Partner'
27+
}
28+
}
29+
}
30+
</script>

.vuepress/components/EventSummary.vue

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<script>
2+
export default {
3+
props: ["id", "title", "date", "time", "venue", "townscript", "link"],
4+
computed: {
5+
eventDate() {
6+
return this.date ? new Date(this.date) : null
7+
},
8+
isUpcoming() {
9+
return this.eventDate && this.eventDate.getTime() > Date.now()
10+
}
11+
},
12+
methods: {
13+
showTicketsPopup: function() {
14+
popup(this.townscript);
15+
}
16+
}
17+
};
18+
</script>
19+
20+
<template>
21+
<section>
22+
<h3>
23+
#{{ id }} <a :href="link">{{ title }}</a>
24+
</h3>
25+
26+
<div v-if="eventDate">
27+
<p>
28+
<strong>Venue:</strong> {{ venue.name }} (<a :href="venue.map" target="_blank" rel="noopener noreferrer">see on map</a>) <br />
29+
<strong>Time:</strong> {{ eventDate.toDateString() }}, {{ time }}
30+
</p>
31+
32+
<p v-if="isUpcoming && townscript">
33+
<button v-on:click="showTicketsPopup" class="tsbutton">Count me in!</button>
34+
<noscript id="tsNoJsMsg">Javascript on your browser is not enabled.</noscript>
35+
<script src="https://www.townscript.com/popup-widget/townscript-widget.nocache.js" type="text/javascript"></script>
36+
</p>
37+
</div>
38+
</section>
39+
</template>

0 commit comments

Comments
 (0)