From 1dc12a9d4a47e234916cb493ea46f0c9b88d1fdb Mon Sep 17 00:00:00 2001 From: Matt Lewis Date: Sun, 28 Jun 2015 23:35:05 +0100 Subject: [PATCH] Release 0.12.0 --- bower.json | 2 +- dist/css/angular-bootstrap-calendar.css | 2 +- dist/css/angular-bootstrap-calendar.min.css | 2 +- dist/css/angular-bootstrap-calendar.min.css.map | 2 +- dist/js/angular-bootstrap-calendar-tpls.js | 2 +- dist/js/angular-bootstrap-calendar-tpls.min.js | 2 +- dist/js/angular-bootstrap-calendar-tpls.min.js.map | 2 +- dist/js/angular-bootstrap-calendar.js | 2 +- dist/js/angular-bootstrap-calendar.min.js | 2 +- dist/js/angular-bootstrap-calendar.min.js.map | 2 +- package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bower.json b/bower.json index 86eee529..1f2743d5 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-calendar", - "version": "0.11.3", + "version": "0.12.0", "homepage": "https://github.com/mattlewis92/angular-bootstrap-calendar", "authors": [ "Matt Lewis" diff --git a/dist/css/angular-bootstrap-calendar.css b/dist/css/angular-bootstrap-calendar.css index 0c3ed95e..218e6cc1 100755 --- a/dist/css/angular-bootstrap-calendar.css +++ b/dist/css/angular-bootstrap-calendar.css @@ -1,6 +1,6 @@ /** * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day - * @version v0.11.3 + * @version v0.12.0 * @link https://github.com/mattlewis92/angular-bootstrap-calendar * @license MIT */ diff --git a/dist/css/angular-bootstrap-calendar.min.css b/dist/css/angular-bootstrap-calendar.min.css index 6167e031..a414ee2c 100755 --- a/dist/css/angular-bootstrap-calendar.min.css +++ b/dist/css/angular-bootstrap-calendar.min.css @@ -1,6 +1,6 @@ /** * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day - * @version v0.11.3 + * @version v0.12.0 * @link https://github.com/mattlewis92/angular-bootstrap-calendar * @license MIT */ diff --git a/dist/css/angular-bootstrap-calendar.min.css.map b/dist/css/angular-bootstrap-calendar.min.css.map index 501654c7..abf62cad 100644 --- a/dist/css/angular-bootstrap-calendar.min.css.map +++ b/dist/css/angular-bootstrap-calendar.min.css.map @@ -1 +1 @@ -{"version":3,"sources":["angular-bootstrap-calendar.css","grid.less","month.less","week.less","day.less","events.less","theme.less"],"names":[],"mappings":"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","file":"angular-bootstrap-calendar.min.css","sourcesContent":["/**\n * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day\n * @version v0.11.3\n * @link https://github.com/mattlewis92/angular-bootstrap-calendar\n * @license MIT\n */\n[class*=\"cal-cell\"] {\n float: left;\n margin-left: 0;\n min-height: 1px;\n}\n.cal-row-fluid {\n width: 100%;\n *zoom: 1;\n}\n.cal-row-fluid:before,\n.cal-row-fluid:after {\n display: table;\n content: \"\";\n line-height: 0;\n}\n.cal-row-fluid:after {\n clear: both;\n}\n.cal-row-fluid [class*=\"cal-cell\"] {\n display: block;\n width: 100%;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n float: left;\n margin-left: 0%;\n *margin-left: -0.05213764%;\n}\n.cal-row-fluid [class*=\"cal-cell\"]:first-child {\n margin-left: 0;\n}\n.cal-row-fluid .controls-row [class*=\"cal-cell\"] + [class*=\"cal-cell\"] {\n margin-left: 0%;\n}\n.cal-row-fluid .cal-cell7 {\n width: 100%;\n *width: 99.94669509594883%;\n}\n.cal-row-fluid .cal-cell6 {\n width: 85.71428571428571%;\n *width: 85.66098081023453%;\n}\n.cal-row-fluid .cal-cell5 {\n width: 71.42857142857142%;\n *width: 71.37526652452024%;\n}\n.cal-row-fluid .cal-cell4 {\n width: 57.14285714285714%;\n *width: 57.089552238805965%;\n}\n.cal-row-fluid .cal-cell3 {\n width: 42.857142857142854%;\n *width: 42.80383795309168%;\n}\n.cal-row-fluid .cal-cell2 {\n width: 28.57142857142857%;\n *width: 28.518123667377395%;\n}\n.cal-row-fluid .cal-cell1 {\n width: 14.285714285714285%;\n *width: 14.232409381663112%;\n}\n.cal-week-box .cal-offset7,\n.cal-row-fluid .cal-offset7,\n.cal-row-fluid .cal-offset7:first-child {\n margin-left: 100%;\n *margin-left: 99.89339019189765%;\n}\n.cal-week-box .cal-offset6,\n.cal-row-fluid .cal-offset6,\n.cal-row-fluid .cal-offset6:first-child {\n margin-left: 85.71428571428571%;\n *margin-left: 85.60767590618336%;\n}\n.cal-week-box .cal-offset5,\n.cal-row-fluid .cal-offset5,\n.cal-row-fluid .cal-offset5:first-child {\n margin-left: 71.42857142857142%;\n *margin-left: 71.32196162046907%;\n}\n.cal-week-box .cal-offset4,\n.cal-row-fluid .cal-offset4,\n.cal-row-fluid .cal-offset4:first-child {\n margin-left: 57.14285714285714%;\n *margin-left: 57.03624733475479%;\n}\n.cal-week-box .cal-offset3,\n.cal-row-fluid .cal-offset3,\n.cal-row-fluid .cal-offset3:first-child {\n margin-left: 42.857142857142854%;\n *margin-left: 42.750533049040506%;\n}\n.cal-week-box .cal-offset2,\n.cal-row-fluid .cal-offset2,\n.cal-row-fluid .cal-offset2:first-child {\n margin-left: 28.57142857142857%;\n *margin-left: 28.46481876332622%;\n}\n.cal-week-box .cal-offset1,\n.cal-row-fluid .cal-offset1,\n.cal-row-fluid .cal-offset1:first-child {\n margin-left: 14.285714285714285%;\n *margin-left: 14.17910447761194%;\n}\n.cal-row-fluid .cal-cell1 {\n width: 14.285714285714285%;\n *width: 14.233576642335766%;\n}\n[class*=\"cal-cell\"].hide,\n.cal-row-fluid [class*=\"cal-cell\"].hide {\n display: none;\n}\n[class*=\"cal-cell\"].pull-right,\n.cal-row-fluid [class*=\"cal-cell\"].pull-right {\n float: right;\n}\n.cal-row-head [class*=\"cal-cell\"]:first-child,\n.cal-row-head [class*=\"cal-cell\"] {\n min-height: auto;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.cal-events-num {\n margin-top: 20px;\n}\n.cal-month-day {\n position: relative;\n display: block;\n width: 100%;\n}\n.cal-month-day .cal-events-num {\n margin-left: 10px;\n margin-top: 18px;\n}\n#cal-week-box {\n position: absolute;\n width: 70px;\n left: -71px;\n top: -1px;\n padding: 8px 5px;\n cursor: pointer;\n}\n.cal-day-tick {\n position: absolute;\n right: 50%;\n bottom: -21px;\n padding: 0px 5px;\n cursor: pointer;\n z-index: 5;\n text-align: center;\n width: 26px;\n margin-right: -17px;\n}\n.cal-year-box #cal-day-tick {\n margin-right: -7px;\n}\n.cal-slide-box {\n position: relative;\n}\n.cal-slide-tick {\n position: absolute;\n width: 16px;\n margin-left: -7px;\n height: 9px;\n top: -1px;\n z-index: 1;\n}\n.cal-slide-tick.tick-month1 {\n left: 12.5%;\n}\n.cal-slide-tick.tick-month2 {\n left: 37.5%;\n}\n.cal-slide-tick.tick-month3 {\n left: 62.5%;\n}\n.cal-slide-tick.tick-month4 {\n left: 87.5%;\n}\n.cal-slide-tick.tick-day1 {\n left: 7.14285714285715%;\n}\n.cal-slide-tick.tick-day2 {\n left: 21.42857142857143%;\n}\n.cal-slide-tick.tick-day3 {\n left: 35.71428571428572%;\n}\n.cal-slide-tick.tick-day4 {\n left: 50%;\n}\n.cal-slide-tick.tick-day5 {\n left: 64.2857142857143%;\n}\n.cal-slide-tick.tick-day6 {\n left: 78.57142857142859%;\n}\n.cal-slide-tick.tick-day7 {\n left: 92.85714285714285%;\n}\n.events-list {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: 1000;\n}\n.cal-slide-content ul.unstyled {\n margin-bottom: 0;\n}\n.cal-slide-content ul li.dragging-active .event-item {\n color: black;\n}\n.cal-week-box {\n position: relative;\n}\n.cal-week-box [data-event-class] {\n white-space: nowrap;\n height: 30px;\n line-height: 30px;\n text-overflow: ellipsis;\n overflow: hidden;\n padding-top: 0px !important;\n margin-top: 0px !important;\n margin-bottom: 0px !important;\n font-size: 12px;\n padding: 0 3px !important;\n}\n.cal-week-box .cal-day-panel {\n border: 0px !important;\n}\n.cal-week-box.cal-day-box .cal-row-head {\n padding-left: 60px;\n}\n.cal-week-box.cal-day-box .cal-day-panel {\n overflow-x: hidden;\n}\n.cal-day-box {\n text-wrap: none;\n overflow-x: auto !important;\n overflow-y: hidden;\n}\n.cal-day-box .cal-day-hour-part {\n height: 30px;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n border-bottom: thin dashed #e1e1e1;\n}\n.cal-day-box .cal-day-hour .day-highlight {\n height: 30px;\n}\n.cal-day-box .cal-hours {\n font-weight: bold;\n font-size: 12px;\n}\n.cal-day-box .cal-day-hour:nth-child(odd) {\n background-color: #fafafa;\n}\n.cal-day-box .cal-day-panel {\n position: relative;\n padding-left: 60px;\n border: solid 1px #e1e1e1;\n}\n.cal-day-box .cal-day-panel-hour {\n position: absolute;\n width: 100%;\n margin-left: -60px;\n}\n.cal-day-box .day-event {\n position: absolute;\n width: 150px;\n overflow: hidden;\n padding: 2px 3px !important;\n}\n.cal-day-box .day-event a {\n font-size: 12px;\n text-overflow: ellipsis;\n}\n.cal-day-box .day-highlight {\n padding-top: 2px;\n padding-left: 8px;\n padding-right: 8px;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n border: 1px solid #c3c3c3;\n margin: 1px 1px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.cal-day-box .day-highlight.dh-event-important {\n border: 1px solid #ad2121;\n}\n.cal-day-box .day-highlight.dh-event-warning {\n border: 1px solid #e3bc08;\n}\n.cal-day-box .day-highlight.dh-event-info {\n border: 1px solid dodgerblue;\n}\n.cal-day-box .day-highlight.dh-event-inverse {\n border: 1px solid #1b1b1b;\n}\n.cal-day-box .day-highlight.dh-event-success {\n border: 1px solid darkgreen;\n}\n.cal-day-box .day-highlight.dh-event-special {\n background-color: #ffe6ff;\n border: 1px solid #800080;\n}\n.event {\n display: block;\n background-color: #c3c3c3;\n width: 12px;\n height: 12px;\n margin-right: 2px;\n margin-bottom: 2px;\n -webkit-box-shadow: inset 0px 0px 5px 0px rgba(0, 0, 0, 0.4);\n box-shadow: inset 0px 0px 5px 0px rgba(0, 0, 0, 0.4);\n border-radius: 8px;\n border: 1px solid #ffffff;\n}\n.event-block {\n display: block;\n background-color: #c3c3c3;\n width: 20px;\n height: 100%;\n}\n.cal-event-list .event.pull-left {\n margin-top: 3px;\n}\n.event-important {\n background-color: #ad2121;\n}\n.event-info {\n background-color: dodgerblue;\n}\n.event-warning {\n background-color: #e3bc08;\n}\n.event-inverse {\n background-color: #1b1b1b;\n}\n.event-success {\n background-color: darkgreen;\n}\n.event-special {\n background-color: #800080;\n}\n.day-highlight:hover,\n.day-highlight {\n background-color: #dddddd;\n}\n.day-highlight.dh-event-important:hover,\n.day-highlight.dh-event-important {\n background-color: #fae3e3;\n}\n.day-highlight.dh-event-warning:hover,\n.day-highlight.dh-event-warning {\n background-color: #fdf1ba;\n}\n.day-highlight.dh-event-info:hover,\n.day-highlight.dh-event-info {\n background-color: #d1e8ff;\n}\n.day-highlight.dh-event-inverse:hover,\n.day-highlight.dh-event-inverse {\n background-color: #c1c1c1;\n}\n.day-highlight.dh-event-success:hover,\n.day-highlight.dh-event-success {\n background-color: #caffca;\n}\n.day-highlight.dh-event-special:hover,\n.day-highlight.dh-event-special {\n background-color: #ffe6ff;\n}\n.cal-row-head [class*=\"cal-cell\"]:first-child,\n.cal-row-head [class*=\"cal-cell\"] {\n font-weight: bolder;\n text-align: center;\n border: 0px solid;\n padding: 5px 0;\n}\n.cal-row-head [class*=\"cal-cell\"] small {\n font-weight: normal;\n}\n.cal-year-box .row:hover,\n.cal-row-fluid:hover {\n background-color: #fafafa;\n}\n.cal-month-day {\n height: 100px;\n}\n[class*=\"cal-cell\"]:hover,\n.cell-focus,\n[class*=\"cal-cell\"] .drop-active,\n.cal-cell.drop-active {\n background-color: #ededed;\n}\n.cal-year-box [class*=\"span\"],\n.cal-month-box [class*=\"cal-cell\"] {\n min-height: 100px;\n border-right: 1px solid #e1e1e1;\n position: relative;\n}\n.cal-year-box [class*=\"span\"] {\n min-height: 60px;\n}\n.cal-year-box .row [class*=\"col-\"]:last-child,\n.cal-month-box .cal-row [class*=\"cal-cell\"]:last-child {\n border-right: 0px;\n}\n.cal-year-box .row,\n.cal-month-box .cal-row-fluid {\n border-bottom: 1px solid #e1e1e1;\n margin-left: 0px;\n margin-right: 0px;\n}\n.cal-year-box .row:last-child,\n.cal-month-box .cal-row-fluid:last-child {\n border-bottom: 0px;\n}\n.cal-month-box,\n.cal-year-box,\n.cal-week-box {\n border-top: 1px solid #e1e1e1;\n border-bottom: 1px solid #e1e1e1;\n border-right: 1px solid #e1e1e1;\n border-left: 1px solid #e1e1e1;\n border-radius: 2px;\n}\n.cal-month-box {\n border-right: 0px;\n border-bottom: 0px;\n}\nspan[data-cal-date] {\n font-size: 1.2em;\n font-weight: normal;\n opacity: 0.5;\n transition: all 0.3s ease-in-out;\n -webkit-transition: all 0.1s ease-in-out;\n -moz-transition: all 0.1s ease-in-out;\n -ms-transition: all 0.1s ease-in-out;\n -o-transition: all 0.1s ease-in-out;\n margin-top: 15px;\n margin-right: 15px;\n}\nspan[data-cal-date]:hover {\n opacity: 1;\n}\n.cal-day-outmonth span[data-cal-date] {\n opacity: 0.1;\n cursor: default;\n}\n.cal-day-today {\n background-color: #e8fde7;\n}\n.cal-day-today span[data-cal-date] {\n color: darkgreen;\n}\n.cal-month-box .cal-day-today span[data-cal-date] {\n font-size: 1.9em;\n}\n.cal-day-holiday span[data-cal-date] {\n color: #800080;\n}\n.cal-day-weekend span[data-cal-date] {\n color: darkred;\n}\n#cal-week-box {\n border: 1px solid #e1e1e1;\n border-right: 0px;\n border-radius: 5px 0 0 5px;\n background-color: #fafafa;\n text-align: right;\n}\n.cal-week-box .cal-row-head {\n border-bottom: 1px solid #e1e1e1;\n}\n.cal-day-tick {\n border: 1px solid #e1e1e1;\n border-top: 0px solid;\n border-radius: 0 0 5px 5px;\n background-color: #ededed;\n text-align: center;\n}\n.cal-day-tick .fa {\n display: none;\n}\n.cal-slide-box {\n border-top: 0px solid #8c8c8c;\n}\n.cal-slide-content {\n padding: 20px;\n color: #ffffff;\n background-color: #555555;\n -webkit-box-shadow: inset 0px 0px 15px 0px rgba(0, 0, 0, 0.5);\n box-shadow: inset 0px 0px 15px 0px rgba(0, 0, 0, 0.5);\n}\n.cal-slide-content a.event-item {\n color: #ffffff;\n font-weight: normal;\n}\na.event-item-edit,\na.event-item-delete {\n padding-left: 5px;\n}\n.cal-year-box .cal-slide-content a.event-item,\n.cal-year-box a.event-item-edit,\n.cal-year-box a.event-item-delete {\n position: relative;\n top: -3px;\n}\n.events-list {\n max-height: 47px;\n padding-left: 5px;\n}\n.cal-column {\n border-left: 1px solid #e1e1e1;\n}\na.cal-event-week {\n text-decoration: none;\n color: #151515;\n}\n.badge-important {\n background-color: #b94a48;\n}\n.pointer {\n cursor: pointer;\n}\n.cal-year-box:last-child {\n border-bottom: 0px;\n}\n.cal-context {\n width: 100%;\n}\n@media (max-width: 991px) {\n .cal-year-box [class*=\"span\"]:nth-child(2) {\n border-right: 0px;\n }\n .cal-year-box [class*=\"span\"]:nth-child(1),\n .cal-year-box [class*=\"span\"]:nth-child(2) {\n border-bottom: 1px solid #e1e1e1;\n }\n}\n","[class*=\"cal-cell\"] {\n float: left;\n margin-left: 0;\n min-height: 1px;\n}\n\n.cal-row-fluid {\n width: 100%;\n *zoom: 1;\n}\n\n.cal-row-fluid:before,\n.cal-row-fluid:after {\n display: table;\n content: \"\";\n line-height: 0;\n}\n\n.cal-row-fluid:after {\n clear: both;\n}\n\n.cal-row-fluid [class*=\"cal-cell\"] {\n display: block;\n width: 100%;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n float: left;\n margin-left: 0%;\n *margin-left: -0.05213764337851929%;\n}\n\n.cal-row-fluid [class*=\"cal-cell\"]:first-child {\n margin-left: 0;\n}\n\n.cal-row-fluid .controls-row [class*=\"cal-cell\"] + [class*=\"cal-cell\"] {\n margin-left: 0%;\n}\n.cal-row-fluid .cal-cell7 {\n width: 100%;\n *width: 99.94669509594883%;\n}\n.cal-row-fluid .cal-cell6 {\n width: 85.71428571428571%;\n *width: 85.66098081023453%;\n}\n.cal-row-fluid .cal-cell5 {\n width: 71.42857142857142%;\n *width: 71.37526652452024%;\n}\n.cal-row-fluid .cal-cell4 {\n width: 57.14285714285714%;\n *width: 57.089552238805965%;\n}\n.cal-row-fluid .cal-cell3 {\n width: 42.857142857142854%;\n *width: 42.80383795309168%;\n}\n.cal-row-fluid .cal-cell2 {\n width: 28.57142857142857%;\n *width: 28.518123667377395%;\n}\n.cal-row-fluid .cal-cell1 {\n width: 14.285714285714285%;\n *width: 14.232409381663112%;\n}\n.cal-week-box .cal-offset7,\n.cal-row-fluid .cal-offset7,\n.cal-row-fluid .cal-offset7:first-child {\n margin-left: 100%;\n *margin-left: 99.89339019189765%;\n}\n\n.cal-week-box .cal-offset6,\n.cal-row-fluid .cal-offset6,\n.cal-row-fluid .cal-offset6:first-child {\n margin-left: 85.71428571428571%;\n *margin-left: 85.60767590618336%;\n}\n.cal-week-box .cal-offset5,\n.cal-row-fluid .cal-offset5,\n.cal-row-fluid .cal-offset5:first-child {\n margin-left: 71.42857142857142%;\n *margin-left: 71.32196162046907%;\n}\n.cal-week-box .cal-offset4,\n.cal-row-fluid .cal-offset4,\n.cal-row-fluid .cal-offset4:first-child {\n margin-left: 57.14285714285714%;\n *margin-left: 57.03624733475479%;\n}\n.cal-week-box .cal-offset3,\n.cal-row-fluid .cal-offset3,\n.cal-row-fluid .cal-offset3:first-child {\n margin-left: 42.857142857142854%;\n *margin-left: 42.750533049040506%;\n}\n.cal-week-box .cal-offset2,\n.cal-row-fluid .cal-offset2,\n.cal-row-fluid .cal-offset2:first-child {\n margin-left: 28.57142857142857%;\n *margin-left: 28.46481876332622%;\n}\n.cal-week-box .cal-offset1,\n.cal-row-fluid .cal-offset1,\n.cal-row-fluid .cal-offset1:first-child {\n margin-left: 14.285714285714285%;\n *margin-left: 14.17910447761194%;\n}\n\n.cal-row-fluid .cal-cell1 {\n width: 14.285714285714285%;\n *width: 14.233576642335766%;\n}\n\n[class*=\"cal-cell\"].hide,\n.cal-row-fluid [class*=\"cal-cell\"].hide {\n display: none;\n}\n\n[class*=\"cal-cell\"].pull-right,\n.cal-row-fluid [class*=\"cal-cell\"].pull-right {\n float: right;\n}\n",".cal-row-head [class*=\"cal-cell\"]:first-child,\n.cal-row-head [class*=\"cal-cell\"] {\n\tmin-height: auto;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.cal-events-num {\n margin-top: 20px;\n}\n.cal-month-day {\n position: relative;\n display: block;\n width: 100%;\n}\n\n.cal-month-day .cal-events-num {\n margin-left: 10px;\n margin-top: 18px;\n}\n\n#cal-week-box {\n position: absolute;\n width: 70px;\n left: -71px;\n top: -1px;\n padding: 8px 5px;\n cursor: pointer;\n}\n\n.cal-day-tick {\n position: absolute;\n right: 50%;\n bottom: -21px;\n padding: 0px 5px;\n cursor: pointer;\n z-index: 5;\n text-align: center;\n width: 26px;\n margin-right: -17px;\n}\n.cal-year-box #cal-day-tick {\n margin-right: -7px;\n}\n\n.cal-slide-box {\n position: relative;\n}\n\n.cal-slide-tick {\n position: absolute;\n width: 16px;\n margin-left: -7px;\n height: 9px;\n top: -1px;\n z-index: 1;\n}\n.cal-slide-tick.tick-month1 {\n left: 12.5%;\n}\n.cal-slide-tick.tick-month2 {\n left: 37.5%;\n}\n.cal-slide-tick.tick-month3 {\n left: 62.5%;\n}\n.cal-slide-tick.tick-month4 {\n left: 87.5%;\n}\n\n.cal-slide-tick.tick-day1 {\n left: 7.14285714285715%;\n}\n.cal-slide-tick.tick-day2 {\n left: 21.42857142857143%;\n}\n.cal-slide-tick.tick-day3 {\n left: 35.71428571428572%;\n}\n.cal-slide-tick.tick-day4 {\n left: 50%;\n}\n.cal-slide-tick.tick-day5 {\n left: 64.2857142857143%;\n}\n.cal-slide-tick.tick-day6 {\n left: 78.57142857142859%;\n}\n.cal-slide-tick.tick-day7 {\n left: 92.85714285714285%;\n}\n.events-list {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: 1000;\n}\n.cal-slide-content ul.unstyled {\n margin-bottom: 0;\n}\n.cal-slide-content ul li.dragging-active .event-item {\n color: black;\n}\n",".cal-week-box {\n position: relative;\n [data-event-class] {\n white-space: nowrap;\n height: 30px;\n line-height: 30px;\n text-overflow: ellipsis;\n overflow: hidden;\n padding-top: 0px !important;\n margin-top: 0px !important;\n margin-bottom: 0px !important;\n font-size: 12px;\n padding: 0 3px !important;\n }\n .cal-day-panel {\n border: 0px !important;\n }\n}\n\n.cal-week-box.cal-day-box {\n .cal-row-head {\n padding-left: 60px;\n }\n .cal-day-panel {\n overflow-x: hidden;\n }\n}\n",".cal-day-box {\n text-wrap: none;\n overflow-x: auto !important;\n overflow-y: hidden;\n\n .cal-day-hour-part {\n height: 30px;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n border-bottom: thin dashed @borderColor;\n }\n .cal-day-hour {\n .day-highlight {\n height: 30px;\n }\n }\n .cal-hours {\n font-weight: bold;\n font-size: 12px;\n }\n .cal-day-hour:nth-child(odd) {\n background-color: @rowHover;\n }\n .cal-day-panel {\n position: relative;\n padding-left: 60px;\n border: solid 1px #e1e1e1;\n }\n .cal-day-panel-hour {\n position: absolute;\n width: 100%;\n margin-left: -60px;\n }\n .day-event {\n position: absolute;\n width: 150px;\n overflow: hidden;\n padding: 2px 3px !important;\n\n a {\n font-size: 12px;\n text-overflow: ellipsis;\n }\n\n }\n .day-highlight {\n padding-top: 2px;\n padding-left: 8px;\n padding-right: 8px;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n border: 1px solid @eventStandardColor;\n margin: 1px 1px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .day-highlight.dh-event-important {\n border: 1px solid @eventImportantColor;\n }\n .day-highlight.dh-event-warning {\n border: 1px solid @eventWarningColor;\n }\n .day-highlight.dh-event-info {\n border: 1px solid @eventInfoColor;\n }\n .day-highlight.dh-event-inverse {\n border: 1px solid @eventInverseColor;\n }\n .day-highlight.dh-event-success {\n border: 1px solid @eventSuccessColor;\n }\n .day-highlight.dh-event-special {\n background-color: @eventHiliteSpecial;\n border: 1px solid @eventSpecialColor;\n }\n}\n",".event {\n display: block;\n background-color: @eventStandardColor;\n width: @eventSize;\n height: @eventSize;\n margin-right: @eventMargin;\n margin-bottom: @eventMargin;\n -webkit-box-shadow: inset 0px 0px 5px 0px rgba(0, 0, 0, 0.4);\n box-shadow: inset 0px 0px 5px 0px rgba(0, 0, 0, 0.4);\n border-radius: @eventBorderRadius;\n border: @eventBorderSize solid @eventBorderColor;\n}\n\n.event-block {\n display: block;\n background-color: #c3c3c3;\n width: 20px;\n height: 100%;\n}\n\n.cal-event-list .event.pull-left {\n margin-top: 3px;\n}\n\n.event-important {\n background-color: @eventImportantColor;\n}\n\n.event-info {\n background-color: @eventInfoColor;\n}\n\n.event-warning {\n background-color: @eventWarningColor;\n}\n\n.event-inverse {\n background-color: @eventInverseColor;\n}\n\n.event-success {\n background-color: @eventSuccessColor;\n}\n\n.event-special {\n background-color: @eventSpecialColor;\n}\n\n.day-highlight:hover,\n.day-highlight {\n background-color: @eventHiliteStandart;\n}\n\n.day-highlight.dh-event-important:hover,\n.day-highlight.dh-event-important {\n background-color: @eventHiliteImportant;\n}\n\n.day-highlight.dh-event-warning:hover,\n.day-highlight.dh-event-warning {\n background-color: @eventHiliteWarning;\n}\n\n.day-highlight.dh-event-info:hover,\n.day-highlight.dh-event-info {\n background-color: @eventHiliteInfo;\n}\n\n.day-highlight.dh-event-inverse:hover,\n.day-highlight.dh-event-inverse {\n background-color: @eventHiliteInverse;\n}\n\n.day-highlight.dh-event-success:hover,\n.day-highlight.dh-event-success {\n background-color: @eventHiliteSuccess;\n}\n\n.day-highlight.dh-event-special:hover,\n.day-highlight.dh-event-special {\n background-color: @eventHiliteSpecial;\n}\n",".cal-row-head [class*=\"cal-cell\"]:first-child,\n.cal-row-head [class*=\"cal-cell\"] {\n font-weight: bolder;\n text-align: center;\n border: 0px solid;\n padding: 5px 0;\n}\n.cal-row-head [class*=\"cal-cell\"] small {\n font-weight: normal;\n}\n.cal-year-box .row:hover,\n.cal-row-fluid:hover {\n background-color: @rowHover;\n}\n.cal-month-day {\n height: @rowHeightMonth;\n}\n[class*=\"cal-cell\"]:hover, .cell-focus, [class*=\"cal-cell\"] .drop-active, .cal-cell.drop-active {\n background-color: @dayHover;\n}\n.cal-year-box [class*=\"span\"],\n.cal-month-box [class*=\"cal-cell\"] {\n min-height: @rowHeightMonth;\n border-right: @borderSizevert @borderStyle @borderColor;\n position: relative;\n}\n.cal-year-box [class*=\"span\"]{\n min-height: @rowHeightYear;\n}\n.cal-year-box .row [class*=\"col-\"]:last-child,\n.cal-month-box .cal-row [class*=\"cal-cell\"]:last-child {\n border-right: 0px;\n}\n.cal-year-box .row,\n.cal-month-box .cal-row-fluid {\n border-bottom: @borderSizehoriz @borderStyle @borderColor;\n margin-left: 0px;\n margin-right: 0px;\n}\n.cal-year-box .row:last-child,\n.cal-month-box .cal-row-fluid:last-child {\n border-bottom: 0px;\n}\n.cal-month-box,\n.cal-year-box,\n.cal-week-box {\n border-top: @borderSizehoriz @borderStyle @borderColor;\n border-bottom: @borderSizehoriz @borderStyle @borderColor;\n border-right: @borderSizevert @borderStyle @borderColor;\n border-left: @borderSizevert @borderStyle @borderColor;\n border-radius: 2px;\n}\n.cal-month-box {\n border-right: 0px;\n border-bottom: 0px;\n}\nspan[data-cal-date] {\n font-size: 1.2em;\n font-weight: normal;\n opacity: 0.5;\n transition: all .3s ease-in-out;\n -webkit-transition: all .1s ease-in-out;\n -moz-transition: all .1s ease-in-out;\n -ms-transition: all .1s ease-in-out;\n -o-transition: all .1s ease-in-out;\n margin-top: 15px;\n margin-right: 15px;\n}\nspan[data-cal-date]:hover {\n opacity: 1;\n}\n\n.cal-day-outmonth span[data-cal-date] {\n opacity: 0.1;\n cursor: default;\n}\n\n.cal-day-today {\n background-color: #e8fde7;\n}\n\n.cal-day-today span[data-cal-date] {\n color: darkgreen;\n}\n.cal-month-box .cal-day-today span[data-cal-date] {\n font-size: 1.9em;\n}\n.cal-day-holiday span[data-cal-date] {\n color: #800080;\n}\n\n.cal-day-weekend span[data-cal-date] {\n color: darkred;\n}\n\n#cal-week-box {\n border: @borderSize @borderStyle @borderColor;\n border-right: 0px;\n border-radius: 5px 0 0 5px;\n background-color: @rowHover;\n text-align: right;\n}\n\n.cal-week-box .cal-row-head {\n border-bottom: 1px solid #e1e1e1;\n}\n\n.cal-day-tick {\n border: @borderSize @borderStyle @borderColor;\n border-top: 0px solid;\n border-radius: 0 0 5px 5px;\n background-color: @dayHover;\n text-align: center;\n\n .fa {\n display: none;\n }\n\n}\n\n.cal-slide-box {\n border-top: 0px solid #8c8c8c;\n}\n\n.cal-slide-content {\n padding: 20px;\n color: #ffffff;\n background-color: #555555;\n -webkit-box-shadow: inset 0px 0px 15px 0px rgba(0, 0, 0, 0.5);\n box-shadow: inset 0px 0px 15px 0px rgba(0, 0, 0, 0.5);\n}\n\n.cal-slide-content a.event-item {\n color: #ffffff;\n font-weight: normal;\n}\n\na.event-item-edit, a.event-item-delete {\n padding-left: 5px;\n}\n\n.cal-year-box .cal-slide-content a.event-item,\n.cal-year-box a.event-item-edit,\n.cal-year-box a.event-item-delete {\n position: relative;\n top: -3px;\n}\n\n.events-list {\n max-height: @rowHeightMonth - 53px;\n padding-left: 5px;\n}\n.cal-column {\n border-left: @borderSize @borderStyle @borderColor;\n}\na.cal-event-week {\n text-decoration: none;\n color: #151515;\n}\n.badge-important {\n\tbackground-color:#b94a48;\n}\n\n.pointer {\n cursor:pointer;\n}\n\n.cal-year-box:last-child {\n border-bottom: 0px;\n}\n\n.cal-context {\n width: 100%;\n}\n\n@media (max-width: 991px) {\n\n .cal-year-box [class*=\"span\"]:nth-child(2) {\n border-right: 0px;\n }\n\n .cal-year-box [class*=\"span\"]:nth-child(1), .cal-year-box [class*=\"span\"]:nth-child(2) {\n border-bottom: 1px solid #e1e1e1;\n }\n\n}\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["angular-bootstrap-calendar.css","grid.less","month.less","week.less","day.less","events.less","theme.less"],"names":[],"mappings":"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","file":"angular-bootstrap-calendar.min.css","sourcesContent":["/**\n * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day\n * @version v0.12.0\n * @link https://github.com/mattlewis92/angular-bootstrap-calendar\n * @license MIT\n */\n[class*=\"cal-cell\"] {\n float: left;\n margin-left: 0;\n min-height: 1px;\n}\n.cal-row-fluid {\n width: 100%;\n *zoom: 1;\n}\n.cal-row-fluid:before,\n.cal-row-fluid:after {\n display: table;\n content: \"\";\n line-height: 0;\n}\n.cal-row-fluid:after {\n clear: both;\n}\n.cal-row-fluid [class*=\"cal-cell\"] {\n display: block;\n width: 100%;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n float: left;\n margin-left: 0%;\n *margin-left: -0.05213764%;\n}\n.cal-row-fluid [class*=\"cal-cell\"]:first-child {\n margin-left: 0;\n}\n.cal-row-fluid .controls-row [class*=\"cal-cell\"] + [class*=\"cal-cell\"] {\n margin-left: 0%;\n}\n.cal-row-fluid .cal-cell7 {\n width: 100%;\n *width: 99.94669509594883%;\n}\n.cal-row-fluid .cal-cell6 {\n width: 85.71428571428571%;\n *width: 85.66098081023453%;\n}\n.cal-row-fluid .cal-cell5 {\n width: 71.42857142857142%;\n *width: 71.37526652452024%;\n}\n.cal-row-fluid .cal-cell4 {\n width: 57.14285714285714%;\n *width: 57.089552238805965%;\n}\n.cal-row-fluid .cal-cell3 {\n width: 42.857142857142854%;\n *width: 42.80383795309168%;\n}\n.cal-row-fluid .cal-cell2 {\n width: 28.57142857142857%;\n *width: 28.518123667377395%;\n}\n.cal-row-fluid .cal-cell1 {\n width: 14.285714285714285%;\n *width: 14.232409381663112%;\n}\n.cal-week-box .cal-offset7,\n.cal-row-fluid .cal-offset7,\n.cal-row-fluid .cal-offset7:first-child {\n margin-left: 100%;\n *margin-left: 99.89339019189765%;\n}\n.cal-week-box .cal-offset6,\n.cal-row-fluid .cal-offset6,\n.cal-row-fluid .cal-offset6:first-child {\n margin-left: 85.71428571428571%;\n *margin-left: 85.60767590618336%;\n}\n.cal-week-box .cal-offset5,\n.cal-row-fluid .cal-offset5,\n.cal-row-fluid .cal-offset5:first-child {\n margin-left: 71.42857142857142%;\n *margin-left: 71.32196162046907%;\n}\n.cal-week-box .cal-offset4,\n.cal-row-fluid .cal-offset4,\n.cal-row-fluid .cal-offset4:first-child {\n margin-left: 57.14285714285714%;\n *margin-left: 57.03624733475479%;\n}\n.cal-week-box .cal-offset3,\n.cal-row-fluid .cal-offset3,\n.cal-row-fluid .cal-offset3:first-child {\n margin-left: 42.857142857142854%;\n *margin-left: 42.750533049040506%;\n}\n.cal-week-box .cal-offset2,\n.cal-row-fluid .cal-offset2,\n.cal-row-fluid .cal-offset2:first-child {\n margin-left: 28.57142857142857%;\n *margin-left: 28.46481876332622%;\n}\n.cal-week-box .cal-offset1,\n.cal-row-fluid .cal-offset1,\n.cal-row-fluid .cal-offset1:first-child {\n margin-left: 14.285714285714285%;\n *margin-left: 14.17910447761194%;\n}\n.cal-row-fluid .cal-cell1 {\n width: 14.285714285714285%;\n *width: 14.233576642335766%;\n}\n[class*=\"cal-cell\"].hide,\n.cal-row-fluid [class*=\"cal-cell\"].hide {\n display: none;\n}\n[class*=\"cal-cell\"].pull-right,\n.cal-row-fluid [class*=\"cal-cell\"].pull-right {\n float: right;\n}\n.cal-row-head [class*=\"cal-cell\"]:first-child,\n.cal-row-head [class*=\"cal-cell\"] {\n min-height: auto;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.cal-events-num {\n margin-top: 20px;\n}\n.cal-month-day {\n position: relative;\n display: block;\n width: 100%;\n}\n.cal-month-day .cal-events-num {\n margin-left: 10px;\n margin-top: 18px;\n}\n#cal-week-box {\n position: absolute;\n width: 70px;\n left: -71px;\n top: -1px;\n padding: 8px 5px;\n cursor: pointer;\n}\n.cal-day-tick {\n position: absolute;\n right: 50%;\n bottom: -21px;\n padding: 0px 5px;\n cursor: pointer;\n z-index: 5;\n text-align: center;\n width: 26px;\n margin-right: -17px;\n}\n.cal-year-box #cal-day-tick {\n margin-right: -7px;\n}\n.cal-slide-box {\n position: relative;\n}\n.cal-slide-tick {\n position: absolute;\n width: 16px;\n margin-left: -7px;\n height: 9px;\n top: -1px;\n z-index: 1;\n}\n.cal-slide-tick.tick-month1 {\n left: 12.5%;\n}\n.cal-slide-tick.tick-month2 {\n left: 37.5%;\n}\n.cal-slide-tick.tick-month3 {\n left: 62.5%;\n}\n.cal-slide-tick.tick-month4 {\n left: 87.5%;\n}\n.cal-slide-tick.tick-day1 {\n left: 7.14285714285715%;\n}\n.cal-slide-tick.tick-day2 {\n left: 21.42857142857143%;\n}\n.cal-slide-tick.tick-day3 {\n left: 35.71428571428572%;\n}\n.cal-slide-tick.tick-day4 {\n left: 50%;\n}\n.cal-slide-tick.tick-day5 {\n left: 64.2857142857143%;\n}\n.cal-slide-tick.tick-day6 {\n left: 78.57142857142859%;\n}\n.cal-slide-tick.tick-day7 {\n left: 92.85714285714285%;\n}\n.events-list {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: 1000;\n}\n.cal-slide-content ul.unstyled {\n margin-bottom: 0;\n}\n.cal-slide-content ul li.dragging-active .event-item {\n color: black;\n}\n.cal-week-box {\n position: relative;\n}\n.cal-week-box [data-event-class] {\n white-space: nowrap;\n height: 30px;\n line-height: 30px;\n text-overflow: ellipsis;\n overflow: hidden;\n padding-top: 0px !important;\n margin-top: 0px !important;\n margin-bottom: 0px !important;\n font-size: 12px;\n padding: 0 3px !important;\n}\n.cal-week-box .cal-day-panel {\n border: 0px !important;\n}\n.cal-week-box.cal-day-box .cal-row-head {\n padding-left: 60px;\n}\n.cal-week-box.cal-day-box .cal-day-panel {\n overflow-x: hidden;\n}\n.cal-day-box {\n text-wrap: none;\n overflow-x: auto !important;\n overflow-y: hidden;\n}\n.cal-day-box .cal-day-hour-part {\n height: 30px;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n border-bottom: thin dashed #e1e1e1;\n}\n.cal-day-box .cal-day-hour .day-highlight {\n height: 30px;\n}\n.cal-day-box .cal-hours {\n font-weight: bold;\n font-size: 12px;\n}\n.cal-day-box .cal-day-hour:nth-child(odd) {\n background-color: #fafafa;\n}\n.cal-day-box .cal-day-panel {\n position: relative;\n padding-left: 60px;\n border: solid 1px #e1e1e1;\n}\n.cal-day-box .cal-day-panel-hour {\n position: absolute;\n width: 100%;\n margin-left: -60px;\n}\n.cal-day-box .day-event {\n position: absolute;\n width: 150px;\n overflow: hidden;\n padding: 2px 3px !important;\n}\n.cal-day-box .day-event a {\n font-size: 12px;\n text-overflow: ellipsis;\n}\n.cal-day-box .day-highlight {\n padding-top: 2px;\n padding-left: 8px;\n padding-right: 8px;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n border: 1px solid #c3c3c3;\n margin: 1px 1px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.cal-day-box .day-highlight.dh-event-important {\n border: 1px solid #ad2121;\n}\n.cal-day-box .day-highlight.dh-event-warning {\n border: 1px solid #e3bc08;\n}\n.cal-day-box .day-highlight.dh-event-info {\n border: 1px solid dodgerblue;\n}\n.cal-day-box .day-highlight.dh-event-inverse {\n border: 1px solid #1b1b1b;\n}\n.cal-day-box .day-highlight.dh-event-success {\n border: 1px solid darkgreen;\n}\n.cal-day-box .day-highlight.dh-event-special {\n background-color: #ffe6ff;\n border: 1px solid #800080;\n}\n.event {\n display: block;\n background-color: #c3c3c3;\n width: 12px;\n height: 12px;\n margin-right: 2px;\n margin-bottom: 2px;\n -webkit-box-shadow: inset 0px 0px 5px 0px rgba(0, 0, 0, 0.4);\n box-shadow: inset 0px 0px 5px 0px rgba(0, 0, 0, 0.4);\n border-radius: 8px;\n border: 1px solid #ffffff;\n}\n.event-block {\n display: block;\n background-color: #c3c3c3;\n width: 20px;\n height: 100%;\n}\n.cal-event-list .event.pull-left {\n margin-top: 3px;\n}\n.event-important {\n background-color: #ad2121;\n}\n.event-info {\n background-color: dodgerblue;\n}\n.event-warning {\n background-color: #e3bc08;\n}\n.event-inverse {\n background-color: #1b1b1b;\n}\n.event-success {\n background-color: darkgreen;\n}\n.event-special {\n background-color: #800080;\n}\n.day-highlight:hover,\n.day-highlight {\n background-color: #dddddd;\n}\n.day-highlight.dh-event-important:hover,\n.day-highlight.dh-event-important {\n background-color: #fae3e3;\n}\n.day-highlight.dh-event-warning:hover,\n.day-highlight.dh-event-warning {\n background-color: #fdf1ba;\n}\n.day-highlight.dh-event-info:hover,\n.day-highlight.dh-event-info {\n background-color: #d1e8ff;\n}\n.day-highlight.dh-event-inverse:hover,\n.day-highlight.dh-event-inverse {\n background-color: #c1c1c1;\n}\n.day-highlight.dh-event-success:hover,\n.day-highlight.dh-event-success {\n background-color: #caffca;\n}\n.day-highlight.dh-event-special:hover,\n.day-highlight.dh-event-special {\n background-color: #ffe6ff;\n}\n.cal-row-head [class*=\"cal-cell\"]:first-child,\n.cal-row-head [class*=\"cal-cell\"] {\n font-weight: bolder;\n text-align: center;\n border: 0px solid;\n padding: 5px 0;\n}\n.cal-row-head [class*=\"cal-cell\"] small {\n font-weight: normal;\n}\n.cal-year-box .row:hover,\n.cal-row-fluid:hover {\n background-color: #fafafa;\n}\n.cal-month-day {\n height: 100px;\n}\n[class*=\"cal-cell\"]:hover,\n.cell-focus,\n[class*=\"cal-cell\"] .drop-active,\n.cal-cell.drop-active {\n background-color: #ededed;\n}\n.cal-year-box [class*=\"span\"],\n.cal-month-box [class*=\"cal-cell\"] {\n min-height: 100px;\n border-right: 1px solid #e1e1e1;\n position: relative;\n}\n.cal-year-box [class*=\"span\"] {\n min-height: 60px;\n}\n.cal-year-box .row [class*=\"col-\"]:last-child,\n.cal-month-box .cal-row [class*=\"cal-cell\"]:last-child {\n border-right: 0px;\n}\n.cal-year-box .row,\n.cal-month-box .cal-row-fluid {\n border-bottom: 1px solid #e1e1e1;\n margin-left: 0px;\n margin-right: 0px;\n}\n.cal-year-box .row:last-child,\n.cal-month-box .cal-row-fluid:last-child {\n border-bottom: 0px;\n}\n.cal-month-box,\n.cal-year-box,\n.cal-week-box {\n border-top: 1px solid #e1e1e1;\n border-bottom: 1px solid #e1e1e1;\n border-right: 1px solid #e1e1e1;\n border-left: 1px solid #e1e1e1;\n border-radius: 2px;\n}\n.cal-month-box {\n border-right: 0px;\n border-bottom: 0px;\n}\nspan[data-cal-date] {\n font-size: 1.2em;\n font-weight: normal;\n opacity: 0.5;\n transition: all 0.3s ease-in-out;\n -webkit-transition: all 0.1s ease-in-out;\n -moz-transition: all 0.1s ease-in-out;\n -ms-transition: all 0.1s ease-in-out;\n -o-transition: all 0.1s ease-in-out;\n margin-top: 15px;\n margin-right: 15px;\n}\nspan[data-cal-date]:hover {\n opacity: 1;\n}\n.cal-day-outmonth span[data-cal-date] {\n opacity: 0.1;\n cursor: default;\n}\n.cal-day-today {\n background-color: #e8fde7;\n}\n.cal-day-today span[data-cal-date] {\n color: darkgreen;\n}\n.cal-month-box .cal-day-today span[data-cal-date] {\n font-size: 1.9em;\n}\n.cal-day-holiday span[data-cal-date] {\n color: #800080;\n}\n.cal-day-weekend span[data-cal-date] {\n color: darkred;\n}\n#cal-week-box {\n border: 1px solid #e1e1e1;\n border-right: 0px;\n border-radius: 5px 0 0 5px;\n background-color: #fafafa;\n text-align: right;\n}\n.cal-week-box .cal-row-head {\n border-bottom: 1px solid #e1e1e1;\n}\n.cal-day-tick {\n border: 1px solid #e1e1e1;\n border-top: 0px solid;\n border-radius: 0 0 5px 5px;\n background-color: #ededed;\n text-align: center;\n}\n.cal-day-tick .fa {\n display: none;\n}\n.cal-slide-box {\n border-top: 0px solid #8c8c8c;\n}\n.cal-slide-content {\n padding: 20px;\n color: #ffffff;\n background-color: #555555;\n -webkit-box-shadow: inset 0px 0px 15px 0px rgba(0, 0, 0, 0.5);\n box-shadow: inset 0px 0px 15px 0px rgba(0, 0, 0, 0.5);\n}\n.cal-slide-content a.event-item {\n color: #ffffff;\n font-weight: normal;\n}\na.event-item-edit,\na.event-item-delete {\n padding-left: 5px;\n}\n.cal-year-box .cal-slide-content a.event-item,\n.cal-year-box a.event-item-edit,\n.cal-year-box a.event-item-delete {\n position: relative;\n top: -3px;\n}\n.events-list {\n max-height: 47px;\n padding-left: 5px;\n}\n.cal-column {\n border-left: 1px solid #e1e1e1;\n}\na.cal-event-week {\n text-decoration: none;\n color: #151515;\n}\n.badge-important {\n background-color: #b94a48;\n}\n.pointer {\n cursor: pointer;\n}\n.cal-year-box:last-child {\n border-bottom: 0px;\n}\n.cal-context {\n width: 100%;\n}\n@media (max-width: 991px) {\n .cal-year-box [class*=\"span\"]:nth-child(2) {\n border-right: 0px;\n }\n .cal-year-box [class*=\"span\"]:nth-child(1),\n .cal-year-box [class*=\"span\"]:nth-child(2) {\n border-bottom: 1px solid #e1e1e1;\n }\n}\n","[class*=\"cal-cell\"] {\n float: left;\n margin-left: 0;\n min-height: 1px;\n}\n\n.cal-row-fluid {\n width: 100%;\n *zoom: 1;\n}\n\n.cal-row-fluid:before,\n.cal-row-fluid:after {\n display: table;\n content: \"\";\n line-height: 0;\n}\n\n.cal-row-fluid:after {\n clear: both;\n}\n\n.cal-row-fluid [class*=\"cal-cell\"] {\n display: block;\n width: 100%;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n float: left;\n margin-left: 0%;\n *margin-left: -0.05213764337851929%;\n}\n\n.cal-row-fluid [class*=\"cal-cell\"]:first-child {\n margin-left: 0;\n}\n\n.cal-row-fluid .controls-row [class*=\"cal-cell\"] + [class*=\"cal-cell\"] {\n margin-left: 0%;\n}\n.cal-row-fluid .cal-cell7 {\n width: 100%;\n *width: 99.94669509594883%;\n}\n.cal-row-fluid .cal-cell6 {\n width: 85.71428571428571%;\n *width: 85.66098081023453%;\n}\n.cal-row-fluid .cal-cell5 {\n width: 71.42857142857142%;\n *width: 71.37526652452024%;\n}\n.cal-row-fluid .cal-cell4 {\n width: 57.14285714285714%;\n *width: 57.089552238805965%;\n}\n.cal-row-fluid .cal-cell3 {\n width: 42.857142857142854%;\n *width: 42.80383795309168%;\n}\n.cal-row-fluid .cal-cell2 {\n width: 28.57142857142857%;\n *width: 28.518123667377395%;\n}\n.cal-row-fluid .cal-cell1 {\n width: 14.285714285714285%;\n *width: 14.232409381663112%;\n}\n.cal-week-box .cal-offset7,\n.cal-row-fluid .cal-offset7,\n.cal-row-fluid .cal-offset7:first-child {\n margin-left: 100%;\n *margin-left: 99.89339019189765%;\n}\n\n.cal-week-box .cal-offset6,\n.cal-row-fluid .cal-offset6,\n.cal-row-fluid .cal-offset6:first-child {\n margin-left: 85.71428571428571%;\n *margin-left: 85.60767590618336%;\n}\n.cal-week-box .cal-offset5,\n.cal-row-fluid .cal-offset5,\n.cal-row-fluid .cal-offset5:first-child {\n margin-left: 71.42857142857142%;\n *margin-left: 71.32196162046907%;\n}\n.cal-week-box .cal-offset4,\n.cal-row-fluid .cal-offset4,\n.cal-row-fluid .cal-offset4:first-child {\n margin-left: 57.14285714285714%;\n *margin-left: 57.03624733475479%;\n}\n.cal-week-box .cal-offset3,\n.cal-row-fluid .cal-offset3,\n.cal-row-fluid .cal-offset3:first-child {\n margin-left: 42.857142857142854%;\n *margin-left: 42.750533049040506%;\n}\n.cal-week-box .cal-offset2,\n.cal-row-fluid .cal-offset2,\n.cal-row-fluid .cal-offset2:first-child {\n margin-left: 28.57142857142857%;\n *margin-left: 28.46481876332622%;\n}\n.cal-week-box .cal-offset1,\n.cal-row-fluid .cal-offset1,\n.cal-row-fluid .cal-offset1:first-child {\n margin-left: 14.285714285714285%;\n *margin-left: 14.17910447761194%;\n}\n\n.cal-row-fluid .cal-cell1 {\n width: 14.285714285714285%;\n *width: 14.233576642335766%;\n}\n\n[class*=\"cal-cell\"].hide,\n.cal-row-fluid [class*=\"cal-cell\"].hide {\n display: none;\n}\n\n[class*=\"cal-cell\"].pull-right,\n.cal-row-fluid [class*=\"cal-cell\"].pull-right {\n float: right;\n}\n",".cal-row-head [class*=\"cal-cell\"]:first-child,\n.cal-row-head [class*=\"cal-cell\"] {\n\tmin-height: auto;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.cal-events-num {\n margin-top: 20px;\n}\n.cal-month-day {\n position: relative;\n display: block;\n width: 100%;\n}\n\n.cal-month-day .cal-events-num {\n margin-left: 10px;\n margin-top: 18px;\n}\n\n#cal-week-box {\n position: absolute;\n width: 70px;\n left: -71px;\n top: -1px;\n padding: 8px 5px;\n cursor: pointer;\n}\n\n.cal-day-tick {\n position: absolute;\n right: 50%;\n bottom: -21px;\n padding: 0px 5px;\n cursor: pointer;\n z-index: 5;\n text-align: center;\n width: 26px;\n margin-right: -17px;\n}\n.cal-year-box #cal-day-tick {\n margin-right: -7px;\n}\n\n.cal-slide-box {\n position: relative;\n}\n\n.cal-slide-tick {\n position: absolute;\n width: 16px;\n margin-left: -7px;\n height: 9px;\n top: -1px;\n z-index: 1;\n}\n.cal-slide-tick.tick-month1 {\n left: 12.5%;\n}\n.cal-slide-tick.tick-month2 {\n left: 37.5%;\n}\n.cal-slide-tick.tick-month3 {\n left: 62.5%;\n}\n.cal-slide-tick.tick-month4 {\n left: 87.5%;\n}\n\n.cal-slide-tick.tick-day1 {\n left: 7.14285714285715%;\n}\n.cal-slide-tick.tick-day2 {\n left: 21.42857142857143%;\n}\n.cal-slide-tick.tick-day3 {\n left: 35.71428571428572%;\n}\n.cal-slide-tick.tick-day4 {\n left: 50%;\n}\n.cal-slide-tick.tick-day5 {\n left: 64.2857142857143%;\n}\n.cal-slide-tick.tick-day6 {\n left: 78.57142857142859%;\n}\n.cal-slide-tick.tick-day7 {\n left: 92.85714285714285%;\n}\n.events-list {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: 1000;\n}\n.cal-slide-content ul.unstyled {\n margin-bottom: 0;\n}\n.cal-slide-content ul li.dragging-active .event-item {\n color: black;\n}\n",".cal-week-box {\n position: relative;\n [data-event-class] {\n white-space: nowrap;\n height: 30px;\n line-height: 30px;\n text-overflow: ellipsis;\n overflow: hidden;\n padding-top: 0px !important;\n margin-top: 0px !important;\n margin-bottom: 0px !important;\n font-size: 12px;\n padding: 0 3px !important;\n }\n .cal-day-panel {\n border: 0px !important;\n }\n}\n\n.cal-week-box.cal-day-box {\n .cal-row-head {\n padding-left: 60px;\n }\n .cal-day-panel {\n overflow-x: hidden;\n }\n}\n",".cal-day-box {\n text-wrap: none;\n overflow-x: auto !important;\n overflow-y: hidden;\n\n .cal-day-hour-part {\n height: 30px;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n border-bottom: thin dashed @borderColor;\n }\n .cal-day-hour {\n .day-highlight {\n height: 30px;\n }\n }\n .cal-hours {\n font-weight: bold;\n font-size: 12px;\n }\n .cal-day-hour:nth-child(odd) {\n background-color: @rowHover;\n }\n .cal-day-panel {\n position: relative;\n padding-left: 60px;\n border: solid 1px #e1e1e1;\n }\n .cal-day-panel-hour {\n position: absolute;\n width: 100%;\n margin-left: -60px;\n }\n .day-event {\n position: absolute;\n width: 150px;\n overflow: hidden;\n padding: 2px 3px !important;\n\n a {\n font-size: 12px;\n text-overflow: ellipsis;\n }\n\n }\n .day-highlight {\n padding-top: 2px;\n padding-left: 8px;\n padding-right: 8px;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n border: 1px solid @eventStandardColor;\n margin: 1px 1px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .day-highlight.dh-event-important {\n border: 1px solid @eventImportantColor;\n }\n .day-highlight.dh-event-warning {\n border: 1px solid @eventWarningColor;\n }\n .day-highlight.dh-event-info {\n border: 1px solid @eventInfoColor;\n }\n .day-highlight.dh-event-inverse {\n border: 1px solid @eventInverseColor;\n }\n .day-highlight.dh-event-success {\n border: 1px solid @eventSuccessColor;\n }\n .day-highlight.dh-event-special {\n background-color: @eventHiliteSpecial;\n border: 1px solid @eventSpecialColor;\n }\n}\n",".event {\n display: block;\n background-color: @eventStandardColor;\n width: @eventSize;\n height: @eventSize;\n margin-right: @eventMargin;\n margin-bottom: @eventMargin;\n -webkit-box-shadow: inset 0px 0px 5px 0px rgba(0, 0, 0, 0.4);\n box-shadow: inset 0px 0px 5px 0px rgba(0, 0, 0, 0.4);\n border-radius: @eventBorderRadius;\n border: @eventBorderSize solid @eventBorderColor;\n}\n\n.event-block {\n display: block;\n background-color: #c3c3c3;\n width: 20px;\n height: 100%;\n}\n\n.cal-event-list .event.pull-left {\n margin-top: 3px;\n}\n\n.event-important {\n background-color: @eventImportantColor;\n}\n\n.event-info {\n background-color: @eventInfoColor;\n}\n\n.event-warning {\n background-color: @eventWarningColor;\n}\n\n.event-inverse {\n background-color: @eventInverseColor;\n}\n\n.event-success {\n background-color: @eventSuccessColor;\n}\n\n.event-special {\n background-color: @eventSpecialColor;\n}\n\n.day-highlight:hover,\n.day-highlight {\n background-color: @eventHiliteStandart;\n}\n\n.day-highlight.dh-event-important:hover,\n.day-highlight.dh-event-important {\n background-color: @eventHiliteImportant;\n}\n\n.day-highlight.dh-event-warning:hover,\n.day-highlight.dh-event-warning {\n background-color: @eventHiliteWarning;\n}\n\n.day-highlight.dh-event-info:hover,\n.day-highlight.dh-event-info {\n background-color: @eventHiliteInfo;\n}\n\n.day-highlight.dh-event-inverse:hover,\n.day-highlight.dh-event-inverse {\n background-color: @eventHiliteInverse;\n}\n\n.day-highlight.dh-event-success:hover,\n.day-highlight.dh-event-success {\n background-color: @eventHiliteSuccess;\n}\n\n.day-highlight.dh-event-special:hover,\n.day-highlight.dh-event-special {\n background-color: @eventHiliteSpecial;\n}\n",".cal-row-head [class*=\"cal-cell\"]:first-child,\n.cal-row-head [class*=\"cal-cell\"] {\n font-weight: bolder;\n text-align: center;\n border: 0px solid;\n padding: 5px 0;\n}\n.cal-row-head [class*=\"cal-cell\"] small {\n font-weight: normal;\n}\n.cal-year-box .row:hover,\n.cal-row-fluid:hover {\n background-color: @rowHover;\n}\n.cal-month-day {\n height: @rowHeightMonth;\n}\n[class*=\"cal-cell\"]:hover, .cell-focus, [class*=\"cal-cell\"] .drop-active, .cal-cell.drop-active {\n background-color: @dayHover;\n}\n.cal-year-box [class*=\"span\"],\n.cal-month-box [class*=\"cal-cell\"] {\n min-height: @rowHeightMonth;\n border-right: @borderSizevert @borderStyle @borderColor;\n position: relative;\n}\n.cal-year-box [class*=\"span\"]{\n min-height: @rowHeightYear;\n}\n.cal-year-box .row [class*=\"col-\"]:last-child,\n.cal-month-box .cal-row [class*=\"cal-cell\"]:last-child {\n border-right: 0px;\n}\n.cal-year-box .row,\n.cal-month-box .cal-row-fluid {\n border-bottom: @borderSizehoriz @borderStyle @borderColor;\n margin-left: 0px;\n margin-right: 0px;\n}\n.cal-year-box .row:last-child,\n.cal-month-box .cal-row-fluid:last-child {\n border-bottom: 0px;\n}\n.cal-month-box,\n.cal-year-box,\n.cal-week-box {\n border-top: @borderSizehoriz @borderStyle @borderColor;\n border-bottom: @borderSizehoriz @borderStyle @borderColor;\n border-right: @borderSizevert @borderStyle @borderColor;\n border-left: @borderSizevert @borderStyle @borderColor;\n border-radius: 2px;\n}\n.cal-month-box {\n border-right: 0px;\n border-bottom: 0px;\n}\nspan[data-cal-date] {\n font-size: 1.2em;\n font-weight: normal;\n opacity: 0.5;\n transition: all .3s ease-in-out;\n -webkit-transition: all .1s ease-in-out;\n -moz-transition: all .1s ease-in-out;\n -ms-transition: all .1s ease-in-out;\n -o-transition: all .1s ease-in-out;\n margin-top: 15px;\n margin-right: 15px;\n}\nspan[data-cal-date]:hover {\n opacity: 1;\n}\n\n.cal-day-outmonth span[data-cal-date] {\n opacity: 0.1;\n cursor: default;\n}\n\n.cal-day-today {\n background-color: #e8fde7;\n}\n\n.cal-day-today span[data-cal-date] {\n color: darkgreen;\n}\n.cal-month-box .cal-day-today span[data-cal-date] {\n font-size: 1.9em;\n}\n.cal-day-holiday span[data-cal-date] {\n color: #800080;\n}\n\n.cal-day-weekend span[data-cal-date] {\n color: darkred;\n}\n\n#cal-week-box {\n border: @borderSize @borderStyle @borderColor;\n border-right: 0px;\n border-radius: 5px 0 0 5px;\n background-color: @rowHover;\n text-align: right;\n}\n\n.cal-week-box .cal-row-head {\n border-bottom: 1px solid #e1e1e1;\n}\n\n.cal-day-tick {\n border: @borderSize @borderStyle @borderColor;\n border-top: 0px solid;\n border-radius: 0 0 5px 5px;\n background-color: @dayHover;\n text-align: center;\n\n .fa {\n display: none;\n }\n\n}\n\n.cal-slide-box {\n border-top: 0px solid #8c8c8c;\n}\n\n.cal-slide-content {\n padding: 20px;\n color: #ffffff;\n background-color: #555555;\n -webkit-box-shadow: inset 0px 0px 15px 0px rgba(0, 0, 0, 0.5);\n box-shadow: inset 0px 0px 15px 0px rgba(0, 0, 0, 0.5);\n}\n\n.cal-slide-content a.event-item {\n color: #ffffff;\n font-weight: normal;\n}\n\na.event-item-edit, a.event-item-delete {\n padding-left: 5px;\n}\n\n.cal-year-box .cal-slide-content a.event-item,\n.cal-year-box a.event-item-edit,\n.cal-year-box a.event-item-delete {\n position: relative;\n top: -3px;\n}\n\n.events-list {\n max-height: @rowHeightMonth - 53px;\n padding-left: 5px;\n}\n.cal-column {\n border-left: @borderSize @borderStyle @borderColor;\n}\na.cal-event-week {\n text-decoration: none;\n color: #151515;\n}\n.badge-important {\n\tbackground-color:#b94a48;\n}\n\n.pointer {\n cursor:pointer;\n}\n\n.cal-year-box:last-child {\n border-bottom: 0px;\n}\n\n.cal-context {\n width: 100%;\n}\n\n@media (max-width: 991px) {\n\n .cal-year-box [class*=\"span\"]:nth-child(2) {\n border-right: 0px;\n }\n\n .cal-year-box [class*=\"span\"]:nth-child(1), .cal-year-box [class*=\"span\"]:nth-child(2) {\n border-bottom: 1px solid #e1e1e1;\n }\n\n}\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/js/angular-bootstrap-calendar-tpls.js b/dist/js/angular-bootstrap-calendar-tpls.js index af44ab47..88f32832 100644 --- a/dist/js/angular-bootstrap-calendar-tpls.js +++ b/dist/js/angular-bootstrap-calendar-tpls.js @@ -1,6 +1,6 @@ /** * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day - * @version v0.11.3 + * @version v0.12.0 * @link https://github.com/mattlewis92/angular-bootstrap-calendar * @license MIT */ diff --git a/dist/js/angular-bootstrap-calendar-tpls.min.js b/dist/js/angular-bootstrap-calendar-tpls.min.js index 47219f11..69e3d987 100644 --- a/dist/js/angular-bootstrap-calendar-tpls.min.js +++ b/dist/js/angular-bootstrap-calendar-tpls.min.js @@ -1,6 +1,6 @@ /** * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day - * @version v0.11.3 + * @version v0.12.0 * @link https://github.com/mattlewis92/angular-bootstrap-calendar * @license MIT */ diff --git a/dist/js/angular-bootstrap-calendar-tpls.min.js.map b/dist/js/angular-bootstrap-calendar-tpls.min.js.map index 31af48c8..80671587 100644 --- a/dist/js/angular-bootstrap-calendar-tpls.min.js.map +++ b/dist/js/angular-bootstrap-calendar-tpls.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["angular-bootstrap-calendar-tpls.js","webpack:/webpack/bootstrap f9365143e6b9940e60b4","calendar.js","webpack:/index.js","webpack:/src/directives \\.js$","webpack:/src/directives/mwlCalendar.js","webpack:/src/directives/mwlCalendarDay.js","webpack:/src/directives/mwlCalendarHourList.js","webpack:/src/directives/mwlCalendarMonth.js","webpack:/src/directives/mwlCalendarSlideBox.js","webpack:/src/directives/mwlCalendarWeek.js","webpack:/src/directives/mwlCalendarYear.js","webpack:/src/directives/mwlCollapseFallback.js","webpack:/src/directives/mwlDateModifier.js","webpack:/src/directives/mwlDraggable.js","webpack:/src/directives/mwlDroppable.js","webpack:/src/directives/mwlElementDimensions.js","webpack:/src/directives/mwlResizable.js","webpack:/src/filters \\.js$","webpack:/src/filters/calendarDate.js","webpack:/src/filters/calendarLimitTo.js","webpack:/src/filters/calendarTruncateEventTitle.js","webpack:/src/services \\.js$","webpack:/src/services/calendarConfig.js","webpack:/src/services/calendarDebounce.js","webpack:/src/services/calendarHelper.js","webpack:/src/services/calendarTitle.js","webpack:/src/services/interact.js","webpack:/src/services/moment.js","templates.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","requireAll","r","keys","forEach","angular","MODULE_NAME","webpackContext","req","webpackContextResolve","map","Error","./mwlCalendar.js","./mwlCalendarDay.js","./mwlCalendarHourList.js","./mwlCalendarMonth.js","./mwlCalendarSlideBox.js","./mwlCalendarWeek.js","./mwlCalendarYear.js","./mwlCollapseFallback.js","./mwlDateModifier.js","./mwlDraggable.js","./mwlDroppable.js","./mwlElementDimensions.js","./mwlResizable.js","Object","resolve","controller","$scope","$timeout","$window","$locale","moment","calendarTitle","calendarDebounce","vm","this","events","changeView","view","newDay","currentDay","drillDown","date","rawDate","toDate","nextView","year","month","week","onDrillDownClick","calendarDate","calendarNextView","previousDate","previousView","copy","refreshCalendar","viewTitle","event","index","defineProperty","enumerable","value","currentDate","shouldUpdate","clone","startOf","isSame","$broadcast","unbindLocaleWatcher","$watch","locale","unbindOnDestroy","push","unbindDestroyListener","$on","unbind","directive","templateUrl","restrict","scope","editEventHtml","deleteEventHtml","autoOpen","onEventClick","onEventTimesChanged","onEditEventClick","onDeleteEventClick","onTimespanClick","cellModifier","dayViewStart","dayViewEnd","dayViewSplit","$sce","calendarHelper","calendarConfig","unbindListener","dayViewHeight","getDayViewHeight","getDayView","eventDragComplete","minuteChunksMoved","minutesDiff","newStart","startsAt","add","newEnd","endsAt","tempStartsAt","calendarEvent","calendarNewEventStart","calendarNewEventEnd","eventDragged","eventResizeComplete","edge","start","end","eventResized","require","updateDays","parseInt","hours","dayCounter","i","diff","label","formatDate","dateFormats","hour","originalLocale","firstRun","weekDays","getWeekDayNames","getMonthView","rows","Math","floor","length","monthOffsets","day","inMonth","dayClicked","dayClickedFirstRun","openRowIndex","dayIndex","indexOf","openDayIndex","highlightEvent","shouldAddClass","highlightClass","dayContainsEvent","type","handleEventDrop","newDayDate","adjustEndDateFromStartDiff","link","element","attrs","calendarCtrl","unbindWatcher","isOpen","shouldCollapse","unbindDestroy","replace","elm","ctrls","isMonthView","isYearView","showTimes","showTimesOnWeekView","getWeekViewWithTimes","getWeekView","weekDragged","daysDiff","weekResized","tempTimeChanged","getYearView","monthClicked","monthClickedFirstRun","monthIndex","openMonthIndex","newMonthDate","$attrs","$element","mwlCollapseFallback","addClass","removeClass","$injector","has","onClick","isDefined","setToToday","Date","increment","decrement","subtract","$apply","bind","$parse","interact","translateElement","transformValue","css","canDrag","mwlDraggable","getUnitsMoved","x","y","gridDimensions","result","snap","snapGridDimensions","snapGrid","targets","createSnapGrid","draggable","onstart","target","dropData","style","pointerEvents","onDragStart","onmove","parseFloat","attr","dx","dy","axis","getComputedStyle","position","onDrag","onend","onDragEnd","removeAttr","unset","dropzone","ondragenter","ondragleave","ondropdeactivate","ondrop","relatedTarget","onDrop","mwlElementDimensions","assign","width","offsetWidth","height","offsetHeight","canResize","mwlResizable","getUnitsResized","unitsResized","data","originalDimensions","round","resizeEdge","originalDimensionsStyle","resizable","edges","resizeEdges","rect","deltaRect","left","top","onResize","transform","onResizeEnd","./calendarDate.js","./calendarLimitTo.js","./calendarTruncateEventTitle.js","filter","format","getFromConfig","$stateful","limitToFilter","version","minor","input","limit","begin","abs","Number","Infinity","isNaN","isNumber","toString","isArray","isString","slice","max","string","boxHeight","substr","./calendarConfig.js","./calendarDebounce.js","./calendarHelper.js","./calendarTitle.js","./interact.js","./moment.js","provider","defaultFormats","weekDay","time","datetime","title","dateFormatter","defaultDateFormats","defaultTitleFormats","i18nStrings","eventsLabel","timeLabel","displayAllMonthEvents","configProvider","setDateFormats","formats","extend","setTitleFormats","setI18nStrings","strings","setDisplayAllMonthEvents","setDateFormatter","$get","titleFormats","service","debounce","func","wait","immediate","timeout","later","apply","context","args","arguments","callNow","cancel","factory","dateFilter","oldStart","oldEnd","diffInSeconds","eventIsInPeriod","periodStart","periodEnd","eventStart","eventEnd","recursOn","set","isAfter","isBefore","filterEventsInPeriod","startPeriod","endPeriod","getEventsInPeriod","period","allEvents","endOf","getBadgeTotal","incrementsBadgeTotal","weekdays","count","weekday","eventsInPeriod","periodEvents","cell","isToday","badgeTotal","calendarCell","startOfMonth","endOfMonthView","today","monthEvents","isPast","isFuture","isWeekend","startOfWeek","endOfWeek","days","weekDayLabel","dayLabel","eventsSorted","offset","span","weekViewStart","weekViewEnd","daySpan","dayOffset","dayStartHour","dayEndHour","hourHeight","calendarStart","calendarEnd","calendarHeight","hourHeightMultiplier","buckets","diffStart","cannotFitInABucket","bucket","bucketIndex","canFitInThisBucket","bucketItem","weekView","newEvents","dayEvents","newDayEvents","concat","dayViewStartM","dayViewEndM","weekTitleLabel","e","constant","code","run","$templateCache","put"],"mappings":"CAMS,SAAUA,GAKT,QAASC,GAAoBC,GAG5B,GCDXC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,ODIW,IAAIC,GAASF,EAAiBD,ICAzCE,WDEYE,GAAIJ,EACJK,QAAQ,EAUT,OCPXP,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,EAAAA,EAAAD,QAAAH,GDIWI,EAAOE,QAAS,EAGTF,EAAOD,QAvBf,GCDVD,KDsCU,OCVVF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,ECIUF,EAAAU,EAAA,GFGOV,EAAoB,KGzCrC,SAAAI,EAAAD,EAAAH,GAEA,QAAAW,GAAAC,GACAA,EAAAC,OAAAC,QAAAF,GHiDCR,EAAOD,QAAUH,EAAoB,GAErCW,EAAWX,EAAoB,IAC/BW,EEAKX,EAA0B,KFC/BW,EAAWX,EAAoB,MAK1B,SAASI,EAAQD,EAASH,GAE/B,YAEA,IAAIe,GAAUf,EAAoB,GAC9BgB,EAAc,cAElBD,GAAQX,OAAOY,MAEfZ,EAAOD,QAAUa,GEKZ,SAASZ,EAAQD,GE/EvBC,EAAAD,QAAAY,SAIA,SAAAX,EAAAD,EAAAH,GAiBA,QAAAiB,GAAAC,GACA,MAAAlB,GAAAmB,EAAAD,IAEA,QAAAC,GAAAD,GACA,MAAAE,GAAAF,IAAA,WAAA,KAAA,IAAAG,OAAA,uBAAAH,EAAA,SJ8DC,GIjFDE,IACAE,mBAAA,EACAC,sBAAA,EACAC,2BAAA,EACAC,wBAAA,EACAC,2BAAA,EACAC,uBAAA,EACAC,uBAAA,GJkFEC,2BAA4B,GIhF9BC,uBAAA,GACAC,oBAAA,GACAC,oBAAA,GACAC,4BAAA,GACAC,oBAAA,GJyFCjB,GAAeJ,KAAO,WACrB,MAAOsB,QAAOtB,KAAKO,IAEpBH,EAAemB,QAAUjB,EACzBf,EEAKD,QAASc,EFCdA,EAAeZ,GAAK,GK7GrB,SAAAD,EAAAD,EAAAH,GLoHC,YAEA,IKlHDe,GAAAf,EAAA,ELoHCe,GACGX,OAAO,gBACPiC,WKlHJ,mBAAA,SAAA,WAAA,UAAA,UAAA,SAAA,gBAAA,mBAAA,SAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GLoHK,GKlHLC,GAAAC,ILoHKR,GAAOS,OAAST,EAAOS,WAEvBF,EAAGG,WAAa,SAASC,EAAMC,GKjHpCZ,EAAAW,KAAAA,ELmHOX,EAAOa,WAAaD,GAGtBL,EAAGO,UKlHR,SAAAC,GLoHO,GAAIC,GAAUZ,EAAOW,GAAME,SKhHlCC,GACAC,KAAA,QLmHSC,MAAO,MACPC,KAAM,MK/GfrB,GAAAsB,kBAAAC,aAAAP,EAAAQ,iBAAAN,EAAAlB,EAAAW,WAAA,GACAJ,EAAAG,WAAAQ,EAAAlB,EAAAW,MAAAK,GLuHK,IKlHLS,GAAArB,EAAAJ,EAAAa,YLmHSa,EAAejD,EAAQkD,KAAK3B,EAAOW,MK/G5CiB,EAAAtB,EAAA,WACAD,EAAAL,EAAAW,QLmHSX,EAAO6B,UAAYxB,EAAcL,EAAOW,MAAMX,EAAOa,aK/G9Db,EAAAS,OAAAT,EAAAS,OAAA3B,IAAA,SAAAgD,EAAAC,GAEA,MADAlC,QAAAmC,eAAAF,EAAA,OAAAG,YAAA,EAAAC,MAAAH,IACAD,GAIA,IAAAK,GAAA/B,EAAAJ,EAAAa,YACAuB,GAAA,CLmHWX,GAAaY,QAAQC,QAAQtC,EAAOW,MAAM4B,OAAOJ,EAAYE,QAAQC,QAAQtC,EAAOW,SAAWc,EAAac,OAAOJ,IKjH9HnC,EAAAW,OAAAe,IACAU,GAAA,GLoHOX,EKlHFU,ELmHET,EAAejD,EAAQkD,KAAK3B,EAAOW,MKhH1CyB,GACApC,EAAAwC,WAAA,yBLoHQ,IAGCC,EAAsBzC,EAAO0C,OAAO,WACtC,MAAOtC,GAAOuC,SAAWxC,EAAQpC,IAChC6D,GKhHRgB,IACAA,GAAAC,KAAAJ,GAIAG,EAAAC,KAAA7C,EAAA0C,OAAA,aAAAd,ILmHKgB,EKlHLC,KAAA7C,EAAA0C,OAAA,OAAAd,ILmHKgB,EKlHLC,KAAA7C,EAAA0C,OAAA,SAAAd,GAAA,GLsHK,IAAIkB,GAAwB9C,EAAO+C,IAAI,WAAY,WACjDH,EAAgBpE,QAAQ,SAASwE,GKjHxCA,OLqHKJ,GKlHLC,KAAAC,MLqHIG,UKlHJ,cAAA,WLoHK,OACEC,YKlHP,8BLmHOC,SKlHP,KLmHOC,OKjHP3C,OAAA,IACAE,KAAA,IACAkB,UAAA,IACAhB,WAAA,IACAwC,cAAA,IACAC,gBAAA,IACAC,SAAA,IACAC,aAAA,IACAC,oBAAA,IACAC,iBAAA,IACAC,mBAAA,ILmHSC,gBAAiB,IKjH1BtC,iBAAA,ILmHSuC,aAAc,IACdC,aAAc,IACdC,WAAY,IACZC,aAAc,KAEhBjE,WAAY,4BMlOnB,SAAAjC,EAAAD,EAAAH,GN4OC,YAEA,IM1ODe,GAAAf,EAAA,EN4OCe,GACGX,OM1OJ,gBN2OIiC,WAAW,sBAAuB,SAAU,WAAY,OAAQ,SAAU,iBAAkB,iBAAkB,SAASC,EAAQC,EAAUgE,EAAM7D,EAAQ8D,EAAgBC,GAEtK,GM1OL5D,GAAAC,IN4OKD,GAAG4D,eM1ORA,EN2OK5D,EAAG0D,KM1ORA,CN4OK,IAAIG,GAAiBpE,EAAO+C,IAAI,uBAAwB,WMzO7DxC,EAAA8D,cAAAH,EAAAI,iBACAtE,EAAA8D,aACA9D,EAAA+D,WACA/D,EAAAgE,cN6OOzD,EAAGI,KAAOuD,EAAeK,WACvBvE,EAAOS,OACPT,EAAOa,WACPb,EAAO8D,aMzOhB9D,EAAA+D,WACA/D,EAAAgE,eN+OKhE,GM1OL+C,IAAA,WAAA,WACAqB,MN6OK7D,EM1OLiE,kBAAA,SAAA1C,EAAA2C,GN2OO,GM1OPC,GAAAD,EAAAzE,EAAAgE,aACAW,EAAAvE,EAAA0B,EAAA8C,UAAAC,IAAAH,EAAA,WACAI,EAAA1E,EAAA0B,EAAAiD,QAAAF,IAAAH,EAAA,iBN2Oc5C,GAAMkD,aAEbhF,EAAOyD,qBMzOdwB,cAAAnD,EACAoD,sBAAAP,EAAA1D,SACAkE,oBAAAL,EAAA7D,YN8OKV,EM1OL6E,aAAA,SAAAtD,EAAA2C,GACA,GAAAC,GAAAD,EAAAzE,EAAAgE,YACAlC,GAAAkD,aAAA5E,EAAA0B,EAAA8C,UAAAC,IAAAH,EAAA,WAAAzD,UN6OKV,EAAG8E,oBM1OD,SAAAvD,EAAAwD,EAAAb,GN2OA,GM1OPC,GAAAD,EAAAzE,EAAAgE,aN2OWuB,EAAQnF,EAAO0B,EAAM8C,UMzOhCY,EAAApF,EAAA0B,EAAAiD,ON2OoB,WAATO,EMzOXC,EAAAV,IAAAH,EAAA,WAEAc,EAAAX,IAAAH,EAAA,iBN4Oc5C,GAAMkD,aAEbhF,EAAOyD,qBMzOdwB,cAAAnD,EACAoD,sBAAAK,EAAAtE,SACAkE,oBAAAK,EAAAvE,YN8OKV,EAAGkF,aAAe,SAAS3D,EAAOwD,EAAMb,GACtC,GAAIC,GAAcD,EAAoBzE,EAAOgE,YMzOpD,WAAAsB,IN2OSxD,EAAMkD,aAAe5E,EAAO0B,EAAM8C,UAAUC,IAAIH,EAAa,WAAWzD,cAK7EgC,UM1OJ,iBAAA,WN4OK,OACEC,YM1OP,qCN2OOC,SM1OP,KN2OOuC,QM1OP,eN2OOtC,OMzOP3C,OAAA,IN2OSI,WAAY,IMzOrB2C,aAAA,IN2OSC,oBAAqB,IACrBK,aAAc,IACdC,WAAY,IACZC,aAAc,KAEhBjE,WAAY,+BOzUnB,SAAAjC,EAAAD,EAAAH,GPmVC,YAEA,IOjVDe,GAAAf,EAAA,EPmVCe,GACGX,OOjVJ,gBPkVIiC,WOjVJ,2BAAA,SAAA,SAAA,iBAAA,iBAAA,SAAAC,EAAAI,EAAA+D,EAAAD,GPqVK,QOjVLyB,KPkVO7B,EOjVP1D,EAAAJ,EAAA8D,cAAA,QAAA,SPkVOC,EOjVP3D,EAAAJ,EAAA+D,YAAA,QAAA,SPkVOxD,EAAGyD,aAAe4B,SAAS5F,EAAOgE,cAClCzD,EOjVPsF,QPmVO,KAAK,GADDC,GAAa1F,EAAO0D,GACfiC,EAAI,EAAGA,GAAKhC,EAAWiC,KAAKlC,EAAc,SAAUiC,IAC3DxF,EAAGsF,MAAMhD,MOhVlBoD,MAAA/B,EAAAgC,WAAAJ,EAAA3B,EAAAgC,YAAAC,QAEAN,EAAAjB,IAAA,EAAA,QPoUK,GOhVLf,GAAAC,EADAxD,EAAAC,KAiBA6F,EAAAjG,EAAAuC,SPmVSyB,EAAiBpE,EAAO+C,IAAI,uBAAwB,WAElDsD,IAAmBjG,EAAOuC,WOhVrC0D,EAAAjG,EAAAuC,SACAgD,MPsVK3F,GAAO+C,IAAI,WAAY,WOhV5BqB,MPoVKuB,OAGD1C,UOjVJ,sBAAA,WPmVK,OACEE,SOjVP,KPkVOD,YAAa,sCACbnD,WAAY,gCACZqD,OACEU,aAAc,IACdC,WAAY,IACZC,aAAc,SQtYvB,SAAAlG,EAAAD,EAAAH,GRiZC,YAEA,IQ/YDe,GAAAf,EAAA,ERiZCe,GACGX,OQ/YJ,gBRgZIiC,WAAW,wBAAyB,SAAU,SAAU,iBAAkB,SAASC,EAAQI,EAAQ8D,GAElG,GAAI3D,GAAKC,KQ9Yd8F,GAAA,EAEAlC,EAAApE,EAAA+C,IAAA,uBAAA,WRiZOxC,EQ/YPgG,SAAArC,EAAAsC,kBRiZOjG,EAAGI,KAAOuD,EAAeuC,aAAazG,EAAOS,OAAQT,EAAOa,WAAYb,EAAO6D,aAC/E,IAAI6C,GAAOC,KAAKC,MAAMrG,EAAGI,KAAKkG,OAAS,EQ9Y9CtG,GAAAuG,eRgZO,KQ/YP,GAAAf,GAAA,EAAAW,EAAAX,EAAAA,IACAxF,EAAAuG,aAAAjE,KAAA,EAAAkD,ERmZW/F,GAAOuD,UAAY+C,IACrBA,GAAW,EACX/F,EAAGI,KAAKnC,QAAQ,SAASuI,GACnBA,EAAIC,SAAW5G,EAAOJ,EAAOa,YAAYyB,QAAQ,OAAOC,OAAOwE,EAAIhG,OACrER,EAAG0G,WAAWF,GAAK,OAO3B/G,GQ/YL+C,IAAA,WAAA,WRgZOqB,MAGF7D,EAAG0G,WAAa,SAASF,EAAKG,GQ7YnCA,GACAlH,EAAA4D,iBACArC,aAAAwF,EAAAhG,KAAAE,WRmZOV,EQ/YP4G,aAAA,IRgZO,IAAIC,GAAW7G,EAAGI,KAAK0G,QAAQN,EAC3BK,KAAa7G,EAAG+G,aAClB/G,EAAG+G,aAAe,MQ7Y3B/G,EAAA+G,aAAAF,ERgZS7G,EAAG4G,aAAeR,KAAKC,MAAMQ,EAAW,KAK5C7G,EAAGgH,eQ/YR,SAAAzF,EAAA0F,GRiZOjH,EAAGI,KAAKnC,QAAQ,SAASuI,GAEvB,SADOA,GAAIU,eACPD,EAAgB,CAClB,GAAIE,GAAmBX,EAAItG,OAAO4G,QAAQvF,GAAS,EAC/C4F,KACFX,EAAIU,eAAiB,0BAA4B3F,EAAM6F,UAO/DpH,EQ/YLqH,gBAAA,SAAA9F,EAAA+F,GAEA,GAAAlD,GAAAvE,EAAA0B,EAAA8C,UACA7D,KAAAX,EAAAyH,GAAA9G,QACAK,MAAAhB,EAAAyH,GAAAzG,SAEA0D,EAAAZ,EAAA4D,2BAAAhG,EAAA8C,SAAAD,EAAA7C,EAAAiD,ORiZO/E,GAAOyD,qBACLwB,cAAenD,EACfP,aAAcsG,EQ9YvB3C,sBAAAP,EAAA1D,SRgZSkE,oBAAqBL,EAAO7D,eAKjCgC,UQ/YJ,mBAAA,WRiZK,OACEC,YQ/YP,uCRgZOC,SQ/YP,KRgZOuC,QQ/YP,eRgZOtC,OQ9YP3C,OAAA,IACAI,WAAA,IACA2C,aAAA,IACAE,iBAAA,IACAC,mBAAA,IRgZSF,oBAAqB,IQ9Y9BJ,cAAA,IACAC,gBAAA,IACAC,SAAA,IRgZSK,gBAAiB,IACjBC,aAAc,KAEhB9D,WAAY,6BACZgI,KAAM,SAAS3E,EAAO4E,EAASC,EAAOC,GACpC9E,EAAM7C,GAAG2H,aAAeA,OS9fjC,SAAApK,EAAAD,EAAAH,GTygBC,YAEA,ISvgBDe,GAAAf,EAAA,ETygBCe,GACGX,OSvgBJ,gBTwgBIiC,WSvgBJ,2BAAA,SAAA,OAAA,SAAAC,EAAAiE,GTygBK,GAAI1D,GAAKC,IStgBdD,GAAA0D,KAAAA,CTygBK,ISvgBLkE,GAAAnI,EAAA0C,OAAA,SAAA,SAAA0F,GTwgBO7H,EAAG8H,gBAAkBD,ISpgB5BE,EAAAtI,EAAA+C,IAAA,WAAA,WTwgBOuF,IStgBPH,ST2gBIlF,USvgBJ,sBAAA,WTygBK,OACEE,SSvgBP,KTwgBOD,YSvgBP,sCTwgBOqF,SAAS,EStgBhBxI,WAAA,gCTwgBO2F,SSvgBP,qBAAA,qBTwgBOqC,KSvgBP,SAAA3E,EAAAoF,EAAAP,EAAAQ,GACArF,EAAAsF,cAAAD,EAAA,GACArF,EAAAuF,aAAAF,EAAA,ITygBOrF,OStgBPgF,OAAA,ITwgBS3H,OAAQ,IACR+C,aAAc,IACdH,cAAe,IACfK,iBAAkB,IAClBJ,gBAAiB,IACjBK,mBAAoB,SUjjB7B,SAAA7F,EAAAD,EAAAH,GV4jBC,YAEA,IU1jBDe,GAAAf,EAAA,EV4jBCe,GACGX,OU1jBJ,gBV2jBIiC,WAAW,uBAAwB,SAAU,OAAQ,SAAU,iBAAkB,iBAAkB,SAASC,EAAQiE,EAAM7D,EAAQ8D,EAAgBC,GAEjJ,GU1jBL5D,GAAAC,IV4jBKD,GAAGqI,UU1jBRzE,EAAA0E,oBV2jBKtI,EAAG0D,KU1jBRA,CV4jBK,IU1jBLG,GAAApE,EAAA+C,IAAA,uBAAA,WV2jBOxC,EU1jBP8D,cAAAH,EAAAI,iBV2jBStE,EU1jBT8D,aV2jBS9D,EU1jBT+D,WV2jBS/D,EU1jBTgE,cV6jBSzD,EAAGI,KU3jBZJ,EAAAqI,UV2jBmB1E,EAAe4E,qBACvB9I,EU1jBJS,OACPT,EAAAa,WV2jBWb,EAAO8D,aACP9D,EAAO+D,WACP/D,EAAOgE,cAGCE,EAAe6E,YAAY/I,EAAOS,OAAQT,EAAOa,aAI/Db,GU1jBL+C,IAAA,WAAA,WACAqB,MV6jBK7D,EAAGyI,YU1jBR,SAAAlH,EAAAmH,EAAAxE,GV4jBO,GU1jBPE,GAAAvE,EAAA0B,EAAA8C,UAAAC,IAAAoE,EAAA,QV2jBWnE,EAAS1E,EAAO0B,EAAMiD,QAAQF,IAAIoE,EAAU,OUxjBvD,IAAAxE,EAAA,CV2jBS,GAAIC,GAAcD,EAAoBzE,EAAOgE,YUzjBtDW,GAAAA,EAAAE,IAAAH,EAAA,WACAI,EAAAA,EAAAD,IAAAH,EAAA,iBV6jBc5C,GAAMkD,aAEbhF,EAAOyD,qBUzjBdwB,cAAAnD,EV2jBSoD,sBAAuBP,EAAS1D,SUzjBzCkE,oBAAAL,EAAA7D,YV8jBKV,EAAG2I,YU1jBD,SAAApH,EAAAwD,EAAA2D,GV4jBA,GAAI1D,GAAQnF,EAAO0B,EAAM8C,UACrBY,EAAMpF,EAAO0B,EAAMiD,OUzjB9B,WAAAO,EACAC,EAAAV,IAAAoE,EAAA,QAEAzD,EAAAX,IAAAoE,EAAA,QV6jBOjJ,EAAOyD,qBACLwB,cAAenD,EUzjBxBoD,sBAAAK,EAAAtE,SACAkE,oBAAAK,EAAAvE,YAKAV,EAAA4I,gBAAA,SAAArH,EAAA2C,GV2jBO,GAAIC,GAAcD,EAAoBzE,EAAOgE,YUzjBpDlC,GAAAkD,aAAA5E,EAAA0B,EAAA8C,UAAAC,IAAAH,EAAA,WAAAzD,aV8jBIgC,UU1jBJ,kBAAA,WV4jBK,OACEC,YU1jBP,sCV2jBOC,SU1jBP,KV2jBOuC,QU1jBP,eV2jBOtC,OUzjBP3C,OAAA,IV2jBSI,WAAY,IUzjBrB2C,aAAA,IACAC,oBAAA,IACAK,aAAA,IV2jBSC,WAAY,IACZC,aAAc,KAEhBjE,WAAY,4BACZgI,KAAM,SAAS3E,EAAO4E,EAASC,EAAOC,GACpC9E,EAAM7C,GAAG2H,aAAeA,OW7pBjC,SAAApK,EAAAD,EAAAH,GXwqBC,YAEA,IWtqBDe,GAAAf,EAAA,EXwqBCe,GACGX,OWtqBJ,gBXuqBIiC,WWtqBJ,uBAAA,SAAA,SAAA,iBAAA,SAAAC,EAAAI,EAAA8D,GXwqBK,GAAI3D,GAAKC,KWrqBd8F,GAAA,EAEAlC,EAAApE,EAAA+C,IAAA,uBAAA,WXuqBOxC,EAAGI,KWtqBVuD,EAAAkF,YAAApJ,EAAAS,OAAAT,EAAAa,WAAAb,EAAA6D,cXyqBW7D,EAAOuD,UAAY+C,IACrBA,GAAW,EACX/F,EAAGI,KAAKnC,QAAQ,SAAS4C,GACnBhB,EAAOJ,EAAOa,YAAYyB,QAAQ,SAASC,OAAOnB,EAAML,OAC1DR,EAAG8I,aAAajI,GAAO,OAO/BpB,GWtqBL+C,IAAA,WAAA,WXuqBOqB,MAGF7D,EWtqBL8I,aAAA,SAAAjI,EAAAkI,GAEAA,GACAtJ,EAAA4D,iBAAArC,aAAAH,EAAAL,KAAAE,WXyqBOV,EWtqBP4G,aAAA,IXuqBO,IAAIoC,GAAahJ,EAAGI,KAAK0G,QAAQjG,EAC7BmI,KAAehJ,EAAGiJ,eACpBjJ,EAAGiJ,eAAiB,MWpqB7BjJ,EAAAiJ,eAAAD,EACAhJ,EAAA4G,aAAAR,KAAAC,MAAA2C,EAAA,KX2qBKhJ,EAAGqH,gBWtqBR,SAAA9F,EAAA2H,GXuqBO,GWtqBP9E,GAAAvE,EAAA0B,EAAA8C,UAAAxD,MAAAhB,EAAAqJ,GAAArI,SACA0D,EAAAZ,EAAA4D,2BAAAhG,EAAA8C,SAAAD,EAAA7C,EAAAiD,OXwqBO/E,GAAOyD,qBACLwB,cAAenD,EACfP,aAAckI,EWrqBvBvE,sBAAAP,EAAA1D,SXuqBSkE,oBAAqBL,EAAO7D,eAKjCgC,UWtqBJ,kBAAA,WXwqBK,OACEC,YWtqBP,sCXuqBOC,SWtqBP,KXuqBOuC,QWtqBP,eXuqBOtC,OWrqBP3C,OAAA,IACAI,WAAA,IACA2C,aAAA,IACAC,oBAAA,IACAC,iBAAA,IXuqBSC,mBAAoB,IWrqB7BN,cAAA,IACAC,gBAAA,IACAC,SAAA,IXuqBSK,gBAAiB,IACjBC,aAAc,KAEhB9D,WAAY,4BACZgI,KAAM,SAAS3E,EAAO4E,EAASC,EAAOC,GACpC9E,EAAM7C,GAAG2H,aAAeA,OYzvBjC,SAAApK,EAAAD,EAAAH,GZowBC,YAEA,IAAIe,GYlwBLf,EAAA,EZowBCe,GACGX,OYlwBJ,gBZmwBIiC,WAAW,2BAA4B,SAAU,SAAU,WAAY,SAASC,EAAQ0J,EAAQC,GAC/F,GAAIxB,GAAgBnI,EAAO0C,OAAOgH,EAAOE,oBAAqB,SAASvB,GACjEA,EYjwBXsB,EAAAE,SAAA,WAEAF,EAAAG,YAAA,aAIAxB,EAAAtI,EAAA+C,IAAA,WAAA,WZmwBOuF,IYjwBPH,SZswBIlF,UYlwBJ,uBAAA,YAAA,SAAA8G,GZowBK,MYlwBLA,GAAAC,IAAA,yBZuwBO7G,SAAU,IACVpD,WAAY,+BajyBnB,SAAAjC,EAAAD,EAAAH,Gb2yBC,YAEA,IazyBDe,GAAAf,EAAA,Eb2yBCe,GACGX,OAAO,gBACPiC,WazyBJ,uBAAA,WAAA,SAAA,SAAA,SAAA,SAAA4J,EAAAD,EAAA1J,EAAAI,Gb2yBK,QazyBL6J,Kb0yBWxL,EAAQyL,UAAUR,EAAOS,YaxyBpCnK,EAAAe,KAAA,GAAAqJ,Mb0yBkB3L,EAAQyL,UAAUR,EAAOW,WAClCrK,EAAOe,KAAOX,EAAOJ,EAAOe,MAAM8D,IAAI,EAAG7E,EAAOqK,WAAWpJ,SaxyBpExC,EAAAyL,UAAAR,EAAAY,ab0yBStK,EAAOe,KAAOX,EAAOJ,EAAOe,MAAMwJ,SAAS,EAAGvK,EAAOsK,WAAWrJ,UavyBzEjB,EAAAwK,Sb4yBKb,EAASc,KAAK,QAASR,GAEvBjK,EAAO+C,IAAI,WAAY,WaxyB5B4G,EAAA3G,OAAA,QAAAiH,Qb6yBIhH,UazyBJ,kBAAA,Wb2yBK,OACEE,SAAU,IACVpD,WAAY,sBACZqD,OACErC,KAAM,IACNsJ,UAAW,IACXC,UAAW,Sc70BpB,SAAAxM,EAAAD,EAAAH,Gdw1BC,YAEA,Ict1BDe,GAAAf,EAAA,Edw1BCe,GACGX,OAAO,gBACPiC,Wct1BJ,oBAAA,WAAA,SAAA,UAAA,SAAA,SAAA,WAAA,WAAA,SAAA4J,EAAA3J,EAAAE,EAAAwK,EAAAhB,EAAAzJ,EAAA0K,Gds2BK,QAASC,GAAiBpC,EAAKqC,Gcr1BpC,MAAArC,GACAsC,IAAA,YAAAD,Gdu1BUC,IAAI,gBAAiBD,GACrBC,IAAI,oBAAqBD,GAG9B,Qct1BLE,Kdu1BO,MAAOL,GAAOhB,EAAOsB,cAAchL,GAGrC,QAASiL,GAAcC,EAAGC,EAAGC,Gcp1BlC,GAAAC,IAAAH,EAAAA,EAAAC,EAAAA,EAUA,Od80BWC,IAAkBA,EAAeF,IACnCG,EAAOH,GAAKE,EAAeF,GAGzBE,GAAkBA,EAAeD,IACnCE,EAAOF,GAAKC,EAAeD,Gcn1BpCE,EdizBK,Gct1BLV,Eds1BK,CAIA,GAAIW,GAAMC,CACN7B,GAAO8B,WACTD,EAAqBb,EAAOhB,EAAO8B,UAAUxL,GAC7CsL,Gcr1BPG,SACAd,EAAAe,eAAAH,Mds3BKZ,Ect1BLhB,EAAA,IAAAgC,Wdu1BOL,Kct1BPA,Edu1BOM,Qct1BP,SAAA9J,GACAiJ,Mdu1BWtM,EAAQuJ,QAAQlG,EAAM+J,QAAQhC,SAAS,mBACvC/H,EAAM+J,OAAOC,SAAWpB,EAAOhB,EAAOoC,UAAU9L,GAChD8B,EAAM+J,OAAOE,MAAMC,cAAgB,Ocr1B9CtC,EAAAuC,cdu1BavB,EAAOhB,EAAOuC,aAAajM,Gcr1BxCA,EAAAwK,Yd01BO0B,OAAQ,SAASpK,GAEf,Gct1BTiJ,IAAA,Cdu1BW,Gct1BXvC,GAAA/J,EAAAuJ,QAAAlG,EAAA+J,QACAX,GAAAiB,WAAA3D,EAAA4D,KAAA,YAAA,IAAAtK,EAAAuK,IAAA,Gdu1BelB,GAAKgB,WAAW3D,EAAI4D,KAAK,YAAc,IAAMtK,EAAMwK,IAAM,EAE7D,Qct1BX5B,EAAAhB,EAAA6C,MAAAvM,Idu1Ba,Ict1Bb,Idu1BemL,EAAI,Ccr1BnB,Mdw1Ba,KAAK,Icr1BlBD,EAAA,EAMA,WAAAhL,EAAAsM,iBAAAhE,EAAA,IAAAiE,Udu1BajE,Ect1BbsC,IAAA,WAAA,Ydy1BWF,Ect1BXpC,EAAA,aAAA0C,EAAA,OAAAC,EAAA,OACAL,IAAA,UAAA,Kdu1BcsB,KAAK,SAAUlB,GACfkB,KAAK,SAAUjB,GAEdzB,EAAOgD,Scr1BtBhC,EAAAhB,EAAAgD,QAAA1M,EAAAiL,EAAAC,EAAAC,EAAAI,Idu1BavL,EAAOwK,YAKbmC,MAAO,SAAS7K,GAEd,Gct1BTiJ,IAAA,Cdu1BW,Gct1BXvC,GAAA/J,EAAAuJ,QAAAlG,EAAA+J,QACAX,EAAA1C,EAAA4D,KAAA,Udu1BejB,EAAI3C,EAAI4D,KAAK,Scp1B5BtK,GAAA+J,OAAAE,MAAAC,cAAA,OACAtC,EAAAkD,Ydu1BalC,Ect1BbhB,EAAAkD,WAAA5M,EAAAiL,EAAAC,EAAAC,EAAAI,Idu1BavL,Ect1BbwK,Udy1BWvK,EAAS,WACP2K,EAAiBpC,EAAK,MACnBqE,WAAW,UACXA,WAAW,UACX/C,YAAY,oBcr1B5B,OAMA,IAAAxB,GAAAtI,EAAA+C,IAAA,WAAA,Wdu1BOuF,Icr1BPqC,EAAAhB,EAAA,IAAAmD,cd01BI7J,UAAU,eAAgB,WAEzB,OACEE,SAAU,IACVpD,WAAY,uBe39BnB,SAAAjC,EAAAD,EAAAH,Gfq+BC,YAEA,Ien+BDe,GAAAf,EAAA,Efq+BCe,GACGX,OAAO,gBACPiC,Wen+BJ,oBAAA,WAAA,SAAA,SAAA,SAAA,WAAA,SAAA4J,EAAA3J,EAAA0K,EAAAhB,EAAAiB,Gfq+BK,Gen+BLA,Efm+BK,CAIAA,EAAShB,EAAS,IAAIoD,Uel+B3BC,YAAA,SAAAlL,GACArD,EAAAuJ,QAAAlG,EAAA+J,QAAAhC,SAAA,gBAEAoD,YAAA,SAAAnL,GACArD,EAAAuJ,QAAAlG,EAAA+J,QAAA/B,YAAA,gBfq+BOoD,iBen+BP,SAAApL,Gfo+BSrD,EAAQuJ,QAAQlG,EAAM+J,QAAQ/B,YAAY,gBAE5CqD,OAAQ,SAASrL,GACXA,EAAMsL,cAActB,Wel+BjCpB,EAAAhB,EAAA2D,QAAArN,GAAA8L,SAAAhK,EAAAsL,cAAAtB,WACA9L,EAAAwK,YAKA,IAAAlC,GAAAtI,EAAA+C,IAAA,WAAA,Wfo+BOuF,Iel+BPqC,EAAAhB,EAAA,IAAAmD,cfu+BI7J,UAAU,eAAgB,WAEzB,OACEE,SAAU,IACVpD,WAAY,uBgB7gCnB,SAAAjC,EAAAD,EAAAH,GhBuhCC,YAEA,IgBrhCDe,GAAAf,EAAA,EhBuhCCe,GACGX,OAAO,gBACPiC,WAAW,4BAA6B,WAAY,SAAU,SAAU,SAAU,SAAS4J,EAAU3J,EAAQ0K,EAAQhB,GgBnhCzHgB,EAAAhB,EAAA4D,sBAAAC,OAAAvN,GhBshCOwN,MAAO7D,EAAS,GAAG8D,YgBphC1BC,OAAA/D,EAAA,GAAAgE,kBhByhCI1K,UAAU,uBAAwB,WAEjC,OACEE,SAAU,IACVpD,WAAY,+BiBziCnB,SAAAjC,EAAAD,EAAAH,GjBmjCC,YAEA,IiBjjCDe,GAAAf,EAAA,EjBmjCCe,GACGX,OAAO,gBACPiC,WiBjjCJ,oBAAA,WAAA,SAAA,SAAA,SAAA,WAAA,SAAA4J,EAAA3J,EAAA0K,EAAAhB,EAAAiB,GjBqkCK,QiBjjCLiD,KACA,MAAAlD,GAAAhB,EAAAmE,cAAA7N,GjBojCK,QiBjjCE8N,GAAAxI,EAAAkD,EAAA4C,GjBkjCA,GiBjjCP2C,KAeA,OjBmiCOA,GiBjjCPzI,KAAAA,EjBkjCoB,UAATA,GiBhjCXyI,EAAA7C,EAAA1C,EAAAwF,KAAA,KACAD,EAAA5C,EAAA3C,EAAAwF,KAAA,MjBkjC2B,QAAT1I,IiBhjClByI,EAAA7C,EAAAiB,WAAA3D,EAAAsC,IAAA,SAAAvC,QAAA,KAAA,KAAA0F,EAAAT,MACAO,EAAA5C,EAAAgB,WAAA3D,EAAAsC,IAAA,UAAAvC,QAAA,KAAA,KAAA0F,EAAAP,QAEAtC,GAAAA,EAAAF,IjBkjCS6C,EAAa7C,EAAIvE,KAAKuH,MAAMH,EAAa7C,EAAIE,EAAeF,IiB/iCrEE,GAAAA,EAAAD,IACA4C,EAAA5C,EAAAxE,KAAAuH,MAAAH,EAAA5C,EAAAC,EAAAD,IAEA4C,EjB2gCK,GiBjjCLpD,EjBijCK,CAIA,GAAIW,GAAMC,CACN7B,GAAO8B,WACTD,EAAqBb,EAAOhB,EAAO8B,UAAUxL,GAC7CsL,GiBhjCPG,SACAd,EAAAe,eAAAH,KjBsjCK,IiB/iCL4C,GjB+iCSF,KACAG,IA0BJzD,GiBjjCLhB,EAAA,IAAA0E,WjBkjCOC,MiBjjCP5D,EAAAhB,EAAA6E,aAAAvO,GjBkjCOsL,KiBjjCPA,EjBkjCOM,QiBjjCP,SAAA9J,GjBmjCS,GiBjjCT8L,IAAA,CjBkjCWO,EAAa,KACb,IAAI3F,GAAM/J,EAAQuJ,QAAQlG,EAAM+J,OAChCoC,GAAmBP,OAASlF,EAAI,GAAGmF,aiBhjC9CM,EAAAT,MAAAhF,EAAA,GAAAiF,YjBkjCWW,EAAwBV,OAASlF,EAAIsC,IAAI,UiBhjCpDsD,EAAAZ,MAAAhF,EAAAsC,IAAA,WjBqjCOoB,OAAQ,SAASpK,GAEf,GiBjjCT8L,IAAA,CjBkjCW,GiBjjCXpF,GAAA/J,EAAAuJ,QAAAlG,EAAA+J,QjBkjCeX,EAAIiB,WAAW3D,EAAIwF,KAAK,MAAQ,GAChC7C,EAAIgB,WAAW3D,EAAIwF,KAAK,MAAQ,EiB/iC/CxF,GAAAsC,KACA0C,MAAA1L,EAAA0M,KAAAhB,MAAA,KjBkjCaE,OAAQ5L,EAAM0M,KAAKd,OAAS,OiB7iCzCxC,GAAApJ,EAAA2M,UAAAC,KjBkjCWvD,GAAKrJ,EAAM2M,UAAUE,IAErBnG,EiBjjCXsC,IAAA,YAAA,aAAAI,EAAA,MAAAC,EAAA,OjBmjCW3C,EAAIwF,KAAK,IAAK9C,GiBhjCzB1C,EAAAwF,KAAA,IAAA7C,IAEA,IAAArJ,EAAA2M,UAAAC,MAAA,IAAA5M,EAAA2M,UAAAE,OjBkjCaR,EAAa,SAGXzE,EAAOkF,WACTlE,EAAOhB,EAAOkF,UAAU5O,EAAQ8N,EAAgBK,EAAY3F,EAAK+C,IiBhjC9EvL,EAAAwK,YjBujCOmC,MAAO,SAAS7K,GAEd,GAAI8L,IiBjjCb,CjBmjCW,GiBjjCXpF,GAAA/J,EAAAuJ,QAAAlG,EAAA+J,QACAkC,EAAAD,EAAAK,EAAA3F,EAAA+C,EjBmjCW/C,GACGwF,KAAK,IAAK,MACVA,KAAK,IAAK,MiBhjCxBlD,KACA+D,UAAA,KACArB,MAAAY,EAAAZ,MjBkjCeE,OAAQU,EAAwBV,SAGhChE,EAAOoF,cACTpE,EAAOhB,EAAOoF,aAAa9O,EAAQ+N,GACnC/N,EAAOwK,aiB1iCpB,IAAAlC,GAAAtI,EAAA+C,IAAA,WAAA,WjBkjCOuF,IiBhjCPqC,EAAAhB,EAAA,IAAAmD,cjBqjCI7J,UAAU,eAAgB,WAEzB,OACEE,SAAU,IACVpD,WAAY,uBAQb,SAASjC,EAAQD,EAASH,GkBxrChC,QAAAiB,GAAAC,GACA,MAAAlB,GAAAmB,EAAAD,IAEA,QAAAC,GAAAD,GACA,MAAAE,GAAAF,IAAA,WAAA,KAAA,IAAAG,OAAA,uBAAAH,EAAA,SlBsrCC,GkB/rCDE,IACAiQ,oBAAA,GACAC,uBAAA,GACAC,kCAAiC,GlBusChCtQ,GAAeJ,KAAO,WACrB,MAAOsB,QAAOtB,KAAKO,IAEpBH,EAAemB,QAAUjB,EACzBf,EEAKD,QAASc,EFCdA,EAAeZ,GAAK,ImBjtCrB,SAAAD,EAAAD,EAAAH,GnBwtCC,YAEA,ImBttCDe,GAAAf,EAAA,EnBwtCCe,GACGX,OmBttCJ,gBnButCIoR,OAAO,gBAAiB,iBAAkB,iBAAkB,SAAShL,EAAgBC,GAEpF,QmBttCL5C,GAAAR,EAAAoO,EAAAC,GAMA,MnBktCWA,MAAkB,IACpBD,EAAShL,EAAegC,YAAYgJ,ImBntC7CjL,EAAAgC,WAAAnF,EAAAoO,GnB4tCK,MAFA5N,GAAa8N,WAAY,EAElB9N,MoB5uCZ,SAAAzD,EAAAD,EAAAH,GpBqvCC,YAEA,IoBnvCDe,GAAAf,EAAA,EpBqvCCe,GACGX,OAAO,gBACPoR,OAAO,mBAAoB,gBAAiB,SAASI,GAEpD,MoBnvCL7Q,GAAA8Q,QAAAC,OAAA,EACAF,EAIA,SAAAG,EAAAC,EAAAC,GpByvCO,MAJED,GoBpvCT/I,KAAAiJ,IAAAC,OAAAH,MAAAI,EAAAA,EpBovCiBD,OAAOH,GoBjvCxB9J,SAAA8J,GpBqvCWK,MAAML,GoBlvCjBD,GpBsvCWhR,EAAQuR,SAASP,KoBlvC5BA,EAAAA,EAAAQ,YpBqvCYxR,EAAQyR,QAAQT,IAAWhR,EAAQ0R,SAASV,IAIjDE,GoBnvCPA,GAAAI,MAAAJ,GAAA,EAAA/J,SAAA+J,GpBovCOA,EoBnvCA,EAAAA,GAAAA,IAAAF,EAAA5I,OAAA4I,EAAA5I,OAAA8I,EAAAA,EpBqvCID,GAAS,EACJD,EAAMW,MAAMT,EAAOA,EAAQD,GACf,IAAVC,EACFF,EAAMW,MAAMV,EAAOD,EAAM5I,QAEzB4I,EAAMW,MAAMzJ,KAAK0J,IAAI,EAAGV,EAAQD,GAAQC,IoB9vCxDF,QC7BA,SAAA3R,EAAAD,EAAAH,GrBsyCC,YAEA,IqBpyCDe,GAAAf,EAAA,ErBsyCCe,GACGX,OAAO,gBACPoR,OAAO,6BAA8B,WAEpC,MqBpyCL,UAAAoB,EAAAzJ,EAAA0J,GrBqyCO,MqBpyCPD,GrByyCWA,EAAOzJ,QAAUA,GAAUyJ,EAAOzJ,OAAS,GAAK0J,EAAY,GACvDD,EAAOE,OAAO,EAAG3J,GAAU,MAE3ByJ,EqB3yCT,OCZP,SAAAxS,EAAAD,EAAAH,GAUA,QAAAiB,GAAAC,GACA,MAAAlB,GAAAmB,EAAAD,IAEA,QAAAC,GAAAD,GACA,MAAAE,GAAAF,IAAA,WAAA,KAAA,IAAAG,OAAA,uBAAAH,EAAA,StBozCC,GsBh0CDE,ItBi0CE2R,sBAAuB,GsB/zCzBC,wBAAA,GACAC,sBAAA,GACAC,qBAAA,GACAC,gBAAA,GACAC,cAAA,GtBw0CCnS,GAAeJ,KAAO,WACrB,MAAOsB,QAAOtB,KAAKO,IAEpBH,EAAemB,QAAUjB,EACzBf,EEAKD,QAASc,EFCdA,EAAeZ,GAAK,IuBr1CrB,SAAAD,EAAAD,EAAAH,GvB41CC,YAEA,IuB11CDe,GAAAf,EAAA,EvB41CCe,GACGX,OuB11CJ,gBvB21CIiT,SuB11CJ,iBAAA,WvB41CK,GAAIC,IACFvS,SACEsC,MACEqF,KAAM,KuBz1CjBW,IAAA,QACA3F,MAAA,OACA6P,QAAA,OACAC,KAAA,QACAC,SAAA,iBvB41CSC,OuBz1CTrK,IAAA,oBACA1F,KAAA,wBACAD,MAAA,YACAD,KAAA,SvB61COf,QACEW,MACEqF,KAAM,KuBz1CjBW,IAAA,QACA3F,MAAA,OACA6P,QAAA,OACAC,KAAA,QACAC,SAAA,iBvB41CSC,OACErK,IAAK,oBACL1F,KAAM,wBuBz1CjBD,MAAA,YACAD,KAAA,UAKAkQ,EAAA,UACAC,EAAA7S,EAAAkD,KAAAqP,EAAAK,GAAAtQ,MvB21CSwQ,EAAsB9S,EAAQkD,KAAKqP,EAAeK,GAAeD,OACjEvI,GAAsB,EAEtB2I,GuBz1CTC,YAAA,SvB21COC,UAAW,QuBv1ClBC,GAAA,EvB41CSC,EAAiBpR,IAErBoR,GuB11CLC,eAAA,SAAAC,GvB41CO,MuB31CPrT,GAAAsT,OAAAT,EAAAQ,GvB21CcF,GAGTA,EuB11CLI,gBAAA,SAAAF,GvB41CO,MuB31CPrT,GAAAsT,OAAAR,EAAAO,GvB21CcF,GAGTA,EuB11CLK,eAAA,SAAAC,GvB41CO,MuB31CPzT,GAAAsT,OAAAP,EAAAU,GvB21CcN,GAGTA,EuB11CLO,yBAAA,SAAAjQ,GvB41CO,MADAyP,GuB11CPzP,EvB21Cc0P,GAGTA,EuB11CLQ,iBAAA,SAAAlQ,GACA,GAAA,MAAA,UAAA,UAAAmF,QAAAnF,GvB21CS,KAAM,IAAInD,OAAM,gEAKlB,OuB71CPsS,GAAAnP,EACAoP,EAAA7S,EAAAkD,KAAAqP,EAAAK,GAAAtQ,MACAwQ,EAAA9S,EAAAkD,KAAAqP,EAAAK,GAAAD,OvB21CcQ,GAGTA,EuB11CL/I,oBAAA,SAAA3G,GvB41CO,MADA2G,GuB11CP3G,EACA0P,GvB61CKA,EuB11CLS,KAAA,WvB21CO,OACElM,YAAamL,EACbgB,aAAcf,EACdC,YAAaA,EACbG,sBAAuBA,EACvBN,cAAeA,EACfxI,oBAAqBA,OwB/7C9B,SAAA/K,EAAAD,EAAAH,GxB08CC,YAEA,IwBx8CDe,GAAAf,EAAA,ExB08CCe,GACGX,OwBx8CJ,gBxBy8CIyU,QwBx8CJ,oBAAA,WAAA,SAAAtS,GxB08CK,QwBx8CLuS,GAAAC,EAAAC,EAAAC,GxBy8CO,GAAIC,EACJ,OAAO,YwBt8Cd,QAAAC,KACAD,EAAA,KACAD,GACAF,EAAAK,MAAAC,EAAAC,GxBo8CS,GAAID,GAAUvS,KAAMwS,EAAOC,UAOvBC,EAAUP,IAAcC,CAC5B3S,GAASkT,OAAOP,GAChBA,EAAU3S,EAAS4S,EAAOH,GwBv8CnCQ,GxBy8CWT,EAAKK,MAAMC,EAASC,IAK1B,MAAOR,OyBr+CZ,SAAA1U,EAAAD,EAAAH,GzB8+CC,YAEA,IyB5+CDe,GAAAf,EAAA,EzB8+CCe,GACGX,OAAO,gBACPsV,QyB5+CJ,kBAAA,aAAA,SAAA,iBAAA,SAAAC,EAAAjT,EAAA+D,GzB8+CK,QAAS+B,GAAWnF,EAAMoO,GACxB,MAAqC,YAAjChL,EAAekN,cyB3+C1BgC,EAAAjT,EAAAW,GAAAE,SAAAkO,GACA,WAAAhL,EAAAkN,cACAjR,EAAAW,GAAAoO,OAAAA,GADA,OzBi/CK,QAASrH,GAA2BwL,EAAU3O,EAAU4O,GACtD,IAAKA,EyB3+CZ,MAAAA,EAEA,IAAAC,GAAApT,EAAAuE,GAAAqB,KAAA5F,EAAAkT,GACA,OAAAlT,GAAAmT,GAAA1O,IAAA2O,GzB++CK,QAASC,GAAgB3R,EAAO4R,EAAaC,GAE3C,GAAIC,GAAaxT,EAAO0B,EAAM8C,UyB3+CrCiP,EAAAzT,EAAA0B,EAAAiD,QAAAjD,EAAA8C,SzBg/CO,IAHA8O,EyB5+CPtT,EAAAsT,GzB6+COC,EyB5+CPvT,EAAAuT,GzB8+CWlV,EAAQyL,UAAUpI,EAAMgS,UAAW,CAErC,OAAQhS,EAAMgS,UyB3+CvB,IAAA,OACAF,EAAAG,KACA5S,KAAAuS,EAAAvS,QzB8+Ca,MAEF,KAAK,QyB3+ChByS,EAAAG,KACA5S,KAAAuS,EAAAvS,OzB6+CeC,MAAOsS,EAAYtS,SyB1+ClC,MzB8+CW,SACE,KAAM,IAAIrC,OAAM,kBAAoB+C,EAAMgS,SAAW,2DAGzDD,EyB5+CT/L,EAAAhG,EAAA8C,SAAAgP,EAAAC,GzBg/CO,MAAQD,GAAWI,QAAQN,IAAgBE,EAAWK,SAASN,IAC5DE,EAASG,QAAQN,IAAgBG,EAASI,SAASN,IyB3+C7DC,EAAAK,SAAAP,IAAAG,EAAAG,QAAAL,IACAC,EAAArR,OAAAmR,IACAG,EAAAtR,OAAAoR,GAIA,QAAAO,GAAAzT,EAAA0T,EAAAC,GACA,MAAA3T,GAAAyO,OAAA,SAAApN,GACA,MAAA2R,GAAA3R,EAAAqS,EAAAC,KAIA,QAAAC,GAAA9S,EAAA+S,EAAAC,GACA,GAAAJ,GAAA/T,EAAAmB,GAAAe,QAAAgS,GACAF,EAAAhU,EAAAmB,GAAAiT,MAAAF,EzB6+CO,OyB5+CAJ,GAAAK,EAAAJ,EAAAC,GAGP,QAAAK,GAAAhU,GACA,MAAAA,GAAAyO,OAAA,SAAApN,GACA,MAAAA,GAAA4S,wBAAA,IACA7N,OzB++CK,QyB5+CLL,KAGA,IzB0+CO,GAAImO,MACAC,EAAQ,EyB3+CnB,EAAAA,GzB6+CSD,EAAS9R,KAAKqD,EAAW9F,IAASyU,QAAQD,KAAUzQ,EAAegC,YAAY8K,SyB1+CxF,OAAA0D,GzB++CK,QyB5+CLvL,GAAA3I,EAAAI,EAAAgD,GzBk/CO,IAJA,GyB5+CPlD,MACAmU,EAAAT,EAAAxT,EAAA,OAAAJ,GACAW,EAAAhB,EAAAS,GAAAyB,QAAA,QACAsS,EAAA,EACA,GAAAA,GAAA,CzB6+CS,GyB5+CTT,GAAA/S,EAAAiB,QACA+R,EAAAD,EAAA9R,QAAAmS,MAAA,SACAO,EAAAb,EAAAY,EAAAX,EAAAC,GzB6+CaY,GACF/O,MAAOC,EAAWiO,EAAahQ,EAAegC,YAAY/E,OyB3+CrE6T,QAAAd,EAAsB5R,OAAAnC,IAAAkC,QAAA,UACtB7B,OAAAsU,EACAhU,KAAAoT,EACAe,WAAAT,EAAAM,GAGAlR,IAAAsR,aAAAH,IzB6+CSrU,EAAKkC,KAAKmS,GACV5T,EAAMyD,IAAI,EAAG,SACb+P,IyBz+CT,MAAAjU,GzBg/CK,QyB5+CL8F,GAAAhG,EAAAI,EAAAgD,GzB8+CO,GyBz+CPiR,GzBy+CWM,EyB5+CJhV,EAAAS,GAAAyB,QAAA,SACPyE,EAAAqO,EAAA/S,QAAAC,QAAA,QzB6+CW+S,EAAiBjV,EAAOS,GAAY2T,MAAM,SAASA,MAAM,OAG3DM,GyB7+CT3Q,EAAAwN,sBzB6+C0BuC,EAAqBzT,EAAQsG,EAAKsO,GAElCnB,EAAqBzT,EAAQ2U,EAAcA,EAAa/S,QAAQmS,MAAM,SAKzF,KAHA,GyB5+CP7T,MACA2U,EAAAlV,IAAAkC,QAAA,OzB8+CcyE,EAAIkN,SAASoB,IAAiB,CyB1+C5C,GAAArO,GAAAD,EAAA3F,UAAAhB,EAAAS,GAAAO,QACAmU,MACAvO,GAAA7C,EAAAwN,yBACA4D,EAAArB,EAAAY,EAAA/N,EAAAA,EAAA1E,QAAAmS,MAAA,QzB++CS,IyB5+CTQ,IACA/O,MAAAc,EAAAhG,OACAA,KAAAgG,EAAA1E,QACA2E,QAAAA,EzB6+CWwO,OAAQF,EAAMtB,QAAQjN,GACtBkO,QAASK,EAAM/S,OAAOwE,GyB3+CjC0O,SAAAH,EAAsBrB,SAAAlN,GzB6+CX2O,WAAY,EAAG,GAAGrO,QAAQN,EAAIA,OAAS,GyB3+ClDtG,OAAA8U,EzB6+CWL,WAAYT,EAAcc,GAG5B1R,IAAcsR,aAAcH,IAE5BrU,EAAKkC,KAAKmS,GAEVjO,EAAIlC,IAAI,EAAG,OyBz+CpB,MAAAlE,GzBg/CK,QyB5+CLoI,GAAAtI,EAAAI,GzBm/CO,IALA,GyB5+CP8U,GAAAvV,EAAAS,GAAAyB,QAAA,QACAsT,EAAAxV,EAAAS,GAAA2T,MAAA,QACA1O,EAAA6P,EAAAtT,QACAwT,KACAP,EAAAlV,IAAAkC,QAAA,OACAuT,EAAAhP,OAAA,GzB6+CSgP,EyB5+CThT,MACAiT,aAAA5P,EAAAJ,EAAA3B,EAAAgC,YAAA8K,SzB6+CWlQ,KAAM+E,EAAWzD,QyB3+C5B0T,SAAA7P,EAAAJ,EAAA3B,EAAAgC,YAAAY,KzB6+CWyO,OAAQ1P,EAAWmO,SAASqB,GAC5BL,QAASnP,EAAWvD,OAAO+S,GyB3+CtCG,SAAA3P,EAAAkO,QAAAsB,GzB6+CWI,WAAY,EAAG,GAAGrO,QAAQvB,EAAWiB,OAAS,KyB1+CzDjB,EAAAjB,IAAA,EAAA,MzB++CO,IyB5+CPmR,GAAA9B,EAAAzT,EAAAkV,EAAAC,GAAA9W,IAAA,SAAAgD,GAEA,GzBg/CamU,GAAQC,EyBh/CrBtC,EAAAxT,EAAA0B,EAAA8C,UAAAtC,QAAA,OACAuR,EAAAzT,EAAA0B,EAAAiD,QAAAjD,EAAA8C,UAAAtC,QAAA,OzB6+Ca6T,EyB5+CJ/V,EAAAuV,GAAArT,QAAA,OACT8T,EAAAhW,EAAAwV,GAAAtT,QAAA,MzBkgDS,OyB9/CT2T,GADArC,EAAAK,SAAAkC,IAAAvC,EAAArR,OAAA4T,GACA,EzB8+CoBvC,EAAW5N,KAAKmQ,EAAe,QAGtCtC,EAASG,QAAQoC,KACnBvC,EAAWuC,GyBz+CtBxC,EAAAK,SAAAkC,KACAvC,EAAAuC,GzB++CSD,EAAO9V,EAAOyT,GAAU7N,KAAK4N,EAAY,QAAU,EyB1+C5D9R,EAAcuU,QAAAH,EzB6+CLpU,EAAMwU,UAAYL,EAEXnU,GyBz+ChB,QAAA+T,KAAAA,EAAApV,OAAAuV,GzBg/CK,QyB5+CLzR,GAAA9D,EAAAI,EAAAiD,EAAAC,EAAAC,GAEA,GAAAuS,GAAAnW,EAAA0D,GAAA,QAAA,SAAA+B,QACA2Q,EAAApW,EAAA2D,GAAA,QAAA,SAAA8B,QACA4Q,EAAA,GAAAzS,EAAA,GACA0S,EAAAtW,EAAAS,GAAAyB,QAAA,OAAAuC,IAAA0R,EAAA,SACAI,EAAAvW,EAAAS,GAAAyB,QAAA,OAAAuC,IAAA2R,EAAA,SACAI,GAAAJ,EAAAD,EAAA,GAAAE,EzB6+CWI,EAAuBJ,EAAa,GACpCK,KyB3+CXhC,EAAAZ,EACAzT,EzB6+CSL,EyB5+CTS,GAAAyB,QAAA,OAAArB,SzB6+CSb,EyB5+CAS,GAAA2T,MAAA,OAAAvT,SzB++CF,OAAO6T,GAAehW,IAAI,SAASgD,GAOjC,GyBj/CTA,EAAA6M,IADAvO,EAAA0B,EAAA8C,UAAAqP,SAAAyC,GACA,EAEAtW,EAAA0B,EAAA8C,UAAAtC,QAAA,UAAA0D,KAAA0Q,EAAApU,QAAA,UAAA,WAAAuU,EAAA,EzB++CazW,EAAO0B,EAAMiD,QAAUjD,EAAM8C,UAAUoP,QAAQ2C,GyB3+C5D7U,EAAA4L,OAAAkJ,EAAA9U,EAAA6M,QACA,CzB6+CW,GAAIoI,GyB5+CJjV,EAAA8C,QACXxE,GAAA0B,EAAA8C,UAAAqP,SAAAyC,KzB6+CaK,EAAYL,EAAczV,UAK1Ba,EAAM4L,OAHH5L,EAAMiD,OAGM3E,EAAO0B,EAAMiD,QAAUjD,EAAM8C,UAAUoB,KAAK+Q,EAAW,WAAaF,EyB9+ChG,GAYA,MANA/U,GAAA6M,IAAA7M,EAAA4L,OAAAkJ,IACO9U,EAAA4L,OAAA,GzB++CE5L,EAAM4M,KAAO,EyB1+CtB5M,IzB6+CUoN,OyB5+CV,SAAApN,GzB6+CS,MAAOA,GAAM4L,OAAS,IACrB5O,IyB5+CV,SAAAgD,GzB8+CS,GAAIkV,IyB5+Cb,CAwBA,OzBq9CSF,GyB5+CTtY,QAAA,SAAAyY,EAAAC,GzB6+CW,GAAIC,IAAqB,CAEzBF,GAAOzY,QAAQ,SAAS4Y,IyB3+CnC3D,EAAA3R,EAAAsV,EAAAxS,SAAAwS,EAAArS,QAAAqS,EAAAxS,WACA6O,EAAA2D,EAAAtV,EAAA8C,SAAA9C,EAAAiD,QAAAjD,EAAA8C,aACAuS,GAAA,KzBg/CeA,GAAsBH,IACxBA,GAAqB,EyB3+ClClV,EAAA4M,KAAA,IAAAwI,EACAJ,EAAAI,GAAArU,KAAAf,MzBi/CakV,IACFlV,EAAM4M,KAAwB,IAAjBoI,EAAQjQ,OACrBiQ,EAAQjU,MAAMf,KyBz+CzBA,IzBk/CK,QAASgH,GAAqBrI,EAAQI,EAAYiD,EAAcC,EAAYC,GAC1E,GyB5+CPqT,GAAAtO,EAAAtI,EAAAI,GACAyW,IAeA,OzB89COD,GyB5+CPxB,KAAArX,QAAA,SAAAuI,GzB6+CS,GyB5+CTwQ,GAAAF,EAAA5W,OAAAyO,OAAA,SAAApN,GACA,MAAA1B,GAAA0B,EAAA8C,UAAAtC,QAAA,OAAAC,OAAAnC,EAAA2G,EAAAhG,MAAAuB,QAAA,UzB8+CakV,EAAejT,EyB3+C5BgT,EzB6+CWxQ,EAAIhG,KyB3+Cf+C,EACAC,EzB6+CWC,EyB1+CXsT,GAAAA,EAAAG,OAAAD,KAEAH,EAAA5W,OAAA6W,EACAD,EzB++CK,QAAS/S,GAAiBR,EAAcC,EAAYC,GyB3+CzD,GAAA0T,GAAAtX,EAAA0D,GAAA,QAAA,SACA6T,EAAAvX,EAAA2D,GAAA,QAAA,SACA0S,EAAA,GAAAzS,EAAA,EACA,QAAA2T,EAAA3R,KAAA0R,EAAA,SAAA,GAAAjB,EAAA,EzB++CK,OyB3+CLjQ,gBAAAA,EACA4C,YAAAA,EACA3C,aAAAA,EACAsC,YAAAA,EzB6+COxE,WAAYA,EACZuE,qBAAsBA,EACtBxE,iBAAkBA,EAClBwD,2BAA4BA,EAC5B5B,WAAYA,EACZuN,gBAAiBA,O0B1zDxB,SAAA3V,EAAAD,EAAAH,G1Bo0DC,YAEA,I0Bl0DDe,GAAAf,EAAA,E1Bo0DCe,GACGX,OAAO,gBACPsV,Q0Bl0DJ,iBAAA,SAAA,iBAAA,iBAAA,SAAAhT,EAAA+D,EAAAD,G1Bo0DK,Q0Bl0DL6C,GAAAlG,G1Bm0DO,MAAOqD,GAAegC,WAAWrF,EAAYsD,EAAemO,aAAavL,KAG3E,Q0Bl0DL1F,GAAAR,G1Bm0DO,GAAI+W,GAAiBzT,EAAemO,aAAajR,IACjD,OAAOuW,GAAerP,QAAQ,SAAUnI,EAAOS,GAAYQ,QAAQkH,QAAQ,SAAUnI,EAAOS,GAAYsO,OAAO,SAGjH,QAAS/N,GAAMP,GACb,MAAOqD,GAAegC,WAAWrF,EAAYsD,EAAemO,aAAalR,OAG3E,Q0Bl0DLD,GAAAN,GACA,MAAAqD,GAAAgC,WAAArF,EAAAsD,EAAAmO,aAAAnR,M1Bq0DK,OACE4F,IAAKA,EACL1F,KAAMA,EACND,MAAOA,EACPD,KAAMA,O2Bj2Db,SAAArD,EAAAD,EAAAH,G3B22DC,YAEA,IACIiN,GADAlM,EAAUf,EAAoB,E2Bv2DnC,K3B02DGiN,E2Bz2DHjN,EAAA,I3B02DG,M2Bz2DHma,G3B02DGlN,EAAW,KAGblM,EACGX,OEAE,gBFCFga,SAAS,WAAYnN,IAKnB,SAAS7M,EAAQD,GAEtB,GAAuB,mBAAb8M,UAA0B,CAAC,GAAIkN,GAAI,GAAI9Y,OAAM,gCAAiE,MAA7B8Y,GAAEE,KAAO,mBAA0BF,E4Bl4D/H/Z,EAAAD,QAAA8M,U5Bu4DM,SAAS7M,EAAQD,EAASH,GAE/B,YAEA,IAAIe,GAAUf,EAAoB,GAC9B0C,EAAS1C,EAAoB,GAEjCe,GACGX,OEAE,gBFCFga,SAAS,SAAU1X,IEKvB,SAAAtC,EAAAD,G2Bp5DAC,EAAAD,QAAeuC,UAKf3B,QAAAX,OAAe,gBAAIka,KAAA,iBAAA,SAAsCC,GAAAA,EAAAC,IAAA,8BAAA,goDACzDD,EAAeC,IAAI,qCAAA,6gDACnBD,EAAeC,IAAI,sCAAsC,u9B7Bu5DzDD,EAAeC,IAAI,sCAAsC,u6BACzDD,EAAeC,IAAI,6CAA6C,+kBAChED,EAAeC,IAAI,uCAAuC,u8BAC1DD,EAAeC,IAAI,sCAAsC,stCACzDD,EAAeC,IAAI,sCAAsC;AACzDD,EAAeC,IAAI,sCAAsC","file":"angular-bootstrap-calendar-tpls.min.js","sourcesContent":["/**\n * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day\n * @version v0.11.3\n * @link https://github.com/mattlewis92/angular-bootstrap-calendar\n * @license MIT\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tfunction requireAll(r) {\n\t r.keys().forEach(r);\n\t}\n\t\n\tmodule.exports = __webpack_require__(1);\n\t\n\trequireAll(__webpack_require__(3));\n\trequireAll(__webpack_require__(17));\n\trequireAll(__webpack_require__(21));\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar MODULE_NAME = 'mwl.calendar';\n\t\n\tangular.module(MODULE_NAME, []);\n\t\n\tmodule.exports = MODULE_NAME;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = angular;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./mwlCalendar.js\": 4,\n\t\t\"./mwlCalendarDay.js\": 5,\n\t\t\"./mwlCalendarHourList.js\": 6,\n\t\t\"./mwlCalendarMonth.js\": 7,\n\t\t\"./mwlCalendarSlideBox.js\": 8,\n\t\t\"./mwlCalendarWeek.js\": 9,\n\t\t\"./mwlCalendarYear.js\": 10,\n\t\t\"./mwlCollapseFallback.js\": 11,\n\t\t\"./mwlDateModifier.js\": 12,\n\t\t\"./mwlDraggable.js\": 13,\n\t\t\"./mwlDroppable.js\": 14,\n\t\t\"./mwlElementDimensions.js\": 15,\n\t\t\"./mwlResizable.js\": 16\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 3;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarCtrl', [\"$scope\", \"$timeout\", \"$window\", \"$locale\", \"moment\", \"calendarTitle\", \"calendarDebounce\", function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\t\n\t var vm = this;\n\t\n\t $scope.events = $scope.events || [];\n\t\n\t vm.changeView = function(view, newDay) {\n\t $scope.view = view;\n\t $scope.currentDay = newDay;\n\t };\n\t\n\t vm.drillDown = function(date) {\n\t\n\t var rawDate = moment(date).toDate();\n\t\n\t var nextView = {\n\t year: 'month',\n\t month: 'day',\n\t week: 'day'\n\t };\n\t\n\t if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n\t vm.changeView(nextView[$scope.view], rawDate);\n\t }\n\t\n\t };\n\t\n\t var previousDate = moment($scope.currentDay);\n\t var previousView = angular.copy($scope.view);\n\t\n\t //Use a debounce to prevent it being called 3 times on initialisation\n\t var refreshCalendar = calendarDebounce(function() {\n\t if (calendarTitle[$scope.view]) {\n\t $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n\t }\n\t\n\t $scope.events = $scope.events.map(function(event, index) {\n\t Object.defineProperty(event, '$id', {enumerable: false, value: index});\n\t return event;\n\t });\n\t\n\t //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n\t var currentDate = moment($scope.currentDay);\n\t var shouldUpdate = true;\n\t if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n\t $scope.view === previousView) {\n\t shouldUpdate = false;\n\t }\n\t previousDate = currentDate;\n\t previousView = angular.copy($scope.view);\n\t\n\t if (shouldUpdate) {\n\t $scope.$broadcast('calendar.refreshView');\n\t }\n\t }, 50);\n\t\n\t //Auto update the calendar when the locale changes\n\t var unbindLocaleWatcher = $scope.$watch(function() {\n\t return moment.locale() + $locale.id;\n\t }, refreshCalendar);\n\t\n\t var unbindOnDestroy = [];\n\t unbindOnDestroy.push(unbindLocaleWatcher);\n\t\n\t //Refresh the calendar when any of these variables change.\n\t /* eslint-disable angular/ng_on_watch */\n\t unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n\t /* eslint-enable angular/ng_on_watch */\n\t\n\t //Remove any watchers when the calendar is destroyed\n\t var unbindDestroyListener = $scope.$on('$destroy', function() {\n\t unbindOnDestroy.forEach(function(unbind) {\n\t unbind();\n\t });\n\t });\n\t unbindOnDestroy.push(unbindDestroyListener);\n\t\n\t }])\n\t .directive('mwlCalendar', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendar.html',\n\t restrict: 'EA',\n\t scope: {\n\t events: '=',\n\t view: '=',\n\t viewTitle: '=',\n\t currentDay: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onEventClick: '&',\n\t onEventTimesChanged: '&',\n\t onEditEventClick: '&',\n\t onDeleteEventClick: '&',\n\t onTimespanClick: '&',\n\t onDrillDownClick: '&',\n\t cellModifier: '&',\n\t dayViewStart: '@',\n\t dayViewEnd: '@',\n\t dayViewSplit: '@'\n\t },\n\t controller: 'MwlCalendarCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarDayCtrl', [\"$scope\", \"$timeout\", \"$sce\", \"moment\", \"calendarHelper\", \"calendarConfig\", function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.calendarConfig = calendarConfig;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t vm.view = calendarHelper.getDayView(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.eventDragComplete = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n\t var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.eventDragged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(minutesDiff, 'minutes');\n\t } else {\n\t end.add(minutesDiff, 'minutes');\n\t }\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t };\n\t\n\t vm.eventResized = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t if (edge === 'start') {\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t }\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarDay', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarDayView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarDayCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarHourListCtrl', [\"$scope\", \"moment\", \"calendarConfig\", \"calendarHelper\", function($scope, moment, calendarConfig, calendarHelper) {\n\t var vm = this;\n\t var dayViewStart, dayViewEnd;\n\t\n\t function updateDays() {\n\t dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n\t dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n\t vm.dayViewSplit = parseInt($scope.dayViewSplit);\n\t vm.hours = [];\n\t var dayCounter = moment(dayViewStart);\n\t for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n\t vm.hours.push({\n\t label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n\t });\n\t dayCounter.add(1, 'hour');\n\t }\n\t }\n\t\n\t var originalLocale = moment.locale();\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t if (originalLocale !== moment.locale()) {\n\t originalLocale = moment.locale();\n\t updateDays();\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t updateDays();\n\t\n\t }])\n\t .directive('mwlCalendarHourList', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarHourList.html',\n\t controller: 'MwlCalendarHourListCtrl as vm',\n\t scope: {\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarMonthCtrl', [\"$scope\", \"moment\", \"calendarHelper\", function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t vm.weekDays = calendarHelper.getWeekDayNames();\n\t\n\t vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t var rows = Math.floor(vm.view.length / 7);\n\t vm.monthOffsets = [];\n\t for (var i = 0; i < rows; i++) {\n\t vm.monthOffsets.push(i * 7);\n\t }\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(day) {\n\t if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n\t vm.dayClicked(day, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.dayClicked = function(day, dayClickedFirstRun) {\n\t\n\t if (!dayClickedFirstRun) {\n\t $scope.onTimespanClick({\n\t calendarDate: day.date.toDate()\n\t });\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var dayIndex = vm.view.indexOf(day);\n\t if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n\t vm.openDayIndex = null; //close the open day\n\t } else {\n\t vm.openDayIndex = dayIndex;\n\t vm.openRowIndex = Math.floor(dayIndex / 7);\n\t }\n\t\n\t };\n\t\n\t vm.highlightEvent = function(event, shouldAddClass) {\n\t\n\t vm.view.forEach(function(day) {\n\t delete day.highlightClass;\n\t if (shouldAddClass) {\n\t var dayContainsEvent = day.events.indexOf(event) > -1;\n\t if (dayContainsEvent) {\n\t day.highlightClass = 'day-highlight dh-event-' + event.type;\n\t }\n\t }\n\t });\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newDayDate) {\n\t\n\t var newStart = moment(event.startsAt)\n\t .date(moment(newDayDate).date())\n\t .month(moment(newDayDate).month());\n\t\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newDayDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarMonth', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarMonthView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t onEventTimesChanged: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarMonthCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarSlideBoxCtrl', [\"$scope\", \"$sce\", function($scope, $sce) {\n\t\n\t var vm = this;\n\t vm.$sce = $sce;\n\t\n\t var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n\t vm.shouldCollapse = !isOpen;\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t }])\n\t .directive('mwlCalendarSlideBox', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarSlideBox.html',\n\t replace: true,\n\t controller: 'MwlCalendarSlideBoxCtrl as vm',\n\t require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n\t link: function(scope, elm, attrs, ctrls) {\n\t scope.isMonthView = !!ctrls[0];\n\t scope.isYearView = !!ctrls[1];\n\t },\n\t scope: {\n\t isOpen: '=',\n\t events: '=',\n\t onEventClick: '=',\n\t editEventHtml: '=',\n\t onEditEventClick: '=',\n\t deleteEventHtml: '=',\n\t onDeleteEventClick: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarWeekCtrl', [\"$scope\", \"$sce\", \"moment\", \"calendarHelper\", \"calendarConfig\", function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.showTimes = calendarConfig.showTimesOnWeekView;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t if (vm.showTimes) {\n\t vm.view = calendarHelper.getWeekViewWithTimes(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t } else {\n\t vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n\t }\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\t\n\t var newStart = moment(event.startsAt).add(daysDiff, 'days');\n\t var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\t\n\t if (minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t newStart = newStart.add(minutesDiff, 'minutes');\n\t newEnd = newEnd.add(minutesDiff, 'minutes');\n\t }\n\t\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.weekResized = function(event, edge, daysDiff) {\n\t\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(daysDiff, 'days');\n\t } else {\n\t end.add(daysDiff, 'days');\n\t }\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t\n\t };\n\t\n\t vm.tempTimeChanged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarWeek', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarWeekView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarWeekCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarYearCtrl', [\"$scope\", \"moment\", \"calendarHelper\", function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(month) {\n\t if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n\t vm.monthClicked(month, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.monthClicked = function(month, monthClickedFirstRun) {\n\t\n\t if (!monthClickedFirstRun) {\n\t $scope.onTimespanClick({calendarDate: month.date.toDate()});\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var monthIndex = vm.view.indexOf(month);\n\t if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n\t vm.openMonthIndex = null; //close the open month\n\t } else {\n\t vm.openMonthIndex = monthIndex;\n\t vm.openRowIndex = Math.floor(monthIndex / 4);\n\t }\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newMonthDate) {\n\t var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newMonthDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarYear', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarYearView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarYearCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCollapseFallbackCtrl', [\"$scope\", \"$attrs\", \"$element\", function($scope, $attrs, $element) {\n\t var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n\t if (shouldCollapse) {\n\t $element.addClass('ng-hide');\n\t } else {\n\t $element.removeClass('ng-hide');\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t }])\n\t .directive('mwlCollapseFallback', [\"$injector\", function($injector) {\n\t\n\t if ($injector.has('collapseDirective')) {\n\t return {};\n\t }\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlCollapseFallbackCtrl'\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDateModifierCtrl', [\"$element\", \"$attrs\", \"$scope\", \"moment\", function($element, $attrs, $scope, moment) {\n\t\n\t function onClick() {\n\t if (angular.isDefined($attrs.setToToday)) {\n\t $scope.date = new Date();\n\t } else if (angular.isDefined($attrs.increment)) {\n\t $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n\t } else if (angular.isDefined($attrs.decrement)) {\n\t $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n\t }\n\t $scope.$apply();\n\t }\n\t\n\t $element.bind('click', onClick);\n\t\n\t $scope.$on('$destroy', function() {\n\t $element.unbind('click', onClick);\n\t });\n\t\n\t }])\n\t .directive('mwlDateModifier', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDateModifierCtrl',\n\t scope: {\n\t date: '=',\n\t increment: '=',\n\t decrement: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDraggableCtrl', [\"$element\", \"$scope\", \"$window\", \"$parse\", \"$attrs\", \"$timeout\", \"interact\", function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t function translateElement(elm, transformValue) {\n\t return elm\n\t .css('transform', transformValue)\n\t .css('-ms-transform', transformValue)\n\t .css('-webkit-transform', transformValue);\n\t }\n\t\n\t function canDrag() {\n\t return $parse($attrs.mwlDraggable)($scope);\n\t }\n\t\n\t function getUnitsMoved(x, y, gridDimensions) {\n\t\n\t var result = {x: x, y: y};\n\t\n\t if (gridDimensions && gridDimensions.x) {\n\t result.x /= gridDimensions.x;\n\t }\n\t\n\t if (gridDimensions && gridDimensions.y) {\n\t result.y /= gridDimensions.y;\n\t }\n\t\n\t return result;\n\t\n\t }\n\t\n\t interact($element[0]).draggable({\n\t snap: snap,\n\t onstart: function(event) {\n\t if (canDrag()) {\n\t angular.element(event.target).addClass('dragging-active');\n\t event.target.dropData = $parse($attrs.dropData)($scope);\n\t event.target.style.pointerEvents = 'none';\n\t if ($attrs.onDragStart) {\n\t $parse($attrs.onDragStart)($scope);\n\t $scope.$apply();\n\t }\n\t }\n\t },\n\t onmove: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n\t var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\t\n\t switch ($parse($attrs.axis)($scope)) {\n\t case 'x':\n\t y = 0;\n\t break;\n\t\n\t case 'y':\n\t x = 0;\n\t break;\n\t\n\t default:\n\t }\n\t\n\t if ($window.getComputedStyle(elm[0]).position === 'static') {\n\t elm.css('position', 'relative');\n\t }\n\t\n\t translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n\t .css('z-index', 1000)\n\t .attr('data-x', x)\n\t .attr('data-y', y);\n\t\n\t if ($attrs.onDrag) {\n\t $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = elm.attr('data-x');\n\t var y = elm.attr('data-y');\n\t\n\t event.target.style.pointerEvents = 'auto';\n\t if ($attrs.onDragEnd) {\n\t $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t $timeout(function() {\n\t translateElement(elm, null)\n\t .removeAttr('data-x')\n\t .removeAttr('data-y')\n\t .removeClass('dragging-active');\n\t }, 50);\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlDraggable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDraggableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDroppableCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", \"interact\", function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t interact($element[0]).dropzone({\n\t ondragenter: function(event) {\n\t angular.element(event.target).addClass('drop-active');\n\t },\n\t ondragleave: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondropdeactivate: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondrop: function(event) {\n\t if (event.relatedTarget.dropData) {\n\t $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n\t $scope.$apply();\n\t }\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlDroppable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDroppableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlElementDimensionsCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", function($element, $scope, $parse, $attrs) {\n\t\n\t $parse($attrs.mwlElementDimensions).assign($scope, {\n\t width: $element[0].offsetWidth,\n\t height: $element[0].offsetHeight\n\t });\n\t\n\t }])\n\t .directive('mwlElementDimensions', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlElementDimensionsCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlResizableCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", \"interact\", function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t var originalDimensions = {};\n\t var originalDimensionsStyle = {};\n\t var resizeEdge;\n\t\n\t function canResize() {\n\t return $parse($attrs.mwlResizable)($scope);\n\t }\n\t\n\t function getUnitsResized(edge, elm, gridDimensions) {\n\t var unitsResized = {};\n\t unitsResized.edge = edge;\n\t if (edge === 'start') {\n\t unitsResized.x = elm.data('x');\n\t unitsResized.y = elm.data('y');\n\t } else if (edge === 'end') {\n\t unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n\t unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n\t }\n\t if (gridDimensions && gridDimensions.x) {\n\t unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n\t }\n\t if (gridDimensions && gridDimensions.y) {\n\t unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n\t }\n\t return unitsResized;\n\t }\n\t\n\t interact($element[0]).resizable({\n\t edges: $parse($attrs.resizeEdges)($scope),\n\t snap: snap,\n\t onstart: function(event) {\n\t\n\t if (canResize()) {\n\t resizeEdge = 'end';\n\t var elm = angular.element(event.target);\n\t originalDimensions.height = elm[0].offsetHeight;\n\t originalDimensions.width = elm[0].offsetWidth;\n\t originalDimensionsStyle.height = elm.css('height');\n\t originalDimensionsStyle.width = elm.css('width');\n\t }\n\t\n\t },\n\t onmove: function(event) {\n\t\n\t if (canResize()) {\n\t var elm = angular.element(event.target);\n\t var x = parseFloat(elm.data('x') || 0);\n\t var y = parseFloat(elm.data('y') || 0);\n\t\n\t elm.css({\n\t width: event.rect.width + 'px',\n\t height: event.rect.height + 'px'\n\t });\n\t\n\t // translate when resizing from top or left edges\n\t x += event.deltaRect.left;\n\t y += event.deltaRect.top;\n\t\n\t elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\t\n\t elm.data('x', x);\n\t elm.data('y', y);\n\t\n\t if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n\t resizeEdge = 'start';\n\t }\n\t\n\t if ($attrs.onResize) {\n\t $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canResize()) {\n\t\n\t var elm = angular.element(event.target);\n\t var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\t\n\t elm\n\t .data('x', null)\n\t .data('y', null)\n\t .css({\n\t transform: null,\n\t width: originalDimensionsStyle.width,\n\t height: originalDimensionsStyle.height\n\t });\n\t\n\t if ($attrs.onResizeEnd) {\n\t $parse($attrs.onResizeEnd)($scope, unitsResized);\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlResizable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlResizableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarDate.js\": 18,\n\t\t\"./calendarLimitTo.js\": 19,\n\t\t\"./calendarTruncateEventTitle.js\": 20\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 17;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarDate', [\"calendarHelper\", \"calendarConfig\", function(calendarHelper, calendarConfig) {\n\t\n\t function calendarDate(date, format, getFromConfig) {\n\t\n\t if (getFromConfig === true) {\n\t format = calendarConfig.dateFormats[format];\n\t }\n\t\n\t return calendarHelper.formatDate(date, format);\n\t\n\t }\n\t\n\t calendarDate.$stateful = true;\n\t\n\t return calendarDate;\n\t\n\t }]);\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarLimitTo', [\"limitToFilter\", function(limitToFilter) {\n\t\n\t if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n\t return limitToFilter;\n\t }\n\t\n\t //Copied from the angular source. Only 1.4 has the begin functionality.\n\t return function(input, limit, begin) {\n\t if (Math.abs(Number(limit)) === Infinity) {\n\t limit = Number(limit);\n\t } else {\n\t limit = parseInt(limit);\n\t }\n\t if (isNaN(limit)) {\n\t return input;\n\t }\n\t\n\t if (angular.isNumber(input)) {\n\t input = input.toString();\n\t }\n\t if (!angular.isArray(input) && !angular.isString(input)) {\n\t return input;\n\t }\n\t\n\t begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n\t begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\t\n\t if (limit >= 0) {\n\t return input.slice(begin, begin + limit);\n\t } else if (begin === 0) {\n\t return input.slice(limit, input.length);\n\t } else {\n\t return input.slice(Math.max(0, begin + limit), begin);\n\t }\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarTruncateEventTitle', function() {\n\t\n\t return function(string, length, boxHeight) {\n\t if (!string) {\n\t return '';\n\t }\n\t\n\t //Only truncate if if actually needs truncating\n\t if (string.length >= length && string.length / 20 > boxHeight / 30) {\n\t return string.substr(0, length) + '...';\n\t } else {\n\t return string;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarConfig.js\": 22,\n\t\t\"./calendarDebounce.js\": 23,\n\t\t\"./calendarHelper.js\": 24,\n\t\t\"./calendarTitle.js\": 25,\n\t\t\"./interact.js\": 26,\n\t\t\"./moment.js\": 28\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 21;\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .provider('calendarConfig', function() {\n\t\n\t var defaultFormats = {\n\t angular: {\n\t date: {\n\t hour: 'ha',\n\t day: 'd MMM',\n\t month: 'MMMM',\n\t weekDay: 'EEEE',\n\t time: 'HH:mm',\n\t datetime: 'MMM d, h:mm a'\n\t },\n\t title: {\n\t day: 'EEEE d MMMM, yyyy',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM yyyy',\n\t year: 'yyyy'\n\t }\n\t },\n\t moment: {\n\t date: {\n\t hour: 'ha',\n\t day: 'D MMM',\n\t month: 'MMMM',\n\t weekDay: 'dddd',\n\t time: 'HH:mm',\n\t datetime: 'MMM D, h:mm a'\n\t },\n\t title: {\n\t day: 'dddd D MMMM, YYYY',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM YYYY',\n\t year: 'YYYY'\n\t }\n\t }\n\t };\n\t\n\t var dateFormatter = 'angular';\n\t var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t var showTimesOnWeekView = false;\n\t\n\t var i18nStrings = {\n\t eventsLabel: 'Events',\n\t timeLabel: 'Time'\n\t };\n\t\n\t var displayAllMonthEvents = false;\n\t\n\t var configProvider = this;\n\t\n\t configProvider.setDateFormats = function(formats) {\n\t angular.extend(defaultDateFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setTitleFormats = function(formats) {\n\t angular.extend(defaultTitleFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setI18nStrings = function(strings) {\n\t angular.extend(i18nStrings, strings);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDisplayAllMonthEvents = function(value) {\n\t displayAllMonthEvents = value;\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDateFormatter = function(value) {\n\t if (['angular', 'moment'].indexOf(value) === -1) {\n\t throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n\t }\n\t dateFormatter = value;\n\t defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t return configProvider;\n\t };\n\t\n\t configProvider.showTimesOnWeekView = function(value) {\n\t showTimesOnWeekView = value; //experimental, and ignores the event end date\n\t return configProvider;\n\t };\n\t\n\t configProvider.$get = function() {\n\t return {\n\t dateFormats: defaultDateFormats,\n\t titleFormats: defaultTitleFormats,\n\t i18nStrings: i18nStrings,\n\t displayAllMonthEvents: displayAllMonthEvents,\n\t dateFormatter: dateFormatter,\n\t showTimesOnWeekView: showTimesOnWeekView\n\t };\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .service('calendarDebounce', [\"$timeout\", function($timeout) {\n\t\n\t function debounce(func, wait, immediate) {\n\t var timeout;\n\t return function() {\n\t var context = this, args = arguments;\n\t function later() {\n\t timeout = null;\n\t if (!immediate) {\n\t func.apply(context, args);\n\t }\n\t }\n\t var callNow = immediate && !timeout;\n\t $timeout.cancel(timeout);\n\t timeout = $timeout(later, wait);\n\t if (callNow) {\n\t func.apply(context, args);\n\t }\n\t };\n\t }\n\t\n\t return debounce;\n\t\n\t }]);\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarHelper', [\"dateFilter\", \"moment\", \"calendarConfig\", function(dateFilter, moment, calendarConfig) {\n\t\n\t function formatDate(date, format) {\n\t if (calendarConfig.dateFormatter === 'angular') {\n\t return dateFilter(moment(date).toDate(), format);\n\t } else if (calendarConfig.dateFormatter === 'moment') {\n\t return moment(date).format(format);\n\t }\n\t }\n\t\n\t function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n\t if (!oldEnd) {\n\t return oldEnd;\n\t }\n\t var diffInSeconds = moment(newStart).diff(moment(oldStart));\n\t return moment(oldEnd).add(diffInSeconds);\n\t }\n\t\n\t function eventIsInPeriod(event, periodStart, periodEnd) {\n\t\n\t var eventStart = moment(event.startsAt);\n\t var eventEnd = moment(event.endsAt || event.startsAt);\n\t periodStart = moment(periodStart);\n\t periodEnd = moment(periodEnd);\n\t\n\t if (angular.isDefined(event.recursOn)) {\n\t\n\t switch (event.recursOn) {\n\t case 'year':\n\t eventStart.set({\n\t year: periodStart.year()\n\t });\n\t break;\n\t\n\t case 'month':\n\t eventStart.set({\n\t year: periodStart.year(),\n\t month: periodStart.month()\n\t });\n\t break;\n\t\n\t default:\n\t throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n\t }\n\t\n\t eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\t\n\t }\n\t\n\t return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n\t (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n\t (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n\t eventStart.isSame(periodStart) ||\n\t eventEnd.isSame(periodEnd);\n\t\n\t }\n\t\n\t function filterEventsInPeriod(events, startPeriod, endPeriod) {\n\t return events.filter(function(event) {\n\t return eventIsInPeriod(event, startPeriod, endPeriod);\n\t });\n\t }\n\t\n\t function getEventsInPeriod(calendarDate, period, allEvents) {\n\t var startPeriod = moment(calendarDate).startOf(period);\n\t var endPeriod = moment(calendarDate).endOf(period);\n\t return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n\t }\n\t\n\t function getBadgeTotal(events) {\n\t return events.filter(function(event) {\n\t return event.incrementsBadgeTotal !== false;\n\t }).length;\n\t }\n\t\n\t function getWeekDayNames() {\n\t var weekdays = [];\n\t var count = 0;\n\t while (count < 7) {\n\t weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n\t }\n\t return weekdays;\n\t }\n\t\n\t function getYearView(events, currentDay, cellModifier) {\n\t\n\t var view = [];\n\t var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n\t var month = moment(currentDay).startOf('year');\n\t var count = 0;\n\t while (count < 12) {\n\t var startPeriod = month.clone();\n\t var endPeriod = startPeriod.clone().endOf('month');\n\t var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n\t var cell = {\n\t label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n\t isToday: startPeriod.isSame(moment().startOf('month')),\n\t events: periodEvents,\n\t date: startPeriod,\n\t badgeTotal: getBadgeTotal(periodEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t view.push(cell);\n\t month.add(1, 'month');\n\t count++;\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getMonthView(events, currentDay, cellModifier) {\n\t\n\t var startOfMonth = moment(currentDay).startOf('month');\n\t var day = startOfMonth.clone().startOf('week');\n\t var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n\t var eventsInPeriod;\n\t if (calendarConfig.displayAllMonthEvents) {\n\t eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n\t } else {\n\t eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n\t }\n\t var view = [];\n\t var today = moment().startOf('day');\n\t\n\t while (day.isBefore(endOfMonthView)) {\n\t\n\t var inMonth = day.month() === moment(currentDay).month();\n\t var monthEvents = [];\n\t if (inMonth || calendarConfig.displayAllMonthEvents) {\n\t monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n\t }\n\t\n\t var cell = {\n\t label: day.date(),\n\t date: day.clone(),\n\t inMonth: inMonth,\n\t isPast: today.isAfter(day),\n\t isToday: today.isSame(day),\n\t isFuture: today.isBefore(day),\n\t isWeekend: [0, 6].indexOf(day.day()) > -1,\n\t events: monthEvents,\n\t badgeTotal: getBadgeTotal(monthEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t\n\t view.push(cell);\n\t\n\t day.add(1, 'day');\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getWeekView(events, currentDay) {\n\t\n\t var startOfWeek = moment(currentDay).startOf('week');\n\t var endOfWeek = moment(currentDay).endOf('week');\n\t var dayCounter = startOfWeek.clone();\n\t var days = [];\n\t var today = moment().startOf('day');\n\t while (days.length < 7) {\n\t days.push({\n\t weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n\t date: dayCounter.clone(),\n\t dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n\t isPast: dayCounter.isBefore(today),\n\t isToday: dayCounter.isSame(today),\n\t isFuture: dayCounter.isAfter(today),\n\t isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n\t });\n\t dayCounter.add(1, 'day');\n\t }\n\t\n\t var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\t\n\t var eventStart = moment(event.startsAt).startOf('day');\n\t var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n\t var weekViewStart = moment(startOfWeek).startOf('day');\n\t var weekViewEnd = moment(endOfWeek).startOf('day');\n\t var offset, span;\n\t\n\t if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n\t offset = 0;\n\t } else {\n\t offset = eventStart.diff(weekViewStart, 'days');\n\t }\n\t\n\t if (eventEnd.isAfter(weekViewEnd)) {\n\t eventEnd = weekViewEnd;\n\t }\n\t\n\t if (eventStart.isBefore(weekViewStart)) {\n\t eventStart = weekViewStart;\n\t }\n\t\n\t span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\t\n\t event.daySpan = span;\n\t event.dayOffset = offset;\n\t\n\t return event;\n\t });\n\t\n\t return {days: days, events: eventsSorted};\n\t\n\t }\n\t\n\t function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t\n\t var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n\t var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n\t var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n\t var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n\t var hourHeightMultiplier = hourHeight / 60;\n\t var buckets = [];\n\t var eventsInPeriod = filterEventsInPeriod(\n\t events,\n\t moment(currentDay).startOf('day').toDate(),\n\t moment(currentDay).endOf('day').toDate()\n\t );\n\t\n\t return eventsInPeriod.map(function(event) {\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t event.top = 0;\n\t } else {\n\t event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n\t }\n\t\n\t if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n\t event.height = calendarHeight - event.top;\n\t } else {\n\t var diffStart = event.startsAt;\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t diffStart = calendarStart.toDate();\n\t }\n\t if (!event.endsAt) {\n\t event.height = 30;\n\t } else {\n\t event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n\t }\n\t }\n\t\n\t if (event.top - event.height > calendarHeight) {\n\t event.height = 0;\n\t }\n\t\n\t event.left = 0;\n\t\n\t return event;\n\t }).filter(function(event) {\n\t return event.height > 0;\n\t }).map(function(event) {\n\t\n\t var cannotFitInABucket = true;\n\t buckets.forEach(function(bucket, bucketIndex) {\n\t var canFitInThisBucket = true;\n\t\n\t bucket.forEach(function(bucketItem) {\n\t if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n\t eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n\t canFitInThisBucket = false;\n\t }\n\t });\n\t\n\t if (canFitInThisBucket && cannotFitInABucket) {\n\t cannotFitInABucket = false;\n\t event.left = bucketIndex * 150;\n\t buckets[bucketIndex].push(event);\n\t }\n\t\n\t });\n\t\n\t if (cannotFitInABucket) {\n\t event.left = buckets.length * 150;\n\t buckets.push([event]);\n\t }\n\t\n\t return event;\n\t\n\t });\n\t\n\t }\n\t\n\t function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t var weekView = getWeekView(events, currentDay);\n\t var newEvents = [];\n\t weekView.days.forEach(function(day) {\n\t var dayEvents = weekView.events.filter(function(event) {\n\t return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n\t });\n\t var newDayEvents = getDayView(\n\t dayEvents,\n\t day.date,\n\t dayViewStart,\n\t dayViewEnd,\n\t dayViewSplit\n\t );\n\t newEvents = newEvents.concat(newDayEvents);\n\t });\n\t weekView.events = newEvents;\n\t return weekView;\n\t }\n\t\n\t function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n\t var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n\t var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n\t }\n\t\n\t return {\n\t getWeekDayNames: getWeekDayNames,\n\t getYearView: getYearView,\n\t getMonthView: getMonthView,\n\t getWeekView: getWeekView,\n\t getDayView: getDayView,\n\t getWeekViewWithTimes: getWeekViewWithTimes,\n\t getDayViewHeight: getDayViewHeight,\n\t adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n\t formatDate: formatDate,\n\t eventIsInPeriod: eventIsInPeriod //expose for testing only\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarTitle', [\"moment\", \"calendarConfig\", \"calendarHelper\", function(moment, calendarConfig, calendarHelper) {\n\t\n\t function day(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n\t }\n\t\n\t function week(currentDay) {\n\t var weekTitleLabel = calendarConfig.titleFormats.week;\n\t return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n\t }\n\t\n\t function month(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n\t }\n\t\n\t function year(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n\t }\n\t\n\t return {\n\t day: day,\n\t week: week,\n\t month: month,\n\t year: year\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar interact;\n\ttry {\n\t interact = __webpack_require__(27);\n\t} catch (e) {\n\t interact = null;\n\t}\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('interact', interact);\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\tif(typeof interact === 'undefined') {var e = new Error(\"Cannot find module \\\"interact\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\n\tmodule.exports = interact;\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar moment = __webpack_require__(29);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('moment', moment);\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\tmodule.exports = moment;\n\n/***/ }\n/******/ ]);\n\nangular.module(\"mwl.calendar\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"src/templates/calendar.html\",\"
The value passed to the view attribute of the calendar is not set
The value passed to current-day attribute of the calendar is not set
\");\n$templateCache.put(\"src/templates/calendarDayView.html\",\"
,
\");\n$templateCache.put(\"src/templates/calendarHourList.html\",\"
\");\n$templateCache.put(\"src/templates/calendarMonthDay.html\",\"
0\\\" ng-bind=\\\"day.badgeTotal\\\">
0\\\">
\");\n$templateCache.put(\"src/templates/calendarMonthEventsList.html\",\"
0\\\">
\");\n$templateCache.put(\"src/templates/calendarMonthView.html\",\"
0}\\\">
0\\\" events=\\\"vm.view[vm.openDayIndex].events\\\" on-event-click=\\\"onEventClick\\\" edit-event-html=\\\"editEventHtml\\\" on-edit-event-click=\\\"onEditEventClick\\\" delete-event-html=\\\"deleteEventHtml\\\" on-delete-event-click=\\\"onDeleteEventClick\\\">
\");\n$templateCache.put(\"src/templates/calendarSlideBox.html\",\"
\");\n$templateCache.put(\"src/templates/calendarWeekView.html\",\"

\");\n$templateCache.put(\"src/templates/calendarYearView.html\",\"
0, \\'cal-day-today\\': month.isToday}\\\" mwl-droppable on-drop=\\\"vm.handleEventDrop(dropData.event, month.date)\\\"> 0\\\" ng-bind=\\\"month.badgeTotal\\\">
0\\\">
0\\\" events=\\\"vm.view[vm.openMonthIndex].events\\\" on-event-click=\\\"onEventClick\\\" edit-event-html=\\\"editEventHtml\\\" on-edit-event-click=\\\"onEditEventClick\\\" delete-event-html=\\\"deleteEventHtml\\\" on-delete-event-click=\\\"onDeleteEventClick\\\">
\");}]);"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap f9365143e6b9940e60b4\n **/","/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tfunction requireAll(r) {\n\t r.keys().forEach(r);\n\t}\n\t\n\tmodule.exports = __webpack_require__(1);\n\t\n\trequireAll(__webpack_require__(3));\n\trequireAll(__webpack_require__(17));\n\trequireAll(__webpack_require__(21));\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar MODULE_NAME = 'mwl.calendar';\n\t\n\tangular.module(MODULE_NAME, []);\n\t\n\tmodule.exports = MODULE_NAME;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = angular;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./mwlCalendar.js\": 4,\n\t\t\"./mwlCalendarDay.js\": 5,\n\t\t\"./mwlCalendarHourList.js\": 6,\n\t\t\"./mwlCalendarMonth.js\": 7,\n\t\t\"./mwlCalendarSlideBox.js\": 8,\n\t\t\"./mwlCalendarWeek.js\": 9,\n\t\t\"./mwlCalendarYear.js\": 10,\n\t\t\"./mwlCollapseFallback.js\": 11,\n\t\t\"./mwlDateModifier.js\": 12,\n\t\t\"./mwlDraggable.js\": 13,\n\t\t\"./mwlDroppable.js\": 14,\n\t\t\"./mwlElementDimensions.js\": 15,\n\t\t\"./mwlResizable.js\": 16\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 3;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarCtrl', function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\t\n\t var vm = this;\n\t\n\t $scope.events = $scope.events || [];\n\t\n\t vm.changeView = function(view, newDay) {\n\t $scope.view = view;\n\t $scope.currentDay = newDay;\n\t };\n\t\n\t vm.drillDown = function(date) {\n\t\n\t var rawDate = moment(date).toDate();\n\t\n\t var nextView = {\n\t year: 'month',\n\t month: 'day',\n\t week: 'day'\n\t };\n\t\n\t if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n\t vm.changeView(nextView[$scope.view], rawDate);\n\t }\n\t\n\t };\n\t\n\t var previousDate = moment($scope.currentDay);\n\t var previousView = angular.copy($scope.view);\n\t\n\t //Use a debounce to prevent it being called 3 times on initialisation\n\t var refreshCalendar = calendarDebounce(function() {\n\t if (calendarTitle[$scope.view]) {\n\t $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n\t }\n\t\n\t $scope.events = $scope.events.map(function(event, index) {\n\t Object.defineProperty(event, '$id', {enumerable: false, value: index});\n\t return event;\n\t });\n\t\n\t //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n\t var currentDate = moment($scope.currentDay);\n\t var shouldUpdate = true;\n\t if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n\t $scope.view === previousView) {\n\t shouldUpdate = false;\n\t }\n\t previousDate = currentDate;\n\t previousView = angular.copy($scope.view);\n\t\n\t if (shouldUpdate) {\n\t $scope.$broadcast('calendar.refreshView');\n\t }\n\t }, 50);\n\t\n\t //Auto update the calendar when the locale changes\n\t var unbindLocaleWatcher = $scope.$watch(function() {\n\t return moment.locale() + $locale.id;\n\t }, refreshCalendar);\n\t\n\t var unbindOnDestroy = [];\n\t unbindOnDestroy.push(unbindLocaleWatcher);\n\t\n\t //Refresh the calendar when any of these variables change.\n\t /* eslint-disable angular/ng_on_watch */\n\t unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n\t /* eslint-enable angular/ng_on_watch */\n\t\n\t //Remove any watchers when the calendar is destroyed\n\t var unbindDestroyListener = $scope.$on('$destroy', function() {\n\t unbindOnDestroy.forEach(function(unbind) {\n\t unbind();\n\t });\n\t });\n\t unbindOnDestroy.push(unbindDestroyListener);\n\t\n\t })\n\t .directive('mwlCalendar', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendar.html',\n\t restrict: 'EA',\n\t scope: {\n\t events: '=',\n\t view: '=',\n\t viewTitle: '=',\n\t currentDay: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onEventClick: '&',\n\t onEventTimesChanged: '&',\n\t onEditEventClick: '&',\n\t onDeleteEventClick: '&',\n\t onTimespanClick: '&',\n\t onDrillDownClick: '&',\n\t cellModifier: '&',\n\t dayViewStart: '@',\n\t dayViewEnd: '@',\n\t dayViewSplit: '@'\n\t },\n\t controller: 'MwlCalendarCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarDayCtrl', function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.calendarConfig = calendarConfig;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t vm.view = calendarHelper.getDayView(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.eventDragComplete = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n\t var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.eventDragged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(minutesDiff, 'minutes');\n\t } else {\n\t end.add(minutesDiff, 'minutes');\n\t }\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t };\n\t\n\t vm.eventResized = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t if (edge === 'start') {\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t }\n\t };\n\t\n\t })\n\t .directive('mwlCalendarDay', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarDayView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarDayCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarHourListCtrl', function($scope, moment, calendarConfig, calendarHelper) {\n\t var vm = this;\n\t var dayViewStart, dayViewEnd;\n\t\n\t function updateDays() {\n\t dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n\t dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n\t vm.dayViewSplit = parseInt($scope.dayViewSplit);\n\t vm.hours = [];\n\t var dayCounter = moment(dayViewStart);\n\t for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n\t vm.hours.push({\n\t label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n\t });\n\t dayCounter.add(1, 'hour');\n\t }\n\t }\n\t\n\t var originalLocale = moment.locale();\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t if (originalLocale !== moment.locale()) {\n\t originalLocale = moment.locale();\n\t updateDays();\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t updateDays();\n\t\n\t })\n\t .directive('mwlCalendarHourList', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarHourList.html',\n\t controller: 'MwlCalendarHourListCtrl as vm',\n\t scope: {\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarMonthCtrl', function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t vm.weekDays = calendarHelper.getWeekDayNames();\n\t\n\t vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t var rows = Math.floor(vm.view.length / 7);\n\t vm.monthOffsets = [];\n\t for (var i = 0; i < rows; i++) {\n\t vm.monthOffsets.push(i * 7);\n\t }\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(day) {\n\t if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n\t vm.dayClicked(day, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.dayClicked = function(day, dayClickedFirstRun) {\n\t\n\t if (!dayClickedFirstRun) {\n\t $scope.onTimespanClick({\n\t calendarDate: day.date.toDate()\n\t });\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var dayIndex = vm.view.indexOf(day);\n\t if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n\t vm.openDayIndex = null; //close the open day\n\t } else {\n\t vm.openDayIndex = dayIndex;\n\t vm.openRowIndex = Math.floor(dayIndex / 7);\n\t }\n\t\n\t };\n\t\n\t vm.highlightEvent = function(event, shouldAddClass) {\n\t\n\t vm.view.forEach(function(day) {\n\t delete day.highlightClass;\n\t if (shouldAddClass) {\n\t var dayContainsEvent = day.events.indexOf(event) > -1;\n\t if (dayContainsEvent) {\n\t day.highlightClass = 'day-highlight dh-event-' + event.type;\n\t }\n\t }\n\t });\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newDayDate) {\n\t\n\t var newStart = moment(event.startsAt)\n\t .date(moment(newDayDate).date())\n\t .month(moment(newDayDate).month());\n\t\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newDayDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t })\n\t .directive('mwlCalendarMonth', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarMonthView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t onEventTimesChanged: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarMonthCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarSlideBoxCtrl', function($scope, $sce) {\n\t\n\t var vm = this;\n\t vm.$sce = $sce;\n\t\n\t var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n\t vm.shouldCollapse = !isOpen;\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t })\n\t .directive('mwlCalendarSlideBox', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarSlideBox.html',\n\t replace: true,\n\t controller: 'MwlCalendarSlideBoxCtrl as vm',\n\t require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n\t link: function(scope, elm, attrs, ctrls) {\n\t scope.isMonthView = !!ctrls[0];\n\t scope.isYearView = !!ctrls[1];\n\t },\n\t scope: {\n\t isOpen: '=',\n\t events: '=',\n\t onEventClick: '=',\n\t editEventHtml: '=',\n\t onEditEventClick: '=',\n\t deleteEventHtml: '=',\n\t onDeleteEventClick: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarWeekCtrl', function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.showTimes = calendarConfig.showTimesOnWeekView;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t if (vm.showTimes) {\n\t vm.view = calendarHelper.getWeekViewWithTimes(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t } else {\n\t vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n\t }\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\t\n\t var newStart = moment(event.startsAt).add(daysDiff, 'days');\n\t var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\t\n\t if (minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t newStart = newStart.add(minutesDiff, 'minutes');\n\t newEnd = newEnd.add(minutesDiff, 'minutes');\n\t }\n\t\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.weekResized = function(event, edge, daysDiff) {\n\t\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(daysDiff, 'days');\n\t } else {\n\t end.add(daysDiff, 'days');\n\t }\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t\n\t };\n\t\n\t vm.tempTimeChanged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t })\n\t .directive('mwlCalendarWeek', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarWeekView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarWeekCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarYearCtrl', function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(month) {\n\t if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n\t vm.monthClicked(month, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.monthClicked = function(month, monthClickedFirstRun) {\n\t\n\t if (!monthClickedFirstRun) {\n\t $scope.onTimespanClick({calendarDate: month.date.toDate()});\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var monthIndex = vm.view.indexOf(month);\n\t if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n\t vm.openMonthIndex = null; //close the open month\n\t } else {\n\t vm.openMonthIndex = monthIndex;\n\t vm.openRowIndex = Math.floor(monthIndex / 4);\n\t }\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newMonthDate) {\n\t var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newMonthDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t })\n\t .directive('mwlCalendarYear', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarYearView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarYearCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCollapseFallbackCtrl', function($scope, $attrs, $element) {\n\t var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n\t if (shouldCollapse) {\n\t $element.addClass('ng-hide');\n\t } else {\n\t $element.removeClass('ng-hide');\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t })\n\t .directive('mwlCollapseFallback', function($injector) {\n\t\n\t if ($injector.has('collapseDirective')) {\n\t return {};\n\t }\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlCollapseFallbackCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDateModifierCtrl', function($element, $attrs, $scope, moment) {\n\t\n\t function onClick() {\n\t if (angular.isDefined($attrs.setToToday)) {\n\t $scope.date = new Date();\n\t } else if (angular.isDefined($attrs.increment)) {\n\t $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n\t } else if (angular.isDefined($attrs.decrement)) {\n\t $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n\t }\n\t $scope.$apply();\n\t }\n\t\n\t $element.bind('click', onClick);\n\t\n\t $scope.$on('$destroy', function() {\n\t $element.unbind('click', onClick);\n\t });\n\t\n\t })\n\t .directive('mwlDateModifier', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDateModifierCtrl',\n\t scope: {\n\t date: '=',\n\t increment: '=',\n\t decrement: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDraggableCtrl', function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t function translateElement(elm, transformValue) {\n\t return elm\n\t .css('transform', transformValue)\n\t .css('-ms-transform', transformValue)\n\t .css('-webkit-transform', transformValue);\n\t }\n\t\n\t function canDrag() {\n\t return $parse($attrs.mwlDraggable)($scope);\n\t }\n\t\n\t function getUnitsMoved(x, y, gridDimensions) {\n\t\n\t var result = {x: x, y: y};\n\t\n\t if (gridDimensions && gridDimensions.x) {\n\t result.x /= gridDimensions.x;\n\t }\n\t\n\t if (gridDimensions && gridDimensions.y) {\n\t result.y /= gridDimensions.y;\n\t }\n\t\n\t return result;\n\t\n\t }\n\t\n\t interact($element[0]).draggable({\n\t snap: snap,\n\t onstart: function(event) {\n\t if (canDrag()) {\n\t angular.element(event.target).addClass('dragging-active');\n\t event.target.dropData = $parse($attrs.dropData)($scope);\n\t event.target.style.pointerEvents = 'none';\n\t if ($attrs.onDragStart) {\n\t $parse($attrs.onDragStart)($scope);\n\t $scope.$apply();\n\t }\n\t }\n\t },\n\t onmove: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n\t var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\t\n\t switch ($parse($attrs.axis)($scope)) {\n\t case 'x':\n\t y = 0;\n\t break;\n\t\n\t case 'y':\n\t x = 0;\n\t break;\n\t\n\t default:\n\t }\n\t\n\t if ($window.getComputedStyle(elm[0]).position === 'static') {\n\t elm.css('position', 'relative');\n\t }\n\t\n\t translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n\t .css('z-index', 1000)\n\t .attr('data-x', x)\n\t .attr('data-y', y);\n\t\n\t if ($attrs.onDrag) {\n\t $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = elm.attr('data-x');\n\t var y = elm.attr('data-y');\n\t\n\t event.target.style.pointerEvents = 'auto';\n\t if ($attrs.onDragEnd) {\n\t $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t $timeout(function() {\n\t translateElement(elm, null)\n\t .removeAttr('data-x')\n\t .removeAttr('data-y')\n\t .removeClass('dragging-active');\n\t }, 50);\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlDraggable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDraggableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDroppableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t interact($element[0]).dropzone({\n\t ondragenter: function(event) {\n\t angular.element(event.target).addClass('drop-active');\n\t },\n\t ondragleave: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondropdeactivate: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondrop: function(event) {\n\t if (event.relatedTarget.dropData) {\n\t $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n\t $scope.$apply();\n\t }\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlDroppable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDroppableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlElementDimensionsCtrl', function($element, $scope, $parse, $attrs) {\n\t\n\t $parse($attrs.mwlElementDimensions).assign($scope, {\n\t width: $element[0].offsetWidth,\n\t height: $element[0].offsetHeight\n\t });\n\t\n\t })\n\t .directive('mwlElementDimensions', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlElementDimensionsCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlResizableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t var originalDimensions = {};\n\t var originalDimensionsStyle = {};\n\t var resizeEdge;\n\t\n\t function canResize() {\n\t return $parse($attrs.mwlResizable)($scope);\n\t }\n\t\n\t function getUnitsResized(edge, elm, gridDimensions) {\n\t var unitsResized = {};\n\t unitsResized.edge = edge;\n\t if (edge === 'start') {\n\t unitsResized.x = elm.data('x');\n\t unitsResized.y = elm.data('y');\n\t } else if (edge === 'end') {\n\t unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n\t unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n\t }\n\t if (gridDimensions && gridDimensions.x) {\n\t unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n\t }\n\t if (gridDimensions && gridDimensions.y) {\n\t unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n\t }\n\t return unitsResized;\n\t }\n\t\n\t interact($element[0]).resizable({\n\t edges: $parse($attrs.resizeEdges)($scope),\n\t snap: snap,\n\t onstart: function(event) {\n\t\n\t if (canResize()) {\n\t resizeEdge = 'end';\n\t var elm = angular.element(event.target);\n\t originalDimensions.height = elm[0].offsetHeight;\n\t originalDimensions.width = elm[0].offsetWidth;\n\t originalDimensionsStyle.height = elm.css('height');\n\t originalDimensionsStyle.width = elm.css('width');\n\t }\n\t\n\t },\n\t onmove: function(event) {\n\t\n\t if (canResize()) {\n\t var elm = angular.element(event.target);\n\t var x = parseFloat(elm.data('x') || 0);\n\t var y = parseFloat(elm.data('y') || 0);\n\t\n\t elm.css({\n\t width: event.rect.width + 'px',\n\t height: event.rect.height + 'px'\n\t });\n\t\n\t // translate when resizing from top or left edges\n\t x += event.deltaRect.left;\n\t y += event.deltaRect.top;\n\t\n\t elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\t\n\t elm.data('x', x);\n\t elm.data('y', y);\n\t\n\t if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n\t resizeEdge = 'start';\n\t }\n\t\n\t if ($attrs.onResize) {\n\t $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canResize()) {\n\t\n\t var elm = angular.element(event.target);\n\t var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\t\n\t elm\n\t .data('x', null)\n\t .data('y', null)\n\t .css({\n\t transform: null,\n\t width: originalDimensionsStyle.width,\n\t height: originalDimensionsStyle.height\n\t });\n\t\n\t if ($attrs.onResizeEnd) {\n\t $parse($attrs.onResizeEnd)($scope, unitsResized);\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlResizable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlResizableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarDate.js\": 18,\n\t\t\"./calendarLimitTo.js\": 19,\n\t\t\"./calendarTruncateEventTitle.js\": 20\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 17;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarDate', function(calendarHelper, calendarConfig) {\n\t\n\t function calendarDate(date, format, getFromConfig) {\n\t\n\t if (getFromConfig === true) {\n\t format = calendarConfig.dateFormats[format];\n\t }\n\t\n\t return calendarHelper.formatDate(date, format);\n\t\n\t }\n\t\n\t calendarDate.$stateful = true;\n\t\n\t return calendarDate;\n\t\n\t });\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarLimitTo', function(limitToFilter) {\n\t\n\t if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n\t return limitToFilter;\n\t }\n\t\n\t //Copied from the angular source. Only 1.4 has the begin functionality.\n\t return function(input, limit, begin) {\n\t if (Math.abs(Number(limit)) === Infinity) {\n\t limit = Number(limit);\n\t } else {\n\t limit = parseInt(limit);\n\t }\n\t if (isNaN(limit)) {\n\t return input;\n\t }\n\t\n\t if (angular.isNumber(input)) {\n\t input = input.toString();\n\t }\n\t if (!angular.isArray(input) && !angular.isString(input)) {\n\t return input;\n\t }\n\t\n\t begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n\t begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\t\n\t if (limit >= 0) {\n\t return input.slice(begin, begin + limit);\n\t } else if (begin === 0) {\n\t return input.slice(limit, input.length);\n\t } else {\n\t return input.slice(Math.max(0, begin + limit), begin);\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarTruncateEventTitle', function() {\n\t\n\t return function(string, length, boxHeight) {\n\t if (!string) {\n\t return '';\n\t }\n\t\n\t //Only truncate if if actually needs truncating\n\t if (string.length >= length && string.length / 20 > boxHeight / 30) {\n\t return string.substr(0, length) + '...';\n\t } else {\n\t return string;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarConfig.js\": 22,\n\t\t\"./calendarDebounce.js\": 23,\n\t\t\"./calendarHelper.js\": 24,\n\t\t\"./calendarTitle.js\": 25,\n\t\t\"./interact.js\": 26,\n\t\t\"./moment.js\": 28\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 21;\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .provider('calendarConfig', function() {\n\t\n\t var defaultFormats = {\n\t angular: {\n\t date: {\n\t hour: 'ha',\n\t day: 'd MMM',\n\t month: 'MMMM',\n\t weekDay: 'EEEE',\n\t time: 'HH:mm',\n\t datetime: 'MMM d, h:mm a'\n\t },\n\t title: {\n\t day: 'EEEE d MMMM, yyyy',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM yyyy',\n\t year: 'yyyy'\n\t }\n\t },\n\t moment: {\n\t date: {\n\t hour: 'ha',\n\t day: 'D MMM',\n\t month: 'MMMM',\n\t weekDay: 'dddd',\n\t time: 'HH:mm',\n\t datetime: 'MMM D, h:mm a'\n\t },\n\t title: {\n\t day: 'dddd D MMMM, YYYY',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM YYYY',\n\t year: 'YYYY'\n\t }\n\t }\n\t };\n\t\n\t var dateFormatter = 'angular';\n\t var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t var showTimesOnWeekView = false;\n\t\n\t var i18nStrings = {\n\t eventsLabel: 'Events',\n\t timeLabel: 'Time'\n\t };\n\t\n\t var displayAllMonthEvents = false;\n\t\n\t var configProvider = this;\n\t\n\t configProvider.setDateFormats = function(formats) {\n\t angular.extend(defaultDateFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setTitleFormats = function(formats) {\n\t angular.extend(defaultTitleFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setI18nStrings = function(strings) {\n\t angular.extend(i18nStrings, strings);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDisplayAllMonthEvents = function(value) {\n\t displayAllMonthEvents = value;\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDateFormatter = function(value) {\n\t if (['angular', 'moment'].indexOf(value) === -1) {\n\t throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n\t }\n\t dateFormatter = value;\n\t defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t return configProvider;\n\t };\n\t\n\t configProvider.showTimesOnWeekView = function(value) {\n\t showTimesOnWeekView = value; //experimental, and ignores the event end date\n\t return configProvider;\n\t };\n\t\n\t configProvider.$get = function() {\n\t return {\n\t dateFormats: defaultDateFormats,\n\t titleFormats: defaultTitleFormats,\n\t i18nStrings: i18nStrings,\n\t displayAllMonthEvents: displayAllMonthEvents,\n\t dateFormatter: dateFormatter,\n\t showTimesOnWeekView: showTimesOnWeekView\n\t };\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .service('calendarDebounce', function($timeout) {\n\t\n\t function debounce(func, wait, immediate) {\n\t var timeout;\n\t return function() {\n\t var context = this, args = arguments;\n\t function later() {\n\t timeout = null;\n\t if (!immediate) {\n\t func.apply(context, args);\n\t }\n\t }\n\t var callNow = immediate && !timeout;\n\t $timeout.cancel(timeout);\n\t timeout = $timeout(later, wait);\n\t if (callNow) {\n\t func.apply(context, args);\n\t }\n\t };\n\t }\n\t\n\t return debounce;\n\t\n\t });\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarHelper', function(dateFilter, moment, calendarConfig) {\n\t\n\t function formatDate(date, format) {\n\t if (calendarConfig.dateFormatter === 'angular') {\n\t return dateFilter(moment(date).toDate(), format);\n\t } else if (calendarConfig.dateFormatter === 'moment') {\n\t return moment(date).format(format);\n\t }\n\t }\n\t\n\t function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n\t if (!oldEnd) {\n\t return oldEnd;\n\t }\n\t var diffInSeconds = moment(newStart).diff(moment(oldStart));\n\t return moment(oldEnd).add(diffInSeconds);\n\t }\n\t\n\t function eventIsInPeriod(event, periodStart, periodEnd) {\n\t\n\t var eventStart = moment(event.startsAt);\n\t var eventEnd = moment(event.endsAt || event.startsAt);\n\t periodStart = moment(periodStart);\n\t periodEnd = moment(periodEnd);\n\t\n\t if (angular.isDefined(event.recursOn)) {\n\t\n\t switch (event.recursOn) {\n\t case 'year':\n\t eventStart.set({\n\t year: periodStart.year()\n\t });\n\t break;\n\t\n\t case 'month':\n\t eventStart.set({\n\t year: periodStart.year(),\n\t month: periodStart.month()\n\t });\n\t break;\n\t\n\t default:\n\t throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n\t }\n\t\n\t eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\t\n\t }\n\t\n\t return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n\t (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n\t (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n\t eventStart.isSame(periodStart) ||\n\t eventEnd.isSame(periodEnd);\n\t\n\t }\n\t\n\t function filterEventsInPeriod(events, startPeriod, endPeriod) {\n\t return events.filter(function(event) {\n\t return eventIsInPeriod(event, startPeriod, endPeriod);\n\t });\n\t }\n\t\n\t function getEventsInPeriod(calendarDate, period, allEvents) {\n\t var startPeriod = moment(calendarDate).startOf(period);\n\t var endPeriod = moment(calendarDate).endOf(period);\n\t return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n\t }\n\t\n\t function getBadgeTotal(events) {\n\t return events.filter(function(event) {\n\t return event.incrementsBadgeTotal !== false;\n\t }).length;\n\t }\n\t\n\t function getWeekDayNames() {\n\t var weekdays = [];\n\t var count = 0;\n\t while (count < 7) {\n\t weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n\t }\n\t return weekdays;\n\t }\n\t\n\t function getYearView(events, currentDay, cellModifier) {\n\t\n\t var view = [];\n\t var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n\t var month = moment(currentDay).startOf('year');\n\t var count = 0;\n\t while (count < 12) {\n\t var startPeriod = month.clone();\n\t var endPeriod = startPeriod.clone().endOf('month');\n\t var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n\t var cell = {\n\t label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n\t isToday: startPeriod.isSame(moment().startOf('month')),\n\t events: periodEvents,\n\t date: startPeriod,\n\t badgeTotal: getBadgeTotal(periodEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t view.push(cell);\n\t month.add(1, 'month');\n\t count++;\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getMonthView(events, currentDay, cellModifier) {\n\t\n\t var startOfMonth = moment(currentDay).startOf('month');\n\t var day = startOfMonth.clone().startOf('week');\n\t var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n\t var eventsInPeriod;\n\t if (calendarConfig.displayAllMonthEvents) {\n\t eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n\t } else {\n\t eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n\t }\n\t var view = [];\n\t var today = moment().startOf('day');\n\t\n\t while (day.isBefore(endOfMonthView)) {\n\t\n\t var inMonth = day.month() === moment(currentDay).month();\n\t var monthEvents = [];\n\t if (inMonth || calendarConfig.displayAllMonthEvents) {\n\t monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n\t }\n\t\n\t var cell = {\n\t label: day.date(),\n\t date: day.clone(),\n\t inMonth: inMonth,\n\t isPast: today.isAfter(day),\n\t isToday: today.isSame(day),\n\t isFuture: today.isBefore(day),\n\t isWeekend: [0, 6].indexOf(day.day()) > -1,\n\t events: monthEvents,\n\t badgeTotal: getBadgeTotal(monthEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t\n\t view.push(cell);\n\t\n\t day.add(1, 'day');\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getWeekView(events, currentDay) {\n\t\n\t var startOfWeek = moment(currentDay).startOf('week');\n\t var endOfWeek = moment(currentDay).endOf('week');\n\t var dayCounter = startOfWeek.clone();\n\t var days = [];\n\t var today = moment().startOf('day');\n\t while (days.length < 7) {\n\t days.push({\n\t weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n\t date: dayCounter.clone(),\n\t dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n\t isPast: dayCounter.isBefore(today),\n\t isToday: dayCounter.isSame(today),\n\t isFuture: dayCounter.isAfter(today),\n\t isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n\t });\n\t dayCounter.add(1, 'day');\n\t }\n\t\n\t var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\t\n\t var eventStart = moment(event.startsAt).startOf('day');\n\t var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n\t var weekViewStart = moment(startOfWeek).startOf('day');\n\t var weekViewEnd = moment(endOfWeek).startOf('day');\n\t var offset, span;\n\t\n\t if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n\t offset = 0;\n\t } else {\n\t offset = eventStart.diff(weekViewStart, 'days');\n\t }\n\t\n\t if (eventEnd.isAfter(weekViewEnd)) {\n\t eventEnd = weekViewEnd;\n\t }\n\t\n\t if (eventStart.isBefore(weekViewStart)) {\n\t eventStart = weekViewStart;\n\t }\n\t\n\t span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\t\n\t event.daySpan = span;\n\t event.dayOffset = offset;\n\t\n\t return event;\n\t });\n\t\n\t return {days: days, events: eventsSorted};\n\t\n\t }\n\t\n\t function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t\n\t var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n\t var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n\t var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n\t var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n\t var hourHeightMultiplier = hourHeight / 60;\n\t var buckets = [];\n\t var eventsInPeriod = filterEventsInPeriod(\n\t events,\n\t moment(currentDay).startOf('day').toDate(),\n\t moment(currentDay).endOf('day').toDate()\n\t );\n\t\n\t return eventsInPeriod.map(function(event) {\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t event.top = 0;\n\t } else {\n\t event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n\t }\n\t\n\t if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n\t event.height = calendarHeight - event.top;\n\t } else {\n\t var diffStart = event.startsAt;\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t diffStart = calendarStart.toDate();\n\t }\n\t if (!event.endsAt) {\n\t event.height = 30;\n\t } else {\n\t event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n\t }\n\t }\n\t\n\t if (event.top - event.height > calendarHeight) {\n\t event.height = 0;\n\t }\n\t\n\t event.left = 0;\n\t\n\t return event;\n\t }).filter(function(event) {\n\t return event.height > 0;\n\t }).map(function(event) {\n\t\n\t var cannotFitInABucket = true;\n\t buckets.forEach(function(bucket, bucketIndex) {\n\t var canFitInThisBucket = true;\n\t\n\t bucket.forEach(function(bucketItem) {\n\t if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n\t eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n\t canFitInThisBucket = false;\n\t }\n\t });\n\t\n\t if (canFitInThisBucket && cannotFitInABucket) {\n\t cannotFitInABucket = false;\n\t event.left = bucketIndex * 150;\n\t buckets[bucketIndex].push(event);\n\t }\n\t\n\t });\n\t\n\t if (cannotFitInABucket) {\n\t event.left = buckets.length * 150;\n\t buckets.push([event]);\n\t }\n\t\n\t return event;\n\t\n\t });\n\t\n\t }\n\t\n\t function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t var weekView = getWeekView(events, currentDay);\n\t var newEvents = [];\n\t weekView.days.forEach(function(day) {\n\t var dayEvents = weekView.events.filter(function(event) {\n\t return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n\t });\n\t var newDayEvents = getDayView(\n\t dayEvents,\n\t day.date,\n\t dayViewStart,\n\t dayViewEnd,\n\t dayViewSplit\n\t );\n\t newEvents = newEvents.concat(newDayEvents);\n\t });\n\t weekView.events = newEvents;\n\t return weekView;\n\t }\n\t\n\t function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n\t var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n\t var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n\t }\n\t\n\t return {\n\t getWeekDayNames: getWeekDayNames,\n\t getYearView: getYearView,\n\t getMonthView: getMonthView,\n\t getWeekView: getWeekView,\n\t getDayView: getDayView,\n\t getWeekViewWithTimes: getWeekViewWithTimes,\n\t getDayViewHeight: getDayViewHeight,\n\t adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n\t formatDate: formatDate,\n\t eventIsInPeriod: eventIsInPeriod //expose for testing only\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarTitle', function(moment, calendarConfig, calendarHelper) {\n\t\n\t function day(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n\t }\n\t\n\t function week(currentDay) {\n\t var weekTitleLabel = calendarConfig.titleFormats.week;\n\t return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n\t }\n\t\n\t function month(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n\t }\n\t\n\t function year(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n\t }\n\t\n\t return {\n\t day: day,\n\t week: week,\n\t month: month,\n\t year: year\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar interact;\n\ttry {\n\t interact = __webpack_require__(27);\n\t} catch (e) {\n\t interact = null;\n\t}\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('interact', interact);\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\tif(typeof interact === 'undefined') {var e = new Error(\"Cannot find module \\\"interact\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\n\tmodule.exports = interact;\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar moment = __webpack_require__(29);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('moment', moment);\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\tmodule.exports = moment;\n\n/***/ }\n/******/ ]);\n","function requireAll(r) {\n r.keys().forEach(r);\n}\n\nmodule.exports = require('./src/module');\n\nrequireAll(require.context('./src/directives', true, /\\.js$/));\nrequireAll(require.context('./src/filters', true, /\\.js$/));\nrequireAll(require.context('./src/services', true, /\\.js$/));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","var map = {\n\t\"./mwlCalendar.js\": 4,\n\t\"./mwlCalendarDay.js\": 5,\n\t\"./mwlCalendarHourList.js\": 6,\n\t\"./mwlCalendarMonth.js\": 7,\n\t\"./mwlCalendarSlideBox.js\": 8,\n\t\"./mwlCalendarWeek.js\": 9,\n\t\"./mwlCalendarYear.js\": 10,\n\t\"./mwlCollapseFallback.js\": 11,\n\t\"./mwlDateModifier.js\": 12,\n\t\"./mwlDraggable.js\": 13,\n\t\"./mwlDroppable.js\": 14,\n\t\"./mwlElementDimensions.js\": 15,\n\t\"./mwlResizable.js\": 16\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 3;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives \\.js$\n ** module id = 3\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarCtrl', function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\n var vm = this;\n\n $scope.events = $scope.events || [];\n\n vm.changeView = function(view, newDay) {\n $scope.view = view;\n $scope.currentDay = newDay;\n };\n\n vm.drillDown = function(date) {\n\n var rawDate = moment(date).toDate();\n\n var nextView = {\n year: 'month',\n month: 'day',\n week: 'day'\n };\n\n if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n vm.changeView(nextView[$scope.view], rawDate);\n }\n\n };\n\n var previousDate = moment($scope.currentDay);\n var previousView = angular.copy($scope.view);\n\n //Use a debounce to prevent it being called 3 times on initialisation\n var refreshCalendar = calendarDebounce(function() {\n if (calendarTitle[$scope.view]) {\n $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n }\n\n $scope.events = $scope.events.map(function(event, index) {\n Object.defineProperty(event, '$id', {enumerable: false, value: index});\n return event;\n });\n\n //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n var currentDate = moment($scope.currentDay);\n var shouldUpdate = true;\n if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n $scope.view === previousView) {\n shouldUpdate = false;\n }\n previousDate = currentDate;\n previousView = angular.copy($scope.view);\n\n if (shouldUpdate) {\n $scope.$broadcast('calendar.refreshView');\n }\n }, 50);\n\n //Auto update the calendar when the locale changes\n var unbindLocaleWatcher = $scope.$watch(function() {\n return moment.locale() + $locale.id;\n }, refreshCalendar);\n\n var unbindOnDestroy = [];\n unbindOnDestroy.push(unbindLocaleWatcher);\n\n //Refresh the calendar when any of these variables change.\n /* eslint-disable angular/ng_on_watch */\n unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n /* eslint-enable angular/ng_on_watch */\n\n //Remove any watchers when the calendar is destroyed\n var unbindDestroyListener = $scope.$on('$destroy', function() {\n unbindOnDestroy.forEach(function(unbind) {\n unbind();\n });\n });\n unbindOnDestroy.push(unbindDestroyListener);\n\n })\n .directive('mwlCalendar', function() {\n\n return {\n templateUrl: 'src/templates/calendar.html',\n restrict: 'EA',\n scope: {\n events: '=',\n view: '=',\n viewTitle: '=',\n currentDay: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onEventClick: '&',\n onEventTimesChanged: '&',\n onEditEventClick: '&',\n onDeleteEventClick: '&',\n onTimespanClick: '&',\n onDrillDownClick: '&',\n cellModifier: '&',\n dayViewStart: '@',\n dayViewEnd: '@',\n dayViewSplit: '@'\n },\n controller: 'MwlCalendarCtrl as vm'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendar.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarDayCtrl', function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\n var vm = this;\n\n vm.calendarConfig = calendarConfig;\n vm.$sce = $sce;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.dayViewHeight = calendarHelper.getDayViewHeight(\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n\n vm.view = calendarHelper.getDayView(\n $scope.events,\n $scope.currentDay,\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.eventDragComplete = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n vm.eventDragged = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n };\n\n vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n var start = moment(event.startsAt);\n var end = moment(event.endsAt);\n if (edge === 'start') {\n start.add(minutesDiff, 'minutes');\n } else {\n end.add(minutesDiff, 'minutes');\n }\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: start.toDate(),\n calendarNewEventEnd: end.toDate()\n });\n };\n\n vm.eventResized = function(event, edge, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n if (edge === 'start') {\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n }\n };\n\n })\n .directive('mwlCalendarDay', function() {\n\n return {\n templateUrl: 'src/templates/calendarDayView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n },\n controller: 'MwlCalendarDayCtrl as vm'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarDay.js\n ** module id = 5\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarHourListCtrl', function($scope, moment, calendarConfig, calendarHelper) {\n var vm = this;\n var dayViewStart, dayViewEnd;\n\n function updateDays() {\n dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n vm.dayViewSplit = parseInt($scope.dayViewSplit);\n vm.hours = [];\n var dayCounter = moment(dayViewStart);\n for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n vm.hours.push({\n label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n });\n dayCounter.add(1, 'hour');\n }\n }\n\n var originalLocale = moment.locale();\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n\n if (originalLocale !== moment.locale()) {\n originalLocale = moment.locale();\n updateDays();\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n updateDays();\n\n })\n .directive('mwlCalendarHourList', function() {\n\n return {\n restrict: 'EA',\n templateUrl: 'src/templates/calendarHourList.html',\n controller: 'MwlCalendarHourListCtrl as vm',\n scope: {\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarHourList.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarMonthCtrl', function($scope, moment, calendarHelper) {\n\n var vm = this;\n var firstRun = true;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n\n vm.weekDays = calendarHelper.getWeekDayNames();\n\n vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n var rows = Math.floor(vm.view.length / 7);\n vm.monthOffsets = [];\n for (var i = 0; i < rows; i++) {\n vm.monthOffsets.push(i * 7);\n }\n\n //Auto open the calendar to the current day if set\n if ($scope.autoOpen && firstRun) {\n firstRun = false;\n vm.view.forEach(function(day) {\n if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n vm.dayClicked(day, true);\n }\n });\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.dayClicked = function(day, dayClickedFirstRun) {\n\n if (!dayClickedFirstRun) {\n $scope.onTimespanClick({\n calendarDate: day.date.toDate()\n });\n }\n\n vm.openRowIndex = null;\n var dayIndex = vm.view.indexOf(day);\n if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n vm.openDayIndex = null; //close the open day\n } else {\n vm.openDayIndex = dayIndex;\n vm.openRowIndex = Math.floor(dayIndex / 7);\n }\n\n };\n\n vm.highlightEvent = function(event, shouldAddClass) {\n\n vm.view.forEach(function(day) {\n delete day.highlightClass;\n if (shouldAddClass) {\n var dayContainsEvent = day.events.indexOf(event) > -1;\n if (dayContainsEvent) {\n day.highlightClass = 'day-highlight dh-event-' + event.type;\n }\n }\n });\n\n };\n\n vm.handleEventDrop = function(event, newDayDate) {\n\n var newStart = moment(event.startsAt)\n .date(moment(newDayDate).date())\n .month(moment(newDayDate).month());\n\n var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarDate: newDayDate,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n })\n .directive('mwlCalendarMonth', function() {\n\n return {\n templateUrl: 'src/templates/calendarMonthView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEditEventClick: '=',\n onDeleteEventClick: '=',\n onEventTimesChanged: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onTimespanClick: '=',\n cellModifier: '='\n },\n controller: 'MwlCalendarMonthCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarMonth.js\n ** module id = 7\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarSlideBoxCtrl', function($scope, $sce) {\n\n var vm = this;\n vm.$sce = $sce;\n\n var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n vm.shouldCollapse = !isOpen;\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n unbindWatcher();\n });\n\n })\n .directive('mwlCalendarSlideBox', function() {\n\n return {\n restrict: 'EA',\n templateUrl: 'src/templates/calendarSlideBox.html',\n replace: true,\n controller: 'MwlCalendarSlideBoxCtrl as vm',\n require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n link: function(scope, elm, attrs, ctrls) {\n scope.isMonthView = !!ctrls[0];\n scope.isYearView = !!ctrls[1];\n },\n scope: {\n isOpen: '=',\n events: '=',\n onEventClick: '=',\n editEventHtml: '=',\n onEditEventClick: '=',\n deleteEventHtml: '=',\n onDeleteEventClick: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarSlideBox.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarWeekCtrl', function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\n var vm = this;\n\n vm.showTimes = calendarConfig.showTimesOnWeekView;\n vm.$sce = $sce;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.dayViewHeight = calendarHelper.getDayViewHeight(\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n if (vm.showTimes) {\n vm.view = calendarHelper.getWeekViewWithTimes(\n $scope.events,\n $scope.currentDay,\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n } else {\n vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n }\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\n var newStart = moment(event.startsAt).add(daysDiff, 'days');\n var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\n if (minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n newStart = newStart.add(minutesDiff, 'minutes');\n newEnd = newEnd.add(minutesDiff, 'minutes');\n }\n\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n vm.weekResized = function(event, edge, daysDiff) {\n\n var start = moment(event.startsAt);\n var end = moment(event.endsAt);\n if (edge === 'start') {\n start.add(daysDiff, 'days');\n } else {\n end.add(daysDiff, 'days');\n }\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: start.toDate(),\n calendarNewEventEnd: end.toDate()\n });\n\n };\n\n vm.tempTimeChanged = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n };\n\n })\n .directive('mwlCalendarWeek', function() {\n\n return {\n templateUrl: 'src/templates/calendarWeekView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n },\n controller: 'MwlCalendarWeekCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarWeek.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarYearCtrl', function($scope, moment, calendarHelper) {\n\n var vm = this;\n var firstRun = true;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\n //Auto open the calendar to the current day if set\n if ($scope.autoOpen && firstRun) {\n firstRun = false;\n vm.view.forEach(function(month) {\n if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n vm.monthClicked(month, true);\n }\n });\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.monthClicked = function(month, monthClickedFirstRun) {\n\n if (!monthClickedFirstRun) {\n $scope.onTimespanClick({calendarDate: month.date.toDate()});\n }\n\n vm.openRowIndex = null;\n var monthIndex = vm.view.indexOf(month);\n if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n vm.openMonthIndex = null; //close the open month\n } else {\n vm.openMonthIndex = monthIndex;\n vm.openRowIndex = Math.floor(monthIndex / 4);\n }\n\n };\n\n vm.handleEventDrop = function(event, newMonthDate) {\n var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarDate: newMonthDate,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n })\n .directive('mwlCalendarYear', function() {\n\n return {\n templateUrl: 'src/templates/calendarYearView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n onEditEventClick: '=',\n onDeleteEventClick: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onTimespanClick: '=',\n cellModifier: '='\n },\n controller: 'MwlCalendarYearCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarYear.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCollapseFallbackCtrl', function($scope, $attrs, $element) {\n var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n if (shouldCollapse) {\n $element.addClass('ng-hide');\n } else {\n $element.removeClass('ng-hide');\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n unbindWatcher();\n });\n\n })\n .directive('mwlCollapseFallback', function($injector) {\n\n if ($injector.has('collapseDirective')) {\n return {};\n }\n\n return {\n restrict: 'A',\n controller: 'MwlCollapseFallbackCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCollapseFallback.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDateModifierCtrl', function($element, $attrs, $scope, moment) {\n\n function onClick() {\n if (angular.isDefined($attrs.setToToday)) {\n $scope.date = new Date();\n } else if (angular.isDefined($attrs.increment)) {\n $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n } else if (angular.isDefined($attrs.decrement)) {\n $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n }\n $scope.$apply();\n }\n\n $element.bind('click', onClick);\n\n $scope.$on('$destroy', function() {\n $element.unbind('click', onClick);\n });\n\n })\n .directive('mwlDateModifier', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDateModifierCtrl',\n scope: {\n date: '=',\n increment: '=',\n decrement: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDateModifier.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDraggableCtrl', function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\n if (!interact) {\n return;\n }\n\n var snap, snapGridDimensions;\n if ($attrs.snapGrid) {\n snapGridDimensions = $parse($attrs.snapGrid)($scope);\n snap = {\n targets: [\n interact.createSnapGrid(snapGridDimensions)\n ]\n };\n }\n\n function translateElement(elm, transformValue) {\n return elm\n .css('transform', transformValue)\n .css('-ms-transform', transformValue)\n .css('-webkit-transform', transformValue);\n }\n\n function canDrag() {\n return $parse($attrs.mwlDraggable)($scope);\n }\n\n function getUnitsMoved(x, y, gridDimensions) {\n\n var result = {x: x, y: y};\n\n if (gridDimensions && gridDimensions.x) {\n result.x /= gridDimensions.x;\n }\n\n if (gridDimensions && gridDimensions.y) {\n result.y /= gridDimensions.y;\n }\n\n return result;\n\n }\n\n interact($element[0]).draggable({\n snap: snap,\n onstart: function(event) {\n if (canDrag()) {\n angular.element(event.target).addClass('dragging-active');\n event.target.dropData = $parse($attrs.dropData)($scope);\n event.target.style.pointerEvents = 'none';\n if ($attrs.onDragStart) {\n $parse($attrs.onDragStart)($scope);\n $scope.$apply();\n }\n }\n },\n onmove: function(event) {\n\n if (canDrag()) {\n var elm = angular.element(event.target);\n var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\n switch ($parse($attrs.axis)($scope)) {\n case 'x':\n y = 0;\n break;\n\n case 'y':\n x = 0;\n break;\n\n default:\n }\n\n if ($window.getComputedStyle(elm[0]).position === 'static') {\n elm.css('position', 'relative');\n }\n\n translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n .css('z-index', 1000)\n .attr('data-x', x)\n .attr('data-y', y);\n\n if ($attrs.onDrag) {\n $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n $scope.$apply();\n }\n }\n\n },\n onend: function(event) {\n\n if (canDrag()) {\n var elm = angular.element(event.target);\n var x = elm.attr('data-x');\n var y = elm.attr('data-y');\n\n event.target.style.pointerEvents = 'auto';\n if ($attrs.onDragEnd) {\n $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n $scope.$apply();\n }\n\n $timeout(function() {\n translateElement(elm, null)\n .removeAttr('data-x')\n .removeAttr('data-y')\n .removeClass('dragging-active');\n }, 50);\n }\n\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlDraggable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDraggableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDraggable.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDroppableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\n if (!interact) {\n return;\n }\n\n interact($element[0]).dropzone({\n ondragenter: function(event) {\n angular.element(event.target).addClass('drop-active');\n },\n ondragleave: function(event) {\n angular.element(event.target).removeClass('drop-active');\n },\n ondropdeactivate: function(event) {\n angular.element(event.target).removeClass('drop-active');\n },\n ondrop: function(event) {\n if (event.relatedTarget.dropData) {\n $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n $scope.$apply();\n }\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlDroppable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDroppableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDroppable.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlElementDimensionsCtrl', function($element, $scope, $parse, $attrs) {\n\n $parse($attrs.mwlElementDimensions).assign($scope, {\n width: $element[0].offsetWidth,\n height: $element[0].offsetHeight\n });\n\n })\n .directive('mwlElementDimensions', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlElementDimensionsCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlElementDimensions.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlResizableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\n if (!interact) {\n return;\n }\n\n var snap, snapGridDimensions;\n if ($attrs.snapGrid) {\n snapGridDimensions = $parse($attrs.snapGrid)($scope);\n snap = {\n targets: [\n interact.createSnapGrid(snapGridDimensions)\n ]\n };\n }\n\n var originalDimensions = {};\n var originalDimensionsStyle = {};\n var resizeEdge;\n\n function canResize() {\n return $parse($attrs.mwlResizable)($scope);\n }\n\n function getUnitsResized(edge, elm, gridDimensions) {\n var unitsResized = {};\n unitsResized.edge = edge;\n if (edge === 'start') {\n unitsResized.x = elm.data('x');\n unitsResized.y = elm.data('y');\n } else if (edge === 'end') {\n unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n }\n if (gridDimensions && gridDimensions.x) {\n unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n }\n if (gridDimensions && gridDimensions.y) {\n unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n }\n return unitsResized;\n }\n\n interact($element[0]).resizable({\n edges: $parse($attrs.resizeEdges)($scope),\n snap: snap,\n onstart: function(event) {\n\n if (canResize()) {\n resizeEdge = 'end';\n var elm = angular.element(event.target);\n originalDimensions.height = elm[0].offsetHeight;\n originalDimensions.width = elm[0].offsetWidth;\n originalDimensionsStyle.height = elm.css('height');\n originalDimensionsStyle.width = elm.css('width');\n }\n\n },\n onmove: function(event) {\n\n if (canResize()) {\n var elm = angular.element(event.target);\n var x = parseFloat(elm.data('x') || 0);\n var y = parseFloat(elm.data('y') || 0);\n\n elm.css({\n width: event.rect.width + 'px',\n height: event.rect.height + 'px'\n });\n\n // translate when resizing from top or left edges\n x += event.deltaRect.left;\n y += event.deltaRect.top;\n\n elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\n elm.data('x', x);\n elm.data('y', y);\n\n if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n resizeEdge = 'start';\n }\n\n if ($attrs.onResize) {\n $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n $scope.$apply();\n }\n\n }\n\n },\n onend: function(event) {\n\n if (canResize()) {\n\n var elm = angular.element(event.target);\n var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\n elm\n .data('x', null)\n .data('y', null)\n .css({\n transform: null,\n width: originalDimensionsStyle.width,\n height: originalDimensionsStyle.height\n });\n\n if ($attrs.onResizeEnd) {\n $parse($attrs.onResizeEnd)($scope, unitsResized);\n $scope.$apply();\n }\n }\n\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlResizable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlResizableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlResizable.js\n ** module id = 16\n ** module chunks = 0\n **/","var map = {\n\t\"./calendarDate.js\": 18,\n\t\"./calendarLimitTo.js\": 19,\n\t\"./calendarTruncateEventTitle.js\": 20\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 17;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters \\.js$\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarDate', function(calendarHelper, calendarConfig) {\n\n function calendarDate(date, format, getFromConfig) {\n\n if (getFromConfig === true) {\n format = calendarConfig.dateFormats[format];\n }\n\n return calendarHelper.formatDate(date, format);\n\n }\n\n calendarDate.$stateful = true;\n\n return calendarDate;\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarDate.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarLimitTo', function(limitToFilter) {\n\n if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n return limitToFilter;\n }\n\n //Copied from the angular source. Only 1.4 has the begin functionality.\n return function(input, limit, begin) {\n if (Math.abs(Number(limit)) === Infinity) {\n limit = Number(limit);\n } else {\n limit = parseInt(limit);\n }\n if (isNaN(limit)) {\n return input;\n }\n\n if (angular.isNumber(input)) {\n input = input.toString();\n }\n if (!angular.isArray(input) && !angular.isString(input)) {\n return input;\n }\n\n begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\n if (limit >= 0) {\n return input.slice(begin, begin + limit);\n } else if (begin === 0) {\n return input.slice(limit, input.length);\n } else {\n return input.slice(Math.max(0, begin + limit), begin);\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarLimitTo.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarTruncateEventTitle', function() {\n\n return function(string, length, boxHeight) {\n if (!string) {\n return '';\n }\n\n //Only truncate if if actually needs truncating\n if (string.length >= length && string.length / 20 > boxHeight / 30) {\n return string.substr(0, length) + '...';\n } else {\n return string;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarTruncateEventTitle.js\n ** module id = 20\n ** module chunks = 0\n **/","var map = {\n\t\"./calendarConfig.js\": 22,\n\t\"./calendarDebounce.js\": 23,\n\t\"./calendarHelper.js\": 24,\n\t\"./calendarTitle.js\": 25,\n\t\"./interact.js\": 26,\n\t\"./moment.js\": 28\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 21;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services \\.js$\n ** module id = 21\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .provider('calendarConfig', function() {\n\n var defaultFormats = {\n angular: {\n date: {\n hour: 'ha',\n day: 'd MMM',\n month: 'MMMM',\n weekDay: 'EEEE',\n time: 'HH:mm',\n datetime: 'MMM d, h:mm a'\n },\n title: {\n day: 'EEEE d MMMM, yyyy',\n week: 'Week {week} of {year}',\n month: 'MMMM yyyy',\n year: 'yyyy'\n }\n },\n moment: {\n date: {\n hour: 'ha',\n day: 'D MMM',\n month: 'MMMM',\n weekDay: 'dddd',\n time: 'HH:mm',\n datetime: 'MMM D, h:mm a'\n },\n title: {\n day: 'dddd D MMMM, YYYY',\n week: 'Week {week} of {year}',\n month: 'MMMM YYYY',\n year: 'YYYY'\n }\n }\n };\n\n var dateFormatter = 'angular';\n var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n var showTimesOnWeekView = false;\n\n var i18nStrings = {\n eventsLabel: 'Events',\n timeLabel: 'Time'\n };\n\n var displayAllMonthEvents = false;\n\n var configProvider = this;\n\n configProvider.setDateFormats = function(formats) {\n angular.extend(defaultDateFormats, formats);\n return configProvider;\n };\n\n configProvider.setTitleFormats = function(formats) {\n angular.extend(defaultTitleFormats, formats);\n return configProvider;\n };\n\n configProvider.setI18nStrings = function(strings) {\n angular.extend(i18nStrings, strings);\n return configProvider;\n };\n\n configProvider.setDisplayAllMonthEvents = function(value) {\n displayAllMonthEvents = value;\n return configProvider;\n };\n\n configProvider.setDateFormatter = function(value) {\n if (['angular', 'moment'].indexOf(value) === -1) {\n throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n }\n dateFormatter = value;\n defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n return configProvider;\n };\n\n configProvider.showTimesOnWeekView = function(value) {\n showTimesOnWeekView = value; //experimental, and ignores the event end date\n return configProvider;\n };\n\n configProvider.$get = function() {\n return {\n dateFormats: defaultDateFormats,\n titleFormats: defaultTitleFormats,\n i18nStrings: i18nStrings,\n displayAllMonthEvents: displayAllMonthEvents,\n dateFormatter: dateFormatter,\n showTimesOnWeekView: showTimesOnWeekView\n };\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarConfig.js\n ** module id = 22\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .service('calendarDebounce', function($timeout) {\n\n function debounce(func, wait, immediate) {\n var timeout;\n return function() {\n var context = this, args = arguments;\n function later() {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n }\n var callNow = immediate && !timeout;\n $timeout.cancel(timeout);\n timeout = $timeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n return debounce;\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarDebounce.js\n ** module id = 23\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .factory('calendarHelper', function(dateFilter, moment, calendarConfig) {\n\n function formatDate(date, format) {\n if (calendarConfig.dateFormatter === 'angular') {\n return dateFilter(moment(date).toDate(), format);\n } else if (calendarConfig.dateFormatter === 'moment') {\n return moment(date).format(format);\n }\n }\n\n function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n if (!oldEnd) {\n return oldEnd;\n }\n var diffInSeconds = moment(newStart).diff(moment(oldStart));\n return moment(oldEnd).add(diffInSeconds);\n }\n\n function eventIsInPeriod(event, periodStart, periodEnd) {\n\n var eventStart = moment(event.startsAt);\n var eventEnd = moment(event.endsAt || event.startsAt);\n periodStart = moment(periodStart);\n periodEnd = moment(periodEnd);\n\n if (angular.isDefined(event.recursOn)) {\n\n switch (event.recursOn) {\n case 'year':\n eventStart.set({\n year: periodStart.year()\n });\n break;\n\n case 'month':\n eventStart.set({\n year: periodStart.year(),\n month: periodStart.month()\n });\n break;\n\n default:\n throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n }\n\n eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\n }\n\n return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n eventStart.isSame(periodStart) ||\n eventEnd.isSame(periodEnd);\n\n }\n\n function filterEventsInPeriod(events, startPeriod, endPeriod) {\n return events.filter(function(event) {\n return eventIsInPeriod(event, startPeriod, endPeriod);\n });\n }\n\n function getEventsInPeriod(calendarDate, period, allEvents) {\n var startPeriod = moment(calendarDate).startOf(period);\n var endPeriod = moment(calendarDate).endOf(period);\n return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n }\n\n function getBadgeTotal(events) {\n return events.filter(function(event) {\n return event.incrementsBadgeTotal !== false;\n }).length;\n }\n\n function getWeekDayNames() {\n var weekdays = [];\n var count = 0;\n while (count < 7) {\n weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n }\n return weekdays;\n }\n\n function getYearView(events, currentDay, cellModifier) {\n\n var view = [];\n var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n var month = moment(currentDay).startOf('year');\n var count = 0;\n while (count < 12) {\n var startPeriod = month.clone();\n var endPeriod = startPeriod.clone().endOf('month');\n var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n var cell = {\n label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n isToday: startPeriod.isSame(moment().startOf('month')),\n events: periodEvents,\n date: startPeriod,\n badgeTotal: getBadgeTotal(periodEvents)\n };\n\n cellModifier({calendarCell: cell});\n view.push(cell);\n month.add(1, 'month');\n count++;\n }\n\n return view;\n\n }\n\n function getMonthView(events, currentDay, cellModifier) {\n\n var startOfMonth = moment(currentDay).startOf('month');\n var day = startOfMonth.clone().startOf('week');\n var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n var eventsInPeriod;\n if (calendarConfig.displayAllMonthEvents) {\n eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n } else {\n eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n }\n var view = [];\n var today = moment().startOf('day');\n\n while (day.isBefore(endOfMonthView)) {\n\n var inMonth = day.month() === moment(currentDay).month();\n var monthEvents = [];\n if (inMonth || calendarConfig.displayAllMonthEvents) {\n monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n }\n\n var cell = {\n label: day.date(),\n date: day.clone(),\n inMonth: inMonth,\n isPast: today.isAfter(day),\n isToday: today.isSame(day),\n isFuture: today.isBefore(day),\n isWeekend: [0, 6].indexOf(day.day()) > -1,\n events: monthEvents,\n badgeTotal: getBadgeTotal(monthEvents)\n };\n\n cellModifier({calendarCell: cell});\n\n view.push(cell);\n\n day.add(1, 'day');\n }\n\n return view;\n\n }\n\n function getWeekView(events, currentDay) {\n\n var startOfWeek = moment(currentDay).startOf('week');\n var endOfWeek = moment(currentDay).endOf('week');\n var dayCounter = startOfWeek.clone();\n var days = [];\n var today = moment().startOf('day');\n while (days.length < 7) {\n days.push({\n weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n date: dayCounter.clone(),\n dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n isPast: dayCounter.isBefore(today),\n isToday: dayCounter.isSame(today),\n isFuture: dayCounter.isAfter(today),\n isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n });\n dayCounter.add(1, 'day');\n }\n\n var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\n var eventStart = moment(event.startsAt).startOf('day');\n var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n var weekViewStart = moment(startOfWeek).startOf('day');\n var weekViewEnd = moment(endOfWeek).startOf('day');\n var offset, span;\n\n if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n offset = 0;\n } else {\n offset = eventStart.diff(weekViewStart, 'days');\n }\n\n if (eventEnd.isAfter(weekViewEnd)) {\n eventEnd = weekViewEnd;\n }\n\n if (eventStart.isBefore(weekViewStart)) {\n eventStart = weekViewStart;\n }\n\n span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\n event.daySpan = span;\n event.dayOffset = offset;\n\n return event;\n });\n\n return {days: days, events: eventsSorted};\n\n }\n\n function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\n var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n var hourHeight = (60 / dayViewSplit) * 30;\n var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n var hourHeightMultiplier = hourHeight / 60;\n var buckets = [];\n var eventsInPeriod = filterEventsInPeriod(\n events,\n moment(currentDay).startOf('day').toDate(),\n moment(currentDay).endOf('day').toDate()\n );\n\n return eventsInPeriod.map(function(event) {\n if (moment(event.startsAt).isBefore(calendarStart)) {\n event.top = 0;\n } else {\n event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n }\n\n if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n event.height = calendarHeight - event.top;\n } else {\n var diffStart = event.startsAt;\n if (moment(event.startsAt).isBefore(calendarStart)) {\n diffStart = calendarStart.toDate();\n }\n if (!event.endsAt) {\n event.height = 30;\n } else {\n event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n }\n }\n\n if (event.top - event.height > calendarHeight) {\n event.height = 0;\n }\n\n event.left = 0;\n\n return event;\n }).filter(function(event) {\n return event.height > 0;\n }).map(function(event) {\n\n var cannotFitInABucket = true;\n buckets.forEach(function(bucket, bucketIndex) {\n var canFitInThisBucket = true;\n\n bucket.forEach(function(bucketItem) {\n if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n canFitInThisBucket = false;\n }\n });\n\n if (canFitInThisBucket && cannotFitInABucket) {\n cannotFitInABucket = false;\n event.left = bucketIndex * 150;\n buckets[bucketIndex].push(event);\n }\n\n });\n\n if (cannotFitInABucket) {\n event.left = buckets.length * 150;\n buckets.push([event]);\n }\n\n return event;\n\n });\n\n }\n\n function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n var weekView = getWeekView(events, currentDay);\n var newEvents = [];\n weekView.days.forEach(function(day) {\n var dayEvents = weekView.events.filter(function(event) {\n return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n });\n var newDayEvents = getDayView(\n dayEvents,\n day.date,\n dayViewStart,\n dayViewEnd,\n dayViewSplit\n );\n newEvents = newEvents.concat(newDayEvents);\n });\n weekView.events = newEvents;\n return weekView;\n }\n\n function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n var hourHeight = (60 / dayViewSplit) * 30;\n return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n }\n\n return {\n getWeekDayNames: getWeekDayNames,\n getYearView: getYearView,\n getMonthView: getMonthView,\n getWeekView: getWeekView,\n getDayView: getDayView,\n getWeekViewWithTimes: getWeekViewWithTimes,\n getDayViewHeight: getDayViewHeight,\n adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n formatDate: formatDate,\n eventIsInPeriod: eventIsInPeriod //expose for testing only\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarHelper.js\n ** module id = 24\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .factory('calendarTitle', function(moment, calendarConfig, calendarHelper) {\n\n function day(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n }\n\n function week(currentDay) {\n var weekTitleLabel = calendarConfig.titleFormats.week;\n return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n }\n\n function month(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n }\n\n function year(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n }\n\n return {\n day: day,\n week: week,\n month: month,\n year: year\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarTitle.js\n ** module id = 25\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\nvar interact;\ntry {\n interact = require('interact.js');\n} catch (e) {\n interact = null;\n}\n\nangular\n .module('mwl.calendar')\n .constant('interact', interact);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/interact.js\n ** module id = 26\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\nvar moment = require('moment');\n\nangular\n .module('mwl.calendar')\n .constant('moment', moment);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/moment.js\n ** module id = 28\n ** module chunks = 0\n **/","angular.module(\"mwl.calendar\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"src/templates/calendar.html\",\"
The value passed to the view attribute of the calendar is not set
The value passed to current-day attribute of the calendar is not set
\");\n$templateCache.put(\"src/templates/calendarDayView.html\",\"
,
\");\n$templateCache.put(\"src/templates/calendarHourList.html\",\"
\");\n$templateCache.put(\"src/templates/calendarMonthDay.html\",\"
0\\\" ng-bind=\\\"day.badgeTotal\\\">
0\\\">
\");\n$templateCache.put(\"src/templates/calendarMonthEventsList.html\",\"
0\\\">
\");\n$templateCache.put(\"src/templates/calendarMonthView.html\",\"
0}\\\">
0\\\" events=\\\"vm.view[vm.openDayIndex].events\\\" on-event-click=\\\"onEventClick\\\" edit-event-html=\\\"editEventHtml\\\" on-edit-event-click=\\\"onEditEventClick\\\" delete-event-html=\\\"deleteEventHtml\\\" on-delete-event-click=\\\"onDeleteEventClick\\\">
\");\n$templateCache.put(\"src/templates/calendarSlideBox.html\",\"
\");\n$templateCache.put(\"src/templates/calendarWeekView.html\",\"

\");\n$templateCache.put(\"src/templates/calendarYearView.html\",\"
0, \\'cal-day-today\\': month.isToday}\\\" mwl-droppable on-drop=\\\"vm.handleEventDrop(dropData.event, month.date)\\\"> 0\\\" ng-bind=\\\"month.badgeTotal\\\">
0\\\">
0\\\" events=\\\"vm.view[vm.openMonthIndex].events\\\" on-event-click=\\\"onEventClick\\\" edit-event-html=\\\"editEventHtml\\\" on-edit-event-click=\\\"onEditEventClick\\\" delete-event-html=\\\"deleteEventHtml\\\" on-delete-event-click=\\\"onDeleteEventClick\\\">
\");}]);"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["angular-bootstrap-calendar-tpls.js","webpack:/webpack/bootstrap f9365143e6b9940e60b4","calendar.js","webpack:/index.js","webpack:/src/directives \\.js$","webpack:/src/directives/mwlCalendar.js","webpack:/src/directives/mwlCalendarDay.js","webpack:/src/directives/mwlCalendarHourList.js","webpack:/src/directives/mwlCalendarMonth.js","webpack:/src/directives/mwlCalendarSlideBox.js","webpack:/src/directives/mwlCalendarWeek.js","webpack:/src/directives/mwlCalendarYear.js","webpack:/src/directives/mwlCollapseFallback.js","webpack:/src/directives/mwlDateModifier.js","webpack:/src/directives/mwlDraggable.js","webpack:/src/directives/mwlDroppable.js","webpack:/src/directives/mwlElementDimensions.js","webpack:/src/directives/mwlResizable.js","webpack:/src/filters \\.js$","webpack:/src/filters/calendarDate.js","webpack:/src/filters/calendarLimitTo.js","webpack:/src/filters/calendarTruncateEventTitle.js","webpack:/src/services \\.js$","webpack:/src/services/calendarConfig.js","webpack:/src/services/calendarDebounce.js","webpack:/src/services/calendarHelper.js","webpack:/src/services/calendarTitle.js","webpack:/src/services/interact.js","webpack:/src/services/moment.js","templates.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","requireAll","r","keys","forEach","angular","MODULE_NAME","webpackContext","req","webpackContextResolve","map","Error","./mwlCalendar.js","./mwlCalendarDay.js","./mwlCalendarHourList.js","./mwlCalendarMonth.js","./mwlCalendarSlideBox.js","./mwlCalendarWeek.js","./mwlCalendarYear.js","./mwlCollapseFallback.js","./mwlDateModifier.js","./mwlDraggable.js","./mwlDroppable.js","./mwlElementDimensions.js","./mwlResizable.js","Object","resolve","controller","$scope","$timeout","$window","$locale","moment","calendarTitle","calendarDebounce","vm","this","events","changeView","view","newDay","currentDay","drillDown","date","rawDate","toDate","nextView","year","month","week","onDrillDownClick","calendarDate","calendarNextView","previousDate","previousView","copy","refreshCalendar","viewTitle","event","index","defineProperty","enumerable","value","currentDate","shouldUpdate","clone","startOf","isSame","$broadcast","unbindLocaleWatcher","$watch","locale","unbindOnDestroy","push","unbindDestroyListener","$on","unbind","directive","templateUrl","restrict","scope","editEventHtml","deleteEventHtml","autoOpen","onEventClick","onEventTimesChanged","onEditEventClick","onDeleteEventClick","onTimespanClick","cellModifier","dayViewStart","dayViewEnd","dayViewSplit","$sce","calendarHelper","calendarConfig","unbindListener","dayViewHeight","getDayViewHeight","getDayView","eventDragComplete","minuteChunksMoved","minutesDiff","newStart","startsAt","add","newEnd","endsAt","tempStartsAt","calendarEvent","calendarNewEventStart","calendarNewEventEnd","eventDragged","eventResizeComplete","edge","start","end","eventResized","require","updateDays","parseInt","hours","dayCounter","i","diff","label","formatDate","dateFormats","hour","originalLocale","firstRun","weekDays","getWeekDayNames","getMonthView","rows","Math","floor","length","monthOffsets","day","inMonth","dayClicked","dayClickedFirstRun","openRowIndex","dayIndex","indexOf","openDayIndex","highlightEvent","shouldAddClass","highlightClass","dayContainsEvent","type","handleEventDrop","newDayDate","adjustEndDateFromStartDiff","link","element","attrs","calendarCtrl","unbindWatcher","isOpen","shouldCollapse","unbindDestroy","replace","elm","ctrls","isMonthView","isYearView","showTimes","showTimesOnWeekView","getWeekViewWithTimes","getWeekView","weekDragged","daysDiff","weekResized","tempTimeChanged","getYearView","monthClicked","monthClickedFirstRun","monthIndex","openMonthIndex","newMonthDate","$attrs","$element","mwlCollapseFallback","addClass","removeClass","$injector","has","onClick","isDefined","setToToday","Date","increment","decrement","subtract","$apply","bind","$parse","interact","translateElement","transformValue","css","canDrag","mwlDraggable","getUnitsMoved","x","y","gridDimensions","result","snap","snapGridDimensions","snapGrid","targets","createSnapGrid","draggable","onstart","target","dropData","style","pointerEvents","onDragStart","onmove","parseFloat","attr","dx","dy","axis","getComputedStyle","position","onDrag","onend","onDragEnd","removeAttr","unset","dropzone","ondragenter","ondragleave","ondropdeactivate","ondrop","relatedTarget","onDrop","mwlElementDimensions","assign","width","offsetWidth","height","offsetHeight","canResize","mwlResizable","getUnitsResized","unitsResized","data","originalDimensions","round","resizeEdge","originalDimensionsStyle","resizable","edges","resizeEdges","rect","deltaRect","left","top","onResize","transform","onResizeEnd","./calendarDate.js","./calendarLimitTo.js","./calendarTruncateEventTitle.js","filter","format","getFromConfig","$stateful","limitToFilter","version","minor","input","limit","begin","abs","Number","Infinity","isNaN","isNumber","toString","isArray","isString","slice","max","string","boxHeight","substr","./calendarConfig.js","./calendarDebounce.js","./calendarHelper.js","./calendarTitle.js","./interact.js","./moment.js","provider","defaultFormats","weekDay","time","datetime","title","dateFormatter","defaultDateFormats","defaultTitleFormats","i18nStrings","eventsLabel","timeLabel","displayAllMonthEvents","configProvider","setDateFormats","formats","extend","setTitleFormats","setI18nStrings","strings","setDisplayAllMonthEvents","setDateFormatter","$get","titleFormats","service","debounce","func","wait","immediate","timeout","later","apply","context","args","arguments","callNow","cancel","factory","dateFilter","oldStart","oldEnd","diffInSeconds","eventIsInPeriod","periodStart","periodEnd","eventStart","eventEnd","recursOn","set","isAfter","isBefore","filterEventsInPeriod","startPeriod","endPeriod","getEventsInPeriod","period","allEvents","endOf","getBadgeTotal","incrementsBadgeTotal","weekdays","count","weekday","eventsInPeriod","periodEvents","cell","isToday","badgeTotal","calendarCell","startOfMonth","endOfMonthView","today","monthEvents","isPast","isFuture","isWeekend","startOfWeek","endOfWeek","days","weekDayLabel","dayLabel","eventsSorted","offset","span","weekViewStart","weekViewEnd","daySpan","dayOffset","dayStartHour","dayEndHour","hourHeight","calendarStart","calendarEnd","calendarHeight","hourHeightMultiplier","buckets","diffStart","cannotFitInABucket","bucket","bucketIndex","canFitInThisBucket","bucketItem","weekView","newEvents","dayEvents","newDayEvents","concat","dayViewStartM","dayViewEndM","weekTitleLabel","e","constant","code","run","$templateCache","put"],"mappings":"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","file":"angular-bootstrap-calendar-tpls.min.js","sourcesContent":["/**\n * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day\n * @version v0.12.0\n * @link https://github.com/mattlewis92/angular-bootstrap-calendar\n * @license MIT\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tfunction requireAll(r) {\n\t r.keys().forEach(r);\n\t}\n\t\n\tmodule.exports = __webpack_require__(1);\n\t\n\trequireAll(__webpack_require__(3));\n\trequireAll(__webpack_require__(17));\n\trequireAll(__webpack_require__(21));\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar MODULE_NAME = 'mwl.calendar';\n\t\n\tangular.module(MODULE_NAME, []);\n\t\n\tmodule.exports = MODULE_NAME;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = angular;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./mwlCalendar.js\": 4,\n\t\t\"./mwlCalendarDay.js\": 5,\n\t\t\"./mwlCalendarHourList.js\": 6,\n\t\t\"./mwlCalendarMonth.js\": 7,\n\t\t\"./mwlCalendarSlideBox.js\": 8,\n\t\t\"./mwlCalendarWeek.js\": 9,\n\t\t\"./mwlCalendarYear.js\": 10,\n\t\t\"./mwlCollapseFallback.js\": 11,\n\t\t\"./mwlDateModifier.js\": 12,\n\t\t\"./mwlDraggable.js\": 13,\n\t\t\"./mwlDroppable.js\": 14,\n\t\t\"./mwlElementDimensions.js\": 15,\n\t\t\"./mwlResizable.js\": 16\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 3;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarCtrl', [\"$scope\", \"$timeout\", \"$window\", \"$locale\", \"moment\", \"calendarTitle\", \"calendarDebounce\", function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\t\n\t var vm = this;\n\t\n\t $scope.events = $scope.events || [];\n\t\n\t vm.changeView = function(view, newDay) {\n\t $scope.view = view;\n\t $scope.currentDay = newDay;\n\t };\n\t\n\t vm.drillDown = function(date) {\n\t\n\t var rawDate = moment(date).toDate();\n\t\n\t var nextView = {\n\t year: 'month',\n\t month: 'day',\n\t week: 'day'\n\t };\n\t\n\t if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n\t vm.changeView(nextView[$scope.view], rawDate);\n\t }\n\t\n\t };\n\t\n\t var previousDate = moment($scope.currentDay);\n\t var previousView = angular.copy($scope.view);\n\t\n\t //Use a debounce to prevent it being called 3 times on initialisation\n\t var refreshCalendar = calendarDebounce(function() {\n\t if (calendarTitle[$scope.view]) {\n\t $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n\t }\n\t\n\t $scope.events = $scope.events.map(function(event, index) {\n\t Object.defineProperty(event, '$id', {enumerable: false, value: index});\n\t return event;\n\t });\n\t\n\t //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n\t var currentDate = moment($scope.currentDay);\n\t var shouldUpdate = true;\n\t if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n\t $scope.view === previousView) {\n\t shouldUpdate = false;\n\t }\n\t previousDate = currentDate;\n\t previousView = angular.copy($scope.view);\n\t\n\t if (shouldUpdate) {\n\t $scope.$broadcast('calendar.refreshView');\n\t }\n\t }, 50);\n\t\n\t //Auto update the calendar when the locale changes\n\t var unbindLocaleWatcher = $scope.$watch(function() {\n\t return moment.locale() + $locale.id;\n\t }, refreshCalendar);\n\t\n\t var unbindOnDestroy = [];\n\t unbindOnDestroy.push(unbindLocaleWatcher);\n\t\n\t //Refresh the calendar when any of these variables change.\n\t /* eslint-disable angular/ng_on_watch */\n\t unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n\t /* eslint-enable angular/ng_on_watch */\n\t\n\t //Remove any watchers when the calendar is destroyed\n\t var unbindDestroyListener = $scope.$on('$destroy', function() {\n\t unbindOnDestroy.forEach(function(unbind) {\n\t unbind();\n\t });\n\t });\n\t unbindOnDestroy.push(unbindDestroyListener);\n\t\n\t }])\n\t .directive('mwlCalendar', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendar.html',\n\t restrict: 'EA',\n\t scope: {\n\t events: '=',\n\t view: '=',\n\t viewTitle: '=',\n\t currentDay: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onEventClick: '&',\n\t onEventTimesChanged: '&',\n\t onEditEventClick: '&',\n\t onDeleteEventClick: '&',\n\t onTimespanClick: '&',\n\t onDrillDownClick: '&',\n\t cellModifier: '&',\n\t dayViewStart: '@',\n\t dayViewEnd: '@',\n\t dayViewSplit: '@'\n\t },\n\t controller: 'MwlCalendarCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarDayCtrl', [\"$scope\", \"$timeout\", \"$sce\", \"moment\", \"calendarHelper\", \"calendarConfig\", function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.calendarConfig = calendarConfig;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t vm.view = calendarHelper.getDayView(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.eventDragComplete = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n\t var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.eventDragged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(minutesDiff, 'minutes');\n\t } else {\n\t end.add(minutesDiff, 'minutes');\n\t }\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t };\n\t\n\t vm.eventResized = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t if (edge === 'start') {\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t }\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarDay', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarDayView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarDayCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarHourListCtrl', [\"$scope\", \"moment\", \"calendarConfig\", \"calendarHelper\", function($scope, moment, calendarConfig, calendarHelper) {\n\t var vm = this;\n\t var dayViewStart, dayViewEnd;\n\t\n\t function updateDays() {\n\t dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n\t dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n\t vm.dayViewSplit = parseInt($scope.dayViewSplit);\n\t vm.hours = [];\n\t var dayCounter = moment(dayViewStart);\n\t for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n\t vm.hours.push({\n\t label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n\t });\n\t dayCounter.add(1, 'hour');\n\t }\n\t }\n\t\n\t var originalLocale = moment.locale();\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t if (originalLocale !== moment.locale()) {\n\t originalLocale = moment.locale();\n\t updateDays();\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t updateDays();\n\t\n\t }])\n\t .directive('mwlCalendarHourList', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarHourList.html',\n\t controller: 'MwlCalendarHourListCtrl as vm',\n\t scope: {\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarMonthCtrl', [\"$scope\", \"moment\", \"calendarHelper\", function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t vm.weekDays = calendarHelper.getWeekDayNames();\n\t\n\t vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t var rows = Math.floor(vm.view.length / 7);\n\t vm.monthOffsets = [];\n\t for (var i = 0; i < rows; i++) {\n\t vm.monthOffsets.push(i * 7);\n\t }\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(day) {\n\t if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n\t vm.dayClicked(day, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.dayClicked = function(day, dayClickedFirstRun) {\n\t\n\t if (!dayClickedFirstRun) {\n\t $scope.onTimespanClick({\n\t calendarDate: day.date.toDate()\n\t });\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var dayIndex = vm.view.indexOf(day);\n\t if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n\t vm.openDayIndex = null; //close the open day\n\t } else {\n\t vm.openDayIndex = dayIndex;\n\t vm.openRowIndex = Math.floor(dayIndex / 7);\n\t }\n\t\n\t };\n\t\n\t vm.highlightEvent = function(event, shouldAddClass) {\n\t\n\t vm.view.forEach(function(day) {\n\t delete day.highlightClass;\n\t if (shouldAddClass) {\n\t var dayContainsEvent = day.events.indexOf(event) > -1;\n\t if (dayContainsEvent) {\n\t day.highlightClass = 'day-highlight dh-event-' + event.type;\n\t }\n\t }\n\t });\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newDayDate) {\n\t\n\t var newStart = moment(event.startsAt)\n\t .date(moment(newDayDate).date())\n\t .month(moment(newDayDate).month());\n\t\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newDayDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarMonth', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarMonthView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t onEventTimesChanged: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarMonthCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarSlideBoxCtrl', [\"$scope\", \"$sce\", function($scope, $sce) {\n\t\n\t var vm = this;\n\t vm.$sce = $sce;\n\t\n\t var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n\t vm.shouldCollapse = !isOpen;\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t }])\n\t .directive('mwlCalendarSlideBox', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarSlideBox.html',\n\t replace: true,\n\t controller: 'MwlCalendarSlideBoxCtrl as vm',\n\t require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n\t link: function(scope, elm, attrs, ctrls) {\n\t scope.isMonthView = !!ctrls[0];\n\t scope.isYearView = !!ctrls[1];\n\t },\n\t scope: {\n\t isOpen: '=',\n\t events: '=',\n\t onEventClick: '=',\n\t editEventHtml: '=',\n\t onEditEventClick: '=',\n\t deleteEventHtml: '=',\n\t onDeleteEventClick: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarWeekCtrl', [\"$scope\", \"$sce\", \"moment\", \"calendarHelper\", \"calendarConfig\", function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.showTimes = calendarConfig.showTimesOnWeekView;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t if (vm.showTimes) {\n\t vm.view = calendarHelper.getWeekViewWithTimes(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t } else {\n\t vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n\t }\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\t\n\t var newStart = moment(event.startsAt).add(daysDiff, 'days');\n\t var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\t\n\t if (minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t newStart = newStart.add(minutesDiff, 'minutes');\n\t newEnd = newEnd.add(minutesDiff, 'minutes');\n\t }\n\t\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.weekResized = function(event, edge, daysDiff) {\n\t\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(daysDiff, 'days');\n\t } else {\n\t end.add(daysDiff, 'days');\n\t }\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t\n\t };\n\t\n\t vm.tempTimeChanged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarWeek', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarWeekView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarWeekCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarYearCtrl', [\"$scope\", \"moment\", \"calendarHelper\", function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(month) {\n\t if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n\t vm.monthClicked(month, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.monthClicked = function(month, monthClickedFirstRun) {\n\t\n\t if (!monthClickedFirstRun) {\n\t $scope.onTimespanClick({calendarDate: month.date.toDate()});\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var monthIndex = vm.view.indexOf(month);\n\t if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n\t vm.openMonthIndex = null; //close the open month\n\t } else {\n\t vm.openMonthIndex = monthIndex;\n\t vm.openRowIndex = Math.floor(monthIndex / 4);\n\t }\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newMonthDate) {\n\t var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newMonthDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarYear', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarYearView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarYearCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCollapseFallbackCtrl', [\"$scope\", \"$attrs\", \"$element\", function($scope, $attrs, $element) {\n\t var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n\t if (shouldCollapse) {\n\t $element.addClass('ng-hide');\n\t } else {\n\t $element.removeClass('ng-hide');\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t }])\n\t .directive('mwlCollapseFallback', [\"$injector\", function($injector) {\n\t\n\t if ($injector.has('collapseDirective')) {\n\t return {};\n\t }\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlCollapseFallbackCtrl'\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDateModifierCtrl', [\"$element\", \"$attrs\", \"$scope\", \"moment\", function($element, $attrs, $scope, moment) {\n\t\n\t function onClick() {\n\t if (angular.isDefined($attrs.setToToday)) {\n\t $scope.date = new Date();\n\t } else if (angular.isDefined($attrs.increment)) {\n\t $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n\t } else if (angular.isDefined($attrs.decrement)) {\n\t $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n\t }\n\t $scope.$apply();\n\t }\n\t\n\t $element.bind('click', onClick);\n\t\n\t $scope.$on('$destroy', function() {\n\t $element.unbind('click', onClick);\n\t });\n\t\n\t }])\n\t .directive('mwlDateModifier', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDateModifierCtrl',\n\t scope: {\n\t date: '=',\n\t increment: '=',\n\t decrement: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDraggableCtrl', [\"$element\", \"$scope\", \"$window\", \"$parse\", \"$attrs\", \"$timeout\", \"interact\", function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t function translateElement(elm, transformValue) {\n\t return elm\n\t .css('transform', transformValue)\n\t .css('-ms-transform', transformValue)\n\t .css('-webkit-transform', transformValue);\n\t }\n\t\n\t function canDrag() {\n\t return $parse($attrs.mwlDraggable)($scope);\n\t }\n\t\n\t function getUnitsMoved(x, y, gridDimensions) {\n\t\n\t var result = {x: x, y: y};\n\t\n\t if (gridDimensions && gridDimensions.x) {\n\t result.x /= gridDimensions.x;\n\t }\n\t\n\t if (gridDimensions && gridDimensions.y) {\n\t result.y /= gridDimensions.y;\n\t }\n\t\n\t return result;\n\t\n\t }\n\t\n\t interact($element[0]).draggable({\n\t snap: snap,\n\t onstart: function(event) {\n\t if (canDrag()) {\n\t angular.element(event.target).addClass('dragging-active');\n\t event.target.dropData = $parse($attrs.dropData)($scope);\n\t event.target.style.pointerEvents = 'none';\n\t if ($attrs.onDragStart) {\n\t $parse($attrs.onDragStart)($scope);\n\t $scope.$apply();\n\t }\n\t }\n\t },\n\t onmove: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n\t var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\t\n\t switch ($parse($attrs.axis)($scope)) {\n\t case 'x':\n\t y = 0;\n\t break;\n\t\n\t case 'y':\n\t x = 0;\n\t break;\n\t\n\t default:\n\t }\n\t\n\t if ($window.getComputedStyle(elm[0]).position === 'static') {\n\t elm.css('position', 'relative');\n\t }\n\t\n\t translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n\t .css('z-index', 1000)\n\t .attr('data-x', x)\n\t .attr('data-y', y);\n\t\n\t if ($attrs.onDrag) {\n\t $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = elm.attr('data-x');\n\t var y = elm.attr('data-y');\n\t\n\t event.target.style.pointerEvents = 'auto';\n\t if ($attrs.onDragEnd) {\n\t $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t $timeout(function() {\n\t translateElement(elm, null)\n\t .removeAttr('data-x')\n\t .removeAttr('data-y')\n\t .removeClass('dragging-active');\n\t }, 50);\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlDraggable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDraggableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDroppableCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", \"interact\", function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t interact($element[0]).dropzone({\n\t ondragenter: function(event) {\n\t angular.element(event.target).addClass('drop-active');\n\t },\n\t ondragleave: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondropdeactivate: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondrop: function(event) {\n\t if (event.relatedTarget.dropData) {\n\t $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n\t $scope.$apply();\n\t }\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlDroppable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDroppableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlElementDimensionsCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", function($element, $scope, $parse, $attrs) {\n\t\n\t $parse($attrs.mwlElementDimensions).assign($scope, {\n\t width: $element[0].offsetWidth,\n\t height: $element[0].offsetHeight\n\t });\n\t\n\t }])\n\t .directive('mwlElementDimensions', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlElementDimensionsCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlResizableCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", \"interact\", function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t var originalDimensions = {};\n\t var originalDimensionsStyle = {};\n\t var resizeEdge;\n\t\n\t function canResize() {\n\t return $parse($attrs.mwlResizable)($scope);\n\t }\n\t\n\t function getUnitsResized(edge, elm, gridDimensions) {\n\t var unitsResized = {};\n\t unitsResized.edge = edge;\n\t if (edge === 'start') {\n\t unitsResized.x = elm.data('x');\n\t unitsResized.y = elm.data('y');\n\t } else if (edge === 'end') {\n\t unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n\t unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n\t }\n\t if (gridDimensions && gridDimensions.x) {\n\t unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n\t }\n\t if (gridDimensions && gridDimensions.y) {\n\t unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n\t }\n\t return unitsResized;\n\t }\n\t\n\t interact($element[0]).resizable({\n\t edges: $parse($attrs.resizeEdges)($scope),\n\t snap: snap,\n\t onstart: function(event) {\n\t\n\t if (canResize()) {\n\t resizeEdge = 'end';\n\t var elm = angular.element(event.target);\n\t originalDimensions.height = elm[0].offsetHeight;\n\t originalDimensions.width = elm[0].offsetWidth;\n\t originalDimensionsStyle.height = elm.css('height');\n\t originalDimensionsStyle.width = elm.css('width');\n\t }\n\t\n\t },\n\t onmove: function(event) {\n\t\n\t if (canResize()) {\n\t var elm = angular.element(event.target);\n\t var x = parseFloat(elm.data('x') || 0);\n\t var y = parseFloat(elm.data('y') || 0);\n\t\n\t elm.css({\n\t width: event.rect.width + 'px',\n\t height: event.rect.height + 'px'\n\t });\n\t\n\t // translate when resizing from top or left edges\n\t x += event.deltaRect.left;\n\t y += event.deltaRect.top;\n\t\n\t elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\t\n\t elm.data('x', x);\n\t elm.data('y', y);\n\t\n\t if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n\t resizeEdge = 'start';\n\t }\n\t\n\t if ($attrs.onResize) {\n\t $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canResize()) {\n\t\n\t var elm = angular.element(event.target);\n\t var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\t\n\t elm\n\t .data('x', null)\n\t .data('y', null)\n\t .css({\n\t transform: null,\n\t width: originalDimensionsStyle.width,\n\t height: originalDimensionsStyle.height\n\t });\n\t\n\t if ($attrs.onResizeEnd) {\n\t $parse($attrs.onResizeEnd)($scope, unitsResized);\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlResizable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlResizableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarDate.js\": 18,\n\t\t\"./calendarLimitTo.js\": 19,\n\t\t\"./calendarTruncateEventTitle.js\": 20\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 17;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarDate', [\"calendarHelper\", \"calendarConfig\", function(calendarHelper, calendarConfig) {\n\t\n\t function calendarDate(date, format, getFromConfig) {\n\t\n\t if (getFromConfig === true) {\n\t format = calendarConfig.dateFormats[format];\n\t }\n\t\n\t return calendarHelper.formatDate(date, format);\n\t\n\t }\n\t\n\t calendarDate.$stateful = true;\n\t\n\t return calendarDate;\n\t\n\t }]);\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarLimitTo', [\"limitToFilter\", function(limitToFilter) {\n\t\n\t if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n\t return limitToFilter;\n\t }\n\t\n\t //Copied from the angular source. Only 1.4 has the begin functionality.\n\t return function(input, limit, begin) {\n\t if (Math.abs(Number(limit)) === Infinity) {\n\t limit = Number(limit);\n\t } else {\n\t limit = parseInt(limit);\n\t }\n\t if (isNaN(limit)) {\n\t return input;\n\t }\n\t\n\t if (angular.isNumber(input)) {\n\t input = input.toString();\n\t }\n\t if (!angular.isArray(input) && !angular.isString(input)) {\n\t return input;\n\t }\n\t\n\t begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n\t begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\t\n\t if (limit >= 0) {\n\t return input.slice(begin, begin + limit);\n\t } else if (begin === 0) {\n\t return input.slice(limit, input.length);\n\t } else {\n\t return input.slice(Math.max(0, begin + limit), begin);\n\t }\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarTruncateEventTitle', function() {\n\t\n\t return function(string, length, boxHeight) {\n\t if (!string) {\n\t return '';\n\t }\n\t\n\t //Only truncate if if actually needs truncating\n\t if (string.length >= length && string.length / 20 > boxHeight / 30) {\n\t return string.substr(0, length) + '...';\n\t } else {\n\t return string;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarConfig.js\": 22,\n\t\t\"./calendarDebounce.js\": 23,\n\t\t\"./calendarHelper.js\": 24,\n\t\t\"./calendarTitle.js\": 25,\n\t\t\"./interact.js\": 26,\n\t\t\"./moment.js\": 28\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 21;\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .provider('calendarConfig', function() {\n\t\n\t var defaultFormats = {\n\t angular: {\n\t date: {\n\t hour: 'ha',\n\t day: 'd MMM',\n\t month: 'MMMM',\n\t weekDay: 'EEEE',\n\t time: 'HH:mm',\n\t datetime: 'MMM d, h:mm a'\n\t },\n\t title: {\n\t day: 'EEEE d MMMM, yyyy',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM yyyy',\n\t year: 'yyyy'\n\t }\n\t },\n\t moment: {\n\t date: {\n\t hour: 'ha',\n\t day: 'D MMM',\n\t month: 'MMMM',\n\t weekDay: 'dddd',\n\t time: 'HH:mm',\n\t datetime: 'MMM D, h:mm a'\n\t },\n\t title: {\n\t day: 'dddd D MMMM, YYYY',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM YYYY',\n\t year: 'YYYY'\n\t }\n\t }\n\t };\n\t\n\t var dateFormatter = 'angular';\n\t var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t var showTimesOnWeekView = false;\n\t\n\t var i18nStrings = {\n\t eventsLabel: 'Events',\n\t timeLabel: 'Time'\n\t };\n\t\n\t var displayAllMonthEvents = false;\n\t\n\t var configProvider = this;\n\t\n\t configProvider.setDateFormats = function(formats) {\n\t angular.extend(defaultDateFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setTitleFormats = function(formats) {\n\t angular.extend(defaultTitleFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setI18nStrings = function(strings) {\n\t angular.extend(i18nStrings, strings);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDisplayAllMonthEvents = function(value) {\n\t displayAllMonthEvents = value;\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDateFormatter = function(value) {\n\t if (['angular', 'moment'].indexOf(value) === -1) {\n\t throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n\t }\n\t dateFormatter = value;\n\t defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t return configProvider;\n\t };\n\t\n\t configProvider.showTimesOnWeekView = function(value) {\n\t showTimesOnWeekView = value; //experimental, and ignores the event end date\n\t return configProvider;\n\t };\n\t\n\t configProvider.$get = function() {\n\t return {\n\t dateFormats: defaultDateFormats,\n\t titleFormats: defaultTitleFormats,\n\t i18nStrings: i18nStrings,\n\t displayAllMonthEvents: displayAllMonthEvents,\n\t dateFormatter: dateFormatter,\n\t showTimesOnWeekView: showTimesOnWeekView\n\t };\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .service('calendarDebounce', [\"$timeout\", function($timeout) {\n\t\n\t function debounce(func, wait, immediate) {\n\t var timeout;\n\t return function() {\n\t var context = this, args = arguments;\n\t function later() {\n\t timeout = null;\n\t if (!immediate) {\n\t func.apply(context, args);\n\t }\n\t }\n\t var callNow = immediate && !timeout;\n\t $timeout.cancel(timeout);\n\t timeout = $timeout(later, wait);\n\t if (callNow) {\n\t func.apply(context, args);\n\t }\n\t };\n\t }\n\t\n\t return debounce;\n\t\n\t }]);\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarHelper', [\"dateFilter\", \"moment\", \"calendarConfig\", function(dateFilter, moment, calendarConfig) {\n\t\n\t function formatDate(date, format) {\n\t if (calendarConfig.dateFormatter === 'angular') {\n\t return dateFilter(moment(date).toDate(), format);\n\t } else if (calendarConfig.dateFormatter === 'moment') {\n\t return moment(date).format(format);\n\t }\n\t }\n\t\n\t function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n\t if (!oldEnd) {\n\t return oldEnd;\n\t }\n\t var diffInSeconds = moment(newStart).diff(moment(oldStart));\n\t return moment(oldEnd).add(diffInSeconds);\n\t }\n\t\n\t function eventIsInPeriod(event, periodStart, periodEnd) {\n\t\n\t var eventStart = moment(event.startsAt);\n\t var eventEnd = moment(event.endsAt || event.startsAt);\n\t periodStart = moment(periodStart);\n\t periodEnd = moment(periodEnd);\n\t\n\t if (angular.isDefined(event.recursOn)) {\n\t\n\t switch (event.recursOn) {\n\t case 'year':\n\t eventStart.set({\n\t year: periodStart.year()\n\t });\n\t break;\n\t\n\t case 'month':\n\t eventStart.set({\n\t year: periodStart.year(),\n\t month: periodStart.month()\n\t });\n\t break;\n\t\n\t default:\n\t throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n\t }\n\t\n\t eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\t\n\t }\n\t\n\t return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n\t (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n\t (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n\t eventStart.isSame(periodStart) ||\n\t eventEnd.isSame(periodEnd);\n\t\n\t }\n\t\n\t function filterEventsInPeriod(events, startPeriod, endPeriod) {\n\t return events.filter(function(event) {\n\t return eventIsInPeriod(event, startPeriod, endPeriod);\n\t });\n\t }\n\t\n\t function getEventsInPeriod(calendarDate, period, allEvents) {\n\t var startPeriod = moment(calendarDate).startOf(period);\n\t var endPeriod = moment(calendarDate).endOf(period);\n\t return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n\t }\n\t\n\t function getBadgeTotal(events) {\n\t return events.filter(function(event) {\n\t return event.incrementsBadgeTotal !== false;\n\t }).length;\n\t }\n\t\n\t function getWeekDayNames() {\n\t var weekdays = [];\n\t var count = 0;\n\t while (count < 7) {\n\t weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n\t }\n\t return weekdays;\n\t }\n\t\n\t function getYearView(events, currentDay, cellModifier) {\n\t\n\t var view = [];\n\t var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n\t var month = moment(currentDay).startOf('year');\n\t var count = 0;\n\t while (count < 12) {\n\t var startPeriod = month.clone();\n\t var endPeriod = startPeriod.clone().endOf('month');\n\t var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n\t var cell = {\n\t label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n\t isToday: startPeriod.isSame(moment().startOf('month')),\n\t events: periodEvents,\n\t date: startPeriod,\n\t badgeTotal: getBadgeTotal(periodEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t view.push(cell);\n\t month.add(1, 'month');\n\t count++;\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getMonthView(events, currentDay, cellModifier) {\n\t\n\t var startOfMonth = moment(currentDay).startOf('month');\n\t var day = startOfMonth.clone().startOf('week');\n\t var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n\t var eventsInPeriod;\n\t if (calendarConfig.displayAllMonthEvents) {\n\t eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n\t } else {\n\t eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n\t }\n\t var view = [];\n\t var today = moment().startOf('day');\n\t\n\t while (day.isBefore(endOfMonthView)) {\n\t\n\t var inMonth = day.month() === moment(currentDay).month();\n\t var monthEvents = [];\n\t if (inMonth || calendarConfig.displayAllMonthEvents) {\n\t monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n\t }\n\t\n\t var cell = {\n\t label: day.date(),\n\t date: day.clone(),\n\t inMonth: inMonth,\n\t isPast: today.isAfter(day),\n\t isToday: today.isSame(day),\n\t isFuture: today.isBefore(day),\n\t isWeekend: [0, 6].indexOf(day.day()) > -1,\n\t events: monthEvents,\n\t badgeTotal: getBadgeTotal(monthEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t\n\t view.push(cell);\n\t\n\t day.add(1, 'day');\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getWeekView(events, currentDay) {\n\t\n\t var startOfWeek = moment(currentDay).startOf('week');\n\t var endOfWeek = moment(currentDay).endOf('week');\n\t var dayCounter = startOfWeek.clone();\n\t var days = [];\n\t var today = moment().startOf('day');\n\t while (days.length < 7) {\n\t days.push({\n\t weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n\t date: dayCounter.clone(),\n\t dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n\t isPast: dayCounter.isBefore(today),\n\t isToday: dayCounter.isSame(today),\n\t isFuture: dayCounter.isAfter(today),\n\t isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n\t });\n\t dayCounter.add(1, 'day');\n\t }\n\t\n\t var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\t\n\t var eventStart = moment(event.startsAt).startOf('day');\n\t var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n\t var weekViewStart = moment(startOfWeek).startOf('day');\n\t var weekViewEnd = moment(endOfWeek).startOf('day');\n\t var offset, span;\n\t\n\t if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n\t offset = 0;\n\t } else {\n\t offset = eventStart.diff(weekViewStart, 'days');\n\t }\n\t\n\t if (eventEnd.isAfter(weekViewEnd)) {\n\t eventEnd = weekViewEnd;\n\t }\n\t\n\t if (eventStart.isBefore(weekViewStart)) {\n\t eventStart = weekViewStart;\n\t }\n\t\n\t span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\t\n\t event.daySpan = span;\n\t event.dayOffset = offset;\n\t\n\t return event;\n\t });\n\t\n\t return {days: days, events: eventsSorted};\n\t\n\t }\n\t\n\t function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t\n\t var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n\t var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n\t var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n\t var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n\t var hourHeightMultiplier = hourHeight / 60;\n\t var buckets = [];\n\t var eventsInPeriod = filterEventsInPeriod(\n\t events,\n\t moment(currentDay).startOf('day').toDate(),\n\t moment(currentDay).endOf('day').toDate()\n\t );\n\t\n\t return eventsInPeriod.map(function(event) {\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t event.top = 0;\n\t } else {\n\t event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n\t }\n\t\n\t if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n\t event.height = calendarHeight - event.top;\n\t } else {\n\t var diffStart = event.startsAt;\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t diffStart = calendarStart.toDate();\n\t }\n\t if (!event.endsAt) {\n\t event.height = 30;\n\t } else {\n\t event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n\t }\n\t }\n\t\n\t if (event.top - event.height > calendarHeight) {\n\t event.height = 0;\n\t }\n\t\n\t event.left = 0;\n\t\n\t return event;\n\t }).filter(function(event) {\n\t return event.height > 0;\n\t }).map(function(event) {\n\t\n\t var cannotFitInABucket = true;\n\t buckets.forEach(function(bucket, bucketIndex) {\n\t var canFitInThisBucket = true;\n\t\n\t bucket.forEach(function(bucketItem) {\n\t if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n\t eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n\t canFitInThisBucket = false;\n\t }\n\t });\n\t\n\t if (canFitInThisBucket && cannotFitInABucket) {\n\t cannotFitInABucket = false;\n\t event.left = bucketIndex * 150;\n\t buckets[bucketIndex].push(event);\n\t }\n\t\n\t });\n\t\n\t if (cannotFitInABucket) {\n\t event.left = buckets.length * 150;\n\t buckets.push([event]);\n\t }\n\t\n\t return event;\n\t\n\t });\n\t\n\t }\n\t\n\t function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t var weekView = getWeekView(events, currentDay);\n\t var newEvents = [];\n\t weekView.days.forEach(function(day) {\n\t var dayEvents = weekView.events.filter(function(event) {\n\t return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n\t });\n\t var newDayEvents = getDayView(\n\t dayEvents,\n\t day.date,\n\t dayViewStart,\n\t dayViewEnd,\n\t dayViewSplit\n\t );\n\t newEvents = newEvents.concat(newDayEvents);\n\t });\n\t weekView.events = newEvents;\n\t return weekView;\n\t }\n\t\n\t function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n\t var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n\t var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n\t }\n\t\n\t return {\n\t getWeekDayNames: getWeekDayNames,\n\t getYearView: getYearView,\n\t getMonthView: getMonthView,\n\t getWeekView: getWeekView,\n\t getDayView: getDayView,\n\t getWeekViewWithTimes: getWeekViewWithTimes,\n\t getDayViewHeight: getDayViewHeight,\n\t adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n\t formatDate: formatDate,\n\t eventIsInPeriod: eventIsInPeriod //expose for testing only\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarTitle', [\"moment\", \"calendarConfig\", \"calendarHelper\", function(moment, calendarConfig, calendarHelper) {\n\t\n\t function day(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n\t }\n\t\n\t function week(currentDay) {\n\t var weekTitleLabel = calendarConfig.titleFormats.week;\n\t return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n\t }\n\t\n\t function month(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n\t }\n\t\n\t function year(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n\t }\n\t\n\t return {\n\t day: day,\n\t week: week,\n\t month: month,\n\t year: year\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar interact;\n\ttry {\n\t interact = __webpack_require__(27);\n\t} catch (e) {\n\t interact = null;\n\t}\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('interact', interact);\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\tif(typeof interact === 'undefined') {var e = new Error(\"Cannot find module \\\"interact\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\n\tmodule.exports = interact;\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar moment = __webpack_require__(29);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('moment', moment);\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\tmodule.exports = moment;\n\n/***/ }\n/******/ ]);\n\nangular.module(\"mwl.calendar\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"src/templates/calendar.html\",\"
The value passed to the view attribute of the calendar is not set
The value passed to current-day attribute of the calendar is not set
\");\n$templateCache.put(\"src/templates/calendarDayView.html\",\"
,
\");\n$templateCache.put(\"src/templates/calendarHourList.html\",\"
\");\n$templateCache.put(\"src/templates/calendarMonthDay.html\",\"
0\\\" ng-bind=\\\"day.badgeTotal\\\">
0\\\">
\");\n$templateCache.put(\"src/templates/calendarMonthEventsList.html\",\"
0\\\">
\");\n$templateCache.put(\"src/templates/calendarMonthView.html\",\"
0}\\\">
0\\\" events=\\\"vm.view[vm.openDayIndex].events\\\" on-event-click=\\\"onEventClick\\\" edit-event-html=\\\"editEventHtml\\\" on-edit-event-click=\\\"onEditEventClick\\\" delete-event-html=\\\"deleteEventHtml\\\" on-delete-event-click=\\\"onDeleteEventClick\\\">
\");\n$templateCache.put(\"src/templates/calendarSlideBox.html\",\"
\");\n$templateCache.put(\"src/templates/calendarWeekView.html\",\"

\");\n$templateCache.put(\"src/templates/calendarYearView.html\",\"
0, \\'cal-day-today\\': month.isToday}\\\" mwl-droppable on-drop=\\\"vm.handleEventDrop(dropData.event, month.date)\\\"> 0\\\" ng-bind=\\\"month.badgeTotal\\\">
0\\\">
0\\\" events=\\\"vm.view[vm.openMonthIndex].events\\\" on-event-click=\\\"onEventClick\\\" edit-event-html=\\\"editEventHtml\\\" on-edit-event-click=\\\"onEditEventClick\\\" delete-event-html=\\\"deleteEventHtml\\\" on-delete-event-click=\\\"onDeleteEventClick\\\">
\");}]);"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap f9365143e6b9940e60b4\n **/","/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tfunction requireAll(r) {\n\t r.keys().forEach(r);\n\t}\n\t\n\tmodule.exports = __webpack_require__(1);\n\t\n\trequireAll(__webpack_require__(3));\n\trequireAll(__webpack_require__(17));\n\trequireAll(__webpack_require__(21));\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar MODULE_NAME = 'mwl.calendar';\n\t\n\tangular.module(MODULE_NAME, []);\n\t\n\tmodule.exports = MODULE_NAME;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = angular;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./mwlCalendar.js\": 4,\n\t\t\"./mwlCalendarDay.js\": 5,\n\t\t\"./mwlCalendarHourList.js\": 6,\n\t\t\"./mwlCalendarMonth.js\": 7,\n\t\t\"./mwlCalendarSlideBox.js\": 8,\n\t\t\"./mwlCalendarWeek.js\": 9,\n\t\t\"./mwlCalendarYear.js\": 10,\n\t\t\"./mwlCollapseFallback.js\": 11,\n\t\t\"./mwlDateModifier.js\": 12,\n\t\t\"./mwlDraggable.js\": 13,\n\t\t\"./mwlDroppable.js\": 14,\n\t\t\"./mwlElementDimensions.js\": 15,\n\t\t\"./mwlResizable.js\": 16\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 3;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarCtrl', function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\t\n\t var vm = this;\n\t\n\t $scope.events = $scope.events || [];\n\t\n\t vm.changeView = function(view, newDay) {\n\t $scope.view = view;\n\t $scope.currentDay = newDay;\n\t };\n\t\n\t vm.drillDown = function(date) {\n\t\n\t var rawDate = moment(date).toDate();\n\t\n\t var nextView = {\n\t year: 'month',\n\t month: 'day',\n\t week: 'day'\n\t };\n\t\n\t if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n\t vm.changeView(nextView[$scope.view], rawDate);\n\t }\n\t\n\t };\n\t\n\t var previousDate = moment($scope.currentDay);\n\t var previousView = angular.copy($scope.view);\n\t\n\t //Use a debounce to prevent it being called 3 times on initialisation\n\t var refreshCalendar = calendarDebounce(function() {\n\t if (calendarTitle[$scope.view]) {\n\t $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n\t }\n\t\n\t $scope.events = $scope.events.map(function(event, index) {\n\t Object.defineProperty(event, '$id', {enumerable: false, value: index});\n\t return event;\n\t });\n\t\n\t //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n\t var currentDate = moment($scope.currentDay);\n\t var shouldUpdate = true;\n\t if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n\t $scope.view === previousView) {\n\t shouldUpdate = false;\n\t }\n\t previousDate = currentDate;\n\t previousView = angular.copy($scope.view);\n\t\n\t if (shouldUpdate) {\n\t $scope.$broadcast('calendar.refreshView');\n\t }\n\t }, 50);\n\t\n\t //Auto update the calendar when the locale changes\n\t var unbindLocaleWatcher = $scope.$watch(function() {\n\t return moment.locale() + $locale.id;\n\t }, refreshCalendar);\n\t\n\t var unbindOnDestroy = [];\n\t unbindOnDestroy.push(unbindLocaleWatcher);\n\t\n\t //Refresh the calendar when any of these variables change.\n\t /* eslint-disable angular/ng_on_watch */\n\t unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n\t /* eslint-enable angular/ng_on_watch */\n\t\n\t //Remove any watchers when the calendar is destroyed\n\t var unbindDestroyListener = $scope.$on('$destroy', function() {\n\t unbindOnDestroy.forEach(function(unbind) {\n\t unbind();\n\t });\n\t });\n\t unbindOnDestroy.push(unbindDestroyListener);\n\t\n\t })\n\t .directive('mwlCalendar', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendar.html',\n\t restrict: 'EA',\n\t scope: {\n\t events: '=',\n\t view: '=',\n\t viewTitle: '=',\n\t currentDay: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onEventClick: '&',\n\t onEventTimesChanged: '&',\n\t onEditEventClick: '&',\n\t onDeleteEventClick: '&',\n\t onTimespanClick: '&',\n\t onDrillDownClick: '&',\n\t cellModifier: '&',\n\t dayViewStart: '@',\n\t dayViewEnd: '@',\n\t dayViewSplit: '@'\n\t },\n\t controller: 'MwlCalendarCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarDayCtrl', function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.calendarConfig = calendarConfig;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t vm.view = calendarHelper.getDayView(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.eventDragComplete = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n\t var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.eventDragged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(minutesDiff, 'minutes');\n\t } else {\n\t end.add(minutesDiff, 'minutes');\n\t }\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t };\n\t\n\t vm.eventResized = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t if (edge === 'start') {\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t }\n\t };\n\t\n\t })\n\t .directive('mwlCalendarDay', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarDayView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarDayCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarHourListCtrl', function($scope, moment, calendarConfig, calendarHelper) {\n\t var vm = this;\n\t var dayViewStart, dayViewEnd;\n\t\n\t function updateDays() {\n\t dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n\t dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n\t vm.dayViewSplit = parseInt($scope.dayViewSplit);\n\t vm.hours = [];\n\t var dayCounter = moment(dayViewStart);\n\t for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n\t vm.hours.push({\n\t label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n\t });\n\t dayCounter.add(1, 'hour');\n\t }\n\t }\n\t\n\t var originalLocale = moment.locale();\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t if (originalLocale !== moment.locale()) {\n\t originalLocale = moment.locale();\n\t updateDays();\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t updateDays();\n\t\n\t })\n\t .directive('mwlCalendarHourList', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarHourList.html',\n\t controller: 'MwlCalendarHourListCtrl as vm',\n\t scope: {\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarMonthCtrl', function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t vm.weekDays = calendarHelper.getWeekDayNames();\n\t\n\t vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t var rows = Math.floor(vm.view.length / 7);\n\t vm.monthOffsets = [];\n\t for (var i = 0; i < rows; i++) {\n\t vm.monthOffsets.push(i * 7);\n\t }\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(day) {\n\t if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n\t vm.dayClicked(day, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.dayClicked = function(day, dayClickedFirstRun) {\n\t\n\t if (!dayClickedFirstRun) {\n\t $scope.onTimespanClick({\n\t calendarDate: day.date.toDate()\n\t });\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var dayIndex = vm.view.indexOf(day);\n\t if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n\t vm.openDayIndex = null; //close the open day\n\t } else {\n\t vm.openDayIndex = dayIndex;\n\t vm.openRowIndex = Math.floor(dayIndex / 7);\n\t }\n\t\n\t };\n\t\n\t vm.highlightEvent = function(event, shouldAddClass) {\n\t\n\t vm.view.forEach(function(day) {\n\t delete day.highlightClass;\n\t if (shouldAddClass) {\n\t var dayContainsEvent = day.events.indexOf(event) > -1;\n\t if (dayContainsEvent) {\n\t day.highlightClass = 'day-highlight dh-event-' + event.type;\n\t }\n\t }\n\t });\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newDayDate) {\n\t\n\t var newStart = moment(event.startsAt)\n\t .date(moment(newDayDate).date())\n\t .month(moment(newDayDate).month());\n\t\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newDayDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t })\n\t .directive('mwlCalendarMonth', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarMonthView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t onEventTimesChanged: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarMonthCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarSlideBoxCtrl', function($scope, $sce) {\n\t\n\t var vm = this;\n\t vm.$sce = $sce;\n\t\n\t var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n\t vm.shouldCollapse = !isOpen;\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t })\n\t .directive('mwlCalendarSlideBox', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarSlideBox.html',\n\t replace: true,\n\t controller: 'MwlCalendarSlideBoxCtrl as vm',\n\t require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n\t link: function(scope, elm, attrs, ctrls) {\n\t scope.isMonthView = !!ctrls[0];\n\t scope.isYearView = !!ctrls[1];\n\t },\n\t scope: {\n\t isOpen: '=',\n\t events: '=',\n\t onEventClick: '=',\n\t editEventHtml: '=',\n\t onEditEventClick: '=',\n\t deleteEventHtml: '=',\n\t onDeleteEventClick: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarWeekCtrl', function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.showTimes = calendarConfig.showTimesOnWeekView;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t if (vm.showTimes) {\n\t vm.view = calendarHelper.getWeekViewWithTimes(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t } else {\n\t vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n\t }\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\t\n\t var newStart = moment(event.startsAt).add(daysDiff, 'days');\n\t var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\t\n\t if (minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t newStart = newStart.add(minutesDiff, 'minutes');\n\t newEnd = newEnd.add(minutesDiff, 'minutes');\n\t }\n\t\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.weekResized = function(event, edge, daysDiff) {\n\t\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(daysDiff, 'days');\n\t } else {\n\t end.add(daysDiff, 'days');\n\t }\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t\n\t };\n\t\n\t vm.tempTimeChanged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t })\n\t .directive('mwlCalendarWeek', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarWeekView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarWeekCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarYearCtrl', function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(month) {\n\t if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n\t vm.monthClicked(month, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.monthClicked = function(month, monthClickedFirstRun) {\n\t\n\t if (!monthClickedFirstRun) {\n\t $scope.onTimespanClick({calendarDate: month.date.toDate()});\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var monthIndex = vm.view.indexOf(month);\n\t if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n\t vm.openMonthIndex = null; //close the open month\n\t } else {\n\t vm.openMonthIndex = monthIndex;\n\t vm.openRowIndex = Math.floor(monthIndex / 4);\n\t }\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newMonthDate) {\n\t var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newMonthDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t })\n\t .directive('mwlCalendarYear', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarYearView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarYearCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCollapseFallbackCtrl', function($scope, $attrs, $element) {\n\t var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n\t if (shouldCollapse) {\n\t $element.addClass('ng-hide');\n\t } else {\n\t $element.removeClass('ng-hide');\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t })\n\t .directive('mwlCollapseFallback', function($injector) {\n\t\n\t if ($injector.has('collapseDirective')) {\n\t return {};\n\t }\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlCollapseFallbackCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDateModifierCtrl', function($element, $attrs, $scope, moment) {\n\t\n\t function onClick() {\n\t if (angular.isDefined($attrs.setToToday)) {\n\t $scope.date = new Date();\n\t } else if (angular.isDefined($attrs.increment)) {\n\t $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n\t } else if (angular.isDefined($attrs.decrement)) {\n\t $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n\t }\n\t $scope.$apply();\n\t }\n\t\n\t $element.bind('click', onClick);\n\t\n\t $scope.$on('$destroy', function() {\n\t $element.unbind('click', onClick);\n\t });\n\t\n\t })\n\t .directive('mwlDateModifier', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDateModifierCtrl',\n\t scope: {\n\t date: '=',\n\t increment: '=',\n\t decrement: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDraggableCtrl', function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t function translateElement(elm, transformValue) {\n\t return elm\n\t .css('transform', transformValue)\n\t .css('-ms-transform', transformValue)\n\t .css('-webkit-transform', transformValue);\n\t }\n\t\n\t function canDrag() {\n\t return $parse($attrs.mwlDraggable)($scope);\n\t }\n\t\n\t function getUnitsMoved(x, y, gridDimensions) {\n\t\n\t var result = {x: x, y: y};\n\t\n\t if (gridDimensions && gridDimensions.x) {\n\t result.x /= gridDimensions.x;\n\t }\n\t\n\t if (gridDimensions && gridDimensions.y) {\n\t result.y /= gridDimensions.y;\n\t }\n\t\n\t return result;\n\t\n\t }\n\t\n\t interact($element[0]).draggable({\n\t snap: snap,\n\t onstart: function(event) {\n\t if (canDrag()) {\n\t angular.element(event.target).addClass('dragging-active');\n\t event.target.dropData = $parse($attrs.dropData)($scope);\n\t event.target.style.pointerEvents = 'none';\n\t if ($attrs.onDragStart) {\n\t $parse($attrs.onDragStart)($scope);\n\t $scope.$apply();\n\t }\n\t }\n\t },\n\t onmove: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n\t var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\t\n\t switch ($parse($attrs.axis)($scope)) {\n\t case 'x':\n\t y = 0;\n\t break;\n\t\n\t case 'y':\n\t x = 0;\n\t break;\n\t\n\t default:\n\t }\n\t\n\t if ($window.getComputedStyle(elm[0]).position === 'static') {\n\t elm.css('position', 'relative');\n\t }\n\t\n\t translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n\t .css('z-index', 1000)\n\t .attr('data-x', x)\n\t .attr('data-y', y);\n\t\n\t if ($attrs.onDrag) {\n\t $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = elm.attr('data-x');\n\t var y = elm.attr('data-y');\n\t\n\t event.target.style.pointerEvents = 'auto';\n\t if ($attrs.onDragEnd) {\n\t $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t $timeout(function() {\n\t translateElement(elm, null)\n\t .removeAttr('data-x')\n\t .removeAttr('data-y')\n\t .removeClass('dragging-active');\n\t }, 50);\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlDraggable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDraggableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDroppableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t interact($element[0]).dropzone({\n\t ondragenter: function(event) {\n\t angular.element(event.target).addClass('drop-active');\n\t },\n\t ondragleave: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondropdeactivate: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondrop: function(event) {\n\t if (event.relatedTarget.dropData) {\n\t $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n\t $scope.$apply();\n\t }\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlDroppable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDroppableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlElementDimensionsCtrl', function($element, $scope, $parse, $attrs) {\n\t\n\t $parse($attrs.mwlElementDimensions).assign($scope, {\n\t width: $element[0].offsetWidth,\n\t height: $element[0].offsetHeight\n\t });\n\t\n\t })\n\t .directive('mwlElementDimensions', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlElementDimensionsCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlResizableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t var originalDimensions = {};\n\t var originalDimensionsStyle = {};\n\t var resizeEdge;\n\t\n\t function canResize() {\n\t return $parse($attrs.mwlResizable)($scope);\n\t }\n\t\n\t function getUnitsResized(edge, elm, gridDimensions) {\n\t var unitsResized = {};\n\t unitsResized.edge = edge;\n\t if (edge === 'start') {\n\t unitsResized.x = elm.data('x');\n\t unitsResized.y = elm.data('y');\n\t } else if (edge === 'end') {\n\t unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n\t unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n\t }\n\t if (gridDimensions && gridDimensions.x) {\n\t unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n\t }\n\t if (gridDimensions && gridDimensions.y) {\n\t unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n\t }\n\t return unitsResized;\n\t }\n\t\n\t interact($element[0]).resizable({\n\t edges: $parse($attrs.resizeEdges)($scope),\n\t snap: snap,\n\t onstart: function(event) {\n\t\n\t if (canResize()) {\n\t resizeEdge = 'end';\n\t var elm = angular.element(event.target);\n\t originalDimensions.height = elm[0].offsetHeight;\n\t originalDimensions.width = elm[0].offsetWidth;\n\t originalDimensionsStyle.height = elm.css('height');\n\t originalDimensionsStyle.width = elm.css('width');\n\t }\n\t\n\t },\n\t onmove: function(event) {\n\t\n\t if (canResize()) {\n\t var elm = angular.element(event.target);\n\t var x = parseFloat(elm.data('x') || 0);\n\t var y = parseFloat(elm.data('y') || 0);\n\t\n\t elm.css({\n\t width: event.rect.width + 'px',\n\t height: event.rect.height + 'px'\n\t });\n\t\n\t // translate when resizing from top or left edges\n\t x += event.deltaRect.left;\n\t y += event.deltaRect.top;\n\t\n\t elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\t\n\t elm.data('x', x);\n\t elm.data('y', y);\n\t\n\t if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n\t resizeEdge = 'start';\n\t }\n\t\n\t if ($attrs.onResize) {\n\t $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canResize()) {\n\t\n\t var elm = angular.element(event.target);\n\t var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\t\n\t elm\n\t .data('x', null)\n\t .data('y', null)\n\t .css({\n\t transform: null,\n\t width: originalDimensionsStyle.width,\n\t height: originalDimensionsStyle.height\n\t });\n\t\n\t if ($attrs.onResizeEnd) {\n\t $parse($attrs.onResizeEnd)($scope, unitsResized);\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlResizable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlResizableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarDate.js\": 18,\n\t\t\"./calendarLimitTo.js\": 19,\n\t\t\"./calendarTruncateEventTitle.js\": 20\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 17;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarDate', function(calendarHelper, calendarConfig) {\n\t\n\t function calendarDate(date, format, getFromConfig) {\n\t\n\t if (getFromConfig === true) {\n\t format = calendarConfig.dateFormats[format];\n\t }\n\t\n\t return calendarHelper.formatDate(date, format);\n\t\n\t }\n\t\n\t calendarDate.$stateful = true;\n\t\n\t return calendarDate;\n\t\n\t });\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarLimitTo', function(limitToFilter) {\n\t\n\t if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n\t return limitToFilter;\n\t }\n\t\n\t //Copied from the angular source. Only 1.4 has the begin functionality.\n\t return function(input, limit, begin) {\n\t if (Math.abs(Number(limit)) === Infinity) {\n\t limit = Number(limit);\n\t } else {\n\t limit = parseInt(limit);\n\t }\n\t if (isNaN(limit)) {\n\t return input;\n\t }\n\t\n\t if (angular.isNumber(input)) {\n\t input = input.toString();\n\t }\n\t if (!angular.isArray(input) && !angular.isString(input)) {\n\t return input;\n\t }\n\t\n\t begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n\t begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\t\n\t if (limit >= 0) {\n\t return input.slice(begin, begin + limit);\n\t } else if (begin === 0) {\n\t return input.slice(limit, input.length);\n\t } else {\n\t return input.slice(Math.max(0, begin + limit), begin);\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarTruncateEventTitle', function() {\n\t\n\t return function(string, length, boxHeight) {\n\t if (!string) {\n\t return '';\n\t }\n\t\n\t //Only truncate if if actually needs truncating\n\t if (string.length >= length && string.length / 20 > boxHeight / 30) {\n\t return string.substr(0, length) + '...';\n\t } else {\n\t return string;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarConfig.js\": 22,\n\t\t\"./calendarDebounce.js\": 23,\n\t\t\"./calendarHelper.js\": 24,\n\t\t\"./calendarTitle.js\": 25,\n\t\t\"./interact.js\": 26,\n\t\t\"./moment.js\": 28\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 21;\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .provider('calendarConfig', function() {\n\t\n\t var defaultFormats = {\n\t angular: {\n\t date: {\n\t hour: 'ha',\n\t day: 'd MMM',\n\t month: 'MMMM',\n\t weekDay: 'EEEE',\n\t time: 'HH:mm',\n\t datetime: 'MMM d, h:mm a'\n\t },\n\t title: {\n\t day: 'EEEE d MMMM, yyyy',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM yyyy',\n\t year: 'yyyy'\n\t }\n\t },\n\t moment: {\n\t date: {\n\t hour: 'ha',\n\t day: 'D MMM',\n\t month: 'MMMM',\n\t weekDay: 'dddd',\n\t time: 'HH:mm',\n\t datetime: 'MMM D, h:mm a'\n\t },\n\t title: {\n\t day: 'dddd D MMMM, YYYY',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM YYYY',\n\t year: 'YYYY'\n\t }\n\t }\n\t };\n\t\n\t var dateFormatter = 'angular';\n\t var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t var showTimesOnWeekView = false;\n\t\n\t var i18nStrings = {\n\t eventsLabel: 'Events',\n\t timeLabel: 'Time'\n\t };\n\t\n\t var displayAllMonthEvents = false;\n\t\n\t var configProvider = this;\n\t\n\t configProvider.setDateFormats = function(formats) {\n\t angular.extend(defaultDateFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setTitleFormats = function(formats) {\n\t angular.extend(defaultTitleFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setI18nStrings = function(strings) {\n\t angular.extend(i18nStrings, strings);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDisplayAllMonthEvents = function(value) {\n\t displayAllMonthEvents = value;\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDateFormatter = function(value) {\n\t if (['angular', 'moment'].indexOf(value) === -1) {\n\t throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n\t }\n\t dateFormatter = value;\n\t defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t return configProvider;\n\t };\n\t\n\t configProvider.showTimesOnWeekView = function(value) {\n\t showTimesOnWeekView = value; //experimental, and ignores the event end date\n\t return configProvider;\n\t };\n\t\n\t configProvider.$get = function() {\n\t return {\n\t dateFormats: defaultDateFormats,\n\t titleFormats: defaultTitleFormats,\n\t i18nStrings: i18nStrings,\n\t displayAllMonthEvents: displayAllMonthEvents,\n\t dateFormatter: dateFormatter,\n\t showTimesOnWeekView: showTimesOnWeekView\n\t };\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .service('calendarDebounce', function($timeout) {\n\t\n\t function debounce(func, wait, immediate) {\n\t var timeout;\n\t return function() {\n\t var context = this, args = arguments;\n\t function later() {\n\t timeout = null;\n\t if (!immediate) {\n\t func.apply(context, args);\n\t }\n\t }\n\t var callNow = immediate && !timeout;\n\t $timeout.cancel(timeout);\n\t timeout = $timeout(later, wait);\n\t if (callNow) {\n\t func.apply(context, args);\n\t }\n\t };\n\t }\n\t\n\t return debounce;\n\t\n\t });\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarHelper', function(dateFilter, moment, calendarConfig) {\n\t\n\t function formatDate(date, format) {\n\t if (calendarConfig.dateFormatter === 'angular') {\n\t return dateFilter(moment(date).toDate(), format);\n\t } else if (calendarConfig.dateFormatter === 'moment') {\n\t return moment(date).format(format);\n\t }\n\t }\n\t\n\t function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n\t if (!oldEnd) {\n\t return oldEnd;\n\t }\n\t var diffInSeconds = moment(newStart).diff(moment(oldStart));\n\t return moment(oldEnd).add(diffInSeconds);\n\t }\n\t\n\t function eventIsInPeriod(event, periodStart, periodEnd) {\n\t\n\t var eventStart = moment(event.startsAt);\n\t var eventEnd = moment(event.endsAt || event.startsAt);\n\t periodStart = moment(periodStart);\n\t periodEnd = moment(periodEnd);\n\t\n\t if (angular.isDefined(event.recursOn)) {\n\t\n\t switch (event.recursOn) {\n\t case 'year':\n\t eventStart.set({\n\t year: periodStart.year()\n\t });\n\t break;\n\t\n\t case 'month':\n\t eventStart.set({\n\t year: periodStart.year(),\n\t month: periodStart.month()\n\t });\n\t break;\n\t\n\t default:\n\t throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n\t }\n\t\n\t eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\t\n\t }\n\t\n\t return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n\t (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n\t (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n\t eventStart.isSame(periodStart) ||\n\t eventEnd.isSame(periodEnd);\n\t\n\t }\n\t\n\t function filterEventsInPeriod(events, startPeriod, endPeriod) {\n\t return events.filter(function(event) {\n\t return eventIsInPeriod(event, startPeriod, endPeriod);\n\t });\n\t }\n\t\n\t function getEventsInPeriod(calendarDate, period, allEvents) {\n\t var startPeriod = moment(calendarDate).startOf(period);\n\t var endPeriod = moment(calendarDate).endOf(period);\n\t return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n\t }\n\t\n\t function getBadgeTotal(events) {\n\t return events.filter(function(event) {\n\t return event.incrementsBadgeTotal !== false;\n\t }).length;\n\t }\n\t\n\t function getWeekDayNames() {\n\t var weekdays = [];\n\t var count = 0;\n\t while (count < 7) {\n\t weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n\t }\n\t return weekdays;\n\t }\n\t\n\t function getYearView(events, currentDay, cellModifier) {\n\t\n\t var view = [];\n\t var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n\t var month = moment(currentDay).startOf('year');\n\t var count = 0;\n\t while (count < 12) {\n\t var startPeriod = month.clone();\n\t var endPeriod = startPeriod.clone().endOf('month');\n\t var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n\t var cell = {\n\t label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n\t isToday: startPeriod.isSame(moment().startOf('month')),\n\t events: periodEvents,\n\t date: startPeriod,\n\t badgeTotal: getBadgeTotal(periodEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t view.push(cell);\n\t month.add(1, 'month');\n\t count++;\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getMonthView(events, currentDay, cellModifier) {\n\t\n\t var startOfMonth = moment(currentDay).startOf('month');\n\t var day = startOfMonth.clone().startOf('week');\n\t var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n\t var eventsInPeriod;\n\t if (calendarConfig.displayAllMonthEvents) {\n\t eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n\t } else {\n\t eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n\t }\n\t var view = [];\n\t var today = moment().startOf('day');\n\t\n\t while (day.isBefore(endOfMonthView)) {\n\t\n\t var inMonth = day.month() === moment(currentDay).month();\n\t var monthEvents = [];\n\t if (inMonth || calendarConfig.displayAllMonthEvents) {\n\t monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n\t }\n\t\n\t var cell = {\n\t label: day.date(),\n\t date: day.clone(),\n\t inMonth: inMonth,\n\t isPast: today.isAfter(day),\n\t isToday: today.isSame(day),\n\t isFuture: today.isBefore(day),\n\t isWeekend: [0, 6].indexOf(day.day()) > -1,\n\t events: monthEvents,\n\t badgeTotal: getBadgeTotal(monthEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t\n\t view.push(cell);\n\t\n\t day.add(1, 'day');\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getWeekView(events, currentDay) {\n\t\n\t var startOfWeek = moment(currentDay).startOf('week');\n\t var endOfWeek = moment(currentDay).endOf('week');\n\t var dayCounter = startOfWeek.clone();\n\t var days = [];\n\t var today = moment().startOf('day');\n\t while (days.length < 7) {\n\t days.push({\n\t weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n\t date: dayCounter.clone(),\n\t dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n\t isPast: dayCounter.isBefore(today),\n\t isToday: dayCounter.isSame(today),\n\t isFuture: dayCounter.isAfter(today),\n\t isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n\t });\n\t dayCounter.add(1, 'day');\n\t }\n\t\n\t var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\t\n\t var eventStart = moment(event.startsAt).startOf('day');\n\t var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n\t var weekViewStart = moment(startOfWeek).startOf('day');\n\t var weekViewEnd = moment(endOfWeek).startOf('day');\n\t var offset, span;\n\t\n\t if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n\t offset = 0;\n\t } else {\n\t offset = eventStart.diff(weekViewStart, 'days');\n\t }\n\t\n\t if (eventEnd.isAfter(weekViewEnd)) {\n\t eventEnd = weekViewEnd;\n\t }\n\t\n\t if (eventStart.isBefore(weekViewStart)) {\n\t eventStart = weekViewStart;\n\t }\n\t\n\t span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\t\n\t event.daySpan = span;\n\t event.dayOffset = offset;\n\t\n\t return event;\n\t });\n\t\n\t return {days: days, events: eventsSorted};\n\t\n\t }\n\t\n\t function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t\n\t var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n\t var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n\t var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n\t var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n\t var hourHeightMultiplier = hourHeight / 60;\n\t var buckets = [];\n\t var eventsInPeriod = filterEventsInPeriod(\n\t events,\n\t moment(currentDay).startOf('day').toDate(),\n\t moment(currentDay).endOf('day').toDate()\n\t );\n\t\n\t return eventsInPeriod.map(function(event) {\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t event.top = 0;\n\t } else {\n\t event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n\t }\n\t\n\t if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n\t event.height = calendarHeight - event.top;\n\t } else {\n\t var diffStart = event.startsAt;\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t diffStart = calendarStart.toDate();\n\t }\n\t if (!event.endsAt) {\n\t event.height = 30;\n\t } else {\n\t event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n\t }\n\t }\n\t\n\t if (event.top - event.height > calendarHeight) {\n\t event.height = 0;\n\t }\n\t\n\t event.left = 0;\n\t\n\t return event;\n\t }).filter(function(event) {\n\t return event.height > 0;\n\t }).map(function(event) {\n\t\n\t var cannotFitInABucket = true;\n\t buckets.forEach(function(bucket, bucketIndex) {\n\t var canFitInThisBucket = true;\n\t\n\t bucket.forEach(function(bucketItem) {\n\t if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n\t eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n\t canFitInThisBucket = false;\n\t }\n\t });\n\t\n\t if (canFitInThisBucket && cannotFitInABucket) {\n\t cannotFitInABucket = false;\n\t event.left = bucketIndex * 150;\n\t buckets[bucketIndex].push(event);\n\t }\n\t\n\t });\n\t\n\t if (cannotFitInABucket) {\n\t event.left = buckets.length * 150;\n\t buckets.push([event]);\n\t }\n\t\n\t return event;\n\t\n\t });\n\t\n\t }\n\t\n\t function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t var weekView = getWeekView(events, currentDay);\n\t var newEvents = [];\n\t weekView.days.forEach(function(day) {\n\t var dayEvents = weekView.events.filter(function(event) {\n\t return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n\t });\n\t var newDayEvents = getDayView(\n\t dayEvents,\n\t day.date,\n\t dayViewStart,\n\t dayViewEnd,\n\t dayViewSplit\n\t );\n\t newEvents = newEvents.concat(newDayEvents);\n\t });\n\t weekView.events = newEvents;\n\t return weekView;\n\t }\n\t\n\t function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n\t var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n\t var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n\t }\n\t\n\t return {\n\t getWeekDayNames: getWeekDayNames,\n\t getYearView: getYearView,\n\t getMonthView: getMonthView,\n\t getWeekView: getWeekView,\n\t getDayView: getDayView,\n\t getWeekViewWithTimes: getWeekViewWithTimes,\n\t getDayViewHeight: getDayViewHeight,\n\t adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n\t formatDate: formatDate,\n\t eventIsInPeriod: eventIsInPeriod //expose for testing only\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarTitle', function(moment, calendarConfig, calendarHelper) {\n\t\n\t function day(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n\t }\n\t\n\t function week(currentDay) {\n\t var weekTitleLabel = calendarConfig.titleFormats.week;\n\t return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n\t }\n\t\n\t function month(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n\t }\n\t\n\t function year(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n\t }\n\t\n\t return {\n\t day: day,\n\t week: week,\n\t month: month,\n\t year: year\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar interact;\n\ttry {\n\t interact = __webpack_require__(27);\n\t} catch (e) {\n\t interact = null;\n\t}\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('interact', interact);\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\tif(typeof interact === 'undefined') {var e = new Error(\"Cannot find module \\\"interact\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\n\tmodule.exports = interact;\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar moment = __webpack_require__(29);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('moment', moment);\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\tmodule.exports = moment;\n\n/***/ }\n/******/ ]);\n","function requireAll(r) {\n r.keys().forEach(r);\n}\n\nmodule.exports = require('./src/module');\n\nrequireAll(require.context('./src/directives', true, /\\.js$/));\nrequireAll(require.context('./src/filters', true, /\\.js$/));\nrequireAll(require.context('./src/services', true, /\\.js$/));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","var map = {\n\t\"./mwlCalendar.js\": 4,\n\t\"./mwlCalendarDay.js\": 5,\n\t\"./mwlCalendarHourList.js\": 6,\n\t\"./mwlCalendarMonth.js\": 7,\n\t\"./mwlCalendarSlideBox.js\": 8,\n\t\"./mwlCalendarWeek.js\": 9,\n\t\"./mwlCalendarYear.js\": 10,\n\t\"./mwlCollapseFallback.js\": 11,\n\t\"./mwlDateModifier.js\": 12,\n\t\"./mwlDraggable.js\": 13,\n\t\"./mwlDroppable.js\": 14,\n\t\"./mwlElementDimensions.js\": 15,\n\t\"./mwlResizable.js\": 16\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 3;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives \\.js$\n ** module id = 3\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarCtrl', function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\n var vm = this;\n\n $scope.events = $scope.events || [];\n\n vm.changeView = function(view, newDay) {\n $scope.view = view;\n $scope.currentDay = newDay;\n };\n\n vm.drillDown = function(date) {\n\n var rawDate = moment(date).toDate();\n\n var nextView = {\n year: 'month',\n month: 'day',\n week: 'day'\n };\n\n if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n vm.changeView(nextView[$scope.view], rawDate);\n }\n\n };\n\n var previousDate = moment($scope.currentDay);\n var previousView = angular.copy($scope.view);\n\n //Use a debounce to prevent it being called 3 times on initialisation\n var refreshCalendar = calendarDebounce(function() {\n if (calendarTitle[$scope.view]) {\n $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n }\n\n $scope.events = $scope.events.map(function(event, index) {\n Object.defineProperty(event, '$id', {enumerable: false, value: index});\n return event;\n });\n\n //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n var currentDate = moment($scope.currentDay);\n var shouldUpdate = true;\n if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n $scope.view === previousView) {\n shouldUpdate = false;\n }\n previousDate = currentDate;\n previousView = angular.copy($scope.view);\n\n if (shouldUpdate) {\n $scope.$broadcast('calendar.refreshView');\n }\n }, 50);\n\n //Auto update the calendar when the locale changes\n var unbindLocaleWatcher = $scope.$watch(function() {\n return moment.locale() + $locale.id;\n }, refreshCalendar);\n\n var unbindOnDestroy = [];\n unbindOnDestroy.push(unbindLocaleWatcher);\n\n //Refresh the calendar when any of these variables change.\n /* eslint-disable angular/ng_on_watch */\n unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n /* eslint-enable angular/ng_on_watch */\n\n //Remove any watchers when the calendar is destroyed\n var unbindDestroyListener = $scope.$on('$destroy', function() {\n unbindOnDestroy.forEach(function(unbind) {\n unbind();\n });\n });\n unbindOnDestroy.push(unbindDestroyListener);\n\n })\n .directive('mwlCalendar', function() {\n\n return {\n templateUrl: 'src/templates/calendar.html',\n restrict: 'EA',\n scope: {\n events: '=',\n view: '=',\n viewTitle: '=',\n currentDay: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onEventClick: '&',\n onEventTimesChanged: '&',\n onEditEventClick: '&',\n onDeleteEventClick: '&',\n onTimespanClick: '&',\n onDrillDownClick: '&',\n cellModifier: '&',\n dayViewStart: '@',\n dayViewEnd: '@',\n dayViewSplit: '@'\n },\n controller: 'MwlCalendarCtrl as vm'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendar.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarDayCtrl', function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\n var vm = this;\n\n vm.calendarConfig = calendarConfig;\n vm.$sce = $sce;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.dayViewHeight = calendarHelper.getDayViewHeight(\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n\n vm.view = calendarHelper.getDayView(\n $scope.events,\n $scope.currentDay,\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.eventDragComplete = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n vm.eventDragged = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n };\n\n vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n var start = moment(event.startsAt);\n var end = moment(event.endsAt);\n if (edge === 'start') {\n start.add(minutesDiff, 'minutes');\n } else {\n end.add(minutesDiff, 'minutes');\n }\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: start.toDate(),\n calendarNewEventEnd: end.toDate()\n });\n };\n\n vm.eventResized = function(event, edge, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n if (edge === 'start') {\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n }\n };\n\n })\n .directive('mwlCalendarDay', function() {\n\n return {\n templateUrl: 'src/templates/calendarDayView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n },\n controller: 'MwlCalendarDayCtrl as vm'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarDay.js\n ** module id = 5\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarHourListCtrl', function($scope, moment, calendarConfig, calendarHelper) {\n var vm = this;\n var dayViewStart, dayViewEnd;\n\n function updateDays() {\n dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n vm.dayViewSplit = parseInt($scope.dayViewSplit);\n vm.hours = [];\n var dayCounter = moment(dayViewStart);\n for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n vm.hours.push({\n label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n });\n dayCounter.add(1, 'hour');\n }\n }\n\n var originalLocale = moment.locale();\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n\n if (originalLocale !== moment.locale()) {\n originalLocale = moment.locale();\n updateDays();\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n updateDays();\n\n })\n .directive('mwlCalendarHourList', function() {\n\n return {\n restrict: 'EA',\n templateUrl: 'src/templates/calendarHourList.html',\n controller: 'MwlCalendarHourListCtrl as vm',\n scope: {\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarHourList.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarMonthCtrl', function($scope, moment, calendarHelper) {\n\n var vm = this;\n var firstRun = true;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n\n vm.weekDays = calendarHelper.getWeekDayNames();\n\n vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n var rows = Math.floor(vm.view.length / 7);\n vm.monthOffsets = [];\n for (var i = 0; i < rows; i++) {\n vm.monthOffsets.push(i * 7);\n }\n\n //Auto open the calendar to the current day if set\n if ($scope.autoOpen && firstRun) {\n firstRun = false;\n vm.view.forEach(function(day) {\n if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n vm.dayClicked(day, true);\n }\n });\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.dayClicked = function(day, dayClickedFirstRun) {\n\n if (!dayClickedFirstRun) {\n $scope.onTimespanClick({\n calendarDate: day.date.toDate()\n });\n }\n\n vm.openRowIndex = null;\n var dayIndex = vm.view.indexOf(day);\n if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n vm.openDayIndex = null; //close the open day\n } else {\n vm.openDayIndex = dayIndex;\n vm.openRowIndex = Math.floor(dayIndex / 7);\n }\n\n };\n\n vm.highlightEvent = function(event, shouldAddClass) {\n\n vm.view.forEach(function(day) {\n delete day.highlightClass;\n if (shouldAddClass) {\n var dayContainsEvent = day.events.indexOf(event) > -1;\n if (dayContainsEvent) {\n day.highlightClass = 'day-highlight dh-event-' + event.type;\n }\n }\n });\n\n };\n\n vm.handleEventDrop = function(event, newDayDate) {\n\n var newStart = moment(event.startsAt)\n .date(moment(newDayDate).date())\n .month(moment(newDayDate).month());\n\n var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarDate: newDayDate,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n })\n .directive('mwlCalendarMonth', function() {\n\n return {\n templateUrl: 'src/templates/calendarMonthView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEditEventClick: '=',\n onDeleteEventClick: '=',\n onEventTimesChanged: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onTimespanClick: '=',\n cellModifier: '='\n },\n controller: 'MwlCalendarMonthCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarMonth.js\n ** module id = 7\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarSlideBoxCtrl', function($scope, $sce) {\n\n var vm = this;\n vm.$sce = $sce;\n\n var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n vm.shouldCollapse = !isOpen;\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n unbindWatcher();\n });\n\n })\n .directive('mwlCalendarSlideBox', function() {\n\n return {\n restrict: 'EA',\n templateUrl: 'src/templates/calendarSlideBox.html',\n replace: true,\n controller: 'MwlCalendarSlideBoxCtrl as vm',\n require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n link: function(scope, elm, attrs, ctrls) {\n scope.isMonthView = !!ctrls[0];\n scope.isYearView = !!ctrls[1];\n },\n scope: {\n isOpen: '=',\n events: '=',\n onEventClick: '=',\n editEventHtml: '=',\n onEditEventClick: '=',\n deleteEventHtml: '=',\n onDeleteEventClick: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarSlideBox.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarWeekCtrl', function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\n var vm = this;\n\n vm.showTimes = calendarConfig.showTimesOnWeekView;\n vm.$sce = $sce;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.dayViewHeight = calendarHelper.getDayViewHeight(\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n if (vm.showTimes) {\n vm.view = calendarHelper.getWeekViewWithTimes(\n $scope.events,\n $scope.currentDay,\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n } else {\n vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n }\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\n var newStart = moment(event.startsAt).add(daysDiff, 'days');\n var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\n if (minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n newStart = newStart.add(minutesDiff, 'minutes');\n newEnd = newEnd.add(minutesDiff, 'minutes');\n }\n\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n vm.weekResized = function(event, edge, daysDiff) {\n\n var start = moment(event.startsAt);\n var end = moment(event.endsAt);\n if (edge === 'start') {\n start.add(daysDiff, 'days');\n } else {\n end.add(daysDiff, 'days');\n }\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: start.toDate(),\n calendarNewEventEnd: end.toDate()\n });\n\n };\n\n vm.tempTimeChanged = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n };\n\n })\n .directive('mwlCalendarWeek', function() {\n\n return {\n templateUrl: 'src/templates/calendarWeekView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n },\n controller: 'MwlCalendarWeekCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarWeek.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarYearCtrl', function($scope, moment, calendarHelper) {\n\n var vm = this;\n var firstRun = true;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\n //Auto open the calendar to the current day if set\n if ($scope.autoOpen && firstRun) {\n firstRun = false;\n vm.view.forEach(function(month) {\n if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n vm.monthClicked(month, true);\n }\n });\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.monthClicked = function(month, monthClickedFirstRun) {\n\n if (!monthClickedFirstRun) {\n $scope.onTimespanClick({calendarDate: month.date.toDate()});\n }\n\n vm.openRowIndex = null;\n var monthIndex = vm.view.indexOf(month);\n if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n vm.openMonthIndex = null; //close the open month\n } else {\n vm.openMonthIndex = monthIndex;\n vm.openRowIndex = Math.floor(monthIndex / 4);\n }\n\n };\n\n vm.handleEventDrop = function(event, newMonthDate) {\n var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarDate: newMonthDate,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n })\n .directive('mwlCalendarYear', function() {\n\n return {\n templateUrl: 'src/templates/calendarYearView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n onEditEventClick: '=',\n onDeleteEventClick: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onTimespanClick: '=',\n cellModifier: '='\n },\n controller: 'MwlCalendarYearCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarYear.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCollapseFallbackCtrl', function($scope, $attrs, $element) {\n var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n if (shouldCollapse) {\n $element.addClass('ng-hide');\n } else {\n $element.removeClass('ng-hide');\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n unbindWatcher();\n });\n\n })\n .directive('mwlCollapseFallback', function($injector) {\n\n if ($injector.has('collapseDirective')) {\n return {};\n }\n\n return {\n restrict: 'A',\n controller: 'MwlCollapseFallbackCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCollapseFallback.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDateModifierCtrl', function($element, $attrs, $scope, moment) {\n\n function onClick() {\n if (angular.isDefined($attrs.setToToday)) {\n $scope.date = new Date();\n } else if (angular.isDefined($attrs.increment)) {\n $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n } else if (angular.isDefined($attrs.decrement)) {\n $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n }\n $scope.$apply();\n }\n\n $element.bind('click', onClick);\n\n $scope.$on('$destroy', function() {\n $element.unbind('click', onClick);\n });\n\n })\n .directive('mwlDateModifier', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDateModifierCtrl',\n scope: {\n date: '=',\n increment: '=',\n decrement: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDateModifier.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDraggableCtrl', function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\n if (!interact) {\n return;\n }\n\n var snap, snapGridDimensions;\n if ($attrs.snapGrid) {\n snapGridDimensions = $parse($attrs.snapGrid)($scope);\n snap = {\n targets: [\n interact.createSnapGrid(snapGridDimensions)\n ]\n };\n }\n\n function translateElement(elm, transformValue) {\n return elm\n .css('transform', transformValue)\n .css('-ms-transform', transformValue)\n .css('-webkit-transform', transformValue);\n }\n\n function canDrag() {\n return $parse($attrs.mwlDraggable)($scope);\n }\n\n function getUnitsMoved(x, y, gridDimensions) {\n\n var result = {x: x, y: y};\n\n if (gridDimensions && gridDimensions.x) {\n result.x /= gridDimensions.x;\n }\n\n if (gridDimensions && gridDimensions.y) {\n result.y /= gridDimensions.y;\n }\n\n return result;\n\n }\n\n interact($element[0]).draggable({\n snap: snap,\n onstart: function(event) {\n if (canDrag()) {\n angular.element(event.target).addClass('dragging-active');\n event.target.dropData = $parse($attrs.dropData)($scope);\n event.target.style.pointerEvents = 'none';\n if ($attrs.onDragStart) {\n $parse($attrs.onDragStart)($scope);\n $scope.$apply();\n }\n }\n },\n onmove: function(event) {\n\n if (canDrag()) {\n var elm = angular.element(event.target);\n var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\n switch ($parse($attrs.axis)($scope)) {\n case 'x':\n y = 0;\n break;\n\n case 'y':\n x = 0;\n break;\n\n default:\n }\n\n if ($window.getComputedStyle(elm[0]).position === 'static') {\n elm.css('position', 'relative');\n }\n\n translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n .css('z-index', 1000)\n .attr('data-x', x)\n .attr('data-y', y);\n\n if ($attrs.onDrag) {\n $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n $scope.$apply();\n }\n }\n\n },\n onend: function(event) {\n\n if (canDrag()) {\n var elm = angular.element(event.target);\n var x = elm.attr('data-x');\n var y = elm.attr('data-y');\n\n event.target.style.pointerEvents = 'auto';\n if ($attrs.onDragEnd) {\n $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n $scope.$apply();\n }\n\n $timeout(function() {\n translateElement(elm, null)\n .removeAttr('data-x')\n .removeAttr('data-y')\n .removeClass('dragging-active');\n }, 50);\n }\n\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlDraggable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDraggableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDraggable.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDroppableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\n if (!interact) {\n return;\n }\n\n interact($element[0]).dropzone({\n ondragenter: function(event) {\n angular.element(event.target).addClass('drop-active');\n },\n ondragleave: function(event) {\n angular.element(event.target).removeClass('drop-active');\n },\n ondropdeactivate: function(event) {\n angular.element(event.target).removeClass('drop-active');\n },\n ondrop: function(event) {\n if (event.relatedTarget.dropData) {\n $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n $scope.$apply();\n }\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlDroppable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDroppableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDroppable.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlElementDimensionsCtrl', function($element, $scope, $parse, $attrs) {\n\n $parse($attrs.mwlElementDimensions).assign($scope, {\n width: $element[0].offsetWidth,\n height: $element[0].offsetHeight\n });\n\n })\n .directive('mwlElementDimensions', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlElementDimensionsCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlElementDimensions.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlResizableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\n if (!interact) {\n return;\n }\n\n var snap, snapGridDimensions;\n if ($attrs.snapGrid) {\n snapGridDimensions = $parse($attrs.snapGrid)($scope);\n snap = {\n targets: [\n interact.createSnapGrid(snapGridDimensions)\n ]\n };\n }\n\n var originalDimensions = {};\n var originalDimensionsStyle = {};\n var resizeEdge;\n\n function canResize() {\n return $parse($attrs.mwlResizable)($scope);\n }\n\n function getUnitsResized(edge, elm, gridDimensions) {\n var unitsResized = {};\n unitsResized.edge = edge;\n if (edge === 'start') {\n unitsResized.x = elm.data('x');\n unitsResized.y = elm.data('y');\n } else if (edge === 'end') {\n unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n }\n if (gridDimensions && gridDimensions.x) {\n unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n }\n if (gridDimensions && gridDimensions.y) {\n unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n }\n return unitsResized;\n }\n\n interact($element[0]).resizable({\n edges: $parse($attrs.resizeEdges)($scope),\n snap: snap,\n onstart: function(event) {\n\n if (canResize()) {\n resizeEdge = 'end';\n var elm = angular.element(event.target);\n originalDimensions.height = elm[0].offsetHeight;\n originalDimensions.width = elm[0].offsetWidth;\n originalDimensionsStyle.height = elm.css('height');\n originalDimensionsStyle.width = elm.css('width');\n }\n\n },\n onmove: function(event) {\n\n if (canResize()) {\n var elm = angular.element(event.target);\n var x = parseFloat(elm.data('x') || 0);\n var y = parseFloat(elm.data('y') || 0);\n\n elm.css({\n width: event.rect.width + 'px',\n height: event.rect.height + 'px'\n });\n\n // translate when resizing from top or left edges\n x += event.deltaRect.left;\n y += event.deltaRect.top;\n\n elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\n elm.data('x', x);\n elm.data('y', y);\n\n if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n resizeEdge = 'start';\n }\n\n if ($attrs.onResize) {\n $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n $scope.$apply();\n }\n\n }\n\n },\n onend: function(event) {\n\n if (canResize()) {\n\n var elm = angular.element(event.target);\n var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\n elm\n .data('x', null)\n .data('y', null)\n .css({\n transform: null,\n width: originalDimensionsStyle.width,\n height: originalDimensionsStyle.height\n });\n\n if ($attrs.onResizeEnd) {\n $parse($attrs.onResizeEnd)($scope, unitsResized);\n $scope.$apply();\n }\n }\n\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlResizable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlResizableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlResizable.js\n ** module id = 16\n ** module chunks = 0\n **/","var map = {\n\t\"./calendarDate.js\": 18,\n\t\"./calendarLimitTo.js\": 19,\n\t\"./calendarTruncateEventTitle.js\": 20\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 17;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters \\.js$\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarDate', function(calendarHelper, calendarConfig) {\n\n function calendarDate(date, format, getFromConfig) {\n\n if (getFromConfig === true) {\n format = calendarConfig.dateFormats[format];\n }\n\n return calendarHelper.formatDate(date, format);\n\n }\n\n calendarDate.$stateful = true;\n\n return calendarDate;\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarDate.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarLimitTo', function(limitToFilter) {\n\n if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n return limitToFilter;\n }\n\n //Copied from the angular source. Only 1.4 has the begin functionality.\n return function(input, limit, begin) {\n if (Math.abs(Number(limit)) === Infinity) {\n limit = Number(limit);\n } else {\n limit = parseInt(limit);\n }\n if (isNaN(limit)) {\n return input;\n }\n\n if (angular.isNumber(input)) {\n input = input.toString();\n }\n if (!angular.isArray(input) && !angular.isString(input)) {\n return input;\n }\n\n begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\n if (limit >= 0) {\n return input.slice(begin, begin + limit);\n } else if (begin === 0) {\n return input.slice(limit, input.length);\n } else {\n return input.slice(Math.max(0, begin + limit), begin);\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarLimitTo.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarTruncateEventTitle', function() {\n\n return function(string, length, boxHeight) {\n if (!string) {\n return '';\n }\n\n //Only truncate if if actually needs truncating\n if (string.length >= length && string.length / 20 > boxHeight / 30) {\n return string.substr(0, length) + '...';\n } else {\n return string;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarTruncateEventTitle.js\n ** module id = 20\n ** module chunks = 0\n **/","var map = {\n\t\"./calendarConfig.js\": 22,\n\t\"./calendarDebounce.js\": 23,\n\t\"./calendarHelper.js\": 24,\n\t\"./calendarTitle.js\": 25,\n\t\"./interact.js\": 26,\n\t\"./moment.js\": 28\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 21;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services \\.js$\n ** module id = 21\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .provider('calendarConfig', function() {\n\n var defaultFormats = {\n angular: {\n date: {\n hour: 'ha',\n day: 'd MMM',\n month: 'MMMM',\n weekDay: 'EEEE',\n time: 'HH:mm',\n datetime: 'MMM d, h:mm a'\n },\n title: {\n day: 'EEEE d MMMM, yyyy',\n week: 'Week {week} of {year}',\n month: 'MMMM yyyy',\n year: 'yyyy'\n }\n },\n moment: {\n date: {\n hour: 'ha',\n day: 'D MMM',\n month: 'MMMM',\n weekDay: 'dddd',\n time: 'HH:mm',\n datetime: 'MMM D, h:mm a'\n },\n title: {\n day: 'dddd D MMMM, YYYY',\n week: 'Week {week} of {year}',\n month: 'MMMM YYYY',\n year: 'YYYY'\n }\n }\n };\n\n var dateFormatter = 'angular';\n var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n var showTimesOnWeekView = false;\n\n var i18nStrings = {\n eventsLabel: 'Events',\n timeLabel: 'Time'\n };\n\n var displayAllMonthEvents = false;\n\n var configProvider = this;\n\n configProvider.setDateFormats = function(formats) {\n angular.extend(defaultDateFormats, formats);\n return configProvider;\n };\n\n configProvider.setTitleFormats = function(formats) {\n angular.extend(defaultTitleFormats, formats);\n return configProvider;\n };\n\n configProvider.setI18nStrings = function(strings) {\n angular.extend(i18nStrings, strings);\n return configProvider;\n };\n\n configProvider.setDisplayAllMonthEvents = function(value) {\n displayAllMonthEvents = value;\n return configProvider;\n };\n\n configProvider.setDateFormatter = function(value) {\n if (['angular', 'moment'].indexOf(value) === -1) {\n throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n }\n dateFormatter = value;\n defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n return configProvider;\n };\n\n configProvider.showTimesOnWeekView = function(value) {\n showTimesOnWeekView = value; //experimental, and ignores the event end date\n return configProvider;\n };\n\n configProvider.$get = function() {\n return {\n dateFormats: defaultDateFormats,\n titleFormats: defaultTitleFormats,\n i18nStrings: i18nStrings,\n displayAllMonthEvents: displayAllMonthEvents,\n dateFormatter: dateFormatter,\n showTimesOnWeekView: showTimesOnWeekView\n };\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarConfig.js\n ** module id = 22\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .service('calendarDebounce', function($timeout) {\n\n function debounce(func, wait, immediate) {\n var timeout;\n return function() {\n var context = this, args = arguments;\n function later() {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n }\n var callNow = immediate && !timeout;\n $timeout.cancel(timeout);\n timeout = $timeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n return debounce;\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarDebounce.js\n ** module id = 23\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .factory('calendarHelper', function(dateFilter, moment, calendarConfig) {\n\n function formatDate(date, format) {\n if (calendarConfig.dateFormatter === 'angular') {\n return dateFilter(moment(date).toDate(), format);\n } else if (calendarConfig.dateFormatter === 'moment') {\n return moment(date).format(format);\n }\n }\n\n function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n if (!oldEnd) {\n return oldEnd;\n }\n var diffInSeconds = moment(newStart).diff(moment(oldStart));\n return moment(oldEnd).add(diffInSeconds);\n }\n\n function eventIsInPeriod(event, periodStart, periodEnd) {\n\n var eventStart = moment(event.startsAt);\n var eventEnd = moment(event.endsAt || event.startsAt);\n periodStart = moment(periodStart);\n periodEnd = moment(periodEnd);\n\n if (angular.isDefined(event.recursOn)) {\n\n switch (event.recursOn) {\n case 'year':\n eventStart.set({\n year: periodStart.year()\n });\n break;\n\n case 'month':\n eventStart.set({\n year: periodStart.year(),\n month: periodStart.month()\n });\n break;\n\n default:\n throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n }\n\n eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\n }\n\n return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n eventStart.isSame(periodStart) ||\n eventEnd.isSame(periodEnd);\n\n }\n\n function filterEventsInPeriod(events, startPeriod, endPeriod) {\n return events.filter(function(event) {\n return eventIsInPeriod(event, startPeriod, endPeriod);\n });\n }\n\n function getEventsInPeriod(calendarDate, period, allEvents) {\n var startPeriod = moment(calendarDate).startOf(period);\n var endPeriod = moment(calendarDate).endOf(period);\n return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n }\n\n function getBadgeTotal(events) {\n return events.filter(function(event) {\n return event.incrementsBadgeTotal !== false;\n }).length;\n }\n\n function getWeekDayNames() {\n var weekdays = [];\n var count = 0;\n while (count < 7) {\n weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n }\n return weekdays;\n }\n\n function getYearView(events, currentDay, cellModifier) {\n\n var view = [];\n var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n var month = moment(currentDay).startOf('year');\n var count = 0;\n while (count < 12) {\n var startPeriod = month.clone();\n var endPeriod = startPeriod.clone().endOf('month');\n var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n var cell = {\n label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n isToday: startPeriod.isSame(moment().startOf('month')),\n events: periodEvents,\n date: startPeriod,\n badgeTotal: getBadgeTotal(periodEvents)\n };\n\n cellModifier({calendarCell: cell});\n view.push(cell);\n month.add(1, 'month');\n count++;\n }\n\n return view;\n\n }\n\n function getMonthView(events, currentDay, cellModifier) {\n\n var startOfMonth = moment(currentDay).startOf('month');\n var day = startOfMonth.clone().startOf('week');\n var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n var eventsInPeriod;\n if (calendarConfig.displayAllMonthEvents) {\n eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n } else {\n eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n }\n var view = [];\n var today = moment().startOf('day');\n\n while (day.isBefore(endOfMonthView)) {\n\n var inMonth = day.month() === moment(currentDay).month();\n var monthEvents = [];\n if (inMonth || calendarConfig.displayAllMonthEvents) {\n monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n }\n\n var cell = {\n label: day.date(),\n date: day.clone(),\n inMonth: inMonth,\n isPast: today.isAfter(day),\n isToday: today.isSame(day),\n isFuture: today.isBefore(day),\n isWeekend: [0, 6].indexOf(day.day()) > -1,\n events: monthEvents,\n badgeTotal: getBadgeTotal(monthEvents)\n };\n\n cellModifier({calendarCell: cell});\n\n view.push(cell);\n\n day.add(1, 'day');\n }\n\n return view;\n\n }\n\n function getWeekView(events, currentDay) {\n\n var startOfWeek = moment(currentDay).startOf('week');\n var endOfWeek = moment(currentDay).endOf('week');\n var dayCounter = startOfWeek.clone();\n var days = [];\n var today = moment().startOf('day');\n while (days.length < 7) {\n days.push({\n weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n date: dayCounter.clone(),\n dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n isPast: dayCounter.isBefore(today),\n isToday: dayCounter.isSame(today),\n isFuture: dayCounter.isAfter(today),\n isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n });\n dayCounter.add(1, 'day');\n }\n\n var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\n var eventStart = moment(event.startsAt).startOf('day');\n var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n var weekViewStart = moment(startOfWeek).startOf('day');\n var weekViewEnd = moment(endOfWeek).startOf('day');\n var offset, span;\n\n if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n offset = 0;\n } else {\n offset = eventStart.diff(weekViewStart, 'days');\n }\n\n if (eventEnd.isAfter(weekViewEnd)) {\n eventEnd = weekViewEnd;\n }\n\n if (eventStart.isBefore(weekViewStart)) {\n eventStart = weekViewStart;\n }\n\n span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\n event.daySpan = span;\n event.dayOffset = offset;\n\n return event;\n });\n\n return {days: days, events: eventsSorted};\n\n }\n\n function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\n var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n var hourHeight = (60 / dayViewSplit) * 30;\n var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n var hourHeightMultiplier = hourHeight / 60;\n var buckets = [];\n var eventsInPeriod = filterEventsInPeriod(\n events,\n moment(currentDay).startOf('day').toDate(),\n moment(currentDay).endOf('day').toDate()\n );\n\n return eventsInPeriod.map(function(event) {\n if (moment(event.startsAt).isBefore(calendarStart)) {\n event.top = 0;\n } else {\n event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n }\n\n if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n event.height = calendarHeight - event.top;\n } else {\n var diffStart = event.startsAt;\n if (moment(event.startsAt).isBefore(calendarStart)) {\n diffStart = calendarStart.toDate();\n }\n if (!event.endsAt) {\n event.height = 30;\n } else {\n event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n }\n }\n\n if (event.top - event.height > calendarHeight) {\n event.height = 0;\n }\n\n event.left = 0;\n\n return event;\n }).filter(function(event) {\n return event.height > 0;\n }).map(function(event) {\n\n var cannotFitInABucket = true;\n buckets.forEach(function(bucket, bucketIndex) {\n var canFitInThisBucket = true;\n\n bucket.forEach(function(bucketItem) {\n if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n canFitInThisBucket = false;\n }\n });\n\n if (canFitInThisBucket && cannotFitInABucket) {\n cannotFitInABucket = false;\n event.left = bucketIndex * 150;\n buckets[bucketIndex].push(event);\n }\n\n });\n\n if (cannotFitInABucket) {\n event.left = buckets.length * 150;\n buckets.push([event]);\n }\n\n return event;\n\n });\n\n }\n\n function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n var weekView = getWeekView(events, currentDay);\n var newEvents = [];\n weekView.days.forEach(function(day) {\n var dayEvents = weekView.events.filter(function(event) {\n return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n });\n var newDayEvents = getDayView(\n dayEvents,\n day.date,\n dayViewStart,\n dayViewEnd,\n dayViewSplit\n );\n newEvents = newEvents.concat(newDayEvents);\n });\n weekView.events = newEvents;\n return weekView;\n }\n\n function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n var hourHeight = (60 / dayViewSplit) * 30;\n return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n }\n\n return {\n getWeekDayNames: getWeekDayNames,\n getYearView: getYearView,\n getMonthView: getMonthView,\n getWeekView: getWeekView,\n getDayView: getDayView,\n getWeekViewWithTimes: getWeekViewWithTimes,\n getDayViewHeight: getDayViewHeight,\n adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n formatDate: formatDate,\n eventIsInPeriod: eventIsInPeriod //expose for testing only\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarHelper.js\n ** module id = 24\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .factory('calendarTitle', function(moment, calendarConfig, calendarHelper) {\n\n function day(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n }\n\n function week(currentDay) {\n var weekTitleLabel = calendarConfig.titleFormats.week;\n return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n }\n\n function month(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n }\n\n function year(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n }\n\n return {\n day: day,\n week: week,\n month: month,\n year: year\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarTitle.js\n ** module id = 25\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\nvar interact;\ntry {\n interact = require('interact.js');\n} catch (e) {\n interact = null;\n}\n\nangular\n .module('mwl.calendar')\n .constant('interact', interact);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/interact.js\n ** module id = 26\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\nvar moment = require('moment');\n\nangular\n .module('mwl.calendar')\n .constant('moment', moment);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/moment.js\n ** module id = 28\n ** module chunks = 0\n **/","angular.module(\"mwl.calendar\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"src/templates/calendar.html\",\"
The value passed to the view attribute of the calendar is not set
The value passed to current-day attribute of the calendar is not set
\");\n$templateCache.put(\"src/templates/calendarDayView.html\",\"
,
\");\n$templateCache.put(\"src/templates/calendarHourList.html\",\"
\");\n$templateCache.put(\"src/templates/calendarMonthDay.html\",\"
0\\\" ng-bind=\\\"day.badgeTotal\\\">
0\\\">
\");\n$templateCache.put(\"src/templates/calendarMonthEventsList.html\",\"
0\\\">
\");\n$templateCache.put(\"src/templates/calendarMonthView.html\",\"
0}\\\">
0\\\" events=\\\"vm.view[vm.openDayIndex].events\\\" on-event-click=\\\"onEventClick\\\" edit-event-html=\\\"editEventHtml\\\" on-edit-event-click=\\\"onEditEventClick\\\" delete-event-html=\\\"deleteEventHtml\\\" on-delete-event-click=\\\"onDeleteEventClick\\\">
\");\n$templateCache.put(\"src/templates/calendarSlideBox.html\",\"
\");\n$templateCache.put(\"src/templates/calendarWeekView.html\",\"

\");\n$templateCache.put(\"src/templates/calendarYearView.html\",\"
0, \\'cal-day-today\\': month.isToday}\\\" mwl-droppable on-drop=\\\"vm.handleEventDrop(dropData.event, month.date)\\\"> 0\\\" ng-bind=\\\"month.badgeTotal\\\">
0\\\">
0\\\" events=\\\"vm.view[vm.openMonthIndex].events\\\" on-event-click=\\\"onEventClick\\\" edit-event-html=\\\"editEventHtml\\\" on-edit-event-click=\\\"onEditEventClick\\\" delete-event-html=\\\"deleteEventHtml\\\" on-delete-event-click=\\\"onDeleteEventClick\\\">
\");}]);"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/js/angular-bootstrap-calendar.js b/dist/js/angular-bootstrap-calendar.js index aab490fc..6fce11bc 100644 --- a/dist/js/angular-bootstrap-calendar.js +++ b/dist/js/angular-bootstrap-calendar.js @@ -1,6 +1,6 @@ /** * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day - * @version v0.11.3 + * @version v0.12.0 * @link https://github.com/mattlewis92/angular-bootstrap-calendar * @license MIT */ diff --git a/dist/js/angular-bootstrap-calendar.min.js b/dist/js/angular-bootstrap-calendar.min.js index 13e7a13c..664a8966 100644 --- a/dist/js/angular-bootstrap-calendar.min.js +++ b/dist/js/angular-bootstrap-calendar.min.js @@ -1,6 +1,6 @@ /** * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day - * @version v0.11.3 + * @version v0.12.0 * @link https://github.com/mattlewis92/angular-bootstrap-calendar * @license MIT */ diff --git a/dist/js/angular-bootstrap-calendar.min.js.map b/dist/js/angular-bootstrap-calendar.min.js.map index d8ee712d..e1be6c43 100644 --- a/dist/js/angular-bootstrap-calendar.min.js.map +++ b/dist/js/angular-bootstrap-calendar.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["angular-bootstrap-calendar.js","webpack:/webpack/bootstrap f9365143e6b9940e60b4","calendar.js","webpack:/index.js","webpack:/src/directives \\.js$","webpack:/src/directives/mwlCalendar.js","webpack:/src/directives/mwlCalendarDay.js","webpack:/src/directives/mwlCalendarHourList.js","webpack:/src/directives/mwlCalendarMonth.js","webpack:/src/directives/mwlCalendarSlideBox.js","webpack:/src/directives/mwlCalendarWeek.js","webpack:/src/directives/mwlCalendarYear.js","webpack:/src/directives/mwlCollapseFallback.js","webpack:/src/directives/mwlDateModifier.js","webpack:/src/directives/mwlDraggable.js","webpack:/src/directives/mwlDroppable.js","webpack:/src/directives/mwlElementDimensions.js","webpack:/src/directives/mwlResizable.js","webpack:/src/filters \\.js$","webpack:/src/filters/calendarDate.js","webpack:/src/filters/calendarLimitTo.js","webpack:/src/filters/calendarTruncateEventTitle.js","webpack:/src/services \\.js$","webpack:/src/services/calendarConfig.js","webpack:/src/services/calendarDebounce.js","webpack:/src/services/calendarHelper.js","webpack:/src/services/calendarTitle.js","webpack:/src/services/interact.js","webpack:/src/services/moment.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","requireAll","r","keys","forEach","angular","MODULE_NAME","webpackContext","req","webpackContextResolve","map","Error","./mwlCalendar.js","./mwlCalendarDay.js","./mwlCalendarHourList.js","./mwlCalendarMonth.js","./mwlCalendarSlideBox.js","./mwlCalendarWeek.js","./mwlCalendarYear.js","./mwlCollapseFallback.js","./mwlDateModifier.js","./mwlDraggable.js","./mwlDroppable.js","./mwlElementDimensions.js","./mwlResizable.js","Object","resolve","controller","$scope","$timeout","$window","$locale","moment","calendarTitle","calendarDebounce","vm","this","events","changeView","view","newDay","currentDay","drillDown","date","rawDate","toDate","nextView","year","month","week","onDrillDownClick","calendarDate","calendarNextView","previousDate","previousView","copy","refreshCalendar","viewTitle","event","index","defineProperty","enumerable","value","currentDate","shouldUpdate","clone","startOf","isSame","$broadcast","unbindLocaleWatcher","$watch","locale","unbindOnDestroy","push","unbindDestroyListener","$on","unbind","directive","templateUrl","restrict","scope","editEventHtml","deleteEventHtml","autoOpen","onEventClick","onEventTimesChanged","onEditEventClick","onDeleteEventClick","onTimespanClick","cellModifier","dayViewStart","dayViewEnd","dayViewSplit","$sce","calendarHelper","calendarConfig","unbindListener","dayViewHeight","getDayViewHeight","getDayView","eventDragComplete","minuteChunksMoved","minutesDiff","newStart","startsAt","add","newEnd","endsAt","tempStartsAt","calendarEvent","calendarNewEventStart","calendarNewEventEnd","eventDragged","eventResizeComplete","edge","start","end","eventResized","require","updateDays","parseInt","hours","dayCounter","i","diff","label","formatDate","dateFormats","hour","originalLocale","firstRun","weekDays","getWeekDayNames","getMonthView","rows","Math","floor","length","monthOffsets","day","inMonth","dayClicked","dayClickedFirstRun","openRowIndex","dayIndex","indexOf","openDayIndex","highlightEvent","shouldAddClass","highlightClass","dayContainsEvent","type","handleEventDrop","newDayDate","adjustEndDateFromStartDiff","link","element","attrs","calendarCtrl","unbindWatcher","isOpen","shouldCollapse","unbindDestroy","replace","elm","ctrls","isMonthView","isYearView","showTimes","showTimesOnWeekView","getWeekViewWithTimes","getWeekView","weekDragged","daysDiff","weekResized","tempTimeChanged","getYearView","monthClicked","monthClickedFirstRun","monthIndex","openMonthIndex","newMonthDate","$attrs","$element","mwlCollapseFallback","addClass","removeClass","$injector","has","onClick","isDefined","setToToday","Date","increment","decrement","subtract","$apply","bind","$parse","interact","translateElement","transformValue","css","canDrag","mwlDraggable","getUnitsMoved","x","y","gridDimensions","result","snap","snapGridDimensions","snapGrid","targets","createSnapGrid","draggable","onstart","target","dropData","style","pointerEvents","onDragStart","onmove","parseFloat","attr","dx","dy","axis","getComputedStyle","position","onDrag","onend","onDragEnd","removeAttr","unset","dropzone","ondragenter","ondragleave","ondropdeactivate","ondrop","relatedTarget","onDrop","mwlElementDimensions","assign","width","offsetWidth","height","offsetHeight","canResize","mwlResizable","getUnitsResized","unitsResized","data","originalDimensions","round","resizeEdge","originalDimensionsStyle","resizable","edges","resizeEdges","rect","deltaRect","left","top","onResize","transform","onResizeEnd","./calendarDate.js","./calendarLimitTo.js","./calendarTruncateEventTitle.js","filter","format","getFromConfig","$stateful","limitToFilter","version","minor","input","limit","begin","abs","Number","Infinity","isNaN","isNumber","toString","isArray","isString","slice","max","string","boxHeight","substr","./calendarConfig.js","./calendarDebounce.js","./calendarHelper.js","./calendarTitle.js","./interact.js","./moment.js","provider","defaultFormats","weekDay","time","datetime","title","dateFormatter","defaultDateFormats","defaultTitleFormats","i18nStrings","eventsLabel","timeLabel","displayAllMonthEvents","configProvider","setDateFormats","formats","extend","setTitleFormats","setI18nStrings","strings","setDisplayAllMonthEvents","setDateFormatter","$get","titleFormats","service","debounce","func","wait","immediate","timeout","later","apply","context","args","arguments","callNow","cancel","factory","dateFilter","oldStart","oldEnd","diffInSeconds","eventIsInPeriod","periodStart","periodEnd","eventStart","eventEnd","recursOn","set","isAfter","isBefore","filterEventsInPeriod","startPeriod","endPeriod","getEventsInPeriod","period","allEvents","endOf","getBadgeTotal","incrementsBadgeTotal","weekdays","count","weekday","eventsInPeriod","periodEvents","cell","isToday","badgeTotal","calendarCell","startOfMonth","endOfMonthView","today","monthEvents","isPast","isFuture","isWeekend","startOfWeek","endOfWeek","days","weekDayLabel","dayLabel","eventsSorted","offset","span","weekViewStart","weekViewEnd","daySpan","dayOffset","dayStartHour","dayEndHour","hourHeight","calendarStart","calendarEnd","calendarHeight","hourHeightMultiplier","buckets","diffStart","cannotFitInABucket","bucket","bucketIndex","canFitInThisBucket","bucketItem","weekView","newEvents","dayEvents","newDayEvents","concat","dayViewStartM","dayViewEndM","weekTitleLabel","e","constant","code"],"mappings":"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","file":"angular-bootstrap-calendar.min.js","sourcesContent":["/**\n * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day\n * @version v0.11.3\n * @link https://github.com/mattlewis92/angular-bootstrap-calendar\n * @license MIT\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tfunction requireAll(r) {\n\t r.keys().forEach(r);\n\t}\n\t\n\tmodule.exports = __webpack_require__(1);\n\t\n\trequireAll(__webpack_require__(3));\n\trequireAll(__webpack_require__(17));\n\trequireAll(__webpack_require__(21));\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar MODULE_NAME = 'mwl.calendar';\n\t\n\tangular.module(MODULE_NAME, []);\n\t\n\tmodule.exports = MODULE_NAME;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = angular;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./mwlCalendar.js\": 4,\n\t\t\"./mwlCalendarDay.js\": 5,\n\t\t\"./mwlCalendarHourList.js\": 6,\n\t\t\"./mwlCalendarMonth.js\": 7,\n\t\t\"./mwlCalendarSlideBox.js\": 8,\n\t\t\"./mwlCalendarWeek.js\": 9,\n\t\t\"./mwlCalendarYear.js\": 10,\n\t\t\"./mwlCollapseFallback.js\": 11,\n\t\t\"./mwlDateModifier.js\": 12,\n\t\t\"./mwlDraggable.js\": 13,\n\t\t\"./mwlDroppable.js\": 14,\n\t\t\"./mwlElementDimensions.js\": 15,\n\t\t\"./mwlResizable.js\": 16\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 3;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarCtrl', [\"$scope\", \"$timeout\", \"$window\", \"$locale\", \"moment\", \"calendarTitle\", \"calendarDebounce\", function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\t\n\t var vm = this;\n\t\n\t $scope.events = $scope.events || [];\n\t\n\t vm.changeView = function(view, newDay) {\n\t $scope.view = view;\n\t $scope.currentDay = newDay;\n\t };\n\t\n\t vm.drillDown = function(date) {\n\t\n\t var rawDate = moment(date).toDate();\n\t\n\t var nextView = {\n\t year: 'month',\n\t month: 'day',\n\t week: 'day'\n\t };\n\t\n\t if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n\t vm.changeView(nextView[$scope.view], rawDate);\n\t }\n\t\n\t };\n\t\n\t var previousDate = moment($scope.currentDay);\n\t var previousView = angular.copy($scope.view);\n\t\n\t //Use a debounce to prevent it being called 3 times on initialisation\n\t var refreshCalendar = calendarDebounce(function() {\n\t if (calendarTitle[$scope.view]) {\n\t $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n\t }\n\t\n\t $scope.events = $scope.events.map(function(event, index) {\n\t Object.defineProperty(event, '$id', {enumerable: false, value: index});\n\t return event;\n\t });\n\t\n\t //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n\t var currentDate = moment($scope.currentDay);\n\t var shouldUpdate = true;\n\t if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n\t $scope.view === previousView) {\n\t shouldUpdate = false;\n\t }\n\t previousDate = currentDate;\n\t previousView = angular.copy($scope.view);\n\t\n\t if (shouldUpdate) {\n\t $scope.$broadcast('calendar.refreshView');\n\t }\n\t }, 50);\n\t\n\t //Auto update the calendar when the locale changes\n\t var unbindLocaleWatcher = $scope.$watch(function() {\n\t return moment.locale() + $locale.id;\n\t }, refreshCalendar);\n\t\n\t var unbindOnDestroy = [];\n\t unbindOnDestroy.push(unbindLocaleWatcher);\n\t\n\t //Refresh the calendar when any of these variables change.\n\t /* eslint-disable angular/ng_on_watch */\n\t unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n\t /* eslint-enable angular/ng_on_watch */\n\t\n\t //Remove any watchers when the calendar is destroyed\n\t var unbindDestroyListener = $scope.$on('$destroy', function() {\n\t unbindOnDestroy.forEach(function(unbind) {\n\t unbind();\n\t });\n\t });\n\t unbindOnDestroy.push(unbindDestroyListener);\n\t\n\t }])\n\t .directive('mwlCalendar', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendar.html',\n\t restrict: 'EA',\n\t scope: {\n\t events: '=',\n\t view: '=',\n\t viewTitle: '=',\n\t currentDay: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onEventClick: '&',\n\t onEventTimesChanged: '&',\n\t onEditEventClick: '&',\n\t onDeleteEventClick: '&',\n\t onTimespanClick: '&',\n\t onDrillDownClick: '&',\n\t cellModifier: '&',\n\t dayViewStart: '@',\n\t dayViewEnd: '@',\n\t dayViewSplit: '@'\n\t },\n\t controller: 'MwlCalendarCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarDayCtrl', [\"$scope\", \"$timeout\", \"$sce\", \"moment\", \"calendarHelper\", \"calendarConfig\", function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.calendarConfig = calendarConfig;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t vm.view = calendarHelper.getDayView(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.eventDragComplete = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n\t var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.eventDragged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(minutesDiff, 'minutes');\n\t } else {\n\t end.add(minutesDiff, 'minutes');\n\t }\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t };\n\t\n\t vm.eventResized = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t if (edge === 'start') {\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t }\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarDay', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarDayView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarDayCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarHourListCtrl', [\"$scope\", \"moment\", \"calendarConfig\", \"calendarHelper\", function($scope, moment, calendarConfig, calendarHelper) {\n\t var vm = this;\n\t var dayViewStart, dayViewEnd;\n\t\n\t function updateDays() {\n\t dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n\t dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n\t vm.dayViewSplit = parseInt($scope.dayViewSplit);\n\t vm.hours = [];\n\t var dayCounter = moment(dayViewStart);\n\t for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n\t vm.hours.push({\n\t label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n\t });\n\t dayCounter.add(1, 'hour');\n\t }\n\t }\n\t\n\t var originalLocale = moment.locale();\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t if (originalLocale !== moment.locale()) {\n\t originalLocale = moment.locale();\n\t updateDays();\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t updateDays();\n\t\n\t }])\n\t .directive('mwlCalendarHourList', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarHourList.html',\n\t controller: 'MwlCalendarHourListCtrl as vm',\n\t scope: {\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarMonthCtrl', [\"$scope\", \"moment\", \"calendarHelper\", function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t vm.weekDays = calendarHelper.getWeekDayNames();\n\t\n\t vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t var rows = Math.floor(vm.view.length / 7);\n\t vm.monthOffsets = [];\n\t for (var i = 0; i < rows; i++) {\n\t vm.monthOffsets.push(i * 7);\n\t }\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(day) {\n\t if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n\t vm.dayClicked(day, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.dayClicked = function(day, dayClickedFirstRun) {\n\t\n\t if (!dayClickedFirstRun) {\n\t $scope.onTimespanClick({\n\t calendarDate: day.date.toDate()\n\t });\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var dayIndex = vm.view.indexOf(day);\n\t if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n\t vm.openDayIndex = null; //close the open day\n\t } else {\n\t vm.openDayIndex = dayIndex;\n\t vm.openRowIndex = Math.floor(dayIndex / 7);\n\t }\n\t\n\t };\n\t\n\t vm.highlightEvent = function(event, shouldAddClass) {\n\t\n\t vm.view.forEach(function(day) {\n\t delete day.highlightClass;\n\t if (shouldAddClass) {\n\t var dayContainsEvent = day.events.indexOf(event) > -1;\n\t if (dayContainsEvent) {\n\t day.highlightClass = 'day-highlight dh-event-' + event.type;\n\t }\n\t }\n\t });\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newDayDate) {\n\t\n\t var newStart = moment(event.startsAt)\n\t .date(moment(newDayDate).date())\n\t .month(moment(newDayDate).month());\n\t\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newDayDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarMonth', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarMonthView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t onEventTimesChanged: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarMonthCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarSlideBoxCtrl', [\"$scope\", \"$sce\", function($scope, $sce) {\n\t\n\t var vm = this;\n\t vm.$sce = $sce;\n\t\n\t var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n\t vm.shouldCollapse = !isOpen;\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t }])\n\t .directive('mwlCalendarSlideBox', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarSlideBox.html',\n\t replace: true,\n\t controller: 'MwlCalendarSlideBoxCtrl as vm',\n\t require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n\t link: function(scope, elm, attrs, ctrls) {\n\t scope.isMonthView = !!ctrls[0];\n\t scope.isYearView = !!ctrls[1];\n\t },\n\t scope: {\n\t isOpen: '=',\n\t events: '=',\n\t onEventClick: '=',\n\t editEventHtml: '=',\n\t onEditEventClick: '=',\n\t deleteEventHtml: '=',\n\t onDeleteEventClick: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarWeekCtrl', [\"$scope\", \"$sce\", \"moment\", \"calendarHelper\", \"calendarConfig\", function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.showTimes = calendarConfig.showTimesOnWeekView;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t if (vm.showTimes) {\n\t vm.view = calendarHelper.getWeekViewWithTimes(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t } else {\n\t vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n\t }\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\t\n\t var newStart = moment(event.startsAt).add(daysDiff, 'days');\n\t var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\t\n\t if (minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t newStart = newStart.add(minutesDiff, 'minutes');\n\t newEnd = newEnd.add(minutesDiff, 'minutes');\n\t }\n\t\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.weekResized = function(event, edge, daysDiff) {\n\t\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(daysDiff, 'days');\n\t } else {\n\t end.add(daysDiff, 'days');\n\t }\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t\n\t };\n\t\n\t vm.tempTimeChanged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarWeek', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarWeekView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarWeekCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarYearCtrl', [\"$scope\", \"moment\", \"calendarHelper\", function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(month) {\n\t if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n\t vm.monthClicked(month, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.monthClicked = function(month, monthClickedFirstRun) {\n\t\n\t if (!monthClickedFirstRun) {\n\t $scope.onTimespanClick({calendarDate: month.date.toDate()});\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var monthIndex = vm.view.indexOf(month);\n\t if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n\t vm.openMonthIndex = null; //close the open month\n\t } else {\n\t vm.openMonthIndex = monthIndex;\n\t vm.openRowIndex = Math.floor(monthIndex / 4);\n\t }\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newMonthDate) {\n\t var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newMonthDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarYear', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarYearView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarYearCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCollapseFallbackCtrl', [\"$scope\", \"$attrs\", \"$element\", function($scope, $attrs, $element) {\n\t var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n\t if (shouldCollapse) {\n\t $element.addClass('ng-hide');\n\t } else {\n\t $element.removeClass('ng-hide');\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t }])\n\t .directive('mwlCollapseFallback', [\"$injector\", function($injector) {\n\t\n\t if ($injector.has('collapseDirective')) {\n\t return {};\n\t }\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlCollapseFallbackCtrl'\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDateModifierCtrl', [\"$element\", \"$attrs\", \"$scope\", \"moment\", function($element, $attrs, $scope, moment) {\n\t\n\t function onClick() {\n\t if (angular.isDefined($attrs.setToToday)) {\n\t $scope.date = new Date();\n\t } else if (angular.isDefined($attrs.increment)) {\n\t $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n\t } else if (angular.isDefined($attrs.decrement)) {\n\t $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n\t }\n\t $scope.$apply();\n\t }\n\t\n\t $element.bind('click', onClick);\n\t\n\t $scope.$on('$destroy', function() {\n\t $element.unbind('click', onClick);\n\t });\n\t\n\t }])\n\t .directive('mwlDateModifier', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDateModifierCtrl',\n\t scope: {\n\t date: '=',\n\t increment: '=',\n\t decrement: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDraggableCtrl', [\"$element\", \"$scope\", \"$window\", \"$parse\", \"$attrs\", \"$timeout\", \"interact\", function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t function translateElement(elm, transformValue) {\n\t return elm\n\t .css('transform', transformValue)\n\t .css('-ms-transform', transformValue)\n\t .css('-webkit-transform', transformValue);\n\t }\n\t\n\t function canDrag() {\n\t return $parse($attrs.mwlDraggable)($scope);\n\t }\n\t\n\t function getUnitsMoved(x, y, gridDimensions) {\n\t\n\t var result = {x: x, y: y};\n\t\n\t if (gridDimensions && gridDimensions.x) {\n\t result.x /= gridDimensions.x;\n\t }\n\t\n\t if (gridDimensions && gridDimensions.y) {\n\t result.y /= gridDimensions.y;\n\t }\n\t\n\t return result;\n\t\n\t }\n\t\n\t interact($element[0]).draggable({\n\t snap: snap,\n\t onstart: function(event) {\n\t if (canDrag()) {\n\t angular.element(event.target).addClass('dragging-active');\n\t event.target.dropData = $parse($attrs.dropData)($scope);\n\t event.target.style.pointerEvents = 'none';\n\t if ($attrs.onDragStart) {\n\t $parse($attrs.onDragStart)($scope);\n\t $scope.$apply();\n\t }\n\t }\n\t },\n\t onmove: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n\t var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\t\n\t switch ($parse($attrs.axis)($scope)) {\n\t case 'x':\n\t y = 0;\n\t break;\n\t\n\t case 'y':\n\t x = 0;\n\t break;\n\t\n\t default:\n\t }\n\t\n\t if ($window.getComputedStyle(elm[0]).position === 'static') {\n\t elm.css('position', 'relative');\n\t }\n\t\n\t translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n\t .css('z-index', 1000)\n\t .attr('data-x', x)\n\t .attr('data-y', y);\n\t\n\t if ($attrs.onDrag) {\n\t $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = elm.attr('data-x');\n\t var y = elm.attr('data-y');\n\t\n\t event.target.style.pointerEvents = 'auto';\n\t if ($attrs.onDragEnd) {\n\t $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t $timeout(function() {\n\t translateElement(elm, null)\n\t .removeAttr('data-x')\n\t .removeAttr('data-y')\n\t .removeClass('dragging-active');\n\t }, 50);\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlDraggable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDraggableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDroppableCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", \"interact\", function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t interact($element[0]).dropzone({\n\t ondragenter: function(event) {\n\t angular.element(event.target).addClass('drop-active');\n\t },\n\t ondragleave: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondropdeactivate: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondrop: function(event) {\n\t if (event.relatedTarget.dropData) {\n\t $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n\t $scope.$apply();\n\t }\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlDroppable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDroppableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlElementDimensionsCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", function($element, $scope, $parse, $attrs) {\n\t\n\t $parse($attrs.mwlElementDimensions).assign($scope, {\n\t width: $element[0].offsetWidth,\n\t height: $element[0].offsetHeight\n\t });\n\t\n\t }])\n\t .directive('mwlElementDimensions', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlElementDimensionsCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlResizableCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", \"interact\", function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t var originalDimensions = {};\n\t var originalDimensionsStyle = {};\n\t var resizeEdge;\n\t\n\t function canResize() {\n\t return $parse($attrs.mwlResizable)($scope);\n\t }\n\t\n\t function getUnitsResized(edge, elm, gridDimensions) {\n\t var unitsResized = {};\n\t unitsResized.edge = edge;\n\t if (edge === 'start') {\n\t unitsResized.x = elm.data('x');\n\t unitsResized.y = elm.data('y');\n\t } else if (edge === 'end') {\n\t unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n\t unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n\t }\n\t if (gridDimensions && gridDimensions.x) {\n\t unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n\t }\n\t if (gridDimensions && gridDimensions.y) {\n\t unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n\t }\n\t return unitsResized;\n\t }\n\t\n\t interact($element[0]).resizable({\n\t edges: $parse($attrs.resizeEdges)($scope),\n\t snap: snap,\n\t onstart: function(event) {\n\t\n\t if (canResize()) {\n\t resizeEdge = 'end';\n\t var elm = angular.element(event.target);\n\t originalDimensions.height = elm[0].offsetHeight;\n\t originalDimensions.width = elm[0].offsetWidth;\n\t originalDimensionsStyle.height = elm.css('height');\n\t originalDimensionsStyle.width = elm.css('width');\n\t }\n\t\n\t },\n\t onmove: function(event) {\n\t\n\t if (canResize()) {\n\t var elm = angular.element(event.target);\n\t var x = parseFloat(elm.data('x') || 0);\n\t var y = parseFloat(elm.data('y') || 0);\n\t\n\t elm.css({\n\t width: event.rect.width + 'px',\n\t height: event.rect.height + 'px'\n\t });\n\t\n\t // translate when resizing from top or left edges\n\t x += event.deltaRect.left;\n\t y += event.deltaRect.top;\n\t\n\t elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\t\n\t elm.data('x', x);\n\t elm.data('y', y);\n\t\n\t if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n\t resizeEdge = 'start';\n\t }\n\t\n\t if ($attrs.onResize) {\n\t $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canResize()) {\n\t\n\t var elm = angular.element(event.target);\n\t var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\t\n\t elm\n\t .data('x', null)\n\t .data('y', null)\n\t .css({\n\t transform: null,\n\t width: originalDimensionsStyle.width,\n\t height: originalDimensionsStyle.height\n\t });\n\t\n\t if ($attrs.onResizeEnd) {\n\t $parse($attrs.onResizeEnd)($scope, unitsResized);\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlResizable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlResizableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarDate.js\": 18,\n\t\t\"./calendarLimitTo.js\": 19,\n\t\t\"./calendarTruncateEventTitle.js\": 20\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 17;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarDate', [\"calendarHelper\", \"calendarConfig\", function(calendarHelper, calendarConfig) {\n\t\n\t function calendarDate(date, format, getFromConfig) {\n\t\n\t if (getFromConfig === true) {\n\t format = calendarConfig.dateFormats[format];\n\t }\n\t\n\t return calendarHelper.formatDate(date, format);\n\t\n\t }\n\t\n\t calendarDate.$stateful = true;\n\t\n\t return calendarDate;\n\t\n\t }]);\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarLimitTo', [\"limitToFilter\", function(limitToFilter) {\n\t\n\t if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n\t return limitToFilter;\n\t }\n\t\n\t //Copied from the angular source. Only 1.4 has the begin functionality.\n\t return function(input, limit, begin) {\n\t if (Math.abs(Number(limit)) === Infinity) {\n\t limit = Number(limit);\n\t } else {\n\t limit = parseInt(limit);\n\t }\n\t if (isNaN(limit)) {\n\t return input;\n\t }\n\t\n\t if (angular.isNumber(input)) {\n\t input = input.toString();\n\t }\n\t if (!angular.isArray(input) && !angular.isString(input)) {\n\t return input;\n\t }\n\t\n\t begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n\t begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\t\n\t if (limit >= 0) {\n\t return input.slice(begin, begin + limit);\n\t } else if (begin === 0) {\n\t return input.slice(limit, input.length);\n\t } else {\n\t return input.slice(Math.max(0, begin + limit), begin);\n\t }\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarTruncateEventTitle', function() {\n\t\n\t return function(string, length, boxHeight) {\n\t if (!string) {\n\t return '';\n\t }\n\t\n\t //Only truncate if if actually needs truncating\n\t if (string.length >= length && string.length / 20 > boxHeight / 30) {\n\t return string.substr(0, length) + '...';\n\t } else {\n\t return string;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarConfig.js\": 22,\n\t\t\"./calendarDebounce.js\": 23,\n\t\t\"./calendarHelper.js\": 24,\n\t\t\"./calendarTitle.js\": 25,\n\t\t\"./interact.js\": 26,\n\t\t\"./moment.js\": 28\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 21;\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .provider('calendarConfig', function() {\n\t\n\t var defaultFormats = {\n\t angular: {\n\t date: {\n\t hour: 'ha',\n\t day: 'd MMM',\n\t month: 'MMMM',\n\t weekDay: 'EEEE',\n\t time: 'HH:mm',\n\t datetime: 'MMM d, h:mm a'\n\t },\n\t title: {\n\t day: 'EEEE d MMMM, yyyy',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM yyyy',\n\t year: 'yyyy'\n\t }\n\t },\n\t moment: {\n\t date: {\n\t hour: 'ha',\n\t day: 'D MMM',\n\t month: 'MMMM',\n\t weekDay: 'dddd',\n\t time: 'HH:mm',\n\t datetime: 'MMM D, h:mm a'\n\t },\n\t title: {\n\t day: 'dddd D MMMM, YYYY',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM YYYY',\n\t year: 'YYYY'\n\t }\n\t }\n\t };\n\t\n\t var dateFormatter = 'angular';\n\t var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t var showTimesOnWeekView = false;\n\t\n\t var i18nStrings = {\n\t eventsLabel: 'Events',\n\t timeLabel: 'Time'\n\t };\n\t\n\t var displayAllMonthEvents = false;\n\t\n\t var configProvider = this;\n\t\n\t configProvider.setDateFormats = function(formats) {\n\t angular.extend(defaultDateFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setTitleFormats = function(formats) {\n\t angular.extend(defaultTitleFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setI18nStrings = function(strings) {\n\t angular.extend(i18nStrings, strings);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDisplayAllMonthEvents = function(value) {\n\t displayAllMonthEvents = value;\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDateFormatter = function(value) {\n\t if (['angular', 'moment'].indexOf(value) === -1) {\n\t throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n\t }\n\t dateFormatter = value;\n\t defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t return configProvider;\n\t };\n\t\n\t configProvider.showTimesOnWeekView = function(value) {\n\t showTimesOnWeekView = value; //experimental, and ignores the event end date\n\t return configProvider;\n\t };\n\t\n\t configProvider.$get = function() {\n\t return {\n\t dateFormats: defaultDateFormats,\n\t titleFormats: defaultTitleFormats,\n\t i18nStrings: i18nStrings,\n\t displayAllMonthEvents: displayAllMonthEvents,\n\t dateFormatter: dateFormatter,\n\t showTimesOnWeekView: showTimesOnWeekView\n\t };\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .service('calendarDebounce', [\"$timeout\", function($timeout) {\n\t\n\t function debounce(func, wait, immediate) {\n\t var timeout;\n\t return function() {\n\t var context = this, args = arguments;\n\t function later() {\n\t timeout = null;\n\t if (!immediate) {\n\t func.apply(context, args);\n\t }\n\t }\n\t var callNow = immediate && !timeout;\n\t $timeout.cancel(timeout);\n\t timeout = $timeout(later, wait);\n\t if (callNow) {\n\t func.apply(context, args);\n\t }\n\t };\n\t }\n\t\n\t return debounce;\n\t\n\t }]);\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarHelper', [\"dateFilter\", \"moment\", \"calendarConfig\", function(dateFilter, moment, calendarConfig) {\n\t\n\t function formatDate(date, format) {\n\t if (calendarConfig.dateFormatter === 'angular') {\n\t return dateFilter(moment(date).toDate(), format);\n\t } else if (calendarConfig.dateFormatter === 'moment') {\n\t return moment(date).format(format);\n\t }\n\t }\n\t\n\t function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n\t if (!oldEnd) {\n\t return oldEnd;\n\t }\n\t var diffInSeconds = moment(newStart).diff(moment(oldStart));\n\t return moment(oldEnd).add(diffInSeconds);\n\t }\n\t\n\t function eventIsInPeriod(event, periodStart, periodEnd) {\n\t\n\t var eventStart = moment(event.startsAt);\n\t var eventEnd = moment(event.endsAt || event.startsAt);\n\t periodStart = moment(periodStart);\n\t periodEnd = moment(periodEnd);\n\t\n\t if (angular.isDefined(event.recursOn)) {\n\t\n\t switch (event.recursOn) {\n\t case 'year':\n\t eventStart.set({\n\t year: periodStart.year()\n\t });\n\t break;\n\t\n\t case 'month':\n\t eventStart.set({\n\t year: periodStart.year(),\n\t month: periodStart.month()\n\t });\n\t break;\n\t\n\t default:\n\t throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n\t }\n\t\n\t eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\t\n\t }\n\t\n\t return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n\t (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n\t (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n\t eventStart.isSame(periodStart) ||\n\t eventEnd.isSame(periodEnd);\n\t\n\t }\n\t\n\t function filterEventsInPeriod(events, startPeriod, endPeriod) {\n\t return events.filter(function(event) {\n\t return eventIsInPeriod(event, startPeriod, endPeriod);\n\t });\n\t }\n\t\n\t function getEventsInPeriod(calendarDate, period, allEvents) {\n\t var startPeriod = moment(calendarDate).startOf(period);\n\t var endPeriod = moment(calendarDate).endOf(period);\n\t return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n\t }\n\t\n\t function getBadgeTotal(events) {\n\t return events.filter(function(event) {\n\t return event.incrementsBadgeTotal !== false;\n\t }).length;\n\t }\n\t\n\t function getWeekDayNames() {\n\t var weekdays = [];\n\t var count = 0;\n\t while (count < 7) {\n\t weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n\t }\n\t return weekdays;\n\t }\n\t\n\t function getYearView(events, currentDay, cellModifier) {\n\t\n\t var view = [];\n\t var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n\t var month = moment(currentDay).startOf('year');\n\t var count = 0;\n\t while (count < 12) {\n\t var startPeriod = month.clone();\n\t var endPeriod = startPeriod.clone().endOf('month');\n\t var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n\t var cell = {\n\t label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n\t isToday: startPeriod.isSame(moment().startOf('month')),\n\t events: periodEvents,\n\t date: startPeriod,\n\t badgeTotal: getBadgeTotal(periodEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t view.push(cell);\n\t month.add(1, 'month');\n\t count++;\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getMonthView(events, currentDay, cellModifier) {\n\t\n\t var startOfMonth = moment(currentDay).startOf('month');\n\t var day = startOfMonth.clone().startOf('week');\n\t var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n\t var eventsInPeriod;\n\t if (calendarConfig.displayAllMonthEvents) {\n\t eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n\t } else {\n\t eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n\t }\n\t var view = [];\n\t var today = moment().startOf('day');\n\t\n\t while (day.isBefore(endOfMonthView)) {\n\t\n\t var inMonth = day.month() === moment(currentDay).month();\n\t var monthEvents = [];\n\t if (inMonth || calendarConfig.displayAllMonthEvents) {\n\t monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n\t }\n\t\n\t var cell = {\n\t label: day.date(),\n\t date: day.clone(),\n\t inMonth: inMonth,\n\t isPast: today.isAfter(day),\n\t isToday: today.isSame(day),\n\t isFuture: today.isBefore(day),\n\t isWeekend: [0, 6].indexOf(day.day()) > -1,\n\t events: monthEvents,\n\t badgeTotal: getBadgeTotal(monthEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t\n\t view.push(cell);\n\t\n\t day.add(1, 'day');\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getWeekView(events, currentDay) {\n\t\n\t var startOfWeek = moment(currentDay).startOf('week');\n\t var endOfWeek = moment(currentDay).endOf('week');\n\t var dayCounter = startOfWeek.clone();\n\t var days = [];\n\t var today = moment().startOf('day');\n\t while (days.length < 7) {\n\t days.push({\n\t weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n\t date: dayCounter.clone(),\n\t dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n\t isPast: dayCounter.isBefore(today),\n\t isToday: dayCounter.isSame(today),\n\t isFuture: dayCounter.isAfter(today),\n\t isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n\t });\n\t dayCounter.add(1, 'day');\n\t }\n\t\n\t var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\t\n\t var eventStart = moment(event.startsAt).startOf('day');\n\t var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n\t var weekViewStart = moment(startOfWeek).startOf('day');\n\t var weekViewEnd = moment(endOfWeek).startOf('day');\n\t var offset, span;\n\t\n\t if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n\t offset = 0;\n\t } else {\n\t offset = eventStart.diff(weekViewStart, 'days');\n\t }\n\t\n\t if (eventEnd.isAfter(weekViewEnd)) {\n\t eventEnd = weekViewEnd;\n\t }\n\t\n\t if (eventStart.isBefore(weekViewStart)) {\n\t eventStart = weekViewStart;\n\t }\n\t\n\t span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\t\n\t event.daySpan = span;\n\t event.dayOffset = offset;\n\t\n\t return event;\n\t });\n\t\n\t return {days: days, events: eventsSorted};\n\t\n\t }\n\t\n\t function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t\n\t var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n\t var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n\t var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n\t var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n\t var hourHeightMultiplier = hourHeight / 60;\n\t var buckets = [];\n\t var eventsInPeriod = filterEventsInPeriod(\n\t events,\n\t moment(currentDay).startOf('day').toDate(),\n\t moment(currentDay).endOf('day').toDate()\n\t );\n\t\n\t return eventsInPeriod.map(function(event) {\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t event.top = 0;\n\t } else {\n\t event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n\t }\n\t\n\t if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n\t event.height = calendarHeight - event.top;\n\t } else {\n\t var diffStart = event.startsAt;\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t diffStart = calendarStart.toDate();\n\t }\n\t if (!event.endsAt) {\n\t event.height = 30;\n\t } else {\n\t event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n\t }\n\t }\n\t\n\t if (event.top - event.height > calendarHeight) {\n\t event.height = 0;\n\t }\n\t\n\t event.left = 0;\n\t\n\t return event;\n\t }).filter(function(event) {\n\t return event.height > 0;\n\t }).map(function(event) {\n\t\n\t var cannotFitInABucket = true;\n\t buckets.forEach(function(bucket, bucketIndex) {\n\t var canFitInThisBucket = true;\n\t\n\t bucket.forEach(function(bucketItem) {\n\t if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n\t eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n\t canFitInThisBucket = false;\n\t }\n\t });\n\t\n\t if (canFitInThisBucket && cannotFitInABucket) {\n\t cannotFitInABucket = false;\n\t event.left = bucketIndex * 150;\n\t buckets[bucketIndex].push(event);\n\t }\n\t\n\t });\n\t\n\t if (cannotFitInABucket) {\n\t event.left = buckets.length * 150;\n\t buckets.push([event]);\n\t }\n\t\n\t return event;\n\t\n\t });\n\t\n\t }\n\t\n\t function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t var weekView = getWeekView(events, currentDay);\n\t var newEvents = [];\n\t weekView.days.forEach(function(day) {\n\t var dayEvents = weekView.events.filter(function(event) {\n\t return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n\t });\n\t var newDayEvents = getDayView(\n\t dayEvents,\n\t day.date,\n\t dayViewStart,\n\t dayViewEnd,\n\t dayViewSplit\n\t );\n\t newEvents = newEvents.concat(newDayEvents);\n\t });\n\t weekView.events = newEvents;\n\t return weekView;\n\t }\n\t\n\t function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n\t var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n\t var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n\t }\n\t\n\t return {\n\t getWeekDayNames: getWeekDayNames,\n\t getYearView: getYearView,\n\t getMonthView: getMonthView,\n\t getWeekView: getWeekView,\n\t getDayView: getDayView,\n\t getWeekViewWithTimes: getWeekViewWithTimes,\n\t getDayViewHeight: getDayViewHeight,\n\t adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n\t formatDate: formatDate,\n\t eventIsInPeriod: eventIsInPeriod //expose for testing only\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarTitle', [\"moment\", \"calendarConfig\", \"calendarHelper\", function(moment, calendarConfig, calendarHelper) {\n\t\n\t function day(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n\t }\n\t\n\t function week(currentDay) {\n\t var weekTitleLabel = calendarConfig.titleFormats.week;\n\t return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n\t }\n\t\n\t function month(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n\t }\n\t\n\t function year(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n\t }\n\t\n\t return {\n\t day: day,\n\t week: week,\n\t month: month,\n\t year: year\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar interact;\n\ttry {\n\t interact = __webpack_require__(27);\n\t} catch (e) {\n\t interact = null;\n\t}\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('interact', interact);\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\tif(typeof interact === 'undefined') {var e = new Error(\"Cannot find module \\\"interact\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\n\tmodule.exports = interact;\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar moment = __webpack_require__(29);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('moment', moment);\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\tmodule.exports = moment;\n\n/***/ }\n/******/ ]);\n"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap f9365143e6b9940e60b4\n **/","/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tfunction requireAll(r) {\n\t r.keys().forEach(r);\n\t}\n\t\n\tmodule.exports = __webpack_require__(1);\n\t\n\trequireAll(__webpack_require__(3));\n\trequireAll(__webpack_require__(17));\n\trequireAll(__webpack_require__(21));\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar MODULE_NAME = 'mwl.calendar';\n\t\n\tangular.module(MODULE_NAME, []);\n\t\n\tmodule.exports = MODULE_NAME;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = angular;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./mwlCalendar.js\": 4,\n\t\t\"./mwlCalendarDay.js\": 5,\n\t\t\"./mwlCalendarHourList.js\": 6,\n\t\t\"./mwlCalendarMonth.js\": 7,\n\t\t\"./mwlCalendarSlideBox.js\": 8,\n\t\t\"./mwlCalendarWeek.js\": 9,\n\t\t\"./mwlCalendarYear.js\": 10,\n\t\t\"./mwlCollapseFallback.js\": 11,\n\t\t\"./mwlDateModifier.js\": 12,\n\t\t\"./mwlDraggable.js\": 13,\n\t\t\"./mwlDroppable.js\": 14,\n\t\t\"./mwlElementDimensions.js\": 15,\n\t\t\"./mwlResizable.js\": 16\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 3;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarCtrl', function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\t\n\t var vm = this;\n\t\n\t $scope.events = $scope.events || [];\n\t\n\t vm.changeView = function(view, newDay) {\n\t $scope.view = view;\n\t $scope.currentDay = newDay;\n\t };\n\t\n\t vm.drillDown = function(date) {\n\t\n\t var rawDate = moment(date).toDate();\n\t\n\t var nextView = {\n\t year: 'month',\n\t month: 'day',\n\t week: 'day'\n\t };\n\t\n\t if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n\t vm.changeView(nextView[$scope.view], rawDate);\n\t }\n\t\n\t };\n\t\n\t var previousDate = moment($scope.currentDay);\n\t var previousView = angular.copy($scope.view);\n\t\n\t //Use a debounce to prevent it being called 3 times on initialisation\n\t var refreshCalendar = calendarDebounce(function() {\n\t if (calendarTitle[$scope.view]) {\n\t $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n\t }\n\t\n\t $scope.events = $scope.events.map(function(event, index) {\n\t Object.defineProperty(event, '$id', {enumerable: false, value: index});\n\t return event;\n\t });\n\t\n\t //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n\t var currentDate = moment($scope.currentDay);\n\t var shouldUpdate = true;\n\t if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n\t $scope.view === previousView) {\n\t shouldUpdate = false;\n\t }\n\t previousDate = currentDate;\n\t previousView = angular.copy($scope.view);\n\t\n\t if (shouldUpdate) {\n\t $scope.$broadcast('calendar.refreshView');\n\t }\n\t }, 50);\n\t\n\t //Auto update the calendar when the locale changes\n\t var unbindLocaleWatcher = $scope.$watch(function() {\n\t return moment.locale() + $locale.id;\n\t }, refreshCalendar);\n\t\n\t var unbindOnDestroy = [];\n\t unbindOnDestroy.push(unbindLocaleWatcher);\n\t\n\t //Refresh the calendar when any of these variables change.\n\t /* eslint-disable angular/ng_on_watch */\n\t unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n\t /* eslint-enable angular/ng_on_watch */\n\t\n\t //Remove any watchers when the calendar is destroyed\n\t var unbindDestroyListener = $scope.$on('$destroy', function() {\n\t unbindOnDestroy.forEach(function(unbind) {\n\t unbind();\n\t });\n\t });\n\t unbindOnDestroy.push(unbindDestroyListener);\n\t\n\t })\n\t .directive('mwlCalendar', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendar.html',\n\t restrict: 'EA',\n\t scope: {\n\t events: '=',\n\t view: '=',\n\t viewTitle: '=',\n\t currentDay: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onEventClick: '&',\n\t onEventTimesChanged: '&',\n\t onEditEventClick: '&',\n\t onDeleteEventClick: '&',\n\t onTimespanClick: '&',\n\t onDrillDownClick: '&',\n\t cellModifier: '&',\n\t dayViewStart: '@',\n\t dayViewEnd: '@',\n\t dayViewSplit: '@'\n\t },\n\t controller: 'MwlCalendarCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarDayCtrl', function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.calendarConfig = calendarConfig;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t vm.view = calendarHelper.getDayView(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.eventDragComplete = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n\t var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.eventDragged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(minutesDiff, 'minutes');\n\t } else {\n\t end.add(minutesDiff, 'minutes');\n\t }\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t };\n\t\n\t vm.eventResized = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t if (edge === 'start') {\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t }\n\t };\n\t\n\t })\n\t .directive('mwlCalendarDay', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarDayView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarDayCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarHourListCtrl', function($scope, moment, calendarConfig, calendarHelper) {\n\t var vm = this;\n\t var dayViewStart, dayViewEnd;\n\t\n\t function updateDays() {\n\t dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n\t dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n\t vm.dayViewSplit = parseInt($scope.dayViewSplit);\n\t vm.hours = [];\n\t var dayCounter = moment(dayViewStart);\n\t for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n\t vm.hours.push({\n\t label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n\t });\n\t dayCounter.add(1, 'hour');\n\t }\n\t }\n\t\n\t var originalLocale = moment.locale();\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t if (originalLocale !== moment.locale()) {\n\t originalLocale = moment.locale();\n\t updateDays();\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t updateDays();\n\t\n\t })\n\t .directive('mwlCalendarHourList', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarHourList.html',\n\t controller: 'MwlCalendarHourListCtrl as vm',\n\t scope: {\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarMonthCtrl', function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t vm.weekDays = calendarHelper.getWeekDayNames();\n\t\n\t vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t var rows = Math.floor(vm.view.length / 7);\n\t vm.monthOffsets = [];\n\t for (var i = 0; i < rows; i++) {\n\t vm.monthOffsets.push(i * 7);\n\t }\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(day) {\n\t if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n\t vm.dayClicked(day, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.dayClicked = function(day, dayClickedFirstRun) {\n\t\n\t if (!dayClickedFirstRun) {\n\t $scope.onTimespanClick({\n\t calendarDate: day.date.toDate()\n\t });\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var dayIndex = vm.view.indexOf(day);\n\t if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n\t vm.openDayIndex = null; //close the open day\n\t } else {\n\t vm.openDayIndex = dayIndex;\n\t vm.openRowIndex = Math.floor(dayIndex / 7);\n\t }\n\t\n\t };\n\t\n\t vm.highlightEvent = function(event, shouldAddClass) {\n\t\n\t vm.view.forEach(function(day) {\n\t delete day.highlightClass;\n\t if (shouldAddClass) {\n\t var dayContainsEvent = day.events.indexOf(event) > -1;\n\t if (dayContainsEvent) {\n\t day.highlightClass = 'day-highlight dh-event-' + event.type;\n\t }\n\t }\n\t });\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newDayDate) {\n\t\n\t var newStart = moment(event.startsAt)\n\t .date(moment(newDayDate).date())\n\t .month(moment(newDayDate).month());\n\t\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newDayDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t })\n\t .directive('mwlCalendarMonth', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarMonthView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t onEventTimesChanged: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarMonthCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarSlideBoxCtrl', function($scope, $sce) {\n\t\n\t var vm = this;\n\t vm.$sce = $sce;\n\t\n\t var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n\t vm.shouldCollapse = !isOpen;\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t })\n\t .directive('mwlCalendarSlideBox', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarSlideBox.html',\n\t replace: true,\n\t controller: 'MwlCalendarSlideBoxCtrl as vm',\n\t require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n\t link: function(scope, elm, attrs, ctrls) {\n\t scope.isMonthView = !!ctrls[0];\n\t scope.isYearView = !!ctrls[1];\n\t },\n\t scope: {\n\t isOpen: '=',\n\t events: '=',\n\t onEventClick: '=',\n\t editEventHtml: '=',\n\t onEditEventClick: '=',\n\t deleteEventHtml: '=',\n\t onDeleteEventClick: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarWeekCtrl', function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.showTimes = calendarConfig.showTimesOnWeekView;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t if (vm.showTimes) {\n\t vm.view = calendarHelper.getWeekViewWithTimes(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t } else {\n\t vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n\t }\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\t\n\t var newStart = moment(event.startsAt).add(daysDiff, 'days');\n\t var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\t\n\t if (minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t newStart = newStart.add(minutesDiff, 'minutes');\n\t newEnd = newEnd.add(minutesDiff, 'minutes');\n\t }\n\t\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.weekResized = function(event, edge, daysDiff) {\n\t\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(daysDiff, 'days');\n\t } else {\n\t end.add(daysDiff, 'days');\n\t }\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t\n\t };\n\t\n\t vm.tempTimeChanged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t })\n\t .directive('mwlCalendarWeek', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarWeekView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarWeekCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarYearCtrl', function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(month) {\n\t if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n\t vm.monthClicked(month, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.monthClicked = function(month, monthClickedFirstRun) {\n\t\n\t if (!monthClickedFirstRun) {\n\t $scope.onTimespanClick({calendarDate: month.date.toDate()});\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var monthIndex = vm.view.indexOf(month);\n\t if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n\t vm.openMonthIndex = null; //close the open month\n\t } else {\n\t vm.openMonthIndex = monthIndex;\n\t vm.openRowIndex = Math.floor(monthIndex / 4);\n\t }\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newMonthDate) {\n\t var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newMonthDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t })\n\t .directive('mwlCalendarYear', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarYearView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarYearCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCollapseFallbackCtrl', function($scope, $attrs, $element) {\n\t var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n\t if (shouldCollapse) {\n\t $element.addClass('ng-hide');\n\t } else {\n\t $element.removeClass('ng-hide');\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t })\n\t .directive('mwlCollapseFallback', function($injector) {\n\t\n\t if ($injector.has('collapseDirective')) {\n\t return {};\n\t }\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlCollapseFallbackCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDateModifierCtrl', function($element, $attrs, $scope, moment) {\n\t\n\t function onClick() {\n\t if (angular.isDefined($attrs.setToToday)) {\n\t $scope.date = new Date();\n\t } else if (angular.isDefined($attrs.increment)) {\n\t $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n\t } else if (angular.isDefined($attrs.decrement)) {\n\t $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n\t }\n\t $scope.$apply();\n\t }\n\t\n\t $element.bind('click', onClick);\n\t\n\t $scope.$on('$destroy', function() {\n\t $element.unbind('click', onClick);\n\t });\n\t\n\t })\n\t .directive('mwlDateModifier', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDateModifierCtrl',\n\t scope: {\n\t date: '=',\n\t increment: '=',\n\t decrement: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDraggableCtrl', function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t function translateElement(elm, transformValue) {\n\t return elm\n\t .css('transform', transformValue)\n\t .css('-ms-transform', transformValue)\n\t .css('-webkit-transform', transformValue);\n\t }\n\t\n\t function canDrag() {\n\t return $parse($attrs.mwlDraggable)($scope);\n\t }\n\t\n\t function getUnitsMoved(x, y, gridDimensions) {\n\t\n\t var result = {x: x, y: y};\n\t\n\t if (gridDimensions && gridDimensions.x) {\n\t result.x /= gridDimensions.x;\n\t }\n\t\n\t if (gridDimensions && gridDimensions.y) {\n\t result.y /= gridDimensions.y;\n\t }\n\t\n\t return result;\n\t\n\t }\n\t\n\t interact($element[0]).draggable({\n\t snap: snap,\n\t onstart: function(event) {\n\t if (canDrag()) {\n\t angular.element(event.target).addClass('dragging-active');\n\t event.target.dropData = $parse($attrs.dropData)($scope);\n\t event.target.style.pointerEvents = 'none';\n\t if ($attrs.onDragStart) {\n\t $parse($attrs.onDragStart)($scope);\n\t $scope.$apply();\n\t }\n\t }\n\t },\n\t onmove: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n\t var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\t\n\t switch ($parse($attrs.axis)($scope)) {\n\t case 'x':\n\t y = 0;\n\t break;\n\t\n\t case 'y':\n\t x = 0;\n\t break;\n\t\n\t default:\n\t }\n\t\n\t if ($window.getComputedStyle(elm[0]).position === 'static') {\n\t elm.css('position', 'relative');\n\t }\n\t\n\t translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n\t .css('z-index', 1000)\n\t .attr('data-x', x)\n\t .attr('data-y', y);\n\t\n\t if ($attrs.onDrag) {\n\t $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = elm.attr('data-x');\n\t var y = elm.attr('data-y');\n\t\n\t event.target.style.pointerEvents = 'auto';\n\t if ($attrs.onDragEnd) {\n\t $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t $timeout(function() {\n\t translateElement(elm, null)\n\t .removeAttr('data-x')\n\t .removeAttr('data-y')\n\t .removeClass('dragging-active');\n\t }, 50);\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlDraggable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDraggableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDroppableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t interact($element[0]).dropzone({\n\t ondragenter: function(event) {\n\t angular.element(event.target).addClass('drop-active');\n\t },\n\t ondragleave: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondropdeactivate: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondrop: function(event) {\n\t if (event.relatedTarget.dropData) {\n\t $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n\t $scope.$apply();\n\t }\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlDroppable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDroppableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlElementDimensionsCtrl', function($element, $scope, $parse, $attrs) {\n\t\n\t $parse($attrs.mwlElementDimensions).assign($scope, {\n\t width: $element[0].offsetWidth,\n\t height: $element[0].offsetHeight\n\t });\n\t\n\t })\n\t .directive('mwlElementDimensions', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlElementDimensionsCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlResizableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t var originalDimensions = {};\n\t var originalDimensionsStyle = {};\n\t var resizeEdge;\n\t\n\t function canResize() {\n\t return $parse($attrs.mwlResizable)($scope);\n\t }\n\t\n\t function getUnitsResized(edge, elm, gridDimensions) {\n\t var unitsResized = {};\n\t unitsResized.edge = edge;\n\t if (edge === 'start') {\n\t unitsResized.x = elm.data('x');\n\t unitsResized.y = elm.data('y');\n\t } else if (edge === 'end') {\n\t unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n\t unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n\t }\n\t if (gridDimensions && gridDimensions.x) {\n\t unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n\t }\n\t if (gridDimensions && gridDimensions.y) {\n\t unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n\t }\n\t return unitsResized;\n\t }\n\t\n\t interact($element[0]).resizable({\n\t edges: $parse($attrs.resizeEdges)($scope),\n\t snap: snap,\n\t onstart: function(event) {\n\t\n\t if (canResize()) {\n\t resizeEdge = 'end';\n\t var elm = angular.element(event.target);\n\t originalDimensions.height = elm[0].offsetHeight;\n\t originalDimensions.width = elm[0].offsetWidth;\n\t originalDimensionsStyle.height = elm.css('height');\n\t originalDimensionsStyle.width = elm.css('width');\n\t }\n\t\n\t },\n\t onmove: function(event) {\n\t\n\t if (canResize()) {\n\t var elm = angular.element(event.target);\n\t var x = parseFloat(elm.data('x') || 0);\n\t var y = parseFloat(elm.data('y') || 0);\n\t\n\t elm.css({\n\t width: event.rect.width + 'px',\n\t height: event.rect.height + 'px'\n\t });\n\t\n\t // translate when resizing from top or left edges\n\t x += event.deltaRect.left;\n\t y += event.deltaRect.top;\n\t\n\t elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\t\n\t elm.data('x', x);\n\t elm.data('y', y);\n\t\n\t if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n\t resizeEdge = 'start';\n\t }\n\t\n\t if ($attrs.onResize) {\n\t $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canResize()) {\n\t\n\t var elm = angular.element(event.target);\n\t var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\t\n\t elm\n\t .data('x', null)\n\t .data('y', null)\n\t .css({\n\t transform: null,\n\t width: originalDimensionsStyle.width,\n\t height: originalDimensionsStyle.height\n\t });\n\t\n\t if ($attrs.onResizeEnd) {\n\t $parse($attrs.onResizeEnd)($scope, unitsResized);\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlResizable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlResizableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarDate.js\": 18,\n\t\t\"./calendarLimitTo.js\": 19,\n\t\t\"./calendarTruncateEventTitle.js\": 20\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 17;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarDate', function(calendarHelper, calendarConfig) {\n\t\n\t function calendarDate(date, format, getFromConfig) {\n\t\n\t if (getFromConfig === true) {\n\t format = calendarConfig.dateFormats[format];\n\t }\n\t\n\t return calendarHelper.formatDate(date, format);\n\t\n\t }\n\t\n\t calendarDate.$stateful = true;\n\t\n\t return calendarDate;\n\t\n\t });\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarLimitTo', function(limitToFilter) {\n\t\n\t if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n\t return limitToFilter;\n\t }\n\t\n\t //Copied from the angular source. Only 1.4 has the begin functionality.\n\t return function(input, limit, begin) {\n\t if (Math.abs(Number(limit)) === Infinity) {\n\t limit = Number(limit);\n\t } else {\n\t limit = parseInt(limit);\n\t }\n\t if (isNaN(limit)) {\n\t return input;\n\t }\n\t\n\t if (angular.isNumber(input)) {\n\t input = input.toString();\n\t }\n\t if (!angular.isArray(input) && !angular.isString(input)) {\n\t return input;\n\t }\n\t\n\t begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n\t begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\t\n\t if (limit >= 0) {\n\t return input.slice(begin, begin + limit);\n\t } else if (begin === 0) {\n\t return input.slice(limit, input.length);\n\t } else {\n\t return input.slice(Math.max(0, begin + limit), begin);\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarTruncateEventTitle', function() {\n\t\n\t return function(string, length, boxHeight) {\n\t if (!string) {\n\t return '';\n\t }\n\t\n\t //Only truncate if if actually needs truncating\n\t if (string.length >= length && string.length / 20 > boxHeight / 30) {\n\t return string.substr(0, length) + '...';\n\t } else {\n\t return string;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarConfig.js\": 22,\n\t\t\"./calendarDebounce.js\": 23,\n\t\t\"./calendarHelper.js\": 24,\n\t\t\"./calendarTitle.js\": 25,\n\t\t\"./interact.js\": 26,\n\t\t\"./moment.js\": 28\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 21;\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .provider('calendarConfig', function() {\n\t\n\t var defaultFormats = {\n\t angular: {\n\t date: {\n\t hour: 'ha',\n\t day: 'd MMM',\n\t month: 'MMMM',\n\t weekDay: 'EEEE',\n\t time: 'HH:mm',\n\t datetime: 'MMM d, h:mm a'\n\t },\n\t title: {\n\t day: 'EEEE d MMMM, yyyy',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM yyyy',\n\t year: 'yyyy'\n\t }\n\t },\n\t moment: {\n\t date: {\n\t hour: 'ha',\n\t day: 'D MMM',\n\t month: 'MMMM',\n\t weekDay: 'dddd',\n\t time: 'HH:mm',\n\t datetime: 'MMM D, h:mm a'\n\t },\n\t title: {\n\t day: 'dddd D MMMM, YYYY',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM YYYY',\n\t year: 'YYYY'\n\t }\n\t }\n\t };\n\t\n\t var dateFormatter = 'angular';\n\t var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t var showTimesOnWeekView = false;\n\t\n\t var i18nStrings = {\n\t eventsLabel: 'Events',\n\t timeLabel: 'Time'\n\t };\n\t\n\t var displayAllMonthEvents = false;\n\t\n\t var configProvider = this;\n\t\n\t configProvider.setDateFormats = function(formats) {\n\t angular.extend(defaultDateFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setTitleFormats = function(formats) {\n\t angular.extend(defaultTitleFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setI18nStrings = function(strings) {\n\t angular.extend(i18nStrings, strings);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDisplayAllMonthEvents = function(value) {\n\t displayAllMonthEvents = value;\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDateFormatter = function(value) {\n\t if (['angular', 'moment'].indexOf(value) === -1) {\n\t throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n\t }\n\t dateFormatter = value;\n\t defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t return configProvider;\n\t };\n\t\n\t configProvider.showTimesOnWeekView = function(value) {\n\t showTimesOnWeekView = value; //experimental, and ignores the event end date\n\t return configProvider;\n\t };\n\t\n\t configProvider.$get = function() {\n\t return {\n\t dateFormats: defaultDateFormats,\n\t titleFormats: defaultTitleFormats,\n\t i18nStrings: i18nStrings,\n\t displayAllMonthEvents: displayAllMonthEvents,\n\t dateFormatter: dateFormatter,\n\t showTimesOnWeekView: showTimesOnWeekView\n\t };\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .service('calendarDebounce', function($timeout) {\n\t\n\t function debounce(func, wait, immediate) {\n\t var timeout;\n\t return function() {\n\t var context = this, args = arguments;\n\t function later() {\n\t timeout = null;\n\t if (!immediate) {\n\t func.apply(context, args);\n\t }\n\t }\n\t var callNow = immediate && !timeout;\n\t $timeout.cancel(timeout);\n\t timeout = $timeout(later, wait);\n\t if (callNow) {\n\t func.apply(context, args);\n\t }\n\t };\n\t }\n\t\n\t return debounce;\n\t\n\t });\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarHelper', function(dateFilter, moment, calendarConfig) {\n\t\n\t function formatDate(date, format) {\n\t if (calendarConfig.dateFormatter === 'angular') {\n\t return dateFilter(moment(date).toDate(), format);\n\t } else if (calendarConfig.dateFormatter === 'moment') {\n\t return moment(date).format(format);\n\t }\n\t }\n\t\n\t function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n\t if (!oldEnd) {\n\t return oldEnd;\n\t }\n\t var diffInSeconds = moment(newStart).diff(moment(oldStart));\n\t return moment(oldEnd).add(diffInSeconds);\n\t }\n\t\n\t function eventIsInPeriod(event, periodStart, periodEnd) {\n\t\n\t var eventStart = moment(event.startsAt);\n\t var eventEnd = moment(event.endsAt || event.startsAt);\n\t periodStart = moment(periodStart);\n\t periodEnd = moment(periodEnd);\n\t\n\t if (angular.isDefined(event.recursOn)) {\n\t\n\t switch (event.recursOn) {\n\t case 'year':\n\t eventStart.set({\n\t year: periodStart.year()\n\t });\n\t break;\n\t\n\t case 'month':\n\t eventStart.set({\n\t year: periodStart.year(),\n\t month: periodStart.month()\n\t });\n\t break;\n\t\n\t default:\n\t throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n\t }\n\t\n\t eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\t\n\t }\n\t\n\t return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n\t (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n\t (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n\t eventStart.isSame(periodStart) ||\n\t eventEnd.isSame(periodEnd);\n\t\n\t }\n\t\n\t function filterEventsInPeriod(events, startPeriod, endPeriod) {\n\t return events.filter(function(event) {\n\t return eventIsInPeriod(event, startPeriod, endPeriod);\n\t });\n\t }\n\t\n\t function getEventsInPeriod(calendarDate, period, allEvents) {\n\t var startPeriod = moment(calendarDate).startOf(period);\n\t var endPeriod = moment(calendarDate).endOf(period);\n\t return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n\t }\n\t\n\t function getBadgeTotal(events) {\n\t return events.filter(function(event) {\n\t return event.incrementsBadgeTotal !== false;\n\t }).length;\n\t }\n\t\n\t function getWeekDayNames() {\n\t var weekdays = [];\n\t var count = 0;\n\t while (count < 7) {\n\t weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n\t }\n\t return weekdays;\n\t }\n\t\n\t function getYearView(events, currentDay, cellModifier) {\n\t\n\t var view = [];\n\t var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n\t var month = moment(currentDay).startOf('year');\n\t var count = 0;\n\t while (count < 12) {\n\t var startPeriod = month.clone();\n\t var endPeriod = startPeriod.clone().endOf('month');\n\t var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n\t var cell = {\n\t label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n\t isToday: startPeriod.isSame(moment().startOf('month')),\n\t events: periodEvents,\n\t date: startPeriod,\n\t badgeTotal: getBadgeTotal(periodEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t view.push(cell);\n\t month.add(1, 'month');\n\t count++;\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getMonthView(events, currentDay, cellModifier) {\n\t\n\t var startOfMonth = moment(currentDay).startOf('month');\n\t var day = startOfMonth.clone().startOf('week');\n\t var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n\t var eventsInPeriod;\n\t if (calendarConfig.displayAllMonthEvents) {\n\t eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n\t } else {\n\t eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n\t }\n\t var view = [];\n\t var today = moment().startOf('day');\n\t\n\t while (day.isBefore(endOfMonthView)) {\n\t\n\t var inMonth = day.month() === moment(currentDay).month();\n\t var monthEvents = [];\n\t if (inMonth || calendarConfig.displayAllMonthEvents) {\n\t monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n\t }\n\t\n\t var cell = {\n\t label: day.date(),\n\t date: day.clone(),\n\t inMonth: inMonth,\n\t isPast: today.isAfter(day),\n\t isToday: today.isSame(day),\n\t isFuture: today.isBefore(day),\n\t isWeekend: [0, 6].indexOf(day.day()) > -1,\n\t events: monthEvents,\n\t badgeTotal: getBadgeTotal(monthEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t\n\t view.push(cell);\n\t\n\t day.add(1, 'day');\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getWeekView(events, currentDay) {\n\t\n\t var startOfWeek = moment(currentDay).startOf('week');\n\t var endOfWeek = moment(currentDay).endOf('week');\n\t var dayCounter = startOfWeek.clone();\n\t var days = [];\n\t var today = moment().startOf('day');\n\t while (days.length < 7) {\n\t days.push({\n\t weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n\t date: dayCounter.clone(),\n\t dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n\t isPast: dayCounter.isBefore(today),\n\t isToday: dayCounter.isSame(today),\n\t isFuture: dayCounter.isAfter(today),\n\t isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n\t });\n\t dayCounter.add(1, 'day');\n\t }\n\t\n\t var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\t\n\t var eventStart = moment(event.startsAt).startOf('day');\n\t var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n\t var weekViewStart = moment(startOfWeek).startOf('day');\n\t var weekViewEnd = moment(endOfWeek).startOf('day');\n\t var offset, span;\n\t\n\t if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n\t offset = 0;\n\t } else {\n\t offset = eventStart.diff(weekViewStart, 'days');\n\t }\n\t\n\t if (eventEnd.isAfter(weekViewEnd)) {\n\t eventEnd = weekViewEnd;\n\t }\n\t\n\t if (eventStart.isBefore(weekViewStart)) {\n\t eventStart = weekViewStart;\n\t }\n\t\n\t span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\t\n\t event.daySpan = span;\n\t event.dayOffset = offset;\n\t\n\t return event;\n\t });\n\t\n\t return {days: days, events: eventsSorted};\n\t\n\t }\n\t\n\t function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t\n\t var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n\t var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n\t var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n\t var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n\t var hourHeightMultiplier = hourHeight / 60;\n\t var buckets = [];\n\t var eventsInPeriod = filterEventsInPeriod(\n\t events,\n\t moment(currentDay).startOf('day').toDate(),\n\t moment(currentDay).endOf('day').toDate()\n\t );\n\t\n\t return eventsInPeriod.map(function(event) {\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t event.top = 0;\n\t } else {\n\t event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n\t }\n\t\n\t if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n\t event.height = calendarHeight - event.top;\n\t } else {\n\t var diffStart = event.startsAt;\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t diffStart = calendarStart.toDate();\n\t }\n\t if (!event.endsAt) {\n\t event.height = 30;\n\t } else {\n\t event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n\t }\n\t }\n\t\n\t if (event.top - event.height > calendarHeight) {\n\t event.height = 0;\n\t }\n\t\n\t event.left = 0;\n\t\n\t return event;\n\t }).filter(function(event) {\n\t return event.height > 0;\n\t }).map(function(event) {\n\t\n\t var cannotFitInABucket = true;\n\t buckets.forEach(function(bucket, bucketIndex) {\n\t var canFitInThisBucket = true;\n\t\n\t bucket.forEach(function(bucketItem) {\n\t if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n\t eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n\t canFitInThisBucket = false;\n\t }\n\t });\n\t\n\t if (canFitInThisBucket && cannotFitInABucket) {\n\t cannotFitInABucket = false;\n\t event.left = bucketIndex * 150;\n\t buckets[bucketIndex].push(event);\n\t }\n\t\n\t });\n\t\n\t if (cannotFitInABucket) {\n\t event.left = buckets.length * 150;\n\t buckets.push([event]);\n\t }\n\t\n\t return event;\n\t\n\t });\n\t\n\t }\n\t\n\t function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t var weekView = getWeekView(events, currentDay);\n\t var newEvents = [];\n\t weekView.days.forEach(function(day) {\n\t var dayEvents = weekView.events.filter(function(event) {\n\t return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n\t });\n\t var newDayEvents = getDayView(\n\t dayEvents,\n\t day.date,\n\t dayViewStart,\n\t dayViewEnd,\n\t dayViewSplit\n\t );\n\t newEvents = newEvents.concat(newDayEvents);\n\t });\n\t weekView.events = newEvents;\n\t return weekView;\n\t }\n\t\n\t function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n\t var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n\t var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n\t }\n\t\n\t return {\n\t getWeekDayNames: getWeekDayNames,\n\t getYearView: getYearView,\n\t getMonthView: getMonthView,\n\t getWeekView: getWeekView,\n\t getDayView: getDayView,\n\t getWeekViewWithTimes: getWeekViewWithTimes,\n\t getDayViewHeight: getDayViewHeight,\n\t adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n\t formatDate: formatDate,\n\t eventIsInPeriod: eventIsInPeriod //expose for testing only\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarTitle', function(moment, calendarConfig, calendarHelper) {\n\t\n\t function day(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n\t }\n\t\n\t function week(currentDay) {\n\t var weekTitleLabel = calendarConfig.titleFormats.week;\n\t return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n\t }\n\t\n\t function month(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n\t }\n\t\n\t function year(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n\t }\n\t\n\t return {\n\t day: day,\n\t week: week,\n\t month: month,\n\t year: year\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar interact;\n\ttry {\n\t interact = __webpack_require__(27);\n\t} catch (e) {\n\t interact = null;\n\t}\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('interact', interact);\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\tif(typeof interact === 'undefined') {var e = new Error(\"Cannot find module \\\"interact\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\n\tmodule.exports = interact;\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar moment = __webpack_require__(29);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('moment', moment);\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\tmodule.exports = moment;\n\n/***/ }\n/******/ ]);\n","function requireAll(r) {\n r.keys().forEach(r);\n}\n\nmodule.exports = require('./src/module');\n\nrequireAll(require.context('./src/directives', true, /\\.js$/));\nrequireAll(require.context('./src/filters', true, /\\.js$/));\nrequireAll(require.context('./src/services', true, /\\.js$/));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","var map = {\n\t\"./mwlCalendar.js\": 4,\n\t\"./mwlCalendarDay.js\": 5,\n\t\"./mwlCalendarHourList.js\": 6,\n\t\"./mwlCalendarMonth.js\": 7,\n\t\"./mwlCalendarSlideBox.js\": 8,\n\t\"./mwlCalendarWeek.js\": 9,\n\t\"./mwlCalendarYear.js\": 10,\n\t\"./mwlCollapseFallback.js\": 11,\n\t\"./mwlDateModifier.js\": 12,\n\t\"./mwlDraggable.js\": 13,\n\t\"./mwlDroppable.js\": 14,\n\t\"./mwlElementDimensions.js\": 15,\n\t\"./mwlResizable.js\": 16\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 3;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives \\.js$\n ** module id = 3\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarCtrl', function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\n var vm = this;\n\n $scope.events = $scope.events || [];\n\n vm.changeView = function(view, newDay) {\n $scope.view = view;\n $scope.currentDay = newDay;\n };\n\n vm.drillDown = function(date) {\n\n var rawDate = moment(date).toDate();\n\n var nextView = {\n year: 'month',\n month: 'day',\n week: 'day'\n };\n\n if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n vm.changeView(nextView[$scope.view], rawDate);\n }\n\n };\n\n var previousDate = moment($scope.currentDay);\n var previousView = angular.copy($scope.view);\n\n //Use a debounce to prevent it being called 3 times on initialisation\n var refreshCalendar = calendarDebounce(function() {\n if (calendarTitle[$scope.view]) {\n $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n }\n\n $scope.events = $scope.events.map(function(event, index) {\n Object.defineProperty(event, '$id', {enumerable: false, value: index});\n return event;\n });\n\n //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n var currentDate = moment($scope.currentDay);\n var shouldUpdate = true;\n if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n $scope.view === previousView) {\n shouldUpdate = false;\n }\n previousDate = currentDate;\n previousView = angular.copy($scope.view);\n\n if (shouldUpdate) {\n $scope.$broadcast('calendar.refreshView');\n }\n }, 50);\n\n //Auto update the calendar when the locale changes\n var unbindLocaleWatcher = $scope.$watch(function() {\n return moment.locale() + $locale.id;\n }, refreshCalendar);\n\n var unbindOnDestroy = [];\n unbindOnDestroy.push(unbindLocaleWatcher);\n\n //Refresh the calendar when any of these variables change.\n /* eslint-disable angular/ng_on_watch */\n unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n /* eslint-enable angular/ng_on_watch */\n\n //Remove any watchers when the calendar is destroyed\n var unbindDestroyListener = $scope.$on('$destroy', function() {\n unbindOnDestroy.forEach(function(unbind) {\n unbind();\n });\n });\n unbindOnDestroy.push(unbindDestroyListener);\n\n })\n .directive('mwlCalendar', function() {\n\n return {\n templateUrl: 'src/templates/calendar.html',\n restrict: 'EA',\n scope: {\n events: '=',\n view: '=',\n viewTitle: '=',\n currentDay: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onEventClick: '&',\n onEventTimesChanged: '&',\n onEditEventClick: '&',\n onDeleteEventClick: '&',\n onTimespanClick: '&',\n onDrillDownClick: '&',\n cellModifier: '&',\n dayViewStart: '@',\n dayViewEnd: '@',\n dayViewSplit: '@'\n },\n controller: 'MwlCalendarCtrl as vm'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendar.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarDayCtrl', function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\n var vm = this;\n\n vm.calendarConfig = calendarConfig;\n vm.$sce = $sce;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.dayViewHeight = calendarHelper.getDayViewHeight(\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n\n vm.view = calendarHelper.getDayView(\n $scope.events,\n $scope.currentDay,\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.eventDragComplete = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n vm.eventDragged = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n };\n\n vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n var start = moment(event.startsAt);\n var end = moment(event.endsAt);\n if (edge === 'start') {\n start.add(minutesDiff, 'minutes');\n } else {\n end.add(minutesDiff, 'minutes');\n }\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: start.toDate(),\n calendarNewEventEnd: end.toDate()\n });\n };\n\n vm.eventResized = function(event, edge, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n if (edge === 'start') {\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n }\n };\n\n })\n .directive('mwlCalendarDay', function() {\n\n return {\n templateUrl: 'src/templates/calendarDayView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n },\n controller: 'MwlCalendarDayCtrl as vm'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarDay.js\n ** module id = 5\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarHourListCtrl', function($scope, moment, calendarConfig, calendarHelper) {\n var vm = this;\n var dayViewStart, dayViewEnd;\n\n function updateDays() {\n dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n vm.dayViewSplit = parseInt($scope.dayViewSplit);\n vm.hours = [];\n var dayCounter = moment(dayViewStart);\n for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n vm.hours.push({\n label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n });\n dayCounter.add(1, 'hour');\n }\n }\n\n var originalLocale = moment.locale();\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n\n if (originalLocale !== moment.locale()) {\n originalLocale = moment.locale();\n updateDays();\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n updateDays();\n\n })\n .directive('mwlCalendarHourList', function() {\n\n return {\n restrict: 'EA',\n templateUrl: 'src/templates/calendarHourList.html',\n controller: 'MwlCalendarHourListCtrl as vm',\n scope: {\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarHourList.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarMonthCtrl', function($scope, moment, calendarHelper) {\n\n var vm = this;\n var firstRun = true;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n\n vm.weekDays = calendarHelper.getWeekDayNames();\n\n vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n var rows = Math.floor(vm.view.length / 7);\n vm.monthOffsets = [];\n for (var i = 0; i < rows; i++) {\n vm.monthOffsets.push(i * 7);\n }\n\n //Auto open the calendar to the current day if set\n if ($scope.autoOpen && firstRun) {\n firstRun = false;\n vm.view.forEach(function(day) {\n if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n vm.dayClicked(day, true);\n }\n });\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.dayClicked = function(day, dayClickedFirstRun) {\n\n if (!dayClickedFirstRun) {\n $scope.onTimespanClick({\n calendarDate: day.date.toDate()\n });\n }\n\n vm.openRowIndex = null;\n var dayIndex = vm.view.indexOf(day);\n if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n vm.openDayIndex = null; //close the open day\n } else {\n vm.openDayIndex = dayIndex;\n vm.openRowIndex = Math.floor(dayIndex / 7);\n }\n\n };\n\n vm.highlightEvent = function(event, shouldAddClass) {\n\n vm.view.forEach(function(day) {\n delete day.highlightClass;\n if (shouldAddClass) {\n var dayContainsEvent = day.events.indexOf(event) > -1;\n if (dayContainsEvent) {\n day.highlightClass = 'day-highlight dh-event-' + event.type;\n }\n }\n });\n\n };\n\n vm.handleEventDrop = function(event, newDayDate) {\n\n var newStart = moment(event.startsAt)\n .date(moment(newDayDate).date())\n .month(moment(newDayDate).month());\n\n var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarDate: newDayDate,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n })\n .directive('mwlCalendarMonth', function() {\n\n return {\n templateUrl: 'src/templates/calendarMonthView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEditEventClick: '=',\n onDeleteEventClick: '=',\n onEventTimesChanged: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onTimespanClick: '=',\n cellModifier: '='\n },\n controller: 'MwlCalendarMonthCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarMonth.js\n ** module id = 7\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarSlideBoxCtrl', function($scope, $sce) {\n\n var vm = this;\n vm.$sce = $sce;\n\n var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n vm.shouldCollapse = !isOpen;\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n unbindWatcher();\n });\n\n })\n .directive('mwlCalendarSlideBox', function() {\n\n return {\n restrict: 'EA',\n templateUrl: 'src/templates/calendarSlideBox.html',\n replace: true,\n controller: 'MwlCalendarSlideBoxCtrl as vm',\n require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n link: function(scope, elm, attrs, ctrls) {\n scope.isMonthView = !!ctrls[0];\n scope.isYearView = !!ctrls[1];\n },\n scope: {\n isOpen: '=',\n events: '=',\n onEventClick: '=',\n editEventHtml: '=',\n onEditEventClick: '=',\n deleteEventHtml: '=',\n onDeleteEventClick: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarSlideBox.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarWeekCtrl', function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\n var vm = this;\n\n vm.showTimes = calendarConfig.showTimesOnWeekView;\n vm.$sce = $sce;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.dayViewHeight = calendarHelper.getDayViewHeight(\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n if (vm.showTimes) {\n vm.view = calendarHelper.getWeekViewWithTimes(\n $scope.events,\n $scope.currentDay,\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n } else {\n vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n }\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\n var newStart = moment(event.startsAt).add(daysDiff, 'days');\n var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\n if (minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n newStart = newStart.add(minutesDiff, 'minutes');\n newEnd = newEnd.add(minutesDiff, 'minutes');\n }\n\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n vm.weekResized = function(event, edge, daysDiff) {\n\n var start = moment(event.startsAt);\n var end = moment(event.endsAt);\n if (edge === 'start') {\n start.add(daysDiff, 'days');\n } else {\n end.add(daysDiff, 'days');\n }\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: start.toDate(),\n calendarNewEventEnd: end.toDate()\n });\n\n };\n\n vm.tempTimeChanged = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n };\n\n })\n .directive('mwlCalendarWeek', function() {\n\n return {\n templateUrl: 'src/templates/calendarWeekView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n },\n controller: 'MwlCalendarWeekCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarWeek.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarYearCtrl', function($scope, moment, calendarHelper) {\n\n var vm = this;\n var firstRun = true;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\n //Auto open the calendar to the current day if set\n if ($scope.autoOpen && firstRun) {\n firstRun = false;\n vm.view.forEach(function(month) {\n if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n vm.monthClicked(month, true);\n }\n });\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.monthClicked = function(month, monthClickedFirstRun) {\n\n if (!monthClickedFirstRun) {\n $scope.onTimespanClick({calendarDate: month.date.toDate()});\n }\n\n vm.openRowIndex = null;\n var monthIndex = vm.view.indexOf(month);\n if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n vm.openMonthIndex = null; //close the open month\n } else {\n vm.openMonthIndex = monthIndex;\n vm.openRowIndex = Math.floor(monthIndex / 4);\n }\n\n };\n\n vm.handleEventDrop = function(event, newMonthDate) {\n var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarDate: newMonthDate,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n })\n .directive('mwlCalendarYear', function() {\n\n return {\n templateUrl: 'src/templates/calendarYearView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n onEditEventClick: '=',\n onDeleteEventClick: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onTimespanClick: '=',\n cellModifier: '='\n },\n controller: 'MwlCalendarYearCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarYear.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCollapseFallbackCtrl', function($scope, $attrs, $element) {\n var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n if (shouldCollapse) {\n $element.addClass('ng-hide');\n } else {\n $element.removeClass('ng-hide');\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n unbindWatcher();\n });\n\n })\n .directive('mwlCollapseFallback', function($injector) {\n\n if ($injector.has('collapseDirective')) {\n return {};\n }\n\n return {\n restrict: 'A',\n controller: 'MwlCollapseFallbackCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCollapseFallback.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDateModifierCtrl', function($element, $attrs, $scope, moment) {\n\n function onClick() {\n if (angular.isDefined($attrs.setToToday)) {\n $scope.date = new Date();\n } else if (angular.isDefined($attrs.increment)) {\n $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n } else if (angular.isDefined($attrs.decrement)) {\n $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n }\n $scope.$apply();\n }\n\n $element.bind('click', onClick);\n\n $scope.$on('$destroy', function() {\n $element.unbind('click', onClick);\n });\n\n })\n .directive('mwlDateModifier', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDateModifierCtrl',\n scope: {\n date: '=',\n increment: '=',\n decrement: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDateModifier.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDraggableCtrl', function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\n if (!interact) {\n return;\n }\n\n var snap, snapGridDimensions;\n if ($attrs.snapGrid) {\n snapGridDimensions = $parse($attrs.snapGrid)($scope);\n snap = {\n targets: [\n interact.createSnapGrid(snapGridDimensions)\n ]\n };\n }\n\n function translateElement(elm, transformValue) {\n return elm\n .css('transform', transformValue)\n .css('-ms-transform', transformValue)\n .css('-webkit-transform', transformValue);\n }\n\n function canDrag() {\n return $parse($attrs.mwlDraggable)($scope);\n }\n\n function getUnitsMoved(x, y, gridDimensions) {\n\n var result = {x: x, y: y};\n\n if (gridDimensions && gridDimensions.x) {\n result.x /= gridDimensions.x;\n }\n\n if (gridDimensions && gridDimensions.y) {\n result.y /= gridDimensions.y;\n }\n\n return result;\n\n }\n\n interact($element[0]).draggable({\n snap: snap,\n onstart: function(event) {\n if (canDrag()) {\n angular.element(event.target).addClass('dragging-active');\n event.target.dropData = $parse($attrs.dropData)($scope);\n event.target.style.pointerEvents = 'none';\n if ($attrs.onDragStart) {\n $parse($attrs.onDragStart)($scope);\n $scope.$apply();\n }\n }\n },\n onmove: function(event) {\n\n if (canDrag()) {\n var elm = angular.element(event.target);\n var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\n switch ($parse($attrs.axis)($scope)) {\n case 'x':\n y = 0;\n break;\n\n case 'y':\n x = 0;\n break;\n\n default:\n }\n\n if ($window.getComputedStyle(elm[0]).position === 'static') {\n elm.css('position', 'relative');\n }\n\n translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n .css('z-index', 1000)\n .attr('data-x', x)\n .attr('data-y', y);\n\n if ($attrs.onDrag) {\n $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n $scope.$apply();\n }\n }\n\n },\n onend: function(event) {\n\n if (canDrag()) {\n var elm = angular.element(event.target);\n var x = elm.attr('data-x');\n var y = elm.attr('data-y');\n\n event.target.style.pointerEvents = 'auto';\n if ($attrs.onDragEnd) {\n $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n $scope.$apply();\n }\n\n $timeout(function() {\n translateElement(elm, null)\n .removeAttr('data-x')\n .removeAttr('data-y')\n .removeClass('dragging-active');\n }, 50);\n }\n\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlDraggable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDraggableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDraggable.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDroppableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\n if (!interact) {\n return;\n }\n\n interact($element[0]).dropzone({\n ondragenter: function(event) {\n angular.element(event.target).addClass('drop-active');\n },\n ondragleave: function(event) {\n angular.element(event.target).removeClass('drop-active');\n },\n ondropdeactivate: function(event) {\n angular.element(event.target).removeClass('drop-active');\n },\n ondrop: function(event) {\n if (event.relatedTarget.dropData) {\n $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n $scope.$apply();\n }\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlDroppable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDroppableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDroppable.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlElementDimensionsCtrl', function($element, $scope, $parse, $attrs) {\n\n $parse($attrs.mwlElementDimensions).assign($scope, {\n width: $element[0].offsetWidth,\n height: $element[0].offsetHeight\n });\n\n })\n .directive('mwlElementDimensions', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlElementDimensionsCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlElementDimensions.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlResizableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\n if (!interact) {\n return;\n }\n\n var snap, snapGridDimensions;\n if ($attrs.snapGrid) {\n snapGridDimensions = $parse($attrs.snapGrid)($scope);\n snap = {\n targets: [\n interact.createSnapGrid(snapGridDimensions)\n ]\n };\n }\n\n var originalDimensions = {};\n var originalDimensionsStyle = {};\n var resizeEdge;\n\n function canResize() {\n return $parse($attrs.mwlResizable)($scope);\n }\n\n function getUnitsResized(edge, elm, gridDimensions) {\n var unitsResized = {};\n unitsResized.edge = edge;\n if (edge === 'start') {\n unitsResized.x = elm.data('x');\n unitsResized.y = elm.data('y');\n } else if (edge === 'end') {\n unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n }\n if (gridDimensions && gridDimensions.x) {\n unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n }\n if (gridDimensions && gridDimensions.y) {\n unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n }\n return unitsResized;\n }\n\n interact($element[0]).resizable({\n edges: $parse($attrs.resizeEdges)($scope),\n snap: snap,\n onstart: function(event) {\n\n if (canResize()) {\n resizeEdge = 'end';\n var elm = angular.element(event.target);\n originalDimensions.height = elm[0].offsetHeight;\n originalDimensions.width = elm[0].offsetWidth;\n originalDimensionsStyle.height = elm.css('height');\n originalDimensionsStyle.width = elm.css('width');\n }\n\n },\n onmove: function(event) {\n\n if (canResize()) {\n var elm = angular.element(event.target);\n var x = parseFloat(elm.data('x') || 0);\n var y = parseFloat(elm.data('y') || 0);\n\n elm.css({\n width: event.rect.width + 'px',\n height: event.rect.height + 'px'\n });\n\n // translate when resizing from top or left edges\n x += event.deltaRect.left;\n y += event.deltaRect.top;\n\n elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\n elm.data('x', x);\n elm.data('y', y);\n\n if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n resizeEdge = 'start';\n }\n\n if ($attrs.onResize) {\n $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n $scope.$apply();\n }\n\n }\n\n },\n onend: function(event) {\n\n if (canResize()) {\n\n var elm = angular.element(event.target);\n var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\n elm\n .data('x', null)\n .data('y', null)\n .css({\n transform: null,\n width: originalDimensionsStyle.width,\n height: originalDimensionsStyle.height\n });\n\n if ($attrs.onResizeEnd) {\n $parse($attrs.onResizeEnd)($scope, unitsResized);\n $scope.$apply();\n }\n }\n\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlResizable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlResizableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlResizable.js\n ** module id = 16\n ** module chunks = 0\n **/","var map = {\n\t\"./calendarDate.js\": 18,\n\t\"./calendarLimitTo.js\": 19,\n\t\"./calendarTruncateEventTitle.js\": 20\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 17;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters \\.js$\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarDate', function(calendarHelper, calendarConfig) {\n\n function calendarDate(date, format, getFromConfig) {\n\n if (getFromConfig === true) {\n format = calendarConfig.dateFormats[format];\n }\n\n return calendarHelper.formatDate(date, format);\n\n }\n\n calendarDate.$stateful = true;\n\n return calendarDate;\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarDate.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarLimitTo', function(limitToFilter) {\n\n if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n return limitToFilter;\n }\n\n //Copied from the angular source. Only 1.4 has the begin functionality.\n return function(input, limit, begin) {\n if (Math.abs(Number(limit)) === Infinity) {\n limit = Number(limit);\n } else {\n limit = parseInt(limit);\n }\n if (isNaN(limit)) {\n return input;\n }\n\n if (angular.isNumber(input)) {\n input = input.toString();\n }\n if (!angular.isArray(input) && !angular.isString(input)) {\n return input;\n }\n\n begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\n if (limit >= 0) {\n return input.slice(begin, begin + limit);\n } else if (begin === 0) {\n return input.slice(limit, input.length);\n } else {\n return input.slice(Math.max(0, begin + limit), begin);\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarLimitTo.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarTruncateEventTitle', function() {\n\n return function(string, length, boxHeight) {\n if (!string) {\n return '';\n }\n\n //Only truncate if if actually needs truncating\n if (string.length >= length && string.length / 20 > boxHeight / 30) {\n return string.substr(0, length) + '...';\n } else {\n return string;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarTruncateEventTitle.js\n ** module id = 20\n ** module chunks = 0\n **/","var map = {\n\t\"./calendarConfig.js\": 22,\n\t\"./calendarDebounce.js\": 23,\n\t\"./calendarHelper.js\": 24,\n\t\"./calendarTitle.js\": 25,\n\t\"./interact.js\": 26,\n\t\"./moment.js\": 28\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 21;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services \\.js$\n ** module id = 21\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .provider('calendarConfig', function() {\n\n var defaultFormats = {\n angular: {\n date: {\n hour: 'ha',\n day: 'd MMM',\n month: 'MMMM',\n weekDay: 'EEEE',\n time: 'HH:mm',\n datetime: 'MMM d, h:mm a'\n },\n title: {\n day: 'EEEE d MMMM, yyyy',\n week: 'Week {week} of {year}',\n month: 'MMMM yyyy',\n year: 'yyyy'\n }\n },\n moment: {\n date: {\n hour: 'ha',\n day: 'D MMM',\n month: 'MMMM',\n weekDay: 'dddd',\n time: 'HH:mm',\n datetime: 'MMM D, h:mm a'\n },\n title: {\n day: 'dddd D MMMM, YYYY',\n week: 'Week {week} of {year}',\n month: 'MMMM YYYY',\n year: 'YYYY'\n }\n }\n };\n\n var dateFormatter = 'angular';\n var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n var showTimesOnWeekView = false;\n\n var i18nStrings = {\n eventsLabel: 'Events',\n timeLabel: 'Time'\n };\n\n var displayAllMonthEvents = false;\n\n var configProvider = this;\n\n configProvider.setDateFormats = function(formats) {\n angular.extend(defaultDateFormats, formats);\n return configProvider;\n };\n\n configProvider.setTitleFormats = function(formats) {\n angular.extend(defaultTitleFormats, formats);\n return configProvider;\n };\n\n configProvider.setI18nStrings = function(strings) {\n angular.extend(i18nStrings, strings);\n return configProvider;\n };\n\n configProvider.setDisplayAllMonthEvents = function(value) {\n displayAllMonthEvents = value;\n return configProvider;\n };\n\n configProvider.setDateFormatter = function(value) {\n if (['angular', 'moment'].indexOf(value) === -1) {\n throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n }\n dateFormatter = value;\n defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n return configProvider;\n };\n\n configProvider.showTimesOnWeekView = function(value) {\n showTimesOnWeekView = value; //experimental, and ignores the event end date\n return configProvider;\n };\n\n configProvider.$get = function() {\n return {\n dateFormats: defaultDateFormats,\n titleFormats: defaultTitleFormats,\n i18nStrings: i18nStrings,\n displayAllMonthEvents: displayAllMonthEvents,\n dateFormatter: dateFormatter,\n showTimesOnWeekView: showTimesOnWeekView\n };\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarConfig.js\n ** module id = 22\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .service('calendarDebounce', function($timeout) {\n\n function debounce(func, wait, immediate) {\n var timeout;\n return function() {\n var context = this, args = arguments;\n function later() {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n }\n var callNow = immediate && !timeout;\n $timeout.cancel(timeout);\n timeout = $timeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n return debounce;\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarDebounce.js\n ** module id = 23\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .factory('calendarHelper', function(dateFilter, moment, calendarConfig) {\n\n function formatDate(date, format) {\n if (calendarConfig.dateFormatter === 'angular') {\n return dateFilter(moment(date).toDate(), format);\n } else if (calendarConfig.dateFormatter === 'moment') {\n return moment(date).format(format);\n }\n }\n\n function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n if (!oldEnd) {\n return oldEnd;\n }\n var diffInSeconds = moment(newStart).diff(moment(oldStart));\n return moment(oldEnd).add(diffInSeconds);\n }\n\n function eventIsInPeriod(event, periodStart, periodEnd) {\n\n var eventStart = moment(event.startsAt);\n var eventEnd = moment(event.endsAt || event.startsAt);\n periodStart = moment(periodStart);\n periodEnd = moment(periodEnd);\n\n if (angular.isDefined(event.recursOn)) {\n\n switch (event.recursOn) {\n case 'year':\n eventStart.set({\n year: periodStart.year()\n });\n break;\n\n case 'month':\n eventStart.set({\n year: periodStart.year(),\n month: periodStart.month()\n });\n break;\n\n default:\n throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n }\n\n eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\n }\n\n return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n eventStart.isSame(periodStart) ||\n eventEnd.isSame(periodEnd);\n\n }\n\n function filterEventsInPeriod(events, startPeriod, endPeriod) {\n return events.filter(function(event) {\n return eventIsInPeriod(event, startPeriod, endPeriod);\n });\n }\n\n function getEventsInPeriod(calendarDate, period, allEvents) {\n var startPeriod = moment(calendarDate).startOf(period);\n var endPeriod = moment(calendarDate).endOf(period);\n return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n }\n\n function getBadgeTotal(events) {\n return events.filter(function(event) {\n return event.incrementsBadgeTotal !== false;\n }).length;\n }\n\n function getWeekDayNames() {\n var weekdays = [];\n var count = 0;\n while (count < 7) {\n weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n }\n return weekdays;\n }\n\n function getYearView(events, currentDay, cellModifier) {\n\n var view = [];\n var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n var month = moment(currentDay).startOf('year');\n var count = 0;\n while (count < 12) {\n var startPeriod = month.clone();\n var endPeriod = startPeriod.clone().endOf('month');\n var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n var cell = {\n label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n isToday: startPeriod.isSame(moment().startOf('month')),\n events: periodEvents,\n date: startPeriod,\n badgeTotal: getBadgeTotal(periodEvents)\n };\n\n cellModifier({calendarCell: cell});\n view.push(cell);\n month.add(1, 'month');\n count++;\n }\n\n return view;\n\n }\n\n function getMonthView(events, currentDay, cellModifier) {\n\n var startOfMonth = moment(currentDay).startOf('month');\n var day = startOfMonth.clone().startOf('week');\n var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n var eventsInPeriod;\n if (calendarConfig.displayAllMonthEvents) {\n eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n } else {\n eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n }\n var view = [];\n var today = moment().startOf('day');\n\n while (day.isBefore(endOfMonthView)) {\n\n var inMonth = day.month() === moment(currentDay).month();\n var monthEvents = [];\n if (inMonth || calendarConfig.displayAllMonthEvents) {\n monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n }\n\n var cell = {\n label: day.date(),\n date: day.clone(),\n inMonth: inMonth,\n isPast: today.isAfter(day),\n isToday: today.isSame(day),\n isFuture: today.isBefore(day),\n isWeekend: [0, 6].indexOf(day.day()) > -1,\n events: monthEvents,\n badgeTotal: getBadgeTotal(monthEvents)\n };\n\n cellModifier({calendarCell: cell});\n\n view.push(cell);\n\n day.add(1, 'day');\n }\n\n return view;\n\n }\n\n function getWeekView(events, currentDay) {\n\n var startOfWeek = moment(currentDay).startOf('week');\n var endOfWeek = moment(currentDay).endOf('week');\n var dayCounter = startOfWeek.clone();\n var days = [];\n var today = moment().startOf('day');\n while (days.length < 7) {\n days.push({\n weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n date: dayCounter.clone(),\n dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n isPast: dayCounter.isBefore(today),\n isToday: dayCounter.isSame(today),\n isFuture: dayCounter.isAfter(today),\n isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n });\n dayCounter.add(1, 'day');\n }\n\n var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\n var eventStart = moment(event.startsAt).startOf('day');\n var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n var weekViewStart = moment(startOfWeek).startOf('day');\n var weekViewEnd = moment(endOfWeek).startOf('day');\n var offset, span;\n\n if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n offset = 0;\n } else {\n offset = eventStart.diff(weekViewStart, 'days');\n }\n\n if (eventEnd.isAfter(weekViewEnd)) {\n eventEnd = weekViewEnd;\n }\n\n if (eventStart.isBefore(weekViewStart)) {\n eventStart = weekViewStart;\n }\n\n span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\n event.daySpan = span;\n event.dayOffset = offset;\n\n return event;\n });\n\n return {days: days, events: eventsSorted};\n\n }\n\n function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\n var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n var hourHeight = (60 / dayViewSplit) * 30;\n var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n var hourHeightMultiplier = hourHeight / 60;\n var buckets = [];\n var eventsInPeriod = filterEventsInPeriod(\n events,\n moment(currentDay).startOf('day').toDate(),\n moment(currentDay).endOf('day').toDate()\n );\n\n return eventsInPeriod.map(function(event) {\n if (moment(event.startsAt).isBefore(calendarStart)) {\n event.top = 0;\n } else {\n event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n }\n\n if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n event.height = calendarHeight - event.top;\n } else {\n var diffStart = event.startsAt;\n if (moment(event.startsAt).isBefore(calendarStart)) {\n diffStart = calendarStart.toDate();\n }\n if (!event.endsAt) {\n event.height = 30;\n } else {\n event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n }\n }\n\n if (event.top - event.height > calendarHeight) {\n event.height = 0;\n }\n\n event.left = 0;\n\n return event;\n }).filter(function(event) {\n return event.height > 0;\n }).map(function(event) {\n\n var cannotFitInABucket = true;\n buckets.forEach(function(bucket, bucketIndex) {\n var canFitInThisBucket = true;\n\n bucket.forEach(function(bucketItem) {\n if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n canFitInThisBucket = false;\n }\n });\n\n if (canFitInThisBucket && cannotFitInABucket) {\n cannotFitInABucket = false;\n event.left = bucketIndex * 150;\n buckets[bucketIndex].push(event);\n }\n\n });\n\n if (cannotFitInABucket) {\n event.left = buckets.length * 150;\n buckets.push([event]);\n }\n\n return event;\n\n });\n\n }\n\n function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n var weekView = getWeekView(events, currentDay);\n var newEvents = [];\n weekView.days.forEach(function(day) {\n var dayEvents = weekView.events.filter(function(event) {\n return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n });\n var newDayEvents = getDayView(\n dayEvents,\n day.date,\n dayViewStart,\n dayViewEnd,\n dayViewSplit\n );\n newEvents = newEvents.concat(newDayEvents);\n });\n weekView.events = newEvents;\n return weekView;\n }\n\n function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n var hourHeight = (60 / dayViewSplit) * 30;\n return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n }\n\n return {\n getWeekDayNames: getWeekDayNames,\n getYearView: getYearView,\n getMonthView: getMonthView,\n getWeekView: getWeekView,\n getDayView: getDayView,\n getWeekViewWithTimes: getWeekViewWithTimes,\n getDayViewHeight: getDayViewHeight,\n adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n formatDate: formatDate,\n eventIsInPeriod: eventIsInPeriod //expose for testing only\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarHelper.js\n ** module id = 24\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .factory('calendarTitle', function(moment, calendarConfig, calendarHelper) {\n\n function day(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n }\n\n function week(currentDay) {\n var weekTitleLabel = calendarConfig.titleFormats.week;\n return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n }\n\n function month(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n }\n\n function year(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n }\n\n return {\n day: day,\n week: week,\n month: month,\n year: year\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarTitle.js\n ** module id = 25\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\nvar interact;\ntry {\n interact = require('interact.js');\n} catch (e) {\n interact = null;\n}\n\nangular\n .module('mwl.calendar')\n .constant('interact', interact);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/interact.js\n ** module id = 26\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\nvar moment = require('moment');\n\nangular\n .module('mwl.calendar')\n .constant('moment', moment);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/moment.js\n ** module id = 28\n ** module chunks = 0\n **/"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["angular-bootstrap-calendar.js","webpack:/webpack/bootstrap f9365143e6b9940e60b4","calendar.js","webpack:/index.js","webpack:/src/directives \\.js$","webpack:/src/directives/mwlCalendar.js","webpack:/src/directives/mwlCalendarDay.js","webpack:/src/directives/mwlCalendarHourList.js","webpack:/src/directives/mwlCalendarMonth.js","webpack:/src/directives/mwlCalendarSlideBox.js","webpack:/src/directives/mwlCalendarWeek.js","webpack:/src/directives/mwlCalendarYear.js","webpack:/src/directives/mwlCollapseFallback.js","webpack:/src/directives/mwlDateModifier.js","webpack:/src/directives/mwlDraggable.js","webpack:/src/directives/mwlDroppable.js","webpack:/src/directives/mwlElementDimensions.js","webpack:/src/directives/mwlResizable.js","webpack:/src/filters \\.js$","webpack:/src/filters/calendarDate.js","webpack:/src/filters/calendarLimitTo.js","webpack:/src/filters/calendarTruncateEventTitle.js","webpack:/src/services \\.js$","webpack:/src/services/calendarConfig.js","webpack:/src/services/calendarDebounce.js","webpack:/src/services/calendarHelper.js","webpack:/src/services/calendarTitle.js","webpack:/src/services/interact.js","webpack:/src/services/moment.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","requireAll","r","keys","forEach","angular","MODULE_NAME","webpackContext","req","webpackContextResolve","map","Error","./mwlCalendar.js","./mwlCalendarDay.js","./mwlCalendarHourList.js","./mwlCalendarMonth.js","./mwlCalendarSlideBox.js","./mwlCalendarWeek.js","./mwlCalendarYear.js","./mwlCollapseFallback.js","./mwlDateModifier.js","./mwlDraggable.js","./mwlDroppable.js","./mwlElementDimensions.js","./mwlResizable.js","Object","resolve","controller","$scope","$timeout","$window","$locale","moment","calendarTitle","calendarDebounce","vm","this","events","changeView","view","newDay","currentDay","drillDown","date","rawDate","toDate","nextView","year","month","week","onDrillDownClick","calendarDate","calendarNextView","previousDate","previousView","copy","refreshCalendar","viewTitle","event","index","defineProperty","enumerable","value","currentDate","shouldUpdate","clone","startOf","isSame","$broadcast","unbindLocaleWatcher","$watch","locale","unbindOnDestroy","push","unbindDestroyListener","$on","unbind","directive","templateUrl","restrict","scope","editEventHtml","deleteEventHtml","autoOpen","onEventClick","onEventTimesChanged","onEditEventClick","onDeleteEventClick","onTimespanClick","cellModifier","dayViewStart","dayViewEnd","dayViewSplit","$sce","calendarHelper","calendarConfig","unbindListener","dayViewHeight","getDayViewHeight","getDayView","eventDragComplete","minuteChunksMoved","minutesDiff","newStart","startsAt","add","newEnd","endsAt","tempStartsAt","calendarEvent","calendarNewEventStart","calendarNewEventEnd","eventDragged","eventResizeComplete","edge","start","end","eventResized","require","updateDays","parseInt","hours","dayCounter","i","diff","label","formatDate","dateFormats","hour","originalLocale","firstRun","weekDays","getWeekDayNames","getMonthView","rows","Math","floor","length","monthOffsets","day","inMonth","dayClicked","dayClickedFirstRun","openRowIndex","dayIndex","indexOf","openDayIndex","highlightEvent","shouldAddClass","highlightClass","dayContainsEvent","type","handleEventDrop","newDayDate","adjustEndDateFromStartDiff","link","element","attrs","calendarCtrl","unbindWatcher","isOpen","shouldCollapse","unbindDestroy","replace","elm","ctrls","isMonthView","isYearView","showTimes","showTimesOnWeekView","getWeekViewWithTimes","getWeekView","weekDragged","daysDiff","weekResized","tempTimeChanged","getYearView","monthClicked","monthClickedFirstRun","monthIndex","openMonthIndex","newMonthDate","$attrs","$element","mwlCollapseFallback","addClass","removeClass","$injector","has","onClick","isDefined","setToToday","Date","increment","decrement","subtract","$apply","bind","$parse","interact","translateElement","transformValue","css","canDrag","mwlDraggable","getUnitsMoved","x","y","gridDimensions","result","snap","snapGridDimensions","snapGrid","targets","createSnapGrid","draggable","onstart","target","dropData","style","pointerEvents","onDragStart","onmove","parseFloat","attr","dx","dy","axis","getComputedStyle","position","onDrag","onend","onDragEnd","removeAttr","unset","dropzone","ondragenter","ondragleave","ondropdeactivate","ondrop","relatedTarget","onDrop","mwlElementDimensions","assign","width","offsetWidth","height","offsetHeight","canResize","mwlResizable","getUnitsResized","unitsResized","data","originalDimensions","round","resizeEdge","originalDimensionsStyle","resizable","edges","resizeEdges","rect","deltaRect","left","top","onResize","transform","onResizeEnd","./calendarDate.js","./calendarLimitTo.js","./calendarTruncateEventTitle.js","filter","format","getFromConfig","$stateful","limitToFilter","version","minor","input","limit","begin","abs","Number","Infinity","isNaN","isNumber","toString","isArray","isString","slice","max","string","boxHeight","substr","./calendarConfig.js","./calendarDebounce.js","./calendarHelper.js","./calendarTitle.js","./interact.js","./moment.js","provider","defaultFormats","weekDay","time","datetime","title","dateFormatter","defaultDateFormats","defaultTitleFormats","i18nStrings","eventsLabel","timeLabel","displayAllMonthEvents","configProvider","setDateFormats","formats","extend","setTitleFormats","setI18nStrings","strings","setDisplayAllMonthEvents","setDateFormatter","$get","titleFormats","service","debounce","func","wait","immediate","timeout","later","apply","context","args","arguments","callNow","cancel","factory","dateFilter","oldStart","oldEnd","diffInSeconds","eventIsInPeriod","periodStart","periodEnd","eventStart","eventEnd","recursOn","set","isAfter","isBefore","filterEventsInPeriod","startPeriod","endPeriod","getEventsInPeriod","period","allEvents","endOf","getBadgeTotal","incrementsBadgeTotal","weekdays","count","weekday","eventsInPeriod","periodEvents","cell","isToday","badgeTotal","calendarCell","startOfMonth","endOfMonthView","today","monthEvents","isPast","isFuture","isWeekend","startOfWeek","endOfWeek","days","weekDayLabel","dayLabel","eventsSorted","offset","span","weekViewStart","weekViewEnd","daySpan","dayOffset","dayStartHour","dayEndHour","hourHeight","calendarStart","calendarEnd","calendarHeight","hourHeightMultiplier","buckets","diffStart","cannotFitInABucket","bucket","bucketIndex","canFitInThisBucket","bucketItem","weekView","newEvents","dayEvents","newDayEvents","concat","dayViewStartM","dayViewEndM","weekTitleLabel","e","constant","code"],"mappings":"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","file":"angular-bootstrap-calendar.min.js","sourcesContent":["/**\n * angular-bootstrap-calendar - A pure AngularJS bootstrap themed responsive calendar that can display events and has views for year, month, week and day\n * @version v0.12.0\n * @link https://github.com/mattlewis92/angular-bootstrap-calendar\n * @license MIT\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tfunction requireAll(r) {\n\t r.keys().forEach(r);\n\t}\n\t\n\tmodule.exports = __webpack_require__(1);\n\t\n\trequireAll(__webpack_require__(3));\n\trequireAll(__webpack_require__(17));\n\trequireAll(__webpack_require__(21));\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar MODULE_NAME = 'mwl.calendar';\n\t\n\tangular.module(MODULE_NAME, []);\n\t\n\tmodule.exports = MODULE_NAME;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = angular;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./mwlCalendar.js\": 4,\n\t\t\"./mwlCalendarDay.js\": 5,\n\t\t\"./mwlCalendarHourList.js\": 6,\n\t\t\"./mwlCalendarMonth.js\": 7,\n\t\t\"./mwlCalendarSlideBox.js\": 8,\n\t\t\"./mwlCalendarWeek.js\": 9,\n\t\t\"./mwlCalendarYear.js\": 10,\n\t\t\"./mwlCollapseFallback.js\": 11,\n\t\t\"./mwlDateModifier.js\": 12,\n\t\t\"./mwlDraggable.js\": 13,\n\t\t\"./mwlDroppable.js\": 14,\n\t\t\"./mwlElementDimensions.js\": 15,\n\t\t\"./mwlResizable.js\": 16\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 3;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarCtrl', [\"$scope\", \"$timeout\", \"$window\", \"$locale\", \"moment\", \"calendarTitle\", \"calendarDebounce\", function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\t\n\t var vm = this;\n\t\n\t $scope.events = $scope.events || [];\n\t\n\t vm.changeView = function(view, newDay) {\n\t $scope.view = view;\n\t $scope.currentDay = newDay;\n\t };\n\t\n\t vm.drillDown = function(date) {\n\t\n\t var rawDate = moment(date).toDate();\n\t\n\t var nextView = {\n\t year: 'month',\n\t month: 'day',\n\t week: 'day'\n\t };\n\t\n\t if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n\t vm.changeView(nextView[$scope.view], rawDate);\n\t }\n\t\n\t };\n\t\n\t var previousDate = moment($scope.currentDay);\n\t var previousView = angular.copy($scope.view);\n\t\n\t //Use a debounce to prevent it being called 3 times on initialisation\n\t var refreshCalendar = calendarDebounce(function() {\n\t if (calendarTitle[$scope.view]) {\n\t $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n\t }\n\t\n\t $scope.events = $scope.events.map(function(event, index) {\n\t Object.defineProperty(event, '$id', {enumerable: false, value: index});\n\t return event;\n\t });\n\t\n\t //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n\t var currentDate = moment($scope.currentDay);\n\t var shouldUpdate = true;\n\t if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n\t $scope.view === previousView) {\n\t shouldUpdate = false;\n\t }\n\t previousDate = currentDate;\n\t previousView = angular.copy($scope.view);\n\t\n\t if (shouldUpdate) {\n\t $scope.$broadcast('calendar.refreshView');\n\t }\n\t }, 50);\n\t\n\t //Auto update the calendar when the locale changes\n\t var unbindLocaleWatcher = $scope.$watch(function() {\n\t return moment.locale() + $locale.id;\n\t }, refreshCalendar);\n\t\n\t var unbindOnDestroy = [];\n\t unbindOnDestroy.push(unbindLocaleWatcher);\n\t\n\t //Refresh the calendar when any of these variables change.\n\t /* eslint-disable angular/ng_on_watch */\n\t unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n\t /* eslint-enable angular/ng_on_watch */\n\t\n\t //Remove any watchers when the calendar is destroyed\n\t var unbindDestroyListener = $scope.$on('$destroy', function() {\n\t unbindOnDestroy.forEach(function(unbind) {\n\t unbind();\n\t });\n\t });\n\t unbindOnDestroy.push(unbindDestroyListener);\n\t\n\t }])\n\t .directive('mwlCalendar', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendar.html',\n\t restrict: 'EA',\n\t scope: {\n\t events: '=',\n\t view: '=',\n\t viewTitle: '=',\n\t currentDay: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onEventClick: '&',\n\t onEventTimesChanged: '&',\n\t onEditEventClick: '&',\n\t onDeleteEventClick: '&',\n\t onTimespanClick: '&',\n\t onDrillDownClick: '&',\n\t cellModifier: '&',\n\t dayViewStart: '@',\n\t dayViewEnd: '@',\n\t dayViewSplit: '@'\n\t },\n\t controller: 'MwlCalendarCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarDayCtrl', [\"$scope\", \"$timeout\", \"$sce\", \"moment\", \"calendarHelper\", \"calendarConfig\", function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.calendarConfig = calendarConfig;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t vm.view = calendarHelper.getDayView(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.eventDragComplete = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n\t var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.eventDragged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(minutesDiff, 'minutes');\n\t } else {\n\t end.add(minutesDiff, 'minutes');\n\t }\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t };\n\t\n\t vm.eventResized = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t if (edge === 'start') {\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t }\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarDay', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarDayView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarDayCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarHourListCtrl', [\"$scope\", \"moment\", \"calendarConfig\", \"calendarHelper\", function($scope, moment, calendarConfig, calendarHelper) {\n\t var vm = this;\n\t var dayViewStart, dayViewEnd;\n\t\n\t function updateDays() {\n\t dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n\t dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n\t vm.dayViewSplit = parseInt($scope.dayViewSplit);\n\t vm.hours = [];\n\t var dayCounter = moment(dayViewStart);\n\t for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n\t vm.hours.push({\n\t label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n\t });\n\t dayCounter.add(1, 'hour');\n\t }\n\t }\n\t\n\t var originalLocale = moment.locale();\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t if (originalLocale !== moment.locale()) {\n\t originalLocale = moment.locale();\n\t updateDays();\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t updateDays();\n\t\n\t }])\n\t .directive('mwlCalendarHourList', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarHourList.html',\n\t controller: 'MwlCalendarHourListCtrl as vm',\n\t scope: {\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarMonthCtrl', [\"$scope\", \"moment\", \"calendarHelper\", function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t vm.weekDays = calendarHelper.getWeekDayNames();\n\t\n\t vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t var rows = Math.floor(vm.view.length / 7);\n\t vm.monthOffsets = [];\n\t for (var i = 0; i < rows; i++) {\n\t vm.monthOffsets.push(i * 7);\n\t }\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(day) {\n\t if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n\t vm.dayClicked(day, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.dayClicked = function(day, dayClickedFirstRun) {\n\t\n\t if (!dayClickedFirstRun) {\n\t $scope.onTimespanClick({\n\t calendarDate: day.date.toDate()\n\t });\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var dayIndex = vm.view.indexOf(day);\n\t if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n\t vm.openDayIndex = null; //close the open day\n\t } else {\n\t vm.openDayIndex = dayIndex;\n\t vm.openRowIndex = Math.floor(dayIndex / 7);\n\t }\n\t\n\t };\n\t\n\t vm.highlightEvent = function(event, shouldAddClass) {\n\t\n\t vm.view.forEach(function(day) {\n\t delete day.highlightClass;\n\t if (shouldAddClass) {\n\t var dayContainsEvent = day.events.indexOf(event) > -1;\n\t if (dayContainsEvent) {\n\t day.highlightClass = 'day-highlight dh-event-' + event.type;\n\t }\n\t }\n\t });\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newDayDate) {\n\t\n\t var newStart = moment(event.startsAt)\n\t .date(moment(newDayDate).date())\n\t .month(moment(newDayDate).month());\n\t\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newDayDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarMonth', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarMonthView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t onEventTimesChanged: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarMonthCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarSlideBoxCtrl', [\"$scope\", \"$sce\", function($scope, $sce) {\n\t\n\t var vm = this;\n\t vm.$sce = $sce;\n\t\n\t var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n\t vm.shouldCollapse = !isOpen;\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t }])\n\t .directive('mwlCalendarSlideBox', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarSlideBox.html',\n\t replace: true,\n\t controller: 'MwlCalendarSlideBoxCtrl as vm',\n\t require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n\t link: function(scope, elm, attrs, ctrls) {\n\t scope.isMonthView = !!ctrls[0];\n\t scope.isYearView = !!ctrls[1];\n\t },\n\t scope: {\n\t isOpen: '=',\n\t events: '=',\n\t onEventClick: '=',\n\t editEventHtml: '=',\n\t onEditEventClick: '=',\n\t deleteEventHtml: '=',\n\t onDeleteEventClick: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarWeekCtrl', [\"$scope\", \"$sce\", \"moment\", \"calendarHelper\", \"calendarConfig\", function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.showTimes = calendarConfig.showTimesOnWeekView;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t if (vm.showTimes) {\n\t vm.view = calendarHelper.getWeekViewWithTimes(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t } else {\n\t vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n\t }\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\t\n\t var newStart = moment(event.startsAt).add(daysDiff, 'days');\n\t var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\t\n\t if (minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t newStart = newStart.add(minutesDiff, 'minutes');\n\t newEnd = newEnd.add(minutesDiff, 'minutes');\n\t }\n\t\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.weekResized = function(event, edge, daysDiff) {\n\t\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(daysDiff, 'days');\n\t } else {\n\t end.add(daysDiff, 'days');\n\t }\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t\n\t };\n\t\n\t vm.tempTimeChanged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarWeek', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarWeekView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarWeekCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarYearCtrl', [\"$scope\", \"moment\", \"calendarHelper\", function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(month) {\n\t if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n\t vm.monthClicked(month, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.monthClicked = function(month, monthClickedFirstRun) {\n\t\n\t if (!monthClickedFirstRun) {\n\t $scope.onTimespanClick({calendarDate: month.date.toDate()});\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var monthIndex = vm.view.indexOf(month);\n\t if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n\t vm.openMonthIndex = null; //close the open month\n\t } else {\n\t vm.openMonthIndex = monthIndex;\n\t vm.openRowIndex = Math.floor(monthIndex / 4);\n\t }\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newMonthDate) {\n\t var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newMonthDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t }])\n\t .directive('mwlCalendarYear', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarYearView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarYearCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCollapseFallbackCtrl', [\"$scope\", \"$attrs\", \"$element\", function($scope, $attrs, $element) {\n\t var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n\t if (shouldCollapse) {\n\t $element.addClass('ng-hide');\n\t } else {\n\t $element.removeClass('ng-hide');\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t }])\n\t .directive('mwlCollapseFallback', [\"$injector\", function($injector) {\n\t\n\t if ($injector.has('collapseDirective')) {\n\t return {};\n\t }\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlCollapseFallbackCtrl'\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDateModifierCtrl', [\"$element\", \"$attrs\", \"$scope\", \"moment\", function($element, $attrs, $scope, moment) {\n\t\n\t function onClick() {\n\t if (angular.isDefined($attrs.setToToday)) {\n\t $scope.date = new Date();\n\t } else if (angular.isDefined($attrs.increment)) {\n\t $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n\t } else if (angular.isDefined($attrs.decrement)) {\n\t $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n\t }\n\t $scope.$apply();\n\t }\n\t\n\t $element.bind('click', onClick);\n\t\n\t $scope.$on('$destroy', function() {\n\t $element.unbind('click', onClick);\n\t });\n\t\n\t }])\n\t .directive('mwlDateModifier', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDateModifierCtrl',\n\t scope: {\n\t date: '=',\n\t increment: '=',\n\t decrement: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDraggableCtrl', [\"$element\", \"$scope\", \"$window\", \"$parse\", \"$attrs\", \"$timeout\", \"interact\", function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t function translateElement(elm, transformValue) {\n\t return elm\n\t .css('transform', transformValue)\n\t .css('-ms-transform', transformValue)\n\t .css('-webkit-transform', transformValue);\n\t }\n\t\n\t function canDrag() {\n\t return $parse($attrs.mwlDraggable)($scope);\n\t }\n\t\n\t function getUnitsMoved(x, y, gridDimensions) {\n\t\n\t var result = {x: x, y: y};\n\t\n\t if (gridDimensions && gridDimensions.x) {\n\t result.x /= gridDimensions.x;\n\t }\n\t\n\t if (gridDimensions && gridDimensions.y) {\n\t result.y /= gridDimensions.y;\n\t }\n\t\n\t return result;\n\t\n\t }\n\t\n\t interact($element[0]).draggable({\n\t snap: snap,\n\t onstart: function(event) {\n\t if (canDrag()) {\n\t angular.element(event.target).addClass('dragging-active');\n\t event.target.dropData = $parse($attrs.dropData)($scope);\n\t event.target.style.pointerEvents = 'none';\n\t if ($attrs.onDragStart) {\n\t $parse($attrs.onDragStart)($scope);\n\t $scope.$apply();\n\t }\n\t }\n\t },\n\t onmove: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n\t var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\t\n\t switch ($parse($attrs.axis)($scope)) {\n\t case 'x':\n\t y = 0;\n\t break;\n\t\n\t case 'y':\n\t x = 0;\n\t break;\n\t\n\t default:\n\t }\n\t\n\t if ($window.getComputedStyle(elm[0]).position === 'static') {\n\t elm.css('position', 'relative');\n\t }\n\t\n\t translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n\t .css('z-index', 1000)\n\t .attr('data-x', x)\n\t .attr('data-y', y);\n\t\n\t if ($attrs.onDrag) {\n\t $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = elm.attr('data-x');\n\t var y = elm.attr('data-y');\n\t\n\t event.target.style.pointerEvents = 'auto';\n\t if ($attrs.onDragEnd) {\n\t $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t $timeout(function() {\n\t translateElement(elm, null)\n\t .removeAttr('data-x')\n\t .removeAttr('data-y')\n\t .removeClass('dragging-active');\n\t }, 50);\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlDraggable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDraggableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDroppableCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", \"interact\", function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t interact($element[0]).dropzone({\n\t ondragenter: function(event) {\n\t angular.element(event.target).addClass('drop-active');\n\t },\n\t ondragleave: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondropdeactivate: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondrop: function(event) {\n\t if (event.relatedTarget.dropData) {\n\t $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n\t $scope.$apply();\n\t }\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlDroppable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDroppableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlElementDimensionsCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", function($element, $scope, $parse, $attrs) {\n\t\n\t $parse($attrs.mwlElementDimensions).assign($scope, {\n\t width: $element[0].offsetWidth,\n\t height: $element[0].offsetHeight\n\t });\n\t\n\t }])\n\t .directive('mwlElementDimensions', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlElementDimensionsCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlResizableCtrl', [\"$element\", \"$scope\", \"$parse\", \"$attrs\", \"interact\", function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t var originalDimensions = {};\n\t var originalDimensionsStyle = {};\n\t var resizeEdge;\n\t\n\t function canResize() {\n\t return $parse($attrs.mwlResizable)($scope);\n\t }\n\t\n\t function getUnitsResized(edge, elm, gridDimensions) {\n\t var unitsResized = {};\n\t unitsResized.edge = edge;\n\t if (edge === 'start') {\n\t unitsResized.x = elm.data('x');\n\t unitsResized.y = elm.data('y');\n\t } else if (edge === 'end') {\n\t unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n\t unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n\t }\n\t if (gridDimensions && gridDimensions.x) {\n\t unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n\t }\n\t if (gridDimensions && gridDimensions.y) {\n\t unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n\t }\n\t return unitsResized;\n\t }\n\t\n\t interact($element[0]).resizable({\n\t edges: $parse($attrs.resizeEdges)($scope),\n\t snap: snap,\n\t onstart: function(event) {\n\t\n\t if (canResize()) {\n\t resizeEdge = 'end';\n\t var elm = angular.element(event.target);\n\t originalDimensions.height = elm[0].offsetHeight;\n\t originalDimensions.width = elm[0].offsetWidth;\n\t originalDimensionsStyle.height = elm.css('height');\n\t originalDimensionsStyle.width = elm.css('width');\n\t }\n\t\n\t },\n\t onmove: function(event) {\n\t\n\t if (canResize()) {\n\t var elm = angular.element(event.target);\n\t var x = parseFloat(elm.data('x') || 0);\n\t var y = parseFloat(elm.data('y') || 0);\n\t\n\t elm.css({\n\t width: event.rect.width + 'px',\n\t height: event.rect.height + 'px'\n\t });\n\t\n\t // translate when resizing from top or left edges\n\t x += event.deltaRect.left;\n\t y += event.deltaRect.top;\n\t\n\t elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\t\n\t elm.data('x', x);\n\t elm.data('y', y);\n\t\n\t if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n\t resizeEdge = 'start';\n\t }\n\t\n\t if ($attrs.onResize) {\n\t $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canResize()) {\n\t\n\t var elm = angular.element(event.target);\n\t var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\t\n\t elm\n\t .data('x', null)\n\t .data('y', null)\n\t .css({\n\t transform: null,\n\t width: originalDimensionsStyle.width,\n\t height: originalDimensionsStyle.height\n\t });\n\t\n\t if ($attrs.onResizeEnd) {\n\t $parse($attrs.onResizeEnd)($scope, unitsResized);\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t }])\n\t .directive('mwlResizable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlResizableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarDate.js\": 18,\n\t\t\"./calendarLimitTo.js\": 19,\n\t\t\"./calendarTruncateEventTitle.js\": 20\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 17;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarDate', [\"calendarHelper\", \"calendarConfig\", function(calendarHelper, calendarConfig) {\n\t\n\t function calendarDate(date, format, getFromConfig) {\n\t\n\t if (getFromConfig === true) {\n\t format = calendarConfig.dateFormats[format];\n\t }\n\t\n\t return calendarHelper.formatDate(date, format);\n\t\n\t }\n\t\n\t calendarDate.$stateful = true;\n\t\n\t return calendarDate;\n\t\n\t }]);\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarLimitTo', [\"limitToFilter\", function(limitToFilter) {\n\t\n\t if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n\t return limitToFilter;\n\t }\n\t\n\t //Copied from the angular source. Only 1.4 has the begin functionality.\n\t return function(input, limit, begin) {\n\t if (Math.abs(Number(limit)) === Infinity) {\n\t limit = Number(limit);\n\t } else {\n\t limit = parseInt(limit);\n\t }\n\t if (isNaN(limit)) {\n\t return input;\n\t }\n\t\n\t if (angular.isNumber(input)) {\n\t input = input.toString();\n\t }\n\t if (!angular.isArray(input) && !angular.isString(input)) {\n\t return input;\n\t }\n\t\n\t begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n\t begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\t\n\t if (limit >= 0) {\n\t return input.slice(begin, begin + limit);\n\t } else if (begin === 0) {\n\t return input.slice(limit, input.length);\n\t } else {\n\t return input.slice(Math.max(0, begin + limit), begin);\n\t }\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarTruncateEventTitle', function() {\n\t\n\t return function(string, length, boxHeight) {\n\t if (!string) {\n\t return '';\n\t }\n\t\n\t //Only truncate if if actually needs truncating\n\t if (string.length >= length && string.length / 20 > boxHeight / 30) {\n\t return string.substr(0, length) + '...';\n\t } else {\n\t return string;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarConfig.js\": 22,\n\t\t\"./calendarDebounce.js\": 23,\n\t\t\"./calendarHelper.js\": 24,\n\t\t\"./calendarTitle.js\": 25,\n\t\t\"./interact.js\": 26,\n\t\t\"./moment.js\": 28\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 21;\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .provider('calendarConfig', function() {\n\t\n\t var defaultFormats = {\n\t angular: {\n\t date: {\n\t hour: 'ha',\n\t day: 'd MMM',\n\t month: 'MMMM',\n\t weekDay: 'EEEE',\n\t time: 'HH:mm',\n\t datetime: 'MMM d, h:mm a'\n\t },\n\t title: {\n\t day: 'EEEE d MMMM, yyyy',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM yyyy',\n\t year: 'yyyy'\n\t }\n\t },\n\t moment: {\n\t date: {\n\t hour: 'ha',\n\t day: 'D MMM',\n\t month: 'MMMM',\n\t weekDay: 'dddd',\n\t time: 'HH:mm',\n\t datetime: 'MMM D, h:mm a'\n\t },\n\t title: {\n\t day: 'dddd D MMMM, YYYY',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM YYYY',\n\t year: 'YYYY'\n\t }\n\t }\n\t };\n\t\n\t var dateFormatter = 'angular';\n\t var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t var showTimesOnWeekView = false;\n\t\n\t var i18nStrings = {\n\t eventsLabel: 'Events',\n\t timeLabel: 'Time'\n\t };\n\t\n\t var displayAllMonthEvents = false;\n\t\n\t var configProvider = this;\n\t\n\t configProvider.setDateFormats = function(formats) {\n\t angular.extend(defaultDateFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setTitleFormats = function(formats) {\n\t angular.extend(defaultTitleFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setI18nStrings = function(strings) {\n\t angular.extend(i18nStrings, strings);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDisplayAllMonthEvents = function(value) {\n\t displayAllMonthEvents = value;\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDateFormatter = function(value) {\n\t if (['angular', 'moment'].indexOf(value) === -1) {\n\t throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n\t }\n\t dateFormatter = value;\n\t defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t return configProvider;\n\t };\n\t\n\t configProvider.showTimesOnWeekView = function(value) {\n\t showTimesOnWeekView = value; //experimental, and ignores the event end date\n\t return configProvider;\n\t };\n\t\n\t configProvider.$get = function() {\n\t return {\n\t dateFormats: defaultDateFormats,\n\t titleFormats: defaultTitleFormats,\n\t i18nStrings: i18nStrings,\n\t displayAllMonthEvents: displayAllMonthEvents,\n\t dateFormatter: dateFormatter,\n\t showTimesOnWeekView: showTimesOnWeekView\n\t };\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .service('calendarDebounce', [\"$timeout\", function($timeout) {\n\t\n\t function debounce(func, wait, immediate) {\n\t var timeout;\n\t return function() {\n\t var context = this, args = arguments;\n\t function later() {\n\t timeout = null;\n\t if (!immediate) {\n\t func.apply(context, args);\n\t }\n\t }\n\t var callNow = immediate && !timeout;\n\t $timeout.cancel(timeout);\n\t timeout = $timeout(later, wait);\n\t if (callNow) {\n\t func.apply(context, args);\n\t }\n\t };\n\t }\n\t\n\t return debounce;\n\t\n\t }]);\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarHelper', [\"dateFilter\", \"moment\", \"calendarConfig\", function(dateFilter, moment, calendarConfig) {\n\t\n\t function formatDate(date, format) {\n\t if (calendarConfig.dateFormatter === 'angular') {\n\t return dateFilter(moment(date).toDate(), format);\n\t } else if (calendarConfig.dateFormatter === 'moment') {\n\t return moment(date).format(format);\n\t }\n\t }\n\t\n\t function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n\t if (!oldEnd) {\n\t return oldEnd;\n\t }\n\t var diffInSeconds = moment(newStart).diff(moment(oldStart));\n\t return moment(oldEnd).add(diffInSeconds);\n\t }\n\t\n\t function eventIsInPeriod(event, periodStart, periodEnd) {\n\t\n\t var eventStart = moment(event.startsAt);\n\t var eventEnd = moment(event.endsAt || event.startsAt);\n\t periodStart = moment(periodStart);\n\t periodEnd = moment(periodEnd);\n\t\n\t if (angular.isDefined(event.recursOn)) {\n\t\n\t switch (event.recursOn) {\n\t case 'year':\n\t eventStart.set({\n\t year: periodStart.year()\n\t });\n\t break;\n\t\n\t case 'month':\n\t eventStart.set({\n\t year: periodStart.year(),\n\t month: periodStart.month()\n\t });\n\t break;\n\t\n\t default:\n\t throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n\t }\n\t\n\t eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\t\n\t }\n\t\n\t return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n\t (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n\t (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n\t eventStart.isSame(periodStart) ||\n\t eventEnd.isSame(periodEnd);\n\t\n\t }\n\t\n\t function filterEventsInPeriod(events, startPeriod, endPeriod) {\n\t return events.filter(function(event) {\n\t return eventIsInPeriod(event, startPeriod, endPeriod);\n\t });\n\t }\n\t\n\t function getEventsInPeriod(calendarDate, period, allEvents) {\n\t var startPeriod = moment(calendarDate).startOf(period);\n\t var endPeriod = moment(calendarDate).endOf(period);\n\t return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n\t }\n\t\n\t function getBadgeTotal(events) {\n\t return events.filter(function(event) {\n\t return event.incrementsBadgeTotal !== false;\n\t }).length;\n\t }\n\t\n\t function getWeekDayNames() {\n\t var weekdays = [];\n\t var count = 0;\n\t while (count < 7) {\n\t weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n\t }\n\t return weekdays;\n\t }\n\t\n\t function getYearView(events, currentDay, cellModifier) {\n\t\n\t var view = [];\n\t var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n\t var month = moment(currentDay).startOf('year');\n\t var count = 0;\n\t while (count < 12) {\n\t var startPeriod = month.clone();\n\t var endPeriod = startPeriod.clone().endOf('month');\n\t var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n\t var cell = {\n\t label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n\t isToday: startPeriod.isSame(moment().startOf('month')),\n\t events: periodEvents,\n\t date: startPeriod,\n\t badgeTotal: getBadgeTotal(periodEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t view.push(cell);\n\t month.add(1, 'month');\n\t count++;\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getMonthView(events, currentDay, cellModifier) {\n\t\n\t var startOfMonth = moment(currentDay).startOf('month');\n\t var day = startOfMonth.clone().startOf('week');\n\t var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n\t var eventsInPeriod;\n\t if (calendarConfig.displayAllMonthEvents) {\n\t eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n\t } else {\n\t eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n\t }\n\t var view = [];\n\t var today = moment().startOf('day');\n\t\n\t while (day.isBefore(endOfMonthView)) {\n\t\n\t var inMonth = day.month() === moment(currentDay).month();\n\t var monthEvents = [];\n\t if (inMonth || calendarConfig.displayAllMonthEvents) {\n\t monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n\t }\n\t\n\t var cell = {\n\t label: day.date(),\n\t date: day.clone(),\n\t inMonth: inMonth,\n\t isPast: today.isAfter(day),\n\t isToday: today.isSame(day),\n\t isFuture: today.isBefore(day),\n\t isWeekend: [0, 6].indexOf(day.day()) > -1,\n\t events: monthEvents,\n\t badgeTotal: getBadgeTotal(monthEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t\n\t view.push(cell);\n\t\n\t day.add(1, 'day');\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getWeekView(events, currentDay) {\n\t\n\t var startOfWeek = moment(currentDay).startOf('week');\n\t var endOfWeek = moment(currentDay).endOf('week');\n\t var dayCounter = startOfWeek.clone();\n\t var days = [];\n\t var today = moment().startOf('day');\n\t while (days.length < 7) {\n\t days.push({\n\t weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n\t date: dayCounter.clone(),\n\t dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n\t isPast: dayCounter.isBefore(today),\n\t isToday: dayCounter.isSame(today),\n\t isFuture: dayCounter.isAfter(today),\n\t isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n\t });\n\t dayCounter.add(1, 'day');\n\t }\n\t\n\t var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\t\n\t var eventStart = moment(event.startsAt).startOf('day');\n\t var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n\t var weekViewStart = moment(startOfWeek).startOf('day');\n\t var weekViewEnd = moment(endOfWeek).startOf('day');\n\t var offset, span;\n\t\n\t if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n\t offset = 0;\n\t } else {\n\t offset = eventStart.diff(weekViewStart, 'days');\n\t }\n\t\n\t if (eventEnd.isAfter(weekViewEnd)) {\n\t eventEnd = weekViewEnd;\n\t }\n\t\n\t if (eventStart.isBefore(weekViewStart)) {\n\t eventStart = weekViewStart;\n\t }\n\t\n\t span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\t\n\t event.daySpan = span;\n\t event.dayOffset = offset;\n\t\n\t return event;\n\t });\n\t\n\t return {days: days, events: eventsSorted};\n\t\n\t }\n\t\n\t function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t\n\t var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n\t var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n\t var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n\t var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n\t var hourHeightMultiplier = hourHeight / 60;\n\t var buckets = [];\n\t var eventsInPeriod = filterEventsInPeriod(\n\t events,\n\t moment(currentDay).startOf('day').toDate(),\n\t moment(currentDay).endOf('day').toDate()\n\t );\n\t\n\t return eventsInPeriod.map(function(event) {\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t event.top = 0;\n\t } else {\n\t event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n\t }\n\t\n\t if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n\t event.height = calendarHeight - event.top;\n\t } else {\n\t var diffStart = event.startsAt;\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t diffStart = calendarStart.toDate();\n\t }\n\t if (!event.endsAt) {\n\t event.height = 30;\n\t } else {\n\t event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n\t }\n\t }\n\t\n\t if (event.top - event.height > calendarHeight) {\n\t event.height = 0;\n\t }\n\t\n\t event.left = 0;\n\t\n\t return event;\n\t }).filter(function(event) {\n\t return event.height > 0;\n\t }).map(function(event) {\n\t\n\t var cannotFitInABucket = true;\n\t buckets.forEach(function(bucket, bucketIndex) {\n\t var canFitInThisBucket = true;\n\t\n\t bucket.forEach(function(bucketItem) {\n\t if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n\t eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n\t canFitInThisBucket = false;\n\t }\n\t });\n\t\n\t if (canFitInThisBucket && cannotFitInABucket) {\n\t cannotFitInABucket = false;\n\t event.left = bucketIndex * 150;\n\t buckets[bucketIndex].push(event);\n\t }\n\t\n\t });\n\t\n\t if (cannotFitInABucket) {\n\t event.left = buckets.length * 150;\n\t buckets.push([event]);\n\t }\n\t\n\t return event;\n\t\n\t });\n\t\n\t }\n\t\n\t function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t var weekView = getWeekView(events, currentDay);\n\t var newEvents = [];\n\t weekView.days.forEach(function(day) {\n\t var dayEvents = weekView.events.filter(function(event) {\n\t return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n\t });\n\t var newDayEvents = getDayView(\n\t dayEvents,\n\t day.date,\n\t dayViewStart,\n\t dayViewEnd,\n\t dayViewSplit\n\t );\n\t newEvents = newEvents.concat(newDayEvents);\n\t });\n\t weekView.events = newEvents;\n\t return weekView;\n\t }\n\t\n\t function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n\t var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n\t var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n\t }\n\t\n\t return {\n\t getWeekDayNames: getWeekDayNames,\n\t getYearView: getYearView,\n\t getMonthView: getMonthView,\n\t getWeekView: getWeekView,\n\t getDayView: getDayView,\n\t getWeekViewWithTimes: getWeekViewWithTimes,\n\t getDayViewHeight: getDayViewHeight,\n\t adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n\t formatDate: formatDate,\n\t eventIsInPeriod: eventIsInPeriod //expose for testing only\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarTitle', [\"moment\", \"calendarConfig\", \"calendarHelper\", function(moment, calendarConfig, calendarHelper) {\n\t\n\t function day(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n\t }\n\t\n\t function week(currentDay) {\n\t var weekTitleLabel = calendarConfig.titleFormats.week;\n\t return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n\t }\n\t\n\t function month(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n\t }\n\t\n\t function year(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n\t }\n\t\n\t return {\n\t day: day,\n\t week: week,\n\t month: month,\n\t year: year\n\t };\n\t\n\t }]);\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar interact;\n\ttry {\n\t interact = __webpack_require__(27);\n\t} catch (e) {\n\t interact = null;\n\t}\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('interact', interact);\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\tif(typeof interact === 'undefined') {var e = new Error(\"Cannot find module \\\"interact\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\n\tmodule.exports = interact;\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar moment = __webpack_require__(29);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('moment', moment);\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\tmodule.exports = moment;\n\n/***/ }\n/******/ ]);\n"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap f9365143e6b9940e60b4\n **/","/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tfunction requireAll(r) {\n\t r.keys().forEach(r);\n\t}\n\t\n\tmodule.exports = __webpack_require__(1);\n\t\n\trequireAll(__webpack_require__(3));\n\trequireAll(__webpack_require__(17));\n\trequireAll(__webpack_require__(21));\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar MODULE_NAME = 'mwl.calendar';\n\t\n\tangular.module(MODULE_NAME, []);\n\t\n\tmodule.exports = MODULE_NAME;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = angular;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./mwlCalendar.js\": 4,\n\t\t\"./mwlCalendarDay.js\": 5,\n\t\t\"./mwlCalendarHourList.js\": 6,\n\t\t\"./mwlCalendarMonth.js\": 7,\n\t\t\"./mwlCalendarSlideBox.js\": 8,\n\t\t\"./mwlCalendarWeek.js\": 9,\n\t\t\"./mwlCalendarYear.js\": 10,\n\t\t\"./mwlCollapseFallback.js\": 11,\n\t\t\"./mwlDateModifier.js\": 12,\n\t\t\"./mwlDraggable.js\": 13,\n\t\t\"./mwlDroppable.js\": 14,\n\t\t\"./mwlElementDimensions.js\": 15,\n\t\t\"./mwlResizable.js\": 16\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 3;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarCtrl', function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\t\n\t var vm = this;\n\t\n\t $scope.events = $scope.events || [];\n\t\n\t vm.changeView = function(view, newDay) {\n\t $scope.view = view;\n\t $scope.currentDay = newDay;\n\t };\n\t\n\t vm.drillDown = function(date) {\n\t\n\t var rawDate = moment(date).toDate();\n\t\n\t var nextView = {\n\t year: 'month',\n\t month: 'day',\n\t week: 'day'\n\t };\n\t\n\t if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n\t vm.changeView(nextView[$scope.view], rawDate);\n\t }\n\t\n\t };\n\t\n\t var previousDate = moment($scope.currentDay);\n\t var previousView = angular.copy($scope.view);\n\t\n\t //Use a debounce to prevent it being called 3 times on initialisation\n\t var refreshCalendar = calendarDebounce(function() {\n\t if (calendarTitle[$scope.view]) {\n\t $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n\t }\n\t\n\t $scope.events = $scope.events.map(function(event, index) {\n\t Object.defineProperty(event, '$id', {enumerable: false, value: index});\n\t return event;\n\t });\n\t\n\t //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n\t var currentDate = moment($scope.currentDay);\n\t var shouldUpdate = true;\n\t if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n\t $scope.view === previousView) {\n\t shouldUpdate = false;\n\t }\n\t previousDate = currentDate;\n\t previousView = angular.copy($scope.view);\n\t\n\t if (shouldUpdate) {\n\t $scope.$broadcast('calendar.refreshView');\n\t }\n\t }, 50);\n\t\n\t //Auto update the calendar when the locale changes\n\t var unbindLocaleWatcher = $scope.$watch(function() {\n\t return moment.locale() + $locale.id;\n\t }, refreshCalendar);\n\t\n\t var unbindOnDestroy = [];\n\t unbindOnDestroy.push(unbindLocaleWatcher);\n\t\n\t //Refresh the calendar when any of these variables change.\n\t /* eslint-disable angular/ng_on_watch */\n\t unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n\t unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n\t /* eslint-enable angular/ng_on_watch */\n\t\n\t //Remove any watchers when the calendar is destroyed\n\t var unbindDestroyListener = $scope.$on('$destroy', function() {\n\t unbindOnDestroy.forEach(function(unbind) {\n\t unbind();\n\t });\n\t });\n\t unbindOnDestroy.push(unbindDestroyListener);\n\t\n\t })\n\t .directive('mwlCalendar', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendar.html',\n\t restrict: 'EA',\n\t scope: {\n\t events: '=',\n\t view: '=',\n\t viewTitle: '=',\n\t currentDay: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onEventClick: '&',\n\t onEventTimesChanged: '&',\n\t onEditEventClick: '&',\n\t onDeleteEventClick: '&',\n\t onTimespanClick: '&',\n\t onDrillDownClick: '&',\n\t cellModifier: '&',\n\t dayViewStart: '@',\n\t dayViewEnd: '@',\n\t dayViewSplit: '@'\n\t },\n\t controller: 'MwlCalendarCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarDayCtrl', function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.calendarConfig = calendarConfig;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t vm.view = calendarHelper.getDayView(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.eventDragComplete = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n\t var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.eventDragged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(minutesDiff, 'minutes');\n\t } else {\n\t end.add(minutesDiff, 'minutes');\n\t }\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t };\n\t\n\t vm.eventResized = function(event, edge, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t if (edge === 'start') {\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t }\n\t };\n\t\n\t })\n\t .directive('mwlCalendarDay', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarDayView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarDayCtrl as vm'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarHourListCtrl', function($scope, moment, calendarConfig, calendarHelper) {\n\t var vm = this;\n\t var dayViewStart, dayViewEnd;\n\t\n\t function updateDays() {\n\t dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n\t dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n\t vm.dayViewSplit = parseInt($scope.dayViewSplit);\n\t vm.hours = [];\n\t var dayCounter = moment(dayViewStart);\n\t for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n\t vm.hours.push({\n\t label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n\t });\n\t dayCounter.add(1, 'hour');\n\t }\n\t }\n\t\n\t var originalLocale = moment.locale();\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t if (originalLocale !== moment.locale()) {\n\t originalLocale = moment.locale();\n\t updateDays();\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t updateDays();\n\t\n\t })\n\t .directive('mwlCalendarHourList', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarHourList.html',\n\t controller: 'MwlCalendarHourListCtrl as vm',\n\t scope: {\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarMonthCtrl', function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t\n\t vm.weekDays = calendarHelper.getWeekDayNames();\n\t\n\t vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t var rows = Math.floor(vm.view.length / 7);\n\t vm.monthOffsets = [];\n\t for (var i = 0; i < rows; i++) {\n\t vm.monthOffsets.push(i * 7);\n\t }\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(day) {\n\t if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n\t vm.dayClicked(day, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.dayClicked = function(day, dayClickedFirstRun) {\n\t\n\t if (!dayClickedFirstRun) {\n\t $scope.onTimespanClick({\n\t calendarDate: day.date.toDate()\n\t });\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var dayIndex = vm.view.indexOf(day);\n\t if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n\t vm.openDayIndex = null; //close the open day\n\t } else {\n\t vm.openDayIndex = dayIndex;\n\t vm.openRowIndex = Math.floor(dayIndex / 7);\n\t }\n\t\n\t };\n\t\n\t vm.highlightEvent = function(event, shouldAddClass) {\n\t\n\t vm.view.forEach(function(day) {\n\t delete day.highlightClass;\n\t if (shouldAddClass) {\n\t var dayContainsEvent = day.events.indexOf(event) > -1;\n\t if (dayContainsEvent) {\n\t day.highlightClass = 'day-highlight dh-event-' + event.type;\n\t }\n\t }\n\t });\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newDayDate) {\n\t\n\t var newStart = moment(event.startsAt)\n\t .date(moment(newDayDate).date())\n\t .month(moment(newDayDate).month());\n\t\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newDayDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t })\n\t .directive('mwlCalendarMonth', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarMonthView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t onEventTimesChanged: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarMonthCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarSlideBoxCtrl', function($scope, $sce) {\n\t\n\t var vm = this;\n\t vm.$sce = $sce;\n\t\n\t var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n\t vm.shouldCollapse = !isOpen;\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t })\n\t .directive('mwlCalendarSlideBox', function() {\n\t\n\t return {\n\t restrict: 'EA',\n\t templateUrl: 'src/templates/calendarSlideBox.html',\n\t replace: true,\n\t controller: 'MwlCalendarSlideBoxCtrl as vm',\n\t require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n\t link: function(scope, elm, attrs, ctrls) {\n\t scope.isMonthView = !!ctrls[0];\n\t scope.isYearView = !!ctrls[1];\n\t },\n\t scope: {\n\t isOpen: '=',\n\t events: '=',\n\t onEventClick: '=',\n\t editEventHtml: '=',\n\t onEditEventClick: '=',\n\t deleteEventHtml: '=',\n\t onDeleteEventClick: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarWeekCtrl', function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\t\n\t var vm = this;\n\t\n\t vm.showTimes = calendarConfig.showTimesOnWeekView;\n\t vm.$sce = $sce;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.dayViewHeight = calendarHelper.getDayViewHeight(\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t if (vm.showTimes) {\n\t vm.view = calendarHelper.getWeekViewWithTimes(\n\t $scope.events,\n\t $scope.currentDay,\n\t $scope.dayViewStart,\n\t $scope.dayViewEnd,\n\t $scope.dayViewSplit\n\t );\n\t } else {\n\t vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n\t }\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\t\n\t var newStart = moment(event.startsAt).add(daysDiff, 'days');\n\t var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\t\n\t if (minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t newStart = newStart.add(minutesDiff, 'minutes');\n\t newEnd = newEnd.add(minutesDiff, 'minutes');\n\t }\n\t\n\t delete event.tempStartsAt;\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t vm.weekResized = function(event, edge, daysDiff) {\n\t\n\t var start = moment(event.startsAt);\n\t var end = moment(event.endsAt);\n\t if (edge === 'start') {\n\t start.add(daysDiff, 'days');\n\t } else {\n\t end.add(daysDiff, 'days');\n\t }\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarNewEventStart: start.toDate(),\n\t calendarNewEventEnd: end.toDate()\n\t });\n\t\n\t };\n\t\n\t vm.tempTimeChanged = function(event, minuteChunksMoved) {\n\t var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n\t event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n\t };\n\t\n\t })\n\t .directive('mwlCalendarWeek', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarWeekView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t dayViewStart: '=',\n\t dayViewEnd: '=',\n\t dayViewSplit: '='\n\t },\n\t controller: 'MwlCalendarWeekCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCalendarYearCtrl', function($scope, moment, calendarHelper) {\n\t\n\t var vm = this;\n\t var firstRun = true;\n\t\n\t var unbindListener = $scope.$on('calendar.refreshView', function() {\n\t vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\t\n\t //Auto open the calendar to the current day if set\n\t if ($scope.autoOpen && firstRun) {\n\t firstRun = false;\n\t vm.view.forEach(function(month) {\n\t if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n\t vm.monthClicked(month, true);\n\t }\n\t });\n\t }\n\t\n\t });\n\t\n\t $scope.$on('$destroy', function() {\n\t unbindListener();\n\t });\n\t\n\t vm.monthClicked = function(month, monthClickedFirstRun) {\n\t\n\t if (!monthClickedFirstRun) {\n\t $scope.onTimespanClick({calendarDate: month.date.toDate()});\n\t }\n\t\n\t vm.openRowIndex = null;\n\t var monthIndex = vm.view.indexOf(month);\n\t if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n\t vm.openMonthIndex = null; //close the open month\n\t } else {\n\t vm.openMonthIndex = monthIndex;\n\t vm.openRowIndex = Math.floor(monthIndex / 4);\n\t }\n\t\n\t };\n\t\n\t vm.handleEventDrop = function(event, newMonthDate) {\n\t var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n\t var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\t\n\t $scope.onEventTimesChanged({\n\t calendarEvent: event,\n\t calendarDate: newMonthDate,\n\t calendarNewEventStart: newStart.toDate(),\n\t calendarNewEventEnd: newEnd.toDate()\n\t });\n\t };\n\t\n\t })\n\t .directive('mwlCalendarYear', function() {\n\t\n\t return {\n\t templateUrl: 'src/templates/calendarYearView.html',\n\t restrict: 'EA',\n\t require: '^mwlCalendar',\n\t scope: {\n\t events: '=',\n\t currentDay: '=',\n\t onEventClick: '=',\n\t onEventTimesChanged: '=',\n\t onEditEventClick: '=',\n\t onDeleteEventClick: '=',\n\t editEventHtml: '=',\n\t deleteEventHtml: '=',\n\t autoOpen: '=',\n\t onTimespanClick: '=',\n\t cellModifier: '='\n\t },\n\t controller: 'MwlCalendarYearCtrl as vm',\n\t link: function(scope, element, attrs, calendarCtrl) {\n\t scope.vm.calendarCtrl = calendarCtrl;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlCollapseFallbackCtrl', function($scope, $attrs, $element) {\n\t var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n\t if (shouldCollapse) {\n\t $element.addClass('ng-hide');\n\t } else {\n\t $element.removeClass('ng-hide');\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t unbindWatcher();\n\t });\n\t\n\t })\n\t .directive('mwlCollapseFallback', function($injector) {\n\t\n\t if ($injector.has('collapseDirective')) {\n\t return {};\n\t }\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlCollapseFallbackCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDateModifierCtrl', function($element, $attrs, $scope, moment) {\n\t\n\t function onClick() {\n\t if (angular.isDefined($attrs.setToToday)) {\n\t $scope.date = new Date();\n\t } else if (angular.isDefined($attrs.increment)) {\n\t $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n\t } else if (angular.isDefined($attrs.decrement)) {\n\t $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n\t }\n\t $scope.$apply();\n\t }\n\t\n\t $element.bind('click', onClick);\n\t\n\t $scope.$on('$destroy', function() {\n\t $element.unbind('click', onClick);\n\t });\n\t\n\t })\n\t .directive('mwlDateModifier', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDateModifierCtrl',\n\t scope: {\n\t date: '=',\n\t increment: '=',\n\t decrement: '='\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDraggableCtrl', function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t function translateElement(elm, transformValue) {\n\t return elm\n\t .css('transform', transformValue)\n\t .css('-ms-transform', transformValue)\n\t .css('-webkit-transform', transformValue);\n\t }\n\t\n\t function canDrag() {\n\t return $parse($attrs.mwlDraggable)($scope);\n\t }\n\t\n\t function getUnitsMoved(x, y, gridDimensions) {\n\t\n\t var result = {x: x, y: y};\n\t\n\t if (gridDimensions && gridDimensions.x) {\n\t result.x /= gridDimensions.x;\n\t }\n\t\n\t if (gridDimensions && gridDimensions.y) {\n\t result.y /= gridDimensions.y;\n\t }\n\t\n\t return result;\n\t\n\t }\n\t\n\t interact($element[0]).draggable({\n\t snap: snap,\n\t onstart: function(event) {\n\t if (canDrag()) {\n\t angular.element(event.target).addClass('dragging-active');\n\t event.target.dropData = $parse($attrs.dropData)($scope);\n\t event.target.style.pointerEvents = 'none';\n\t if ($attrs.onDragStart) {\n\t $parse($attrs.onDragStart)($scope);\n\t $scope.$apply();\n\t }\n\t }\n\t },\n\t onmove: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n\t var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\t\n\t switch ($parse($attrs.axis)($scope)) {\n\t case 'x':\n\t y = 0;\n\t break;\n\t\n\t case 'y':\n\t x = 0;\n\t break;\n\t\n\t default:\n\t }\n\t\n\t if ($window.getComputedStyle(elm[0]).position === 'static') {\n\t elm.css('position', 'relative');\n\t }\n\t\n\t translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n\t .css('z-index', 1000)\n\t .attr('data-x', x)\n\t .attr('data-y', y);\n\t\n\t if ($attrs.onDrag) {\n\t $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canDrag()) {\n\t var elm = angular.element(event.target);\n\t var x = elm.attr('data-x');\n\t var y = elm.attr('data-y');\n\t\n\t event.target.style.pointerEvents = 'auto';\n\t if ($attrs.onDragEnd) {\n\t $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t $timeout(function() {\n\t translateElement(elm, null)\n\t .removeAttr('data-x')\n\t .removeAttr('data-y')\n\t .removeClass('dragging-active');\n\t }, 50);\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlDraggable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDraggableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlDroppableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t interact($element[0]).dropzone({\n\t ondragenter: function(event) {\n\t angular.element(event.target).addClass('drop-active');\n\t },\n\t ondragleave: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondropdeactivate: function(event) {\n\t angular.element(event.target).removeClass('drop-active');\n\t },\n\t ondrop: function(event) {\n\t if (event.relatedTarget.dropData) {\n\t $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n\t $scope.$apply();\n\t }\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlDroppable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlDroppableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlElementDimensionsCtrl', function($element, $scope, $parse, $attrs) {\n\t\n\t $parse($attrs.mwlElementDimensions).assign($scope, {\n\t width: $element[0].offsetWidth,\n\t height: $element[0].offsetHeight\n\t });\n\t\n\t })\n\t .directive('mwlElementDimensions', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlElementDimensionsCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .controller('MwlResizableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\t\n\t if (!interact) {\n\t return;\n\t }\n\t\n\t var snap, snapGridDimensions;\n\t if ($attrs.snapGrid) {\n\t snapGridDimensions = $parse($attrs.snapGrid)($scope);\n\t snap = {\n\t targets: [\n\t interact.createSnapGrid(snapGridDimensions)\n\t ]\n\t };\n\t }\n\t\n\t var originalDimensions = {};\n\t var originalDimensionsStyle = {};\n\t var resizeEdge;\n\t\n\t function canResize() {\n\t return $parse($attrs.mwlResizable)($scope);\n\t }\n\t\n\t function getUnitsResized(edge, elm, gridDimensions) {\n\t var unitsResized = {};\n\t unitsResized.edge = edge;\n\t if (edge === 'start') {\n\t unitsResized.x = elm.data('x');\n\t unitsResized.y = elm.data('y');\n\t } else if (edge === 'end') {\n\t unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n\t unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n\t }\n\t if (gridDimensions && gridDimensions.x) {\n\t unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n\t }\n\t if (gridDimensions && gridDimensions.y) {\n\t unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n\t }\n\t return unitsResized;\n\t }\n\t\n\t interact($element[0]).resizable({\n\t edges: $parse($attrs.resizeEdges)($scope),\n\t snap: snap,\n\t onstart: function(event) {\n\t\n\t if (canResize()) {\n\t resizeEdge = 'end';\n\t var elm = angular.element(event.target);\n\t originalDimensions.height = elm[0].offsetHeight;\n\t originalDimensions.width = elm[0].offsetWidth;\n\t originalDimensionsStyle.height = elm.css('height');\n\t originalDimensionsStyle.width = elm.css('width');\n\t }\n\t\n\t },\n\t onmove: function(event) {\n\t\n\t if (canResize()) {\n\t var elm = angular.element(event.target);\n\t var x = parseFloat(elm.data('x') || 0);\n\t var y = parseFloat(elm.data('y') || 0);\n\t\n\t elm.css({\n\t width: event.rect.width + 'px',\n\t height: event.rect.height + 'px'\n\t });\n\t\n\t // translate when resizing from top or left edges\n\t x += event.deltaRect.left;\n\t y += event.deltaRect.top;\n\t\n\t elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\t\n\t elm.data('x', x);\n\t elm.data('y', y);\n\t\n\t if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n\t resizeEdge = 'start';\n\t }\n\t\n\t if ($attrs.onResize) {\n\t $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n\t $scope.$apply();\n\t }\n\t\n\t }\n\t\n\t },\n\t onend: function(event) {\n\t\n\t if (canResize()) {\n\t\n\t var elm = angular.element(event.target);\n\t var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\t\n\t elm\n\t .data('x', null)\n\t .data('y', null)\n\t .css({\n\t transform: null,\n\t width: originalDimensionsStyle.width,\n\t height: originalDimensionsStyle.height\n\t });\n\t\n\t if ($attrs.onResizeEnd) {\n\t $parse($attrs.onResizeEnd)($scope, unitsResized);\n\t $scope.$apply();\n\t }\n\t }\n\t\n\t }\n\t });\n\t\n\t var unbindDestroy = $scope.$on('$destroy', function() {\n\t unbindDestroy();\n\t interact($element[0]).unset();\n\t });\n\t\n\t })\n\t .directive('mwlResizable', function() {\n\t\n\t return {\n\t restrict: 'A',\n\t controller: 'MwlResizableCtrl'\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarDate.js\": 18,\n\t\t\"./calendarLimitTo.js\": 19,\n\t\t\"./calendarTruncateEventTitle.js\": 20\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 17;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarDate', function(calendarHelper, calendarConfig) {\n\t\n\t function calendarDate(date, format, getFromConfig) {\n\t\n\t if (getFromConfig === true) {\n\t format = calendarConfig.dateFormats[format];\n\t }\n\t\n\t return calendarHelper.formatDate(date, format);\n\t\n\t }\n\t\n\t calendarDate.$stateful = true;\n\t\n\t return calendarDate;\n\t\n\t });\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarLimitTo', function(limitToFilter) {\n\t\n\t if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n\t return limitToFilter;\n\t }\n\t\n\t //Copied from the angular source. Only 1.4 has the begin functionality.\n\t return function(input, limit, begin) {\n\t if (Math.abs(Number(limit)) === Infinity) {\n\t limit = Number(limit);\n\t } else {\n\t limit = parseInt(limit);\n\t }\n\t if (isNaN(limit)) {\n\t return input;\n\t }\n\t\n\t if (angular.isNumber(input)) {\n\t input = input.toString();\n\t }\n\t if (!angular.isArray(input) && !angular.isString(input)) {\n\t return input;\n\t }\n\t\n\t begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n\t begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\t\n\t if (limit >= 0) {\n\t return input.slice(begin, begin + limit);\n\t } else if (begin === 0) {\n\t return input.slice(limit, input.length);\n\t } else {\n\t return input.slice(Math.max(0, begin + limit), begin);\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .filter('calendarTruncateEventTitle', function() {\n\t\n\t return function(string, length, boxHeight) {\n\t if (!string) {\n\t return '';\n\t }\n\t\n\t //Only truncate if if actually needs truncating\n\t if (string.length >= length && string.length / 20 > boxHeight / 30) {\n\t return string.substr(0, length) + '...';\n\t } else {\n\t return string;\n\t }\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./calendarConfig.js\": 22,\n\t\t\"./calendarDebounce.js\": 23,\n\t\t\"./calendarHelper.js\": 24,\n\t\t\"./calendarTitle.js\": 25,\n\t\t\"./interact.js\": 26,\n\t\t\"./moment.js\": 28\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 21;\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .provider('calendarConfig', function() {\n\t\n\t var defaultFormats = {\n\t angular: {\n\t date: {\n\t hour: 'ha',\n\t day: 'd MMM',\n\t month: 'MMMM',\n\t weekDay: 'EEEE',\n\t time: 'HH:mm',\n\t datetime: 'MMM d, h:mm a'\n\t },\n\t title: {\n\t day: 'EEEE d MMMM, yyyy',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM yyyy',\n\t year: 'yyyy'\n\t }\n\t },\n\t moment: {\n\t date: {\n\t hour: 'ha',\n\t day: 'D MMM',\n\t month: 'MMMM',\n\t weekDay: 'dddd',\n\t time: 'HH:mm',\n\t datetime: 'MMM D, h:mm a'\n\t },\n\t title: {\n\t day: 'dddd D MMMM, YYYY',\n\t week: 'Week {week} of {year}',\n\t month: 'MMMM YYYY',\n\t year: 'YYYY'\n\t }\n\t }\n\t };\n\t\n\t var dateFormatter = 'angular';\n\t var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t var showTimesOnWeekView = false;\n\t\n\t var i18nStrings = {\n\t eventsLabel: 'Events',\n\t timeLabel: 'Time'\n\t };\n\t\n\t var displayAllMonthEvents = false;\n\t\n\t var configProvider = this;\n\t\n\t configProvider.setDateFormats = function(formats) {\n\t angular.extend(defaultDateFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setTitleFormats = function(formats) {\n\t angular.extend(defaultTitleFormats, formats);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setI18nStrings = function(strings) {\n\t angular.extend(i18nStrings, strings);\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDisplayAllMonthEvents = function(value) {\n\t displayAllMonthEvents = value;\n\t return configProvider;\n\t };\n\t\n\t configProvider.setDateFormatter = function(value) {\n\t if (['angular', 'moment'].indexOf(value) === -1) {\n\t throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n\t }\n\t dateFormatter = value;\n\t defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n\t defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n\t return configProvider;\n\t };\n\t\n\t configProvider.showTimesOnWeekView = function(value) {\n\t showTimesOnWeekView = value; //experimental, and ignores the event end date\n\t return configProvider;\n\t };\n\t\n\t configProvider.$get = function() {\n\t return {\n\t dateFormats: defaultDateFormats,\n\t titleFormats: defaultTitleFormats,\n\t i18nStrings: i18nStrings,\n\t displayAllMonthEvents: displayAllMonthEvents,\n\t dateFormatter: dateFormatter,\n\t showTimesOnWeekView: showTimesOnWeekView\n\t };\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .service('calendarDebounce', function($timeout) {\n\t\n\t function debounce(func, wait, immediate) {\n\t var timeout;\n\t return function() {\n\t var context = this, args = arguments;\n\t function later() {\n\t timeout = null;\n\t if (!immediate) {\n\t func.apply(context, args);\n\t }\n\t }\n\t var callNow = immediate && !timeout;\n\t $timeout.cancel(timeout);\n\t timeout = $timeout(later, wait);\n\t if (callNow) {\n\t func.apply(context, args);\n\t }\n\t };\n\t }\n\t\n\t return debounce;\n\t\n\t });\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarHelper', function(dateFilter, moment, calendarConfig) {\n\t\n\t function formatDate(date, format) {\n\t if (calendarConfig.dateFormatter === 'angular') {\n\t return dateFilter(moment(date).toDate(), format);\n\t } else if (calendarConfig.dateFormatter === 'moment') {\n\t return moment(date).format(format);\n\t }\n\t }\n\t\n\t function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n\t if (!oldEnd) {\n\t return oldEnd;\n\t }\n\t var diffInSeconds = moment(newStart).diff(moment(oldStart));\n\t return moment(oldEnd).add(diffInSeconds);\n\t }\n\t\n\t function eventIsInPeriod(event, periodStart, periodEnd) {\n\t\n\t var eventStart = moment(event.startsAt);\n\t var eventEnd = moment(event.endsAt || event.startsAt);\n\t periodStart = moment(periodStart);\n\t periodEnd = moment(periodEnd);\n\t\n\t if (angular.isDefined(event.recursOn)) {\n\t\n\t switch (event.recursOn) {\n\t case 'year':\n\t eventStart.set({\n\t year: periodStart.year()\n\t });\n\t break;\n\t\n\t case 'month':\n\t eventStart.set({\n\t year: periodStart.year(),\n\t month: periodStart.month()\n\t });\n\t break;\n\t\n\t default:\n\t throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n\t }\n\t\n\t eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\t\n\t }\n\t\n\t return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n\t (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n\t (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n\t eventStart.isSame(periodStart) ||\n\t eventEnd.isSame(periodEnd);\n\t\n\t }\n\t\n\t function filterEventsInPeriod(events, startPeriod, endPeriod) {\n\t return events.filter(function(event) {\n\t return eventIsInPeriod(event, startPeriod, endPeriod);\n\t });\n\t }\n\t\n\t function getEventsInPeriod(calendarDate, period, allEvents) {\n\t var startPeriod = moment(calendarDate).startOf(period);\n\t var endPeriod = moment(calendarDate).endOf(period);\n\t return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n\t }\n\t\n\t function getBadgeTotal(events) {\n\t return events.filter(function(event) {\n\t return event.incrementsBadgeTotal !== false;\n\t }).length;\n\t }\n\t\n\t function getWeekDayNames() {\n\t var weekdays = [];\n\t var count = 0;\n\t while (count < 7) {\n\t weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n\t }\n\t return weekdays;\n\t }\n\t\n\t function getYearView(events, currentDay, cellModifier) {\n\t\n\t var view = [];\n\t var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n\t var month = moment(currentDay).startOf('year');\n\t var count = 0;\n\t while (count < 12) {\n\t var startPeriod = month.clone();\n\t var endPeriod = startPeriod.clone().endOf('month');\n\t var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n\t var cell = {\n\t label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n\t isToday: startPeriod.isSame(moment().startOf('month')),\n\t events: periodEvents,\n\t date: startPeriod,\n\t badgeTotal: getBadgeTotal(periodEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t view.push(cell);\n\t month.add(1, 'month');\n\t count++;\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getMonthView(events, currentDay, cellModifier) {\n\t\n\t var startOfMonth = moment(currentDay).startOf('month');\n\t var day = startOfMonth.clone().startOf('week');\n\t var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n\t var eventsInPeriod;\n\t if (calendarConfig.displayAllMonthEvents) {\n\t eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n\t } else {\n\t eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n\t }\n\t var view = [];\n\t var today = moment().startOf('day');\n\t\n\t while (day.isBefore(endOfMonthView)) {\n\t\n\t var inMonth = day.month() === moment(currentDay).month();\n\t var monthEvents = [];\n\t if (inMonth || calendarConfig.displayAllMonthEvents) {\n\t monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n\t }\n\t\n\t var cell = {\n\t label: day.date(),\n\t date: day.clone(),\n\t inMonth: inMonth,\n\t isPast: today.isAfter(day),\n\t isToday: today.isSame(day),\n\t isFuture: today.isBefore(day),\n\t isWeekend: [0, 6].indexOf(day.day()) > -1,\n\t events: monthEvents,\n\t badgeTotal: getBadgeTotal(monthEvents)\n\t };\n\t\n\t cellModifier({calendarCell: cell});\n\t\n\t view.push(cell);\n\t\n\t day.add(1, 'day');\n\t }\n\t\n\t return view;\n\t\n\t }\n\t\n\t function getWeekView(events, currentDay) {\n\t\n\t var startOfWeek = moment(currentDay).startOf('week');\n\t var endOfWeek = moment(currentDay).endOf('week');\n\t var dayCounter = startOfWeek.clone();\n\t var days = [];\n\t var today = moment().startOf('day');\n\t while (days.length < 7) {\n\t days.push({\n\t weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n\t date: dayCounter.clone(),\n\t dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n\t isPast: dayCounter.isBefore(today),\n\t isToday: dayCounter.isSame(today),\n\t isFuture: dayCounter.isAfter(today),\n\t isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n\t });\n\t dayCounter.add(1, 'day');\n\t }\n\t\n\t var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\t\n\t var eventStart = moment(event.startsAt).startOf('day');\n\t var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n\t var weekViewStart = moment(startOfWeek).startOf('day');\n\t var weekViewEnd = moment(endOfWeek).startOf('day');\n\t var offset, span;\n\t\n\t if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n\t offset = 0;\n\t } else {\n\t offset = eventStart.diff(weekViewStart, 'days');\n\t }\n\t\n\t if (eventEnd.isAfter(weekViewEnd)) {\n\t eventEnd = weekViewEnd;\n\t }\n\t\n\t if (eventStart.isBefore(weekViewStart)) {\n\t eventStart = weekViewStart;\n\t }\n\t\n\t span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\t\n\t event.daySpan = span;\n\t event.dayOffset = offset;\n\t\n\t return event;\n\t });\n\t\n\t return {days: days, events: eventsSorted};\n\t\n\t }\n\t\n\t function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t\n\t var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n\t var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n\t var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n\t var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n\t var hourHeightMultiplier = hourHeight / 60;\n\t var buckets = [];\n\t var eventsInPeriod = filterEventsInPeriod(\n\t events,\n\t moment(currentDay).startOf('day').toDate(),\n\t moment(currentDay).endOf('day').toDate()\n\t );\n\t\n\t return eventsInPeriod.map(function(event) {\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t event.top = 0;\n\t } else {\n\t event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n\t }\n\t\n\t if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n\t event.height = calendarHeight - event.top;\n\t } else {\n\t var diffStart = event.startsAt;\n\t if (moment(event.startsAt).isBefore(calendarStart)) {\n\t diffStart = calendarStart.toDate();\n\t }\n\t if (!event.endsAt) {\n\t event.height = 30;\n\t } else {\n\t event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n\t }\n\t }\n\t\n\t if (event.top - event.height > calendarHeight) {\n\t event.height = 0;\n\t }\n\t\n\t event.left = 0;\n\t\n\t return event;\n\t }).filter(function(event) {\n\t return event.height > 0;\n\t }).map(function(event) {\n\t\n\t var cannotFitInABucket = true;\n\t buckets.forEach(function(bucket, bucketIndex) {\n\t var canFitInThisBucket = true;\n\t\n\t bucket.forEach(function(bucketItem) {\n\t if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n\t eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n\t canFitInThisBucket = false;\n\t }\n\t });\n\t\n\t if (canFitInThisBucket && cannotFitInABucket) {\n\t cannotFitInABucket = false;\n\t event.left = bucketIndex * 150;\n\t buckets[bucketIndex].push(event);\n\t }\n\t\n\t });\n\t\n\t if (cannotFitInABucket) {\n\t event.left = buckets.length * 150;\n\t buckets.push([event]);\n\t }\n\t\n\t return event;\n\t\n\t });\n\t\n\t }\n\t\n\t function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\t var weekView = getWeekView(events, currentDay);\n\t var newEvents = [];\n\t weekView.days.forEach(function(day) {\n\t var dayEvents = weekView.events.filter(function(event) {\n\t return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n\t });\n\t var newDayEvents = getDayView(\n\t dayEvents,\n\t day.date,\n\t dayViewStart,\n\t dayViewEnd,\n\t dayViewSplit\n\t );\n\t newEvents = newEvents.concat(newDayEvents);\n\t });\n\t weekView.events = newEvents;\n\t return weekView;\n\t }\n\t\n\t function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n\t var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n\t var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n\t var hourHeight = (60 / dayViewSplit) * 30;\n\t return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n\t }\n\t\n\t return {\n\t getWeekDayNames: getWeekDayNames,\n\t getYearView: getYearView,\n\t getMonthView: getMonthView,\n\t getWeekView: getWeekView,\n\t getDayView: getDayView,\n\t getWeekViewWithTimes: getWeekViewWithTimes,\n\t getDayViewHeight: getDayViewHeight,\n\t adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n\t formatDate: formatDate,\n\t eventIsInPeriod: eventIsInPeriod //expose for testing only\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .factory('calendarTitle', function(moment, calendarConfig, calendarHelper) {\n\t\n\t function day(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n\t }\n\t\n\t function week(currentDay) {\n\t var weekTitleLabel = calendarConfig.titleFormats.week;\n\t return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n\t }\n\t\n\t function month(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n\t }\n\t\n\t function year(currentDay) {\n\t return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n\t }\n\t\n\t return {\n\t day: day,\n\t week: week,\n\t month: month,\n\t year: year\n\t };\n\t\n\t });\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar interact;\n\ttry {\n\t interact = __webpack_require__(27);\n\t} catch (e) {\n\t interact = null;\n\t}\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('interact', interact);\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\tif(typeof interact === 'undefined') {var e = new Error(\"Cannot find module \\\"interact\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\n\tmodule.exports = interact;\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(2);\n\tvar moment = __webpack_require__(29);\n\t\n\tangular\n\t .module('mwl.calendar')\n\t .constant('moment', moment);\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\tmodule.exports = moment;\n\n/***/ }\n/******/ ]);\n","function requireAll(r) {\n r.keys().forEach(r);\n}\n\nmodule.exports = require('./src/module');\n\nrequireAll(require.context('./src/directives', true, /\\.js$/));\nrequireAll(require.context('./src/filters', true, /\\.js$/));\nrequireAll(require.context('./src/services', true, /\\.js$/));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/","var map = {\n\t\"./mwlCalendar.js\": 4,\n\t\"./mwlCalendarDay.js\": 5,\n\t\"./mwlCalendarHourList.js\": 6,\n\t\"./mwlCalendarMonth.js\": 7,\n\t\"./mwlCalendarSlideBox.js\": 8,\n\t\"./mwlCalendarWeek.js\": 9,\n\t\"./mwlCalendarYear.js\": 10,\n\t\"./mwlCollapseFallback.js\": 11,\n\t\"./mwlDateModifier.js\": 12,\n\t\"./mwlDraggable.js\": 13,\n\t\"./mwlDroppable.js\": 14,\n\t\"./mwlElementDimensions.js\": 15,\n\t\"./mwlResizable.js\": 16\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 3;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives \\.js$\n ** module id = 3\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarCtrl', function($scope, $timeout, $window, $locale, moment, calendarTitle, calendarDebounce) {\n\n var vm = this;\n\n $scope.events = $scope.events || [];\n\n vm.changeView = function(view, newDay) {\n $scope.view = view;\n $scope.currentDay = newDay;\n };\n\n vm.drillDown = function(date) {\n\n var rawDate = moment(date).toDate();\n\n var nextView = {\n year: 'month',\n month: 'day',\n week: 'day'\n };\n\n if ($scope.onDrillDownClick({calendarDate: rawDate, calendarNextView: nextView[$scope.view]}) !== false) {\n vm.changeView(nextView[$scope.view], rawDate);\n }\n\n };\n\n var previousDate = moment($scope.currentDay);\n var previousView = angular.copy($scope.view);\n\n //Use a debounce to prevent it being called 3 times on initialisation\n var refreshCalendar = calendarDebounce(function() {\n if (calendarTitle[$scope.view]) {\n $scope.viewTitle = calendarTitle[$scope.view]($scope.currentDay);\n }\n\n $scope.events = $scope.events.map(function(event, index) {\n Object.defineProperty(event, '$id', {enumerable: false, value: index});\n return event;\n });\n\n //if on-timespan-click=\"calendarDay = calendarDate\" is set then dont update the view as nothing needs to change\n var currentDate = moment($scope.currentDay);\n var shouldUpdate = true;\n if (previousDate.clone().startOf($scope.view).isSame(currentDate.clone().startOf($scope.view)) && !previousDate.isSame(currentDate) &&\n $scope.view === previousView) {\n shouldUpdate = false;\n }\n previousDate = currentDate;\n previousView = angular.copy($scope.view);\n\n if (shouldUpdate) {\n $scope.$broadcast('calendar.refreshView');\n }\n }, 50);\n\n //Auto update the calendar when the locale changes\n var unbindLocaleWatcher = $scope.$watch(function() {\n return moment.locale() + $locale.id;\n }, refreshCalendar);\n\n var unbindOnDestroy = [];\n unbindOnDestroy.push(unbindLocaleWatcher);\n\n //Refresh the calendar when any of these variables change.\n /* eslint-disable angular/ng_on_watch */\n unbindOnDestroy.push($scope.$watch('currentDay', refreshCalendar));\n unbindOnDestroy.push($scope.$watch('view', refreshCalendar));\n unbindOnDestroy.push($scope.$watch('events', refreshCalendar, true));\n /* eslint-enable angular/ng_on_watch */\n\n //Remove any watchers when the calendar is destroyed\n var unbindDestroyListener = $scope.$on('$destroy', function() {\n unbindOnDestroy.forEach(function(unbind) {\n unbind();\n });\n });\n unbindOnDestroy.push(unbindDestroyListener);\n\n })\n .directive('mwlCalendar', function() {\n\n return {\n templateUrl: 'src/templates/calendar.html',\n restrict: 'EA',\n scope: {\n events: '=',\n view: '=',\n viewTitle: '=',\n currentDay: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onEventClick: '&',\n onEventTimesChanged: '&',\n onEditEventClick: '&',\n onDeleteEventClick: '&',\n onTimespanClick: '&',\n onDrillDownClick: '&',\n cellModifier: '&',\n dayViewStart: '@',\n dayViewEnd: '@',\n dayViewSplit: '@'\n },\n controller: 'MwlCalendarCtrl as vm'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendar.js\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarDayCtrl', function($scope, $timeout, $sce, moment, calendarHelper, calendarConfig) {\n\n var vm = this;\n\n vm.calendarConfig = calendarConfig;\n vm.$sce = $sce;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.dayViewHeight = calendarHelper.getDayViewHeight(\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n\n vm.view = calendarHelper.getDayView(\n $scope.events,\n $scope.currentDay,\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.eventDragComplete = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n var newStart = moment(event.startsAt).add(minutesDiff, 'minutes');\n var newEnd = moment(event.endsAt).add(minutesDiff, 'minutes');\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n vm.eventDragged = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n };\n\n vm.eventResizeComplete = function(event, edge, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n var start = moment(event.startsAt);\n var end = moment(event.endsAt);\n if (edge === 'start') {\n start.add(minutesDiff, 'minutes');\n } else {\n end.add(minutesDiff, 'minutes');\n }\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: start.toDate(),\n calendarNewEventEnd: end.toDate()\n });\n };\n\n vm.eventResized = function(event, edge, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n if (edge === 'start') {\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n }\n };\n\n })\n .directive('mwlCalendarDay', function() {\n\n return {\n templateUrl: 'src/templates/calendarDayView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n },\n controller: 'MwlCalendarDayCtrl as vm'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarDay.js\n ** module id = 5\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarHourListCtrl', function($scope, moment, calendarConfig, calendarHelper) {\n var vm = this;\n var dayViewStart, dayViewEnd;\n\n function updateDays() {\n dayViewStart = moment($scope.dayViewStart || '00:00', 'HH:mm');\n dayViewEnd = moment($scope.dayViewEnd || '23:00', 'HH:mm');\n vm.dayViewSplit = parseInt($scope.dayViewSplit);\n vm.hours = [];\n var dayCounter = moment(dayViewStart);\n for (var i = 0; i <= dayViewEnd.diff(dayViewStart, 'hours'); i++) {\n vm.hours.push({\n label: calendarHelper.formatDate(dayCounter, calendarConfig.dateFormats.hour)\n });\n dayCounter.add(1, 'hour');\n }\n }\n\n var originalLocale = moment.locale();\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n\n if (originalLocale !== moment.locale()) {\n originalLocale = moment.locale();\n updateDays();\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n updateDays();\n\n })\n .directive('mwlCalendarHourList', function() {\n\n return {\n restrict: 'EA',\n templateUrl: 'src/templates/calendarHourList.html',\n controller: 'MwlCalendarHourListCtrl as vm',\n scope: {\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarHourList.js\n ** module id = 6\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarMonthCtrl', function($scope, moment, calendarHelper) {\n\n var vm = this;\n var firstRun = true;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n\n vm.weekDays = calendarHelper.getWeekDayNames();\n\n vm.view = calendarHelper.getMonthView($scope.events, $scope.currentDay, $scope.cellModifier);\n var rows = Math.floor(vm.view.length / 7);\n vm.monthOffsets = [];\n for (var i = 0; i < rows; i++) {\n vm.monthOffsets.push(i * 7);\n }\n\n //Auto open the calendar to the current day if set\n if ($scope.autoOpen && firstRun) {\n firstRun = false;\n vm.view.forEach(function(day) {\n if (day.inMonth && moment($scope.currentDay).startOf('day').isSame(day.date)) {\n vm.dayClicked(day, true);\n }\n });\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.dayClicked = function(day, dayClickedFirstRun) {\n\n if (!dayClickedFirstRun) {\n $scope.onTimespanClick({\n calendarDate: day.date.toDate()\n });\n }\n\n vm.openRowIndex = null;\n var dayIndex = vm.view.indexOf(day);\n if (dayIndex === vm.openDayIndex) { //the day has been clicked and is already open\n vm.openDayIndex = null; //close the open day\n } else {\n vm.openDayIndex = dayIndex;\n vm.openRowIndex = Math.floor(dayIndex / 7);\n }\n\n };\n\n vm.highlightEvent = function(event, shouldAddClass) {\n\n vm.view.forEach(function(day) {\n delete day.highlightClass;\n if (shouldAddClass) {\n var dayContainsEvent = day.events.indexOf(event) > -1;\n if (dayContainsEvent) {\n day.highlightClass = 'day-highlight dh-event-' + event.type;\n }\n }\n });\n\n };\n\n vm.handleEventDrop = function(event, newDayDate) {\n\n var newStart = moment(event.startsAt)\n .date(moment(newDayDate).date())\n .month(moment(newDayDate).month());\n\n var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarDate: newDayDate,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n })\n .directive('mwlCalendarMonth', function() {\n\n return {\n templateUrl: 'src/templates/calendarMonthView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEditEventClick: '=',\n onDeleteEventClick: '=',\n onEventTimesChanged: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onTimespanClick: '=',\n cellModifier: '='\n },\n controller: 'MwlCalendarMonthCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarMonth.js\n ** module id = 7\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarSlideBoxCtrl', function($scope, $sce) {\n\n var vm = this;\n vm.$sce = $sce;\n\n var unbindWatcher = $scope.$watch('isOpen', function(isOpen) {\n vm.shouldCollapse = !isOpen;\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n unbindWatcher();\n });\n\n })\n .directive('mwlCalendarSlideBox', function() {\n\n return {\n restrict: 'EA',\n templateUrl: 'src/templates/calendarSlideBox.html',\n replace: true,\n controller: 'MwlCalendarSlideBoxCtrl as vm',\n require: ['^?mwlCalendarMonth', '^?mwlCalendarYear'],\n link: function(scope, elm, attrs, ctrls) {\n scope.isMonthView = !!ctrls[0];\n scope.isYearView = !!ctrls[1];\n },\n scope: {\n isOpen: '=',\n events: '=',\n onEventClick: '=',\n editEventHtml: '=',\n onEditEventClick: '=',\n deleteEventHtml: '=',\n onDeleteEventClick: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarSlideBox.js\n ** module id = 8\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarWeekCtrl', function($scope, $sce, moment, calendarHelper, calendarConfig) {\n\n var vm = this;\n\n vm.showTimes = calendarConfig.showTimesOnWeekView;\n vm.$sce = $sce;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.dayViewHeight = calendarHelper.getDayViewHeight(\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n if (vm.showTimes) {\n vm.view = calendarHelper.getWeekViewWithTimes(\n $scope.events,\n $scope.currentDay,\n $scope.dayViewStart,\n $scope.dayViewEnd,\n $scope.dayViewSplit\n );\n } else {\n vm.view = calendarHelper.getWeekView($scope.events, $scope.currentDay);\n }\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.weekDragged = function(event, daysDiff, minuteChunksMoved) {\n\n var newStart = moment(event.startsAt).add(daysDiff, 'days');\n var newEnd = moment(event.endsAt).add(daysDiff, 'days');\n\n if (minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n newStart = newStart.add(minutesDiff, 'minutes');\n newEnd = newEnd.add(minutesDiff, 'minutes');\n }\n\n delete event.tempStartsAt;\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n vm.weekResized = function(event, edge, daysDiff) {\n\n var start = moment(event.startsAt);\n var end = moment(event.endsAt);\n if (edge === 'start') {\n start.add(daysDiff, 'days');\n } else {\n end.add(daysDiff, 'days');\n }\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarNewEventStart: start.toDate(),\n calendarNewEventEnd: end.toDate()\n });\n\n };\n\n vm.tempTimeChanged = function(event, minuteChunksMoved) {\n var minutesDiff = minuteChunksMoved * $scope.dayViewSplit;\n event.tempStartsAt = moment(event.startsAt).add(minutesDiff, 'minutes').toDate();\n };\n\n })\n .directive('mwlCalendarWeek', function() {\n\n return {\n templateUrl: 'src/templates/calendarWeekView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n dayViewStart: '=',\n dayViewEnd: '=',\n dayViewSplit: '='\n },\n controller: 'MwlCalendarWeekCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarWeek.js\n ** module id = 9\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCalendarYearCtrl', function($scope, moment, calendarHelper) {\n\n var vm = this;\n var firstRun = true;\n\n var unbindListener = $scope.$on('calendar.refreshView', function() {\n vm.view = calendarHelper.getYearView($scope.events, $scope.currentDay, $scope.cellModifier);\n\n //Auto open the calendar to the current day if set\n if ($scope.autoOpen && firstRun) {\n firstRun = false;\n vm.view.forEach(function(month) {\n if (moment($scope.currentDay).startOf('month').isSame(month.date)) {\n vm.monthClicked(month, true);\n }\n });\n }\n\n });\n\n $scope.$on('$destroy', function() {\n unbindListener();\n });\n\n vm.monthClicked = function(month, monthClickedFirstRun) {\n\n if (!monthClickedFirstRun) {\n $scope.onTimespanClick({calendarDate: month.date.toDate()});\n }\n\n vm.openRowIndex = null;\n var monthIndex = vm.view.indexOf(month);\n if (monthIndex === vm.openMonthIndex) { //the month has been clicked and is already open\n vm.openMonthIndex = null; //close the open month\n } else {\n vm.openMonthIndex = monthIndex;\n vm.openRowIndex = Math.floor(monthIndex / 4);\n }\n\n };\n\n vm.handleEventDrop = function(event, newMonthDate) {\n var newStart = moment(event.startsAt).month(moment(newMonthDate).month());\n var newEnd = calendarHelper.adjustEndDateFromStartDiff(event.startsAt, newStart, event.endsAt);\n\n $scope.onEventTimesChanged({\n calendarEvent: event,\n calendarDate: newMonthDate,\n calendarNewEventStart: newStart.toDate(),\n calendarNewEventEnd: newEnd.toDate()\n });\n };\n\n })\n .directive('mwlCalendarYear', function() {\n\n return {\n templateUrl: 'src/templates/calendarYearView.html',\n restrict: 'EA',\n require: '^mwlCalendar',\n scope: {\n events: '=',\n currentDay: '=',\n onEventClick: '=',\n onEventTimesChanged: '=',\n onEditEventClick: '=',\n onDeleteEventClick: '=',\n editEventHtml: '=',\n deleteEventHtml: '=',\n autoOpen: '=',\n onTimespanClick: '=',\n cellModifier: '='\n },\n controller: 'MwlCalendarYearCtrl as vm',\n link: function(scope, element, attrs, calendarCtrl) {\n scope.vm.calendarCtrl = calendarCtrl;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCalendarYear.js\n ** module id = 10\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlCollapseFallbackCtrl', function($scope, $attrs, $element) {\n var unbindWatcher = $scope.$watch($attrs.mwlCollapseFallback, function(shouldCollapse) {\n if (shouldCollapse) {\n $element.addClass('ng-hide');\n } else {\n $element.removeClass('ng-hide');\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n unbindWatcher();\n });\n\n })\n .directive('mwlCollapseFallback', function($injector) {\n\n if ($injector.has('collapseDirective')) {\n return {};\n }\n\n return {\n restrict: 'A',\n controller: 'MwlCollapseFallbackCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlCollapseFallback.js\n ** module id = 11\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDateModifierCtrl', function($element, $attrs, $scope, moment) {\n\n function onClick() {\n if (angular.isDefined($attrs.setToToday)) {\n $scope.date = new Date();\n } else if (angular.isDefined($attrs.increment)) {\n $scope.date = moment($scope.date).add(1, $scope.increment).toDate();\n } else if (angular.isDefined($attrs.decrement)) {\n $scope.date = moment($scope.date).subtract(1, $scope.decrement).toDate();\n }\n $scope.$apply();\n }\n\n $element.bind('click', onClick);\n\n $scope.$on('$destroy', function() {\n $element.unbind('click', onClick);\n });\n\n })\n .directive('mwlDateModifier', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDateModifierCtrl',\n scope: {\n date: '=',\n increment: '=',\n decrement: '='\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDateModifier.js\n ** module id = 12\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDraggableCtrl', function($element, $scope, $window, $parse, $attrs, $timeout, interact) {\n\n if (!interact) {\n return;\n }\n\n var snap, snapGridDimensions;\n if ($attrs.snapGrid) {\n snapGridDimensions = $parse($attrs.snapGrid)($scope);\n snap = {\n targets: [\n interact.createSnapGrid(snapGridDimensions)\n ]\n };\n }\n\n function translateElement(elm, transformValue) {\n return elm\n .css('transform', transformValue)\n .css('-ms-transform', transformValue)\n .css('-webkit-transform', transformValue);\n }\n\n function canDrag() {\n return $parse($attrs.mwlDraggable)($scope);\n }\n\n function getUnitsMoved(x, y, gridDimensions) {\n\n var result = {x: x, y: y};\n\n if (gridDimensions && gridDimensions.x) {\n result.x /= gridDimensions.x;\n }\n\n if (gridDimensions && gridDimensions.y) {\n result.y /= gridDimensions.y;\n }\n\n return result;\n\n }\n\n interact($element[0]).draggable({\n snap: snap,\n onstart: function(event) {\n if (canDrag()) {\n angular.element(event.target).addClass('dragging-active');\n event.target.dropData = $parse($attrs.dropData)($scope);\n event.target.style.pointerEvents = 'none';\n if ($attrs.onDragStart) {\n $parse($attrs.onDragStart)($scope);\n $scope.$apply();\n }\n }\n },\n onmove: function(event) {\n\n if (canDrag()) {\n var elm = angular.element(event.target);\n var x = (parseFloat(elm.attr('data-x')) || 0) + (event.dx || 0);\n var y = (parseFloat(elm.attr('data-y')) || 0) + (event.dy || 0);\n\n switch ($parse($attrs.axis)($scope)) {\n case 'x':\n y = 0;\n break;\n\n case 'y':\n x = 0;\n break;\n\n default:\n }\n\n if ($window.getComputedStyle(elm[0]).position === 'static') {\n elm.css('position', 'relative');\n }\n\n translateElement(elm, 'translate(' + x + 'px, ' + y + 'px)')\n .css('z-index', 1000)\n .attr('data-x', x)\n .attr('data-y', y);\n\n if ($attrs.onDrag) {\n $parse($attrs.onDrag)($scope, getUnitsMoved(x, y, snapGridDimensions));\n $scope.$apply();\n }\n }\n\n },\n onend: function(event) {\n\n if (canDrag()) {\n var elm = angular.element(event.target);\n var x = elm.attr('data-x');\n var y = elm.attr('data-y');\n\n event.target.style.pointerEvents = 'auto';\n if ($attrs.onDragEnd) {\n $parse($attrs.onDragEnd)($scope, getUnitsMoved(x, y, snapGridDimensions));\n $scope.$apply();\n }\n\n $timeout(function() {\n translateElement(elm, null)\n .removeAttr('data-x')\n .removeAttr('data-y')\n .removeClass('dragging-active');\n }, 50);\n }\n\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlDraggable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDraggableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDraggable.js\n ** module id = 13\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlDroppableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\n if (!interact) {\n return;\n }\n\n interact($element[0]).dropzone({\n ondragenter: function(event) {\n angular.element(event.target).addClass('drop-active');\n },\n ondragleave: function(event) {\n angular.element(event.target).removeClass('drop-active');\n },\n ondropdeactivate: function(event) {\n angular.element(event.target).removeClass('drop-active');\n },\n ondrop: function(event) {\n if (event.relatedTarget.dropData) {\n $parse($attrs.onDrop)($scope, {dropData: event.relatedTarget.dropData});\n $scope.$apply();\n }\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlDroppable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlDroppableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlDroppable.js\n ** module id = 14\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlElementDimensionsCtrl', function($element, $scope, $parse, $attrs) {\n\n $parse($attrs.mwlElementDimensions).assign($scope, {\n width: $element[0].offsetWidth,\n height: $element[0].offsetHeight\n });\n\n })\n .directive('mwlElementDimensions', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlElementDimensionsCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlElementDimensions.js\n ** module id = 15\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .controller('MwlResizableCtrl', function($element, $scope, $parse, $attrs, interact) {\n\n if (!interact) {\n return;\n }\n\n var snap, snapGridDimensions;\n if ($attrs.snapGrid) {\n snapGridDimensions = $parse($attrs.snapGrid)($scope);\n snap = {\n targets: [\n interact.createSnapGrid(snapGridDimensions)\n ]\n };\n }\n\n var originalDimensions = {};\n var originalDimensionsStyle = {};\n var resizeEdge;\n\n function canResize() {\n return $parse($attrs.mwlResizable)($scope);\n }\n\n function getUnitsResized(edge, elm, gridDimensions) {\n var unitsResized = {};\n unitsResized.edge = edge;\n if (edge === 'start') {\n unitsResized.x = elm.data('x');\n unitsResized.y = elm.data('y');\n } else if (edge === 'end') {\n unitsResized.x = parseFloat(elm.css('width').replace('px', '')) - originalDimensions.width;\n unitsResized.y = parseFloat(elm.css('height').replace('px', '')) - originalDimensions.height;\n }\n if (gridDimensions && gridDimensions.x) {\n unitsResized.x = Math.round(unitsResized.x / gridDimensions.x);\n }\n if (gridDimensions && gridDimensions.y) {\n unitsResized.y = Math.round(unitsResized.y / gridDimensions.y);\n }\n return unitsResized;\n }\n\n interact($element[0]).resizable({\n edges: $parse($attrs.resizeEdges)($scope),\n snap: snap,\n onstart: function(event) {\n\n if (canResize()) {\n resizeEdge = 'end';\n var elm = angular.element(event.target);\n originalDimensions.height = elm[0].offsetHeight;\n originalDimensions.width = elm[0].offsetWidth;\n originalDimensionsStyle.height = elm.css('height');\n originalDimensionsStyle.width = elm.css('width');\n }\n\n },\n onmove: function(event) {\n\n if (canResize()) {\n var elm = angular.element(event.target);\n var x = parseFloat(elm.data('x') || 0);\n var y = parseFloat(elm.data('y') || 0);\n\n elm.css({\n width: event.rect.width + 'px',\n height: event.rect.height + 'px'\n });\n\n // translate when resizing from top or left edges\n x += event.deltaRect.left;\n y += event.deltaRect.top;\n\n elm.css('transform', 'translate(' + x + 'px,' + y + 'px)');\n\n elm.data('x', x);\n elm.data('y', y);\n\n if (event.deltaRect.left !== 0 || event.deltaRect.top !== 0) {\n resizeEdge = 'start';\n }\n\n if ($attrs.onResize) {\n $parse($attrs.onResize)($scope, getUnitsResized(resizeEdge, elm, snapGridDimensions));\n $scope.$apply();\n }\n\n }\n\n },\n onend: function(event) {\n\n if (canResize()) {\n\n var elm = angular.element(event.target);\n var unitsResized = getUnitsResized(resizeEdge, elm, snapGridDimensions);\n\n elm\n .data('x', null)\n .data('y', null)\n .css({\n transform: null,\n width: originalDimensionsStyle.width,\n height: originalDimensionsStyle.height\n });\n\n if ($attrs.onResizeEnd) {\n $parse($attrs.onResizeEnd)($scope, unitsResized);\n $scope.$apply();\n }\n }\n\n }\n });\n\n var unbindDestroy = $scope.$on('$destroy', function() {\n unbindDestroy();\n interact($element[0]).unset();\n });\n\n })\n .directive('mwlResizable', function() {\n\n return {\n restrict: 'A',\n controller: 'MwlResizableCtrl'\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/directives/mwlResizable.js\n ** module id = 16\n ** module chunks = 0\n **/","var map = {\n\t\"./calendarDate.js\": 18,\n\t\"./calendarLimitTo.js\": 19,\n\t\"./calendarTruncateEventTitle.js\": 20\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 17;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters \\.js$\n ** module id = 17\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarDate', function(calendarHelper, calendarConfig) {\n\n function calendarDate(date, format, getFromConfig) {\n\n if (getFromConfig === true) {\n format = calendarConfig.dateFormats[format];\n }\n\n return calendarHelper.formatDate(date, format);\n\n }\n\n calendarDate.$stateful = true;\n\n return calendarDate;\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarDate.js\n ** module id = 18\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarLimitTo', function(limitToFilter) {\n\n if (angular.version.minor >= 4) { //1.4+ supports the begin attribute\n return limitToFilter;\n }\n\n //Copied from the angular source. Only 1.4 has the begin functionality.\n return function(input, limit, begin) {\n if (Math.abs(Number(limit)) === Infinity) {\n limit = Number(limit);\n } else {\n limit = parseInt(limit);\n }\n if (isNaN(limit)) {\n return input;\n }\n\n if (angular.isNumber(input)) {\n input = input.toString();\n }\n if (!angular.isArray(input) && !angular.isString(input)) {\n return input;\n }\n\n begin = (!begin || isNaN(begin)) ? 0 : parseInt(begin);\n begin = (begin < 0 && begin >= -input.length) ? input.length + begin : begin;\n\n if (limit >= 0) {\n return input.slice(begin, begin + limit);\n } else if (begin === 0) {\n return input.slice(limit, input.length);\n } else {\n return input.slice(Math.max(0, begin + limit), begin);\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarLimitTo.js\n ** module id = 19\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .filter('calendarTruncateEventTitle', function() {\n\n return function(string, length, boxHeight) {\n if (!string) {\n return '';\n }\n\n //Only truncate if if actually needs truncating\n if (string.length >= length && string.length / 20 > boxHeight / 30) {\n return string.substr(0, length) + '...';\n } else {\n return string;\n }\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/filters/calendarTruncateEventTitle.js\n ** module id = 20\n ** module chunks = 0\n **/","var map = {\n\t\"./calendarConfig.js\": 22,\n\t\"./calendarDebounce.js\": 23,\n\t\"./calendarHelper.js\": 24,\n\t\"./calendarTitle.js\": 25,\n\t\"./interact.js\": 26,\n\t\"./moment.js\": 28\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 21;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services \\.js$\n ** module id = 21\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .provider('calendarConfig', function() {\n\n var defaultFormats = {\n angular: {\n date: {\n hour: 'ha',\n day: 'd MMM',\n month: 'MMMM',\n weekDay: 'EEEE',\n time: 'HH:mm',\n datetime: 'MMM d, h:mm a'\n },\n title: {\n day: 'EEEE d MMMM, yyyy',\n week: 'Week {week} of {year}',\n month: 'MMMM yyyy',\n year: 'yyyy'\n }\n },\n moment: {\n date: {\n hour: 'ha',\n day: 'D MMM',\n month: 'MMMM',\n weekDay: 'dddd',\n time: 'HH:mm',\n datetime: 'MMM D, h:mm a'\n },\n title: {\n day: 'dddd D MMMM, YYYY',\n week: 'Week {week} of {year}',\n month: 'MMMM YYYY',\n year: 'YYYY'\n }\n }\n };\n\n var dateFormatter = 'angular';\n var defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n var defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n var showTimesOnWeekView = false;\n\n var i18nStrings = {\n eventsLabel: 'Events',\n timeLabel: 'Time'\n };\n\n var displayAllMonthEvents = false;\n\n var configProvider = this;\n\n configProvider.setDateFormats = function(formats) {\n angular.extend(defaultDateFormats, formats);\n return configProvider;\n };\n\n configProvider.setTitleFormats = function(formats) {\n angular.extend(defaultTitleFormats, formats);\n return configProvider;\n };\n\n configProvider.setI18nStrings = function(strings) {\n angular.extend(i18nStrings, strings);\n return configProvider;\n };\n\n configProvider.setDisplayAllMonthEvents = function(value) {\n displayAllMonthEvents = value;\n return configProvider;\n };\n\n configProvider.setDateFormatter = function(value) {\n if (['angular', 'moment'].indexOf(value) === -1) {\n throw new Error('Invalid date formatter. Allowed types are angular and moment.');\n }\n dateFormatter = value;\n defaultDateFormats = angular.copy(defaultFormats[dateFormatter].date);\n defaultTitleFormats = angular.copy(defaultFormats[dateFormatter].title);\n return configProvider;\n };\n\n configProvider.showTimesOnWeekView = function(value) {\n showTimesOnWeekView = value; //experimental, and ignores the event end date\n return configProvider;\n };\n\n configProvider.$get = function() {\n return {\n dateFormats: defaultDateFormats,\n titleFormats: defaultTitleFormats,\n i18nStrings: i18nStrings,\n displayAllMonthEvents: displayAllMonthEvents,\n dateFormatter: dateFormatter,\n showTimesOnWeekView: showTimesOnWeekView\n };\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarConfig.js\n ** module id = 22\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .service('calendarDebounce', function($timeout) {\n\n function debounce(func, wait, immediate) {\n var timeout;\n return function() {\n var context = this, args = arguments;\n function later() {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n }\n var callNow = immediate && !timeout;\n $timeout.cancel(timeout);\n timeout = $timeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n return debounce;\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarDebounce.js\n ** module id = 23\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .factory('calendarHelper', function(dateFilter, moment, calendarConfig) {\n\n function formatDate(date, format) {\n if (calendarConfig.dateFormatter === 'angular') {\n return dateFilter(moment(date).toDate(), format);\n } else if (calendarConfig.dateFormatter === 'moment') {\n return moment(date).format(format);\n }\n }\n\n function adjustEndDateFromStartDiff(oldStart, newStart, oldEnd) {\n if (!oldEnd) {\n return oldEnd;\n }\n var diffInSeconds = moment(newStart).diff(moment(oldStart));\n return moment(oldEnd).add(diffInSeconds);\n }\n\n function eventIsInPeriod(event, periodStart, periodEnd) {\n\n var eventStart = moment(event.startsAt);\n var eventEnd = moment(event.endsAt || event.startsAt);\n periodStart = moment(periodStart);\n periodEnd = moment(periodEnd);\n\n if (angular.isDefined(event.recursOn)) {\n\n switch (event.recursOn) {\n case 'year':\n eventStart.set({\n year: periodStart.year()\n });\n break;\n\n case 'month':\n eventStart.set({\n year: periodStart.year(),\n month: periodStart.month()\n });\n break;\n\n default:\n throw new Error('Invalid value (' + event.recursOn + ') given for recurs on. Can only be year, month or week.');\n }\n\n eventEnd = adjustEndDateFromStartDiff(event.startsAt, eventStart, eventEnd);\n\n }\n\n return (eventStart.isAfter(periodStart) && eventStart.isBefore(periodEnd)) ||\n (eventEnd.isAfter(periodStart) && eventEnd.isBefore(periodEnd)) ||\n (eventStart.isBefore(periodStart) && eventEnd.isAfter(periodEnd)) ||\n eventStart.isSame(periodStart) ||\n eventEnd.isSame(periodEnd);\n\n }\n\n function filterEventsInPeriod(events, startPeriod, endPeriod) {\n return events.filter(function(event) {\n return eventIsInPeriod(event, startPeriod, endPeriod);\n });\n }\n\n function getEventsInPeriod(calendarDate, period, allEvents) {\n var startPeriod = moment(calendarDate).startOf(period);\n var endPeriod = moment(calendarDate).endOf(period);\n return filterEventsInPeriod(allEvents, startPeriod, endPeriod);\n }\n\n function getBadgeTotal(events) {\n return events.filter(function(event) {\n return event.incrementsBadgeTotal !== false;\n }).length;\n }\n\n function getWeekDayNames() {\n var weekdays = [];\n var count = 0;\n while (count < 7) {\n weekdays.push(formatDate(moment().weekday(count++), calendarConfig.dateFormats.weekDay));\n }\n return weekdays;\n }\n\n function getYearView(events, currentDay, cellModifier) {\n\n var view = [];\n var eventsInPeriod = getEventsInPeriod(currentDay, 'year', events);\n var month = moment(currentDay).startOf('year');\n var count = 0;\n while (count < 12) {\n var startPeriod = month.clone();\n var endPeriod = startPeriod.clone().endOf('month');\n var periodEvents = filterEventsInPeriod(eventsInPeriod, startPeriod, endPeriod);\n var cell = {\n label: formatDate(startPeriod, calendarConfig.dateFormats.month),\n isToday: startPeriod.isSame(moment().startOf('month')),\n events: periodEvents,\n date: startPeriod,\n badgeTotal: getBadgeTotal(periodEvents)\n };\n\n cellModifier({calendarCell: cell});\n view.push(cell);\n month.add(1, 'month');\n count++;\n }\n\n return view;\n\n }\n\n function getMonthView(events, currentDay, cellModifier) {\n\n var startOfMonth = moment(currentDay).startOf('month');\n var day = startOfMonth.clone().startOf('week');\n var endOfMonthView = moment(currentDay).endOf('month').endOf('week');\n var eventsInPeriod;\n if (calendarConfig.displayAllMonthEvents) {\n eventsInPeriod = filterEventsInPeriod(events, day, endOfMonthView);\n } else {\n eventsInPeriod = filterEventsInPeriod(events, startOfMonth, startOfMonth.clone().endOf('month'));\n }\n var view = [];\n var today = moment().startOf('day');\n\n while (day.isBefore(endOfMonthView)) {\n\n var inMonth = day.month() === moment(currentDay).month();\n var monthEvents = [];\n if (inMonth || calendarConfig.displayAllMonthEvents) {\n monthEvents = filterEventsInPeriod(eventsInPeriod, day, day.clone().endOf('day'));\n }\n\n var cell = {\n label: day.date(),\n date: day.clone(),\n inMonth: inMonth,\n isPast: today.isAfter(day),\n isToday: today.isSame(day),\n isFuture: today.isBefore(day),\n isWeekend: [0, 6].indexOf(day.day()) > -1,\n events: monthEvents,\n badgeTotal: getBadgeTotal(monthEvents)\n };\n\n cellModifier({calendarCell: cell});\n\n view.push(cell);\n\n day.add(1, 'day');\n }\n\n return view;\n\n }\n\n function getWeekView(events, currentDay) {\n\n var startOfWeek = moment(currentDay).startOf('week');\n var endOfWeek = moment(currentDay).endOf('week');\n var dayCounter = startOfWeek.clone();\n var days = [];\n var today = moment().startOf('day');\n while (days.length < 7) {\n days.push({\n weekDayLabel: formatDate(dayCounter, calendarConfig.dateFormats.weekDay),\n date: dayCounter.clone(),\n dayLabel: formatDate(dayCounter, calendarConfig.dateFormats.day),\n isPast: dayCounter.isBefore(today),\n isToday: dayCounter.isSame(today),\n isFuture: dayCounter.isAfter(today),\n isWeekend: [0, 6].indexOf(dayCounter.day()) > -1\n });\n dayCounter.add(1, 'day');\n }\n\n var eventsSorted = filterEventsInPeriod(events, startOfWeek, endOfWeek).map(function(event) {\n\n var eventStart = moment(event.startsAt).startOf('day');\n var eventEnd = moment(event.endsAt || event.startsAt).startOf('day');\n var weekViewStart = moment(startOfWeek).startOf('day');\n var weekViewEnd = moment(endOfWeek).startOf('day');\n var offset, span;\n\n if (eventStart.isBefore(weekViewStart) || eventStart.isSame(weekViewStart)) {\n offset = 0;\n } else {\n offset = eventStart.diff(weekViewStart, 'days');\n }\n\n if (eventEnd.isAfter(weekViewEnd)) {\n eventEnd = weekViewEnd;\n }\n\n if (eventStart.isBefore(weekViewStart)) {\n eventStart = weekViewStart;\n }\n\n span = moment(eventEnd).diff(eventStart, 'days') + 1;\n\n event.daySpan = span;\n event.dayOffset = offset;\n\n return event;\n });\n\n return {days: days, events: eventsSorted};\n\n }\n\n function getDayView(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n\n var dayStartHour = moment(dayViewStart || '00:00', 'HH:mm').hours();\n var dayEndHour = moment(dayViewEnd || '23:00', 'HH:mm').hours();\n var hourHeight = (60 / dayViewSplit) * 30;\n var calendarStart = moment(currentDay).startOf('day').add(dayStartHour, 'hours');\n var calendarEnd = moment(currentDay).startOf('day').add(dayEndHour, 'hours');\n var calendarHeight = (dayEndHour - dayStartHour + 1) * hourHeight;\n var hourHeightMultiplier = hourHeight / 60;\n var buckets = [];\n var eventsInPeriod = filterEventsInPeriod(\n events,\n moment(currentDay).startOf('day').toDate(),\n moment(currentDay).endOf('day').toDate()\n );\n\n return eventsInPeriod.map(function(event) {\n if (moment(event.startsAt).isBefore(calendarStart)) {\n event.top = 0;\n } else {\n event.top = (moment(event.startsAt).startOf('minute').diff(calendarStart.startOf('minute'), 'minutes') * hourHeightMultiplier) - 2;\n }\n\n if (moment(event.endsAt || event.startsAt).isAfter(calendarEnd)) {\n event.height = calendarHeight - event.top;\n } else {\n var diffStart = event.startsAt;\n if (moment(event.startsAt).isBefore(calendarStart)) {\n diffStart = calendarStart.toDate();\n }\n if (!event.endsAt) {\n event.height = 30;\n } else {\n event.height = moment(event.endsAt || event.startsAt).diff(diffStart, 'minutes') * hourHeightMultiplier;\n }\n }\n\n if (event.top - event.height > calendarHeight) {\n event.height = 0;\n }\n\n event.left = 0;\n\n return event;\n }).filter(function(event) {\n return event.height > 0;\n }).map(function(event) {\n\n var cannotFitInABucket = true;\n buckets.forEach(function(bucket, bucketIndex) {\n var canFitInThisBucket = true;\n\n bucket.forEach(function(bucketItem) {\n if (eventIsInPeriod(event, bucketItem.startsAt, bucketItem.endsAt || bucketItem.startsAt) ||\n eventIsInPeriod(bucketItem, event.startsAt, event.endsAt || event.startsAt)) {\n canFitInThisBucket = false;\n }\n });\n\n if (canFitInThisBucket && cannotFitInABucket) {\n cannotFitInABucket = false;\n event.left = bucketIndex * 150;\n buckets[bucketIndex].push(event);\n }\n\n });\n\n if (cannotFitInABucket) {\n event.left = buckets.length * 150;\n buckets.push([event]);\n }\n\n return event;\n\n });\n\n }\n\n function getWeekViewWithTimes(events, currentDay, dayViewStart, dayViewEnd, dayViewSplit) {\n var weekView = getWeekView(events, currentDay);\n var newEvents = [];\n weekView.days.forEach(function(day) {\n var dayEvents = weekView.events.filter(function(event) {\n return moment(event.startsAt).startOf('day').isSame(moment(day.date).startOf('day'));\n });\n var newDayEvents = getDayView(\n dayEvents,\n day.date,\n dayViewStart,\n dayViewEnd,\n dayViewSplit\n );\n newEvents = newEvents.concat(newDayEvents);\n });\n weekView.events = newEvents;\n return weekView;\n }\n\n function getDayViewHeight(dayViewStart, dayViewEnd, dayViewSplit) {\n var dayViewStartM = moment(dayViewStart || '00:00', 'HH:mm');\n var dayViewEndM = moment(dayViewEnd || '23:00', 'HH:mm');\n var hourHeight = (60 / dayViewSplit) * 30;\n return ((dayViewEndM.diff(dayViewStartM, 'hours') + 1) * hourHeight) + 2;\n }\n\n return {\n getWeekDayNames: getWeekDayNames,\n getYearView: getYearView,\n getMonthView: getMonthView,\n getWeekView: getWeekView,\n getDayView: getDayView,\n getWeekViewWithTimes: getWeekViewWithTimes,\n getDayViewHeight: getDayViewHeight,\n adjustEndDateFromStartDiff: adjustEndDateFromStartDiff,\n formatDate: formatDate,\n eventIsInPeriod: eventIsInPeriod //expose for testing only\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarHelper.js\n ** module id = 24\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\n\nangular\n .module('mwl.calendar')\n .factory('calendarTitle', function(moment, calendarConfig, calendarHelper) {\n\n function day(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.day);\n }\n\n function week(currentDay) {\n var weekTitleLabel = calendarConfig.titleFormats.week;\n return weekTitleLabel.replace('{week}', moment(currentDay).week()).replace('{year}', moment(currentDay).format('YYYY'));\n }\n\n function month(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.month);\n }\n\n function year(currentDay) {\n return calendarHelper.formatDate(currentDay, calendarConfig.titleFormats.year);\n }\n\n return {\n day: day,\n week: week,\n month: month,\n year: year\n };\n\n });\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/calendarTitle.js\n ** module id = 25\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\nvar interact;\ntry {\n interact = require('interact.js');\n} catch (e) {\n interact = null;\n}\n\nangular\n .module('mwl.calendar')\n .constant('interact', interact);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/interact.js\n ** module id = 26\n ** module chunks = 0\n **/","'use strict';\n\nvar angular = require('angular');\nvar moment = require('moment');\n\nangular\n .module('mwl.calendar')\n .constant('moment', moment);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/services/moment.js\n ** module id = 28\n ** module chunks = 0\n **/"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index dd0575dd..c6177d8d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-calendar", - "version": "0.11.3", + "version": "0.12.0", "repository": "git@github.com:mattlewis92/angular-bootstrap-calendar.git", "dependencies": { "angular": ">=1.2.0 <1.5",