JSFiddle - React, Tailwind, and code Playground
Bootstrap Compatible Calendar Widget
by Jennifer Perrin
HTML
<script src="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.1.0/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.1.0/css/bootstrap.css">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css">
<div class="calendar calendar-first" id="calendar_first">
<div class="calendar_header">
<button class="switch-month switch-left"> <i class="fa fa-chevron-left"></i></button>
<h2></h2>
<button class="switch-month switch-right"> <i class="fa fa-chevron-right"></i></button>
</div>
<div class="calendar_weekdays"></div>
<div class="calendar_content"></div>
</div>
CSS
@import url(http://fonts.googleapis.com/css?family=Muli);
body { margin-top: 3%; }
.calendar, .calendar_weekdays, .calendar_content {
max-width: 300px;
}
.calendar {
margin: auto;
font-family:'Muli', sans-serif;
font-weight: 400;
}
.calendar_content, .calendar_weekdays, .calendar_header {
position: relative;
overflow: hidden;
}
.calendar_weekdays div {
display:inline-block;
vertical-align:top;
}
.calendar_weekdays div, .calendar_content div {
width: 14.28571%;
overflow: hidden;
text-align: center;
background-color: transparent;
color: #6f6f6f;
font-size: 14px;
line-height: 30px;
}
.calendar_content div {
border: 1px solid transparent;
float: left;
}
.calendar_content div:hover {
border: 1px solid #dcdcdc;
cursor: default;
}
.calendar_content div.blank:hover {
cursor: default;
border: 1px solid transparent;
}
.calendar_content div.past-date {
color: #d5d5d5;
}
.calendar_content div.today {
font-weight: bold;
font-size: 14px;
color: #87b633;
border: 1px solid #dcdcdc;
}
.calendar_content div.selected {
background-color: #f0f0f0;
}
.calendar_header {
width: 100%;
text-align: center;
}
.calendar_header h2 {
padding: 0 10px;
font-family:'Muli', sans-serif;
font-weight: 300;
font-size: 18px;
color: #87b633;
float:left;
width:70%;
margin: 0 0 10px;
}
button.switch-month {
background-color: transparent;
padding: 0;
outline: none;
border: none;
color: #dcdcdc;
float: left;
width:15%;
transition: color .2s;
}
button.switch-month:hover {
color: #87b633;
}
JavaScript
$(document).ready(function () {
function c(passed_month, passed_year, calNum) {
var calendar = calNum == 0 ? calendars.cal1 : calendars.cal2;
makeWeek(calendar.weekline);
calendar.datesBody.empty();
var calMonthArray = makeMonthArray(passed_month, passed_year);
var r = 0;
var u = false;
while (!u) {
if (daysArray[r] == calMonthArray[0].weekday) {
u = true
} else {
calendar.datesBody.append('<div class="blank"></div>');
r++;
}
}
for (var cell = 0; cell < 42 - r; cell++) { // 42 date-cells in calendar
if (cell >= calMonthArray.length) {
calendar.datesBody.append('<div class="blank"></div>');
} else {
var shownDate = calMonthArray[cell].day;
var iter_date = new Date(passed_year, passed_month, shownDate);
if (
(
(shownDate != today.getDate() && passed_month == today.getMonth()) || passed_month != today.getMonth()) && iter_date < today) {
var m = '<div class="past-date">';
} else {
var m = checkToday(iter_date) ? '<div class="today">' : "<div>";
}
calendar.datesBody.append(m + shownDate + "</div>");
}
}
var color = "#444444";
calendar.calHeader.find("h2").text(i[passed_month] + " " + passed_year);
calendar.weekline.find("div").css("color", color);
calendar.datesBody.find(".today").css("color", "#87b633");
// find elements (dates) to be clicked on each time
// the calendar is generated
var clicked = false;
selectDates(selected);
clickedElement = calendar.datesBody.find('div');
clickedElement.on("click", function () {
clicked = $(this);
var whichCalendar = calendar.name;
...