|
3 | 3 | ltc.map;
|
4 | 4 | ltc.meetups = [];
|
5 | 5 | ltc.markers = {};
|
6 |
| - |
| 6 | + |
| 7 | + // get week range for meetups |
| 8 | + let today = new Date; |
| 9 | + let lastDow = 14 - today.getDay(); |
7 | 10 | const api = {};
|
8 | 11 | api.group = 'LearnTeachCode';
|
9 |
| - api.perPage = 15; |
10 | 12 | api.offset = 0;
|
11 | 13 | 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; |
13 | 18 | api.err = "Error occurred processing Meetup API URL";
|
14 | 19 |
|
15 | 20 | // Get Meetup Data
|
|
24 | 29 | }
|
25 | 30 |
|
26 | 31 | function processData(data) {
|
| 32 | + data.days = getCurrentDates(2); |
27 | 33 | data.results.forEach( function( meetup, index ) {
|
28 | 34 | // Get event formatted dates and time
|
29 | 35 | data.results[index].d = getDateFormats( meetup );
|
|
33 | 39 | // List new meetups
|
34 | 40 | listMeetups(data);
|
35 | 41 | mapMeetups(data);
|
| 42 | + listMeetupsinWeekView(data); |
36 | 43 | }
|
37 | 44 |
|
38 | 45 | function mapMeetups(data){
|
|
128 | 135 | if(data.meta.total_count > data.meta.count && data.meta.count >= api.perPage){
|
129 | 136 | list += '<li class="load-more"><a href="https://www.meetup.com/LearnTeachCode/events/">Load More</a></li>';
|
130 | 137 | }
|
131 |
| - }else{ |
| 138 | + } else{ |
132 | 139 | // No upcoming events note
|
133 | 140 | list += '<li>No Meetups Currently Scheduled. Stay tuned.</li>';
|
134 | 141 | }
|
|
137 | 144 | $('.load-more').remove();
|
138 | 145 |
|
139 | 146 | // Add the list to the element
|
140 |
| - $(".meetups").append(list); |
| 147 | + $(".listview").append(list); |
141 | 148 | }
|
142 | 149 |
|
| 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 | + } |
143 | 213 | /**
|
144 | 214 | * formatEvents() will get a set of meetups and format accordingly
|
145 | 215 | * @param {meetups}
|
|
155 | 225 |
|
156 | 226 | // Formant and add current event to list
|
157 | 227 | formattedMeetups.push(
|
158 |
| - '<li id="meetup-' + meetup.id + '" class="meetup">' |
| 228 | + '<li id="meetup-' + meetup.id + '" class="list-meetup">' |
159 | 229 | + '<div class="datebox">'
|
160 | 230 | + ' <div class="dow">' + d.dow + '</div>'
|
161 | 231 | + ' <div class="date">' + d.month + ' ' + d.day + '</div>'
|
|
171 | 241 | return formattedMeetups;
|
172 | 242 | }
|
173 | 243 |
|
| 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 | + } |
174 | 266 | function getDateFormats(meetup) {
|
175 | 267 | const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
176 | 268 | const weekdays = ['Sunday','Monday','Tueday','Wednesday','Thursday','Friday','Saturday'];
|
|
207 | 299 | /**
|
208 | 300 | * Get initial set of group meetups
|
209 | 301 | */
|
210 |
| - $(document).ready(function(){ |
| 302 | + $(document).ready(function() { |
211 | 303 | // Get intial set of meetups
|
212 | 304 | getData( api.url, processData, api.err);
|
213 | 305 |
|
| 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 | + |
214 | 315 | // Click Event for Load More
|
215 |
| - $('.meetups').on('click','.load-more a',function(e) { |
| 316 | + $('.listview').on('click', '.load-more a', function(e) { |
216 | 317 | e.preventDefault();
|
217 | 318 | api.offset++;
|
218 | 319 | getData( api.url + '&offset=' + api.offset, processData, api.err);
|
|
227 | 328 | meetupListItem.classList.add('active');
|
228 | 329 | setTimeout( () => { meetupListItem.classList.remove('active'); }, 3000);
|
229 | 330 | });
|
| 331 | + |
230 | 332 | });
|
231 | 333 |
|
232 | 334 | })();
|
0 commit comments