angular-material-event-calendar
Advanced tools
| 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)}(); |
+1
-1
| { | ||
| "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", |
+1
-1
@@ -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() { |
+11
-3
@@ -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
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
233119
32.08%57
21.28%4233
39.61%4
33.33%18
38.46%