I wrote a Chrome extension that lists upcoming concerts for the next seven days, this month, and next month. I had trouble with the nextSeven()
method, especially transitioning from dates like Dec. 31st to Jan. 1st, hence the really fugly if
-statements. I was wondering if anyone had any advice to make the code more condensed. I would really appreciate any feedback!
$(document).ready(function() {
var months = ['Jan. ', 'Feb. ', 'March ', 'April ', 'May ', 'June ', 'July ', 'Aug. ', 'Sept. ', 'Oct. ', 'Nov. ', 'Dec. '];
var systemTime = new Date();
$.ajax({
url: 'http://nycmetalscene.com/',
type: 'GET',
success: function(data) {
var parsedData = $.parseHTML(data);
var parseResults = $(parsedData).find('p').text();
var events = parseResults.split(/Sun\. |Mon\. |Tues\. |Wed\. |Thurs\. |Fri\. |Sat\. /g);
events.splice(0, 1);
var monthIndex = systemTime.getMonth();
var day = systemTime.getDate();
var testDay = systemTime.getDate();
var week = [];
var thisDay;
getDays();
$('#nextseven').on('click', function() {
$('#concerts').empty();
nextSeven();
});
$('#thismonth').on('click', function() {
$('#concerts').empty();
showMonth();
});
$('#nextmonth').on('click', function() {
$('#concerts').empty();
showNextMonth();
});
function getDays() {
for (var i = 0; i < 7; i++) {
if (day < 31) {
week.push(day);
day++;
} else {
week.push(day);
day = 1;
}
}
for (var i = 0; i < week.length; i++) {
if (week[i] === 1 || week[i] === 31) {
week[i] = ' ' + week[i] + 'st,';
} else if (week[i] === 2 || week[i] === 22) {
week[i] = ' ' + week[i] + 'nd,';
} else if (week[i] === 3 || week[i] === 23) {
week[i] = ' ' + week[i] + 'rd,';
} else {
week[i] = ' ' + week[i] + 'th,';
}
}
}
function nextSeven() {
for (i = 0; i < week.length; i++) {
thisDay = week[i];
$.each(events, function(i, item) {
var eventsstr = JSON.stringify(item);
if (eventsstr.match(thisDay)) {
if (monthIndex === 11 && testDay >= 26) {
if (eventsstr.match(months[monthIndex]) || eventsstr.match(months[0])) {
var concert = JSON.parse(eventsstr);
$('#concerts').append('<p>' + concert + '</p>');
}
} else if (monthIndex < 11 && testDay >= 26) {
if (eventsstr.match(months[monthIndex]) || eventsstr.match(months[monthIndex + 1])) {
var concert = JSON.parse(eventsstr);
$('#concerts').append('<p>' + concert + '</p>');
}
} else {
if (eventsstr.match(months[monthIndex])) {
var concert = JSON.parse(eventsstr);
$('#concerts').append('<p>' + concert + '</p>');
}
}
}
});
}
}
function showMonth() {
$.each(events, function(i, item) {
var eventsstr = JSON.stringify(item);
if (eventsstr.match(months[monthIndex])) {
var concert = JSON.parse(eventsstr);
$('#concerts').append('<p>' + concert + '</p>');
}
});
}
function showNextMonth() {
$.each(events, function(i, item) {
var eventsstr = JSON.stringify(item);
if (eventsstr.match(months[monthIndex + 1] || months[0])) {
var concert = JSON.parse(eventsstr);
$('#concerts').append('<p>' + concert + '</p>');
}
});
}
}
});
});
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8 ;">
<script src=jquery-3.1.1.min.js></script>
<script type="text/javascript" src="Scrape.js"></script>
</head>
<body>
<div>
<h1>NYC Concerts</h1>
<div id="alltabs">
<ul class="tab">
<center>
<a href="#" onclick="return false;" class="tablinks" id="nextseven">Next 7 Days</a>
<a href="#" onclick="return false;" class="tablinks" id="thismonth">This Month</a>
<a href="#" onclick="return false;" class="tablinks" id="nextmonth">Next Month</a>
</center>
</ul>
<h2><div id="concerts"></div></h2>
</div>
<link rel="stylesheet" type="text/css" href="popup.css"></link>
</body>
</html>