Skip to content

Commit 311bf57

Browse files
authoredApr 24, 2019
Merge pull request #27 from itsevalieu/calendarview
Calendar View of Meetups Issue #24 Eva has completed the initial version of the calendar view. We'll be working on adding more functionality.
2 parents f96a762 + 72e6c0b commit 311bf57

File tree

4 files changed

+345
-20
lines changed

4 files changed

+345
-20
lines changed
 

‎custom.js

+110-8
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,18 @@
33
ltc.map;
44
ltc.meetups = [];
55
ltc.markers = {};
6-
6+
7+
// get week range for meetups
8+
let today = new Date;
9+
let lastDow = 14 - today.getDay();
710
const api = {};
811
api.group = 'LearnTeachCode';
9-
api.perPage = 15;
1012
api.offset = 0;
1113
api.path = 'https://api.meetup.com/2/events?&sign=true&photo-host=public';
12-
api.url = api.path + '&group_urlname=' + api.group + '&page=' + api.perPage;
14+
api.startWeekDate = '0';
15+
api.endWeekDate = lastDow + 'd';
16+
api.status = 'upcoming';
17+
api.url = api.path + '&group_urlname=' + api.group + '&status=' + api.status + '&time=' + api.startWeekDate + ',' + api.endWeekDate;
1318
api.err = "Error occurred processing Meetup API URL";
1419

1520
// Get Meetup Data
@@ -24,6 +29,7 @@
2429
}
2530

