angular-bootstrap-calendar-tpls.min.js 17 KB

12
  1. "use strict";angular.module("mwl.calendar",["ui.bootstrap"]),angular.module("mwl.calendar").run(["$templateCache",function(e){e.put("templates/day.html",'<div class="cal-day-box"><div class="row-fluid clearfix cal-row-head"><div class="span1 col-xs-1 cal-cell">{{ timeLabel || \'Time\' }}</div><div class="span11 col-xs-11 cal-cell">{{ eventLabel || \'Events\' }}</div></div><div class="cal-day-panel" ng-style="{height: (days.length * 60) + \'px\'}"><div class="cal-day-panel-hour"><div class="cal-day-hour" ng-repeat="day in days"><div class="row-fluid cal-day-hour-part"><div class="span1 col-xs-1"><b>{{ day.label }}</b></div><div class="span11 col-xs-11"></div></div><div class="row-fluid cal-day-hour-part"><div class="span1 col-xs-1"></div><div class="span11 col-xs-11"></div></div></div></div><div class="pull-left day-event day-highlight dh-event-{{ event.type }}" ng-repeat="event in view track by $index" ng-style="{top: event.top + \'px\', left: event.left + 60 + \'px\', height: event.height + \'px\'}"><!--<span class="cal-hours">{{ event.starts_at | date:\'d MMM HH:mm\' }} - {{ event.ends_at | date:\'d MMM HH:mm\' }}<br></span>--><a href="javascript:;" class="event-item" ng-click="eventClick({$event: event})"><span>{{ event.title | truncateEventTitle:20:event.height }}</span></a></div></div></div>'),e.put("templates/main.html",'<div class="cal-context" style="width: 100%;"><div class="alert alert-danger" ng-if="!view">The value passed to calendar-view is not set</div><mwl-calendar-year calendar-events="events" calendar-current-day="currentDay" calendar-event-click="eventClick" calendar-edit-event-click="eventEditClick" calendar-delete-event-click="eventDeleteClick" calendar-edit-event-html="editEventHtml" calendar-delete-event-html="deleteEventHtml" calendar-auto-open="autoOpen" calendar-timespan-click="timespanClick" ng-if="view == \'year\'"></mwl-calendar-year><mwl-calendar-month calendar-events="events" calendar-current-day="currentDay" calendar-event-click="eventClick" calendar-edit-event-click="eventEditClick" calendar-delete-event-click="eventDeleteClick" calendar-edit-event-html="editEventHtml" calendar-delete-event-html="deleteEventHtml" calendar-auto-open="autoOpen" calendar-use-iso-week="useIsoWeek" calendar-timespan-click="timespanClick" ng-if="view == \'month\'"></mwl-calendar-month><mwl-calendar-week calendar-events="events" calendar-current-day="currentDay" calendar-event-click="eventClick" calendar-use-iso-week="useIsoWeek" calendar-week-title-label="{{ weekTitleLabel }}" ng-if="view == \'week\'"></mwl-calendar-week><mwl-calendar-day calendar-events="events" calendar-current-day="currentDay" calendar-event-click="eventClick" calendar-event-label="{{ eventLabel }}" calendar-time-label="{{ timeLabel }}" calendar-day-view-start="{{ dayViewStart }}" calendar-day-view-end="{{ dayViewEnd }}" ng-if="view == \'day\'"></mwl-calendar-day></div>'),e.put("templates/month.html",'<div class="cal-row-fluid cal-row-head"><div class="cal-cell1" ng-repeat="day in weekDays">{{ day }}</div></div><div class="cal-month-box"><div ng-repeat="week in view track by $index"><div class="cal-row-fluid cal-before-eventlist"><div class="cal-cell1 cal-cell {{ day.highlightClass }}" ng-repeat="day in week track by $index" ng-click="dayClicked($parent.$index, $index)" ng-class="{pointer: day.events.length > 0}"><div class="cal-month-day" ng-class="{\'cal-day-outmonth\': !day.inMonth, \'cal-day-inmonth\': day.inMonth, \'cal-day-weekend\': $index == 5 || $index == 6, \'cal-day-today\': day.isToday}"><small class="cal-events-num badge badge-important pull-left" ng-show="day.events.length > 0">{{ day.events.length }}</small> <span class="pull-right" data-cal-date="" ng-click="drillDown(day.label)">{{ day.label }}</span><div class="cal-day-tick" ng-show="day.isOpened"><i class="glyphicon glyphicon-chevron-up"></i> <i class="fa fa-chevron-up"></i></div><div class="events-list" ng-show="day.events.length > 0"><a href="javascript:;" ng-click="eventClick({$event: event})" ng-repeat="event in day.events track by $index" class="pull-left event event-{{ event.type }}" ng-mouseenter="highlightEvent(event, true)" ng-mouseleave="highlightEvent(event, false)" tooltip-append-to-body="true" tooltip="{{ event.title }}"></a></div></div></div></div><div class="cal-slide-box" collapse="!week.isOpened"><div class="cal-slide-content cal-event-list"><ul class="unstyled list-unstyled"><li ng-repeat="event in openEvents track by $index"><span class="pull-left event event-{{ event.type }}"></span> &nbsp; <a href="javascript:;" class="event-item" ng-click="eventClick({$event: event})">{{ event.title }}</a> <a href="javascript:;" class="event-item-edit" ng-if="editEventHtml && event.editable !== false" ng-bind-html="$sce.trustAsHtml(editEventHtml)" ng-click="eventEditClick({$event: event})"></a> <a href="javascript:;" class="event-item-delete" ng-if="deleteEventHtml && event.deletable !== false" ng-bind-html="$sce.trustAsHtml(deleteEventHtml)" ng-click="eventDeleteClick({$event: event})"></a></li></ul></div></div></div></div>'),e.put("templates/week.html",'<div class="cal-week-box"><div class="cal-row-fluid cal-row-head"><div class="cal-cell1" ng-repeat="column in view.columns track by $index" ng-class="{\'cal-day-weekend\': $index > 4, \'cal-day-today\': column.isToday}">{{ column.weekDay }}<br><small><span data-cal-date="" ng-click="drillDown(column.day)" class="pointer">{{ column.date }}</span></small></div></div><div class="cal-row-fluid" ng-repeat="event in view.events track by $index"><div class="cal-cell{{ event.daySpan }} cal-offset{{ event.dayOffset }} day-highlight dh-event-{{ event.type }}" data-event-class=""><a href="javascript:;" ng-click="eventClick({$event: event})" class="cal-event-week">{{ event.title }}</a></div></div></div>'),e.put("templates/year.html",'<div class="cal-year-box"><div ng-repeat="year in view track by $index"><div class="row cal-before-eventlist"><div class="span3 col-md-3 col-xs-6 cal-cell" ng-repeat="month in year track by $index" ng-click="monthClicked($parent.$index, $index)" ng-class="{pointer: month.events.length > 0, \'cal-day-today\': month.isToday}"><span class="pull-right" data-cal-date="" ng-click="drillDown(month.monthIndex)">{{ month.label }}</span> <small class="cal-events-num badge badge-important pull-left" ng-show="month.events.length > 0">{{ month.events.length }}</small><div class="cal-day-tick" ng-show="month.isOpened"><i class="glyphicon glyphicon-chevron-up"></i> <i class="fa fa-chevron-up"></i></div></div></div><div class="cal-slide-box" collapse="!year.isOpened"><span class="cal-slide-tick"></span><div class="cal-slide-content"><ul class="unstyled list-unstyled"><li ng-repeat="event in openEvents track by $index"><span class="pull-left event" ng-class="\'event-\' + event.type"></span> &nbsp; <a href="javascript:;" class="event-item" ng-click="eventClick({$event: event})">{{ event.title }}</a> <a href="javascript:;" class="event-item-edit" ng-if="editEventHtml && event.editable !== false" ng-bind-html="$sce.trustAsHtml(editEventHtml)" ng-click="eventEditClick({$event: event})"></a> <a href="javascript:;" class="event-item-delete" ng-if="deleteEventHtml && event.deletable !== false" ng-bind-html="$sce.trustAsHtml(deleteEventHtml)" ng-click="eventDeleteClick({$event: event})"></a></li></ul></div></div></div></div>')}]),angular.module("mwl.calendar").constant("moment",window.moment),angular.module("mwl.calendar").service("calendarHelper",["$filter","moment",function(e,t){function a(){return 1===t().startOf("week").day()}function n(e){return angular.isDefined(e)?e:a()}var l=this;this.getMonthNames=function(t){for(var a=t?"MMM":"MMMM",n=[],l=0;11>=l;l++)n.push(e("date")(new Date(2014,l),a));return n},this.getWeekDayNames=function(t,a){for(var l=t?"EEE":"EEEE",i=[],r=n(a)?22:21,c=0;6>=c;c++)i.push(e("date")(new Date(2014,8,r+c),l));return i},this.eventIsInPeriod=function(e,a,n,l){return t(e).isAfter(t(n))&&t(e).isBefore(t(l))||t(a).isAfter(t(n))&&t(a).isBefore(t(l))||t(e).isBefore(t(n))&&t(a).isAfter(t(l))||t(e).isSame(t(n))||t(a).isSame(t(l))},this.getYearView=function(e,a){for(var n=[],i=l.getMonthNames(),r=0;3>r;r++){for(var c=[],d=0;4>d;d++){var s=12-i.length,v=new Date(t(a).format("YYYY"),s,1),o=t(v).add(1,"month").subtract(1,"second").toDate();c.push({label:i.shift(),monthIndex:s,isToday:t(v).startOf("month").isSame(t().startOf("month")),events:e.filter(function(e){return l.eventIsInPeriod(e.starts_at,e.ends_at,v,o)}),date:t(v).startOf("month")})}n.push(c)}return n},this.getMonthView=function(e,a,i){function r(){var e=d.day()-c;return 0>e&&(e=6),e}for(var c=n(i)?1:0,d=t(a).startOf("month"),s=t(a).endOf("month").date(),v=[],o=new Array(7),u=e.map(function(e,t){return e.$id=t,e}),m=1;s>=m;m++){if(1==m)for(var y=r(d),f=d.clone();y>0;)y--,f=f.subtract(1,"day"),o[y]={label:f.date(),date:f.clone(),inMonth:!1,events:[]};if(o[r(d)]={label:d.date(),inMonth:!0,isToday:t().startOf("day").isSame(d),date:d.clone(),events:u.filter(function(e){return l.eventIsInPeriod(e.starts_at,e.ends_at,d.clone().startOf("day"),d.clone().endOf("day"))})},m==s)for(var y=r(d),h=d.clone();6>y;)y++,h=h.add(1,"day"),o[y]={label:h.date(),date:h.clone(),inMonth:!1,events:[]};(6===r(d)||m==s)&&(v.push(o),o=new Array(7)),d=d.add(1,"day")}return v},this.getWeekView=function(a,i,r){for(var c,d,s=n(r)?1:0,v=new Array(7),o=l.getWeekDayNames(!1,r),u=i.getDay(),m=u;m>=0;m--){var y=t(i).subtract(u-m,"days").add(s,"day").toDate();v[m]={weekDay:o[m],day:e("date")(y,"d"),date:e("date")(y,"d MMM"),isToday:t(y).startOf("day").isSame(t().startOf("day"))},0==m?c=y:6==m&&(d=y)}for(var m=u+1;7>m;m++){var y=t(i).add(m-u,"days").add(s,"day").toDate();v[m]={weekDay:o[m],day:e("date")(y,"d"),date:e("date")(y,"d MMM"),isToday:t(y).startOf("day").isSame(t().startOf("day"))},0==m?c=y:6==m&&(d=y)}d=t(d).endOf("day").toDate(),c=t(c).startOf("day").toDate();var f=a.filter(function(e){return l.eventIsInPeriod(e.starts_at,e.ends_at,c,d)}).map(function(e){var a,n,l=t(e.starts_at).startOf("day"),i=t(e.ends_at).startOf("day"),r=t(c).startOf("day"),s=t(d).startOf("day");return a=l.isBefore(r)||l.isSame(r)?0:l.diff(r,"days"),i.isAfter(s)&&(i=s),l.isBefore(r)&&(l=r),n=t(i).diff(l,"days")+1,e.daySpan=n,e.dayOffset=a,e});return{columns:v,events:f}},this.getDayView=function(e,a,n,i){var r=t(a).startOf("day").add(n,"hours"),c=t(a).startOf("day").add(i,"hours"),d=60*(i-n+1),s=[];return e.filter(function(e){return l.eventIsInPeriod(e.starts_at,e.ends_at,t(a).startOf("day").toDate(),t(a).endOf("day").toDate())}).map(function(e){if(e.top=t(e.starts_at).isBefore(r)?0:t(e.starts_at).startOf("minute").diff(r.startOf("minute"),"minutes")-2,t(e.ends_at).isAfter(c))e.height=d-e.top;else{var a=e.starts_at;t(e.starts_at).isBefore(r)&&(a=r.toDate()),e.height=t(e.ends_at).diff(a,"minutes")}return e.top-e.height>d&&(e.height=0),e.left=0,e}).filter(function(e){return e.height>0}).map(function(e){var t=!0;return s.forEach(function(a,n){var i=!0;a.forEach(function(t){(l.eventIsInPeriod(e.starts_at,e.ends_at,t.starts_at,t.ends_at)||l.eventIsInPeriod(t.starts_at,t.ends_at,e.starts_at,e.ends_at))&&(i=!1)}),i&&t&&(t=!1,e.left=150*n,s[n].push(e))}),t&&(e.left=150*s.length,s.push([e])),e})},this.toggleEventBreakdown=function(e,t,a){function n(){e=e.map(function(e){return e.isOpened=!1,e.map(function(e){return e.isOpened=!1,e})})}var l=[];if(e[t][a].events.length>0){var i=e[t][a].isOpened;n(),e[t][a].isOpened=!i,e[t].isOpened=!i,l=e[t][a].events}else n();return{view:e,openEvents:l}}}]),angular.module("mwl.calendar").filter("truncateEventTitle",function(){return function(e,t,a){return e?e.length>=t&&e.length/20>a/30?e.substr(0,t)+"...":e:""}}),angular.module("mwl.calendar").directive("mwlCalendarYear",["$sce","$timeout","calendarHelper","moment",function(e,t,a,n){return{templateUrl:"templates/year.html",restrict:"EA",require:"^mwlCalendar",scope:{events:"=calendarEvents",currentDay:"=calendarCurrentDay",eventClick:"=calendarEventClick",eventEditClick:"=calendarEditEventClick",eventDeleteClick:"=calendarDeleteEventClick",editEventHtml:"=calendarEditEventHtml",deleteEventHtml:"=calendarDeleteEventHtml",autoOpen:"=calendarAutoOpen",timespanClick:"=calendarTimespanClick"},link:function(l,i,r,c){function d(){l.view=a.getYearView(l.events,l.currentDay),l.autoOpen&&!s&&l.view.forEach(function(e,a){e.forEach(function(e,i){e.label==n(l.currentDay).format("MMMM")&&(l.monthClicked(a,i,!0),t(function(){s=!1}))})})}var s=!1;l.$sce=e,c.titleFunctions.year=function(e){return n(e).format("YYYY")},l.$watch("currentDay",d),l.$watch("events",d,!0),l.monthClicked=function(e,t,n){n||l.timespanClick({$date:l.view[e][t].date.startOf("month").toDate()});var i=a.toggleEventBreakdown(l.view,e,t);l.view=i.view,l.openEvents=i.openEvents},l.drillDown=function(e){c.changeView("month",n(l.currentDay).clone().month(e).toDate())}}}}]),angular.module("mwl.calendar").directive("mwlCalendarWeek",["moment","calendarHelper",function(e,t){return{templateUrl:"templates/week.html",restrict:"EA",require:"^mwlCalendar",scope:{events:"=calendarEvents",currentDay:"=calendarCurrentDay",eventClick:"=calendarEventClick",useIsoWeek:"=calendarUseIsoWeek",weekTitleLabel:"@calendarWeekTitleLabel"},link:function(a,n,l,i){function r(){a.view=t.getWeekView(a.events,a.currentDay,a.useIsoWeek)}var c=a.weekTitleLabel||"Week {week} of {year}";i.titleFunctions.week=function(t){return c.replace("{week}",e(t).week()).replace("{year}",e(t).format("YYYY"))},a.drillDown=function(t){i.changeView("day",e(a.currentDay).clone().date(t).toDate())},a.$watch("currentDay",r),a.$watch("events",r,!0)}}}]),angular.module("mwl.calendar").directive("mwlCalendarMonth",["$sce","$timeout","$filter","moment","calendarHelper",function(e,t,a,n,l){return{templateUrl:"templates/month.html",restrict:"EA",require:"^mwlCalendar",scope:{events:"=calendarEvents",currentDay:"=calendarCurrentDay",eventClick:"=calendarEventClick",eventEditClick:"=calendarEditEventClick",eventDeleteClick:"=calendarDeleteEventClick",editEventHtml:"=calendarEditEventHtml",deleteEventHtml:"=calendarDeleteEventHtml",autoOpen:"=calendarAutoOpen",useIsoWeek:"=calendarUseIsoWeek",timespanClick:"=calendarTimespanClick"},link:function(i,r,c,d){function s(){i.view=l.getMonthView(i.events,i.currentDay,i.useIsoWeek),i.autoOpen&&!v&&i.view.forEach(function(e,a){e.forEach(function(e,l){e.inMonth&&n(i.currentDay).startOf("day").isSame(e.date.startOf("day"))&&(i.dayClicked(a,l,!0),t(function(){v=!1}))})})}var v=!1;i.$sce=e,d.titleFunctions.month=function(e){return a("date")(e,"MMMM yyyy")},i.$watch("currentDay",s),i.$watch("events",s,!0),i.weekDays=l.getWeekDayNames(!1,i.useIsoWeek),i.dayClicked=function(e,t,a){a||i.timespanClick({$date:i.view[e][t].date.startOf("day").toDate()});var n=l.toggleEventBreakdown(i.view,e,t);i.view=n.view,i.openEvents=n.openEvents},i.drillDown=function(e){d.changeView("day",n(i.currentDay).clone().date(e).toDate())},i.highlightEvent=function(e,t){i.view=i.view.map(function(a){return a.isOpened=!1,a.map(function(a){if(delete a.highlightClass,a.isOpened=!1,t){var n=a.events.filter(function(t){return t.$id==e.$id}).length>0;n&&(a.highlightClass="day-highlight dh-event-"+e.type)}return a})})}}}}]),angular.module("mwl.calendar").directive("mwlCalendarDay",["$filter","moment","calendarHelper",function(e,t,a){return{templateUrl:"templates/day.html",restrict:"EA",require:"^mwlCalendar",scope:{events:"=calendarEvents",currentDay:"=calendarCurrentDay",eventClick:"=calendarEventClick",eventLabel:"@calendarEventLabel",timeLabel:"@calendarTimeLabel",dayViewStart:"@calendarDayViewStart",dayViewEnd:"@calendarDayViewEnd"},link:function(n,l,i,r){function c(){n.view=a.getDayView(n.events,n.currentDay,d.hours(),s.hours())}var d=t(n.dayViewStart||"00:00","HH:mm"),s=t(n.dayViewEnd||"23:00","HH:mm");n.days=[];for(var v=t(d),o=0;o<=s.diff(d,"hours");o++)n.days.push({label:v.format("ha")}),v.add(1,"hour");r.titleFunctions.day=function(t){return e("date")(t,"EEEE d MMMM, yyyy")},n.$watch("currentDay",c),n.$watch("events",c,!0)}}}]),angular.module("mwl.calendar").directive("mwlCalendar",function(){return{templateUrl:"templates/main.html",restrict:"EA",scope:{events:"=calendarEvents",view:"=calendarView",currentDay:"=calendarCurrentDay",control:"=calendarControl",eventClick:"&calendarEventClick",eventEditClick:"&calendarEditEventClick",eventDeleteClick:"&calendarDeleteEventClick",editEventHtml:"=calendarEditEventHtml",deleteEventHtml:"=calendarDeleteEventHtml",autoOpen:"=calendarAutoOpen",useIsoWeek:"=calendarUseIsoWeek",eventLabel:"@calendarEventLabel",timeLabel:"@calendarTimeLabel",dayViewStart:"@calendarDayViewStart",dayViewEnd:"@calendarDayViewEnd",weekTitleLabel:"@calendarWeekTitleLabel",timespanClick:"&calendarTimespanClick"},controller:["$scope","$timeout","$locale","moment",function(e,t,a,n){var l=this;this.titleFunctions={},this.changeView=function(t,a){e.view=t,e.currentDay=a},e.control=e.control||{},e.control.prev=function(){e.currentDay=n(e.currentDay).subtract(1,e.view).toDate()},e.control.next=function(){e.currentDay=n(e.currentDay).add(1,e.view).toDate()},e.control.getTitle=function(){return l.titleFunctions[e.view]?l.titleFunctions[e.view](e.currentDay):""};var i=!0,r=e.$watch(function(){return n.locale()+a.id},function(){if(i)return void(i=!1);var a=angular.copy(e.view);e.view="redraw",t(function(){e.view=a})}),c=e.$on("$destroy",function(){c(),r()})}]}});
  2. //# sourceMappingURL=angular-bootstrap-calendar-tpls.min.js.map