Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

angular-material-event-calendar

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

angular-material-event-calendar - npm Package Compare versions

Comparing version
0.1.1
to
0.1.2
+64
public/eventCalendar-colors.css
md-event-calendar:not(._md) md-event-calendar-header {
color: #666;
background: #FFF;
border-color: #DDD; }
md-event-calendar:not(._md) md-event-calendar-header md-event-calendar-next .md-arrow svg, md-event-calendar:not(._md) md-event-calendar-header md-event-calendar-prev .md-arrow svg {
fill: #666; }
md-event-calendar:not(._md) .md-button:not([disabled]) {
color: #333; }
md-event-calendar:not(._md) .md-button:not([disabled]):hover {
background: rgba(158, 158, 158, 0.2); }
md-event-calendar:not(._md) .md-button[disabled] {
color: #CCC; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row-header {
color: #999;
background: #FFF;
border-color: #DDD; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row {
background: #FFF;
border-color: #DDD; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell-divider {
border-color: #DDD; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell {
border-color: #DDD; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link {
color: #4189b8; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label {
color: #999; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-show-more-link {
color: #4189b8; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.different-month {
background: #F5F5F5; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today {
box-shadow: inset 0px 0px 0px 1px #AAA; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label {
color: #666; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today .md-event-calendar-month-cell-divider {
border-color: #AAA; }
md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell:last-child {
border-color: #DDD; }
md-event-calendar:not(._md) .md-event-calendar-cell-event {
background: #DDD;
color: #666; }
md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected {
color: #EEE;
background: #888; }
md-event-calendar:not(._md) .md-event-calendar-cell-event.md-continue-left:after, md-event-calendar:not(._md) .md-event-calendar-cell-event.md-end-left:after {
border-right-color: #DDD; }
md-event-calendar:not(._md) .md-event-calendar-cell-event.md-continue-right:after, md-event-calendar:not(._md) .md-event-calendar-cell-event.md-start-right:after {
border-left-color: #DDD; }
md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-continue-left:after, md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-end-left:after {
border-right-color: #888; }
md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-continue-right:after, md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-start-right:after {
border-left-color: #888; }
md-event-calendar:not(._md) .md-event-calendar-show-more-container .md-event-calendar-show-more-date-label {
color: #999; }
md-event-calendar:not(._md) .md-event-calendar-show-more-container .md-event-calendar-show-more-close svg {
fill: #999; }
md-event-calendar {
display: block; }
md-event-calendar md-event-calendar-header {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
line-height: 64px;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
border-style: solid;
border-width: 1px 1px 0 1px; }
md-event-calendar md-event-calendar-header.md-center {
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center; }
md-event-calendar md-event-calendar-header md-event-calendar-title {
display: block;
min-width: 170px;
text-align: center;
font-size: 20px; }
md-event-calendar md-event-calendar-header md-event-calendar-next, md-event-calendar md-event-calendar-header md-event-calendar-prev {
display: block; }
md-event-calendar md-event-calendar-header md-event-calendar-next .md-arrow, md-event-calendar md-event-calendar-header md-event-calendar-prev .md-arrow {
cursor: pointer;
height: 24px;
width: 24px; }
md-event-calendar md-event-calendar-header md-event-calendar-next .md-arrow.md-left-arrow, md-event-calendar md-event-calendar-header md-event-calendar-prev .md-arrow.md-left-arrow {
-webkit-transform: rotate(180deg);
transform: rotate(180deg); }
md-event-calendar .md-event-calendar-month-cell-content .md-event-calendar-create-link {
opacity: 0; }
md-event-calendar .md-event-calendar-month-cell-content:hover .md-event-calendar-create-link {
opacity: 1; }
md-event-calendar md-event-calendar-month.md-event-hover .md-event-calendar-month-cell-content .md-event-calendar-create-link {
opacity: 0; }
md-event-calendar md-event-calendar-month.fitted {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row-header {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
min-height: 36px;
height: 36px;
-webkit-box-align: end;
-ms-flex-align: end;
align-items: flex-end;
font-size: 12px;
font-weight: 500;
padding-bottom: 12px;
border-style: solid;
border-width: 0 1px 1px 1px; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row-header .md-event-calendar-month-cell-header {
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
padding-left: 6px; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row {
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
border-style: solid;
border-width: 0 0 1px 0; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell {
position: relative;
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-spacer {
margin-top: 100%; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-divider {
position: absolute;
top: 0;
bottom: 0;
left: 0;
border-style: solid;
border-width: 0 1px 0 0; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link {
-ms-flex-item-align: center;
align-self: center;
text-transform: uppercase;
font-size: 14px;
font-weight: 500;
padding-right: 12px;
cursor: pointer;
-webkit-transition: opacity 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
transition: opacity 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label {
font-size: 13px;
padding: 8px;
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-spacer {
margin: 4px 0 4px 0;
height: 23px; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-show-more-link {
font-size: 13px;
padding: 4px;
padding-left: 8px;
cursor: pointer; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell:last-child {
border-style: solid;
border-width: 0 1px 0 0; }
md-event-calendar .md-event-calendar-cell-event {
font-size: 12px;
min-height: 15px;
padding: 4px;
cursor: pointer; }
md-event-calendar .md-event-calendar-cell-event.md-single {
margin: 4px;
border-radius: 2px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden; }
md-event-calendar .md-event-calendar-cell-event.md-start {
margin: 4px 0 4px 4px;
border-radius: 2px 0 0 2px;
white-space: nowrap;
z-index: 1;
position: relative; }
md-event-calendar .md-event-calendar-cell-event.md-start-right {
margin: 4px 13px 4px 4px;
border-radius: 2px 0 0 2px; }
md-event-calendar .md-event-calendar-cell-event.md-end {
margin: 4px 4px 4px 0;
border-radius: 0 2px 2px 0; }
md-event-calendar .md-event-calendar-cell-event.md-end-left {
margin: 4px 4px 4px 13px;
border-radius: 0 2px 2px 0; }
md-event-calendar .md-event-calendar-cell-event.md-continue, md-event-calendar .md-event-calendar-cell-event.md-continue-both {
margin: 4px 0 4px 0;
border-radius: 0; }
md-event-calendar .md-event-calendar-cell-event.md-continue-right {
margin: 4px 13px 4px 0;
border-radius: 0;
white-space: nowrap; }
md-event-calendar .md-event-calendar-cell-event.md-continue-left {
margin: 4px 0 4px 13px;
border-radius: 0;
white-space: nowrap; }
md-event-calendar .md-event-calendar-cell-event.md-continue-right:after, md-event-calendar .md-event-calendar-cell-event.md-start-right:after {
content: '';
position: absolute;
height: 0;
width: 0;
right: 0;
margin-top: -4px;
border-top: 12px solid transparent;
border-bottom: 11.5px solid transparent;
border-left: 13px solid #EEE; }
md-event-calendar .md-event-calendar-cell-event.md-continue-left:after, md-event-calendar .md-event-calendar-cell-event.md-end-left:after {
content: '';
position: absolute;
height: 0;
width: 0;
left: 0;
margin-top: -4px;
border-top: 12px solid transparent;
border-bottom: 11.5px solid transparent;
border-right: 13px solid #EEE; }
md-event-calendar .md-event-calendar-cell-event .md-event-calendar-cell-event-time {
font-weight: 500;
padding-right: 6px;
pointer-events: none; }
md-event-calendar .md-event-calendar-cell-event span {
pointer-events: none; }
md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-single, md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-end, md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-start-right {
padding-left: 16px; }
md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-single, md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-end, md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-start-right {
margin-left: 0; }
md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-single, md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-end, md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-end-left {
margin-right: 0; }
md-event-calendar .md-event-calendar-show-more-container {
opacity: 0;
position: absolute;
top: 0;
left: 1px;
width: 180px;
background: #FFF;
padding: 12px;
padding-top: 7px;
border-radius: 2px;
z-index: 9;
box-shadow: 0 7px 8px -4px rgba(0, 0, 0, 0.2), 0 13px 19px 2px rgba(0, 0, 0, 0.14), 0 5px 24px 4px rgba(0, 0, 0, 0.12); }
md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-content {
position: relative; }
md-event-calendar .md-event-calendar-show-more-container.show {
opacity: 1; }
md-event-calendar .md-event-calendar-show-more-container.show:not(.no-transition) {
-webkit-transition: opacity 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
transition: opacity 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); }
md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-close {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
position: absolute;
top: 6px;
right: 7px;
width: 16px;
height: 16px;
cursor: pointer; }
md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-close svg {
pointer-events: none; }
md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-date-label {
font-size: 13px;
padding: 6px;
margin-left: -11px;
margin-top: -5px; }
md-event-calendar.md-create-disabled md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link {
display: none; }
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
<path d="M0 0h24v24H0z" fill="none"/>
</svg>
<svg fill="#EEEEEE" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"/>
<path d="M0-.25h24v24H0z" fill="none"/>
</svg>
(function(){"use strict";angular.module("material.components.eventCalendar")
.constant("EVENT_CALENDAR_THEME", "md-event-calendar._md md-event-calendar-header {\n color: '{{foreground-1}}';\n background: '{{background-hue-1}}';\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-header md-event-calendar-next .md-arrow svg, md-event-calendar._md md-event-calendar-header md-event-calendar-prev .md-arrow svg {\n fill: '{{foreground-2}}'; }\n\nmd-event-calendar._md md-event-calendar-month .md-event-calendar-month-row-header {\n color: '{{foreground-3}}';\n background: '{{background-hue-1}}';\n border-color: '{{foreground-4}}'; }\n\nmd-event-calendar._md md-event-calendar-month .md-event-calendar-month-row {\n background: '{{background-hue-1}}';\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell-divider {\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell {\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link {\n color: '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label {\n color: '{{foreground-3}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-show-more-link {\n color: '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.different-month {\n background: '{{background-hue-2}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today {\n box-shadow: inset 0px 0px 0px 1px '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label {\n color: '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell:last-child {\n border-color: '{{foreground-4}}'; }\n\nmd-event-calendar._md .md-event-calendar-cell-event {\n background: '{{foreground-4}}';\n color: '{{background-900}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-selected {\n color: #EEE;\n background: '{{primary-default}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-continue-left:after, md-event-calendar._md .md-event-calendar-cell-event.md-end-left:after {\n border-right-color: '{{foreground-4}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-continue-right:after, md-event-calendar._md .md-event-calendar-cell-event.md-start-right:after {\n border-left-color: '{{foreground-4}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-continue-left:after, md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-end-left:after {\n border-right-color: '{{primary-default}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-continue-right:after, md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-start-right:after {\n border-left-color: '{{primary-default}}'; }\n\nmd-event-calendar._md .md-event-calendar-show-more-container .md-event-calendar-show-more-date-label {\n color: '{{foreground-3}}'; }\n\nmd-event-calendar._md .md-event-calendar-show-more-container .md-event-calendar-show-more-close svg {\n fill: '{{foreground-1}}'; }\n\nmd-event-calendar._md.md-primary md-event-calendar-header {\n color: '{{background-100}}';\n background: '{{primary-default}}'; }\n md-event-calendar._md.md-primary md-event-calendar-header md-event-calendar-next .md-arrow svg, md-event-calendar._md.md-primary md-event-calendar-header md-event-calendar-prev .md-arrow svg {\n fill: '{{background-100}}'; }\n\nmd-event-calendar._md.md-primary md-event-calendar-month .md-event-calendar-month-row-header {\n color: '{{background-100}}';\n background: '{{primary-default}}'; }\n")
;}());
(function(){"use strict";angular
.module('material.components.eventCalendar')
.factory('$$mdEventCalendarBuilder', mdEventCalendarBuilderService);
var nextId = 0;
/**
* @ngdoc service
* @name $$mdEventCalendarBuilder
* @module material.components.eventCalendar
**/
/*@ngInject*/
function mdEventCalendarBuilderService($$mdEventCalendarUtil, $templateCache) {
var service = {
month: month,
showMore: showMore
};
return service;
function showMore(opts) {
var date = opts.date;
var selected = opts.selected || [];
var events = opts.events ? filterEventsOnDay(date, opts.events) : [];
var labelProperty = opts.labelProperty;
var showMoreBody = document.createDocumentFragment();
var container = document.createElement('div');
container.classList.add('md-event-calendar-show-more-container');
var content = document.createElement('div');
content.classList.add('md-event-calendar-show-more-content');
var dateLabel = document.createElement('div');
dateLabel.classList.add('md-event-calendar-show-more-date-label');
dateLabel.textContent = $$mdEventCalendarUtil.dates[date.getDate()];
var closeButton = document.createElement('div');
closeButton.classList.add('md-event-calendar-show-more-close');
closeButton.innerHTML = $templateCache.get('icons/ic_close_black_24px.svg');
closeButton.setAttribute('md-show-more-close', 'true');
container.appendChild(dateLabel);
container.appendChild(closeButton);
container.appendChild(content);
showMoreBody.appendChild(container);
events.forEach(function (item) {
var eventElement;
var isStartThisDay = $$mdEventCalendarUtil.isSameDay(date, item.start);
var isEndThisDay = $$mdEventCalendarUtil.isValidDate(item.end) ? $$mdEventCalendarUtil.isSameDay(date, item.end) : true;
var eventOptions = {
labelProperty: labelProperty,
selected: selected
};
if (isStartThisDay && isEndThisDay) {
eventElement = createEventElement({className: 'single', hasLabel: true}, item, eventOptions);
} else if (isStartThisDay) {
eventElement = createEventElement({className: 'start-right', hasLabel: true}, item, eventOptions);
} else if (isEndThisDay) {
eventElement = createEventElement({className: 'end-left', hasLabel: true}, item, eventOptions);
} else {
eventElement = createEventElement({className: 'continue', hasLabel: true}, item, eventOptions);
}
content.appendChild(eventElement);
});
var bounds = opts.cell.getBoundingClientRect();
var cellTop = opts.cell.offsetTop;
var cellLeft = opts.cell.offsetLeft;
container.style.top = cellTop+'px';
container.style.left = cellLeft+'px';
return showMoreBody;
}
function filterEventsOnDay(date, events) {
return !events || !events.length ? [] : events.filter(function (item) {
return $$mdEventCalendarUtil.isDateWithinRange(date, item.start, item.end || item.start);
}).sort(function(a, b) {
a = new Date(a.start);
b = new Date(b.start);
return a > b ? 1 : a < b ? -1 : 0;
});
}
function month(options) {
var calendarStartDate;
var d = 0;
var rowNumber = 1;
var firstCalendarDay = true;
var lastCalendarDay = false;
var today = $$mdEventCalendarUtil.createDateAtMidnight();
var date = $$mdEventCalendarUtil.isValidDate(options.date) ? options.date : new Date();
var firstDayOfMonth = $$mdEventCalendarUtil.getFirstDateOfMonth(date);
var firstDayOfTheWeek = (firstDayOfMonth.getDay() + 7) % 7;
var numberOfDaysInMonth = $$mdEventCalendarUtil.getNumberOfDaysInMonth(date);
var events = filterCurrentCalendar(date, options.events);
events.forEach(cleanEvent);
var selected = options.selected || [];
var monthElement = createMonthElement();
var row = createRowElement();
monthElement.appendChild(row);
var cellSize = options.cellHeight - 48;
var maxEvents = Math.floor(cellSize / 24);
// days from last month
if (firstDayOfTheWeek > 0) {
calendarStartDate = $$mdEventCalendarUtil.getFirstDateOfMonth(date);
calendarStartDate.setDate(calendarStartDate.getDate() - firstDayOfTheWeek);
while (d < firstDayOfTheWeek) {
row.appendChild(createCellElement(getCellOptions(calendarStartDate, d, true)));
firstCalendarDay = false;
d += 1;
calendarStartDate.setDate(calendarStartDate.getDate() + 1);
}
}
// Add a cell for each day of the month, keeping track of the day of the week so that
// we know when to start a new row.
var dayOfWeek = firstDayOfTheWeek;
var iterationDate = firstDayOfMonth;
d = 1;
while (d <= numberOfDaysInMonth) {
// If we've reached the end of the week, start a new row.
if (dayOfWeek === 7) {
dayOfWeek = 0;
row = createRowElement();
firstCalendarDay = false;
monthElement.appendChild(row);
}
if (dayOfWeek === 6 && d === numberOfDaysInMonth) {
lastCalendarDay = true;
}
iterationDate.setDate(d);
row.appendChild(createCellElement(getCellOptions(iterationDate, dayOfWeek)));
firstCalendarDay = false;
dayOfWeek += 1;
d += 1;
}
// fill in the rest of the row with next month
while (row.childNodes.length < 7) {
if (dayOfWeek === 6) {
lastCalendarDay = true;
}
iterationDate.setDate(d);
row.appendChild(createCellElement(getCellOptions(iterationDate, dayOfWeek, true)));
dayOfWeek += 1;
d += 1;
}
return monthElement;
function getCellOptions(cellDate, dayOfWeek, differentMonth) {
return {
date: cellDate, // date for day on calendar
today: today, // todays date at midnight
dayOfWeek: dayOfWeek, // 0-6 (sun-sat)
differentMonth: differentMonth || false, // previous or next month overflow days
events: events, // events arr
isFirstDay: firstCalendarDay, // is first day of current month view. not the first day of month(unless that is sunday)
isLastDay: lastCalendarDay, // last day of calenday. not last day of month (unless sat)
maxEvents: maxEvents, // max events that can be displayed in a day cell. based on cell size
selected: selected, // array of selected events. from ngModel
labelProperty: options.labelProperty, // name of the label property. default: title
showCreateLink: options.showCreateLink // show create link on hover of day cell
};
}
}
function createCellElement(options) {
var cell = document.createElement('div');
cell.classList.add('md-event-calendar-month-cell');
cell.setAttribute('md-date', options.date);
if (options.differentMonth === true) { cell.classList.add('different-month'); }
if ($$mdEventCalendarUtil.isSameDay(options.date, options.today)) { cell.classList.add('today'); }
var cellSpacer = document.createElement('div');
cellSpacer.classList.add('md-event-calendar-month-cell-spacer');
cell.appendChild(cellSpacer);
var divider = document.createElement('div');
divider.classList.add('md-event-calendar-month-cell-divider');
cell.appendChild(divider);
var cellContent = document.createElement('div');
cellContent.setAttribute('md-create-event', '');
cellContent.classList.add('md-event-calendar-month-cell-content');
cell.appendChild(cellContent);
var cellHeader = document.createElement('div');
cellHeader.setAttribute('md-create-event', '');
cellHeader.classList.add('layout-row');
cellContent.appendChild(cellHeader);
var dateLabel = document.createElement('div');
dateLabel.setAttribute('md-create-event', '');
dateLabel.classList.add('md-event-calendar-cell-data-label');
dateLabel.textContent = $$mdEventCalendarUtil.dates[options.date.getDate()];
cellHeader.appendChild(dateLabel);
if (options.showCreateLink === true) {
var createLink = document.createElement('div');
createLink.setAttribute('md-create-event', '');
createLink.classList.add('md-event-calendar-create-link');
createLink.textContent = 'Create';
cellHeader.appendChild(createLink);
}
createEventElements(cellContent, options);
return cell;
}
function createEventElements(cellContent, options) {
var i;
var place = 0;
var hasEvents = false;
var matchingEvents = getEventsInRange(options.date, options.events);
matchingEvents = setEventPlaces(matchingEvents, options.dayOfWeek);
matchingEvents.every(function (eventItem, pos) {
var type = getEventDisplayType(eventItem, options);
var placeDiff = eventItem.$$place - place;
hasEvents = true;
place = eventItem.$$place + 1;
i = 0;
// add spacer items for overflow events from last day
while (i < placeDiff) {
if (place >= options.maxEvents) {
cellContent.appendChild(createShowMore(matchingEvents.length - pos, options.date));
return false;
}
cellContent.appendChild(createEventSpacerElement());
i += 1;
}
if (place >= options.maxEvents) {
cellContent.appendChild(createShowMore(matchingEvents.length - pos, options.date));
return false;
}
cellContent.appendChild(createEventElement(type, eventItem, options));
return true;
});
if (hasEvents === true) {
cellContent.classList.add('md-has-events');
}
}
function createShowMore(num, date) {
var showMoreElement = document.createElement('div');
showMoreElement.classList.add('md-event-calendar-cell-event-show-more-link');
showMoreElement.textContent = num+' more';
showMoreElement.setAttribute('md-show-more', date.toISOString());
return showMoreElement;
}
function createEventSpacerElement() {
var spacer = document.createElement('div');
spacer.classList.add('md-event-calendar-cell-event-spacer');
return spacer;
}
function createEventElement(type, eventItem, options) {
var hash = getHashValue(eventItem);
var eventElement = document.createElement('div');
eventElement.classList.add('md-event-calendar-cell-event');
eventElement.classList.add('md-'+type.className);
eventElement.setAttribute('md-event-id', hash);
if (type.hasLabel === true) {
// do not show time for allDay events
if (type.allDay !== true) {
var dateLabelTime = document.createElement('span');
dateLabelTime.classList.add('md-event-calendar-cell-event-time');
dateLabelTime.textContent = $$mdEventCalendarUtil.formatEventTime(eventItem.start);
eventElement.appendChild(dateLabelTime);
}
var dateLabelText = document.createElement('span');
dateLabelText.textContent = eventItem[options.labelProperty];
eventElement.appendChild(dateLabelText);
}
options.selected.every(function (sel) {
if (sel.$$mdEventId !== undefined && sel.$$mdEventId === eventItem.$$mdEventId) {
eventElement.classList.add('md-selected');
return false;
}
return true;
});
return eventElement;
}
function getHashValue(value) {
if (angular.isObject(value)) {
return 'object_' + (value.$$mdEventId || (value.$$mdEventId = ++nextId));
}
return 'id_' + (++nextId);
}
function getEventDisplayType(item, options) {
var className;
var hasLabel;
var isStartThisDay = $$mdEventCalendarUtil.isSameDay(options.date, item.start);
var isEndThisDay = $$mdEventCalendarUtil.isValidDate(item.end) ? $$mdEventCalendarUtil.isSameDay(options.date, item.end) : true;
// single day event
if (isStartThisDay && (options.allDay || isEndThisDay)) {
className = 'single';
hasLabel = true;
// starts today on last day of week
} else if (isStartThisDay && options.dayOfWeek === 6) {
className = 'start-right';
hasLabel = true;
// starts today
} else if (isStartThisDay) {
className = 'start';
hasLabel = true;
// ends on sunday
} else if (isEndThisDay && options.dayOfWeek === 0) {
className = 'end-left';
hasLabel = true;
// last day of event
} else if (isEndThisDay) {
className = 'end';
hasLabel = options.isFirstDay; // add label if event is continuing from last month
// continuation on sunday
} else if (options.dayOfWeek === 0) {
className = 'continue-left';
hasLabel = true;
// continue on sat
} else if (options.dayOfWeek === 6) {
className = 'continue-right';
hasLabel = false;
// continuation
} else {
className = 'continue';
hasLabel = false;
}
return {
className: className,
hasLabel: hasLabel,
allDay: item.allDay || false
};
}
function getEventsInRange(date, events) {
return events.filter(function (item) {
return $$mdEventCalendarUtil.isDateWithinRange(date, item.start, item.end || item.start);
});
}
function setEventPlaces(events, dayOfWeek) {
var takenPlaces = [];
var sorted = events.sort(function (a, b) {
if (a.end > b.end) { return -1; }
if (a.end < b.end) { return 1; }
return 0;
});
// if not first day of week then get event palces. this is for dates that come from previous days
// otherwise reset places
sorted.forEach(function (item) {
if (dayOfWeek === 0) { item.$$place = undefined; }
else if (item.$$place !== undefined) { takenPlaces.push(item.$$place); }
});
// fill in places that have not been set
sorted.forEach(function(item) {
if (item.$$place === undefined) { item.$$place = getPlace(); }
});
// sort on places
return sorted.sort(function(a, b) {
if (a.$$place > b.$$place) { return 1; }
if (a.$$place < b.$$place) { return -1; }
return 0;
});
// find lowest place not taken
function getPlace() {
var place = 0;
while (takenPlaces.indexOf(place) !== -1) {
place++;
}
takenPlaces.push(place);
return place;
}
}
function createMonthElement() {
var monthBody = document.createDocumentFragment();
var headerRow = document.createElement('div');
headerRow.classList.add('md-event-calendar-month-row-header');
monthBody.appendChild(headerRow);
// add header day labels
$$mdEventCalendarUtil.days.forEach(function (name) {
var dayHeader = document.createElement('div');
dayHeader.classList.add('md-event-calendar-month-cell-header');
dayHeader.textContent = name.slice(0,3).toLowerCase();
headerRow.appendChild(dayHeader);
});
return monthBody;
}
function createRowElement() {
var row = document.createElement('div');
row.classList.add("md-event-calendar-month-row");
return row;
}
function filterCurrentCalendar(date, events) {
if (!events || !events.length) { return []; }
// back fill 6 days for posibility of last month days showing up
var start = $$mdEventCalendarUtil.getFirstDateOfMonth(date).getDate(-6);
// front fill 6 days for posibility of next month days showing up
var end = $$mdEventCalendarUtil.getFirstDateOfMonth(date).getDate(37);
return events.filter(function (item) {
if (!$$mdEventCalendarUtil.isValidDate(item.start)) { return false; }
if ($$mdEventCalendarUtil.isDateWithinRange(item.start, start, end)) { return true; }
if (!$$mdEventCalendarUtil.isValidDate(item.end)) { return false; }
if ($$mdEventCalendarUtil.isDateWithinRange(item.end, start, end)) { return true; }
return false;
}).sort(function(a, b) {
a = new Date(a.start);
b = new Date(b.start);
return a > b ? 1 : a < b ? -1 : 0;
});
}
function cleanEvent(item) {
item.$$hide = undefined;
item.$$place = undefined;
}
}
}());
(function(){"use strict";angular
.module('material.components.eventCalendar')
.directive('mdEventCalendarMonth', eventCalendarMonthDirective);
/**
* @ngdoc directive
* @name eventCalendarMonthDirective
* @module material.components.eventCalendar
*
* @restrict E
**/
/*@ngInject*/
function eventCalendarMonthDirective($$mdEventCalendarBuilder, $window, $$rAF, $timeout) {
var directive = {
restrict: 'E',
require: '^mdEventCalendar',
link: link
};
return directive;
function link(scope, element, attrs, ctrl) {
var showMoreData;
var mdEventCalendarCtrl = ctrl;
var rebuildThrottle = $$rAF.throttle(function () {
scope.$evalAsync(function () {
setAutoHeight();
element.toggleClass('fitted', mdEventCalendarCtrl.fitted);
buildView();
});
});
scope.$watch(function () { return mdEventCalendarCtrl.date; }, buildView);
scope.$watch(function () { return mdEventCalendarCtrl.events; }, function (newValue, oldValue) {
if (newValue === oldValue) { return; }
buildView();
}, true);
scope.$watch(function () { return mdEventCalendarCtrl.selectedEvents; }, function (newValue, oldValue) {
if (newValue === oldValue) { return; }
buildView();
}, true);
angular.element($window).on('resize', rebuildThrottle);
scope.$on('$destroy', function () {
angular.element($window).off('resize', rebuildThrottle);
});
$$rAF(function () {
setAutoHeight();
element.toggleClass('fitted', mdEventCalendarCtrl.fitted);
});
function setAutoHeight() {
if (!mdEventCalendarCtrl.autoHeight) { return; }
mdEventCalendarCtrl.fitted = true;
var top = element[0].getBoundingClientRect().top;
var height = $window.innerHeight - top - mdEventCalendarCtrl.offset;
element.css('height', height+'px');
}
hideCreateLinkOnEventItemHover();
// When user mouses over an existing event, add a class of md-event-hover to
// the month element, so that the create link is hidden from view.
function hideCreateLinkOnEventItemHover() {
element.on('mouseenter', function () {
element.on('mousemove', checkForEventItemRAF);
});
element.on('mouseleave', function () {
element.off('mousemove', checkForEventItemRAF);
element.removeClass('md-event-hover');
});
var lastHoverItem;
var checkForEventItemRAF = $$rAF.throttle(checkForEventItem);
function checkForEventItem(e) {
if (mdEventCalendarCtrl.isCreateDisabled() === true) { return; }
if (lastHoverItem === e.target) { return; }
lastHoverItem = e.target;
var targetIsEvent = !!e.target.getAttribute('md-event-id');
element.toggleClass('md-event-hover', targetIsEvent);
}
}
element.on('click', function (e) {
if (mdEventCalendarCtrl.isCreateDisabled() === true) { return; }
var eventId = e.target.getAttribute('md-event-id');
var showMore = e.target.getAttribute('md-show-more');
var showMoreClose = e.target.getAttribute('md-show-more-close');
var createEvent = e.target.getAttribute('md-create-event') !== null;
if (eventId) {
var eventItem = getIdFromHash(eventId);
scope.$apply(function () {
mdEventCalendarCtrl.selectEvent(e, getIdFromHash(eventId));
});
return;
}
removeShowMore(true);
if (showMore) {
addShowMore(new Date(showMore));
}
if (createEvent) {
var cellDate = getDateFromCreate(e.target);
if (cellDate !== undefined) {
scope.$apply(function () {
mdEventCalendarCtrl.createEventClick(e, cellDate);
});
}
}
});
function getDateFromCreate(el) {
var dateString = el.getAttribute('md-date');
while (dateString === null && el.nodeName !== 'MD-EVENT-CALENDAR-MONTH') {
el = el.parentNode;
dateString = el.getAttribute('md-date');
}
return dateString === null ? undefined : new Date(dateString);
}
function buildView() {
var cellHeight;
if (mdEventCalendarCtrl.fitted) {
cellHeight = element[0].offsetHeight / 5;
} else {
cellHeight = mdEventCalendarCtrl.$element[0].offsetWidth / 7;
}
var monthElement = $$mdEventCalendarBuilder.month({
date: mdEventCalendarCtrl.date,
events: mdEventCalendarCtrl.events,
selected: mdEventCalendarCtrl.selectedEvents,
labelProperty: mdEventCalendarCtrl.labelProperty,
showCreateLink: mdEventCalendarCtrl.showCreateLink,
cellHeight: cellHeight
});
element.empty();
element.append(monthElement);
buildShowMore();
}
function addShowMore(date) {
showMoreData = {
date: date
};
buildShowMore(true);
}
function buildShowMore(animate) {
if (showMoreData === undefined) { return; }
if (showMoreData.element) {
angular.element(showMoreData.element).remove();
showMoreData.element = undefined;
}
var cell = getCellFromDate(showMoreData.date);
var showMoreFragment = $$mdEventCalendarBuilder.showMore({
date: showMoreData.date,
selected: mdEventCalendarCtrl.selectedEvents,
events: mdEventCalendarCtrl.events,
labelProperty: mdEventCalendarCtrl.labelProperty,
cell: cell
});
element.append(showMoreFragment);
showMoreData.element = element[0].lastChild;
positonShowMore();
if (animate) {
// add class after element added so animation
$timeout(function () {
angular.element(showMoreData.element).addClass('show');
}, 0);
} else {
angular.element(showMoreData.element).addClass('no-transition');
angular.element(showMoreData.element).addClass('show');
}
}
function positonShowMore() {
var showMoreBounds = showMoreData.element.getBoundingClientRect();
var minTop = $window.innerHeight - showMoreBounds.height;
var minLeft = $window.innerWidth - showMoreBounds.width;
var leftDiff = showMoreBounds.left - minLeft;
if (showMoreBounds.top > minTop) {
showMoreData.element.style.top = minTop+'px';
}
if (leftDiff > 0) {
showMoreData.element.style.left = minLeft+'px';
// offset date
leftDiff -= 10;
if (leftDiff > 0) {
showMoreData.element.querySelector('.md-event-calendar-show-more-date-label').style.marginLeft = leftDiff+'px';
}
}
}
function getCellFromDate(date) {
return element[0].querySelector('[md-date="'+date+'"]');
}
function removeShowMore(animate) {
if (!showMoreData) { return; }
var el = showMoreData.element;
showMoreData = undefined;
if (animate) {
angular.element(el).removeClass('no-transition');
$timeout(function () {
angular.element(el).removeClass('show');
}, 0);
$timeout(function () {
el.remove();
el = undefined;
}, 400);
} else {
el.remove();
el = undefined;
}
}
function getClosestCell(el) {
var target = angular.element(el).parent();
while (target.hasClass('md-event-calendar-month-cell') === false) {
target = target.parent();
}
return target;
}
function getIdFromHash(id) {
return parseInt(id.replace('object_', ''));
}
}
}
}());
(function(){"use strict";angular
.module('material.components.eventCalendar')
.directive('mdEventCalendarNext', mdEventCalendarNextDirective);
/**
* @ngdoc directive
* @name mdEventCalendarNextDirective
* @module material.components.eventCalendar
*
* @restrict E
**/
function mdEventCalendarNextDirective() {
var directive = {
restrict: 'E',
require: '^mdEventCalendar',
template: '<md-button class="md-icon-button" ng-click="mdEventCalendar.nextMonth()" aria-label="mext month">'+
'<div class="md-arrow" ng-include="\'icons/ic_keyboard_arrow_right_black_24px.svg\'"></div>'+
'</md-button>'
};
return directive;
}
}());
(function(){"use strict";angular
.module('material.components.eventCalendar')
.directive('mdEventCalendarPrev', mdEventCalendarPrevDirective);
/**
* @ngdoc directive
* @name mdEventCalendarPrevDirective
* @module material.components.eventCalendar
*
* @restrict E
**/
function mdEventCalendarPrevDirective() {
var directive = {
restrict: 'E',
require: '^mdEventCalendar',
template: '<md-button class="md-icon-button" ng-click="mdEventCalendar.previousMonth()" aria-label="previous month">'+
'<div class="md-arrow md-left-arrow" ng-include="\'icons/ic_keyboard_arrow_right_black_24px.svg\'"></div>'+
'</md-button>'
};
return directive;
}
}());
(function(){"use strict";angular
.module('material.components.eventCalendar')
.directive('mdEventCalendarTitle', mdEventCalendarTitleDirective);
/**
* @ngdoc directive
* @name mdEventCalendarTitleDirective
* @module material.components.eventCalendar
*
* @restrict E
**/
function mdEventCalendarTitleDirective() {
var directive = {
restrict: 'E',
require: '^mdEventCalendar',
template: '<div class="md-event-calendar-header-label">{{mdEventCalendar.monthDisplay + " " + mdEventCalendar.yearDisplay}}</div>',
link: link
};
return directive;
function link(scope, element, attrs, ctrl) {
scope.mdEventCalendar = ctrl;
}
}
}());
(function(){"use strict";angular
.module('material.components.eventCalendar')
.directive('mdEventCalendarToday', mdEventCalendarTodayDirective);
/**
* @ngdoc directive
* @name mdEventCalendarTodayDirective
* @module material.components.eventCalendar
*
* @restrict E
**/
function mdEventCalendarTodayDirective() {
var directive = {
restrict: 'E',
require: '^mdEventCalendar',
template: '<md-button class="md-button" ng-click="mdEventCalendar.setToday()" aria-label="today" ng-disabled="mdEventCalendar.isTodayDisabled">Today</md-button>'
};
return directive;
}
}());
(function(){"use strict";angular
.module('material.components.eventCalendar')
.factory('$$mdEventCalendarUtil', utilService);
function utilService($injector, $locale, $filter) {
var $mdDateLocale = $injector.has('$mdDateLocale') ? $injector.get('$mdDateLocale') : undefined;
var dateFilter = $filter('date');
var months = $mdDateLocale ? $mdDateLocale.months : $locale.DATETIME_FORMATS.MONTH;
var shortMonths = $mdDateLocale ? $mdDateLocale.shortMonths : $locale.DATETIME_FORMATS.SHORTMONTH;
var days = $mdDateLocale ? $mdDateLocale.days : $locale.DATETIME_FORMATS.DAY;
var shortDays = $mdDateLocale ? $mdDateLocale.shortDays : $locale.DATETIME_FORMATS.SHORTDAY.map(function(day) {
return day.substring(0, 1);
});
// The default dates are simply the numbers 1 through 31.
var defaultDates = Array(32);
for (var i = 1; i <= 31; i++) {
defaultDates[i] = i;
}
var service = {
months: months,
shortMonths: shortMonths,
days: days,
dates: $mdDateLocale ? $mdDateLocale.dates : defaultDates,
shortDays: shortDays,
isValidDate: isValidDate,
createDateAtMidnight: createDateAtMidnight,
getDateInNextMonth: getDateInNextMonth,
getDateInPreviousMonth: getDateInPreviousMonth,
getFirstDateOfMonth: getFirstDateOfMonth,
getNumberOfDaysInMonth: getNumberOfDaysInMonth,
weekNumberFormatter: $mdDateLocale ? $mdDateLocale.weekNumberFormatter : weekNumberFormatter,
isSameMonthAndYear: isSameMonthAndYear,
isSameDay: isSameDay,
isDateWithinRange: isDateWithinRange,
formatEventTime: formatEventTime
};
return service;
function formatEventTime(date) {
return dateFilter(date, 'h:mm a');
}
/**
* Checks if a date is within a min and max range, ignoring the time component.
* If minDate or maxDate are not dates, they are ignored.
* @param {Date} date
* @param {Date} minDate
* @param {Date} maxDate
*/
function isDateWithinRange(date, minDate, maxDate) {
var dateAtMidnight = createDateAtMidnight(date);
var minDateAtMidnight = isValidDate(minDate) ? createDateAtMidnight(minDate) : null;
var maxDateAtMidnight = isValidDate(maxDate) ? createDateAtMidnight(maxDate) : null;
return (!minDateAtMidnight || minDateAtMidnight <= dateAtMidnight) &&
(!maxDateAtMidnight || maxDateAtMidnight >= dateAtMidnight);
}
/**
* Default week number formatter.
* @param number
* @returns {string}
*/
function weekNumberFormatter(number) {
return 'Week ' + number;
}
/**
* Sets a date's time to midnight.
* @param {Date} date
*/
function setDateTimeToMidnight(date) {
if (isValidDate(date)) {
date.setHours(0, 0, 0, 0);
}
}
/**
* Checks whether a date is valid.
* @param {Date} date
* @return {boolean} Whether the date is a valid Date.
*/
function isValidDate(date) {
return date && date.getTime && !isNaN(date.getTime());
}
/**
* Creates a date with the time set to midnight.
* Drop-in replacement for two forms of the Date constructor:
* 1. No argument for Date representing now.
* 2. Single-argument value representing number of seconds since Unix Epoch
* or a Date object.
* @param {number|Date=} opt_value
* @return {Date} New date with time set to midnight.
*/
function createDateAtMidnight(opt_value) {
var date;
if (opt_value === undefined) {
date = new Date();
} else {
date = new Date(opt_value);
}
setDateTimeToMidnight(date);
return date;
}
/**
* Get an arbitrary date in the month after the given date's month.
* @param date
* @returns {Date}
*/
function getDateInNextMonth(date) {
return new Date(date.getFullYear(), date.getMonth() + 1, 1);
}
/**
* Get an arbitrary date in the month before the given date's month.
* @param date
* @returns {Date}
*/
function getDateInPreviousMonth(date) {
return new Date(date.getFullYear(), date.getMonth() - 1, 1);
}
/**
* Gets the first day of the month for the given date's month.
* @param {Date} date
* @returns {Date}
*/
function getFirstDateOfMonth(date) {
return new Date(date.getFullYear(), date.getMonth(), 1);
}
/**
* Gets the number of days in the month for the given date's month.
* @param date
* @returns {number}
*/
function getNumberOfDaysInMonth(date) {
return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();
}
/**
* Gets whether two dates have the same month and year.
* @param {Date} d1
* @param {Date} d2
* @returns {boolean}
*/
function isSameMonthAndYear(d1, d2) {
return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth();
}
/**
* Gets whether two dates are the same day (not not necesarily the same time).
* @param {Date} d1
* @param {Date} d2
* @returns {boolean}
*/
function isSameDay(d1, d2) {
return d1.getDate() == d2.getDate() && isSameMonthAndYear(d1, d2);
}
}
}());
angular.module("material.components.eventCalendar").run(["$templateCache", function($templateCache) {$templateCache.put("icons/ic_close_black_24px.svg","<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\n</svg>");
$templateCache.put("icons/ic_keyboard_arrow_right_black_24px.svg","<svg fill=\"#EEEEEE\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"/>\n <path d=\"M0-.25h24v24H0z\" fill=\"none\"/>\n</svg>\n");}]);
+1
-1
{
"name": "angular-material-event-calendar",
"version": "0.1.1",
"version": "0.1.2",
"description": "Angular material event calander component",

@@ -5,0 +5,0 @@ "main": [

@@ -101,2 +101,11 @@ md-event-calendar:not(._md) md-event-calendar-header {

md-event-calendar .md-event-calendar-month-cell-content .md-event-calendar-create-link {
opacity: 0; }
md-event-calendar .md-event-calendar-month-cell-content:hover .md-event-calendar-create-link {
opacity: 1; }
md-event-calendar md-event-calendar-month.md-event-hover .md-event-calendar-month-cell-content .md-event-calendar-create-link {
opacity: 0; }
md-event-calendar md-event-calendar-month.fitted {

@@ -176,7 +185,4 @@ display: -webkit-box;

cursor: pointer;
opacity: 0;
-webkit-transition: opacity 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
transition: opacity 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content:hover .md-event-calendar-create-link {
opacity: 1; }
md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label {

@@ -183,0 +189,0 @@ font-size: 13px;

@@ -759,3 +759,29 @@ (function(){"use strict";/**

hideCreateLinkOnEventItemHover();
// When user mouses over an existing event, add a class of md-event-hover to
// the month element, so that the create link is hidden from view.
function hideCreateLinkOnEventItemHover() {
element.on('mouseenter', function () {
element.on('mousemove', checkForEventItemRAF);
});
element.on('mouseleave', function () {
element.off('mousemove', checkForEventItemRAF);
element.removeClass('md-event-hover');
});
var lastHoverItem;
var checkForEventItemRAF = $$rAF.throttle(checkForEventItem);
function checkForEventItem(e) {
if (mdEventCalendarCtrl.isCreateDisabled() === true) { return; }
if (lastHoverItem === e.target) { return; }
lastHoverItem = e.target;
var targetIsEvent = !!e.target.getAttribute('md-event-id');
element.toggleClass('md-event-hover', targetIsEvent);
}
}
element.on('click', function (e) {

@@ -762,0 +788,0 @@ if (mdEventCalendarCtrl.isCreateDisabled() === true) { return; }

@@ -1,1 +0,1 @@

md-event-calendar:not(._md) md-event-calendar-header{color:#666;background:#fff;border-color:#ddd}md-event-calendar:not(._md) md-event-calendar-header md-event-calendar-next .md-arrow svg,md-event-calendar:not(._md) md-event-calendar-header md-event-calendar-prev .md-arrow svg{fill:#666}md-event-calendar:not(._md) .md-button:not([disabled]){color:#333}md-event-calendar:not(._md) .md-button:not([disabled]):hover{background:hsla(0,0%,62%,.2)}md-event-calendar:not(._md) .md-button[disabled]{color:#ccc}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row-header{color:#999;background:#fff;border-color:#ddd}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row{background:#fff;border-color:#ddd}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell,md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell-divider{border-color:#ddd}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link{color:#4189b8}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label{color:#999}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-show-more-link{color:#4189b8}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.different-month{background:#f5f5f5}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today{box-shadow:inset 0 0 0 1px #aaa}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label{color:#666}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today .md-event-calendar-month-cell-divider{border-color:#aaa}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell:last-child{border-color:#ddd}md-event-calendar:not(._md) .md-event-calendar-cell-event{background:#ddd;color:#666}md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected{color:#eee;background:#888}md-event-calendar:not(._md) .md-event-calendar-cell-event.md-continue-left:after,md-event-calendar:not(._md) .md-event-calendar-cell-event.md-end-left:after{border-right-color:#ddd}md-event-calendar:not(._md) .md-event-calendar-cell-event.md-continue-right:after,md-event-calendar:not(._md) .md-event-calendar-cell-event.md-start-right:after{border-left-color:#ddd}md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-continue-left:after,md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-end-left:after{border-right-color:#888}md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-continue-right:after,md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-start-right:after{border-left-color:#888}md-event-calendar:not(._md) .md-event-calendar-show-more-container .md-event-calendar-show-more-date-label{color:#999}md-event-calendar:not(._md) .md-event-calendar-show-more-container .md-event-calendar-show-more-close svg{fill:#999}md-event-calendar{display:block}md-event-calendar md-event-calendar-header{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;display:-webkit-box;display:-ms-flexbox;display:flex;line-height:64px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-style:solid;border-width:1px 1px 0}md-event-calendar md-event-calendar-header.md-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}md-event-calendar md-event-calendar-header md-event-calendar-title{display:block;min-width:170px;text-align:center;font-size:20px}md-event-calendar md-event-calendar-header md-event-calendar-next,md-event-calendar md-event-calendar-header md-event-calendar-prev{display:block}md-event-calendar md-event-calendar-header md-event-calendar-next .md-arrow,md-event-calendar md-event-calendar-header md-event-calendar-prev .md-arrow{cursor:pointer;height:24px;width:24px}md-event-calendar md-event-calendar-header md-event-calendar-next .md-arrow.md-left-arrow,md-event-calendar md-event-calendar-header md-event-calendar-prev .md-arrow.md-left-arrow{-webkit-transform:rotate(180deg);transform:rotate(180deg)}md-event-calendar md-event-calendar-month.fitted{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}md-event-calendar md-event-calendar-month .md-event-calendar-month-row-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-height:36px;height:36px;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;font-size:12px;font-weight:500;padding-bottom:12px;border-style:solid;border-width:0 1px 1px}md-event-calendar md-event-calendar-month .md-event-calendar-month-row-header .md-event-calendar-month-cell-header{-webkit-box-flex:1;-ms-flex:1;flex:1;padding-left:6px}md-event-calendar md-event-calendar-month .md-event-calendar-month-row{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;border-style:solid;border-width:0 0 1px}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell{position:relative;-webkit-box-flex:1;-ms-flex:1;flex:1}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-spacer{margin-top:100%}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-divider{position:absolute;top:0;bottom:0;left:0;border-style:solid;border-width:0 1px 0 0}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content{position:absolute;top:0;bottom:0;left:0;right:0}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link{-ms-flex-item-align:center;align-self:center;text-transform:uppercase;font-size:14px;font-weight:500;padding-right:12px;cursor:pointer;opacity:0;-webkit-transition:opacity .4s cubic-bezier(.25,.8,.25,1);transition:opacity .4s cubic-bezier(.25,.8,.25,1)}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content:hover .md-event-calendar-create-link{opacity:1}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label{font-size:13px;padding:8px;-webkit-box-flex:1;-ms-flex:1;flex:1}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-spacer{margin:4px 0;height:23px}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-show-more-link{font-size:13px;padding:4px;padding-left:8px;cursor:pointer}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell:last-child{border-style:solid;border-width:0 1px 0 0}md-event-calendar .md-event-calendar-cell-event{font-size:12px;min-height:15px;padding:4px;cursor:pointer}md-event-calendar .md-event-calendar-cell-event.md-single{margin:4px;border-radius:2px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}md-event-calendar .md-event-calendar-cell-event.md-start{margin:4px 0 4px 4px;border-radius:2px 0 0 2px;white-space:nowrap;z-index:1;position:relative}md-event-calendar .md-event-calendar-cell-event.md-start-right{margin:4px 13px 4px 4px;border-radius:2px 0 0 2px}md-event-calendar .md-event-calendar-cell-event.md-end{margin:4px 4px 4px 0;border-radius:0 2px 2px 0}md-event-calendar .md-event-calendar-cell-event.md-end-left{margin:4px 4px 4px 13px;border-radius:0 2px 2px 0}md-event-calendar .md-event-calendar-cell-event.md-continue,md-event-calendar .md-event-calendar-cell-event.md-continue-both{margin:4px 0;border-radius:0}md-event-calendar .md-event-calendar-cell-event.md-continue-right{margin:4px 13px 4px 0;border-radius:0;white-space:nowrap}md-event-calendar .md-event-calendar-cell-event.md-continue-left{margin:4px 0 4px 13px;border-radius:0;white-space:nowrap}md-event-calendar .md-event-calendar-cell-event.md-continue-right:after,md-event-calendar .md-event-calendar-cell-event.md-start-right:after{content:'';position:absolute;height:0;width:0;right:0;margin-top:-4px;border-top:12px solid transparent;border-bottom:11.5px solid transparent;border-left:13px solid #eee}md-event-calendar .md-event-calendar-cell-event.md-continue-left:after,md-event-calendar .md-event-calendar-cell-event.md-end-left:after{content:'';position:absolute;height:0;width:0;left:0;margin-top:-4px;border-top:12px solid transparent;border-bottom:11.5px solid transparent;border-right:13px solid #eee}md-event-calendar .md-event-calendar-cell-event .md-event-calendar-cell-event-time{font-weight:500;padding-right:6px;pointer-events:none}md-event-calendar .md-event-calendar-cell-event span{pointer-events:none}md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-end,md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-single,md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-start-right{padding-left:16px;margin-left:0}md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-end,md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-end-left,md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-single{margin-right:0}md-event-calendar .md-event-calendar-show-more-container{opacity:0;position:absolute;top:0;left:1px;width:180px;background:#fff;padding:12px;padding-top:7px;border-radius:2px;z-index:2;box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-content{position:relative}md-event-calendar .md-event-calendar-show-more-container.show{opacity:1}md-event-calendar .md-event-calendar-show-more-container.show:not(.no-transition){-webkit-transition:opacity .4s cubic-bezier(.25,.8,.25,1);transition:opacity .4s cubic-bezier(.25,.8,.25,1)}md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-close{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:6px;right:7px;width:16px;height:16px;cursor:pointer}md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-close svg{pointer-events:none}md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-date-label{font-size:13px;padding:6px;margin-left:-11px;margin-top:-5px}md-event-calendar.md-create-disabled md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link{display:none}
md-event-calendar:not(._md) md-event-calendar-header{color:#666;background:#fff;border-color:#ddd}md-event-calendar:not(._md) md-event-calendar-header md-event-calendar-next .md-arrow svg,md-event-calendar:not(._md) md-event-calendar-header md-event-calendar-prev .md-arrow svg{fill:#666}md-event-calendar:not(._md) .md-button:not([disabled]){color:#333}md-event-calendar:not(._md) .md-button:not([disabled]):hover{background:hsla(0,0%,62%,.2)}md-event-calendar:not(._md) .md-button[disabled]{color:#ccc}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row-header{color:#999;background:#fff;border-color:#ddd}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row{background:#fff;border-color:#ddd}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell,md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell-divider{border-color:#ddd}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link{color:#4189b8}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label{color:#999}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-show-more-link{color:#4189b8}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.different-month{background:#f5f5f5}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today{box-shadow:inset 0 0 0 1px #aaa}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label{color:#666}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today .md-event-calendar-month-cell-divider{border-color:#aaa}md-event-calendar:not(._md) md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell:last-child{border-color:#ddd}md-event-calendar:not(._md) .md-event-calendar-cell-event{background:#ddd;color:#666}md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected{color:#eee;background:#888}md-event-calendar:not(._md) .md-event-calendar-cell-event.md-continue-left:after,md-event-calendar:not(._md) .md-event-calendar-cell-event.md-end-left:after{border-right-color:#ddd}md-event-calendar:not(._md) .md-event-calendar-cell-event.md-continue-right:after,md-event-calendar:not(._md) .md-event-calendar-cell-event.md-start-right:after{border-left-color:#ddd}md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-continue-left:after,md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-end-left:after{border-right-color:#888}md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-continue-right:after,md-event-calendar:not(._md) .md-event-calendar-cell-event.md-selected.md-start-right:after{border-left-color:#888}md-event-calendar:not(._md) .md-event-calendar-show-more-container .md-event-calendar-show-more-date-label{color:#999}md-event-calendar:not(._md) .md-event-calendar-show-more-container .md-event-calendar-show-more-close svg{fill:#999}md-event-calendar{display:block}md-event-calendar md-event-calendar-header{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;display:-webkit-box;display:-ms-flexbox;display:flex;line-height:64px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-style:solid;border-width:1px 1px 0}md-event-calendar md-event-calendar-header.md-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}md-event-calendar md-event-calendar-header md-event-calendar-title{display:block;min-width:170px;text-align:center;font-size:20px}md-event-calendar md-event-calendar-header md-event-calendar-next,md-event-calendar md-event-calendar-header md-event-calendar-prev{display:block}md-event-calendar md-event-calendar-header md-event-calendar-next .md-arrow,md-event-calendar md-event-calendar-header md-event-calendar-prev .md-arrow{cursor:pointer;height:24px;width:24px}md-event-calendar md-event-calendar-header md-event-calendar-next .md-arrow.md-left-arrow,md-event-calendar md-event-calendar-header md-event-calendar-prev .md-arrow.md-left-arrow{-webkit-transform:rotate(180deg);transform:rotate(180deg)}md-event-calendar .md-event-calendar-month-cell-content .md-event-calendar-create-link{opacity:0}md-event-calendar .md-event-calendar-month-cell-content:hover .md-event-calendar-create-link{opacity:1}md-event-calendar md-event-calendar-month.md-event-hover .md-event-calendar-month-cell-content .md-event-calendar-create-link{opacity:0}md-event-calendar md-event-calendar-month.fitted{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}md-event-calendar md-event-calendar-month .md-event-calendar-month-row-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-height:36px;height:36px;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;font-size:12px;font-weight:500;padding-bottom:12px;border-style:solid;border-width:0 1px 1px}md-event-calendar md-event-calendar-month .md-event-calendar-month-row-header .md-event-calendar-month-cell-header{-webkit-box-flex:1;-ms-flex:1;flex:1;padding-left:6px}md-event-calendar md-event-calendar-month .md-event-calendar-month-row{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;border-style:solid;border-width:0 0 1px}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell{position:relative;-webkit-box-flex:1;-ms-flex:1;flex:1}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-spacer{margin-top:100%}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-divider{position:absolute;top:0;bottom:0;left:0;border-style:solid;border-width:0 1px 0 0}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content{position:absolute;top:0;bottom:0;left:0;right:0}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link{-ms-flex-item-align:center;align-self:center;text-transform:uppercase;font-size:14px;font-weight:500;padding-right:12px;cursor:pointer;-webkit-transition:opacity .4s cubic-bezier(.25,.8,.25,1);transition:opacity .4s cubic-bezier(.25,.8,.25,1)}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label{font-size:13px;padding:8px;-webkit-box-flex:1;-ms-flex:1;flex:1}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-spacer{margin:4px 0;height:23px}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-show-more-link{font-size:13px;padding:4px;padding-left:8px;cursor:pointer}md-event-calendar md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell:last-child{border-style:solid;border-width:0 1px 0 0}md-event-calendar .md-event-calendar-cell-event{font-size:12px;min-height:15px;padding:4px;cursor:pointer}md-event-calendar .md-event-calendar-cell-event.md-single{margin:4px;border-radius:2px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}md-event-calendar .md-event-calendar-cell-event.md-start{margin:4px 0 4px 4px;border-radius:2px 0 0 2px;white-space:nowrap;z-index:1;position:relative}md-event-calendar .md-event-calendar-cell-event.md-start-right{margin:4px 13px 4px 4px;border-radius:2px 0 0 2px}md-event-calendar .md-event-calendar-cell-event.md-end{margin:4px 4px 4px 0;border-radius:0 2px 2px 0}md-event-calendar .md-event-calendar-cell-event.md-end-left{margin:4px 4px 4px 13px;border-radius:0 2px 2px 0}md-event-calendar .md-event-calendar-cell-event.md-continue,md-event-calendar .md-event-calendar-cell-event.md-continue-both{margin:4px 0;border-radius:0}md-event-calendar .md-event-calendar-cell-event.md-continue-right{margin:4px 13px 4px 0;border-radius:0;white-space:nowrap}md-event-calendar .md-event-calendar-cell-event.md-continue-left{margin:4px 0 4px 13px;border-radius:0;white-space:nowrap}md-event-calendar .md-event-calendar-cell-event.md-continue-right:after,md-event-calendar .md-event-calendar-cell-event.md-start-right:after{content:'';position:absolute;height:0;width:0;right:0;margin-top:-4px;border-top:12px solid transparent;border-bottom:11.5px solid transparent;border-left:13px solid #eee}md-event-calendar .md-event-calendar-cell-event.md-continue-left:after,md-event-calendar .md-event-calendar-cell-event.md-end-left:after{content:'';position:absolute;height:0;width:0;left:0;margin-top:-4px;border-top:12px solid transparent;border-bottom:11.5px solid transparent;border-right:13px solid #eee}md-event-calendar .md-event-calendar-cell-event .md-event-calendar-cell-event-time{font-weight:500;padding-right:6px;pointer-events:none}md-event-calendar .md-event-calendar-cell-event span{pointer-events:none}md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-end,md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-single,md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-start-right{padding-left:16px;margin-left:0}md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-end,md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-end-left,md-event-calendar .md-event-calendar-show-more-content .md-event-calendar-cell-event.md-single{margin-right:0}md-event-calendar .md-event-calendar-show-more-container{opacity:0;position:absolute;top:0;left:1px;width:180px;background:#fff;padding:12px;padding-top:7px;border-radius:2px;z-index:2;box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-content{position:relative}md-event-calendar .md-event-calendar-show-more-container.show{opacity:1}md-event-calendar .md-event-calendar-show-more-container.show:not(.no-transition){-webkit-transition:opacity .4s cubic-bezier(.25,.8,.25,1);transition:opacity .4s cubic-bezier(.25,.8,.25,1)}md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-close{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:6px;right:7px;width:16px;height:16px;cursor:pointer}md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-close svg{pointer-events:none}md-event-calendar .md-event-calendar-show-more-container .md-event-calendar-show-more-date-label{font-size:13px;padding:6px;margin-left:-11px;margin-top:-5px}md-event-calendar.md-create-disabled md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link{display:none}

@@ -1,1 +0,1 @@

!function(){"use strict";function e(e,n,a){var r;e.has("$mdThemingProvider")?(r=e.get("$mdThemingProvider"),r.registerStyles(a)):n.decorator("$$rAF",["$delegate",t])}function t(e){return e.throttle=function(t){var n,a,r,d;return function(){n=arguments,d=this,r=t,a||(a=!0,e(function(){r.apply(d,Array.prototype.slice.call(n)),a=!1}))}},e}e.$inject=["$injector","$provide","EVENT_CALENDAR_THEME"],angular.module("material.components.eventCalendar",[]).config(e)}(),function(){"use strict";angular.module("material.components.eventCalendar").run(["$templateCache",function(e){e.put("icons/ic_close_black_24px.svg",'<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">\n <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>\n <path d="M0 0h24v24H0z" fill="none"/>\n</svg>'),e.put("icons/ic_keyboard_arrow_right_black_24px.svg",'<svg fill="#EEEEEE" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">\n <path d="M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"/>\n <path d="M0-.25h24v24H0z" fill="none"/>\n</svg>\n')}])}(),function(){"use strict";angular.module("material.components.eventCalendar").constant("EVENT_CALENDAR_THEME","md-event-calendar._md md-event-calendar-header {\n color: '{{foreground-1}}';\n background: '{{background-hue-1}}';\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-header md-event-calendar-next .md-arrow svg, md-event-calendar._md md-event-calendar-header md-event-calendar-prev .md-arrow svg {\n fill: '{{foreground-2}}'; }\n\nmd-event-calendar._md md-event-calendar-month .md-event-calendar-month-row-header {\n color: '{{foreground-3}}';\n background: '{{background-hue-1}}';\n border-color: '{{foreground-4}}'; }\n\nmd-event-calendar._md md-event-calendar-month .md-event-calendar-month-row {\n background: '{{background-hue-1}}';\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell-divider {\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell {\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link {\n color: '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label {\n color: '{{foreground-3}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-show-more-link {\n color: '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.different-month {\n background: '{{background-hue-2}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today {\n box-shadow: inset 0px 0px 0px 1px '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label {\n color: '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell:last-child {\n border-color: '{{foreground-4}}'; }\n\nmd-event-calendar._md .md-event-calendar-cell-event {\n background: '{{foreground-4}}';\n color: '{{background-900}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-selected {\n color: #EEE;\n background: '{{primary-default}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-continue-left:after, md-event-calendar._md .md-event-calendar-cell-event.md-end-left:after {\n border-right-color: '{{foreground-4}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-continue-right:after, md-event-calendar._md .md-event-calendar-cell-event.md-start-right:after {\n border-left-color: '{{foreground-4}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-continue-left:after, md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-end-left:after {\n border-right-color: '{{primary-default}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-continue-right:after, md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-start-right:after {\n border-left-color: '{{primary-default}}'; }\n\nmd-event-calendar._md .md-event-calendar-show-more-container .md-event-calendar-show-more-date-label {\n color: '{{foreground-3}}'; }\n\nmd-event-calendar._md .md-event-calendar-show-more-container .md-event-calendar-show-more-close svg {\n fill: '{{foreground-1}}'; }\n\nmd-event-calendar._md.md-primary md-event-calendar-header {\n color: '{{background-100}}';\n background: '{{primary-default}}'; }\n md-event-calendar._md.md-primary md-event-calendar-header md-event-calendar-next .md-arrow svg, md-event-calendar._md.md-primary md-event-calendar-header md-event-calendar-prev .md-arrow svg {\n fill: '{{background-100}}'; }\n\nmd-event-calendar._md.md-primary md-event-calendar-month .md-event-calendar-month-row-header {\n color: '{{background-100}}';\n background: '{{primary-default}}'; }\n")}(),function(){"use strict";function e(e,t){function n(e,n){var a=n.mdEventClick?t(n.mdEventClick,null,!0):void 0,d=n.mdCreateEventClick?t(n.mdCreateEventClick,null,!0):void 0,l=n.mdCreateDisabled?t(n.mdCreateDisabled):void 0;return e.append("<md-event-calendar-month></md-event-calendar-month>"),function(e,t,o,c){function i(){var e=f.$viewValue||f.$modelValue||[];h.selectedEvents=[].concat(e)}function m(t,n){o.mdEventClick&&a(e.$parent,{$event:t,$selectedEvent:n})}function s(t,n){o.mdCreateEventClick&&d(e.$parent,{$event:t,$date:n})}function v(){return u}var u=!1,h=c[0],f=c[1];r&&(t.addClass("_md"),r(t)),h.isCreateDisabled=v,h.callEventClick=m,h.createEventClick=s,f&&(f.$render=i,h.ngModelCtrl=f),l?e.$watch(function(){return l(e.$parent)},function(e){u=e,t.toggleClass("md-create-disabled",e)}):void 0!==n.mdCreateDisabled&&(u=!0,t.addClass("md-create-disabled"))}}function a(e,t,n){function a(){o.date=e.getDateInNextMonth(o.date),o.monthDisplay=e.months[o.date.getMonth()],o.yearDisplay=o.date.getFullYear(),o.isTodayDisabled=o.date.getMonth()===(new Date).getMonth()}function r(){o.date=e.getDateInPreviousMonth(o.date),o.monthDisplay=e.months[o.date.getMonth()],o.yearDisplay=o.date.getFullYear(),o.isTodayDisabled=o.date.getMonth()===(new Date).getMonth()}function d(){o.date=new Date,o.monthDisplay=e.months[o.date.getMonth()],o.yearDisplay=o.date.getFullYear(),o.isTodayDisabled=!0}function l(e,t){var n=o.events.filter(function(e){return e.$$mdEventId===t});return o.ngModelCtrl&&(o.ngModelCtrl.$setViewValue(n[0]),o.ngModelCtrl.$render()),o.callEventClick(e,n[0]),!0}var o=this;o.$element=t,o.labelProperty=n.mdLabel||"title",o.selectedEvents=[],o.today=e.createDateAtMidnight(),o.date=e.createDateAtMidnight(),o.isToday=e.isSameDay(o.date,new Date),o.monthDisplay=e.months[o.date.getMonth()],o.yearDisplay=o.date.getFullYear(),o.isTodayDisabled=!0,o.showCreateLink=void 0!==n.mdShowCreateLink&&"false"!==n.mdShowCreateLink,o.nextMonth=a,o.previousMonth=r,o.selectEvent=l,o.setToday=d,o.autoHeight=void 0!==n.autoHeight,o.fitted=void 0!==n.fitted,o.offset=o.autoHeight===!1||""===n.autoHeight||isNaN(n.autoHeight.replace("px",""))?0:parseInt(n.autoHeight.replace("px",""))}a.$inject=["$$mdEventCalendarUtil","$element","$attrs"];var r=e.has("$mdTheming")?e.get("$mdTheming"):void 0,d={restrict:"E",require:["mdEventCalendar","?ngModel"],scope:{events:"=mdEvents"},compile:n,controller:a,controllerAs:"mdEventCalendar",bindToController:!0};return d}e.$inject=["$injector","$parse"],angular.module("material.components.eventCalendar").directive("mdEventCalendar",e)}(),function(){"use strict";function e(e,n){function a(t){var a=t.date,d=t.selected||[],l=t.events?r(a,t.events):[],o=t.labelProperty,c=document.createDocumentFragment(),i=document.createElement("div");i.classList.add("md-event-calendar-show-more-container");var s=document.createElement("div");s.classList.add("md-event-calendar-show-more-content");var v=document.createElement("div");v.classList.add("md-event-calendar-show-more-date-label"),v.textContent=e.dates[a.getDate()];var u=document.createElement("div");u.classList.add("md-event-calendar-show-more-close"),u.innerHTML=n.get("icons/ic_close_black_24px.svg"),u.setAttribute("md-show-more-close","true"),i.appendChild(v),i.appendChild(u),i.appendChild(s),c.appendChild(i),l.forEach(function(t){var n,r=e.isSameDay(a,t.start),l=!e.isValidDate(t.end)||e.isSameDay(a,t.end),c={labelProperty:o,selected:d};n=r&&l?m({className:"single",hasLabel:!0},t,c):r?m({className:"start-right",hasLabel:!0},t,c):l?m({className:"end-left",hasLabel:!0},t,c):m({className:"continue",hasLabel:!0},t,c),s.appendChild(n)});var h=(t.cell.getBoundingClientRect(),t.cell.offsetTop),f=t.cell.offsetLeft;return i.style.top=h+"px",i.style.left=f+"px",c}function r(t,n){return n&&n.length?n.filter(function(n){return e.isDateWithinRange(t,n.start,n.end||n.start)}).sort(function(e,t){return e=new Date(e.start),t=new Date(t.start),e>t?1:e<t?-1:0}):[]}function d(t){function n(e,n,a){return{date:e,today:c,dayOfWeek:n,differentMonth:a||!1,events:u,isFirstDay:d,isLastDay:o,maxEvents:D,selected:h,labelProperty:t.labelProperty,showCreateLink:t.showCreateLink}}var a,r=0,d=!0,o=!1,c=e.createDateAtMidnight(),i=e.isValidDate(t.date)?t.date:new Date,m=e.getFirstDateOfMonth(i),s=(m.getDay()+7)%7,v=e.getNumberOfDaysInMonth(i),u=p(i,t.events);u.forEach(C);var h=t.selected||[],E=f(),y=g();E.appendChild(y);var b=t.cellHeight-48,D=Math.floor(b/24);if(s>0)for(a=e.getFirstDateOfMonth(i),a.setDate(a.getDate()-s);r<s;)y.appendChild(l(n(a,r,!0))),d=!1,r+=1,a.setDate(a.getDate()+1);var $=s,w=m;for(r=1;r<=v;)7===$&&($=0,y=g(),d=!1,E.appendChild(y)),6===$&&r===v&&(o=!0),w.setDate(r),y.appendChild(l(n(w,$))),d=!1,$+=1,r+=1;for(;y.childNodes.length<7;)6===$&&(o=!0),w.setDate(r),y.appendChild(l(n(w,$,!0))),$+=1,r+=1;return E}function l(t){var n=document.createElement("div");n.classList.add("md-event-calendar-month-cell"),n.setAttribute("md-date",t.date),t.differentMonth===!0&&n.classList.add("different-month"),e.isSameDay(t.date,t.today)&&n.classList.add("today");var a=document.createElement("div");a.classList.add("md-event-calendar-month-cell-spacer"),n.appendChild(a);var r=document.createElement("div");r.classList.add("md-event-calendar-month-cell-divider"),n.appendChild(r);var d=document.createElement("div");d.setAttribute("md-create-event",""),d.classList.add("md-event-calendar-month-cell-content"),n.appendChild(d);var l=document.createElement("div");l.setAttribute("md-create-event",""),l.classList.add("layout-row"),d.appendChild(l);var c=document.createElement("div");if(c.setAttribute("md-create-event",""),c.classList.add("md-event-calendar-cell-data-label"),c.textContent=e.dates[t.date.getDate()],l.appendChild(c),t.showCreateLink===!0){var i=document.createElement("div");i.setAttribute("md-create-event",""),i.classList.add("md-event-calendar-create-link"),i.textContent="Create",l.appendChild(i)}return o(d,t),n}function o(e,t){var n,a=0,r=!1,d=u(t.date,t.events);d=h(d,t.dayOfWeek),d.every(function(l,o){var s=v(l,t),u=l.$$place-a;for(r=!0,a=l.$$place+1,n=0;n<u;){if(a>=t.maxEvents)return e.appendChild(c(d.length-o,t.date)),!1;e.appendChild(i()),n+=1}return a>=t.maxEvents?(e.appendChild(c(d.length-o,t.date)),!1):(e.appendChild(m(s,l,t)),!0)}),r===!0&&e.classList.add("md-has-events")}function c(e,t){var n=document.createElement("div");return n.classList.add("md-event-calendar-cell-event-show-more-link"),n.textContent=e+" more",n.setAttribute("md-show-more",t.toISOString()),n}function i(){var e=document.createElement("div");return e.classList.add("md-event-calendar-cell-event-spacer"),e}function m(t,n,a){var r=s(n),d=document.createElement("div");if(d.classList.add("md-event-calendar-cell-event"),d.classList.add("md-"+t.className),d.setAttribute("md-event-id",r),t.hasLabel===!0){if(t.allDay!==!0){var l=document.createElement("span");l.classList.add("md-event-calendar-cell-event-time"),l.textContent=e.formatEventTime(n.start),d.appendChild(l)}var o=document.createElement("span");o.textContent=n[a.labelProperty],d.appendChild(o)}return a.selected.every(function(e){return void 0===e.$$mdEventId||e.$$mdEventId!==n.$$mdEventId||(d.classList.add("md-selected"),!1)}),d}function s(e){return angular.isObject(e)?"object_"+(e.$$mdEventId||(e.$$mdEventId=++t)):"id_"+ ++t}function v(t,n){var a,r,d=e.isSameDay(n.date,t.start),l=!e.isValidDate(t.end)||e.isSameDay(n.date,t.end);return d&&(n.allDay||l)?(a="single",r=!0):d&&6===n.dayOfWeek?(a="start-right",r=!0):d?(a="start",r=!0):l&&0===n.dayOfWeek?(a="end-left",r=!0):l?(a="end",r=n.isFirstDay):0===n.dayOfWeek?(a="continue-left",r=!0):6===n.dayOfWeek?(a="continue-right",r=!1):(a="continue",r=!1),{className:a,hasLabel:r,allDay:t.allDay||!1}}function u(t,n){return n.filter(function(n){return e.isDateWithinRange(t,n.start,n.end||n.start)})}function h(e,t){function n(){for(var e=0;a.indexOf(e)!==-1;)e++;return a.push(e),e}var a=[],r=e.sort(function(e,t){return e.end>t.end?-1:e.end<t.end?1:0});return r.forEach(function(e){0===t?e.$$place=void 0:void 0!==e.$$place&&a.push(e.$$place)}),r.forEach(function(e){void 0===e.$$place&&(e.$$place=n())}),r.sort(function(e,t){return e.$$place>t.$$place?1:e.$$place<t.$$place?-1:0})}function f(){var t=document.createDocumentFragment(),n=document.createElement("div");return n.classList.add("md-event-calendar-month-row-header"),t.appendChild(n),e.days.forEach(function(e){var t=document.createElement("div");t.classList.add("md-event-calendar-month-cell-header"),t.textContent=e.slice(0,3).toLowerCase(),n.appendChild(t)}),t}function g(){var e=document.createElement("div");return e.classList.add("md-event-calendar-month-row"),e}function p(t,n){if(!n||!n.length)return[];var a=e.getFirstDateOfMonth(t).getDate(-6),r=e.getFirstDateOfMonth(t).getDate(37);return n.filter(function(t){return!!e.isValidDate(t.start)&&(!!e.isDateWithinRange(t.start,a,r)||!!e.isValidDate(t.end)&&!!e.isDateWithinRange(t.end,a,r))}).sort(function(e,t){return e=new Date(e.start),t=new Date(t.start),e>t?1:e<t?-1:0})}function C(e){e.$$hide=void 0,e.$$place=void 0}var E={month:d,showMore:a};return E}e.$inject=["$$mdEventCalendarUtil","$templateCache"],angular.module("material.components.eventCalendar").factory("$$mdEventCalendarBuilder",e);var t=0}(),function(){"use strict";function e(e,t,n,a){function r(r,d,l,o){function c(){if(C.autoHeight){C.fitted=!0;var e=d[0].getBoundingClientRect().top,n=t.innerHeight-e-C.offset;d.css("height",n+"px")}}function i(e){for(var t=e.getAttribute("md-date");null===t&&"MD-EVENT-CALENDAR-MONTH"!==e.nodeName;)e=e.parentNode,t=e.getAttribute("md-date");return null===t?void 0:new Date(t)}function m(){var t;t=C.fitted?d[0].offsetHeight/5:C.$element[0].offsetWidth/7;var n=e.month({date:C.date,events:C.events,selected:C.selectedEvents,labelProperty:C.labelProperty,showCreateLink:C.showCreateLink,cellHeight:t});d.empty(),d.append(n),v()}function s(e){p={date:e},v(!0)}function v(t){if(void 0!==p){p.element&&(angular.element(p.element).remove(),p.element=void 0);var n=h(p.date),r=e.showMore({date:p.date,selected:C.selectedEvents,events:C.events,labelProperty:C.labelProperty,cell:n});d.append(r),p.element=d[0].lastChild,u(),t?a(function(){angular.element(p.element).addClass("show")},0):(angular.element(p.element).addClass("no-transition"),angular.element(p.element).addClass("show"))}}function u(){var e=p.element.getBoundingClientRect(),n=t.innerHeight-e.height,a=t.innerWidth-e.width,r=e.left-a;e.top>n&&(p.element.style.top=n+"px"),r>0&&(p.element.style.left=a+"px",r-=10,r>0&&(p.element.querySelector(".md-event-calendar-show-more-date-label").style.marginLeft=r+"px"))}function h(e){return d[0].querySelector('[md-date="'+e+'"]')}function f(e){if(p){var t=p.element;p=void 0,e?(angular.element(t).removeClass("no-transition"),a(function(){angular.element(t).removeClass("show")},0),a(function(){t.remove(),t=void 0},400)):(t.remove(),t=void 0)}}function g(e){return parseInt(e.replace("object_",""))}var p,C=o,E=n.throttle(function(){r.$evalAsync(function(){c(),d.toggleClass("fitted",C.fitted),m()})});r.$watch(function(){return C.date},m),r.$watch(function(){return C.events},function(e,t){e!==t&&m()},!0),r.$watch(function(){return C.selectedEvents},function(e,t){e!==t&&m()},!0),angular.element(t).on("resize",E),r.$on("$destroy",function(){angular.element(t).off("resize",E)}),n(function(){c(),d.toggleClass("fitted",C.fitted)}),d.on("click",function(e){if(C.isCreateDisabled()!==!0){var t=e.target.getAttribute("md-event-id"),n=e.target.getAttribute("md-show-more"),a=(e.target.getAttribute("md-show-more-close"),null!==e.target.getAttribute("md-create-event"));if(t){g(t);return void r.$apply(function(){C.selectEvent(e,g(t))})}if(f(!0),n&&s(new Date(n)),a){var d=i(e.target);void 0!==d&&r.$apply(function(){C.createEventClick(e,d)})}}})}var d={restrict:"E",require:"^mdEventCalendar",link:r};return d}e.$inject=["$$mdEventCalendarBuilder","$window","$$rAF","$timeout"],angular.module("material.components.eventCalendar").directive("mdEventCalendarMonth",e)}(),function(){"use strict";function e(){var e={restrict:"E",require:"^mdEventCalendar",template:'<md-button class="md-icon-button" ng-click="mdEventCalendar.nextMonth()" aria-label="mext month"><div class="md-arrow" ng-include="\'icons/ic_keyboard_arrow_right_black_24px.svg\'"></div></md-button>'};return e}angular.module("material.components.eventCalendar").directive("mdEventCalendarNext",e)}(),function(){"use strict";function e(){var e={restrict:"E",require:"^mdEventCalendar",template:'<md-button class="md-icon-button" ng-click="mdEventCalendar.previousMonth()" aria-label="previous month"><div class="md-arrow md-left-arrow" ng-include="\'icons/ic_keyboard_arrow_right_black_24px.svg\'"></div></md-button>'};return e}angular.module("material.components.eventCalendar").directive("mdEventCalendarPrev",e)}(),function(){"use strict";function e(){function e(e,t,n,a){e.mdEventCalendar=a}var t={restrict:"E",require:"^mdEventCalendar",template:'<div class="md-event-calendar-header-label">{{mdEventCalendar.monthDisplay + " " + mdEventCalendar.yearDisplay}}</div>',link:e};return t}angular.module("material.components.eventCalendar").directive("mdEventCalendarTitle",e)}(),function(){"use strict";function e(){var e={restrict:"E",require:"^mdEventCalendar",template:'<md-button class="md-button" ng-click="mdEventCalendar.setToday()" aria-label="today" ng-disabled="mdEventCalendar.isTodayDisabled">Today</md-button>'};return e}angular.module("material.components.eventCalendar").directive("mdEventCalendarToday",e)}(),function(){"use strict";function e(e,t,n){function a(e){return g(e,"h:mm a")}function r(e,t,n){var a=c(e),r=o(t)?c(t):null,d=o(n)?c(n):null;return(!r||r<=a)&&(!d||d>=a)}function d(e){return"Week "+e}function l(e){o(e)&&e.setHours(0,0,0,0)}function o(e){return e&&e.getTime&&!isNaN(e.getTime())}function c(e){var t;return t=void 0===e?new Date:new Date(e),l(t),t}function i(e){return new Date(e.getFullYear(),e.getMonth()+1,1)}function m(e){return new Date(e.getFullYear(),e.getMonth()-1,1)}function s(e){return new Date(e.getFullYear(),e.getMonth(),1)}function v(e){return new Date(e.getFullYear(),e.getMonth()+1,0).getDate()}function u(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()}function h(e,t){return e.getDate()==t.getDate()&&u(e,t)}for(var f=e.has("$mdDateLocale")?e.get("$mdDateLocale"):void 0,g=n("date"),p=f?f.months:t.DATETIME_FORMATS.MONTH,C=f?f.shortMonths:t.DATETIME_FORMATS.SHORTMONTH,E=f?f.days:t.DATETIME_FORMATS.DAY,y=f?f.shortDays:t.DATETIME_FORMATS.SHORTDAY.map(function(e){return e.substring(0,1)}),b=Array(32),D=1;D<=31;D++)b[D]=D;var $={months:p,shortMonths:C,days:E,dates:f?f.dates:b,shortDays:y,isValidDate:o,createDateAtMidnight:c,getDateInNextMonth:i,getDateInPreviousMonth:m,getFirstDateOfMonth:s,getNumberOfDaysInMonth:v,weekNumberFormatter:f?f.weekNumberFormatter:d,isSameMonthAndYear:u,isSameDay:h,isDateWithinRange:r,formatEventTime:a};return $}e.$inject=["$injector","$locale","$filter"],angular.module("material.components.eventCalendar").factory("$$mdEventCalendarUtil",e)}();
!function(){"use strict";function e(e,n,a){var r;e.has("$mdThemingProvider")?(r=e.get("$mdThemingProvider"),r.registerStyles(a)):n.decorator("$$rAF",["$delegate",t])}function t(e){return e.throttle=function(t){var n,a,r,d;return function(){n=arguments,d=this,r=t,a||(a=!0,e(function(){r.apply(d,Array.prototype.slice.call(n)),a=!1}))}},e}e.$inject=["$injector","$provide","EVENT_CALENDAR_THEME"],angular.module("material.components.eventCalendar",[]).config(e)}(),function(){"use strict";angular.module("material.components.eventCalendar").run(["$templateCache",function(e){e.put("icons/ic_close_black_24px.svg",'<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">\n <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>\n <path d="M0 0h24v24H0z" fill="none"/>\n</svg>'),e.put("icons/ic_keyboard_arrow_right_black_24px.svg",'<svg fill="#EEEEEE" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">\n <path d="M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"/>\n <path d="M0-.25h24v24H0z" fill="none"/>\n</svg>\n')}])}(),function(){"use strict";angular.module("material.components.eventCalendar").constant("EVENT_CALENDAR_THEME","md-event-calendar._md md-event-calendar-header {\n color: '{{foreground-1}}';\n background: '{{background-hue-1}}';\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-header md-event-calendar-next .md-arrow svg, md-event-calendar._md md-event-calendar-header md-event-calendar-prev .md-arrow svg {\n fill: '{{foreground-2}}'; }\n\nmd-event-calendar._md md-event-calendar-month .md-event-calendar-month-row-header {\n color: '{{foreground-3}}';\n background: '{{background-hue-1}}';\n border-color: '{{foreground-4}}'; }\n\nmd-event-calendar._md md-event-calendar-month .md-event-calendar-month-row {\n background: '{{background-hue-1}}';\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell-divider {\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell {\n border-color: '{{foreground-4}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-create-link {\n color: '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label {\n color: '{{foreground-3}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell .md-event-calendar-month-cell-content .md-event-calendar-cell-event-show-more-link {\n color: '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.different-month {\n background: '{{background-hue-2}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today {\n box-shadow: inset 0px 0px 0px 1px '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell.today .md-event-calendar-month-cell-content .md-event-calendar-cell-data-label {\n color: '{{primary-default}}'; }\n md-event-calendar._md md-event-calendar-month .md-event-calendar-month-row .md-event-calendar-month-cell:last-child {\n border-color: '{{foreground-4}}'; }\n\nmd-event-calendar._md .md-event-calendar-cell-event {\n background: '{{foreground-4}}';\n color: '{{background-900}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-selected {\n color: #EEE;\n background: '{{primary-default}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-continue-left:after, md-event-calendar._md .md-event-calendar-cell-event.md-end-left:after {\n border-right-color: '{{foreground-4}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-continue-right:after, md-event-calendar._md .md-event-calendar-cell-event.md-start-right:after {\n border-left-color: '{{foreground-4}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-continue-left:after, md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-end-left:after {\n border-right-color: '{{primary-default}}'; }\n md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-continue-right:after, md-event-calendar._md .md-event-calendar-cell-event.md-selected.md-start-right:after {\n border-left-color: '{{primary-default}}'; }\n\nmd-event-calendar._md .md-event-calendar-show-more-container .md-event-calendar-show-more-date-label {\n color: '{{foreground-3}}'; }\n\nmd-event-calendar._md .md-event-calendar-show-more-container .md-event-calendar-show-more-close svg {\n fill: '{{foreground-1}}'; }\n\nmd-event-calendar._md.md-primary md-event-calendar-header {\n color: '{{background-100}}';\n background: '{{primary-default}}'; }\n md-event-calendar._md.md-primary md-event-calendar-header md-event-calendar-next .md-arrow svg, md-event-calendar._md.md-primary md-event-calendar-header md-event-calendar-prev .md-arrow svg {\n fill: '{{background-100}}'; }\n\nmd-event-calendar._md.md-primary md-event-calendar-month .md-event-calendar-month-row-header {\n color: '{{background-100}}';\n background: '{{primary-default}}'; }\n")}(),function(){"use strict";function e(e,t){function n(e,n){var a=n.mdEventClick?t(n.mdEventClick,null,!0):void 0,d=n.mdCreateEventClick?t(n.mdCreateEventClick,null,!0):void 0,l=n.mdCreateDisabled?t(n.mdCreateDisabled):void 0;return e.append("<md-event-calendar-month></md-event-calendar-month>"),function(e,t,o,c){function i(){var e=f.$viewValue||f.$modelValue||[];h.selectedEvents=[].concat(e)}function m(t,n){o.mdEventClick&&a(e.$parent,{$event:t,$selectedEvent:n})}function s(t,n){o.mdCreateEventClick&&d(e.$parent,{$event:t,$date:n})}function v(){return u}var u=!1,h=c[0],f=c[1];r&&(t.addClass("_md"),r(t)),h.isCreateDisabled=v,h.callEventClick=m,h.createEventClick=s,f&&(f.$render=i,h.ngModelCtrl=f),l?e.$watch(function(){return l(e.$parent)},function(e){u=e,t.toggleClass("md-create-disabled",e)}):void 0!==n.mdCreateDisabled&&(u=!0,t.addClass("md-create-disabled"))}}function a(e,t,n){function a(){o.date=e.getDateInNextMonth(o.date),o.monthDisplay=e.months[o.date.getMonth()],o.yearDisplay=o.date.getFullYear(),o.isTodayDisabled=o.date.getMonth()===(new Date).getMonth()}function r(){o.date=e.getDateInPreviousMonth(o.date),o.monthDisplay=e.months[o.date.getMonth()],o.yearDisplay=o.date.getFullYear(),o.isTodayDisabled=o.date.getMonth()===(new Date).getMonth()}function d(){o.date=new Date,o.monthDisplay=e.months[o.date.getMonth()],o.yearDisplay=o.date.getFullYear(),o.isTodayDisabled=!0}function l(e,t){var n=o.events.filter(function(e){return e.$$mdEventId===t});return o.ngModelCtrl&&(o.ngModelCtrl.$setViewValue(n[0]),o.ngModelCtrl.$render()),o.callEventClick(e,n[0]),!0}var o=this;o.$element=t,o.labelProperty=n.mdLabel||"title",o.selectedEvents=[],o.today=e.createDateAtMidnight(),o.date=e.createDateAtMidnight(),o.isToday=e.isSameDay(o.date,new Date),o.monthDisplay=e.months[o.date.getMonth()],o.yearDisplay=o.date.getFullYear(),o.isTodayDisabled=!0,o.showCreateLink=void 0!==n.mdShowCreateLink&&"false"!==n.mdShowCreateLink,o.nextMonth=a,o.previousMonth=r,o.selectEvent=l,o.setToday=d,o.autoHeight=void 0!==n.autoHeight,o.fitted=void 0!==n.fitted,o.offset=o.autoHeight===!1||""===n.autoHeight||isNaN(n.autoHeight.replace("px",""))?0:parseInt(n.autoHeight.replace("px",""))}a.$inject=["$$mdEventCalendarUtil","$element","$attrs"];var r=e.has("$mdTheming")?e.get("$mdTheming"):void 0,d={restrict:"E",require:["mdEventCalendar","?ngModel"],scope:{events:"=mdEvents"},compile:n,controller:a,controllerAs:"mdEventCalendar",bindToController:!0};return d}e.$inject=["$injector","$parse"],angular.module("material.components.eventCalendar").directive("mdEventCalendar",e)}(),function(){"use strict";function e(e,n){function a(t){var a=t.date,d=t.selected||[],l=t.events?r(a,t.events):[],o=t.labelProperty,c=document.createDocumentFragment(),i=document.createElement("div");i.classList.add("md-event-calendar-show-more-container");var s=document.createElement("div");s.classList.add("md-event-calendar-show-more-content");var v=document.createElement("div");v.classList.add("md-event-calendar-show-more-date-label"),v.textContent=e.dates[a.getDate()];var u=document.createElement("div");u.classList.add("md-event-calendar-show-more-close"),u.innerHTML=n.get("icons/ic_close_black_24px.svg"),u.setAttribute("md-show-more-close","true"),i.appendChild(v),i.appendChild(u),i.appendChild(s),c.appendChild(i),l.forEach(function(t){var n,r=e.isSameDay(a,t.start),l=!e.isValidDate(t.end)||e.isSameDay(a,t.end),c={labelProperty:o,selected:d};n=r&&l?m({className:"single",hasLabel:!0},t,c):r?m({className:"start-right",hasLabel:!0},t,c):l?m({className:"end-left",hasLabel:!0},t,c):m({className:"continue",hasLabel:!0},t,c),s.appendChild(n)});var h=(t.cell.getBoundingClientRect(),t.cell.offsetTop),f=t.cell.offsetLeft;return i.style.top=h+"px",i.style.left=f+"px",c}function r(t,n){return n&&n.length?n.filter(function(n){return e.isDateWithinRange(t,n.start,n.end||n.start)}).sort(function(e,t){return e=new Date(e.start),t=new Date(t.start),e>t?1:e<t?-1:0}):[]}function d(t){function n(e,n,a){return{date:e,today:c,dayOfWeek:n,differentMonth:a||!1,events:u,isFirstDay:d,isLastDay:o,maxEvents:D,selected:h,labelProperty:t.labelProperty,showCreateLink:t.showCreateLink}}var a,r=0,d=!0,o=!1,c=e.createDateAtMidnight(),i=e.isValidDate(t.date)?t.date:new Date,m=e.getFirstDateOfMonth(i),s=(m.getDay()+7)%7,v=e.getNumberOfDaysInMonth(i),u=p(i,t.events);u.forEach(C);var h=t.selected||[],E=f(),b=g();E.appendChild(b);var y=t.cellHeight-48,D=Math.floor(y/24);if(s>0)for(a=e.getFirstDateOfMonth(i),a.setDate(a.getDate()-s);r<s;)b.appendChild(l(n(a,r,!0))),d=!1,r+=1,a.setDate(a.getDate()+1);var $=s,w=m;for(r=1;r<=v;)7===$&&($=0,b=g(),d=!1,E.appendChild(b)),6===$&&r===v&&(o=!0),w.setDate(r),b.appendChild(l(n(w,$))),d=!1,$+=1,r+=1;for(;b.childNodes.length<7;)6===$&&(o=!0),w.setDate(r),b.appendChild(l(n(w,$,!0))),$+=1,r+=1;return E}function l(t){var n=document.createElement("div");n.classList.add("md-event-calendar-month-cell"),n.setAttribute("md-date",t.date),t.differentMonth===!0&&n.classList.add("different-month"),e.isSameDay(t.date,t.today)&&n.classList.add("today");var a=document.createElement("div");a.classList.add("md-event-calendar-month-cell-spacer"),n.appendChild(a);var r=document.createElement("div");r.classList.add("md-event-calendar-month-cell-divider"),n.appendChild(r);var d=document.createElement("div");d.setAttribute("md-create-event",""),d.classList.add("md-event-calendar-month-cell-content"),n.appendChild(d);var l=document.createElement("div");l.setAttribute("md-create-event",""),l.classList.add("layout-row"),d.appendChild(l);var c=document.createElement("div");if(c.setAttribute("md-create-event",""),c.classList.add("md-event-calendar-cell-data-label"),c.textContent=e.dates[t.date.getDate()],l.appendChild(c),t.showCreateLink===!0){var i=document.createElement("div");i.setAttribute("md-create-event",""),i.classList.add("md-event-calendar-create-link"),i.textContent="Create",l.appendChild(i)}return o(d,t),n}function o(e,t){var n,a=0,r=!1,d=u(t.date,t.events);d=h(d,t.dayOfWeek),d.every(function(l,o){var s=v(l,t),u=l.$$place-a;for(r=!0,a=l.$$place+1,n=0;n<u;){if(a>=t.maxEvents)return e.appendChild(c(d.length-o,t.date)),!1;e.appendChild(i()),n+=1}return a>=t.maxEvents?(e.appendChild(c(d.length-o,t.date)),!1):(e.appendChild(m(s,l,t)),!0)}),r===!0&&e.classList.add("md-has-events")}function c(e,t){var n=document.createElement("div");return n.classList.add("md-event-calendar-cell-event-show-more-link"),n.textContent=e+" more",n.setAttribute("md-show-more",t.toISOString()),n}function i(){var e=document.createElement("div");return e.classList.add("md-event-calendar-cell-event-spacer"),e}function m(t,n,a){var r=s(n),d=document.createElement("div");if(d.classList.add("md-event-calendar-cell-event"),d.classList.add("md-"+t.className),d.setAttribute("md-event-id",r),t.hasLabel===!0){if(t.allDay!==!0){var l=document.createElement("span");l.classList.add("md-event-calendar-cell-event-time"),l.textContent=e.formatEventTime(n.start),d.appendChild(l)}var o=document.createElement("span");o.textContent=n[a.labelProperty],d.appendChild(o)}return a.selected.every(function(e){return void 0===e.$$mdEventId||e.$$mdEventId!==n.$$mdEventId||(d.classList.add("md-selected"),!1)}),d}function s(e){return angular.isObject(e)?"object_"+(e.$$mdEventId||(e.$$mdEventId=++t)):"id_"+ ++t}function v(t,n){var a,r,d=e.isSameDay(n.date,t.start),l=!e.isValidDate(t.end)||e.isSameDay(n.date,t.end);return d&&(n.allDay||l)?(a="single",r=!0):d&&6===n.dayOfWeek?(a="start-right",r=!0):d?(a="start",r=!0):l&&0===n.dayOfWeek?(a="end-left",r=!0):l?(a="end",r=n.isFirstDay):0===n.dayOfWeek?(a="continue-left",r=!0):6===n.dayOfWeek?(a="continue-right",r=!1):(a="continue",r=!1),{className:a,hasLabel:r,allDay:t.allDay||!1}}function u(t,n){return n.filter(function(n){return e.isDateWithinRange(t,n.start,n.end||n.start)})}function h(e,t){function n(){for(var e=0;a.indexOf(e)!==-1;)e++;return a.push(e),e}var a=[],r=e.sort(function(e,t){return e.end>t.end?-1:e.end<t.end?1:0});return r.forEach(function(e){0===t?e.$$place=void 0:void 0!==e.$$place&&a.push(e.$$place)}),r.forEach(function(e){void 0===e.$$place&&(e.$$place=n())}),r.sort(function(e,t){return e.$$place>t.$$place?1:e.$$place<t.$$place?-1:0})}function f(){var t=document.createDocumentFragment(),n=document.createElement("div");return n.classList.add("md-event-calendar-month-row-header"),t.appendChild(n),e.days.forEach(function(e){var t=document.createElement("div");t.classList.add("md-event-calendar-month-cell-header"),t.textContent=e.slice(0,3).toLowerCase(),n.appendChild(t)}),t}function g(){var e=document.createElement("div");return e.classList.add("md-event-calendar-month-row"),e}function p(t,n){if(!n||!n.length)return[];var a=e.getFirstDateOfMonth(t).getDate(-6),r=e.getFirstDateOfMonth(t).getDate(37);return n.filter(function(t){return!!e.isValidDate(t.start)&&(!!e.isDateWithinRange(t.start,a,r)||!!e.isValidDate(t.end)&&!!e.isDateWithinRange(t.end,a,r))}).sort(function(e,t){return e=new Date(e.start),t=new Date(t.start),e>t?1:e<t?-1:0})}function C(e){e.$$hide=void 0,e.$$place=void 0}var E={month:d,showMore:a};return E}e.$inject=["$$mdEventCalendarUtil","$templateCache"],angular.module("material.components.eventCalendar").factory("$$mdEventCalendarBuilder",e);var t=0}(),function(){"use strict";function e(e,t,n,a){function r(r,d,l,o){function c(){if(E.autoHeight){E.fitted=!0;var e=d[0].getBoundingClientRect().top,n=t.innerHeight-e-E.offset;d.css("height",n+"px")}}function i(){function e(e){if(E.isCreateDisabled()!==!0&&t!==e.target){t=e.target;var n=!!e.target.getAttribute("md-event-id");d.toggleClass("md-event-hover",n)}}d.on("mouseenter",function(){d.on("mousemove",a)}),d.on("mouseleave",function(){d.off("mousemove",a),d.removeClass("md-event-hover")});var t,a=n.throttle(e)}function m(e){for(var t=e.getAttribute("md-date");null===t&&"MD-EVENT-CALENDAR-MONTH"!==e.nodeName;)e=e.parentNode,t=e.getAttribute("md-date");return null===t?void 0:new Date(t)}function s(){var t;t=E.fitted?d[0].offsetHeight/5:E.$element[0].offsetWidth/7;var n=e.month({date:E.date,events:E.events,selected:E.selectedEvents,labelProperty:E.labelProperty,showCreateLink:E.showCreateLink,cellHeight:t});d.empty(),d.append(n),u()}function v(e){C={date:e},u(!0)}function u(t){if(void 0!==C){C.element&&(angular.element(C.element).remove(),C.element=void 0);var n=f(C.date),r=e.showMore({date:C.date,selected:E.selectedEvents,events:E.events,labelProperty:E.labelProperty,cell:n});d.append(r),C.element=d[0].lastChild,h(),t?a(function(){angular.element(C.element).addClass("show")},0):(angular.element(C.element).addClass("no-transition"),angular.element(C.element).addClass("show"))}}function h(){var e=C.element.getBoundingClientRect(),n=t.innerHeight-e.height,a=t.innerWidth-e.width,r=e.left-a;e.top>n&&(C.element.style.top=n+"px"),r>0&&(C.element.style.left=a+"px",r-=10,r>0&&(C.element.querySelector(".md-event-calendar-show-more-date-label").style.marginLeft=r+"px"))}function f(e){return d[0].querySelector('[md-date="'+e+'"]')}function g(e){if(C){var t=C.element;C=void 0,e?(angular.element(t).removeClass("no-transition"),a(function(){angular.element(t).removeClass("show")},0),a(function(){t.remove(),t=void 0},400)):(t.remove(),t=void 0)}}function p(e){return parseInt(e.replace("object_",""))}var C,E=o,b=n.throttle(function(){r.$evalAsync(function(){c(),d.toggleClass("fitted",E.fitted),s()})});r.$watch(function(){return E.date},s),r.$watch(function(){return E.events},function(e,t){e!==t&&s()},!0),r.$watch(function(){return E.selectedEvents},function(e,t){e!==t&&s()},!0),angular.element(t).on("resize",b),r.$on("$destroy",function(){angular.element(t).off("resize",b)}),n(function(){c(),d.toggleClass("fitted",E.fitted)}),i(),d.on("click",function(e){if(E.isCreateDisabled()!==!0){var t=e.target.getAttribute("md-event-id"),n=e.target.getAttribute("md-show-more"),a=(e.target.getAttribute("md-show-more-close"),null!==e.target.getAttribute("md-create-event"));if(t){p(t);return void r.$apply(function(){E.selectEvent(e,p(t))})}if(g(!0),n&&v(new Date(n)),a){var d=m(e.target);void 0!==d&&r.$apply(function(){E.createEventClick(e,d)})}}})}var d={restrict:"E",require:"^mdEventCalendar",link:r};return d}e.$inject=["$$mdEventCalendarBuilder","$window","$$rAF","$timeout"],angular.module("material.components.eventCalendar").directive("mdEventCalendarMonth",e)}(),function(){"use strict";function e(){var e={restrict:"E",require:"^mdEventCalendar",template:'<md-button class="md-icon-button" ng-click="mdEventCalendar.nextMonth()" aria-label="mext month"><div class="md-arrow" ng-include="\'icons/ic_keyboard_arrow_right_black_24px.svg\'"></div></md-button>'};return e}angular.module("material.components.eventCalendar").directive("mdEventCalendarNext",e)}(),function(){"use strict";function e(){var e={restrict:"E",require:"^mdEventCalendar",template:'<md-button class="md-icon-button" ng-click="mdEventCalendar.previousMonth()" aria-label="previous month"><div class="md-arrow md-left-arrow" ng-include="\'icons/ic_keyboard_arrow_right_black_24px.svg\'"></div></md-button>'};return e}angular.module("material.components.eventCalendar").directive("mdEventCalendarPrev",e)}(),function(){"use strict";function e(){function e(e,t,n,a){e.mdEventCalendar=a}var t={restrict:"E",require:"^mdEventCalendar",template:'<div class="md-event-calendar-header-label">{{mdEventCalendar.monthDisplay + " " + mdEventCalendar.yearDisplay}}</div>',link:e};return t}angular.module("material.components.eventCalendar").directive("mdEventCalendarTitle",e)}(),function(){"use strict";function e(){var e={restrict:"E",require:"^mdEventCalendar",template:'<md-button class="md-button" ng-click="mdEventCalendar.setToday()" aria-label="today" ng-disabled="mdEventCalendar.isTodayDisabled">Today</md-button>'};return e}angular.module("material.components.eventCalendar").directive("mdEventCalendarToday",e)}(),function(){"use strict";function e(e,t,n){function a(e){return g(e,"h:mm a")}function r(e,t,n){var a=c(e),r=o(t)?c(t):null,d=o(n)?c(n):null;return(!r||r<=a)&&(!d||d>=a)}function d(e){return"Week "+e}function l(e){o(e)&&e.setHours(0,0,0,0)}function o(e){return e&&e.getTime&&!isNaN(e.getTime())}function c(e){var t;return t=void 0===e?new Date:new Date(e),l(t),t}function i(e){return new Date(e.getFullYear(),e.getMonth()+1,1)}function m(e){return new Date(e.getFullYear(),e.getMonth()-1,1)}function s(e){return new Date(e.getFullYear(),e.getMonth(),1)}function v(e){return new Date(e.getFullYear(),e.getMonth()+1,0).getDate()}function u(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()}function h(e,t){return e.getDate()==t.getDate()&&u(e,t)}for(var f=e.has("$mdDateLocale")?e.get("$mdDateLocale"):void 0,g=n("date"),p=f?f.months:t.DATETIME_FORMATS.MONTH,C=f?f.shortMonths:t.DATETIME_FORMATS.SHORTMONTH,E=f?f.days:t.DATETIME_FORMATS.DAY,b=f?f.shortDays:t.DATETIME_FORMATS.SHORTDAY.map(function(e){return e.substring(0,1)}),y=Array(32),D=1;D<=31;D++)y[D]=D;var $={months:p,shortMonths:C,days:E,dates:f?f.dates:y,shortDays:b,isValidDate:o,createDateAtMidnight:c,getDateInNextMonth:i,getDateInPreviousMonth:m,getFirstDateOfMonth:s,getNumberOfDaysInMonth:v,weekNumberFormatter:f?f.weekNumberFormatter:d,isSameMonthAndYear:u,isSameDay:h,isDateWithinRange:r,formatEventTime:a};return $}e.$inject=["$injector","$locale","$filter"],angular.module("material.components.eventCalendar").factory("$$mdEventCalendarUtil",e)}();
{
"name": "angular-material-event-calendar",
"version": "0.1.1",
"version": "0.1.2",
"author": "Ben Rubin",

@@ -5,0 +5,0 @@ "description": "Angular material event calander component",

@@ -5,3 +5,3 @@ (function(){"use strict";angular.module('eventCalendarApp', [

'ngMaterial',
'eventCalendar'
'material.components.eventCalendar'
])

@@ -8,0 +8,0 @@ .config(configApp);

(function(){"use strict";/**
* @ngdoc module
* @name eventCalendar
* @name material.components.eventCalendar
*

@@ -9,3 +9,3 @@ * @description

angular
.module('eventCalendar', [])
.module('material.components.eventCalendar', [])
.config(addEventCalendarTheme);

@@ -15,4 +15,12 @@

/*@ngInject*/
function addEventCalendarTheme($provide) {
$provide.decorator('$$rAF', ['$delegate', rAFDecorator]);
function addEventCalendarTheme($injector, $provide, EVENT_CALENDAR_THEME) {
var $mdThemingProvider;
// if using angular material, then register the event theme css
if ($injector.has('$mdThemingProvider')) {
$mdThemingProvider = $injector.get('$mdThemingProvider');
$mdThemingProvider.registerStyles(EVENT_CALENDAR_THEME);
} else {
$provide.decorator('$$rAF', ["$delegate", rAFDecorator]);
}
}

@@ -23,3 +31,3 @@

function rAFDecorator($delegate) {
$delegate.throttle = $delegate.throttle || function(cb) {
$delegate.throttle = function(cb) {
var queuedArgs, alreadyQueued, queueCb, context;

@@ -26,0 +34,0 @@ return function debounced() {

@@ -7,2 +7,4 @@ <html>

<!-- css:css -->
<link rel="stylesheet" href="eventCalendar-colors.css">
<link rel="stylesheet" href="eventCalendar.css">
<link rel="stylesheet" href="style.css">

@@ -28,7 +30,13 @@ <!-- endinject -->

<script src="js/eventCalendar.directive.js"></script>
<script src="js/util.js"></script>
<script src="js/views/month/eventCalendarMonth.builder.js"></script>
<script src="js/views/month/eventCalendarMonth.directive.js"></script>
<script src="js/eventCalendarBuilder.service.js"></script>
<script src="js/eventCalendarMonth.directive.js"></script>
<script src="js/eventCalendarNext.directive.js"></script>
<script src="js/eventCalendarPrev.directive.js"></script>
<script src="js/eventCalendarTitle.directive.js"></script>
<script src="js/eventCalendarToday.directive.js"></script>
<script src="js/utij.js"></script>
<!-- endinject -->
<!-- theme:js -->
<script src="js/_theme.js"></script>
<script src="templates.js"></script>
<!-- endinject -->

@@ -35,0 +43,0 @@

(function(){"use strict";angular
.module('eventCalendar')
.directive('eventCalendar', eventCalendarDirective);
.module('material.components.eventCalendar')
.directive('mdEventCalendar', eventCalendarDirective);

@@ -8,16 +8,18 @@

* @ngdoc directive
* @name eventCalendar
* @module eventCalendar
* @name mdEventCalendar
* @module material.components.eventCalendar
*
* @restrict E
**/
function eventCalendarDirective($parse) {
function eventCalendarDirective($injector, $parse) {
var $mdTheming = $injector.has('$mdTheming') ? $injector.get('$mdTheming') : undefined;
var directive = {
restrict: 'E',
require: ['eventCalendar', '?ngModel'],
require: ['mdEventCalendar', '?ngModel'],
scope: {
events: '=events'
events: '=mdEvents'
},
compile: compile,
controller: controller,
controllerAs: 'eventCalendar',
controllerAs: 'mdEventCalendar',
bindToController: true

@@ -28,10 +30,59 @@ };

function compile(tElement, tAttrs) {
// var eventClickFunc = tAttr.mdEventClick ? $parse(tAttr.mdEventClick, null, true) : undefined;
// var createEventClickFunc = tAttr.mdCreateEventClick ? $parse(tAttr.mdCreateEventClick, null, true) : undefined;
// var mdCreateDisabled = tAttr.mdCreateDisabled ? $parse(tAttr.mdCreateDisabled) : undefined;
function compile(tElement, tAttr) {
var eventClickFunc = tAttr.mdEventClick ? $parse(tAttr.mdEventClick, null, true) : undefined;
var createEventClickFunc = tAttr.mdCreateEventClick ? $parse(tAttr.mdCreateEventClick, null, true) : undefined;
var mdCreateDisabled = tAttr.mdCreateDisabled ? $parse(tAttr.mdCreateDisabled) : undefined;
tElement.append('<md-event-calendar-month></md-event-calendar-month>');
tElement.append('<event-calendar-month></event-calendar-month>');
return function postLink(scope, element, attrs, ctrls) {
var createDisabled = false;
var mdEventCalendarCtrl = ctrls[0];
var ngModelCtrl = ctrls[1];
if ($mdTheming) {
element.addClass('_md');
$mdTheming(element);
}
mdEventCalendarCtrl.isCreateDisabled = isCreateDisabled;
mdEventCalendarCtrl.callEventClick = callEventClick;
mdEventCalendarCtrl.createEventClick = createEventClick;
if (ngModelCtrl) {
ngModelCtrl.$render = render;
mdEventCalendarCtrl.ngModelCtrl = ngModelCtrl;
}
function render() {
var viewValue = ngModelCtrl.$viewValue || ngModelCtrl.$modelValue || [];
mdEventCalendarCtrl.selectedEvents = [].concat(viewValue);
}
function callEventClick(e, eventItem) {
if (!attrs.mdEventClick) { return; }
eventClickFunc(scope.$parent, {$event: e, $selectedEvent: eventItem});
}
function createEventClick(e, date) {
if (!attrs.mdCreateEventClick) { return; }
createEventClickFunc(scope.$parent, {$event: e, $date: date});
}
function isCreateDisabled() {
return createDisabled;
}
// watch for create being disabled
if (mdCreateDisabled) {
scope.$watch(function () { return mdCreateDisabled(scope.$parent); }, function (value) {
createDisabled = value;
element.toggleClass('md-create-disabled', value);
});
// if no string was given check to see if the attr exists
} else if (tAttr.mdCreateDisabled !== undefined) {
createDisabled = true;
element.addClass('md-create-disabled');
}
};

@@ -42,9 +93,64 @@ }

/*@ngInject*/
function controller() {
function controller($$mdEventCalendarUtil, $element, $attrs) {
/*jshint validthis:true*/
var vm = this;
vm.date = new Date();
vm.$element = $element;
vm.labelProperty = $attrs.mdLabel || 'title';
vm.selectedEvents = [];
vm.today = $$mdEventCalendarUtil.createDateAtMidnight();
vm.date = $$mdEventCalendarUtil.createDateAtMidnight();
vm.isToday = $$mdEventCalendarUtil.isSameDay(vm.date, new Date());
vm.monthDisplay = $$mdEventCalendarUtil.months[vm.date.getMonth()];
vm.yearDisplay = vm.date.getFullYear();
vm.isTodayDisabled = true;
vm.showCreateLink = $attrs.mdShowCreateLink !== undefined && $attrs.mdShowCreateLink !== 'false';
vm.nextMonth = nextMonth;
vm.previousMonth = previousMonth;
vm.selectEvent = selectEvent;
vm.setToday = setToday;
vm.autoHeight = $attrs.autoHeight !== undefined;
vm.fitted = $attrs.fitted !== undefined;
vm.offset = vm.autoHeight === false || $attrs.autoHeight === '' || isNaN($attrs.autoHeight.replace('px', '')) ? 0 : parseInt($attrs.autoHeight.replace('px', ''));
function nextMonth() {
vm.date = $$mdEventCalendarUtil.getDateInNextMonth(vm.date);
vm.monthDisplay = $$mdEventCalendarUtil.months[vm.date.getMonth()];
vm.yearDisplay = vm.date.getFullYear();
vm.isTodayDisabled = vm.date.getMonth() === (new Date()).getMonth();
}
function previousMonth() {
vm.date = $$mdEventCalendarUtil.getDateInPreviousMonth(vm.date);
vm.monthDisplay = $$mdEventCalendarUtil.months[vm.date.getMonth()];
vm.yearDisplay = vm.date.getFullYear();
vm.isTodayDisabled = vm.date.getMonth() === (new Date()).getMonth();
}
function setToday() {
vm.date = new Date();
vm.monthDisplay = $$mdEventCalendarUtil.months[vm.date.getMonth()];
vm.yearDisplay = vm.date.getFullYear();
vm.isTodayDisabled = true;
}
function selectEvent(e, id) {
// TODO create hashkeys for all events and store in reference object
var value = vm.events.filter(function (item) {
return item.$$mdEventId === id;
});
if (vm.ngModelCtrl) {
vm.ngModelCtrl.$setViewValue(value[0]);
vm.ngModelCtrl.$render();
}
vm.callEventClick(e, value[0]);
return true;
}
}
}
}());

@@ -1,2 +0,2 @@

<!-- <md-event-calendar
<md-event-calendar
auto-height="40"

@@ -21,5 +21,2 @@ ng-model="selected"

</md-event-calendar-header>
</md-event-calendar> -->
<event-calendar events="events"></event-calendar>
</md-event-calendar>

@@ -44,3 +44,25 @@ md-event-calendar {

md-event-calendar {
// hide create link until hover over the day view. Hide it again if hovering
// over an existing event. This specific structure is necessary in order to
// preserve the correct precedence.
.md-event-calendar-month-cell-content {
.md-event-calendar-create-link {
opacity: 0;
}
}
.md-event-calendar-month-cell-content:hover {
.md-event-calendar-create-link {
opacity: 1;
}
}
md-event-calendar-month {
&.md-event-hover {
.md-event-calendar-month-cell-content .md-event-calendar-create-link {
opacity: 0;
}
}
&.fitted {

@@ -109,12 +131,5 @@ display: flex;

cursor: pointer;
opacity: 0;
transition: opacity 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
}
&:hover {
.md-event-calendar-create-link {
opacity: 1;
}
}
.md-event-calendar-cell-data-label {

@@ -121,0 +136,0 @@ font-size: 13px;

@@ -63,3 +63,29 @@ angular

hideCreateLinkOnEventItemHover();
// When user mouses over an existing event, add a class of md-event-hover to
// the month element, so that the create link is hidden from view.
function hideCreateLinkOnEventItemHover() {
element.on('mouseenter', function () {
element.on('mousemove', checkForEventItemRAF);
});
element.on('mouseleave', function () {
element.off('mousemove', checkForEventItemRAF);
element.removeClass('md-event-hover');
});
var lastHoverItem;
var checkForEventItemRAF = $$rAF.throttle(checkForEventItem);
function checkForEventItem(e) {
if (mdEventCalendarCtrl.isCreateDisabled() === true) { return; }
if (lastHoverItem === e.target) { return; }
lastHoverItem = e.target;
var targetIsEvent = !!e.target.getAttribute('md-event-id');
element.toggleClass('md-event-hover', targetIsEvent);
}
}
element.on('click', function (e) {

@@ -66,0 +92,0 @@ if (mdEventCalendarCtrl.isCreateDisabled() === true) { return; }

(function(){"use strict";angular
.module('eventCalendar')
.factory('$$eventCalendarUtil', eventCalendarUtil);
function eventCalendarUtil($locale, $filter) {
var service = {
isValidDate: isValidDate,
getFirstDateOfMonth: getFirstDateOfMonth
};
return service;
/**
* Checks whether a date is valid.
* @param {Date} date
* @return {boolean} Whether the date is a valid Date.
*/
function isValidDate(date) {
return date && date.getTime && !isNaN(date.getTime());
}
/**
* Gets the first day of the month for the given date's month.
* @param {Date} date
* @returns {Date}
*/
function getFirstDateOfMonth(date) {
return new Date(date.getFullYear(), date.getMonth(), 1);
}
}
}());
(function(){"use strict";angular
.module('eventCalendar')
.factory('$$eventCalendarMonthBuilder', eventCalendarMonthBuilder);
var nextId = 0;
/**
* @ngdoc service
* @name $$eventCalendarMonthBuilder
* @module eventCalendar
**/
/*@ngInject*/
function eventCalendarMonthBuilder($$eventCalendarUtil) {
return function(options) {
var date = $$eventCalendarUtil.isValidDate(options.date) ? options.date : new Date();
var firstDayOfMonth = $$eventCalendarUtil.getFirstDateOfMonth(date);
var firstDayOfTheWeek = (firstDayOfMonth.getDay() + 7) % 7;
// days from last month
if (firstDayOfTheWeek > 0) {
}
};
}
}());
(function(){"use strict";angular
.module('eventCalendar')
.directive('eventCalendarMonth', eventCalendarMonthDirective);
/**
* @ngdoc directive
* @name eventCalendarMonthDirective
* @module eventCalendar
*
* @restrict E
**/
/*@ngInject*/
function eventCalendarMonthDirective($$eventCalendarMonthBuilder) {
var directive = {
restrict: 'E',
require: '^eventCalendar',
link: link
};
return directive;
function link(scope, element, attrs, ctrl) {
var eventCalendarCtrl = ctrl;
scope.$watch(function () { return eventCalendarCtrl.date; }, buildView);
scope.$watch(function () { return eventCalendarCtrl.events; }, function (newValue, oldValue) {
if (newValue === oldValue) { return; }
buildView();
}, true);
function buildView() {
console.log('buildView');
$$eventCalendarMonthBuilder({
date: eventCalendarCtrl.date,
events: eventCalendarCtrl.events
});
}
}
}
}());

Sorry, the diff of this file is not supported yet