2631
function processData(data) {
32+
data.days = getCurrentDates(2);
2733
data.results.forEach( function( meetup, index ) {
2834
// Get event formatted dates and time
2935
data.results[index].d = getDateFormats( meetup );
@@ -33,6 +39,7 @@
3339
// List new meetups
3440
listMeetups(data);
3541
mapMeetups(data);
42+
listMeetupsinWeekView(data);
3643
}
3744

3845
function mapMeetups(data){
@@ -128,7 +135,7 @@
128135
if(data.meta.total_count > data.meta.count && data.meta.count >= api.perPage){
129136
list += '<li class="load-more"><a href="https://www.meetup.com/LearnTeachCode/events/">Load More</a></li>';
130137
}
131-
}else{
138+
} else{
132139
// No upcoming events note
133140
list += '<li>No Meetups Currently Scheduled. Stay tuned.</li>';
134141
}
@@ -137,9 +144,72 @@
137144
$('.load-more').remove();
138145

139146
// Add the list to the element
140-
$(".meetups").append(list);
147+
$(".listview").append(list);
141148
}
142149

150+
// Display Meetup Data in Week View
151+
function listMeetupsinWeekView(data) {
152+
153+
let days = data.days;
154+
let meetups = data.results;
155+
156+
let meetupsByDay = getWeekFormattedMeetups(meetups);
157+
158+
for(let i=0; i <= 6; i++) {
159+
let week1div = '<div class="day" id="' + days[i].dow.toLowerCase() + days[i].date + '"></div>';
160+
document.querySelector('#firstweek').insertAdjacentHTML('beforeend', week1div);
161+
}
162+
163+
for(let i=7; i <= 13; i++) {
164+
let week2div = '<div class="day" id="' + days[i].dow.toLowerCase() + days[i].date + '"></div>';
165+
document.querySelector('#secondweek').insertAdjacentHTML('beforeend', week2div);
166+
}
167+
168+
for(let i=0; i < days.length; i++) {
169+
let weekday = days[i];
170+
let dowDay = weekday.dow.substring(0,3) + weekday.date;
171+
let meetupString = meetupsByDay[dowDay];
172+
let formattedWeek = '<div class="weekday">'
173+
+ weekday.dow.substring(0,3) + ' '
174+
+ weekday.month.substring(0,3) + ' '
175+
+ weekday.date
176+
+ '</div>';
177+
if(meetupString) {
178+
formattedWeek += meetupString.join('');
179+
180+
} else {
181+
formattedWeek += '<div class="week-meetup-none">No meetups!</div';
182+
}
183+
$('#' + weekday.dow.toLowerCase() + weekday.date).append(formattedWeek);
184+
}
185+
}
186+
187+
// Format Meetup Data for Week View
188+
function getWeekFormattedMeetups( meetups ) {
189+
190+
let dayArrays = {};
191+
192+
// For each event create a list item
193+
meetups.forEach( function( meetup ) {
194+
let d = getDateFormats( meetup );
195+
// does d.dow exist within dayArray as array, if not create array
196+
let dowDay = d.dow + d.d;
197+
if( !dayArrays[dowDay] ) {
198+
dayArrays[dowDay] = [];
199+
}
200+
201+
let formattedMeetup = '<li id="meetup-' + meetup.id + '" class="week-meetup">'
202+
+ '<div class="week-time">' + d.time + '</div>'
203+
+ '<div class="week-infobox">'
204+
+ ' <div class="title"><a href="' + meetup.event_url + '">' + meetup.name + '</a></div>'
205+
+ ' <div class="week-city">' + meetup.venue.city + ' - ' + meetup.venue.name + '</div>'
206+
+ '</div>'
207+
+'</li>';
208+
209+
dayArrays[dowDay].push(formattedMeetup);
210+
});
211+
return dayArrays;
212+
}
143213
/**
144214
* formatEvents() will get a set of meetups and format accordingly
145215
* @param {meetups}
@@ -155,7 +225,7 @@
155225

156226
// Formant and add current event to list
157227
formattedMeetups.push(
158-
'<li id="meetup-' + meetup.id + '" class="meetup">'
228+
'<li id="meetup-' + meetup.id + '" class="list-meetup">'
159229
+ '<div class="datebox">'
160230
+ ' <div class="dow">' + d.dow + '</div>'
161231
+ ' <div class="date">' + d.month + ' ' + d.day + '</div>'
@@ -171,6 +241,28 @@
171241
return formattedMeetups;
172242
}
173243

244+
// Get Week Range
245+
function getCurrentDates(numOfWeeks) {
246+
const weekdays = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
247+
const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
248+
let numOfDays = numOfWeeks * 7;
249+
let days = [];
250+
let today = new Date;
251+
let firstDay = today.getDate() - today.getDay();
252+
253+
for(let i=0; i<numOfDays; i++) {
254+
let nextDate = new Date(today.getTime());
255+
nextDate.setDate(firstDay+i);
256+
days.push({
257+
dow: weekdays[nextDate.getDay()],
258+
date: nextDate.getDate(),
259+
month: months[nextDate.getMonth()],
260+
year: nextDate.getFullYear()
261+
});
262+
}
263+
return days;
264+
265+
}
174266
function getDateFormats(meetup) {
175267
const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
176268
const weekdays = ['Sunday','Monday','Tueday','Wednesday','Thursday','Friday','Saturday'];
@@ -207,12 +299,21 @@
207299
/**
208300
* Get initial set of group meetups
209301
*/
210-
$(document).ready(function(){
302+
$(document).ready(function() {
211303
// Get intial set of meetups
212304
getData( api.url, processData, api.err);
213305

306+
// Toggle between calendar and list views
307+
308+
$('.viewLinks').on('click', '.viewLink', function() {
309+
$('.viewLink').removeClass('active');
310+
$('.view').removeClass('showing');
311+
$(this).addClass('active');
312+
$('.view.' + this.id ).addClass('showing');
313+
});
314+
214315
// Click Event for Load More
215-
$('.meetups').on('click','.load-more a',function(e) {
316+
$('.listview').on('click', '.load-more a', function(e) {
216317
e.preventDefault();
217318
api.offset++;
218319
getData( api.url + '&offset=' + api.offset, processData, api.err);
@@ -227,6 +328,7 @@
227328
meetupListItem.classList.add('active');
228329
setTimeout( () => { meetupListItem.classList.remove('active'); }, 3000);
229330
});
331+
230332
});
231333

232334
})();

‎index.html

+20-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
gtag('config', 'UA-118124010-1');
1818
</script>
1919
<!-- Google Analytics - END -->
20-
2120
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.4.0/dist/leaflet.css"
2221
integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA=="
2322
crossorigin=""/>
@@ -37,7 +36,25 @@ <h2>Upcoming Events:</h2>
3736

3837
<div id="mapid"></div>
3938

40-
<ul class="meetups"></ul>
39+
<div class='viewLinks'>
40+
<a class='viewLink active' id='list'>List View</a>
41+
<a class='viewLink' id='weekly'>Week View</a>
42+
</div>
43+
44+
<div class='view weekly'>
45+
<div class='weekview slider'>
46+
<button class='prev' onclick='plusSlides(-1)'>&#10094</button>
47+
<button class='next' onclick='plusSlides(1)'>&#10095</button>
48+
<div class='week slide fade' id='firstweek'></div>
49+
<div class='week slide fade' id='secondweek'></div>
50+
</div>
51+
<div class='dots'>
52+
<span class='dot' onclick='currentSlide(1)'></span>
53+
<span class='dot' onclick='currentSlide(2)'></span>
54+
</div>
55+
</div>
56+
57+
<div class='view list showing'><ul class="listview"></ul></div>
4158

4259
<p>Visit our <a href="https://www.meetup.com/LearnTeachCode/">Meetup.com page</a> for details on our next meetings.</p>
4360

@@ -71,5 +88,6 @@ <h2>Stuff we do at Learn Teach Code:</h2>
7188
integrity="sha512-QVftwZFqvtRNi0ZyCtsznlKSWOStnDORoefr1enyq5mVL4tmKB3S/EnC3rRJcxCPavG10IcrVGSmPh6Qw5lwrg=="
7289
crossorigin=""></script>
7390
<script src="custom.js"></script>
91+
<script src="slider.js"></script>
7492
</body>
7593
</html>

‎slider.js

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
let slideIndex = 1;
2+
showSlides(slideIndex);
3+
4+
// next/previous slide controls
5+
function plusSlides(n) {
6+
showSlides(slideIndex += n);
7+
}
8+
9+
// thumbnail controls
10+
function currentSlide(n) {
11+
showSlides(slideIndex = n);
12+
}
13+
14+
// slider
15+
function showSlides(n) {
16+
let i;
17+
let slides = document.querySelectorAll('.slide');
18+
let dots = document.querySelectorAll('.dot');
19+
if (n > slides.length) { slideIndex = 1 }
20+
if (n < 1) { slideIndex = slides.length }
21+
for (i = 0; i < slides.length; i++) {
22+
slides[i].style.display = 'none';
23+
}
24+
for (i = 0; i < dots.length; i++) {
25+
dots[i].className = dots[i].className.replace(' active', '');
26+
}
27+
slides[slideIndex-1].style.display = 'flex';
28+
dots[slideIndex-1].className += ' active';
29+
}

0 commit comments

Comments
 (0)