Skip to content

Commit

Permalink
Rewrite Meetup class
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
sukima committed Nov 8, 2015
1 parent 7006d88 commit 3a3e8ea
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 63 deletions.
37 changes: 21 additions & 16 deletions _includes/developers_cards.html
Original file line number Diff line number Diff line change
Expand Up @@ -89,32 +89,37 @@
return links;
};

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

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

$.each(data.results, function(i, dev) {
developerData = devPresenter(dev);
createDevCard(developerData);
});

$('#developers').append(paginator);
$('#developers').append(paginator);

$.each(members, function(i, dev) {
createDevCard(devPresenter(dev));
});

});
$('#developers').append(paginator);
})
.fail(function(error) {
console.log(error);
});

var createDevCard = function (dev) {
function createDevCard(dev) {
var template = $('#developer-card').html();
Mustache.parse(template); // optional, speeds up future uses
var rendered = Mustache.render(template, {'developer': dev});
$('#developers').append(rendered);
};
}

var devPresenter = function(dev) {
function devPresenter(dev) {
var separator = ", ";
var interests = "";
dev.topics.forEach(function(topic){
Expand Down
32 changes: 18 additions & 14 deletions _includes/meetup_cards.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,27 +26,31 @@
//assume Meetup is loaded

window.onload = function(){
var configuration = {
"maxEvents": 5,
"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"
}
var meetup = new Meetup(configuration.url).getEvents(function(data) {
$.each(data.results, function(i, event) {
if (i < configuration.maxEvents) {
eventPresenter = EventPresenter(event);
createEventCard(eventPresenter);
}
var MAX_EVENTS = 5;

var EVENTS_URL = 'https://api.meetup.com/2/events?' +
'limited_events=False&group_urlname=techcorridorio&page=200&' +
'fields=&order=time&desc=false&status=upcoming&sig_id=168857872&' +
'sig=e659cc6038d27adf6eae600a44905c69196c77df';

new Meetup(EVENTS_URL).fetch(MAX_EVENTS)
.then(function(events) {
$.each(events, function(i, event) {
createEventCard(EventPresenter(event));
})
})
});
.fail(function(error) {
console.log(error);
});

var createEventCard = function (event) {
function createEventCard(event) {
var template = $('#meetup-card').html();
Mustache.parse(template); // optional, speeds up future uses
var rendered = Mustache.render(template, {"event": event});
$('#meetup-events').append(rendered);
};
}

var EventPresenter = function(event) {
function EventPresenter(event) {
var formatVenueLink = function(venue) {
var formattedVenue = "http://maps.google.com/?q=" + encodeURI(venue.address_1) + '+' + encodeURI(venue.city);
return formattedVenue
Expand Down
80 changes: 47 additions & 33 deletions js/meetup-events.js
Original file line number Diff line number Diff line change
@@ -1,38 +1,52 @@
'use strict';
/* globals define */
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define([], function() {
// Also create a global in case some scripts
// that are loaded still are looking for
// a global even when an AMD loader is in use.
return (root.Meetup = factory());
});
} else {
// Browser globals
root.Meetup = factory();
}
}(this, function() {
'use strict';

var Meetup = function(meetupURL) {
this.meetupURL = (typeof meetupURL!=='undefined') ? meetupURL :
"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";
var MISSING_REOURCE_MSG = 'resourceUrl not defined. Please see ' +
'http://www.meetup.com/meetup_api/auth/#keysign ' +
'to see how to create a signed resource URL.';

this.getEvents = function(callback) {
$.ajax({
url: this.meetupURL,
dataType: 'jsonp'
})
.done(function(data) {
callback(data);
function Meetup(resourceUrl) {
var requestedPage = parseInt(URI().getQuery('page'), 10);
this.offset = Math.max(0, (requestedPage - 1) || 0);
this.resourceUrl = resourceUrl;
}

})
.fail(function(error) {
console.log("Meetup API Request Failed");
});
};
Meetup.prototype.fetch = function(limit) {
if (!this.resourceUrl) {
return $.Deferred()
.reject(new Error(MISSING_REOURCE_MSG))
.promise();
}

var requested_page = window.location.search.match(/page=(\d+)/);
var offset = (requested_page == null ? 0 : parseInt(requested_page[1]) - 1);
offset = (offset < 0 ? 0 : offset);
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" +
"&offset=" + offset;
this.getDevelopers = function(callback) {
$.ajax({
url: this.developersURL,
dataType: 'jsonp'
})
.done(function(data) {
callback(data);
})
.fail(function(error) {
console.log("Meetup API Request Failed");
});
var url = URI(this.resourceUrl)
.setQuery({
offset: this.offset,
format: 'json'
})
.toString();

return $.ajax({url: url, dataType: 'jsonp'})
.then(function(data) {
if (!limit) { return data.results; }
return $.grep(data.results, function(item_, index) {
return index <= limit;
});
});
};
};

return Meetup;
}));

0 comments on commit 3a3e8ea

Please sign in to comment.