Skip to content

Commit 04de873

Browse files
committed
Rewrite Meetup class
This is more JavaScript class idiomatic. It also allows for future abstractions like removing the hard coded URLs. The original file used tabs so I kept that even though the .vimrc seems to contradict this. This also uses UMD for encapsulation which makes it more universal to be pulled into other websites.
1 parent 984a12f commit 04de873

File tree

3 files changed

+74
-62
lines changed

3 files changed

+74
-62
lines changed

_includes/developers_cards.html

+21-16
Original file line numberDiff line numberDiff line change
@@ -89,32 +89,37 @@
8989
return links;
9090
};
9191

92-
new Meetup().getDevelopers(function(data) {
93-
var paginatorTmpl = $('#developer-paginator').html();
94-
Mustache.parse(paginatorTmpl); // optional, speeds up future uses
95-
var links = getPaginatorLinks(data.meta.total_count);
96-
var paginator = Mustache.render(paginatorTmpl, {'links': links});
92+
var MEMBERS_URL = 'https://api.meetup.com/2/members?page=20&' +
93+
'group_urlname=techcorridorio&photo-host=public&order=name&' +
94+
'sig_id=70201382&sig=5b77206251c64989f61e8f45580e0d200221f5d4';
9795

98-
$('#developers').append(paginator);
96+
new Meetup(MEMBERS_URL).fetch()
97+
.then(function(members) {
98+
var paginatorTmpl = $('#developer-paginator').html();
99+
Mustache.parse(paginatorTmpl); // optional, speeds up future uses
100+
var links = getPaginatorLinks(data.meta.total_count);
101+
var paginator = Mustache.render(paginatorTmpl, {'links': links});
99102

100-
$.each(data.results, function(i, dev) {
101-
developerData = devPresenter(dev);
102-
createDevCard(developerData);
103-
});
104-
105-
$('#developers').append(paginator);
103+
$('#developers').append(paginator);
106104

105+
$.each(members, function(i, dev) {
106+
createDevCard(devPresenter(dev));
107+
});
107108

108-
});
109+
$('#developers').append(paginator);
110+
})
111+
.fail(function(error) {
112+
console.log(error);
113+
});
109114

110-
var createDevCard = function (dev) {
115+
function createDevCard(dev) {
111116
var template = $('#developer-card').html();
112117
Mustache.parse(template); // optional, speeds up future uses
113118
var rendered = Mustache.render(template, {'developer': dev});
114119
$('#developers').append(rendered);
115-
};
120+
}
116121

