JSFiddle - React, Tailwind, and code Playground

by willslab

HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/mustache.js/0.7.2/mustache.min.js"></script>
<script src="cdnjs.cloudflare.com/ajax/libs/moment.js/2.0.0/moment.min.js"></script>
<div id="calendar"></div>
<script type="text/template" id="table">
<table class="calendar">
	<thead>
		<tr>
			<th>Sun</th>
			<th>Mon</th>
			<th>Tue</th>
			<th>Wed</th>
			<th>Thu</th>
			<th>Fri</th>
			<th>Sat</th>
		</tr>
	</thead>
	<tbody></tbody>
</table>
</script>

<script type="text/template" id="week">
<tr class="week">
	{{#dates}}
	<td>{{.}}</td>
	{{/dates}}
</tr>
</script>

JavaScript

var m = moment();

	var dayShortText = [
		"Sun",
		"Mon",
		"Tue",
		"Wed",
		"Thu",
		"Fri",
		"Sat"
	];

	var dayLongText = [
		"Sunday",
		"Monday",
		"Tuesday",
		"Wednesday",
		"Thursday",
		"Friday",
		"Saturday"
	];

	var monthText = [
		// "",
		"January",
		"February",
		"March",
		"April",
		"May",
		"June",
		"July",
		"August",
		"September",
		"October",
		"November",
		"December"
	];

	var dayIndex = m.day();
	var monthIndex = m.month();

	var today = {
		year: m.year(),
		month: {
			index: monthIndex,
			text: monthText[monthIndex]
		},
		date: m.date(),
		day: {
			index: dayIndex,
			shortText: dayShortText[dayIndex],
			longText: dayLongText[dayIndex]
		} 
	};

	console.log("Year: " + today.year);
	console.log("Month: " + today.month.text);
	console.log("Date: " + today.date);
	console.log("Day: " + today.day.shortText);

	var tableTemplate = $('#table').html();
	var weekTemplate = $('#week').html();
	var $calendar = $('#calendar');

	var html = Mustache.render(tableTemplate);

	var weeks = [];

	var weekData = { dates: [ 28, 29, 30, 1, 2, 3, 4 ]};
	var weekHtml = Mustache.render(weekTemplate, weekData);

	var current = moment(m);

	current.date(1);
	current.subtract('days', current.day());
	var count = 0;

	while (count < 6 && current.month() <= m.month()) {
		var week = [];


		for (var i = 0; i < 7; i++) {
			week[i] = current.date();
			current.add('days', 1);
		}

		weeks.push(week);
		count++;
	}

	$calendar.html(html);

	for (var j = 0; j < weeks.length; j++) {
		weekHtml = Mustache.render(weekTemplate, { dates: weeks[j] });

		$calendar.find('tbody').append(weekHtml);
	}