WeekView
Uses moment.js and limited code.
HTML
<script src="http://momentjs.com/downloads/moment.min.js"></script>
<script src="http://knockoutjs.com/downloads/knockout-3.1.0.js"></script>
<div class="container">
<div class="row clearfix">
<div class="col-md-12 column">
<div class="calendar">
<ul class="weekdays" id="weekdays" style="height: auto;" data-bind='foreach: weekdays'>
<li data-bind='text:day'></li>
</ul>
<ul class="days" id="days" data-bind='foreach: weekdays'>
<li data-bind='css: hasEvent() ? "calendar-day-event" : "calendar-day"'>
<div class='date'>
<span class='day' data-bind='text: day() + ","'></span>
<span class='month' data-bind='text: month'></span>
<span data-bind='text: date'></span>
<!--ko foreach:events-->
<a data-bind='attr:{href: details}'>
<div data-bind='text: description'></div>
<div data-bind='text: time'></div>
<div data-bind='text: location'></div>
</a>
<!--/ko-->
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
CSS
body {
padding-top: 80px;
}
.calendar ul {
list-style: none;
padding: 0;
margin: 0;
clear: both;
width: 100%;
}
.calendar li, {
display: block;
box-sizing: border-box;
border: 1px solid #ccc;
}
.calendar .date {
color: #7f7f7f;
}
.calendar:before, .calendar:after {
content:"";
display: table;
}
.calendar:after {
clear: both;
}
.calendar-day, .calendar li.out-of-range, .calendar-day-event {
height: 150px;
}
@media (max-width:768px) {
.calendar .weekdays {
display: none;
}
.calendar li {
height: auto!important;
border: 1px solid #ededed;
width: 100%;
padding: 10px;
margin-bottom: -1px;
}
.calendar li .day, .calendar li .month {
display:inline;
}
.calendar li.out-of-range, .calendar-day {
display: none;
}
.calendar .date {
text-align: center;
}
}
@media (min-width:769px) {
.calendar .date {
text-align: right;
}
.calendar ul {
list-style: none;
padding: 0;
margin: 0;
clear: both;
width: 100%;
}
.calendar li {
display: block;
float: left;
width: 14.2857142857%;
padding: 5px;
box-sizing: border-box;
border: 1px solid #ccc;
margin-right: -1px;
margin-bottom: -1px;
}
.calendar li .day, .calendar li .month {
display:none;
}
.calendar li.out-of-range {
background-color:#F5F5F5;
color:#666;
}
}
JavaScript
//set the moment
var today = moment();
var Day = function (moment, events) {
var obj = {
day : ko.observable(moment.format('dddd')),
month : ko.observable(moment.format('MMM')),
date : ko.observable(moment.format('D')),
events : ko.observableArray(events)
}
obj.hasEvent = ko.computed(function () {
return obj.events().length > 0
})
return obj;
}
//create an array of events
var events = new Array(31);
for (var i = 0; i < 31; i++) {
events[i] = [];
}
//add an event
events[today.format('D')] = [{
month: "May",
day: today.format('D'),
time: "3:00 pm - 5:00 pm",
location: "My house",
description: "Barbecue for the weekend",
details: "EventDetail.html"
}];
var vm = {
weekdays: ko.observableArray([])
}
//Set the days of the week
for (var j = 0; j < 7; j++) {
vm.weekdays.push(new Day(today, events[today.format('D')]));
today.add('day', 1);
}
//console.log(ko.toJSON(vm))
ko.applyBindings(vm)