117-
var devPresenter = function(dev) {
122+
function devPresenter(dev) {
118123
var separator = ", ";
119124
var interests = "";
120125
dev.topics.forEach(function(topic){

_includes/meetup_cards.html

+18-14
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,31 @@
2626
//assume Meetup is loaded
2727

2828
window.onload = function(){
29-
var configuration = {
30-
"maxEvents": 5,
31-
"url": "https://api.meetup.com/2/events?callback=JSON_CALLBACK&offset=0&format=json&limited_events=False&group_urlname=techcorridorio&page=200&fields=&order=time&desc=false&status=upcoming&sig_id=168857872&sig=e659cc6038d27adf6eae600a44905c69196c77df"
32-
}
33-
var meetup = new Meetup(configuration.url).getEvents(function(data) {
34-
$.each(data.results, function(i, event) {
35-
if (i < configuration.maxEvents) {
36-
eventPresenter = EventPresenter(event);
37-
createEventCard(eventPresenter);
38-
}
29+
var MAX_EVENTS = 5;
30+
31+
var EVENTS_URL = 'https://api.meetup.com/2/events?' +
32+
'limited_events=False&group_urlname=techcorridorio&page=200&' +
33+
'fields=&order=time&desc=false&status=upcoming&sig_id=168857872&' +
34+
'sig=e659cc6038d27adf6eae600a44905c69196c77df';
35+
36+
new Meetup(EVENTS_URL).fetch(MAX_EVENTS)
37+
.then(function(events) {
38+
$.each(events, function(i, event) {
39+
createEventCard(EventPresenter(event));
40+
})
3941
})
40-
});
42+
.fail(function(error) {
43+
console.log(error);
44+
});
4145

42-
var createEventCard = function (event) {
46+
function createEventCard(event) {
4347
var template = $('#meetup-card').html();
4448
Mustache.parse(template); // optional, speeds up future uses
4549
var rendered = Mustache.render(template, {"event": event});
4650
$('#meetup-events').append(rendered);
47-
};
51+
}
4852

49-
var EventPresenter = function(event) {
53+
function EventPresenter(event) {
5054
var formatVenueLink = function(venue) {
5155
var formattedVenue = "http://maps.google.com/?q=" + encodeURI(venue.address_1) + '+' + encodeURI(venue.city);
5256
return formattedVenue

js/meetup-events.js

+35-32
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,41 @@
1-
'use strict';
1+
/* globals define */
2+
(function(root, factory) {
3+
if (typeof define === 'function' && define.amd) {
4+
// AMD. Register as an anonymous module.
5+
define([], function() {
6+
// Also create a global in case some scripts
7+
// that are loaded still are looking for
8+
// a global even when an AMD loader is in use.
9+
return (root.Meetup = factory());
10+
});
11+
} else {
12+
// Browser globals
13+
root.Meetup = factory();
14+
}
15+
}(this, function() {
16+
'use strict';
217

3-
var Meetup = function(meetupURL) {
4-
this.meetupURL = (typeof meetupURL!=='undefined') ? meetupURL :
5-
"https://api.meetup.com/2/events?offset=0&format=json&limited_events=False&group_urlname=techcorridorio&page=200&fields=&order=time&desc=false&status=upcoming&sig_id=168857872&sig=e659cc6038d27adf6eae600a44905c69196c77df";
18+
function Meetup(resourceUrl) {
19+
var requestedPage = window.location.search.match(/page=(\d+)/);
20+
var offset = (requestedPage == null ? 0 : parseInt(requestedPage[1]) - 1);
21+
this.offset = (offset < 0 ? 0 : offset);
22+
this._uri = URI(resourceUrl);
23+
}
624

7-
this.getEvents = function(callback) {
8-
$.ajax({
9-
url: this.meetupURL,
10-
dataType: 'jsonp'
11-
})
12-
.done(function(data) {
13-
callback(data);
25+
Meetup.prototype.fetch = function(limit) {
26+
var url = this._uri.setQuery({
27+
offset: this.offset,
28+
format: 'json'
29+
}).toString();
30+
var promise = $.ajax({url: url, dataType: 'jsonp'});
1431

15-
})
16-
.fail(function(error) {
17-
console.log("Meetup API Request Failed");
32+
return promise.then(function(data) {
33+
if (!limit) { return data.results; }
34+
return $.grep(data.results, function(item_, index) {
35+
return index <= limit;
36+
});
1837
});
1938
};
2039

21-
var requested_page = window.location.search.match(/page=(\d+)/);
22-
var offset = (requested_page == null ? 0 : parseInt(requested_page[1]) - 1);
23-
offset = (offset < 0 ? 0 : offset);
24-
this.developersURL = "https://api.meetup.com/2/members?format=json&group_urlname=techcorridorio&photo-host=public&order=name&sig_id=70201382&sig=5b77206251c64989f61e8f45580e0d200221f5d4&page=20" +
25-
"&offset=" + offset;
26-
this.getDevelopers = function(callback) {
27-
$.ajax({
28-
url: this.developersURL,
29-
dataType: 'jsonp'
30-
})
31-
.done(function(data) {
32-
callback(data);
33-
})
34-
.fail(function(error) {
35-
console.log("Meetup API Request Failed");
36-
});
37-
};
38-
};
40+
return Meetup;
41+
}));

0 commit comments

Comments
 (0)