PageSourceSearch

https://www.saramin.co.kr/js/libs/tui/tui-calendar.js?v=20261008104141

js saramin.co.kr collected 2026-10-09 23:59:55 UTC 1,498,957 bytes, 26,162 lines download raw bytes

vendor: 4,134 bytes, lines 1-78
1/*!
2 * TOAST UI Calendar
3 * @version 1.12.10 | Thu Jan 23 2020
4 * @author NHN FE Development Lab <[email protected]>
5 * @license MIT
6 */
7(function webpackUniversalModuleDefinition(root, factory) {
8    if(typeof exports === 'object' && typeof module === 'object')
9        module.exports = factory(require("tui-code-snippet"), require("tui-date-picker"));
10    else if(typeof define === 'function' && define.amd)
11        define(["tui-code-snippet", "tui-date-picker"], factory);
12    else if(typeof exports === 'object')
13        exports["Calendar"] = factory(require("tui-code-snippet"), require("tui-date-picker"));
14    else
15        root["tui"] = root["tui"] || {}, root["tui"]["Calendar"] = factory((root["tui"] && root["tui"]["util"]), (root["tui"] && root["tui"]["DatePicker"]));
16})(window, function(__WEBPACK_EXTERNAL_MODULE_tui_code_snippet__, __WEBPACK_EXTERNAL_MODULE_tui_date_picker__) {
17    return /******/ (function(modules) { // webpackBootstrap
18        /******/ 	// The module cache
19        /******/ 	var installedModules = {};
20        /******/
21        /******/ 	// The require function
22        /******/ 	function __webpack_require__(moduleId) {
23            /******/
24            /******/ 		// Check if module is in cache
25            /******/ 		if(installedModules[moduleId]) {
26                /******/ 			return installedModules[moduleId].exports;
27                /******/ 		}
28            /******/ 		// Create a new module (and put it into the cache)
29            /******/ 		var module = installedModules[moduleId] = {
30                /******/ 			i: moduleId,
31                /******/ 			l: false,
32                /******/ 			exports: {}
33                /******/ 		};
34            /******/
35            /******/ 		// Execute the module function
36            /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
37            /******/
38            /******/ 		// Flag the module as loaded
39            /******/ 		module.l = true;
40            /******/
41            /******/ 		// Return the exports of the module
42            /******/ 		return module.exports;
43            /******/ 	}
44        /******/
45        /******/
46        /******/ 	// expose the modules object (__webpack_modules__)
47        /******/ 	__webpack_require__.m = modules;
48        /******/
49        /******/ 	// expose the module cache
50        /******/ 	__webpack_require__.c = installedModules;
51        /******/
52        /******/ 	// define getter function for harmony exports
53        /******/ 	__webpack_require__.d = function(exports, name, getter) {
54            /******/ 		if(!__webpack_require__.o(exports, name)) {
55                /******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
56                /******/ 		}
57            /******/ 	};
58        /******/
59        /******/ 	// define __esModule on exports
60        /******/ 	__webpack_require__.r = function(exports) {
61            /******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
62                /******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
63                /******/ 		}
64            /******/ 		Object.defineProperty(exports, '__esModule', { value: true });
65            /******/ 	};
66        /******/
67        /******/ 	// create a fake namespace object
68        /******/ 	// mode & 1: value is a module id, require it
69        /******/ 	// mode & 2: merge all properties of value into the ns
70        /******/ 	// mode & 4: return value when already ns object
71        /******/ 	// mode & 8|1: behave like require
72        /******/ 	__webpack_require__.t = function(value, mode) {
73            /******/ 		if(mode & 1) value = __webpack_require__(value);
74            /******/ 		if(mode & 8) return value;
75            /******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
76            /******/ 		var ns = Object.create(null);
77            /******/ 		__webpack_require__.r(ns);
78            /******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
79            /******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
80            /******/ 		return ns;
81            /******/ 	};
82        /******/
83        /******/ 	// getDefaultExport function for compatibility with non-harmony modules
84        /******/ 	__webpack_require__.n = function(module) {
85            /******/ 		var getter = module && module.__esModule ?
86                /******/ 			function getDefault() { return module['default']; } :
87                /******/ 			function getModuleExports() { return module; };
88            /******/ 		__webpack_require__.d(getter, 'a', getter);
89            /******/ 		return getter;
90            /******/ 	};
91        /******/
92        /******/ 	// Object.prototype.hasOwnProperty.call
93        /******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
94        /******/
95        /******/ 	// __webpack_public_path__
96        /******/ 	__webpack_require__.p = "/dist";
97        /******/
98        /******/
99        /******/ 	// Load entry module and return exports
100        /******/ 	return __webpack_require__(__webpack_require__.s = "./src/index.js");
101        /******/ })
102        /************************************************************************/
103        /******/ ({
104
105            
vendor: 598 bytes, lines 105-116
105/***/ "./node_modules/handlebars-template-loader/runtime/index.js":
106            /*!******************************************************************!*\
107  !*** ./node_modules/handlebars-template-loader/runtime/index.js ***!
108  \******************************************************************/
109            /*! no static exports found */
110            /***/ (function(module, exports, __webpack_require__) {
111
112                module.exports = __webpack_require__(/*! handlebars/runtime */ "./node_modules/handlebars/dist/cjs/handlebars.runtime.js");
113
114                /***/ }),
115
116            
vendor: 6,170 bytes, lines 116-194
116/***/ "./node_modules/handlebars/dist/cjs/handlebars.runtime.js":
117            /*!****************************************************************!*\
118  !*** ./node_modules/handlebars/dist/cjs/handlebars.runtime.js ***!
119  \****************************************************************/
120            /*! no static exports found */
121            /***/ (function(module, exports, __webpack_require__) {
122
123                "use strict";
124
125
126                exports.__esModule = true;
127// istanbul ignore next
128
129                function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
130
131// istanbul ignore next
132
133                function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
134
135                var _handlebarsBase = __webpack_require__(/*! ./handlebars/base */ "./node_modules/handlebars/dist/cjs/handlebars/base.js");
136
137                var base = _interopRequireWildcard(_handlebarsBase);
138
139// Each of these augment the Handlebars object. No need to setup here.
140// (This is done to easily share code between commonjs and browse envs)
141
142                var _handlebarsSafeString = __webpack_require__(/*! ./handlebars/safe-string */ "./node_modules/handlebars/dist/cjs/handlebars/safe-string.js");
143
144                var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
145
146                var _handlebarsException = __webpack_require__(/*! ./handlebars/exception */ "./node_modules/handlebars/dist/cjs/handlebars/exception.js");
147
148                var _handlebarsException2 = _interopRequireDefault(_handlebarsException);
149
150                var _handlebarsUtils = __webpack_require__(/*! ./handlebars/utils */ "./node_modules/handlebars/dist/cjs/handlebars/utils.js");
151
152                var Utils = _interopRequireWildcard(_handlebarsUtils);
153
154                var _handlebarsRuntime = __webpack_require__(/*! ./handlebars/runtime */ "./node_modules/handlebars/dist/cjs/handlebars/runtime.js");
155
156                var runtime = _interopRequireWildcard(_handlebarsRuntime);
157
158                var _handlebarsNoConflict = __webpack_require__(/*! ./handlebars/no-conflict */ "./node_modules/handlebars/dist/cjs/handlebars/no-conflict.js");
159
160                var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
161
162// For compatibility and usage outside of module systems, make the Handlebars object a namespace
163                function create() {
164                    var hb = new base.HandlebarsEnvironment();
165
166                    Utils.extend(hb, base);
167                    hb.SafeString = _handlebarsSafeString2['default'];
168                    hb.Exception = _handlebarsException2['default'];
169                    hb.Utils = Utils;
170                    hb.escapeExpression = Utils.escapeExpression;
171
172                    hb.VM = runtime;
173                    hb.template = function (spec) {
174                        return runtime.template(spec, hb);
175                    };
176
177                    return hb;
178                }
179
180                var inst = create();
181                inst.create = create;
182
183                _handlebarsNoConflict2['default'](inst);
184
185                inst['default'] = inst;
186
187                exports['default'] = inst;
188                module.exports = exports['default'];
189//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=
190
191
192                /***/ }),
193
194            
vendor: 12,353 bytes, lines 194-322
194/***/ "./node_modules/handlebars/dist/cjs/handlebars/base.js":
195            /*!*************************************************************!*\
196  !*** ./node_modules/handlebars/dist/cjs/handlebars/base.js ***!
197  \*************************************************************/
198            /*! no static exports found */
199            /***/ (function(module, exports, __webpack_require__) {
200
201                "use strict";
202
203
204                exports.__esModule = true;
205                exports.HandlebarsEnvironment = HandlebarsEnvironment;
206// istanbul ignore next
207
208                function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
209
210                var _utils = __webpack_require__(/*! ./utils */ "./node_modules/handlebars/dist/cjs/handlebars/utils.js");
211
212                var _exception = __webpack_require__(/*! ./exception */ "./node_modules/handlebars/dist/cjs/handlebars/exception.js");
213
214                var _exception2 = _interopRequireDefault(_exception);
215
216                var _helpers = __webpack_require__(/*! ./helpers */ "./node_modules/handlebars/dist/cjs/handlebars/helpers.js");
217
218                var _decorators = __webpack_require__(/*! ./decorators */ "./node_modules/handlebars/dist/cjs/handlebars/decorators.js");
219
220                var _logger = __webpack_require__(/*! ./logger */ "./node_modules/handlebars/dist/cjs/handlebars/logger.js");
221
222                var _logger2 = _interopRequireDefault(_logger);
223
224                var _internalProtoAccess = __webpack_require__(/*! ./internal/proto-access */ "./node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js");
225
226                var VERSION = '4.7.2';
227                exports.VERSION = VERSION;
228                var COMPILER_REVISION = 8;
229                exports.COMPILER_REVISION = COMPILER_REVISION;
230                var LAST_COMPATIBLE_COMPILER_REVISION = 7;
231
232                exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;
233                var REVISION_CHANGES = {
234                    1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
235                    2: '== 1.0.0-rc.3',
236                    3: '== 1.0.0-rc.4',
237                    4: '== 1.x.x',
238                    5: '== 2.0.0-alpha.x',
239                    6: '>= 2.0.0-beta.1',
240                    7: '>= 4.0.0 <4.3.0',
241                    8: '>= 4.3.0'
242                };
243
244                exports.REVISION_CHANGES = REVISION_CHANGES;
245                var objectType = '[object Object]';
246
247                function HandlebarsEnvironment(helpers, partials, decorators) {
248                    this.helpers = helpers || {};
249                    this.partials = partials || {};
250                    this.decorators = decorators || {};
251
252                    _helpers.registerDefaultHelpers(this);
253                    _decorators.registerDefaultDecorators(this);
254                }
255
256                HandlebarsEnvironment.prototype = {
257                    constructor: HandlebarsEnvironment,
258
259                    logger: _logger2['default'],
260                    log: _logger2['default'].log,
261
262                    registerHelper: function registerHelper(name, fn) {
263                        if (_utils.toString.call(name) === objectType) {
264                            if (fn) {
265                                throw new _exception2['default']('Arg not supported with multiple helpers');
266                            }
267                            _utils.extend(this.helpers, name);
268                        } else {
269                            this.helpers[name] = fn;
270                        }
271                    },
272                    unregisterHelper: function unregisterHelper(name) {
273                        delete this.helpers[name];
274                    },
275
276                    registerPartial: function registerPartial(name, partial) {
277                        if (_utils.toString.call(name) === objectType) {
278                            _utils.extend(this.partials, name);
279                        } else {
280                            if (typeof partial === 'undefined') {
281                                throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined');
282                            }
283                            this.partials[name] = partial;
284                        }
285                    },
286                    unregisterPartial: function unregisterPartial(name) {
287                        delete this.partials[name];
288                    },
289
290                    registerDecorator: function registerDecorator(name, fn) {
291                        if (_utils.toString.call(name) === objectType) {
292                            if (fn) {
293                                throw new _exception2['default']('Arg not supported with multiple decorators');
294                            }
295                            _utils.extend(this.decorators, name);
296                        } else {
297                            this.decorators[name] = fn;
298                        }
299                    },
300                    unregisterDecorator: function unregisterDecorator(name) {
301                        delete this.decorators[name];
302                    },
303                    /**
304                     * Reset the memory of illegal property accesses that have already been logged.
305                     * @deprecated should only be used in handlebars test-cases
306                     */
307                    resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {
308                        _internalProtoAccess.resetLoggedProperties();
309                    }
310                };
311
312                var log = _logger2['default'].log;
313
314                exports.log = log;
315                exports.createFrame = _utils.createFrame;
316                exports.logger = _logger2['default'];
317//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy4yJztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19
318
319
320                /***/ }),
321
322            
vendor: 1,713 bytes, lines 322-350
322/***/ "./node_modules/handlebars/dist/cjs/handlebars/decorators.js":
323            /*!*******************************************************************!*\
324  !*** ./node_modules/handlebars/dist/cjs/handlebars/decorators.js ***!
325  \*******************************************************************/
326            /*! no static exports found */
327            /***/ (function(module, exports, __webpack_require__) {
328
329                "use strict";
330
331
332                exports.__esModule = true;
333                exports.registerDefaultDecorators = registerDefaultDecorators;
334// istanbul ignore next
335
336                function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
337
338                var _decoratorsInline = __webpack_require__(/*! ./decorators/inline */ "./node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js");
339
340                var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);
341
342                function registerDefaultDecorators(instance) {
343                    _decoratorsInline2['default'](instance);
344                }
345//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=
346
347
348                /***/ }),
349
350            
vendor: 3,734 bytes, lines 350-391
350/***/ "./node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js":
351            /*!**************************************************************************!*\
352  !*** ./node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js ***!
353  \**************************************************************************/
354            /*! no static exports found */
355            /***/ (function(module, exports, __webpack_require__) {
356
357                "use strict";
358
359
360                exports.__esModule = true;
361
362                var _utils = __webpack_require__(/*! ../utils */ "./node_modules/handlebars/dist/cjs/handlebars/utils.js");
363
364                exports['default'] = function (instance) {
365                    instance.registerDecorator('inline', function (fn, props, container, options) {
366                        var ret = fn;
367                        if (!props.partials) {
368                            props.partials = {};
369                            ret = function (context, options) {
370                                // Create a new partials stack frame prior to exec.
371                                var original = container.partials;
372                                container.partials = _utils.extend({}, original, props.partials);
373                                var ret = fn(context, options);
374                                container.partials = original;
375                                return ret;
376                            };
377                        }
378
379                        props.partials[options.args[0]] = options.fn;
380
381                        return ret;
382                    });
383                };
384
385                module.exports = exports['default'];
386//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==
387
388
389                /***/ }),
390
391            
vendor: 7,511 bytes, lines 391-467
391/***/ "./node_modules/handlebars/dist/cjs/handlebars/exception.js":
392            /*!******************************************************************!*\
393  !*** ./node_modules/handlebars/dist/cjs/handlebars/exception.js ***!
394  \******************************************************************/
395            /*! no static exports found */
396            /***/ (function(module, exports, __webpack_require__) {
397
398                "use strict";
399
400
401                exports.__esModule = true;
402                var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];
403
404                function Exception(message, node) {
405                    var loc = node && node.loc,
406                        line = undefined,
407                        endLineNumber = undefined,
408                        column = undefined,
409                        endColumn = undefined;
410
411                    if (loc) {
412                        line = loc.start.line;
413                        endLineNumber = loc.end.line;
414                        column = loc.start.column;
415                        endColumn = loc.end.column;
416
417                        message += ' - ' + line + ':' + column;
418                    }
419
420                    var tmp = Error.prototype.constructor.call(this, message);
421
422                    // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
423                    for (var idx = 0; idx < errorProps.length; idx++) {
424                        this[errorProps[idx]] = tmp[errorProps[idx]];
425                    }
426
427                    /* istanbul ignore else */
428                    if (Error.captureStackTrace) {
429                        Error.captureStackTrace(this, Exception);
430                    }
431
432                    try {
433                        if (loc) {
434                            this.lineNumber = line;
435                            this.endLineNumber = endLineNumber;
436
437                            // Work around issue under safari where we can't directly set the column value
438                            /* istanbul ignore next */
439                            if (Object.defineProperty) {
440                                Object.defineProperty(this, 'column', {
441                                    value: column,
442                                    enumerable: true
443                                });
444                                Object.defineProperty(this, 'endColumn', {
445                                    value: endColumn,
446                                    enumerable: true
447                                });
448                            } else {
449                                this.column = column;
450                                this.endColumn = endColumn;
451                            }
452                        }
453                    } catch (nop) {
454                        /* Ignore if the browser is very particular */
455                    }
456                }
457
458                Exception.prototype = new Error();
459
460                exports['default'] = Exception;
461                module.exports = exports['default'];
462//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=
463
464
465                /***/ }),
466
467            
vendor: 5,622 bytes, lines 467-535
467/***/ "./node_modules/handlebars/dist/cjs/handlebars/helpers.js":
468            /*!****************************************************************!*\
469  !*** ./node_modules/handlebars/dist/cjs/handlebars/helpers.js ***!
470  \****************************************************************/
471            /*! no static exports found */
472            /***/ (function(module, exports, __webpack_require__) {
473
474                "use strict";
475
476
477                exports.__esModule = true;
478                exports.registerDefaultHelpers = registerDefaultHelpers;
479                exports.moveHelperToHooks = moveHelperToHooks;
480// istanbul ignore next
481
482                function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
483
484                var _helpersBlockHelperMissing = __webpack_require__(/*! ./helpers/block-helper-missing */ "./node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js");
485
486                var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);
487
488                var _helpersEach = __webpack_require__(/*! ./helpers/each */ "./node_modules/handlebars/dist/cjs/handlebars/helpers/each.js");
489
490                var _helpersEach2 = _interopRequireDefault(_helpersEach);
491
492                var _helpersHelperMissing = __webpack_require__(/*! ./helpers/helper-missing */ "./node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js");
493
494                var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);
495
496                var _helpersIf = __webpack_require__(/*! ./helpers/if */ "./node_modules/handlebars/dist/cjs/handlebars/helpers/if.js");
497
498                var _helpersIf2 = _interopRequireDefault(_helpersIf);
499
500                var _helpersLog = __webpack_require__(/*! ./helpers/log */ "./node_modules/handlebars/dist/cjs/handlebars/helpers/log.js");
501
502                var _helpersLog2 = _interopRequireDefault(_helpersLog);
503
504                var _helpersLookup = __webpack_require__(/*! ./helpers/lookup */ "./node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js");
505
506                var _helpersLookup2 = _interopRequireDefault(_helpersLookup);
507
508                var _helpersWith = __webpack_require__(/*! ./helpers/with */ "./node_modules/handlebars/dist/cjs/handlebars/helpers/with.js");
509
510                var _helpersWith2 = _interopRequireDefault(_helpersWith);
511
512                function registerDefaultHelpers(instance) {
513                    _helpersBlockHelperMissing2['default'](instance);
514                    _helpersEach2['default'](instance);
515                    _helpersHelperMissing2['default'](instance);
516                    _helpersIf2['default'](instance);
517                    _helpersLog2['default'](instance);
518                    _helpersLookup2['default'](instance);
519                    _helpersWith2['default'](instance);
520                }
521
522                function moveHelperToHooks(instance, helperName, keepHelper) {
523                    if (instance.helpers[helperName]) {
524                        instance.hooks[helperName] = instance.helpers[helperName];
525                        if (!keepHelper) {
526                            delete instance.helpers[helperName];
527                        }
528                    }
529                }
530//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19
531
532
533                /***/ }),
534
535            
vendor: 5,123 bytes, lines 535-586
535/***/ "./node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js":
536            /*!*************************************************************************************!*\
537  !*** ./node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js ***!
538  \*************************************************************************************/
539            /*! no static exports found */
540            /***/ (function(module, exports, __webpack_require__) {
541
542                "use strict";
543
544
545                exports.__esModule = true;
546
547                var _utils = __webpack_require__(/*! ../utils */ "./node_modules/handlebars/dist/cjs/handlebars/utils.js");
548
549                exports['default'] = function (instance) {
550                    instance.registerHelper('blockHelperMissing', function (context, options) {
551                        var inverse = options.inverse,
552                            fn = options.fn;
553
554                        if (context === true) {
555                            return fn(this);
556                        } else if (context === false || context == null) {
557                            return inverse(this);
558                        } else if (_utils.isArray(context)) {
559                            if (context.length > 0) {
560                                if (options.ids) {
561                                    options.ids = [options.name];
562                                }
563
564                                return instance.helpers.each(context, options);
565                            } else {
566                                return inverse(this);
567                            }
568                        } else {
569                            if (options.data && options.ids) {
570                                var data = _utils.createFrame(options.data);
571                                data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);
572                                options = { data: data };
573                            }
574
575                            return fn(context, options);
576                        }
577                    });
578                };
579
580                module.exports = exports['default'];
581//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
582
583
584                /***/ }),
585
586            
vendor: 13,078 bytes, lines 586-703
586/***/ "./node_modules/handlebars/dist/cjs/handlebars/helpers/each.js":
587            /*!*********************************************************************!*\
588  !*** ./node_modules/handlebars/dist/cjs/handlebars/helpers/each.js ***!
589  \*********************************************************************/
590            /*! no static exports found */
591            /***/ (function(module, exports, __webpack_require__) {
592
593                "use strict";
594                /* WEBPACK VAR INJECTION */(function(global) {
595
596                    exports.__esModule = true;
597// istanbul ignore next
598
599                    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
600
601                    var _utils = __webpack_require__(/*! ../utils */ "./node_modules/handlebars/dist/cjs/handlebars/utils.js");
602
603                    var _exception = __webpack_require__(/*! ../exception */ "./node_modules/handlebars/dist/cjs/handlebars/exception.js");
604
605                    var _exception2 = _interopRequireDefault(_exception);
606
607                    exports['default'] = function (instance) {
608                        instance.registerHelper('each', function (context, options) {
609                            if (!options) {
610                                throw new _exception2['default']('Must pass iterator to #each');
611                            }
612
613                            var fn = options.fn,
614                                inverse = options.inverse,
615                                i = 0,
616                                ret = '',
617                                data = undefined,
618                                contextPath = undefined;
619
620                            if (options.data && options.ids) {
621                                contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';
622                            }
623
624                            if (_utils.isFunction(context)) {
625                                context = context.call(this);
626                            }
627
628                            if (options.data) {
629                                data = _utils.createFrame(options.data);
630                            }
631
632                            function execIteration(field, index, last) {
633                                if (data) {
634                                    data.key = field;
635                                    data.index = index;
636                                    data.first = index === 0;
637                                    data.last = !!last;
638
639                                    if (contextPath) {
640                                        data.contextPath = contextPath + field;
641                                    }
642                                }
643
644                                ret = ret + fn(context[field], {
645                                    data: data,
646                                    blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])
647                                });
648                            }
649
650                            if (context && typeof context === 'object') {
651                                if (_utils.isArray(context)) {
652                                    for (var j = context.length; i < j; i++) {
653                                        if (i in context) {
654                                            execIteration(i, i, i === context.length - 1);
655                                        }
656                                    }
657                                } else if (global.Symbol && context[global.Symbol.iterator]) {
658                                    var newContext = [];
659                                    var iterator = context[global.Symbol.iterator]();
660                                    for (var it = iterator.next(); !it.done; it = iterator.next()) {
661                                        newContext.push(it.value);
662                                    }
663                                    context = newContext;
664                                    for (var j = context.length; i < j; i++) {
665                                        execIteration(i, i, i === context.length - 1);
666                                    }
667                                } else {
668                                    (function () {
669                                        var priorKey = undefined;
670
671                                        Object.keys(context).forEach(function (key) {
672                                            // We're running the iterations one step out of sync so we can detect
673                                            // the last iteration without have to scan the object twice and create
674                                            // an itermediate keys array.
675                                            if (priorKey !== undefined) {
676                                                execIteration(priorKey, i - 1);
677                                            }
678                                            priorKey = key;
679                                            i++;
680                                        });
681                                        if (priorKey !== undefined) {
682                                            execIteration(priorKey, i - 1, true);
683                                        }
684                                    })();
685                                }
686                            }
687
688                            if (i === 0) {
689                                ret = inverse(this);
690                            }
691
692                            return ret;
693                        });
694                    };
695
696                    module.exports = exports['default'];
697//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzRCxZQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsWUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNuRCxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLlN5bWJvbCAmJiBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBbXTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGZvciAobGV0IGl0ID0gaXRlcmF0b3IubmV4dCgpOyAhaXQuZG9uZTsgaXQgPSBpdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICBuZXdDb250ZXh0LnB1c2goaXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQgPSBuZXdDb250ZXh0O1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmlvcktleTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyB0aGUgaXRlcmF0aW9ucyBvbmUgc3RlcCBvdXQgb2Ygc3luYyBzbyB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JLZXkgPSBrZXk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==
698
699                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
700
701                /***/ }),
702
703            
vendor: 2,941 bytes, lines 703-740
703/***/ "./node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js":
704            /*!*******************************************************************************!*\
705  !*** ./node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js ***!
706  \*******************************************************************************/
707            /*! no static exports found */
708            /***/ (function(module, exports, __webpack_require__) {
709
710                "use strict";
711
712
713                exports.__esModule = true;
714// istanbul ignore next
715
716                function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
717
718                var _exception = __webpack_require__(/*! ../exception */ "./node_modules/handlebars/dist/cjs/handlebars/exception.js");
719
720                var _exception2 = _interopRequireDefault(_exception);
721
722                exports['default'] = function (instance) {
723                    instance.registerHelper('helperMissing', function () /* [args, ]options */{
724                        if (arguments.length === 1) {
725                            // A missing field in a {{foo}} construct.
726                            return undefined;
727                        } else {
728                            // Someone is actually trying to call something, blow up.
729                            throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"');
730                        }
731                    });
732                };
733
734                module.exports = exports['default'];
735//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19
736
737
738                /***/ }),
739
740            
vendor: 5,793 bytes, lines 740-798
740/***/ "./node_modules/handlebars/dist/cjs/handlebars/helpers/if.js":
741            /*!*******************************************************************!*\
742  !*** ./node_modules/handlebars/dist/cjs/handlebars/helpers/if.js ***!
743  \*******************************************************************/
744            /*! no static exports found */
745            /***/ (function(module, exports, __webpack_require__) {
746
747                "use strict";
748
749
750                exports.__esModule = true;
751// istanbul ignore next
752
753                function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
754
755                var _utils = __webpack_require__(/*! ../utils */ "./node_modules/handlebars/dist/cjs/handlebars/utils.js");
756
757                var _exception = __webpack_require__(/*! ../exception */ "./node_modules/handlebars/dist/cjs/handlebars/exception.js");
758
759                var _exception2 = _interopRequireDefault(_exception);
760
761                exports['default'] = function (instance) {
762                    instance.registerHelper('if', function (conditional, options) {
763                        if (arguments.length != 2) {
764                            throw new _exception2['default']('#if requires exactly one argument');
765                        }
766                        if (_utils.isFunction(conditional)) {
767                            conditional = conditional.call(this);
768                        }
769
770                        // Default behavior is to render the positive path if the value is truthy and not empty.
771                        // The `includeZero` option may be set to treat the condtional as purely not empty based on the
772                        // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
773                        if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {
774                            return options.inverse(this);
775                        } else {
776                            return options.fn(this);
777                        }
778                    });
779
780                    instance.registerHelper('unless', function (conditional, options) {
781                        if (arguments.length != 2) {
782                            throw new _exception2['default']('#unless requires exactly one argument');
783                        }
784                        return instance.helpers['if'].call(this, conditional, {
785                            fn: options.inverse,
786                            inverse: options.fn,
787                            hash: options.hash
788                        });
789                    });
790                };
791
792                module.exports = exports['default'];
793//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19
794
795
796                /***/ }),
797
798            
vendor: 3,384 bytes, lines 798-836
798/***/ "./node_modules/handlebars/dist/cjs/handlebars/helpers/log.js":
799            /*!********************************************************************!*\
800  !*** ./node_modules/handlebars/dist/cjs/handlebars/helpers/log.js ***!
801  \********************************************************************/
802            /*! no static exports found */
803            /***/ (function(module, exports, __webpack_require__) {
804
805                "use strict";
806
807
808                exports.__esModule = true;
809
810                exports['default'] = function (instance) {
811                    instance.registerHelper('log', function () /* message, options */{
812                        var args = [undefined],
813                            options = arguments[arguments.length - 1];
814                        for (var i = 0; i < arguments.length - 1; i++) {
815                            args.push(arguments[i]);
816                        }
817
818                        var level = 1;
819                        if (options.hash.level != null) {
820                            level = options.hash.level;
821                        } else if (options.data && options.data.level != null) {
822                            level = options.data.level;
823                        }
824                        args[0] = level;
825
826                        instance.log.apply(instance, args);
827                    });
828                };
829
830                module.exports = exports['default'];
831//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19
832
833
834                /***/ }),
835
836            
vendor: 1,961 bytes, lines 836-864
836/***/ "./node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js":
837            /*!***********************************************************************!*\
838  !*** ./node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js ***!
839  \***********************************************************************/
840            /*! no static exports found */
841            /***/ (function(module, exports, __webpack_require__) {
842
843                "use strict";
844
845
846                exports.__esModule = true;
847
848                exports['default'] = function (instance) {
849                    instance.registerHelper('lookup', function (obj, field, options) {
850                        if (!obj) {
851                            // Note for 5.0: Change to "obj == null" in 5.0
852                            return obj;
853                        }
854                        return options.lookupProperty(obj, field);
855                    });
856                };
857
858                module.exports = exports['default'];
859//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==
860
861
862                /***/ }),
863
864            
vendor: 5,039 bytes, lines 864-919
864/***/ "./node_modules/handlebars/dist/cjs/handlebars/helpers/with.js":
865            /*!*********************************************************************!*\
866  !*** ./node_modules/handlebars/dist/cjs/handlebars/helpers/with.js ***!
867  \*********************************************************************/
868            /*! no static exports found */
869            /***/ (function(module, exports, __webpack_require__) {
870
871                "use strict";
872
873
874                exports.__esModule = true;
875// istanbul ignore next
876
877                function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
878
879                var _utils = __webpack_require__(/*! ../utils */ "./node_modules/handlebars/dist/cjs/handlebars/utils.js");
880
881                var _exception = __webpack_require__(/*! ../exception */ "./node_modules/handlebars/dist/cjs/handlebars/exception.js");
882
883                var _exception2 = _interopRequireDefault(_exception);
884
885                exports['default'] = function (instance) {
886                    instance.registerHelper('with', function (context, options) {
887                        if (arguments.length != 2) {
888                            throw new _exception2['default']('#with requires exactly one argument');
889                        }
890                        if (_utils.isFunction(context)) {
891                            context = context.call(this);
892                        }
893
894                        var fn = options.fn;
895
896                        if (!_utils.isEmpty(context)) {
897                            var data = options.data;
898                            if (options.data && options.ids) {
899                                data = _utils.createFrame(options.data);
900                                data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);
901                            }
902
903                            return fn(context, {
904                                data: data,
905                                blockParams: _utils.blockParams([context], [data && data.contextPath])
906                            });
907                        } else {
908                            return options.inverse(this);
909                        }
910                    });
911                };
912
913                module.exports = exports['default'];
914//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=
915
916
917                /***/ }),
918
919            
vendor: 2,702 bytes, lines 919-953
919/***/ "./node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js":
920            /*!******************************************************************************************!*\
921  !*** ./node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js ***!
922  \******************************************************************************************/
923            /*! no static exports found */
924            /***/ (function(module, exports, __webpack_require__) {
925
926                "use strict";
927
928
929                exports.__esModule = true;
930                exports.createNewLookupObject = createNewLookupObject;
931
932                var _utils = __webpack_require__(/*! ../utils */ "./node_modules/handlebars/dist/cjs/handlebars/utils.js");
933
934                /**
935                 * Create a new object with "null"-prototype to avoid truthy results on prototype properties.
936                 * The resulting object can be used with "object[property]" to check if a property exists
937                 * @param {...object} sources a varargs parameter of source objects that will be merged
938                 * @returns {object}
939                 */
940
941                function createNewLookupObject() {
942                    for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {
943                        sources[_key] = arguments[_key];
944                    }
945
946                    return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));
947                }
948//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19
949
950
951                /***/ }),
952
953            
vendor: 10,479 bytes, lines 953-1038
953/***/ "./node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js":
954            /*!******************************************************************************!*\
955  !*** ./node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js ***!
956  \******************************************************************************/
957            /*! no static exports found */
958            /***/ (function(module, exports, __webpack_require__) {
959
960                "use strict";
961
962
963                exports.__esModule = true;
964                exports.createProtoAccessControl = createProtoAccessControl;
965                exports.resultIsAllowed = resultIsAllowed;
966                exports.resetLoggedProperties = resetLoggedProperties;
967// istanbul ignore next
968
969                function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
970
971                var _createNewLookupObject = __webpack_require__(/*! ./create-new-lookup-object */ "./node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js");
972
973                var _logger = __webpack_require__(/*! ../logger */ "./node_modules/handlebars/dist/cjs/handlebars/logger.js");
974
975                var logger = _interopRequireWildcard(_logger);
976
977                var loggedProperties = Object.create(null);
978
979                function createProtoAccessControl(runtimeOptions) {
980                    var defaultMethodWhiteList = Object.create(null);
981                    defaultMethodWhiteList['constructor'] = false;
982                    defaultMethodWhiteList['__defineGetter__'] = false;
983                    defaultMethodWhiteList['__defineSetter__'] = false;
984                    defaultMethodWhiteList['__lookupGetter__'] = false;
985
986                    var defaultPropertyWhiteList = Object.create(null);
987                    // eslint-disable-next-line no-proto
988                    defaultPropertyWhiteList['__proto__'] = false;
989
990                    return {
991                        properties: {
992                            whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),
993                            defaultValue: runtimeOptions.allowProtoPropertiesByDefault
994                        },
995                        methods: {
996                            whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),
997                            defaultValue: runtimeOptions.allowProtoMethodsByDefault
998                        }
999                    };
1000                }
1001
1002                function resultIsAllowed(result, protoAccessControl, propertyName) {
1003                    if (typeof result === 'function') {
1004                        return checkWhiteList(protoAccessControl.methods, propertyName);
1005                    } else {
1006                        return checkWhiteList(protoAccessControl.properties, propertyName);
1007                    }
1008                }
1009
1010                function checkWhiteList(protoAccessControlForType, propertyName) {
1011                    if (protoAccessControlForType.whitelist[propertyName] !== undefined) {
1012                        return protoAccessControlForType.whitelist[propertyName] === true;
1013                    }
1014                    if (protoAccessControlForType.defaultValue !== undefined) {
1015                        return protoAccessControlForType.defaultValue;
1016                    }
1017                    logUnexpecedPropertyAccessOnce(propertyName);
1018                    return false;
1019                }
1020
1021                function logUnexpecedPropertyAccessOnce(propertyName) {
1022                    if (loggedProperties[propertyName] !== true) {
1023                        loggedProperties[propertyName] = true;
1024                        logger.log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');
1025                    }
1026                }
1027
1028                function resetLoggedProperties() {
1029                    Object.keys(loggedProperties).forEach(function (propertyName) {
1030                        delete loggedProperties[propertyName];
1031                    });
1032                }
1033//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMxQyxXQUFXOztJQUF2QixNQUFNOztBQUVsQixJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXRDLFNBQVMsd0JBQXdCLENBQUMsY0FBYyxFQUFFO0FBQ3ZELE1BQUksc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCx3QkFBc0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUMsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRW5ELE1BQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFbkQsMEJBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUU5QyxTQUFPO0FBQ0wsY0FBVSxFQUFFO0FBQ1YsZUFBUyxFQUFFLDZDQUNULHdCQUF3QixFQUN4QixjQUFjLENBQUMsc0JBQXNCLENBQ3RDO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsNkJBQTZCO0tBQzNEO0FBQ0QsV0FBTyxFQUFFO0FBQ1AsZUFBUyxFQUFFLDZDQUNULHNCQUFzQixFQUN0QixjQUFjLENBQUMsbUJBQW1CLENBQ25DO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsMEJBQTBCO0tBQ3hEO0dBQ0YsQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUU7QUFDeEUsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDaEMsV0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0dBQ2pFLE1BQU07QUFDTCxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDcEU7Q0FDRjs7QUFFRCxTQUFTLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7QUFDL0QsTUFBSSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25FLFdBQU8seUJBQXlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztHQUNuRTtBQUNELE1BQUkseUJBQXlCLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtBQUN4RCxXQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztHQUMvQztBQUNELGdDQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLFNBQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUU7QUFDcEQsTUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0Msb0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFVBQU0sQ0FBQyxHQUFHLENBQ1IsT0FBTyxFQUNQLGlFQUErRCxZQUFZLG9JQUNILG9IQUMyQyxDQUNwSCxDQUFDO0dBQ0g7Q0FDRjs7QUFFTSxTQUFTLHFCQUFxQixHQUFHO0FBQ3RDLFFBQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxZQUFZLEVBQUk7QUFDcEQsV0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztHQUN2QyxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJwcm90by1hY2Nlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVOZXdMb29rdXBPYmplY3QgfSBmcm9tICcuL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wocnVudGltZU9wdGlvbnMpIHtcbiAgbGV0IGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0Wydjb25zdHJ1Y3RvciddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lR2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2RlZmluZVNldHRlcl9fJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBHZXR0ZXJfXyddID0gZmFsc2U7XG5cbiAgbGV0IGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3RbJ19fcHJvdG9fXyddID0gZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0LFxuICAgICAgICBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9Qcm9wZXJ0aWVzXG4gICAgICApLFxuICAgICAgZGVmYXVsdFZhbHVlOiBydW50aW1lT3B0aW9ucy5hbGxvd1Byb3RvUHJvcGVydGllc0J5RGVmYXVsdFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgd2hpdGVsaXN0OiBjcmVhdGVOZXdMb29rdXBPYmplY3QoXG4gICAgICAgIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b01ldGhvZHNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9NZXRob2RzQnlEZWZhdWx0XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgcHJvdG9BY2Nlc3NDb250cm9sLCBwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLm1ldGhvZHMsIHByb3BlcnR5TmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5wcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUsIHByb3BlcnR5TmFtZSkge1xuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUud2hpdGVsaXN0W3Byb3BlcnR5TmFtZV0gPT09IHRydWU7XG4gIH1cbiAgaWYgKHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSkge1xuICBpZiAobG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdICE9PSB0cnVlKSB7XG4gICAgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKFxuICAgICAgJ2Vycm9yJyxcbiAgICAgIGBIYW5kbGViYXJzOiBBY2Nlc3MgaGFzIGJlZW4gZGVuaWVkIHRvIHJlc29sdmUgdGhlIHByb3BlcnR5IFwiJHtwcm9wZXJ0eU5hbWV9XCIgYmVjYXVzZSBpdCBpcyBub3QgYW4gXCJvd24gcHJvcGVydHlcIiBvZiBpdHMgcGFyZW50LlxcbmAgK1xuICAgICAgICBgWW91IGNhbiBhZGQgYSBydW50aW1lIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBjaGVjayBvciB0aGlzIHdhcm5pbmc6XFxuYCArXG4gICAgICAgIGBTZWUgaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2FwaS1yZWZlcmVuY2UvcnVudGltZS1vcHRpb25zLmh0bWwjb3B0aW9ucy10by1jb250cm9sLXByb3RvdHlwZS1hY2Nlc3MgZm9yIGRldGFpbHNgXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCkge1xuICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKHByb3BlcnR5TmFtZSA9PiB7XG4gICAgZGVsZXRlIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgfSk7XG59XG4iXX0=
1034
1035
1036                /***/ }),
1037
1038            
vendor: 3,002 bytes, lines 1038-1069
1038/***/ "./node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js":
1039            /*!****************************************************************************!*\
1040  !*** ./node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js ***!
1041  \****************************************************************************/
1042            /*! no static exports found */
1043            /***/ (function(module, exports, __webpack_require__) {
1044
1045                "use strict";
1046
1047
1048                exports.__esModule = true;
1049                exports.wrapHelper = wrapHelper;
1050
1051                function wrapHelper(helper, transformOptionsFn) {
1052                    if (typeof helper !== 'function') {
1053                        // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639
1054                        // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.
1055                        return helper;
1056                    }
1057                    var wrapper = function wrapper() /* dynamic arguments */{
1058                        var options = arguments[arguments.length - 1];
1059                        arguments[arguments.length - 1] = transformOptionsFn(options);
1060                        return helper.apply(this, arguments);
1061                    };
1062                    return wrapper;
1063                }
1064//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=
1065
1066
1067                /***/ }),
1068
1069            
vendor: 5,167 bytes, lines 1069-1128
1069/***/ "./node_modules/handlebars/dist/cjs/handlebars/logger.js":
1070            /*!***************************************************************!*\
1071  !*** ./node_modules/handlebars/dist/cjs/handlebars/logger.js ***!
1072  \***************************************************************/
1073            /*! no static exports found */
1074            /***/ (function(module, exports, __webpack_require__) {
1075
1076                "use strict";
1077
1078
1079                exports.__esModule = true;
1080
1081                var _utils = __webpack_require__(/*! ./utils */ "./node_modules/handlebars/dist/cjs/handlebars/utils.js");
1082
1083                var logger = {
1084                    methodMap: ['debug', 'info', 'warn', 'error'],
1085                    level: 'info',
1086
1087                    // Maps a given level value to the `methodMap` indexes above.
1088                    lookupLevel: function lookupLevel(level) {
1089                        if (typeof level === 'string') {
1090                            var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());
1091                            if (levelMap >= 0) {
1092                                level = levelMap;
1093                            } else {
1094                                level = parseInt(level, 10);
1095                            }
1096                        }
1097
1098                        return level;
1099                    },
1100
1101                    // Can be overridden in the host environment
1102                    log: function log(level) {
1103                        level = logger.lookupLevel(level);
1104
1105                        if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
1106                            var method = logger.methodMap[level];
1107                            // eslint-disable-next-line no-console
1108                            if (!console[method]) {
1109                                method = 'log';
1110                            }
1111
1112                            for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1113                                message[_key - 1] = arguments[_key];
1114                            }
1115
1116                            console[method].apply(console, message); // eslint-disable-line no-console
1117                        }
1118                    }
1119                };
1120
1121                exports['default'] = logger;
1122                module.exports = exports['default'];
1123//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=
1124
1125
1126                /***/ }),
1127
1128            
vendor: 2,582 bytes, lines 1128-1160
1128/***/ "./node_modules/handlebars/dist/cjs/handlebars/no-conflict.js":
1129            /*!********************************************************************!*\
1130  !*** ./node_modules/handlebars/dist/cjs/handlebars/no-conflict.js ***!
1131  \********************************************************************/
1132            /*! no static exports found */
1133            /***/ (function(module, exports, __webpack_require__) {
1134
1135                "use strict";
1136                /* WEBPACK VAR INJECTION */(function(global) {
1137
1138                    exports.__esModule = true;
1139
1140                    exports['default'] = function (Handlebars) {
1141                        /* istanbul ignore next */
1142                        var root = typeof global !== 'undefined' ? global : window,
1143                            $Handlebars = root.Handlebars;
1144                        /* istanbul ignore next */
1145                        Handlebars.noConflict = function () {
1146                            if (root.Handlebars === Handlebars) {
1147                                root.Handlebars = $Handlebars;
1148                            }
1149                            return Handlebars;
1150                        };
1151                    };
1152
1153                    module.exports = exports['default'];
1154//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLE1BQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtNQUN4RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFaEMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsVUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7S0FDL0I7QUFDRCxXQUFPLFVBQVUsQ0FBQztHQUNuQixDQUFDO0NBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==
1155
1156                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
1157
1158                /***/ }),
1159
1160            
vendor: 52,134 bytes, lines 1160-1544
1160/***/ "./node_modules/handlebars/dist/cjs/handlebars/runtime.js":
1161            /*!****************************************************************!*\
1162  !*** ./node_modules/handlebars/dist/cjs/handlebars/runtime.js ***!
1163  \****************************************************************/
1164            /*! no static exports found */
1165            /***/ (function(module, exports, __webpack_require__) {
1166
1167                "use strict";
1168
1169
1170                exports.__esModule = true;
1171                exports.checkRevision = checkRevision;
1172                exports.template = template;
1173                exports.wrapProgram = wrapProgram;
1174                exports.resolvePartial = resolvePartial;
1175                exports.invokePartial = invokePartial;
1176                exports.noop = noop;
1177// istanbul ignore next
1178
1179                function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
1180
1181// istanbul ignore next
1182
1183                function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
1184
1185                var _utils = __webpack_require__(/*! ./utils */ "./node_modules/handlebars/dist/cjs/handlebars/utils.js");
1186
1187                var Utils = _interopRequireWildcard(_utils);
1188
1189                var _exception = __webpack_require__(/*! ./exception */ "./node_modules/handlebars/dist/cjs/handlebars/exception.js");
1190
1191                var _exception2 = _interopRequireDefault(_exception);
1192
1193                var _base = __webpack_require__(/*! ./base */ "./node_modules/handlebars/dist/cjs/handlebars/base.js");
1194
1195                var _helpers = __webpack_require__(/*! ./helpers */ "./node_modules/handlebars/dist/cjs/handlebars/helpers.js");
1196
1197                var _internalWrapHelper = __webpack_require__(/*! ./internal/wrapHelper */ "./node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js");
1198
1199                var _internalProtoAccess = __webpack_require__(/*! ./internal/proto-access */ "./node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js");
1200
1201                function checkRevision(compilerInfo) {
1202                    var compilerRevision = compilerInfo && compilerInfo[0] || 1,
1203                        currentRevision = _base.COMPILER_REVISION;
1204
1205                    if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {
1206                        return;
1207                    }
1208
1209                    if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {
1210                        var runtimeVersions = _base.REVISION_CHANGES[currentRevision],
1211                            compilerVersions = _base.REVISION_CHANGES[compilerRevision];
1212                        throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');
1213                    } else {
1214                        // Use the embedded version info since the runtime doesn't know about this revision yet
1215                        throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');
1216                    }
1217                }
1218
1219                function template(templateSpec, env) {
1220                    /* istanbul ignore next */
1221                    if (!env) {
1222                        throw new _exception2['default']('No environment passed to template');
1223                    }
1224                    if (!templateSpec || !templateSpec.main) {
1225                        throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);
1226                    }
1227
1228                    templateSpec.main.decorator = templateSpec.main_d;
1229
1230                    // Note: Using env.VM references rather than local var references throughout this section to allow
1231                    // for external users to override these as pseudo-supported APIs.
1232                    env.VM.checkRevision(templateSpec.compiler);
1233
1234                    // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)
1235                    var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;
1236
1237                    function invokePartialWrapper(partial, context, options) {
1238                        if (options.hash) {
1239                            context = Utils.extend({}, context, options.hash);
1240                            if (options.ids) {
1241                                options.ids[0] = true;
1242                            }
1243                        }
1244                        partial = env.VM.resolvePartial.call(this, partial, context, options);
1245
1246                        var extendedOptions = Utils.extend({}, options, {
1247                            hooks: this.hooks,
1248                            protoAccessControl: this.protoAccessControl
1249                        });
1250
1251                        var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);
1252
1253                        if (result == null && env.compile) {
1254                            options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
1255                            result = options.partials[options.name](context, extendedOptions);
1256                        }
1257                        if (result != null) {
1258                            if (options.indent) {
1259                                var lines = result.split('\n');
1260                                for (var i = 0, l = lines.length; i < l; i++) {
1261                                    if (!lines[i] && i + 1 === l) {
1262                                        break;
1263                                    }
1264
1265                                    lines[i] = options.indent + lines[i];
1266                                }
1267                                result = lines.join('\n');
1268                            }
1269                            return result;
1270                        } else {
1271                            throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');
1272                        }
1273                    }
1274
1275                    // Just add water
1276                    var container = {
1277                        strict: function strict(obj, name, loc) {
1278                            if (!obj || !(name in obj)) {
1279                                throw new _exception2['default']('"' + name + '" not defined in ' + obj, {
1280                                    loc: loc
1281                                });
1282                            }
1283                            return obj[name];
1284                        },
1285                        lookupProperty: function lookupProperty(parent, propertyName) {
1286                            var result = parent[propertyName];
1287                            if (result == null) {
1288                                return result;
1289                            }
1290                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
1291                                return result;
1292                            }
1293
1294                            if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {
1295                                return result;
1296                            }
1297                            return undefined;
1298                        },
1299                        lookup: function lookup(depths, name) {
1300                            var len = depths.length;
1301                            for (var i = 0; i < len; i++) {
1302                                var result = depths[i] && container.lookupProperty(depths[i], name);
1303                                if (result != null) {
1304                                    return depths[i][name];
1305                                }
1306                            }
1307                        },
1308                        lambda: function lambda(current, context) {
1309                            return typeof current === 'function' ? current.call(context) : current;
1310                        },
1311
1312                        escapeExpression: Utils.escapeExpression,
1313                        invokePartial: invokePartialWrapper,
1314
1315                        fn: function fn(i) {
1316                            var ret = templateSpec[i];
1317                            ret.decorator = templateSpec[i + '_d'];
1318                            return ret;
1319                        },
1320
1321                        programs: [],
1322                        program: function program(i, data, declaredBlockParams, blockParams, depths) {
1323                            var programWrapper = this.programs[i],
1324                                fn = this.fn(i);
1325                            if (data || depths || blockParams || declaredBlockParams) {
1326                                programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);
1327                            } else if (!programWrapper) {
1328                                programWrapper = this.programs[i] = wrapProgram(this, i, fn);
1329                            }
1330                            return programWrapper;
1331                        },
1332
1333                        data: function data(value, depth) {
1334                            while (value && depth--) {
1335                                value = value._parent;
1336                            }
1337                            return value;
1338                        },
1339                        mergeIfNeeded: function mergeIfNeeded(param, common) {
1340                            var obj = param || common;
1341
1342                            if (param && common && param !== common) {
1343                                obj = Utils.extend({}, common, param);
1344                            }
1345
1346                            return obj;
1347                        },
1348                        // An empty object to use as replacement for null-contexts
1349                        nullContext: Object.seal({}),
1350
1351                        noop: env.VM.noop,
1352                        compilerInfo: templateSpec.compiler
1353                    };
1354
1355                    function ret(context) {
1356                        var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
1357
1358                        var data = options.data;
1359
1360                        ret._setup(options);
1361                        if (!options.partial && templateSpec.useData) {
1362                            data = initData(context, data);
1363                        }
1364                        var depths = undefined,
1365                            blockParams = templateSpec.useBlockParams ? [] : undefined;
1366                        if (templateSpec.useDepths) {
1367                            if (options.depths) {
1368                                depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;
1369                            } else {
1370                                depths = [context];
1371                            }
1372                        }
1373
1374                        function main(context /*, options*/) {
1375                            return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
1376                        }
1377
1378                        main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
1379                        return main(context, options);
1380                    }
1381
1382                    ret.isTop = true;
1383
1384                    ret._setup = function (options) {
1385                        if (!options.partial) {
1386                            var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);
1387                            wrapHelpersToPassLookupProperty(mergedHelpers, container);
1388                            container.helpers = mergedHelpers;
1389
1390                            if (templateSpec.usePartial) {
1391                                // Use mergeIfNeeded here to prevent compiling global partials multiple times
1392                                container.partials = container.mergeIfNeeded(options.partials, env.partials);
1393                            }
1394                            if (templateSpec.usePartial || templateSpec.useDecorators) {
1395                                container.decorators = Utils.extend({}, env.decorators, options.decorators);
1396                            }
1397
1398                            container.hooks = {};
1399                            container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);
1400
1401                            var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;
1402                            _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);
1403                            _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);
1404                        } else {
1405                            container.protoAccessControl = options.protoAccessControl; // internal option
1406                            container.helpers = options.helpers;
1407                            container.partials = options.partials;
1408                            container.decorators = options.decorators;
1409                            container.hooks = options.hooks;
1410                        }
1411                    };
1412
1413                    ret._child = function (i, data, blockParams, depths) {
1414                        if (templateSpec.useBlockParams && !blockParams) {
1415                            throw new _exception2['default']('must pass block params');
1416                        }
1417                        if (templateSpec.useDepths && !depths) {
1418                            throw new _exception2['default']('must pass parent depths');
1419                        }
1420
1421                        return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);
1422                    };
1423                    return ret;
1424                }
1425
1426                function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {
1427                    function prog(context) {
1428                        var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
1429
1430                        var currentDepths = depths;
1431                        if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {
1432                            currentDepths = [context].concat(depths);
1433                        }
1434
1435                        return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);
1436                    }
1437
1438                    prog = executeDecorators(fn, prog, container, depths, data, blockParams);
1439
1440                    prog.program = i;
1441                    prog.depth = depths ? depths.length : 0;
1442                    prog.blockParams = declaredBlockParams || 0;
1443                    return prog;
1444                }
1445
1446                /**
1447                 * This is currently part of the official API, therefore implementation details should not be changed.
1448                 */
1449
1450                function resolvePartial(partial, context, options) {
1451                    if (!partial) {
1452                        if (options.name === '@partial-block') {
1453                            partial = options.data['partial-block'];
1454                        } else {
1455                            partial = options.partials[options.name];
1456                        }
1457                    } else if (!partial.call && !options.name) {
1458                        // This is a dynamic partial that returned a string
1459                        options.name = partial;
1460                        partial = options.partials[partial];
1461                    }
1462                    return partial;
1463                }
1464
1465                function invokePartial(partial, context, options) {
1466                    // Use the current closure context to save the partial-block if this partial
1467                    var currentPartialBlock = options.data && options.data['partial-block'];
1468                    options.partial = true;
1469                    if (options.ids) {
1470                        options.data.contextPath = options.ids[0] || options.data.contextPath;
1471                    }
1472
1473                    var partialBlock = undefined;
1474                    if (options.fn && options.fn !== noop) {
1475                        (function () {
1476                            options.data = _base.createFrame(options.data);
1477                            // Wrapper function to get access to currentPartialBlock from the closure
1478                            var fn = options.fn;
1479                            partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {
1480                                var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
1481
1482                                // Restore the partial-block from the closure for the execution of the block
1483                                // i.e. the part inside the block of the partial call.
1484                                options.data = _base.createFrame(options.data);
1485                                options.data['partial-block'] = currentPartialBlock;
1486                                return fn(context, options);
1487                            };
1488                            if (fn.partials) {
1489                                options.partials = Utils.extend({}, options.partials, fn.partials);
1490                            }
1491                        })();
1492                    }
1493
1494                    if (partial === undefined && partialBlock) {
1495                        partial = partialBlock;
1496                    }
1497
1498                    if (partial === undefined) {
1499                        throw new _exception2['default']('The partial ' + options.name + ' could not be found');
1500                    } else if (partial instanceof Function) {
1501                        return partial(context, options);
1502                    }
1503                }
1504
1505                function noop() {
1506                    return '';
1507                }
1508
1509                function initData(context, data) {
1510                    if (!data || !('root' in data)) {
1511                        data = data ? _base.createFrame(data) : {};
1512                        data.root = context;
1513                    }
1514                    return data;
1515                }
1516
1517                function executeDecorators(fn, prog, container, depths, data, blockParams) {
1518                    if (fn.decorator) {
1519                        var props = {};
1520                        prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);
1521                        Utils.extend(prog, props);
1522                    }
1523                    return prog;
1524                }
1525
1526                function wrapHelpersToPassLookupProperty(mergedHelpers, container) {
1527                    Object.keys(mergedHelpers).forEach(function (helperName) {
1528                        var helper = mergedHelpers[helperName];
1529                        mergedHelpers[helperName] = passLookupPropertyOption(helper, container);
1530                    });
1531                }
1532
1533                function passLookupPropertyOption(helper, container) {
1534                    var lookupProperty = container.lookupProperty;
1535                    return _internalWrapHelper.wrapHelper(helper, function (options) {
1536                        return Utils.extend({ lookupProperty: lookupProperty }, options);
1537                    });
1538                }
1539//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztHQUN4RTs7QUFFRCxjQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDOzs7O0FBSWxELEtBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7O0FBRzVDLE1BQU0sb0NBQW9DLEdBQ3hDLFlBQVksQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRTFELFdBQVMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDdkQsUUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLGFBQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELFVBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGVBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO09BQ3ZCO0tBQ0Y7QUFDRCxXQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUV0RSxRQUFJLGVBQWUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUU7QUFDOUMsV0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO0FBQ2pCLHdCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7S0FDNUMsQ0FBQyxDQUFDOztBQUVILFFBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDcEMsSUFBSSxFQUNKLE9BQU8sRUFDUCxPQUFPLEVBQ1AsZUFBZSxDQUNoQixDQUFDOztBQUVGLFFBQUksTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO0FBQ2pDLGFBQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQzFDLE9BQU8sRUFDUCxZQUFZLENBQUMsZUFBZSxFQUM1QixHQUFHLENBQ0osQ0FBQztBQUNGLFlBQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDbkU7QUFDRCxRQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDbEIsVUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ2xCLFlBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsYUFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxjQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzVCLGtCQUFNO1dBQ1A7O0FBRUQsZUFBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO0FBQ0QsY0FBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDM0I7QUFDRCxhQUFPLE1BQU0sQ0FBQztLQUNmLE1BQU07QUFDTCxZQUFNLDJCQUNKLGNBQWMsR0FDWixPQUFPLENBQUMsSUFBSSxHQUNaLDBEQUEwRCxDQUM3RCxDQUFDO0tBQ0g7R0FDRjs7O0FBR0QsTUFBSSxTQUFTLEdBQUc7QUFDZCxVQUFNLEVBQUUsZ0JBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDL0IsVUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLENBQUEsQUFBQyxFQUFFO0FBQzFCLGNBQU0sMkJBQWMsR0FBRyxHQUFHLElBQUksR0FBRyxtQkFBbUIsR0FBRyxHQUFHLEVBQUU7QUFDMUQsYUFBRyxFQUFFLEdBQUc7U0FDVCxDQUFDLENBQUM7T0FDSjtBQUNELGFBQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xCO0FBQ0Qsa0JBQWMsRUFBRSx3QkFBUyxNQUFNLEVBQUUsWUFBWSxFQUFFO0FBQzdDLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxVQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDbEIsZUFBTyxNQUFNLENBQUM7T0FDZjtBQUNELFVBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRTtBQUM5RCxlQUFPLE1BQU0sQ0FBQztPQUNmOztBQUVELFVBQUkscUNBQWdCLE1BQU0sRUFBRSxTQUFTLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLEVBQUU7QUFDdkUsZUFBTyxNQUFNLENBQUM7T0FDZjtBQUNELGFBQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0QsVUFBTSxFQUFFLGdCQUFTLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDN0IsVUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMxQixXQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFlBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNwRSxZQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDbEIsaUJBQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO09BQ0Y7S0FDRjtBQUNELFVBQU0sRUFBRSxnQkFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ2pDLGFBQU8sT0FBTyxPQUFPLEtBQUssVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQ3hFOztBQUVELG9CQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7QUFDeEMsaUJBQWEsRUFBRSxvQkFBb0I7O0FBRW5DLE1BQUUsRUFBRSxZQUFTLENBQUMsRUFBRTtBQUNkLFVBQUksR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixTQUFHLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdkMsYUFBTyxHQUFHLENBQUM7S0FDWjs7QUFFRCxZQUFRLEVBQUUsRUFBRTtBQUNaLFdBQU8sRUFBRSxpQkFBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUU7QUFDbkUsVUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDbkMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsVUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLFdBQVcsSUFBSSxtQkFBbUIsRUFBRTtBQUN4RCxzQkFBYyxHQUFHLFdBQVcsQ0FDMUIsSUFBSSxFQUNKLENBQUMsRUFDRCxFQUFFLEVBQ0YsSUFBSSxFQUNKLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsTUFBTSxDQUNQLENBQUM7T0FDSCxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDMUIsc0JBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzlEO0FBQ0QsYUFBTyxjQUFjLENBQUM7S0FDdkI7O0FBRUQsUUFBSSxFQUFFLGNBQVMsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUMzQixhQUFPLEtBQUssSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUN2QixhQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztPQUN2QjtBQUNELGFBQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDRCxpQkFBYSxFQUFFLHVCQUFTLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDckMsVUFBSSxHQUFHLEdBQUcsS0FBSyxJQUFJLE1BQU0sQ0FBQzs7QUFFMUIsVUFBSSxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUU7QUFDdkMsV0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztPQUN2Qzs7QUFFRCxhQUFPLEdBQUcsQ0FBQztLQUNaOztBQUVELGVBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7QUFFNUIsUUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSTtBQUNqQixnQkFBWSxFQUFFLFlBQVksQ0FBQyxRQUFRO0dBQ3BDLENBQUM7O0FBRUYsV0FBUyxHQUFHLENBQUMsT0FBTyxFQUFnQjtRQUFkLE9BQU8seURBQUcsRUFBRTs7QUFDaEMsUUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQzs7QUFFeEIsT0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQixRQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQzVDLFVBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2hDO0FBQ0QsUUFBSSxNQUFNLFlBQUE7UUFDUixXQUFXLEdBQUcsWUFBWSxDQUFDLGNBQWMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO0FBQzdELFFBQUksWUFBWSxDQUFDLFNBQVMsRUFBRTtBQUMxQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDbEIsY0FBTSxHQUNKLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUN4QixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQ2hDLE9BQU8sQ0FBQyxNQUFNLENBQUM7T0FDdEIsTUFBTTtBQUNMLGNBQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO09BQ3BCO0tBQ0Y7O0FBRUQsYUFBUyxJQUFJLENBQUMsT0FBTyxnQkFBZ0I7QUFDbkMsYUFDRSxFQUFFLEdBQ0YsWUFBWSxDQUFDLElBQUksQ0FDZixTQUFTLEVBQ1QsT0FBTyxFQUNQLFNBQVMsQ0FBQyxPQUFPLEVBQ2pCLFNBQVMsQ0FBQyxRQUFRLEVBQ2xCLElBQUksRUFDSixXQUFXLEVBQ1gsTUFBTSxDQUNQLENBQ0Q7S0FDSDs7QUFFRCxRQUFJLEdBQUcsaUJBQWlCLENBQ3RCLFlBQVksQ0FBQyxJQUFJLEVBQ2pCLElBQUksRUFDSixTQUFTLEVBQ1QsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQ3BCLElBQUksRUFDSixXQUFXLENBQ1osQ0FBQztBQUNGLFdBQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztHQUMvQjs7QUFFRCxLQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzs7QUFFakIsS0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUM3QixRQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtBQUNwQixVQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRSxxQ0FBK0IsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDMUQsZUFBUyxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7O0FBRWxDLFVBQUksWUFBWSxDQUFDLFVBQVUsRUFBRTs7QUFFM0IsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FDMUMsT0FBTyxDQUFDLFFBQVEsRUFDaEIsR0FBRyxDQUFDLFFBQVEsQ0FDYixDQUFDO09BQ0g7QUFDRCxVQUFJLFlBQVksQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDLGFBQWEsRUFBRTtBQUN6RCxpQkFBUyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUNqQyxFQUFFLEVBQ0YsR0FBRyxDQUFDLFVBQVUsRUFDZCxPQUFPLENBQUMsVUFBVSxDQUNuQixDQUFDO09BQ0g7O0FBRUQsZUFBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDckIsZUFBUyxDQUFDLGtCQUFrQixHQUFHLDhDQUF5QixPQUFPLENBQUMsQ0FBQzs7QUFFakUsVUFBSSxtQkFBbUIsR0FDckIsT0FBTyxDQUFDLHlCQUF5QixJQUNqQyxvQ0FBb0MsQ0FBQztBQUN2QyxpQ0FBa0IsU0FBUyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ25FLGlDQUFrQixTQUFTLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztLQUN6RSxNQUFNO0FBQ0wsZUFBUyxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQUMxRCxlQUFTLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDcEMsZUFBUyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ3RDLGVBQVMsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUMxQyxlQUFTLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7S0FDakM7R0FDRixDQUFDOztBQUVGLEtBQUcsQ0FBQyxNQUFNLEdBQUcsVUFBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUU7QUFDbEQsUUFBSSxZQUFZLENBQUMsY0FBYyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQy9DLFlBQU0sMkJBQWMsd0JBQXdCLENBQUMsQ0FBQztLQUMvQztBQUNELFFBQUksWUFBWSxDQUFDLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNyQyxZQUFNLDJCQUFjLHlCQUF5QixDQUFDLENBQUM7S0FDaEQ7O0FBRUQsV0FBTyxXQUFXLENBQ2hCLFNBQVMsRUFDVCxDQUFDLEVBQ0QsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLElBQUksRUFDSixDQUFDLEVBQ0QsV0FBVyxFQUNYLE1BQU0sQ0FDUCxDQUFDO0dBQ0gsQ0FBQztBQUNGLFNBQU8sR0FBRyxDQUFDO0NBQ1o7O0FBRU0sU0FBUyxXQUFXLENBQ3pCLFNBQVMsRUFDVCxDQUFDLEVBQ0QsRUFBRSxFQUNGLElBQUksRUFDSixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLE1BQU0sRUFDTjtBQUNBLFdBQVMsSUFBSSxDQUFDLE9BQU8sRUFBZ0I7UUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ2pDLFFBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUMzQixRQUNFLE1BQU0sSUFDTixPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUNwQixFQUFFLE9BQU8sS0FBSyxTQUFTLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUEsQUFBQyxFQUMxRDtBQUNBLG1CQUFhLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDMUM7O0FBRUQsV0FBTyxFQUFFLENBQ1AsU0FBUyxFQUNULE9BQU8sRUFDUCxTQUFTLENBQUMsT0FBTyxFQUNqQixTQUFTLENBQUMsUUFBUSxFQUNsQixPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksRUFDcEIsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFDeEQsYUFBYSxDQUNkLENBQUM7R0FDSDs7QUFFRCxNQUFJLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQzs7QUFFekUsTUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDakIsTUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEMsTUFBSSxDQUFDLFdBQVcsR0FBRyxtQkFBbUIsSUFBSSxDQUFDLENBQUM7QUFDNUMsU0FBTyxJQUFJLENBQUM7Q0FDYjs7Ozs7O0FBS00sU0FBUyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDeEQsTUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNaLFFBQUksT0FBTyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtBQUNyQyxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztLQUN6QyxNQUFNO0FBQ0wsYUFBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzFDO0dBQ0YsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7O0FBRXpDLFdBQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLFdBQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0dBQ3JDO0FBQ0QsU0FBTyxPQUFPLENBQUM7Q0FDaEI7O0FBRU0sU0FBUyxhQUFhLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRXZELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzFFLFNBQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLE1BQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLFdBQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7R0FDdkU7O0FBRUQsTUFBSSxZQUFZLFlBQUEsQ0FBQztBQUNqQixNQUFJLE9BQU8sQ0FBQyxFQUFFLElBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7O0FBQ3JDLGFBQU8sQ0FBQyxJQUFJLEdBQUcsa0JBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUV6QyxVQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ3BCLGtCQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxTQUFTLG1CQUFtQixDQUN6RSxPQUFPLEVBRVA7WUFEQSxPQUFPLHlEQUFHLEVBQUU7Ozs7QUFJWixlQUFPLENBQUMsSUFBSSxHQUFHLGtCQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxlQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQ3BELGVBQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztPQUM3QixDQUFDO0FBQ0YsVUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0FBQ2YsZUFBTyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUNwRTs7R0FDRjs7QUFFRCxNQUFJLE9BQU8sS0FBSyxTQUFTLElBQUksWUFBWSxFQUFFO0FBQ3pDLFdBQU8sR0FBRyxZQUFZLENBQUM7R0FDeEI7O0FBRUQsTUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO0FBQ3pCLFVBQU0sMkJBQWMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsQ0FBQztHQUM1RSxNQUFNLElBQUksT0FBTyxZQUFZLFFBQVEsRUFBRTtBQUN0QyxXQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7R0FDbEM7Q0FDRjs7QUFFTSxTQUFTLElBQUksR0FBRztBQUNyQixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELFNBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7QUFDL0IsTUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUEsQUFBQyxFQUFFO0FBQzlCLFFBQUksR0FBRyxJQUFJLEdBQUcsa0JBQVksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLFFBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0dBQ3JCO0FBQ0QsU0FBTyxJQUFJLENBQUM7Q0FDYjs7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3pFLE1BQUksRUFBRSxDQUFDLFNBQVMsRUFBRTtBQUNoQixRQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDZixRQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FDakIsSUFBSSxFQUNKLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDbkIsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLENBQ1AsQ0FBQztBQUNGLFNBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNCO0FBQ0QsU0FBTyxJQUFJLENBQUM7Q0FDYjs7QUFFRCxTQUFTLCtCQUErQixDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUU7QUFDakUsUUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxVQUFVLEVBQUk7QUFDL0MsUUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZDLGlCQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3pFLENBQUMsQ0FBQztDQUNKOztBQUVELFNBQVMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRTtBQUNuRCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDO0FBQ2hELFNBQU8sK0JBQVcsTUFBTSxFQUFFLFVBQUEsT0FBTyxFQUFJO0FBQ25DLFdBQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGNBQWMsRUFBZCxjQUFjLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNsRCxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vZXhjZXB0aW9uJztcbmltcG9ydCB7XG4gIENPTVBJTEVSX1JFVklTSU9OLFxuICBjcmVhdGVGcmFtZSxcbiAgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OLFxuICBSRVZJU0lPTl9DSEFOR0VTXG59IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBtb3ZlSGVscGVyVG9Ib29rcyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyB3cmFwSGVscGVyIH0gZnJvbSAnLi9pbnRlcm5hbC93cmFwSGVscGVyJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbCxcbiAgcmVzdWx0SXNBbGxvd2VkXG59IGZyb20gJy4vaW50ZXJuYWwvcHJvdG8tYWNjZXNzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUmV2aXNpb24oY29tcGlsZXJJbmZvKSB7XG4gIGNvbnN0IGNvbXBpbGVyUmV2aXNpb24gPSAoY29tcGlsZXJJbmZvICYmIGNvbXBpbGVySW5mb1swXSkgfHwgMSxcbiAgICBjdXJyZW50UmV2aXNpb24gPSBDT01QSUxFUl9SRVZJU0lPTjtcblxuICBpZiAoXG4gICAgY29tcGlsZXJSZXZpc2lvbiA+PSBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04gJiZcbiAgICBjb21waWxlclJldmlzaW9uIDw9IENPTVBJTEVSX1JFVklTSU9OXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb21waWxlclJldmlzaW9uIDwgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OKSB7XG4gICAgY29uc3QgcnVudGltZVZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLFxuICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICtcbiAgICAgICAgJ1BsZWFzZSB1cGRhdGUgeW91ciBwcmVjb21waWxlciB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBydW50aW1lVmVyc2lvbnMgK1xuICAgICAgICAnKSBvciBkb3duZ3JhZGUgeW91ciBydW50aW1lIHRvIGFuIG9sZGVyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlclZlcnNpb25zICtcbiAgICAgICAgJykuJ1xuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIHRoZSBlbWJlZGRlZCB2ZXJzaW9uIGluZm8gc2luY2UgdGhlIHJ1bnRpbWUgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgcmV2aXNpb24geWV0XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHJ1bnRpbWUgdG8gYSBuZXdlciB2ZXJzaW9uICgnICtcbiAgICAgICAgY29tcGlsZXJJbmZvWzFdICtcbiAgICAgICAgJykuJ1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlKHRlbXBsYXRlU3BlYywgZW52KSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghZW52KSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTm8gZW52aXJvbm1lbnQgcGFzc2VkIHRvIHRlbXBsYXRlJyk7XG4gIH1cbiAgaWYgKCF0ZW1wbGF0ZVNwZWMgfHwgIXRlbXBsYXRlU3BlYy5tYWluKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0ZW1wbGF0ZSBvYmplY3Q6ICcgKyB0eXBlb2YgdGVtcGxhdGVTcGVjKTtcbiAgfVxuXG4gIHRlbXBsYXRlU3BlYy5tYWluLmRlY29yYXRvciA9IHRlbXBsYXRlU3BlYy5tYWluX2Q7XG5cbiAgLy8gTm90ZTogVXNpbmcgZW52LlZNIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gbG9jYWwgdmFyIHJlZmVyZW5jZXMgdGhyb3VnaG91dCB0aGlzIHNlY3Rpb24gdG8gYWxsb3dcbiAgLy8gZm9yIGV4dGVybmFsIHVzZXJzIHRvIG92ZXJyaWRlIHRoZXNlIGFzIHBzZXVkby1zdXBwb3J0ZWQgQVBJcy5cbiAgZW52LlZNLmNoZWNrUmV2aXNpb24odGVtcGxhdGVTcGVjLmNvbXBpbGVyKTtcblxuICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgcHJlY29tcGlsZWQgdGVtcGxhdGVzIHdpdGggY29tcGlsZXItdmVyc2lvbiA3ICg8NC4zLjApXG4gIGNvbnN0IHRlbXBsYXRlV2FzUHJlY29tcGlsZWRXaXRoQ29tcGlsZXJWNyA9XG4gICAgdGVtcGxhdGVTcGVjLmNvbXBpbGVyICYmIHRlbXBsYXRlU3BlYy5jb21waWxlclswXSA9PT0gNztcblxuICBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsV3JhcHBlcihwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgICAgY29udGV4dCA9IFV0aWxzLmV4dGVuZCh7fSwgY29udGV4dCwgb3B0aW9ucy5oYXNoKTtcbiAgICAgIGlmIChvcHRpb25zLmlkcykge1xuICAgICAgICBvcHRpb25zLmlkc1swXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnRpYWwgPSBlbnYuVk0ucmVzb2x2ZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcblxuICAgIGxldCBleHRlbmRlZE9wdGlvbnMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgIGhvb2tzOiB0aGlzLmhvb2tzLFxuICAgICAgcHJvdG9BY2Nlc3NDb250cm9sOiB0aGlzLnByb3RvQWNjZXNzQ29udHJvbFxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgcGFydGlhbCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBleHRlbmRlZE9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdCA9PSBudWxsICYmIGVudi5jb21waWxlKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0gPSBlbnYuY29tcGlsZShcbiAgICAgICAgcGFydGlhbCxcbiAgICAgICAgdGVtcGxhdGVTcGVjLmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgZW52XG4gICAgICApO1xuICAgICAgcmVzdWx0ID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdKGNvbnRleHQsIGV4dGVuZGVkT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMuaW5kZW50KSB7XG4gICAgICAgIGxldCBsaW5lcyA9IHJlc3VsdC5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGluZXNbaV0gPSBvcHRpb25zLmluZGVudCArIGxpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1RoZSBwYXJ0aWFsICcgK1xuICAgICAgICAgIG9wdGlvbnMubmFtZSArXG4gICAgICAgICAgJyBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBKdXN0IGFkZCB3YXRlclxuICBsZXQgY29udGFpbmVyID0ge1xuICAgIHN0cmljdDogZnVuY3Rpb24ob2JqLCBuYW1lLCBsb2MpIHtcbiAgICAgIGlmICghb2JqIHx8ICEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1wiJyArIG5hbWUgKyAnXCIgbm90IGRlZmluZWQgaW4gJyArIG9iaiwge1xuICAgICAgICAgIGxvYzogbG9jXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgICB9LFxuICAgIGxvb2t1cFByb3BlcnR5OiBmdW5jdGlvbihwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgbGV0IHJlc3VsdCA9IHBhcmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24oZGVwdGhzLCBuYW1lKSB7XG4gICAgICBjb25zdCBsZW4gPSBkZXB0aHMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gZGVwdGhzW2ldICYmIGNvbnRhaW5lci5sb29rdXBQcm9wZXJ0eShkZXB0aHNbaV0sIG5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZGVwdGhzW2ldW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsYW1iZGE6IGZ1bmN0aW9uKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgbGV0IHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uKGksIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICAgIGxldCBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0sXG4gICAgICAgIGZuID0gdGhpcy5mbihpKTtcbiAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJlZEJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGZuLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFwcGVyKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjtcbiAgICB9LFxuXG4gICAgZGF0YTogZnVuY3Rpb24odmFsdWUsIGRlcHRoKSB7XG4gICAgICB3aGlsZSAodmFsdWUgJiYgZGVwdGgtLSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLl9wYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBtZXJnZUlmTmVlZGVkOiBmdW5jdGlvbihwYXJhbSwgY29tbW9uKSB7XG4gICAgICBsZXQgb2JqID0gcGFyYW0gfHwgY29tbW9uO1xuXG4gICAgICBpZiAocGFyYW0gJiYgY29tbW9uICYmIHBhcmFtICE9PSBjb21tb24pIHtcbiAgICAgICAgb2JqID0gVXRpbHMuZXh0ZW5kKHt9LCBjb21tb24sIHBhcmFtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIC8vIEFuIGVtcHR5IG9iamVjdCB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIG51bGwtY29udGV4dHNcbiAgICBudWxsQ29udGV4dDogT2JqZWN0LnNlYWwoe30pLFxuXG4gICAgbm9vcDogZW52LlZNLm5vb3AsXG4gICAgY29tcGlsZXJJbmZvOiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJcbiAgfTtcblxuICBmdW5jdGlvbiByZXQoY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICByZXQuX3NldHVwKG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICBkYXRhID0gaW5pdERhdGEoY29udGV4dCwgZGF0YSk7XG4gICAgfVxuICAgIGxldCBkZXB0aHMsXG4gICAgICBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzKSB7XG4gICAgICBpZiAob3B0aW9ucy5kZXB0aHMpIHtcbiAgICAgICAgZGVwdGhzID1cbiAgICAgICAgICBjb250ZXh0ICE9IG9wdGlvbnMuZGVwdGhzWzBdXG4gICAgICAgICAgICA/IFtjb250ZXh0XS5jb25jYXQob3B0aW9ucy5kZXB0aHMpXG4gICAgICAgICAgICA6IG9wdGlvbnMuZGVwdGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVwdGhzID0gW2NvbnRleHRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1haW4oY29udGV4dCAvKiwgb3B0aW9ucyovKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAnJyArXG4gICAgICAgIHRlbXBsYXRlU3BlYy5tYWluKFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNvbnRhaW5lci5oZWxwZXJzLFxuICAgICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgICAgIGRlcHRoc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIG1haW4gPSBleGVjdXRlRGVjb3JhdG9ycyhcbiAgICAgIHRlbXBsYXRlU3BlYy5tYWluLFxuICAgICAgbWFpbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG9wdGlvbnMuZGVwdGhzIHx8IFtdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zXG4gICAgKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldC5pc1RvcCA9IHRydWU7XG5cbiAgcmV0Ll9zZXR1cCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCkge1xuICAgICAgbGV0IG1lcmdlZEhlbHBlcnMgPSBVdGlscy5leHRlbmQoe30sIGVudi5oZWxwZXJzLCBvcHRpb25zLmhlbHBlcnMpO1xuICAgICAgd3JhcEhlbHBlcnNUb1Bhc3NMb29rdXBQcm9wZXJ0eShtZXJnZWRIZWxwZXJzLCBjb250YWluZXIpO1xuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBtZXJnZWRIZWxwZXJzO1xuXG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwpIHtcbiAgICAgICAgLy8gVXNlIG1lcmdlSWZOZWVkZWQgaGVyZSB0byBwcmV2ZW50IGNvbXBpbGluZyBnbG9iYWwgcGFydGlhbHMgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gY29udGFpbmVyLm1lcmdlSWZOZWVkZWQoXG4gICAgICAgICAgb3B0aW9ucy5wYXJ0aWFscyxcbiAgICAgICAgICBlbnYucGFydGlhbHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlUGFydGlhbCB8fCB0ZW1wbGF0ZVNwZWMudXNlRGVjb3JhdG9ycykge1xuICAgICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IFV0aWxzLmV4dGVuZChcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBlbnYuZGVjb3JhdG9ycyxcbiAgICAgICAgICBvcHRpb25zLmRlY29yYXRvcnNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLmhvb2tzID0ge307XG4gICAgICBjb250YWluZXIucHJvdG9BY2Nlc3NDb250cm9sID0gY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sKG9wdGlvbnMpO1xuXG4gICAgICBsZXQga2VlcEhlbHBlckluSGVscGVycyA9XG4gICAgICAgIG9wdGlvbnMuYWxsb3dDYWxsc1RvSGVscGVyTWlzc2luZyB8fFxuICAgICAgICB0ZW1wbGF0ZVdhc1ByZWNvbXBpbGVkV2l0aENvbXBpbGVyVjc7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdoZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdibG9ja0hlbHBlck1pc3NpbmcnLCBrZWVwSGVscGVySW5IZWxwZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IG9wdGlvbnMucHJvdG9BY2Nlc3NDb250cm9sOyAvLyBpbnRlcm5hbCBvcHRpb25cbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gb3B0aW9ucy5oZWxwZXJzO1xuICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3B0aW9ucy5wYXJ0aWFscztcbiAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gb3B0aW9ucy5kZWNvcmF0b3JzO1xuICAgICAgY29udGFpbmVyLmhvb2tzID0gb3B0aW9ucy5ob29rcztcbiAgICB9XG4gIH07XG5cbiAgcmV0Ll9jaGlsZCA9IGZ1bmN0aW9uKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIGJsb2NrIHBhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocyAmJiAhZGVwdGhzKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgcGFyZW50IGRlcHRocycpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwUHJvZ3JhbShcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGksXG4gICAgICB0ZW1wbGF0ZVNwZWNbaV0sXG4gICAgICBkYXRhLFxuICAgICAgMCxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcm9ncmFtKFxuICBjb250YWluZXIsXG4gIGksXG4gIGZuLFxuICBkYXRhLFxuICBkZWNsYXJlZEJsb2NrUGFyYW1zLFxuICBibG9ja1BhcmFtcyxcbiAgZGVwdGhzXG4pIHtcbiAgZnVuY3Rpb24gcHJvZyhjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgY3VycmVudERlcHRocyA9IGRlcHRocztcbiAgICBpZiAoXG4gICAgICBkZXB0aHMgJiZcbiAgICAgIGNvbnRleHQgIT0gZGVwdGhzWzBdICYmXG4gICAgICAhKGNvbnRleHQgPT09IGNvbnRhaW5lci5udWxsQ29udGV4dCAmJiBkZXB0aHNbMF0gPT09IG51bGwpXG4gICAgKSB7XG4gICAgICBjdXJyZW50RGVwdGhzID0gW2NvbnRleHRdLmNvbmNhdChkZXB0aHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgIG9wdGlvbnMuZGF0YSB8fCBkYXRhLFxuICAgICAgYmxvY2tQYXJhbXMgJiYgW29wdGlvbnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksXG4gICAgICBjdXJyZW50RGVwdGhzXG4gICAgKTtcbiAgfVxuXG4gIHByb2cgPSBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKTtcblxuICBwcm9nLnByb2dyYW0gPSBpO1xuICBwcm9nLmRlcHRoID0gZGVwdGhzID8gZGVwdGhzLmxlbmd0aCA6IDA7XG4gIHByb2cuYmxvY2tQYXJhbXMgPSBkZWNsYXJlZEJsb2NrUGFyYW1zIHx8IDA7XG4gIHJldHVybiBwcm9nO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY3VycmVudGx5IHBhcnQgb2YgdGhlIG9mZmljaWFsIEFQSSwgdGhlcmVmb3JlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhcnRpYWwocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICBpZiAoIXBhcnRpYWwpIHtcbiAgICBpZiAob3B0aW9ucy5uYW1lID09PSAnQHBhcnRpYWwtYmxvY2snKSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ107XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV07XG4gICAgfVxuICB9IGVsc2UgaWYgKCFwYXJ0aWFsLmNhbGwgJiYgIW9wdGlvbnMubmFtZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHBhcnRpYWwgdGhhdCByZXR1cm5lZCBhIHN0cmluZ1xuICAgIG9wdGlvbnMubmFtZSA9IHBhcnRpYWw7XG4gICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbcGFydGlhbF07XG4gIH1cbiAgcmV0dXJuIHBhcnRpYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgLy8gVXNlIHRoZSBjdXJyZW50IGNsb3N1cmUgY29udGV4dCB0byBzYXZlIHRoZSBwYXJ0aWFsLWJsb2NrIGlmIHRoaXMgcGFydGlhbFxuICBjb25zdCBjdXJyZW50UGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICBvcHRpb25zLnBhcnRpYWwgPSB0cnVlO1xuICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICBvcHRpb25zLmRhdGEuY29udGV4dFBhdGggPSBvcHRpb25zLmlkc1swXSB8fCBvcHRpb25zLmRhdGEuY29udGV4dFBhdGg7XG4gIH1cblxuICBsZXQgcGFydGlhbEJsb2NrO1xuICBpZiAob3B0aW9ucy5mbiAmJiBvcHRpb25zLmZuICE9PSBub29wKSB7XG4gICAgb3B0aW9ucy5kYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAvLyBXcmFwcGVyIGZ1bmN0aW9uIHRvIGdldCBhY2Nlc3MgdG8gY3VycmVudFBhcnRpYWxCbG9jayBmcm9tIHRoZSBjbG9zdXJlXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcbiAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGZ1bmN0aW9uIHBhcnRpYWxCbG9ja1dyYXBwZXIoXG4gICAgICBjb250ZXh0LFxuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgKSB7XG4gICAgICAvLyBSZXN0b3JlIHRoZSBwYXJ0aWFsLWJsb2NrIGZyb20gdGhlIGNsb3N1cmUgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrXG4gICAgICAvLyBpLmUuIHRoZSBwYXJ0IGluc2lkZSB0aGUgYmxvY2sgb2YgdGhlIHBhcnRpYWwgY2FsbC5cbiAgICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGN1cnJlbnRQYXJ0aWFsQmxvY2s7XG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBpZiAoZm4ucGFydGlhbHMpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMucGFydGlhbHMsIGZuLnBhcnRpYWxzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkICYmIHBhcnRpYWxCbG9jaykge1xuICAgIHBhcnRpYWwgPSBwYXJ0aWFsQmxvY2s7XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gaW5pdERhdGEoY29udGV4dCwgZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgISgncm9vdCcgaW4gZGF0YSkpIHtcbiAgICBkYXRhID0gZGF0YSA/IGNyZWF0ZUZyYW1lKGRhdGEpIDoge307XG4gICAgZGF0YS5yb290ID0gY29udGV4dDtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcykge1xuICBpZiAoZm4uZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb3BzID0ge307XG4gICAgcHJvZyA9IGZuLmRlY29yYXRvcihcbiAgICAgIHByb2csXG4gICAgICBwcm9wcyxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGRlcHRocyAmJiBkZXB0aHNbMF0sXG4gICAgICBkYXRhLFxuICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICBkZXB0aHNcbiAgICApO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG5cbmZ1bmN0aW9uIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKSB7XG4gIE9iamVjdC5rZXlzKG1lcmdlZEhlbHBlcnMpLmZvckVhY2goaGVscGVyTmFtZSA9PiB7XG4gICAgbGV0IGhlbHBlciA9IG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV07XG4gICAgbWVyZ2VkSGVscGVyc1toZWxwZXJOYW1lXSA9IHBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbihoZWxwZXIsIGNvbnRhaW5lcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpIHtcbiAgY29uc3QgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHk7XG4gIHJldHVybiB3cmFwSGVscGVyKGhlbHBlciwgb3B0aW9ucyA9PiB7XG4gICAgcmV0dXJuIFV0aWxzLmV4dGVuZCh7IGxvb2t1cFByb3BlcnR5IH0sIG9wdGlvbnMpO1xuICB9KTtcbn1cbiJdfQ==
1540
1541
1542                /***/ }),
1543
1544            
vendor: 1,812 bytes, lines 1544-1571
1544/***/ "./node_modules/handlebars/dist/cjs/handlebars/safe-string.js":
1545            /*!********************************************************************!*\
1546  !*** ./node_modules/handlebars/dist/cjs/handlebars/safe-string.js ***!
1547  \********************************************************************/
1548            /*! no static exports found */
1549            /***/ (function(module, exports, __webpack_require__) {
1550
1551                "use strict";
1552// Build out our basic SafeString type
1553
1554
1555                exports.__esModule = true;
1556                function SafeString(string) {
1557                    this.string = string;
1558                }
1559
1560                SafeString.prototype.toString = SafeString.prototype.toHTML = function () {
1561                    return '' + this.string;
1562                };
1563
1564                exports['default'] = SafeString;
1565                module.exports = exports['default'];
1566//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==
1567
1568
1569                /***/ }),
1570
1571            
vendor: 12,676 bytes, lines 1571-1707
1571/***/ "./node_modules/handlebars/dist/cjs/handlebars/utils.js":
1572            /*!**************************************************************!*\
1573  !*** ./node_modules/handlebars/dist/cjs/handlebars/utils.js ***!
1574  \**************************************************************/
1575            /*! no static exports found */
1576            /***/ (function(module, exports, __webpack_require__) {
1577
1578                "use strict";
1579
1580
1581                exports.__esModule = true;
1582                exports.extend = extend;
1583                exports.indexOf = indexOf;
1584                exports.escapeExpression = escapeExpression;
1585                exports.isEmpty = isEmpty;
1586                exports.createFrame = createFrame;
1587                exports.blockParams = blockParams;
1588                exports.appendContextPath = appendContextPath;
1589                var escape = {
1590                    '&': '&amp;',
1591                    '<': '&lt;',
1592                    '>': '&gt;',
1593                    '"': '&quot;',
1594                    "'": '&#x27;',
1595                    '`': '&#x60;',
1596                    '=': '&#x3D;'
1597                };
1598
1599                var badChars = /[&<>"'`=]/g,
1600                    possible = /[&<>"'`=]/;
1601
1602                function escapeChar(chr) {
1603                    return escape[chr];
1604                }
1605
1606                function extend(obj /* , ...source */) {
1607                    for (var i = 1; i < arguments.length; i++) {
1608                        for (var key in arguments[i]) {
1609                            if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
1610                                obj[key] = arguments[i][key];
1611                            }
1612                        }
1613                    }
1614
1615                    return obj;
1616                }
1617
1618                var toString = Object.prototype.toString;
1619
1620                exports.toString = toString;
1621// Sourced from lodash
1622// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
1623                /* eslint-disable func-style */
1624                var isFunction = function isFunction(value) {
1625                    return typeof value === 'function';
1626                };
1627// fallback for older versions of Chrome and Safari
1628                /* istanbul ignore next */
1629                if (isFunction(/x/)) {
1630                    exports.isFunction = isFunction = function (value) {
1631                        return typeof value === 'function' && toString.call(value) === '[object Function]';
1632                    };
1633                }
1634                exports.isFunction = isFunction;
1635
1636                /* eslint-enable func-style */
1637
1638                /* istanbul ignore next */
1639                var isArray = Array.isArray || function (value) {
1640                    return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;
1641                };
1642
1643                exports.isArray = isArray;
1644// Older IE versions do not directly support indexOf so we must implement our own, sadly.
1645
1646                function indexOf(array, value) {
1647                    for (var i = 0, len = array.length; i < len; i++) {
1648                        if (array[i] === value) {
1649                            return i;
1650                        }
1651                    }
1652                    return -1;
1653                }
1654
1655                function escapeExpression(string) {
1656                    if (typeof string !== 'string') {
1657                        // don't escape SafeStrings, since they're already safe
1658                        if (string && string.toHTML) {
1659                            return string.toHTML();
1660                        } else if (string == null) {
1661                            return '';
1662                        } else if (!string) {
1663                            return string + '';
1664                        }
1665
1666                        // Force a string conversion as this will be done by the append regardless and
1667                        // the regex test will do this transparently behind the scenes, causing issues if
1668                        // an object's to string has escaped characters in it.
1669                        string = '' + string;
1670                    }
1671
1672                    if (!possible.test(string)) {
1673                        return string;
1674                    }
1675                    return string.replace(badChars, escapeChar);
1676                }
1677
1678                function isEmpty(value) {
1679                    if (!value && value !== 0) {
1680                        return true;
1681                    } else if (isArray(value) && value.length === 0) {
1682                        return true;
1683                    } else {
1684                        return false;
1685                    }
1686                }
1687
1688                function createFrame(object) {
1689                    var frame = extend({}, object);
1690                    frame._parent = object;
1691                    return frame;
1692                }
1693
1694                function blockParams(params, ids) {
1695                    params.path = ids;
1696                    return params;
1697                }
1698
1699                function appendContextPath(contextPath, id) {
1700                    return (contextPath ? contextPath + '.' : '') + id;
1701                }
1702//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=
1703
1704
1705                /***/ }),
1706
1707            
vendor: 633 bytes, lines 1707-1721
1707/***/ "./node_modules/handlebars/runtime.js":
1708            /*!********************************************!*\
1709  !*** ./node_modules/handlebars/runtime.js ***!
1710  \********************************************/
1711            /*! no static exports found */
1712            /***/ (function(module, exports, __webpack_require__) {
1713
1714// Create a simple path alias to allow browserify to resolve
1715// the runtime on a supported path.
1716                module.exports = __webpack_require__(/*! ./dist/cjs/handlebars.runtime */ "./node_modules/handlebars/dist/cjs/handlebars.runtime.js")['default'];
1717
1718
1719                /***/ }),
1720
1721            
vendor: 1,368 bytes, lines 1721-1763
1721/***/ "./node_modules/webpack/buildin/global.js":
1722            /*!***********************************!*\
1723  !*** (webpack)/buildin/global.js ***!
1724  \***********************************/
1725            /*! no static exports found */
1726            /***/ (function(module, exports) {
1727
1728                var g;
1729
1730// This works in non-strict mode
1731                g = (function() {
1732                    return this;
1733                })();
1734
1735                try {
1736                    // This works if eval is allowed (see CSP)
1737                    g = g || new Function("return this")();
1738                } catch (e) {
1739                    // This works if the window reference is available
1740                    if (typeof window === "object") g = window;
1741                }
1742
1743// g can still be undefined, but nothing to do about it...
1744// We return undefined, instead of nothing here, so it's
1745// easier to handle this case. if(!global) { ...}
1746
1747                module.exports = g;
1748
1749
1750                /***/ }),
1751
1752            /***/ "./src/css/main.styl":
1753            /*!***************************!*\
1754  !*** ./src/css/main.styl ***!
1755  \***************************/
1756            /*! no static exports found */
1757            /***/ (function(module, exports, __webpack_require__) {
1758
1759// extracted by mini-css-extract-plugin
1760
1761                /***/ }),
1762
1763            
1763/***/ "./src/index.js":
1764            /*!**********************!*\
1765  !*** ./src/index.js ***!
1766  \**********************/
1767            /*! no static exports found */
1768            /***/ (function(module, exports, __webpack_require__) {
1769
1770                "use strict";
1771                /* WEBPACK VAR INJECTION */(function(global) {/**
1772                 * @fileoverview The entry file of fullcalendar
1773                 * @author NHN FE Development Lab
1774                 */
1775
1776
1777
1778                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
1779                    var Calendar = __webpack_require__(/*! ./js/factory/calendar */ "./src/js/factory/calendar.js");
1780
1781                    __webpack_require__(/*! ./css/main.styl */ "./src/css/main.styl");
1782                    __webpack_require__(/*! ./js/view/template/helper */ "./src/js/view/template/helper.js");
1783
1784// for jquery
1785                    if (global.jQuery) {
1786                        global.jQuery.fn.tuiCalendar = function() {
1787                            var options, instance;
1788
1789                            var el = this.get(0);
1790                            var args = Array.prototype.slice.apply(arguments);
1791
1792                            if (el) {
1793                                options = util.pick(args, 0) || {};
1794
1795                                instance = global.jQuery.data(el, 'tuiCalendar');
1796
1797                                if (instance) {
1798                                    if (typeof options === 'string' && instance[options]) {
1799                                        return instance[options].apply(instance, args.slice(1));
1800                                    }
1801                                } else {
1802                                    instance = new Calendar(el, options);
1803                                    global.jQuery.data(el, 'tuiCalendar', instance);
1804                                }
1805                            }
1806
1807                            return this;
1808                        };
1809                    }
1810
1811                    module.exports = Calendar;
1812
1813                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
1814
1815                /***/ }),
1816
1817            
1817/***/ "./src/js/common/array.js":
1818            /*!********************************!*\
1819  !*** ./src/js/common/array.js ***!
1820  \********************************/
1821            /*! no static exports found */
1822            /***/ (function(module, exports, __webpack_require__) {
1823
1824                "use strict";
1825                /**
1826                 * @fileoverview Utility module for array sort, binary search.
1827                 * @author NHN FE Development Lab <[email protected]>
1828                 */
1829
1830
1831                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
1832                var datetime = __webpack_require__(/*! ../common/datetime */ "./src/js/common/datetime.js");
1833
1834                /**
1835                 * A module for sorting array.
1836                 * @module array
1837                 */
1838
1839                /**********
1840                 * Search
1841                 **********/
1842
1843                /**
1844                 * search item index using binary search algorithm.
1845                 *
1846                 * the array must be sorted.
1847                 * @param {array} arr array to search.
1848                 * @param {(string|number|boolean)} search value to search.
1849                 * @param {function} [fn] iteratee for retrieve each element's value to search.
1850                 * @param {function} [compare] compare function for specific sort status. default is string ascending.
1851                 * @returns {number} The number of item index searched. return negative number when no exist that item.
1852                 * It can use insert index after Math.abs()
1853                 * @example
1854                 *
1855                 * var arr = [1, 3, 7, 11, 15, 23];
1856                 *
1857                 * function sortNumber(a, b) {
1858                 *     return a - b;
1859                 * }
1860                 *
1861                 * bsearch(arr, 15, null, sortNumber);    // 4
1862                 * bsearch(arr, 21, null, sortNumber);    // -5
1863                 *
1864                 * arr.splice(Math.abs(bsearch(arr, 21, null, sortNumber)), 0, 21);
1865                 * // [1, 2, 7, 11, 15, 21, 23]
1866                 */
1867                function bsearch(arr, search, fn, compare) {
1868                    var minIndex = 0,
1869                        maxIndex = arr.length - 1,
1870                        currentIndex,
1871                        value,
1872                        comp;
1873
1874                    compare = compare || stringASC;
1875
1876                    while (minIndex <= maxIndex) {
1877                        currentIndex = (minIndex + maxIndex) / 2 | 0; // Math.floor
1878                        value = fn ? fn(arr[currentIndex]) : arr[currentIndex];
1879                        comp = compare(value, search);
1880
1881                        if (comp < 0) {
1882                            minIndex = currentIndex + 1;
1883                        } else if (comp > 0) {
1884                            maxIndex = currentIndex - 1;
1885                        } else {
1886                            return currentIndex;
1887                        }
1888                    }
1889
1890                    return ~maxIndex;
1891                }
1892
1893                /**********
1894                 * Compare Functions
1895                 **********/
1896
1897                /**
1898                 * compare function for array sort.
1899                 *
1900                 * sort array by ascending.
1901                 * @param {boolean} a The boolean to compare
1902                 * @param {boolean} b The boolean to compare.
1903                 * @returns {number} Result of comparison.
1904                 */
1905                function booleanASC(a, b) {
1906                    if (a !== b) {
1907                        return a ? -1 : 1;
1908                    }
1909
1910                    return 0;
1911                }
1912
1913                /**
1914                 * compare function for array sort.
1915                 *
1916                 * sort array by descending.
1917                 * @param {boolean} a The boolean to compare
1918                 * @param {boolean} b The boolean to compare.
1919                 * @returns {number} Result of comparison.
1920                 */
1921                function booleanDESC(a, b) {
1922                    if (a !== b) {
1923                        return a ? 1 : -1;
1924                    }
1925
1926                    return 0;
1927                }
1928
1929                /**
1930                 * compare function for array sort.
1931                 *
1932                 * sort array by number ascending.
1933                 * @param {number} _a The number to compare.
1934                 * @param {number} _b The number to compare.
1935                 * @returns {number} Result of comparison.
1936                 */
1937                function numberASC(_a, _b) {
1938                    var a = Number(_a),
1939                        b = Number(_b);
1940
1941                    return a - b;
1942                }
1943
1944                /**
1945                 * compare function for array sort.
1946                 *
1947                 * sort array by number descending.
1948                 * @param {number} _a The number to compare.
1949                 * @param {number} _b The number to compare.
1950                 * @returns {number} Result of comparison.
1951                 */
1952                function numberDESC(_a, _b) {
1953                    var a = Number(_a),
1954                        b = Number(_b);
1955
1956                    return b - a;
1957                }
1958
1959                /**
1960                 * compare function for array sort.
1961                 *
1962                 * sort array by string ascending
1963                 * @param {string} _a The string to compare.
1964                 * @param {string} _b The string to compare.
1965                 * @returns {number} Result of comparison.
1966                 */
1967                function stringASC(_a, _b) {
1968                    var a = String(_a),
1969                        b = String(_b);
1970
1971                    if (a > b) {
1972                        return 1;
1973                    }
1974                    if (a < b) {
1975                        return -1;
1976                    }
1977
1978                    return 0;
1979                }
1980
1981                /**
1982                 * compare function for array sort.
1983                 *
1984                 * sort array by string descending
1985                 * @param {string} _a The string to compare.
1986                 * @param {string} _b The string to compare.
1987                 * @returns {number} Result of comparison.
1988                 */
1989                function stringDESC(_a, _b) {
1990                    var a = String(_a),
1991                        b = String(_b);
1992
1993                    if (a > b) {
1994                        return -1;
1995                    }
1996                    if (a < b) {
1997                        return 1;
1998                    }
1999
2000                    return 0;
2001                }
2002
2003                /**
2004                 * compare function for array sort.
2005                 *
2006                 * sort array by string ascending with ignore case.
2007                 * @param {string} _a The string to compare.
2008                 * @param {string} _b The string to compare.
2009                 * @returns {number} Result of comparison.
2010                 */
2011                function stringASCIgnoreCase(_a, _b) {
2012                    var a = String(_a).toLowerCase(),
2013                        b = String(_b).toLowerCase();
2014
2015                    if (a > b) {
2016                        return 1;
2017                    }
2018                    if (a < b) {
2019                        return -1;
2020                    }
2021
2022                    return 0;
2023                }
2024
2025                /**
2026                 * compare function for array sort.
2027                 *
2028                 * sort array by string descending with ignore case.
2029                 * @param {string} _a The string to compare.
2030                 * @param {string} _b The string to compare.
2031                 * @returns {number} Result of comparison.
2032                 */
2033                function stringDESCIgnoreCase(_a, _b) {
2034                    var a = String(_a).toLowerCase(),
2035                        b = String(_b).toLowerCase();
2036
2037                    if (a > b) {
2038                        return -1;
2039                    }
2040                    if (a < b) {
2041                        return 1;
2042                    }
2043
2044                    return 0;
2045                }
2046
2047                /**
2048                 * Compare schedule models for sort.
2049                 *
2050                 * 1. all day schedule first.
2051                 * 2. early start.
2052                 * 3. longest duration.
2053                 * 4. early created.
2054                 * @param {Schedule|ScheduleViewModel} a The object schedule instance.
2055                 * @param {Schedule|ScheduleViewModel} b The object schedule instance.
2056                 * @returns {number} Result of comparison.
2057                 */
2058                function scheduleASC(a, b) {
2059                    var durationA, durationB;
2060                    var allDayCompare, startsCompare;
2061                    var modelA = a.valueOf();
2062                    var modelB = b.valueOf();
2063
2064                    allDayCompare = booleanASC(modelA.isAllDay || a.hasMultiDates, modelB.isAllDay || b.hasMultiDates);
2065
2066                    if (allDayCompare) {
2067                        return allDayCompare;
2068                    }
2069
2070                    startsCompare = datetime.compare(a.getStarts(), b.getStarts());
2071
2072                    if (startsCompare) {
2073                        return startsCompare;
2074                    }
2075
2076                    durationA = a.duration();
2077                    durationB = b.duration();
2078
2079                    if (durationA < durationB) {
2080                        return 1;
2081                    }
2082                    if (durationA > durationB) {
2083                        return -1;
2084                    }
2085
2086                    return util.stamp(modelA) - util.stamp(modelB);
2087                }
2088
2089                module.exports = {
2090                    bsearch: bsearch,
2091                    compare: {
2092                        schedule: {
2093                            asc: scheduleASC
2094                        },
2095                        bool: {
2096                            asc: booleanASC,
2097                            desc: booleanDESC
2098                        },
2099                        num: {
2100                            asc: numberASC,
2101                            desc: numberDESC
2102                        },
2103                        str: {
2104                            asc: stringASC,
2105                            desc: stringDESC,
2106                            ascIgnoreCase: stringASCIgnoreCase,
2107                            descIgnoreCase: stringDESCIgnoreCase
2108                        }
2109                    }
2110                };
2111
2112
2113                /***/ }),
2114
2115            
2115/***/ "./src/js/common/autoScroll.js":
2116            /*!*************************************!*\
2117  !*** ./src/js/common/autoScroll.js ***!
2118  \*************************************/
2119            /*! no static exports found */
2120            /***/ (function(module, exports, __webpack_require__) {
2121
2122                "use strict";
2123                /* WEBPACK VAR INJECTION */(function(global) {/**
2124                 * @fileoverview Add autoscroll feature to elements that prevented text selection.
2125                 * @author NHN FE Development Lab <[email protected]>
2126                 */
2127
2128
2129                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
2130                    var domevent = __webpack_require__(/*! ../common/domevent */ "./src/js/common/domevent.js");
2131                    var domutil = __webpack_require__(/*! ../common/domutil */ "./src/js/common/domutil.js");
2132                    var Point = __webpack_require__(/*! ../common/point */ "./src/js/common/point.js");
2133
2134                    var SCROLL_INTERVAL = 30;
2135                    var SCROLL_MAX = 15;
2136                    var SCROLL_CLICK_INCREASED = 2; // In IE, the offset of the actual UI pixel when the scroll bar is clicked is offset.
2137
2138                    /**
2139                     * Add autoscroll feature to elements that prevented text selection.
2140                     * @constructor
2141                     * @param {HTMLElement} container - HTMLElement to add autoscroll features.
2142                     */
2143                    function AutoScroll(container) {
2144                        /**
2145                         * @type {HTMLElement}
2146                         */
2147                        this.container = container;
2148
2149                        /**
2150                         * @type {AutoScroll.DIRECTION}
2151                         */
2152                        this._direction = AutoScroll.DIRECTION.INSIDE;
2153
2154                        /**
2155                         * @type {number}
2156                         */
2157                        this._offset = 0;
2158
2159                        /**
2160                         * interval to scrolling
2161                         * @type {number}
2162                         */
2163                        this._intervalID = 0;
2164
2165                        domevent.on(container, {
2166                            'mousedown': this._onMouseDown
2167                        }, this);
2168                    }
2169
2170                    /**
2171                     * @enum
2172                     */
2173                    AutoScroll.DIRECTION = {
2174                        INSIDE: 0,
2175                        TOP: 1,
2176                        RIGHT: 2,
2177                        BOTTOM: 3,
2178                        LEFT: 4
2179                    };
2180
2181                    /**
2182                     * Instance destroy method.
2183                     */
2184                    AutoScroll.prototype.destroy = function() {
2185                        domevent.off(this.container, {
2186                            'mousedown': this._onMouseDown,
2187                            'mousemove': this._onMouseMove,
2188                            'mouseup': this._onMouseUp
2189                        }, this);
2190
2191                        window.clearInterval(this._intervalID);
2192                        this._intervalID = this._direction = this.container = null;
2193                    };
2194
2195                    /**
2196                     * Normalize ClientRect and calculate each position of edges.
2197                     * @param {ClientRect} clientRect - ClientRect object of element.
2198                     * @returns {object} edges.
2199                     */
2200                    AutoScroll.prototype._getEdgePositions = function(clientRect) {
2201                        return {
2202                            top: clientRect.top,
2203                            right: clientRect.left + clientRect.width,
2204                            bottom: clientRect.bottom,
2205                            left: clientRect.left
2206                        };
2207                    };
2208
2209                    /**
2210                     * Get element real size ("real size" -> size without scrollbar)
2211                     * @param {HTMLElement} el - element want to know real size ("real size" -> size without scrollbar)
2212                     * @returns {number[]} real size [width, height]
2213                     */
2214                    AutoScroll.prototype.getRealSize = function(el) {
2215                        var computed = domutil.getComputedStyle(el),
2216                            border,
2217                            padding;
2218
2219                        border = parseFloat(computed.getPropertyValue('border-top-width')) +
2220                            parseFloat(computed.getPropertyValue('border-bottom-width'));
2221                        padding = parseFloat(computed.getPropertyValue('padding-top')) +
2222                            parseFloat(computed.getPropertyValue('padding-bottom'));
2223
2224                        return [el.clientWidth + border + padding, el.clientHeight + border + padding];
2225                    };
2226
2227                    /**
2228                     * Check supplied element has scrollbar.
2229                     * @param {HTMLElement} el - element want to know has scrollbar.
2230                     * @returns {boolean[]} has scrollbar? [horizontal, vertical]
2231                     */
2232                    AutoScroll.prototype.hasScrollbar = function(el) {
2233                        var realSize = this.getRealSize(el);
2234
2235                        return [
2236                            el.offsetWidth > Math.ceil(realSize[0]),
2237                            el.offsetHeight > Math.ceil(realSize[1])
2238                        ];
2239                    };
2240
2241                    /**
2242                     * @param {HTMLElement} el - element want to know.
2243                     * @param {MouseEvent} mouseEvent - mouse event object.
2244                     * @returns {boolean} mouse pointer is on the scrollbar?
2245                     */
2246                    AutoScroll.prototype.isOnScrollbar = function(el, mouseEvent) {
2247                        var realSize = this.getRealSize(el),
2248                            pos = domevent.getMousePosition(mouseEvent, el),
2249                            mouseInScrollbar = false;
2250
2251                        mouseInScrollbar = (realSize[0] - SCROLL_CLICK_INCREASED < pos[0] ||
2252                            realSize[1] - SCROLL_CLICK_INCREASED < pos[1]);
2253
2254                        return mouseInScrollbar;
2255                    };
2256
2257                    /**
2258                     * MouseDown event handler
2259                     * @param {MouseEvent} mouseDownEvent - mouse down event
2260                     */
2261                    AutoScroll.prototype._onMouseDown = function(mouseDownEvent) {
2262                        // only primary button can start drag.
2263                        if (domevent.getMouseButton(mouseDownEvent) !== 0) {
2264                            return;
2265                        }
2266
2267                        // deactivate autoscroll feature when mouse is on the scrollbar. (IE)
2268                        if (util.browser.msie && this.isOnScrollbar(this.container, mouseDownEvent)) {
2269                            return;
2270                        }
2271
2272                        window.clearInterval(this._intervalID);
2273                        this._intervalID = window.setInterval(util.bind(this._onTick, this), SCROLL_INTERVAL);
2274
2275                        domevent.on(global, {
2276                            'mousemove': this._onMouseMove,
2277                            'mouseup': this._onMouseUp
2278                        }, this);
2279                    };
2280
2281                    /**
2282                     * MouseMove event handler
2283                     * @param {MouseEvent} mouseEvent - mouse move event object.
2284                     */
2285                    AutoScroll.prototype._onMouseMove = function(mouseEvent) {
2286                        var edge = this._getEdgePositions(this.container.getBoundingClientRect()),
2287                            pos = Point.n(domevent.getMousePosition(mouseEvent));
2288
2289                        if (pos.y >= edge.top && pos.y <= edge.bottom &&
2290                            pos.x >= edge.left && pos.x <= edge.right) {
2291                            this._direction = AutoScroll.DIRECTION.INSIDE;
2292
2293                            return;
2294                        }
2295
2296                        if (pos.y < edge.top) {
2297                            this._direction = AutoScroll.DIRECTION.TOP;
2298                            this._offset = edge.top - pos.y;
2299
2300                            return;
2301                        }
2302
2303                        if (pos.y > edge.bottom) {
2304                            this._direction = AutoScroll.DIRECTION.BOTTOM;
2305                            this._offset = pos.y - edge.bottom;
2306
2307                            return;
2308                        }
2309
2310                        if (pos.x < edge.left) {
2311                            this._direction = AutoScroll.DIRECTION.LEFT;
2312                            this._offset = edge.left - pos.x;
2313
2314                            return;
2315                        }
2316
2317                        this._direction = AutoScroll.DIRECTION.RIGHT;
2318                        this._offset = pos.x - edge.right;
2319                    };
2320
2321                    /**
2322                     * MouseUp event handler.
2323                     */
2324                    AutoScroll.prototype._onMouseUp = function() {
2325                        window.clearInterval(this._intervalID);
2326                        this._intervalID = 0;
2327                        this._direction = AutoScroll.DIRECTION.INSIDE;
2328                        this._offset = 0;
2329
2330                        domevent.off(global, {
2331                            'mousemove': this._onMouseMove,
2332                            'mouseup': this._onMouseUp
2333                        }, this);
2334                    };
2335
2336                    /**
2337                     * Interval tick event handler
2338                     */
2339                    AutoScroll.prototype._onTick = function() {
2340                        var direction = this._direction,
2341                            container,
2342                            factor;
2343
2344                        if (!direction) {
2345                            return;
2346                        }
2347
2348                        container = this.container;
2349                        factor = Math.min(this._offset, SCROLL_MAX);
2350
2351                        switch (direction) {
2352                            case AutoScroll.DIRECTION.TOP:
2353                                container.scrollTop -= factor;
2354                                break;
2355                            case AutoScroll.DIRECTION.RIGHT:
2356                                container.scrollLeft += factor;
2357                                break;
2358                            case AutoScroll.DIRECTION.BOTTOM:
2359                                container.scrollTop += factor;
2360                                break;
2361                            default:
2362                                container.scrollLeft -= factor;
2363                                break;
2364                        }
2365                    };
2366
2367                    module.exports = AutoScroll;
2368
2369                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
2370
2371                /***/ }),
2372
2373            
2373/***/ "./src/js/common/collection.js":
2374            /*!*************************************!*\
2375  !*** ./src/js/common/collection.js ***!
2376  \*************************************/
2377            /*! no static exports found */
2378            /***/ (function(module, exports, __webpack_require__) {
2379
2380                "use strict";
2381                /**
2382                 * @fileoverview Common collections.
2383                 * @author NHN FE Development Lab <[email protected]>
2384                 */
2385
2386
2387                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
2388                var forEachProp = util.forEachOwnProperties,
2389                    forEachArr = util.forEachArray,
2390                    isFunc = util.isFunction,
2391                    isObj = util.isObject;
2392
2393                var aps = Array.prototype.slice;
2394
2395                /**
2396                 * Common collection.
2397                 *
2398                 * It need function for get model's unique id.
2399                 *
2400                 * if the function is not supplied then it use default function {@link Collection#getItemID}
2401                 * @constructor
2402                 * @param {function} [getItemIDFn] function for get model's id.
2403                 */
2404                function Collection(getItemIDFn) {
2405                    /**
2406                     * @type {object.<string, *>}
2407                     */
2408                    this.items = {};
2409
2410                    /**
2411                     * @type {number}
2412                     */
2413                    this.length = 0;
2414
2415                    if (isFunc(getItemIDFn)) {
2416                        /**
2417                         * @type {function}
2418                         */
2419                        this.getItemID = getItemIDFn;
2420                    }
2421                }
2422
2423                /**********
2424                 * static props
2425                 **********/
2426
2427                /**
2428                 * Combind supplied function filters and condition.
2429                 * @param {...function} filters - function filters
2430                 * @returns {function} combined filter
2431                 */
2432                Collection.and = function(filters) {
2433                    var cnt;
2434
2435                    filters = aps.call(arguments);
2436                    cnt = filters.length;
2437
2438                    return function(item) {
2439                        var i = 0;
2440
2441                        for (; i < cnt; i += 1) {
2442                            if (!filters[i].call(null, item)) {
2443                                return false;
2444                            }
2445                        }
2446
2447                        return true;
2448                    };
2449                };
2450
2451                /**
2452                 * Combine multiple function filters with OR clause.
2453                 * @param {...function} filters - function filters
2454                 * @returns {function} combined filter
2455                 */
2456                Collection.or = function(filters) {
2457                    var cnt;
2458
2459                    filters = aps.call(arguments);
2460                    cnt = filters.length;
2461
2462                    return function(item) {
2463                        var i = 1,
2464                            result = filters[0].call(null, item);
2465
2466                        for (; i < cnt; i += 1) {
2467                            result = (result || filters[i].call(null, item));
2468                        }
2469
2470                        return result;
2471                    };
2472                };
2473
2474                /**
2475                 * Merge several collections.
2476                 *
2477                 * You can\'t merge collections different _getScheduleID functions. Take case of use.
2478                 * @param {...Collection} collections collection arguments to merge
2479                 * @returns {Collection} merged collection.
2480                 */
2481                Collection.merge = function(collections) {    // eslint-disable-line
2482                    var cols = aps.call(arguments),
2483                        newItems = {},
2484                        merged = new Collection(cols[0].getItemID),
2485                        extend = util.extend;
2486
2487                    forEachArr(cols, function(col) {
2488                        extend(newItems, col.items);
2489                    });
2490
2491                    merged.items = newItems;
2492                    merged.length = util.keys(merged.items).length;
2493
2494                    return merged;
2495                };
2496
2497                /**********
2498                 * prototype props
2499                 **********/
2500
2501                /**
2502                 * get model's unique id.
2503                 * @param {object} item model instance.
2504                 * @returns {number} model unique id.
2505                 */
2506                Collection.prototype.getItemID = function(item) {
2507                    return String(item._id);
2508                };
2509
2510                /**
2511                 * add models.
2512                 * @param {...*} item models to add this collection.
2513                 */
2514                Collection.prototype.add = function(item) {
2515                    var self = this,
2516                        id,
2517                        ownItems;
2518
2519                    if (arguments.length > 1) {
2520                        forEachArr(aps.call(arguments), function(o) {
2521                            self.add(o);
2522                        });
2523
2524                        return;
2525                    }
2526
2527                    id = this.getItemID(item);
2528                    ownItems = this.items;
2529
2530                    if (!ownItems[id]) {
2531                        this.length += 1;
2532                    }
2533                    ownItems[id] = item;
2534                };
2535
2536                /**
2537                 * remove models.
2538                 * @param {...(object|string|number)} id model instance or unique id to delete.
2539                 * @returns {array} deleted model list.
2540                 */
2541                Collection.prototype.remove = function(id) {
2542                    var self = this,
2543                        removed = [],
2544                        ownItems,
2545                        itemToRemove;
2546
2547                    if (!this.length) {
2548                        return removed;
2549                    }
2550
2551                    if (arguments.length > 1) {
2552                        removed = util.map(aps.call(arguments), function(_id) {
2553                            return self.remove(_id);
2554                        });
2555
2556                        return removed;
2557                    }
2558
2559                    ownItems = this.items;
2560
2561                    if (isObj(id)) {
2562                        id = this.getItemID(id);
2563                    }
2564
2565                    if (!ownItems[id]) {
2566                        return removed;
2567                    }
2568
2569                    this.length -= 1;
2570                    itemToRemove = ownItems[id];
2571                    delete ownItems[id];
2572
2573                    return itemToRemove;
2574                };
2575
2576                /**
2577                 * remove all models in collection.
2578                 */
2579                Collection.prototype.clear = function() {
2580                    this.items = {};
2581                    this.length = 0;
2582                };
2583
2584                /**
2585                 * check collection has specific model.
2586                 * @param {(object|string|number|function)} id model instance or id or filter function to check
2587                 * @returns {boolean} is has model?
2588                 */
2589                Collection.prototype.has = function(id) {
2590                    var isFilter,
2591                        has;
2592
2593                    if (!this.length) {
2594                        return false;
2595                    }
2596
2597                    isFilter = isFunc(id);
2598                    has = false;
2599
2600                    if (isFilter) {
2601                        this.each(function(item) {
2602                            if (id(item) === true) {
2603                                has = true;
2604
2605                                return false; // returning false can stop this loop
2606                            }
2607
2608                            return true;
2609                        });
2610                    } else {
2611                        id = isObj(id) ? this.getItemID(id) : id;
2612                        has = util.isExisty(this.items[id]);
2613                    }
2614
2615                    return has;
2616                };
2617
2618                /**
2619                 * invoke callback when model exist in collection.
2620                 * @param {(string|number)} id model unique id.
2621                 * @param {function} fn the callback.
2622                 * @param {*} [context] callback context.
2623                 */
2624                Collection.prototype.doWhenHas = function(id, fn, context) {
2625                    var item = this.items[id];
2626
2627                    if (!util.isExisty(item)) {
2628                        return;
2629                    }
2630
2631                    fn.call(context || this, item);
2632                };
2633
2634                /**
2635                 * Search model. and return new collection.
2636                 * @param {function} filter filter function.
2637                 * @returns {Collection} new collection with filtered models.
2638                 * @example
2639                 * collection.find(function(item) {
2640                 *     return item.edited === true;
2641                 * });
2642                 *
2643                 * function filter1(item) {
2644                 *     return item.edited === false;
2645                 * }
2646                 *
2647                 * function filter2(item) {
2648                 *     return item.disabled === false;
2649                 * }
2650                 *
2651                 * collection.find(Collection.and(filter1, filter2));
2652                 *
2653                 * collection.find(Collection.or(filter1, filter2));
2654                 */
2655                Collection.prototype.find = function(filter) {
2656                    var result = new Collection();
2657
2658                    if (this.hasOwnProperty('getItemID')) {
2659                        result.getItemID = this.getItemID;
2660                    }
2661
2662                    this.each(function(item) {
2663                        if (filter(item) === true) {
2664                            result.add(item);
2665                        }
2666                    });
2667
2668                    return result;
2669                };
2670
2671                /**
2672                 * Group element by specific key values.
2673                 *
2674                 * if key parameter is function then invoke it and use returned value.
2675                 * @param {(string|number|function|array)} key key property or getter function.
2676                 *  if string[] supplied, create each collection before grouping.
2677                 * @param {function}
2677 [groupFunc] - function that return each group's key
2678                 * @returns {object.<string, Collection>} grouped object
2679                 * @example
2680                 *
2681                 * // pass `string`, `number`, `boolean` type value then group by property value.
2682                 * collection.groupBy('gender');    // group by 'gender' property value.
2683                 * collection.groupBy(50);          // group by '50' property value.
2684                 *
2685                 * // pass `function` then group by return value. each invocation `function` is called with `(item)`.
2686                 * collection.groupBy(function(item) {
2687                 *     if (item.score > 60) {
2688                 *         return 'pass';
2689                 *     }
2690                 *     return 'fail';
2691                 * });
2692                 *
2693                 * // pass `array` with first arguments then create each collection before grouping.
2694                 * collection.groupBy(['go', 'ruby', 'javascript']);
2695                 * // result: { 'go': empty Collection, 'ruby': empty Collection, 'javascript': empty Collection }
2696                 *
2697                 * // can pass `function` with `array` then group each elements.
2698                 * collection.groupBy(['go', 'ruby', 'javascript'], function(item) {
2699                 *     if (item.isFast) {
2700                 *         return 'go';
2701                 *     }
2702                 *
2703                 *     return item.name;
2704                 * });
2705                 */
2706                Collection.prototype.groupBy = function(key, groupFunc) {
2707                    var result = {},
2708                        collection,
2709                        baseValue,
2710                        keyIsFunc = isFunc(key),
2711                        getItemIDFn = this.getItemID;
2712
2713                    if (util.isArray(key)) {
2714                        util.forEachArray(key, function(k) {
2715                            result[String(k)] = new Collection(getItemIDFn);
2716                        });
2717
2718                        if (!groupFunc) {
2719                            return result;
2720                        }
2721
2722                        key = groupFunc;
2723                        keyIsFunc = true;
2724                    }
2725
2726                    this.each(function(item) {
2727                        if (keyIsFunc) {
2728                            baseValue = key(item);
2729                        } else {
2730                            baseValue = item[key];
2731
2732                            if (isFunc(baseValue)) {
2733                                baseValue = baseValue.apply(item);
2734                            }
2735                        }
2736
2737                        collection = result[baseValue];
2738
2739                        if (!collection) {
2740                            collection = result[baseValue] = new Collection(getItemIDFn);
2741                        }
2742
2743                        collection.add(item);
2744                    });
2745
2746                    return result;
2747                };
2748
2749                /**
2750                 * Return single item in collection.
2751                 *
2752                 * Returned item is inserted in this collection firstly.
2753                 * @param {function} [filter] - function filter
2754                 * @returns {object} item.
2755                 */
2756                Collection.prototype.single = function(filter) {
2757                    var result,
2758                        useFilter = util.isFunction(filter);
2759
2760                    this.each(function(item) {
2761                        if (!useFilter) {
2762                            result = item;
2763
2764                            return false; // returning false can stop this loop
2765                        }
2766                        if (filter(item)) {
2767                            result = item;
2768
2769                            return false; // returning false can stop this loop
2770                        }
2771
2772                        return true;
2773                    }, this);
2774
2775                    return result;
2776                };
2777
2778                /**
2779                 * sort a basis of supplied compare function.
2780                 * @param {function} compareFunction compareFunction
2781                 * @returns {array} sorted array.
2782                 */
2783                Collection.prototype.sort = function(compareFunction) {
2784                    var arr = [];
2785
2786                    this.each(function(item) {
2787                        arr.push(item);
2788                    });
2789
2790                    if (isFunc(compareFunction)) {
2791                        arr = arr.sort(compareFunction);
2792                    }
2793
2794                    return arr;
2795                };
2796
2797                /**
2798                 * iterate each model element.
2799                 *
2800                 * when iteratee return false then break the loop.
2801                 * @param {function} iteratee iteratee(item, index, items)
2802                 * @param {*} [context] context
2803                 */
2804                Collection.prototype.each = function(iteratee, context) {
2805                    forEachProp(this.items, iteratee, context || this);
2806                };
2807
2808                /**
2809                 * return new array with collection items.
2810                 * @returns {array} new array.
2811                 */
2812                Collection.prototype.toArray = function() {
2813                    if (!this.length) {
2814                        return [];
2815                    }
2816
2817                    return util.map(this.items, function(item) {
2818                        return item;
2819                    });
2820                };
2821
2822                module.exports = Collection;
2823
2824
2825                /***/ }),
2826
2827            
2827/***/ "./src/js/common/common.js":
2828            /*!*********************************!*\
2829  !*** ./src/js/common/common.js ***!
2830  \*********************************/
2831            /*! no static exports found */
2832            /***/ (function(module, exports, __webpack_require__) {
2833
2834                "use strict";
2835                /**
2836                 * @fileoverview common/general utilities.
2837                 * @author NHN FE Development Lab <[email protected]>
2838                 */
2839
2840
2841                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
2842                var aps = Array.prototype.slice;
2843
2844                var domutil = __webpack_require__(/*! ../common/domutil */ "./src/js/common/domutil.js"),
2845                    Collection = __webpack_require__(/*! ../common/collection */ "./src/js/common/collection.js");
2846                var datetime = __webpack_require__(/*! ../common/datetime */ "./src/js/common/datetime.js");
2847
2848                /**
2849                 * Default schedule id getter for collection
2850                 * @param {Schedule} schedule - schedule instance
2851                 * @returns {string} schedule id
2852                 */
2853                function scheduleIDGetter(schedule) {
2854                    return schedule.cid();
2855                }
2856
2857                module.exports = {
2858                    /**
2859                     * @param {...*} initItems - items to add newly created collection.
2860                     * @returns {Collection} new collection for schedule models.
2861                     */
2862                    createScheduleCollection: function(initItems) {    // eslint-disable-line
2863                        var collection = new Collection(scheduleIDGetter);
2864
2865                        if (arguments.length) {
2866                            collection.add.apply(collection, arguments);
2867                        }
2868
2869                        return collection;
2870                    },
2871
2872                    /**
2873                     * Get ratio value.
2874                     *
2875                     * a : b = y : X;
2876                     *
2877                     * =
2878                     *
2879                     * X = (b * y) / a;
2880                     * @param {number} a - a
2881                     * @param {number} b - b
2882                     * @param {number} y - y
2883                     * @returns {number} ratio value
2884                     */
2885                    ratio: function(a, b, y) {
2886                        // a : b = y : x;
2887                        return (b * y) / a;
2888                    },
2889
2890                    /**
2891                     * Find nearest value from supplied params.
2892                     * @param {number} value - value to find.
2893                     * @param {array} nearest - nearest array.
2894                     * @returns {number} nearest value
2895                     */
2896                    nearest: function(value, nearest) {
2897                        var diff = util.map(nearest, function(v) {
2898                                return Math.abs(value - v);
2899                            }),
2900                            nearestIndex = util.inArray(Math.min.apply(null, diff), diff);
2901
2902                        return nearest[nearestIndex];
2903                    },
2904
2905                    /**
2906                     * pick value from object then return utility object to treat it.
2907                     * @param {object} obj - object to search supplied path property.
2908                     * @param {...string} paths - rest parameter that string value to search property in object.
2909                     * @returns {object} pick object.
2910                     */
2911                    pick2: function(obj, paths) {    // eslint-disable-line
2912                        var result = util.pick.apply(null, arguments),
2913                            pick;
2914
2915                        pick = {
2916                            /**
2917                             * @returns {*} picked value.
2918                             */
2919                            val: function() {
2920                                return result;
2921                            },
2922
2923                            /**
2924                             * invoke supplied function in picked object.
2925                             *
2926                             * the callback context is set picked object.
2927                             * @param {string|function} fn - function to invoke in picked object.
2928                             * @returns {*} result of invoke.
2929                             */
2930                            then: function(fn) {
2931                                var args;
2932
2933                                if (!result) {
2934                                    return undefined;    //eslint-disable-line
2935                                }
2936
2937                                args = aps.call(arguments, 1);
2938
2939                                if (util.isString(fn)) {
2940                                    return (util.pick(result, fn
2940) || function() {}).apply(result, args);
2941                                }
2942
2943                                return fn.call(result, result);
2944                            }
2945                        };
2946
2947                        return pick;
2948                    },
2949
2950                    /**
2951                     * Mixin method.
2952                     *
2953                     * (extend methods except property name 'mixin')
2954                     * @param {object} from - mixin object.
2955                     * @param {object} to - object to mixin.
2956                     */
2957                    mixin: function(from, to) {
2958                        util.extend(to.prototype, from);
2959                    },
2960
2961                    /**
2962                     * Limit supplied value base on `minArr`, `maxArr`
2963                     * @param {number} value - value
2964                     * @param {array} minArr - min
2965                     * @param {array} maxArr - max
2966                     * @returns {number} limited value
2967                     */
2968                    limit: function(value, minArr, maxArr) {
2969                        var v = Math.max.apply(null, [value].concat(minArr));
2970                        v = Math.min.apply(null, [v].concat(maxArr));
2971
2972                        return v;
2973                    },
2974
2975                    /**
2976                     * Limit supplied date base on `min`, `max`
2977                     * @param {TZDate} date - date
2978                     * @param {TZDate} min - min
2979                     * @param {TZDate} max - max
2980                     * @returns {TZDate} limited value
2981                     */
2982                    limitDate: function(date, min, max) {
2983                        if (date < min) {
2984                            return min;
2985                        }
2986                        if (date > max) {
2987                            return max;
2988                        }
2989
2990                        return date;
2991                    },
2992
2993                    /**
2994                     * Max value with TZDate type for timezone calculation
2995                     * @param {TZDate} d1 - date 1
2996                     * @param {TZDate} d2 - date 2
2997                     * @returns {TZDate}
2998                     */
2999                    maxDate: function(d1, d2) {
3000                        if (d1 > d2) {
3001                            return d1;
3002                        }
3003
3004                        return d2;
3005                    },
3006
3007                    stripTags: function(str) {
3008                        return str.replace(/<([^>]+)>/ig, '');
3009                    },
3010
3011                    /**
3012                     * Get first value in 2-dimentional array.
3013                     * @param {Array.<Array>} arr2d - 2-dimentional array
3014                     * @returns {*} first value in 2d array
3015                     */
3016                    firstIn2dArray: function(arr2d) {
3017                        return util.pick(arr2d, '0', '0');
3018                    },
3019
3020                    /**
3021                     * Get last value in 2-dimentional array.
3022                     * @param {Array.<Array>} arr2d - 2-dimentional array
3023                     * @returns {*} last value in 2d array
3024                     */
3025                    lastIn2dArray: function(arr2d) {
3026                        var lastRow = arr2d.length - 1,
3027                            lastCol = arr2d[lastRow].length - 1;
3028
3029                        return util.pick(arr2d, lastRow, lastCol);
3030                    },
3031
3032                    /**
3033                     * Set 'title' attribute for all element that has exceeded content in
3034                     * container
3035                     * @param {string} selector - CSS selector {@see domutil#find}
3036                     * @param {HTMLElement} container - container element
3037                     * @param {boolean} force - force to apply
3038                     */
3039                    setAutoEllipsis: function(selector, container, force) {
3040                        util.forEach(domutil.find(selector, container, true), function(el) {
3041                            if (force || el.offsetWidth < el.scrollWidth) {
3042                                el.setAttribute('title', domutil.getData(el, 'title'));
3043                            }
3044                        });
3045                    },
3046
3047                    /**
3048                     * Set the value at path of object.
3049                     * @param {object} object - the object to modify
3050                     * @param {string} path -the path of property to set
3051                     * @param {*} value - the value to set
3052                     */
3053                    set: function(object, path, value) {
3054                        var names = path.split('.');
3055                        var store = object;
3056
3057                        util.forEach(names, function(name, index) {
3058                            store[name] = store[name] || {};
3059
3060                            if (index === names.length - 1) {
3061                                store[name] = value;
3062                            } else {
3063                                store = store[name];
3064                            }
3065                        });
3066                    },
3067
3068                    /**
3069                     * shift a array
3070                     * @param {Array.<any>} array - array
3071                     * @param {number} shift - positive or negative integer to shift
3072                     * @returns {Array.<any>} shifted array
3073                     */
3074                    shiftArray: function(array, shift) {
3075                        var length = Math.abs(shift);
3076                        var i;
3077
3078                        if (shift > 0) {
3079                            for (i = 0; i < length; i += 1) {
3080                                array.push(array.shift());
3081                            }
3082                        } else if (shift < 0) {
3083                            for (i = 0; i < length; i += 1) {
3084                                array.unshift(array.pop());
3085                            }
3086                        }
3087
3088                        return array;
3089                    },
3090
3091                    /**
3092                     * take elements from array between start and end.
3093                     * @param {Array.<any>} array - array
3094                     * @param {number} start - start index
3095                     * @param {number} end - end index
3096                     * @returns {Array.<any>}
3097                     */
3098                    takeArray: function(array, start, end) {
3099                        var length = array.length;
3100                        var rightCount = length - end;
3101                        var leftCount = start;
3102
3103                        // remove right
3104                        array.splice(end, rightCount);
3105                        // remove left
3106                        array.splice(0, leftCount);
3107
3108                        return array;
3109                    },
3110
3111                    /**
3112                     * shift hours
3113                     * @param {number} hours - hours
3114                     * @param {number} shift - positive or negative integer to shift
3115                     * @returns {number} shifted hours
3116                     */
3117                    shiftHours: function(hours, shift) {
3118                        if (shift > 0) {
3119                            hours = (hours + shift) % 24;
3120                        } else if (shift < 0) {
3121                            hours += shift;
3122                            hours = hours > 0 ? hours : 24 + hours;
3123                        }
3124
3125                        return hours;
3126                    },
3127
3128                    /**
3129                     * Parse css value into number and units
3130                     * @param {string} cssValue - css value like '72px'
3131                     * @returns {Array} [number, unit]
3132                     */
3133                    parseUnit: function(cssValue) {
3134                        var number = parseFloat(cssValue, 10);
3135                        var unit = cssValue.match(/[\d.\-+]*\s*(.*)/)[1] || '';
3136
3137                        return [number, unit];
3138                    },
3139
3140                    find: function(array, iteratee, contextopt) {
3141                        var found;
3142
3143                        util.forEach(array, function(item) {
3144                            if (iteratee) {
3145                                found = iteratee(item);
3146                            }
3147
3148                            if (found) {
3149                                found = item;
3150
3151                                return false;
3152                            }
3153
3154                            return true;
3155                        }, contextopt);
3156
3157                        return found;
3158                    },
3159
3160                    getScheduleChanges: function(schedule, propNames, data) {
3161                        var changes = {};
3162                        var dateProps = ['start', 'end'];
3163
3164                        util.forEach(propNames, function(propName) {
3165                            if (dateProps.indexOf(propName) > -1) {
3166                                if (datetime.compare(schedule[propName], data[propName])) {
3167                                    changes[propName] = data[propName];
3168                                }
3169                            } else if (data[propName] && schedule[propName] !== data[propName]) {
3170                                changes[propName] = data[propName];
3171                            }
3172                        });
3173
3174                        return util.isEmpty(changes) ? null : changes;
3175                    }
3176                };
3177
3178
3179                /***/ }),
3180
3181            
3181/***/ "./src/js/common/datetime.js":
3182            /*!***********************************!*\
3183  !*** ./src/js/common/datetime.js ***!
3184  \***********************************/
3185            /*! no static exports found */
3186            /***/ (function(module, exports, __webpack_require__) {
3187
3188                "use strict";
3189                /* WEBPACK VAR INJECTION */(function(global) {/**
3190                 * @fileoverview datetime utility module
3191                 * @author NHN FE Development Lab <[email protected]>
3192                 */
3193
3194
3195                var TZDate = __webpack_require__(/*! ./timezone */ "./src/js/common/timezone.js").Date,
3196                    dw = __webpack_require__(/*! ../common/dw */ "./src/js/common/dw.js");
3197                    var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
3198                    /* eslint-disable no-useless-escape */
3199                    var dateFormatRx = /^(\d{4}[-|\/]*\d{2}[-|\/]*\d{2})\s?(\d{2}:\d{2}:\d{2})?$/;
3200                    var datetime, tokenFunc;
3201
3202                    var memo = {
3203                        millisecondsTo: {},
3204                        millisecondsFrom: {}
3205                    };
3206
3207                    tokenFunc = {
3208                        /**
3209                         * @param {TZDate} date date object.
3210                         * @returns {string} YYYYMMDD
3211                         */
3212                        'YYYYMMDD': function(date) {
3213                            return [
3214                                date.getFullYear(),
3215                                datetime.leadingZero(date.getMonth() + 1, 2),
3216                                datetime.leadingZero(date.getDate(), 2)
3217                            ].join('');
3218                        },
3219                        /**
3220                         * @param {TZDate} date date object
3221                         * @returns {string} four digit year number
3222                         */
3223                        'YYYY': function(date) {
3224                            return String(date.getFullYear());
3225                        },
3226
3227                        /**
3228                         * @param {TZDate} date date object
3229                         * @returns {string} two digit month number
3230                         */
3231                        'MM': function(date) {
3232                            return datetime.leadingZero(date.getMonth() + 1, 2);
3233                        },
3234
3235                        /**
3236                         * @param {TZDate} date date object
3237                         * @returns {string} two digit date number
3238                         */
3239                        'DD': function(date) {
3240                            return datetime.leadingZero(date.getDate(), 2);
3241                        },
3242
3243                        /**
3244                         * @param {TZDate} date date object
3245                         * @returns {string} HH:mm
3246                         */
3247                        'HH:mm': function(date) {
3248                            var hour = date.getHours(),
3249                                minutes = date.getMinutes();
3250
3251                            return datetime.leadingZero(hour, 2) + ':' +
3252                                datetime.leadingZero(minutes, 2);
3253                        },
3254
3255                        /**
3256                         * @param {TZDate} date date object
3257                         * @returns {string} hh:mm
3258                         */
3259                        'hh:mm': function(date) {
3260                            var hour = date.getHours();
3261                            var minutes = date.getMinutes();
3262
3263                            if (hour > 12) {
3264                                hour = hour % 12;
3265                            }
3266
3267                            return datetime.leadingZero(hour, 2) + ':' +
3268                                datetime.leadingZero(minutes, 2);
3269                        },
3270
3271                        /**
3272                         * @param {TZDate} date date object
3273                         * @returns {string} tt
3274                         */
3275                        'tt': function(date) {
3276                            var hour = date.getHours();
3277
3278                            return hour < 12 ? 'am' : 'pm';
3279                        }
3280                    };
3281
3282                    datetime = {
3283                        /**
3284                         * The number of milliseconds one day.
3285                         * @type {number}
3286                         */
3287                        MILLISECONDS_PER_DAY: 86400000,
3288
3289                        /**
3290                         * The number of milliseconds one hour.
3291                         * @type {number}
3292                         */
3293                        MILLISECONDS_PER_HOUR: 3600000,
3294
3295                        /**
3296                         * The number of milliseconds one minutes.
3297                         * @type {number}
3298                         */
3299                        MILLISECONDS_PER_MINUTES: 60000,
3300
3301                        /**
3302                         * The number of milliseconds 20 minutes for schedule min duration
3303                         * @type {number}
3304                         */
3305                        MILLISECONDS_SCHEDULE_MIN_DURATION: 20 * 60000,
3306
3307                        /**
3308                         * convert milliseconds
3309                         * @param {string} type - type of value.
3310                         * @param {number} value - value to convert.
3311                         * @param {function} iteratee - iteratee function to use reduce.
3312                         * @returns {number} converted value.
3313                         */
3314                        _convMilliseconds: function(type, value, iteratee) {
3315                            var conv = [24, 60, 60, 1000],
3316                                index = {
3317                                    day: 0,
3318                                    hour: 1,
3319                                    minutes: 2,
3320                                    seconds: 3
3321                                };
3322
3323                            if (!(type in index) || global.isNaN(value)) {
3324                                return false;
3325                            }
3326
3327                            return util.reduce([value].concat(conv.slice(index[type])), iteratee);
3328                        },
3329
3330                        /**
3331                         * Convert milliseconds value to other type
3332                         * @param {type} type convert to type want to. support "day", "hour",
3333                         *  "minutes", "seconds" only.
3334                         * @param {value} value - value to convert.
3335                         * @returns {number} converted value.
3336                         */
3337                        millisecondsTo: function(type, value) {
3338                            var cache = memo.millisecondsTo,
3339                                key = type + value;
3340
3341                            if (cache[key]) {
3342                                return cache[key];
3343                            }
3344
3345                            cache[key] = datetime._convMilliseconds(type, value, function(m, v) {
3346                                return m / v;
3347                            });
3348
3349                            return cache[key];
3350                        },
3351
3352                        /**
3353                         * Convert value to milliseconds
3354                         * @param {type} type - type of supplied value. support "hour", "minutes", "seconds" only.
3355                         * @param {value} value - value to convert.
3356                         * @returns {number} converted value.
3357                         */
3358                        millisecondsFrom: function(type, value) {
3359                            var cache = memo.millisecondsFrom,
3360                                key = type + value;
3361
3362                            if (cache[key]) {
3363                                return cache[key];
3364                            }
3365
3366                            cache[key] = datetime._convMilliseconds(type, value, function(m, v) {
3367                                return m * v;
3368                            });
3369
3370                            return cache[key];
3371                        },
3372
3373                        /**
3374                         * Convert hours to minutes
3375                         * @param {number}
3375 hours - hours
3376                         * @returns {number} minutes
3377                         */
3378                        minutesFromHours: function(hours) {
3379                            return hours * 60;
3380                        },
3381
3382                        /**
3383                         * Make date array from supplied paramters.
3384                         * @param {TZDate} start Start date.
3385                         * @param {TZDate} end End date.
3386                         * @param {number} step The number of milliseconds to use increment.
3387                         * @returns {TZDate[]} TZDate array.
3388                         */
3389                        range: function(start, end, step) {
3390                            var startTime = start.getTime();
3391                            var endTime = end.getTime();
3392                            var cursor = startTime;
3393                            var date = dw(new TZDate(start));
3394                            var result = [];
3395
3396                            while (cursor <= endTime && endTime >= date.d.getTime()) {
3397                                result.push(datetime.start(date.d));
3398                                cursor = cursor + step;
3399                                date.addDate(1);
3400                            }
3401
3402                            return result;
3403                        },
3404
3405                        /**
3406                         * Clone supplied date.
3407                         * @param {TZDate} date date object to clone.
3408                         * @returns {TZDate} Cloned date object
3409                         */
3410                        clone: function(date) {
3411                            return new TZDate(date);
3412                        },
3413
3414                        /**
3415                         * Compare two dates.
3416                         *
3417                         * when first date is latest then seconds then return -1.
3418                         *
3419                         * return +1 reverse, and return 0 is same.
3420                         * @param {TZDate} d1 Date object to compare.
3421                         * @param {TZDate} d2 Date object to compare.
3422                         * @returns {number} result of compare
3423                         */
3424                        compare: function(d1, d2) {
3425                            var _d1 = d1.getTime(),
3426                                _d2 = d2.getTime();
3427
3428                            if (_d1 < _d2) {
3429                                return -1;
3430                            }
3431                            if (_d1 > _d2) {
3432                                return 1;
3433                            }
3434
3435                            return 0;
3436                        },
3437
3438                        /**
3439                         * @param {TZDate} d1 - date one
3440                         * @param {TZDate} d2 - date two
3441                         * @returns {boolean} is two date are same year, month?
3442                         */
3443                        isSameMonth: function(d1, d2) {
3444                            return (d1.getFullYear() === d2.getFullYear() &&
3445                                d1.getMonth() === d2.getMonth());
3446                        },
3447
3448                        /**
3449                         * @param {TZDate} d1 - date one
3450                         * @param {TZDate} d2 - date two
3451                         * @returns {boolean} is two date are same year, month, date?
3452                         */
3453                        isSameDate: function(d1, d2) {
3454                            var sameMonth = datetime.isSameMonth(d1, d2);
3455
3456                            return sameMonth && (d1.getDate() === d2.getDate());
3457                        },
3458
3459                        /**
3460                         * Check supplied parameter is valid date object.
3461                         * @param {*} d Object to validate.
3462                         * @returns {boolean} return true when parameter is valid date object.
3463                         */
3464                        isValid: function(d) {
3465                            if (d instanceof TZDate) {
3466                                return !window.isNaN(d.getTime());
3467                            }
3468
3469                            return false;
3470                        },
3471
3472                        /**
3473                         * convert non local date to UTC date.
3474                         * @param {TZDate} d Date to convert UTC.
3475                         * @returns {TZDate} The UTC Date.
3476                         */
3477                        toUTC: function(d) {
3478                            var l = d.getTime(),
3479                                offset = datetime.millisecondsFrom('minutes', new Date().getTimezoneOffset());
3480
3481                            return new TZDate(l + offset);
3482                        },
3483
3484                        /**
3485                         * pad left zero characters.
3486                         * @param {number} number number value to pad zero.
3487                         * @param {number} length pad length to want.
3488                         * @returns {string} padded string.
3489                         */
3490                        leadingZero: function(number, length) {
3491                            var zero = '',
3492                                i = 0;
3493
3494                            if (String(number).length > length) {
3495                                return String(number);
3496                            }
3497
3498                            for (; i < (length - 1); i += 1) {
3499                                zero += '0';
3500                            }
3501
3502                            return (zero + number).slice(length * -1);
3503                        },
3504
3505                        /**
3506                         * Convert date string to date object.
3507                         *
3508                         * Only listed below formats avaliable.
3509                         *
3510                         * - YYYYMMDD
3511                         * - YYYY/MM/DD
3512                         * - YYYY-MM-DD
3513                         * - YYYY/MM/DD HH:mm:SS
3514                         * - YYYY-MM-DD HH:mm:SS
3515                         *
3516                         * @param {string} str Formatted string.
3517                         * @param {number}
3517 [fixMonth=-1] - number for fix month calculating.
3518                         * @returns {(TZDate|boolean)} Converted Date object. when supplied str is not available then return false.
3519                         */
3520                        parse: function(str, fixMonth) {
3521                            var separator,
3522                                matches = str.match(dateFormatRx),
3523                                ymd,
3524                                hms;
3525
3526                            if (util.isUndefined(fixMonth)) {
3527                                fixMonth = -1;
3528                            }
3529
3530                            if (!matches) {
3531                                return false;
3532                            }
3533
3534                            if (str.length > 8) {
3535                                // YYYY/MM/DD
3536                                // YYYY-MM-DD
3537                                // YYYY/MM/DD HH:mm:SS
3538                                // YYYY-MM-DD HH:mm:SS
3539                                separator = ~str.indexOf('/') ? '/' : '-';
3540                                matches = matches.splice(1);
3541
3542                                ymd = matches[0].split(separator);
3543                                hms = matches[1] ? matches[1].split(':') : [0, 0, 0];
3544                            } else {
3545                                // YYYYMMDD
3546                                matches = matches[0];
3547                                ymd = [matches.substr(0, 4), matches.substr(4, 2), matches.substr(6, 2)];
3548                                hms = [0, 0, 0];
3549                            }
3550
3551                            return new TZDate().setWithRaw(
3552                                Number(ymd[0]),
3553                                Number(ymd[1]) + fixMonth,
3554                                Number(ymd[2]),
3555                                Number(hms[0]),
3556                                Number(hms[1]),
3557                                Number(hms[2]),
3558                                0
3559                            );
3560                        },
3561
3562                        /**
3563                         * Return date object from Date.
3564                         * @param {TZDate} date date
3565                         * @returns {object} Date object.
3566                         */
3567                        raw: function(date) {
3568                            return {
3569                                y: date.getFullYear(),
3570                                M: date.getMonth(),
3571                                d: date.getDate(),
3572                                h: date.getHours(),
3573                                m: date.getMinutes(),
3574                                s: date.getSeconds(),
3575                                ms: date.getMilliseconds()
3576                            };
3577                        },
3578
3579                        /**
3580                         * Return 00:00:00 supplied date.
3581                         * @param {TZDate} date date. if undefined, use now.
3582                         * @returns {TZDate} start date.
3583                         */
3584                        start: function(date) {
3585                            var d = date ? new TZDate(date) : new TZDate();
3586                            d.setHours(0, 0, 0, 0);
3587
3588                            return d;
3589                        },
3590
3591                        /**
3592                         * Return 23:59:59 supplied date.
3593                         * @param {TZDate} date date. if undefined, use now.
3594                         * @returns {TZDate} end date.
3595                         */
3596                        end: function(date) {
3597                            var d = date ? new TZDate(date) : new TZDate();
3598                            d.setHours(23, 59, 59, 0);
3599
3600                            return d;
3601                        },
3602
3603                        /**
3604                         * Return formatted string as basis of supplied string.
3605                         *
3606                         * Supported Token Lists.
3607                         *
3608                         * - YYYY => 1988
3609                         * - MM => 01 ~ 12
3610                         * - DD => 01 ~ 31
3611                         * - YYYYMMDD => 19880925
3612                         * @param {TZDate} date String want to formatted.
3613                         * @param {string} format format str.
3614                         * @returns {string}  Formatted date string.
3615                         */
3616                        format: function(date, format) {
3617                            var result = format;
3618                            util.forEachOwnProperties(tokenFunc, function(converter, token) {
3619                                result = result.replace(token, converter(date));
3620                            });
3621
3622                            return result;
3623                        },
3624
3625                        /**
3626                         * Get start date of specific month
3627                         * @param {TZDate} date - date to get start date
3628                         * @returns {TZDate} start date of supplied month
3629                         */
3630                        startDateOfMonth: function(date) {
3631                            var startDate = new TZDate(date);
3632
3633                            startDate.setDate(1);
3634                            startDate.setHours(0, 0, 0, 0);
3635
3636                            return startDate;
3637                        },
3638
3639                        /**
3640                         * Get end date of specific month
3641                         * @param {TZDate} date - date to get end date
3642                         * @returns {TZDate} end date of supplied month
3643                         */
3644                        endDateOfMonth: function(date) {
3645                            var endDate = datetime.startDateOfMonth(date);
3646
3647                            endDate.setMonth(endDate.getMonth() + 1);
3648                            endDate.setDate(endDate.getDate() - 1);
3649                            endDate.setHours(23, 59, 59);
3650
3651                            return endDate;
3652                        },
3653
3654                        /**
3655                         * Return 2-dimensional array month calendar
3656                         *
3657                         * dates that different month with given date are negative values
3658                         * @param {TZDate} month - date want to calculate month calendar
3659                         * @param {object} options - options
3660                         * @param {number}
3660 [options.startDayOfWeek=0] - start day of week
3661                         * @param {boolean} options.isAlways6Week - whether the number of weeks are always 6
3662                         * @param {number} options.visibleWeeksCount visible weeks count
3663                         * @param {boolean} options.workweek - only show work week
3664                         * @param {function} [iteratee] - iteratee for customizing calendar object
3665                         * @returns {Array.<TZDate[]>} calendar 2d array
3666                         */
3667                        arr2dCalendar: function(month, options, iteratee) {
3668                            var weekArr,
3669                                start, end,
3670                                startIndex, endIndex,
3671                                totalDate, afterDates,
3672                                cursor, week,
3673                                calendar = [],
3674                                startDayOfWeek = options.startDayOfWeek,
3675                                isAlways6Week = util.isUndefined(options.isAlways6Week) ? true : options.isAlways6Week,
3676                                visibleWeeksCount = options.visibleWeeksCount,
3677                                workweek = options.workweek;
3678
3679                            if (visibleWeeksCount) {
3680                                start = new TZDate(month);
3681                                end = dw(new TZDate(month));
3682                                end.addDate(7 * (visibleWeeksCount - 1));
3683                                end = end.d;
3684                            } else {
3685                                start = datetime.startDateOfMonth(month);
3686                                end = datetime.endDateOfMonth(month);
3687                            }
3688
3689                            // create day number array by startDayOfWeek number
3690                            // 4 -> [4, 5, 6, 0, 1, 2, 3]
3691                            // 2 -> [2, 3, 4, 5, 6, 0, 1]
3692                            weekArr = util.range(startDayOfWeek, 7).concat(util.range(7)).slice(0, 7);
3693                            startIndex = util.inArray(start.getDay(), weekArr);
3694                            endIndex = util.inArray(end.getDay(), weekArr);
3695                            // free dates after last date of this month
3696                            afterDates = 7 - (endIndex + 1);
3697
3698                            if (visibleWeeksCount) {
3699                                totalDate = 7 * visibleWeeksCount;
3700                            } else {
3701                                totalDate = isAlways6Week ? (7 * 6) : (startIndex + end.getDate() + afterDates);
3702                            }
3703                            cursor = datetime.start(start).addDate(-startIndex);
3704                            // iteratee all dates to render
3705                            util.forEachArray(util.range(totalDate), function(i) {
3706                                var date;
3707
3708                                if (!(i % 7)) {
3709                                    // group each date by week
3710                                    week = calendar[i / 7] = [];
3711                                }
3712
3713                                date = datetime.start(cursor);
3714                                date = iteratee ? iteratee(date) : date;
3715                                if (!workweek || !datetime.isWeekend(date.getDay())) {
3716                                    week.push(date);
3717                                }
3718
3719                                // add date
3720                                cursor.setDate(cursor.getDate() + 1);
3721                            });
3722
3723                            return calendar;
3724                        },
3725
3726                        /**
3727                         * Calculate grid left(%), width(%) by narrowWeekend, startDayOfWeek, workweek
3728                         *
3729                         * @param {number} days - day length of week
3730                         * @param {boolean} narrowWeekend - narrow weekend
3731                         * @param {number} startDayOfWeek - start day of week
3732                         * @param {boolean} workweek - only show work week
3733                         * @returns {Array} day, left, width
3734                         */
3735                        getGridLeftAndWidth: function(days, narrowWeekend, startDayOfWeek, workweek) {
3736                            var limitDaysToApplyNarrowWeekend = 5;
3737                            var uniformWidth = 100 / days;
3738                            var wideWidth = days > limitDaysToApplyNarrowWeekend ? 100 / (days - 1) : uniformWidth;
3739                            var accumulatedWidth = 0;
3740                            var dates = util.range(startDayOfWeek, 7).concat(util.range(days)).slice(0, 7);
3741
3742                            if (workweek) {
3743                                dates = util.filter(dates, function(day) {
3744                                    return !datetime.isWeekend(day);
3745                                });
3746                            }
3747
3748                            narrowWeekend = workweek ? false : narrowWeekend;
3749
3750                            return util.map(dates, function(day) {
3751                                var model;
3752                                var width = narrowWeekend ? wideWidth : uniformWidth;
3753                                if (days > limitDaysToApplyNarrowWeekend && narrowWeekend && datetime.isWeekend(day)) {
3754                                    width = wideWidth / 2;
3755                                }
3756
3757                                model = {
3758                                    day: day,
3759                                    width: width,
3760                                    left: accumulatedWidth
3761                                };
3762
3763                                accumulatedWidth += width;
3764
3765                                return model;
3766                            });
3767                        },
3768
3769                        /**
3770                         * Get that day is weekend
3771                         * @param {number} day number
3772                         * @returns {boolean} true if weekend or false
3773                         */
3774                        isWeekend: function(day) {
3775                            return day === 0 || day === 6;
3776                        },
3777
3778                        /**
3779                         * Whether date is between supplied dates with date value?
3780                         * @param {TZDate} d - target date
3781                         * @param {TZDate} d1 - from date
3782                         * @param {TZDate} d2 - to date
3783                         * @returns {boolean} is between?
3784                         */
3785                        isBetweenWithDate: function(d, d1, d2) {
3786                            var format = 'YYYYMMDD';
3787                            d = parseInt(datetime.format(d, format), 10);
3788                            d1 = parseInt(datetime.format(d1, format), 10);
3789                            d2 = parseInt(datetime.format(d2, format), 10);
3790
3791                            return d1 <= d && d <= d2;
3792                        },
3793
3794                        isStartOfDay: function(d) {
3795                            return !datetime.compare(datetime.start(d), d);
3796                        },
3797
3798                        convertStartDayToLastDay: function(d) {
3799                            var date = new TZDate(d);
3800                            if (datetime.isStartOfDay(d)) {
3801                                date.setDate(date.getDate() - 1);
3802                            }
3803
3804                            return date;
3805                        },
3806
3807                        getStartOfNextDay: function(d) {
3808                            var date = datetime.start(d);
3809                            date.setHours(24);
3810
3811                            return date;
3812                        }
3813                    };
3814
3815                    module.exports = datetime;
3816
3817                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
3818
3819                /***/ }),
3820
3821            
3821/***/ "./src/js/common/dirty.js":
3822            /*!********************************!*\
3823  !*** ./src/js/common/dirty.js ***!
3824  \********************************/
3825            /*! no static exports found */
3826            /***/ (function(module, exports, __webpack_require__) {
3827
3828                "use strict";
3829                /**
3830                 * @fileoverview Dirty flagging module for objects.
3831                 * @author NHN FE Development Lab <[email protected]>
3832                 */
3833
3834
3835                var common = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
3836                var existy = common.isExisty,
3837                    pick = common.pick,
3838                    isFunc = common.isFunction;
3839
3840                /**
3841                 * Mixin module for dirty flagging on specific objects.
3842                 * @mixin
3843                 * @example
3844                 * var obj = { hello: 'good', test: '123' };
3845                 * dirty.mixin(obj);
3846                 *
3847                 * obj.set('hello', 'world');
3848                 * obj.isDirty();    // true
3849                 * obj.isPropChanged('hello');    // true
3850                 * obj.isPropChanged('test');    // false
3851                 * obj.dirty(false);
3852                 *
3853                 * obj.isDirty();    // false
3854                 * obj.isPropChanged('hello');    // false
3855                 */
3856                var dirty = {
3857                    /**
3858                     * Set property value with dirty flagging.
3859                     * @param {string} propName Property name.
3860                     * @param {*} value Proprty value.
3861                     */
3862                    set: function(propName, value) {
3863                        var originValue = this[propName];
3864
3865                        if (originValue === value) {
3866                            return;
3867                        }
3868
3869                        this[propName] = value;
3870
3871                        if (!this._changed) {
3872                            /**
3873                             * Save changed properties.
3874                             * @memberof dirty
3875                             * @name _changed
3876                             * @type {Object}
3877                             */
3878                            this._changed = {};
3879                        }
3880
3881                        this._changed[propName] = true;
3882
3883                        /**
3884                         * Dirty flag
3885                         * @type {Boolean}
3886                         * @name _dirty
3887                         * @memberof dirty
3888                         */
3889                        this._dirty = true;
3890                    },
3891
3892                    /**
3893                     * Check dirty flag.
3894                     * @returns {boolean} Property is changed.
3895                     */
3896                    isDirty: function() {
3897                        return !!this._dirty;
3898                    },
3899
3900                    /**
3901                     * Set dirty flag manually.
3902                     * @param {Boolean} [toDirty=true] This will set dirty flag directly.
3903                     */
3904                    dirty: function(toDirty) {
3905                        toDirty = existy(toDirty) ? toDirty : true;
3906
3907                        /* istanbul ignore else */
3908                        if (!toDirty) {
3909                            this._changed = {};
3910                        }
3911
3912                        this._dirty = toDirty;
3913                    },
3914
3915                    /**
3916                     * Delete property safety.
3917                     * @param {String} propName The name of property.
3918                     */
3919                    deleteProp: function(propName) {
3920                        delete this[propName];
3921
3922                        if (this._changed) {
3923                            delete this._changed[propName];
3924                        }
3925                    },
3926
3927                    /**
3928                     * Check the changes with specific property.
3929                     * @param {String} propName The name of property you want.
3930                     * @returns {boolean} Is property changed?
3931                     */
3932                    isPropChanged: function(propName) {
3933                        if (!this._changed) {
3934                            return false;
3935                        }
3936
3937                        return this._changed[propName] === true;
3938                    },
3939
3940                    /**
3941                     * Mixin to specific objects.
3942                     * @param {Object} target The object to mix this module.
3943                     * @memberof module:util/dirty
3944                     * @example
3945                     * function Animal() {}
3946                     * dirty.mixin(Animal.prototype);
3947                     */
3948                    mixin: function(target) {
3949                        var methodFilterR = /(^_|mixin|wrap)/;
3950
3951                        common.forEachOwnProperties(dirty, function(o, k) {
3952                            if (!methodFilterR.test(k)) {
3953                                target[k] = dirty[k];
3954                            }
3955                        });
3956                    },
3957
3958                    /**
3959                     * Wrapper method for dirty flagging.
3960                     *
3961                     * This method invoke after invoked specific method that added by you.
3962                     *
3963                     * The method want to add are must exist before add.
3964                     * @param {object} target Target object to method wrap.
3965                     * @param {(string|object)} methodName
3966                     *  Method name to wrap or methodName: flag objects.
3967                     * @param {boolean} [flag=true]
3968                     *  this will used to flagging by dirty flagger after invoke the methods added by you.
3969                     * @memberof module:util/dirty
3970                     * @example
3971                     * function Animal(name) {
3972                     *     this.name = name;
3973                     * }
3974                     * Animal.prototype.growl = jasmine.createSpy('growl');
3975                     * Animal.prototype.test = function() {
3976                     *     return this.name;
3977                     * };
3978                     *
3979                     * dirty.mixin(Animal.prototype);
3980                     * // single
3981                     * dirty.wrap(Animal.prototype, 'growl', true);
3982                     * // multiple
3983                     * dirty.wrap(Animap.prototype, {
3984                     *     growl: true,
3985                     *     test: false
3986                     * });
3987                     *
3988                     */
3989                    wrap: function(target, methodName, flag) {
3990                        var wrap = dirty.wrap,
3991                            fn;
3992
3993                        if (common.isObject(methodName)) {
3994                            common.forEachOwnProperties(methodName, function(_flag, _name) {
3995                                wrap(target, _name, _flag);
3996                            });
3997
3998                            return;
3999                        }
4000
4001                        flag = existy(flag) ? flag : true;
4002
4003                        if (!target._wrapper) {
4004                            /**
4005                             * @param {function} _fn Original method to wrap.
4006                             * @param {boolean} flagToSet The boolean value to using dirty flagging.
4007                             * @returns {*} The result value of original method.
4008                             * @name _wrapper
4009                             * @memberof dirty
4010                             */
4011                            target._wrapper = function(_fn, flagToSet) {
4012                                return function() {
4013                                    var args = Array.prototype.slice.call(arguments);
4014                                    var result = _fn.apply(this, args); // eslint-disable-line
4015                                    this._dirty = flagToSet; // eslint-disable-line
4016
4017                                    return result;
4018                                };
4019                            };
4020                        }
4021
4022                        if (existy(pick(target, methodName)) &&
4023                            isFunc(target[methodName]) &&
4024                            !existy(pick(target, methodName, '_wrapped'))) {
4025                            fn = target[methodName];
4026                            target[methodName] = target._wrapper(fn, flag);
4027                            target[methodName]._wrapped = true;
4028                        }
4029                    }
4030                };
4031
4032                module.exports = dirty;
4033
4034
4035                /***/ }),
4036
4037            
4037/***/ "./src/js/common/domevent.js":
4038            /*!***********************************!*\
4039  !*** ./src/js/common/domevent.js ***!
4040  \***********************************/
4041            /*! no static exports found */
4042            /***/ (function(module, exports, __webpack_require__) {
4043
4044                "use strict";
4045                /* eslint complexity: 0 */
4046                /**
4047                 * @fileoverview Utility module for handling DOM events.
4048                 * @author NHN FE Development Lab <[email protected]>
4049                 */
4050
4051
4052                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
4053                var browser = util.browser,
4054                    eventKey = '_evt',
4055                    DRAG = {
4056                        START: ['touchstart', 'mousedown'],
4057                        END: {
4058                            mousedown: 'mouseup',
4059                            touchstart: 'touchend',
4060                            pointerdown: 'touchend',
4061                            MSPointerDown: 'touchend'
4062                        },
4063                        MOVE: {
4064                            mousedown: 'mousemove',
4065                            touchstart: 'touchmove',
4066                            pointerdown: 'touchmove',
4067                            MSPointerDown: 'touchmove'
4068                        }
4069                    };
4070
4071                var domevent = {
4072                    /**
4073                     * Bind dom events.
4074                     * @param {HTMLElement} obj HTMLElement to bind events.
4075                     * @param {(string|object)} types Space splitted events names or eventName:handler object.
4076                     * @param {*} fn handler function or context for handler method.
4077                     * @param {*} [context] context object for handler method.
4078                     */
4079                    on: function(obj, types, fn, context) {
4080                        if (util.isString(types)) {
4081                            util.forEach(types.split(' '), function(type) {
4082                                domevent._on(obj, type, fn, context);
4083                            });
4084
4085                            return;
4086                        }
4087
4088                        util.forEachOwnProperties(types, function(handler, type) {
4089                            domevent._on(obj, type, handler, fn);
4090                        });
4091                    },
4092
4093                    /**
4094                     * DOM event binding.
4095                     * @param {HTMLElement} obj HTMLElement to bind events.
4096                     * @param {String} type The name of events.
4097                     * @param {*} fn handler function
4098                     * @param {*} [context] context object for handler method.
4099                     * @private
4100                     */
4101                    _on: function(obj, type, fn, context) {
4102                        var id,
4103                            handler,
4104                            originHandler;
4105
4106                        id = type + util.stamp(fn) + (context ? '_' + util.stamp(context) : '');
4107
4108                        if (obj[eventKey] && obj[eventKey][id]) {
4109                            return;
4110                        }
4111
4112                        handler = function(e) {
4113                            fn.call(context || obj, e || window.event);
4114                        };
4115
4116                        originHandler = handler;
4117
4118                        if ('addEventListener' in obj) {
4119                            if (type === 'mouseenter' || type === 'mouseleave') {
4120                                handler = function(e) {
4121                                    e = e || window.event;
4122                                    if (!domevent._checkMouse(obj, e)) {
4123                                        return;
4124                                    }
4125                                    originHandler(e);
4126                                };
4127                                obj.addEventListener((type === 'mouseenter') ?
4128                                    'mouseover' : 'mouseout', handler, false);
4129                            } else {
4130                                if (type === 'mousewheel') {
4131                                    obj.addEventListener('DOMMouseScroll', handler, false);
4132                                }
4133
4134                                obj.addEventListener(type, handler, false);
4135                            }
4136                        } else if ('attachEvent' in obj) {
4137                            obj.attachEvent('on' + type, handler);
4138                        }
4139
4140                        obj[eventKey] = obj[eventKey] || {};
4141                        obj[eventKey][id] = handler;
4142                    },
4143
4144                    /**
4145                     * Unbind DOM Event handler.
4146                     * @param {HTMLElement} obj HTMLElement to unbind.
4147                     * @param {(string|object)} types Space splitted events names or eventName:handler object.
4148                     * @param {*} fn handler function or context for handler method.
4149                     * @param {*} [context] context object for handler method.
4150                     */
4151                    off: function(obj, types, fn, context) {
4152                        if (util.isString(types)) {
4153                            util.forEach(types.split(' '), function(type) {
4154                                domevent._off(obj, type, fn, context);
4155                            });
4156
4157                            return;
4158                        }
4159
4160                        util.forEachOwnProperties(types, function(handler, type) {
4161                            domevent._off(obj, type, handler, fn);
4162                        });
4163                    },
4164
4165                    /**
4166                     * Unbind DOM event handler.
4167                     * @param {HTMLElement} obj HTMLElement to unbind.
4168                     * @param {String} type The name of event to unbind.
4169                     * @param {function()} fn Event handler that supplied when binding.
4170                     * @param {*} context context object that supplied when binding.
4171                     * @private
4172                     */
4173                    _off: function(obj, type, fn, context) {
4174                        var id = type + util.stamp(fn) + (context ? '_' + util.stamp(context) : ''),
4175                            handler = obj[eventKey] && obj[eventKey][id];
4176
4177                        if (!handler) {
4178                            return;
4179                        }
4180
4181                        if ('removeEventListener' in obj) {
4182                            if (type === 'mouseenter' || type === 'mouseleave') {
4183                                obj.removeEventListener((type === 'mouseenter') ?
4184                                    'mouseover' : 'mouseout', handler, false);
4185                            } else {
4186                                if (type === 'mousewheel') {
4187                                    obj.removeEventListener('DOMMouseScroll', handler, false);
4188                                }
4189
4190                                obj.removeEventListener(type, handler, false);
4191                            }
4192                        } else if ('detachEvent' in obj) {
4193                            try {
4194                                obj.detachEvent('on' + type, handler);
4195                            } catch (e) {}    //eslint-disable-line
4196                        }
4197
4198                        delete obj[eventKey][id];
4199
4200                        if (util.keys(obj[eventKey]).length) {
4201                            return;
4202                        }
4203
4204                        // throw exception when deleting host object's property in below IE8
4205                        if (util.browser.msie && util.browser.version < 9) {
4206                            obj[eventKey] = null;
4207
4208                            return;
4209                        }
4210
4211                        delete obj[eventKey];
4212                    },
4213
4214                    /**
4215                     * Bind DOM event. this event will unbind after invokes.
4216                     * @param {HTMLElement} obj HTMLElement to bind events.
4217                     * @param {(string|object)} types Space splitted events names or eventName:handler object.
4218                     * @param {*} fn handler function or context for handler method.
4219                     * @param {*} [context] context object for handler method.
4220                     */
4221                    once: function(obj, types, fn, context) {
4222                        var self = this;
4223
4224                        if (util.isObject(types)) {
4225                            util.forEachOwnProperties(types, function(handler, type) {
4226                                domevent.once(obj, type, handler, fn);
4227                            });
4228
4229                            return;
4230                        }
4231
4232                        /**
4233                         * Handler for temporary usage for once implementation
4234                         */
4235                        function onceHandler() {
4236                            fn.apply(context || obj, arguments);
4237                            self._off(obj, types, onceHandler, context);
4238                        }
4239
4240                        domevent.on(obj, types, onceHandler, context);
4241                    },
4242
4243                    /**
4244                     * Cancel event bubbling.
4245                     * @param {Event} e Event object.
4246                     */
4247                    stopPropagation: function(e) {
4248                        if (e.stopPropagation) {
4249                            e.stopPropagation();
4250                        } else {
4251                            e.cancelBubble = true;
4252                        }
4253                    },
4254
4255                    /**
4256                     * Cancel browser default actions.
4257                     * @param {Event} e Event object.
4258                     */
4259                    preventDefault: function(e) {
4260                        if (e.preventDefault) {
4261                            e.preventDefault();
4262                        } else {
4263                            e.returnValue = false;
4264                        }
4265                    },
4266
4267                    /**
4268                     * Syntatic sugar of stopPropagation and preventDefault
4269                     * @param {Event} e Event object.
4270                     */
4271                    stop: function(e) {
4272                        domevent.preventDefault(e);
4273                        domevent.stopPropagation(e);
4274                    },
4275
4276                    /**
4277                     * Stop scroll events.
4278                     * @param {HTMLElement} el HTML element to prevent scroll.
4279                     */
4280                    disableScrollPropagation: function(el) {
4281                        domevent.on(el, 'mousewheel MozMousePixelScroll', domevent.stopPropagation);
4282                    },
4283
4284                    /**
4285                     * Stop all events related with click.
4286                     * @param {HTMLElement} el HTML element to prevent all event related with click.
4287                     */
4288                    disableClickPropagation: function(el) {
4289                        domevent.on(el, DRAG.START.join(' ') + ' click dblclick', domevent.stopPropagation);
4290                    },
4291
4292                    /**
4293                     * Get mouse position from mouse event.
4294                     *
4295                     * If supplied relatveElement parameter then return relative position based on element.
4296                     * @param {Event} mouseEvent Mouse event object
4297                     * @param {HTMLElement} relativeElement HTML element that calculate relative position.
4298                     * @returns {number[]} mouse position.
4299                     */
4300                    getMousePosition: function(mouseEvent, relativeElement) {
4301                        var rect;
4302
4303                        if (!relativeElement) {
4304                            return [mouseEvent.clientX, mouseEvent.clientY];
4305                        }
4306
4307                        rect = relativeElement.getBoundingClientRect();
4308
4309                        return [
4310                            mouseEvent.clientX - rect.left - relativeElement.clientLeft,
4311                            mouseEvent.clientY - rect.top - relativeElement.clientTop
4312                        ];
4313                    },
4314
4315                    /**
4316                     * Normalize mouse wheel event that different each browsers.
4317                     * @param {MouseEvent} e Mouse wheel event.
4318                     * @returns {Number} delta
4319                     */
4320                    getWheelDelta: function(e) {
4321                        var delta = 0;
4322
4323                        if (e.wheelDelta) {
4324                            delta = e.wheelDelta / 120;
4325                        }
4326
4327                        if (e.detail) {
4328                            delta = -e.detail / 3;
4329                        }
4330
4331                        return delta;
4332                    },
4333
4334                    /**
4335                     * prevent firing mouseleave event when mouse entered child elements.
4336                     * @param {HTMLElement} el HTML element
4337                     * @param {MouseEvent} e Mouse event
4338                     * @returns {Boolean} leave?
4339                     * @private
4340                     */
4341                    _checkMouse: function(el, e) {
4342                        var related = e.relatedTarget;
4343
4344                        if (!related) {
4345                            return true;
4346                        }
4347
4348                        try {
4349                            while (related && (related !== el)) {
4350                                related = related.parentNode;
4351                            }
4352                        } catch (err) {
4353                            return false;
4354                        }
4355
4356                        return (related !== el);
4357                    },
4358
4359                    /**
4360                     * Trigger specific events to html element.
4361                     * @param {HTMLElement} obj HTMLElement
4362                     * @param {string} type Event type name
4363                     * @param {object} [eventData] Event data
4364                     */
4365                    trigger: function(obj, type, eventData) {
4366                        var rMouseEvent = /(mouse|click)/;
4367                        if (util.isUndefined(eventData) && rMouseEvent.exec(type)) {
4368                            eventData = domevent.mouseEvent(type);
4369                        }
4370
4371                        if (obj.dispatchEvent) {
4372                            obj.dispatchEvent(eventData);
4373                        } else if (obj.fireEvent) {
4374                            obj.fireEvent('on' + type, eventData);
4375                        }
4376                    },
4377
4378                    /**
4379                     * Create virtual mouse event.
4380                     *
4381                     * Tested at
4382                     *
4383                     * - IE7 ~ IE11
4384                     * - Chrome
4385                     * - Firefox
4386                     * - Safari
4387                     * @param {string} type Event type
4388                     * @param {object} [eventObj] Event data
4389                     * @returns {MouseEvent} Virtual mouse event.
4390                     */
4391                    mouseEvent: function(type, eventObj) {
4392                        var evt,
4393                            e;
4394
4395                        e = util.extend({
4396                            bubbles: true,
4397                            cancelable: (type !== 'mousemove'),
4398                            view: window,
4399                            wheelDelta: 0,
4400                            detail: 0,
4401                            screenX: 0,
4402                            screenY: 0,
4403                            clientX: 0,
4404                            clientY: 0,
4405                            ctrlKey: false,
4406                            altKey: false,
4407                            shiftKey: false,
4408                            metaKey: false,
4409                            button: 0,
4410                            relatedTarget: undefined  // eslint-disable-line
4411                        }, eventObj);
4412
4413                        // prevent throw error when inserting wheelDelta property to mouse event on below IE8
4414                        if (browser.msie && browser.version < 9) {
4415                            delete e.wheelDelta;
4416                        }
4417
4418                        if (typeof document.createEvent === 'function') {
4419                            evt = document.createEvent('MouseEvents');
4420                            evt.initMouseEvent(type,
4421                                e.bubbles, e.cancelable, e.view, e.detail,
4422                                e.screenX, e.screenY, e.clientX, e.clientY,
4423                                e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
4424                                e.button, document.body.parentNode
4425                            );
4426                        } else if (document.createEventObject) {
4427                            evt = document.createEventObject();
4428
4429                            util.forEach(e, function(value, propName) {
4430                                evt[propName] = value;
4431                            }, this);
4432                            evt.button = {0: 1,
4433                                1: 4,
4434                                2: 2}[evt.button] || evt.button;
4435                        }
4436
4437                        return evt;
4438                    },
4439
4440                    /**
4441                     * Normalize mouse event's button attributes.
4442                     *
4443                     * Can detect which button is clicked by this method.
4444                     *
4445                     * Meaning of return numbers
4446                     *
4447                     * - 0: primary mouse button
4448                     * - 1: wheel button or center button
4449                     * - 2: secondary mouse button
4450                     * @param {MouseEvent} mouseEvent - The mouse event object want to know.
4451                     * @returns {number} - The value of meaning which button is clicked?
4452                     */
4453                    getMouseButton: function(mouseEvent) {
4454                        var button,
4455                            primary = '0,1,3,5,7',
4456                            secondary = '2,6',
4457                            wheel = '4';
4458
4459                        /* istanbul ignore else */
4460                        if (document.implementation.hasFeature('MouseEvents', '2.0')) {
4461                            return mouseEvent.button;
4462                        }
4463
4464                        button = String(mouseEvent.button);
4465                        if (primary.indexOf(button) > -1) {
4466                            return 0;
4467                        }
4468                        if (secondary.indexOf(button) > -1) {
4469                            return 2;
4470                        }
4471                        if (~wheel.indexOf(button)) {
4472                            return 1;
4473                        }
4474
4475                        return -1;
4476                    }
4477                };
4478
4479                module.exports = domevent;
4480
4481
4482                /***/ }),
4483
4484            
4484/***/ "./src/js/common/domutil.js":
4485            /*!**********************************!*\
4486  !*** ./src/js/common/domutil.js ***!
4487  \**********************************/
4488            /*! no static exports found */
4489            /***/ (function(module, exports, __webpack_require__) {
4490
4491                "use strict";
4492                /* eslint complexity: 0, no-shadow: 0, max-nested-callbacks: 0  */
4493                /**
4494                 * @fileoverview Utility modules for manipulate DOM elements.
4495                 * @author NHN FE Development Lab <[email protected]>
4496                 */
4497
4498
4499                var domevent = __webpack_require__(/*! ./domevent */ "./src/js/common/domevent.js");
4500                var Collection = __webpack_require__(/*! ./collection */ "./src/js/common/collection.js");
4501                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
4502
4503                var posKey = '_pos',
4504                    domutil;
4505
4506                var CSS_AUTO_REGEX = /^auto$|^$|%/;
4507
4508                /**
4509                 * Trim leading, trailing whitespace
4510                 * @param {string} str - string to trim
4511                 * @returns {string} trimmed string
4512                 */
4513                function trim(str) {
4514                    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
4515                }
4516
4517                domutil = {
4518                    /**
4519                     * Create DOM element and return it.
4520                     * @param {string} tagName Tag name to append.
4521                     * @param {HTMLElement} [container] HTML element will be parent to created element.
4522                     * if not supplied, will use **document.body**
4523                     * @param {string} [className] Design class names to appling created element.
4524                     * @returns {HTMLElement} HTML element created.
4525                     */
4526                    appendHTMLElement: function(tagName, container, className) {
4527                        var el;
4528
4529                        className = className || '';
4530
4531                        el = document.createElement(tagName);
4532                        el.className = className;
4533
4534                        if (container) {
4535                            container.appendChild(el);
4536                        } else {
4537                            document.body.appendChild(el);
4538                        }
4539
4540                        return el;
4541                    },
4542
4543                    /**
4544                     * Remove element from parent node.
4545                     * @param {HTMLElement} el - element to remove.
4546                     */
4547                    remove: function(el) {
4548                        if (el && el.parentNode) {
4549                            el.parentNode.removeChild(el);
4550                        }
4551                    },
4552
4553                    /**
4554                     * Get element by id
4555                     * @param {string} id element id attribute
4556                     * @returns {HTMLElement} element
4557                     */
4558                    get: function(id) {
4559                        return document.getElementById(id);
4560                    },
4561
4562                    /**
4563                     * Check supplied element is matched selector.
4564                     * @param {HTMLElement} el - element to check
4565                     * @param {string} selector - selector string to check
4566                     * @returns {boolean} match?
4567                     */
4568                    _matcher: function(el, selector) {
4569                        var cssClassSelector = /^\./,
4570                            idSelector = /^#/;
4571
4572                        if (cssClassSelector.test(selector)) {
4573                            return domutil.hasClass(el, selector.replace('.', ''));
4574                        }
4575                        if (idSelector.test(selector)) {
4576                            return el.id === selector.replace('#', '');
4577                        }
4578
4579                        return el.nodeName.toLowerCase() === selector.toLowerCase();
4580                    },
4581
4582                    /**
4583                     * Find DOM element by specific selectors.
4584                     * below three selector only supported.
4585                     *
4586                     * 1. css selector
4587                     * 2. id selector
4588                     * 3. nodeName selector
4589                     * @param {string} selector selector
4590                     * @param {(HTMLElement|string)} [root] You can assign root element to find
4591                     *  if not supplied, document.body will use.
4592                     * @param {boolean|function} [multiple=false] - set true then return all
4593                     *  elements that meet condition, if set function then use it filter function.
4594                     * @returns {HTMLElement} HTML element finded.
4595                     */
4596                    find: function(selector, root, multiple) {
4597                        var result = [],
4598                            found = false,
4599                            isFirst = util.isUndefined(multiple) || multiple === false,
4600                            isFilter = util.isFunction(multiple);
4601
4602                        if (util.isString(root)) {
4603                            root = domutil.get(root);
4604                        }
4605
4606                        root = root || window.document.body;
4607
4608                        /**
4609                         * Function for recursive find specific node
4610                         * @param {HTMLElement} el - element to search
4611                         * @param {string} selector - selector
4612                         */
4613                        function recurse(el, selector) {
4614                            var childNodes = el.childNodes,
4615                                i = 0,
4616                                len = childNodes.length,
4617                                cursor;
4618
4619                            for (; i < len; i += 1) {
4620                                cursor = childNodes[i];
4621
4622                                if (cursor.nodeName === '#text') {
4623                                    continue;
4624                                }
4625
4626                                if (domutil._matcher(cursor, selector)) {
4627                                    if ((isFilter && multiple(cursor)) || !isFilter) {
4628                                        result.push(cursor);
4629                                    }
4630
4631                                    if (isFirst) {
4632                                        found = true;
4633                                        break;
4634                                    }
4635                                } else if (cursor.childNodes.length > 0) {
4636                                    recurse(cursor, selector);
4637                                    if (found) {
4638                                        break;
4639                                    }
4640                                }
4641                            }
4642                        }
4643
4644                        recurse(root, selector);
4645
4646                        return isFirst ? (result[0] || null) : result;
4647                    },
4648
4649                    /**
4650                     * Find parent element recursively.
4651                     * @param {HTMLElement} el - base element to start find.
4652                     * @param {string} selector - selector string for find
4653                     * @param {boolean} excludeEl - exclude the base element to find
4654                     * @returns {HTMLElement} - element finded or null.
4655                     */
4656                    closest: function(el, selector, excludeEl) {
4657                        var parent = el.parentNode;
4658
4659                        if (!excludeEl && domutil._matcher(el, selector)) {
4660                            return el;
4661                        }
4662
4663                        while (parent && parent !== window.document.body) {
4664                            if (domutil._matcher(parent, selector)) {
4665                                return parent;
4666                            }
4667
4668                            parent = parent.parentNode;
4669                        }
4670
4671                        return null;
4672                    },
4673
4674                    /**
4675                     * Return texts inside element.
4676                     * @param {HTMLElement} el target element
4677                     * @returns {string} text inside node
4678                     */
4679                    text: function(el) {
4680                        var ret = '',
4681                            i = 0,
4682                            nodeType = el.nodeType;
4683
4684                        if (nodeType) {
4685                            if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
4686                                // nodes that available contain other nodes
4687                                if (typeof el.textContent === 'string') {
4688                                    return el.textContent;
4689                                }
4690
4691                                for (el = el.firstChild; el; el = el.nextSibling) {
4692                                    ret += domutil.text(el);
4693                                }
4694                            } else if (nodeType === 3 || nodeType === 4) {
4695                                // TEXT, CDATA SECTION
4696                                return el.nodeValue;
4697                            }
4698                        } else {
4699                            for (; el[i]; i += 1) {
4700                                ret += domutil.text(el[i]);
4701                            }
4702                        }
4703
4704                        return ret;
4705                    },
4706
4707                    /**
4708                     * Set data attribute to target element
4709                     * @param {HTMLElement} el - element to set data attribute
4710                     * @param {string} key - key
4711                     * @param {string|number} data - data value
4712                     */
4713                    setData: function(el, key, data) {
4714                        if ('dataset' in el) {
4715                            el.dataset[key] = data;
4716
4717                            return;
4718                        }
4719
4720                        el.setAttribute('data-' + key, data);
4721                    },
4722
4723                    /**
4724                     * Get data value from data-attribute
4725                     * @param {HTMLElement} el - target element
4726                     * @param {string} key - key
4727                     * @returns {string} value
4728                     */
4729                    getData: function(el, key) {
4730                        if ('dataset' in el) {
4731                            return el.dataset[key];
4732                        }
4733
4734                        return el.getAttribute('data-' + key);
4735                    },
4736
4737                    /**
4738                     * Check element has specific design class name.
4739                     * @param {HTMLElement} el target element
4740                     * @param {string} name css class
4741                     * @returns {boolean} return true when element has that css class name
4742                     */
4743                    hasClass: function(el, name) {
4744                        var className;
4745
4746                        if (!util.isUndefined(el.classList)) {
4747                            return el.classList.contains(name);
4748                        }
4749
4750                        className = domutil.getClass(el);
4751
4752                        return className.length > 0 && new RegExp('(^|\\s)' + name + '(\\s|$)').test(className);
4753                    },
4754
4755                    /**
4756                     * Add design class to HTML element.
4757                     * @param {HTMLElement} el target element
4758                     * @param {string} name css class name
4759                     */
4760                    addClass: function(el, name) {
4761                        var className;
4762
4763                        if (!util.isUndefined(el.classList)) {
4764                            util.forEachArray(name.split(' '), function(value) {
4765                                el.classList.add(value);
4766                            });
4767                        } else if (!domutil.hasClass(el, name)) {
4768                            className = domutil.getClass(el);
4769                            domutil.setClass(el, (className ? className + ' ' : '') + name);
4770                        }
4771                    },
4772
4773                    /**
4774                     *
4775                     * Overwrite design class to HTML element.
4776                     * @param {HTMLElement} el target element
4777                     * @param {string} name css class name
4778                     */
4779                    setClass: function(el, name) {
4780                        if (util.isUndefined(el.className.baseVal)) {
4781                            el.className = name;
4782                        } else {
4783                            el.className.baseVal = name;
4784                        }
4785                    },
4786
4787                    /**
4788                     * Element에 cssClass속성을 ì œê±°í•˜ëŠ” 메서드
4789                     * Remove specific design class from HTML element.
4790                     * @param {HTMLElement} el target element
4791                     * @param {string} name class name to remove
4792                     */
4793                    removeClass: function(el, name) {
4794                        var removed = '';
4795
4796                        if (!util.isUndefined(el.classList)) {
4797                            el.classList.remove(name);
4798                        } else {
4799                            removed = (' ' + domutil.getClass(el) + ' ').replace(' ' + name + ' ', ' ');
4800                            domutil.setClass(el, trim(removed));
4801                        }
4802                    },
4803
4804                    /**
4805                     * Get HTML element's design classes.
4806                     * @param {HTMLElement} el target element
4807                     * @returns {string} element css class name
4808                     */
4809                    getClass: function(el) {
4810                        if (!el || !el.className) {
4811                            return '';
4812                        }
4813
4814                        return util.isUndefined(el.className.baseVal) ? el.className : el.className.baseVal;
4815                    },
4816
4817                    /**
4818                     * Get specific CSS style value from HTML element.
4819                     * @param {HTMLElement} el target element
4820                     * @param {string} style css attribute name
4821                     * @returns {(string|null)} css style value
4822                     */
4823                    getStyle: function(el, style) {
4824                        var value = el.style[style] || (el.currentStyle && el.currentStyle[style]),
4825                            css;
4826
4827                        if ((!value || value === 'auto') && document.defaultView) {
4828                            css = document.defaultView.getComputedStyle(el, null);
4829                            value = css ? css[style] : null;
4830                        }
4831
4832                        return value === 'auto' ? null : value;
4833                    },
4834
4835                    /**
4836                     * get element's computed style values.
4837                     *
4838                     * in lower IE8. use polyfill function that return object. it has only one function 'getPropertyValue'
4839                     * @param {HTMLElement} el - element want to get style.
4840                     * @returns {object} virtual CSSStyleDeclaration object.
4841                     */
4842                    getComputedStyle: function(el) {
4843                        var defaultView = document.defaultView;
4844
4845                        if (!defaultView || !defaultView.getComputedStyle) {
4846                            return {
4847                                getPropertyValue: function(prop) {
4848                                    /* eslint-disable no-useless-escape */
4849                                    var re = /(\-([a-z]){1})/g;
4850                                    if (prop === 'float') {
4851                                        prop = 'styleFloat';
4852                                    }
4853
4854                                    if (re.test(prop)) {
4855                                        prop = prop.replace(re, function() {
4856                                            return arguments[2].toUpperCase();
4857                                        });
4858                                    }
4859
4860                                    return el.currentStyle[prop] ? el.currentStyle[prop] : null;
4861                                }
4862                            };
4863                        }
4864
4865                        return document.defaultView.getComputedStyle(el);
4866                    },
4867
4868                    /**
4869                     * Set position CSS style.
4870                     * @param {HTMLElement} el target element
4871                     * @param {number} [x=0] left pixel value.
4872                     * @param {number} [y=0] top pixel value.
4873                     */
4874                    setPosition: function(el, x, y) {
4875                        x = util.isUndefined(x) ? 0 : x;
4876                        y = util.isUndefined(y) ? 0 : y;
4877
4878                        el[posKey] = [x, y];
4879
4880                        el.style.left = util.isNumber(x) ? (x + 'px') : x;
4881                        el.style.top = util.isNumber(y) ? (y + 'px') : y;
4882                    },
4883
4884                    /**
4885                     * Set position CSS style with left, top, right, bottom
4886                     * @param {HTMLElement} el target element
4887                     * @param {object} ltrb object of left, top, right, bottom
4888                     * @param {number} [ltrb.left] left pixel value.
4889                     * @param {number} [ltrb.top] top pixel value.
4890                     * @param {number} [ltrb.right] right pixel value.
4891                     * @param {number} [ltrb.bottom] bottom pixel value.
4892                     */
4893                    setLTRB: function(el, ltrb) {
4894                        var props = ['left', 'top', 'right', 'bottom'];
4895                        var value;
4896                        props.forEach(function(prop) {
4897                            value = util.isUndefined(ltrb[prop]) ? '' : ltrb[prop];
4898                            el.style[prop] = util.isNumber(value) ? (value + 'px') : value;
4899                        });
4900                    },
4901
4902                    /**
4903                     * Get position from HTML element.
4904                     * @param {HTMLElement} el target element
4905                     * @param {boolean} [clear=false] clear cache before calculating position.
4906                     * @returns {number[]} point
4907                     */
4908                    getPosition: function(el, clear) {
4909                        var left,
4910                            top,
4911                            bound;
4912
4913                        if (clear) {
4914                            el[posKey] = null;
4915                        }
4916
4917                        if (el[posKey]) {
4918                            return el[posKey];
4919                        }
4920
4921                        left = 0;
4922                        top = 0;
4923
4924                        if ((CSS_AUTO_REGEX.test(el.style.left) || CSS_AUTO_REGEX.test(el.style.top)) &&
4925                            'getBoundingClientRect' in el) {
4926                            // When the element's left or top is 'auto'
4927                            bound = el.getBoundingClientRect();
4928
4929                            left = bound.left;
4930                            top = bound.top;
4931                        } else {
4932                            left = parseFloat(el.style.left || 0);
4933                            top = parseFloat(el.style.top || 0);
4934                        }
4935
4936                        return [left, top];
4937                    },
4938
4939                    /**
4940                     * Return element's size
4941                     * @param {HTMLElement} el target element
4942                     * @returns {number[]} width, height
4943                     */
4944                    getSize: function(el) {
4945                        var bound,
4946                            width = domutil.getStyle(el, 'width'),
4947                            height = domutil.getStyle(el, 'height');
4948
4949                        if ((CSS_AUTO_REGEX.test(width) || CSS_AUTO_REGEX.test(height) ||
4950                            util.isNull(width) || util.isNull(height)) &&
4951                            'getBoundingClientRect' in el) {
4952                            bound = el.getBoundingClientRect();
4953                            width = bound.width || el.offsetWidth;
4954                            height = bound.height || el.offsetHeight;
4955                        } else {
4956                            width = parseFloat(width || 0);
4957                            height = parseFloat(height || 0);
4958                        }
4959
4960                        return [width, height];
4961                    },
4962
4963                    /**
4964                     * Fallback of getBoundingClientRect
4965                     * @param {HTMLElement} el - element
4966                     * @returns {object} rect
4967                     */
4968                    getBCRect: function(el) {
4969                        var rect = el.getBoundingClientRect();
4970
4971                        rect = util.extend({
4972                            width: el.offsetWidth,
4973                            height: el.offsetHeight
4974                        }, rect);
4975
4976                        return rect;
4977                    },
4978
4979                    /**
4980                     * Check specific CSS style is available.
4981                     * @param {array} props property name to testing
4982                     * @returns {(string|boolean)} return true when property is available
4983                     * @example
4984                     * var props = ['transform', '-webkit-transform'];
4985                     * domutil.testProp(props);    // 'transform'
4986                     */
4987                    testProp: function(props) {
4988                        var style = document.documentElement.style,
4989                            i = 0,
4990                            len = props.length;
4991
4992                        for (; i < len; i += 1) {
4993                            if (props[i] in style) {
4994                                return props[i];
4995                            }
4996                        }
4997
4998                        return false;
4999                    },
5000
5001                    /**
5002                     * Get form data
5003                     * @param {HTMLFormElement} formElement - form element to extract data
5004                     * @returns {object} form data
5005                     */
5006                    getFormData: function(formElement) {
5007                        var groupedByName = new Collection(function() {
5008                                return this.length;
5009                            }),
5010                            noDisabledFilter = function(el) {
5011                                return !el.disabled;
5012                            },
5013                            output = {};
5014
5015                        groupedByName.add.apply(
5016                            groupedByName,
5017                            domutil.find('input', formElement, noDisabledFilter)
5018                                .concat(domutil.find('select', formElement, noDisabledFilter))
5019                                .concat(domutil.find('textarea', formElement, noDisabledFilter))
5020                        );
5021
5022                        groupedByName = groupedByName.groupBy(function(el) {
5023                            return (el && el.getAttribute('name')) || '_other';
5024                        });
5025
5026                        util.forEach(groupedByName, function(elements, name) {
5027                            if (name === '_other') {
5028                                return;
5029                            }
5030
5031                            elements.each(function(el) {
5032                                var nodeName = el.nodeName.toLowerCase(),
5033                                    type = el.type,
5034                                    result = [];
5035
5036                                if (type === 'radio') {
5037                                    result = [elements.find(function(el) {
5038                                        return el.checked;
5039                                    }).toArray().pop()];
5040                                } else if (type === 'checkbox') {
5041                                    result = elements.find(function(el) {
5042                                        return el.checked;
5043                                    }).toArray();
5044                                } else if (nodeName === 'select') {
5045                                    elements.find(function(el) {
5046                                        return !!el.childNodes.length;
5047                                    }).each(function(el) {
5048                                        result = result.concat(
5049                                            domutil.find('option', el, function(opt) {
5050                                                return opt.selected;
5051                                            })
5052                                        );
5053                                    });
5054                                } else {
5055                                    result = elements.find(function(el) {
5056                                        return el.value !== '';
5057                                    }).toArray();
5058                                }
5059
5060                                result = util.map(result, function(el) {
5061                                    return el.value;
5062                                });
5063
5064                                if (!result.length) {
5065                                    result = '';
5066                                } else if (result.length === 1) {
5067                                    result = result[0];
5068                                }
5069
5070                                output[name] = result;
5071                            });
5072                        });
5073
5074                        return output;
5075                    }
5076                };
5077
5078                /*eslint-disable*/
5079                var userSelectProperty = domutil.testProp([
5080                    'userSelect',
5081                    'WebkitUserSelect',
5082                    'OUserSelect',
5083                    'MozUserSelect',
5084                    'msUserSelect'
5085                ]);
5086                var supportSelectStart = 'onselectstart' in document;
5087                var prevSelectStyle = '';
5088                /* eslint-enable*/
5089
5090                /**
5091                 * Disable browser's text selection behaviors.
5092                 * @method
5093                 */
5094                domutil.disableTextSelection = (function() {
5095                    if (supportSelectStart) {
5096                        return function(dom) {
5097                            domevent.on(dom, 'selectstart', domevent.preventDefault);
5098                        };
5099                    }
5100
5101                    return function(dom) {
5102                        var style = dom.style;
5103                        prevSelectStyle = style[userSelectProperty];
5104                        style[userSelectProperty] = 'none';
5105                    };
5106                })();
5107
5108                /**
5109                 * Enable browser's text selection behaviors.
5110                 * @method
5111                 */
5112                domutil.enableTextSelection = (function() {
5113                    if (supportSelectStart) {
5114                        return function() {
5115                            domevent.off(window, 'selectstart', domevent.preventDefault);
5116                        };
5117                    }
5118
5119                    return function() {
5120                        document.documentElement.style[userSelectProperty] = prevSelectStyle;
5121                    };
5122                })();
5123
5124                /**
5125                 * Disable browser's image drag behaviors.
5126                 */
5127                domutil.disableImageDrag = function() {
5128                    domevent.on(window, 'dragstart', domevent.preventDefault);
5129                };
5130
5131                /**
5132                 * Enable browser's image drag behaviors.
5133                 */
5134                domutil.enableImageDrag = function() {
5135                    domevent.off(window, 'dragstart', domevent.preventDefault);
5136                };
5137
5138                module.exports = domutil;
5139
5140
5141                /***/ }),
5142
5143            
5143/***/ "./src/js/common/dw.js":
5144            /*!*****************************!*\
5145  !*** ./src/js/common/dw.js ***!
5146  \*****************************/
5147            /*! no static exports found */
5148            /***/ (function(module, exports, __webpack_require__) {
5149
5150                "use strict";
5151                /**
5152                 * @fileoverview Wrapper module for easy calc date object
5153                 * @author NHN FE Development Lab <[email protected]>
5154                 */
5155
5156
5157                var TZDate = __webpack_require__(/*! ./timezone */ "./src/js/common/timezone.js").Date;
5158
5159                /**
5160                 * @constructor
5161                 * @param {TZDate} date to wrapping DW class
5162                 */
5163                function DW(date) {
5164                    if (!(this instanceof DW)) {
5165                        return new DW(date);
5166                    }
5167
5168                    if (!(date instanceof TZDate)) {
5169                        date = new TZDate(date);
5170                    }
5171
5172                    /**
5173                     * @type {TZDate}
5174                     */
5175                    this.d = date;
5176                }
5177
5178                /**
5179                 * Return d property when supplied object is DW. else return itself
5180                 * @param {*} obj - object
5181                 * @returns {TZDate} date
5182                 */
5183                DW.prototype.safe = function(obj) {
5184                    if (obj.constructor === DW) {
5185                        return obj.d;
5186                    }
5187
5188                    return obj;
5189                };
5190
5191                /**
5192                 * Clone DW object
5193                 * @returns {DW} cloned dwrap object
5194                 */
5195                DW.prototype.clone = function() {
5196                    return new DW(new TZDate(this.d));
5197                };
5198
5199                /**
5200                 * Add days
5201                 * @param {number} day - day to add
5202                 * @returns {DW} wrapper object
5203                 */
5204                DW.prototype.addDate = function(day) {
5205                    this.d.setDate(this.d.getDate() + day);
5206
5207                    return this;
5208                };
5209
5210                /**
5211                 * Add month.
5212                 * @param {number} m - month to add
5213                 * @returns {DW} wrapper object
5214                 */
5215                DW.prototype.addMonth = function(m) {
5216                    var currentMonth = this.d.getMonth();
5217                    var currentDay = this.d.getDate();
5218                    var leapYear = this._isLeapYear();
5219                    var targetMonth = currentMonth + m;
5220                    var clone = this.clone();
5221                    var targetDaysOfMonth = currentDay;
5222
5223                    if (m) {
5224                        if (targetMonth === 1) {
5225                            targetDaysOfMonth = leapYear ? 29 : 28;
5226                        } else {
5227                            if (m > 0) {
5228                                clone.d.setMonth(targetMonth + 1, 0);
5229                            } else {
5230                                clone.d.setMonth(currentMonth, 0);
5231                            }
5232                            targetDaysOfMonth = clone.d.getDate();
5233                        }
5234                    }
5235
5236                    this.d.setMonth(targetMonth, Math.min(currentDay, targetDaysOfMonth));
5237
5238                    return this;
5239                };
5240
5241                /**
5242                 * Is leap year or not
5243                 * @returns {boolean}
5244                 */
5245                DW.prototype._isLeapYear = function() {
5246                    var year = this.d.getFullYear();
5247
5248                    return ((year % 4 === 0) && (year % 100 !== 0)) || !(year % 400);
5249                };
5250
5251                /**
5252                 * Set hour, minutes, seconds, milliseconds
5253                 * @param {number} h - hours
5254                 * @param {number} m - minutes
5255                 * @param {number} s - seconds
5256                 * @param {number} ms - milliseconds
5257                 * @returns {DW} wrapper object
5258                 */
5259                DW.prototype.setHours = function(h, m, s, ms) {
5260                    this.d.setHours(h, m, s, ms);
5261
5262                    return this;
5263                };
5264
5265                /**
5266                 * Whether date is between supplied dates?
5267                 * @param {TZDate|DW} d1 - from date
5268                 * @param {TZDate|DW} d2 - to date
5269                 * @returns {boolean} is between?
5270                 */
5271                DW.prototype.isBetween = function(d1, d2) {
5272                    var safe = this.safe;
5273
5274                    return safe(d1) <= this.d && this.d <= safe(d2);
5275                };
5276
5277                module.exports = DW;
5278
5279
5280                /***/ }),
5281
5282            
5282/***/ "./src/js/common/floatingLayer.js":
5283            /*!****************************************!*\
5284  !*** ./src/js/common/floatingLayer.js ***!
5285  \****************************************/
5286            /*! no static exports found */
5287            /***/ (function(module, exports, __webpack_require__) {
5288
5289                "use strict";
5290                /**
5291                 * @fileoverview Floating layer module
5292                 * @author NHN FE Development Lab <[email protected]>
5293                 */
5294
5295
5296                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
5297                var config = __webpack_require__(/*! ../config */ "./src/js/config.js"),
5298                    domutil = __webpack_require__(/*! ../common/domutil */ "./src/js/common/domutil.js"),
5299                    View = __webpack_require__(/*! ../view/view */ "./src/js/view/view.js");
5300
5301                /**
5302                 * @constructor
5303                 * @extends {View}
5304                 * @param {object} options - options for floating layer module
5305                 * @param {HTMLElement} container - parent continer for floating layer
5306                 */
5307                function FloatingLayer(options, container) {
5308                    var sibling = container[FloatingLayer.PROP_KEY],
5309                        layerContainer;
5310
5311                    if (!sibling) {
5312                        sibling = container[FloatingLayer.PROP_KEY] = [];
5313                    }
5314
5315                    sibling.push(this);
5316
5317                    /**
5318                     * @type {Collection}
5319                     */
5320                    this.sibling = sibling;
5321
5322                    /**
5323                     * @type {number}
5324                     */
5325                    this.zIndex = this.getLargestZIndex() || FloatingLayer.INIT_ZINDEX;
5326
5327                    layerContainer = document.createElement('div');
5328                    layerContainer.style.display = 'none';
5329                    layerContainer.style.position = 'absolute';
5330                    domutil.addClass(layerContainer, config.classname('floating-layer'));
5331                    container.appendChild(layerContainer);
5332
5333                    View.call(this, layerContainer);
5334
5335                    /**
5336                     * @type {HTMLElement}
5337                     */
5338                    this.parent = container;
5339                }
5340
5341                util.inherit(FloatingLayer, View);
5342
5343                /**
5344                 * @const
5345                 */
5346                FloatingLayer.PROP_KEY = '__fe_floating_layer';
5347
5348                /**
5349                 * @const
5350                 */
5351                FloatingLayer.INIT_ZINDEX = 999;
5352
5353                /**
5354                 * Destroy floating layer instance. if there no instnace in parent container
5355                 *
5356                 * remove instance cache property in container element
5357                 */
5358                FloatingLayer.prototype.destroy = function() {
5359                    var parent = this.parent,
5360                        sibling = this.sibling,
5361                        i = 0, cnt = sibling.length;
5362
5363                    for (; i < cnt; i += 1) {
5364                        if (sibling[i] === this) {
5365                            sibling.splice(i, 1);
5366                            break;
5367                        }
5368                    }
5369
5370                    if (!sibling.length) {
5371                        try {
5372                            delete parent[FloatingLayer.PROP_KEY];
5373                        } catch (e) {
5374                            parent[FloatingLayer.PROP_KEY] = null;
5375                        }
5376
5377                        parent.style.position = '';
5378                    }
5379
5380                    domutil.remove(this.container);
5381
5382                    this.sibling = null;
5383
5384                    View.prototype.destroy.call(this);
5385                };
5386
5387                /**
5388                 * @returns {boolean} whether layer is visible?
5389                 */
5390                FloatingLayer.prototype.isVisible = function() {
5391                    return this.container.style.display !== 'none';
5392                };
5393
5394                /**
5395                 * Set layer position
5396                 * @param {number} x - x coordinate of layer
5397                 * @param {number} y - y coordinate of layer
5398                 */
5399                FloatingLayer.prototype.setPosition = function(x, y) {
5400                    domutil.setPosition(this.container, x, y);
5401                };
5402
5403                /**
5404                 * Set layer left, top, right, bottom position
5405                 * @param {object} ltrb object of left, top, right, bottom
5406                 * @param {number} [ltrb.left] left pixel value.
5407                 * @param {number} [ltrb.top] top pixel value.
5408                 * @param {number} [ltrb.right] right pixel value.
5409                 * @param {number} [ltrb.bottom] bottom pixel value.
5410                 */
5411                FloatingLayer.prototype.setLTRB = function(ltrb) {
5412                    domutil.setLTRB(this.container, ltrb);
5413                };
5414
5415                /**
5416                 * Set layer size
5417                 * @param {number|string} w - layer width
5418                 * @param {number|string} h - layer height
5419                 */
5420                FloatingLayer.prototype.setSize = function(w, h) {
5421                    var container = this.container;
5422
5423                    w = util.isNumber(w) ? w + 'px' : w;
5424                    h = util.isNumber(h) ? h + 'px' : h;
5425
5426                    container.style.width = w;
5427                    container.style.height = h;
5428                };
5429
5430                /**
5431                 * Set layer content
5432                 * @param {string} html - html string
5433                 */
5434                FloatingLayer.prototype.setContent = function(html) {
5435                    this.container.innerHTML = html;
5436                };
5437
5438                /**
5439                 * Get largest z-index from sibling layers
5440                 * @returns {number} largest z-index value
5441                 */
5442                FloatingLayer.prototype.getLargestZIndex = function() {
5443                    var zIndexes = util.map(this.sibling, function(layer) {
5444                        return layer.zIndex;
5445                    });
5446
5447                    return Math.max.apply(null, zIndexes);
5448                };
5449
5450                /**
5451                 * Set focus to layer
5452                 */
5453                FloatingLayer.prototype.focus = function() {
5454                    var zIndexForShow = this.getLargestZIndex() + 1;
5455                    this.container.style.zIndex = this.zIndex = zIndexForShow;
5456                };
5457
5458                /**
5459                 * Show layer
5460                 */
5461                FloatingLayer.prototype.show = function() {
5462                    this.focus();
5463                    this.container.style.display = 'block';
5464                };
5465
5466                /**
5467                 * Hide layer
5468                 */
5469                FloatingLayer.prototype.hide = function() {
5470                    this.container.style.display = 'none';
5471                };
5472
5473                module.exports = FloatingLayer;
5474
5475
5476                /***/ }),
5477
5478            
5478/***/ "./src/js/common/model.js":
5479            /*!********************************!*\
5480  !*** ./src/js/common/model.js ***!
5481  \********************************/
5482            /*! no static exports found */
5483            /***/ (function(module, exports, __webpack_require__) {
5484
5485                "use strict";
5486                /**
5487                 * @fileoverview Mixin module for models.
5488                 * @author NHN FE Development Lab <[email protected]>
5489                 */
5490
5491
5492                var TZDate = __webpack_require__(/*! ../common/timezone */ "./src/js/common/timezone.js").Date;
5493                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
5494                var spaceRx = /^\s*|\s*$/g,
5495                    model;
5496
5497                var datetime = __webpack_require__(/*! ../common/datetime */ "./src/js/common/datetime.js");
5498
5499                /**
5500                 * Mixin module for models.
5501                 * @mixin
5502                 */
5503                model = {
5504                    /**
5505                     * string trim
5506                     * @param {string} str string to trim
5507                     * @returns {string} trimed string
5508                     */
5509                    trim: function(str) {
5510                        return str.replace(spaceRx, '');
5511                    },
5512                    /**
5513                     * The collections of validator functions.
5514                     */
5515                    validators: {
5516                        /**
5517                         * check all of supplied fields(property) is not undefined or empty string.
5518                         * @param {object} instance model instance.
5519                         * @param {string[]} fields property names to check.
5520                         * @returns {boolean} return true when supplied fields are not undefined or empty string.
5521                         */
5522                        required: function(instance, fields) {
5523                            var valid = true,
5524                                isValid = function(obj) {
5525                                    return !util.isUndefined(obj) && model.trim(obj) !== '';
5526                                };
5527
5528                            util.forEach(fields, function(fieldName) {
5529                                valid = isValid(instance[fieldName]);
5530
5531                                return valid;
5532                            });
5533
5534                            return valid;
5535                        },
5536
5537                        /**
5538                         * check supplied fields are valid dates and valid date ranges.
5539                         * @param {object} instance model instance.
5540                         * @param {Date[]} fields array of date range (start, end)
5541                         * @returns {boolean} is valid date range?
5542                         */
5543                        dateRange: function(instance, fields) {
5544                            var start, end;
5545
5546                            if (!util.isExisty(instance) || fields.length !== 2) {
5547                                return true;
5548                            }
5549
5550                            start = new TZDate(instance[fields[0]]);
5551                            end = new TZDate(instance[fields[1]]);
5552
5553                            if (!datetime.isValid(start) || !datetime.isValid(end)) {
5554                                return false;
5555                            }
5556
5557                            if (datetime.compare(start, end) === 1) {
5558                                return false;
5559                            }
5560
5561                            return true;
5562                        }
5563                    },
5564
5565                    /**
5566                     * Check validate for model instance.
5567                     *
5568                     * The validate are works on a basis of constructor's "schema" property.
5569                     *
5570                     * You can customize validators add some method to model#validators.
5571                     * @returns {Boolean} model is valid?
5572                     */
5573                    isValid: function() {
5574                        var self = this,
5575                            schema = this.constructor.schema,
5576                            validators = model.validators,
5577                            validator,
5578                            valid = true;
5579
5580                        if (!schema) {
5581                            return true;
5582                        }
5583
5584                        util.forEach(schema, function(values, validatorName) {
5585                            validator = validators[validatorName];
5586
5587                            if (validator) {
5588                                valid = validator(self, values);
5589
5590                                return valid; // returning false can stop this loop
5591                            }
5592
5593                            return true;
5594                        });
5595
5596                        return valid;
5597                    },
5598
5599                    /**
5600                     * Make data object form instance.
5601                     *
5602                     * It return object fill with all owned properties but exclude functions.
5603                     * @returns {object} Data object
5604                     */
5605                    parameterize: function() {
5606                        var param = {},
5607                            isFunc = util.isFunction;
5608
5609                        util.forEach(this, function(value, propName) {
5610                            if (!isFunc(value)) {
5611                                param[propName] = value;
5612                            }
5613                        });
5614
5615                        return param;
5616                    },
5617
5618                    /**
5619                     * Mixin model module to supplied target.
5620                     * @param {Object} target The object of want to mixed.
5621                     * @example
5622                     * function Man() {
5623                     *     this.name = 'john';
5624                     * }
5625                     * model.mixin(Man.prototype);
5626                     */
5627                    mixin: function(target) {
5628                        util.forEach(model, function(method, name) {
5629                            if (name !== 'mixin') {
5630                                target[name] = method;
5631                            }
5632                        });
5633                    }
5634                };
5635
5636                module.exports = model;
5637
5638
5639                /***/ }),
5640
5641            
5641/***/ "./src/js/common/point.js":
5642            /*!********************************!*\
5643  !*** ./src/js/common/point.js ***!
5644  \********************************/
5645            /*! no static exports found */
5646            /***/ (function(module, exports, __webpack_require__) {
5647
5648                "use strict";
5649                /**
5650                 * @fileoverview
5651                 * Class for represent two dimensional x, y coordinates.
5652                 *
5653                 * It suppliy a group of functions for manipulate coordinates.
5654                 * @author NHN FE Development Lab <[email protected]>
5655                 * @example
5656                 * var p = point(10, 10);
5657                 * var r1 = p.add(Point(5, 5));
5658                 * console.log(p.toString())    // "Point(10, 10)"
5659                 * console.log(r1.toString())    // "Point(15, 15)"
5660                 *
5661                 * var p2 = new Point(10, 10);
5662                 * p2._add(point(5, 5));
5663                 * console.log(p2.toString())   // "Point(15, 15)"
5664                 */
5665
5666
5667                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
5668
5669                /**
5670                 * Class for represent two dimentional x, y coordinates.
5671                 * @constructor
5672                 * @param {number} x The number of X coordinates.
5673                 * @param {number} y The number of Y coordinates.
5674                 * @param {boolean} [useRound=false] set true when each coordinates are rounded before initialize.
5675                 * @example
5676                 * var t = new Point(13, 5);
5677                 */
5678                function Point(x, y, useRound) {
5679                    /**
5680                     * @type {number}
5681                     */
5682                    this.x = (useRound ? Math.round(x) : x);
5683
5684                    /**
5685                     * @type {number}
5686                     */
5687                    this.y = (useRound ? Math.round(y) : y);
5688                }
5689
5690                /**********
5691                 * static props
5692                 **********/
5693
5694                /**
5695                 * Calculate point ratio.
5696                 * @param {Point} point The instance of point.
5697                 * @param {number} factor From factor
5698                 * @param {number} toFactor To factor
5699                 * @returns {Point} Point instance calculated.
5700                 */
5701                Point.getRatio = function(point, factor, toFactor) {
5702                    if (factor === toFactor) {
5703                        return point.clone();
5704                    }
5705
5706                    return point.multiplyBy(toFactor)._divideBy(factor);
5707                };
5708
5709                /**
5710                 * Syntatic sugar of new Point()
5711                 * @param {(Point|number|number[])} x X coordinate value.
5712                 * @param {(number|boolean)} [y] Y coordinate value or boolean value for coordinates round.
5713                 * @param {boolean} [useRound] Set true then round initial coordinate values.
5714                 * @returns {Point} The instance of point.
5715                 * @example
5716                 * var p1 = point(10, 15);
5717                 * var p2 = point([10, 15]);
5718                 */
5719                Point.n = function(x, y, useRound) {
5720                    if (x instanceof Point) {
5721                        return x;
5722                    }
5723
5724                    if (util.isArray(x)) {
5725                        return new Point(x[0], x[1], y);
5726                    }
5727
5728                    return new Point(x, y, useRound);
5729                };
5730
5731                /**********
5732                 * prototype props
5733                 **********/
5734
5735                /**
5736                 * Clone points
5737                 * @returns {Point} The point instance cloned.
5738                 */
5739                Point.prototype.clone = function() {
5740                    return new Point(this.x, this.y);
5741                };
5742
5743                /**
5744                 * Add points.
5745                 * @param {Point} point The point instance to add.
5746                 * @returns {Point} Point calculated.
5747                 */
5748                Point.prototype.add = function(point) {
5749                    return this.clone()._add(Point.n(point));
5750                };
5751
5752                /**
5753                 * Add self points.
5754                 * @param {Point} point The point instance to add.
5755                 * @returns {Point} Point calculated.
5756                 */
5757                Point.prototype._add = function(point) {
5758                    this.x += point.x;
5759                    this.y += point.y;
5760
5761                    return this;
5762                };
5763
5764                /**
5765                 * Subtract points.
5766                 * @param {Point} point The point instance to subtract.
5767                 * @returns {Point} Point calculated.
5768                 */
5769                Point.prototype.subtract = function(point) {
5770                    return this.clone()._subtract(Point.n(point));
5771                };
5772
5773                /**
5774                 * Subtract points. (manipulate self)
5775                 * @param {Point} point The point instance to subtract.
5776                 * @returns {Point} Point calculated.
5777                 */
5778                Point.prototype._subtract = function(point) {
5779                    this.x -= point.x;
5780                    this.y -= point.y;
5781
5782                    return this;
5783                };
5784
5785                /**
5786                 * Divide points.
5787                 * @param {number} num The number to divide.
5788                 * @returns {Point} Point calculated.
5789                 */
5790                Point.prototype.divideBy = function(num) {
5791                    return this.clone()._divideBy(num);
5792                };
5793
5794                /**
5795                 * Divide points. (manipulate self)
5796                 * @param {number} num The number to divide.
5797                 * @returns {Point} Point calculated.
5798                 */
5799                Point.prototype._divideBy = function(num) {
5800                    this.x /= num;
5801                    this.y /= num;
5802
5803                    return this;
5804                };
5805
5806                /**
5807                 * Multiply coordinates.
5808                 * @param {number} num Thyen number to multiply
5809                 * @returns {Point} Point calculated.
5810                 */
5811                Point.prototype.multiplyBy = function(num) {
5812                    return this.clone()._multiplyBy(num);
5813                };
5814
5815                /**
5816                 * Multiply self coordinates.
5817                 * @param {number} num The number to multiply.
5818                 * @returns {Point} Point calculated.
5819                 */
5820                Point.prototype._multiplyBy = function(num) {
5821                    this.x *= num;
5822                    this.y *= num;
5823
5824                    return this;
5825                };
5826
5827                /**
5828                 * Round coordinates.
5829                 * @returns {Point} Point calculated.
5830                 */
5831                Point.prototype.round = function() {
5832                    return this.clone()._round();
5833                };
5834
5835                /**
5836                 * Round self coordinates.
5837                 * @returns {Point} Point calculated.
5838                 */
5839                Point.prototype._round = function() {
5840                    this.x = Math.round(this.x);
5841                    this.y = Math.round(this.y);
5842
5843                    return this;
5844                };
5845
5846                /**
5847                 * Reverse values between positive and negative.
5848                 * @returns {Point} Point calculated.
5849                 */
5850                Point.prototype.reverse = function() {
5851                    return this.clone()._reverse();
5852                };
5853
5854                /**
5855                 * Reverse self values between positive and negative.
5856                 * @returns {Point} Point calculated.
5857                 */
5858                Point.prototype._reverse = function() {
5859                    this.x *= -1;
5860                    this.y *= -1;
5861
5862                    return this;
5863                };
5864
5865                /**
5866                 * Floor coordinates.
5867                 * @returns {Point} Point calculated.
5868                 */
5869                Point.prototype.floor = function() {
5870                    return this.clone()._floor();
5871                };
5872
5873                /**
5874                 * Floor self coordinates.
5875                 * @returns {Point} Point calculated.
5876                 */
5877                Point.prototype._floor = function() {
5878                    this.x = Math.floor(this.x);
5879                    this.y = Math.floor(this.y);
5880
5881                    return this;
5882                };
5883
5884                /**
5885                 * Ceil coordinates.
5886                 * @returns {Point} Point calculated.
5887                 */
5888                Point.prototype.ceil = function() {
5889                    return this.clone()._ceil();
5890                };
5891
5892                /**
5893                 * Ceil self coodinates.
5894                 * @returns {Point} Point calculated.
5895                 */
5896                Point.prototype._ceil = function() {
5897                    this.x = Math.ceil(this.x);
5898                    this.y = Math.ceil(this.y);
5899
5900                    return this;
5901                };
5902
5903                /**
5904                 * Rotate point.
5905                 * @param {number} deg The number of rotate degree.
5906                 * @param {Point} [center=this] Center point instance to use rotate center. use own when not supplied.
5907                 * @param {number} [cos] Cosine values for rotate. it useful when multi point rotate.
5908                 * @param {number} [sin] Sine values for rotate. it useful when multi point rotate.
5909                 * @returns {Point} The point instance rotated.
5910                 */
5911                Point.prototype.rotate = function(deg, center, cos, sin) {
5912                    return this.clone()._rotate(deg, center, cos, sin);
5913                };
5914
5915                /**
5916                 * Rotate self.
5917                 * @param {number} deg The number of rotate degree.
5918                 * @param {Point} [center=this] Center point instance to use rotate center. use own when not supplied.
5919                 * @param {number} [cos] Cosine values for rotate. it useful when multi point rotate.
5920                 * @param {number} [sin] Sine values for rotate. it useful when multi point rotate.
5921                 * @returns {Point} The point instance rotated.
5922                 */
5923                Point.prototype._rotate = function(deg, center, cos, sin) {
5924                    var rad = deg * (Math.PI / 180),
5925                        x,
5926                        y;
5927
5928                    cos = cos || parseFloat(Math.cos(rad).toFixed(8));
5929                    sin = sin || parseFloat(Math.sin(rad).toFixed(8));
5930
5931                    this._subtract(center);
5932
5933                    x = this.x;
5934                    y = this.y;
5935
5936                    this.x = (x * cos) - (y * sin);
5937                    this.y = (x * sin) + (y * cos);
5938
5939                    this._add(center);
5940
5941                    return this;
5942                };
5943
5944                /**
5945                 * Calculate distance between two points.
5946                 * @param {Point} point Point instance.
5947                 * @returns {number} The number of distance between two points.
5948                 */
5949                Point.prototype.distanceTo = function(point) {
5950                    var x,
5951                        y;
5952
5953                    point = Point.n(point);
5954
5955                    x = point.x - this.x;
5956                    y = point.y - this.y;
5957
5958                    return Math.sqrt((x * x) + (y * y));
5959                };
5960
5961                /**
5962                 * Check point equals.
5963                 * @param {Point} point Point instance to compare
5964                 * @returns {boolean} equality
5965                 */
5966                Point.prototype.equals = function(point) {
5967                    point = Point.n(point);
5968
5969                    return point.x === this.x && point.y === this.y;
5970                };
5971
5972                /**
5973                 * Return formatted string. 'Point(x, y)'
5974                 * @returns {string} string
5975                 */
5976                Point.prototype.toString = function() {
5977                    return 'Point(' + this.x + ', ' + this.y + ')';
5978                };
5979
5980                /**
5981                 * Return coodinates to array. [x, y]
5982                 * @returns {number[]} coordinate array.
5983                 */
5984                Point.prototype.toArray = function() {
5985                    return [this.x, this.y];
5986                };
5987
5988                module.exports = Point;
5989
5990
5991                /***/ }),
5992
5993            
5993/***/ "./src/js/common/reqAnimFrame.js":
5994            /*!***************************************!*\
5995  !*** ./src/js/common/reqAnimFrame.js ***!
5996  \***************************************/
5997            /*! no static exports found */
5998            /***/ (function(module, exports, __webpack_require__) {
5999
6000                "use strict";
6001                /* WEBPACK VAR INJECTION */(function(global) {/**
6002                 * @fileoverview RequestAnimFrame
6003                 * @author NHN FE Development Lab <[email protected]>
6004                 */
6005
6006
6007                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
6008                    var requestFn,
6009                        cancelFn;
6010
6011                    /**
6012                     * Get name with vendor prefix
6013                     * @param {string} name - name to prepend prefix
6014                     * @returns {string} vendor prefixed name
6015                     */
6016                    function getPrefixed(name) {
6017                        return global['webkit' + name] || global['moz' + name] || global['ms' + name];
6018                    }
6019
6020                    requestFn = global.requestAnimationFrame ||
6021                        getPrefixed('RequestAnimationFrame') ||
6022                        function(fn, context) {
6023                            fn.call(context);
6024                        };
6025
6026                    cancelFn = global.cancelAnimationFrame ||
6027                        getPrefixed('CancelAnimationFrame') ||
6028                        getPrefixed('CancelRequestAnimationFrame') ||
6029                        function() {};
6030
6031                    /**
6032                     * @module module:reqAnimFrame
6033                     */
6034
6035                    module.exports = {
6036                        /**
6037                         * Shim of requestAnimationFrame
6038                         * @param {function} fn callback function
6039                         * @param {*} context context for callback
6040                         * @returns {number} Unique id
6041                         */
6042                        requestAnimFrame: function(fn, context) {
6043                            return requestFn.call(global, util.bind(fn, context));
6044                        },
6045
6046                        /**
6047                         * Shim of cancelAnimationFrame
6048                         * @param {number} id requestAnimationFrame id
6049                         */
6050                        cancelAnimFrame: function(id) {
6051                            if (!id) {
6052                                return;
6053                            }
6054
6055                            cancelFn.call(global, id);
6056                        }
6057                    };
6058
6059                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
6060
6061                /***/ }),
6062
6063            
6063/***/ "./src/js/common/timezone.js":
6064            /*!***********************************!*\
6065  !*** ./src/js/common/timezone.js ***!
6066  \***********************************/
6067            /*! no static exports found */
6068            /***/ (function(module, exports, __webpack_require__) {
6069
6070                "use strict";
6071                /**
6072                 * @fileoverview timezone
6073                 * @author NHN FE Development Lab <[email protected]>
6074                 */
6075
6076
6077                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
6078
6079                var MIN_TO_MS = 60 * 1000;
6080                var nativeOffsetMs = getTimezoneOffset();
6081                var customOffsetMs = nativeOffsetMs;
6082                var timezoneOffsetCallback = null;
6083                var setByTimezoneOption = false;
6084
6085                var getterMethods = [
6086                    'getDate',
6087                    'getDay',
6088                    'getFullYear',
6089                    'getHours',
6090                    'getMilliseconds',
6091                    'getMinutes',
6092                    'getMonth',
6093                    'getSeconds'
6094                ];
6095
6096                var setterMethods = [
6097                    'setDate',
6098                    'setFullYear',
6099                    'setHours',
6100                    'setMilliseconds',
6101                    'setMinutes',
6102                    'setMonth',
6103                    'setSeconds'
6104                ];
6105
6106                /**
6107                 * Get the timezone offset by timestampe
6108                 * @param {number} timestamp - timestamp
6109                 * @returns {number} timezone offset
6110                 * @private
6111                 */
6112                function getTimezoneOffset(timestamp) {
6113                    timestamp = timestamp || Date.now();
6114
6115                    return new Date(timestamp).getTimezoneOffset() * MIN_TO_MS;
6116                }
6117
6118                /**
6119                 * Get the custome timezone offset by timestampe
6120                 * @param {number} timestamp - timestamp
6121                 * @returns {number} timezone offset
6122                 * @private
6123                 */
6124                function getCustomTimezoneOffset(timestamp) {
6125                    if (!setByTimezoneOption && timezoneOffsetCallback) {
6126                        return timezoneOffsetCallback(timestamp) * MIN_TO_MS;
6127                    }
6128
6129                    return customOffsetMs;
6130                }
6131
6132                /**
6133                 * Convert to local time
6134                 * @param {number} time - time
6135                 * @returns {number} local time
6136                 */
6137                function getLocalTime(time) {
6138                    var timezoneOffset = getTimezoneOffset(time);
6139                    var customTimezoneOffset = getCustomTimezoneOffset(time);
6140                    var timezoneOffsetDiff = customTimezoneOffset ? 0 : nativeOffsetMs - timezoneOffset;
6141                    var localTime = time - customTimezoneOffset + timezoneOffset + timezoneOffsetDiff;
6142
6143                    return localTime;
6144                }
6145
6146                /**
6147                 * Create a Date instance with multiple arguments
6148                 * @param {Array} args - arguments
6149                 * @returns {Date}
6150                 * @private
6151                 */
6152                function createDateWithMultipleArgs(args) {
6153                    var utc = Date.UTC.apply(null, args);
6154
6155                    return new Date(utc + getTimezoneOffset(utc));
6156                }
6157
6158                /**
6159                 * To convert a Date to TZDate as it is.
6160                 * @param {TZDate|number|null} arg - date
6161                 * @returns {Date}
6162                 */
6163                function createDateWithUTCTime(arg) {
6164                    var time;
6165
6166                    if (arg instanceof TZDate) {
6167                        time = arg.getUTCTime();
6168                    } else if ((typeof arg) === 'number') {
6169                        time = arg;
6170                    } else if (arg === null) {
6171                        time = 0;
6172                    } else {
6173                        throw new Error('Invalid Type');
6174                    }
6175
6176                    return new Date(time);
6177                }
6178
6179                /**
6180                 * Convert time to local time. Those times are only from API and not from inner source code.
6181                 * @param {Date|string} arg - date
6182                 * @returns {Date}
6183                 */
6184                function createDateAsLocalTime(arg) {
6185                    var time;
6186
6187                    if (arg instanceof Date) {
6188                        time = arg.getTime();
6189                    } else if ((typeof arg) === 'string') {
6190                        time = Date.parse(arg);
6191                    } else {
6192                        throw new Error('Invalid Type');
6193                    }
6194
6195                    time = getLocalTime(time);
6196
6197                    return new Date(time);
6198                }
6199
6200                /**
6201                 * is it for local time? These type can be used from Calendar API.
6202                 * @param {Date|string} arg - date
6203                 * @returns {boolean}
6204                 */
6205                function useLocalTimeConverter(arg) {
6206                    return arg instanceof Date || (typeof arg) === 'string';
6207                }
6208
6209                /**
6210                 * Timezone Date Class
6211                 * @param {number|TZDate|Date|string} date - date to be converted
6212                 * @constructor
6213                 */
6214                function TZDate(date) {
6215                    var nativeDate;
6216
6217                    if (util.isUndefined(date)) {
6218                        date = Date.now();
6219                    }
6220
6221                    if (arguments.length > 1) {
6222                        nativeDate = createDateWithMultipleArgs(arguments);
6223                    } else if (useLocalTimeConverter(date)) {
6224                        nativeDate = createDateAsLocalTime(date);
6225                    } else {
6226                        nativeDate = createDateWithUTCTime(date);
6227                    }
6228
6229                    this._date = nativeDate;
6230                }
6231
6232                /**
6233                 * Get milliseconds which is converted by timezone
6234                 * @returns {number} milliseconds
6235                 */
6236                TZDate.prototype.getTime = function() {
6237                    var time = this._date.getTime();
6238
6239                    return time + getCustomTimezoneOffset(time) - getTimezoneOffset(time);
6240                };
6241
6242                /**
6243                 * Get UTC milliseconds
6244                 * @returns {number} milliseconds
6245                 */
6246                TZDate.prototype.getUTCTime = function() {
6247                    return this._date.getTime();
6248                };
6249
6250                /**
6251                 * toUTCString
6252                 * @returns {string}
6253                 */
6254                TZDate.prototype.toUTCString = function() {
6255                    return this._date.toUTCString();
6256                };
6257
6258                /**
6259                 * to Date
6260                 * @returns {Date}
6261                 */
6262                TZDate.prototype.toDate = function() {
6263                    return this._date;
6264                };
6265
6266                TZDate.prototype.valueOf = function() {
6267                    return this.getTime();
6268                };
6269
6270                TZDate.prototype.addDate = function(day) {
6271                    this.setDate(this.getDate() + day);
6272
6273                    return this;
6274                };
6275
6276                TZDate.prototype.addMinutes = function(minutes) {
6277                    this.setMinutes(this.getMinutes() + minutes);
6278
6279                    return this;
6280                };
6281
6282                TZDate.prototype.addMilliseconds = function(milliseconds) {
6283                    this.setMilliseconds(this.getMilliseconds() + milliseconds);
6284
6285                    return this;
6286                };
6287
6288                /* eslint-disable max-params*/
6289                TZDate.prototype.setWithRaw = function(y, M, d, h, m, s, ms) {
6290                    this.setFullYear(y, M, d);
6291                    this.setHours(h, m, s, ms);
6292
6293                    return this;
6294                };
6295
6296                /**
6297                 * @returns {TZDate} local time
6298                 */
6299                TZDate.prototype.toLocalTime = function() {
6300                    var time = this.getTime();
6301                    var utcTime = this.getUTCTime();
6302                    var diff = time - utcTime;
6303
6304                    return new TZDate(utcTime - diff);
6305                };
6306
6307                getterMethods.forEach(function(methodName) {
6308                    TZDate.prototype[methodName] = function() {
6309                        return this._date[methodName].apply(this._date, arguments);
6310                    };
6311                });
6312
6313                setterMethods.forEach(function(methodName) {
6314                    TZDate.prototype[methodName] = function() {
6315                        this._date[methodName].apply(this._date, arguments);
6316
6317                        return this.getTime();
6318                    };
6319                });
6320
6321                module.exports = {
6322                    Date: TZDate,
6323
6324                    /**
6325                     * Set offset
6326                     * @param {number} offset - timezone offset based on minutes
6327                     */
6328                    setOffset: function(offset) {
6329                        customOffsetMs = offset * MIN_TO_MS;
6330                    },
6331
6332                    /**
6333                     * Set offset
6334                     * @param {number} offset - timezone offset based on minutes
6335                     */
6336                    setOffsetByTimezoneOption: function(offset) {
6337                        this.setOffset(-offset);
6338                        setByTimezoneOption = true;
6339                    },
6340
6341                    /**
6342                     * Get offset in case of `setByTimezoneOption`. Or return 0.
6343                     * @returns {number} timezone offset offset minutes
6344                     */
6345                    getOffset: function() {
6346                        if (setByTimezoneOption) {
6347                            return customOffsetMs / MIN_TO_MS;
6348                        }
6349
6350                        return 0;
6351                    },
6352
6353                    /**
6354                     * Set a callback function to get timezone offset by timestamp
6355                     * @param {function} callback - callback function
6356                     */
6357                    setOffsetCallback: function(callback) {
6358                        timezoneOffsetCallback = callback;
6359                    },
6360
6361                    /**
6362                     * (Use this method only for testing)
6363                     * Reset system timezone and custom timezone
6364                     */
6365                    restoreOffset: function() {
6366                        customOffsetMs = getTimezoneOffset();
6367                    }
6368                };
6369
6370
6371                /***/ }),
6372
6373            
6373/***/ "./src/js/common/vlayout.js":
6374            /*!**********************************!*\
6375  !*** ./src/js/common/vlayout.js ***!
6376  \**********************************/
6377            /*! no static exports found */
6378            /***/ (function(module, exports, __webpack_require__) {
6379
6380                "use strict";
6381                /**
6382                 * @fileoverview Layout module that supplied split height, resize height features.
6383                 * @author NHN FE Development Lab <[email protected]>
6384                 */
6385
6386
6387                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
6388                var config = __webpack_require__(/*! ../config */ "./src/js/config.js"),
6389                    common = __webpack_require__(/*! ./common */ "./src/js/common/common.js"),
6390                    domutil = __webpack_require__(/*! ./domutil */ "./src/js/common/domutil.js"),
6391                    domevent = __webpack_require__(/*! ./domevent */ "./src/js/common/domevent.js"),
6392                    View = __webpack_require__(/*! ../view/view */ "./src/js/view/view.js"),
6393                    VPanel = __webpack_require__(/*! ./vpanel */ "./src/js/common/vpanel.js"),
6394                    Drag = __webpack_require__(/*! ../handler/drag */ "./src/js/handler/drag.js");
6395
6396                var mAbs = Math.abs;
6397
6398                /**
6399                 * @typedef PanelOptions
6400                 * @type {object}
6401                 * @property {number} [minHeight=0] - minimum height of panel
6402                 * @property {number} [height=0] - current panel height
6403                 * @property {boolean} [splitter=false] - is this panel uses splitter?
6404                 * @property {boolean} [autoHeight=false] - is this panel uses remain height of container?
6405                 * @property {string} [className=''] - className string for add created element
6406                 */
6407
6408                /**
6409                 * @constructor
6410                 * @extends {View}
6411                 * @param {object} options - options for VLayout module
6412                 *  @param {PanelOptions[]} [options.panels] - panels to add layout when initialize
6413                 *  @param {number[]} [options.panelHeights] - panel height list
6414                 * @param {HTMLElement} container - container element
6415                 * @param {Theme} theme - theme instance
6416                 */
6417                function VLayout(options, container, theme) {
6418                    var opt, tempHeights;
6419
6420                    if (!(this instanceof VLayout)) {
6421                        return new VLayout(options, container);
6422                    }
6423
6424                    View.call(this, container);
6425
6426                    domutil.addClass(container, config.classname('vlayout-container'));
6427
6428                    /**
6429                     * @type {object}
6430                     */
6431                    opt = this.options = util.extend({
6432                        panels: [],
6433                        panelHeights: []
6434                    }, options);
6435
6436                    /**
6437                     * @type {VPanel[]}
6438                     */
6439                    this.panels = [];
6440
6441                    /**
6442                     * @type {Drag}
6443                     */
6444                    this._drag = new Drag({
6445                        distance: 10,
6446                        exclude: function(target) {
6447                            return !domutil.hasClass(target, config.classname('splitter'));
6448                        }
6449                    }, container);
6450
6451                    this._drag.on({
6452                        dragStart: this._onDragStart,
6453                        drag: this._onDrag,
6454                        dragEnd: this._onDragEnd
6455                    }, this);
6456
6457                    /**
6458                     * @type {object}
6459                     */
6460                    this._dragData = null;
6461
6462                    /**
6463                     * @type {Theme}
6464                     */
6465                    this.theme = theme;
6466
6467                    if (opt.panels.length) {
6468                        if (opt.panelHeights.length) {
6469                            tempHeights = opt.panelHeights.slice();
6470                            util.forEach(opt.panels, function(panelOpt) {
6471                                if (!panelOpt.isSplitter && !panelOpt.autoHeight) {
6472                                    panelOpt.height = tempHeights.shift();
6473                                }
6474                            });
6475                        }
6476
6477                        this.addPanels(opt.panels, this.container);
6478                    }
6479
6480                    this.refresh();
6481                }
6482
6483                util.inherit(VLayout, View);
6484
6485                /**
6486                 * Get current panels height in layout
6487                 * @returns {number[]} height of panels with `autoHeight` false
6488                 */
6489                VLayout.prototype.getLayoutData = function() {
6490                    var heightList = [];
6491
6492                    util.forEach(this.panels, function(panel) {
6493                        if (panel.isSplitter() || panel.options.autoHeight) {
6494                            return;
6495                        }
6496
6497                        heightList.push(panel.getHeight());
6498                    });
6499
6500                    return heightList;
6501                };
6502
6503                /**
6504                 * Set panels height in layout
6505                 * @param {number[]} heightList of panels with `autoHeight` false
6506                 */
6507                VLayout.prototype.setLayoutData = function(heightList) {
6508                    if (!heightList.length) {
6509                        return;
6510                    }
6511
6512                    util.forEach(this.panels, function(panel) {
6513                        if (panel.isSplitter() || panel.options.autoHeight) {
6514                            return;
6515                        }
6516
6517                        panel.setHeight(null, heightList.shift());
6518                    });
6519
6520                    this.refresh();
6521                };
6522
6523                /**
6524                 * Get next panel instance by specific panel
6525                 * @param {VPanel} panel - panel instance
6526                 * @returns {VPanel} next panel
6527                 */
6528                VLayout.prototype.nextPanel = function(panel) {
6529                    return this.panels[panel.index + 1];
6530                };
6531
6532                /**
6533                 * Get previous panel instance by specific panel
6534                 * @param {VPanel} panel - panel instance
6535                 * @returns {VPanel} previous panel
6536                 */
6537                VLayout.prototype.prevPanel = function(panel) {
6538                    return this.panels[panel.index - 1];
6539                };
6540
6541                /**
6542                 * Initialize resizing guide element
6543                 * @param {HTMLElement} element - element to use guide element after cloned
6544                 * @param {number} top - top pixel value for guide element
6545                 * @returns {HTMLElement} cloned element == guide element
6546                 */
6547                VLayout.prototype._initializeGuideElement = function(element, top) {
6548                    var cloned = element.cloneNode(true);
6549
6550                    domutil.addClass(cloned, config.classname('splitter-guide'));
6551                    this._refreshGuideElement(cloned, top);
6552                    this.container.appendChild(cloned);
6553
6554                    return cloned;
6555                };
6556
6557                /**
6558                 * Refresh guide element position
6559                 * @param {HTMLElement} element - guide element
6560                 * @param {number} top - top pixel value for guide element
6561                 */
6562                VLayout.prototype._refreshGuideElement = function(element, top) {
6563                    element.style.top = top + 'px';
6564                };
6565
6566                /**
6567                 * Clear guide element position
6568                 * @param {HTMLElement} element - guide element
6569                 */
6570                VLayout.prototype._clearGuideElement = function(element) {
6571                    domutil.remove(element);
6572                };
6573
6574                /**
6575                 * Resize overall panels size
6576                 * @param {VPanel} splPanel - splitter panel instance
6577                 * @param {number} startY - dragstart Y position
6578                 * @param {number} mouseY - dragend Y position
6579                 */
6580                VLayout.prototype._resize = function(splPanel, startY, mouseY) {
6581                    var diffY = startY - mouseY,
6582                        resizedHeight = mAbs(diffY),
6583                        resizeMap = [],
6584                        toDown = mouseY > startY,
6585                        backwardMethod = toDown ? 'prevPanel' : 'nextPanel',
6586                        forwardMethod = toDown ? 'nextPanel' : 'prevPanel',
6587                        cursor, resizeInfo;
6588
6589                    cursor = this[backwardMethod](splPanel);
6590                    resizeInfo = cursor.getResizeInfoByGrowth(resizedHeight);
6591                    resizeMap.push([cursor, resizeInfo[0]]);
6592
6593                    for (cursor = this[forwardMethod](cursor);
6594                         util.isExisty(cursor);
6595                         cursor = this[forwardMethod](cursor)) {
6596                        if (cursor.isSplitter()) {
6597                            continue;
6598                        }
6599
6600                        resizeInfo = cursor.getResizeInfoByGrowth(-resizedHeight);
6601                        resizeMap.push([cursor, resizeInfo[0]]);
6602                        resizedHeight -= resizeInfo[1];
6603                    }
6604
6605                    util.forEach(resizeMap, function(pair) {
6606                        pair[0].setHeight(null, pair[1], true);
6607                        pair[0].fire('resize');
6608                    });
6609                };
6610
6611                /**
6612                 * Get summation of splitter and panel's minimum height upper and below of supplied splitter
6613                 * @param {VPanel} splPanel - splitter panel instance
6614                 * @returns {number[]} upper and below splitter's height and panel minimum height summation.
6615                 */
6616                VLayout.prototype._getMouseYAdditionalLimit = function(splPanel) {
6617                    var upper = 0,
6618                        below = 0,
6619                        cursor,
6620                        func = function(panel) {
6621                            if (panel.isSplitter()) {
6622                                return panel.getHeight();
6623                            }
6624
6625                            return panel.options.minHeight;
6626                        };
6627
6628                    for (cursor = this.prevPanel(splPanel);
6629                         util.isExisty(cursor);
6630                         cursor = this.prevPanel(cursor)) {
6631                        upper += func(cursor);
6632                    }
6633
6634                    for (cursor = this.nextPanel(splPanel);
6635                         util.isExisty(cursor);
6636                         cursor = this.nextPanel(cursor)) {
6637                        below += func(cursor);
6638                    }
6639
6640                    return [upper, below];
6641                };
6642
6643                /**********
6644                 * Drag Handlers
6645                 **********/
6646
6647                /**
6648                 * Drag start schedule handler
6649                 * @param {object} e - drag start schedule data
6650                 */
6651                VLayout.prototype._onDragStart = function(e) {
6652                    var oEvent = e.originEvent,
6653                        target = e.target,
6654                        splIndex = domutil.getData(target, 'panelIndex'),
6655                        splPanel = this.panels[splIndex],
6656                        splHeight = splPanel.getHeight(),
6657                        splOffsetY = domevent.getMousePosition(oEvent, target)[1],
6658                        mouseY = domevent.getMousePosition(oEvent, this.container)[1],
6659                        guideElement = this._initializeGuideElement(target, mouseY);
6660
6661                    splPanel.addClass(config.classname('splitter-focused'));
6662
6663                    this._dragData = {
6664                        splPanel: splPanel,
6665                        splOffsetY: splOffsetY,
6666                        guideElement: guideElement,
6667                        startY: mouseY - splOffsetY,
6668                        minY: 0,
6669                        maxY: this.getViewBound().height - splHeight
6670                    };
6671
6672                    if (!util.browser.msie) {
6673                        domutil.addClass(document.body, config.classname('resizing'));
6674                    }
6675                };
6676
6677                /**
6678                 * Drag schedule handler
6679                 * @param {object} e - drag schedule data
6680                 */
6681                VLayout.prototype._onDrag = function(e) {
6682                    var dragData = this._dragData,
6683                        mouseY = domevent.getMousePosition(e.originEvent, this.container)[1];
6684
6685                    mouseY = common.limit(mouseY - dragData.splOffsetY, [dragData.minY], [dragData.maxY]);
6686
6687                    this._refreshGuideElement(dragData.guideElement, mouseY);
6688                };
6689
6690                /**
6691                 * Drag end schedule handler
6692                 * @fires VLayout#resize
6693                 * @param {object} e - dragend schedule data
6694                 */
6695                VLayout.prototype._onDragEnd = function(e) {
6696                    var dragData = this._dragData,
6697                        asideMinMax = this._getMouseYAdditionalLimit(
6697dragData.splPanel),
6698                        mouseY = domevent.getMousePosition(e.originEvent, this.container)[1];
6699
6700                    // mouseY value can't exceed summation of splitter height and panel's minimum height based on target splitter.
6701                    mouseY = common.limit(
6702                        mouseY - dragData.splOffsetY,
6703                        [dragData.minY + asideMinMax[0]],
6704                        [dragData.maxY - asideMinMax[1]]
6705                    );
6706
6707                    this._resize(dragData.splPanel, dragData.startY, mouseY);
6708
6709                    /**
6710                     * @event VLayout#resize
6711                     * @type {object}
6712                     * @property {number[]} layoutData - layout data after resized
6713                     */
6714                    this.fire('resize', {
6715                        layoutData: this.getLayoutData()
6716                    });
6717
6718                    this._dragData = null;
6719                    this._clearGuideElement(dragData.guideElement);
6720                    dragData.splPanel.removeClass(config.classname('splitter-focused'));
6721                    domutil.removeClass(document.body, config.classname('resizing'));
6722                };
6723
6724                /**********
6725                 * Methods
6726                 **********/
6727
6728                /**
6729                 * refresh each panels
6730                 */
6731                VLayout.prototype.refresh = function() {
6732                    var panelToFillHeight = [];
6733                    var layoutHeight = this.getViewBound().height;
6734                    var usedHeight = 0;
6735                    var remainHeight;
6736
6737                    if (!layoutHeight) {
6738                        return;
6739                    }
6740
6741                    util.forEach(this.panels, function(panel) {
6742                        if (panel.options.autoHeight) {
6743                            panelToFillHeight.push(panel);
6744                        } else {
6745                            usedHeight += panel.getHeight();
6746                        }
6747                    });
6748
6749                    remainHeight = (layoutHeight - usedHeight) / panelToFillHeight.length;
6750
6751                    util.forEach(panelToFillHeight, function(panel) {
6752                        panel.setHeight(null, remainHeight);
6753                    });
6754                };
6755
6756                /**
6757                 * add panel
6758                 * @param {PanelOptions} options - options for panel
6759                 * @param {container} [container] - container element
6760                 */
6761                VLayout.prototype.addPanel = function(options, container) {
6762                    var element = document.createElement('div'),
6763                        panels = this.panels,
6764                        index = panels.length;
6765
6766                    options = util.extend({
6767                        index: index
6768                    }, options);
6769
6770                    panels.push(new VPanel(options, element, this.theme));
6771
6772                    container.appendChild(element);
6773                };
6774
6775                /**
6776                 * Add multiple panel
6777                 * @param {PanelOptions[]} options - panel options list
6778                 * @param {HTMLElement} container - container element
6779                 */
6780                VLayout.prototype.addPanels = function(options, container) {
6781                    var self = this,
6782                        frag = document.createDocumentFragment();
6783
6784                    util.forEach(options, function(option) {
6785                        self.addPanel(option, frag);
6786                    });
6787
6788                    container.appendChild(frag);
6789                };
6790
6791                /**
6792                 * Get a panel by name
6793                 * @param {string} name - panel's name
6794                 * @returns {VPanel}
6795                 */
6796                VLayout.prototype.getPanelByName = function(name) {
6797                    var found;
6798                    util.forEach(this.panels, function(panel) {
6799                        if (panel.name === name) {
6800                            found = panel;
6801                        }
6802                    });
6803
6804                    return found;
6805                };
6806
6807                module.exports = VLayout;
6808
6809
6810                /***/ }),
6811
6812            
6812/***/ "./src/js/common/vpanel.js":
6813            /*!*********************************!*\
6814  !*** ./src/js/common/vpanel.js ***!
6815  \*********************************/
6816            /*! no static exports found */
6817            /***/ (function(module, exports, __webpack_require__) {
6818
6819                "use strict";
6820                /**
6821                 * @fileoverview Panel class for VLayout module
6822                 * @author NHN FE Development Lab <[email protected]>
6823                 */
6824
6825
6826                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
6827                var config = __webpack_require__(/*! ../config */ "./src/js/config.js"),
6828                    common = __webpack_require__(/*! ./common */ "./src/js/common/common.js"),
6829                    domutil = __webpack_require__(/*! ./domutil */ "./src/js/common/domutil.js"),
6830                    View = __webpack_require__(/*! ../view/view */ "./src/js/view/view.js");
6831
6832                /**
6833                 * @constructor
6834                 * @extends {View}
6835                 * @param {object} options - options for VPanel
6836                 *  @param {number} options.index - index of panel in vlayout
6837                 *  @param {number} [options.minHeight=0] - minimum height of panel
6838                 *  @param {number} [options.height] - initial height of panel
6839                 *  @param {boolean} [options.isSplitter=false] - set true then this panel works splitter
6840                 *  @param {boolean} [options.autoHeight=false] - set true then this panel use remain height after other panel resized.
6841                 *  @param {string} [options.className] - additional class name to add element
6842                 * @param {HTMLElement} container - container element
6843                 * @param {Theme} theme - theme instance
6844                 */
6845                function VPanel(options, container, theme) {
6846                    View.call(this, container);
6847
6848                    /**
6849                     * @type {object}
6850                     */
6851                    this.options = util.extend({
6852                        index: 0,
6853                        name: '0',
6854                        minHeight: 0,
6855                        maxHeight: null,
6856                        height: null,
6857                        isSplitter: false,
6858                        autoHeight: false,
6859                        className: ''
6860                    }, options);
6861
6862                    /**
6863                     * @type {number}
6864                     */
6865                    this.index = this.options.index;
6866
6867                    /**
6868                     * @type {string}
6869                     */
6870                    this.name = this.options.name || String(this.index);
6871
6872                    this.isHeightForcedSet = false;
6873
6874                    /**
6875                     * @type {Theme}
6876                     */
6877                    this.theme = theme;
6878
6879                    this._initPanel(this.options, container);
6880                }
6881
6882                util.inherit(VPanel, View);
6883
6884                /**
6885                 * whether this panel is splitter?
6886                 * @returns {boolean} panel is splitter?
6887                 */
6888                VPanel.prototype.isSplitter = function() {
6889                    return this.options.isSplitter;
6890                };
6891
6892                /**
6893                 * set max height of panel
6894                 * @param {number} maxHeight - maxHeight
6895                 */
6896                VPanel.prototype.setMaxHeight = function(maxHeight) {
6897                    if (!this.options.autoHeight) {
6898                        this.options.maxHeight = maxHeight;
6899                    }
6900                };
6901
6902                /**
6903                 * set forced height flag
6904                 * @param {boolean} set - enable or not
6905                 */
6906                VPanel.prototype.setHeightForcedSet = function(set) {
6907                    this.isHeightForcedSet = set;
6908                };
6909
6910                /**
6911                 * get forced height flag
6912                 * @returns {boolean} set - enable or not
6913                 */
6914                VPanel.prototype.getHeightForcedSet = function() {
6915                    return this.isHeightForcedSet;
6916                };
6917
6918                /**
6919                 * set height of html element
6920                 * @param {HTMLElement} [container] - container element
6921                 * @param {number} newHeight - height
6922                 * @param {boolean} force - whether ignore max-length
6923                 */
6924                VPanel.prototype.setHeight = function(container, newHeight, force) {
6925                    var maxHeight = this.options.maxHeight;
6926                    var minHeight = this.options.minHeight;
6927                    var autoHeight = this.options.autoHeight;
6928                    container = container || this.container;
6929
6930                    // 한번 force 호출이 일어난 이후에는 force 호출만 허용한다
6931                    if (!force && this.isHeightForcedSet && !autoHeight) {
6932                        return;
6933                    }
6934
6935                    if (force) {
6936                        this.isHeightForcedSet = true;
6937                    } else if (maxHeight) {
6938                        newHeight = Math.min(newHeight, maxHeight);
6939                    }
6940                    newHeight = Math.max(minHeight, newHeight);
6941
6942                    container.style.height = newHeight + 'px';
6943                };
6944
6945                /**
6946                 * Calculate new height of panel and remains by supplied height growth
6947                 * @param {number} growth - growth value
6948                 * @returns {number[]} newHeight, remainHeight
6949                 */
6950                VPanel.prototype.getResizeInfoByGrowth = function(growth) {
6951                    var height = this.getHeight(),
6952                        newHeight = height + growth,
6953                        resizeTo = Math.max(0, newHeight, this.options.minHeight);
6954
6955                    return [resizeTo, height - resizeTo];
6956                };
6957
6958                /**
6959                 * get outer height of panel element
6960                 * @returns {number} outer height of panel element
6961                 */
6962                VPanel.prototype.getHeight = function() {
6963                    return domutil.getSize(this.container)[1];
6964                };
6965
6966                /**
6967                 * add design class to panel element
6968                 * @param {string} className - classname string
6969                 */
6970                VPanel.prototype.addClass = function(className) {
6971                    domutil.addClass(this.container, className);
6972                };
6973
6974                /**
6975                 * remove design class to panel element
6976                 * @param {string} className - classname string
6977                 */
6978                VPanel.prototype.removeClass = function(className) {
6979                    domutil.removeClass(this.container, className);
6980                };
6981
6982                /**
6983                 * initialize panel element
6984                 * @param {PanelOptions} options - options for panel
6985                 * @param {HTMLDivElement} container - panel element
6986                 */
6987                VPanel.prototype._initPanel = function(options, container) {
6988                    var height;
6989
6990                    domutil.setData(container, 'panelIndex', options.index);
6991
6992                    if (options.isSplitter) {
6993                        domutil.addClass(container, config.classname('splitter'));
6994                        this.applyTheme();
6995
6996                        return;
6997                    }
6998
6999                    if (options.className) {
7000                        domutil.addClass(container, options.className);
7001                    }
7002
7003                    if (options.autoHeight) {
7004                        domutil.setData(container, 'autoHeight', true);
7005                    } else {
7006                        height = common.limit(options.height || 0,
7007                            [options.minHeight],
7008                            [options.maxHeight || options.height]
7009                        );
7010
7011                        options.height = height;
7012                        this.setHeight(container, height);
7013                    }
7014                };
7015
7016                VPanel.prototype.applyTheme = function() {
7017                    var style = this.container.style;
7018                    var theme = this.theme;
7019
7020                    if (!theme) {
7021                        return;
7022                    }
7023
7024                    style.borderTop = theme.week.vpanelSplitter.border || theme.common.border;
7025                    style.borderBottom = theme.week.vpanelSplitter.border || theme.common.border;
7026                    style.height = theme.week.vpanelSplitter.height;
7027                };
7028
7029                module.exports = VPanel;
7030
7031
7032                /***/ }),
7033
7034            
7034/***/ "./src/js/config.js":
7035            /*!**************************!*\
7036  !*** ./src/js/config.js ***!
7037  \**************************/
7038            /*! no static exports found */
7039            /***/ (function(module, exports, __webpack_require__) {
7040
7041                "use strict";
7042                /**
7043                 * @fileoverview Global configuration object module. This @echo syntax will change preprocess context. See gulpfile.js
7044                 * @author NHN FE Development Lab <[email protected]>
7045                 */
7046
7047
7048                var cssPrefix = 'tui-full-calendar-',
7049                    alldayGetViewID = new RegExp('^' + cssPrefix + 'weekday[\\s]tui-view-(\\d+)'),
7050                    alldayCheckPermission = new RegExp('^' + cssPrefix + 'schedule(-title)?$'),
7051                    timeGetViewID = new RegExp('^' + cssPrefix + 'time-date[\\s]tui-view-(\\d+)');
7052
7053                var config = {
7054                    throwError: function(msg) {
7055                        throw new Error(msg);
7056                    },
7057
7058                    cssPrefix: cssPrefix,
7059
7060                    classname: function(str) {
7061                        str = str || '';
7062
7063                        if (str.charAt(0) === '.') {
7064                            return '.' + config.cssPrefix + str.slice(1);
7065                        }
7066
7067                        return config.cssPrefix + str;
7068                    },
7069
7070                    allday: {
7071                        getViewIDRegExp: alldayGetViewID,
7072                        checkCondRegExp: alldayCheckPermission
7073                    },
7074
7075                    daygrid: {
7076                        getViewIDRegExp: alldayGetViewID,
7077                        checkCondRegExp: alldayCheckPermission
7078                    },
7079
7080                    time: {
7081                        getViewIDRegExp: timeGetViewID
7082                    }
7083                };
7084
7085                module.exports = config;
7086
7087
7088                /***/ }),
7089
7090            
7090/***/ "./src/js/controller/base.js":
7091            /*!***********************************!*\
7092  !*** ./src/js/controller/base.js ***!
7093  \***********************************/
7094            /*! no static exports found */
7095            /***/ (function(module, exports, __webpack_require__) {
7096
7097                "use strict";
7098                /**
7099                 * @fileoverview Base calendar controller
7100                 * @author NHN FE Development Lab <[email protected]>
7101                 */
7102
7103
7104                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
7105                var Schedule = __webpack_require__(/*! ../model/schedule */ "./src/js/model/schedule.js");
7106                var ScheduleViewModel = __webpack_require__(/*! ../model/viewModel/scheduleViewModel */ "./src/js/model/viewModel/scheduleViewModel.js");
7107                var datetime = __webpack_require__(/*! ../common/datetime */ "./src/js/common/datetime.js");
7108                var common = __webpack_require__(/*! ../common/common */ "./src/js/common/common.js");
7109                var Theme = __webpack_require__(/*! ../theme/theme */ "./src/js/theme/theme.js");
7110
7111                /**
7112                 * @constructor
7113                 * @param {object} options - options for base controller
7114                 * @param {function} [options.groupFunc] - function for group each models {@see Collection#groupBy}
7115                 * @param {themeConfig} [options.theme] - theme object
7116                 * @mixes util.CustomEvents
7117                 */
7118                function Base(options) {
7119                    options = options || {};
7120
7121                    /**
7122                     * function for group each schedule models.
7123                     * @type {function}
7124                     * @param {ScheduleViewModel} viewModel - view model instance
7125                     * @returns {string} group key
7126                     */
7127                    this.groupFunc = options.groupFunc || function(viewModel) {
7128                        var model = viewModel.model;
7129
7130                        if (viewModel.model.isAllDay) {
7131                            return 'allday';
7132                        }
7133
7134                        if (model.category === 'time' && (model.end - model.start > datetime.MILLISECONDS_PER_DAY)) {
7135                            return 'allday';
7136                        }
7137
7138                        return model.category;
7139                    };
7140
7141                    /**
7142                     * schedules collection.
7143                     * @type {Collection}
7144                     */
7145                    this.schedules = common.createScheduleCollection();
7146
7147                    /**
7148                     * Matrix for multidate schedules.
7149                     * @type {object.<string, array>}
7150                     */
7151                    this.dateMatrix = {};
7152
7153                    /**
7154                     * Theme
7155                     * @type {Theme}
7156                     */
7157                    this.theme = new Theme(options.theme);
7158
7159                    /**
7160                     * Calendar list
7161                     * @type {Array.<Calendar>}
7162                     */
7163                    this.calendars = [];
7164                }
7165
7166                /**
7167                 * Calculate contain dates in schedule.
7168                 * @private
7169                 * @param {Schedule} schedule The instance of schedule.
7170                 * @returns {array} contain dates.
7171                 */
7172                Base.prototype._getContainDatesInSchedule = function(schedule) {
7173                    var scheduleStart = schedule.getStarts();
7174                    var scheduleEnd = schedule.getEnds();
7175                    var start = datetime.start(scheduleStart);
7176                    var equalStartEnd = datetime.compare(scheduleStart, scheduleEnd) === 0;
7177                    var endDate = equalStartEnd ? scheduleEnd : datetime.convertStartDayToLastDay(scheduleEnd);
7178                    var end = datetime.end(endDate);
7179                    var range = datetime.range(
7180                        start,
7181                        end,
7182                        datetime.MILLISECONDS_PER_DAY
7183                    );
7184
7185                    return range;
7186                };
7187
7188                /****************
7189                 * CRUD Schedule
7190                 ****************/
7191
7192                /**
7193                 * Create a schedule instance from raw data.
7194                 * @emits Base#beforeCreateSchedule
7195                 * @emits Base#createdSchedule
7196                 * @param {object} options Data object to create schedule.
7197                 * @param {boolean} silent - set true then don't fire events.
7198                 * @returns {Schedule} The instance of Schedule that created.
7199                 */
7200                Base.prototype.createSchedule = function(options, silent) {
7201                    var schedule,
7202                        scheduleData = {
7203                            data: options
7204                        };
7205
7206                    /**
7207                     * @event Base#beforeCreateSchedule
7208                     * @type {Calendar~Schedule[]}
7209                     */
7210                    if (!this.invoke('beforeCreateSchedule', scheduleData)) {
7211                        return null;
7212                    }
7213
7214                    schedule = this.addSchedule(Schedule.create(options));
7215
7216                    if (!silent) {
7217                        /**
7218                         * @event Base#createdSchedule
7219                         * @type {Schedule}
7220                         */
7221                        this.fire('createdSchedule', schedule);
7222                    }
7223
7224                    return schedule;
7225                };
7226
7227                /**
7228                 * @emits Base#beforeCreateSchedule
7229                 * @emits Base#createdSchedule
7230                 * @param {Calendar~Schedule[]} dataList - dataObject list to create schedule.
7231                 * @param {boolean} [silent=false] - set true then don't fire events.
7232                 * @returns {Schedule[]} The instance list of Schedule that created.
7233                 */
7234                Base.prototype.createSchedules = function(dataList, silent) {
7235                    var self = this;
7236
7237                    return util.map(dataList, function(data) {
7238                        return self.createSchedule(data, silent);
7239                    });
7240                };
7241
7242                /**
7243                 * Update a schedule.
7244                 * @emits Base#updateSchedule
7245                 * @param {Schedule} schedule - schedule instance to update
7246                 * @param {object} options updated object data.
7247                 * @returns {Schedule} updated schedule instance
7248                 */
7249                Base.prototype.updateSchedule = function(schedule, options) {
7250                    var start = options.start || schedule.start;
7251                    var end = options.end || schedule.end;
7252
7253                    options = options || {};
7254
7255                    if (options.category === 'allday') {
7256                        options.isAllDay = true;
7257                    }
7258
7259                    if (!util.isUndefined(options.isAllDay)) {
7260                        schedule.set('isAllDay', options.isAllDay);
7261                    }
7262
7263                    if (!util.isUndefined(options.calendarId)) {
7264                        schedule.set('calendarId', options.calendarId);
7265                    }
7266
7267                    if (options.title) {
7268                        schedule.set('title', options.title);
7269                    }
7270
7271                    if (options.body) {
7272                        schedule.set('body', options.body);
7273                    }
7274
7275                    if (options.start || options.end) {
7276                        if (schedule.isAllDay) {
7277                            schedule.setAllDayPeriod(start, end);
7278                        } else {
7279                            schedule.setTimePeriod(start, end);
7280                        }
7281                    }
7282
7283                    if (options.color) {
7284                        schedule.set('color', options.color);
7285                    }
7286
7287                    if (options.bgColor) {
7288                        schedule.set('bgColor', options.bgColor);
7289                    }
7290
7291                    if (options.borderColor) {
7292                        schedule.set('borderColor', options.borderColor);
7293                    }
7294
7295                    if (options.origin) {
7296                        schedule.set('origin', options.origin);
7297                    }
7298
7299                    if (!util.isUndefined(options.isPending)) {
7300                        schedule.set('isPending', options.isPending);
7301                    }
7302
7303                    if (!util.isUndefined(options.isFocused)) {
7304                        schedule.set('isFocused', options.isFocused);
7305                    }
7306
7307                    if (options.location) {
7308                        schedule.set('location', options.location);
7309                    }
7310
7311                    if (options.state) {
7312                        schedule.set('state', options.state);
7313                    }
7314
7315                    this._removeFromMatrix(schedule);
7316                    this._addToMatrix(schedule);
7317
7318                    /**
7319                     * @event Base#updateSchedule
7320                     */
7321                    this.fire('updateSchedule');
7322
7323                    return schedule;
7324                };
7325
7326                /**
7327                 * Delete schedule instance from controller.
7328                 * @param {Schedule} schedule - schedule instance to delete
7329                 * @returns {Schedule} deleted model instance.
7330                 */
7331                Base.prototype.deleteSchedule = function(schedule) {
7332                    this._removeFromMatrix(schedule);
7333                    this.schedules.remove(schedule);
7334
7335                    return schedule;
7336                };
7337
7338                /**
7339                 * Set date matrix to supplied schedule instance.
7340                 * @param {Schedule} schedule - instance of schedule.
7341                 */
7342                Base.prototype._addToMatrix = function(schedule) {
7343                    var ownMatrix = this.dateMatrix;
7344                    var containDates = this._getContainDatesInSchedule(schedule);
7345
7346                    util.forEach(containDates, function(date) {
7347                        var ymd = datetime.format(date, 'YYYYMMDD'),
7348                            matrix = ownMatrix[ymd] = ownMatrix[ymd] || [];
7349
7350                        matrix.push(util.stamp(schedule));
7351                    });
7352                };
7353
7354                /**
7355                 * Remove schedule's id from matrix.
7356                 * @param {Schedule} schedule - instance of schedule
7357                 */
7358                Base.prototype._removeFromMatrix = function(schedule) {
7359                    var modelID = util.stamp(schedule);
7360
7361                    util.forEach(this.dateMatrix, function(matrix) {
7362                        var index = util.inArray(modelID, matrix);
7363
7364                        if (~index) {
7365                            matrix.splice(index, 1);
7366                        }
7367                    }, this);
7368                };
7369
7370                /**
7371                 * Add a schedule instance.
7372                 * @emits Base#addedSchedule
7373                 * @param {Schedule} schedule The instance of Schedule.
7374                 * @param {boolean} silent - set true then don't fire events.
7375                 * @returns {Schedule} The instance of Schedule that added.
7376                 */
7377                Base.prototype.addSchedule = function(schedule, silent) {
7378                    this.schedules.add(schedule);
7379                    this._addToMatrix(schedule);
7380
7381                    if (!silent) {
7382                        /**
7383                         * @event Base#addedSchedule
7384                         * @type {object}
7385                         */
7386                        this.fire('addedSchedule', schedule);
7387                    }
7388
7389                    return schedule;
7390                };
7391
7392                /**
7393                 * split schedule model by ymd.
7394                 * @param {Date} start - start date
7395                 * @param {Date} end - end date
7396                 * @param {Collection} scheduleCollection - collection of schedule model.
7397                 * @returns {object.<string, Collection>} splitted schedule model collections.
7398                 */
7399                Base.prototype.splitScheduleByDateRange = function(start, end, scheduleCollection) {
7400                    var range = datetime.range(
7401                        datetime.start(start),
7402                        datetime.end(end),
7403                        datetime.MILLISECONDS_PER_DAY
7404                        ),
7405                        ownMatrix = this.dateMatrix,
7406                        result = {};
7407
7408                    util.forEachArray(range, function(date) {
7409                        var ymd = datetime.format(date, 'YYYYMMDD'),
7410                            matrix = ownMatrix[ymd],
7411                            collection;
7412
7413                        collection = result[ymd] = common.createScheduleCollection();
7414
7415                        if (matrix && matrix.length) {
7416                            util.forEachArray(matrix, function(id) {
7417                                scheduleCollection.doWhenHas(id, function(schedule) {
7418                                    collection.add(schedule);
7419                                });
7420                            });
7421                        }
7422                    });
7423
7424                    return result;
7425                };
7426
7427                /**
7428                 * Return schedules in supplied date range.
7429                 *
7430                 * available only YMD.
7431                 * @param {TZDate} start start date.
7432                 * @param {TZDate} end end date.
7433                 * @returns {object.<string, Collection>} schedule collection grouped by dates.
7434                 */
7435                Base.prototype.findByDateRange = function(start, end) {
7436                    var range = datetime.range(
7437                        datetime.start(start),
7438                        datetime.end(end),
7439                        datetime.MILLISECONDS_PER_DAY
7440                        ),
7441                        ownSchedules = this.schedules.items,
7442                        ownMatrix = this.dateMatrix,
7443                        dformat = datetime.format,
7444                        result = {},
7445                        matrix,
7446                        ymd,
7447                        viewModels;
7448
7449                    util.forEachArray(range, function(date) {
7450                        ymd = dformat(date, 'YYYYMMDD');
7451                        matrix = ownMatrix[ymd];
7452                        viewModels = result[ymd] = common.createScheduleCollection();
7453
7454                        if (matrix && matrix.length) {
7455                            viewModels.add.apply(viewModels, util.map(matrix, function(id) {
7456                                return ScheduleViewModel.create(ownSchedules[id]);
7457                            }));
7458                        }
7459                    });
7460
7461                    return result;
7462                };
7463
7464                Base.prototype.clearSchedules = function() {
7465                    this.dateMatrix = {};
7466                    this.schedules.clear();
7467                    /**
7468                     * for inner view when clear schedules
7469                     * @event Base#clearSchedules
7470                     * @type {Schedule}
7471                     */
7472                    this.fire('clearSchedules');
7473                };
7474
7475                /**
7476                 * Set a theme.
7477                 * @param {themeConfig} theme - theme keys, styles
7478                 * @returns {Array.<string>} keys - error keys not predefined.
7479                 */
7480                Base.prototype.setTheme = function(theme) {
7481                    return this.theme.setStyles(theme);
7482                };
7483
7484                /**
7485                 * Set calendar list
7486                 * @param {Array.<Calendar>} calendars - calendar list
7487                 */
7488                Base.prototype.setCalendars = function(calendars) {
7489                    this.calendars = calendars;
7490                };
7491
7492// mixin
7493                util.CustomEvents.mixin(Base);
7494
7495                module.exports = Base;
7496
7497
7498                /***/ }),
7499
7500            
7500/***/ "./src/js/controller/viewMixin/core.js":
7501            /*!*********************************************!*\
7502  !*** ./src/js/controller/viewMixin/core.js ***!
7503  \*********************************************/
7504            /*! no static exports found */
7505            /***/ (function(module, exports, __webpack_require__) {
7506
7507                "use strict";
7508                /**
7509                 * @fileoverview Core methods for schedule block placing
7510                 * @author NHN FE Development Lab <[email protected]>
7511                 */
7512
7513
7514                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
7515                var forEachArr = util.forEachArray,
7516                    aps = Array.prototype.slice;
7517
7518                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
7519                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
7520                var Collection = __webpack_require__(/*! ../../common/collection */ "./src/js/common/collection.js");
7521                var ScheduleViewModel = __webpack_require__(/*! ../../model/viewModel/scheduleViewModel */ "./src/js/model/viewModel/scheduleViewModel.js");
7522
7523                var Core = {
7524                    /**
7525                     * Calculate collision group.
7526                     * @param {array} viewModels List of viewmodels.
7527                     * @returns {array} Collision Group.
7528                     */
7529                    getCollisionGroup: function(viewModels) {
7530                        var collisionGroups = [],
7531                            foundPrevCollisionSchedule = false,
7532                            previousScheduleList;
7533
7534                        if (!viewModels.length) {
7535                            return collisionGroups;
7536                        }
7537
7538                        collisionGroups[0] = [util.stamp(viewModels[0].valueOf())];
7539                        forEachArr(viewModels.slice(1), function(schedule, index) {
7540                            foundPrevCollisionSchedule = false;
7541                            previousScheduleList = aps.apply(viewModels, [0, index + 1]).reverse();
7542
7543                            forEachArr(previousScheduleList, function(previous) {
7544                                if (schedule.collidesWith(previous)) {
7545                                    // If overlapping previous schedules, find a Collision Group of overlapping schedules and add this schedules
7546                                    foundPrevCollisionSchedule = true;
7547
7548                                    forEachArr(collisionGroups.slice(0).reverse(), function(group) {
7549                                        if (~util.inArray(util.stamp(previous.valueOf()), group)) {
7550                                            // If you find a previous schedule that overlaps, include it in the Collision Group to which it belongs.
7551                                            group.push(util.stamp(schedule.valueOf()));
7552
7553                                            return false; // returning false can stop this loop
7554                                        }
7555
7556                                        return true;
7557                                    });
7558
7559                                    return false; // returning false can stop this loop
7560                                }
7561
7562                                return true;
7563                            });
7564
7565                            if (!foundPrevCollisionSchedule) {
7566                                // This schedule is a schedule that does not overlap with the previous schedule, so a new Collision Group is constructed.
7567                                collisionGroups.push([util.stamp(schedule.valueOf())]);
7568                            }
7569                        });
7570
7571                        return collisionGroups;
7572                    },
7573
7574                    /**
7575                     * Get row length by column index in 2d matrix.
7576                     * @param {array[]} arr2d Matrix
7577                     * @param {number} col Column index.
7578                     * @returns {number} Last row number in column.
7579                     */
7580                    getLastRowInColumn: function(arr2d, col) {
7581                        var row = arr2d.length;
7582
7583                        while (row > 0) {
7584                            row -= 1;
7585                            if (!util.isUndefined(arr2d[row][col])) {
7586                                return row;
7587                            }
7588                        }
7589
7590                        return false;
7591                    },
7592
7593                    /**
7594                     * Calculate matrix for appointment block element placing.
7595                     * @param {Collection} collection model collection.
7596                     * @param {array[]} collisionGroups Collision groups for schedule set.
7597                     * @returns {array} matrices
7598                     */
7599                    getMatrices: function(collection, collisionGroups) {
7600                        var result = [],
7601                            getLastRowInColumn = Core.getLastRowInColumn;
7602
7603                        forEachArr(collisionGroups, function(group) {
7604                            var matrix = [[]];
7605
7606                            forEachArr(group, function(scheduleID) {
7607                                var schedule = collection.items[scheduleID],
7608                                    col = 0,
7609                                    found = false,
7610                                    nextRow,
7611                                    lastRowInColumn;
7612
7613                                while (!found) {
7614                                    lastRowInColumn = getLastRowInColumn(matrix, col);
7615
7616                                    if (lastRowInColumn === false) {
7617                                        matrix[0].push(schedule);
7618                                        found = true;
7619                                    } else if (!schedule.collidesWith(matrix[lastRowInColumn][col])) {
7620                                        nextRow = lastRowInColumn + 1;
7621                                        if (util.isUndefined(matrix[nextRow])) {
7622                                            matrix[nextRow] = [];
7623                                        }
7624                                        matrix[nextRow][col] = schedule;
7625                                        found = true;
7626                                    }
7627
7628                                    col += 1;
7629                                }
7630                            });
7631
7632                            result.push(matrix);
7633                        });
7634
7635                        return result;
7636                    },
7637
7638                    /**
7639                     * Filter that get schedule model in supplied date ranges.
7640                     * @param {Date} start - start date
7641                     * @param {Date} end - end date
7642                     * @returns {function} schedule filter function
7643                     */
7644                    getScheduleInDateRangeFilter: function(start, end) {
7645                        return function(model) {
7646                            var ownStarts = model.getStarts(),
7647                                ownEnds = model.getEnds();
7648
7649                            // shorthand condition of
7650                            //
7651                            // (ownStarts >= start && ownEnds <= end) ||
7652                            // (ownStarts < start && ownEnds >= start) ||
7653                            // (ownEnds > end && ownStarts <= end)
7654                            return !(ownEnds < start || ownStarts > end);
7655                        };
7656                    },
7657
7658                    /**
7659                     * Position each view model for placing into container
7660                     * @param {Date} start - start date to render
7661                     * @param {Date} end - end date to render
7662                     * @param {array} matrices - matrices from controller
7663                     * @param {function} [iteratee] - iteratee function invoke each view models
7664                     */
7665                    positionViewModels: function(start, end, matrices, iteratee) {
7666                        var ymdListToRender;
7667
7668                        ymdListToRender = util.map(
7669                            datetime.range(start, end, datetime.MILLISECONDS_PER_DAY),
7670                            function(date) {
7671                                return datetime.format(date, 'YYYYMMDD');
7672                            }
7673                        );
7674
7675                        forEachArr(matrices, function(matrix) {
7676                            forEachArr(matrix, function(column) {
7677                                forEachArr(column, function(viewModel, index) {
7678                                    var ymd, dateLength;
7679
7680                                    if (!viewModel) {
7681                                        return;
7682                                    }
7683
7684                                    ymd = datetime.format(viewModel.getStarts(), 'YYYYMMDD');
7685                                    dateLength = datetime.range(
7686                                        datetime.start(viewModel.getStarts()),
7687                                        datetime.end(viewModel.getEnds()),
7688                                        datetime.MILLISECONDS_PER_DAY
7689                                    ).length;
7690
7691                                    viewModel.top = index;
7692                                    viewModel.left = util.inArray(ymd, ymdListToRender);
7693                                    viewModel.width = dateLength;
7694
7695                                    if (iteratee) {
7696                                        iteratee(viewModel);
7697                                    }
7698                                });
7699                            });
7700                        });
7701                    },
7702
7703                    /**
7704                     * Limit start, end date each view model for render properly
7705                     * @param {TZDate} start - start date to render
7706                     * @param {TZDate} end - end date to render
7707                     * @param {Collection|ScheduleViewModel} viewModelColl - schedule view
7708                     *  model collection or ScheduleViewModel
7709                     * @returns {ScheduleViewModel} return view model when third parameter is
7710                     *  view model
7711                     */
7712                    limitRenderRange: function(start, end, viewModelColl) {
7713                        /**
7714                         * Limit render range for view models
7715                         * @param {ScheduleViewModel} viewModel - view model instance
7716                         * @returns {ScheduleViewModel} view model that limited render range
7717                         */
7718                        function limit(viewModel) {
7719                            if (viewModel.getStarts() < start) {
7720                                viewModel.exceedLeft = true;
7721                                viewModel.renderStarts = new TZDate(start);
7722                            }
7723
7724                            if (viewModel.getEnds() > end) {
7725                                viewModel.exceedRight = true;
7726                                viewModel.renderEnds = new TZDate(end);
7727                            }
7728
7729                            return viewModel;
7730                        }
7731
7732                        if (viewModelColl.constructor === Collection) {
7733                            viewModelColl.each(limit);
7734
7735                            return null;
7736                        }
7737
7738                        return limit(viewModelColl);
7739                    },
7740
7741                    /**
7742                     * Convert schedule model collection to view model collection.
7743                     * @param {Collection} modelColl - collection of schedule model
7744                     * @returns {Collection} collection of schedule view model
7745                     */
7746                    convertToViewModel: function(modelColl) {
7747                        var viewModelColl;
7748
7749                        viewModelColl = new Collection(function(viewModel) {
7750                            return viewModel.cid();
7751                        });
7752
7753                        modelColl.each(function(model) {
7754                            viewModelColl.add(ScheduleViewModel.create(model));
7755                        });
7756
7757                        return viewModelColl;
7758                    }
7759                };
7760
7761                module.exports = Core;
7762
7763
7764                /***/ }),
7765
7766            
7766/***/ "./src/js/controller/viewMixin/month.js":
7767            /*!**********************************************!*\
7768  !*** ./src/js/controller/viewMixin/month.js ***!
7769  \**********************************************/
7770            /*! no static exports found */
7771            /***/ (function(module, exports, __webpack_require__) {
7772
7773                "use strict";
7774                /**
7775                 * @fileoverview Controller mixin for Month View
7776                 * @author NHN FE Development Lab <[email protected]>
7777                 */
7778
7779
7780                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
7781                var array = __webpack_require__(/*! ../../common/array */ "./src/js/common/array.js"),
7782                    datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js"),
7783                    Collection = __webpack_require__(/*! ../../common/collection */ "./src/js/common/collection.js");
7784                var mmax = Math.max;
7785
7786                var Month = {
7787                    /**
7788                     * Filter function for find time schedule
7789                     * @param {ScheduleViewModel} viewModel - schedule view model
7790                     * @returns {boolean} whether model is time schedule?
7791                     */
7792                    _onlyTimeFilter: function(viewModel) {
7793                        return !viewModel.model.isAllDay && !viewModel.hasMultiDates;
7794                    },
7795
7796                    /**
7797                     * Filter function for find allday schedule
7798                     * @param {ScheduleViewModel} viewModel - schedule view model
7799                     * @returns {boolean} whether model is allday schedule?
7800                     */
7801                    _onlyAlldayFilter: function(viewModel) {
7802                        return viewModel.model.isAllDay || viewModel.hasMultiDates;
7803                    },
7804
7805                    /**
7806                     * Weight top value +1 for month view render
7807                     * @param {ScheduleViewModel} viewModel - schedule view model
7808                     */
7809                    _weightTopValue: function(viewModel) {
7810                        viewModel.top = viewModel.top || 0;
7811                        viewModel.top += 1;
7812                    },
7813
7814                    /**
7815                     * Adjust render range to render properly.
7816                     *
7817                     * Limit start, end for each allday schedules and expand start, end for
7818                     * each time schedules
7819                     * @this Base
7820                     * @param {TZDate} start - render start date
7821                     * @param {TZDate} end - render end date
7822                     * @param {Collection} vColl - view model collection
7823                     * property.
7824                     */
7825                    _adjustRenderRange: function(start, end, vColl) {
7826                        var ctrlCore = this.Core;
7827
7828                        vColl.each(function(viewModel) {
7829                            if (viewModel.model.isAllDay || viewModel.hasMultiDates) {
7830                                ctrlCore.limitRenderRange(start, end, viewModel);
7831                            }
7832                        });
7833                    },
7834
7835                    /**
7836                     * Get max top index value for allday schedules in specific date (YMD)
7837                     * @this Base
7838                     * @param {string} ymd - yyyymmdd formatted value
7839                     * @param {Collection} vAlldayColl - collection of allday schedules
7840                     * @returns {number} max top index value in date
7841                     */
7842                    _getAlldayMaxTopIndexAtYMD: function(ymd, vAlldayColl) {
7843                        var dateMatrix = this.dateMatrix,
7844                            topIndexesInDate = [];
7845                        util.forEach(dateMatrix[ymd], function(cid) {
7846                            vAlldayColl.doWhenHas(cid, function(viewModel) {
7847                                topIndexesInDate.push(viewModel.top);
7848                            });
7849                        });
7850
7851                        if (topIndexesInDate.length > 0) {
7852                            return mmax.apply(null, topIndexesInDate);
7853                        }
7854
7855                        return 0;
7856                    },
7857
7858                    /**
7859                     * Adjust time view model's top index value
7860                     * @this Base
7861                     * @param {Collection} vColl - collection of schedules
7862                     */
7863                    _adjustTimeTopIndex: function(vColl) {
7864                        var ctrlMonth = this.Month;
7865                        var getAlldayMaxTopIndexAtYMD = ctrlMonth._getAlldayMaxTopIndexAtYMD;
7866                        var vAlldayColl = vColl.find(ctrlMonth._onlyAlldayFilter);
7867                        var sortedTimeSchedules = vColl.find(ctrlMonth._onlyTimeFilter).sort(array.compare.schedule.asc);
7868                        var maxIndexInYMD = {};
7869
7870                        sortedTimeSchedules.forEach(function(timeViewModel) {
7871                            var scheduleYMD = datetime.format(timeViewModel.getStarts(), 'YYYYMMDD');
7872                            var alldayMaxTopInYMD = maxIndexInYMD[scheduleYMD];
7873
7874                            if (util.isUndefined(alldayMaxTopInYMD)) {
7875                                alldayMaxTopInYMD = maxIndexInYMD[scheduleYMD] =
7876                                    getAlldayMaxTopIndexAtYMD(scheduleYMD, vAlldayColl);
7877                            }
7878                            maxIndexInYMD[scheduleYMD] = timeViewModel.top =
7879                                (alldayMaxTopInYMD + 1);
7880                        });
7881                    },
7882
7883                    /**
7884                     * Adjust time view model's top index value
7885                     * @this Base
7886                     * @param {Collection} vColl - collection of schedules
7887                     */
7888                    _stackTimeFromTop: function(vColl) {
7889                        var ctrlMonth = this.Month;
7890                        var vAlldayColl = vColl.find(ctrlMonth._onlyAlldayFilter);
7891                        var sortedTimeSchedules = vColl.find(ctrlMonth._onlyTimeFilter).sort(array.compare.schedule.asc);
7892                        var indiceInYMD = {};
7893                        var dateMatrix = this.dateMatrix;
7894
7895                        sortedTimeSchedules.forEach(function(timeViewModel) {
7896                            var scheduleYMD = datetime.format(timeViewModel.getStarts(), 'YYYYMMDD');
7897                            var topArrayInYMD = indiceInYMD[scheduleYMD];
7898                            var maxTopInYMD;
7899                            var i;
7900
7901                            if (util.isUndefined(topArrayInYMD)) {
7902                                topArrayInYMD = indiceInYMD[scheduleYMD] = [];
7903                                util.forEach(dateMatrix[scheduleYMD], function(cid) {
7904                                    vAlldayColl.doWhenHas(cid, function(viewModel) {
7905                                        topArrayInYMD.push(viewModel.top);
7906                                    });
7907                                });
7908                            }
7909
7910                            if (util.inArray(timeViewModel.top, topArrayInYMD) >= 0) {
7911                                maxTopInYMD = mmax.apply(null, topArrayInYMD) + 1;
7912                                for (i = 1; i <= maxTopInYMD; i += 1) {
7913                                    timeViewModel.top = i;
7914                                    if (util.inArray(timeViewModel.top, topArrayInYMD) < 0) {
7915                                        break;
7916                                    }
7917                                }
7918                            }
7919                            topArrayInYMD.push(timeViewModel.top);
7920                        });
7921                    },
7922
7923                    /**
7924                     * Convert multi-date time schedule to all-day schedule
7925                     * @this Base
7926                     * @param {Collection} vColl - view model collection
7927                     * property.
7928                     */
7929                    _addMultiDatesInfo: function(vColl) {
7930                        vColl.each(function(viewModel) {
7931                            var model = viewModel.model;
7932                            var start = model.getStarts();
7933                            var end = model.getEnds();
7934
7935                            viewModel.hasMultiDates = !datetime.isSameDate(start, end);
7936
7937                            if (!model.isAllDay && viewModel.hasMultiDates) {
7938                                viewModel.renderStarts = datetime.start(start);
7939                                viewModel.renderEnds = datetime.convertStartDayToLastDay(end);
7940                            }
7941                        });
7942                    },
7943
7944                    /**
7945                     * Find schedule and get view model for specific month
7946                     * @this Base
7947                     * @param {TZDate} start - start date to find schedules
7948                     * @param {TZDate} end - end date to find schedules
7949                     * @param {function[]} [andFilters] - optional filters to applying search query
7950                     * @param {boolean} [alldayFirstMode=false] if true, time schedule is lower than all-day schedule. Or stack schedules from the top.
7951                     * @returns {object} view model data
7952                     */
7953                    findByDateRange: function(start, end, andFilters, alldayFirstMode) {
7954                        var ctrlCore = this.Core,
7955                            ctrlMonth = this.Month,
7956                            filter = ctrlCore.getScheduleInDateRangeFilter(start, end),
7957                            coll, vColl, vList,
7958                            collisionGroup,
7959                            matrices;
7960
7961                        alldayFirstMode = alldayFirstMode || false;
7962                        andFilters = andFilters || [];
7963                        filter = Collection.and.apply(null, [filter].concat(andFilters));
7964
7965                        coll = this.schedules.find(filter);
7966                        vColl = ctrlCore.convertToViewModel(coll);
7967                        ctrlMonth._addMultiDatesInfo(vColl);
7968                        ctrlMonth._adjustRenderRange(start, end, vColl);
7969                        vList = vColl.sort(array.compare.schedule.asc);
7970
7971                        collisionGroup = ctrlCore.getCollisionGroup(vList);
7972                        matrices = ctrlCore.getMatrices(vColl, collisionGroup);
7973                        ctrlCore.positionViewModels(start, end, matrices, ctrlMonth._weightTopValue);
7974                        if (alldayFirstMode) {
7975                            ctrlMonth._adjustTimeTopIndex(vColl);
7976                        } else {
7977                            ctrlMonth._stackTimeFromTop(vColl);
7978                        }
7979
7980                        return matrices;
7981                    }
7982                };
7983
7984                module.exports = Month;
7985
7986
7987                /***/ }),
7988
7989            
7989/***/ "./src/js/controller/viewMixin/week.js":
7990            /*!*********************************************!*\
7991  !*** ./src/js/controller/viewMixin/week.js ***!
7992  \*********************************************/
7993            /*! no static exports found */
7994            /***/ (function(module, exports, __webpack_require__) {
7995
7996                "use strict";
7997                /* eslint no-shadow: 0 */
7998                /**
7999                 * @fileoverview Controller mixin modules for day views.
8000                 * @author NHN FE Development Lab <[email protected]>
8001                 */
8002
8003
8004                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
8005
8006                var Collection = __webpack_require__(/*! ../../common/collection */ "./src/js/common/collection.js");
8007                var array = __webpack_require__(/*! ../../common/array */ "./src/js/common/array.js");
8008                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
8009                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
8010
8011                var SCHEDULE_MIN_DURATION = datetime.MILLISECONDS_SCHEDULE_MIN_DURATION;
8012
8013                /**
8014                 * @mixin Base.Week
8015                 */
8016                var Week = {
8017                    /**********
8018                     * TIME GRID VIEW
8019                     **********/
8020
8021                    /**
8022                     * Make array with start and end times on schedules.
8023                     * @this Base.Week
8024                     * @param {array[]} matrix - matrix from controller.
8025                     * @returns {array[]} starttime, endtime array (exclude first row's schedules)
8026                     */
8027                    generateTimeArrayInRow: function(matrix) {
8028                        var row,
8029                            col,
8030                            schedule,
8031                            start,
8032                            end,
8033                            map = [],
8034                            cursor = [],
8035                            maxColLen = Math.max.apply(null, util.map(matrix, function(col) {
8036                                return col.length;
8037                            }));
8038
8039                        for (col = 1; col < maxColLen; col += 1) {
8040                            row = 0;
8041                            schedule = util.pick(matrix, row, col);
8042
8043                            while (schedule) {
8044                                start = schedule.getStarts().getTime() - datetime.millisecondsFrom('minutes', schedule.valueOf().goingDuration);
8045                                end = schedule.getEnds().getTime() + datetime.millisecondsFrom('minutes', schedule.valueOf().comingDuration);
8046
8047                                if (Math.abs(end - start) < SCHEDULE_MIN_DURATION) {
8048                                    end += SCHEDULE_MIN_DURATION;
8049                                }
8050
8051                                cursor.push([start, end]);
8052
8053                                row += 1;
8054                                schedule = util.pick(matrix, row, col);
8055                            }
8056
8057                            map.push(cursor);
8058                            cursor = [];
8059                        }
8060
8061                        return map;
8062                    },
8063
8064                    /**
8065                     * Get collision information from list
8066                     * @this Base
8067                     * @param {array.<number[]>} arr - list to detecting collision. [[start, end], [start, end]]
8068                     * @param {number} start - schedule start time that want to detect collisions.
8069                     * @param {number} end - schedule end time that want to detect collisions.
8070                     * @returns {boolean} target has collide in supplied array?
8071                     */
8072                    hasCollide: function(arr, start, end) {
8073                        var startStart,
8074                            startEnd,
8075                            endStart,
8076                            endEnd,
8077                            getFunc = function(index) {
8078                                return function(block) {
8079                                    return block[index];
8080                                };
8081                            },
8082                            abs = Math.abs,
8083                            compare = array.compare.num.asc,
8084                            hasCollide;
8085
8086                        if (!arr.length) {
8087                            return false;
8088                        }
8089
8090                        startStart = abs(array.bsearch(arr, start, getFunc(0), compare));
8091                        startEnd = abs(array.bsearch(arr, start, getFunc(1), compare));
8092                        endStart = abs(array.bsearch(arr, end, getFunc(0), compare));
8093                        endEnd = abs(array.bsearch(arr, end, getFunc(1), compare));
8094                        hasCollide = !(startStart === startEnd && startEnd === endStart && endStart === endEnd);
8095
8096                        return hasCollide;
8097                    },
8098
8099                    /**
8100                     * Initialize values to viewmodels for detect real collision at rendering phase.
8101                     * @this Base
8102                     * @param {array[]} matrices - Matrix data.
8103                     */
8104                    getCollides: function(matrices) {
8105                        util.forEachArray(matrices, function(matrix) {
8106                            var binaryMap,
8107                                maxRowLength;
8108
8109                            binaryMap = Week.generateTimeArrayInRow(matrix);
8110                            maxRowLength = Math.max.apply(null, util.map(matrix, function(row) {
8111                                return row.length;
8112                            }));
8113
8114                            util.forEachArray(matrix, function(row) {
8115                                util.forEachArray(row, function(viewModel, col) {
8116                                    var startTime,
8117                                        endTime,
8118                                        hasCollide,
8119                                        i;
8120
8121                                    if (!viewModel) {
8122                                        return;
8123                                    }
8124
8125                                    startTime = viewModel.getStarts().getTime();
8126                                    endTime = viewModel.getEnds().getTime();
8127
8128                                    if (Math.abs(endTime - startTime) < SCHEDULE_MIN_DURATION) {
8129                                        endTime += SCHEDULE_MIN_DURATION;
8130                                    }
8131
8132                                    startTime -= datetime.millisecondsFrom('minutes', viewModel.valueOf().goingDuration);
8133                                    endTime += datetime.millisecondsFrom('minutes', viewModel.valueOf().comingDuration);
8134
8135                                    endTime -= 1;
8136
8137                                    for (i = (col + 1); i < maxRowLength; i += 1) {
8138                                        hasCollide = Week.hasCollide(binaryMap[i - 1], startTime, endTime);
8139
8140                                        if (hasCollide) {
8141                                            viewModel.hasCollide = true;
8142                                            break;
8143                                        }
8144
8145                                        viewModel.extraSpace += 1;
8146                                    }
8147                                });
8148                            });
8149                        });
8150                    },
8151
8152                    /**
8153                     * create view model for time view part
8154                     * @this Base
8155                     * @param {Date} start - start date.
8156                     * @param {Date} end - end date.
8157                     * @param {Collection} time - view model collection.
8158                     * @param {number} hourStart - start hour to be shown
8159                     * @param {number} hourEnd - end hour to be shown
8160                     * @returns {object} view model for time part.
8161                     */
8162                    getViewModelForTimeView: function(start, end, time, hourStart, hourEnd) {
8163                        var self = this,
8164                            ymdSplitted = this.splitScheduleByDateRange(start, end, time),
8165                            result = {};
8166
8167                        var _getViewModel = Week._makeGetViewModelFuncForTimeView(hourStart, hourEnd);
8168
8169                        util.forEach(ymdSplitted, function(collection, ymd) {
8170                            var viewModels = _getViewModel(collection);
8171                            var collisionGroups, matrices;
8172
8173                            collisionGroups = self.Core.getCollisionGroup(viewModels);
8174                            matrices = self.Core.getMatrices(collection, collisionGroups);
8175                            self.Week.getCollides(matrices);
8176
8177                            result[ymd] = matrices;
8178                        });
8179
8180                        return result;
8181                    },
8182
8183                    /**
8184                     * make view model function depending on start and end hour
8185                     * if time view option has start or end hour condition
8186                     * it add filter
8187                     * @param {number} hourStart - start hour to be shown
8188                     * @param {number} hourEnd - end hour to be shown
8189                     * @returns {function} function
8190                     */
8191                    _makeGetViewModelFuncForTimeView: function(hourStart, hourEnd) {
8192                        if (hourStart === 0 && hourEnd === 24) {
8193                            return function(collection) {
8194                                return collection.sort(array.compare.schedule.asc);
8195                            };
8196                        }
8197
8198                        return function(collection) {
8199                            return collection.find(Week._makeHourRangeFilter(hourStart, hourEnd))
8200                                .sort(array.compare.schedule.asc);
8201                        };
8202                    },
8203
8204                    /**
8205                     * make a filter function that is not included range of start, end hour
8206                     * @param {number} hStart - hour start
8207                     * @param {number} hEnd - hour end
8208                     * @returns {function} - filtering function
8209                     */
8210                    _makeHourRangeFilter: function(hStart, hEnd) {
8211                        return function(schedule) {
8212                            var ownHourStart = schedule.model.start;
8213                            var ownHourEnd = schedule.model.end;
8214                            var yyyy = ownHourStart.getFullYear();
8215                            var mm = ownHourStart.getMonth();
8216                            var dd = ownHourStart.getDate();
8217
8218                            var hourStart = new TZDate(yyyy, mm, dd).setHours(hStart);
8219                            var hourEnd = new TZDate(yyyy, mm, dd).setHours(hEnd);
8220
8221                            return (ownHourStart >= hourStart && ownHourStart < hourEnd) ||
8222                                (ownHourEnd >
8222 hourStart && ownHourEnd <= hourEnd) ||
8223                                (ownHourStart < hourStart && ownHourEnd > hourStart) ||
8224                                (ownHourEnd > hourEnd && ownHourStart < hourEnd);
8225                        };
8226                    },
8227
8228                    /**********
8229                     * ALLDAY VIEW
8230                     **********/
8231
8232                    /**
8233                     * Set hasMultiDates flag to true and set date ranges for rendering
8234                     * @this Base
8235                     * @param {Collection} vColl - view model collection
8236                     */
8237                    _addMultiDatesInfo: function(vColl) {
8238                        vColl.each(function(viewModel) {
8239                            var model = viewModel.model;
8240                            viewModel.hasMultiDates = true;
8241                            viewModel.renderStarts = datetime.start(model.getStarts());
8242                            viewModel.renderEnds = datetime.end(model.getEnds());
8243                        });
8244                    },
8245
8246                    /**
8247                     * create view model for allday view part
8248                     * @this Base
8249                     * @param {Date} start start date.
8250                     * @param {Date} end end date.
8251                     * @param {Collection} viewModelColl - allday schedule viewModel viewModels.
8252                     * @returns {object} allday viewModel.
8253                     */
8254                    getViewModelForAlldayView: function(start, end, viewModelColl) {
8255                        var ctrlCore = this.Core,
8256                            ctrlWeek = this.Week,
8257                            viewModels,
8258                            collisionGroups,
8259                            matrices;
8260
8261                        if (!viewModelColl || !viewModelColl.length) {
8262                            return [];
8263                        }
8264
8265                        ctrlWeek._addMultiDatesInfo(viewModelColl);
8266                        ctrlCore.limitRenderRange(start, end, viewModelColl);
8267
8268                        viewModels = viewModelColl.sort(array.compare.schedule.asc);
8269                        collisionGroups = ctrlCore.getCollisionGroup(viewModels);
8270
8271                        matrices = ctrlCore.getMatrices(viewModelColl, collisionGroups);
8272                        ctrlCore.positionViewModels(start, end, matrices);
8273
8274                        return matrices;
8275                    },
8276
8277                    /**********
8278                     * READ
8279                     **********/
8280
8281                    /**
8282                     * Populate schedules in date range.
8283                     * @this Base
8284                     * @param {Date} start start date.
8285                     * @param {Date} end end date.
8286                     * @param {Array.<object>} panels - schedule panels like 'milestone', 'task', 'allday', 'time'
8287                     * @param {function[]} [andFilters] - optional filters to applying search query
8288                     * @param {Object} options - week view options
8289                     * @returns {object} schedules grouped by dates.
8290                     */
8291                    findByDateRange: function(start, end, panels, andFilters, options) {
8292                        var ctrlCore = this.Core,
8293                            ctrlWeek = this.Week,
8294                            filter = ctrlCore.getScheduleInDateRangeFilter(start, end),
8295                            scheduleTypes = util.pluck(panels, 'name'),
8296                            hourStart = util.pick(options, 'hourStart'),
8297                            hourEnd = util.pick(options, 'hourEnd'),
8298                            modelColl,
8299                            group;
8300
8301                        andFilters = andFilters || [];
8302                        filter = Collection.and.apply(null, [filter].concat(andFilters));
8303
8304                        modelColl = this.schedules.find(filter);
8305                        modelColl = ctrlCore.convertToViewModel(modelColl);
8306
8307                        group = modelColl.groupBy(scheduleTypes, this.groupFunc);
8308                        util.forEach(panels, function(panel) {
8309                            var name = panel.name;
8310                            if (panel.type === 'daygrid') {
8311                                group[name] = ctrlWeek.getViewModelForAlldayView(start, end, group[name]);
8312                            } else if (panel.type === 'timegrid') {
8313                                group[name] = ctrlWeek.getViewModelForTimeView(start, end, group[name], hourStart, hourEnd);
8314                            }
8315                        });
8316
8317                        return group;
8318                    },
8319
8320                    /* eslint max-nested-callbacks: 0 */
8321                    /**
8322                     * Make exceed date information
8323                     * @param {number} maxCount - exceed schedule count
8324                     * @param {Array} eventsInDateRange  - matrix of ScheduleViewModel
8325                     * @param {Array.<TZDate>} range - date range of one week
8326                     * @returns {object} exceedDate
8327                     */
8328                    getExceedDate: function(maxCount, eventsInDateRange, range) {
8329                        var exceedDate = {};
8330
8331                        util.forEach(range, function(date) {
8332                            var ymd = datetime.format(date, 'YYYYMMDD');
8333                            exceedDate[ymd] = 0;
8334                        });
8335
8336                        util.forEach(eventsInDateRange, function(matrix) {
8337                            util.forEach(matrix, function(column) {
8338                                util.forEach(column, function(viewModel) {
8339                                    var period;
8340                                    if (!viewModel || viewModel.top < maxCount) {
8341                                        return;
8342                                    }
8343
8344                                    period = datetime.range(
8345                                        viewModel.getStarts(),
8346                                        viewModel.getEnds(),
8347                                        datetime.MILLISECONDS_PER_DAY
8348                                    );
8349
8350                                    util.forEach(period, function(date) {
8351                                        var ymd = datetime.format(date, 'YYYYMMDD');
8352                                        exceedDate[ymd] += 1;
8353                                    });
8354                                });
8355                            });
8356                        });
8357
8358                        return exceedDate;
8359                    },
8360
8361                    /**
8362                     * Exclude overflow schedules from matrices
8363                     * @param {array} matrices - The matrices for schedule placing.
8364                     * @param {number} visibleScheduleCount - maximum visible count on panel
8365                     * @returns {array} - The matrices for schedule placing except overflowed schedules.
8366                     */
8367                    excludeExceedSchedules: function(matrices, visibleScheduleCount) {
8368                        return matrices.map(function(matrix) {
8369                            return matrix.map(function(row) {
8370                                if (row.length > visibleScheduleCount) {
8371                                    return row.filter(function(item) {
8372                                        return item.top < visibleScheduleCount;
8373                                    }, this);
8374                                }
8375
8376                                return row;
8377                            }, this);
8378                        }, this);
8379                    }
8380                };
8381
8382                module.exports = Week;
8383
8384
8385                /***/ }),
8386
8387            
8387/***/ "./src/js/factory/calendar.js":
8388            /*!************************************!*\
8389  !*** ./src/js/factory/calendar.js ***!
8390  \************************************/
8391            /*! no static exports found */
8392            /***/ (function(module, exports, __webpack_require__) {
8393
8394                "use strict";
8395                /**
8396                 * @fileoverview Factory module for control all other factory.
8397                 * @author NHN FE Development Lab <[email protected]>
8398                 */
8399
8400
8401                var GA_TRACKING_ID = 'UA-129951699-1';
8402
8403                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet"),
8404                    Handlebars = __webpack_require__(/*! handlebars-template-loader/runtime */ "./node_modules/handlebars-template-loader/runtime/index.js");
8405                var dw = __webpack_require__(/*! ../common/dw */ "./src/js/common/dw.js"),
8406                    datetime = __webpack_require__(/*! ../common/datetime */ "./src/js/common/datetime.js"),
8407                    Layout = __webpack_require__(/*! ../view/layout */ "./src/js/view/layout.js"),
8408                    Drag = __webpack_require__(/*! ../handler/drag */ "./src/js/handler/drag.js"),
8409                    controllerFactory = __webpack_require__(/*! ./controller */ "./src/js/factory/controller.js"),
8410                    weekViewFactory = __webpack_require__(/*! ./weekView */ "./src/js/factory/weekView.js"),
8411                    monthViewFactory = __webpack_require__(/*! ./monthView */ "./src/js/factory/monthView.js"),
8412                    TZDate = __webpack_require__(/*! ../common/timezone */ "./src/js/common/timezone.js").Date,
8413                    config = __webpack_require__(/*! ../config */ "./src/js/config.js"),
8414                    timezone = __webpack_require__(/*! ../common/timezone */ "./src/js/common/timezone.js"),
8415                    reqAnimFrame = __webpack_require__(/*! ../common/reqAnimFrame */ "./src/js/common/reqAnimFrame.js");
8416
8417                var mmin = Math.min;
8418
8419                /**
8420                 * Schedule information
8421                 * @typedef {object} Schedule
8422                 * @property {string} [id] - The unique schedule id depends on calendar id
8423                 * @property {string} calendarId - The unique calendar id
8424                 * @property {string} [title] - The schedule title
8425                 * @property {string} [body] - The schedule body text which is text/plain
8426                 * @property {string|TZDate} [start] - The start time. It's 'string' for input. It's 'TZDate' for output like event handler.
8427                 * @property {string|TZDate} [end] - The end time. It's 'string' for input. It's 'TZDate' for output like event handler.
8428                 * @property {number} [goingDuration] - The travel time: Going duration minutes
8429                 * @property {number} [comingDuration] - The travel time: Coming duration minutes
8430                 * @property {boolean} [isAllDay] - The all day schedule
8431                 * @property {string} [category] - The schedule type('milestone', 'task', allday', 'time')
8432                 * @property {string} [dueDateClass] - The task schedule type string
8433                 *                                   (any string value is ok and mandatory if category is 'task')
8434                 * @property {string} [location] - The location
8435                 * @property {Array.<string>} [attendees] - The attendees
8436                 * @property {string} [recurrenceRule] - The recurrence rule
8437                 * @property {boolean} [isPending] - The in progress flag to do something like network job(The schedule will be transparent.)
8438                 * @property {boolean} [isFocused] - The focused schedule flag
8439                 * @property {boolean} [isVisible] - The schedule visibility flag
8440                 * @property {boolean} [isReadOnly] - The schedule read-only flag
8441                 * @property {boolean} [isPrivate] - The private schedule
8442                 * @property {string} [color] - The schedule text color
8443                 * @property {string} [bgColor] - The schedule background color
8444                 * @property {string} [dragBgColor] - The schedule background color when dragging it
8445                 * @property {string} [borderColor] - The schedule left border color
8446                 * @property {string} [customStyle] - The schedule's custom css class
8447                 * @property {any} [raw] - The user data
8448                 * @property {string} [state] - The schedule's state ('busy', 'free')
8449                 */
8450
8451                /**
8452                 * Template functions to support customer renderer
8453                 * @typedef {object} Template
8454                 * @property {function} [milestoneTitle] - The milestone title(at left column) template function
8455                 * @property {function} [milestone] - The milestone template function
8456                 * @property {function} [taskTitle] - The task title(at left column) template function
8457                 * @property {function} [task] - The task template function
8458                 * @property {function} [alldayTitle] - The allday title(at left column) template function
8459                 * @property {function} [allday] - The allday template function
8460                 * @property {function} [time] - The time template function
8461                 * @property {function} [goingDuration] - The travel time(going duration) template function
8462                 * @property {function} [comingDuration] - The travel time(coming duration) template function
8463                 * @property {function} [monthMoreTitleDate] - The month more layer title template function
8464                 * @property {function} [monthMoreClose] - The month more layer close button template function
8465                 * @property {function} [monthGridHeader] - The month grid header(date, decorator, title) template function
8466                 * @property {function} [monthGridHeaderExceed] - The month grid header(exceed schedule count) template function
8467                 * @property {function} [monthGridFooter] - The month grid footer(date, decorator, title) template function
8468                 * @property {function} [monthGridFooterExceed] - The month grid footer(exceed schedule count) template function
8469                 * @property {function} [monthDayname] - The monthly dayname template function
8470                 * @property {function} [weekDayname] - The weekly dayname template function
8471                 * @property {function} [weekGridFooterExceed] - The week/day grid footer(exceed schedule count) template function
8472                 * @property {function} [dayGridTitle] - The week/day grid title template function(e.g. milestone, task, allday)
8473                 * @property {function} [schedule] - The week/day schedule template function(When the schedule category attribute is milestone, task, or all day)
8474                 * @property {function} [collapseBtnTitle] - The week/day (exceed schedule more view) collapse button title template function
8475                 * @property {function} [timezoneDisplayLabel] - The timezone display label template function in time grid
8476                 * @property {function} [timegridDisplayPrimayTime] - Deprecated: use 'timegridDisplayPrimaryTime'
8477                 * @property {function} [timegridDisplayPrimaryTime] - The display label template function of primary timezone in time grid
8478                 * @property {function} [timegridDisplayTime] - The display time template function in time grid
8479                 * @property {function} [timegridCurrentTime] - The current time template function in time grid
8480                 * @property {function} [popupIsAllDay] - The all day checkbox label text template function in the default creation popup
8481                 * @property {function} [popupStateFree] - The free option template function in the state select box of the default creation popup
8482                 * @property {function} [popupStateBusy] - The busy option template function in the state select box of the default creation popup
8483                 * @property {function} [titlePlaceholder] - The title input placeholder text template function in the default creation popup
8484                 * @property {function} [locationPlaceholder] - The location input placeholder text template function in the default creation popup
8485                 * @property {function} [startDatePlaceholder] - The start date input placeholder text template function in the default creation popup
8486                 * @property {function}
8486 [endDatePlaceholder] - The end date input placeholder text template function in the default creation popup
8487                 * @property {function} [popupSave] - The 'Save' button text template function in the default creation popup
8488                 * @property {function} [popupUpdate] - The 'Update' button text template function in the default creation popup when in edit mode
8489                 * @property {function} [popupDetailDate] - The schedule date information's template function on the default detail popup
8490                 * @property {function} [popupDetailLocation] - The schedule location text information's template function on the default detail popup
8491                 * @property {function} [popupDetailUser] - The schedule user text information's template function on the default detail popup
8492                 * @property {function} [popupDetailState] - The schedule state(busy or free) text information's template function on the default detail popup
8493                 * @property {function} [popupDetailRepeat] - The schedule repeat information's template function on the default detail popup
8494                 * @property {function} [popupDetailBody] - The schedule body text information's template function on the default detail popup
8495                 * @property {function} [popupEdit] - The 'Edit' button text template function on the default detail popup
8496                 * @property {function} [popupDelete] - The 'Delete' button text template function on the default detail popup
8497                 * @example
8498                 * var calendar = new tui.Calendar(document.getElementById('calendar'), {
8499                 *     ...
8500                 *     template: {
8501                 *         milestone: function(schedule) {
8502                 *             return '<span class="calendar-font-icon ic-milestone-b"></span> <span style="background-color: ' + schedule.bgColor + '">' + schedule.title + '</span>';
8503                 *         },
8504                 *         milestoneTitle: function() {
8505                 *             return '<span class="tui-full-calendar-left-content">MILESTONE</span>';
8506                 *         },
8507                 *         task: function(schedule) {
8508                 *             return '#' + schedule.title;
8509                 *         },
8510                 *         taskTitle: function() {
8511                 *             return '<span class="tui-full-calendar-left-content">TASK</span>';
8512                 *         },
8513                 *         allday: function(schedule) {
8514                 *             return getTimeTemplate(schedule, true);
8515                 *         },
8516                 *         alldayTitle: function() {
8517                 *             return '<span class="tui-full-calendar-left-content">ALL DAY</span>';
8518                 *         },
8519                 *         time: function(schedule) {
8520                 *             return '<strong>' + moment(schedule.start.getTime()).format('HH:mm') + '</strong> ' + schedule.title;
8521                 *         },
8522                 *         goingDuration: function(schedule) {
8523                 *             return '<span class="calendar-icon ic-travel-time"></span>' + schedule.goingDuration + 'min.';
8524                 *         },
8525                 *         comingDuration: function(schedule) {
8526                 *             return '<span class="calendar-icon ic-travel-time"></span>' + schedule.comingDuration + 'min.';
8527                 *         },
8528                 *         monthMoreTitleDate: function(date, dayname) {
8529                 *             var day = date.split('.')[2];
8530                 *
8531                 *             return '<span class="tui-full-calendar-month-more-title-day">' + day + '</span> <span class="tui-full-calendar-month-more-title-day-label">' + dayname + '</span>';
8532                 *         },
8533                 *         monthMoreClose: function() {
8534                 *             return '<span class="tui-full-calendar-icon tui-full-calendar-ic-close"></span>';
8535                 *         },
8536                 *         monthGridHeader: function(dayModel) {
8537                 *             var date = parseInt(dayModel.date.split('-')[2], 10);
8538                 *             var classNames = ['tui-full-calendar-weekday-grid-date '];
8539                 *
8540                 *             if (dayModel.isToday) {
8541                 *                 classNames.push('tui-full-calendar-weekday-grid-date-decorator');
8542                 *             }
8543                 *
8544                 *             return '<span class="' + classNames.join(' ') + '">' + date + '</span>';
8545                 *         },
8546                 *         monthGridHeaderExceed: function(hiddenSchedules) {
8547                 *             return '<span class="weekday-grid-more-schedules">+' + hiddenSchedules + '</span>';
8548                 *         },
8549                 *         monthGridFooter: function() {
8550                 *             return '';
8551                 *         },
8552                 *         monthGridFooterExceed: function(hiddenSchedules) {
8553                 *             return '';
8554                 *         },
8555                 *         monthDayname: function(model) {
8556                 *             return (model.label).toString().toLocaleUpperCase();
8557                 *         },
8558                 *         weekDayname: function(model) {
8559                 *             return '<span class="tui-full-calendar-dayname-date">' + model.date + '</span>&nbsp;&nbsp;<span class="tui-full-calendar-dayname-name">' + model.dayName + '</span>';
8560                 *         },
8561                 *         weekGridFooterExceed: function(hiddenSchedules) {
8562                 *             return '+' + hiddenSchedules;
8563                 *         },
8564                 *         dayGridTitle: function(viewName) {
8565                 *
8566                 *             // use another functions instead of 'dayGridTitle'
8567                 *             // milestoneTitle: function() {...}
8568                 *             // taskTitle: function() {...}
8569                 *             // alldayTitle: function() {...}
8570                 *
8571                 *             var title = '';
8572                 *             switch(viewName) {
8573                 *                 case 'milestone':
8574                 *                     title = '<span class="tui-full-calendar-left-content">MILESTONE</span>';
8575                 *                     break;
8576                 *                 case 'task':
8577                 *                     title = '<span class="tui-full-calendar-left-content">TASK</span>';
8578                 *                     break;
8579                 *                 case 'allday':
8580                 *                     title = '<span class="tui-full-calendar-left-content">ALL DAY</span>';
8581                 *                     break;
8582                 *             }
8583                 *
8584                 *             return title;
8585                 *         },
8586                 *         schedule: function(schedule) {
8587                 *
8588                 *             // use another functions instead of 'schedule'
8589                 *             // milestone: function() {...}
8590                 *             // task: function() {...}
8591                 *             // allday: function() {...}
8592                 *
8593                 *             var tpl;
8594                 *
8595                 *             switch(category) {
8596                 *                 case 'milestone':
8597                 *                     tpl = '<span class="calendar-font-icon ic-milestone-b"></span> <span style="background-color: ' + schedule.bgColor + '">' + schedule.title + '</span>';
8598                 *                     break;
8599                 *                 case 'task':
8600                 *                     tpl = '#' + schedule.title;
8601                 *                     break;
8602                 *                 case 'allday':
8603                 *                     tpl = getTimeTemplate(schedule, true);
8604                 *                     break;
8605                 *             }
8606                 *
8607                 *             return tpl;
8608                 *         },
8609                 *         collapseBtnTitle: function() {
8610                 *             return '<span class="tui-full-calendar-icon tui-full-calendar-ic-arrow-solid-top"></span>';
8611                 *         },
8612                 *         timezoneDisplayLabel: function(timezoneOffset, displayLabel) {
8613                 *             var gmt, hour, minutes;
8614                 *
8615                 *             if (!displayLabel) {
8616                 *                 gmt = timezoneOffset < 0 ? '-' : '+';
8617                 *                 hour = Math.abs(parseInt(timezoneOffset / 60, 10));
8618                 *                 minutes = Math.abs(timezoneOffset % 60);
8619                 *                 displayLabel = gmt + getPadStart(hour) + ':' + getPadStart(minutes);
8620                 *             }
8621                 *
8622                 *             return displayLabel;
8623                 *         },
8624                 *         timegridDisplayPrimayTime: function(time) {
8625                 *             // will be deprecated. use 'timegridDisplayPrimaryTime'
8626                 *             var meridiem = 'am';
8627                 *             var hour = time.hour;
8628                 *
8629                 *             if (time.hour > 12) {
8630                 *                 meridiem = 'pm';
8631                 *                 hour = time.hour - 12;
8632                 *             }
8633                 *
8634                 *             return hour + ' ' + meridiem;
8635                 *         },
8636                 *         timegridDisplayPrimaryTime: function(time) {
8637                 *             var meridiem = 'am';
8638                 *             var hour = time.hour;
8639                 *
8640                 *             if (time.hour > 12) {
8641                 *                 meridiem = 'pm';
8642                 *                 hour = time.hour - 12;
8643                 *             }
8644                 *
8645                 *             return hour + ' ' + meridiem;
8646                 *         },
8647                 *         timegridDisplayTime: function(time) {
8648                 *             return getPadStart(time.hour) + ':' + getPadStart(time.hour);
8649                 *         },
8650                 *         timegridCurrentTime: function(timezone) {
8651                 *             var templates = [];
8652                 *
8653                 *             if (timezone.dateDifference) {
8654                 *                 templates.push('[' + timezone.dateDifferenceSign + timezone.dateDifference + ']<br>');
8655                 *             }
8656                 *
8657                 *             templates.push(moment(timezone.hourmarker).format('HH:mm a'));
8658                 *
8659                 *             return templates.join('');
8660                 *         },
8661                 *         popupIsAllDay: function() {
8662                 *             return 'All Day';
8663                 *         },
8664                 *         popupStateFree: function() {
8665                 *             return 'Free';
8666                 *         },
8667                 *         popupStateBusy: function() {
8668                 *             return 'Busy';
8669                 *         },
8670                 *         titlePlaceholder: function() {
8671                 *             return 'Subject';
8672                 *         },
8673                 *         locationPlaceholder: function() {
8674                 *             return 'Location';
8675                 *         },
8676                 *         startDatePlaceholder: function() {
8677                 *             return 'Start date';
8678                 *         },
8679                 *         endDatePlaceholder: function() {
8680                 *             return 'End date';
8681                 *         },
8682                 *         popupSave: function() {
8683                 *             return 'Save';
8684                 *         },
8685                 *         popupUpdate: function() {
8686                 *             return 'Update';
8687                 *         },
8688                 *         popupDetailDate: function(isAllDay, start, end) {
8689                 *             var isSameDate = moment(start).isSame(end);
8690                 *             var endFormat = (isSameDate ? '' : 'YYYY.MM.DD ') + 'hh:mm a';
8691                 *
8692                 *             if (isAllDay) {
8693                 *                 return moment(start).format('YYYY.MM.DD') + (isSameDate ? '' : ' - ' + moment(end).format('YYYY.MM.DD'));
8694                 *             }
8695                 *
8696                 *             return (moment(start).format('YYYY.MM.DD hh:mm a') + ' - ' + moment(end).format(endFormat));
8697                 *         },
8698                 *         popupDetailLocation: function(schedule) {
8699                 *             return 'Location : ' + schedule.location;
8700                 *         },
8701                 *         popupDetailUser: function(schedule) {
8702                 *             return 'User : ' + (schedule.attendees || []).join(', ');
8703                 *         },
8704                 *         popupDetailState: function(schedule) {
8705                 *             return 'State : ' + schedule.state || 'Busy';
8706                 *         },
8707                 *         popupDetailRepeat: function(schedule) {
8708                 *             return 'Repeat : ' + schedule.recurrenceRule;
8709                 *         },
8710                 *         popupDetailBody: function(schedule) {
8711                 *             return 'Body : ' + schedule.body;
8712                 *         },
8713                 *         popupEdit: function() {
8714                 *             return 'Edit';
8715                 *         },
8716                 *         popupDelete: function() {
8717                 *             return 'Delete';
8718                 *         }
8719                 *     }
8720                 * }
8721                 */
8722
8723                /**
8724                 * Options for daily, weekly view.
8725                 * @typedef {object} WeekOptions
8726                 * @property {number}
8726 [startDayOfWeek=0] - The start day of week,
8727                 * @property {Array.<string>} [daynames] - The day names in weekly and daily. Default values are ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
8728                 * @property {boolean} [narrowWeekend=false] - Make weekend column narrow(1/2 width)
8729                 * @property {boolean} [workweek=false] - Show only 5 days except for weekend
8730                 * @property {boolean} [showTimezoneCollapseButton=false] - Show a collapse button to close multiple timezones
8731                 * @property {boolean} [timezonesCollapsed=false] - An initial multiple timezones collapsed state
8732                 * @property {number} [hourStart=0] - Can limit of render hour start.
8733                 * @property {number} [hourEnd=24] - Can limit of render hour end.
8734                 */
8735
8736                /**
8737                 * Options for monthly view.
8738                 * @typedef {object} MonthOptions
8739                 * @property {Array.<string>} [daynames] - The day names in monthly. Default values are ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
8740                 * @property {number} [startDayOfWeek=0] - The start day of week
8741                 * @property {boolean} [narrowWeekend=false] - Make weekend column narrow(1/2 width)
8742                 * @property {number} [visibleWeeksCount=6] - The visible week count in monthly(0 or null are same with 6)
8743                 * @property {boolean} [isAlways6Week=true] - Always show 6 weeks. If false, show 5 weeks or 6 weeks based on the month.
8744                 * @property {boolean} [workweek=false] - Show only 5 days except for weekend
8745                 * @property {number} [visibleScheduleCount] - The visible schedule count in monthly grid
8746                 * @property {object} [moreLayerSize] - The more layer size
8747                 * @property {object} [moreLayerSize.width=null] - The css width value(px, 'auto').
8748                 *                                                  The default value 'null' is to fit a grid cell.
8749                 * @property {object} [moreLayerSize.height=null] - The css height value(px, 'auto').
8750                 *                                                   The default value 'null' is to fit a grid cell.
8751                 * @property {object} [grid] - The grid's header and footer information
8752                 *  @property {object} [grid.header] - The grid's header informatioin
8753                 *   @property {number} [grid.header.height=34] - The grid's header height
8754                 *  @property {object} [grid.footer] - The grid's footer informatioin
8755                 *   @property {number} [grid.footer.height=34] - The grid's footer height
8756                 * @property {function} [scheduleFilter=null] - The filter schedules on month view. A parameter is {Schedule} object.
8757                 */
8758
8759                /**
8760                 * @typedef {object} CalendarColor
8761                 * @property {string} [color] - The calendar color
8762                 * @property {string} [bgColor] - The calendar background color
8763                 * @property {string} [borderColor] - The calendar left border color
8764                 * @property {string} [dragBgColor] - The Background color displayed when you drag a calendar's schedule
8765                 */
8766
8767                /**
8768                 * @typedef {object} Timezone
8769                 * @property {number} [timezoneOffset] - The minutes for your timezone offset. If null, use the browser's timezone. Refer to Date.prototype.getTimezoneOffset()
8770                 * @property {string} [displayLabel] -  The display label of your timezone at weekly/daily view(e.g. 'GMT+09:00')
8771                 * @property {string} [tooltip] -  The tooltip(e.g. 'Seoul')
8772                 * @example
8773                 * var cal = new Calendar('#calendar', {
8774                 *  timezones: [{
8775                 *      timezoneOffset: 540,
8776                 *      displayLabel: 'GMT+09:00',
8777                 *      tooltip: 'Seoul'
8778                 *  }, {
8779                 *      timezoneOffset: -420,
8780                 *      displayLabel: 'GMT-08:00',
8781                 *      tooltip: 'Los Angeles'
8782                 *  }]
8783                 * });
8784                 */
8785
8786                /**
8787                 * @typedef {object} CalendarProps
8788                 * @property {string|number} id - The calendar id
8789                 * @property {string} name - The calendar name
8790                 * @property {string} color - The text color when schedule is displayed
8791                 * @property {string} bgColor - The background color schedule is displayed
8792                 * @property {string} borderColor - The color of left border or bullet point when schedule is displayed
8793                 * @property {string} dragBgColor - The background color when schedule dragging
8794                 * @example
8795                 * var cal = new Calendar('#calendar', {
8796                 *   ...
8797                 *   calendars: [
8798                 *     {
8799                 *       id: '1',
8800                 *       name: 'My Calendar',
8801                 *       color: '#ffffff',
8802                 *       bgColor: '#9e5fff',
8803                 *       dragBgColor: '#9e5fff',
8804                 *       borderColor: '#9e5fff'
8805                 *     },
8806                 *     {
8807                 *       id: '2',
8808                 *       name: 'Company',
8809                 *       color: '#00a9ff',
8810                 *       bgColor: '#00a9ff',
8811                 *       dragBgColor: '#00a9ff',
8812                 *       borderColor: '#00a9ff'
8813                 *     },
8814                 *   ]
8815                 * });
8816                 */
8817
8818                /**
8819                 * @typedef {object} Options - Calendar option object
8820                 * @property {string} [defaultView='week'] - Default view of calendar. The default value is 'week'.
8821                 * @property {boolean|Array.<string>} [taskView=true] - Show the milestone and task in weekly, daily view. The default value is true. If the value is array, it can be &#91;'milestone', 'task'&#93;.
8822                 * @property {boolean|Array.<string>} [scheduleView=true] - Show the all day and time grid in weekly, daily view. The default value is false. If the value is array, it can be &#91;'allday', 'time'&#93;.
8823                 * @property {themeConfig} [theme=themeConfig] - {@link themeConfig} for custom style.
8824                 * @property {Template} [template={}] - {@link Template} for further information
8825                 * @property {WeekOptions} [week={}] - {@link WeekOptions} for week view
8826                 * @property {MonthOptions} [month={}] - {@link MonthOptions} for month view
8827                 * @property {Array.<CalendarProps>} [calendars=[]] - {@link CalendarProps} List that can be used to add new schedule. The default value is [].
8828                 * @property {boolean} [useCreationPopup=false] - Whether use default creation popup or not. The default value is false.
8829                 * @property {boolean}
8829 [useDetailPopup=false] - Whether use default detail popup or not. The default value is false.
8830                 * @property {Array.<Timezone>} [timezones] - {@link Timezone} array.
8831                 *  The first Timezone element is primary and can override Calendar#setTimezoneOffset function
8832                 *  The rest timezone elements are shown in left timegrid of weekly/daily view
8833                 * @property {boolean} [disableDblClick=false] - Disable double click to create a schedule. The default value is false.
8834                 * @property {boolean} [disableClick=false] - Disable click to create a schedule. The default value is false.
8835                 * @property {boolean} [isReadOnly=false] - {@link Calendar} is read-only mode and a user can't create and modify any schedule. The default value is false.
8836                 * @property {boolean} [usageStatistics=true] - Let us know the hostname. If you don't want to send the hostname, please set to false.
8837                 */
8838
8839                /**
8840                 * {@link https://nhn.github.io/tui.code-snippet/latest/tui.util.CustomEvents.html CustomEvents} document at {@link https://github.com/nhn/tui.code-snippet tui-code-snippet}
8841                 * @typedef {class} CustomEvents
8842                 */
8843
8844                /**
8845                 * @typedef {object} TimeCreationGuide - Time creation guide instance to present selected time period
8846                 * @property {HTMLElement} guideElement - Guide element
8847                 * @property {Object.<string, HTMLElement>} guideElements - Map by key. It can be used in monthly view
8848                 * @property {function} clearGuideElement - Hide the creation guide
8849                 * @example
8850                 * calendar.on('beforeCreateSchedule', function(event) {
8851                 *     var guide = event.guide;
8852                 *     // Use guideEl$'s left, top to locate your schedule creation popup
8853                 *     var guideEl$ = guide.guideElement ?
8854                 *          guide.guideElement : guide.guideElements[Object.keys(guide.guideElements)[0]];
8855                 *
8856                 *     // After that call this to hide the creation guide
8857                 *     guide.clearGuideElement();
8858                 * });
8859                 */
8860
8861                /**
8862                 * Calendar class
8863                 * @constructor
8864                 * @mixes CustomEvents
8865                 * @param {HTMLElement|string} container - The container element or selector id
8866                 * @param {Options} options - The calendar {@link Options} object
8867                 * @example
8868                 * var calendar = new tui.Calendar(document.getElementById('calendar'), {
8869                 *     defaultView: 'week',
8870                 *     taskView: true,    // Can be also ['milestone', 'task']
8871                 *     scheduleView: true,  // Can be also ['allday', 'time']
8872                 *     template: {
8873                 *         milestone: function(schedule) {
8874                 *             return '<span style="color:red;"><i class="fa fa-flag"></i> ' + schedule.title + '</span>';
8875                 *         },
8876                 *         milestoneTitle: function() {
8877                 *             return 'Milestone';
8878                 *         },
8879                 *         task: function(schedule) {
8880                 *             return '&nbsp;&nbsp;#' + schedule.title;
8881                 *         },
8882                 *         taskTitle: function() {
8883                 *             return '<label><input type="checkbox" />Task</label>';
8884                 *         },
8885                 *         allday: function(schedule) {
8886                 *             return schedule.title + ' <i class="fa fa-refresh"></i>';
8887                 *         },
8888                 *         alldayTitle: function() {
8889                 *             return 'All Day';
8890                 *         },
8891                 *         time: function(schedule) {
8892                 *             return schedule.title + ' <i class="fa fa-refresh"></i>' + schedule.start;
8893                 *         }
8894                 *     },
8895                 *     month: {
8896                 *         daynames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
8897                 *         startDayOfWeek: 0,
8898                 *         narrowWeekend: true
8899                 *     },
8900                 *     week: {
8901                 *         daynames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
8902                 *         startDayOfWeek: 0,
8903                 *         narrowWeekend: true
8904                 *     }
8905                 * });
8906                 */
8907                function Calendar(container, options) {
8908                    options = util.extend({
8909                        usageStatistics: true
8910                    }, options);
8911
8912                    if (options.usageStatistics === true && util.sendHostname) {
8913                        util.sendHostname('calendar', GA_TRACKING_ID);
8914                    }
8915
8916                    if (util.isString(container)) {
8917                        container = document.querySelector(container);
8918                    }
8919
8920                    /**
8921                     * Calendar color map
8922                     * @type {object}
8923                     * @private
8924                     */
8925                    this._calendarColor = {};
8926
8927                    /**
8928                     * Current rendered date
8929                     * @type {TZDate}
8930                     * @private
8931                     */
8932                    this._renderDate = datetime.start();
8933
8934                    /**
8935                     * start and end date of weekly, monthly
8936                     * @type {object}
8937                     * @private
8938                     */
8939                    this._renderRange = {
8940                        start: null,
8941                        end: null
8942                    };
8943
8944                    /**
8945                     * base controller
8946                     * @type {Base}
8947                     * @private
8948                     */
8949                    this._controller = _createController(options);
8950                    this._controller.setCalendars(options.calendars);
8951
8952                    /**
8953                     * layout view (layout manager)
8954                     * @type {Layout}
8955                     * @private
8956                     */
8957                    this._layout = new Layout(container, this._controller.theme);
8958
8959                    /**
8960                     * global drag handler
8961                     * @type {Drag}
8962                     * @private
8963                     */
8964                    this._dragHandler = new Drag({distance: 10}, this._layout.container);
8965
8966                    /**
8967                     * current rendered view name. ('day', 'week', 'month')
8968                     * @type {string}
8969                     * @default 'week'
8970                     * @private
8971                     */
8972                    this._viewName = options.defaultView || 'week';
8973
8974                    /**
8975                     * Refresh method. it can be ref different functions for each view modes.
8976                     * @type {function}
8977                     * @private
8978                     */
8979                    this._refreshMethod = null;
8980
8981                    /**
8982                     * Scroll to now. It can be called for 'week', 'day' view modes.
8983                     * @type {function}
8984                     * @private
8985                     */
8986                    this._scrollToNowMethod = null;
8987
8988                    /**
8989                     * It's true if Calendar.prototype.scrollToNow() is called.
8990                     * @type {boolean}
8991                     * @private
8992                     */
8993                    this._requestScrollToNow = false;
8994
8995                    /**
8996                     * Open schedule creation popup
8997                     * @type {function}
8998                     * @private
8999                     */
9000                    this._openCreationPopup = null;
9001
9002                    /**
9003                     * Hide the more view
9004                     * @type {function}
9005                     * @private
9006                     */
9007                    this._hideMoreView = null;
9008
9009                    /**
9010                     * Unique id for requestAnimFrame()
9011                     * @type {number}
9012                     * @private
9013                     */
9014                    this._requestRender = 0;
9015
9016                    /**
9017                     * calendar options
9018                     * @type {Options}
9019                     * @private
9020                     */
9021                    this._options = {};
9022
9023                    this._initialize(options);
9024                }
9025
9026                /**
9027                 * destroy calendar instance.
9028                 */
9029                Calendar.prototype.destroy = function() {
9030                    this._dragHandler.destroy();
9031                    this._controller.off();
9032                    this._layout.clear();
9033                    this._layout.destroy();
9034
9035                    util.forEach(this._options.template, function(func, name) {
9036                        if (func) {
9037                            Handlebars.unregisterHelper(name + '-tmpl');
9038                        }
9039                    });
9040
9041                    this._options = this._renderDate = this._controller =
9042                        this._layout = this._dragHandler = this._viewName =
9043                            this._refreshMethod = this._scrollToNowMethod = null;
9044                };
9045
9046                /**
9047                 * Initialize calendar
9048                 * @param {Options} options - calendar options
9049                 * @private
9050                 */
9051                Calendar.prototype._initialize = function(options) {
9052                    var controller = this._controller,
9053                        viewName = this._viewName;
9054
9055                    this._options = util.extend({
9056                        defaultView: viewName,
9057                        taskView: true,
9058                        scheduleView: true,
9059                        template: util.extend({
9060                            allday: null,
9061                            time: null
9062                        }, util.pick(options, 'template') || {}),
9063                        week: util.extend(
9064                            {
9065                                startDayOfWeek: 0,
9066                                workweek: false
9067                            },
9068                            util.pick(options, 'week') || {}
9069                        ),
9070                        month: util.extend(
9071                            {
9072                                startDayOfWeek: 0,
9073                                workweek: false,
9074                                scheduleFilter: function(schedule) {
9075                                    return Boolean(schedule.isVisible) &&
9076                                        (schedule.category === 'allday' || schedule.category === 'time');
9077                                }
9078                            },
9079                            util.pick(options, 'month') || {}
9080                        ),
9081                        calendars: [],
9082                        useCreationPopup: false,
9083                        useDetailPopup: false,
9084                        timezones: options.timezones || [],
9085                        disableDblClick: false,
9086                        disableClick: false,
9087                        isReadOnly: false
9088                    }, options);
9089
9090                    if (this._options.isReadOnly) {
9091                        this._options.useCreationPopup = false;
9092                    }
9093
9094                    this._layout.controller = controller;
9095
9096                    this._setAdditionalInternalOptions(options);
9097
9098                    this.changeView(viewName, true);
9099                };
9100
9101                /**
9102                 * Set additional internal options
9103                 * 1. Register to the template handlebar
9104                 * 2. Update the calendar list and set the color of the calendar.
9105                 * 3. Change the primary timezone offset of the timezones.
9106                 * @param {Options} options - calendar options
9107                 * @private
9108                 */
9109                Calendar.prototype._setAdditionalInternalOptions = function(options) {
9110                    var timezones = options.timezones || [];
9111
9112                    util.forEach(options.template, function(func, name) {
9113                        if (func) {
9114                            Handlebars.registerHelper(name + '-tmpl', func);
9115                        }
9116                    });
9117
9118                    util.forEach(options.calendars || [], function(calendar) {
9119                        this.setCalendarColor(calendar.id, calendar, true);
9120                    }, this);
9121
9122                    if (timezones.length) {
9123                        timezone.setOffsetByTimezoneOption(timezones[0].timezoneOffset);
9124                    }
9125                };
9126
9127                /**********
9128                 * CRUD Methods
9129                 **********/
9130
9131                /**
9132                 * Create schedules and render calendar.
9133                 * @param {Array.<Schedule>} schedules - {@link Schedule} data list
9134                 * @param {boolean} [silent=false] - no auto render after creation when set true
9135                 * @example
9136                 * calendar.createSchedules([
9137                 *     {
9138                 *         id: '1',
9139                 *         calendarId: '1',
9140                 *         title: 'my schedule',
9141                 *         category: 'time',
9142                 *         dueDateClass: '',
9143                 *         start: '2018-01-18T22:30:00+09:00',
9144                 *         end: '2018-01-19T02:30:00+09:00'
9145                 *     },
9146                 *     {
9147                 *         id: '2',
9148                 *         calendarId: '1',
9149                 *         title: 'second schedule',
9150                 *         category: 'time',
9151                 *         dueDateClass: '',
9152                 *         start: '2018-01-18T17:30:00+09:00',
9153                 *         end: '2018-01-19T17:31:00+09:00'
9154                 *     }
9155                 * ]);
9156                 */
9157                Calendar.prototype.createSchedules = function(schedules, silent) {
9158                    util.forEach(schedules, function(obj) {
9159                        this._setScheduleColor(obj.calendarId, obj);
9160                    }, this);
9161
9162                    this._controller.createSchedules(schedules, silent);
9163
9164                    if (!silent) {
9165                        this.render();
9166                    }
9167                };
9168
9169                /**
9170                 * Get a {@link Schedule} object by schedule id and calendar id.
9171                 * @param {string} scheduleId - ID of schedule
9172                 * @param {string} calendarId - calendarId of the schedule
9173                 * @returns {Schedule} schedule object
9174                 * @example
9175                 * var schedule = calendar.getSchedule(scheduleId, calendarId);
9176                 * console.log(schedule.title);
9177                 */
9178                Calendar.prototype.getSchedule = function(scheduleId, calendarId) {
9179                    return this._controller.schedules.single(function(model) {
9180                        return model.id === scheduleId && model.calendarId === calendarId;
9181                    });
9182                };
9183
9184                /**
9185                 * Update the schedule
9186                 * @param {string} scheduleId - ID of the original schedule to update
9187                 * @param {string} calendarId - The calendarId of the original schedule to update
9188                 * @param {object} changes - The {@link Schedule} properties and values with changes to update
9189                 * @param {boolean} [silent=false] - No auto render after creation when set true
9190                 * @example
9191                 * calendar.updateSchedule(schedule.id, schedule.calendarId, {
9192                 *     title: 'Changed schedule',
9193                 *     start: new Date('2019-11-05T09:00:00'),
9194                 *     end: new Date('2019-11-05T10:00:00'),
9195                 *     category: 'time'
9196                 * });
9197                 */
9198                Calendar.prototype.updateSchedule = function(scheduleId, calendarId, changes, silent) {
9199                    var ctrl = this._controller,
9200                        ownSchedules = ctrl.schedules,
9201                        schedule = ownSchedules.single(function(model) {
9202                            return model.id === scheduleId && model.calendarId === calendarId;
9203                        });
9204                    var hasChangedCalendar = false;
9205
9206                    if (!changes || !schedule) {
9207                        return;
9208                    }
9209
9210                    hasChangedCalendar = this._hasChangedCalendar(schedule, changes);
9211                    changes = hasChangedCalendar ?
9212                        this._setScheduleColor(changes.calendarId, changes) :
9213                        changes;
9214
9215                    ctrl.updateSchedule(schedule, changes);
9216
9217                    if (!silent) {
9218                        this.render();
9219                    }
9220                };
9221
9222                Calendar.prototype._hasChangedCalendar = function(schedule, changes) {
9223                    return schedule &&
9224                        changes.calendarId &&
9225                        schedule.calendarId !== changes.calendarId;
9226                };
9227
9228                Calendar.prototype._setScheduleColor = function(calendarId, schedule) {
9229                    var calColor = this._calendarColor;
9230                    var color = calColor[calendarId];
9231
9232                    if (color) {
9233                        schedule.color = schedule.color || color.color;
9234                        schedule.bgColor = schedule.bgColor || color.bgColor;
9235                        schedule.borderColor = schedule.borderColor || color.borderColor;
9236                        schedule.dragBgColor = schedule.dragBgColor || color.dragBgColor;
9237                    }
9238
9239                    return schedule;
9240                };
9241
9242                /**
9243                 * Delete a schedule.
9244                 * @param {string} scheduleId - ID of schedule to delete
9245                 * @param {string} calendarId - The CalendarId of the schedule to delete
9246                 * @param {boolean} [silent=false] - No auto render after creation when set true
9247                 */
9248                Calendar.prototype.deleteSchedule = function(scheduleId, calendarId, silent) {
9249                    var ctrl = this._controller,
9250                        ownSchedules = ctrl.schedules,
9251                        schedule = ownSchedules.single(function(model) {
9252                            return model.id === scheduleId && model.calendarId === calendarId;
9253                        });
9254
9255                    if (!schedule) {
9256                        return;
9257                    }
9258
9259                    ctrl.deleteSchedule(schedule);
9260                    if (!silent) {
9261                        this.render();
9262                    }
9263                };
9264
9265                /**********
9266                 * Private Methods
9267                 **********/
9268
9269                /**
9270                 * @param {string|Date} date - The Date to show in calendar
9271                 * @param {number}
9271 [startDayOfWeek=0] - The Start day of week
9272                 * @param {boolean} [workweek=false] - The only show work week
9273                 * @returns {array} render range
9274                 * @private
9275                 */
9276                Calendar.prototype._getWeekDayRange = function(date, startDayOfWeek, workweek) {
9277                    var day;
9278                    var start;
9279                    var end;
9280                    var range;
9281
9282                    startDayOfWeek = (startDayOfWeek || 0); // eslint-disable-line
9283                    date = util.isDate(date) ? date : new TZDate(date);
9284                    day = date.getDay();
9285
9286                    // calculate default render range first.
9287                    start = new TZDate(date).addDate(-day + startDayOfWeek);
9288
9289                    end = new TZDate(start).addDate(6);
9290
9291                    if (day < startDayOfWeek) {
9292                        start = new TZDate(start).addDate(-7);
9293                        end = new TZDate(end).addDate(-7);
9294                    }
9295
9296                    if (workweek) {
9297                        range = datetime.range(
9298                            datetime.start(start),
9299                            datetime.end(end),
9300                            datetime.MILLISECONDS_PER_DAY
9301                        );
9302
9303                        range = util.filter(range, function(weekday) {
9304                            return !datetime.isWeekend(weekday.getDay());
9305                        });
9306
9307                        start = range[0];
9308                        end = range[range.length - 1];
9309                    }
9310
9311                    start = datetime.start(start);
9312                    end = datetime.start(end);
9313
9314                    return [start, end];
9315                };
9316
9317                /**
9318                 * Toggle schedules' visibility by calendar ID
9319                 * @param {string} calendarId - The calendar id value
9320                 * @param {boolean} toHide - Set true to hide schedules
9321                 * @param {boolean} [render=true] - set true then render after change visible property each models
9322                 */
9323                Calendar.prototype.toggleSchedules = function(calendarId, toHide, render) {
9324                    var ownSchedules = this._controller.schedules;
9325
9326                    render = util.isExisty(render) ? render : true;
9327                    calendarId = util.isArray(calendarId) ? calendarId : [calendarId];
9328
9329                    ownSchedules.each(function(schedule) {
9330                        if (~util.inArray(schedule.calendarId, calendarId)) {
9331                            schedule.set('isVisible', !toHide);
9332                        }
9333                    });
9334
9335                    if (render) {
9336                        this.render();
9337                    }
9338                };
9339
9340                /**********
9341                 * General Methods
9342                 **********/
9343
9344                /**
9345                 * Render the calendar. The real rendering occurs after requestAnimationFrame.
9346                 * If you have to render immediately, use the 'immediately' parameter as true.
9347                 * @param {boolean} [immediately=false] - Render it immediately
9348                 * @example
9349                 * var silent = true;
9350                 * calendar.clear();
9351                 * calendar.createSchedules(schedules, silent);
9352                 * calendar.render();
9353                 * @example
9354                 * // Render a calendar when resizing a window.
9355                 * window.addEventListener('resize', function() {
9356                 *     calendar.render();
9357                 * });
9358                 */
9359                Calendar.prototype.render = function(immediately) {
9360                    if (this._requestRender) {
9361                        reqAnimFrame.cancelAnimFrame(this._requestRender);
9362                    }
9363
9364                    if (immediately) {
9365                        this._renderFunc();
9366                    } else {
9367                        this._requestRender = reqAnimFrame.requestAnimFrame
9367(this._renderFunc, this);
9368                    }
9369                };
9370
9371                /**
9372                 * Render and refresh all layout and process requests.
9373                 * @private
9374                 */
9375                Calendar.prototype._renderFunc = function() {
9376                    if (this._refreshMethod) {
9377                        this._refreshMethod();
9378                    }
9379                    if (this._layout) {
9380                        this._layout.render();
9381                    }
9382                    if (this._scrollToNowMethod && this._requestScrollToNow) {
9383                        this._scrollToNowMethod();
9384                    }
9385
9386                    this._requestScrollToNow = false;
9387                    this._requestRender = null;
9388                };
9389
9390                /**
9391                 * Delete all schedules and clear view. The real rendering occurs after requestAnimationFrame.
9392                 * If you have to render immediately, use the 'immediately' parameter as true.
9393                 * @param {boolean} [immediately=false] - Render it immediately
9394                 * @example
9395                 * calendar.clear();
9396                 * calendar.createSchedules(schedules, true);
9397                 * calendar.render();
9398                 */
9399                Calendar.prototype.clear = function(immediately) {
9400                    this._controller.clearSchedules();
9401                    this.render(immediately);
9402                };
9403
9404                /**
9405                 * Scroll to current time on today in case of daily, weekly view
9406                 * @example
9407                 * function onNewSchedules(schedules) {
9408                 *     calendar.createSchedules(schedules);
9409                 *     if (calendar.getViewName() !== 'month') {
9410                 *         calendar.scrollToNow();
9411                 *     }
9412                 * }
9413                 */
9414                Calendar.prototype.scrollToNow = function() {
9415                    if (this._scrollToNowMethod) {
9416                        this._requestScrollToNow = true;
9417                        // this._scrollToNowMethod() will be called at next frame rendering.
9418                    }
9419                };
9420
9421                /**
9422                 * Move to today.
9423                 * @example
9424                 * function onClickTodayBtn() {
9425                 *     calendar.today();
9426                 * }
9427                 */
9428                Calendar.prototype.today = function() {
9429                    this._renderDate = datetime.start();
9430
9431                    this._setViewName(this._viewName);
9432                    this.move();
9433                    this.render();
9434                };
9435
9436                /**
9437                 * Move the calendar amount of offset value
9438                 * @param {number} offset - The offset value.
9439                 * @private
9440                 * @example
9441                 * // move previous week when "week" view.
9442                 * // move previous month when "month" view.
9443                 * calendar.move(-1);
9444                 */
9445                Calendar.prototype.move = function(offset) {
9446                    var renderDate = dw(datetime.start(this._renderDate)),
9447                        viewName = this._viewName,
9448                        view = this._getCurrentView(),
9449                        recursiveSet = _setOptionRecurseively,
9450                        startDate, endDate, tempDate,
9451                        startDayOfWeek, visibleWeeksCount, workweek, isAlways6Week, datetimeOptions;
9452
9453                    offset = util.isExisty(offset) ? offset : 0;
9454
9455                    if (viewName === 'month') {
9456                        startDayOfWeek = util.pick(this._options, 'month', 'startDayOfWeek') || 0;
9457                        visibleWeeksCount = mmin(util.pick(this._options, 'month', 'visibleWeeksCount') || 0, 6);
9458                        workweek = util.pick(this._options, 'month', 'workweek') || false;
9459                        isAlways6Week = util.pick(this._options, 'month', 'isAlways6Week');
9460
9461                        if (visibleWeeksCount) {
9462                            datetimeOptions = {
9463                                startDayOfWeek: startDayOfWeek,
9464                                isAlways6Week: false,
9465                                visibleWeeksCount: visibleWeeksCount,
9466                                workweek: workweek
9467                            };
9468
9469                            renderDate.addDate(offset * 7 * datetimeOptions.visibleWeeksCount);
9470                            tempDate = datetime.arr2dCalendar(renderDate.d, datetimeOptions);
9471
9472                            recursiveSet(view, function(childView, opt) {
9473                                opt.renderMonth = new TZDate(renderDate.d);
9474                            });
9475                        } else {
9476                            datetimeOptions = {
9477                                startDayOfWeek: startDayOfWeek,
9478                                isAlways6Week: isAlways6Week,
9479                                workweek: workweek
9480                            };
9481
9482                            renderDate.addMonth(offset);
9483                            tempDate = datetime.arr2dCalendar(renderDate.d, datetimeOptions);
9484
9485                            recursiveSet(view, function(childView, opt) {
9486                                opt.renderMonth = new TZDate(renderDate.d);
9487                            });
9488                        }
9489
9490                        startDate = tempDate[0][0];
9491                        endDate = tempDate[tempDate.length - 1][tempDate[tempDate.length - 1].length - 1];
9492                    } else if (viewName === 'week') {
9493                        renderDate.addDate(offset * 7);
9494                        startDayOfWeek = util.pick(this._options, 'week', 'startDayOfWeek') || 0;
9495                        workweek = util.pick(this._options, 'week', 'workweek') || false;
9496                        tempDate = this._getWeekDayRange(renderDate.d, startDayOfWeek, workweek);
9497
9498                        startDate = tempDate[0];
9499                        endDate = tempDate[1];
9500
9501                        recursiveSet(view, function(childView, opt) {
9502                            opt.renderStartDate = new TZDate(startDate);
9503                            opt.renderEndDate = new TZDate(endDate);
9504
9505                            childView.setState({
9506                                collapsed: true
9507                            });
9508                        });
9509                    } else if (viewName === 'day') {
9510                        renderDate.addDate(offset);
9511                        startDate = datetime.start(renderDate.d);
9512                        endDate = datetime.end(renderDate.d);
9513
9514                        recursiveSet(view, function(childView, opt) {
9515                            opt.renderStartDate = new TZDate(startDate);
9516                            opt.renderEndDate = new TZDate(endDate);
9517
9518                            childView.setState({
9519                                collapsed: true
9520                            });
9521                        });
9522                    }
9523
9524                    this._renderDate = renderDate.d;
9525                    this._renderRange = {
9526                        start: startDate,
9527                        end: endDate
9528                    };
9529                };
9530
9531                /**
9532                 * Move to specific date
9533                 * @param {(Date|string)} date - The date to move
9534                 * @example
9535                 * calendar.on('clickDayname', function(event) {
9536                 *     if (calendar.getViewName() === 'week') {
9537                 *         calendar.setDate(new Date(event.date));
9538                 *         calendar.changeView('day', true);
9539                 *     }
9540                 * });
9541                 */
9542                Calendar.prototype.setDate = function(date) {
9543                    if (util.isString(date)) {
9544                        date = datetime.parse(date);
9545                    }
9546
9547                    this._renderDate = new TZDate(date);
9548                    this._setViewName(this._viewName);
9549                    this.move(0);
9550                    this.render();
9551                };
9552
9553                /**
9554                 * Move the calendar forward a day, a week, a month, 2 weeks, 3 weeks.
9555                 * @example
9556                 * function moveToNextOrPrevRange(val) {
9557    if (val === -1) {
9558        calendar.prev();
9559    } else if (val === 1) {
9560        calendar.next();
9561    }
9562}
9563                 */
9564                Calendar.prototype.next = function() {
9565                    this.move(1);
9566                    this.render();
9567                };
9568
9569                /**
9570                 * Move the calendar backward a day, a week, a month, 2 weeks, 3 weeks.
9571                 * @example
9572                 * function moveToNextOrPrevRange(val) {
9573    if (val === -1) {
9574        calendar.prev();
9575    } else if (val === 1) {
9576        calendar.next();
9577    }
9578}
9579                 */
9580                Calendar.prototype.prev = function() {
9581                    this.move(-1);
9582                    this.render();
9583                };
9584
9585                /**
9586                 * Return current rendered view.
9587                 * @returns {View} current view instance
9588                 * @private
9589                 */
9590                Calendar.prototype._getCurrentView = function() {
9591                    var viewName = this._viewName;
9592
9593                    if (viewName === 'day') {
9594                        viewName = 'week';
9595                    }
9596
9597                    return util.pick(this._layout.children.items, viewName);
9598                };
9599
9600                /**
9601                 * Change calendar's schedule color with option
9602                 * @param {string} calendarId - The calendar ID
9603                 * @param {CalendarColor} option - The {@link CalendarColor} object
9604                 * @param {boolean} [silent=false] - No auto render after creation when set true
9605                 * @example
9606                 * calendar.setCalendarColor('1', {
9607                 *     color: '#e8e8e8',
9608                 *     bgColor: '#585858',
9609                 *     borderColor: '#a1b56c'
9610                 *     dragBgColor: '#585858',
9611                 * });
9612                 * calendar.setCalendarColor('2', {
9613                 *     color: '#282828',
9614                 *     bgColor: '#dc9656',
9615                 *     borderColor: '#a1b56c',
9616                 *     dragBgColor: '#dc9656',
9617                 * });
9618                 * calendar.setCalendarColor('3', {
9619                 *     color: '#a16946',
9620                 *     bgColor: '#ab4642',
9621                 *     borderColor: '#a1b56c',
9622                 *     dragBgColor: '#ab4642',
9623                 * });
9624                 */
9625                Calendar.prototype.setCalendarColor = function(calendarId, option, silent) {
9626                    var calColor = this._calendarColor,
9627                        ownSchedules = this._controller.schedules,
9628                        ownColor = calColor[calendarId];
9629
9630                    if (!util.isObject(option)) {
9631                        config.throwError('Calendar#changeCalendarColor(): color 는 {color: \'\', bgColor: \'\'} 형태여야 합니다.');
9632                    }
9633
9634                    ownColor = calColor[calendarId] = util.extend({
9635                        color: '#000',
9636                        bgColor: '#a1b56c',
9637                        borderColor: '#a1b56c',
9638                        dragBgColor: '#a1b56c'
9639                    }, option);
9640
9641                    ownSchedules.each(function(model) {
9642                        if (model.calendarId !== calendarId) {
9643                            return;
9644                        }
9645
9646                        model.color = ownColor.color;
9647                        model.bgColor = ownColor.bgColor;
9648                        model.borderColor = ownColor.borderColor;
9649                        model.dragBgColor = ownColor.dragBgColor;
9650                    });
9651
9652                    if (!silent) {
9653                        this.render();
9654                    }
9655                };
9656
9657                /**********
9658                 * Custom Events
9659                 **********/
9660
9661                /**
9662                 * A bridge-based event handler for connecting a click handler to a user click event handler for each view
9663                 * @fires Calendar#clickSchedule
9664                 * @param {object} clickScheduleData - The event data of 'clickSchedule' handler
9665                 * @private
9666                 */
9667                Calendar.prototype._onClick = function(clickScheduleData) {
9668                    /**
9669                     * Fire this event when click a schedule.
9670                     * @event Calendar#clickSchedule
9671                     * @type {object}
9672                     * @property {Schedule} schedule - The {@link Schedule} instance
9673                     * @property {MouseEvent} event - MouseEvent
9674                     * @example
9675                     * calendar.on('clickSchedule', function(event) {
9676                     *     var schedule = event.schedule;
9677                     *
9678                     *     if (lastClickSchedule) {
9679                     *         calendar.updateSchedule(lastClickSchedule.id, lastClickSchedule.calendarId, {
9680                     *             isFocused: false
9681                     *         });
9682                     *     }
9683                     *     calendar.updateSchedule(schedule.id, schedule.calendarId, {
9684                     *         isFocused: true
9685                     *     });
9686                     *
9687                     *     lastClickSchedule = schedule;
9688                     *     // open detail view
9689                     * });
9690                     */
9691                    this.fire('clickSchedule', clickScheduleData);
9692                };
9693
9694                /**
9695                 * A bridge-based event handler for connecting a click handler to a user click event handler for each view
9696                 * @fires Calendar#clickMore
9697                 * @param {object} clickMoreSchedule - The event data of 'clickMore' handler
9698                 * @private
9699                 */
9700                Calendar.prototype._onClickMore = function(clickMoreSchedule) {
9701                    /**
9702                     * Fire this event when click a schedule.
9703                     * @event Calendar#clickMore
9704                     * @type {object}
9705                     * @property {Date} date - The Clicked date
9706                     * @property {HTMLElement} target - The more element
9707                     * @example
9708                     * calendar.on('clickMore', function(event) {
9709                     *     console.log('clickMore', event.date, event.target);
9710                     * });
9711                     */
9712                    this.fire('clickMore', clickMoreSchedule);
9713                };
9714
9715                /**
9716                 * dayname click event handler
9717                 * @fires Calendar#clickDayname
9718                 * @param {object} clickScheduleData - The event data of 'clickDayname' handler
9719                 * @private
9720                 */
9721                Calendar.prototype._onClickDayname = function(clickScheduleData) {
9722                    /**
9723                     * Fire this event when click a day name in 
9723weekly.
9724                     * @event Calendar#clickDayname
9725                     * @type {object}
9726                     * @property {string} date - The date string by format 'YYYY-MM-DD'
9727                     * @example
9728                     * calendar.on('clickDayname', function(event) {
9729                     *     if (calendar.getViewName() === 'week') {
9730                     *         calendar.setDate(new Date(event.date));
9731                     *         calendar.changeView('day', true);
9732                     *     }
9733                     * });
9734                     */
9735                    this.fire('clickDayname', clickScheduleData);
9736                };
9737
9738                /**
9739                 * @fires {Calendar#n('beforeCreateSchedule', function}
9740                 * @param {object} createScheduleData - select schedule data from allday, time
9741                 * @private
9742                 */
9743                Calendar.prototype._onBeforeCreate = function(createScheduleData) {
9744                    if (this._options.useCreationPopup && !createScheduleData.useCreationPopup) {
9745                        if (this._showCreationPopup) {
9746                            this._showCreationPopup(createScheduleData);
9747
9748                            return;
9749                        }
9750                    }
9751                    /**
9752                     * Fire this event when select time period in daily, weekly, monthly.
9753                     * @event Calendar#beforeCreateSchedule
9754                     * @type {object}
9755                     * @property {boolean} isAllDay - The allday schedule
9756                     * @property {Date} start - The selected start time
9757                     * @property {Date} end - The selected end time
9758                     * @property {TimeCreationGuide} guide - {@link TimeCreationGuide} instance
9759                     * @property {string} triggerEventName - The event name like 'click', 'dblclick'
9760                     * @example
9761                     * calendar.on('beforeCreateSchedule', function(event) {
9762                     *     var startTime = event.start;
9763                     *     var endTime = event.end;
9764                     *     var isAllDay = event.isAllDay;
9765                     *     var guide = event.guide;
9766                     *     var triggerEventName = event.triggerEventName;
9767                     *     var schedule;
9768                     *
9769                     *     if (triggerEventName === 'click') {
9770                     *         // open writing simple schedule popup
9771                     *         schedule = {...};
9772                     *     } else if (triggerEventName === 'dblclick') {
9773                     *         // open writing detail schedule popup
9774                     *         schedule = {...};
9775                     *     }
9776                     *
9777                     *     calendar.createSchedules([schedule]);
9778                     * });
9779                     */
9780                    this.fire('beforeCreateSchedule', createScheduleData);
9781                };
9782
9783                /**
9784                 * @fires Calendar#beforeUpdateSchedule
9785                 * @param {object} updateScheduleData - update {@link Schedule} data
9786                 * @private
9787                 */
9788                Calendar.prototype._onBeforeUpdate = function(updateScheduleData) {
9789                    /**
9790                     * Fire this event when drag a schedule to change time in daily, weekly, monthly.
9791                     * @event Calendar#beforeUpdateSchedule
9792                     * @type {object}
9793                     * @property {Schedule} schedule - The original {@link Schedule} instance
9794                     * @property {object} changes - The {@link Schedule} properties and values with changes to update
9795                     * @property {Date} start - Deprecated: start time to update
9796                     * @property {Date} end - Deprecated: end time to update
9797                     * @example
9798                     * calendar.on('beforeUpdateSchedule', function(event) {
9799                     *     var schedule = event.schedule;
9800                     *     var changes = event.changes;
9801                     *
9802                     *     calendar.updateSchedule(schedule.id, schedule.calendarId, changes);
9803                     * });
9804                     */
9805                    this.fire('beforeUpdateSchedule', updateScheduleData);
9806                };
9807
9808                /**
9809                 * @fires Calendar#beforeDeleteSchedule
9810                 * @param {object} deleteScheduleData - delete schedule data
9811                 * @private
9812                 */
9813                Calendar.prototype._onBeforeDelete = function(deleteScheduleData) {
9814                    /**
9815                     * Fire this event when delete a schedule.
9816                     * @event Calendar#beforeDeleteSchedule
9817                     * @type {object}
9818                     * @property {Schedule} schedule - The {@link Schedule} instance to delete
9819                     * @example
9820                     * calendar.on('beforeDeleteSchedule', function(event) {
9821                     *     var schedule = event.schedule;
9822                     *     alert('The schedule is removed.', schedule);
9823                     * });
9824                     */
9825                    this.fire('beforeDeleteSchedule', deleteScheduleData);
9826                };
9827
9828                /**
9829                 * @fires Calendar#afterRenderSchedule
9830                 * @param {Schedule} scheduleData - The schedule data
9831                 * @private
9832                 */
9833                Calendar.prototype._onAfterRenderSchedule = function(scheduleData) {
9834                    /**
9835                     * Fire this event by every single schedule after rendering whole calendar.
9836                     * @event Calendar#afterRenderSchedule
9837                     * @type {object}
9838                     * @property {Schedule} schedule - A rendered {@link Schedule} instance
9839                     * @example
9840                     * calendar.on('afterRenderSchedule', function(event) {
9841                     *     var schedule = event.schedule;
9842                     *     var element = calendar.getElement(schedule.id, schedule.calendarId);
9843                     *     // use the element
9844                     *     console.log(element);
9845                     * });
9846                     */
9847                    this.fire('afterRenderSchedule', scheduleData);
9848                };
9849
9850                /**
9851                 * @fires Calendar#clickTimezonesCollapseBtn
9852                 * @param {boolean} timezonesCollapsed - timezones collapsed flag
9853                 * @private
9854                 */
9855                Calendar.prototype._onClickTimezonesCollapseBtn = function(timezonesCollapsed) {
9856                    /**
9857                     * Fire this event by clicking timezones collapse button
9858                     * @event Calendar#clickTimezonesCollapseBtn
9859                     * @type {object}
9860                     * @property {boolean} timezonesCollapsed - The timezones collapes flag
9861                     * @example
9862                     * calendar.on('clickTimezonesCollapseBtn', function(timezonesCollapsed) {
9863                     *     console.log(timezonesCollapsed);
9864                     * });
9865                     */
9866                    this.fire('clickTimezonesCollapseBtn', timezonesCollapsed);
9867                };
9868
9869                /**
9870                 * Toggle calendar factory class, main view, wallview event connection
9871                 * @param {boolean} isAttach - attach events if true.
9872                 * @param {Week|Month} view - Weekly view or Monthly view
9873                 * @private
9874                 */
9875                Calendar.prototype._toggleViewSchedule = function(isAttach, view) {
9876                    var self = this,
9877                        handler = view.handler,
9878                        method = isAttach ? 'on' : 'off';
9879
9880                    util.forEach(handler.click, function(clickHandler) {
9881                        clickHandler[method]('clickSchedule', self._onClick, self);
9882                    });
9883
9884                    util.forEach(handler.dayname, function(clickHandler) {
9885                        clickHandler[method]('clickDayname', self._onClickDayname, self);
9886                    });
9887
9888                    util.forEach(handler.creation, function(creationHandler) {
9889                        creationHandler[method]('beforeCreateSchedule', self._onBeforeCreate, self);
9890                        creationHandler[method]('beforeDeleteSchedule', self._onBeforeDelete, self);
9891                    });
9892
9893                    util.forEach(handler.move, function(moveHandler) {
9894                        moveHandler[method]('beforeUpdateSchedule', self._onBeforeUpdate, self);
9895                    });
9896
9897                    util.forEach(handler.resize, function(resizeHandler) {
9898                        resizeHandler[method]('beforeUpdateSchedule', self._onBeforeUpdate, self);
9899                    });
9900
9901                    // bypass events from view
9902                    view[method]('afterRenderSchedule', self._onAfterRenderSchedule, self);
9903                    view[method]('clickTimezonesCollapseBtn', self._onClickTimezonesCollapseBtn, self);
9904                    view[method]('clickMore', self._onClickMore, self);
9905                };
9906
9907                /**
9908                 * Change current view with view name('day', 'week', 'month')
9909                 * @param {string} newViewName - The New view name to render
9910                 * @param {boolean} force - Force render despite of current view and new view are equal
9911                 * @example
9912                 * // daily view
9913                 * calendar.changeView('day', true);
9914                 *
9915                 * // weekly view
9916                 * calendar.changeView('week', true);
9917                 *
9918                 * // monthly view(default 6 weeks view)
9919                 * calendar.setOptions({month: {visibleWeeksCount: 6}}, true); // or null
9920                 * calendar.changeView('month', true);
9921                 *
9922                 * // 2 weeks monthly view
9923                 * calendar.setOptions({month: {visibleWeeksCount: 2}}, true);
9924                 * calendar.changeView('month', true);
9925                 *
9926                 * // 3 weeks monthly view
9927                 * calendar.setOptions({month: {visibleWeeksCount: 3}}, true);
9928                 * calendar.changeView('month', true);
9929                 *
9930                 * // narrow weekend
9931                 * calendar.setOptions({month: {narrowWeekend: true}}, true);
9932                 * calendar.setOptions({week: {narrowWeekend: true}}, true);
9933                 * calendar.changeView(calendar.getViewName(), true);
9934                 *
9935                 * // change start day of week(from monday)
9936                 * calendar.setOptions({week: {startDayOfWeek: 1}}, true);
9937                 * calendar.setOptions({month: {startDayOfWeek: 1}}, true);
9938                 * calendar.changeView(calendar.getViewName(), true);
9939                 *
9940                 * // work week
9941                 * calendar.setOptions({week: {workweek: true}}, true);
9942                 * calendar.setOptions({month: {workweek: true}}, true);
9943                 * calendar.changeView(calendar.getViewName(), true);
9944                 */
9945                Calendar.prototype.changeView = function(newViewName, force) {
9946                    var self = this,
9947                        layout = this._layout,
9948                        controller = this._controller,
9949                        dragHandler = this._dragHandler,
9950                        options = this._options,
9951                        viewName = this._viewName,
9952                        created;
9953
9954                    if (!force && viewName === newViewName) {
9955                        return;
9956                    }
9957
9958                    this._setViewName(newViewName);
9959
9960                    // convert day to week
9961                    if (viewName === 'day') {
9962                        viewName = 'week';
9963                    }
9964
9965                    if (newViewName === 'day') {
9966                        newViewName = 'week';
9967                    }
9968                    layout.children.doWhenHas(viewName, function(view) {
9969                        self._toggleViewSchedule(false, view);
9970                    });
9971
9972                    layout.clear();
9973
9974                    if (newViewName === 'month') {
9975                        created = _createMonthView(
9976                            controller,
9977                            layout.container,
9978                            dragHandler,
9979                            options
9980                        );
9981                    } else if (newViewName === 'week' || newViewName === 'day') {
9982                        created = _createWeekView(
9983                            controller,
9984                            layout.container,
9985                            dragHandler,
9986                            options,
9987                            this.getViewName()
9988                        );
9989                    }
9990
9991                    layout.addChild(created.view);
9992
9993                    layout.children.doWhenHas(newViewName, function(view) {
9994                        self._toggleViewSchedule(true, view);
9995                    });
9996
9997                    this._refreshMethod = created.refresh;
9998                    this._scrollToNowMethod = created.scrollToNow;
9999                    this._openCreationPopup = created.openCreationPopup;
10000                    this._showCreationPopup = created.showCreationPopup;
10001                    this._hideMoreView = created.hideMoreView;
10002
10003                    this.move();
10004                    this.render();
10005                };
10006
10007                /**
10008                 * @deprecated
10009                 * Toggle task view('Milestone', 'Task') panel
10010                 * @param {boolean} enabled - use task view
10011                 * @example
10012                 * // There is no milestone, task, so hide those view panel
10013                 * calendar.toggleTaskView(false);
10014                 *
10015                 * // There are some milestone, task, so show those view panel.
10016                 * calendar.toggleTaskView(true);
10017                 */
10018                Calendar.prototype.toggleTaskView = function(enabled) {
10019                    var viewName = this._viewName,
10020                        options = this._options;
10021
10022                    options.taskView = enabled;
10023
10024                    this.changeView(viewName, true);
10025                };
10026
10027                /**
10028                 * @deprecated
10029                 * Toggle schedule view('AllDay', TimeGrid') panel
10030                 * @param {boolean} enabled - use task view
10031                 * @example
10032                 * // hide those view panel to show only 'Milestone', 'Task'
10033                 * calendar.toggleScheduleView(false);
10034                 *
10035                 * // show those view panel.
10036                 * calendar.toggleScheduleView(true);
10037                 */
10038                Calendar.prototype.toggleScheduleView = function(enabled) {
10039                    var viewName = this._viewName,
10040                        options = this._options;
10041
10042                    options.scheduleView = enabled;
10043
10044                    this.changeView(viewName, true);
10045                };
10046
10047                /**
10048                 * Set current view name
10049                 * @param {string} viewName - new view name to render
10050                 * @private
10051                 */
10052                Calendar.prototype._setViewName = function(viewName) {
10053                    this._viewName = viewName;
10054                };
10055
10056                /**
10057                 * Get a schedule element by schedule id and calendar id.
10058                 * @param {string} scheduleId - ID of schedule
10059                 * @param {string} calendarId - calendarId of schedule
10060                 * @returns {HTMLElement} schedule element if found or null
10061                 * @example
10062                 * var element = calendar.getElement(scheduleId, calendarId);
10063                 * console.log(element);
10064                 */
10065                Calendar.prototype.getElement = function(scheduleId, calendarId) {
10066                    var schedule = this.getSchedule(scheduleId, calendarId);
10067                    if (schedule) {
10068                        return document.querySelector('[data-schedule-id="' + scheduleId + '"][data-calendar-id="' + calendarId + '"]');
10069                    }
10070
10071                    return null;
10072                };
10073
10074                /**
10075                 * Set a theme. If some keys are not defined in the preset, will be return.
10076                 * @param {object} theme - multiple styles map
10077                 * @returns {Array.<string>} keys - error keys not predefined.
10078                 * @example
10079                 * cal.setTheme({
10080    'month.dayname.height': '31px',
10081    'common.dayname.color': '#333',
10082    'month.dayname.borderBottom': '1px solid #e5e5e5' // Not valid key  will be return.
10083                 * });
10084                 */
10085                Calendar.prototype.setTheme = function(theme) {
10086                    var result = this._controller.setTheme(theme);
10087                    this.render(true);
10088
10089                    return result;
10090                };
10091
10092                /**
10093                 * Set options of calendar
10094                 * @param {Options} options - set {@link Options}
10095                 * @param {boolean} [silent=false] - no auto render after creation when set true
10096                 */
10097                Calendar.prototype.setOptions = function(options, silent) {
10098                    util.forEach(options, function(value, name) {
10099                        if (util.isObject(value) && !util.isArray(value)) {
10100                            util.forEach(value, function(innerValue, innerName) {
10101                                this._options[name][innerName] = innerValue;
10102                            }, this);
10103                        } else {
10104                            this._options[name] = value;
10105                        }
10106                    }, this);
10107
10108                    this._setAdditionalInternalOptions(options);
10109
10110                    if (!silent) {
10111                        this.changeView(this._viewName, true);
10112                    }
10113                };
10114
10115                /**
10116                 * Get current {@link Options}.
10117                 * @returns {Options} options
10118                 */
10119                Calendar.prototype.getOptions = function() {
10120                    return this._options;
10121                };
10122
10123                /**
10124                 * Current rendered date ({@link TZDate} for further information)
10125                 * @returns {TZDate}
10126                 */
10127                Calendar.prototype.getDate = function() {
10128                    return this._renderDate;
10129                };
10130
10131                /**
10132                 * Start time of rendered date range ({@link TZDate} for further information)
10133                 * @returns {TZDate}
10134                 */
10135                Calendar.prototype.getDateRangeStart = function() {
10136                    return this._renderRange.start;
10137                };
10138
10139                /**
10140                 * End time of rendered date range ({@link TZDate} for further information)
10141                 * @returns {TZDate}
10142                 */
10143                Calendar.prototype.getDateRangeEnd = function() {
10144                    return this._renderRange.end;
10145                };
10146
10147                /**
10148                 * Get current view name('day', 'week', 'month')
10149                 * @returns {string} view name
10150                 */
10151                Calendar.prototype.getViewName = function() {
10152                    return this._viewName;
10153                };
10154
10155                /**
10156                 * Set calendar list
10157                 * @param {Array.<CalendarProps>} calendars - {@link CalendarProps} List
10158                 */
10159                Calendar.prototype.setCalendars = function(calendars) {
10160                    util.forEach(calendars || [], function(calendar) {
10161                        this.setCalendarColor(calendar.id, calendar, true);
10162                    }, this);
10163
10164                    this._controller.setCalendars(calendars);
10165
10166                    this.render();
10167                };
10168
10169                /**
10170                 * Open schedule creation popup
10171                 * @param {Schedule} schedule - The preset {@link Schedule} data
10172                 */
10173                Calendar.prototype.openCreationPopup = function(schedule) {
10174                    if (this._openCreationPopup) {
10175                        this._openCreationPopup(schedule);
10176                    }
10177                };
10178
10179                /**
10180                 * Hide the more view
10181                 */
10182                Calendar.prototype.hideMoreView = function() {
10183                    if (this._hideMoreView) {
10184                        this._hideMoreView();
10185                    }
10186                };
10187
10188                /**
10189                 * Set timezone offset
10190                 * @param {number} offset - The offset (min)
10191                 * @static
10192                 * @deprecated
10193                 * @example
10194                 * var timezoneName = moment.tz.guess();
10195                 * tui.Calendar.setTimezoneOffset(moment.tz.zone(timezoneName).utcOffset(moment()));
10196                 */
10197                Calendar.setTimezoneOffset = function(offset) {
10198                    timezone.setOffset(offset);
10199                };
10200
10201                /**
10202                 * Set a callback function to get timezone offset by timestamp
10203                 * @param {function} callback - The callback function
10204                 * @static
10205                 * @deprecated
10206                 * @example
10207                 * var timezoneName = moment.tz.guess();
10208                 * tui.Calendar.setTimezoneOffsetCallback(function(timestamp) {
10209                 *      return moment.tz.zone(timezoneName).utcOffset(timestamp));
10210                 * });
10211                 */
10212                Calendar.setTimezoneOffsetCallback = function(callback) {
10213                    timezone.setOffsetCallback(callback);
10214                };
10215
10216                /**
10217                 * Create controller instance
10218                 * @returns {Base} controller instance
10219                 * @param {Options} options - calendar options
10220                 * @private
10221                 */
10222                function _createController(options) {
10223                    return controllerFactory(options);
10224                }
10225
10226                /**
10227                 * Create week view instance by dependent module instances
10228                 * @param {Base} controller - controller
10229                 * @param {HTMLElement} container - container element
10230                 * @param {Drag} dragHandler - global drag handler
10231                 * @param {object} options - options for week view
10232                 * @param {string} viewName - 'week', 'day'
10233                 * @returns {Week} week view instance
10234                 * @private
10235                 */
10236                function _createWeekView(controller, container, dragHandler, options, viewName) {
10237                    return weekViewFactory(
10238                        controller,
10239                        container,
10240                        dragHandler,
10241                        options,
10242                        viewName
10243                    );
10244                }
10245
10246                /**
10247                 * Create week view instance by dependent module instances
10248                 * @param {Base} controller - controller
10249                 * @param {HTMLElement} container - container element
10250                 * @param {Drag} dragHandler - global drag handler
10251                 * @param {object} options - options for week view
10252                 * @returns {Month} month view instance
10253                 * @private
10254                 */
10255                function _createMonthView(controller, container, dragHandler, options) {
10256                    return monthViewFactory(
10257                        controller,
10258                        container,
10259                        dragHandler,
10260                        options
10261                    );
10262                }
10263
10264                /**
10265                 * Set child view's options recursively
10266                 * @param {View} view - parent view
10267                 * @param {function} func - option manipulate function
10268                 * @private
10269                 */
10270                function _setOptionRecurseively(view, func) {
10271                    view.recursive(function(childView) {
10272                        var opt = childView.options;
10273
10274                        if (!opt) {
10275                            return;
10276                        }
10277
10278                        func(childView, opt);
10279                    });
10280                }
10281
10282                util.CustomEvents.mixin(Calendar);
10283
10284                module.exports = Calendar;
10285
10286
10287                /***/ }),
10288
10289            
10289/***/ "./src/js/factory/controller.js":
10290            /*!**************************************!*\
10291  !*** ./src/js/factory/controller.js ***!
10292  \**************************************/
10293            /*! no static exports found */
10294            /***/ (function(module, exports, __webpack_require__) {
10295
10296                "use strict";
10297                /**
10298                 * @fileoverview Controller factory module.
10299                 * @author NHN FE Development Lab <[email protected]>
10300                 */
10301
10302
10303                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
10304                var Base = __webpack_require__(/*! ../controller/base */ "./src/js/controller/base.js"),
10305                    Core = __webpack_require__(/*! ../controller/viewMixin/core */ "./src/js/controller/viewMixin/core.js"),
10306                    Week = __webpack_require__(/*! ../controller/viewMixin/week */ "./src/js/controller/viewMixin/week.js"),
10307                    Month = __webpack_require__(/*! ../controller/viewMixin/month */ "./src/js/controller/viewMixin/month.js");
10308
10309                /**
10310                 * Mixin object. create object property to target and mix to that
10311                 * @param {object} from - source object
10312                 * @param {object} to - target object
10313                 * @param {string} propertyName - property name
10314                 */
10315                function mixin(from, to, propertyName) {
10316                    var obj = to[propertyName] = {};
10317
10318                    util.forEach(from, function(method, methodName) {
10319                        obj[methodName] = util.bind(method, to);
10320                    });
10321                }
10322
10323                /**
10324                 * @param {object} options - options for base controller
10325                 * @param {function} [options.groupFunc] - function for group each models {@see Collection#groupBy}
10326                 * @returns {Base} The controller instance.
10327                 */
10328                module.exports = function(options) {
10329                    var controller = new Base(options);
10330
10331                    mixin(Core, controller, 'Core');
10332                    mixin(Week, controller, 'Week');
10333                    mixin(Month, controller, 'Month');
10334
10335                    // for Theme
10336                    controller.Core.theme = controller.theme;
10337                    controller.Week.theme = controller.theme;
10338                    controller.Month.theme = controller.theme;
10339
10340                    return controller;
10341                };
10342
10343
10344                /***/ }),
10345
10346            
10346/***/ "./src/js/factory/monthView.js":
10347            /*!*************************************!*\
10348  !*** ./src/js/factory/monthView.js ***!
10349  \*************************************/
10350            /*! no static exports found */
10351            /***/ (function(module, exports, __webpack_require__) {
10352
10353                "use strict";
10354                /**
10355                 * @fileoverview Month view factory module
10356                 * @author NHN FE Development Lab <[email protected]>
10357                 */
10358
10359
10360                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
10361                var config = __webpack_require__(/*! ../config */ "./src/js/config.js"),
10362                    array = __webpack_require__(/*! ../common/array */ "./src/js/common/array.js"),
10363                    datetime = __webpack_require__(/*! ../common/datetime */ "./src/js/common/datetime.js"),
10364                    domutil = __webpack_require__(/*! ../common/domutil */ "./src/js/common/domutil.js"),
10365                    common = __webpack_require__(/*! ../common/common */ "./src/js/common/common.js"),
10366                    Month = __webpack_require__(/*! ../view/month/month */ "./src/js/view/month/month.js"),
10367                    MonthClick = __webpack_require__(/*! ../handler/month/click */ "./src/js/handler/month/click.js"),
10368                    MonthCreation = __webpack_require__(/*! ../handler/month/creation */ "./src/js/handler/month/creation.js"),
10369                    MonthResize = __webpack_require__(/*! ../handler/month/resize */ "./src/js/handler/month/resize.js"),
10370                    MonthMove = __webpack_require__(/*! ../handler/month/move */ "./src/js/handler/month/move.js"),
10371                    More = __webpack_require__(/*! ../view/month/more */ "./src/js/view/month/more.js"),
10372                    ScheduleCreationPopup = __webpack_require__(/*! ../view/popup/scheduleCreationPopup */ "./src/js/view/popup/scheduleCreationPopup.js"),
10373                    ScheduleDetailPopup = __webpack_require__(/*! ../view/popup/scheduleDetailPopup */ "./src/js/view/popup/scheduleDetailPopup.js"),
10374                    Schedule = __webpack_require__(/*! ../model/schedule */ "./src/js/model/schedule.js");
10375
10376                /**
10377                 * Get the view model for more layer
10378                 * @param {TZDate} date - date has more schedules
10379                 * @param {HTMLElement} target - target element
10380                 * @param {Collection} schedules - schedule collection
10381                 * @param {string[]} daynames - daynames to use upside of month more view
10382                 * @returns {object} view model
10383                 */
10384                function getViewModelForMoreLayer(date, target, schedules, daynames) {
10385                    schedules.each(function(schedule) {
10386                        var model = schedule.model;
10387                        schedule.hasMultiDates = !datetime.isSameDate(model.start, model.end);
10388                    });
10389
10390                    return {
10391                        target: target,
10392                        date: datetime.format(date, 'YYYY.MM.DD'),
10393                        dayname: daynames[date.getDay()],
10394                        schedules: schedules.sort(array.compare.schedule.asc)
10395                    };
10396                }
10397
10398                /**
10399                 * @param {Base} baseController - controller instance
10400                 * @param {HTMLElement} layoutContainer - container element for month view
10401                 * @param {Drag} dragHandler - drag handler instance
10402                 * @param {object} options - options
10403                 * @returns {object} view instance and refresh method
10404                 */
10405                function createMonthView(baseController, layoutContainer, dragHandler, options) {
10406                    var monthViewContainer, monthView, moreView, createView;
10407                    var clickHandler, creationHandler, resizeHandler, moveHandler, clearSchedulesHandler, onUpdateSchedule;
10408                    var onShowCreationPopup, onSaveNewSchedule, onShowEditPopup;
10409                    var detailView, onShowDetailPopup, onDeleteSchedule, onEditSchedule;
10410
10411                    monthViewContainer = domutil.appendHTMLElement(
10412                        'div', layoutContainer, config.classname('month'));
10413
10414                    monthView = new Month(options, monthViewContainer, baseController.Month);
10415                    moreView = new More(options.month, layoutContainer, baseController.theme);
10416
10417                    // handlers
10418                    clickHandler = new MonthClick(dragHandler, monthView, baseController);
10419                    if (!options.isReadOnly) {
10420                        creationHandler = new MonthCreation(dragHandler, monthView, baseController, options);
10421                        resizeHandler = new MonthResize(dragHandler, monthView, baseController);
10422                        moveHandler = new MonthMove(dragHandler, monthView, baseController);
10423                    }
10424
10425                    clearSchedulesHandler = function() {
10426                        if (moreView) {
10427                            moreView.hide();
10428                        }
10429                    };
10430
10431                    onUpdateSchedule = function() {
10432                        if (moreView) {
10433                            moreView.refresh();
10434                        }
10435                    };
10436
10437                    // binding +n click schedule
10438                    clickHandler.on('clickMore', function(clickMoreSchedule) {
10439                        var date = clickMoreSchedule.date,
10440                            target = clickMoreSchedule.target,
10441                            schedules = util.pick(baseController.findByDateRange(
10442                                datetime.start(date),
10443                                datetime.end(date)
10444                            ), clickMoreSchedule.ymd);
10445
10446                        schedules.items = util.filter(schedules.items, function(item) {
10447                            return options.month.scheduleFilter(item.model);
10448                        });
10449
10450                        if (schedules && schedules.length) {
10451                            moreView.render(getViewModelForMoreLayer(date, target, schedules, monthView.options.daynames));
10452
10453                            schedules.each(function(scheduleViewModel) {
10454                                if (scheduleViewModel) {
10455                                    /**
10456                                     * @event More#afterRenderSchedule
10457                                     */
10458                                    monthView.fire('afterRenderSchedule', {schedule: scheduleViewModel.model});
10459                                }
10460                            });
10461
10462                            monthView.fire('clickMore', {
10463                                date: clickMoreSchedule.date,
10464                                target: moreView.getMoreViewElement()
10465                            });
10466                        }
10467                    });
10468
10469                    // binding popup for schedules creation
10470                    if (options.useCreationPopup) {
10471                        createView = new ScheduleCreationPopup(layoutContainer, baseController.calendars, options.usageStatistics);
10472
10473                        onSaveNewSchedule = function(scheduleData) {
10474                            creationHandler.fire('beforeCreateSchedule', util.extend(scheduleData, {
10475                                useCreationPopup: true
10476                            }));
10477                        };
10478                        createView.on('beforeCreateSchedule', onSaveNewSchedule);
10479                    }
10480
10481                    // binding popup for schedule detail
10482                    if (options.useDetailPopup) {
10483                        detailView = new ScheduleDetailPopup(layoutContainer, baseController.calendars);
10484                        onShowDetailPopup = function(eventData) {
10485                            var scheduleId = eventData.schedule.calendarId;
10486                            eventData.calendar = common.find(baseController.calendars, function(calendar) {
10487                                return calendar.id === scheduleId;
10488                            });
10489
10490                            if (options.isReadOnly) {
10491                                eventData.schedule = util.extend({}, eventData.schedule, {isReadOnly: true});
10492                            }
10493
10494                            detailView.render(eventData);
10495                        };
10496                        onDeleteSchedule = function(eventData) {
10497                            if (creationHandler) {
10498                                creationHandler.fire('beforeDeleteSchedule', eventData);
10499                            }
10500                        };
10501                        onEditSchedule = function(eventData) {
10502                            moveHandler.fire('beforeUpdateSchedule', eventData);
10503                        };
10504
10505                        clickHandler.on('clickSchedule', onShowDetailPopup);
10506
10507                        detailView.on('beforeDeleteSchedule', onDeleteSchedule);
10508
10509                        if (options.useCreationPopup) {
10510                            onShowEditPopup = function(eventData) {
10511                                createView.setCalendars(baseController.calendars);
10512                                createView.render(eventData);
10513                            };
10514                            createView.on('beforeUpdateSchedule', onEditSchedule);
10515                            detailView.on('beforeUpdateSchedule', onShowEditPopup);
10516                        } else {
10517                            detailView.on('beforeUpdateSchedule', onEditSchedule);
10518                        }
10519                    }
10520
10521                    // binding clear schedules
10522                    baseController.on('clearSchedules', clearSchedulesHandler);
10523
10524                    // bind update schedule event
10525                    baseController.on('updateSchedule', onUpdateSchedule);
10526
10527                    if (moveHandler) {
10528                        moveHandler.on('monthMoveStart_from_morelayer', function() {
10529                            moreView.hide();
10530                        });
10531                    }
10532
10533                    monthView.handler = {
10534                        click: {
10535                            'default': clickHandler
10536                        }
10537                    };
10538
10539                    if (!options.isReadOnly) {
10540                        monthView.handler = util.extend(monthView.handler, {
10541                            creation: {
10542                                'default': creationHandler
10543                            },
10544                            resize: {
10545                                'default': resizeHandler
10546                            },
10547                            move: {
10548                                'default': moveHandler
10549                            }
10550                        });
10551                    }
10552
10553                    monthView._beforeDestroy = function() {
10554                        moreView.destroy();
10555                        baseController.off('clearSchedules', clearSchedulesHandler);
10556                        baseController.off('updateSchedule', onUpdateSchedule);
10557
10558                        util.forEach(monthView.handler, function(type) {
10559                            util.forEach(type, function(handler) {
10560                                handler.off();
10561                                handler.destroy();
10562                            });
10563                        });
10564
10565                        if (options.useCreationPopup && options.useDetailPopup) {
10566                            createView.off('beforeUpdateSchedule', onUpdateSchedule);
10567                        }
10568
10569                        if (options.useCreationPopup) {
10570                            if (creationHandler) {
10571                                creationHandler.off('beforeCreateSchedule', onShowCreationPopup);
10572                            }
10573                            createView.off('saveSchedule', onSaveNewSchedule);
10574                            createView.destroy();
10575                        }
10576
10577                        if (options.useDetailPopup) {
10578                            clickHandler.off('clickSchedule', onShowDetailPopup);
10579                            detailView.off('beforeUpdateSchedule', onUpdateSchedule);
10580                            detailView.off('beforeDeleteSchedule', onDeleteSchedule);
10581                            detailView.destroy();
10582                        }
10583                    };
10584
10585                    // add controller
10586                    monthView.controller = baseController.Month;
10587
10588                    return {
10589                        view: monthView,
10590                        refresh: function() {
10591                            monthView.vLayout.refresh();
10592                        },
10593                        openCreationPopup: function(schedule) {
10594                            if (createView && creationHandler) {
10595                                creationHandler.invokeCreationClick(Schedule.create(schedule));
10596                            }
10597                        },
10598                        showCreationPopup: function(eventData) {
10599                            if (createView) {
10600                                createView.setCalendars(baseController.calendars);
10601                                createView.render(eventData);
10602                            }
10603                        },
10604                        hideMoreView: function() {
10605                            if (moreView) {
10606                                moreView.hide();
10607                            }
10608                        }
10609                    };
10610                }
10611
10612                module.exports = createMonthView;
10613
10614
10615                /***/ }),
10616
10617            
10617/***/ "./src/js/factory/weekView.js":
10618            /*!************************************!*\
10619  !*** ./src/js/factory/weekView.js ***!
10620  \************************************/
10621            /*! no static exports found */
10622            /***/ (function(module, exports, __webpack_require__) {
10623
10624                "use strict";
10625                /**
10626                 * @fileoverview Factory module for WeekView
10627                 * @author NHN FE Development Lab <[email protected]>
10628                 */
10629
10630
10631                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
10632                var config = __webpack_require__(/*! ../config */ "./src/js/config.js");
10633                var domutil = __webpack_require__(/*! ../common/domutil */ "./src/js/common/domutil.js");
10634                var common = __webpack_require__(/*! ../common/common */ "./src/js/common/common.js");
10635                var VLayout = __webpack_require__(/*! ../common/vlayout */ "./src/js/common/vlayout.js");
10636                var reqAnimFrame = __webpack_require__(/*! ../common/reqAnimFrame */ "./src/js/common/reqAnimFrame.js");
10637                var Schedule = __webpack_require__(/*! ../model/schedule */ "./src/js/model/schedule.js");
10638// Parent views
10639                var Week = __webpack_require__(/*! ../view/week/week */ "./src/js/view/week/week.js");
10640
10641// Sub views
10642                var DayName = __webpack_require__(/*! ../view/week/dayname */ "./src/js/view/week/dayname.js");
10643                var DayGrid = __webpack_require__(/*! ../view/week/dayGrid */ "./src/js/view/week/dayGrid.js");
10644                var TimeGrid = __webpack_require__(/*! ../view/week/timeGrid */ "./src/js/view/week/timeGrid.js");
10645                var ScheduleCreationPopup = __webpack_require__(/*! ../view/popup/scheduleCreationPopup */ "./src/js/view/popup/scheduleCreationPopup.js");
10646                var ScheduleDetailPopup = __webpack_require__(/*! ../view/popup/scheduleDetailPopup */ "./src/js/view/popup/scheduleDetailPopup.js");
10647
10648// Handlers
10649                var DayNameClick = __webpack_require__(/*! ../handler/time/clickDayname */ "./src/js/handler/time/clickDayname.js");
10650                var DayGridClick = __webpack_require__(/*! ../handler/daygrid/click */ "./src/js/handler/daygrid/click.js");
10651                var DayGridCreation = __webpack_require__(/*! ../handler/daygrid/creation */ "./src/js/handler/daygrid/creation.js");
10652                var DayGridMove = __webpack_require__(/*! ../handler/daygrid/move */ "./src/js/handler/daygrid/move.js");
10653                var DayGridResize = __webpack_require__(/*! ../handler/daygrid/resize */ "./src/js/handler/daygrid/resize.js");
10654                var TimeClick = __webpack_require__(/*! ../handler/time/click */ "./src/js/handler/time/click.js");
10655                var TimeCreation = __webpack_require__(/*! ../handler/time/creation */ "./src/js/handler/time/creation.js");
10656                var TimeMove = __webpack_require__(/*! ../handler/time/move */ "./src/js/handler/time/move.js");
10657                var TimeResize = __webpack_require__(/*! ../handler/time/resize */ "./src/js/handler/time/resize.js");
10658
10659                var DAYGRID_HANDLDERS = {
10660                    'click': DayGridClick,
10661                    'creation': DayGridCreation,
10662                    'move': DayGridMove,
10663                    'resize': DayGridResize
10664                };
10665                var TIMEGRID_HANDLERS = {
10666                    'click': TimeClick,
10667                    'creation': TimeCreation,
10668                    'move': TimeMove,
10669                    'resize': TimeResize
10670                };
10671                var DEFAULT_PANELS = [
10672                    {
10673                        name: 'milestone',
10674                        type: 'daygrid',
10675                        minHeight: 20,
10676                        maxHeight: 80,
10677                        showExpandableButton: true,
10678                        maxExpandableHeight: 210,
10679                        handlers: ['click'],
10680                        show: true
10681                    },
10682                    {
10683                        name: 'task',
10684                        type: 'daygrid',
10685                        minHeight: 40,
10686                        maxHeight: 120,
10687                        showExpandableButton: true,
10688                        maxExpandableHeight: 210,
10689                        handlers: ['click', 'move'],
10690                        show: true
10691                    },
10692                    {
10693                        name: 'allday',
10694                        type: 'daygrid',
10695                        minHeight: 30,
10696                        maxHeight: 80,
10697                        showExpandableButton: true,
10698                        maxExpandableHeight: 210,
10699                        handlers: ['click', 'creation', 'move', 'resize'],
10700                        show: true
10701                    },
10702                    {
10703                        name: 'time',
10704                        type: 'timegrid',
10705                        autoHeight: true,
10706                        handlers: ['click', 'creation', 'move', 'resize'],
10707                        show: true
10708                    }
10709                ];
10710
10711                /* eslint-disable complexity*/
10712                module.exports = function(baseController, layoutContainer, dragHandler, options, viewName) {
10713                    var panels = [],
10714                        vpanels = [];
10715                    var weekView, dayNameContainer, dayNameView, vLayoutContainer, vLayout;
10716                    var createView, onSaveNewSchedule, onSetCalendars, lastVPanel;
10717                    var detailView, onShowDetailPopup, onDeleteSchedule, onShowEditPopup, onEditSchedule;
10718                    var taskView = options.taskView;
10719                    var scheduleView = options.scheduleView;
10720                    var viewVisibilities = {
10721                        'milestone': util.isArray(taskView) ? util.inArray('milestone', taskView) >= 0 : taskView,
10722                        'task': util.isArray(taskView) ? util.inArray('task', taskView) >= 0 : taskView,
10723                        'allday': util.isArray(scheduleView) ? util.inArray('allday', scheduleView) >= 0 : scheduleView,
10724                        'time': util.isArray(scheduleView) ? util.inArray('time', scheduleView) >= 0 : scheduleView
10725                    };
10726
10727                    // Make panels by view sequence and visibilities
10728                    util.forEach(DEFAULT_PANELS, function(panel) {
10729                        var name = panel.name;
10730
10731                        panel = util.extend({}, panel);
10732                        panels.push(panel);
10733
10734                        // Change visibilities
10735                        panel.show = viewVisibilities[name];
10736
10737                        if (panel.show) {
10738                            if (vpanels.length) {
10739                                vpanels.push({
10740                                    isSplitter: true
10741                                });
10742                            }
10743                            vpanels.push(util.extend({}, panel));
10744                        }
10745                    });
10746
10747                    if (vpanels.length) {
10748                        lastVPanel = vpanels[vpanels.length - 1];
10749                        lastVPanel.autoHeight = true;
10750                        lastVPanel.maxHeight = null;
10751                        lastVPanel.showExpandableButton = false;
10752
10753                        util.forEach(panels, function(panel) {
10754                            if (panel.name === lastVPanel.name) {
10755                                panel.showExpandableButton = false;
10756
10757                                return false;
10758                            }
10759
10760                            return true;
10761                        });
10762                    }
10763
10764                    util.extend(options.week, {panels: panels});
10765
10766                    weekView = new Week(null, options.week, layoutContainer, panels, viewName);
10767                    weekView.handler = {
10768                        click: {},
10769                        dayname: {},
10770                        creation: {},
10771                        move: {},
10772                        resize: {}
10773                    };
10774
10775                    dayNameContainer = domutil.appendHTMLElement('div', weekView.container, config.classname('dayname-layout'));
10776
10777                    /**********
10778                     * Day name (top row(Mon, Tue, Wed...))
10779                     **********/
10780                    dayNameView = new DayName(options, dayNameContainer, baseController.theme);
10781                    weekView.handler.dayname.date = new DayNameClick(dragHandler, dayNameView, baseController);
10782                    weekView.addChild(dayNameView);
10783
10784                    /**********
10785                     * Initialize vertical layout module
10786                     **********/
10787                    vLayoutContainer = domutil.appendHTMLElement('div', weekView.container, config.classname('vlayout-area'));
10788                    vLayoutContainer.style.height = (domutil.getSize(weekView.container)[1] - dayNameView.container.offsetHeight) + 'px';
10789
10790                    vLayout = new VLayout({
10791                        panels: vpanels,
10792                        panelHeights: options.week.panelHeights || []
10793                    }, vLayoutContainer, baseController.theme);
10794
10795                    weekView.vLayout = vLayout;
10796
10797                    util.forEach(panels, function(panel) {
10798                        var name = panel.name;
10799                        var handlers = panel.handlers;
10800                        var view;
10801
10802                        if (!panel.show) {
10803                            return;
10804                        }
10805
10806                        if (panel.type === 'daygrid') {
10807                            /**********
10808                             * Schedule panel by Grid
10809                             **********/
10810                            view = new DayGrid(name, options, vLayout.getPanelByName(panel.name).container, baseController.theme);
10811                            view.on('afterRender', function(viewModel) {
10812                                vLayout.getPanelByName(name).setHeight(null, viewModel.height);
10813                            });
10814
10815                            weekView.addChild(view);
10816
10817                            util.forEach(handlers, function(type) {
10818                                if (!options.isReadOnly || type === 'click') {
10819                                    weekView.handler[type][name] =
10820                                        new DAYGRID_HANDLDERS[type](dragHandler, view, baseController, options);
10821                                    view.addHandler(type, weekView.handler[type][name], vLayout.getPanelByName(name));
10822                                }
10823                            });
10824                        } else if (panel.type === 'timegrid') {
10825                            /**********
10826                             * Schedule panel by TimeGrid
10827                             **********/
10828                            view = new TimeGrid(name, options, vLayout.getPanelByName(name).container);
10829                            weekView.addChild(view);
10830                            util.forEach(handlers, function(type) {
10831                                if (!options.isReadOnly || type === 'click') {
10832                                    weekView.handler[type][name] =
10833                                        new TIMEGRID_HANDLERS[type](dragHandler, view, baseController, options);
10834                                }
10835                            });
10836
10837                            view.on('clickTimezonesCollapsedBtn', function() {
10838                                var timezonesCollapsed = !weekView.state.timezonesCollapsed;
10839
10840                                weekView.setState({
10841                                    timezonesCollapsed: timezonesCollapsed
10842                                });
10843                                reqAnimFrame.requestAnimFrame(function() {
10844                                    if (!weekView.invoke('clickTimezonesCollapseBtn', timezonesCollapsed)) {
10845                                        weekView.render();
10846                                    }
10847                                });
10848                            });
10849                        }
10850                    });
10851
10852                    vLayout.on('resize', function() {
10853                        reqAnimFrame.requestAnimFrame(function() {
10854                            weekView.render();
10855                        });
10856                    });
10857
10858                    // binding create schedules event
10859                    if (options.useCreationPopup) {
10860                        createView = new ScheduleCreationPopup(layoutContainer, baseController.calendars, options.usageStatistics);
10861
10862                        onSaveNewSchedule = function(scheduleData) {
10863                            util.extend(scheduleData, {
10864                                useCreationPopup: true
10865                            });
10866                            if (scheduleData.isAllDay) {
10867                                weekView.handler.creation.allday.fire('beforeCreateSchedule', scheduleData);
10868                            } else {
10869                                weekView.handler.creation.time.fire('beforeCreateSchedule', scheduleData);
10870                            }
10871                        };
10872                        createView.on('beforeCreateSchedule', onSaveNewSchedule);
10873                    }
10874
10875                    onSetCalendars = function(calendars) {
10876                        if (createView) {
10877                            createView.setCalendars(calendars);
10878                        }
10879                    };
10880
10881                    baseController.on('setCalendars', onSetCalendars);
10882
10883                    // binding popup for schedule detail
10884                    if (options.useDetailPopup) {
10885                        detailView = new ScheduleDetailPopup(layoutContainer, baseController.calendars);
10886                        onShowDetailPopup = function(eventData) {
10887                            var scheduleId = eventData.schedule.calendarId;
10888                            eventData.calendar = common.find(baseController.calendars, function(calendar) {
10889                                return calendar.id === scheduleId;
10890                            });
10891
10892                            if (options.isReadOnly) {
10893                                eventData.schedule = util.extend({}, eventData.schedule, {isReadOnly: true});
10894                            }
10895
10896                            detailView.render(eventData);
10897                        };
10898                        onDeleteSchedule = function(eventData) {
10899                            if (eventData.isAllDay) {
10900                                weekView.handler.creation.allday.fire('beforeDeleteSchedule', eventData);
10901                            } else {
10902                                weekView.handler.creation.time.fire('beforeDeleteSchedule', eventData);
10903                            }
10904                        };
10905                        onEditSchedule = function(eventData) {
10906                            if (eventData.isAllDay) {
10907                                weekView.handler.move.allday.fire('beforeUpdateSchedule', eventData);
10908                            } else {
10909                                weekView.handler.move.time.fire('beforeUpdateSchedule', eventData);
10910                            }
10911                        };
10912
10913                        util.forEach(weekView.handler.click, function(panel) {
10914                            panel.on('clickSchedule', onShowDetailPopup);
10915                        });
10916                        if (options.useCreationPopup) {
10917                            onShowEditPopup = function(eventData) {
10918                                var calendars = baseController.calendars;
10919                                eventData.isEditMode = true;
10920                                createView.setCalendars(calendars);
10921                                createView.render(eventData);
10922                            };
10923                            createView.on('beforeUpdateSchedule', onEditSchedule);
10924                            detailView.on('beforeUpdateSchedule', onShowEditPopup);
10925                        } else {
10926                            detailView.on('beforeUpdateSchedule', onEditSchedule);
10927                        }
10928                        detailView.on('beforeDeleteSchedule', onDeleteSchedule);
10929                    }
10930
10931                    weekView.on('afterRender', function() {
10932                        vLayout.refresh();
10933                    });
10934
10935                    // add controller
10936                    weekView.controller = baseController.Week;
10937
10938                    // add destroy
10939                    weekView._beforeDestroy = function() {
10940                        util.forEach(weekView.handler, function(type) {
10941                            util.forEach(type, function(handler) {
10942                                handler.off();
10943                                handler.destroy();
10944                            });
10945                        });
10946
10947                        if (options.useCreationPopup) {
10948                            createView.off('beforeCreateSchedule', onSaveNewSchedule);
10949                            createView.destroy();
10950                        }
10951
10952                        if (options.useDetailPopup) {
10953                            detailView.off('beforeDeleteSchedule', onDeleteSchedule);
10954                            detailView.destroy();
10955                        }
10956
10957                        weekView.off();
10958                    };
10959
10960                    return {
10961                        view: weekView,
10962                        refresh: function() {
10963                            var weekViewHeight = weekView.getViewBound().height,
10964                                daynameViewHeight = domutil.getBCRect(
10965                                    dayNameView.container
10966                                ).height;
10967
10968                            vLayout.container.style.height =
10969                                weekViewHeight - daynameViewHeight + 'px';
10970                            vLayout.refresh();
10971                        },
10972                        scrollToNow: function() {
10973                            weekView.children.each(function(childView) {
10974                                if (childView.scrollToNow) {
10975                                    childView.scrollToNow();
10976                                }
10977                            });
10978                        },
10979                        openCreationPopup: function(schedule) {
10980                            if (createView) {
10981                                if (schedule.isAllDay) {
10982                                    weekView.handler.creation.allday.invokeCreationClick(Schedule.create(schedule));
10983                                } else {
10984                                    weekView.handler.creation.time.invokeCreationClick(Schedule.create(schedule));
10985                                }
10986                            }
10987                        },
10988                        showCreationPopup: function(eventData) {
10989                            if (createView) {
10990                                createView.setCalendars(baseController.calendars);
10991                                createView.render(eventData);
10992                            }
10993                        }
10994                    };
10995                };
10996
10997
10998                /***/ }),
10999
11000            
11000/***/ "./src/js/handler/daygrid/click.js":
11001            /*!*****************************************!*\
11002  !*** ./src/js/handler/daygrid/click.js ***!
11003  \*****************************************/
11004            /*! no static exports found */
11005            /***/ (function(module, exports, __webpack_require__) {
11006
11007                "use strict";
11008                /**
11009                 * @fileoverview Click handle module for daygrid schedules
11010                 * @author NHN FE Development Lab <[email protected]>
11011                 */
11012
11013
11014                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
11015                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
11016                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
11017                var DayGridMove = __webpack_require__(/*! ./move */ "./src/js/handler/daygrid/move.js");
11018
11019                /**
11020                 * @constructor
11021                 * @implements {Handler}
11022                 * @mixes CustomEvents
11023                 * @param {Drag} [dragHandler] - Drag handler instance.
11024                 * @param {DayGrid} [view] - daygrid view instance.
11025                 * @param {Base} [controller] - Base controller instance.
11026                 */
11027                function DayGridClick(dragHandler, view, controller) {
11028                    /**
11029                     * @type {Drag}
11030                     */
11031                    this.dragHandler = dragHandler;
11032
11033                    /**
11034                     * @type {DayGrid}
11035                     */
11036                    this.view = view;
11037
11038                    /**
11039                     * @type {Base}
11040                     */
11041                    this.controller = controller;
11042
11043                    dragHandler.on({
11044                        'click': this._onClick
11045                    }, this);
11046                }
11047
11048                /**
11049                 * Destroy handler module
11050                 */
11051                DayGridClick.prototype.destroy = function() {
11052                    this.dragHandler.off(this);
11053                    this.view = this.controller = this.dragHandler = null;
11054                };
11055
11056                /**
11057                 * Check target element is expected condition for activate this plugins.
11058                 * @param {HTMLElement} target - The element to check
11059                 * @returns {string} - model id
11060                 */
11061                DayGridClick.prototype.checkExpectCondition = DayGridMove.prototype.checkExpectedCondition;
11062
11063                /**
11064                 * Click event handler
11065                 * @param {object} clickEvent - click event data
11066                 * @emits DayGridClick#clickSchedule
11067                 * @emits DayGridClick#collapse
11068                 * @emits DayGridClick#expand
11069                 */
11070                DayGridClick.prototype._onClick = function(clickEvent) {
11071                    var self = this,
11072                        target = clickEvent.target,
11073                        dayGridScheduleView = this.checkExpectCondition(target),
11074                        scheduleCollection = this.controller.schedules,
11075                        collapseBtnElement = domutil.closest(
11076                            target,
11077                            config.classname('.weekday-collapse-btn')
11078                        ),
11079                        expandBtnElement = domutil.closest(
11080                            target,
11081                            config.classname('.weekday-exceed-in-week')
11082                        ),
11083                        containsTarget = this.view.container.contains(target);
11084                    var blockElement, scheduleElement;
11085
11086                    if (!containsTarget) {
11087                        return;
11088                    }
11089
11090                    if (collapseBtnElement) {
11091                        /**
11092                         * click collpase btn event
11093                         * @events DayGridClick#collapse
11094                         */
11095                        self.fire('collapse');
11096
11097                        return;
11098                    }
11099
11100                    if (expandBtnElement) {
11101                        this.view.setState({
11102                            clickedExpandBtnIndex: parseInt(domutil.getData(expandBtnElement, 'index'), 10)
11103                        });
11104
11105                        /**
11106                         * click expand btn event
11107                         * @events DayGridClick#expand
11108                         */
11109                        self.fire('expand');
11110
11111                        return;
11112                    }
11113
11114                    if (!dayGridScheduleView) {
11115                        return;
11116                    }
11117
11118                    scheduleElement = domutil.closest(target, config.classname('.weekday-schedule'));
11119                    if (scheduleElement) {
11120                        blockElement = domutil.closest(target, config.classname('.weekday-schedule-block'));
11121                        scheduleCollection.doWhenHas(domutil.getData(blockElement, 'id'), function(schedule) {
11122                            /**
11123                             * @events DayGridClick#clickSchedule
11124                             * @type {object}
11125                             * @property {Schedule} schedule - schedule instance
11126                             * @property {MouseEvent} event - MouseEvent object
11127                             */
11128                            self.fire('clickSchedule', {
11129                                schedule: schedule,
11130                                event: clickEvent.originEvent
11131                            });
11132                        });
11133                    }
11134                };
11135
11136                util.CustomEvents.mixin(DayGridClick);
11137
11138                module.exports = DayGridClick;
11139
11140
11141                /***/ }),
11142
11143            
11143/***/ "./src/js/handler/daygrid/core.js":
11144            /*!****************************************!*\
11145  !*** ./src/js/handler/daygrid/core.js ***!
11146  \****************************************/
11147            /*! no static exports found */
11148            /***/ (function(module, exports, __webpack_require__) {
11149
11150                "use strict";
11151                /* eslint no-shadow: 0 */
11152                /**
11153                 * @fileoverview Base mixin object for handler/daygrid
11154                 * @author NHN FE Development Lab <[email protected]>
11155                 */
11156
11157
11158                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
11159                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
11160                var domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js");
11161                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
11162                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
11163
11164                var mmax = Math.max,
11165                    mmin = Math.min;
11166
11167                /**
11168                 * @mixin dayGridCore
11169                 */
11170                var dayGridCore = {
11171                    /**
11172                     * @param {view} view - view instance.
11173                     * @param {MouseEvent} mouseEvent - mouse schedule object.
11174                     * @returns {function|boolean} function that return schedule data by mouse events.
11175                     */
11176                    _retriveScheduleData: function(view, mouseEvent) {
11177                        var weekdayView = view.children.single(),
11178                            container,
11179                            datesInRange,
11180                            containerWidth,
11181                            mousePos,
11182                            dragStartXIndex,
11183                            grids,
11184                            range;
11185
11186                        if (!weekdayView) {
11187                            return false;
11188                        }
11189
11190                        container = weekdayView.container;
11191                        range = weekdayView.getRenderDateRange();
11192                        datesInRange = range.length;
11193                        grids = weekdayView.getRenderDateGrids();
11194
11195                        containerWidth = domutil.getSize(container)[0];
11196                        mousePos = domevent.getMousePosition(mouseEvent, container);
11197                        dragStartXIndex = getX(grids, common.ratio(containerWidth, 100, mousePos[0]));
11198
11199                        /**
11200                         * @param {MouseEvent} mouseEvent - mouse schedule in drag actions.
11201                         * @returns {object} schedule data.
11202                         */
11203                        return function(mouseEvent) {
11204                            var pos = domevent.getMousePosition(mouseEvent, container),
11205                                mouseX = pos[0],
11206                                xIndex = getX(grids, common.ratio(containerWidth, 100, mouseX));
11207
11208                            // apply limitation of creation schedule X index.
11209                            xIndex = mmax(xIndex, 0);
11210                            xIndex = mmin(xIndex, datesInRange - 1);
11211
11212                            return {
11213                                relatedView: view,
11214                                dragStartXIndex: dragStartXIndex,
11215                                datesInRange: datesInRange,
11216                                xIndex: xIndex,
11217                                triggerEvent: mouseEvent.type,
11218                                grids: grids,
11219                                range: range
11220                            };
11221                        };
11222                    },
11223
11224                    /**
11225                     * @param {view} view - view instance.
11226                     * @param {TZDate} startDate - start date
11227                     * @returns {function|boolean} function that return schedule data by mouse events.
11228                     */
11229                    _retriveScheduleDataFromDate: function(view, startDate) {
11230                        var weekdayView = view.children.single(),
11231                            datesInRange,
11232                            dragStartXIndex = 0,
11233                            grids,
11234                            range;
11235
11236                        if (!weekdayView) {
11237                            return false;
11238                        }
11239
11240                        range = weekdayView.getRenderDateRange();
11241                        datesInRange = range.length;
11242                        grids = weekdayView.getRenderDateGrids();
11243
11244                        util.forEach(range, function(date, index) {
11245                            if (datetime.isSameDate(date, startDate)) {
11246                                dragStartXIndex = index;
11247                            }
11248                        });
11249
11250                        /**
11251                         * @param {TZDate} targetDate - target date
11252                         * @returns {object} schedule data.
11253                         */
11254                        return function(targetDate) {
11255                            var xIndex = 0;
11256
11257                            util.forEach(range, function(date, index) {
11258                                if (datetime.isSameDate(date, targetDate)) {
11259                                    xIndex = index;
11260                                }
11261                            });
11262
11263                            // apply limitation of creation schedule X index.
11264                            xIndex = mmax(xIndex, 0);
11265                            xIndex = mmin(xIndex, datesInRange - 1);
11266
11267                            return {
11268                                relatedView: view,
11269                                dragStartXIndex: dragStartXIndex,
11270                                datesInRange: datesInRange,
11271                                xIndex: xIndex,
11272                                triggerEvent: 'manual',
11273                                grids: grids,
11274                                range: range
11275                            };
11276                        };
11277                    }
11278                };
11279
11280                /**
11281                 * Get the left index
11282                 * @param {Array} grids - grid size information
11283                 * @param {number} left - left position(percent)
11284                 * @returns {number} grid left index
11285                 */
11286                function getX(grids, left) {
11287                    var i = 0;
11288                    var length = grids.length;
11289                    var grid;
11290                    if (left < 0) {
11291                        left = 0;
11292                    }
11293
11294                    for (; i < length; i += 1) {
11295                        grid = grids[i];
11296                        if (grid.left <= left && left <= (grid.left + grid.width)) {
11297                            return i;
11298                        }
11299                    }
11300
11301                    return i;
11302                }
11303
11304                module.exports = dayGridCore;
11305
11306
11307                /***/ }),
11308
11309            
11309/***/ "./src/js/handler/daygrid/creation.js":
11310            /*!********************************************!*\
11311  !*** ./src/js/handler/daygrid/creation.js ***!
11312  \********************************************/
11313            /*! no static exports found */
11314            /***/ (function(module, exports, __webpack_require__) {
11315
11316                "use strict";
11317                /**
11318                 * @fileoverview Handler module for WeekdayInWeek view's creation actions.
11319                 * @author NHN FE Development Lab <[email protected]>
11320                 */
11321
11322
11323                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
11324                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
11325                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
11326                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
11327                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
11328                var domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js");
11329                var dayGridCore = __webpack_require__(/*! ./core */ "./src/js/handler/daygrid/core.js");
11330                var DayGridCreationGuide = __webpack_require__(/*! ./creationGuide */ "./src/js/handler/daygrid/creationGuide.js");
11331                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
11332
11333                var CLICK_DELAY = 300;
11334
11335                /**
11336                 * @constructor
11337                 * @implements {Handler}
11338                 * @mixes dayGridCore
11339                 * @mixes CutomEvents
11340                 * @param {Drag} [dragHandler] - Drag handler instance.
11341                 * @param {DayGrid} [view] - DayGrid view instance.
11342                 * @param {Base} [controller] - Base controller instance.
11343                 * @param {Options} [options] - calendar Options
11344                 */
11345                function DayGridCreation(dragHandler, view, controller, options) {
11346                    /**
11347                     * Drag handler instance.
11348                     * @type {Drag}
11349                     */
11350                    this.dragHandler = dragHandler;
11351
11352                    /**
11353                     * view instance.
11354                     * @type {DayGrid}
11355                     */
11356                    this.view = view;
11357
11358                    /**
11359                     * Base controller instance.
11360                     * @type {Base}
11361                     */
11362                    this.controller = controller;
11363
11364                    /**
11365                     * @type {function}
11366                     */
11367                    this.getScheduleDataFunc = null;
11368
11369                    /**
11370                     * @type {DayGridCreationGuide}
11371                     */
11372                    this.guide = new DayGridCreationGuide(this);
11373
11374                    /**
11375                     * @type {boolean}
11376                     */
11377                    this._requestOnClick = false;
11378
11379                    /**
11380                     * @type {boolean}
11381                     */
11382                    this._disableDblClick = options.disableDblClick;
11383
11384                    /**
11385                     * @type {boolean}
11386                     */
11387                    this._disableClick = options.disableClick;
11388
11389                    dragHandler.on('dragStart', this._onDragStart, this);
11390                    dragHandler.on('click', this._onClick, this);
11391
11392                    if (this._disableDblClick) {
11393                        CLICK_DELAY = 0;
11394                    } else {
11395                        domevent.on(view.container, 'dblclick', this._onDblClick, this);
11396                    }
11397                }
11398
11399                /**
11400                 * Destroy method
11401                 */
11402                DayGridCreation.prototype.destroy = function() {
11403                    this.guide.destroy();
11404                    this.dragHandler.off(this);
11405
11406                    if (this.view && this.view.container) {
11407                        domevent.off(this.view.container, 'dblclick', this._onDblClick, this);
11408                    }
11409
11410                    this.dragHandler = this.view = this.controller = this.getScheduleDataFunc = null;
11411                };
11412
11413                /**
11414                 * Check dragstart target is expected conditions for this handler.
11415                 * @param {HTMLElement} target - dragstart event handler's target element.
11416                 * @returns {boolean|WeekdayInWeek} return WeekdayInWeek view instance when satiate condition.
11417                 */
11418                DayGridCreation.prototype.checkExpectedCondition = function(target) {
11419                    var cssClass = domutil.getClass(target).trim();
11420                    var excludeTarget = true;
11421                    var matches, schedulesElement;
11422
11423                    if (domutil.closest(target, config.classname('.weekday-exceed-in-week'))
11424                        || domutil.closest(target, config.classname('.weekday-collapse-btn'))
11425                    ) {
11426                        return false;
11427                    }
11428
11429                    if (domutil.closest(target, config.classname('.weekday-schedule-block'), excludeTarget)) {
11430                        return false;
11431                    }
11432
11433                    schedulesElement = domutil.closest(target, config.classname('.weekday-schedules'));
11434                    if (!schedulesElement && cssClass !== config.classname('weekday-schedules')) {
11435                        return false;
11436                    }
11437
11438                    target = schedulesElement ? schedulesElement.parentNode : target.parentNode;
11439                    cssClass = domutil.getClass(target);
11440                    matches = cssClass.match(config.daygrid.getViewIDRegExp);
11441
11442                    if (!matches || matches.length < 2) {
11443                        return false;
11444                    }
11445
11446                    return util.pick(this.view.children.items, matches[1]);
11447                };
11448
11449                /**
11450                 * Request schedule model creation to controller by custom schedules.
11451                 * @fires {DayGridCreation#beforeCreateSchedule}
11452                 * @param {object} scheduleData - schedule data from DayGridCreation module.
11453                 */
11454                DayGridCreation.prototype._createSchedule = function(scheduleData) {
11455                    var dateRange = scheduleData.range,
11456                        startXIndex = scheduleData.dragStartXIndex,
11457                        xIndex = scheduleData.xIndex,
11458                        start, end;
11459
11460                    // when inverse start, end then change it.
11461                    if (xIndex < startXIndex) {
11462                        startXIndex = xIndex + startXIndex;
11463                        xIndex = startXIndex - xIndex;
11464                        startXIndex = startXIndex - xIndex;
11465                    }
11466
11467                    start = new TZDate(dateRange[startXIndex]);
11468                    end = datetime.end(dateRange[xIndex]);
11469
11470                    /**
11471                     * @event {DayGridCreation#beforeCreateSchedule}
11472                     * @type {object}
11473                     * @property {string} category - schedule category
11474                     * @property {boolean} isAllDay - whether schedule is fired in view area?
11475                     * @property {Date} start - select start time
11476                     * @property {Date} end - select end time
11477                     * @property {DayGridCreationGuide} guide - DayGridCreationGuide instance
11478                     * @property {string} triggerEventName - event name
11479                     */
11480                    this.fire('beforeCreateSchedule', {
11481                        category: this.view.options.viewName,
11482                        isAllDay: true,
11483                        start: start,
11484                        end: end,
11485                        guide: this.guide,
11486                        triggerEventName: scheduleData.triggerEvent
11487                    });
11488                };
11489
11490                /**
11491                 * DragStart event handler method.
11492                 * @emits DayGridCreation#dragstart
11493                 * @param {object} dragStartEventData - Drag#dragStart event handler schedule data.
11494                 */
11495                DayGridCreation.prototype._onDragStart = function(dragStartEventData) {
11496                    var target = dragStartEventData.target,
11497                        result = this.checkExpectedCondition(target),
11498                        getScheduleDataFunc,
11499                        scheduleData;
11500
11501                    if (!result) {
11502                        return;
11503                    }
11504
11505                    this.dragHandler.on({
11506                        drag: this._onDrag,
11507                        dragEnd: this._onDragEnd
11508                    }, this);
11509
11510                    getScheduleDataFunc = this._retriveScheduleData(this.view, dragStartEventData.originEvent);
11511                    this.getScheduleDataFunc = getScheduleDataFunc;
11512
11513                    scheduleData = getScheduleDataFunc(dragStartEventData.originEvent);
11514
11515                    /**
11516                     * @event DayGridCreation#dragstart
11517                     * @type {object}
11518                     * @property {DayGridView} relatedView - view instance.
11519                     * @property {number} datesInRange - date count of this view.
11520                     * @property {number} dragStartXIndex - index number of dragstart grid index.
11521                     * @property {number} xIndex - index number of mouse positions.
11522                     */
11523                    this.fire('dragstart', scheduleData);
11524                };
11525
11526                /**
11527                 * Drag event handler method.
11528                 * @emits DayGridCreation#drag
11529                 * @param {object} dragEventData - Drag#drag event handler scheduledata.
11530                 */
11531                DayGridCreation.prototype._onDrag = function(dragEventData) {
11532                    var getScheduleDataFunc = this.getScheduleDataFunc,
11533                        scheduleData;
11534
11535                    if (!getScheduleDataFunc) {
11536                        return;
11537                    }
11538
11539                    scheduleData = getScheduleDataFunc(dragEventData.originEvent);
11540
11541                    /**
11542                     * @event DayGridCreation#drag
11543                     * @type {object}
11544                     * @property {DayGridView} relatedView - view instance.
11545                     * @property {number} datesInRange - date count of this view.
11546                     * @property {number} dragStartXIndex - index number of dragstart grid index.
11547                     * @property {number} xIndex - index number of mouse positions.
11548                     */
11549                    this.fire('drag', scheduleData);
11550                };
11551
11552                /**
11553                 * DragEnd event hander method.
11554                 * @emits DayGridCreation#dragend
11555                 * @param {object} dragEndEventData - Drag#dragEnd event handler data.
11556                 * @param {string} [overrideEventName] - override emitted event name when supplied.
11557                 */
11558                DayGridCreation.prototype._onDragEnd = function(dragEndEventData, overrideEventName) {
11559                    var getScheduleDataFunc = this.getScheduleDataFunc;
11560                    var scheduleData;
11561
11562                    if (!getScheduleDataFunc) {
11563                        return;
11564                    }
11565
11566                    this.dragHandler.off({
11567                        drag: this._onDrag,
11568                        dragEnd: this._onDragEnd
11569                    }, this);
11570
11571                    scheduleData = getScheduleDataFunc(dragEndEventData.originEvent);
11572
11573                    this._createSchedule(scheduleData);
11574
11575                    /**
11576                     * @event DayGridCreation#dragend
11577                     * @type {object}
11578                     * @property {DayGridView} relatedView - view instance.
11579                     * @property {number} datesInRange - date count of this view.
11580                     * @property {number} dragStartXIndex - index number of dragstart grid index.
11581                     * @property {number} xIndex - index number of mouse positions.
11582                     */
11583                    this.fire(overrideEventName || 'dragend', scheduleData);
11584
11585                    this.getScheduleDataFunc = null;
11586                };
11587
11588                /**
11589                 * Click event handler method.
11590                 * @emits DayGridCreation#click
11591                 * @param {object} clickEventData - Drag#click event handler data.
11592                 */
11593                DayGridCreation.prototype._onClick = function(clickEventData) {
11594                    var self = this;
11595                    var getScheduleDataFunc, scheduleData;
11596
11597                    if (!this.checkExpectedCondition(clickEventData.target) || this._disableClick) {
11598                        return;
11599                    }
11600
11601                    getScheduleDataFunc = this._retriveScheduleData(this.view, clickEventData.originEvent);
11602                    scheduleData = getScheduleDataFunc(clickEventData.originEvent);
11603
11604                    this._requestOnClick = true;
11605                    setTimeout(function() {
11606                        if (self._requestOnClick) {
11607                            self.fire('click', scheduleData);
11608                            self._createSchedule(scheduleData);
11609                        }
11610                        self._requestOnClick = false;
11611                    }, CLICK_DELAY);
11612                };
11613
11614                /**
11615                 * Dblclick event handler method.
11616                 * @emits DayGridCreation#click
11617                 * @param {object} clickEventData - Drag#Click event handler data.
11618                 */
11619                DayGridCreation.prototype._onDblClick = function(clickEventData) {
11620                    var getScheduleDataFunc, scheduleData;
11621
11622                    if (!this.checkExpectedCondition(clickEventData.target)) {
11623                        return;
11624                    }
11625
11626                    getScheduleDataFunc = this._retriveScheduleData(this.view, clickEventData);
11627                    scheduleData = getScheduleDataFunc(clickEventData);
11628
11629                    this.fire('click', scheduleData);
11630
11631                    this._createSchedule(scheduleData);
11632
11633                    this._requestOnClick = false;
11634                };
11635
11636                /**
11637                 * Invoke creation click
11638                 * @param {Schedule} schedule - schedule instance
11639                 */
11640                DayGridCreation.prototype.invokeCreationClick = function(schedule) {
11641                    var getScheduleDataFunc, scheduleData;
11642
11643                    getScheduleDataFunc = this._retriveScheduleDataFromDate(this.view, schedule.start);
11644                    scheduleData = getScheduleDataFunc(schedule.start);
11645
11646                    this.fire('click', scheduleData);
11647
11648                    this._createSchedule(scheduleData);
11649                };
11650
11651                common.mixin(dayGridCore, DayGridCreation);
11652                util.CustomEvents.mixin(DayGridCreation);
11653
11654                module.exports = DayGridCreation;
11655
11656
11657                /***/ }),
11658
11659            
11659/***/ "./src/js/handler/daygrid/creationGuide.js":
11660            /*!*************************************************!*\
11661  !*** ./src/js/handler/daygrid/creationGuide.js ***!
11662  \*************************************************/
11663            /*! no static exports found */
11664            /***/ (function(module, exports, __webpack_require__) {
11665
11666                "use strict";
11667                /**
11668                 * @fileoverview Guide element for DayGrid.Creation
11669                 * @author NHN FE Development Lab <[email protected]>
11670                 */
11671
11672
11673                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
11674                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
11675                var reqAnimFrame = __webpack_require__(/*! ../../common/reqAnimFrame */ "./src/js/common/reqAnimFrame.js");
11676
11677                /**
11678                 * Class for DayGrid.Creation dragging effect.
11679                 * @constructor
11680                 * @param {DayGridCreation} creation - instance of DayGridCreation.
11681                 */
11682                function DayGridCreationGuide(creation) {
11683                    /**
11684                     * @type {DayGridCreation}
11685                     */
11686                    this.creation = creation;
11687
11688                    /**
11689                     * @type {HTMLDIVElement}
11690                     */
11691                    this.scheduleContainer = null;
11692
11693                    /**
11694                     * @type {HTMLDIVElement}
11695                     */
11696                    this.guideElement = document.createElement('div');
11697
11698                    this.initializeGuideElement();
11699                    this.applyTheme(creation.controller.theme);
11700
11701                    creation.on({
11702                        dragstart: this._createGuideElement,
11703                        drag: this._onDrag,
11704                        click: this._createGuideElement
11705                    }, this);
11706                }
11707
11708                /**
11709                 * Destroy method
11710                 */
11711                DayGridCreationGuide.prototype.destroy = function() {
11712                    this.clearGuideElement();
11713                    this.creation.off(this);
11714                    this.creation = this.scheduleContainer = this.guideElement = null;
11715                };
11716
11717                /**
11718                 * initialize guide element's default style.
11719                 */
11720                DayGridCreationGuide.prototype.initializeGuideElement = function() {
11721                    domutil.addClass(this.guideElement, config.classname('daygrid-guide-creation-block'));
11722                };
11723
11724                /**
11725                 * Drag event handler
11726                 * @param {object} scheduleData - schedule data from DayGrid.Creation handler.
11727                 */
11728                DayGridCreationGuide.prototype._onDrag = function(scheduleData) {
11729                    this._refreshGuideElement(scheduleData, true);
11730                };
11731
11732                /**
11733                 * Get element width based on narrowWeekend
11734                 * @param {number} dragStartIndex - grid start index
11735                 * @param {number} dragEndIndex - grid end index
11736                 * @param {Array} grids - dates information
11737                 * @returns {number} element width
11738                 */
11739                DayGridCreationGuide.prototype._getGuideWidth = function(dragStartIndex, dragEndIndex, grids) {
11740                    var width = 0;
11741                    var i = dragStartIndex;
11742                    for (; i <= dragEndIndex; i += 1) {
11743                        width += grids[i] ? grids[i].width : 0;
11744                    }
11745
11746                    return width;
11747                };
11748
11749                /**
11750                 * Refresh guide element.
11751                 * @param {object} scheduleData - schedule data from DayGrid.Creation handler.
11752                 * @param {boolean} defer - If set to true, set style in the next frame
11753                 */
11754                DayGridCreationGuide.prototype._refreshGuideElement = function(scheduleData, defer) {
11755                    var guideElement = this.guideElement,
11756                        data = scheduleData,
11757                        dragStartXIndex = data.dragStartXIndex < data.xIndex ? data.dragStartXIndex : data.xIndex,
11758                        dragEndXIndex = data.dragStartXIndex < data.xIndex ? data.xIndex : data.dragStartXIndex,
11759                        leftPercent,
11760                        widthPercent;
11761
11762                    leftPercent = data.grids[dragStartXIndex] ? data.grids[dragStartXIndex].left : 0;
11763                    widthPercent = this._getGuideWidth(dragStartXIndex, dragEndXIndex, data.grids);
11764
11765                    /** eslint-disable require-jsdoc */
11766                    function setStyle() {
11767                        guideElement.style.display = 'block';
11768                        guideElement.style.left = leftPercent + '%';
11769                        guideElement.style.width = widthPercent + '%';
11770                    }
11771
11772                    if (defer) {
11773                        reqAnimFrame.requestAnimFrame(setStyle);
11774                    } else {
11775                        setStyle();
11776                    }
11777                };
11778
11779                /**
11780                 * Clear guide element.
11781                 */
11782                DayGridCreationGuide.prototype.clearGuideElement = function() {
11783                    var guideElement = this.guideElement;
11784
11785                    domutil.remove(guideElement);
11786
11787                    guideElement.style.display = 'none';
11788                    guideElement.style.left = '';
11789                    guideElement.style.width = '';
11790                };
11791
11792                /**
11793                 * Create guide element
11794                 * @param {object} dragStartEventData - schedule data object of DayGrid.Creation.
11795                 */
11796                DayGridCreationGuide.prototype._createGuideElement = function(dragStartEventData) {
11797                    var creation = this.creation,
11798                        view = creation.view,
11799                        container = view.container,
11800                        scheduleContainer = domutil.find(config.classname('.weekday-grid'), container);
11801
11802                    scheduleContainer.appendChild(this.guideElement);
11803                    this._refreshGuideElement(dragStartEventData);
11804                };
11805
11806                /**
11807                 * Drag event handler.
11808                 * @param {object} dragEventData - event data object of DayGrid.Creation.
11809                 */
11810                DayGridCreationGuide.prototype._onDrag = function(dragEventData) {
11811                    this._refreshGuideElement(dragEventData);
11812                };
11813
11814                DayGridCreationGuide.prototype.applyTheme = function(theme) {
11815                    var style = this.guideElement.style;
11816
11817                    style.backgroundColor = theme.common.creationGuide.backgroundColor;
11818                    style.border = theme.common.creationGuide.border;
11819                };
11820
11821                module.exports = DayGridCreationGuide;
11822
11823
11824                /***/ }),
11825
11826            
11826/***/ "./src/js/handler/daygrid/move.js":
11827            /*!****************************************!*\
11828  !*** ./src/js/handler/daygrid/move.js ***!
11829  \****************************************/
11830            /*! no static exports found */
11831            /***/ (function(module, exports, __webpack_require__) {
11832
11833                "use strict";
11834                /**
11835                 * @fileoverview Move handler for DayGrid view.
11836                 * @author NHN FE Development Lab <[email protected]>
11837                 */
11838
11839
11840                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
11841                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
11842                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
11843                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
11844                var dayGridCore = __webpack_require__(/*! ./core */ "./src/js/handler/daygrid/core.js");
11845                var DayGridMoveGuide = __webpack_require__(/*! ./moveGuide */ "./src/js/handler/daygrid/moveGuide.js");
11846                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
11847
11848                /**
11849                 * @constructor
11850                 * @implements {Handler}
11851                 * @mixes dayGridCore
11852                 * @mixes CustomEvents
11853                 * @param {Drag} dragHandler - Drag handler instance.
11854                 * @param {DayGrid} view - view instance.
11855                 * @param {Base} controller - Base controller instance.
11856                 */
11857                function DayGridMove(dragHandler, view, controller) {
11858                    /**
11859                     * Drag handler instance.
11860                     * @type {Drag}
11861                     */
11862                    this.dragHandler = dragHandler;
11863
11864                    /**
11865                     * view instance.
11866                     * @type {DayGrid}
11867                     */
11868                    this.view = view;
11869
11870                    /**
11871                     * Base controller instance.
11872                     * @type {Base}
11873                     */
11874                    this.controller = controller;
11875
11876                    /**
11877                     * Temporary variable for dragstart event data.
11878                     * @type {object}
11879                     */
11880                    this._dragStart = null;
11881
11882                    dragHandler.on({
11883                        dragStart: this._onDragStart
11884                    }, this);
11885
11886                    /**
11887                     * @type {DayGridMoveGuide}
11888                     */
11889                    this.guide = new DayGridMoveGuide(this);
11890                }
11891
11892                DayGridMove.prototype.destroy = function() {
11893                    this.guide.destroy();
11894                    this.dragHandler.off(this);
11895                    this.dragHandler = this.view = this.controller =
11896                        this.guide = this._dragStart = null;
11897                };
11898
11899                /**
11900                 * Check dragstart target is expected conditions for this handler.
11901                 * @param {HTMLElement} target - dragstart event handler's target element.
11902                 * @returns {boolean|DayGridSchedule} return DayGridSchedule view instance when satiate condition.
11903                 */
11904                DayGridMove.prototype.checkExpectedCondition = function(target) {
11905                    var cssClass = domutil.getClass(target),
11906                        parentView,
11907                        matches;
11908
11909                    if (~cssClass.indexOf(config.classname('weekday-resize-handle'))) {
11910                        return false;
11911                    }
11912
11913                    parentView = domutil.closest(target, config.classname('.weekday'));
11914
11915                    if (!parentView) {
11916                        return false;
11917                    }
11918
11919                    cssClass = domutil.getClass(parentView);
11920                    matches = cssClass.match(config.daygrid.getViewIDRegExp);
11921
11922                    if (!matches || matches.length < 2) {
11923                        return false;
11924                    }
11925
11926                    return util.pick(this.view.children.items, matches[1]);
11927                };
11928
11929                /**
11930                 * DragStart event handler method.
11931                 * @emits DayGridMove#dragstart
11932                 * @param {object} dragStartEventData - Drag#dragStart event handler event data.
11933                 */
11934                DayGridMove.prototype._onDragStart = function(dragStartEventData) {
11935                    var target = dragStartEventData.target,
11936                        result = this.checkExpectedCondition(target),
11937                        controller = this.controller,
11938                        excludeTarget = true,
11939                        scheduleBlockElement,
11940                        modelID,
11941                        targetModel,
11942                        getScheduleDataFunc,
11943                        scheduleData;
11944
11945                    if (!result) {
11946                        return;
11947                    }
11948
11949                    scheduleBlockElement = domutil.closest(target, config.classname('.weekday-schedule-block'), excludeTarget);
11950                    if (!scheduleBlockElement) {
11951                        return;
11952                    }
11953
11954                    modelID = domutil.getData(scheduleBlockElement, 'id');
11955                    targetModel = controller.schedules.items[modelID];
11956
11957                    if (!targetModel) {
11958                        return;
11959                    }
11960
11961                    if (targetModel.isReadOnly) {
11962                        return;
11963                    }
11964
11965                    getScheduleDataFunc = this._retriveScheduleData(this.view, dragStartEventData.originEvent);
11966                    this.getScheduleDataFunc = getScheduleDataFunc;
11967                    scheduleData = this._dragStart = getScheduleDataFunc(dragStartEventData.originEvent);
11968
11969                    util.extend(scheduleData, {
11970                        scheduleBlockElement: scheduleBlockElement,
11971                        model: targetModel
11972                    });
11973
11974                    this.dragHandler.on({
11975                        drag: this._onDrag,
11976                        dragEnd: this._onDragEnd,
11977                        click: this._onClick
11978                    }, this);
11979
11980                    /**
11981                     * @event DayGridMove#dragstart
11982                     * @type {object}
11983                     * @property {DayGrid} relatedView - view instance.
11984                     * @property {number} datesInRange - date count of this view.
11985                     * @property {number} dragStartXIndex - index number of dragstart grid index.
11986                     * @property {number} xIndex - index number of mouse positions.
11987                     * @property {Schedule} model - data object of model isntance.
11988                     * @property {HTMLDivElement} scheduleBlockElement - target schedule block element.
11989                     */
11990                    this.fire('dragstart', scheduleData);
11991                };
11992
11993                /**
11994                 * Drag event handler method.
11995                 * @emits DayGridMove#drag
11996                 * @param {object} dragEventData - Drag#drag event handler eventdata.
11997                 */
11998                DayGridMove.prototype._onDrag = function(dragEventData) {
11999                    var getScheduleDataFunc = this.getScheduleDataFunc;
12000
12001                    if (!getScheduleDataFunc) {
12002                        return;
12003                    }
12004
12005                    /**
12006                     * @schedule DayGridMove#drag
12007                     * @type {object}
12008                     * @property {DayGrid} relatedView - view instance.
12009                     * @property {number} datesInRange - date count of this view.
12010                     * @property {number} dragStartXIndex - index number of dragstart grid index.
12011                     * @property {number} xIndex - index number of mouse positions.
12012                     */
12013                    this.fire('drag', getScheduleDataFunc(dragEventData.originEvent));
12014                };
12015
12016                /**
12017                 * Request update schedule model to base controller.
12018                 * @fires DayGridMove#beforeUpdateSchedule
12019                 * @param {object} scheduleData - schedule data from DayGridMove handler module.
12020                 */
12021                DayGridMove.prototype._updateSchedule = function(scheduleData) {
12022                    var schedule = scheduleData.targetModel,
12023                        dateOffset = scheduleData.xIndex - scheduleData.dragStartXIndex,
12024                        newStarts = new TZDate(schedule.start),
12025                        newEnds = new TZDate(schedule.end);
12026
12027                    newStarts = newStarts.addDate(dateOffset);
12028                    newEnds = newEnds.addDate(dateOffset);
12029
12030                    /**
12031                     * @event DayGridMove#beforeUpdateSchedule
12032                     * @type {object}
12033                     * @property {Schedule} schedule - The original schedule instance
12034                     * @property {Date} start - Deprecated: start time to update
12035                     * @property {Date} end - Deprecated: end time to update
12036                     * @property {object} changes - start and end time to update
12037                     *  @property {Date} start - start time to update
12038                     *  @property {Date} end - end time to update
12039                     */
12040                    this.fire('beforeUpdateSchedule', {
12041                        schedule: schedule,
12042                        changes: {
12043                            start: newStarts,
12044                            end: newEnds
12045                        },
12046                        start: newStarts,
12047                        end: newEnds
12048                    });
12049                };
12050
12051                /**
12052                 * DragEnd event hander method.
12053                 * @emits DayGridMove#dragend
12054                 * @param {object} dragEndEventData - Drag#DragEnd event handler data.
12055                 * @param {string} [overrideEventName] - override emitted event name when supplied.
12056                 * @param {?boolean} skipUpdate - true then skip update schedule model.
12057                 */
12058                DayGridMove.prototype._onDragEnd = function(dragEndEventData, overrideEventName, skipUpdate) {
12059                    var getScheduleDataFunc = this.getScheduleDataFunc,
12060                        dragStart = this._dragStart,
12061                        scheduleData;
12062
12063                    if (!getScheduleDataFunc || !dragStart) {
12064                        return;
12065                    }
12066
12067                    this.dragHandler.off({
12068                        drag: this._onDrag,
12069                        dragEnd: this._onDragEnd,
12070                        click: this._onClick
12071                    }, this);
12072
12073                    scheduleData = getScheduleDataFunc(dragEndEventData.originEvent);
12074                    util.extend(scheduleData, {
12075                        targetModel: dragStart.model
12076                    });
12077
12078                    if (!skipUpdate) {
12079                        this._updateSchedule(scheduleData);
12080                    }
12081
12082                    /**
12083                     * @event DayGridMove#dragend
12084                     * @type {object}
12085                     * @property {DayGrid} relatedView - view instance.
12086                     * @property {number} datesInRange - date count of this view.
12087                     * @property {number} dragStartXIndex - index number of dragstart grid index.
12088                     * @property {number} xIndex - index number of mouse positions.
12089                     */
12090                    this.fire(overrideEventName || 'dragend', scheduleData);
12091
12092                    this.getScheduleDataFunc = this._dragStart = null;
12093                };
12094
12095                /**
12096                 * Click event handler method.
12097                 * @emits DayGridMove#click
12098                 * @param {object} clickEventData - Drag#Click event handler data.
12099                 */
12100                DayGridMove.prototype._onClick = function(clickEventData) {
12101                    /**
12102                     * @event DayGridMove#click
12103                     * @type {object}
12104                     * @property {DayGrid} relatedView - view instance.
12105                     * @property {number} datesInRange - date count of this view.
12106                     * @property {number} dragStartXIndex - index number of dragstart grid index.
12107                     * @property {number} xIndex - index number of mouse positions.
12108                     */
12109                    this._onDragEnd(clickEventData, 'click', true);
12110                };
12111
12112                common.mixin(dayGridCore, DayGridMove);
12113                util.CustomEvents.mixin(DayGridMove);
12114
12115                module.exports = DayGridMove;
12116
12117
12118                /***/ }),
12119
12120            
12120/***/ "./src/js/handler/daygrid/moveGuide.js":
12121            /*!*********************************************!*\
12122  !*** ./src/js/handler/daygrid/moveGuide.js ***!
12123  \*********************************************/
12124            /*! no static exports found */
12125            /***/ (function(module, exports, __webpack_require__) {
12126
12127                "use strict";
12128                /* WEBPACK VAR INJECTION */(function(global) {/**
12129                 * @fileoverview Effect module for DayGrid.Move
12130                 * @author NHN FE Development Lab <[email protected]>
12131                 */
12132
12133
12134                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
12135                    var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
12136                    var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
12137                    var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
12138                    var reqAnimFrame = __webpack_require__(/*! ../../common/reqAnimFrame */ "./src/js/common/reqAnimFrame.js");
12139
12140                    /**
12141                     * Class for DayGrid.Move dragging effect.
12142                     * @constructor
12143                     * @param {DayGridMove} daygridMove - instance of DayGridMove.
12144                     */
12145                    function DayGridMoveGuide(daygridMove) {
12146                        /**
12147                         * @type {DayGridMove}
12148                         */
12149                        this.daygridMove = daygridMove;
12150
12151                        /**
12152                         * The element that actually contains the event element
12153                         * @type {HTMLDIVElement}
12154                         */
12155                        this.scheduleContainer = null;
12156
12157                        /**
12158                         * @type {number}
12159                         */
12160                        this._dragStartXIndex = null;
12161
12162                        /**
12163                         * @type {HTMLDIVElement}
12164                         */
12165                        this.guideElement = null;
12166
12167                        /**
12168                         * @type {HTMLElement[]}
12169                         */
12170                        this.elements = null;
12171
12172                        daygridMove.on({
12173                            'dragstart': this._onDragStart,
12174                            'drag': this._onDrag,
12175                            'dragend': this._clearGuideElement,
12176                            'click': this._clearGuideElement
12177                        }, this);
12178                    }
12179
12180                    /**
12181                     * Destroy method
12182                     */
12183                    DayGridMoveGuide.prototype.destroy = function() {
12184                        this._clearGuideElement();
12185                        this.daygridMove.off(this);
12186                        this.daygridMove = this.scheduleContainer = this._dragStartXIndex =
12187                            this.elements = this.guideElement = null;
12188                    };
12189
12190                    /**
12191                     * Clear guide element.
12192                     */
12193                    DayGridMoveGuide.prototype._clearGuideElement = function() {
12194                        this._showOriginScheduleBlocks();
12195
12196                        domutil.remove(this.guideElement);
12197
12198                        if (!util.browser.msie) {
12199                            domutil.removeClass(global.document.body, config.classname('dragging'));
12200                        }
12201
12202                        this._dragStartXIndex = this.getScheduleDataFunc = this.guideElement = null;
12203                    };
12204
12205                    /**
12206                     * Dim element blocks
12207                     * @param {number} modelID - Schedule model instance ID
12208                     */
12209                    DayGridMoveGuide.prototype._hideOriginScheduleBlocks = function(modelID) {
12210                        var className = config.classname('weekday-schedule-block-dragging-dim');
12211                        var scheduleBlocks = domutil.find(
12212                            config.classname('.weekday-schedule-block'),
12213                            this.daygridMove.view.container,
12214                            true
12215                        );
12216
12217                        this.elements = util.filter(scheduleBlocks, function(schedule) {
12218                            return domutil.getData(schedule, 'id') === modelID;
12219                        });
12220
12221                        util.forEach(this.elements, function(el) {
12222                            domutil.addClass(el, className);
12223                        });
12224                    };
12225
12226                    /**
12227                     * Show element blocks
12228                     */
12229                    DayGridMoveGuide.prototype._showOriginScheduleBlocks = function() {
12230                        var className = config.classname('weekday-schedule-block-dragging-dim');
12231
12232                        util.forEach(this.elements, function(el) {
12233                            domutil.removeClass(el, className);
12234                        });
12235                    };
12236
12237                    /**
12238                     * Highlight element blocks
12239                     * @param {Schedule} model - model
12240                     * @param {HTMLElement} parent - parent element
12241                     */
12242                    DayGridMoveGuide.prototype._highlightScheduleBlocks = function(model, parent) {
12243                        var elements = domutil.find(config.classname('.weekday-schedule'), parent, true);
12244
12245                        util.forEach(elements, function(el) {
12246                            el.style.margin = '0';
12247
12248                            if (!model.isFocused) {
12249                                el.style.backgroundColor = model.dragBgColor;
12250                                el.style.borderLeftColor = model.borderColor;
12251                                el.style.color = '#ffffff';
12252                            }
12253                        });
12254                    };
12255
12256                    /**
12257                     * Refresh guide element.
12258                     * @param {number} leftPercent - left percent of guide element.
12259                     * @param {number} widthPercent - width percent of guide element.
12260                     * @param {boolean} isExceededLeft - schedule start is faster then render start date?
12261                     * @param {boolean} isExceededRight - schedule end is later then render end date?
12262                     */
12263                    DayGridMoveGuide.prototype.refreshGuideElement = function(leftPercent, widthPercent, isExceededLeft, isExceededRight) {
12264                        var guideElement = this.guideElement;
12265
12266                        reqAnimFrame.requestAnimFrame(function() {
12267                            guideElement.style.left = leftPercent + '%';
12268                            guideElement.style.width = widthPercent + '%';
12269
12270                            if (isExceededLeft) {
12271                                domutil.addClass(guideElement, config.classname('weekday-exceed-left'));
12272                            } else {
12273                                domutil.removeClass(guideElement, config.classname('weekday-exceed-left'));
12274                            }
12275
12276                            if (isExceededRight) {
12277                                domutil.addClass(guideElement, config.classname('weekday-exceed-right'));
12278                            } else {
12279                                domutil.removeClass(guideElement, config.classname('weekday-exceed-right'));
12280                            }
12281                        });
12282                    };
12283
12284                    /**
12285                     * Get schedule block information from schedule data.
12286                     *
12287                     * For example, there is single schedule has 10 length. but render range in view is 5 then
12288                     * rendered block must be cut out to render properly. in this case, this method return
12289                     * how many block are cut before rendering.
12290                     *
12291                     * @param {object} dragStartEventData - schedule data from DayGrid.Move handler.
12292                     * @returns {function} function that return schedule block information.
12293                     */
12294                    DayGridMoveGuide.prototype._getScheduleBlockDataFunc = function(dragStartEventData) {
12295                        var model = dragStartEventData.model,
12296                            datesInRange = dragStartEventData.datesInRange,
12297                            range = dragStartEventData.range,
12298                            baseWidthPercent = (100 / datesInRange),
12299                            originScheduleStarts = datetime.start(model.start),
12300                            originScheduleEnds = datetime.end(model.end),
12301                            renderStartDate = datetime.start(range[0]),
12302                            renderEndDate = datetime.end(range[range.length - 1]),
12303                            fromLeft = Math.ceil((originScheduleStarts.getTime() -
12304                                renderStartDate.getTime()) / datetime.MILLISECONDS_PER_DAY) || 0,
12305                            fromRight = Math.ceil((originScheduleEnds.getTime() -
12306                                renderEndDate.getTime()) / datetime.MILLISECONDS_PER_DAY) || 0;
12307
12308                        return function(indexOffset) {
12309                            return {
12310                                baseWidthPercent: baseWidthPercent,
12311                                fromLeft: fromLeft + indexOffset,
12312                                fromRight: fromRight + indexOffset
12313                            };
12314                        };
12315                    };
12316
12317                    /**
12318                     * DragStart event handler.
12319                     * @param {object} dragStartEventData - schedule data.
12320                     */
12321                    DayGridMoveGuide.prototype._onDragStart = function(dragStartEventData) {
12322                        var container = this.daygridMove.view.container,
12323                            guideElement = this.guideElement = dragStartEventData.scheduleBlockElement.cloneNode(true),
12324                            scheduleContainer;
12325
12326                        if (!util.browser.msie) {
12327                            domutil.addClass(global.document.body, config.classname('dragging'));
12328                        }
12329
12330                        this._hideOriginScheduleBlocks(String(dragStartEventData.model.cid()));
12331
12332                        scheduleContainer = domutil.find(config.classname('.weekday-schedules'), container);
12333                        domutil.appendHTMLElement('div', guideElement, config.classname('weekday-schedule-cover'));
12334                        scheduleContainer.appendChild(guideElement);
12335
12336                        this._dragStartXIndex = dragStartEventData.xIndex;
12337                        this.getScheduleDataFunc = this._getScheduleBlockDataFunc(dragStartEventData);
12338
12339                        this._highlightScheduleBlocks(dragStartEventData.model, guideElement);
12340                    };
12341
12342                    /**
12343                     * Drag event handler.
12344                     * @param {object} dragEventData - schedule data.
12345                     */
12346                    DayGridMoveGuide.prototype._onDrag = function(dragEventData) {
12347                        var getScheduleDataFunc = this.getScheduleDataFunc,
12348                            dragStartXIndex = this._dragStartXIndex,
12349                            datesInRange = dragEventData.datesInRange,
12350                            grids = dragEventData.grids,
12351                            scheduleData,
12352                            isExceededLeft,
12353                            isExceededRight,
12354                            originLength,
12355                            leftIndex,
12356                            size,
12357                            newLeft,
12358                            newWidth;
12359
12360                        if (!getScheduleDataFunc) {
12361                            return;
12362                        }
12363
12364                        scheduleData = getScheduleDataFunc(dragEventData.xIndex - dragStartXIndex);
12365                        isExceededLeft = scheduleData.fromLeft < 0;
12366                        isExceededRight = scheduleData.fromRight > 0;
12367
12368                        leftIndex = Math.max(0, scheduleData.fromLeft);
12369                        originLength = (scheduleData.fromLeft * -1) + (datesInRange + scheduleData.fromRight);
12370                        size = isExceededLeft ? (originLength + scheduleData.fromLeft) : originLength;
12371                        size = isExceededRight ? (size - scheduleData.fromRight) : size;
12372
12373                        newLeft = grids[leftIndex] ? grids[leftIndex].left : 0;
12374                        newWidth = getScheduleBlockWidth(leftIndex, size, grids);
12375
12376                        this.refreshGuideElement(newLeft, newWidth, isExceededLeft, isExceededRight);
12377                    };
12378
12379                    /**
12380                     * Get schedule width based on grids
12381                     * @param {number} left - left index
12382                     * @param {number} size - schedule width
12383                     * @param {Array} grids - dates information
12384                     * @returns {number} element width
12385                     */
12386                    function getScheduleBlockWidth(left, size, grids) {
12387                        var width = 0;
12388                        var i = 0;
12389                        var length = grids.length;
12390                        for (; i < size; i += 1) {
12391                            left = (left + i) % length;
12392                            if (left < length) {
12393                                width += grids[left] ? grids[left].width : 0;
12394                            }
12395                        }
12396
12397                        return width;
12398                    }
12399
12400                    module.exports = DayGridMoveGuide;
12401
12402                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
12403
12404                /***/ }),
12405
12406            
12406/***/ "./src/js/handler/daygrid/resize.js":
12407            /*!******************************************!*\
12408  !*** ./src/js/handler/daygrid/resize.js ***!
12409  \******************************************/
12410            /*! no static exports found */
12411            /***/ (function(module, exports, __webpack_require__) {
12412
12413                "use strict";
12414                /**
12415                 * @fileoverview Resize handler module for DayGrid view.
12416                 * @author NHN FE Development Lab <[email protected]>
12417                 */
12418
12419
12420                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
12421                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
12422                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
12423                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
12424                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
12425                var dayGridCore = __webpack_require__(/*! ./core */ "./src/js/handler/daygrid/core.js");
12426                var DayGridResizeGuide = __webpack_require__(/*! ./resizeGuide */ "./src/js/handler/daygrid/resizeGuide.js");
12427                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
12428
12429                /**
12430                 * @constructor
12431                 * @implements {Handler}
12432                 * @mixes dayGridCore
12433                 * @mixes CustomEvents
12434                 * @param {Drag} [dragHandler] - Drag handler instance.
12435                 * @param {DayGrid} [view] - view instance.
12436                 * @param {Base} [controller] - Base controller instance.
12437                 */
12438                function DayGridResize(dragHandler, view, controller) {
12439                    /**
12440                     * Drag handler instance.
12441                     * @type {Drag}
12442                     */
12443                    this.dragHandler = dragHandler;
12444
12445                    /**
12446                     * view instance.
12447                     * @type {DayGrid}
12448                     */
12449                    this.view = view;
12450
12451                    /**
12452                     * Base controller instance.
12453                     * @type {Base}
12454                     */
12455                    this.controller = controller;
12456
12457                    /**
12458                     * Temporary variable for dragStart event data.
12459                     * @type {object}
12460                     */
12461                    this._dragStart = null;
12462
12463                    dragHandler.on({
12464                        dragStart: this._onDragStart
12465                    }, this);
12466
12467                    /**
12468                     * @type {DayGridResizeGuide}
12469                     */
12470                    this.guide = new DayGridResizeGuide(this);
12471                }
12472
12473                /**
12474                 * Destroy method
12475                 */
12476                DayGridResize.prototype.destroy = function() {
12477                    this.guide.destroy();
12478                    this.dragHandler.off(this);
12479                    this.dragHandler = this.view = this.controller =
12480                        this.guide = this._dragStart = null;
12481                };
12482
12483                /**
12484                 * Check dragstart target is expected conditions for this handler.
12485                 * @param {HTMLElement} target - dragstart event handler's target element.
12486                 * @returns {boolean|WeekdayInWeek} return WeekdayInWeek view instance when satiate condition.
12487                 */
12488                DayGridResize.prototype.checkExpectedCondition = function(target) {
12489                    var cssClass = domutil.getClass(target),
12490                        matches;
12491
12492                    if (!~cssClass.indexOf(config.classname('weekday-resize-handle'))) {
12493                        return false;
12494                    }
12495
12496                    target = domutil.closest(target, config.classname('.weekday'));
12497
12498                    if (!target) {
12499                        return false;
12500                    }
12501
12502                    cssClass = domutil.getClass(target);
12503                    matches = cssClass.match(config.daygrid.getViewIDRegExp);
12504
12505                    if (!matches || matches.length < 2) {
12506                        return false;
12507                    }
12508
12509                    return util.pick(this.view.children.items, matches[1]);
12510                };
12511
12512                /**
12513                 * DragStart event handler.
12514                 * @emits DayGridResize#dragstart
12515                 * @param {object} dragStartEventData - schedule data.
12516                 */
12517                DayGridResize.prototype._onDragStart = function(dragStartEventData) {
12518                    var target = dragStartEventData.target,
12519                        result = this.checkExpectedCondition(target),
12520                        controller = this.controller,
12521                        scheduleBlockElement,
12522                        modelID,
12523                        targetModel,
12524                        getScheduleDataFunc,
12525                        scheduleData;
12526
12527                    if (!result) {
12528                        return;
12529                    }
12530
12531                    scheduleBlockElement = domutil.closest(target, config.classname('.weekday-schedule-block'));
12532                    modelID = domutil.getData(scheduleBlockElement, 'id');
12533                    targetModel = controller.schedules.items[modelID];
12534
12535                    if (!targetModel) {
12536                        return;
12537                    }
12538
12539                    getScheduleDataFunc = this._retriveScheduleData(this.view, dragStartEventData.originEvent);
12540                    this.getScheduleDataFunc = getScheduleDataFunc;
12541                    scheduleData = this._dragStart = getScheduleDataFunc(dragStartEventData.originEvent);
12542
12543                    util.extend(scheduleData, {
12544                        scheduleBlockElement: scheduleBlockElement,
12545                        model: targetModel
12546                    });
12547
12548                    this.dragHandler.on({
12549                        drag: this._onDrag,
12550                        dragEnd: this._onDragEnd,
12551                        click: this._onClick
12552                    }, this);
12553
12554                    /**
12555                     * @event DayGridResize#dragstart
12556                     * @type {object}
12557                     * @property {View} relatedView - view instance.
12558                     * @property {number} datesInRange - date count of this view.
12559                     * @property {number} dragStartXIndex - index number of dragstart grid index.
12560                     * @property {number} xIndex - index number of mouse positions.
12561                     * @property {Schedule} model - data object of model isntance.
12562                     * @property {HTMLDivElement} scheduleBlockElement - target schedule block element.
12563                     */
12564                    this.fire('dragstart', scheduleData);
12565                };
12566
12567                /**
12568                 * Drag event handler method.
12569                 * @emits DayGridResize#drag
12570                 * @param {object} dragEventData - Drag#drag event handler scheduledata.
12571                 */
12572                DayGridResize.prototype._onDrag = function(dragEventData) {
12573                    var getScheduleDataFunc = this.getScheduleDataFunc;
12574
12575                    if (!getScheduleDataFunc) {
12576                        return;
12577                    }
12578
12579                    /**
12580                     * @event DayGridResize#drag
12581                     * @type {object}
12582                     * @property {View} relatedView - view instance.
12583                     * @property {number} datesInRange - date count of this view.
12584                     * @property {number} dragStartXIndex - index number of dragstart grid index.
12585                     * @property {number} xIndex - index number of mouse positions.
12586                     */
12587                    this.fire('drag', getScheduleDataFunc(dragEventData.originEvent));
12588                };
12589
12590                /**
12591                 * Request update schedule instance to base controller.
12592                 * @fires DayGridResize#beforeUpdateSchedule
12593                 * @param {object} scheduleData - schedule data from DayGridResize handler.
12594                 */
12595                DayGridResize.prototype._updateSchedule = function(scheduleData) {
12596                    var schedule = scheduleData.targetModel,
12597                        dateOffset = scheduleData.xIndex - scheduleData.dragStartXIndex,
12598                        newEnds = new TZDate(schedule.end);
12599                    var changes;
12600
12601                    newEnds = newEnds.addDate(dateOffset);
12602                    newEnds = new TZDate(common.maxDate(datetime.end(schedule.start), newEnds));
12603
12604                    changes = common.getScheduleChanges(
12605                        schedule,
12606                        ['end'],
12607                        {end: newEnds}
12608                    );
12609
12610                    /**
12611                     * @event DayGridResize#beforeUpdateSchedule
12612                     * @type {object}
12613                     * @property {Schedule} schedule - The original schedule instance
12614                     * @property {Date} start - Deprecated: start time to update
12615                     * @property {Date} end - Deprecated: end time to update
12616                     * @property {object} changes - end time to update
12617                     *  @property {date} end - end time to update
12618                     */
12619                    this.fire('beforeUpdateSchedule', {
12620                        schedule: schedule,
12621                        changes: changes,
12622                        start: schedule.getStarts(),
12623                        end: newEnds
12624                    });
12625                };
12626
12627                /**
12628                 * DragEnd event hander method.
12629                 * @emits DayGridResize#dragend
12630                 * @param {object} dragEndEventData - Drag#DragEnd event handler data.
12631                 * @param {string} [overrideEventName] - override emitted event name when supplied.
12632                 * @param {?boolean} skipUpdate - true then skip update schedule model.
12633                 */
12634                DayGridResize.prototype._onDragEnd = function(dragEndEventData, overrideEventName, skipUpdate) {
12635                    var getScheduleDataFunc = this.getScheduleDataFunc,
12636                        dragStart = this._dragStart,
12637                        scheduleData;
12638
12639                    if (!getScheduleDataFunc || !dragStart) {
12640                        return;
12641                    }
12642
12643                    this.dragHandler.off({
12644                        drag: this._onDrag,
12645                        dragEnd: this._onDragEnd,
12646                        click: this._onClick
12647                    }, this);
12648
12649                    scheduleData = getScheduleDataFunc(dragEndEventData.originEvent);
12650                    util.extend(scheduleData, {
12651                        targetModel: dragStart.model
12652                    });
12653
12654                    if (!skipUpdate) {
12655                        this._updateSchedule(scheduleData);
12656                    }
12657
12658                    /**
12659                     * @event DayGridResize#dragend
12660                     * @type {object}
12661                     * @property {View} relatedView - view instance.
12662                     * @property {number} datesInRange - date count of this view.
12663                     * @property {number} dragStartXIndex - index number of dragstart grid index.
12664                     * @property {number} xIndex - index number of mouse positions.
12665                     */
12666                    this.fire(overrideEventName || 'dragend', scheduleData);
12667
12668                    this.getScheduleDataFunc = this._dragStart = null;
12669                };
12670
12671                /**
12672                 * Click event handler method.
12673                 * @emits DayGridResize#click
12674                 * @param {object} clickEventData - Drag#Click event handler data.
12675                 */
12676                DayGridResize.prototype._onClick = function(clickEventData) {
12677                    /**
12678                     * @event DayGridResize#click
12679                     * @type {object}
12680                     * @property {View} relatedView - view instance.
12681                     * @property {number} datesInRange - date count of this view.
12682                     * @property {number} dragStartXIndex - index number of dragstart grid index.
12683                     * @property {number} xIndex - index number of mouse positions.
12684                     */
12685                    this._onDragEnd(clickEventData, 'click', true);
12686                };
12687
12688                common.mixin(dayGridCore, DayGridResize);
12689                util.CustomEvents.mixin(DayGridResize);
12690
12691                module.exports = DayGridResize;
12692
12693
12694                /***/ }),
12695
12696            
12696/***/ "./src/js/handler/daygrid/resizeGuide.js":
12697            /*!***********************************************!*\
12698  !*** ./src/js/handler/daygrid/resizeGuide.js ***!
12699  \***********************************************/
12700            /*! no static exports found */
12701            /***/ (function(module, exports, __webpack_require__) {
12702
12703                "use strict";
12704                /* WEBPACK VAR INJECTION */(function(global) {/**
12705                 * @fileoverview Resize Guide module.
12706                 * @author NHN FE Development Lab <[email protected]>
12707                 */
12708
12709
12710                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
12711                    var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
12712                    var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
12713                    var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
12714                    var reqAnimFrame = __webpack_require__(/*! ../../common/reqAnimFrame */ "./src/js/common/reqAnimFrame.js");
12715
12716                    /**
12717                     * @constructor
12718                     * @param {DayGridResize} resizeHandler - instance of DayGridResize
12719                     */
12720                    function DayGridResizeGuide(resizeHandler) {
12721                        /**
12722                         * @type {DayGridResize}
12723                         */
12724                        this.resizeHandler = resizeHandler;
12725
12726                        /**
12727                         * The element that actually contains the event element
12728                         * @type {HTMLDIVElement}
12729                         */
12730                        this.scheduleContainer = null;
12731
12732                        /**
12733                         * @type {function}
12734                         */
12735                        this.getScheduleDataFunc = null;
12736
12737                        /**
12738                         * @type {HTMLDIVElement}
12739                         */
12740                        this.guideElement = null;
12741
12742                        /**
12743                         * @type {HTMLDIVElement}
12744                         */
12745                        this.scheduleBlockElement = null;
12746
12747                        resizeHandler.on({
12748                            'dragstart': this._onDragStart,
12749                            'drag': this._onDrag,
12750                            'dragend': this._clearGuideElement,
12751                            'click': this._clearGuideElement
12752                        }, this);
12753                    }
12754
12755                    /**
12756                     * Destroy method
12757                     */
12758                    DayGridResizeGuide.prototype.destroy = function() {
12759                        this._clearGuideElement();
12760                        this.resizeHandler.off(this);
12761                        this.resizeHandler = this.scheduleContainer = this.getScheduleDataFunc =
12762                            this.guideElement = this.scheduleBlockElement = null;
12763                    };
12764
12765                    /**
12766                     * Clear guide element.
12767                     */
12768                    DayGridResizeGuide.prototype._clearGuideElement = function() {
12769                        domutil.remove(this.guideElement);
12770
12771                        if (!util.browser.msie) {
12772                            domutil.removeClass(global.document.body, config.classname('resizing-x'));
12773                        }
12774
12775                        if (this.scheduleBlockElement) {
12776                            domutil.removeClass(this.scheduleBlockElement, config.classname('weekday-schedule-block-dragging-dim'));
12777                        }
12778
12779                        this.getScheduleDataFunc = null;
12780                    };
12781
12782                    /**
12783                     * Refresh guide element
12784                     * @param {number} newWidth - new width percentage value to resize guide element.
12785                     */
12786                    DayGridResizeGuide.prototype.refreshGuideElement = function(newWidth) {
12787                        var guideElement = this.guideElement;
12788
12789                        reqAnimFrame.requestAnimFrame(function() {
12790                            guideElement.style.width = newWidth + '%';
12791                        });
12792                    };
12793
12794                    /**
12795                     * Return function that calculate guide element's new width percentage value.
12796                     * @param {object} dragStartEventData - dragstart schedule data.
12797                     * @returns {function} return function that calculate guide element new width percentage.
12798                     */
12799                    DayGridResizeGuide.prototype.getGuideElementWidthFunc = function(dragStartEventData) {
12800                        var model = dragStartEventData.model,
12801                            viewOptions = this.resizeHandler.view.options,
12802                            fromLeft = Math.ceil(
12803                                (model.start - viewOptions.renderStartDate) / datetime.MILLISECONDS_PER_DAY
12804                            ) || 0,
12805                            grids = dragStartEventData.grids;
12806
12807                        return function(xIndex) {
12808                            var width = 0;
12809                            var i = 0;
12810                            var length = grids.length;
12811                            width += grids[fromLeft] ? grids[fromLeft].width : 0;
12812
12813                            for (; i < length; i += 1) {
12814                                if (i > fromLeft && i <= xIndex) {
12815                                    width += grids[i] ? grids[i].width : 0;
12816                                }
12817                            }
12818
12819                            return width;
12820                        };
12821                    };
12822
12823                    /**
12824                     * DragStart event handler.
12825                     * @param {object} dragStartEventData - schedule data.
12826                     */
12827                    DayGridResizeGuide.prototype._onDragStart = function(dragStartEventData) {
12828                        var container = this.resizeHandler.view.container,
12829                            scheduleBlockElement = this.scheduleBlockElement = dragStartEventData.scheduleBlockElement,
12830                            guideElement = this.guideElement = scheduleBlockElement.cloneNode(true),
12831                            scheduleContainer;
12832
12833                        if (!util.browser.msie) {
12834                            domutil.addClass(global.document.body, config.classname('resizing-x'));
12835                        }
12836
12837                        scheduleContainer = domutil.find(config.classname('.weekday-schedules'), container);
12838                        domutil.addClass(guideElement, config.classname('daygrid-guide-move'));
12839                        domutil.addClass(scheduleBlockElement, config.classname('weekday-schedule-block-dragging-dim'));
12840
12841                        scheduleContainer.appendChild(guideElement);
12842
12843                        this.getScheduleDataFunc = this.getGuideElementWidthFunc(dragStartEventData);
12844                    };
12845
12846                    /**
12847                     * Drag event handler.
12848                     * @param {object} dragEventData - schedule data.
12849                     */
12850                    DayGridResizeGuide.prototype._onDrag = function(dragEventData) {
12851                        var func = this.getScheduleDataFunc;
12852
12853                        if (!func) {
12854                            return;
12855                        }
12856
12857                        this.refreshGuideElement(func(dragEventData.xIndex));
12858                    };
12859
12860                    module.exports = DayGridResizeGuide;
12861
12862                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
12863
12864                /***/ }),
12865
12866            
12866/***/ "./src/js/handler/drag.js":
12867            /*!********************************!*\
12868  !*** ./src/js/handler/drag.js ***!
12869  \********************************/
12870            /*! no static exports found */
12871            /***/ (function(module, exports, __webpack_require__) {
12872
12873                "use strict";
12874                /* WEBPACK VAR INJECTION */(function(global) {/**
12875                 * @fileoverview Drag handler for calendar.
12876                 * @author NHN FE Development Lab <[email protected]>
12877                 */
12878
12879
12880                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
12881                    var domutil = __webpack_require__(/*! ../common/domutil */ "./src/js/common/domutil.js");
12882                    var domevent = __webpack_require__(/*! ../common/domevent */ "./src/js/common/domevent.js");
12883
12884                    /**
12885                     * @constructor
12886                     * @mixes CustomEvents
12887                     * @param {object} options - options for drag handler
12888                     * @param {number} [options.distance=10] - distance in pixels after mouse must move before dragging should start
12889                     * @param {function} [options.exclude] - filter function for don't fire drag events that specific conditions.
12890                     * @param {HTMLElement} container element to watching drag interaction.
12891                     */
12892                    function Drag(options, container) {
12893                        domevent.on(container, 'mousedown', this._onMouseDown, this);
12894
12895                        this.options = util.extend({
12896                            distance: 10,
12897                            exclude: null
12898                        }, options);
12899
12900                        /**
12901                         * @type {HTMLElement}
12902                         */
12903                        this.container = container;
12904
12905                        /**
12906                         * Flag for represent current dragging session has been cancelled for exclude option.
12907                         * @type {boolean}
12908                         */
12909                        this._cancelled = false;
12910
12911                        /**
12912                         * @type {boolean}
12913                         */
12914                        this._isMoved = false;
12915
12916                        /**
12917                         * dragging distance in pixel between mousedown and firing dragStart events
12918                         * @type {number}
12919                         */
12920                        this._distance = 0;
12921
12922                        /**
12923                         * @type {boolean}
12924                         */
12925                        this._dragStartFired = false;
12926
12927                        /**
12928                         * @type {object}
12929                         */
12930                        this._dragStartEventData = null;
12931                    }
12932
12933                    /**
12934                     * Destroy method.
12935                     */
12936                    Drag.prototype.destroy = function() {
12937                        domevent.off(this.container, 'mousedown', this._onMouseDown, this);
12938                        this._isMoved = null;
12939                        this.container = null;
12940                    };
12941
12942                    /**
12943                     * Clear cache data for single dragging session.
12944                     */
12945                    Drag.prototype._clearData = function() {
12946                        this._cancelled = false;
12947                        this._distance = 0;
12948                        this._isMoved = false;
12949                        this._dragStartFired = false;
12950                        this._dragStartEventData = null;
12951                    };
12952
12953                    /**
12954                     * Toggle events for mouse dragging.
12955                     * @param {boolean} toBind - bind events related with dragging when supplied "true"
12956                     */
12957                    Drag.prototype._toggleDragEvent = function(toBind) {
12958                        var container = this.container,
12959                            domMethod,
12960                            method;
12961
12962                        if (toBind) {
12963                            domMethod = 'on';
12964                            method = 'disable';
12965                        } else {
12966                            domMethod = 'off';
12967                            method = 'enable';
12968                        }
12969
12970                        domutil[method + 'TextSelection'](container);
12971                        domutil[method + 'ImageDrag'](container);
12972                        domevent[domMethod](global.document, {
12973                            mousemove: this._onMouseMove,
12974                            mouseup: this._onMouseUp
12975                        }, this);
12976                    };
12977
12978                    /**
12979                     * Normalize mouse event object.
12980                     * @param {MouseEvent} mouseEvent - mouse event object.
12981                     * @returns {object} normalized mouse event data.
12982                     */
12983                    Drag.prototype._getEventData = function(mouseEvent) {
12984                        return {
12985                            target: mouseEvent.target || mouseEvent.srcElement,
12986                            originEvent: mouseEvent
12987                        };
12988                    };
12989
12990                    /**
12991                     * MouseDown DOM event handler.
12992                     * @param {MouseEvent} mouseDownEvent MouseDown event object.
12993                     */
12994                    Drag.prototype._onMouseDown = function(mouseDownEvent) {
12995                        var opt = this.options,
12996                            target = (mouseDownEvent.srcElement || mouseDownEvent.target);
12997
12998                        // only primary button can start drag.
12999                        if (domevent.getMouseButton(mouseDownEvent) !== 0) {
13000                            return;
13001                        }
13002
13003                        if (opt.exclude && opt.exclude(target)) {
13004                            this._cancelled = true;
13005
13006                            return;
13007                        }
13008
13009                        this._clearData();
13010                        this._dragStartEventData = this._getEventData(mouseDownEvent);
13011
13012                        this._toggleDragEvent(true);
13013
13014                        /**
13015                         * mousedown event for firefox bug. cancelable.
13016                         * @event Drag#mouseDown
13017                         * @type {object}
13018                         * @property {HTMLElement} target - target element in this event.
13019                         * @property {MouseEvent} originEvent - original mouse event object.
13020                         */
13021                        this.fire('mousedown', this._dragStartEventData);
13022                    };
13023
13024                    /**
13025                     * MouseMove DOM event handler.
13026                     * @emits Drag#drag
13027                     * @emits Drag#dragStart
13028                     * @param {MouseEvent} mouseMoveEvent MouseMove event object.
13029                     */
13030                    Drag.prototype._onMouseMove = function(mouseMoveEvent) {
13031                        var distance;
13032
13033                        if (this._cancelled) {
13034                            this._clearData();
13035
13036                            return;
13037                        }
13038
13039                        distance = this.options.distance;
13040                        // prevent automatic scrolling.
13041                        domevent.preventDefault(mouseMoveEvent);
13042
13043                        if (this._distance < distance) {
13044                            this._distance += 1;
13045
13046                            return;
13047                        }
13048                        this._isMoved = true;
13049
13050                        if (!this._dragStartFired) {
13051                            this._dragStartFired = true;
13052
13053                            /**
13054                             * Drag start events. cancelable.
13055                             * @event Drag#dragStart
13056                             * @type {object}
13057                             * @property {HTMLElement} target - target element in this event.
13058                             * @property {MouseEvent} originEvent - original mouse event object.
13059                             */
13060                            if (!this.invoke('dragStart', this._dragStartEventData)) {
13061                                this._toggleDragEvent(false);
13062                                this._clearData();
13063
13064                                return;
13065                            }
13066                        }
13067
13068                        /**
13069                         * CalEvents while dragging.
13070                         * @event Drag#drag
13071                         * @type {object}
13072                         * @property {HTMLElement} target - target element in this event.
13073                         * @property {MouseEvent} originEvent - original mouse event object.
13074                         */
13075                        this.fire('drag', this._getEventData(mouseMoveEvent));
13076                    };
13077
13078                    /**
13079                     * MouseUp DOM event handler.
13080                     * @param {MouseEvent} mouseUpEvent MouseUp event object.
13081                     * @emits Drag#dragEnd
13082                     * @emits Drag#click
13083                     */
13084                    Drag.prototype._onMouseUp = function(mouseUpEvent) {
13085                        if (this._cancelled) {
13086                            return;
13087                        }
13088
13089                        this._toggleDragEvent(false);
13090
13091                        // emit "click" event when not emitted drag event between mousedown and mouseup.
13092                        if (this._isMoved) {
13093                            this._isMoved = false;
13094                            /**
13095                             * Drag end events.
13096                             * @event Drag#dragEnd
13097                             * @type {MouseEvent}
13098                             * @property {HTMLElement} target - target element in this event.
13099                             * @property {MouseEvent} originEvent - original mouse event object.
13100                             */
13101                            this.fire('dragEnd', this._getEventData(mouseUpEvent));
13102                        } else {
13103                            /**
13104                             * Click events.
13105                             * @event Drag#click
13106                             * @type {MouseEvent}
13107                             * @property {HTMLElement} target - target element in this event.
13108                             * @property {MouseEvent} originEvent - original mouse event object.
13109                             */
13110                            this.fire('click', this._getEventData(mouseUpEvent));
13111                        }
13112
13113                        this._clearData();
13114                    };
13115
13116                    util.CustomEvents.mixin(Drag);
13117
13118                    module.exports = Drag;
13119
13120                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
13121
13122                /***/ }),
13123
13124            
13124/***/ "./src/js/handler/month/click.js":
13125            /*!***************************************!*\
13126  !*** ./src/js/handler/month/click.js ***!
13127  \***************************************/
13128            /*! no static exports found */
13129            /***/ (function(module, exports, __webpack_require__) {
13130
13131                "use strict";
13132                /**
13133                 * @fileoverview Click handler for month view
13134                 * @author NHN FE Development Lab <[email protected]>
13135                 */
13136
13137
13138                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
13139                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js"),
13140                    datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js"),
13141                    domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
13142
13143                /**
13144                 * @constructor
13145                 * @implements {Handler}
13146                 * @mixes util.CustomEvents
13147                 * @param {Drag} [dragHandler] - Drag handler instance.
13148                 * @param {Month} [monthView] - Month view instance.
13149                 * @param {Base} [baseController] - Base controller instance.
13150                 */
13151                function MonthClick(dragHandler, monthView, baseController) {
13152                    /**
13153                     * @type {Drag}
13154                     */
13155                    this.dragHandler = dragHandler;
13156
13157                    /**
13158                     * @type {Month}
13159                     */
13160                    this.monthView = monthView;
13161
13162                    /**
13163                     * @type {Base}
13164                     */
13165                    this.baseController = baseController;
13166
13167                    dragHandler.on({
13168                        'click': this._onClick
13169                    }, this);
13170                }
13171
13172                /**
13173                 * Destructor
13174                 */
13175                MonthClick.prototype.destroy = function() {
13176                    this.dragHandler.off(this);
13177                    this.monthView = this.baseController = this.dragHandler = null;
13178                };
13179
13180                /**
13181                 * @fires MonthClick#clickMore
13182                 * @param {object} clickEvent - click event object
13183                 */
13184                MonthClick.prototype._onClick = function(clickEvent) {
13185                    var self = this,
13186                        moreElement,
13187                        scheduleCollection = this.baseController.schedules,
13188                        blockElement = domutil.closest(clickEvent.target, config.classname('.weekday-schedule-block'))
13189                            || domutil.closest(clickEvent.target, config.classname('.month-more-schedule'));
13190
13191                    moreElement = domutil.closest(
13192                        clickEvent.target,
13193                        config.classname('.weekday-exceed-in-month')
13194                    );
13195
13196                    if (moreElement) {
13197                        self.fire('clickMore', {
13198                            date: datetime.parse(domutil.getData(moreElement, 'ymd')),
13199                            target: moreElement,
13200                            ymd: domutil.getData(moreElement, 'ymd')
13201                        });
13202                    }
13203
13204                    if (blockElement) {
13205                        scheduleCollection.doWhenHas(domutil.getData(blockElement, 'id'), function(schedule) {
13206                            /**
13207                             * @events AlldayClick#clickSchedule
13208                             * @type {object}
13209                             * @property {Schedule} schedule - schedule instance
13210                             * @property {MouseEvent} event - MouseEvent object
13211                             */
13212                            self.fire('clickSchedule', {
13213                                schedule: schedule,
13214                                event: clickEvent.originEvent
13215                            });
13216                        });
13217                    }
13218                };
13219
13220                util.CustomEvents.mixin(MonthClick);
13221
13222                module.exports = MonthClick;
13223
13224
13225                /***/ }),
13226
13227            
13227/***/ "./src/js/handler/month/core.js":
13228            /*!**************************************!*\
13229  !*** ./src/js/handler/month/core.js ***!
13230  \**************************************/
13231            /*! no static exports found */
13232            /***/ (function(module, exports, __webpack_require__) {
13233
13234                "use strict";
13235                /**
13236                 * @fileoverview Module for calculate date by month view and mouse event object
13237                 * @author NHN FE Development Lab <[email protected]>
13238                 */
13239
13240
13241                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
13242                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js"),
13243                    domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js"),
13244                    domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js");
13245                var mfloor = Math.floor;
13246
13247                /**
13248                 * Get high order function that can calc date in mouse point
13249                 * @param {Month} monthView - month view
13250                 * @returns {function} function return event data by mouse event object
13251                 */
13252                function getMousePosDate(monthView) {
13253                    var weekColl = monthView.children,
13254                        weeks = weekColl.sort(function(a, b) {
13255                            return util.stamp(a) - util.stamp(b);
13256                        }),
13257                        weekCount = weekColl.length,
13258                        days = weekColl.single().getRenderDateRange(),
13259                        dayCount = days.length,
13260                        relativeContainer = util.pick(monthView.vLayout.panels[1], 'container'),
13261                        size = domutil.getSize(relativeContainer),
13262                        grids = monthView.grids;
13263
13264                    /**
13265                     * Get the left index
13266                     * @param {number} left - left position(percent)
13267                     * @returns {number} grid left index
13268                     */
13269                    function getX(left) {
13270                        var i = 0;
13271                        var length = grids.length;
13272                        var grid;
13273                        for (; i < length; i += 1) {
13274                            grid = grids[i];
13275                            if (grid.left <= left && left <= (grid.left + grid.width)) {
13276                                return i;
13277                            }
13278                        }
13279
13280                        return left < 0 ? -1 : i;
13281                    }
13282
13283                    /**
13284                     * Get date related with mouse event object
13285                     * @param {object} mouseEvent - click event data
13286                     * @returns {object} data related with mouse event
13287                     */
13288                    function getDate(mouseEvent) {
13289                        var pos = domevent.getMousePosition(mouseEvent, relativeContainer),
13290                            x = getX(common.ratio(size[0], 100, pos[0])),
13291                            y = mfloor(common.ratio(size[1], weekCount, pos[1])),
13292                            weekdayView,
13293                            date,
13294                            dateRange;
13295
13296                        if (y < 0) {
13297                            y = 0;
13298                        }
13299                        if (y >= weeks.length) {
13300                            y = weeks.length - 1;
13301                        }
13302
13303                        weekdayView = util.pick(weeks, y);
13304
13305                        if (!weekdayView) {
13306                            return null;
13307                        }
13308
13309                        dateRange = weekdayView.getRenderDateRange();
13310                        if (x < 0) {
13311                            x = 0;
13312                        }
13313                        if (x >= dateRange.length) {
13314                            x = dateRange.length - 1;
13315                        }
13316
13317                        date = util.pick(dateRange, x);
13318
13319                        if (!date) {
13320                            return null;
13321                        }
13322
13323                        return {
13324                            x: x,
13325                            y: y,
13326                            sizeX: dayCount,
13327                            sizeY: weekCount,
13328                            date: date,
13329                            weekdayView: weekdayView,
13330                            triggerEvent: mouseEvent.type
13331                        };
13332                    }
13333
13334                    return getDate;
13335                }
13336
13337                module.exports = getMousePosDate;
13338
13339
13340                /***/ }),
13341
13342            
13342/***/ "./src/js/handler/month/creation.js":
13343            /*!******************************************!*\
13344  !*** ./src/js/handler/month/creation.js ***!
13345  \******************************************/
13346            /*! no static exports found */
13347            /***/ (function(module, exports, __webpack_require__) {
13348
13349                "use strict";
13350                /**
13351                 * @fileoverview Creation handler for month view
13352                 * @author NHN FE Development Lab <[email protected]>
13353                 */
13354
13355
13356                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
13357
13358                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
13359                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
13360                var array = __webpack_require__(/*! ../../common/array */ "./src/js/common/array.js");
13361                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
13362                var domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js");
13363                var getMousePosDate = __webpack_require__(/*! ./core */ "./src/js/handler/month/core.js");
13364                var Guide = __webpack_require__(/*! ./creationGuide */ "./src/js/handler/month/creationGuide.js");
13365                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
13366
13367                var CLICK_DELAY = 300;
13368
13369                /**
13370                 * @constructor
13371                 * @param {Drag} dragHandler - Drag handler instance.
13372                 * @param {Month} monthView - Month view instance.
13373                 * @param {Base} baseController - Base controller instance.
13374                 * @param {Options} [options] - calendar Options
13375                 */
13376                function MonthCreation(dragHandler, monthView, baseController, options) {
13377                    /**
13378                     * @type {Drag}
13379                     */
13380                    this.dragHandler = dragHandler;
13381
13382                    /**
13383                     * @type {Month}
13384                     */
13385                    this.monthView = monthView;
13386
13387                    /**
13388                     * @type {Base}
13389                     */
13390                    this.baseController = baseController;
13391
13392                    /**
13393                     * @type {function}
13394                     */
13395                    this.getScheduleData = null;
13396
13397                    /**
13398                     * Cache for dragging session
13399                     * @type {object}
13400                     */
13401                    this._cache = null;
13402
13403                    /**
13404                     * @type {MonthCreationGuide}
13405                     */
13406                    this.guide = new Guide(this);
13407
13408                    /**
13409                     * @type {boolean}
13410                     */
13411                    this._requestOnClick = false;
13412
13413                    /**
13414                     * @type {boolean}
13415                     */
13416                    this._disableDblClick = options.disableDblClick;
13417
13418                    /**
13419                     * @type {boolean}
13420                     */
13421                    this._disableClick = options.disableClick;
13422
13423                    dragHandler.on('dragStart', this._onDragStart, this);
13424                    dragHandler.on('click', this._onClick, this);
13425
13426                    if (this._disableDblClick) {
13427                        CLICK_DELAY = 0;
13428                    } else {
13429                        domevent.on(monthView.container, 'dblclick', this._onDblClick, this);
13430                    }
13431                }
13432
13433                /**
13434                 * Destructor
13435                 */
13436                MonthCreation.prototype.destroy = function() {
13437                    this.dragHandler.off(this);
13438                    this.guide.destroy();
13439
13440                    if (this.monthView && this.monthView.container) {
13441                        domevent.off(this.monthView.container, 'dblclick', this._onDblClick, this);
13442                    }
13443
13444                    this.dragHandler = this.monthView = this.baseController =
13445                        this.getScheduleData = this._cache = this.guide = null;
13446                };
13447
13448                /**
13449                 * Fire before create schedule
13450                 * @fires {MonthCreation#beforeCreateSchedule}
13451                 * @param {object} eventData - cache data from single dragging session
13452                 */
13453                MonthCreation.prototype._createSchedule = function(eventData) {
13454                    /**
13455                     * @event {MonthCreation#beforeCreateSchedule}
13456                     * @type {object}
13457                     * @property {boolean} isAllDay - whether schedule is fired in allday view area?
13458                     * @property {Date} start - select start time
13459                     * @property {Date} end - select end time
13460                     * @property {TimeCreationGuide} guide - TimeCreationGuide instance
13461                     * @property {string} triggerEventName - event name
13462                     */
13463                    this.fire('beforeCreateSchedule', {
13464                        isAllDay: eventData.isAllDay,
13465                        start: eventData.start,
13466                        end: eventData.end,
13467                        guide: this.guide.guide,
13468                        triggerEventName: eventData.triggerEvent
13469                    });
13470                };
13471
13472                /**
13473                 * DragStart event handler
13474                 * @fires {MonthCreation#monthCreationDragstart}
13475                 * @param {object} dragStartEvent - dragStart event data
13476                 */
13477                MonthCreation.prototype._onDragStart = function(dragStartEvent) {
13478                    var eventData;
13479
13480                    if (!isElementWeekdayGrid(dragStartEvent.target)) {
13481                        return;
13482                    }
13483
13484                    this.dragHandler.on({
13485                        drag: this._onDrag,
13486                        dragEnd: this._onDragEnd
13487                    }, this);
13488
13489                    this.getScheduleData = getMousePosDate(this.monthView);
13490
13491                    eventData = this.getScheduleData(dragStartEvent.originEvent);
13492
13493                    this._cache = {
13494                        start: new TZDate(eventData.date)
13495                    };
13496
13497                    /**
13498                     * @event {MonthCreation#monthCreationDragstart}
13499                     * @type {object}
13500                     * @property {number} x - x index
13501                     * @property {number} y - y index
13502                     * @property {Date} date - drag date
13503                     */
13504                    this.fire('monthCreationDragstart', eventData);
13505                };
13506
13507                /**
13508                 * Drag event handler
13509                 * @fires {MonthCreation#monthCreationDrag}
13510                 * @param {object} dragEvent - drag event data
13511                 */
13512                MonthCreation.prototype._onDrag = function(dragEvent) {
13513                    var eventData;
13514
13515                    if (!this.getScheduleData) {
13516                        return;
13517                    }
13518
13519                    eventData = this.getScheduleData(dragEvent.originEvent);
13520
13521                    if (!eventData) {
13522                        return;
13523                    }
13524
13525                    /**
13526                     * @event {MonthCreation#monthCreationDrag}
13527                     * @type {object}
13528                     * @property {number} x - x index
13529                     * @property {number} y - y index
13530                     * @property {Date} date - drag date
13531                     */
13532                    this.fire('monthCreationDrag', eventData);
13533                };
13534
13535                /**
13536                 * DragEnd event handler
13537                 * @fires {MonthCreation#monthCreationDragend}
13538                 * @param {object} dragEndEvent - drag end event data
13539                 */
13540                MonthCreation.prototype._onDragEnd = function(dragEndEvent) {
13541                    var cache = this._cache;
13542                    var eventData;
13543                    var times;
13544
13545                    this.dragHandler.off({
13546                        drag: this._onDrag,
13547                        dragEnd: this._onDragEnd
13548                    }, this);
13549
13550                    if (!this.getScheduleData) {
13551                        return;
13552                    }
13553
13554                    eventData = this.getScheduleData(dragEndEvent.originEvent);
13555
13556                    if (eventData) {
13557                        cache.end = new TZDate(eventData.date);
13558                        cache.isAllDay = true;
13559
13560                        times = [
13561                            cache.start,
13562                            cache.end
13563                        ].sort(array.compare.num.asc);
13564
13565                        cache.start = new TZDate(times[0]);
13566                        cache.end = datetime.end(times[1]);
13567
13568                        this._createSchedule(cache);
13569                    }
13570
13571                    /**
13572                     * @event {MonthCreation#monthCreationDragend}
13573                     * @type {object}
13574                     * @property {number} x - x index
13575                     * @property {number} y - y index
13576                     * @property {Date} date - drag date
13577                     */
13578                    this.fire('monthCreationDragend', eventData);
13579
13580                    this.getScheduleData = this._cache = null;
13581                };
13582
13583                /**
13584                 * Dblclick event handler
13585                 * @fires {MonthCreation#monthCreationDragstart}
13586                 * @param {MouseEvent} e - Native MouseEvent
13587                 */
13588                MonthCreation.prototype._onDblClick = function(e) {
13589                    var eventData, range;
13590
13591                    if (!isElementWeekdayGrid(e.target)) {
13592                        return;
13593                    }
13594
13595                    eventData = getMousePosDate(this.monthView)(e);
13596
13597                    this.fire('monthCreationClick', eventData);
13598
13599                    range = this._adjustStartAndEndTime(new TZDate(eventData.date), new TZDate(eventData.date));
13600
13601                    this._createSchedule({
13602                        start: range.start,
13603                        end: range.end,
13604                        isAllDay: false,
13605                        triggerEvent: eventData.triggerEvent
13606                    });
13607
13608                    this._requestOnClick = false;
13609                };
13610
13611                /**
13612                 * Click event handler
13613                 * @fires {MonthCreation#monthCreationDragstart}
13614                 * @param {MouseEvent} e - Native MouseEvent
13615                 */
13616                MonthCreation.prototype._onClick = function(e) {
13617                    var self = this;
13618                    var eventData, range;
13619
13620                    if (!isElementWeekdayGrid(e.target) || this._disableClick) {
13621                        return;
13622                    }
13623
13624                    eventData = getMousePosDate(this.monthView)(e.originEvent);
13625
13626                    this._requestOnClick = true;
13627                    setTimeout(function() {
13628                        if (self._requestOnClick) {
13629                            self.fire('monthCreationClick', eventData);
13630
13631                            range = self._adjustStartAndEndTime(new TZDate(eventData.date), new TZDate(eventData.date));
13632
13633                            self._createSchedule({
13634                                start: range.start,
13635                                end: range.end,
13636                                isAllDay: false,
13637                                triggerEvent: eventData.triggerEvent
13638                            });
13639                        }
13640                        self._requestOnClick = false;
13641                    }, CLICK_DELAY);
13642                };
13643
13644                /**
13645                 * Adjust time to our o'clock
13646                 * @param {TZDate} start - start time
13647                 * @param {TZDate} end - end time
13648                 * @returns {Object} start and end
13649                 */
13650                MonthCreation.prototype._adjustStartAndEndTime = function(start, end) {
13651                    var now = new TZDate();
13652                    var hours = now.getHours();
13653                    var minutes = now.getMinutes();
13654
13655                    // adjust start to less time. Adjusting had been greater time in monthly view when clicking grid
13656                    if (minutes <= 30) {
13657                        minutes = 0;
13658                    } else {
13659                        minutes = 30;
13660                    }
13661                    start.setHours(hours, minutes, 0, 0);
13662                    end.setHours(hours + 1, minutes, 0, 0);
13663
13664                    return {
13665                        start: start,
13666                        end: end
13667                    };
13668                };
13669
13670                /**
13671                 * Invoke creation click
13672                 * @param {Schedule} schedule - schedule instance
13673                 */
13674                MonthCreation.prototype.invokeCreationClick = function(schedule) {
13675                    var eventData = {
13676                        model: schedule
13677                    };
13678
13679                    this.fire('monthCreationClick', eventData);
13680
13681                    this._createSchedule({
13682                        start: schedule.start,
13683                        end: schedule.end,
13684                        isAllDay: schedule.isAllDay,
13685                        triggerEvent: 'manual'
13686                    });
13687                };
13688
13689                /**
13690                 * Returns whether the given element is Weekday-Schedule.
13691                 * @param {HTMLElement} el - target element
13692                 * @returns {boolean}
13693                 */
13694                function isElementWeekdayGrid(el) {
13695                    return domutil.closest(el, config.classname('.weekday-grid'))
13696                        && !domutil.closest(el, config.classname('.weekday-exceed-in-month'));
13697                }
13698
13699                util.CustomEvents.mixin(MonthCreation);
13700
13701                module.exports = MonthCreation;
13702
13703
13704                /***/ }),
13705
13706            
13706/***/ "./src/js/handler/month/creationGuide.js":
13707            /*!***********************************************!*\
13708  !*** ./src/js/handler/month/creationGuide.js ***!
13709  \***********************************************/
13710            /*! no static exports found */
13711            /***/ (function(module, exports, __webpack_require__) {
13712
13713                "use strict";
13714                /**
13715                 * @fileoverview Creation guide module for month view
13716                 * @author NHN FE Development Lab <[email protected]>
13717                 */
13718
13719
13720                var MonthGuide = __webpack_require__(/*! ./guide */ "./src/js/handler/month/guide.js");
13721
13722                /**
13723                 * @constructor
13724                 * @param {MonthCreation} monthCreation - instance of MonthCreation
13725                 */
13726                function MonthCreationGuide(monthCreation) {
13727                    /**
13728                     * @type {MonthCreation}
13729                     */
13730                    this.monthCreation = monthCreation;
13731
13732                    /**
13733                     * @type {MonthGuide}
13734                     */
13735                    this.guide = null;
13736
13737                    monthCreation.on({
13738                        monthCreationDragstart: this._createGuideElement,
13739                        monthCreationDrag: this._onDrag,
13740                        monthCreationDragend: this._onDragEnd,
13741                        monthCreationClick: this._createGuideElement
13742                    }, this);
13743                }
13744
13745                /**
13746                 * Destructor
13747                 */
13748                MonthCreationGuide.prototype.destroy = function() {
13749                    this.monthCreation.off(this);
13750
13751                    if (this.guide) {
13752                        this.guide.destroy();
13753                    }
13754
13755                    this.guide = this.monthCreation = null;
13756                };
13757
13758                /**
13759                 * Drag start event handler
13760                 * @param {object} dragStartEvent - schedule data from MonthCreation
13761                 */
13762                MonthCreationGuide.prototype._createGuideElement = function(dragStartEvent) {
13763                    var options = {
13764                        isCreationMode: true,
13765                        height: '100%',
13766                        top: 0
13767                    };
13768
13769                    this.guide = new MonthGuide(options, this.monthCreation.monthView);
13770                    this.guide.start(dragStartEvent);
13771                };
13772
13773                /**
13774                 * Drag event handler
13775                 * @param {object} dragEvent - schedule data from MonthCreation
13776                 */
13777                MonthCreationGuide.prototype._onDrag = function(dragEvent) {
13778                    this.guide.update(dragEvent.x, dragEvent.y);
13779                };
13780
13781                /**
13782                 * Drag end event handler
13783                 */
13784                MonthCreationGuide.prototype._onDragEnd = function() {
13785                    // Do nothing. User calls destroy directly.
13786                    this.guide = null;
13787                };
13788
13789                module.exports = MonthCreationGuide;
13790
13791
13792                /***/ }),
13793
13794            /***/ "./src/js/handler/month/guide.hbs":
13795            /*!****************************************!*\
13796  !*** ./src/js/handler/month/guide.hbs ***!
13797  \****************************************/
13798            /*! no static exports found */
13799            /***/ (function(module, exports, __webpack_require__) {
13800
13801                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
13802                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
13803                        var stack1, helper, alias1=container.escapeExpression, alias2=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
13804                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
13805                                return parent[propertyName];
13806                            }
13807                            return undefined
13808                        };
13809
13810                        return "<div class=\""
13811                            + alias1(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}
vendor: 10,218 bytes, lines 13811-13897
13811),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":16},"end":{"line":3,"column":30}}}) : helper)))
13812                            + "month-creation-guide\" style=\"border: "
13813                            + alias1(alias2(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"border") : stack1), depth0))
13814                            + "; background-color: "
13815                            + alias1(alias2(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"backgroundColor") : stack1), depth0))
13816                            + ";\"></div>\n";
13817                    },"3":function(container,depth0,helpers,partials,data) {
13818                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
13819                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
13820                                return parent[propertyName];
13821                            }
13822                            return undefined
13823                        };
13824
13825                        return "<div class=\""
13826                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":5,"column":16},"end":{"line":5,"column":30}}}) : helper)))
13827                            + "weekday-schedule\"\n        style=\"height: "
13828                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"scheduleHeight") : stack1), depth0))
13829                            + "; line-height: "
13830                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"scheduleHeight") : stack1), depth0))
13831                            + "; margin-top: "
13832                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"scheduleGutter") : stack1), depth0))
13833                            + "; border-radius:"
13834                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"borderRadius") : stack1), depth0))
13835                            + "; margin-left: "
13836                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"marginLeft") : stack1), depth0))
13837                            + "; margin-right: "
13838                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"marginRight") : stack1), depth0))
13839                            + ";\n            color:"
13840                            + alias4(((helper = (helper = lookupProperty(helpers,"color") || (depth0 != null ? lookupProperty(depth0,"color") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"color","hash":{},"data":data,"loc":{"start":{"line":7,"column":18},"end":{"line":7,"column":27}}}) : helper)))
13841                            + ";border-color:"
13842                            + alias4(((helper = (helper = lookupProperty(helpers,"borderColor") || (depth0 != null ? lookupProperty(depth0,"borderColor") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"borderColor","hash":{},"data":data,"loc":{"start":{"line":7,"column":41},"end":{"line":7,"column":56}}}) : helper)))
13843                            + ";background-color:"
13844                            + alias4(((helper = (helper = lookupProperty(helpers,"bgColor") || (depth0 != null ? lookupProperty(depth0,"bgColor") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"bgColor","hash":{},"data":data,"loc":{"start":{"line":7,"column":74},"end":{"line":7,"column":85}}}) : helper)))
13845                            + "\">\n        <div class=\""
13846                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":8,"column":20},"end":{"line":8,"column":34}}}) : helper)))
13847                            + "weekday-schedule-title\">\n"
13848                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isAllDay") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.program(6, data, 0),"data":data,"loc":{"start":{"line":9,"column":12},"end":{"line":13,"column":19}}})) != null ? stack1 : "")
13849                            + "        </div>\n        <div class=\""
13850                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":15,"column":20},"end":{"line":15,"column":34}}}) : helper)))
13851                            + "weekday-resize-handle handle-y\" style=\"line-height: "
13852                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"scheduleHeight") : stack1), depth0))
13853                            + ";\">&nbsp;</div>\n    </div>\n";
13854                    },"4":function(container,depth0,helpers,partials,data) {
13855                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
13856                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
13857                                return parent[propertyName];
13858                            }
13859                            return undefined
13860                        };
13861
13862                        return "                "
13863                            + ((stack1 = (lookupProperty(helpers,"allday-tmpl")||(depth0 && lookupProperty(depth0,"allday-tmpl"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"allday-tmpl","hash":{},"data":data,"loc":{"start":{"line":10,"column":16},"end":{"line":10,"column":38}}})) != null ? stack1 : "")
13864                            + "\n";
13865                    },"6":function(container,depth0,helpers,partials,data) {
13866                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
13867                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
13868                                return parent[propertyName];
13869                            }
13870                            return undefined
13871                        };
13872
13873                        return "                "
13874                            + ((stack1 = (lookupProperty(helpers,"time-tmpl")||(depth0 && lookupProperty(depth0,"time-tmpl"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"time-tmpl","hash":{},"data":data,"loc":{"start":{"line":12,"column":16},"end":{"line":12,"column":36}}})) != null ? stack1 : "")
13875                            + "\n";
13876                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
13877                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
13878                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
13879                                return parent[propertyName];
13880                            }
13881                            return undefined
13882                        };
13883
13884                        return "<div class=\""
13885                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
13886                            + "month-guide-block\" style=\"top:"
13887                            + alias4(((helper = (helper = lookupProperty(helpers,"top") || (depth0 != null ? lookupProperty(depth0,"top") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"top","hash":{},"data":data,"loc":{"start":{"line":1,"column":56},"end":{"line":1,"column":63}}}) : helper)))
13888                            + ";height:"
13889                            + alias4(((helper = (helper = lookupProperty(helpers,"height") || (depth0 != null ? lookupProperty(depth0,"height") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"height","hash":{},"data":data,"loc":{"start":{"line":1,"column":71},"end":{"line":1,"column":81}}}) : helper)))
13890                            + ";display:none\">\n"
13891                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isCreationMode") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":17,"column":11}}})) != null ? stack1 : "")
13892                            + "</div>\n";
13893                    },"useData":true});
13894
13895                /***/ }),
13896
13897            
13897/***/ "./src/js/handler/month/guide.js":
13898            /*!***************************************!*\
13899  !*** ./src/js/handler/month/guide.js ***!
13900  \***************************************/
13901            /*! no static exports found */
13902            /***/ (function(module, exports, __webpack_require__) {
13903
13904                "use strict";
13905                /**
13906                 * @fileoverview Guide element controller for creation, resize in month view
13907                 * @author NHN FE Development Lab <[email protected]>
13908                 */
13909
13910
13911                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
13912                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js"),
13913                    common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js"),
13914                    domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js"),
13915                    datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js"),
13916                    TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date,
13917                    tmpl = __webpack_require__(/*! ./guide.hbs */ "./src/js/handler/month/guide.hbs");
13918                var mmax = Math.max,
13919                    mmin = Math.min,
13920                    mabs = Math.abs,
13921                    mfloor = Math.floor;
13922
13923                /**
13924                 * @constructor
13925                 * @param {object} [options] - options
13926                 * @param {boolean} [options.useHandle=false] - whether displaying resize handle on
13927                 *  guide element?
13928                 * @param {boolean} [options.isResizeMode=false] - whether resize mode?
13929                 * @param {Month} monthView - Month view instance
13930                 */
13931                function MonthGuide(options, monthView) {
13932                    var self = this;
13933
13934                    /**
13935                     * @type {object}
13936                     */
13937                    this.options = util.extend({
13938                        top: 0,
13939                        height: '20px',
13940                        bgColor: '#f7ca88',
13941                        label: 'New event',
13942                        isResizeMode: false,
13943                        isCreationMode: false,
13944                        styles: this._getStyles(monthView.controller.theme)
13945                    }, options);
13946
13947                    /**
13948                     * @type {Month}
13949                     */
13950                    this.view = monthView;
13951
13952                    /**
13953                     * @type {WeekdayInMonth[]}
13954                     */
13955                    this.weeks = monthView.children.sort(function(a, b) {
13956                        return util.stamp(a) - util.stamp(b);
13957                    });
13958
13959                    /**
13960                     * @type {number}
13961                     */
13962                    this.days = monthView.children.single().getRenderDateRange().length;
13963
13964                    /**
13965                     * @type {function}
13966                     */
13967                    this.ratio = util.bind(function(value) {
13968                        return common.ratio(self.days, 100, value);
13969                    });
13970
13971                    /**
13972                     * start coordinate of guide effect. (x, y) (days, weeks) effect can't
13973                     *  start lower than this coordinate.
13974                     * @type {number[]}
13975                     */
13976                    this.startCoord = [0, 0];
13977
13978                    /**
13979                     * @type {Object.<string, HTMLElement>}
13980                     */
13981                    this.guideElements = {};
13982
13983                    /**
13984                     * horizontal grid information
13985                     * @type {Object}
13986                     */
13987                    this.grids = monthView.grids;
13988                }
13989
13990                /**
13991                 * Destructor
13992                 */
13993                MonthGuide.prototype.destroy = function() {
13994                    this.clear();
13995
13996                    this.options = this.view = this.weeks = this.days =
13997                        this.ratio = this.startCoord = this.guideElements = null;
13998                };
13999
14000                MonthGuide.prototype.clearGuideElement = function() {
14001                    this.destroy();
14002                };
14003
14004                /**
14005                 * Get ratio value in week.
14006                 * @param {number} value - value for calc ratio in week
14007                 * @returns {number} percent value
14008                 */
14009                MonthGuide.prototype._getRatioValueInWeek = function(value) {
14010                    var grid = this.grids[value] || {left: 100};
14011
14012                    return grid.left;
14013                };
14014
14015                /**
14016                 * Create guide element
14017                 * @returns {HTMLElement} guide element
14018                 */
14019                MonthGuide.prototype._createGuideElement = function() {
14020                    var guide = document.createElement('div');
14021
14022                    guide.innerHTML = tmpl(this.options);
14023
14024                    return guide.firstChild;
14025                };
14026
14027                /**
14028                 * Get guide element. if not exist then create one
14029                 * @param {number} y - y coordinate
14030                 * @returns {?HTMLElement} guide element
14031                 */
14032                MonthGuide.prototype._getGuideElement = function(y) {
14033                    var guideElements = this.guideElements,
14034                        guide = guideElements[y],
14035                        weekdayView = this.weeks[y],
14036                        container;
14037
14038                    if (!weekdayView) {
14039                        return null;
14040                    }
14041
14042                    if (!guide) {
14043                        guide = this._createGuideElement();
14044                        container = weekdayView.container;
14045                        container.appendChild(guide);
14046                        guideElements[y] = guide;
14047                    }
14048
14049                    return guide;
14050                };
14051
14052                /**
14053                 * Get coordinate by supplied date in month
14054                 * @param {TZDate} date - date to find coordinate
14055                 * @returns {number[]} coordinate (x, y)
14056                 */
14057                MonthGuide.prototype._getCoordByDate = function(date) {
14058                    var weeks = this.weeks,
14059                        days = this.days,
14060                        getIdxFromDiff = function(d1, d2) {
14061                            return mfloor(datetime.millisecondsTo('day', mabs(d2 - d1)));
14062                        },
14063                        monthStart = datetime.start(weeks[0].options.renderStartDate),
14064                        isBefore = date < monthStart,
14065                        start = new TZDate(monthStart),
14066                        end = new TZDate(monthStart).addDate(isBefore ? -days : days).addDate(-1),
14067                        x = getIdxFromDiff(date, start),
14068                        y = 0;
14069
14070                    while (!datetime.isBetweenWithDate(date, start, end)) {
14071                        start.addDate(isBefore ? -days : days);
14072                        end = new TZDate(start).addDate(days - 1);
14073                        x = getIdxFromDiff(date, start);
14074                        y += (isBefore ? -1 : 1);
14075                    }
14076
14077                    return [x, y];
14078                };
14079
14080                /**
14081                 * Get limited coordinate by supplied coodinates
14082                 * @param {number[]} coord - coordinate need to limit
14083                 * @param {number[]} [min] - minimum limitaion of coordinate
14084                 * @param {number[]} [max] - maximum limitation of coordinate
14085                 * @returns {number[]} limited coordiate
14086                 */
14087                MonthGuide.prototype._getLimitedCoord = function(coord, min, max) {
14088                    var toIndex = 1,
14089                        x = coord[0],
14090                        y = coord[1],
14091                        result;
14092
14093                    min = min || [0, 0];
14094                    max = max || [this.days - toIndex, this.weeks.length - toIndex];
14095
14096                    if (y < min[1]) {
14097                        result = min.slice(0);
14098                    } else if (y > max[1]) {
14099                        result = max.slice(0);
14100                    } else {
14101                        x = mmax(min[0], x);
14102                        x = mmin(max[0], x);
14103                        result = [x, y];
14104                    }
14105
14106                    return result;
14107                };
14108
14109                /**
14110                 * Prepare guide element modification
14111                 * @param {object} dragStartEvent - dragStart schedule data from *guide
14112                 */
14113                MonthGuide.prototype.start = function(dragStartEvent) {
14114                    var opt = this.options,
14115                        target = dragStartEvent.target,
14116                        model = dragStartEvent.model,
14117                        x = dragStartEvent.x,
14118                        y = dragStartEvent.y,
14119                        renderMonth = new TZDate(this.view.options.renderMonth),
14120                        temp;
14121
14122                    if (opt.isCreationMode) {
14123                        if (model && !datetime.isSameMonth(renderMonth, model.start)) {
14124                            model.start.setMonth(renderMonth.getMonth());
14125                            model.start.setDate(1);
14126                            model.end.setMonth(renderMonth.getMonth());
14127                            model.end.setDate(1);
14128                        }
14129                    } else {
14130                        temp = this._getCoordByDate(model.getStarts());
14131                        x = temp[0];
14132                        y = temp[1];
14133
14134                        util.extend(this.options, {
14135                            top: parseInt(target.style.top, 10) + 'px',
14136                            height: parseInt(target.style.height, 10) + 'px',
14137                            label: model.title
14138                        }, model);
14139                    }
14140
14141                    if (util.isUndefined(x) || util.isUndefined(y)) {
14142                        temp = this._getCoordByDate(model.getStarts());
14143                        x = temp[0];
14144                        y = temp[1];
14145                    }
14146
14147                    this.startCoord = [x, y];
14148                    this.update(x, y);
14149                };
14150
14151                /**
14152                 * Data for update several guide elements
14153                 * @typedef UpdateIndication
14154                 * @type {object}
14155                 * @property {HTMLElement} guide - guide element
14156                 * @property {number} left - left style value
14157                 * @property {number} width - width style value
14158                 * @property {boolean} [exceedL=false] - whether schedule is exceeded past weeks?
14159                 * @property {boolean} [exceedR=false] - whether schedule is exceeded future weeks?
14160                 */
14161
14162                /**
14163                 * Modify HTML element that uses for guide element
14164                 * @param {UpdateIndication[]} inds - indication of update severel guide element
14165                 */
14166                MonthGuide.prototype._updateGuides = function(inds) {
14167                    util.forEach(inds, function(ind) {
14168                        var guide = ind.guide,
14169                            exceedLClass = config.classname('month-exceed-left'),
14170                            exceedRClass = config.classname('month-exceed-right');
14171
14172                        guide.style.display = 'block';
14173                        guide.style.left = ind.left + '%';
14174                        guide.style.width = ind.width + '%';
14175
14176                        if (ind.exceedL) {
14177                            domutil.addClass(guide, exceedLClass);
14178                        } else {
14179                            domutil.removeClass(guide, exceedLClass);
14180                        }
14181
14182                        if (ind.exceedR) {
14183                            domutil.addClass(guide, exceedRClass);
14184                        } else {
14185                            domutil.removeClass(guide, exceedRClass);
14186                        }
14187                    });
14188                };
14189
14190                /**
14191                 * Get guide element indicate for origin week
14192                 * @param {number[]} startCoord - drag start coordinate
14193                 * @param {number[]} mouseCoord - mouse coordinate
14194                 * @returns {object} indicate
14195                 */
14196                MonthGuide.prototype._getOriginIndicate = function(startCoord, mouseCoord) {
14197                    var left = mmin(startCoord[0], mouseCoord[0]),
14198                        right = mmax(startCoord[0], mouseCoord[0]) + 1,
14199                        exceedL, exceedR;
14200
14201                    if (mouseCoord[1] > startCoord[1]) {
14202                        left = startCoord[0];
14203                        right = this.days;
14204                        exceedR = true;
14205                    } else if (mouseCoord[1] < startCoord[1]) {
14206                        left = 0;
14207                        right = startCoord[0] + 1;
14208                        exceedL = true;
14209                    }
14210
14211                    return {
14212                        left: this._getRatioValueInWeek(left),
14213                        width: this._getRatioValueInWeek(right) -
14214                            this._getRatioValueInWeek(left),
14215                        exceedL: exceedL,
14216                        exceedR: exceedR
14217                    };
14218                };
14219
14220                /**
14221                 * Get guide element indicate for week related with mouse position
14222                 * @param {number[]} startCoord - drag start coordinate
14223                 * @param {number[]} mouseCoord - mouse coordinate
14224                 * @returns {object} indicate
14225                 */
14226                MonthGuide.prototype._getMouseIndicate = function(startCoord, mouseCoord) {
14227                    var left = mouseCoord[0],
14228                        right = mouseCoord[0] + 1,
14229                        exceedL, exceedR;
14230
14231                    if (mouseCoord[1] > startCoord[1]) {
14232                        left = 0;
14233                        exceedL = true;
14234                    } else if (mouseCoord[1] < startCoord[1]) {
14235                        right = this.days;
14236                        exceedR = true;
14237                    }
14238
14239                    return {
14240                        left: this._getRatioValueInWeek(left),
14241                        width: this._getRatioValueInWeek(right) -
14242                            this._getRatioValueInWeek(left),
14243                        exceedL: exceedL,
14244                        exceedR: exceedR
14245                    };
14246                };
14247
14248                /**
14249                 * Get guide element indicate for contained weeks
14250                 * @returns {object} indicate
14251                 */
14252                MonthGuide.prototype._getContainIndicate = function() {
14253                    return {
14254                        left: 0,
14255                        width: 100,
14256                        exceedL: true,
14257                        exceedR: true
14258                    };
14259                };
14260
14261                /**
14262                 * Remove several guide element that supplied by parameter
14263                 * @param {number[]} yCoords - array of y coordinate to remove guide element
14264                 */
14265                MonthGuide.prototype._removeGuideElements = function(yCoords) {
14266                    var guides = this.guideElements;
14267
14268                    util.forEach(yCoords, function(y) {
14269                        domutil.remove(guides[y]);
14270                        delete guides[y];
14271                    });
14272                };
14273
14274                /**
14275                 * Get excluded numbers in range
14276                 * @param {number[]} range - the range. value must be sequencial.
14277                 * @param {number[]} numbers - numbers to check
14278                 * @returns {number[]} excluded numbers
14279                 */
14280                MonthGuide.
14280prototype._getExcludesInRange = function(range, numbers) {
14281                    var min = mmin.apply(null, range),
14282                        max = mmax.apply(null, range),
14283                        excludes = [];
14284
14285                    util.forEach(numbers, function(num) {
14286                        num = parseInt(num, 10);
14287                        if (num < min || num > max) {
14288                            excludes.push(num);
14289                        }
14290                    });
14291
14292                    return excludes;
14293                };
14294
14295                /**
14296                 * Update guide elements by coordinate in month grid from mousemove event
14297                 * @param {number} x - x coordinate
14298                 * @param {number} y - y coordinate
14299                 */
14300                MonthGuide.prototype.update = function(x, y) {
14301                    var self = this,
14302                        startCoord = this.startCoord,
14303                        mouseCoord = [x, y],
14304                        limitedCoord = this.options.isResizeMode ?
14305                            this._getLimitedCoord(mouseCoord, startCoord) : mouseCoord,
14306                        renderedYIndex = util.keys(this.guideElements),
14307                        yCoordsToUpdate = util.range(
14308                            mmin(startCoord[1], limitedCoord[1]),
14309                            mmax(startCoord[1], limitedCoord[1]) + 1
14310                        ),
14311                        yCoordsToRemove = this._getExcludesInRange(
14312                            yCoordsToUpdate,
14313                            renderedYIndex
14314                        ),
14315                        renderIndication = {};
14316
14317                    this._removeGuideElements(yCoordsToRemove);
14318
14319                    util.forEach(yCoordsToUpdate, function(guideYCoord) {
14320                        var guide = self._getGuideElement(guideYCoord),
14321                            indicate;
14322
14323                        if (!guide) {
14324                            return;
14325                        }
14326
14327                        if (guideYCoord === startCoord[1]) {
14328                            indicate = self._getOriginIndicate(startCoord, limitedCoord);
14329                        } else if (guideYCoord === mouseCoord[1]) {
14330                            indicate = self._getMouseIndicate(startCoord, mouseCoord);
14331                        } else {
14332                            indicate = self._getContainIndicate();
14333                        }
14334
14335                        renderIndication[guideYCoord] = util.extend({
14336                            guide: guide
14337                        }, indicate);
14338                    });
14339
14340                    this._updateGuides(renderIndication);
14341                };
14342
14343                /**
14344                 * Clear all guide elements
14345                 */
14346                MonthGuide.prototype.clear = function() {
14347                    util.forEach(this.guideElements, function(element) {
14348                        domutil.remove(element);
14349                    });
14350
14351                    this.guideElements = {};
14352                };
14353
14354                /**
14355                 * Get the styles from theme
14356                 * @param {Theme} theme - theme instance
14357                 * @returns {object} styles - styles object
14358                 */
14359                MonthGuide.prototype._getStyles = function(theme) {
14360                    var styles = {};
14361
14362                    if (theme) {
14363                        styles.border = theme.common.creationGuide.border;
14364                        styles.backgroundColor = theme.common.creationGuide.backgroundColor;
14365                        styles.scheduleHeight = theme.month.schedule.height;
14366                        styles.scheduleGutter = theme.month.schedule.marginTop;
14367                        styles.marginLeft = theme.month.schedule.marginLeft;
14368                        styles.marginRight = theme.month.schedule.marginRight;
14369                        styles.borderRadius = theme.month.schedule.borderRadius;
14370                    }
14371
14372                    return styles;
14373                };
14374
14375                module.exports = MonthGuide;
14376
14377
14378                /***/ }),
14379
14380            
14380/***/ "./src/js/handler/month/move.js":
14381            /*!**************************************!*\
14382  !*** ./src/js/handler/month/move.js ***!
14383  \**************************************/
14384            /*! no static exports found */
14385            /***/ (function(module, exports, __webpack_require__) {
14386
14387                "use strict";
14388                /**
14389                 * @fileoverview Move handler for month view
14390                 * @author NHN FE Development Lab <[email protected]>
14391                 */
14392
14393
14394                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
14395
14396                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js"),
14397                    domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js"),
14398                    datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js"),
14399                    getMousePosData = __webpack_require__(/*! ./core */ "./src/js/handler/month/core.js"),
14400                    MonthMoveGuide = __webpack_require__(/*! ./moveGuide */ "./src/js/handler/month/moveGuide.js"),
14401                    TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
14402
14403                /**
14404                 * @constructor
14405                 * @mixes CustomEvents
14406                 * @param {Drag} dragHandler - Drag handler instance.
14407                 * @param {Month} monthView - Month view instance.
14408                 * @param {Base} baseController - Base controller instance.
14409                 */
14410                function MonthMove(dragHandler, monthView, baseController) {
14411                    /**
14412                     * @type {Drag}
14413                     */
14414                    this.dragHandler = dragHandler;
14415
14416                    /**
14417                     * @type {Month}
14418                     */
14419                    this.monthView = monthView;
14420
14421                    /**
14422                     * @type {Base}
14423                     */
14424                    this.baseController = baseController;
14425
14426                    /**
14427                     * @type {function}
14428                     */
14429                    this.getScheduleData = null;
14430
14431                    /**
14432                     * @type {object}
14433                     */
14434                    this._cache = null;
14435
14436                    /**
14437                     * @type {MonthMoveGuide}
14438                     */
14439                    this.guide = new MonthMoveGuide(this);
14440
14441                    dragHandler.on('dragStart', this._onDragStart, this);
14442                }
14443
14444                /**
14445                 * Destructor
14446                 */
14447                MonthMove.prototype.destroy = function() {
14448                    this.dragHandler.off(this);
14449
14450                    this.dragHandler = this.monthView = this.baseController = null;
14451                };
14452
14453                /**
14454                 * Update target schedule
14455                 * @fires {MonthMove#beforeUpdateSchedule}
14456                 * @param {object} scheduleCache - cache object that result of single dragging
14457                 *  session.
14458                 */
14459                MonthMove.prototype.updateSchedule = function(scheduleCache) {
14460                    var schedule = scheduleCache.model;
14461                    var duration = schedule.duration();
14462                    var startDateRaw = datetime.raw(schedule.start);
14463                    var dragEndTime = new TZDate(scheduleCache.end);
14464                    var newStartDate = new TZDate(dragEndTime);
14465
14466                    newStartDate.setHours(startDateRaw.h, startDateRaw.m, startDateRaw.s, startDateRaw.ms);
14467
14468                    /**
14469                     * @event MonthMove#beforeUpdateSchedule
14470                     * @type {object}
14471                     * @property {Schedule} schedule - The original schedule instance
14472                     * @property {Date} start - Deprecated: start time to update
14473                     * @property {Date} end - Deprecated: end time to update
14474                     * @property {object} changes - start and end time to update
14475                     *  @property {Date} start - start time to update
14476                     *  @property {Date} end - end time to update
14477                     */
14478                    this.fire('beforeUpdateSchedule', {
14479                        schedule: schedule,
14480                        changes: {
14481                            start: newStartDate,
14482                            end: new TZDate(newStartDate).addMilliseconds(duration)
14483                        },
14484                        start: newStartDate,
14485                        end: new TZDate(newStartDate).addMilliseconds(duration)
14486                    });
14487                };
14488
14489                /**
14490                 * Get schedule block to clone for month guide effect
14491                 * @param {HTMLElement} target - target element that related with drag schedule
14492                 * @returns {HTMLElement} element to create guide effect
14493                 */
14494                MonthMove.prototype.getMonthScheduleBlock = function(target) {
14495                    var blockSelector = config.classname('.weekday-schedule-block');
14496
14497                    return domutil.closest(target, blockSelector);
14498                };
14499
14500                /**
14501                 * Get schedule block from more layer
14502                 * @param {HTMLElement} target - element to check
14503                 * @returns {HTMLElement} schedule element
14504                 */
14505                MonthMove.prototype.getMoreLayerScheduleBlock = function(target) {
14506                    var className = config.classname('.month-more-schedule');
14507
14508                    return domutil.closest(target, className);
14509                };
14510
14511                /**
14512                 * Check handler has permission to handle fired schedule
14513                 * @fires {MonthMove#monthMoveStart_from_morelayer}
14514                 * @param {HTMLElement} target - target element of fired schedule
14515                 * @returns {(string|null)} model instance ID related with schedule. if handle
14516                 *  has not permission to handle the schedule then return null.
14517                 */
14518                MonthMove.prototype.hasPermissionToHandle = function(target) {
14519                    var modelID = null;
14520                    var blockElement;
14521
14522                    if (domutil.hasClass(target, config.classname('weekday-resize-handle'))) {
14523                        return null;
14524                    }
14525
14526                    blockElement = this.getMonthScheduleBlock(target);
14527
14528                    if (blockElement) {
14529                        modelID = domutil.getData(blockElement, 'id');
14530                    } else {
14531                        blockElement = this.getMoreLayerScheduleBlock(target);
14532
14533                        if (blockElement) {
14534                            modelID = domutil.getData(blockElement, 'id');
14535                            /**
14536                             * Fire for notificate that the drag schedule start at more layer view.
14537                             * @event {MonthMove#monthMoveStart_from_morelayer}
14538                             */
14539                            this.fire('monthMoveStart_from_morelayer');
14540                        }
14541                    }
14542
14543                    return modelID;
14544                };
14545
14546                /**
14547                 * Event handler for Drag#dragStart
14548                 * @fires {MonthMove#monthMoveDragstart}
14549                 * @param {object} dragStartEvent - drag start schedule data
14550                 */
14551                MonthMove.prototype._onDragStart = function(dragStartEvent) {
14552                    var target = dragStartEvent.target,
14553                        modelID = this.hasPermissionToHandle(target),
14554                        model = this.baseController.schedules.items[modelID],
14555                        scheduleData;
14556
14557                    if (!modelID || !model || model.isReadOnly || model.isPending) {
14558                        return;
14559                    }
14560
14561                    this.dragHandler.on({
14562                        drag: this._onDrag,
14563                        dragEnd: this._onDragEnd
14564                    }, this);
14565
14566                    this.getScheduleData = getMousePosData(this.monthView);
14567
14568                    scheduleData = this.getScheduleData(dragStartEvent.originEvent);
14569                    scheduleData.originEvent = dragStartEvent.originEvent;
14570                    scheduleData.target = this.getMonthScheduleBlock(target);
14571                    scheduleData.model = model;
14572
14573                    this._cache = {
14574                        model: model,
14575                        target: target,
14576                        start: new TZDate(Number(scheduleData.date))
14577                    };
14578
14579                    /**
14580                     * @event {MonthMove#monthMoveDragstart}
14581                     * @type {object}
14582                     * @property {number} x - x index
14583                     * @property {number} y - y index
14584                     * @property {Date} date - drag date
14585                     * @property {HTMLElement} target - schedule block element
14586                     * @property {Schedule} model - model instance
14587                     */
14588                    this.fire('monthMoveDragstart', scheduleData);
14589                };
14590
14591                /**
14592                 * @fires {MonthMove#monthMoveDrag}
14593                 * @param {object} dragEvent - drag event data
14594                 */
14595                MonthMove.prototype._onDrag = function(dragEvent) {
14596                    var scheduleData;
14597
14598                    if (!this.getScheduleData) {
14599                        return;
14600                    }
14601
14602                    scheduleData = util.extend({
14603                        originEvent: dragEvent.originEvent
14604                    }, this.getScheduleData(dragEvent.originEvent));
14605
14606                    if (!scheduleData) {
14607                        return;
14608                    }
14609
14610                    /**
14611                     * @event {MonthMove#monthMoveDrag}
14612                     * @type {object}
14613                     * @property {number} x - x index
14614                     * @property {number} y - y index
14615                     * @property {Date} date - drag date
14616                     */
14617                    this.fire('monthMoveDrag', scheduleData);
14618                };
14619
14620                /**
14621                 * Event handler for Drag#dragEnd
14622                 * @fires {MonthMove#monthMoveDragend}
14623                 * @param {object} dragEndEvent - dragend event data
14624                 */
14625                MonthMove.prototype._onDragEnd = function(dragEndEvent) {
14626                    var cache = this._cache;
14627                    var scheduleData;
14628
14629                    this.dragHandler.off({
14630                        drag: this._onDrag,
14631                        dragEnd: this._onDragEnd
14632                    }, this);
14633
14634                    if (!this.getScheduleData) {
14635                        return;
14636                    }
14637
14638                    scheduleData = this.getScheduleData(dragEndEvent.originEvent);
14639
14640                    if (scheduleData) {
14641                        cache.end = new TZDate(scheduleData.date);
14642                        this.updateSchedule(cache);
14643                    }
14644
14645                    /**
14646                     * @event {MonthResize#monthMoveDragend}
14647                     * @type {object}
14648                     * @property {number} x - x index
14649                     * @property {number} y - y index
14650                     * @property {Date} date - drag date
14651                     */
14652                    this.fire('monthMoveDragend', scheduleData);
14653
vendor: 12,545 bytes, lines 14654-14773
14654                    this.getScheduleData = this._cache = null;
14655                };
14656
14657                util.CustomEvents.mixin(MonthMove);
14658
14659                module.exports = MonthMove;
14660
14661
14662                /***/ }),
14663
14664            /***/ "./src/js/handler/month/moveGuide.hbs":
14665            /*!********************************************!*\
14666  !*** ./src/js/handler/month/moveGuide.hbs ***!
14667  \********************************************/
14668            /*! no static exports found */
14669            /***/ (function(module, exports, __webpack_require__) {
14670
14671                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
14672                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
14673                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
14674                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
14675                                return parent[propertyName];
14676                            }
14677                            return undefined
14678                        };
14679
14680                        return "            border-left:3px solid "
14681                            + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
14682                            + ";\n            ";
14683                    },"3":function(container,depth0,helpers,partials,data) {
14684                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
14685                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
14686                                return parent[propertyName];
14687                            }
14688                            return undefined
14689                        };
14690
14691                        return "    <span class=\""
14692                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":14,"column":17},"end":{"line":14,"column":31}}}) : helper)))
14693                            + "weekday-schedule-bullet "
14694                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":14,"column":55},"end":{"line":14,"column":69}}}) : helper)))
14695                            + "weekday-schedule-bullet-focused\" style=\"top: "
14696                            + alias4(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"scheduleBulletTop") : stack1), depth0))
14697                            + "px;\"></span>\n";
14698                    },"5":function(container,depth0,helpers,partials,data) {
14699                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
14700                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
14701                                return parent[propertyName];
14702                            }
14703                            return undefined
14704                        };
14705
14706                        return container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":16,"column":110},"end":{"line":16,"column":124}}}) : helper)))
14707                            + "weekday-schedule-title-focused\"";
14708                    },"7":function(container,depth0,helpers,partials,data) {
14709                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
14710                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
14711                                return parent[propertyName];
14712                            }
14713                            return undefined
14714                        };
14715
14716                        return "            "
14717                            + ((stack1 = (lookupProperty(helpers,"allday-tmpl")||(depth0 && lookupProperty(depth0,"allday-tmpl"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"allday-tmpl","hash":{},"data":data,"loc":{"start":{"line":18,"column":12},"end":{"line":18,"column":35}}})) != null ? stack1 : "")
14718                            + "\n";
14719                    },"9":function(container,depth0,helpers,partials,data) {
14720                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
14721                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
14722                                return parent[propertyName];
14723                            }
14724                            return undefined
14725                        };
14726
14727                        return "            "
14728                            + ((stack1 = (lookupProperty(helpers,"time-tmpl")||(depth0 && lookupProperty(depth0,"time-tmpl"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"time-tmpl","hash":{},"data":data,"loc":{"start":{"line":20,"column":12},"end":{"line":20,"column":33}}})) != null ? stack1 : "")
14729                            + "\n";
14730                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
14731                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
14732                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
14733                                return parent[propertyName];
14734                            }
14735                            return undefined
14736                        };
14737
14738                        return "<div class=\""
14739                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
14740                            + "month-guide "
14741                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":38},"end":{"line":1,"column":52}}}) : helper)))
14742                            + "month-guide-focused\"\n     style=\"top: -50%;\n            left: -50%;\n            width: 100%;\n            color: #ffffff;\n            background-color:"
14743                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"dragBgColor") : stack1), depth0))
14744                            + ";\n            height:"
14745                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"scheduleHeight") : stack1), depth0))
14746                            + "px;\n            line-height:"
14747                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"scheduleHeight") : stack1), depth0))
14748                            + "px;\n            border-radius: "
14749                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"borderRadius") : stack1), depth0))
14750                            + ";\n"
14751                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isAllDay") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":12},"end":{"line":12,"column":19}}})) != null ? stack1 : "")
14752                            + "\">\n"
14753                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isAllDay") : stack1),{"name":"unless","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":13,"column":4},"end":{"line":15,"column":15}}})) != null ? stack1 : "")
14754                            + "    <div class=\""
14755                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":16,"column":16},"end":{"line":16,"column":30}}}) : helper)))
14756                            + "month-move-guide "
14757                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":16,"column":47},"end":{"line":16,"column":61}}}) : helper)))
14758                            + "weekday-schedule-title "
14759                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isAllDay") : stack1),{"name":"unless","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":16,"column":84},"end":{"line":16,"column":166}}})) != null ? stack1 : "")
14760                            + ">\n"
14761                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isAllDay") : stack1),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.program(9, data, 0),"data":data,"loc":{"start":{"line":17,"column":8},"end":{"line":21,"column":15}}})) != null ? stack1 : "")
14762                            + "    </div>\n</div>\n<div class=\""
14763                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":24,"column":12},"end":{"line":24,"column":26}}}) : helper)))
14764                            + "month-guide-cover\" style=\"height:"
14765                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"scheduleHeight") : stack1), depth0))
14766                            + "px; border-radius: "
14767                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"borderRadius") : stack1), depth0))
14768                            + ";\"></div>\n";
14769                    },"useData":true});
14770
14771                /***/ }),
14772
14773            
14773/***/ "./src/js/handler/month/moveGuide.js":
14774            /*!*******************************************!*\
14775  !*** ./src/js/handler/month/moveGuide.js ***!
14776  \*******************************************/
14777            /*! no static exports found */
14778            /***/ (function(module, exports, __webpack_require__) {
14779
14780                "use strict";
14781                /* WEBPACK VAR INJECTION */(function(global) {/**
14782                 * @fileoverview Module for modification of guide element for move in month view
14783                 * @author NHN FE Development Lab <[email protected]>
14784                 */
14785
14786
14787                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
14788
14789                    var config = __webpack_require__(/*! ../../config */ "./src/js/config.js"),
14790                        domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js"),
14791                        domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js"),
14792                        FloatingLayer = __webpack_require__(/*! ../../common/floatingLayer */ "./src/js/common/floatingLayer.js"),
14793                        tmpl = __webpack_require__(/*! ./moveGuide.hbs */ "./src/js/handler/month/moveGuide.hbs"),
14794                        Schedule = __webpack_require__(/*! ../../model/schedule */ "./src/js/model/schedule.js");
14795
14796                    /**
14797                     * @constructor
14798                     * @param {MonthMove} monthMove - month/move module instance
14799                     */
14800                    function MonthMoveGuide(monthMove) {
14801                        /**
14802                         * @type {MonthMove}
14803                         */
14804                        this.monthMove = monthMove;
14805
14806                        /**
14807                         * @type {HTMLElement[]}
14808                         */
14809                        this.elements = null;
14810
14811                        /**
14812                         * @type {FloatingLayer}
14813                         */
14814                        this.layer = null;
14815
14816                        monthMove.on({
14817                            monthMoveDragstart: this._onDragStart,
14818                            monthMoveDrag: this._onDrag,
14819                            monthMoveDragend: this._onDragEnd
14820                        }, this);
14821                    }
14822
14823                    /**
14824                     * Destructor
14825                     */
14826                    MonthMoveGuide.prototype.destroy = function() {
14827                        this.monthMove.off(this);
14828                        this._clearGridBgColor();
14829
14830                        if (this.layer) {
14831                            this.layer.destroy();
14832                        }
14833
14834                        if (this.element) {
14835                            domutil.remove(this.element);
14836                        }
14837
14838                        this.monthMove = this.elements = this.layer = null;
14839                    };
14840
14841                    /**
14842                     * Hide element blocks for resize effect
14843                     * @param {number} modelID - Schedule model instance ID
14844                     */
14845                    MonthMoveGuide.prototype._hideOriginScheduleBlocks = function(modelID) {
14846                        var className = config.classname('weekday-schedule-block-dragging-dim');
14847
14848                        this.elements = domutil.find(
14849                            config.classname('.weekday-schedule-block-' + modelID),
14850                            this.monthMove.monthView.container,
14851                            true
14852                        );
14853
14854                        util.forEach(this.elements, function(el) {
14855                            domutil.addClass(el, className);
14856                        });
14857                    };
14858
14859                    /**
14860                     * Show element blocks
14861                     */
14862                    MonthMoveGuide.prototype._showOriginScheduleBlocks = function() {
14863                        var className = config.classname('weekday-schedule-block-dragging-dim');
14864
14865                        util.forEach(this.elements, function(el) {
14866                            domutil.removeClass(el, className);
14867                        });
14868                    };
14869
14870                    /**
14871                     * Clear background color for filled grid element.
14872                     */
14873                    MonthMoveGuide.prototype._clearGridBgColor = function() {
14874                        var selector = config.classname('.weekday-filled'),
14875                            className = config.classname('weekday-filled'),
14876                            beforeGridElement = domutil.find(selector,
14877                                this.monthMove.monthView.container);
14878
14879                        if (beforeGridElement) {
14880                            domutil.removeClass(beforeGridElement, className);
14881                        }
14882                    };
14883
14884                    /**
14885                     * Fill background color of date grids relatied with model updates.
14886                     * @param {object} dragEvent - drag event data from MonthMoveGuide#_onDrag
14887                     */
14888                    MonthMoveGuide.prototype._updateGridBgColor = function(dragEvent) {
14889                        var gridElements = domutil.find(config.classname('.weekday-grid-line'), this.monthMove.monthView.container, true),
14890                            className = config.classname('weekday-filled'),
14891                            targetIndex = (dragEvent.x + (dragEvent.sizeX * dragEvent.y));
14892
14893                        this._clearGridBgColor();
14894
14895                        if (!gridElements || !gridElements[targetIndex]) {
14896                            return;
14897                        }
14898
14899                        domutil.addClass(gridElements[targetIndex], className);
14900                    };
14901
14902                    /**
14903                     * Handler for MonthMove#dragStart
14904                     * @param {object} dragStartEvent - dragStart schedule data object
14905                     */
14906                    MonthMoveGuide.prototype._onDragStart = function(dragStartEvent) {
14907                        var monthView = this.monthMove.monthView,
14908                            firstWeekdayView = monthView.children.single(),
14909                            weekdayOptions = firstWeekdayView.options,
14910                            widthPercent = 100 / firstWeekdayView.getRenderDateRange().length,
14911                            height = weekdayOptions.scheduleGutter + weekdayOptions.scheduleHeight,
14912                            container = monthView.container,
14913                            mousePos = domevent.getMousePosition(dragStartEvent.originEvent, container),
14914                            model = dragStartEvent.model,
14915                            layer = new FloatingLayer(null, container);
14916
14917                        this._hideOriginScheduleBlocks(model.cid());
14918
14919                        this.layer = layer;
14920                        layer.setSize(widthPercent + '%', height);
14921                        layer.setPosition(mousePos[0], mousePos[1]);
14922                        layer.setContent(tmpl({
14923                            model: util.extend(
14924                                Schedule.create(model),
14925                                model
14926                            ),
14927                            styles: {
14928                                scheduleHeight: weekdayOptions.scheduleHeight,
14929                                scheduleBulletTop: weekdayOptions.scheduleHeight / 3,
14930                                borderRadius: monthView.controller.theme.month.schedule.borderRadius
14931                            }
14932                        }));
14933                        layer.show();
14934
14935                        if (!util.browser.msie) {
14936                            domutil.addClass(global.document.body, config.classname('dragging'));
14937                        }
14938                    };
14939
14940                    /**
14941                     * Handler for MonthMove#drag
14942                     * @param {object} dragEvent - drag event data object
14943                     */
14944                    MonthMoveGuide.prototype._onDrag = function(dragEvent) {
14945                        var container = this.monthMove.monthView.container,
14946                            mousePos = domevent.getMousePosition(
14947                                dragEvent.originEvent,
14948                                container
14949                            );
14950
14951                        this._updateGridBgColor(dragEvent);
14952
14953                        if (!this.layer) {
14954                            return;
14955                        }
14956
14957                        this.layer.setPosition(mousePos[0], mousePos[1]);
14958                    };
14959
14960                    /**
14961                     * Handler for MonthMove#dragEnd
14962                     */
14963                    MonthMoveGuide.prototype._onDragEnd = function() {
14964                        this._showOriginScheduleBlocks();
14965
14966                        if (!util.browser.msie) {
14967                            domutil.removeClass(global.document.body, config.classname('dragging'));
14968                        }
14969
14970                        this._clearGridBgColor();
14971                        this.layer.destroy();
14972                        this.layer = null;
14973                    };
14974
14975                    module.exports = MonthMoveGuide;
14976
14977                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
14978
14979                /***/ }),
14980
14981            
14981/***/ "./src/js/handler/month/resize.js":
14982            /*!****************************************!*\
14983  !*** ./src/js/handler/month/resize.js ***!
14984  \****************************************/
14985            /*! no static exports found */
14986            /***/ (function(module, exports, __webpack_require__) {
14987
14988                "use strict";
14989                /**
14990                 * @fileoverview Module for resize schedule in month view
14991                 * @author NHN FE Development Lab <[email protected]>
14992                 */
14993
14994
14995                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
14996
14997                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js"),
14998                    datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js"),
14999                    domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js"),
15000                    getMousePosData = __webpack_require__(/*! ./core */ "./src/js/handler/month/core.js"),
15001                    MonthResizeGuide = __webpack_require__(/*! ./resizeGuide */ "./src/js/handler/month/resizeGuide.js"),
15002                    TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
15003
15004                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
15005
15006                /**
15007                 * @constructor
15008                 * @param {Drag} dragHandler - Drag handler instance.
15009                 * @param {Month} monthView - Month view instance.
15010                 * @param {Base} baseController - Base controller instance.
15011                 */
15012                function MonthResize(dragHandler, monthView, baseController) {
15013                    /**
15014                     * @type {Drag}
15015                     */
15016                    this.dragHandler = dragHandler;
15017
15018                    /**
15019                     * @type {Month}
15020                     */
15021                    this.monthView = monthView;
15022
15023                    /**
15024                     * @type {Base}
15025                     */
15026                    this.baseController = baseController;
15027
15028                    /**
15029                     * @type {function}
15030                     */
15031                    this.getScheduleData = null;
15032
15033                    /**
15034                     * @type {object}
15035                     */
15036                    this._cache = null;
15037
15038                    /**
15039                     * @type {MonthResizeGuide}
15040                     */
15041                    this.guide = new MonthResizeGuide(this);
15042
15043                    dragHandler.on('dragStart', this._onDragStart, this);
15044                }
15045
15046                /**
15047                 * Destructor
15048                 */
15049                MonthResize.prototype.destroy = function() {
15050                    this.dragHandler.off(this);
15051
15052                    this.dragHandler = this.monthView = this.baseController = null;
15053                };
15054
15055                /**
15056                 * Fire event for update model
15057                 * @fires {MonthResize#beforeUpdateSchedule}
15058                 * @param {object} scheduleCache - cache object that result of single dragging
15059                 *  session.
15060                 */
15061                MonthResize.prototype._updateSchedule = function(scheduleCache) {
15062                    // You can not change the start date of the event. Only the end time can be changed.
15063                    var newEnd = datetime.end(new TZDate(scheduleCache.end)),
15064                        schedule = scheduleCache.schedule;
15065                    var changes = common.getScheduleChanges(
15066                        schedule,
15067                        ['end'],
15068                        {end: newEnd}
15069                    );
15070
15071                    /**
15072                     * @event MonthResize#beforeUpdateSchedule
15073                     * @type {object}
15074                     * @property {Schedule} schedule - The original schedule instance
15075                     * @property {Date} start - Deprecated: start time to update
15076                     * @property {Date} end - Deprecated: end time to update
15077                     * @property {object} changes - end time to update
15078                     *  @property {date} end - end time to update
15079                     */
15080                    this.fire('beforeUpdateSchedule', {
15081                        schedule: schedule,
15082                        changes: changes,
15083                        start: new TZDate(schedule.getStarts()),
15084                        end: newEnd
15085                    });
15086                };
15087
15088                /**
15089                 * Event handler for Drag#dragStart
15090                 * @fires {MonthResize#monthResizeDragstart}
15091                 * @param {object} dragStartEvent - drag start event data
15092                 */
15093                MonthResize.prototype._onDragStart = function(dragStartEvent) {
15094                    var target = dragStartEvent.target,
15095                        modelID, schedule,
15096                        scheduleData;
15097
15098                    if (!domutil.hasClass(target, config.classname('weekday-resize-handle'))) {
15099                        return;
15100                    }
15101
15102                    target = domutil.closest(target, config.classname('.weekday-schedule-block'));
15103
15104                    if (!target) {
15105                        return;
15106                    }
15107
15108                    modelID = domutil.getData(target, 'id');
15109                    schedule = this.baseController.schedules.items[modelID];
15110
15111                    this.dragHandler.on({
15112                        drag: this._onDrag,
15113                        dragEnd: this._onDragEnd
15114                    }, this);
15115
15116                    this.getScheduleData = getMousePosData(this.monthView);
15117                    scheduleData = this.getScheduleData(dragStartEvent.originEvent);
15118                    scheduleData.target = target;
15119                    scheduleData.model = schedule;
15120
15121                    this._cache = {
15122                        schedule: schedule,
15123                        target: target,
15124                        start: new TZDate(scheduleData.date)
15125                    };
15126
15127                    /**
15128                     * @event {MonthCreation#monthResizeDragstart}
15129                     * @type {object}
15130                     * @property {number} x - x index
15131                     * @property {number} y - y index
15132                     * @property {Date} date - drag date
15133                     * @property {HTMLElement} target - schedule block element
15134                     * @property {Schedule} model - model instance
15135                     */
15136                    this.fire('monthResizeDragstart', scheduleData);
15137                };
15138
15139                /**
15140                 * @fires {MonthResize#monthResizeDrag}
15141                 * @param {object} dragEvent - drag event data
15142                 */
15143                MonthResize.prototype._onDrag = function(dragEvent) {
15144                    var scheduleData;
15145
15146                    if (!this.getScheduleData) {
15147                        return;
15148                    }
15149
15150                    scheduleData = this.getScheduleData(dragEvent.originEvent);
15151
15152                    if (!scheduleData) {
15153                        return;
15154                    }
15155
15156                    /**
15157                     * @event {MonthResize#monthResizeDrag}
15158                     * @type {object}
15159                     * @property {number} x - x index
15160                     * @property {number} y - y index
15161                     * @property {Date} date - drag date
15162                     */
15163                    this.fire('monthResizeDrag', scheduleData);
15164                };
15165
15166                /**
15167                 * @fires {MonthResize#monthResizeDragend}
15168                 * @param {object} dragEndEvent - drag end event data
15169                 */
15170                MonthResize.prototype._onDragEnd = function(dragEndEvent) {
15171                    var cache = this._cache;
15172                    var scheduleData;
15173                    var start, end;
15174
15175                    this.dragHandler.off({
15176                        drag: this._onDrag,
15177                        dragEnd: this._onDragEnd
15178                    }, this);
15179
15180                    if (!this.getScheduleData) {
15181                        return;
15182                    }
15183
15184                    scheduleData = this.getScheduleData(dragEndEvent.originEvent);
15185
15186                    if (scheduleData) {
15187                        start = new TZDate(cache.schedule.getStarts());
15188                        end = new TZDate(scheduleData.date);
15189                        cache.end = end;
15190
15191                        if (start <= cache.end) {
15192                            this._updateSchedule(cache);
15193                        }
15194                    }
15195
15196                    /**
15197                     * @event {MonthResize#monthResizeDragend}
15198                     * @type {object}
15199                     * @property {number} x - x index
15200                     * @property {number} y - y index
15201                     * @property {Date} date - drag date
15202                     */
15203                    this.fire('monthResizeDragend', scheduleData);
15204
15205                    this.getScheduleData = this._cache = null;
15206                };
15207
15208                util.CustomEvents.mixin(MonthResize);
15209
15210                module.exports = MonthResize;
15211
15212
15213                /***/ }),
15214
15215            
15215/***/ "./src/js/handler/month/resizeGuide.js":
15216            /*!*********************************************!*\
15217  !*** ./src/js/handler/month/resizeGuide.js ***!
15218  \*********************************************/
15219            /*! no static exports found */
15220            /***/ (function(module, exports, __webpack_require__) {
15221
15222                "use strict";
15223                /* WEBPACK VAR INJECTION */(function(global) {/**
15224                 * @fileoverview Module for modification of guide element in schedule resize
15225                 * @author NHN FE Development Lab <[email protected]>
15226                 */
15227
15228
15229                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
15230
15231                    var config = __webpack_require__(/*! ../../config */ "./src/js/config.js"),
15232                        domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js"),
15233                        MonthGuide = __webpack_require__(/*! ./guide */ "./src/js/handler/month/guide.js");
15234
15235                    /**
15236                     * @constructor
15237                     * @param {MonthResize} monthResize - month/resize module instance
15238                     */
15239                    function MonthResizeGuide(monthResize) {
15240                        /**
15241                         * @type {MonthResize}
15242                         */
15243                        this.monthResize = monthResize;
15244
15245                        /**
15246                         * @type {HTMLElement[]}
15247                         */
15248                        this.elements = null;
15249
15250                        /**
15251                         * @type {MonthGuide}
15252                         */
15253                        this.guide = null;
15254
15255                        monthResize.on({
15256                            monthResizeDragstart: this._onDragStart,
15257                            monthResizeDrag: this._onDrag,
15258                            monthResizeDragend: this._onDragEnd
15259                        }, this);
15260                    }
15261
15262                    /**
15263                     * Destructor
15264                     */
15265                    MonthResizeGuide.prototype.destroy = function() {
15266                        this.monthResize.off(this);
15267                        this.guide.destroy();
15268
15269                        this.guide = this.monthResize = null;
15270                    };
15271
15272                    /**
15273                     * Hide element blocks for resize effect
15274                     * @param {number} modelID - Schedule model instance ID
15275                     */
15276                    MonthResizeGuide.prototype._hideScheduleBlocks = function(modelID) {
15277                        this.elements = domutil.find(
15278                            config.classname('.weekday-schedule-block-' + modelID),
15279                            this.monthResize.monthView.container,
15280                            true
15281                        );
15282
15283                        util.forEach(this.elements, function(el) {
15284                            el.style.display = 'none';
15285                        });
15286                    };
15287
15288                    /**
15289                     * Show element blocks
15290                     */
15291                    MonthResizeGuide.prototype._showScheduleBlocks = function() {
15292                        util.forEach(this.elements, function(el) {
15293                            el.style.display = 'block';
15294                        });
15295                    };
15296
15297                    /**
15298                     * Drag start event handler
15299                     * @param {object} dragStartEvent - schedule data from MonthResize
15300                     */
15301                    MonthResizeGuide.prototype._onDragStart = function(dragStartEvent) {
15302                        this.guide = new MonthGuide({
15303                            isResizeMode: true
15304                        }, this.monthResize.monthView);
15305
15306                        this.guide.start(dragStartEvent);
15307
15308                        this._hideScheduleBlocks(dragStartEvent.model.cid());
15309
15310                        if (!util.browser.msie) {
15311                            domutil.addClass(global.document.body, config.classname('resizing-x'));
15312                        }
15313                    };
15314
15315                    /**
15316                     * Drag event handler
15317                     * @param {object} dragEvent - event data from MonthCreation
15318                     */
15319                    MonthResizeGuide.prototype._onDrag = function(dragEvent) {
15320                        this.guide.update(dragEvent.x, dragEvent.y);
15321                    };
15322
15323                    /**
15324                     * Drag end event handler
15325                     */
15326                    MonthResizeGuide.prototype._onDragEnd = function() {
15327                        this._showScheduleBlocks();
15328
15329                        this.guide.destroy();
15330                        this.elements = this.guide = null;
15331
15332                        if (!util.browser.msie) {
15333                            domutil.removeClass(global.document.body, config.classname('resizing-x'));
15334                        }
15335                    };
15336
15337                    module.exports = MonthResizeGuide;
15338
15339                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
15340
15341                /***/ }),
15342
15343            
15343/***/ "./src/js/handler/time/click.js":
15344            /*!**************************************!*\
15345  !*** ./src/js/handler/time/click.js ***!
15346  \**************************************/
15347            /*! no static exports found */
15348            /***/ (function(module, exports, __webpack_require__) {
15349
15350                "use strict";
15351                /**
15352                 * @fileoverview Allday event click event hander module
15353                 * @author NHN FE Development Lab <[email protected]>
15354                 */
15355
15356
15357                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
15358                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
15359                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
15360
15361                /**
15362                 * @constructor
15363                 * @implements {Handler}
15364                 * @mixes util.CustomEvents
15365                 * @param {Drag} [dragHandler] - Drag handler instance.
15366                 * @param {TimeGrid} [timeGridView] - TimeGrid view instance.
15367                 * @param {Base} [baseController] - Base controller instance.
15368                 */
15369                function TimeClick(dragHandler, timeGridView, baseController) {
15370                    /**
15371                     * @type {Drag}
15372                     */
15373                    this.dragHandler = dragHandler;
15374
15375                    /**
15376                     * @type {TimeGrid}
15377                     */
15378                    this.timeGridView = timeGridView;
15379
15380                    /**
15381                     * @type {Base}
15382                     */
15383                    this.baseController = baseController;
15384
15385                    dragHandler.on({
15386                        'click': this._onClick
15387                    }, this);
15388                }
15389
15390                /**
15391                 * Destroy method
15392                 */
15393                TimeClick.prototype.destroy = function() {
15394                    this.dragHandler.off(this);
15395                    this.timeGridView = this.baseController = this.dragHandler = null;
15396                };
15397
15398                /**
15399                 * Check target element is expected condition for activate this plugins.
15400                 * @param {HTMLElement} target - The element to check
15401                 * @returns {string} - model id
15402                 */
15403                TimeClick.prototype.checkExpectCondition = function(target) {
15404                    var container,
15405                        matches;
15406
15407                    container = domutil.closest(target, config.classname('.time-date'));
15408
15409                    if (!container) {
15410                        return false;
15411                    }
15412
15413                    matches = domutil.getClass(container).match(config.time.getViewIDRegExp);
15414
15415                    if (!matches || matches.length < 2) {
15416                        return false;
15417                    }
15418
15419                    return util.pick(this.timeGridView.children.items, Number(matches[1]));
15420                };
15421
15422                /**
15423                 * Click event hander
15424                 * @param {object} clickEvent - click event from {@link Drag}
15425                 * @emits TimeClick#clickEvent
15426                 */
15427                TimeClick.prototype._onClick = function(clickEvent) {
15428                    var self = this,
15429                        target = clickEvent.target,
15430                        timeView = this.checkExpectCondition(target),
15431                        blockElement = domutil.closest(target, config.classname('.time-date-schedule-block')),
15432                        schedulesCollection = this.baseController.schedules;
15433
15434                    if (!timeView || !blockElement) {
15435                        return;
15436                    }
15437
15438                    schedulesCollection.doWhenHas(domutil.getData(blockElement, 'id'), function(schedule) {
15439                        /**
15440                         * @events TimeClick#clickSchedule
15441                         * @type {object}
15442                         * @property {Schedule} schedule - schedule instance
15443                         * @property {MouseEvent} event - MouseEvent object
15444                         */
15445                        self.fire('clickSchedule', {
15446                            schedule: schedule,
15447                            event: clickEvent.originEvent
15448                        });
15449                    });
15450                };
15451
15452                util.CustomEvents.mixin(TimeClick);
15453
15454                module.exports = TimeClick;
15455
15456
15457                /***/ }),
15458
15459            
15459/***/ "./src/js/handler/time/clickDayname.js":
15460            /*!*********************************************!*\
15461  !*** ./src/js/handler/time/clickDayname.js ***!
15462  \*********************************************/
15463            /*! no static exports found */
15464            /***/ (function(module, exports, __webpack_require__) {
15465
15466                "use strict";
15467                /**
15468                 * @fileoverview Dayname click event hander module
15469                 * @author NHN FE Development Lab <[email protected]>
15470                 */
15471
15472
15473                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
15474                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
15475                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
15476
15477                /**
15478                 * @constructor
15479                 * @implements {Handler}
15480                 * @mixes util.CustomEvents
15481                 * @param {Drag} [dragHandler] - Drag handler instance.
15482                 * @param {DayName} [dayNameView] - DayName view instance.
15483                 * @param {Base} [baseController] - Base controller instance.
15484                 */
15485                function DayNameClick(dragHandler, dayNameView, baseController) {
15486                    /**
15487                     * @type {Drag}
15488                     */
15489                    this.dragHandler = dragHandler;
15490
15491                    /**
15492                     * @type {DayName}
15493                     */
15494                    this.dayNameView = dayNameView;
15495
15496                    /**
15497                     * @type {Base}
15498                     */
15499                    this.baseController = baseController;
15500
15501                    dragHandler.on({
15502                        'click': this._onClick
15503                    }, this);
15504                }
15505
15506                /**
15507                 * Destroy method
15508                 */
15509                DayNameClick.prototype.destroy = function() {
15510                    this.dragHandler.off(this);
15511                    this.dayNameView = this.baseController = this.dragHandler = null;
15512                };
15513
15514                /**
15515                 * Check target element is expected condition for activate this plugins.
15516                 * @param {HTMLElement} target - The element to check
15517                 * @returns {string} - model id
15518                 */
15519                DayNameClick.prototype.checkExpectCondition = function(target) {
15520                    var container = domutil.closest(target, config.classname('.dayname-date-area'));
15521
15522                    if (!container) {
15523                        return false;
15524                    }
15525
15526                    return true;
15527                };
15528
15529                /**
15530                 * Click event hander
15531                 * @param {object} clickEvent - click event from {@link Drag}
15532                 * @emits DayNameClick#clickDayname
15533                 */
15534                DayNameClick.prototype._onClick = function(clickEvent) {
15535                    var self = this,
15536                        target = clickEvent.target,
15537                        daynameView = this.checkExpectCondition(target),
15538                        blockElement = domutil.closest(target, config.classname('.dayname'));
15539
15540                    if (!daynameView || !blockElement) {
15541                        return;
15542                    }
15543
15544                    /**
15545                     * @events DayNameClick#clickDayname
15546                     * @type {object}
15547                     * @property {string} date - click date
15548                     */
15549                    self.fire('clickDayname', {
15550                        date: domutil.getData(blockElement, 'date')
15551                    });
15552                };
15553
15554                util.CustomEvents.mixin(DayNameClick);
15555
15556                module.exports = DayNameClick;
15557
15558
15559                /***/ }),
15560
15561            
15561/***/ "./src/js/handler/time/core.js":
15562            /*!*************************************!*\
15563  !*** ./src/js/handler/time/core.js ***!
15564  \*************************************/
15565            /*! no static exports found */
15566            /***/ (function(module, exports, __webpack_require__) {
15567
15568                "use strict";
15569                /**
15570                 * @fileoverview Core methods for dragging actions
15571                 * @author NHN FE Development Lab <[email protected]>
15572                 */
15573
15574
15575                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
15576                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
15577                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
15578                var domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js");
15579                var Point = __webpack_require__(/*! ../../common/point */ "./src/js/common/point.js");
15580                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
15581
15582                /**
15583                 * @mixin Time.Core
15584                 */
15585                var timeCore = {
15586                    /**
15587                     * Get Y index ratio(hour) in time grids by supplied parameters.
15588                     * @param {number} baseMil - base milliseconds number for supplied height.
15589                     * @param {number} height - container element height.
15590                     * @param {number} y - Y coordinate to calculate hour ratio.
15591                     * @returns {number} hour index ratio value.
15592                     */
15593                    _calcGridYIndex: function(baseMil, height, y) {
15594                        // get ratio from right expression > point.y : x = session.height : baseMil
15595                        // and convert milliseconds value to hours.
15596                        var result = datetime.millisecondsTo('hour', (y * baseMil) / height),
15597                            floored = result | 0,
15598                            nearest = common.nearest(result - floored, [0, 1]);
15599
15600                        return floored + (nearest ? 0.5 : 0);
15601                    },
15602
15603                    /**
15604                     * Get function to makes event data from Time and mouseEvent
15605                     * @param {Time} timeView - Instance of time view.
15606                     * @returns {function} - Function that return event data from mouse event.
15607                     */
15608                    _retriveScheduleData: function(timeView) {
15609                        var self = this,
15610                            container = timeView.container,
15611                            options = timeView.options,
15612                            viewHeight = timeView.getViewBound().height,
15613                            viewTime = timeView.getDate(),
15614                            hourLength = options.hourEnd - options.hourStart,
15615                            baseMil = datetime.millisecondsFrom('hour', hourLength);
15616
15617                        /**
15618                         * @param {MouseEvent} mouseEvent - mouse event object to get common event data.
15619                         * @param {object} [extend] - object to extend event data before return.
15620                         * @returns {object} - common event data for time.*
15621                         */
15622                        return util.bind(function(mouseEvent, extend) {
15623                            var mouseY = Point.n(domevent.getMousePosition(mouseEvent, container)).y,
15624                                gridY = common.ratio(viewHeight, hourLength, mouseY),
15625                                timeY = new TZDate(viewTime).addMinutes(datetime.minutesFromHours(gridY)),
15626                                nearestGridY = self._calcGridYIndex(baseMil, viewHeight, mouseY),
15627                                nearestGridTimeY = new TZDate(viewTime).addMinutes(
15628                                    datetime.minutesFromHours(nearestGridY + options.hourStart)
15629                                );
15630
15631                            return util.extend({
15632                                target: mouseEvent.target || mouseEvent.srcElement,
15633                                relatedView: timeView,
15634                                originEvent: mouseEvent,
15635                                mouseY: mouseY,
15636                                gridY: gridY,
15637                                timeY: timeY,
15638                                nearestGridY: nearestGridY,
15639                                nearestGridTimeY: nearestGridTimeY,
15640                                triggerEvent: mouseEvent.type
15641                            }, extend);
15642                        }, this);
15643                    },
15644
15645                    /**
15646                     * Get function to makes event data from Time and mouseEvent
15647                     * @param {Time} timeView - Instance of time view.
15648                     * @param {number} xIndex - Time view index
15649                     * @returns {function} - Function that return event data from mouse event.
15650                     */
15651                    _retriveScheduleDataFromDate: function(timeView) {
15652                        var viewTime = timeView.getDate();
15653
15654                        /**
15655                         * @param {TZDate} startDate - start date
15656                         * @param {TZDate} endDate - end date
15657                         * @param {number}
15657 hourStart Can limit of render hour start.
15658                         * @returns {object} - common event data for time.*
15659                         */
15660                        return util.bind(function(startDate, endDate, hourStart) {
15661                            var gridY, timeY, nearestGridY, nearestGridTimeY, nearestGridEndY, nearestGridEndTimeY;
15662
15663                            gridY = startDate.getHours() - hourStart + getNearestHour(startDate.getMinutes());
15664                            timeY = new TZDate(viewTime).addMinutes(datetime.minutesFromHours(gridY));
15665                            nearestGridY = gridY;
15666                            nearestGridTimeY = new TZDate(viewTime).addMinutes(datetime.minutesFromHours(nearestGridY));
15667                            nearestGridEndY = endDate.getHours() - hourStart + getNearestHour(endDate.getMinutes());
15668                            nearestGridEndTimeY = new TZDate(viewTime).addMinutes(datetime.minutesFromHours(nearestGridEndY));
15669
15670                            return util.extend({
15671                                target: timeView,
15672                                relatedView: timeView,
15673                                gridY: gridY,
15674                                timeY: timeY,
15675                                nearestGridY: nearestGridY,
15676                                nearestGridTimeY: nearestGridTimeY,
15677                                nearestGridEndY: nearestGridEndY,
15678                                nearestGridEndTimeY: nearestGridEndTimeY,
15679                                triggerEvent: 'manual',
15680                                hourStart: hourStart
15681                            });
15682                        }, this);
15683                    },
15684
15685                    /**
15686                     * Mixin method.
15687                     * @param {(TimeCreation|TimeMove)} obj - Constructor functions
15688                     */
15689                    mixin: function(obj) {
15690                        var proto = obj.prototype;
15691                        util.forEach(timeCore, function(method, methodName) {
15692                            if (methodName === 'mixin') {
15693                                return;
15694                            }
15695
15696                            proto[methodName] = method;
15697                        });
15698                    }
15699                };
15700
15701                /**
15702                 * Get the nearest hour
15703                 * @param {number} minutes - minutes
15704                 * @returns {number} hour
15705                 */
15706                function getNearestHour(minutes) {
15707                    var nearestHour;
15708                    if (minutes === 0) {
15709                        nearestHour = 0;
15710                    } else if (minutes > 30) {
15711                        nearestHour = 1;
15712                    } else if (minutes <= 30) {
15713                        nearestHour = 0.5;
15714                    }
15715
15716                    return nearestHour;
15717                }
15718
15719                module.exports = timeCore;
15720
15721
15722                /***/ }),
15723
15724            
15724/***/ "./src/js/handler/time/creation.js":
15725            /*!*****************************************!*\
15726  !*** ./src/js/handler/time/creation.js ***!
15727  \*****************************************/
15728            /*! no static exports found */
15729            /***/ (function(module, exports, __webpack_require__) {
15730
15731                "use strict";
15732                /**
15733                 * @fileoverview Handling creation events from drag handler and time grid view
15734                 * @author NHN FE Development Lab <[email protected]>
15735                 */
15736
15737
15738                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
15739                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
15740                var array = __webpack_require__(/*! ../../common/array */ "./src/js/common/array.js");
15741                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
15742                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
15743                var domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js");
15744                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
15745                var TimeCreationGuide = __webpack_require__(/*! ./creationGuide */ "./src/js/handler/time/creationGuide.js");
15746                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
15747                var timeCore = __webpack_require__(/*! ./core */ "./src/js/handler/time/core.js");
15748
15749                var CLICK_DELAY = 300;
15750
15751                /**
15752                 * @constructor
15753                 * @implements {Handler}
15754                 * @mixes timeCore
15755                 * @mixes CustomEvents
15756                 * @param {Drag} [dragHandler] - Drag handler instance.
15757                 * @param {TimeGrid} [timeGridView] - TimeGrid view instance.
15758                 * @param {Base} [baseController] - Base controller instance.
15759                 * @param {Options} [options] - calendar Options
15760                 */
15761                function TimeCreation(dragHandler, timeGridView, baseController, options) {
15762                    /**
15763                     * Drag handler instance.
15764                     * @type {Drag}
15765                     */
15766                    this.dragHandler = dragHandler;
15767
15768                    /**
15769                     * TimeGrid view instance.
15770                     * @type {TimeGrid}
15771                     */
15772                    this.timeGridView = timeGridView;
15773
15774                    /**
15775                     * Base controller instance.
15776                     * @type {Base}
15777                     */
15778                    this.baseController = baseController;
15779
15780                    /**
15781                     * @type {TimeCreationGuide}
15782                     */
15783                    this.guide = new TimeCreationGuide(this);
15784
15785                    /**
15786                     * Temporary function for single drag session's calc.
15787                     * @type {function}
15788                     */
15789                    this._getScheduleDataFunc = null;
15790
15791                    /**
15792                     * Temporary function for drag start data cache.
15793                     * @type {object}
15794                     */
15795                    this._dragStart = null;
15796
15797                    /**
15798                     * @type {boolean}
15799                     */
15800                    this._requestOnClick = false;
15801
15802                    /**
15803                     * @type {boolean}
15804                     */
15805                    this._disableDblClick = options.disableDblClick;
15806
15807                    /**
15808                     * @type {boolean}
15809                     */
15810                    this._disableClick = options.disableClick;
15811
15812                    dragHandler.on('dragStart', this._onDragStart, this);
15813                    dragHandler.on('click', this._onClick, this);
15814
15815                    if (this._disableDblClick) {
15816                        CLICK_DELAY = 0;
15817                    } else {
15818                        domevent.on(timeGridView.container, 'dblclick', this._onDblClick, this);
15819                    }
15820                }
15821
15822                /**
15823                 * Destroy method
15824                 */
15825                TimeCreation.prototype.destroy = function() {
15826                    var timeGridView = this.timeGridView;
15827
15828                    this.guide.destroy();
15829                    this.dragHandler.off(this);
15830
15831                    if (timeGridView && timeGridView.container) {
15832                        domevent.off(timeGridView.container, 'dblclick', this._onDblClick, this);
15833                    }
15834
15835                    this.dragHandler = this.timeGridView = this.baseController =
15836                        this._getScheduleDataFunc = this._dragStart = this.guide = null;
15837                };
15838
15839                /**
15840                 * Check target element is expected condition for activate this plugins.
15841                 * @param {HTMLElement} target - The element to check
15842                 * @returns {(boolean|Time)} - return Time view instance when satiate condition.
15843                 */
15844                TimeCreation.prototype.checkExpectedCondition = function(target) {
15845                    var cssClass = domutil.getClass(target),
15846                        matches;
15847
15848                    if (cssClass === config.classname('time-date-schedule-block-wrap')) {
15849                        target = target.parentNode;
15850                        cssClass = domutil.getClass(target);
15851                    }
15852
15853                    matches = cssClass.match(config.time.getViewIDRegExp);
15854
15855                    if (!matches || matches.length < 2) {
15856                        return false;
15857                    }
15858
15859                    return util.pick(this.timeGridView.children.items, matches[1]);
15860                };
15861
15862                /**
15863                 * Drag#dragStart event handler.
15864                 * @emits TimeCreation#timeCreationDragstart
15865                 * @param {object} dragStartEventData - Drag#dragStart event data.
15866                 * @param {string} [overrideEventName] - override emitted event name when supplied.
15867                 * @param {function} [revise] - supply function for revise event data before emit.
15868                 */
15869                TimeCreation.prototype._onDragStart = function(dragStartEventData, overrideEventName, revise) {
15870                    var target = dragStartEventData.target,
15871                        result = this.checkExpectedCondition(target),
15872                        getScheduleDataFunc,
15873                        eventData;
15874
15875                    if (!result) {
15876                        return;
15877                    }
15878
15879                    getScheduleDataFunc = this._getScheduleDataFunc = this._retriveScheduleData(result);
15880                    eventData = this._dragStart = getScheduleDataFunc(dragStartEventData.originEvent);
15881
15882                    if (revise) {
15883                        revise(eventData);
15884                    }
15885
15886                    this.dragHandler.on({
15887                        drag: this._onDrag,
15888                        dragEnd: this._onDragEnd
15889                    }, this);
15890
15891                    /**
15892                     * @event TimeCreation#timeCreationDragstart
15893                     * @type {object}
15894                     * @property {Time} relatedView - time view instance related with mouse position.
15895                     * @property {MouseEvent} originEvent - mouse event object.
15896                     * @property {number} mouseY - mouse Y px mouse event.
15897                     * @property {number} gridY - grid Y index value related with mouseY value.
15898                     * @property {number} timeY - milliseconds value of mouseY points.
15899                     * @property {number} nearestGridY - nearest grid index related with mouseY value.
15900                     * @property {number} nearestGridTimeY - time value for nearestGridY.
15901                     */
15902                    this.fire(overrideEventName || 'timeCreationDragstart', eventData);
15903                };
15904
15905                /**
15906                 * Drag#drag event handler
15907                 * @emits TimeCreation#timeCreationDrag
15908                 * @param {object} dragEventData - event data from Drag#drag.
15909                 * @param {string} [overrideEventName] - override emitted event name when supplied.
15910                 * @param {function} [revise] - supply function for revise event data before emit.
15911                 */
15912                TimeCreation.prototype._onDrag = function(dragEventData, overrideEventName, revise) {
15913                    var getScheduleDataFunc = this._getScheduleDataFunc,
15914                        eventData;
15915
15916                    if (!getScheduleDataFunc) {
15917                        return;
15918                    }
15919
15920                    eventData = getScheduleDataFunc(dragEventData.originEvent);
15921
15922                    if (revise) {
15923                        revise(eventData);
15924                    }
15925
15926                    /**
15927                     * @event TimeCreation#timeCreationDrag
15928                     * @type {object}
15929                     * @property {Time} relatedView - time view instance related with mouse position.
15930                     * @property {MouseEvent} originEvent - mouse event object.
15931                     * @property {number} mouseY - mouse Y px mouse event.
15932                     * @property {number} gridY - grid Y index value related with mouseY value.
15933                     * @property {number} timeY - milliseconds value of mouseY points.
15934                     * @property {number} nearestGridY - nearest grid index related with mouseY value.
15935                     * @property {number} nearestGridTimeY - time value for nearestGridY.
15936                     */
15937                    this.fire(overrideEventName || 'timeCreationDrag', eventData);
15938                };
15939
15940                /**
15941                 * @fires TimeCreation#beforeCreateSchedule
15942                 * @param {object} eventData - event data object from TimeCreation#timeCreationDragend
15943                 * or TimeCreation#timeCreationClick
15944                 */
15945                TimeCreation.prototype._createSchedule = function(eventData) {
15946                    var relatedView = eventData.relatedView,
15947                        createRange = eventData.createRange,
15948                        nearestGridTimeY = eventData.nearestGridTimeY,
15949                        nearestGridEndTimeY = eventData.nearestGridEndTimeY
15950                            ? eventData.nearestGridEndTimeY
15951                            : new TZDate(nearestGridTimeY).addMinutes(30),
15952                        baseDate,
15953                        dateStart,
15954                        dateEnd,
15955                        start,
15956                        end;
15957
15958                    if (!createRange) {
15959                        createRange = [
15960                            nearestGridTimeY,
15961                            nearestGridEndTimeY
15962                        ];
15963                    }
15964
15965                    baseDate = new TZDate(relatedView.getDate());
15966                    dateStart = datetime.start(baseDate);
15967                    dateEnd = datetime.getStartOfNextDay(baseDate);
15968                    start = common.limitDate(createRange[0], dateStart, dateEnd);
15969                    end = common.limitDate(createRange[1], dateStart, dateEnd);
15970
15971                    /**
15972                     * @event TimeCreation#beforeCreateSchedule
15973                     * @type {object}
15974                     * @property {boolean} isAllDay - whether schedule is fired in allday view area?
15975                     * @property {Date} start - select start time
15976                     * @property {Date} end - select end time
15977                     * @property {TimeCreationGuide} guide - TimeCreationGuide instance
15978                     * @property {string} triggerEventName - event name
15979                     */
15980                    this.fire('beforeCreateSchedule', {
15981                        isAllDay: false,
15982                        start: new TZDate(start),
15983                        end: new TZDate(end),
15984                        guide: this.guide,
15985                        triggerEventName: eventData.triggerEvent
15986                    });
15987                };
15988
15989                /**
15990                 * Drag#dragEnd event handler
15991                 * @emits TimeCreation#timeCreationDragend
15992                 * @param {object} dragEndEventData - event data from Drag#dragend
15993                 */
15994                TimeCreation.prototype._onDragEnd = function(dragEndEventData) {
15995                    var self = this,
15996                        dragStart = this._dragStart;
15997
15998                    this.dragHandler.off({
15999                        drag: this._onDrag,
16000                        dragEnd: this._onDragEnd
16001                    }, this);
16002
16003                    /**
16004                     * Function for manipulate event data before firing event
16005                     * @param {object} eventData - event data
16006                     */
16007                    function reviseFunc(eventData) {
16008                        var range = [
16009                            dragStart.nearestGridTimeY,
16010                            eventData.nearestGridTimeY
16011                        ].sort(array.compare.num.asc);
16012                        range[1].addMinutes(30);
16013
16014                        eventData.createRange = range;
16015
16016                        self._createSchedule(eventData);
16017                    }
16018
16019                    /**
16020                     * @event TimeCreation#timeCreationDragend
16021                     * @type {object}
16022                     * @property {Time} relatedView - time view instance related with mouse position.
16023                     * @property {MouseEvent} originEvent - mouse event object.
16024                     * @property {number} mouseY - mouse Y px mouse event.
16025                     * @property {number} gridY - grid Y index value related with mouseY value.
16026                     * @property {number} timeY - milliseconds value of mouseY points.
16027                     * @property {number} nearestGridY - nearest grid index related with mouseY value.
16028                     * @property {number} nearestGridTimeY - time value for nearestGridY.
16029                     * @property {number[]} createRange - milliseconds range between drag start and end to create.
16030                     */
16031                    this._onDrag(dragEndEventData, 'timeCreationDragend', reviseFunc);
16032
16033                    this._dragStart = this._getScheduleDataFunc = null;
16034                };
16035
16036                /**
16037                 * Drag#click event handler
16038                 * @emits TimeCreation#timeCreationClick
16039                 * @param {object} clickEventData - event data from Drag#click.
16040                 */
16041                TimeCreation.prototype._onClick = function(clickEventData) {
16042                    var self = this;
16043                    var condResult, getScheduleDataFunc, eventData;
16044
16045                    this.dragHandler.off({
16046                        drag: this._onDrag,
16047                        dragEnd: this._onDragEnd
16048                    }, this);
16049
16050                    condResult = this.checkExpectedCondition(clickEventData.target);
16051                    if (!condResult || this._disableClick) {
16052                        return;
16053                    }
16054
16055                    getScheduleDataFunc = this._retriveScheduleData(condResult);
16056                    eventData = getScheduleDataFunc(clickEventData.originEvent);
16057
16058                    this._requestOnClick = true;
16059                    setTimeout(function() {
16060                        if (self._requestOnClick) {
16061                            self.fire('timeCreationClick', eventData);
16062                            self._createSchedule(eventData);
16063                        }
16064                        self._requestOnClick = false;
16065                    }, CLICK_DELAY);
16066                    this._dragStart = this._getScheduleDataFunc = null;
16067                };
16068
16069                /**
16070                 * Dblclick event handler
16071                 * @param {MouseEvent} e - Native MouseEvent
16072                 */
16073                TimeCreation.prototype._onDblClick = function(e) {
16074                    var condResult, getScheduleDataFunc, eventData;
16075
16076                    condResult = this.checkExpectedCondition(e.target);
16077                    if (!condResult) {
16078                        return;
16079                    }
16080
16081                    getScheduleDataFunc = this._retriveScheduleData(condResult);
16082                    eventData = getScheduleDataFunc(e);
16083
16084                    this.fire('timeCreationClick', eventData);
16085
16086                    this._createSchedule(eventData);
16087
16088                    this._requestOnClick = false;
16089                };
16090
16091                /**
16092                 * Invoke creation click
16093                 * @param {Schedule} schedule - schedule instance
16094                 */
16095                TimeCreation.prototype.invokeCreationClick = function(schedule) {
16096                    var opt = this.timeGridView.options,
16097                        range = datetime.range(
16098                            opt.renderStartDate,
16099                            opt.renderEndDate,
16100                            datetime.MILLISECONDS_PER_DAY),
16101                        hourStart = opt.hourStart,
16102                        targetDate = schedule.start;
16103                    var getScheduleDataFunc, eventData, timeView;
16104
16105                    util.forEach(range, function(date, index) {
16106                        if (datetime.isSameDate(date, targetDate)) {
16107                            timeView = this.timeGridView.children.toArray()[index];
16108                        }
16109                    }, this);
16110
16111                    // If start date is not in current date, set start date as first date.
16112                    if (!timeView) {
16113                        timeView = this.timeGridView.children.toArray()[0];
16114                    }
16115
16116                    getScheduleDataFunc = this._retriveScheduleDataFromDate(timeView);
16117                    eventData = getScheduleDataFunc(schedule.start, schedule.end, hourStart);
16118
16119                    this.fire('timeCreationClick', eventData);
16120
16121                    this._createSchedule(eventData);
16122                };
16123
16124                timeCore.mixin(TimeCreation);
16125                util.CustomEvents.mixin(TimeCreation);
16126
16127                module.exports = TimeCreation;
16128
16129
16130                /***/ }),
16131
16132            
16132/***/ "./src/js/handler/time/creationGuide.js":
16133            /*!**********************************************!*\
16134  !*** ./src/js/handler/time/creationGuide.js ***!
16135  \**********************************************/
16136            /*! no static exports found */
16137            /***/ (function(module, exports, __webpack_require__) {
16138
16139                "use strict";
16140                /* WEBPACK VAR INJECTION */(function(global) {/**
16141                 * @fileoverview Module for Time.Creation effect while dragging.
16142                 * @author NHN FE Development Lab <[email protected]>
16143                 */
16144
16145
16146                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
16147                    var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
16148                    var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
16149                    var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
16150                    var reqAnimFrame = __webpack_require__(/*! ../../common/reqAnimFrame */ "./src/js/common/reqAnimFrame.js");
16151                    var ratio = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js").ratio;
16152                    var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
16153                    var MIN60 = (datetime.MILLISECONDS_PER_MINUTES * 60);
16154
16155                    /**
16156                     * Class for Time.Creation dragging effect.
16157                     * @constructor
16158                     * @param {TimeCreation} timeCreation - instance of TimeCreation.
16159                     */
16160                    function TimeCreationGuide(timeCreation) {
16161                        /**
16162                         * Guide element for creation effect.
16163                         * @type {HTMLElement}
16164                         */
16165                        this.guideElement = global.document.createElement('div');
16166
16167                        /**
16168                         * @type {HTMLDivElement}
16169                         */
16170                        this.guideTimeElement = domutil.appendHTMLElement(
16171                            'span',
16172                            this.guideElement,
16173                            config.classname('time-guide-creation-label')
16174                        );
16175
16176                        domutil.addClass(this.guideElement, config.classname('time-guide-creation'));
16177
16178                        /**
16179                         * @type {TimeCreation}
16180                         */
16181                        this.timeCreation = timeCreation;
16182
16183                        /**
16184                         * @type {array}
16185                         */
16186                        this._styleUnit = null;
16187
16188                        /**
16189                         * @type {array}
16190                         */
16191                        this._styleStart = null;
16192
16193                        /**
16194                         * @type {function}
16195                         */
16196                        this._styleFunc = null;
16197
16198                        timeCreation.on({
16199                            timeCreationDragstart: this._createGuideElement,
16200                            timeCreationDrag: this._onDrag,
16201                            timeCreationClick: this._createGuideElement
16202                        }, this);
16203
16204                        this.applyTheme(timeCreation.baseController.theme);
16205                    }
16206
16207                    /**
16208                     * Destroy method.
16209                     */
16210                    TimeCreationGuide.prototype.destroy = function() {
16211                        this.clearGuideElement();
16212                        this.timeCreation.off(this);
16213                        this.timeCreation = this._styleUnit = this._styleStart =
16214                            this._styleFunc = this.guideElement = this.guideTimeElement = null;
16215                    };
16216
16217                    /**
16218                     * Clear guide element.
16219                     */
16220                    TimeCreationGuide.prototype.clearGuideElement = function() {
16221                        var guideElement = this.guideElement,
16222                            timeElement = this.guideTimeElement;
16223
16224                        domutil.remove(guideElement);
16225
16226                        reqAnimFrame.requestAnimFrame(function() {
16227                            guideElement.style.display = 'none';
16228                            guideElement.style.top = '';
16229                            guideElement.style.height = '';
16230                            timeElement.innerHTML = '';
16231                        });
16232                    };
16233
16234                    /**
16235                     * Refresh guide element
16236                     * @param {number} top - The number of guide element's style top
16237                     * @param {number} height - The number of guide element's style height
16238                     * @param {TZDate} start - start time of schedule to create
16239                     * @param {TZDate} end - end time of schedule to create
16240                     * @param {boolean} bottomLabel - is label need to render bottom of guide element?
16241                     */
16242                    TimeCreationGuide.prototype._refreshGuideElement = function(top, height, start, end, bottomLabel) {
16243                        var guideElement = this.guideElement;
16244                        var timeElement = this.guideTimeElement;
16245
16246                        guideElement.style.top = top + 'px';
16247                        guideElement.style.height = height + 'px';
16248                        guideElement.style.display = 'block';
16249
16250                        timeElement.innerHTML = datetime.format(start, 'HH:mm') +
16251                            ' - ' + datetime.format(end, 'HH:mm');
16252
16253                        if (bottomLabel) {
16254                            domutil.removeClass(timeElement, config.classname('time-guide-bottom'));
16255                        } else {
16256                            domutil.addClass(timeElement, config.classname('time-guide-bottom'));
16257                        }
16258                    };
16259
16260                    /**
16261                     * Get unit data of calculating new style of guide element by user interaction
16262                     * @param {Time} relatedView - time view instance related with schedule
16263                     * @returns {array} unit data.
16264                     */
16265                    TimeCreationGuide.prototype._getUnitData = function(relatedView) {
16266                        var viewOpt = relatedView.options,
16267                            viewHeight = relatedView.getViewBound().height,
16268                            hourLength = viewOpt.hourEnd - viewOpt.hourStart,
16269                            todayStart = datetime.parse(viewOpt.ymd),
16270                            todayEnd = datetime.getStartOfNextDay(todayStart);
16271
16272                        todayStart.setHours(0, 0, 0, 0);
16273                        todayStart.setHours(viewOpt.hourStart);
16274
16275                        // [0] height of view
16276                        // [1] hour length of view
16277                        // [2] start time of view
16278                        // [3] end time of view
16279                        // [4] height of view for one hour
16280                        return [
16281                            viewHeight,
16282                            hourLength,
16283                            todayStart,
16284                            todayEnd,
16285                            viewHeight / hourLength
16286                        ];
16287                    };
16288
16289                    /**
16290                     * Applying limitation to supplied data and return it.
16291                     * @param {number} top - top pixel of guide element
16292                     * @param {number} height - height pixel of guide element
16293                     * @param {TZDate} start - relative time value of dragstart point
16294                     * @param {TZDate} end - relative time value of dragend point
16295                     * @returns {array} limited style data
16296                     */
16297                    TimeCreationGuide.prototype._limitStyleData = function(top, height, start, end) {
16298                        var unitData = this._styleUnit;
16299
16300                        top = common.limit(top, [0], [unitData[0]]);
16301                        height = common.limit(top + height, [0], [unitData[0]]) - top;
16302                        start = common.limitDate(start, unitData[2], unitData[3]);
16303                        end = common.limitDate(end, unitData[2], unitData[3]);
16304
16305                        return [top, height, start, end];
16306                    };
16307
16308                    /**
16309                     * Get function to calculate guide element UI data from supplied units
16310                     * @param {number} viewHeight - total height of view's container element
16311                     * @param {number} hourLength - hour length that rendered in time view
16312                     * @param {TZDate} todayStart - time for view's start date
16313                     * @returns {function} UI data calculator function
16314                     */
16315                    TimeCreationGuide.prototype._getStyleDataFunc = function(viewHeight, hourLength, todayStart) {
16316                        var todayStartTime = todayStart;
16317                        var todayEndTime = datetime.end(todayStart);
16318
16319                        /**
16320                         * Get top, time value from schedule data
16321                         * @param {object} scheduleData - schedule data object
16322                         * @returns {number[]} top, time
16323                         */
16324                        function getStyleData(scheduleData) {
16325                            var minMinutes = 30;
16326                            var gridY = scheduleData.nearestGridY,
16327                                gridTimeY = scheduleData.nearestGridTimeY,
16328                                gridEndTimeY = scheduleData.nearestGridEndTimeY || new TZDate(gridTimeY).addMinutes(minMinutes),
16329                                top, startTime, endTime;
16330
16331                            top = common.limit(ratio(hourLength, viewHeight, gridY), [0], [viewHeight]);
16332                            startTime = common.limitDate(gridTimeY, todayStartTime, todayEndTime);
16333                            endTime = common.limitDate(gridEndTimeY, todayStartTime, todayEndTime);
16334
16335                            return [top, startTime, endTime];
16336                        }
16337
16338                        return getStyleData;
16339                    };
16340
16341                    /**
16342                     * DragStart event handler
16343                     * @param {object} dragStartEventData - dragStart schedule data.
16344                     */
16345                    TimeCreationGuide.prototype._createGuideElement = function(dragStartEventData) {
16346                        var relatedView = dragStartEventData.relatedView,
16347                            hourStart = datetime.millisecondsFrom('hour', dragStartEventData.hourStart) || 0,
16348                            unitData, styleFunc, styleData, result, top, height, start, end;
16349
16350                        unitData = this._styleUnit = this._getUnitData(relatedView);
16351                        styleFunc = this._styleFunc = this._getStyleDataFunc.apply(this, unitData);
16352                        styleData = this._styleStart = styleFunc(dragStartEventData);
16353
16354                        start = new TZDate(styleData[1]).addMinutes(datetime.minutesFromHours(hourStart));
16355                        end = new TZDate(styleData[2]).addMinutes(datetime.minutesFromHours(hourStart));
16356                        top = styleData[0];
16357                        height = (unitData[4] * (end - start) / MIN60);
16358
16359                        result = this._limitStyleData(
16360                            top,
16361                            height,
16362                            start,
16363                            end
16364                        );
16365
16366                        this._refreshGuideElement.apply(this, result);
16367
16368                        relatedView.container.appendChild(this.guideElement);
16369                    };
16370
16371                    /**
16372                     * Drag event handler
16373                     * @param {object} dragEventData - drag schedule data.
16374                     */
16375                    TimeCreationGuide.prototype._onDrag = function(dragEventData) {
16376                        var minutes30 = 30;
16377                        var styleFunc = this._styleFunc,
16378                            unitData = this._styleUnit,
16379                            startStyle = this._styleStart,
16380                            refreshGuideElement = this._refreshGuideElement.bind(this),
16381                            heightOfHalfHour,
16382                            endStyle,
16383                            result;
16384
16385                        if (!styleFunc || !unitData || !startStyle) {
16386                            return;
16387                        }
16388
16389                        heightOfHalfHour = (unitData[4] / 2);
16390                        endStyle = styleFunc(dragEventData);
16391
16392                        if (endStyle[0] > startStyle[0]) {
16393                            result = this._limitStyleData(
16394                                startStyle[0],
16395                                (endStyle[0] - startStyle[0]) + heightOfHalfHour,
16396                                startStyle[1],
16397                                new TZDate(endStyle[1]).addMinutes(minutes30)
16398                            );
16399                        } else {
16400                            result = this._limitStyleData(
16401                                endStyle[0],
16402                                (startStyle[0] - endStyle[0]) + heightOfHalfHour,
16403                                endStyle[1],
16404                                new TZDate(startStyle[1]).addMinutes(minutes30)
16405                            );
16406                            result.push(true);
16407                        }
16408
16409                        reqAnimFrame.requestAnimFrame(function() {
16410                            refreshGuideElement.apply(null, result);
16411                        });
16412                    };
16413
16414                    TimeCreationGuide.prototype.applyTheme = function(theme) {
16415                        var style = this.guideElement.style;
16416                        var timeStyle = this.guideTimeElement.style;
16417
16418                        // block
16419                        style.backgroundColor = theme.common.creationGuide.backgroundColor;
16420                        style.border = theme.common.creationGuide.border;
16421
16422                        // label
16423                        timeStyle.color = theme.week.creationGuide.color;
16424                        timeStyle.fontSize = theme.week.creationGuide.fontSize;
16425                        timeStyle.fontWeight = theme.week.creationGuide.fontWeight;
16426                    };
16427
16428                    module.exports = TimeCreationGuide;
16429
16430                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
16431
16432                /***/ }),
16433
16434            
16434/***/ "./src/js/handler/time/move.js":
16435            /*!*************************************!*\
16436  !*** ./src/js/handler/time/move.js ***!
16437  \*************************************/
16438            /*! no static exports found */
16439            /***/ (function(module, exports, __webpack_require__) {
16440
16441                "use strict";
16442                /**
16443                 * @fileoverview Handling move schedules from drag handler and time grid view
16444                 * @author NHN FE Development Lab <[email protected]>
16445                 */
16446
16447
16448                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
16449                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
16450                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
16451                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
16452                var domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js");
16453                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
16454                var timeCore = __webpack_require__(/*! ./core */ "./src/js/handler/time/core.js");
16455                var TimeMoveGuide = __webpack_require__(/*! ./moveGuide */ "./src/js/handler/time/moveGuide.js");
16456
16457                /**
16458                 * @constructor
16459                 * @implements {Handler}
16460                 * @mixes timeCore
16461                 * @mixes util.CustomEvents
16462                 * @param {Drag} [dragHandler] - Drag handler instance.
16463                 * @param {TimeGrid} [timeGridView] - TimeGrid view instance.
16464                 * @param {Base} [baseController] - Base controller instance.
16465                 */
16466                function TimeMove(dragHandler, timeGridView, baseController) {
16467                    /**
16468                     * @type {Drag}
16469                     */
16470                    this.dragHandler = dragHandler;
16471
16472                    /**
16473                     * @type {TimeGrid}
16474                     */
16475                    this.timeGridView = timeGridView;
16476
16477                    /**
16478                     * @type {Base}
16479                     */
16480                    this.baseController = baseController;
16481
16482                    /**
16483                     * @type {function}
16484                     */
16485                    this._getScheduleDataFunc = null;
16486
16487                    /**
16488                     * @type {object}
16489                     */
16490                    this._dragStart = null;
16491
16492                    /**
16493                     * @type {TimeMoveGuide}
16494                     */
16495                    this._guide = new TimeMoveGuide(this);
16496
16497                    dragHandler.on('dragStart', this._onDragStart, this);
16498                    dragHandler.on('mousedown', this._onMouseDown, this);
16499                }
16500
16501                /**
16502                 * Destroy method.
16503                 */
16504                TimeMove.prototype.destroy = function() {
16505                    this._guide.destroy();
16506                    this.dragHandler.off(this);
16507                    this.dragHandler = this.timeGridView = this.baseController =
16508                        this._getScheduleDataFunc = this._dragStart = this._guide = null;
16509                };
16510
16511                /**
16512                 * Check target element is expected condition for activate this plugins.
16513                 * @param {HTMLElement} target - The element to check
16514                 * @returns {boolean|object} - return object when satiate condition.
16515                 */
16516                TimeMove.prototype.checkExpectCondition = function(target) {
16517                    if (!domutil.closest(target, config.classname('.time-schedule'))) {
16518                        return false;
16519                    }
16520
16521                    return this._getTimeView(target);
16522                };
16523
16524                /**
16525                 * Get Time view container from supplied element.
16526                 * @param {HTMLElement} target - element to find time view container.
16527                 * @returns {object|boolean} - return time view instance when finded.
16528                 */
16529                TimeMove.prototype._getTimeView = function(target) {
16530                    var container = domutil.closest(target, config.classname('.time-date')),
16531                        matches;
16532
16533                    if (!container) {
16534                        return false;
16535                    }
16536
16537                    matches = domutil.getClass(container).match(config.time.getViewIDRegExp);
16538
16539                    if (!matches || matches.length < 2) {
16540                        return false;
16541                    }
16542
16543                    return util.pick(this.timeGridView.children.items, Number(matches[1]));
16544                };
16545
16546                /**
16547                 * @emits TimeMove#mousedown
16548                 * @param {object} mouseDownEventData - Drag#mousedown schedule data.
16549                 */
16550                TimeMove.prototype._onMouseDown = function(mouseDownEventData) {
16551                    var target = mouseDownEventData.target,
16552                        timeView = this.checkExpectCondition(target),
16553                        blockElement = domutil.closest(target, config.classname('.time-date-schedule-block'));
16554
16555                    if (!timeView || !blockElement) {
16556                        return;
16557                    }
16558
16559                    // EventTarget.target is not changed in mousemove event even if mouse is over the other element.
16560                    // It's different with other browsers(IE, Chrome, Safari)
16561                    if (util.browser.firefox) {
16562                        domevent.preventDefault(mouseDownEventData.originEvent);
16563                    }
16564                };
16565
16566                /**
16567                 * @emits TimeMove#timeMoveDragstart
16568                 * @param {object} dragStartEventData - Drag#dragStart schedule data.
16569                 */
16570                TimeMove.prototype._onDragStart = function(dragStartEventData) {
16571                    var target = dragStartEventData.target,
16572                        timeView = this.checkExpectCondition(target),
16573                        blockElement = domutil.closest(target, config.classname('.time-date-schedule-block')),
16574                        getScheduleDataFunc,
16575                        scheduleData,
16576                        ctrl = this.baseController,
16577                        targetModelID,
16578                        targetModel;
16579
16580                    if (!timeView || !blockElement) {
16581                        return;
16582                    }
16583
16584                    targetModelID = domutil.getData(blockElement, 'id');
16585                    targetModel = ctrl.schedules.items[targetModelID];
16586
16587                    if (targetModel.isReadOnly) {
16588                        return;
16589                    }
16590
16591                    getScheduleDataFunc = this._getScheduleDataFunc = this._retriveScheduleData(timeView);
16592                    scheduleData = this._dragStart = getScheduleDataFunc(
16593                        dragStartEventData.originEvent, {
16594                            targetModelID: targetModelID,
16595                            model: targetModel
16596                        }
16597                    );
16598
16599                    this.dragHandler.on({
16600                        drag: this._onDrag,
16601                        dragEnd: this._onDragEnd,
16602                        click: this._onClick
16603                    }, this);
16604
16605                    /**
16606                     * @event TimeMove#timeMoveDragstart
16607                     * @type {object}
16608                     * @property {HTMLElement} target - current target in mouse event object.
16609                     * @property {Time} relatedView - time view instance related with mouse position.
16610                     * @property {MouseEvent} originEvent - mouse event object.
16611                     * @property {number} mouseY - mouse Y px mouse event.
16612                     * @property {number} gridY - grid Y index value related with mouseY value.
16613                     * @property {number} timeY - milliseconds value of mouseY points.
16614                     * @property {number} nearestGridY - nearest grid index related with mouseY value.
16615                     * @property {number} nearestGridTimeY - time value for nearestGridY.
16616                     * @property {string} targetModelID - The model unique id emitted move schedule.
16617                     * @property {Schedule} model - model instance
16618                     */
16619                    this.fire('timeMoveDragstart', scheduleData);
16620                };
16621
16622                /**
16623                 * @emits TimeMove#timeMoveDrag
16624                 * @param {MouseEvent} dragEventData - mousemove event object
16625                 * @param {string} [overrideEventName] - name of emitting event to override.
16626                 * @param {function} [revise] - supply function for revise schedule data before emit.
16627                 */
16628                TimeMove.prototype._onDrag = function(dragEventData, overrideEventName, revise) {
16629                    var getScheduleDataFunc = this._getScheduleDataFunc,
16630                        timeView = this._getTimeView(dragEventData.target),
16631                        dragStart = this._dragStart,
16632                        scheduleData;
16633
16634                    if (!timeView || !getScheduleDataFunc || !dragStart) {
16635                        return;
16636                    }
16637
16638                    scheduleData = getScheduleDataFunc(dragEventData.originEvent, {
16639                        currentView: timeView,
16640                        targetModelID: dragStart.targetModelID
16641                    });
16642
16643                    if (revise) {
16644                        revise(scheduleData);
16645                    }
16646
16647                    /**
16648                     * @event TimeMove#timeMoveDrag
16649                     * @type {object}
16650                     * @property {HTMLElement} target - current target in mouse event object.
16651                     * @property {Time} relatedView - time view instance related with drag start position.
16652                     * @property {MouseEvent} originEvent - mouse event object.
16653                     * @property {number} mouseY - mouse Y px mouse event.
16654                     * @property {number} gridY - grid Y index value related with mouseY value.
16655                     * @property {number} timeY - milliseconds value of mouseY points.
16656                     * @property {number} nearestGridY - nearest grid index related with mouseY value.
16657                     * @property {number} nearestGridTimeY - time value for nearestGridY.
16658                     * @property {Time} currentView - time view instance related with current mouse position.
16659                     * @property {string} targetModelID - The model unique id emitted move schedule.
16660                     */
16661                    this.fire(overrideEventName || 'timeMoveDrag', scheduleData);
16662                };
16663
16664                /**
16665                 * Update model instance by dragend event results.
16666                 * @fires TimeMove#beforeUpdateSchedule
16667                 * @param {object} scheduleData - schedule data from TimeMove#timeMoveDragend
16668                 */
16669                TimeMove.prototype._updateSchedule = function(scheduleData) {
16670                    var ctrl = this.baseController,
16671                        modelID = scheduleData.targetModelID,
16672                        range = scheduleData.nearestRange,
16673                        timeDiff = range[1] - range[0],
16674                        dateDiff = 0,
16675                        schedule = ctrl.schedules.items[modelID],
16676                        relatedView = scheduleData.relatedView,
16677                        currentView = scheduleData.currentView,
16678                        newStarts,
16679                        newEnds;
16680
16681                    if (!schedule || !currentView) {
16682                        return;
16683                    }
16684
16685                    timeDiff -= datetime.millisecondsFrom('minutes', 30);
16686                    newStarts = new TZDate(schedule.getStarts()).addMilliseconds(timeDiff);
16687                    newEnds = new TZDate(schedule.getEnds()).addMilliseconds(timeDiff);
16688
16689                    if (currentView) {
16690                        dateDiff = currentView.getDate() - relatedView.getDate();
16691                    }
16692
16693                    newStarts.addMilliseconds(dateDiff);
16694                    newEnds.addMilliseconds(dateDiff);
16695
16696                    /**
16697                     * @event TimeMove#beforeUpdateSchedule
16698                     * @type {object}
16699                     * @property {Schedule} schedule - The original schedule instance
16700                     * @property {Date} start - Deprecated: start time to update
16701                     * @property {Date} end - Deprecated: end time to update
16702                     * @property {object} changes - start and end time to update
16703                     *  @property {Date} start - start time to update
16704                     *  @property {Date} end - end time to update
16705                     */
16706                    this.fire('beforeUpdateSchedule', {
16707                        schedule: schedule,
16708                        changes: {
16709                            start: newStarts,
16710                            end: newEnds
16711                        },
16712                        start: newStarts,
16713                        end: newEnds
16714                    });
16715                };
16716
16717                /**
16718                 * @emits TimeMove#timeMoveDragend
16719                 * @param {MouseEvent} dragEndEventData - mouseup mouse event object.
16720                 */
16721                TimeMove.prototype._onDragEnd = function(dragEndEventData) {
16722                    var getScheduleDataFunc = this._getScheduleDataFunc,
16723                        currentView = this._getTimeView(dragEndEventData.target),
16724                        dragStart = this._dragStart,
16725                        scheduleData;
16726
16727                    this.dragHandler.off({
16728                        drag: this._onDrag,
16729                        dragEnd: this._onDragEnd,
16730                        click: this._onClick
16731                    }, this);
16732
16733                    if (!getScheduleDataFunc || !dragStart) {
16734                        return;
16735                    }
16736
16737                    scheduleData = getScheduleDataFunc(dragEndEventData.originEvent, {
16738                        currentView: currentView,
16739                        targetModelID: dragStart.targetModelID
16740                    });
16741
16742                    scheduleData.range = [
16743                        dragStart.timeY,
16744                        new TZDate(scheduleData.timeY).addMinutes(30)
16745                    ];
16746
16747                    scheduleData.nearestRange = [
16748                        dragStart.nearestGridTimeY,
16749                        new TZDate(scheduleData.nearestGridTimeY).addMinutes(30)
16750                    ];
16751
16752                    this._updateSchedule(scheduleData);
16753
16754                    /**
16755                     * @event TimeMove#timeMoveDragend
16756                     * @type {object}
16757                     * @property {HTMLElement} target - current target in mouse event object.
16758                     * @property {Time} relatedView - time view instance related with drag start position.
16759                     * @property {Time} currentView - time view instance related with current mouse position.
16760                     * @property {MouseEvent} originEvent - mouse event object.
16761                     * @property {number} mouseY - mouse Y px mouse event.
16762                     * @property {number} gridY - grid Y index value related with mouseY value.
16763                     * @property {number} timeY - milliseconds value of mouseY points.
16764                     * @property {number} nearestGridY - nearest grid index related with mouseY value.
16765                     * @property {number} nearestGridTimeY - time value for nearestGridY.
16766                     * @property {string} targetModelID - The model unique id emitted move schedule.
16767                     * @property {number[]} range - milliseconds range between drag start and end.
16768                     * @property
16768 {number[]} nearestRange - milliseconds range related with nearestGridY between start and end.
16769                     */
16770                    this.fire('timeMoveDragend', scheduleData);
16771                };
16772
16773                /**
16774                 * @emits TimeMove#timeMoveClick
16775                 * @param {MouseEvent} clickEventData - click mouse event object.
16776                 */
16777                TimeMove.prototype._onClick = function(clickEventData) {
16778                    var getScheduleDataFunc = this._getScheduleDataFunc,
16779                        dragStart = this._dragStart,
16780                        scheduleData;
16781
16782                    this.dragHandler.off({
16783                        drag: this._onDrag,
16784                        dragEnd: this._onDragEnd,
16785                        click: this._onClick
16786                    }, this);
16787
16788                    if (!getScheduleDataFunc || !dragStart) {
16789                        return;
16790                    }
16791
16792                    scheduleData = getScheduleDataFunc(clickEventData.originEvent, {
16793                        targetModelID: dragStart.targetModelID
16794                    });
16795
16796                    /**
16797                     * @event TimeMove#timeMoveClick
16798                     * @type {object}
16799                     * @property {HTMLElement} target - current target in mouse event object.
16800                     * @property {Time} relatedView - time view instance related with drag start position.
16801                     * @property {MouseEvent} originEvent - mouse event object.
16802                     * @property {number} mouseY - mouse Y px mouse event.
16803                     * @property {number} gridY - grid Y index value related with mouseY value.
16804                     * @property {number} timeY - milliseconds value of mouseY points.
16805                     * @property {number} nearestGridY - nearest grid index related with mouseY value.
16806                     * @property {number} nearestGridTimeY - time value for nearestGridY.
16807                     * @property {string} targetModelID - The model unique id emitted move schedule.
16808                     */
16809                    this.fire('timeMoveClick', scheduleData);
16810                };
16811
16812                timeCore.mixin(TimeMove);
16813                util.CustomEvents.mixin(TimeMove);
16814
16815                module.exports = TimeMove;
16816
16817
16818                /***/ }),
16819
16820            
16820/***/ "./src/js/handler/time/moveGuide.js":
16821            /*!******************************************!*\
16822  !*** ./src/js/handler/time/moveGuide.js ***!
16823  \******************************************/
16824            /*! no static exports found */
16825            /***/ (function(module, exports, __webpack_require__) {
16826
16827                "use strict";
16828                /* WEBPACK VAR INJECTION */(function(global) {/**
16829                 * @fileoverview Module for Time.Move effect while dragging.
16830                 * @author NHN FE Development Lab <[email protected]>
16831                 */
16832
16833
16834                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
16835                    var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
16836                    var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
16837                    var reqAnimFrame = __webpack_require__(/*! ../../common/reqAnimFrame */ "./src/js/common/reqAnimFrame.js");
16838                    var ratio = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js").ratio;
16839                    var FloatingLayer = __webpack_require__(/*! ../../common/floatingLayer */ "./src/js/common/floatingLayer.js");
16840                    var tmpl = __webpack_require__(/*! ../../view/template/week/timeMoveGuide.hbs */ "./src/js/view/template/week/timeMoveGuide.hbs");
16841                    var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
16842                    var Schedule = __webpack_require__(/*! ../../model/schedule */ "./src/js/model/schedule.js");
16843                    var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
16844                    var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
16845
16846                    var SCHEDULE_MIN_DURATION = datetime.MILLISECONDS_SCHEDULE_MIN_DURATION;
16847
16848                    /**
16849                     * Class for Time.Move effect.
16850                     * @constructor
16851                     * @param {TimeMove} timeMove - The instance of TimeMove.
16852                     */
16853                    function TimeMoveGuide(timeMove) {
16854                        /**
16855                         * @type {FloatingLayer}
16856                         */
16857                        this._guideLayer = null;
16858
16859                        /**
16860                         * @Type {Schedule}
16861                         */
16862                        this._model = null;
16863
16864                        /**
16865                         * @type {object}
16866                         */
16867                        this._viewModel = null;
16868
16869                        /**
16870                         * @type {object}
16871                         */
16872                        this._lastDrag = null;
16873
16874                        /**
16875                         * @type {HTMLElement}
16876                         */
16877                        this.guideElement = null;
16878
16879                        /**
16880                         * @type {TimeMove}
16881                         */
16882                        this.timeMove = timeMove;
16883
16884                        /**
16885                         * @type {HTMLElement}
16886                         */
16887                        this._container = null;
16888
16889                        /**
16890                         * @type {function}
16891                         */
16892                        this._getTopFunc = null;
16893
16894                        /**
16895                         * @type {number}
16896                         */
16897                        this._startGridY = 0;
16898
16899                        /**
16900                         * @type {number}
16901                         */
16902                        this._startTopPixel = 0;
16903
16904                        timeMove.on({
16905                            'timeMoveDragstart': this._onDragStart,
16906                            'timeMoveDrag': this._onDrag,
16907                            'timeMoveDragend': this._clearGuideElement,
16908                            'timeMoveClick': this._clearGuideElement
16909                        }, this);
16910                    }
16911
16912                    /**
16913                     * Destroy method
16914                     */
16915                    TimeMoveGuide.prototype.destroy = function() {
16916                        this._clearGuideElement();
16917                        this.timeMove.off(this);
16918                        if (this._guideLayer) {
16919                            this._guideLayer.destroy();
16920                        }
16921                        this.guideElement = this.timeMove = this._container = this._guideLayer = this._lastDrag =
16922                            this._getTopFunc = this._startGridY = this._startTopPixel = this._viewModel = null;
16923                    };
16924
16925                    /**
16926                     * Clear guide element.
16927                     */
16928                    TimeMoveGuide.prototype._clearGuideElement = function() {
16929                        if (!util.browser.msie) {
16930                            domutil.removeClass(global.document.body, config.classname('dragging'));
16931                        }
16932                        if (this._guideLayer) {
16933                            this._guideLayer.destroy();
16934                        }
16935
16936                        this._showOriginScheduleBlocks();
16937
16938                        this.guideElement = this._getTopFunc = this._guideLayer = this._model = this._lastDrag =
16939                            this._startGridY = this._startTopPixel = this._viewModel = null;
16940                    };
16941
16942                    /**
16943                     * Dim element blocks
16944                     * @param {number} modelID - Schedule model instance ID
16945                     */
16946                    TimeMoveGuide.prototype._hideOriginScheduleBlocks = function() {
16947                        var className = config.classname('time-date-schedule-block-dragging-dim');
16948                        if (this.guideElement) {
16949                            domutil.addClass(this.guideElement, className);
16950                        }
16951                    };
16952
16953                    /**
16954                     * Show element blocks
16955                     */
16956                    TimeMoveGuide.prototype._showOriginScheduleBlocks = function() {
16957                        var className = config.classname('time-date-schedule-block-dragging-dim');
16958                        if (this.guideElement) {
16959                            domutil.removeClass(this.guideElement, className);
16960                        }
16961                    };
16962
16963                    /**
16964                     * Refresh guide element
16965                     * @param {string} top - guide element's style top.
16966                     * @param {Schedule} model - updated model
16967                     * @param {object} viewModel - view model
16968                     */
16969                    TimeMoveGuide.prototype._refreshGuideElement = function(top, model, viewModel) {
16970                        var self = this;
16971
16972                        reqAnimFrame.requestAnimFrame(function() {
16973                            if (!self._guideLayer) {
16974                                return;
16975                            }
16976                            self._guideLayer.setPosition(0, top);
16977                            self._guideLayer.setContent(tmpl(util.extend({model: model}, viewModel)));
16978                        });
16979                    };
16980
16981                    /**
16982                     * TimeMove#timeMoveDragstart event handler
16983                     * @param {object} dragStartEventData - dragstart event data
16984                     */
16985                    TimeMoveGuide.prototype._onDragStart = function(dragStartEventData) {
16986                        var guideElement = domutil.closest(
16987                            dragStartEventData.target,
16988                            config.classname('.time-date-schedule-block')
16989                        );
16990                        var duration, modelDuration, goingDuration, comingDuration;
16991
16992                        if (!guideElement) {
16993                            return;
16994                        }
16995
16996                        this._startTopPixel = parseFloat(guideElement.style.top);
16997                        this._startGridY = dragStartEventData.nearestGridY;
16998                        this.guideElement = guideElement;
16999                        this._container = dragStartEventData.relatedView.container;
17000
17001                        this._model = util.extend(
17002                            Schedule.create(dragStartEventData.model),
17003                            dragStartEventData.model
17004                        );
17005
17006                        modelDuration = this._model.duration();
17007                        modelDuration = modelDuration > SCHEDULE_MIN_DURATION ? modelDuration : SCHEDULE_MIN_DURATION;
17008                        goingDuration = datetime.millisecondsFrom('minutes', this._model.goingDuration);
17009                        comingDuration = datetime.millisecondsFrom('minutes', this._model.comingDuration);
17010                        duration = goingDuration + modelDuration + comingDuration;
17011
17012                        this._lastDrag = dragStartEventData;
17013                        this._viewModel = {
17014                            hasGoingDuration: goingDuration > 0,
17015                            hasComingDuration: comingDuration > 0,
17016                            goingDurationHeight: common.ratio(duration, goingDuration, 100),
17017                            modelDurationHeight: common.ratio(duration, modelDuration, 100),
17018                            comingDurationHeight: common.ratio(duration, comingDuration, 100)
17019                        };
17020
17021                        this._resetGuideLayer();
17022                        this._hideOriginScheduleBlocks();
17023                    };
17024
17025                    /**
17026                     * TimeMove#timeMoveDrag event handler
17027                     * @param {object} dragEventData - drag event data
17028                     */
17029                    TimeMoveGuide.prototype._onDrag = function(dragEventData) {
17030                        var timeView = dragEventData.currentView,
17031                            viewOptions = timeView.options,
17032                            viewHeight = timeView.getViewBound().height,
17033                            guideHeight = parseFloat(this.guideElement.style.height),
17034                            hourLength = viewOptions.hourEnd - viewOptions.hourStart,
17035                            gridYOffset = dragEventData.nearestGridY - this._startGridY,
17036                            gridYOffsetPixel = ratio(hourLength, viewHeight, gridYOffset),
17037                            gridDiff = dragEventData.nearestGridY - this._lastDrag.nearestGridY,
17038                            bottomLimit,
17039                            top;
17040
17041                        if (!util.browser.msie) {
17042                            domutil.addClass(global.document.body, config.classname('dragging'));
17043                        }
17044
17045                        if (this._container !== timeView.container) {
17046                            this._container = timeView.container;
17047                            this._resetGuideLayer();
17048                        }
17049
17050                        top = this._startTopPixel + gridYOffsetPixel;
17051                        bottomLimit = viewHeight - guideHeight;
17052
17053                        top = Math.max(top, 0);
17054                        top = Math.min(top, bottomLimit);
17055
17056                        // update time
17057                        this._model.start = new TZDate(this._model.getStarts()).addMinutes(datetime.minutesFromHours(gridDiff));
17058                        this._model.end = new TZDate(this._model.getEnds()).addMinutes(datetime.minutesFromHours(gridDiff));
17059                        this._lastDrag = dragEventData;
17060
17061                        this._refreshGuideElement(top, this._model, this._viewModel);
17062                    };
17063
17064                    TimeMoveGuide.prototype._resetGuideLayer = function() {
17065                        if (this._guideLayer) {
17066                            this._guideLayer.destroy();
17067                            this._guideLayer = null;
17068                        }
17069                        this._guideLayer = new FloatingLayer(null, this._container);
17070                        this._guideLayer.setSize(this._container.getBoundingClientRect().width, this.guideElement.style.height);
17071                        this._guideLayer.setPosition(0, this.guideElement.style.top);
17072                        this._guideLayer.setContent(tmpl(util.extend({model: this._model}, this._viewModel)));
17073                        this._guideLayer.show();
17074                    };
17075
17076                    module.exports = TimeMoveGuide;
17077
17078                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
17079
17080                /***/ }),
17081
17082            
17082/***/ "./src/js/handler/time/resize.js":
17083            /*!***************************************!*\
17084  !*** ./src/js/handler/time/resize.js ***!
17085  \***************************************/
17086            /*! no static exports found */
17087            /***/ (function(module, exports, __webpack_require__) {
17088
17089                "use strict";
17090                /**
17091                 * @fileoverview Handling resize schedules from drag handler and time grid view
17092                 * @author NHN FE Development Lab <[email protected]>
17093                 */
17094
17095
17096                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
17097                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
17098                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
17099                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
17100                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
17101                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
17102                var timeCore = __webpack_require__(/*! ./core */ "./src/js/handler/time/core.js");
17103                var TimeResizeGuide = __webpack_require__(/*! ./resizeGuide */ "./src/js/handler/time/resizeGuide.js");
17104
17105                /**
17106                 * @constructor
17107                 * @implements {Handler}
17108                 * @mixes timeCore
17109                 * @mixes util.CustomEvents
17110                 * @param {Drag} [dragHandler] - Drag handler instance.
17111                 * @param {TimeGrid} [timeGridView] - TimeGrid view instance.
17112                 * @param {Base} [baseController] - Base controller instance.
17113                 */
17114                function TimeResize(dragHandler, timeGridView, baseController) {
17115                    /**
17116                     * @type {Drag}
17117                     */
17118                    this.dragHandler = dragHandler;
17119
17120                    /**
17121                     * @type {TimeGrid}
17122                     */
17123                    this.timeGridView = timeGridView;
17124
17125                    /**
17126                     * @type {Base}
17127                     */
17128                    this.baseController = baseController;
17129
17130                    /**
17131                     * @type {function}
17132                     */
17133                    this._getScheduleDataFunc = null;
17134
17135                    /**
17136                     * @type {object}
17137                     */
17138                    this._dragStart = null;
17139
17140                    /**
17141                     * @type {TimeResizeGuide}
17142                     */
17143                    this._guide = new TimeResizeGuide(this);
17144
17145                    dragHandler.on('dragStart', this._onDragStart, this);
17146                }
17147
17148                /**
17149                 * Destroy method
17150                 */
17151                TimeResize.prototype.destroy = function() {
17152                    this._guide.destroy();
17153                    this.dragHandler.off(this);
17154                    this.dragHandler = this.timeGridView = this.baseController =
17155                        this._getScheduleDataFunc = this._dragStart = this._guide = null;
17156                };
17157
17158                /**
17159                 * @param {HTMLElement} target - element to check condition.
17160                 * @returns {object|boolean} - return time view instance or false
17161                 */
17162                TimeResize.prototype.checkExpectCondition = function(target) {
17163                    var container,
17164                        matches;
17165
17166                    if (!domutil.hasClass(target, config.classname('time-resize-handle'))) {
17167                        return false;
17168                    }
17169
17170                    container = domutil.closest(target, config.classname('.time-date'));
17171
17172                    if (!container) {
17173                        return false;
17174                    }
17175
17176                    matches = domutil.getClass(container).match(config.time.getViewIDRegExp);
17177
17178                    if (!matches || matches.length < 2) {
17179                        return false;
17180                    }
17181
17182                    return util.pick(this.timeGridView.children.items, Number(matches[1]));
17183                };
17184
17185                /**
17186                 * @emits TimeResize#timeResizeDragstart
17187                 * @param {object} dragStartEventData - event data of Drag#dragstart
17188                 */
17189                TimeResize.prototype._onDragStart = function(dragStartEventData) {
17190                    var target = dragStartEventData.target,
17191                        timeView = this.checkExpectCondition(target),
17192                        blockElement = domutil.closest(target, config.classname('.time-date-schedule-block')),
17193                        ctrl = this.baseController,
17194                        targetModelID,
17195                        getScheduleDataFunc,
17196                        scheduleData;
17197
17198                    if (!timeView || !blockElement) {
17199                        return;
17200                    }
17201
17202                    targetModelID = domutil.getData(blockElement, 'id');
17203                    getScheduleDataFunc = this._getScheduleDataFunc = this._retriveScheduleData(timeView);
17204                    scheduleData = this._dragStart = getScheduleDataFunc(
17205                        dragStartEventData.originEvent, {
17206                            targetModelID: targetModelID,
17207                            schedule: ctrl.schedules.items[targetModelID]
17208                        }
17209                    );
17210
17211                    this.dragHandler.on({
17212                        drag: this._onDrag,
17213                        dragEnd: this._onDragEnd,
17214                        click: this._onClick
17215                    }, this);
17216
17217                    /**
17218                     * @event TimeResize#timeResizeDragstart
17219                     * @type {object}
17220                     * @property {HTMLElement} target - current target in mouse event object.
17221                     * @property {Time} relatedView - time view instance related with mouse position.
17222                     * @property {MouseEvent} originEvent - mouse event object.
17223                     * @property {number} mouseY - mouse Y px mouse event.
17224                     * @property {number} gridY - grid Y index value related with mouseY value.
17225                     * @property {number} timeY - milliseconds value of mouseY points.
17226                     * @property {number} nearestGridY - nearest grid index related with mouseY value.
17227                     * @property {number} nearestGridTimeY - time value for nearestGridY.
17228                     * @property {string} targetModelID - The model unique id emitted move schedule.
17229                     * @property {Schedule} schedule - schedule data
17230                     */
17231                    this.fire('timeResizeDragstart', scheduleData);
17232                };
17233
17234                /**
17235                 * Drag#drag event handler
17236                 * @emits TimeResize#timeResizeDrag
17237                 * @param {object} dragEventData - event data of Drag#drag custom event.
17238                 * @param {string} [overrideEventName] - override emitted event name when supplied.
17239                 * @param {function} [revise] - supply function for revise schedule data before emit.
17240                 */
17241                TimeResize.prototype._onDrag = function(dragEventData, overrideEventName, revise) {
17242                    var getScheduleDataFunc = this._getScheduleDataFunc,
17243                        startScheduleData = this._dragStart,
17244                        scheduleData;
17245
17246                    if (!getScheduleDataFunc || !startScheduleData) {
17247                        return;
17248                    }
17249
17250                    scheduleData = getScheduleDataFunc(dragEventData.originEvent, {
17251                        targetModelID: startScheduleData.targetModelID
17252                    });
17253
17254                    if (revise) {
17255                        revise(scheduleData);
17256                    }
17257
17258                    /**
17259                     * @event TimeResize#timeResizeDrag
17260                     * @type {object}
17261                     * @property {HTMLElement} target - current target in mouse event object.
17262                     * @property {Time} relatedView - time view instance related with drag start position.
17263                     * @property {MouseEvent} originEvent - mouse event object.
17264                     * @property {number} mouseY - mouse Y px mouse event.
17265                     * @property {number} gridY - grid Y index value related with mouseY value.
17266                     * @property {number} timeY - milliseconds value of mouseY points.
17267                     * @property {number} nearestGridY - nearest grid index related with mouseY value.
17268                     * @property {number} nearestGridTimeY - time value for nearestGridY.
17269                     * @property {string} targetModelID - The model unique id emitted move schedule.
17270                     */
17271                    this.fire(overrideEventName || 'timeResizeDrag', scheduleData);
17272                };
17273
17274                /**
17275                 * Update model instance by dragend event results.
17276                 * @fires TimeResize#beforeUpdateSchedule
17277                 * @param {object} scheduleData - schedule data from TimeResize#timeResizeDragend
17278                 */
17279                TimeResize.prototype._updateSchedule = function(scheduleData) {
17280                    var ctrl = this.baseController,
17281                        modelID = scheduleData.targetModelID,
17282                        range = scheduleData.nearestRange,
17283                        timeDiff = range[1] - range[0],
17284                        schedule = ctrl.schedules.items[modelID],
17285                        relatedView = scheduleData.relatedView,
17286                        dateEnd,
17287                        newEnds,
17288                        baseDate;
17289                    var changes;
17290
17291                    if (!schedule) {
17292                        return;
17293                    }
17294
17295                    timeDiff -= datetime.millisecondsFrom('minutes', 30);
17296
17297                    baseDate = new TZDate(relatedView.getDate());
17298                    dateEnd = datetime.end(baseDate);
17299                    newEnds = new TZDate(schedule.getEnds()).addMilliseconds(timeDiff);
17300
17301                    if (newEnds > dateEnd) {
17302                        newEnds = new TZDate(dateEnd);
17303                    }
17304
17305                    if (newEnds.getTime() - schedule.getStarts().getTime() < datetime.millisecondsFrom('minutes', 30)) {
17306                        newEnds = new TZDate(schedule.getStarts()).addMinutes(30);
17307                    }
17308
17309                    changes = common.getScheduleChanges(
17310                        schedule,
17311                        ['end'],
17312                        {end: newEnds}
17313                    );
17314
17315                    /**
17316                     * @event TimeResize#beforeUpdateSchedule
17317                     * @type {object}
17318                     * @property {Schedule} schedule - The original schedule instance
17319                     * @property {Date} start - Deprecated: start time to update
17320                     * @property {Date} end - Deprecated: end time to update
17321                     * @property {object} changes - end time to update
17322                     *  @property {date} end - end time to update
17323                     */
17324                    this.fire('beforeUpdateSchedule', {
17325                        schedule: schedule,
17326                        changes: changes,
17327                        start: schedule.getStarts(),
17328                        end: newEnds
17329                    });
17330                };
17331
17332                /**
17333                 * Drag#dragEnd event handler
17334                 * @emits TimeResize#timeResizeDragend
17335                 * @param {MouseEvent} dragEndEventData - Mouse event of Drag#dragEnd custom event.
17336                 */
17337                TimeResize.prototype._onDragEnd = function(dragEndEventData) {
17338                    var getScheduleDataFunc = this._getScheduleDataFunc,
17339                        dragStart = this._dragStart,
17340                        scheduleData;
17341
17342                    this.dragHandler.off({
17343                        drag: this._onDrag,
17344                        dragEnd: this._onDragEnd,
17345                        click: this._onClick
17346                    }, this);
17347
17348                    if (!getScheduleDataFunc || !dragStart) {
17349                        return;
17350                    }
17351
17352                    scheduleData = getScheduleDataFunc(dragEndEventData.originEvent, {
17353                        targetModelID: dragStart.targetModelID
17354                    });
17355
17356                    scheduleData.range = [
17357                        dragStart.timeY,
17358                        new TZDate(scheduleData.timeY).addMinutes(30)
17359                    ];
17360
17361                    scheduleData.nearestRange = [
17362                        dragStart.nearestGridTimeY,
17363                        scheduleData.nearestGridTimeY.addMinutes(30)
17364                    ];
17365
17366                    this._updateSchedule(scheduleData);
17367
17368                    /**
17369                     * @event TimeResize#timeResizeDragend
17370                     * @type {object}
17371                     * @property {HTMLElement} target - current target in mouse event object.
17372                     * @property {Time} relatedView - time view instance related with drag start position.
17373                     * @property {MouseEvent} originEvent - mouse event object.
17374                     * @property {number} mouseY - mouse Y px mouse event.
17375                     * @property {number} gridY - grid Y index value related with mouseY value.
17376                     * @property {number} timeY - milliseconds value of mouseY points.
17377                     * @property {number} nearestGridY - nearest grid index related with mouseY value.
17378                     * @property {number} nearestGridTimeY - time value for nearestGridY.
17379                     * @property {string} targetModelID - The model unique id emitted move schedule.
17380                     * @property {number[]} range - milliseconds range between drag start and end.
17381                     * @property {number[]} nearestRange - milliseconds range related with nearestGridY between start and end.
17382                     */
17383                    this.fire('timeResizeDragend', scheduleData);
17384
17385                    this._getScheduleDataFunc = this._dragStart = null;
17386                };
17387
17388                /**
17389                 * @emits TimeResize#timeResizeClick
17390                 */
17391                TimeResize.prototype._onClick = function() {
17392                    this.dragHandler.off({
17393                        drag: this._onDrag,
17394                        dragEnd: this._onDragEnd,
17395                        click: this._onClick
17396                    }, this);
17397
17398                    /**
17399                     * @event TimeResize#timeResizeClick
17400                     */
17401                    this.fire('timeResizeClick');
17402                };
17403
17404                timeCore.mixin(TimeResize);
17405                util.CustomEvents.mixin(TimeResize);
17406
17407                module.exports = TimeResize;
17408
17409
17410                /***/ }),
17411
17412            
17412/***/ "./src/js/handler/time/resizeGuide.js":
17413            /*!********************************************!*\
17414  !*** ./src/js/handler/time/resizeGuide.js ***!
17415  \********************************************/
17416            /*! no static exports found */
17417            /***/ (function(module, exports, __webpack_require__) {
17418
17419                "use strict";
17420                /* WEBPACK VAR INJECTION */(function(global) {/**
17421                 * @fileoverview Module for Time.Resize effect while dragging.
17422                 * @author NHN FE Development Lab <[email protected]>
17423                 */
17424
17425
17426                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
17427                    var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
17428                    var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
17429                    var reqAnimFrame = __webpack_require__(/*! ../../common/reqAnimFrame */ "./src/js/common/reqAnimFrame.js");
17430                    var ratio = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js").ratio;
17431                    var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
17432
17433                    /**
17434                     * Class for Time.Resize effect.
17435                     * @constructor
17436                     * @param {TimeResize} timeResize - the instance of TimeResize handler.
17437                     */
17438                    function TimeResizeGuide(timeResize) {
17439                        /**
17440                         * @type {HTMLElement}
17441                         */
17442                        this.guideElement = null;
17443
17444                        /**
17445                         * @type {TimeResize}
17446                         */
17447                        this.timeResize = timeResize;
17448
17449                        /**
17450                         * @type {function}
17451                         */
17452                        this._getTopFunc = null;
17453
17454                        /**
17455                         * @type {HTMLElement}
17456                         */
17457                        this._originScheduleElement = null;
17458
17459                        /**
17460                         * @type {number}
17461                         */
17462                        this._startTopPixel = 0;
17463
17464                        /**
17465                         * @type {number}
17466                         */
17467                        this._startHeightPixel = 0;
17468
17469                        /**
17470                         * @type {number}
17471                         */
17472                        this._startGridY = 0;
17473
17474                        /**
17475                         * @type {Schedule}
17476                         */
17477                        this._schedule = null;
17478
17479                        timeResize.on({
17480                            'timeResizeDragstart': this._onDragStart,
17481                            'timeResizeDrag': this._onDrag,
17482                            'timeResizeDragend': this._clearGuideElement,
17483                            'timeResizeClick': this._clearGuideElement
17484                        }, this);
17485                    }
17486
17487                    /**
17488                     * Destroy method
17489                     */
17490                    TimeResizeGuide.prototype.destroy = function() {
17491                        this._clearGuideElement();
17492                        this.timeResize.off(this);
17493                        this.guideElement = this.timeResize = this._getTopFunc =
17494                            this._originScheduleElement = this._startHeightPixel =
17495                                this._startGridY = this._startTopPixel = null;
17496                    };
17497
17498                    /**
17499                     * Clear guide element.
17500                     */
17501                    TimeResizeGuide.prototype._clearGuideElement = function() {
17502                        var guideElement = this.guideElement,
17503                            originElement = this._originScheduleElement;
17504
17505                        if (!util.browser.msie) {
17506                            domutil.removeClass(global.document.body, config.classname('resizing'));
17507                        }
17508
17509                        if (originElement) {
17510                            originElement.style.display = 'block';
17511                        }
17512
17513                        domutil.remove(guideElement);
17514
17515                        this.guideElement = this._getTopFunc = this._originScheduleElement =
17516                            this._startHeightPixel = this._startGridY = this._startTopPixel = null;
17517                    };
17518
17519                    /**
17520                     * Refresh guide element
17521                     * @param {number}
17521 guideHeight - guide element's style height.
17522                     * @param {number} minTimeHeight - time element's min height
17523                     * @param {number} timeHeight - time element's height.
17524                     */
17525                    TimeResizeGuide.prototype._refreshGuideElement = function(guideHeight, minTimeHeight, timeHeight) {
17526                        var guideElement = this.guideElement;
17527                        var timeElement;
17528
17529                        if (!guideElement) {
17530                            return;
17531                        }
17532
17533                        timeElement = domutil.find(config.classname('.time-schedule-content-time'), guideElement);
17534
17535                        reqAnimFrame.requestAnimFrame(function() {
17536                            guideElement.style.height = guideHeight + 'px';
17537                            guideElement.style.display = 'block';
17538
17539                            if (timeElement) {
17540                                timeElement.style.height = timeHeight + 'px';
17541                                timeElement.style.minHeight = minTimeHeight + 'px';
17542                            }
17543                        });
17544                    };
17545
17546                    /**
17547                     * TimeMove#timeMoveDragstart event handler
17548                     * @param {object} dragStartEventData - dragstart event data
17549                     */
17550                    TimeResizeGuide.prototype._onDragStart = function(dragStartEventData) {
17551                        var originElement = domutil.closest(
17552                            dragStartEventData.target,
17553                            config.classname('.time-date-schedule-block')
17554                            ),
17555                            schedule = dragStartEventData.schedule,
17556                            guideElement;
17557
17558                        if (!util.browser.msie) {
17559                            domutil.addClass(global.document.body, config.classname('resizing'));
17560                        }
17561
17562                        if (!originElement || !schedule) {
17563                            return;
17564                        }
17565
17566                        this._startGridY = dragStartEventData.nearestGridY;
17567                        this._startHeightPixel = parseFloat(originElement.style.height);
17568                        this._startTopPixel = parseFloat(originElement.style.top);
17569
17570                        this._originScheduleElement = originElement;
17571                        this._schedule = schedule;
17572
17573                        guideElement = this.guideElement = originElement.cloneNode(true);
17574                        domutil.addClass(guideElement, config.classname('time-guide-resize'));
17575
17576                        originElement.style.display = 'none';
17577                        dragStartEventData.relatedView.container.appendChild(guideElement);
17578                    };
17579
17580                    /**
17581                     * @param {object} dragEventData - event data from Drag#drag.
17582                     */
17583                    TimeResizeGuide.prototype._onDrag = function(dragEventData) {
17584                        var timeView = dragEventData.relatedView,
17585                            viewOptions = timeView.options,
17586                            viewHeight = timeView.getViewBound().height,
17587                            hourLength = viewOptions.hourEnd - viewOptions.hourStart,
17588                            guideElement = this.guideElement,
17589                            guideTop = parseFloat(guideElement.style.top),
17590                            gridYOffset = dragEventData.nearestGridY - this._startGridY,
17591                            // hourLength : viewHeight = gridYOffset : X;
17592                            gridYOffsetPixel = ratio(hourLength, viewHeight, gridYOffset),
17593                            goingDuration = this._schedule.goingDuration,
17594                            modelDuration = this._schedule.duration() / datetime.MILLISECONDS_PER_MINUTES,
17595                            comingDuration = this._schedule.comingDuration,
17596                            minutesLength = hourLength * 60,
17597                            timeHeight,
17598                            timeMinHeight,
17599                            minHeight,
17600                            maxHeight,
17601                            height;
17602
17603                        height = (this._startHeightPixel + gridYOffsetPixel);
17604                        // at least large than 30min from schedule start time.
17605                        minHeight = guideTop + ratio(hourLength, viewHeight, 0.5);
17606                        minHeight -= this._startTopPixel;
17607                        timeMinHeight = minHeight;
17608                        minHeight += ratio(minutesLength, viewHeight, goingDuration) + ratio(minutesLength, viewHeight, comingDuration);
17609                        // smaller than 24h
17610                        maxHeight = viewHeight - guideTop;
17611
17612                        height = Math.max(height, minHeight);
17613                        height = Math.min(height, maxHeight);
17614
17615                        timeHeight = ratio(minutesLength, viewHeight, modelDuration) + gridYOffsetPixel;
17616
17617                        this._refreshGuideElement(height, timeMinHeight, timeHeight);
17618                    };
17619
17620                    module.exports = TimeResizeGuide;
17621
17622                    /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
17623
17624                /***/ }),
17625
17626            
17626/***/ "./src/js/model/schedule.js":
17627            /*!**********************************!*\
17628  !*** ./src/js/model/schedule.js ***!
17629  \**********************************/
17630            /*! no static exports found */
17631            /***/ (function(module, exports, __webpack_require__) {
17632
17633                "use strict";
17634                /* eslint complexity: 0 */
17635                /**
17636                 * @fileoverview Model of schedule.
17637                 * @author NHN FE Development Lab <[email protected]>
17638                 */
17639
17640
17641                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
17642                var TZDate = __webpack_require__(/*! ../common/timezone */ "./src/js/common/timezone.js").Date;
17643                var datetime = __webpack_require__(/*! ../common/datetime */ "./src/js/common/datetime.js");
17644                var dirty = __webpack_require__(/*! ../common/dirty */ "./src/js/common/dirty.js");
17645                var model = __webpack_require__(/*! ../common/model */ "./src/js/common/model.js");
17646
17647                var SCHEDULE_MIN_DURATION = datetime.MILLISECONDS_SCHEDULE_MIN_DURATION;
17648
17649                /**
17650                 * Schedule category
17651                 * @readonly
17652                 * @enum {string}
17653                 */
17654                var SCHEDULE_CATEGORY = {
17655                    /** milestone */
17656                    MILESTONE: 'milestone',
17657
17658                    /** task */
17659                    TASK: 'task',
17660
17661                    /** all-day schedule */
17662                    ALLDAY: 'allday',
17663
17664                    /** normal schedule */
17665                    TIME: 'time'
17666                };
17667
17668                /**
17669                 * The model of calendar schedules.
17670                 * @constructor
17671                 * @mixes dirty
17672                 * @mixes model
17673                 */
17674                function Schedule() {
17675                    /**
17676                     * `Optional` unique id for various use.
17677                     * @type {string}
17678                     */
17679                    this.id = '';
17680
17681                    /**
17682                     * title for schedule.
17683                     * @type {string}
17684                     */
17685                    this.title = '';
17686
17687                    /**
17688                     * body for schedule.
17689                     * @type {string}
17690                     */
17691                    this.body = '';
17692
17693                    /**
17694                     * is schedule is all day schedule?
17695                     * @type {boolean}
17696                     */
17697                    this.isAllDay = false;
17698
17699                    /**
17700                     * schedule start
17701                     * @type {TZDate}
17702                     */
17703                    this.start = null;
17704
17705                    /**
17706                     * schedule end
17707                     * @type {TZDate}
17708                     */
17709                    this.end = null;
17710
17711                    /**
17712                     * schedule text color
17713                     * @type {string}
17714                     */
17715                    this.color = '#000';
17716
17717                    /**
17718                     * schedule block visibility
17719                     * @type {boolean}
17720                     */
17721                    this.isVisible = true;
17722
17723                    /**
17724                     * schedule background color
17725                     * @type {string}
17726                     */
17727                    this.bgColor = '#a1b56c';
17728
17729                    /**
17730                     * schedule background color when dragging it
17731                     * @type {string}
17732                     */
17733                    this.dragBgColor = '#a1b56c';
17734
17735                    /**
17736                     * schedule left border color
17737                     * @type {string}
17738                     */
17739                    this.borderColor = '#000';
17740
17741                    /**
17742                     * calendar ID
17743                     * @type {string}
17744                     */
17745                    this.calendarId = '';
17746
17747                    /**
17748                     * Schedule category(milestone, task, allday, time)
17749                     * @type {string}
17750                     */
17751                    this.category = '';
17752
17753                    /**
17754                     * Classification of work schedules (before work, before lunch, before work)
17755                     * @type {string}
17756                     */
17757                    this.dueDateClass = '';
17758
17759                    /**
17760                     * Custom style for schedule element
17761                     * @type {string}
17762                     */
17763                    this.customStyle = '';
17764
17765                    /**
17766                     * in progress flag to do something
17767                     * @type {boolean}
17768                     */
17769                    this.isPending = false;
17770
17771                    /**
17772                     * focused schedule flag
17773                     * @type {boolean}
17774                     */
17775                    this.isFocused = false;
17776
17777                    /**
17778                     * read-only schedule flag
17779                     * @type {boolean}
17780                     */
17781                    this.isReadOnly = false;
17782
17783                    /**
17784                     * private schedule
17785                     * @type {boolean}
17786                     */
17787                    this.isPrivate = false;
17788
17789                    /**
17790                     * location
17791                     * @type {string}
17792                     */
17793                    this.location = '';
17794
17795                    /**
17796                     * attendees
17797                     * @type {Array.<string>}
17798                     */
17799                    this.attendees = [];
17800
17801                    /**
17802                     * recurrence rule
17803                     * @type {any}
17804                     */
17805                    this.recurrenceRule = '';
17806
17807                    /**
17808                     * state. 'Busy' is default.
17809                     * @type {string}
17810                     */
17811                    this.state = '';
17812
17813                    /**
17814                     * travelTime: going-Duration minutes
17815                     * @type {number}
17816                     */
17817                    this.goingDuration = 0;
17818
17819                    /**
17820                     * travelTime: coming-Duration minutes
17821                     * @type {number}
17822                     */
17823                    this.comingDuration = 0;
17824
17825                    /**
17826                     * Separate data storage space independent of rendering.
17827                     * @type {object}
17828                     */
17829                    this.raw = null;
17830
17831                    // initialize model id
17832                    util.stamp(this);
17833                }
17834
17835                /**********
17836                 * static props
17837                 **********/
17838
17839                Schedule.schema = {
17840                    required: ['title'],
17841                    dateRange: ['start', 'end']
17842                };
17843
17844                /**
17845                 * create schedule model from json(object) data.
17846                 * @param {object} data object for model.
17847                 * @returns {Schedule} Schedule model instance.
17848                 */
17849                Schedule.create = function(data) {
17850                    var inst = new Schedule();
17851                    inst.init(data);
17852
17853                    return inst;
17854                };
17855
17856                /**********
17857                 * prototype props
17858                 **********/
17859
17860                /**
17861                 * Initialize schedule instance.
17862                 * @param {object} options options.
17863                 */
17864                Schedule.prototype.init = function(options) {
17865                    options = util.extend({}, options);
17866                    if (options.category === SCHEDULE_CATEGORY.ALLDAY) {
17867                        options.isAllDay = true;
17868                    }
17869
17870                    this.id = options.id || '';
17871                    this.title = options.title || '';
17872                    this.body = options.body || '';
17873                    this.isAllDay = util.isExisty(options.isAllDay) ? options.isAllDay : false;
17874                    this.isVisible = util.isExisty(options.isVisible) ? options.isVisible : true;
17875
17876                    this.color = options.color || this.color;
17877                    this.bgColor = options.bgColor || this.bgColor;
17878                    this.dragBgColor = options.dragBgColor || this.dragBgColor;
17879                    this.borderColor = options.borderColor || this.borderColor;
17880                    this.calendarId = options.calendarId || '';
17881                    this.category = options.category || '';
17882                    this.dueDateClass = options.dueDateClass || '';
17883                    this.customStyle = options.customStyle || '';
17884                    this.location = options.location || '';
17885                    this.attendees = options.attendees || [];
17886                    this.recurrenceRule = options.recurrenceRule || '';
17887                    this.isPrivate = options.isPrivate || false;
17888                    this.isPending = options.isPending || false;
17889                    this.isFocused = options.isFocused || false;
17890                    this.isReadOnly = options.isReadOnly || false;
17891                    this.goingDuration = options.goingDuration || 0;
17892                    this.comingDuration = options.comingDuration || 0;
17893                    this.state = options.state || '';
17894
17895                    if (this.isAllDay) {
17896                        this.setAllDayPeriod(options.start, options.end);
17897                    } else {
17898                        this.setTimePeriod(options.start, options.end);
17899                    }
17900
17901                    this.raw = options.raw || null;
17902                };
17903
17904                Schedule.prototype.setAllDayPeriod = function(start, end) {
17905                    // If it is an all-day schedule, only the date information of the string is used.
17906                    if (util.isString(start)) {
17907                        start = datetime.parse(start.substring(0, 10));
17908                    } else {
17909                        start = new TZDate(start || Date.now());
17910                    }
17911                    if (util.isString(end)) {
17912                        end = datetime.parse(end.substring(0, 10));
17913                    } else {
17914                        end = new TZDate(end || this.start);
17915                    }
17916
17917                    this.start = start;
17918                    this.start.setHours(0, 0, 0);
17919                    this.end = end || new TZDate(this.start);
17920                    this.end.setHours(23, 59, 59);
17921                };
17922
17923                Schedule.prototype.setTimePeriod = function(start, end) {
17924                    this.start = new TZDate(start || Date.now());
17925                    this.end = new TZDate(end || this.start);
17926
17927                    if (!end) {
17928                        this.end.setMinutes(this.end.getMinutes() + 30);
17929                    }
17930                };
17931
17932                /**
17933                 * @returns {Date} render start date.
17934                 */
17935                Schedule.prototype.getStarts = function() {
17936                    return this.start;
17937                };
17938
17939                /**
17940                 * @returns {Date} render end date.
17941                 */
17942                Schedule.prototype.getEnds = function() {
17943                    return this.end;
17944                };
17945
17946                /**
17947                 * @returns {number} instance unique id.
17948                 */
17949                Schedule.prototype.cid = function() {
17950                    return util.stamp(this);
17951                };
17952
17953                /**
17954                 * Check two schedule are equals (means title, isAllDay, start, end are same)
17955                 * @param {Schedule} schedule Schedule model instance to compare.
17956                 * @returns {boolean} Return false when not same.
17957                 */
17958                Schedule.prototype.equals = function(schedule) {
17959                    if (this.id !== schedule.id) {
17960                        return false;
17961                    }
17962
17963                    if (this.title !== schedule.title) {
17964                        return false;
17965                    }
17966
17967                    if (this.body !== schedule.body) {
17968                        return false;
17969                    }
17970
17971                    if (this.isAllDay !== schedule.isAllDay) {
17972                        return false;
17973                    }
17974
17975                    if (datetime.compare(this.getStarts(), schedule.getStarts()) !== 0) {
17976                        return false;
17977                    }
17978
17979                    if (datetime.compare(this.getEnds(), schedule.getEnds()) !== 0) {
17980                        return false;
17981                    }
17982
17983                    if (this.color !== schedule.color) {
17984                        return false;
17985                    }
17986
17987                    if (this.bgColor !== schedule.bgColor) {
17988                        return false;
17989                    }
17990
17991                    if (this.dragBgColor !== schedule.dragBgColor) {
17992                        return false;
17993                    }
17994
17995                    if (this.borderColor !== schedule.borderColor) {
17996                        return false;
17997                    }
17998
17999                    return true;
18000                };
18001
18002                /**
18003                 * return duration between start and end.
18004                 * @returns {Date} duration (UTC)
18005                 */
18006                Schedule.prototype.duration = function() {
18007                    var start = this.getStarts(),
18008                        end = this.getEnds(),
18009                        duration;
18010
18011                    if (this.isAllDay) {
18012                        duration = datetime.end(end) - datetime.start(start);
18013                    } else {
18014                        duration = end - start;
18015                    }
18016
18017                    return duration;
18018                };
18019
18020                /**
18021                 * Returns true if the given Schedule coincides with the same time as the
18022                 * calling Schedule.
18023                 * @param {Schedule} schedule The other schedule to compare with this Schedule.
18024                 * @returns {boolean} If the other schedule occurs within the same time as the first object.
18025                 */
18026                Schedule.prototype.collidesWith = function(schedule) {
18027                    var ownStarts = this.getStarts(),
18028                        ownEnds = this.getEnds(),
18029                        start = schedule.getStarts(),
18030                        end = schedule.getEnds();
18031                    var ownGoingDuration = datetime.millisecondsFrom('minutes', this.goingDuration),
18032                        ownComingDuration = datetime.millisecondsFrom('minutes', this.comingDuration),
18033                        goingDuration = datetime.millisecondsFrom('minutes', schedule.goingDuration),
18034                        comingDuration = datetime.millisecondsFrom('minutes', schedule.comingDuration);
18035
18036                    if (Math.abs(ownEnds - ownStarts) < SCHEDULE_MIN_DURATION) {
18037                        ownEnds += SCHEDULE_MIN_DURATION;
18038                    }
18039
18040                    if (Math.abs(end - start) < SCHEDULE_MIN_DURATION) {
18041                        end += SCHEDULE_MIN_DURATION;
18042                    }
18043
18044                    ownStarts -= ownGoingDuration;
18045                    ownEnds += ownComingDuration;
18046                    start -= goingDuration;
18047                    end += comingDuration;
18048
18049                    if ((start > ownStarts && start < ownEnds) ||
18050                        (end > ownStarts && end < ownEnds) ||
18051                        (start <= ownStarts && end >= ownEnds)) {
18052                        return true;
18053                    }
18054
18055                    return false;
18056                };
18057
18058                model.mixin(Schedule.prototype);
18059                dirty.mixin(Schedule.prototype);
18060
18061                module.exports = Schedule;
18062
18063
18064                /***/ }),
18065
18066            
18066/***/ "./src/js/model/viewModel/scheduleViewModel.js":
18067            /*!*****************************************************!*\
18068  !*** ./src/js/model/viewModel/scheduleViewModel.js ***!
18069  \*****************************************************/
18070            /*! no static exports found */
18071            /***/ (function(module, exports, __webpack_require__) {
18072
18073                "use strict";
18074                /**
18075                 * @fileoverview Model for views
18076                 * @author NHN FE Development Lab <[email protected]>
18077                 */
18078
18079
18080                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
18081                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
18082
18083                var SCHEDULE_MIN_DURATION = datetime.MILLISECONDS_SCHEDULE_MIN_DURATION;
18084
18085                /**
18086                 * Schedule ViewModel
18087                 * @constructor
18088                 * @param {Schedule} schedule Schedule instance.
18089                 */
18090                function ScheduleViewModel(schedule) {
18091                    /**
18092                     * The model of schedule.
18093                     * @type {Schedule}
18094                     */
18095                    this.model = schedule;
18096
18097                    /**
18098                     * @type {number}
18099                     */
18100                    this.top = 0;
18101
18102                    /**
18103                     * @type {number}
18104                     */
18105                    this.left = 0;
18106
18107                    /**
18108                     * @type {number}
18109                     */
18110                    this.width = 0;
18111
18112                    /**
18113                     * @type {number}
18114                     */
18115                    this.height = 0;
18116
18117                    /**
18118                     * Represent schedule has collide with other schedules when rendering.
18119                     * @type {boolean}
18120                     */
18121                    this.hasCollide = false;
18122
18123                    /**
18124                     * Extra space at rigth side of this schedule.
18125                     * @type {number}
18126                     */
18127                    this.extraSpace = 0;
18128
18129                    /**
18130                     * represent this schedule block is not visible after rendered.
18131                     *
18132                     * in month view, some viewmodel in date need to hide when already rendered before dates.
18133                     *
18134                     * set true then it just shows empty space.
18135                     * @type {boolean}
18136                     */
18137                    this.hidden = false;
18138
18139                    /**
18140                     * whether the schedule includes multiple dates
18141                     */
18142                    this.hasMultiDates = false;
18143
18144                    /**
18145                     * represent render start date used at rendering.
18146                     *
18147                     * if set null then use model's 'start' property.
18148                     * @type {TZDate}
18149                     */
18150                    this.renderStarts = null;
18151
18152                    /**
18153                     * whether the actual start-date is before the render-start-date
18154                     * @type {boolean}
18155                     */
18156                    this.exceedLeft = false;
18157
18158                    /**
18159                     * represent render end date used at rendering.
18160                     *
18161                     * if set null then use model's 'end' property.
18162                     * @type {TZDate}
18163                     */
18164                    this.renderEnds = null;
18165
18166                    /**
18167                     * whether the actual end-date is after the render-end-date
18168                     * @type {boolean}
18169                     */
18170                    this.exceedRight = false;
18171                }
18172
18173                /**********
18174                 * static props
18175                 **********/
18176
18177                /**
18178                 * ScheduleViewModel factory method.
18179                 * @param {Schedule} schedule Schedule instance.
18180                 * @returns {ScheduleViewModel} ScheduleViewModel instance.
18181                 */
18182                ScheduleViewModel.create = function(schedule) {
18183                    return new ScheduleViewModel(schedule);
18184                };
18185
18186                /**********
18187                 * prototype props
18188                 **********/
18189
18190                /**
18191                 * return renderStarts property to render properly when specific schedule that exceed rendering date range.
18192                 *
18193                 * if renderStarts is not set. return model's start property.
18194                 * @override
18195                 * @returns {Date} render start date.
18196                 */
18197                ScheduleViewModel.prototype.getStarts = function() {
18198                    if (this.renderStarts) {
18199                        return this.renderStarts;
18200                    }
18201
18202                    return this.model.start;
18203                };
18204
18205                /**
18206                 * return renderStarts property to render properly when specific schedule that exceed rendering date range.
18207                 *
18208                 * if renderEnds is not set. return model's end property.
18209                 * @override
18210                 * @returns {Date} render end date.
18211                 */
18212                ScheduleViewModel.prototype.getEnds = function() {
18213                    if (this.renderEnds) {
18214                        return this.renderEnds;
18215                    }
18216
18217                    return this.model.end;
18218                };
18219
18220                /**
18221                 * @returns {number} unique number for model.
18222                 */
18223                ScheduleViewModel.prototype.cid = function() {
18224                    return util.stamp(this.model);
18225                };
18226
18227                /**
18228                 * Shadowing valueOf method for schedule sorting.
18229                 * @returns {Schedule} The model of schedule.
18230                 */
18231                ScheduleViewModel.prototype.valueOf = function() {
18232                    return this.model;
18233                };
18234
18235                /**
18236                 * Link duration method
18237                 * @returns {number} Schedule#duration result.
18238                 */
18239                ScheduleViewModel.prototype.duration = function() {
18240                    return this.model.duration();
18241                };
18242
18243                /**
18244                 * Link collidesWith method
18245                 * @param {Schedule|ScheduleViewModel} viewModel - Model or viewmodel instance of Schedule.
18246                 * @returns {boolean} Schedule#collidesWith result.
18247                 */
18248                ScheduleViewModel.prototype.collidesWith = function(viewModel) {
18249                    var ownStarts = this.getStarts(),
18250                        ownEnds = this.getEnds(),
18251                        start = viewModel.getStarts(),
18252                        end = viewModel.getEnds();
18253                    var ownGoingDuration = datetime.millisecondsFrom('minutes', this.valueOf().goingDuration),
18254                        ownComingDuration = datetime.millisecondsFrom('minutes', this.valueOf().comingDuration),
18255                        goingDuration = datetime.millisecondsFrom('minutes', viewModel.valueOf().goingDuration),
18256                        comingDuration = datetime.millisecondsFrom('minutes', viewModel.valueOf().comingDuration);
18257
18258                    if (Math.abs(ownEnds - ownStarts) < SCHEDULE_MIN_DURATION) {
18259                        ownEnds += SCHEDULE_MIN_DURATION;
18260                    }
18261
18262                    if (Math.abs(end - start) < SCHEDULE_MIN_DURATION) {
18263                        end += SCHEDULE_MIN_DURATION;
18264                    }
18265
18266                    ownStarts -= ownGoingDuration;
18267                    ownEnds += ownComingDuration;
18268                    start -= goingDuration;
18269                    end += comingDuration;
18270
18271                    if ((start > ownStarts && start < ownEnds) ||
18272                        (end > ownStarts && end < ownEnds) ||
18273                        (start <= ownStarts && end >= ownEnds)) {
18274                        return true;
18275                    }
18276
18277                    return false;
18278                };
18279
18280                module.exports = ScheduleViewModel;
18281
18282
18283                /***/ }),
18284
18285            
18285/***/ "./src/js/theme/standard.js":
18286            /*!**********************************!*\
18287  !*** ./src/js/theme/standard.js ***!
18288  \**********************************/
18289            /*! no static exports found */
18290            /***/ (function(module, exports, __webpack_require__) {
18291
18292                "use strict";
18293                /**
18294                 * @fileoverview The standard theme
18295                 * @author NHN FE Development Lab <[email protected]>
18296                 */
18297
18298
18299                /**
18300                 * "common" prefix is for entire calendar. "common" properties can be overriden by "week", "month".
18301                 * "week" prefix is for weekly and daily view.
18302                 * "month" prefix is for monthly view.
18303                 */
18304                var theme = {
18305                    'common.border': '1px solid #e5e5e5',
18306                    'common.backgroundColor': 'white',
18307                    'common.holiday.color': '#ff4040',
18308                    'common.saturday.color': '#333',
18309                    'common.dayname.color': '#333',
18310                    'common.today.color': '#333',
18311
18312                    // creation guide style
18313                    'common.creationGuide.backgroundColor': 'rgba(81, 92, 230, 0.05)',
18314                    'common.creationGuide.border': '1px solid #515ce6',
18315
18316                    // month header 'dayname'
18317                    'month.dayname.height': '31px',
18318                    'month.dayname.borderLeft': 'none',
18319                    'month.dayname.paddingLeft': '10px',
18320                    'month.dayname.paddingRight': '0',
18321                    'month.dayname.backgroundColor': 'inherit',
18322                    'month.dayname.fontSize': '12px',
18323                    'month.dayname.fontWeight': 'normal',
18324                    'month.dayname.textAlign': 'left',
18325
18326                    // month day grid cell 'day'
18327                    'month.holidayExceptThisMonth.color': 'rgba(255, 64, 64, 0.4)',
18328                    'month.dayExceptThisMonth.color': 'rgba(51, 51, 51, 0.4)',
18329                    'month.weekend.backgroundColor': 'inherit',
18330                    'month.day.fontSize': '14px',
18331
18332                    // month schedule style
18333                    'month.schedule.borderRadius': '2px',
18334                    'month.schedule.height': '24px',
18335                    'month.schedule.marginTop': '2px',
18336                    'month.schedule.marginLeft': '8px',
18337                    'month.schedule.marginRight': '8px',
18338
18339                    // month more view
18340                    'month.moreView.border': '1px solid #d5d5d5',
18341                    'month.moreView.boxShadow': '0 2px 6px 0 rgba(0, 0, 0, 0.1)',
18342                    'month.moreView.backgroundColor': 'white',
18343                    'month.moreView.paddingBottom': '17px',
18344                    'month.moreViewTitle.height': '44px',
18345                    'month.moreViewTitle.marginBottom': '12px',
18346                    'month.moreViewTitle.borderBottom': 'none',
18347                    'month.moreViewTitle.padding': '12px 17px 0 17px',
18348                    'month.moreViewList.padding': '0 17px',
18349
18350                    // week header 'dayname'
18351                    'week.dayname.height': '42px',
18352                    'week.dayname.borderTop': '1px solid #e5e5e5',
18353                    'week.dayname.borderBottom': '1px solid #e5e5e5',
18354                    'week.dayname.borderLeft': 'none',
18355                    'week.dayname.paddingLeft': '0',
18356                    'week.dayname.backgroundColor': 'inherit',
18357                    'week.dayname.textAlign': 'left',
18358                    'week.today.color': 'inherit',
18359                    'week.pastDay.color': '#bbb',
18360
18361                    // week vertical panel 'vpanel'
18362                    'week.vpanelSplitter.border': '1px solid #e5e5e5',
18363                    'week.vpanelSplitter.height': '3px',
18364
18365                    // week daygrid 'daygrid'
18366                    'week.daygrid.borderRight': '1px solid #e5e5e5',
18367                    'week.daygrid.backgroundColor': 'inherit',
18368
18369                    'week.daygridLeft.width': '72px',
18370                    'week.daygridLeft.backgroundColor': 'inherit',
18371                    'week.daygridLeft.paddingRight': '8px',
18372                    'week.daygridLeft.borderRight': '1px solid #e5e5e5',
18373
18374                    'week.today.backgroundColor': 'rgba(81, 92, 230, 0.05)',
18375                    'week.weekend.backgroundColor': 'inherit',
18376
18377                    // week timegrid 'timegrid'
18378                    'week.timegridLeft.width': '72px',
18379                    'week.timegridLeft.backgroundColor': 'inherit',
18380                    'week.timegridLeft.borderRight': '1px solid #e5e5e5',
18381                    'week.timegridLeft.fontSize': '11px',
18382
18383                    'week.timegridOneHour.height': '52px',
18384                    'week.timegridHalfHour.height': '26px',
18385                    'week.timegridHalfHour.borderBottom': 'none',
18386                    'week.timegridHorizontalLine.borderBottom': '1px solid #e5e5e5',
18387
18388                    'week.timegrid.paddingRight': '8px',
18389                    'week.timegrid.borderRight': '1px solid #e5e5e5',
18390                    'week.timegridSchedule.borderRadius': '2px',
18391                    'week.timegridSchedule.paddingLeft': '2px',
18392
18393                    'week.currentTime.color': '#515ce6',
18394                    'week.currentTime.fontSize': '11px',
18395                    'week.currentTime.fontWeight': 'normal',
18396
18397                    'week.currentTimeLinePast.border': '1px dashed #515ce6',
18398                    'week.currentTimeLineBullet.backgroundColor': '#515ce6',
18399                    'week.currentTimeLineToday.border': '1px solid #515ce6',
18400                    'week.currentTimeLineFuture.border': 'none',
18401
18402                    // week creation guide style
18403                    'week.creationGuide.color': '#515ce6',
18404                    'week.creationGuide.fontSize': '11px',
18405                    'week.creationGuide.fontWeight': 'bold',
18406
18407                    // week daygrid schedule style
18408                    'week.dayGridSchedule.borderRadius': '2px',
18409                    'week.dayGridSchedule.height': '24px',
18410                    'week.dayGridSchedule.marginTop': '2px',
18411                    'week.dayGridSchedule.marginLeft': '8px',
18412                    'week.dayGridSchedule.marginRight': '8px'
18413                };
18414
18415                module.exports = theme;
18416
18417
18418                /***/ }),
18419
18420            
18420/***/ "./src/js/theme/theme.js":
18421            /*!*******************************!*\
18422  !*** ./src/js/theme/theme.js ***!
18423  \*******************************/
18424            /*! no static exports found */
18425            /***/ (function(module, exports, __webpack_require__) {
18426
18427                "use strict";
18428                /**
18429                 * @fileoverview The all configuration of a theme
18430                 * @author NHN FE Development Lab <[email protected]>
18431                 */
18432
18433
18434                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
18435                var themeStandard = __webpack_require__(/*! ./standard */ "./src/js/theme/standard.js");
18436                var themeConfig = __webpack_require__(/*! ./themeConfig */ "./src/js/theme/themeConfig.js");
18437                var common = __webpack_require__(/*! ../common/common */ "./src/js/common/common.js");
18438
18439                /**
18440                 * Theme manager
18441                 * @param {object} customTheme - custom theme
18442                 */
18443                function Theme(customTheme) {
18444                    var theme = customTheme || themeStandard;
18445
18446                    /**
18447                     * @type {util.HashMap}
18448                     */
18449                    this._map = new util.HashMap();
18450
18451                    this.setStyles(theme);
18452                }
18453
18454                /**
18455                 * Get a style with key
18456                 * @param {string} key - key for getting a style
18457                 * @returns {string|undefined} style
18458                 */
18459                Theme.prototype.getStyle = function(key) {
18460                    return this._map.get(key);
18461                };
18462
18463                /**
18464                 * Set a style
18465                 * @param {string} key - key for setting a style
18466                 * @param {string} style - style value
18467                 * @returns {boolean} true if the give key is valid or false
18468                 */
18469                Theme.prototype.setStyle = function(key, style) {
18470                    var styles = {};
18471                    styles[key] = style;
18472
18473                    return this.setStyles(styles).length === 0;
18474                };
18475
18476                /**
18477                 * Set styles
18478                 * @param {object} styles - multiple styles map
18479                 * @returns {Array.<string>} error keys
18480                 */
18481                Theme.prototype.setStyles = function(styles) {
18482                    var errors = [];
18483
18484                    util.forEach(styles, function(style, key) {
18485                        if (util.isUndefined(themeConfig[key])) {
18486                            errors.push(key);
18487                        } else {
18488                            this._map.set(key, style);
18489                            common.set(this, key, style);
18490                        }
18491                    }, this);
18492
18493                    // apply missing styles which have to be default
18494                    util.forEach(themeConfig, function(style, key) {
18495                        if (!this.getStyle(key)) {
18496                            this._map.set(key, style);
18497                            common.set(this, key, style);
18498                        }
18499                    }, this);
18500
18501                    return errors;
18502                };
18503
18504                /**
18505                 * Delete all styles
18506                 */
18507                Theme.prototype.clear = function() {
18508                    var keys = this._map.keys();
18509                    var categories = {};
18510                    util.forEach(keys, function(key) {
18511                        var category = key.split('.')[0];
18512                        if (!categories[category]) {
18513                            categories[category] = category;
18514                        }
18515                    });
18516
18517                    util.forEach(categories, function(child) {
18518                        delete this[child];
18519                    }, this);
18520
18521                    this._map.removeAll();
18522                };
18523
18524                module.exports = Theme;
18525
18526
18527                /***/ }),
18528
18529            
18529/***/ "./src/js/theme/themeConfig.js":
18530            /*!*************************************!*\
18531  !*** ./src/js/theme/themeConfig.js ***!
18532  \*************************************/
18533            /*! no static exports found */
18534            /***/ (function(module, exports, __webpack_require__) {
18535
18536                "use strict";
18537                /**
18538                 * @fileoverview The all configuration of a theme
18539                 * @author NHN FE Development Lab <[email protected]>
18540                 */
18541
18542
18543                /**
18544                 * Full configuration for theme.
18545                 * "common" prefix is for entire calendar. "common" properties can be overriden by "week", "month".
18546                 * "week" prefix is for weekly and daily view.
18547                 * "month" prefix is for monthly view.
18548                 * @typedef {object} themeConfig
18549                 * @example
18550                 // default keys and styles
18551                 var themeConfig = {
18552    'common.border': '1px solid #e5e5e5',
18553    'common.backgroundColor': 'white',
18554    'common.holiday.color': '#ff4040',
18555    'common.saturday.color': '#333',
18556    'common.dayname.color': '#333',
18557    'common.today.color': '#333',
18558
18559    // creation guide style
18560    'common.creationGuide.backgroundColor': 'rgba(81, 92, 230, 0.05)',
18561    'common.creationGuide.border': '1px solid #515ce6',
18562
18563    // month header 'dayname'
18564    'month.dayname.height': '31px',
18565    'month.dayname.borderLeft': '1px solid #e5e5e5',
18566    'month.dayname.paddingLeft': '10px',
18567    'month.dayname.paddingRight': '10px',
18568    'month.dayname.backgroundColor': 'inherit',
18569    'month.dayname.fontSize': '12px',
18570    'month.dayname.fontWeight': 'normal',
18571    'month.dayname.textAlign': 'left',
18572
18573    // month day grid cell 'day'
18574    'month.holidayExceptThisMonth.color': 'rgba(255, 64, 64, 0.4)',
18575    'month.dayExceptThisMonth.color': 'rgba(51, 51, 51, 0.4)',
18576    'month.weekend.backgroundColor': 'inherit',
18577    'month.day.fontSize': '14px',
18578
18579    // month schedule style
18580    'month.schedule.borderRadius': '2px',
18581    'month.schedule.height': '24px',
18582    'month.schedule.marginTop': '2px',
18583    'month.schedule.marginLeft': '8px',
18584    'month.schedule.marginRight': '8px',
18585
18586    // month more view
18587    'month.moreView.border': '1px solid #d5d5d5',
18588    'month.moreView.boxShadow': '0 2px 6px 0 rgba(0, 0, 0, 0.1)',
18589    'month.moreView.backgroundColor': 'white',
18590    'month.moreView.paddingBottom': '17px',
18591    'month.moreViewTitle.height': '44px',
18592    'month.moreViewTitle.marginBottom': '12px',
18593    'month.moreViewTitle.backgroundColor': 'inherit',
18594    'month.moreViewTitle.borderBottom': 'none',
18595    'month.moreViewTitle.padding': '12px 17px 0 17px',
18596    'month.moreViewList.padding': '0 17px',
18597
18598    // week header 'dayname'
18599    'week.dayname.height': '42px',
18600    'week.dayname.borderTop': '1px solid #e5e5e5',
18601    'week.dayname.borderBottom': '1px solid #e5e5e5',
18602    'week.dayname.borderLeft': 'inherit',
18603    'week.dayname.paddingLeft': '0',
18604    'week.dayname.backgroundColor': 'inherit',
18605    'week.dayname.textAlign': 'left',
18606    'week.today.color': '#333',
18607    'week.pastDay.color': '#bbb',
18608
18609    // week vertical panel 'vpanel'
18610    'week.vpanelSplitter.border': '1px solid #e5e5e5',
18611    'week.vpanelSplitter.height': '3px',
18612
18613    // week daygrid 'daygrid'
18614    'week.daygrid.borderRight': '1px solid #e5e5e5',
18615    'week.daygrid.backgroundColor': 'inherit',
18616
18617    'week.daygridLeft.width': '72px',
18618    'week.daygridLeft.backgroundColor': 'inherit',
18619    'week.daygridLeft.paddingRight': '8px',
18620    'week.daygridLeft.borderRight': '1px solid #e5e5e5',
18621
18622    'week.today.backgroundColor': 'rgba(81, 92, 230, 0.05)',
18623    'week.weekend.backgroundColor': 'inherit',
18624
18625    // week timegrid 'timegrid'
18626    'week.timegridLeft.width': '72px',
18627    'week.timegridLeft.backgroundColor': 'inherit',
18628    'week.timegridLeft.borderRight': '1px solid #e5e5e5',
18629    'week.timegridLeft.fontSize': '11px',
18630    'week.timegridLeftTimezoneLabel.height': '40px',
18631    'week.timegridLeftAdditionalTimezone.backgroundColor': 'white',
18632
18633    'week.timegridOneHour.height': '52px',
18634    'week.timegridHalfHour.height': '26px',
18635    'week.timegridHalfHour.borderBottom': 'none',
18636    'week.timegridHorizontalLine.borderBottom': '1px solid #e5e5e5',
18637
18638    'week.timegrid.paddingRight': '8px',
18639    'week.timegrid.borderRight': '1px solid #e5e5e5',
18640    'week.timegridSchedule.borderRadius': '2px',
18641    'week.timegridSchedule.paddingLeft': '2px',
18642
18643    'week.currentTime.color': '#515ce6',
18644    'week.currentTime.fontSize': '11px',
18645    'week.currentTime.fontWeight': 'normal',
18646
18647    'week.pastTime.color': '#bbb',
18648    'week.pastTime.fontWeight': 'normal',
18649
18650    'week.futureTime.color': '#333',
18651    'week.futureTime.fontWeight': 'normal',
18652
18653    'week.currentTimeLinePast.border': '1px dashed #515ce6',
18654    'week.currentTimeLineBullet.backgroundColor': '#515ce6',
18655    'week.currentTimeLineToday.border': '1px solid #515ce6',
18656    'week.currentTimeLineFuture.border': 'none',
18657
18658    // week creation guide style
18659    'week.creationGuide.color': '#515ce6',
18660    'week.creationGuide.fontSize': '11px',
18661    'week.creationGuide.fontWeight': 'bold',
18662
18663    // week daygrid schedule style
18664    'week.dayGridSchedule.borderRadius': '2px',
18665    'week.dayGridSchedule.height': '24px',
18666    'week.dayGridSchedule.marginTop': '2px',
18667    'week.dayGridSchedule.marginLeft': '8px',
18668    'week.dayGridSchedule.marginRight': '8px'
18669};
18670                 */
18671                var themeConfig = {
18672                    'common.border': '1px solid #e5e5e5',
18673                    'common.backgroundColor': 'white',
18674                    'common.holiday.color': '#ff4040',
18675                    'common.saturday.color': '#333',
18676                    'common.dayname.color': '#333',
18677                    'common.today.color': '#333',
18678
18679                    // creation guide style
18680                    'common.creationGuide.backgroundColor': 'rgba(81, 92, 230, 0.05)',
18681                    'common.creationGuide.border': '1px solid #515ce6',
18682
18683                    // month header 'dayname'
18684                    'month.dayname.height': '31px',
18685                    'month.dayname.borderLeft': '1px solid #e5e5e5',
18686                    'month.dayname.paddingLeft': '10px',
18687                    'month.dayname.paddingRight': '10px',
18688                    'month.dayname.backgroundColor': 'inherit',
18689                    'month.dayname.fontSize': '12px',
18690                    'month.dayname.fontWeight': 'normal',
18691                    'month.dayname.textAlign': 'left',
18692
18693                    // month day grid cell 'day'
18694                    'month.holidayExceptThisMonth.color': 'rgba(255, 64, 64, 0.4)',
18695                    'month.dayExceptThisMonth.color': 'rgba(51, 51, 51, 0.4)',
18696                    'month.weekend.backgroundColor': 'inherit',
18697                    'month.day.fontSize': '14px',
18698
18699                    // month schedule style
18700                    'month.schedule.borderRadius': '2px',
18701                    'month.schedule.height': '24px',
18702                    'month.schedule.marginTop': '2px',
18703                    'month.schedule.marginLeft': '8px',
18704                    'month.schedule.marginRight': '8px',
18705
18706                    // month more view
18707                    'month.moreView.border': '1px solid #d5d5d5',
18708                    'month.moreView.boxShadow': '0 2px 6px 0 rgba(0, 0, 0, 0.1)',
18709                    'month.moreView.backgroundColor': 'white',
18710                    'month.moreView.paddingBottom': '17px',
18711                    'month.moreViewTitle.height': '44px',
18712                    'month.moreViewTitle.marginBottom': '12px',
18713                    'month.moreViewTitle.backgroundColor': 'inherit',
18714                    'month.moreViewTitle.borderBottom': 'none',
18715                    'month.moreViewTitle.padding': '12px 17px 0 17px',
18716                    'month.moreViewList.padding': '0 17px',
18717
18718                    // week header 'dayname'
18719                    'week.dayname.height': '42px',
18720                    'week.dayname.borderTop': '1px solid #e5e5e5',
18721                    'week.dayname.borderBottom': '1px solid #e5e5e5',
18722                    'week.dayname.borderLeft': 'inherit',
18723                    'week.dayname.paddingLeft': '0',
18724                    'week.dayname.backgroundColor': 'inherit',
18725                    'week.dayname.textAlign': 'left',
18726                    'week.today.color': '#333',
18727                    'week.pastDay.color': '#bbb',
18728
18729                    // week vertical panel 'vpanel'
18730                    'week.vpanelSplitter.border': '1px solid #e5e5e5',
18731                    'week.vpanelSplitter.height': '3px',
18732
18733                    // week daygrid 'daygrid'
18734                    'week.daygrid.borderRight': '1px solid #e5e5e5',
18735                    'week.daygrid.backgroundColor': 'inherit',
18736
18737                    'week.daygridLeft.width': '72px',
18738                    'week.daygridLeft.backgroundColor': 'inherit',
18739                    'week.daygridLeft.paddingRight': '8px',
18740                    'week.daygridLeft.borderRight': '1px solid #e5e5e5',
18741
18742                    'week.today.backgroundColor': 'rgba(81, 92, 230, 0.05)',
18743                    'week.weekend.backgroundColor': 'inherit',
18744
18745                    // week timegrid 'timegrid'
18746                    'week.timegridLeft.width': '72px',
18747                    'week.timegridLeft.backgroundColor': 'inherit',
18748                    'week.timegridLeft.borderRight': '1px solid #e5e5e5',
18749                    'week.timegridLeft.fontSize': '11px',
18750                    'week.timegridLeftTimezoneLabel.height': '40px',
18751                    'week.timegridLeftAdditionalTimezone.backgroundColor': 'white',
18752
18753                    'week.timegridOneHour.height': '52px',
18754                    'week.timegridHalfHour.height': '26px',
18755                    'week.timegridHalfHour.borderBottom': 'none',
18756                    'week.timegridHorizontalLine.borderBottom': '1px solid #e5e5e5',
18757
18758                    'week.timegrid.paddingRight': '8px',
18759                    'week.timegrid.borderRight': '1px solid #e5e5e5',
18760                    'week.timegridSchedule.borderRadius': '2px',
18761                    'week.timegridSchedule.paddingLeft': '2px',
18762
18763                    'week.currentTime.color': '#515ce6',
18764                    'week.currentTime.fontSize': '11px',
18765                    'week.currentTime.fontWeight': 'normal',
18766
18767                    'week.pastTime.color': '#bbb',
18768                    'week.pastTime.fontWeight': 'normal',
18769
18770                    'week.futureTime.color': '#333',
18771                    'week.futureTime.fontWeight': 'normal',
18772
18773                    'week.currentTimeLinePast.border': '1px dashed #515ce6',
18774                    'week.currentTimeLineBullet.backgroundColor': '#515ce6',
18775                    'week.currentTimeLineToday.border': '1px solid #515ce6',
18776                    'week.currentTimeLineFuture.border': 'none',
18777
18778                    // week creation guide style
18779                    'week.creationGuide.color': '#515ce6',
18780                    'week.creationGuide.fontSize': '11px',
18781                    'week.creationGuide.fontWeight': 'bold',
18782
18783                    // week daygrid schedule style
18784                    'week.dayGridSchedule.borderRadius': '2px',
18785                    'week.dayGridSchedule.height': '24px',
18786                    'week.dayGridSchedule.marginTop': '2px',
18787                    'week.dayGridSchedule.marginLeft': '8px',
18788                    'week.dayGridSchedule.marginRight': '8px'
18789                };
18790
18791                module.exports = themeConfig;
18792
18793
18794                /***/ }),
18795
18796            
18796/***/ "./src/js/view/layout.js":
18797            /*!*******************************!*\
18798  !*** ./src/js/view/layout.js ***!
18799  \*******************************/
18800            /*! no static exports found */
18801            /***/ (function(module, exports, __webpack_require__) {
18802
18803                "use strict";
18804                /**
18805                 * @fileoverview Layout view. wrap all view containers at outside.
18806                 * @author NHN FE Development Lab <[email protected]>
18807                 */
18808
18809
18810                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
18811                var config = __webpack_require__(/*! ../config */ "./src/js/config.js");
18812                var domutil = __webpack_require__(/*! ../common/domutil */ "./src/js/common/domutil.js");
18813                var Collection = __webpack_require__(/*! ../common/collection */ "./src/js/common/collection.js");
18814                var View = __webpack_require__(/*! ./view */ "./src/js/view/view.js");
18815
18816                /**
18817                 * Layout view for toggle each child view. It will controlled via navigation UI.
18818                 * @constructor
18819                 * @extends {View}
18820                 * @param {HTMLElement} container Container element to use layout view.
18821                 * @param {Theme} theme - theme instance
18822                 */
18823                function Layout(container, theme) {
18824                    container = domutil.appendHTMLElement('div', container, config.classname('layout'));
18825
18826                    /**
18827                     * @type {HTMLElement}
18828                     */
18829                    this.container = container;
18830
18831                    /*eslint-disable*/
18832                    /**
18833                     * @type {Collection} Child view collection.
18834                     */
18835                    this.children = new Collection(function(childView) {
18836                        return childView.viewName;
18837                    });
18838                    /* eslint-enable*/
18839
18840                    /**
18841                     * @type {Theme}
18842                     */
18843                    this.theme = theme;
18844
18845                    this.applyTheme();
18846                }
18847
18848                util.inherit(Layout, View);
18849
18850                /**
18851                 * Clear child views.
18852                 */
18853                Layout.prototype.clear = function() {
18854                    this.children.each(function(childView) {
18855                        childView.destroy();
18856                    });
18857
18858                    this.children.clear();
18859                    this.container.innerHTML = '';
18860                };
18861
18862                /**
18863                 * Remove child view.
18864                 * @override
18865                 * @param {(string|View)} viewName - name of view or instance.
18866                 */
18867                Layout.prototype.removeChild = function(viewName) {
18868                    this.children.remove(viewName);
18869                };
18870
18871                /**
18872                 * Toggle child views.
18873                 * @param {string} viewName - Name of view.
18874                 */
18875                Layout.prototype.toggleChildView = function(viewName) {
18876                    var container,
18877                        prefix = ['add', 'remove'],
18878                        flag;
18879
18880                    this.children.each(function(childView) {
18881                        container = childView.container;
18882                        flag = Number(childView.viewName === viewName);
18883                        domutil[prefix[flag] + 'Class'](container, config.classname('hidden'));
18884                    });
18885                };
18886
18887                Layout.prototype.applyTheme = function() {
18888                    var style = this.container.style;
18889                    var theme = this.theme.common;
18890
18891                    // background color
18892                    style.backgroundColor = theme.backgroundColor;
18893                };
18894
18895                module.exports = Layout;
18896
18897
18898                /***/ }),
18899
18900            
18900/***/ "./src/js/view/month/month.js":
18901            /*!************************************!*\
18902  !*** ./src/js/view/month/month.js ***!
18903  \************************************/
18904            /*! no static exports found */
18905            /***/ (function(module, exports, __webpack_require__) {
18906
18907                "use strict";
18908                /**
18909                 * @fileoverview Month view
18910                 * @author NHN FE Development Lab <[email protected]>
18911                 */
18912
18913
18914                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
18915                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js"),
18916                    datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js"),
18917                    domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js"),
18918                    TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date,
18919                    tmpl = __webpack_require__(/*! ../template/month/month.hbs */ "./src/js/view/template/month/month.hbs"),
18920                    View = __webpack_require__(/*! ../view */ "./src/js/view/view.js"),
18921                    VLayout = __webpack_require__(/*! ../..//common/vlayout */ "./src/js/common/vlayout.js"),
18922                    WeekdayInMonth = __webpack_require__(/*! ./weekdayInMonth */ "./src/js/view/month/weekdayInMonth.js");
18923                var mmin = Math.min;
18924
18925                /**
18926                 * @constructor
18927                 * @extends {View}
18928                 * @param {object} options - options
18929                 * @param {function} [options.scheduleFilter] - schedule filter
18930                 * @param {number} [options.startDayOfWeek=0] - start day of week
18931                 * @param {string} [options.renderMonth='2015-12'] - render month
18932                 * @param {string[]} [options.daynames] - daynames to use upside of month view
18933                 * @param {HTMLElement} container - container element
18934                 * @param {Base.Month} controller - controller instance
18935                 */
18936                function Month(options, container, controller) {
18937                    var theme = controller ? controller.theme : null;
18938                    var monthOption;
18939
18940                    options = options || {};
18941                    monthOption = options ? options.month : {};
18942
18943                    View.call(this, container);
18944
18945                    /**
18946                     * @type {Base.Month}
18947                     */
18948                    this.controller = controller;
18949
18950                    /**
18951                     * @type {VLayout}
18952                     */
18953                    this.vLayout = new VLayout({
18954                        panels: [
18955                            {height: parseInt(controller.theme.month.dayname.height, 10) || 42},
18956                            {autoHeight: true}
18957                        ]
18958                    }, container, theme);
18959
18960                    /**
18961                     * @type {string}
18962                     */
18963                    this.options = util.extend({
18964                        scheduleFilter: function(schedule) {
18965                            return Boolean(schedule.isVisible);
18966                        },
18967                        startDayOfWeek: 0,
18968                        renderMonth: '2018-01',
18969                        daynames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
18970                        narrowWeekend: false,
18971                        visibleWeeksCount: null,
18972                        isAlways6Week: true,
18973                        isReadOnly: options.isReadOnly,
18974                        grid: {
18975                            header: {
18976                                height: 34
18977                            },
18978                            footer: {
18979                                height: 3
18980                            }
18981                        }
18982                    }, monthOption);
18983
18984                    this.options.grid.header = util.extend({
18985                        height: 34
18986                    }, util.pick(monthOption, 'grid', 'header'));
18987                    this.options.grid.footer = util.extend({
18988                        height: 3
18989                    }, util.pick(monthOption, 'grid', 'footer'));
18990
18991                    /**
18992                     * horizontal grid information
18993                     * @type {Object}
18994                     */
18995                    this.grids = datetime.getGridLeftAndWidth(
18996                        this.options.daynames.length,
18997                        this.options.narrowWeekend,
18998                        this.options.startDayOfWeek);
18999                }
19000
19001                util.inherit(Month, View);
19002
19003                /**
19004                 * Name of view. for managing subview at layout view
19005                 * @type {string}
19006                 */
19007                Month.prototype.viewName = 'month';
19008
19009                /**
19010                 * Get calendar array by supplied date
19011                 * @param {string} renderMonth - month to render YYYY-MM, weeks2/3 to render YYYY-MM-DD
19012                 * @returns {array.<Date[]>} calendar array
19013                 */
19014                Month.prototype._getMonthCalendar = function(renderMonth) {
19015                    var date = new TZDate(renderMonth);
19016                    var startDayOfWeek = this.options.startDayOfWeek || 0;
19017                    var visibleWeeksCount = mmin(this.options.visibleWeeksCount || 0, 6);
19018                    var workweek = this.options.workweek || false;
19019                    var datetimeOptions, calendar;
19020
19021                    if (this.options.visibleWeeksCount) {
19022                        datetimeOptions = {
19023                            startDayOfWeek: startDayOfWeek,
19024                            isAlways6Week: false,
19025                            visibleWeeksCount: visibleWeeksCount,
19026                            workweek: workweek
19027                        };
19028                    } else {
19029                        datetimeOptions = {
19030                            startDayOfWeek: startDayOfWeek,
19031                            isAlways6Week: this.options.isAlways6Week,
19032                            workweek: workweek
19033                        };
19034                    }
19035
19036                    calendar = datetime.arr2dCalendar(date, datetimeOptions);
19037
19038                    return calendar;
19039                };
19040
19041                /**
19042                 * Create children view (week) and add children
19043                 * @param {HTMLElement} container - container element to render weeks
19044                 * @param {array.<Date[]>} calendar - calendar array from datetime#arr2dCalendar
19045                 * @param {Theme} theme - theme instance
19046                 */
19047                Month.prototype._renderChildren = function(container, calendar, theme) {
19048                    var self = this;
19049                    var weekCount = calendar.length;
19050                    var heightPercent = 100 / weekCount;
19051                    var opt = this.options;
19052                    var renderMonth = opt.renderMonth;
19053                    var narrowWeekend = opt.narrowWeekend;
19054                    var startDayOfWeek = opt.startDayOfWeek;
19055                    var visibleWeeksCount = opt.visibleWeeksCount;
19056                    var visibleScheduleCount = opt.visibleScheduleCount;
19057                    var gridOption = opt.grid;
19058                    var isReadOnly = opt.isReadOnly;
19059
19060                    container.innerHTML = '';
19061                    this.children.clear();
19062
19063                    util.forEach(calendar, function(weekArr) {
19064                        var start = new TZDate(weekArr[0]),
19065                            end = new TZDate(weekArr[weekArr.length - 1]),
19066                            weekdayViewContainer,
19067                            weekdayView;
19068
19069                        weekdayViewContainer = domutil.appendHTMLElement(
19070                            'div', container, config.classname('month-week-item'));
19071
19072                        weekdayView = new WeekdayInMonth({
19073                            renderMonth: renderMonth,
19074                            heightPercent: heightPercent,
19075                            renderStartDate: start,
19076                            renderEndDate: end,
19077                            narrowWeekend: narrowWeekend,
19078                            startDayOfWeek: startDayOfWeek,
19079                            visibleWeeksCount: visibleWeeksCount,
19080                            visibleScheduleCount: visibleScheduleCount,
19081                            grid: gridOption,
19082                            scheduleHeight: parseInt(theme.month.schedule.height, 10),
19083                            scheduleGutter: parseInt(theme.month.schedule.marginTop, 10),
19084                            isReadOnly: isReadOnly
19085                        }, weekdayViewContainer);
19086
19087                        self.addChild(weekdayView);
19088                    });
19089                };
19090
19091                /**
19092                 * Render month view
19093                 * @override
19094                 */
19095                Month.prototype.render = function() {
19096                    var self = this,
19097                        opt = this.options,
19098                        vLayout = this.vLayout,
19099                        controller = this.controller,
19100                        daynames = opt.daynames,
19101                        workweek = opt.workweek,
19102                        calendar = this._getMonthCalendar(opt.renderMonth),
19103                        scheduleFilter = opt.scheduleFilter,
19104                        theme = controller ? controller.theme : null,
19105                        styles = this._getStyles(theme),
19106                        grids,
19107                        daynameViewModel,
19108                        baseViewModel;
19109
19110                    grids = this.grids = datetime.getGridLeftAndWidth(
19111                        opt.daynames.length,
19112                        opt.narrowWeekend,
19113                        opt.startDayOfWeek
19114                    );
19115
19116                    daynameViewModel = util.map(
19117                        util.range(opt.startDayOfWeek, 7).concat(util.range(7)).slice(0, 7),
19118                        function(day, index) {
19119                            return {
19120                                day: day,
19121                                label: daynames[day],
19122                                width: grids[index] ? grids[index].width : 0,
19123                                left: grids[index] ? grids[index].left : 0,
19124                                color: this._getDayNameColor(theme, day)
19125                            };
19126                        },
19127                        this
19128                    );
19129
19130                    if (workweek) {
19131                        grids = this.grids = datetime.getGridLeftAndWidth(5, opt.narrowWeekend, opt.startDayOfWeek, workweek);
19132
19133                        daynameViewModel = util.filter(daynameViewModel, function(daynameModel) {
19134                            return !datetime.isWeekend(daynameModel.day);
19135                        });
19136
19137                        util.forEach(daynameViewModel, function(daynameModel, index) {
19138                            daynameModel.width = grids[index] ? grids[index].width : 0;
19139                            daynameModel.left = grids[index] ? grids[index].left : 0;
19140                        });
19141                    }
19142
19143                    baseViewModel = {
19144                        daynames: daynameViewModel,
19145                        styles: styles
19146                    };
19147
19148                    vLayout.panels[0].container.innerHTML = tmpl(baseViewModel);
19149
19150                    this._renderChildren(vLayout.panels[1].container, calendar, theme);
19151
19152                    baseViewModel.panelHeight = vLayout.panels[1].getHeight();
19153
19154                    this.children.each(function(childView) {
19155                        var start = datetime.start(childView.options.renderStartDate);
19156                        var end = datetime.start(childView.options.renderEndDate);
19157                        var eventsInDateRange = controller.findByDateRange(
19158                            datetime.start(start),
19159                            datetime.end(end),
19160                            scheduleFilter
19161                        );
19162                        var dateRange = datetime.range(
19163                            datetime.start(start),
19164                            datetime.end(end),
19165                            datetime.MILLISECONDS_PER_DAY);
19166                        var viewModel = {
19167                            eventsInDateRange: eventsInDateRange,
19168                            range: dateRange.slice(0, grids.length),
19169                            grids: grids,
19170                            panelHeight: baseViewModel.panelHeight,
19171                            theme: theme
19172                        };
19173
19174                        childView.render(viewModel);
19175
19176                        self._invokeAfterRenderSchedule(eventsInDateRange);
19177                    });
19178                };
19179
19180                /**
19181                 * Fire 'afterRenderSchedule' event
19182                 * @param {Array} matrices - schedule matrices from view model
19183                 * @fires Month#afterRenderSchedule
19184                 */
19185                Month.prototype._invokeAfterRenderSchedule = function(matrices) {
19186                    var self = this;
19187                    util.forEachArray(matrices, function(matrix) {
19188                        util.forEachArray(matrix, function(column) {
19189                            util.forEachArray(column, function(scheduleViewModel) {
19190                                if (scheduleViewModel && !scheduleViewModel.hidden) {
19191                                    /**
19192                                     * @event Month#afterRenderSchedule
19193                                     */
19194                                    self.fire('afterRenderSchedule', {schedule: scheduleViewModel.model});
19195                                }
19196                            });
19197                        });
19198                    });
19199                };
19200
19201                /**
19202                 * Get the styles from theme
19203                 * @param {Theme} theme - theme instance
19204                 * @returns {object} styles - styles object
19205                 */
19206                Month.prototype._getStyles = function(theme) {
19207                    var styles = {};
19208                    var dayname;
19209
19210                    if (theme) {
19211                        dayname = theme.month.dayname;
19212
19213                        styles.borderTop = dayname.borderTop || theme.common.border;
19214                        styles.borderLeft = dayname.borderLeft || theme.common.border;
19215                        styles.height = dayname.height;
19216                        styles.paddingLeft = dayname.paddingLeft;
19217                        styles.paddingRight = dayname.paddingRight;
19218                        styles.fontSize = dayname.fontSize;
19219                        styles.backgroundColor = dayname.backgroundColor;
19220                        styles.fontWeight = dayname.fontWeight;
19221                        styles.textAlign = dayname.textAlign;
19222                    }
19223
19224                    return styles;
19225                };
19226
19227                /**
19228                 * Get a day name color
19229                 * @param {Theme} theme - theme instance
19230                 * @param {number} day - day number
19231                 * @returns {string} style - color style
19232                 */
19233                Month.prototype._getDayNameColor = function(theme, day) {
19234                    var color = '';
19235
19236                    if (theme) {
19237                        if (day === 0) {
19238                            color = theme.common.holiday.color;
19239                        } else if (day === 6) {
19240                            color = theme.common.saturday.color;
19241                        } else {
19242                            color = theme.common.dayname.color;
19243                        }
19244                    }
19245
19246                    return color;
19247                };
19248
19249                module.exports = Month;
19250
19251
19252                /***/ }),
19253
19254            
19254/***/ "./src/js/view/month/more.js":
19255            /*!***********************************!*\
19256  !*** ./src/js/view/month/more.js ***!
19257  \***********************************/
19258            /*! no static exports found */
19259            /***/ (function(module, exports, __webpack_require__) {
19260
19261                "use strict";
19262                /**
19263                 * @fileoverview Floating layer for displaying schedule in specific date
19264                 * @author NHN FE Development Lab <[email protected]>
19265                 */
19266
19267
19268                var OUT_PADDING = 5;
19269                var VIEW_MIN_WIDTH = 280;
19270                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
19271                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js"),
19272                    domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js"),
19273                    domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js"),
19274                    View = __webpack_require__(/*! ../../view/view */ "./src/js/view/view.js"),
19275                    FloatingLayer = __webpack_require__(/*! ../../common/floatingLayer */ "./src/js/common/floatingLayer.js"),
19276                    common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js"),
19277                    tmpl = __webpack_require__(/*! ../template/month/more.hbs */ "./src/js/view/template/month/more.hbs");
19278
19279                /**
19280                 * @constructor
19281                 * @extends {View}
19282                 * @param {object} options - options
19283                 * @param {object} [options.moreLayerSize] - more layer size
19284                 * @param {object} [options.moreLayerSize.width=null] - css width value(px, auto).
19285                 *                                                           The default value 'null' is to fit a grid cell.
19286                 * @param {object} [options.moreLayerSize.height=null] - css height value(px, auto).
19287                 *                                                            The default value 'null' is to fit a grid cell.
19288                 * @param {HTMLElement} container = container element
19289                 * @param {Theme} theme - theme instance
19290                 */
19291                function More(options, container, theme) {
19292                    View.call(this, container);
19293
19294                    /**
19295                     * @type {FloatingLayer}
19296                     */
19297                    this.layer = new FloatingLayer(null, container);
19298
19299                    /**
19300                     * cached view model
19301                     * @type {object}
19302                     */
19303                    this._viewModel = null;
19304
19305                    /**
19306                     * @type {object}
19307                     */
19308                    this.options = util.extend({
19309                        moreLayerSize: {
19310                            width: null,
19311                            height: null
19312                        },
19313                        scheduleHeight: parseInt(theme.month.schedule.height, 10) || 18,
19314                        scheduleGutter: parseInt(theme.month.schedule.marginTop, 10) || 2,
19315                        scheduleBulletTop: (parseInt(theme.month.schedule.height, 10) || 18) / 3,
19316                        borderRadius: theme.month.schedule.borderRadius
19317                    }, options);
19318
19319                    /**
19320                     * @type {Theme}
19321                     */
19322                    this.theme = theme;
19323
19324                    domevent.on(container, 'click', this._onClick, this);
19325                }
19326
19327                util.inherit(More, View);
19328
19329                /**
19330                 * Click event handler for close button
19331                 * @param {MouseEvent} clickEvent - mouse event object
19332                 */
19333                More.prototype._onClick = function(clickEvent) {
19334                    var target = (clickEvent.target || clickEvent.srcElement);
19335                    var className = config.classname('month-more-close');
19336
19337                    if (!domutil.hasClass(target, className) && !domutil.closest(target, '.' + className)) {
19338                        return;
19339                    }
19340
19341                    this.hide();
19342                };
19343
19344                /**
19345                 * Mousedown event handler for hiding more layer when user mousedown outside of
19346                 * layer
19347                 * @param {MouseEvent} mouseDownEvent - mouse event object
19348                 */
19349                More.prototype._onMouseDown = function(mouseDownEvent) {
19350                    var target = (mouseDownEvent.target || mouseDownEvent.srcElement),
19351                        moreLayer = domutil.closest(target, config.classname('.month-more'));
19352
19353                    if (moreLayer) {
19354                        return;
19355                    }
19356
19357                    this.hide();
19358                };
19359
19360                /**
19361                 * Get new position for more layer by +n element itself
19362                 * @param {HTMLElement} target - parent grid-line element of +n element
19363                 * @param {HTMLElement} weekItem - weekItem container element
19364                 * @returns {number[]} new position of more layer
19365                 */
19366                More.prototype._getRenderPosition = function(target, weekItem) {
19367                    var pos = domevent.getMousePosition({
19368                        clientX: domutil.getPosition(target)[0],
19369                        clientY: domutil.getPosition(weekItem)[1]
19370                    }, this.container);
19371                    var containerSize = domutil.getSize(this.container);
19372                    var left = pos[0] - OUT_PADDING;
19373                    var top = pos[1] - OUT_PADDING;
19374
19375                    left = common.ratio(containerSize[0], 100, left);
19376                    top = common.ratio(containerSize[1], 100, top);
19377
19378                    return [left, top];
19379                };
19380
19381                /**
19382                 * @override
19383                 */
19384                More.prototype.destroy = function() {
19385                    this.layer.destroy();
19386                    this.layer = null;
19387                    domevent.off(this.container, 'click', this._onClick, this);
19388                    domevent.off(document.body, 'mousedown', this._onMouseDown, this);
19389                    View.prototype.destroy.call(this);
19390                };
19391
19392                /**
19393                 * @override
19394                 * @param {object} viewModel - view model from factory/monthView
19395                 */
19396                More.prototype.render = function(viewModel) {
19397                    var target = domutil.closest(viewModel.target, config.classname('.weekday-grid-line'));
19398                    var weekItem = domutil.closest(target, config.classname('.month-week-item'));
19399                    var layer = this.layer;
19400                    var self = this;
19401                    var pos = this._getRenderPosition(target, weekItem);
19402                    var minHeight = domutil.getSize(weekItem)[1] + (OUT_PADDING * 2);
19403                    var width = target.offsetWidth + (OUT_PADDING * 2);
19404                    var opt = this.options;
19405                    var optMoreLayerSize = opt.moreLayerSize;
19406                    var styles = this._getStyles(this.theme);
19407                    var maxVisibleSchedulesInLayer = 10;
19408                    var height = '';
19409                    var containerSize = domutil.getSize(this.container);
19410                    var calWidth = 0;
19411                    var calHeight = 0;
19412                    var isOverWidth = false;
19413                    var isOverHeight = false;
19414                    var leftPos = pos[0];
19415                    var topPos = pos[1];
19416
19417                    this._viewModel = util.extend(viewModel, {
19418                        scheduleGutter: opt.scheduleGutter,
19419                        scheduleHeight: opt.scheduleHeight,
19420                        scheduleBulletTop: opt.scheduleBulletTop,
19421                        borderRadius: opt.borderRadius,
19422                        styles: styles
19423                    });
19424
19425                    width = Math.max(width, VIEW_MIN_WIDTH);
19426                    height = parseInt(styles.titleHeight, 10);
19427                    height += parseInt(styles.titleMarginBottom, 10);
19428                    if (viewModel.schedules.length <= maxVisibleSchedulesInLayer) {
19429                        height += (opt.scheduleGutter + opt.scheduleHeight) * viewModel.schedules.length;
19430                    } else {
19431                        height += (opt.scheduleGutter + opt.scheduleHeight) * maxVisibleSchedulesInLayer;
19432                    }
19433                    height += parseInt(styles.paddingBottom, 10);
19434                    height += OUT_PADDING; // for border
19435
19436                    if (optMoreLayerSize.width) {
19437                        width = optMoreLayerSize.width;
19438                    }
19439
19440                    if (optMoreLayerSize.height) {
19441                        height = optMoreLayerSize.height;
19442                    }
19443
19444                    if (isNaN(height) || height < minHeight) {
19445                        height = minHeight;
19446                    }
19447
19448                    layer.setContent(tmpl(viewModel));
19449
19450                    calWidth = leftPos * containerSize[0] / 100;
19451                    calHeight = topPos * containerSize[1] / 100;
19452                    isOverWidth = calWidth + width >= containerSize[0];
19453                    isOverHeight = calHeight + height >= containerSize[1];
19454                    leftPos = leftPos + '%';
19455                    topPos = topPos + '%';
19456
19457                    if (isOverWidth && isOverHeight) {
19458                        layer.setLTRB({
19459                            right: 0,
19460                            bottom: 0
19461                        });
19462                    } else if (!isOverWidth && isOverHeight) {
19463                        layer.setLTRB({
19464                            left: leftPos,
19465                            bottom: 0
19466                        });
19467                    } else if (isOverWidth && !isOverHeight) {
19468                        layer.setLTRB({
19469                            right: 0,
19470                            top: topPos
19471                        });
19472                    } else {
19473                        layer.setPosition(leftPos, topPos);
19474                    }
19475
19476                    layer.setSize(width, height);
19477
19478                    layer.show();
19479
19480                    util.debounce(function() {
19481                        domevent.on(document.body, 'mousedown', self._onMouseDown, self);
19482                    })();
19483                };
19484
19485                /**
19486                 * Hide layer
19487                 */
19488                More.prototype.hide = function() {
19489                    this.layer.hide();
19490                    domevent.off(document.body, 'mousedown', this._onMouseDown, this);
19491                };
19492
19493                /**
19494                 * refresh layer
19495                 */
19496                More.prototype.refresh = function() {
19497                    if (this._viewModel) {
19498                        this.layer.setContent(tmpl(this._viewModel));
19499                    }
19500                };
19501
19502                /**
19503                 * Return more layer root element
19504                 * @returns {HTMLElement} root element
19505                 */
19506                More.prototype.getMoreViewElement = function() {
19507                    return domutil.find(config.classname('.month-more'), this.layer.container);
19508                };
19509
19510                /**
19511                 * Get the styles from theme
19512                 * @param {Theme} theme - theme instance
19513                 * @returns {object} styles - styles object
19514                 */
19515                More.prototype._getStyles = function(theme) {
19516                    var styles = {};
19517                    var listHeight = '';
19518
19519                    if (theme) {
19520                        styles.border = theme.month.moreView.border || theme.common.border;
19521                        styles.boxShadow = theme.month.moreView.boxShadow;
19522                        styles.backgroundColor = theme.month.moreView.backgroundColor || theme.common.backgroundColor;
19523                        styles.paddingBottom = theme.month.moreView.paddingBottom;
19524                        styles.titleHeight = theme.month.moreViewTitle.height;
19525                        styles.titleMarginBottom = theme.month.moreViewTitle.marginBottom;
19526                        styles.titleBackgroundColor = theme.month.moreViewTitle.backgroundColor;
19527                        styles.titleBorderBottom = theme.month.moreViewTitle.borderBottom;
19528                        styles.titlePadding = theme.month.moreViewTitle.padding;
19529                        styles.listPadding = theme.month.moreViewList.padding;
19530                        listHeight = 'calc(100%';
19531
19532                        if (parseInt(styles.titleHeight, 10)) {
19533                            listHeight += ' - ' + styles.titleHeight;
19534                        }
19535                        if (parseInt(styles.titleMarginBottom, 10)) {
19536                            listHeight += ' - ' + styles.titleMarginBottom;
19537                        }
19538                        listHeight += ')';
19539
19540                        styles.listHeight = listHeight;
19541                    }
19542
19543                    return styles;
19544                };
19545
19546                module.exports = More;
19547
19548
19549                /***/ }),
19550
19551            
19551/***/ "./src/js/view/month/weekdayInMonth.js":
19552            /*!*********************************************!*\
19553  !*** ./src/js/view/month/weekdayInMonth.js ***!
19554  \*********************************************/
19555            /*! no static exports found */
19556            /***/ (function(module, exports, __webpack_require__) {
19557
19558                "use strict";
19559                /**
19560                 * @fileoverview Monthday in month view
19561                 * @author NHN FE Development Lab <[email protected]>
19562                 */
19563
19564
19565                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
19566                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js"),
19567                    common = __webpack_require__(/*! ../../common/common.js */ "./src/js/common/common.js"),
19568                    domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js"),
19569                    View = __webpack_require__(/*! ../../view/view */ "./src/js/view/view.js"),
19570                    Weekday = __webpack_require__(/*! ../weekday */ "./src/js/view/weekday.js"),
19571                    baseTmpl = __webpack_require__(/*! ../template/month/weekdayInMonth.hbs */ "./src/js/view/template/month/weekdayInMonth.hbs"),
19572                    scheduleTmpl = __webpack_require__(/*! ../template/month/weekdayInMonthSchedule.hbs */ "./src/js/view/template/month/weekdayInMonthSchedule.hbs");
19573                var mfloor = Math.floor,
19574                    mmin = Math.min;
19575
19576                /**
19577                 * @constructor
19578                 * @extends {Weekday}
19579                 * @param {object} options - options for WeekdayInWeek view
19580                 * @param {number} [options.heightPercent] - height percent of view
19581                 * @param {number} [options.containerButtonGutter=8] - free space at bottom to
19582                 *  make create easy.
19583                 * @param {number} [options.scheduleHeight=18] - height of each schedule block.
19584                 * @param {number} [options.scheduleGutter=2] - gutter height of each schedule block.
19585                 * @param {HTMLDIVElement} container - DOM element to use container for this
19586                 *  view.
19587                 */
19588                function WeekdayInMonth(options, container) {
19589                    Weekday.call(this, options, container);
19590                    container.style.height = options.heightPercent + '%';
19591                }
19592
19593                util.inherit(WeekdayInMonth, Weekday);
19594
19595                /**
19596                 * Get schedule container element's bound properly by override
19597                 *
19598                 * View#getViewBound.
19599                 * @override
19600                 */
19601                WeekdayInMonth.prototype.getViewBound = function() {
19602                    var bound = View.prototype.getViewBound.call(this);
19603
19604                    return bound;
19605                };
19606
19607                /**
19608                 * Get limit index of schedule block in current view
19609                 * @param {number} panelHeight - panel's height for pre-calculation
19610                 * @returns {number} limit index
19611                 */
19612                WeekdayInMonth.prototype._getRenderLimitIndex = function(panelHeight) {
19613                    var opt = this.options;
19614                    var containerHeight = panelHeight || this.getViewBound().height;
19615                    var gridHeaderHeight = util.pick(opt, 'grid', 'header', 'height') || 0;
19616                    var gridFooterHeight = util.pick(opt, 'grid', 'footer', 'height') || 0;
19617                    var visibleScheduleCount = opt.visibleScheduleCount || 0;
19618                    var count;
19619
19620                    containerHeight -= (gridHeaderHeight + gridFooterHeight);
19621
19622                    count = mfloor(containerHeight / (opt.scheduleHeight + opt.scheduleGutter));
19623
19624                    if (!visibleScheduleCount) {
19625                        visibleScheduleCount = count;
19626                    }
19627
19628                    return mmin(count, visibleScheduleCount); // subtraction for '+n' label block
19629                };
19630
19631                /**
19632                 * @override
19633                 * @param {object} viewModel - schedules view models
19634                 */
19635                WeekdayInMonth.prototype.getBaseViewModel = function(viewModel) {
19636                    var opt = this.options,
19637                        gridHeaderHeight = util.pick(opt, 'grid', 'header', 'height') || 0,
19638                        gridFooterHeight = util.pick(opt, 'grid', 'footer', 'height') || 0,
19639                        renderLimitIdx = this._getRenderLimitIndex() + 1,
19640                        exceedDate = this.getExceedDate(renderLimitIdx, viewModel.eventsInDateRange, viewModel.range),
19641                        styles = this._getStyles(viewModel.theme);
19642                    var baseViewModel;
19643
19644                    viewModel = util.extend({
19645                        exceedDate: exceedDate
19646                    }, viewModel);
19647
19648                    baseViewModel = Weekday.prototype.getBaseViewModel.call(this, viewModel);
19649
19650                    baseViewModel = util.extend({
19651                        matrices: viewModel.eventsInDateRange,
19652                        gridHeaderHeight: gridHeaderHeight,
19653                        gridFooterHeight: gridFooterHeight,
19654                        renderLimitIdx: renderLimitIdx,
19655                        isReadOnly: opt.isReadOnly,
19656                        styles: styles
19657                    }, baseViewModel);
19658
19659                    return baseViewModel;
19660                };
19661
19662                /**
19663                 * @override
19664                 * @param {object} viewModel - schedules view models
19665                 */
19666                WeekdayInMonth.prototype.render = function(viewModel) {
19667                    var container = this.container,
19668                        baseViewModel = this.getBaseViewModel(viewModel),
19669                        scheduleContainer;
19670
19671                    if (!this.options.visibleWeeksCount) {
19672                        setIsOtherMonthFlag(baseViewModel.dates, this.options.renderMonth, viewModel.theme);
19673                    }
19674
19675                    container.innerHTML = baseTmpl(baseViewModel);
19676
19677                    scheduleContainer = domutil.find(
19678                        config.classname('.weekday-schedules'),
19679                        container
19680                    );
19681
19682                    if (!scheduleContainer) {
19683                        return;
19684                    }
19685
19686                    scheduleContainer.innerHTML = scheduleTmpl(baseViewModel);
19687
19688                    common.setAutoEllipsis(
19689                        config.classname('.weekday-schedule-title'),
19690                        container,
19691                        true
19692                    );
19693                };
19694
19695                WeekdayInMonth.prototype._beforeDestroy = function() {
19696                };
19697
19698                /**
19699                 * Get the styles from theme
19700                 * @param {Theme} theme - theme instance
19701                 * @returns {object} styles - styles object
19702                 */
19703                WeekdayInMonth.prototype._getStyles = function(theme) {
19704                    var styles = {};
19705
19706                    if (theme) {
19707                        styles.borderTop = theme.common.border;
19708                        styles.borderLeft = theme.common.border;
19709                        styles.fontSize = theme.month.day.fontSize;
19710                        styles.borderRadius = theme.month.schedule.borderRadius;
19711                        styles.marginLeft = theme.month.schedule.marginLeft;
19712                        styles.marginRight = theme.month.schedule.marginRight;
19713                        styles.scheduleBulletTop = this.options.scheduleHeight / 3;
19714                    }
19715
19716                    return styles;
19717                };
19718
19719                /**
19720                 * 현재 달이 아닌 ë‚ ì§œì— 대해 isOtherMonth = true 플래그를 추가한다.
19721                 * @param {Array} dates - ë‚ ì§œì •ë³´ ë°°ì—´
19722                 * @param {TZDate} renderMonth - 현재 ë Œë”ë§ì¤‘ì¸ ì›” (YYYYMM)
19723                 * @param {Theme} theme - theme instance
19724                 */
19725                function setIsOtherMonthFlag(dates, renderMonth, theme) {
19726                    var month = renderMonth.getMonth() + 1;
19727
19728                    util.forEach(dates, function(dateObj) {
19729                        var isOtherMonth = dateObj.month !== month;
19730                        dateObj.isOtherMonth = isOtherMonth;
19731
19732                        if (isOtherMonth) {
19733                            dateObj.color = Weekday.prototype._getDayNameColor(theme, dateObj.day, dateObj.isToday, isOtherMonth);
19734                        }
19735                    });
19736                }
19737
19738                module.exports = WeekdayInMonth;
19739
19740
19741                /***/ }),
19742
19743            
19743/***/ "./src/js/view/popup/scheduleCreationPopup.js":
19744            /*!****************************************************!*\
19745  !*** ./src/js/view/popup/scheduleCreationPopup.js ***!
19746  \****************************************************/
19747            /*! no static exports found */
19748            /***/ (function(module, exports, __webpack_require__) {
19749
19750                "use strict";
19751                /**
19752                 * @fileoverview Floating layer for writing new schedules
19753                 * @author NHN FE Development Lab <[email protected]>
19754                 */
19755
19756
19757                var View = __webpack_require__(/*! ../../view/view */ "./src/js/view/view.js");
19758                var FloatingLayer = __webpack_require__(/*! ../../common/floatingLayer */ "./src/js/common/floatingLayer.js");
19759                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
19760                var DatePicker = __webpack_require__(/*! tui-date-picker */ "tui-date-picker");
19761                var timezone = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js");
19762                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
19763                var domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js");
19764                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
19765                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
19766                var tmpl = __webpack_require__(/*! ../template/popup/scheduleCreationPopup.hbs */ "./src/js/view/template/popup/scheduleCreationPopup.hbs");
19767                var TZDate = timezone.Date;
19768                var MAX_WEEK_OF_MONTH = 6;
19769                var ARROW_WIDTH_HALF = 8;
19770
19771                /**
19772                 * @constructor
19773                 * @extends {View}
19774                 * @param {HTMLElement} container - container element
19775                 * @param {Array.<Calendar>} calendars - calendar list used to create new schedule
19776                 * @param {boolean} usageStatistics - GA tracking options in Calendar
19777                 */
19778                function ScheduleCreationPopup(container, calendars, usageStatistics) {
19779                    View.call(this, container);
19780                    /**
19781                     * @type {FloatingLayer}
19782                     */
19783                    this.layer = new FloatingLayer(null, container);
19784
19785                    /**
19786                     * cached view model
19787                     * @type {object}
19788                     */
19789                    this._viewModel = null;
19790                    this._selectedCal = null;
19791                    this._schedule = null;
19792                    this.calendars = calendars;
19793                    this._focusedDropdown = null;
19794                    this._usageStatistics = usageStatistics;
19795                    this._onClickListeners = [
19796                        this._selectDropdownMenuItem.bind(this),
19797                        this._toggleDropdownMenuView.bind(this),
19798                        this._closeDropdownMenuView.bind(this, null),
19799                        this._closePopup.bind(this),
19800                        this._toggleIsAllday.bind(this),
19801                        this._toggleIsPrivate.bind(this),
19802                        this._onClickSaveSchedule.bind(this)
19803                    ];
19804
19805                    domevent.on(container, 'click', this._onClick, this);
19806                }
19807
19808                util.inherit(ScheduleCreationPopup, View);
19809
19810                /**
19811                 * Mousedown event handler for hiding popup layer when user mousedown outside of
19812                 * layer
19813                 * @param {MouseEvent} mouseDownEvent - mouse event object
19814                 */
19815                ScheduleCreationPopup.prototype._onMouseDown = function(mouseDownEvent) {
19816                    var target = (mouseDownEvent.target || mouseDownEvent.srcElement),
19817                        popupLayer = domutil.closest(target, config.classname('.floating-layer'));
19818
19819                    if (popupLayer) {
19820                        return;
19821                    }
19822
19823                    this.hide();
19824                };
19825
19826                /**
19827                 * @override
19828                 */
19829                ScheduleCreationPopup.prototype.destroy = function() {
19830                    this.layer.destroy();
19831                    this.layer = null;
19832                    domevent.off(this.container, 'click', this._onClick, this);
19833                    domevent.off(document.body, 'mousedown', this._onMouseDown, this);
19834                    View.prototype.destroy.call(this);
19835                };
19836
19837                /**
19838                 * @override
19839                 * Click event handler for close button
19840                 * @param {MouseEvent} clickEvent - mouse event object
19841                 */
19842                ScheduleCreationPopup.prototype._onClick = function(clickEvent) {
19843                    var target = (clickEvent.target || clickEvent.srcElement);
19844
19845                    util.forEach(this._onClickListeners, function(listener) {
19846                        return !listener(target);
19847                    });
19848                };
19849
19850                /**
19851                 * Test click event target is close button, and return layer is closed(hidden)
19852                 * @param {HTMLElement} target click event target
19853                 * @returns {boolean} whether popup layer is closed or not
19854                 */
19855                ScheduleCreationPopup.prototype._closePopup = function(target) {
19856                    var className = config.classname('popup-close');
19857
19858                    if (domutil.hasClass(target, className) || domutil.closest(target, '.' + className)) {
19859                        this.hide();
19860
19861                        return true;
19862                    }
19863
19864                    return false;
19865                };
19866
19867                /**
19868                 * Toggle dropdown menu view, when user clicks dropdown button
19869                 * @param {HTMLElement} target click event target
19870                 * @returns {boolean} whether user clicked dropdown button or not
19871                 */
19872                ScheduleCreationPopup.prototype._toggleDropdownMenuView = function(target) {
19873                    var className = config.classname('dropdown-button');
19874                    var dropdownBtn = domutil.hasClass(target, className) ? target : domutil.closest(target, '.' + className);
19875
19876                    if (!dropdownBtn) {
19877                        return false;
19878                    }
19879
19880                    if (domutil.hasClass(dropdownBtn.parentNode, config.classname('open'))) {
19881                        this._closeDropdownMenuView(dropdownBtn.parentNode);
19882                    } else {
19883                        this._openDropdownMenuView(dropdownBtn.parentNode);
19884                    }
19885
19886                    return true;
19887                };
19888
19889                /**
19890                 * Close drop down menu
19891                 * @param {HTMLElement} dropdown - dropdown element that has a opened dropdown menu
19892                 */
19893                ScheduleCreationPopup.prototype._closeDropdownMenuView = function(dropdown) {
19894                    dropdown = dropdown || this._focusedDropdown;
19895                    if (dropdown) {
19896                        domutil.removeClass(dropdown, config.classname('open'));
19897                        this._focusedDropdown = null;
19898                    }
19899                };
19900
19901                /**
19902                 * Open drop down menu
19903                 * @param {HTMLElement} dropdown - dropdown element that has a closed dropdown menu
19904                 */
19905                ScheduleCreationPopup.prototype._openDropdownMenuView = function(dropdown) {
19906                    domutil.addClass(dropdown, config.classname('open'));
19907                    this._focusedDropdown = dropdown;
19908                };
19909
19910                /**
19911                 * If click dropdown menu item, close dropdown menu
19912                 * @param {HTMLElement} target click event target
19913                 * @returns {boolean} whether
19914                 */
19915                ScheduleCreationPopup.prototype._selectDropdownMenuItem = function(target) {
19916                    var itemClassName = config.classname('dropdown-menu-item');
19917                    var iconClassName = config.classname('icon');
19918                    var contentClassName = config.classname('content');
19919                    var selectedItem = domutil.hasClass(target, itemClassName) ? target : domutil.closest(target, '.' + itemClassName);
19920                    var bgColor, title, dropdown, dropdownBtn;
19921
19922                    if (!selectedItem) {
19923                        return false;
19924                    }
19925
19926                    bgColor = domutil.find('.' + iconClassName, selectedItem).style.backgroundColor || 'transparent';
19927                    title = domutil.find('.' + contentClassName, selectedItem).innerHTML;
19928
19929                    dropdown = domutil.closest(selectedItem, config.classname('.dropdown'));
19930                    dropdownBtn = domutil.find(config.classname('.dropdown-button'), dropdown);
19931                    domutil.find('.' + contentClassName, dropdownBtn).innerText = title;
19932
19933                    if (domutil.hasClass(dropdown, config.classname('section-calendar'))) {
19934                        domutil.find('.' + iconClassName, dropdownBtn).style.backgroundColor = bgColor;
19935                        this._selectedCal = common.find(this.calendars, function(cal) {
19936                            return cal.id === domutil.getData(selectedItem, 'calendarId');
19937                        });
19938                    }
19939
19940                    domutil.removeClass(dropdown, config.classname('open'));
19941
19942                    return true;
19943                };
19944
19945                /**
19946                 * Toggle allday checkbox state
19947                 * @param {HTMLElement} target click event target
19948                 * @returns {boolean} whether event target is allday section or not
19949                 */
19950                ScheduleCreationPopup.prototype._toggleIsAllday = function(target) {
19951                    var className = config.classname('section-allday');
19952                    var alldaySection = domutil.hasClass(target, className) ? target : domutil.closest(target, '.' + className);
19953                    var checkbox;
19954
19955                    if (alldaySection) {
19956                        checkbox = domutil.find(config.classname('.checkbox-square'), alldaySection);
19957                        checkbox.checked = !checkbox.checked;
19958
19959                        return true;
19960                    }
19961
19962                    return false;
19963                };
19964
19965                /**
19966                 * Toggle private button
19967                 * @param {HTMLElement} target click event target
19968                 * @returns {boolean} whether event target is private section or not
19969                 */
19970                ScheduleCreationPopup.prototype._toggleIsPrivate = function(target) {
19971                    var className = config.classname('section-private');
19972                    var privateSection = domutil.hasClass(target, className) ? target : domutil.closest(target, '.' + className);
19973
19974                    if (privateSection) {
19975                        if (domutil.hasClass(privateSection, config.classname('public'))) {
19976                            domutil.removeClass(privateSection, config.classname('public'));
19977                        } else {
19978                            domutil.addClass(privateSection, config.classname('public'));
19979                        }
19980
19981                        return true;
19982                    }
19983
19984                    return false;
19985                };
19986
19987                /**
19988                 * Save new schedule if user clicked save button
19989                 * @emits ScheduleCreationPopup#saveSchedule
19990                 * @param {HTMLElement} target click event target
19991                 * @returns {boolean} whether save button is clicked or not
19992                 */
19993                ScheduleCreationPopup.prototype._onClickSaveSchedule = function(target) {
19994                    var className = config.classname('popup-save');
19995                    var cssPrefix = config.cssPrefix;
19996                    var title, isPrivate, location, isAllDay, startDate, endDate, state;
19997                    var start, end, calendarId;
19998                    var changes;
19999
20000                    if (!domutil.hasClass(target, className) && !domutil.closest(target, '.' + className)) {
20001                        return false;
20002                    }
20003
20004                    title = domutil.get(cssPrefix + 'schedule-title');
20005                    startDate = new TZDate(this.rangePicker.getStartDate()).toLocalTime();
20006                    endDate = new TZDate(this.rangePicker.getEndDate()).toLocalTime();
20007
20008                    if (!title.value) {
20009                        title.focus();
20010
20011                        return true;
20012                    }
20013
20014                    if (!startDate && !endDate) {
20015                        return true;
20016                    }
20017
20018                    isPrivate = !domutil.hasClass(domutil.get(cssPrefix + 'schedule-private'), config.classname('public'));
20019                    location = domutil.get(cssPrefix + 'schedule-location');
20020                    state = domutil.get(cssPrefix + 'schedule-state');
20021                    isAllDay = !!domutil.get(cssPrefix + 'schedule-allday').checked;
20022
20023                    if (isAllDay) {
20024                        startDate.setHours(0, 0, 0);
20025                        endDate.setHours(23, 59, 59);
20026                    }
20027
20028                    start = new TZDate(startDate);
20029                    end = new TZDate(endDate);
20030
20031                    if (this._selectedCal) {
20032                        calendarId = this._selectedCal.id;
20033                    }
20034
20035                    if (this._isEditMode) {
20036                        changes = common.getScheduleChanges(
20037                            this._schedule,
20038                            ['calendarId', 'title', 'location', 'start', 'end', 'isAllDay', 'state'],
20039                            {
20040                                calendarId: calendarId,
20041                                title: title.value,
20042                                location: location.value,
20043                                start: start,
20044                                end: end,
20045                                isAllDay: isAllDay,
20046                                state: state.innerText
20047                            }
20048                        );
20049
20050                        this.fire('beforeUpdateSchedule', {
20051                            schedule: util.extend({
20052                                raw: {
20053                                    class: isPrivate ? 'private' : 'public'
20054                                }
20055                            }, this._schedule),
20056                            changes: changes,
20057                            start: start,
20058                            end: end,
20059                            calendar: this._selectedCal,
20060                            triggerEventName: 'click'
20061                        });
20062                    } else {
20063                        /**
20064                         * @event ScheduleCreationPopup#beforeCreateSchedule
20065                         * @type {object}
20066                         * @property {Schedule} schedule - new schedule instance to be added
20067                         */
20068                        this.fire('beforeCreateSchedule', {
20069                            calendarId: calendarId,
20070                            title: title.value,
20071                            location: location.value,
20072                            raw: {
20073                                class: isPrivate ? 'private' : 'public'
20074                            },
20075                            start: start,
20076                            end: end,
20077                            isAllDay: isAllDay,
20078                            state: state.innerText
20079                        });
20080                    }
20081
20082                    this.hide();
20083
20084                    return true;
20085                };
20086
20087                /**
20088                 * @override
20089         
20089        * @param {object} viewModel - view model from factory/monthView
20090                 */
20091                ScheduleCreationPopup.prototype.render = function(viewModel) {
20092                    var calendars = this.calendars;
20093                    var layer = this.layer;
20094                    var self = this;
20095                    var boxElement, guideElements;
20096
20097                    viewModel.zIndex = this.layer.zIndex + 5;
20098                    viewModel.calendars = calendars;
20099                    if (calendars.length) {
20100                        viewModel.selectedCal = this._selectedCal = calendars[0];
20101                    }
20102
20103                    this._isEditMode = viewModel.schedule && viewModel.schedule.id;
20104                    if (this._isEditMode) {
20105                        boxElement = viewModel.target;
20106                        viewModel = this._makeEditModeData(viewModel);
20107                    } else {
20108                        this.guide = viewModel.guide;
20109                        guideElements = this._getGuideElements(this.guide);
20110                        boxElement = guideElements.length ? guideElements[0] : null;
20111                    }
20112                    layer.setContent(tmpl(viewModel));
20113                    this._createDatepicker(viewModel.start, viewModel.end, viewModel.isAllDay);
20114                    layer.show();
20115
20116                    if (boxElement) {
20117                        this._setPopupPositionAndArrowDirection(boxElement.getBoundingClientRect());
20118                    }
20119
20120                    util.debounce(function() {
20121                        domevent.on(document.body, 'mousedown', self._onMouseDown, self);
20122                    })();
20123                };
20124
20125                /**
20126                 * Make view model for edit mode
20127                 * @param {object} viewModel - original view model from 'beforeCreateEditPopup'
20128                 * @returns {object} - edit mode view model
20129                 */
20130                ScheduleCreationPopup.prototype._makeEditModeData = function(viewModel) {
20131                    var schedule = viewModel.schedule;
20132                    var title, isPrivate, location, startDate, endDate, isAllDay, state;
20133                    var raw = schedule.raw || {};
20134                    var calendars = this.calendars;
20135
20136                    var id = schedule.id;
20137                    title = schedule.title;
20138                    isPrivate = raw['class'] === 'private';
20139                    location = schedule.location;
20140                    startDate = schedule.start;
20141                    endDate = schedule.end;
20142                    isAllDay = schedule.isAllDay;
20143                    state = schedule.state;
20144
20145                    viewModel.selectedCal = this._selectedCal = common.find(this.calendars, function(cal) {
20146                        return cal.id === viewModel.schedule.calendarId;
20147                    });
20148
20149                    this._schedule = schedule;
20150
20151                    return {
20152                        id: id,
20153                        selectedCal: this._selectedCal,
20154                        calendars: calendars,
20155                        title: title,
20156                        isPrivate: isPrivate,
20157                        location: location,
20158                        isAllDay: isAllDay,
20159                        state: state,
20160                        start: startDate,
20161                        end: endDate,
20162                        raw: {
20163                            class: isPrivate ? 'private' : 'public'
20164                        },
20165                        zIndex: this.layer.zIndex + 5,
20166                        isEditMode: this._isEditMode
20167                    };
20168                };
20169
20170                /**
20171                 * Set popup position and arrow direction to apear near guide element
20172                 * @param {MonthCreationGuide|TimeCreationGuide|DayGridCreationGuide} guideBound - creation guide element
20173                 */
20174                ScheduleCreationPopup.prototype._setPopupPositionAndArrowDirection = function(guideBound) {
20175                    var layer = domutil.find(config.classname('.popup'), this.layer.container);
20176                    var layerSize = {
20177                        width: layer.offsetWidth,
20178                        height: layer.offsetHeight
20179                    };
20180                    var windowSize = {
20181                        right: window.innerWidth,
20182                        bottom: window.innerHeight
20183                    };
20184                    var parentRect = this.layer.parent.getBoundingClientRect();
20185                    var parentBounds = {
20186                        left: parentRect.left,
20187                        top: parentRect.top
20188                    };
20189                    var pos;
20190
20191                    pos = this._calcRenderingData(layerSize, windowSize, guideBound);
20192                    pos.x -= parentBounds.left;
20193                    pos.y -= (parentBounds.top + 6);
20194                    this.layer.setPosition(pos.x, pos.y);
20195                    this._setArrowDirection(pos.arrow);
20196                };
20197
20198                /**
20199                 * Get guide elements from creation guide object
20200                 * It is used to calculate rendering position of popup
20201                 * It will be disappeared when hiding popup
20202                 * @param {MonthCreationGuide|TimeCreationGuide|AlldayCreationGuide} guide - creation guide
20203                 * @returns {Array.<HTMLElement>} creation guide element
20204                 */
20205                ScheduleCreationPopup.prototype._getGuideElements = function(guide) {
20206                    var guideElements = [];
20207                    var i = 0;
20208
20209                    if (guide.guideElement) {
20210                        guideElements.push(guide.guideElement);
20211                    } else if (guide.guideElements) {
20212                        for (; i < MAX_WEEK_OF_MONTH; i += 1) {
20213                            if (guide.guideElements[i]) {
20214                                guideElements.push(guide.guideElements[i]);
20215                            }
20216                        }
20217                    }
20218
20219                    return guideElements;
20220                };
20221
20222                /**
20223                 * Get guide element's bound data which only includes top, right, bottom, left
20224                 * @param {Array.<HTMLElement>} guideElements - creation guide elements
20225                 * @returns {Object} - popup bound data
20226                 */
20227                ScheduleCreationPopup.prototype._getBoundOfFirstRowGuideElement = function(guideElements) {
20228                    var bound;
20229
20230                    if (!guideElements.length) {
20231                        return null;
20232                    }
20233
20234                    bound = guideElements[0].getBoundingClientRect();
20235
20236                    return {
20237                        top: bound.top,
20238                        left: bound.left,
20239                        bottom: bound.bottom,
20240                        right: bound.right
20241                    };
20242                };
20243
20244                /**
20245                 * Calculate rendering position usering guide elements
20246                 * @param {{width: {number}, height: {number}}} layerSize - popup layer's width and height
20247                 * @param {{top: {number}
20247, left: {number}, right: {number}, bottom: {number}}} parentSize - width and height of the upper layer, that acts as a border of popup
20248                 * @param {{top: {number}, left: {number}, right: {number}, bottom: {number}}} guideBound - guide element bound data
20249                 * @returns {PopupRenderingData} rendering position of popup and popup arrow
20250                 */
20251                ScheduleCreationPopup.prototype._calcRenderingData = function(layerSize, parentSize, guideBound) {
20252                    var guideHorizontalCenter = (guideBound.left + guideBound.right) / 2;
20253                    var x = guideHorizontalCenter - (layerSize.width / 2);
20254                    var y = guideBound.top - layerSize.height + 3;
20255                    var arrowDirection = 'arrow-bottom';
20256                    var arrowLeft;
20257
20258                    if (y < 0) {
20259                        y = guideBound.bottom + 9;
20260                        arrowDirection = 'arrow-top';
20261                    }
20262
20263                    if (x > 0 && (x + layerSize.width > parentSize.right)) {
20264                        x = parentSize.right - layerSize.width;
20265                    }
20266
20267                    if (x < 0) {
20268                        x = 0;
20269                    }
20270
20271                    if (guideHorizontalCenter - x !== layerSize.width / 2) {
20272                        arrowLeft = guideHorizontalCenter - x - ARROW_WIDTH_HALF;
20273                    }
20274
20275                    /**
20276                     * @typedef {Object} PopupRenderingData
20277                     * @property {number} x - left position
20278                     * @property {number} y - top position
20279                     * @property {string} arrow.direction - direction of popup arrow
20280                     * @property {number} [arrow.position] - relative position of popup arrow, if it is not set, arrow appears on the middle of popup
20281                     */
20282                    return {
20283                        x: x,
20284                        y: y,
20285                        arrow: {
20286                            direction: arrowDirection,
20287                            position: arrowLeft
20288                        }
20289                    };
20290                };
20291
20292                /**
20293                 * Set arrow's direction and position
20294                 * @param {Object} arrow rendering data for popup arrow
20295                 */
20296                ScheduleCreationPopup.prototype._setArrowDirection = function(arrow) {
20297                    var direction = arrow.direction || 'arrow-bottom';
20298                    var arrowEl = domutil.get(config.classname('popup-arrow'));
20299                    var borderElement = domutil.find(config.classname('.popup-arrow-border', arrowEl));
20300
20301                    if (direction !== config.classname('arrow-bottom')) {
20302                        domutil.removeClass(arrowEl, config.classname('arrow-bottom'));
20303                        domutil.addClass(arrowEl, config.classname(direction));
20304                    }
20305
20306                    if (arrow.position) {
20307                        borderElement.style.left = arrow.position + 'px';
20308                    }
20309                };
20310
20311                /**
20312                 * Create date range picker using start date and end date
20313                 * @param {TZDate} start - start date
20314                 * @param {TZDate} end - end date
20315                 * @param {boolean} isAllDay - isAllDay
20316                 */
20317                ScheduleCreationPopup.prototype._createDatepicker = function(start, end, isAllDay) {
20318                    var cssPrefix = config.cssPrefix;
20319
20320                    this.rangePicker = DatePicker.createRangePicker({
20321                        startpicker: {
20322                            date: new TZDate(start).toDate(),
20323                            input: '#' + cssPrefix + 'schedule-start-date',
20324                            container: '#' + cssPrefix + 'startpicker-container'
20325                        },
20326                        endpicker: {
20327                            date: new TZDate(end).toDate(),
20328                            input: '#' + cssPrefix + 'schedule-end-date',
20329                            container: '#' + cssPrefix + 'endpicker-container'
20330                        },
20331                        format: isAllDay ? 'yyyy-MM-dd' : 'yyyy-MM-dd HH:mm',
20332                        timepicker: isAllDay ? null : {
20333                            showMeridiem: false,
20334                            usageStatistics: this._usageStatistics
20335                        },
20336                        usageStatistics: this._usageStatistics
20337                    });
20338                };
20339
20340                /**
20341                 * Hide layer
20342                 */
20343                ScheduleCreationPopup.prototype.hide = function() {
20344                    this.layer.hide();
20345
20346                    if (this.guide) {
20347                        this.guide.clearGuideElement();
20348                        this.guide = null;
20349                    }
20350
20351                    domevent.off(document.body, 'mousedown', this._onMouseDown, this);
20352                };
20353
20354                /**
20355                 * refresh layer
20356                 */
20357                ScheduleCreationPopup.prototype.refresh = function() {
20358                    if (this._viewModel) {
20359                        this.layer.setContent(this.tmpl(this._viewModel));
20360                    }
20361                };
20362
20363                /**
20364                 * Set calendar list
20365                 * @param {Array.<Calendar>} calendars - calendar list
20366                 */
20367                ScheduleCreationPopup.prototype.setCalendars = function(calendars) {
20368                    this.calendars = calendars || [];
20369                };
20370
20371                module.exports = ScheduleCreationPopup;
20372
20373
20374                /***/ }),
20375
20376            
20376/***/ "./src/js/view/popup/scheduleDetailPopup.js":
20377            /*!**************************************************!*\
20378  !*** ./src/js/view/popup/scheduleDetailPopup.js ***!
20379  \**************************************************/
20380            /*! no static exports found */
20381            /***/ (function(module, exports, __webpack_require__) {
20382
20383                "use strict";
20384                /**
20385                 * @fileoverview Floating layer for  showing detail schedule
20386                 * @author NHN FE Development Lab <[email protected]>
20387                 */
20388
20389
20390                var View = __webpack_require__(/*! ../../view/view */ "./src/js/view/view.js");
20391                var FloatingLayer = __webpack_require__(/*! ../../common/floatingLayer */ "./src/js/common/floatingLayer.js");
20392                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
20393                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js"),
20394                    domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js"),
20395                    domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
20396                var tmpl = __webpack_require__(/*! ../template/popup/scheduleDetailPopup.hbs */ "./src/js/view/template/popup/scheduleDetailPopup.hbs");
20397                var ARROW_WIDTH_HALF = 8;
20398
20399                /**
20400                 * @constructor
20401                 * @extends {View}
20402                 * @param {HTMLElement} container - container element
20403                 */
20404                function ScheduleDetailPopup(container) {
20405                    View.call(this, container);
20406                    /**
20407                     * @type {FloatingLayer}
20408                     */
20409                    this.layer = new FloatingLayer(null, container);
20410
20411                    /**
20412                     * cached view model
20413                     * @type {object}
20414                     */
20415                    this._viewModel = null;
20416                    this._schedule = null;
20417                    this._calendar = null;
20418
20419                    domevent.on(container, 'click', this._onClick, this);
20420                }
20421
20422                util.inherit(ScheduleDetailPopup, View);
20423
20424                /**
20425                 * Mousedown event handler for hiding popup layer when user mousedown outside of
20426                 * layer
20427                 * @param {MouseEvent} mouseDownEvent - mouse event object
20428                 */
20429                ScheduleDetailPopup.prototype._onMouseDown = function(mouseDownEvent) {
20430                    var target = (mouseDownEvent.target || mouseDownEvent.srcElement),
20431                        popupLayer = domutil.closest(target, config.classname('.floating-layer'));
20432
20433                    if (popupLayer) {
20434                        return;
20435                    }
20436
20437                    this.hide();
20438                };
20439
20440                /**
20441                 * @override
20442                 */
20443                ScheduleDetailPopup.prototype.destroy = function() {
20444                    this.layer.destroy();
20445                    this.layer = null;
20446                    domevent.off(this.container, 'click', this._onClick, this);
20447                    domevent.off(document.body, 'mousedown', this._onMouseDown, this);
20448                    View.prototype.destroy.call(this);
20449                };
20450
20451                /**
20452                 * @override
20453                 * Click event handler for close button
20454                 * @param {MouseEvent} clickEvent - mouse event object
20455                 */
20456                ScheduleDetailPopup.prototype._onClick = function(clickEvent) {
20457                    var target = (clickEvent.target || clickEvent.srcElement);
20458
20459                    this._onClickEditSchedule(target);
20460
20461                    this._onClickDeleteSchedule(target);
20462                };
20463
20464                /**
20465                 * @fires ScheduleDetailPopup#clickEditSchedule
20466                 * @param {HTMLElement} target - event target
20467                 */
20468                ScheduleDetailPopup.prototype._onClickEditSchedule = function(target) {
20469                    var className = config.classname('popup-edit');
20470
20471                    if (domutil.hasClass(target, className) || domutil.closest(target, '.' + className)) {
20472                        this.fire('beforeUpdateSchedule', {
20473                            schedule: this._schedule,
20474                            triggerEventName: 'click',
20475                            target: this._scheduleEl
20476                        });
20477
20478                        this.hide();
20479                    }
20480                };
20481
20482                /**
20483                 * @fires ScheduleDetailPopup#clickEditSchedule
20484                 * @param {HTMLElement} target - event target
20485                 */
20486                ScheduleDetailPopup.prototype._onClickDeleteSchedule = function(target) {
20487                    var className = config.classname('popup-delete');
20488
20489                    if (domutil.hasClass(target, className) || domutil.closest(target, '.' + className)) {
20490                        this.fire('beforeDeleteSchedule', {
20491                            schedule: this._schedule
20492                        });
20493
20494                        this.hide();
20495                    }
20496                };
20497
20498                /**
20499                 * @override
20500                 * @param {object} viewModel - view model from factory/monthView
20501                 */
20502                ScheduleDetailPopup.prototype.render = function(viewModel) {
20503                    var layer = this.layer;
20504                    var self = this;
20505
20506                    layer.setContent(tmpl({
20507                        schedule: viewModel.schedule,
20508                        calendar: viewModel.calendar
20509                    }));
20510                    layer.show();
20511                    this._setPopupPositionAndArrowDirection(viewModel.event);
20512
20513                    this._schedule = viewModel.schedule;
20514                    this._calendar = viewModel.calendar;
20515
20516                    util.debounce(function() {
20517                        domevent.on(document.body, 'mousedown', self._onMouseDown, self);
20518                    })();
20519                };
20520
20521                /**
20522                 * Set popup position and arrow direction to apear near guide element
20523                 * @param {Event} event - creation guide element
20524                 */
20525                ScheduleDetailPopup.prototype._setPopupPositionAndArrowDirection = function(event) {
20526                    var layer = domutil.find(config.classname('.popup'), this.layer.container);
20527                    var layerSize = {
20528                        width: layer.offsetWidth,
20529                        height: layer.offsetHeight
20530                    };
20531                    var windowSize = {
20532                        right: window.innerWidth,
20533                        bottom: window.innerHeight
20534                    };
20535                    var parentRect = this.layer.parent.getBoundingClientRect();
20536                    var parentBounds = {
20537                        left: parentRect.left,
20538                        top: parentRect.top
20539                    };
20540                    var scheduleEl = event.target || event.srcElement;
20541                    var blockEl = domutil.closest(scheduleEl, config.classname('.time-date-schedule-block'))
20542                        || domutil.closest(scheduleEl, config.classname('.weekday-schedule'))
20543                        || scheduleEl;
20544                    var scheduleBound = blockEl.getBoundingClientRect();
20545                    var pos;
20546
20547                    this._scheduleEl = blockEl;
20548
20549                    pos = this._calcRenderingData(layerSize, windowSize, scheduleBound);
20550                    pos.x -= parentBounds.left + 4;
20551                    pos.y -= (parentBounds.top + ARROW_WIDTH_HALF);
20552                    this.layer.setPosition(pos.x, pos.y);
20553                    this._setArrowDirection(pos.arrow);
20554                };
20555
20556                /**
20557                 * Calculate rendering position usering guide elements
20558                 * @param {{width: {number}, height: {number}}} layerSize - popup layer's width and height
20559                 * @param {{top: {number}
20559, left: {number}, right: {number}, bottom: {number}}} parentSize - width and height of the upper layer, that acts as a border of popup
20560                 * @param {{top: {number}, left: {number}, right: {number}, bottom: {number}}} guideBound - guide element bound data
20561                 * @returns {PopupRenderingData} rendering position of popup and popup arrow
20562                 */
20563                ScheduleDetailPopup.prototype._calcRenderingData = function(layerSize, parentSize, guideBound) {
20564                    var guideVerticalCenter = (guideBound.top + guideBound.bottom) / 2;
20565                    var x = guideBound.right;
20566                    var y = guideVerticalCenter;
20567                    var arrowDirection = 'arrow-left';
20568                    var arrowTop;
20569
20570                    if (y < 0) {
20571                        y = y + (layerSize.height / 2) - guideVerticalCenter;
20572                    }
20573
20574                    if (x > 0 && (x + layerSize.width > parentSize.right)) {
20575                        x = guideBound.left - layerSize.width - ARROW_WIDTH_HALF - 3;
20576                        arrowDirection = 'arrow-right';
20577                    }
20578
20579                    if (x < 0) {
20580                        x = 0;
20581                    }
20582
20583                    if (guideBound.right > x + layerSize.width) {
20584                        arrowDirection = 'arrow-right';
20585                    }
20586
20587                    /**
20588                     * @typedef {Object} PopupRenderingData
20589                     * @property {number} x - left position
20590                     * @property {number} y - top position
20591                     * @property {string} arrow.direction - direction of popup arrow
20592                     * @property {number} [arrow.position] - relative position of popup arrow, if it is not set, arrow appears on the middle of popup
20593                     */
20594                    return {
20595                        x: x + ARROW_WIDTH_HALF,
20596                        y: y - (layerSize.height / 2) + ARROW_WIDTH_HALF,
20597                        arrow: {
20598                            direction: arrowDirection,
20599                            position: arrowTop
20600                        }
20601                    };
20602                };
20603
20604                /**
20605                 * Set arrow's direction and position
20606                 * @param {Object} arrow rendering data for popup arrow
20607                 */
20608                ScheduleDetailPopup.prototype._setArrowDirection = function(arrow) {
20609                    var direction = arrow.direction || 'arrow-left';
20610                    var arrowEl = domutil.find(config.classname('.popup-arrow'), this.layer.container);
20611                    var borderElement = domutil.find(config.classname('.popup-arrow-border', arrowEl));
20612
20613                    if (direction !== config.classname('arrow-left')) {
20614                        domutil.removeClass(arrowEl, config.classname('arrow-left'));
20615                        domutil.addClass(arrowEl, config.classname(direction));
20616                    }
20617
20618                    if (arrow.position) {
20619                        borderElement.style.top = arrow.position + 'px';
20620                    }
20621                };
20622
20623                /**
20624                 * Hide layer
20625                 */
20626                ScheduleDetailPopup.prototype.hide = function() {
20627                    this.layer.hide();
20628
20629                    if (this.guide) {
20630                        this.guide.clearGuideElement();
20631                        this.guide = null;
20632                    }
20633
20634                    domevent.off(document.body, 'mousedown', this._onMouseDown, this);
20635                };
20636
20637                /**
20638                 * refresh layer
20639                 */
20640                ScheduleDetailPopup.prototype.refresh = function() {
20641                    if (this._viewModel) {
20642                        this.layer.setContent(this.tmpl(this._viewModel));
20643                    }
20644                };
20645
20646                module.exports = ScheduleDetailPopup;
20647
20648
20649                /***/ }),
20650
20651            
20651/***/ "./src/js/view/template/helper.js":
20652            /*!****************************************!*\
20653  !*** ./src/js/view/template/helper.js ***!
20654  \****************************************/
20655            /*! no static exports found */
20656            /***/ (function(module, exports, __webpack_require__) {
20657
20658                "use strict";
20659                /* eslint complexity: 0 */
20660                /**
20661                 * @fileoverview Helpers for handlebar templates.
20662                 * @author NHN FE Development Lab <[email protected]>
20663                 */
20664
20665
20666                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
20667                var Handlebars = __webpack_require__(/*! handlebars-template-loader/runtime */ "./node_modules/handlebars-template-loader/runtime/index.js");
20668                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
20669                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
20670                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
20671                var mmax = Math.max;
20672                var SIXTY_MINUTES = 60;
20673                var helpers = {
20674                    /**
20675                     * Stamp supplied object
20676                     *
20677                     * Commonly use for rendering object's unique ID to rendered view
20678                     * @param {object} obj - object to stamp
20679                     * @returns {number} stamp value
20680                     */
20681                    'stamp': function(obj) {
20682                        return util.stamp(obj);
20683                    },
20684
20685                    /**
20686                     * Whether supplied object are equal?
20687                     * @param {*} a - a
20688                     * @param {*} b - b
20689                     * @returns {boolean} result of operation
20690                     */
20691                    'equal': function(a, b) {
20692                        return a === b;
20693                    },
20694
20695                    /**
20696                     * OR
20697                     * @param {*} a - a
20698                     * @param {*} b - b
20699                     * @returns {boolean} or
20700                     */
20701                    'or': function(a, b) {
20702                        return a || b;
20703                    },
20704
20705                    /**
20706                     * AND
20707                     * @param {*} a - a
20708                     * @param {*} b - b
20709                     * @returns {boolean} or
20710                     */
20711                    'and': function(a, b) {
20712                        return a && b;
20713                    },
20714
20715                    /**
20716                     * Compare object or apply logical operation by customizable oper parameter
20717                     * @param {*} a - a
20718                     * @param {string} oper - operator ex) '==', '<'
20719                     * @param {*} b - b
20720                     * @param {Handlebars} options - handlebar options
20721                     * @returns {boolean} result of operation
20722                     */
20723                    'fi': function(a, oper, b, options) {
20724                        switch (oper) {
20725                            case '==':
20726                                return (a == b) ? options.fn(this) : options.inverse(this);  // eslint-disable-line
20727                            case '===':
20728                                return (a === b) ? options.fn(this) : options.inverse(this);
20729                            case '!==':
20730                                return (a !== b) ? options.fn(this) : options.inverse(this);
20731                            case '<':
20732                                return (a < b) ? options.fn(this) : options.inverse(this);
20733                            case '||':
20734                                return (a || b) ? options.fn(this) : options.inverse(this);
20735                            default:
20736                                throw new Error('Not match operation');
20737                        }
20738                    },
20739
20740                    /**
20741                     * Get hhmm formatted time str
20742                     * @param {Date} date - date object
20743                     * @returns {string} formatted value
20744                     */
20745                    'hhmm': function(date) {
20746                        return datetime.format(date, 'HH:mm');
20747                    },
20748
20749                    /**
20750                     * Get `width` stylesheet string
20751                     * @param {number} width - width percentage
20752                     * @returns {string} css style part
20753                     */
20754                    'common-width': function(width) {
20755                        return getElSize(width, '%', 'width');
20756                    },
20757
20758                    /**
20759                     * Get element left based on narrowWeekend
20760                     * @param {object} viewModel - view model
20761                     * @param {Array} grids - dates information
20762                     * @returns {number} element left
20763                     */
20764                    'grid-left': function(viewModel, grids) {
20765                        return getElLeft(viewModel, grids);
20766                    },
20767
20768                    /**
20769                     * Get element width based on narrowWeekend
20770                     * @param {object} viewModel - view model
20771                     * @param {Array} grids - dates information
20772                     * @returns {number} element width
20773                     */
20774                    'grid-width': function(viewModel, grids) {
20775                        return getElWidth(viewModel, grids);
20776                    },
20777
20778                    /**
20779                     * Use in time.hbs
20780                     * @param {ScheduleViewModel} viewModel viewModel
20781                     * @returns {string} element size css class
20782                     */
20783                    'time-scheduleBlock': function(viewModel) {
20784                        var top = getElSize(viewModel.top, 'px', 'top'),
20785                            left = getElSize(viewModel.left, '%', 'left'),
20786                            width = getElSize(viewModel.width, '%', 'width'),
20787                            height = getElSize(viewModel.height, 'px', 'height');
20788
20789                        return [top, left, width, height].join(';');
20790                    },
20791
20792                    'month-scheduleBlock': function(viewModel, grids, blockHeight, paddingTop) {
20793                        var top = getElSize(((viewModel.top - 1) * blockHeight) + paddingTop, 'px', 'top');
20794                        var left = getElSize(grids[viewModel.left] ? grids[viewModel.left].left : 0, '%', 'left');
20795                        var width = getElSize(getElWidth(viewModel, grids), '%', 'width');
20796                        var height = getElSize(viewModel.height, 'px', 'height');
20797
20798                        return [top, left, width, height].join(';');
20799                    },
20800
20801                    'holiday': function(day) {
20802                        var cssClass = '';
20803
20804                        if (day === 0) {
20805                            cssClass = config.classname('holiday-sun');
20806                        }
20807
20808                        if (day === 6) {
20809                            cssClass = config.classname('holiday-sat');
20810                        }
20811
20812                        return cssClass;
20813                    },
20814
20815                    /**
20816                     * Add supplied two parameter
20817                     * @param {*} a - a
20818                     * @param {*} b - b
20819                     * @returns {number} result of operation
20820                     */
20821                    'add': function(a, b) {
20822                        return a + b;
20823                    },
20824
20825                    /**
20826                     * Multiply supplied two parameter
20827                     * @param {*} a - a
20828                     * @param {*} b - b
20829                     * @returns {number} result of operation
20830                     */
20831                    'multiply': function(a, b) {
20832                        return a * b;
20833                    },
20834
20835                    /**
20836                     * Divide supplied two parameter
20837                     * @param {*} a - a
20838                     * @param {*} b - b
20839                     * @returns {number} result of operation
20840                     */
20841                    'divide': function(a, b) {
20842                        return a / b;
20843                    },
20844
20845                    /**
20846                     * Subtract supplied two parameter
20847                     * @param {*} a - a
20848                     * @param {*} b - b
20849                     * @returns {number} result of operation
20850                     */
20851                    'subtract': function(a, b) {
20852                        return a - b;
20853                    },
20854
20855                    'getRight': function(a, b) {
20856                        return mmax(0, 100 - (a + b));
20857                    },
20858
20859                    /**
20860                     * Get css prefix in global configuration
20861                     * @returns {string} css prefix
20862                     */
20863                    'CSS_PREFIX': function() {
20864                        return config.cssPrefix;
20865                    },
20866
20867                    'reverse': function(array) {
20868                        return array.slice().reverse();
20869                    },
20870
20871                    /**********
20872                     * Default schedule template
20873                     **********/
20874
20875                    'milestone-tmpl': function(model) {
20876                        var icon = config.classname('icon');
20877                        var iconName = config.classname('ic-milestone');
20878
20879                        return '<span class="' + icon + ' ' + iconName + '"></span><span style="background-color: ' + model.bgColor + '">' + common.stripTags(model.title) + '</span>';
20880                    },
20881
20882                    'milestoneTitle-tmpl': function() {
20883                        var className = config.classname('left-content');
20884
20885                        return '<span class="' + className + '">Milestone</span>';
20886                    },
20887
20888                    'task-tmpl': function(model) {
20889                        return '#' + model.title;
20890                    },
20891
20892                    'taskTitle-tmpl': function() {
20893                        var className = config.classname('left-content');
20894
20895                        return '<span class="' + className + '">Task</span>';
20896                    },
20897
20898                    'alldayTitle-tmpl': function() {
20899                        var className = config.classname('left-content');
20900
20901                        return '<span class="' + className + '">All Day</span>';
20902                    },
20903
20904                    'allday-tmpl': function(model) {
20905                        return common.stripTags(model.title);
20906                    },
20907
20908                    'time-tmpl': function(model) {
20909                        return common.stripTags(model.title);
20910                    },
20911
20912                    'goingDuration-tmpl': function(model) {
20913                        var goingDuration = model.goingDuration;
20914                        var hour = parseInt(goingDuration / SIXTY_MINUTES, 10);
20915                        var minutes = goingDuration % SIXTY_MINUTES;
20916
20917                        return 'GoingTime ' + datetime.leadingZero(hour, 2) + ':' + datetime.leadingZero(minutes, 2);
20918                    },
20919
20920                    'comingDuration-tmpl': function(model) {
20921                        var goingDuration = model.goingDuration;
20922                        var hour = parseInt(goingDuration / SIXTY_MINUTES, 10);
20923                        var minutes = goingDuration % SIXTY_MINUTES;
20924
20925                        return 'ComingTime ' + datetime.leadingZero(hour, 2) + ':' + datetime.leadingZero(minutes, 2);
20926                    },
20927
20928                    'monthMoreTitleDate-tmpl': function(date, dayname) {
20929                        var classDay = config.classname('month-more-title-day');
20930                        var classDayLabel = config.classname('month-more-title-day-label');
20931                        var day = util.pick(date.split('.'), 2);
20932
20933                        return '<span class="' + classDay + '">' + day + '</span> <span class="' + classDayLabel + '">' + dayname + '</span>';
20934                    },
20935
20936                    'monthMoreClose-tmpl': function() {
20937                        return '';
20938                    },
20939
20940                    'monthGridHeader-tmpl': function(model) {
20941                        var date = parseInt(model.date.split('-')[2], 10);
20942                        var classNames = [];
20943
20944                        classNames.push(config.classname('weekday-grid-date'));
20945                        if (model.isToday) {
20946                            classNames.push(config.classname('weekday-grid-date-decorator'));
20947                        }
20948
20949                        return '<span class="' + classNames.join(' ') + '">' + date + '</span>';
20950                    },
20951
20952                    'monthGridHeaderExceed-tmpl': function(hiddenSchedules) {
20953                        var className = config.classname('weekday-grid-more-schedules');
20954
20955                        return '<span class="' + className + '">' + hiddenSchedules + ' more</span>';
20956                    },
20957
20958                    'monthGridFooter-tmpl': function() {
20959                        return '';
20960                    },
20961
20962                    /* eslint no-unused-vars: 0 */
20963                    'monthGridFooterExceed-tmpl': function(hiddenSchedules) {
20964                        return '';
20965                    },
20966
20967                    'monthDayname-tmpl': function(model) {
20968                        return model.label;
20969                    },
20970
20971                    'weekDayname-tmpl': function(model) {
20972                        var classDate = config.classname('dayname-date');
20973                        var className = config.classname('dayname-name');
20974
20975                        return '<span class="' + classDate + '">' + model.date + '</span>&nbsp;&nbsp;<span class="' + className + '">' + model.dayName + '</span>';
20976                    },
20977
20978                    'weekGridFooterExceed-tmpl': function(hiddenSchedules) {
20979                        return '+' + hiddenSchedules;
20980                    },
20981
20982                    'dayGridTitle-tmpl': function(viewName) {
20983                        var tmpl = Handlebars.helpers[viewName + 'Title-tmpl'];
20984                        if (tmpl) {
20985                            return tmpl(viewName);
20986                        }
20987
20988                        return viewName;
20989                    },
20990
20991                    'schedule-tmpl': function(model) {
20992                        var tmpl = Handlebars.helpers[model.category + '-tmpl'];
20993                        if (tmpl) {
20994                            return tmpl(model);
20995                        }
20996
20997                        return '';
20998                    },
20999
21000                    'collapseBtnTitle-tmpl': function() {
21001                        var iconName = config.classname('icon');
21002                        var closeIconName = config.classname('ic-arrow-solid-top');
21003
21004                        return '<span class="' + iconName + ' ' + closeIconName + '"></span>';
21005                    },
21006
21007                    'timezoneDisplayLabel-tmpl': function(timezoneOffset, displayLabel) {
21008                        var gmt, hour, minutes;
21009
21010                        if (util.isUndefined(displayLabel)) {
21011                            gmt = timezoneOffset < 0 ? '-' : '+';
21012                            hour = Math.abs(parseInt(timezoneOffset / SIXTY_MINUTES, 10));
21013                            minutes = Math.abs(timezoneOffset % SIXTY_MINUTES);
21014                            displayLabel = gmt + datetime.leadingZero(hour, 2) + ':' + datetime.leadingZero(minutes, 2);
21015                        }
21016
21017                        return displayLabel;
21018                    },
21019
21020                    'timegridDisplayPrimayTime-tmpl': function(time) {
21021                        /* TODO: ì‚­ì œ í•„ìš” (will be deprecated) */
21022                        return Handlebars.helpers['timegridDisplayPrimaryTime-tmpl'](time);
21023                    },
21024
21025                    'timegridDisplayPrimaryTime-tmpl': function(time) {
21026                        var hour = time.hour;
21027                        var meridiem = hour >= 12 ? 'pm' : 'am';
21028
21029                        if (hour > 12) {
21030                            hour = hour - 12;
21031                        }
21032
21033                        return hour + ' ' + meridiem;
21034                    },
21035
21036                    'timegridDisplayTime-tmpl': function(time) {
21037                        return datetime.leadingZero(time.hour, 2) + ':' + datetime.leadingZero(time.minutes, 2);
21038                    },
21039
21040                    'timegridCurrentTime-tmpl': function(timezone) {
21041                        var templates = [];
21042
21043                        if (timezone.dateDifference) {
21044                            templates.push('[' + timezone.dateDifferenceSign + timezone.dateDifference + ']<br>');
21045                        }
21046
21047                        templates.push(datetime.format(timezone.hourmarker, 'HH:mm'));
21048
21049                        return templates.join('');
21050                    },
21051
21052                    'popupIsAllDay-tmpl': function() {
21053                        return 'All day';
21054                    },
21055
21056                    'popupStateFree-tmpl': function() {
21057                        return 'Free';
21058                    },
21059
21060                    'popupStateBusy-tmpl': function() {
21061                        return 'Busy';
21062                    },
21063
21064                    'titlePlaceholder-tmpl': function() {
21065                        return 'Subject';
21066                    },
21067
21068                    'locationPlaceholder-tmpl': function() {
21069                        return 'Location';
21070                    },
21071
21072                    'startDatePlaceholder-tmpl': function() {
21073                        return 'Start date';
21074                    },
21075
21076                    'endDatePlaceholder-tmpl': function() {
21077                        return 'End date';
21078                    },
21079                    'popupSave-tmpl': function() {
21080                        return 'Save';
21081                    },
21082                    'popupUpdate-tmpl': function() {
21083                        return 'Update';
21084                    },
21085                    'popupDetailDate-tmpl': function(isAllDay, start, end) {
21086                        var isSameDate = datetime.isSameDate(start, end);
21087                        var endFormat = (isSameDate ? '' : 'YYYY.MM.DD ') + 'hh:mm tt';
21088
21089                        if (isAllDay) {
21090                            return datetime.format(start, 'YYYY.MM.DD') + (isSameDate ? '' : ' - ' + datetime.format(end, 'YYYY.MM.DD'));
21091                        }
21092
21093                        return (datetime.format(start, 'YYYY.MM.DD hh:mm tt') + ' - ' + datetime.format(end, endFormat));
21094                    },
21095                    'popupDetailLocation-tmpl': function(schedule) {
21096                        return schedule.location;
21097                    },
21098                    'popupDetailUser-tmpl': function(schedule) {
21099                        return (schedule.attendees || []).join(', ');
21100                    },
21101                    'popupDetailState-tmpl': function(schedule) {
21102                        return schedule.state || 'Busy';
21103                    },
21104                    'popupDetailRepeat-tmpl': function(schedule) {
21105                        return schedule.recurrenceRule;
21106                    },
21107                    'popupDetailBody-tmpl': function(schedule) {
21108                        return schedule.body;
21109                    },
21110                    'popupEdit-tmpl': function() {
21111                        return 'Edit';
21112                    },
21113                    'popupDelete-tmpl': function() {
21114                        return 'Delete';
21115                    }
21116                };
21117
21118                /**
21119                 * Get CSS syntax for element size
21120                 * @param {number} value - size value to apply element
21121                 * @param {string} postfix - postfix string ex) px, em, %
21122                 * @param {string} prefix - property name ex) width, height
21123                 * @returns {string}
21123 CSS syntax
21124                 */
21125                function getElSize(value, postfix, prefix) {
21126                    prefix = prefix || '';
21127                    if (util.isNumber(value)) {
21128                        return prefix + ':' + value + postfix;
21129                    }
21130
21131                    return prefix + ':auto';
21132                }
21133
21134                /**
21135                 * Get element left based on narrowWeekend
21136                 * @param {object} viewModel - view model
21137                 * @param {Array} grids - dates information
21138                 * @returns {number} element left
21139                 */
21140                function getElLeft(viewModel, grids) {
21141                    return grids[viewModel.left] ? grids[viewModel.left].left : 0;
21142                }
21143
21144                /**
21145                 * Get element width based on narrowWeekend
21146                 * @param {object} viewModel - view model
21147                 * @param {Array} grids - dates information
21148                 * @returns {number} element width
21149                 */
21150                function getElWidth(viewModel, grids) {
21151                    var width = 0;
21152                    var i = 0;
21153                    var length = grids.length;
21154                    var left;
21155                    for (;
21155 i < viewModel.width; i += 1) {
21156                        left = (viewModel.left + i) % length;
21157                        left += parseInt((viewModel.left + i) / length, 10);
21158                        if (left < length) {
21159                            width += grids[left] ? grids[left].width : 0;
21160                        }
21161                    }
21162
21163                    return width;
21164                }
21165
21166                Handlebars.registerHelper(helpers);
21167
21168
21169                /***/ }),
21170
21171            /***/ "./src/js/view/template/month/month.hbs":
21172            /*!**********************************************!*\
21173  !*** ./src/js/view/template/month/month.hbs ***!
21174  \**********************************************/
21175            /*! no static exports found */
21176            /***/ (function(module, exports, __webpack_require__) {
21177
21178                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
21179                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
21180                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21181                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21182                                return parent[propertyName];
21183                            }
21184                            return undefined
21185                        };
21186
21187                        return "    <div class=\""
21188                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":4,"column":16},"end":{"line":4,"column":30}}}) : helper)))
21189                            + "month-dayname-item\"\n         style=\"position: absolute;\n                width: "
21190                            + alias4(((helper = (helper = lookupProperty(helpers,"width") || (depth0 != null ? lookupProperty(depth0,"width") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"width","hash":{},"data":data,"loc":{"start":{"line":6,"column":23},"end":{"line":6,"column":32}}}) : helper)))
21191                            + "%;\n                left: "
21192                            + alias4(((helper = (helper = lookupProperty(helpers,"left") || (depth0 != null ? lookupProperty(depth0,"left") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"left","hash":{},"data":data,"loc":{"start":{"line":7,"column":22},"end":{"line":7,"column":30}}}) : helper)))
21193                            + "%;\n                padding-left: "
21194                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"paddingLeft")), depth0))
21195                            + ";\n                padding-right: "
21196                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"paddingRight")), depth0))
21197                            + ";\n                line-height: "
21198                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"height")), depth0))
21199                            + ";\n"
21200                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(data && lookupProperty(data,"last")),{"name":"unless","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":11,"column":16},"end":{"line":13,"column":27}}})) != null ? stack1 : "")
21201                            + "                \">
vendor: 43,098 bytes, lines 21201-21576
21201\n        <span class=\""
21202                            + alias4((lookupProperty(helpers,"holiday")||(depth0 && lookupProperty(depth0,"holiday"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"day") : depth0),{"name":"holiday","hash":{},"data":data,"loc":{"start":{"line":15,"column":21},"end":{"line":15,"column":36}}}))
21203                            + "\" style=\"color: "
21204                            + alias4(((helper = (helper = lookupProperty(helpers,"color") || (depth0 != null ? lookupProperty(depth0,"color") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"color","hash":{},"data":data,"loc":{"start":{"line":15,"column":52},"end":{"line":15,"column":61}}}) : helper)))
21205                            + ";\">\n            "
21206                            + ((stack1 = (lookupProperty(helpers,"monthDayname-tmpl")||(depth0 && lookupProperty(depth0,"monthDayname-tmpl"))||alias2).call(alias1,depth0,{"name":"monthDayname-tmpl","hash":{},"data":data,"loc":{"start":{"line":16,"column":12},"end":{"line":16,"column":40}}})) != null ? stack1 : "")
21207                            + "\n        </span>\n    </div>\n";
21208                    },"2":function(container,depth0,helpers,partials,data) {
21209                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21210                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21211                                return parent[propertyName];
21212                            }
21213                            return undefined
21214                        };
21215
21216                        return "                border-right: "
21217                            + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderLeft")), depth0))
21218                            + ";\n";
21219                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
21220                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21221                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21222                                return parent[propertyName];
21223                            }
21224                            return undefined
21225                        };
21226
21227                        return "<div class=\""
21228                            + alias2(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
21229                            + "month-dayname\"\n    style=\"border-top: "
21230                            + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"borderTop") : stack1), depth0))
21231                            + "; height: "
21232                            + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"height") : stack1), depth0))
21233                            + "; font-size: "
21234                            + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"fontSize") : stack1), depth0))
21235                            + "; background-color: "
21236                            + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"backgroundColor") : stack1), depth0))
21237                            + "; text-align: "
21238                            + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"textAlign") : stack1), depth0))
21239                            + "; font-weight: "
21240                            + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"fontWeight") : stack1), depth0))
21241                            + ";\">\n"
21242                            + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"daynames") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":0},"end":{"line":19,"column":9}}})) != null ? stack1 : "")
21243                            + "</div>\n";
21244                    },"useData":true});
21245
21246                /***/ }),
21247
21248            /***/ "./src/js/view/template/month/more.hbs":
21249            /*!*********************************************!*\
21250  !*** ./src/js/view/template/month/more.hbs ***!
21251  \*********************************************/
21252            /*! no static exports found */
21253            /***/ (function(module, exports, __webpack_require__) {
21254
21255                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
21256                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
21257                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21258                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21259                                return parent[propertyName];
21260                            }
21261                            return undefined
21262                        };
21263
21264                        return ((stack1 = (lookupProperty(helpers,"fi")||(depth0 && lookupProperty(depth0,"fi"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isAllDay") : stack1),"||",(depth0 != null ? lookupProperty(depth0,"hasMultiDates") : depth0),{"name":"fi","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(7, data, 0),"data":data,"loc":{"start":{"line":9,"column":8},"end":{"line":65,"column":15}}})) != null ? stack1 : "");
21265                    },"2":function(container,depth0,helpers,partials,data) {
21266                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=container.escapeExpression, alias4=container.lambda, alias5="function", lookupProperty = container.lookupProperty || function(parent, propertyName) {
21267                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21268                                return parent[propertyName];
21269                            }
21270                            return undefined
21271                        };
21272
21273                        return "<div data-id=\""
21274                            + alias3((lookupProperty(helpers,"stamp")||(depth0 && lookupProperty(depth0,"stamp"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"stamp","hash":{},"data":data,"loc":{"start":{"line":10,"column":26},"end":{"line":10,"column":41}}}))
21275                            + "\"\n                data-schedule-id=\""
21276                            + alias3(alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"id") : stack1), depth0))
21277                            + "\" data-calendar-id=\""
21278                            + alias3(alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"calendarId") : stack1), depth0))
21279                            + "\"\n                class=\""
21280                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias5 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":23},"end":{"line":12,"column":37}}}) : helper)))
21281                            + "month-more-schedule "
21282                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias5 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":57},"end":{"line":12,"column":71}}}) : helper)))
21283                            + "month-more-allday "
21284                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias5 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":89},"end":{"line":12,"column":103}}}) : helper)))
21285                            + "weekday-schedule-title\"\n                style=\"height: "
21286                            + alias3(alias4(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21287                            + "px; line-height: "
21288                            + alias3(alias4(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21289                            + "px; margin-top: "
21290                            + alias3(alias4(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleGutter")), depth0))
21291                            + "px; border-radius: "
21292                            + alias3(alias4(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"borderRadius")), depth0))
21293                            + ";\n"
21294                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.program(5, data, 0),"data":data,"loc":{"start":{"line":14,"column":20},"end":{"line":18,"column":27}}})) != null ? stack1 : "")
21295                            + "                    "
21296                            + alias3(alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"customStyle") : stack1), depth0))
21297                            + "\">\n                    "
21298                            + ((stack1 = (lookupProperty(helpers,"allday-tmpl")||(depth0 && lookupProperty(depth0,"allday-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"allday-tmpl","hash":{},"data":data,"loc":{"start":{"line":20,"column":20},"end":{"line":20,"column":43}}})) != null ? stack1 : "")
21299                            + "\n            </div>\n";
21300                    },"3":function(container,depth0,helpers,partials,data) {
21301                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21302                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21303                                return parent[propertyName];
21304                            }
21305                            return undefined
21306                        };
21307
21308                        return "                        color: #ffffff; background-color:"
21309                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
21310                            + "; border-left:3px solid "
21311                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
21312                            + ";\n";
21313                    },"5":function(container,depth0,helpers,partials,data) {
21314                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21315                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21316                                return parent[propertyName];
21317                            }
21318                            return undefined
21319                        };
21320
21321                        return "                        color:"
21322                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
21323                            + "; background-color:"
21324                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"bgColor") : stack1), depth0))
21325                            + "; border-left:3px solid "
21326                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
21327                            + ";\n";
21328                    },"7":function(container,depth0,helpers,partials,data) {
21329                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21330                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21331                                return parent[propertyName];
21332                            }
21333                            return undefined
21334                        };
21335
21336                        return ((stack1 = (lookupProperty(helpers,"fi")||(depth0 && lookupProperty(depth0,"fi"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"category") : stack1),"===","time",{"name":"fi","hash":{},"fn":container.program(8, data, 0),"inverse":container.program(17, data, 0),"data":data,"loc":{"start":{"line":23,"column":12},"end":{"line":64,"column":19}}})) != null ? stack1 : "");
21337                    },"8":function(container,depth0,helpers,partials,data) {
21338                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=container.escapeExpression, alias4=container.lambda, alias5="function", lookupProperty = container.lookupProperty || function(parent, propertyName) {
21339                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21340                                return parent[propertyName];
21341                            }
21342                            return undefined
21343                        };
21344
21345                        return "                <div data-id=\""
21346                            + alias3((lookupProperty(helpers,"stamp")||(depth0 && lookupProperty(depth0,"stamp"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"stamp","hash":{},"data":data,"loc":{"start":{"line":24,"column":30},"end":{"line":24,"column":45}}}))
21347                            + "\"\n                    data-schedule-id=\""
21348                            + alias3(alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"id") : stack1), depth0))
21349                            + "\" data-calendar-id=\""
21350                            + alias3(alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"calendarId") : stack1), depth0))
21351                            + "\"\n                    class=\""
21352                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias5 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":26,"column":27},"end":{"line":26,"column":41}}}) : helper)))
21353                            + "month-more-schedule "
21354                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias5 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":26,"column":61},"end":{"line":26,"column":75}}}) : helper)))
21355                            + "weekday-schedule "
21356                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias5 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":26,"column":92},"end":{"line":26,"column":106}}}) : helper)))
21357                            + "weekday-schedule-time\"\n                    style=\"height: "
21358                            + alias3(alias4(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21359                            + "px; line-height: "
21360                            + alias3(alias4(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21361                            + "px; margin-top: "
21362                            + alias3(alias4(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleGutter")), depth0))
21363                            + "px;"
21364                            + alias3(alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"customStyle") : stack1), depth0))
21365                            + "\">\n                    <span class=\""
21366                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias5 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":28,"column":33},"end":{"line":28,"column":47}}}) : helper)))
21367                            + "weekday-schedule-bullet\"\n                        style=\"top: "
21368                            + alias3(alias4(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleBulletTop")), depth0))
21369                            + "px;\n"
21370                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.program(11, data, 0),"data":data,"loc":{"start":{"line":30,"column":28},"end":{"line":34,"column":35}}})) != null ? stack1 : "")
21371                            + "\"></span>\n                    <span class=\""
21372                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias5 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":35,"column":33},"end":{"line":35,"column":47}}}) : helper)))
21373                            + "weekday-schedule-title\"\n                        style=\""
21374                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.program(15, data, 0),"data":data,"loc":{"start":{"line":36,"column":31},"end":{"line":41,"column":35}}})) != null ? stack1 : "")
21375                            + "\"\n                        data-title=\""
21376                            + alias3(alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"title") : stack1), depth0))
21377                            + "\">"
21378                            + ((stack1 = (lookupProperty(helpers,"time-tmpl")||(depth0 && lookupProperty(depth0,"time-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"time-tmpl","hash":{},"data":data,"loc":{"start":{"line":42,"column":53},"end":{"line":42,"column":74}}})) != null ? stack1 : "")
21379                            + "</span>\n                </div>\n";
21380                    },"9":function(container,depth0,helpers,partials,data) {
21381                        return "                                background: #ffffff\n";
21382                    },"11":function(container,depth0,helpers,partials,data) {
21383                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21384                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21385                                return parent[propertyName];
21386                            }
21387                            return undefined
21388                        };
21389
21390                        return "                                background:"
21391                            + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
21392                            + "\n                            ";
21393                    },"13":function(container,depth0,helpers,partials,data) {
21394                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21395                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21396                                return parent[propertyName];
21397                            }
21398                            return undefined
21399                        };
21400
21401                        return "\n                                color: #ffffff;\n                                background-color: "
21402                            + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
21403                            + "\n";
21404                    },"15":function(container,depth0,helpers,partials,data) {
21405                        return "                                color:#333;\n                            ";
21406                    },"17":function(container,depth0,helpers,partials,data) {
21407                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=container.escapeExpression, alias4=container.lambda, alias5="function", lookupProperty = container.lookupProperty || function(parent, propertyName) {
21408                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21409                                return parent[propertyName];
21410                            }
21411                            return undefined
21412                        };
21413
21414                        return "<div data-id=\""
21415                            + alias3((lookupProperty(helpers,"stamp")||(depth0 && lookupProperty(depth0,"stamp"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"stamp","hash":{},"data":data,"loc":{"start":{"line":45,"column":30},"end":{"line":45,"column":45}}}))
21416                            + "\"\n                    data-schedule-id=\""
21417                            + alias3(alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"id") : stack1), depth0))
21418                            + "\" data-calendar-id=\""
21419                            + alias3(alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"calendarId") : stack1), depth0))
21420                            + "\"\n                    class=\""
21421                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias5 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":47,"column":27},"end":{"line":47,"column":41}}}) : helper)))
21422                            + "month-more-schedule "
21423                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias5 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":47,"column":61},"end":{"line":47,"column":75}}}) : helper)))
21424                            + "weekday-schedule "
21425                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(18, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":47,"column":92},"end":{"line":47,"column":161}}})) != null ? stack1 : "")
21426                            + "\"\n                    style=\"height:"
21427                            + alias3(alias4(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21428                            + "px; line-height:"
21429                            + alias3(alias4(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21430                            + "px; border-radius: "
21431                            + alias3(alias4(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderRadius")), depth0))
21432                            + ";\n"
21433                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"exceedLeft") : depth0),{"name":"unless","hash":{},"fn":container.program(20, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":49,"column":20},"end":{"line":51,"column":31}}})) != null ? stack1 : "")
21434                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"exceedRight") : depth0),{"name":"unless","hash":{},"fn":container.program(22, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":52,"column":20},"end":{"line":54,"column":31}}})) != null ? stack1 : "")
21435                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(24, data, 0),"inverse":container.program(26, data, 0),"data":data,"loc":{"start":{"line":55,"column":20},"end":{"line":59,"column":27}}})) != null ? stack1 : "")
21436                            + "                        "
21437                            + alias3(alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"customStyle") : stack1), depth0))
21438                            + "\">\n                    <span class=\""
21439                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias5 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":61,"column":33},"end":{"line":61,"column":47}}}) : helper)))
21440                            + "weekday-schedule-title\"\n                                    data-title=\""
21441                            + alias3(alias4(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"title") : stack1), depth0))
21442                            + "\">"
21443                            + ((stack1 = (lookupProperty(helpers,"schedule-tmpl")||(depth0 && lookupProperty(depth0,"schedule-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"schedule-tmpl","hash":{},"data":data,"loc":{"start":{"line":62,"column":65},"end":{"line":62,"column":90}}})) != null ? stack1 : "")
21444                            + "</span>\n                </div>\n";
21445                    },"18":function(container,depth0,helpers,partials,data) {
21446                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21447                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21448                                return parent[propertyName];
21449                            }
21450                            return undefined
21451                        };
21452
21453                        return container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":47,"column":115},"end":{"line":47,"column":129}}}) : helper)))
21454                            + "weekday-schedule-focused ";
21455                    },"20":function(container,depth0,helpers,partials,data) {
21456                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21457                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21458                                return parent[propertyName];
21459                            }
21460                            return undefined
21461                        };
21462
21463                        return "                        margin-left: "
21464                            + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"marginLeft")), depth0))
21465                            + ";\n";
21466                    },"22":function(container,depth0,helpers,partials,data) {
21467                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21468                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21469                                return parent[propertyName];
21470                            }
21471                            return undefined
21472                        };
21473
21474                        return "                        margin-right: "
21475                            + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"marginRight")), depth0))
21476                            + ";\n";
21477                    },"24":function(container,depth0,helpers,partials,data) {
21478                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21479                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21480                                return parent[propertyName];
21481                            }
21482                            return undefined
21483                        };
21484
21485                        return "                        color: #ffffff; background-color:"
21486                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
21487                            + "; border-color:"
21488                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
21489                            + ";\n";
21490                    },"26":function(container,depth0,helpers,partials,data) {
21491                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21492                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21493                                return parent[propertyName];
21494                            }
21495                            return undefined
21496                        };
21497
21498                        return "                        color:"
21499                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
21500                            + "; background-color:"
21501                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"bgColor") : stack1), depth0))
21502                            + "; border-color:"
21503                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
21504                            + ";\n";
21505                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
21506                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21507                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21508                                return parent[propertyName];
21509                            }
21510                            return undefined
21511                        };
21512
21513                        return "<div class=\""
21514                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
21515                            + "month-more\" style=\"padding-bottom: "
21516                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"paddingBottom") : stack1), depth0))
21517                            + "; border: "
21518                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"border") : stack1), depth0))
21519                            + "; box-shadow: "
21520                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"boxShadow") : stack1), depth0))
21521                            + "; background-color: "
21522                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"backgroundColor") : stack1), depth0))
21523                            + ";\">\n    <div class=\""
21524                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":2,"column":16},"end":{"line":2,"column":30}}}) : helper)))
21525                            + "month-more-title\"\n        style=\"height: "
21526                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"titleHeight") : stack1), depth0))
21527                            + "; margin-bottom: "
21528                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"titleMarginBottom") : stack1), depth0))
21529                            + "; background-color: "
21530                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"titleBackgroundColor") : stack1), depth0))
21531                            + "; border-bottom: "
21532                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"titleBorderBottom") : stack1), depth0))
21533                            + "; padding: "
21534                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"titlePadding") : stack1), depth0))
21535                            + ";\">\n        <span class=\""
21536                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":4,"column":21},"end":{"line":4,"column":35}}}) : helper)))
21537                            + "month-more-title-date\">"
21538                            + ((stack1 = (lookupProperty(helpers,"monthMoreTitleDate-tmpl")||(depth0 && lookupProperty(depth0,"monthMoreTitleDate-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"date") : depth0),(depth0 != null ? lookupProperty(depth0,"dayname") : depth0),{"name":"monthMoreTitleDate-tmpl","hash":{},"data":data,"loc":{"start":{"line":4,"column":58},"end":{"line":4,"column":100}}})) != null ? stack1 : "")
21539                            + "</span>\n        <button type=\"button\" class=\""
21540                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":5,"column":37},"end":{"line":5,"column":51}}}) : helper)))
21541                            + "month-more-close\">"
21542                            + ((stack1 = ((helper = (helper = lookupProperty(helpers,"monthMoreClose-tmpl") || (depth0 != null ? lookupProperty(depth0,"monthMoreClose-tmpl") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"monthMoreClose-tmpl","hash":{},"data":data,"loc":{"start":{"line":5,"column":69},"end":{"line":5,"column":94}}}) : helper))) != null ? stack1 : "")
21543                            + "</button>\n    </div>\n    <div class=\""
21544                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":16},"end":{"line":7,"column":30}}}) : helper)))
21545                            + "month-more-list\" style=\"padding: "
21546                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"listPadding") : stack1), depth0))
21547                            + "; height: "
21548                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"listHeight") : stack1), depth0))
21549                            + ";\">\n"
21550                            + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"schedules") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":8},"end":{"line":66,"column":17}}})) != null ? stack1 : "")
21551                            + "    </div>\n</div>\n";
21552                    },"useData":true});
21553
21554                /***/ }),
21555
21556            /***/ "./src/js/view/template/month/weekdayInMonth.hbs":
21557            /*!*******************************************************!*\
21558  !*** ./src/js/view/template/month/weekdayInMonth.hbs ***!
21559  \*******************************************************/
21560            /*! no static exports found */
21561            /***/ (function(module, exports, __webpack_require__) {
21562
21563                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
21564                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
21565                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21566                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21567                                return parent[propertyName];
21568                            }
21569                            return undefined
21570                        };
21571
21572                        return "<div class=\""
21573                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":16},"end":{"line":7,"column":30}}}) : helper)))
21574                            + "weekday-grid-line "
21575                            + alias4((lookupProperty(helpers,"holiday")||(depth0 && lookupProperty(depth0,"holiday"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"day") : depth0),{"name":"holiday","hash":{},"data":data,"loc":{"start":{"line":7,"column":48},"end":{"line":7,"column":63}}}))
21576                            + ((stack1 = (lookupProperty(helpers,"fi")||(depth0 && lookupProperty(depth0,"fi"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"date") : depth0),"!==",1,{"n
21576ame":"fi","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":7,"column":63},"end":{"line":7,"column":119}}})) != null ? stack1 : "")
21577                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isToday") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":7,"column":119},"end":{"line":7,"column":161}}})) != null ? stack1 : "")
21578                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isOtherMonth") : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":7,"column":161},"end":{"line":7,"column":213}}})) != null ? stack1 : "")
21579                            + "\"\n        style=\"width:"
21580                            + alias4(((helper = (helper = lookupProperty(helpers,"width") || (depth0 != null ? lookupProperty(depth0,"width") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"width","hash":{},"data":data,"loc":{"start":{"line":8,"column":21},"end":{"line":8,"column":30}}}) : helper)))
21581                            + "%; left:"
21582                            + alias4(((helper = (helper = lookupProperty(helpers,"left") || (depth0 != null ? lookupProperty(depth0,"left") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"left","hash":{},"data":data,"loc":{"start":{"line":8,"column":38},"end":{"line":8,"column":46}}}) : helper)))
21583                            + "%; background-color: "
21584                            + alias4(((helper = (helper = lookupProperty(helpers,"backgroundColor") || (depth0 != null ? lookupProperty(depth0,"backgroundColor") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"backgroundColor","hash":{},"data":data,"loc":{"start":{"line":8,"column":67},"end":{"line":8,"column":86}}}) : helper)))
21585                            + "; font-size: "
21586                            + alias4(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"fontSize")), depth0))
21587                            + ";\n"
21588                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(data && lookupProperty(data,"last")),{"name":"unless","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":9,"column":8},"end":{"line":11,"column":19}}})) != null ? stack1 : "")
21589                            + "        \">\n        <div class=\""
21590                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":13,"column":20},"end":{"line":13,"column":34}}}) : helper)))
21591                            + "weekday-grid-header\">\n            <span style=\"color: "
21592                            + alias4(((helper = (helper = lookupProperty(helpers,"color") || (depth0 != null ? lookupProperty(depth0,"color") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"color","hash":{},"data":data,"loc":{"start":{"line":14,"column":32},"end":{"line":14,"column":41}}}) : helper)))
21593                            + ";\">"
21594                            + ((stack1 = (lookupProperty(helpers,"monthGridHeader-tmpl")||(depth0 && lookupProperty(depth0,"monthGridHeader-tmpl"))||alias2).call(alias1,depth0,{"name":"monthGridHeader-tmpl","hash":{},"data":data,"loc":{"start":{"line":14,"column":44},"end":{"line":14,"column":75}}})) != null ? stack1 : "")
21595                            + "</span>\n"
21596                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hiddenSchedules") : depth0),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":15,"column":12},"end":{"line":17,"column":19}}
vendor: 29,380 bytes, lines 21596-21844
21596})) != null ? stack1 : "")
21597                            + "        </div>\n        <div class=\""
21598                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":19,"column":20},"end":{"line":19,"column":34}}}) : helper)))
21599                            + "weekday-grid-footer\">\n            <span style=\"color: "
21600                            + alias4(((helper = (helper = lookupProperty(helpers,"color") || (depth0 != null ? lookupProperty(depth0,"color") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"color","hash":{},"data":data,"loc":{"start":{"line":20,"column":32},"end":{"line":20,"column":41}}}) : helper)))
21601                            + ";\">"
21602                            + ((stack1 = (lookupProperty(helpers,"monthGridFooter-tmpl")||(depth0 && lookupProperty(depth0,"monthGridFooter-tmpl"))||alias2).call(alias1,depth0,{"name":"monthGridFooter-tmpl","hash":{},"data":data,"loc":{"start":{"line":20,"column":44},"end":{"line":20,"column":75}}})) != null ? stack1 : "")
21603                            + "</span>\n"
21604                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hiddenSchedules") : depth0),{"name":"if","hash":{},"fn":container.program(12, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":21,"column":12},"end":{"line":23,"column":19}}})) != null ? stack1 : "")
21605                            + "        </div>\n    </div>\n";
21606                    },"2":function(container,depth0,helpers,partials,data) {
21607                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21608                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21609                                return parent[propertyName];
21610                            }
21611                            return undefined
21612                        };
21613
21614                        return " "
21615                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":84},"end":{"line":7,"column":98}}}) : helper)))
21616                            + "near-month-day";
21617                    },"4":function(container,depth0,helpers,partials,data) {
21618                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21619                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21620                                return parent[propertyName];
21621                            }
21622                            return undefined
21623                        };
21624
21625                        return " "
21626                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":135},"end":{"line":7,"column":149}}}) : helper)))
21627                            + "today";
21628                    },"6":function(container,depth0,helpers,partials,data) {
21629                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21630                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21631                                return parent[propertyName];
21632                            }
21633                            return undefined
21634                        };
21635
21636                        return " "
21637                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":182},"end":{"line":7,"column":196}}}) : helper)))
21638                            + "extra-date";
21639                    },"8":function(container,depth0,helpers,partials,data) {
21640                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21641                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21642                                return parent[propertyName];
21643                            }
21644                            return undefined
21645                        };
21646
21647                        return "        border-right:"
21648                            + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderLeft")), depth0))
21649                            + ";\n";
21650                    },"10":function(container,depth0,helpers,partials,data) {
21651                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21652                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21653                                return parent[propertyName];
21654                            }
21655                            return undefined
21656                        };
21657
21658                        return "                <span class=\""
21659                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":16,"column":29},"end":{"line":16,"column":43}}}) : helper)))
21660                            + "weekday-exceed-in-month\" data-ymd=\""
21661                            + alias4(((helper = (helper = lookupProperty(helpers,"ymd") || (depth0 != null ? lookupProperty(depth0,"ymd") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"ymd","hash":{},"data":data,"loc":{"start":{"line":16,"column":78},"end":{"line":16,"column":85}}}) : helper)))
21662                            + "\">"
21663                            + ((stack1 = (lookupProperty(helpers,"monthGridHeaderExceed-tmpl")||(depth0 && lookupProperty(depth0,"monthGridHeaderExceed-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"hiddenSchedules") : depth0),{"name":"monthGridHeaderExceed-tmpl","hash":{},"data":data,"loc":{"start":{"line":16,"column":87},"end":{"line":16,"column":135}}})) != null ? stack1 : "")
21664                            + "</span>\n";
21665                    },"12":function(container,depth0,helpers,partials,data) {
21666                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21667                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21668                                return parent[propertyName];
21669                            }
21670                            return undefined
21671                        };
21672
21673                        return "                <span class=\""
21674                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":22,"column":29},"end":{"line":22,"column":43}}}) : helper)))
21675                            + "weekday-exceed-in-month\" data-ymd=\""
21676                            + alias4(((helper = (helper = lookupProperty(helpers,"ymd") || (depth0 != null ? lookupProperty(depth0,"ymd") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"ymd","hash":{},"data":data,"loc":{"start":{"line":22,"column":78},"end":{"line":22,"column":85}}}) : helper)))
21677                            + "\">"
21678                            + ((stack1 = (lookupProperty(helpers,"monthGridFooterExceed-tmpl")||(depth0 && lookupProperty(depth0,"monthGridFooterExceed-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"hiddenSchedules") : depth0),{"name":"monthGridFooterExceed-tmpl","hash":{},"data":data,"loc":{"start":{"line":22,"column":87},"end":{"line":22,"column":135}}})) != null ? stack1 : "")
21679                            + "</span>\n";
21680                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
21681                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21682                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21683                                return parent[propertyName];
21684                            }
21685                            return undefined
21686                        };
21687
21688                        return "<div class=\""
21689                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
21690                            + "weekday-border\"\n    style=\"\n    border-top: "
21691                            + alias4(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"borderTop") : stack1), depth0))
21692                            + ";\n\"></div>\n<div class=\""
21693                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":5,"column":26}}}) : helper)))
21694                            + "weekday-grid\">\n"
21695                            + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"dates") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":6,"column":0},"end":{"line":26,"column":11}}})) != null ? stack1 : "")
21696                            + "</div>\n<div class=\""
21697                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":28,"column":12},"end":{"line":28,"column":26}}}) : helper)))
21698                            + "weekday-schedules\"></div>\n";
21699                    },"useData":true});
21700
21701                /***/ }),
21702
21703            /***/ "./src/js/view/template/month/weekdayInMonthSchedule.hbs":
21704            /*!***************************************************************!*\
21705  !*** ./src/js/view/template/month/weekdayInMonthSchedule.hbs ***!
21706  \***************************************************************/
21707            /*! no static exports found */
21708            /***/ (function(module, exports, __webpack_require__) {
21709
21710                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
21711                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
21712                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21713                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21714                                return parent[propertyName];
21715                            }
21716                            return undefined
21717                        };
21718
21719                        return ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":0},"end":{"line":80,"column":11}}})) != null ? stack1 : "");
21720                    },"2":function(container,depth0,helpers,partials,data) {
21721                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21722                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21723                                return parent[propertyName];
21724                            }
21725                            return undefined
21726                        };
21727
21728                        return "\n"
21729                            + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"each","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":0},"end":{"line":79,"column":11}}})) != null ? stack1 : "");
21730                    },"3":function(container,depth0,helpers,partials,data) {
21731                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21732                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21733                                return parent[propertyName];
21734                            }
21735                            return undefined
21736                        };
21737
21738                        return "\n"
21739                            + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":0},"end":{"line":78,"column":9}}})) != null ? stack1 : "");
21740                    },"4":function(container,depth0,helpers,partials,data) {
21741                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21742                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21743                                return parent[propertyName];
21744                            }
21745                            return undefined
21746                        };
21747
21748                        return "\n"
21749                            + ((stack1 = (lookupProperty(helpers,"fi")||(depth0 && lookupProperty(depth0,"fi"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"top") : depth0),"<",((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"renderLimitIdx")),{"name":"fi","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":5,"column":4},"end":{"line":77,"column":13}}})) != null ? stack1 : "");
21750                    },"5":function(container,depth0,helpers,partials,data) {
21751                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=container.escapeExpression, alias4="function", lookupProperty = container.lookupProperty || function(parent, propertyName) {
21752                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21753                                return parent[propertyName];
21754                            }
21755                            return undefined
21756                        };
21757
21758                        return "<div data-id=\""
21759                            + alias3((lookupProperty(helpers,"stamp")||(depth0 && lookupProperty(depth0,"stamp"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"stamp","hash":{},"data":data,"loc":{"start":{"line":6,"column":18},"end":{"line":6,"column":33}}}))
21760                            + "\"\n         class=\""
21761                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":16},"end":{"line":7,"column":30}}}) : helper)))
21762                            + "weekday-schedule-block\n                "
21763                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":8,"column":16},"end":{"line":8,"column":30}}}) : helper)))
21764                            + "weekday-schedule-block-"
21765                            + alias3((lookupProperty(helpers,"stamp")||(depth0 && lookupProperty(depth0,"stamp"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"stamp","hash":{},"data":data,"loc":{"start":{"line":8,"column":53},"end":{"line":8,"column":68}}}))
21766                            + "\n            "
21767                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"exceedLeft") : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":9,"column":12},"end":{"line":9,"column":71}}})) != null ? stack1 : "")
21768                            + "\n            "
21769                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"exceedRight") : depth0),{"name":"if","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":12},"end":{"line":10,"column":73}}})) != null ? stack1 : "")
21770                            + "\"\n         style=\""
21771                            + alias3((lookupProperty(helpers,"month-scheduleBlock")||(depth0 && lookupProperty(depth0,"month-scheduleBlock"))||alias2).call(alias1,depth0,((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"dates")),((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleBlockHeight")),((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"gridHeaderHeight")),{"name":"month-scheduleBlock","hash":{},"data":data,"loc":{"start":{"line":11,"column":16},"end":{"line":11,"column":105}}}))
21772                            + ";\n                margin-top:"
21773                            + alias3(container.lambda(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleBlockGutter")), depth0))
21774                            + "px\">\n"
21775                            + ((stack1 = (lookupProperty(helpers,"fi")||(depth0 && lookupProperty(depth0,"fi"))||alias2).call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isAllDay") : stack1),"||",(depth0 != null ? lookupProperty(depth0,"hasMultiDates") : depth0),{"name":"fi","hash":{},"fn":container.program(10, data, 0),"inverse":container.program(23, data, 0),"data":data,"loc":{"start":{"line":13,"column":8},"end":{"line":75,"column":15}}})) != null ? stack1 : "")
21776                            + "    </div>\n";
21777                    },"6":function(container,depth0,helpers,partials,data) {
21778                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21779                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21780                                return parent[propertyName];
21781                            }
21782                            return undefined
21783                        };
21784
21785                        return " "
21786                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":9,"column":31},"end":{"line":9,"column":45}}}) : helper)))
21787                            + "weekday-exceed-left";
21788                    },"8":function(container,depth0,helpers,partials,data) {
21789                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21790                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21791                                return parent[propertyName];
21792                            }
21793                            return undefined
21794                        };
21795
21796                        return " "
21797                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":10,"column":32},"end":{"line":10,"column":46}}}) : helper)))
21798                            + "weekday-exceed-right";
21799                    },"10":function(container,depth0,helpers,partials,data) {
21800                        var stack1, helper, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), alias4=container.hooks.helperMissing, alias5="function", lookupProperty = container.lookupProperty || function(parent, propertyName) {
21801                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21802                                return parent[propertyName];
21803                            }
21804                            return undefined
21805                        };
21806
21807                        return "        <div data-schedule-id=\""
21808                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"id") : stack1), depth0))
21809                            + "\" data-calendar-id=\""
21810                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"calendarId") : stack1), depth0))
21811                            + "\" class=\""
21812                            + alias2(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias4),(typeof helper === alias5 ? helper.call(alias3,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":14,"column":92},"end":{"line":14,"column":106}}}) : helper)))
21813                            + "weekday-schedule "
21814                            + ((stack1 = lookupProperty(helpers,"if").call(alias3,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":14,"column":123},"end":{"line":14,"column":192}}})) != null ? stack1 : "")
21815                            + "\"\n             style=\"height:"
21816                            + alias2(alias1(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21817                            + "px; line-height:"
21818                            + alias2(alias1(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21819                            + "px; border-radius: "
21820                            + alias2(alias1(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderRadius")), depth0))
21821                            + ";\n"
21822                            + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"exceedLeft") : depth0),{"name":"unless","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":16,"column":16},"end":{"line":18,"column":27}}})) != null ? stack1 : "")
21823                            + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"exceedRight") : depth0),{"name":"unless","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":19,"column":16},"end":{"line":21,"column":27}}})) != null ? stack1 : "")
21824                            + ((stack1 = lookupProperty(helpers,"if").call(alias3,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(17, data, 0),"inverse":container.program(19, data, 0),"data":data,"loc":{"start":{"line":22,"column":16},"end":{"line":26,"column":23}}})) != null ? stack1 : "")
21825                            + "                    "
21826                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"customStyle") : stack1), depth0))
21827                            + "\">\n            <span class=\""
21828                            + alias2(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias4),(typeof helper === alias5 ? helper.call(alias3,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":28,"column":25},"end":{"line":28,"column":39}}}) : helper)))
21829                            + "weekday-schedule-title\"\n                  data-title=\""
21830                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"title") : stack1), depth0))
21831                            + "\">"
21832                            + ((stack1 = (lookupProperty(helpers,"allday-tmpl")||(depth0 && lookupProperty(depth0,"allday-tmpl"))||alias4).call(alias3,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"allday-tmpl","hash":{},"data":data,"loc":{"start":{"line":29,"column":47},"end":{"line":29,"column":70}}})) != null ? stack1 : "")
21833                            + "</span>\n            "
21834                            + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(lookupProperty(helpers,"or")||(depth0 && lookupProperty(depth0,"or"))||alias4).call(alias3,((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"isReadOnly")),((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isReadOnly") : stack1),{"name":"or","hash":{},"data":data,"loc":{"start":{"line":30,"column":22},"end":{"line":30,"column":60}}}),{"name":"unless","hash":{},"fn":container.program(21, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":30,"column":12},"end":{"line":30,"column":194}}})) != null ? stack1 : "")
21835                            + "\n        </div>\n";
21836                    },"11":function(container,depth0,helpers,partials,data) {
21837                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21838                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21839                                return parent[propertyName];
21840                            }
21841                            return undefined
21842                        };
21843
21844                        return container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}
21844),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":14,"column":146},"end":{"line":14,"column":160}}}) : helper)))
21845                            + "weekday-schedule-focused ";
21846                    },"13":function(container,depth0,helpers,partials,data) {
21847                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21848                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21849                                return parent[propertyName];
21850                            }
21851                            return undefined
21852                        };
21853
21854                        return "                    margin-left: "
21855                            + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"marginLeft")), depth0))
21856                            + ";\n";
21857                    },"15":function(container,depth0,helpers,partials,data) {
21858                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21859                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21860                                return parent[propertyName];
21861                            }
21862                            return undefined
21863                        };
21864
21865                        return "                    margin-right: "
21866                            + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"marginRight")), depth0))
21867                            + ";\n";
21868                    },"17":function(container,depth0,helpers,partials,data) {
21869                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21870                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21871                                return parent[propertyName];
21872                            }
21873                            return undefined
21874                        };
21875
21876                        return "                    color: #ffffff; background-color:"
21877                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
21878                            + "; border-color:"
21879                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
21880                            + ";\n";
21881                    },"19":function(container,depth0,helpers,partials,data) {
21882                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21883                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21884                                return parent[propertyName];
21885                            }
21886                            return undefined
21887                        };
21888
21889                        return "                    color:"
21890                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
21891                            + "; background-color:"
21892                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"bgColor") : stack1), depth0))
21893                            + "; border-color:"
21894                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
21895                            + ";\n";
21896                    },"21":function(container,depth0,helpers,partials,data) {
21897                        var stack1, helper, alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21898                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21899                                return parent[propertyName];
21900                            }
21901                            return undefined
21902                        };
21903
21904                        return "<span class=\""
21905                            + alias1(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}
vendor: 256,690 bytes, lines 21905-23803
21905),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":30,"column":75},"end":{"line":30,"column":89}}}) : helper)))
21906                            + "weekday-resize-handle handle-y\" style=\"line-height: "
21907                            + alias1(container.lambda(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21908                            + "px;\">&nbsp;</span>";
21909                    },"23":function(container,depth0,helpers,partials,data) {
21910                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21911                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21912                                return parent[propertyName];
21913                            }
21914                            return undefined
21915                        };
21916
21917                        return ((stack1 = (lookupProperty(helpers,"fi")||(depth0 && lookupProperty(depth0,"fi"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"category") : stack1),"===","time",{"name":"fi","hash":{},"fn":container.program(24, data, 0),"inverse":container.program(33, data, 0),"data":data,"loc":{"start":{"line":33,"column":12},"end":{"line":74,"column":19}}})) != null ? stack1 : "");
21918                    },"24":function(container,depth0,helpers,partials,data) {
21919                        var stack1, helper, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), alias4=container.hooks.helperMissing, alias5="function", lookupProperty = container.lookupProperty || function(parent, propertyName) {
21920                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21921                                return parent[propertyName];
21922                            }
21923                            return undefined
21924                        };
21925
21926                        return "                <div data-schedule-id=\""
21927                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"id") : stack1), depth0))
21928                            + "\" data-calendar-id=\""
21929                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"calendarId") : stack1), depth0))
21930                            + "\" class=\""
21931                            + alias2(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias4),(typeof helper === alias5 ? helper.call(alias3,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":34,"column":100},"end":{"line":34,"column":114}}}) : helper)))
21932                            + "weekday-schedule "
21933                            + alias2(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias4),(typeof helper === alias5 ? helper.call(alias3,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":34,"column":131},"end":{"line":34,"column":145}}}) : helper)))
21934                            + "weekday-schedule-time\"\n                    style=\"height:"
21935                            + alias2(alias1(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21936                            + "px; line-height:"
21937                            + alias2(alias1(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21938                            + "px; "
21939                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"customStyle") : stack1), depth0))
21940                            + "\">\n                    <span class=\""
21941                            + alias2(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias4),(typeof helper === alias5 ? helper.call(alias3,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":36,"column":33},"end":{"line":36,"column":47}}}) : helper)))
21942                            + "weekday-schedule-bullet\"\n                        style=\"top: "
21943                            + alias2(alias1(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"scheduleBulletTop")), depth0))
21944                            + "px;\n"
21945                            + ((stack1 = lookupProperty(helpers,"if").call(alias3,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(25, data, 0),"inverse":container.program(27, data, 0),"data":data,"loc":{"start":{"line":38,"column":28},"end":{"line":42,"column":35}}})) != null ? stack1 : "")
21946                            + "                            \"\n                    ></span>\n                    <span class=\""
21947                            + alias2(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias4),(typeof helper === alias5 ? helper.call(alias3,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":45,"column":33},"end":{"line":45,"column":47}}}) : helper)))
21948                            + "weekday-schedule-title\"\n                        style=\"\n"
21949                            + ((stack1 = lookupProperty(helpers,"if").call(alias3,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(29, data, 0),"inverse":container.program(31, data, 0),"data":data,"loc":{"start":{"line":47,"column":28},"end":{"line":52,"column":35}}})) != null ? stack1 : "")
21950                            + "                            \"\n                        data-title=\""
21951                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"title") : stack1), depth0))
21952                            + "\">"
21953                            + ((stack1 = (lookupProperty(helpers,"time-tmpl")||(depth0 && lookupProperty(depth0,"time-tmpl"))||alias4).call(alias3,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"time-tmpl","hash":{},"data":data,"loc":{"start":{"line":54,"column":53},"end":{"line":54,"column":74}}})) != null ? stack1 : "")
21954                            + "</span>\n                </div>\n";
21955                    },"25":function(container,depth0,helpers,partials,data) {
21956                        return "                                background: #ffffff\n";
21957                    },"27":function(container,depth0,helpers,partials,data) {
21958                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21959                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21960                                return parent[propertyName];
21961                            }
21962                            return undefined
21963                        };
21964
21965                        return "                                background:"
21966                            + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
21967                            + "\n";
21968                    },"29":function(container,depth0,helpers,partials,data) {
21969                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
21970                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21971                                return parent[propertyName];
21972                            }
21973                            return undefined
21974                        };
21975
21976                        return "                                color: #ffffff;\n                                background-color: "
21977                            + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
21978                            + "\n";
21979                    },"31":function(container,depth0,helpers,partials,data) {
21980                        return "                                color:#333;\n";
21981                    },"33":function(container,depth0,helpers,partials,data) {
21982                        var stack1, helper, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), alias4=container.hooks.helperMissing, alias5="function", lookupProperty = container.lookupProperty || function(parent, propertyName) {
21983                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
21984                                return parent[propertyName];
21985                            }
21986                            return undefined
21987                        };
21988
21989                        return "<div data-schedule-id=\""
21990                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"id") : stack1), depth0))
21991                            + "\" data-calendar-id=\""
21992                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"calendarId") : stack1), depth0))
21993                            + "\" class=\""
21994                            + alias2(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias4),(typeof helper === alias5 ? helper.call(alias3,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":57,"column":100},"end":{"line":57,"column":114}}}) : helper)))
21995                            + "weekday-schedule "
21996                            + ((stack1 = lookupProperty(helpers,"if").call(alias3,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":57,"column":131},"end":{"line":57,"column":200}}})) != null ? stack1 : "")
21997                            + "\"\n                    style=\"height:"
21998                            + alias2(alias1(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
21999                            + "px; line-height:"
22000                            + alias2(alias1(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
22001                            + "px; border-radius: "
22002                            + alias2(alias1(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderRadius")), depth0))
22003                            + ";\n"
22004                            + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"exceedLeft") : depth0),{"name":"unless","hash":{},"fn":container.program(34, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":59,"column":20},"end":{"line":61,"column":31}}})) != null ? stack1 : "")
22005                            + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"exceedRight") : depth0),{"name":"unless","hash":{},"fn":container.program(36, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":62,"column":20},"end":{"line":64,"column":31}}})) != null ? stack1 : "")
22006                            + ((stack1 = lookupProperty(helpers,"if").call(alias3,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(38, data, 0),"inverse":container.program(40, data, 0),"data":data,"loc":{"start":{"line":65,"column":20},"end":{"line":69,"column":27}}})) != null ? stack1 : "")
22007                            + "                        "
22008                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"customStyle") : stack1), depth0))
22009                            + "\">\n                    <span class=\""
22010                            + alias2(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias4),(typeof helper === alias5 ? helper.call(alias3,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":71,"column":33},"end":{"line":71,"column":47}}}) : helper)))
22011                            + "weekday-schedule-title\"\n                                    data-title=\""
22012                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"title") : stack1), depth0))
22013                            + "\">"
22014                            + ((stack1 = (lookupProperty(helpers,"schedule-tmpl")||(depth0 && lookupProperty(depth0,"schedule-tmpl"))||alias4).call(alias3,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"schedule-tmpl","hash":{},"data":data,"loc":{"start":{"line":72,"column":65},"end":{"line":72,"column":90}}})) != null ? stack1 : "")
22015                            + "</span>\n                </div>\n";
22016                    },"34":function(container,depth0,helpers,partials,data) {
22017                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22018                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22019                                return parent[propertyName];
22020                            }
22021                            return undefined
22022                        };
22023
22024                        return "                        margin-left: "
22025                            + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"marginLeft")), depth0))
22026                            + ";\n";
22027                    },"36":function(container,depth0,helpers,partials,data) {
22028                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22029                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22030                                return parent[propertyName];
22031                            }
22032                            return undefined
22033                        };
22034
22035                        return "                        margin-right: "
22036                            + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"marginRight")), depth0))
22037                            + ";\n";
22038                    },"38":function(container,depth0,helpers,partials,data) {
22039                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22040                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22041                                return parent[propertyName];
22042                            }
22043                            return undefined
22044                        };
22045
22046                        return "                        color: #ffffff; background-color:"
22047                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
22048                            + "; border-color:"
22049                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
22050                            + ";\n";
22051                    },"40":function(container,depth0,helpers,partials,data) {
22052                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22053                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22054                                return parent[propertyName];
22055                            }
22056                            return undefined
22057                        };
22058
22059                        return "                        color:"
22060                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
22061                            + "; background-color:"
22062                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"bgColor") : stack1), depth0))
22063                            + "; border-color:"
22064                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
22065                            + ";\n";
22066                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
22067                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22068                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22069                                return parent[propertyName];
22070                            }
22071                            return undefined
22072                        };
22073
22074                        return ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"matrices") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":0},"end":{"line":81,"column":11}}})) != null ? stack1 : "");
22075                    },"useData":true});
22076
22077                /***/ }),
22078
22079            /***/ "./src/js/view/template/popup/scheduleCreationPopup.hbs":
22080            /*!**************************************************************!*\
22081  !*** ./src/js/view/template/popup/scheduleCreationPopup.hbs ***!
22082  \**************************************************************/
22083            /*! no static exports found */
22084            /***/ (function(module, exports, __webpack_require__) {
22085
22086                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
22087                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
22088                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22089                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22090                                return parent[propertyName];
22091                            }
22092                            return undefined
22093                        };
22094
22095                        return " "
22096                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":150},"end":{"line":3,"column":164}}}) : helper)))
22097                            + "hide";
22098                    },"3":function(container,depth0,helpers,partials,data) {
22099                        var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22100                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22101                                return parent[propertyName];
22102                            }
22103                            return undefined
22104                        };
22105
22106                        return "                    <li class=\""
22107                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":31},"end":{"line":12,"column":45}}}) : helper)))
22108                            + "popup-section-item "
22109                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":64},"end":{"line":12,"column":78}}}) : helper)))
22110                            + "dropdown-menu-item\" data-calendar-id=\""
22111                            + alias4(((helper = (helper = lookupProperty(helpers,"id") || (depth0 != null ? lookupProperty(depth0,"id") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data,"loc":{"start":{"line":12,"column":116},"end":{"line":12,"column":122}}}) : helper)))
22112                            + "\">\n                        <span class=\""
22113                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":13,"column":37},"end":{"line":13,"column":51}}}) : helper)))
22114                            + "icon "
22115                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":13,"column":56},"end":{"line":13,"column":70}}}) : helper)))
22116                            + "calendar-dot\" style=\"background-color: "
22117                            + alias4(((helper = (helper = lookupProperty(helpers,"bgColor") || (depth0 != null ? lookupProperty(depth0,"bgColor") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"bgColor","hash":{},"data":data,"loc":{"start":{"line":13,"column":109},"end":{"line":13,"column":120}}}) : helper)))
22118                            + "\"></span>\n                        <span class=\""
22119                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":14,"column":37},"end":{"line":14,"column":51}}}) : helper)))
22120                            + "content\">"
22121                            + alias4(((helper = (helper = lookupProperty(helpers,"name") || (depth0 != null ? lookupProperty(depth0,"name") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data,"loc":{"start":{"line":14,"column":60},"end":{"line":14,"column":68}}}) : helper)))
22122                            + "</span>\n                    </li>\n";
22123                    },"5":function(container,depth0,helpers,partials,data) {
22124                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22125                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22126                                return parent[propertyName];
22127                            }
22128                            return undefined
22129                        };
22130
22131                        return " "
22132                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":24,"column":135},"end":{"line":24,"column":149}}}) : helper)))
22133                            + "public";
22134                    },"7":function(container,depth0,helpers,partials,data) {
22135                        return " checked";
22136                    },"9":function(container,depth0,helpers,partials,data) {
22137                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22138                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22139                                return parent[propertyName];
22140                            }
22141                            return undefined
22142                        };
22143
22144                        return container.escapeExpression(((helper = (helper = lookupProperty(helpers,"state") || (depth0 != null ? lookupProperty(depth0,"state") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"state","hash":{},"data":data,"loc":{"start":{"line":55,"column":99},"end":{"line":55,"column":108}}}) : helper)));
22145                    },"11":function(container,depth0,helpers,partials,data) {
22146                        var stack1, helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22147                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22148                                return parent[propertyName];
22149                            }
22150                            return undefined
22151                        };
22152
22153                        return ((stack1 = ((helper = (helper = lookupProperty(helpers,"popupStateBusy-tmpl") || (depth0 != null ? lookupProperty(depth0,"popupStateBusy-tmpl") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"popupStateBusy-tmpl","hash":{},"data":data,"loc":{"start":{"line":55,"column":116},"end":{"line":55,"column":141}}}) : helper))) != null ? stack1 : "");
22154                    },"13":function(container,depth0,helpers,partials,data) {
22155                        var stack1, helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22156                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22157                                return parent[propertyName];
22158                            }
22159                            return undefined
22160                        };
22161
22162                        return ((stack1 = ((helper = (helper = lookupProperty(helpers,"popupUpdate-tmpl") || (depth0 != null ? lookupProperty(depth0,"popupUpdate-tmpl") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"popupUpdate-tmpl","hash":{},"data":data,"loc":{"start":{"line":70,"column":163},"end":{"line":70,"column":185}}}) : helper))) != null ? stack1 : "");
22163                    },"15":function(container,depth0,helpers,partials,data) {
22164                        var stack1, helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22165                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22166                                return parent[propertyName];
22167                            }
22168                            return undefined
22169                        };
22170
22171                        return ((stack1 = ((helper = (helper = lookupProperty(helpers,"popupSave-tmpl") || (depth0 != null ? lookupProperty(depth0,"popupSave-tmpl") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"popupSave-tmpl","hash":{},"data":data,"loc":{"start":{"line":70,"column":193},"end":{"line":70,"column":213}}}) : helper))) != null ? stack1 : "");
22172                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
22173                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22174                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22175                                return parent[propertyName];
22176                            }
22177                            return undefined
22178                        };
22179
22180                        return "<div class=\""
22181                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
22182                            + "popup\">\n    <div class=\""
22183                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":2,"column":16},"end":{"line":2,"column":30}}}) : helper)))
22184                            + "popup-container\">\n        <div class=\""
22185                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":20},"end":{"line":3,"column":34}}}) : helper)))
22186                            + "popup-section "
22187                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":48},"end":{"line":3,"column":62}}}) : helper)))
22188                            + "dropdown "
22189                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":71},"end":{"line":3,"column":85}}}) : helper)))
22190                            + "close "
22191                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":91},"end":{"line":3,"column":105}}}) : helper)))
22192                            + "section-calendar"
22193                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"calendars") : depth0)) != null ? lookupProperty(stack1,"length") : stack1),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":121},"end":{"line":3,"column":179}}})) != null ? stack1 : "")
22194                            + "\">\n            <button class=\""
22195                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":4,"column":27},"end":{"line":4,"column":41}}}) : helper)))
22196                            + "button "
22197                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":4,"column":48},"end":{"line":4,"column":62}}}) : helper)))
22198                            + "dropdown-button "
22199                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":4,"column":78},"end":{"line":4,"column":92}}}) : helper)))
22200                            + "popup-section-item\">\n                <span class=\""
22201                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":5,"column":29},"end":{"line":5,"column":43}}}) : helper)))
22202                            + "icon "
22203                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":5,"column":48},"end":{"line":5,"column":62}}}) : helper)))
22204                            + "calendar-dot\" style=\"background-color: "
22205                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"selectedCal") : depth0)) != null ? lookupProperty(stack1,"bgColor") : stack1), depth0))
22206                            + "\"></span>\n                <span id=\""
22207                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":6,"column":26},"end":{"line":6,"column":40}}}) : helper)))
22208                            + "schedule-calendar\" class=\""
22209                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":6,"column":66},"end":{"line":6,"column":80}}}) : helper)))
22210                            + "content\">"
22211                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"selectedCal") : depth0)) != null ? lookupProperty(stack1,"name") : stack1), depth0))
22212                            + "</span>\n                <span class=\""
22213                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":29},"end":{"line":7,"column":43}}}) : helper)))
22214                            + "icon "
22215                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":48},"end":{"line":7,"column":62}}}) : helper)))
22216                            + "dropdown-arrow\"></span>\n                </span>\n            </button>\n            <ul class=\""
22217                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":10,"column":23},"end":{"line":10,"column":37}}}) : helper)))
22218                            + "dropdown-menu\" style=\"z-index: "
22219                            + alias4(((helper = (helper = lookupProperty(helpers,"zIndex") || (depth0 != null ? lookupProperty(depth0,"zIndex") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"zIndex","hash":{},"data":data,"loc":{"start":{"line":10,"column":68},"end":{"line":10,"column":78}}}) : helper)))
22220                            + "\">\n"
22221                            + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"calendars") : depth0),{"name":"each","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":11,"column":16},"end":{"line":16,"column":25}}})) != null ? stack1 : "")
22222                            + "            </ul>\n        </div>\n        <div class=\""
22223                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":19,"column":20},"end":{"line":19,"column":34}}}) : helper)))
22224                            + "popup-section\">\n            <div class=\""
22225                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":20,"column":24},"end":{"line":20,"column":38}}}) : helper)))
22226                            + "popup-section-item "
22227                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":20,"column":57},"end":{"line":20,"column":71}}}) : helper)))
22228                            + "section-title\">\n            <span class=\""
22229                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":21,"column":25},"end":{"line":21,"column":39}}}) : helper)))
22230                            + "icon "
22231                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":21,"column":44},"end":{"line":21,"column":58}}}) : helper)))
22232                            + "ic-title\"></span>\n            <input id=\""
22233                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":22,"column":23},"end":{"line":22,"column":37}}}) : helper)))
22234                            + "schedule-title\" class=\""
22235                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":22,"column":60},"end":{"line":22,"column":74}}}) : helper)))
22236                            + "content\" placeholder=\""
22237                            + alias4(((helper = (helper = lookupProperty(helpers,"titlePlaceholder-tmpl") || (depth0 != null ? lookupProperty(depth0,"titlePlaceholder-tmpl") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"titlePlaceholder-tmpl","hash":{},"data":data,"loc":{"start":{"line":22,"column":96},"end":{"line":22,"column":121}}}) : helper)))
22238                            + "\" value=\""
22239                            + alias4(((helper = (helper = lookupProperty(helpers,"title") || (depth0 != null ? lookupProperty(depth0,"title") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data,"loc":{"start":{"line":22,"column":130},"end":{"line":22,"column":139}}}) : helper)))
22240                            + "\"></span>\n            </div>\n            <button id=\""
22241                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":24,"column":24},"end":{"line":24,"column":38}}}) : helper)))
22242                            + "schedule-private\" class=\""
22243                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":24,"column":63},"end":{"line":24,"column":77}}}) : helper)))
22244                            + "button "
22245                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":24,"column":84},"end":{"line":24,"column":98}}}) : helper)))
22246                            + "section-private"
22247                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"isPrivate") : depth0),{"name":"unless","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":24,"column":113},"end":{"line":24,"column":166}}})) != null ? stack1 : "")
22248                            + "\">\n            <span class=\""
22249                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":25,"column":25},"end":{"line":25,"column":39}}}) : helper)))
22250                            + "icon "
22251                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":25,"column":44},"end":{"line":25,"column":58}}}) : helper)))
22252                            + "ic-private\"></span>\n            </button>\n        </div>\n        <div class=\""
22253                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":28,"column":20},"end":{"line":28,"column":34}}}) : helper)))
22254                            + "popup-section\">\n            <div class=\""
22255                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":29,"column":24},"end":{"line":29,"column":38}}}) : helper)))
22256                            + "popup-section-item "
22257                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":29,"column":57},"end":{"line":29,"column":71}}}) : helper)))
22258                            + "section-location\">\n            <span class=\""
22259                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":30,"column":25},"end":{"line":30,"column":39}}}) : helper)))
22260                            + "icon "
22261                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":30,"column":44},"end":{"line":30,"column":58}}}) : helper)))
22262                            + "ic-location\"></span>\n                <input id=\""
22263                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":31,"column":27},"end":{"line":31,"column":41}}}) : helper)))
22264                            + "schedule-location\" class=\""
22265                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":31,"column":67},"end":{"line":31,"column":81}}}) : helper)))
22266                            + "content\" placeholder=\""
22267                            + alias4(((helper = (helper = lookupProperty(helpers,"locationPlaceholder-tmpl") || (depth0 != null ? lookupProperty(depth0,"locationPlaceholder-tmpl") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"locationPlaceholder-tmpl","hash":{},"data":data,"loc":{"start":{"line":31,"column":103},"end":{"line":31,"column":131}}}) : helper)))
22268                            + "\" value=\""
22269                            + alias4(((helper = (helper = lookupProperty(helpers,"location") || (depth0 != null ? lookupProperty(depth0,"location") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"location","hash":{},"data":data,"loc":{"start":{"line":31,"column":140},"end":{"line":31,"column":152}}}) : helper)))
22270                            + "\"></span>\n            </div>\n        </div>\n        <div class=\""
22271                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":34,"column":20},"end":{"line":34,"column":34}}}) : helper)))
22272                            + "popup-section\">\n            <div class=\""
22273                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":35,"column":24},"end":{"line":35,"column":38}}}) : helper)))
22274                            + "popup-section-item "
22275                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":35,"column":57},"end":{"line":35,"column":71}}}) : helper)))
22276                            + "section-start-date\">\n                <span class=\""
22277                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":36,"column":29},"end":{"line":36,"column":43}}}) : helper)))
22278                            + "icon "
22279                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":36,"column":48},"end":{"line":36,"column":62}}}) : helper)))
22280                            + "ic-date\"></span>\n                <input id=\""
22281                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":37,"column":27},"end":{"line":37,"column":41}}}) : helper)))
22282                            + "schedule-start-date\" class=\""
22283                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":37,"column":69},"end":{"line":37,"column":83}}}) : helper)))
22284                            + "content\" placeholder=\""
22285                            + alias4(((helper = (helper = lookupProperty(helpers,"startDatePlaceholder-tmpl") || (depth0 != null ? lookupProperty(depth0,"startDatePlaceholder-tmpl") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"startDatePlaceholder-tmpl","hash":{},"data":data,"loc":{"start":{"line":37,"column":105},"end":{"line":37,"column":134}}}) : helper)))
22286                            + "\"></span>\n                <div id=\""
22287                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":38,"column":25},"end":{"line":38,"column":39}}}) : helper)))
22288                            + "startpicker-container\" style=\"margin-left: -1px; position: relative\"></div>\n            </div>\n            <span class=\""
22289                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":40,"column":25},"end":{"line":40,"column":39}}}) : helper)))
22290                            + "section-date-dash\">-</span>\n            <div class=\""
22291                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":41,"column":24},"end":{"line":41,"column":38}}}) : helper)))
22292                            + "popup-section-item "
22293                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":41,"column":57},"end":{"line":41,"column":71}}}) : helper)))
22294                            + "section-end-date\">\n                <span class=\""
22295                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":42,"column":29},"end":{"line":42,"column":43}}}) : helper)))
22296                            + "icon "
22297                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":42,"column":48},"end":{"line":42,"column":62}}}) : helper)))
22298                            + "ic-date\"></span>\n                <input id=\""
22299                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":43,"column":27},"end":{"line":43,"column":41}}}) : helper)))
22300                            + "schedule-end-date\" class=\""
22301                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":43,"column":67},"end":{"line":43,"column":81}}}) : helper)))
22302                            + "content\" placeholder=\""
22303                            + alias4(((helper = (helper = lookupProperty(helpers,"endDatePlaceholder-tmpl") || (depth0 != null ? lookupProperty(depth0,"endDatePlaceholder-tmpl") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"endDatePlaceholder-tmpl","hash":{},"data":data,"loc":{"start":{"line":43,"column":103},"end":{"line":43,"column":130}}}) : helper)))
22304                            + "\"></span>\n                <div id=\""
22305                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":44,"column":25},"end":{"line":44,"column":39}}}) : helper)))
22306                            + "endpicker-container\" style=\"margin-left: -1px; position: relative\"></div>\n            </div>\n            <div class=\""
22307                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":46,"column":24},"end":{"line":46,"column":38}}}) : helper)))
22308                            + "popup-section-item "
22309                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":46,"column":57},"end":{"line":46,"column":71}}}) : helper)))
22310                            + "section-allday\">\n                <input id=\""
22311                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":47,"column":27},"end":{"line":47,"column":41}}}) : helper)))
22312                            + "schedule-allday\" type=\"checkbox\" class=\""
22313                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":47,"column":81},"end":{"line":47,"column":95}}}) : helper)))
22314                            + "checkbox-square\""
22315                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isAllDay") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":47,"column":111},"end":{"line":47,"column":142}}})) != null ? stack1 : "")
22316                            + "></input>\n                <span class=\""
22317                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":48,"column":29},"end":{"line":48,"column":43}}}) : helper)))
22318                            + "icon "
22319                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":48,"column":48},"end":{"line":48,"column":62}}}) : helper)))
22320                            + "ic-checkbox\"></span>\n                <span class=\""
22321                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":49,"column":29},"end":{"line":49,"column":43}}}) : helper)))
22322                            + "content\">"
22323                            + ((stack1 = ((helper = (helper = lookupProperty(helpers,"popupIsAllDay-tmpl") || (depth0 != null ? lookupProperty(depth0,"popupIsAllDay-tmpl") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"popupIsAllDay-tmpl","hash":{},"data":data,"loc":{"start":{"line":49,"column":52},"end":{"line":49,"column":76}}}) : helper))) != null ? stack1 : "")
22324                            + "</span>\n            </div>\n        </div>\n        <div class=\""
22325                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":52,"column":20},"end":{"line":52,"column":34}}}) : helper)))
22326                            + "popup-section "
22327                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":52,"column":48},"end":{"line":52,"column":62}}}) : helper)))
22328                            + "dropdown "
22329                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":52,"column":71},"end":{"line":52,"column":85}}}) : helper)))
22330                            + "close "
22331                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":52,"column":91},"end":{"line":52,"column":105}}}) : helper)))
22332                            + "section-state\">\n            <button class=\""
22333                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":53,"column":27},"end":{"line":53,"column":41}}}) : helper)))
22334                            + "button "
22335                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":53,"column":48},"end":{"line":53,"column":62}}}) : helper)))
22336                            + "dropdown-button "
22337                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":53,"column":78},"end":{"line":53,"column":92}}}) : helper)))
22338                            + "popup-section-item\">\n                <span class=\""
22339                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":54,"column":29},"end":{"line":54,"column":43}}}) : helper)))
22340                            + "icon "
22341                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":54,"column":48},"end":{"line":54,"column":62}}}) : helper)))
22342                            + "ic-state\"></span>\n                <span id=\""
22343                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":55,"column":26},"end":{"line":55,"column":40}}}) : helper)))
22344                            + "schedule-state\" class=\""
22345                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":55,"column":63},"end":{"line":55,"column":77}}}) : helper)))
22346                            + "content\">"
22347                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"state") : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.program(11, data, 0),"data":data,"loc":{"start":{"line":55,"column":86},"end":{"line":55,"column":148}}})) != null ? stack1 : "")
22348                            + "</span>\n                <span class=\""
22349                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":56,"column":29},"end":{"line":56,"column":43}}}) : helper)))
22350                            + "icon "
22351                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":56,"column":48},"end":{"line":56,"column":62}}}) : helper)))
22352                            + "dropdown-arrow\"></span>\n            </button>\n            <ul class=\""
22353                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":58,"column":23},"end":{"line":58,"column":37}}}) : helper)))
22354                            + "dropdown-menu\" style=\"z-index: "
22355                            + alias4(((helper = (helper = lookupProperty(helpers,"zIndex") || (depth0 != null ? lookupProperty(depth0,"zIndex") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"zIndex","hash":{},"data":data,"loc":{"start":{"line":58,"column":68},"end":{"line":58,"column":78}}}) : helper)))
22356                            + "\">\n                <li class=\""
22357                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":59,"column":27},"end":{"line":59,"column":41}}}) : helper)))
22358                            + "popup-section-item "
22359                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":59,"column":60},"end":{"line":59,"column":74}}}) : helper)))
22360                            + "dropdown-menu-item\">\n                <span class=\""
22361                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":60,"column":29},"end":{"line":60,"column":43}}}) : helper)))
22362                            + "icon "
22363                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":60,"column":48},"end":{"line":60,"column":62}}}) : helper)))
22364                            + "none\"></span>\n                <span class=\""
22365                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":61,"column":29},"end":{"line":61,"column":43}}}) : helper)))
22366                            + "content\">"
22367                            + ((stack1 = ((helper = (helper = lookupProperty(helpers,"popupStateBusy-tmpl") || (depth0 != null ? lookupProperty(depth0,"popupStateBusy-tmpl") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"popupStateBusy-tmpl","hash":{},"data":data,"loc":{"start":{"line":61,"column":52},"end":{"line":61,"column":77}}}) : helper))) != null ? stack1 : "")
22368                            + "</span>\n                </li>\n                <li class=\""
22369                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":63,"column":27},"end":{"line":63,"column":41}}}) : helper)))
22370                            + "popup-section-item "
22371                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":63,"column":60},"end":{"line":63,"column":74}}}) : helper)))
22372                            + "dropdown-menu-item\">\n                <span class=\""
22373                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":64,"column":29},"end":{"line":64,"column":43}}}) : helper)))
22374                            + "icon "
22375                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":64,"column":48},"end":{"line":64,"column":62}}}) : helper)))
22376                            + "none\"></span>\n                <span class=\""
22377                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":65,"column":29},"end":{"line":65,"column":43}}}) : helper)))
22378                            + "content\">"
22379                            + ((stack1 = ((helper = (helper = lookupProperty(helpers,"popupStateFree-tmpl") || (depth0 != null ? lookupProperty(depth0,"popupStateFree-tmpl") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"popupStateFree-tmpl","hash":{},"data":data,"loc":{"start":{"line":65,"column":52},"end":{"line":65,"column":77}}}) : helper))) != null ? stack1 : "")
22380                            + "</span>\n                </li>\n            </ul>\n        </div>\n        <button class=\""
22381                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":69,"column":23},"end":{"line":69,"column":37}}}) : helper)))
22382                            + "button "
22383                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":69,"column":44},"end":{"line":69,"column":58}}}) : helper)))
22384                            + "popup-close\"><span class=\""
22385                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":69,"column":84},"end":{"line":69,"column":98}}}) : helper)))
22386                            + "icon "
22387                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":69,"column":103},"end":{"line":69,"column":117}}}) : helper)))
22388                            + "ic-close\"></span></button>\n        <div class=\""
22389                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":70,"column":20},"end":{"line":70,"column":34}}}) : helper)))
22390                            + "section-button-save\"><button class=\""
22391                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":70,"column":70},"end":{"line":70,"column":84}}}) : helper)))
22392                            + "button "
22393                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":70,"column":91},"end":{"line":70,"column":105}}}) : helper)))
22394                            + "confirm "
22395                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":70,"column":113},"end":{"line":70,"column":127}}}) : helper)))
22396                            + "popup-save\"><span>"
22397                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isEditMode") : depth0),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.program(15, data, 0),"data":data,"loc":{"start":{"line":70,"column":145},"end":{"line":70,"column":220}}})) != null ? stack1 : "")
22398                            + "</span></button></div>\n    </div>\n    <div id=\""
22399                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":72,"column":13},"end":{"line":72,"column":27}}}) : helper)))
22400                            + "popup-arrow\" class=\""
22401                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":72,"column":47},"end":{"line":72,"column":61}}}) : helper)))
22402                            + "popup-arrow "
22403                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":72,"column":73},"end":{"line":72,"column":87}}}) : helper)))
22404                            + "arrow-bottom\">\n        <div class=\""
22405                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":73,"column":20},"end":{"line":73,"column":34}}}) : helper)))
22406                            + "popup-arrow-border\">\n            <div class=\""
22407                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":74,"column":24},"end":{"line":74,"column":38}}}) : helper)))
22408                            + "popup-arrow-fill\"></div>\n        </div>\n    </div>\n</div>\n";
22409                    },"useData":true});
22410
22411                /***/ }),
22412
22413            /***/ "./src/js/view/template/popup/scheduleDetailPopup.hbs":
22414            /*!************************************************************!*\
22415  !*** ./src/js/view/template/popup/scheduleDetailPopup.hbs ***!
22416  \************************************************************/
22417            /*! no static exports found */
22418            /***/ (function(module, exports, __webpack_require__) {
22419
22420                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
22421                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
22422                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22423                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22424                                return parent[propertyName];
22425                            }
22426                            return undefined
22427                        };
22428
22429                        return "<div class=\""
22430                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":11,"column":45},"end":{"line":11,"column":59}}}) : helper)))
22431                            + "popup-detail-item\"><span class=\""
22432                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":11,"column":91},"end":{"line":11,"column":105}}}) : helper)))
22433                            + "icon "
22434                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":11,"column":110},"end":{"line":11,"column":124}}}) : helper)))
22435                            + "ic-location-b\"></span><span class=\""
22436                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":11,"column":159},"end":{"line":11,"column":173}}}) : helper)))
22437                            + "content\">"
22438                            + ((stack1 = (lookupProperty(helpers,"popupDetailLocation-tmpl")||(depth0 && lookupProperty(depth0,"popupDetailLocation-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"schedule") : depth0),{"name":"popupDetailLocation-tmpl","hash":{},"data":data,"loc":{"start":{"line":11,"column":182},"end":{"line":11,"column":221}}})) != null ? stack1 : "")
22439                            + "</span></div>";
22440                    },"3":function(container,depth0,helpers,partials,data) {
22441                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22442                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22443                                return parent[propertyName];
22444                            }
22445                            return undefined
22446                        };
22447
22448                        return "<div class=\""
22449                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":51},"end":{"line":12,"column":65}}}) : helper)))
22450                            + "popup-detail-item\"><span class=\""
22451                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":97},"end":{"line":12,"column":111}}}) : helper)))
22452                            + "icon "
22453                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":116},"end":{"line":12,"column":130}}}) : helper)))
22454                            + "ic-repeat-b\"></span><span class=\""
22455                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":163},"end":{"line":12,"column":177}}}) : helper)))
22456                            + "content\">"
22457                            + ((stack1 = (lookupProperty(helpers,"popupDetailRepeat-tmpl")||(depth0 && lookupProperty(depth0,"popupDetailRepeat-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"schedule") : depth0),{"name":"popupDetailRepeat-tmpl","hash":{},"data":data,"loc":{"start":{"line":12,"column":186},"end":{"line":12,"column":223}}})) != null ? stack1 : "")
22458                            + "</span></div>";
22459                    },"5":function(container,depth0,helpers,partials,data) {
22460                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22461                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22462                                return parent[propertyName];
22463                            }
22464                            return undefined
22465                        };
22466
22467                        return "<div class=\""
22468                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":13,"column":46},"end":{"line":13,"column":60}}}) : helper)))
22469                            + "popup-detail-item "
22470                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":13,"column":78},"end":{"line":13,"column":92}}}) : helper)))
22471                            + "popup-detail-item-indent\"><span class=\""
22472                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":13,"column":131},"end":{"line":13,"column":145}}}) : helper)))
22473                            + "icon "
22474                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":13,"column":150},"end":{"line":13,"column":164}}}) : helper)))
22475                            + "ic-user-b\"></span><span class=\""
22476                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":13,"column":195},"end":{"line":13,"column":209}}}) : helper)))
22477                            + "content\">"
22478                            + ((stack1 = (lookupProperty(helpers,"popupDetailUser-tmpl")||(depth0 && lookupProperty(depth0,"popupDetailUser-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"schedule") : depth0),{"name":"popupDetailUser-tmpl","hash":{},"data":data,"loc":{"start":{"line":13,"column":218},"end":{"line":13,"column":253}}})) != null ? stack1 : "")
22479                            + "</span></div>";
22480                    },"7":function(container,depth0,helpers,partials,data) {
22481                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22482                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22483                                return parent[propertyName];
22484                            }
22485                            return undefined
22486                        };
22487
22488                        return "<div class=\""
22489                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":14,"column":42},"end":{"line":14,"column":56}}}) : helper)))
22490                            + "popup-detail-item\"><span class=\""
22491                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":14,"column":88},"end":{"line":14,"column":102}}}) : helper)))
22492                            + "icon "
22493                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":14,"column":107},"end":{"line":14,"column":121}}}) : helper)))
22494                            + "ic-state-b\"></span><span class=\""
22495                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":14,"column":153},"end":{"line":14,"column":167}}}) : helper)))
22496                            + "content\">"
22497                            + ((stack1 = (lookupProperty(helpers,"popupDetailState-tmpl")||(depth0 && lookupProperty(depth0,"popupDetailState-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"schedule") : depth0),{"name":"popupDetailState-tmpl","hash":{},"data":data,"loc":{"start":{"line":14,"column":176},"end":{"line":14,"column":212}}})) != null ? stack1 : "")
22498                            + "</span></div>";
22499                    },"9":function(container,depth0,helpers,partials,data) {
22500                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22501                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22502                                return parent[propertyName];
22503                            }
22504                            return undefined
22505                        };
22506
22507                        return "        <div class=\""
22508                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":16,"column":20},"end":{"line":16,"column":34}}}) : helper)))
22509                            + "popup-detail-item\"><span class=\""
22510                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":16,"column":66},"end":{"line":16,"column":80}}}) : helper)))
22511                            + "icon "
22512                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":16,"column":85},"end":{"line":16,"column":99}}}) : helper)))
22513                            + "calendar-dot\" style=\"background-color: "
22514                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"bgColor") : stack1), depth0))
22515                            + "\"></span><span class=\""
22516                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":16,"column":180},"end":{"line":16,"column":194}}}) : helper)))
22517                            + "content\">"
22518                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"calendar") : depth0)) != null ? lookupProperty(stack1,"name") : stack1), depth0))
22519                            + "</span></div>\n";
22520                    },"11":function(container,depth0,helpers,partials,data) {
22521                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22522                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22523                                return parent[propertyName];
22524                            }
22525                            return undefined
22526                        };
22527
22528                        return "<div class=\""
22529                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":18,"column":41},"end":{"line":18,"column":55}}}) : helper)))
22530                            + "popup-detail-item "
22531                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":18,"column":73},"end":{"line":18,"column":87}}}) : helper)))
22532                            + "popup-detail-item-separate\"><span class=\""
22533                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":18,"column":128},"end":{"line":18,"column":142}}}) : helper)))
22534                            + "content\">"
22535                            + ((stack1 = (lookupProperty(helpers,"popupDetailBody-tmpl")||(depth0 && lookupProperty(depth0,"popupDetailBody-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"schedule") : depth0),{"name":"popupDetailBody-tmpl","hash":{},"data":data,"loc":{"start":{"line":18,"column":151},"end":{"line":18,"column":186}}})) != null ? stack1 : "")
22536                            + "</span></div>";
22537                    },"13":function(container,depth0,helpers,partials,data) {
22538                        return "";
22539                    },"15":function(container,depth0,helpers,partials,data) {
22540                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22541                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22542                                return parent[propertyName];
22543                            }
22544                            return undefined
22545                        };
22546
22547                        return "    <div class=\""
22548                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":22,"column":16},"end":{"line":22,"column":30}}}) : helper)))
22549                            + "section-button\">\n      <button class=\""
22550                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":23,"column":21},"end":{"line":23,"column":35}}}) : helper)))
22551                            + "popup-edit\"><span class=\""
22552                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":23,"column":60},"end":{"line":23,"column":74}}}) : helper)))
22553                            + "icon "
22554                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":23,"column":79},"end":{"line":23,"column":93}}}) : helper)))
22555                            + "ic-edit\"></span><span class=\""
22556                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":23,"column":122},"end":{"line":23,"column":136}}}) : helper)))
22557                            + "content\">"
22558                            + ((stack1 = ((helper = (helper = lookupProperty(helpers,"popupEdit-tmpl") || (depth0 != null ? lookupProperty(depth0,"popupEdit-tmpl") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"popupEdit-tmpl","hash":{},"data":data,"loc":{"start":{"line":23,"column":145},"end":{"line":23,"column":165}}}) : helper))) != null ? stack1 : "")
22559                            + "</span></button>\n      <div class=\""
22560                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":24,"column":18},"end":{"line":24,"column":32}}}) : helper)))
22561                            + "popup-vertical-line\"></div>\n      <button class=\""
22562                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":25,"column":21},"end":{"line":25,"column":35}}}) : helper)))
22563                            + "popup-delete\"><span class=\""
22564                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":25,"column":62},"end":{"line":25,"column":76}}}) : helper)))
22565                            + "icon "
22566                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":25,"column":81},"end":{"line":25,"column":95}}}) : helper)))
22567                            + "ic-delete\"></span><span class=\""
22568                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":25,"column":126},"end":{"line":25,"column":140}}}) : helper)))
22569                            + "content\">"
22570                            + ((stack1 = ((helper = (helper = lookupProperty(helpers,"popupDelete-tmpl") || (depth0 != null ? lookupProperty(depth0,"popupDelete-tmpl") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"popupDelete-tmpl","hash":{},"data":data,"loc":{"start":{"line":25,"column":149},"end":{"line":25,"column":171}}}) : helper))) != null ? stack1 : "")
22571                            + "</span></button>\n    </div>\n";
22572                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
22573                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22574                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22575                                return parent[propertyName];
22576                            }
22577                            return undefined
22578                        };
22579
22580                        return "<div class=\""
22581                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
22582                            + "popup "
22583                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":32},"end":{"line":1,"column":46}}}) : helper)))
22584                            + "popup-detail\">\n  <div class=\""
22585                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":2,"column":14},"end":{"line":2,"column":28}}}) : helper)))
22586                            + "popup-container\">\n    <div class=\""
22587                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":16},"end":{"line":3,"column":30}}}) : helper)))
22588                            + "popup-section "
22589                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":44},"end":{"line":3,"column":58}}}) : helper)))
22590                            + "section-header\">\n      <div>\n        <span class=\""
22591                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":5,"column":21},"end":{"line":5,"column":35}}}) : helper)))
22592                            + "schedule-private "
22593                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":5,"column":52},"end":{"line":5,"column":66}}}) : helper)))
22594                            + "icon "
22595                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":5,"column":71},"end":{"line":5,"column":85}}}) : helper)))
22596                            + "ic-private\"></span>\n        <span class=\""
22597                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":6,"column":21},"end":{"line":6,"column":35}}}) : helper)))
22598                            + "schedule-title\">"
22599                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"title") : stack1), depth0))
22600                            + "</span>\n      </div>\n      <div class=\""
22601                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":8,"column":18},"end":{"line":8,"column":32}}}) : helper)))
22602                            + "popup-detail-date "
22603                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":8,"column":50},"end":{"line":8,"column":64}}}) : helper)))
22604                            + "content\">"
22605                            + ((stack1 = (lookupProperty(helpers,"popupDetailDate-tmpl")||(depth0 && lookupProperty(depth0,"popupDetailDate-tmpl"))||alias2).call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"isAllDay") : stack1),((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"start") : stack1),((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"end") : stack1),{"name":"popupDetailDate-tmpl","hash":{},"data":data,"loc":{"start":{"line":8,"column":73},"end":{"line":8,"column":145}}})) != null ? stack1 : "")
22606                            + "</div>\n    </div>\n    <div class=\""
22607                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":10,"column":16},"end":{"line":10,"column":30}}}) : helper)))
22608                            + "section-detail\">\n        "
22609                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"location") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":11,"column":8},"end":{"line":11,"column":241}}})) != null ? stack1 : "")
22610                            + "\n        "
22611                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"recurrenceRule") : stack1),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":8},"end":{"line":12,"column":243}}})) != null ? stack1 : "")
22612                            + "\n        "
22613                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"attendees") : stack1),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":13,"column":8},"end":{"line":13,"column":273}}})) != null ? stack1 : "")
22614                            + "\n        "
22615                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"state") : stack1),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":14,"column":8},"end":{"line":14,"column":232}}})) != null ? stack1 : "")
22616                            + "\n"
22617                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"calendar") : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":15,"column":8},"end":{"line":17,"column":15}}})) != null ? stack1 : "")
22618                            + "        "
22619                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"body") : stack1),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":18,"column":8},"end":{"line":18,"column":206}}})) != null ? stack1 : "")
22620                            + "\n    </div>\n"
22621                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"isReadOnly") : stack1),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.program(15, data, 0),"data":data,"loc":{"start":{"line":20,"column":4},"end":{"line":27,"column":11}}})) != null ? stack1 : "")
22622                            + "  </div>\n  <div class=\""
22623                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":29,"column":14},"end":{"line":29,"column":28}}}) : helper)))
22624                            + "popup-top-line\" style=\"background-color: "
22625                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"schedule") : depth0)) != null ? lookupProperty(stack1,"bgColor") : stack1), depth0))
22626                            + "\"></div>\n  <div id=\""
22627                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":30,"column":11},"end":{"line":30,"column":25}}}) : helper)))
22628                            + "popup-arrow\" class=\""
22629                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":30,"column":45},"end":{"line":30,"column":59}}}) : helper)))
22630                            + "popup-arrow "
22631                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":30,"column":71},"end":{"line":30,"column":85}}}) : helper)))
22632                            + "arrow-left\">\n    <div class=\""
22633                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":31,"column":16},"end":{"line":31,"column":30}}}) : helper)))
22634                            + "popup-arrow-border\">\n        <div class=\""
22635                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":32,"column":20},"end":{"line":32,"column":34}}}) : helper)))
22636                            + "popup-arrow-fill\"></div>\n    </div>\n  </div>\n</div>\n";
22637                    },"useData":true});
22638
22639                /***/ }),
22640
22641            /***/ "./src/js/view/template/week/dayGrid.hbs":
22642            /*!***********************************************!*\
22643  !*** ./src/js/view/template/week/dayGrid.hbs ***!
22644  \***********************************************/
22645            /*! no static exports found */
22646            /***/ (function(module, exports, __webpack_require__) {
22647
22648                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
22649                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
22650                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22651                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22652                                return parent[propertyName];
22653                            }
22654                            return undefined
22655                        };
22656
22657                        return "<div class=\""
22658                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":8,"column":24},"end":{"line":8,"column":38}}}) : helper)))
22659                            + "weekday-grid-line\"\n                style=\"left:"
22660                            + alias4(((helper = (helper = lookupProperty(helpers,"left") || (depth0 != null ? lookupProperty(depth0,"left") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"left","hash":{},"data":data,"loc":{"start":{"line":9,"column":28},"end":{"line":9,"column":36}}}) : helper)))
22661                            + "%; width:"
22662                            + alias4(((helper = (helper = lookupProperty(helpers,"width") || (depth0 != null ? lookupProperty(depth0,"width") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"width","hash":{},"data":data,"loc":{"start":{"line":9,"column":45},"end":{"line":9,"column":54}}}) : helper)))
22663                            + "%; background-color: "
22664                            + alias4(((helper = (helper = lookupProperty(helpers,"backgroundColor") || (depth0 != null ? lookupProperty(depth0,"backgroundColor") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"backgroundColor","hash":{},"data":data,"loc":{"start":{"line":9,"column":75},"end":{"line":9,"column":94}}}) : helper)))
22665                            + ";\n"
22666                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(data && lookupProperty(data,"last")),{"name":"unless","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":20},"end":{"line":12,"column":31}}})) != null ? stack1 : "")
22667                            + "            \"></div>\n";
22668                    },"2":function(container,depth0,helpers,partials,data) {
22669                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22670                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22671                                return parent[propertyName];
22672                            }
22673                            return undefined
22674                        };
22675
22676                        return "                    border-right: "
22677                            + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderRight")), depth0))
22678                            + ";\n";
22679                    },"4":function(container,depth0,helpers,partials,data) {
22680                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22681                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22682                                return parent[propertyName];
22683                            }
22684                            return undefined
22685                        };
22686
22687                        return ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"days") : depth0),{"name":"each","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":17,"column":8},"end":{"line":27,"column":19}}})) != null ? stack1 : "");
22688                    },"5":function(container,depth0,helpers,partials,data) {
22689                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22690                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22691                                return parent[propertyName];
22692                            }
22693                            return undefined
22694                        };
22695
22696                        return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"collapsed")),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.program(9, data, 0),"data":data,"loc":{"start":{"line":18,"column":12},"end":{"line":26,"column":19}}})) != null ? stack1 : "");
22697                    },"6":function(container,depth0,helpers,partials,data) {
22698                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22699                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22700                                return parent[propertyName];
22701                            }
22702                            return undefined
22703                        };
22704
22705                        return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"hiddenSchedules") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":19,"column":16},"end":{"line":21,"column":23}}})) != null ? stack1 : "");
22706                    },"7":function(container,depth0,helpers,partials,data) {
22707                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22708                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22709                                return parent[propertyName];
22710                            }
22711                            return undefined
22712                        };
22713
22714                        return "                    <span class=\""
22715                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":20,"column":33},"end":{"line":20,"column":47}}}) : helper)))
22716                            + "weekday-exceed-in-week\" style=\"z-index: 1; right:"
22717                            + alias4((lookupProperty(helpers,"getRight")||(depth0 && lookupProperty(depth0,"getRight"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"left") : depth0),(depth0 != null ? lookupProperty(depth0,"width") : depth0),{"name":"getRight","hash":{},"data":data,"loc":{"start":{"line":20,"column":96},"end":{"line":20,"column":119}}}))
22718                            + "%;\" data-index=\""
22719                            + alias4(((helper = (helper = lookupProperty(helpers,"key") || (data && lookupProperty(data,"key"))) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"key","hash":{},"data":data,"loc":{"start":{"line":20,"column":135},"end":{"line":20,"column":143}}}) : helper)))
22720                            + "\">"
22721                            + ((stack1 = (lookupProperty(helpers,"weekGridFooterExceed-tmpl")||(depth0 && lookupProperty(depth0,"weekGridFooterExceed-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"hiddenSchedules") : depth0),{"name":"weekGridFooterExceed-tmpl","hash":{},"data":data,"loc":{"start":{"line":20,"column":145},"end":{"line":20,"column":192}}})) != null ? stack1 : "")
22722                            + "</span>\n";
22723                    },"9":function(container,depth0,helpers,partials,data) {
22724                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22725                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22726                                return parent[propertyName];
22727                            }
22728                            return undefined
22729                        };
22730
22731                        return ((stack1 = (lookupProperty(helpers,"fi")||(depth0 && lookupProperty(depth0,"fi"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),(data && lookupProperty(data,"key")),"===",((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"collapseBtnIndex")),{"name":"fi","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":23,"column":16},"end":{"line":25,"column":23}}})) != null ? stack1 : "");
22732                    },"10":function(container,depth0,helpers,partials,data) {
22733                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22734                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22735                                return parent[propertyName];
22736                            }
22737                            return undefined
22738                        };
22739
22740                        return "                    <span class=\""
22741                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":24,"column":33},"end":{"line":24,"column":47}}}) : helper)))
22742                            + "weekday-collapse-btn\" style=\"z-index: 1; right:"
22743                            + alias4((lookupProperty(helpers,"getRight")||(depth0 && lookupProperty(depth0,"getRight"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"left") : depth0),(depth0 != null ? lookupProperty(depth0,"width") : depth0),{"name":"getRight","hash":{},"data":data,"loc":{"start":{"line":24,"column":94},"end":{"line":24,"column":117}}}))
22744                            + "%;\">"
22745                            + ((stack1 = ((helper = (helper = lookupProperty(helpers,"collapseBtnTitle-tmpl") || (depth0 != null ? lookupProperty(depth0,"collapseBtnTitle-tmpl") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"collapseBtnTitle-tmpl","hash":{},"data":data,"loc":{"start":{"line":24,"column":121},"end":{"line":24,"column":148}}}) : helper))) != null ? stack1 : "")
22746                            + "</span>\n";
22747                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
22748                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22749                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22750                                return parent[propertyName];
22751                            }
22752                            return undefined
22753                        };
22754
22755                        return "<div class=\""
22756                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
22757                            + alias4(((helper = (helper = lookupProperty(helpers,"viewName") || (depth0 != null ? lookupProperty(depth0,"viewName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"viewName","hash":{},"data":data,"loc":{"start":{"line":1,"column":26},"end":{"line":1,"column":38}}}) : helper)))
22758                            + "-left "
22759                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":44},"end":{"line":1,"column":58}}}) : helper)))
22760                            + "left\" style=\"border-right: "
22761                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"leftBorderRight") : stack1), depth0))
22762                            + "; width: "
22763                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"leftWidth") : stack1), depth0))
22764                            + "; background-color: "
22765                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"leftBackgroundColor") : stack1), depth0))
22766                            + "; padding-right: "
22767                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"leftPaddingRight") : stack1), depth0))
22768                            + ";\">\n    "
22769                            + ((stack1 = (lookupProperty(helpers,"dayGridTitle-tmpl")||(depth0 && lookupProperty(depth0,"dayGridTitle-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"viewName") : depth0),{"name":"dayGridTitle-tmpl","hash":{},"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":2,"column":36}}})) != null ? stack1 : "")
22770                            + "\n</div>\n<div class=\""
22771                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":4,"column":12},"end":{"line":4,"column":26}}}) : helper)))
22772                            + alias4(((helper = (helper = lookupProperty(helpers,"viewName") || (depth0 != null ? lookupProperty(depth0,"viewName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"viewName","hash":{},"data":data,"loc":{"start":{"line":4,"column":26},"end":{"line":4,"column":38}}}) : helper)))
22773                            + "-right "
22774                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":4,"column":45},"end":{"line":4,"column":59}}}) : helper)))
22775                            + "right\">\n    <div class=\""
22776                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":5,"column":16},"end":{"line":5,"column":30}}}) : helper)))
22777                            + "container\">\n        <div class=\""
22778                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":6,"column":20},"end":{"line":6,"column":34}}}) : helper)))
22779                            + "weekday-grid\">\n"
22780                            + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"days") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":7,"column":8},"end":{"line":14,"column":19}}})) != null ? stack1 : "")
22781                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"showExpandableButton")),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":16,"column":8},"end":{"line":28,"column":15}}})) != null ? stack1 : "")
22782                            + "        </div>\n    </div>\n</div>\n";
22783                    },"useData":true});
22784
22785                /***/ }),
22786
22787            /***/ "./src/js/view/template/week/dayGridSchedule.hbs":
22788            /*!*******************************************************!*\
22789  !*** ./src/js/view/template/week/dayGridSchedule.hbs ***!
22790  \*******************************************************/
22791            /*! no static exports found */
22792            /***/ (function(module, exports, __webpack_require__) {
22793
22794                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
22795                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
22796                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22797                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22798                                return parent[propertyName];
22799                            }
22800                            return undefined
22801                        };
22802
22803                        return ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":4},"end":{"line":27,"column":15}}})) != null ? stack1 : "");
22804                    },"2":function(container,depth0,helpers,partials,data) {
22805                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22806                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22807                                return parent[propertyName];
22808                            }
22809                            return undefined
22810                        };
22811
22812                        return "\n    "
22813                            + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"each","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":4},"end":{"line":26,"column":15}}})) != null ? stack1 : "");
22814                    },"3":function(container,depth0,helpers,partials,data) {
22815                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22816                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22817                                return parent[propertyName];
22818                            }
22819                            return undefined
22820                        };
22821
22822                        return "\n    "
22823                            + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":5,"column":4},"end":{"line":25,"column":13}}})) != null ? stack1 : "");
22824                    },"4":function(container,depth0,helpers,partials,data) {
22825                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=container.escapeExpression, alias4="function", alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22826                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22827                                return parent[propertyName];
22828                            }
22829                            return undefined
22830                        };
22831
22832                        return "\n    <div data-id=\""
22833                            + alias3((lookupProperty(helpers,"stamp")||(depth0 && lookupProperty(depth0,"stamp"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"stamp","hash":{},"data":data,"loc":{"start":{"line":6,"column":18},"end":{"line":6,"column":33}}}))
22834                            + "\"\n        class=\""
22835                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":15},"end":{"line":7,"column":29}}}) : helper)))
22836                            + "weekday-schedule-block\n            "
22837                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"exceedLeft") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":12},"end":{"line":8,"column":71}}})) != null ? stack1 : "")
22838                            + "\n            "
22839                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"exceedRight") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":9,"column":12},"end":{"line":9,"column":73}}})) != null ? stack1 : "")
22840                            + "\"\n        style=\"top:"
22841                            + alias3((lookupProperty(helpers,"multiply")||(depth0 && lookupProperty(depth0,"multiply"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"top") : depth0),((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleBlockHeight")),{"name":"multiply","hash":{},"data":data,"loc":{"start":{"line":10,"column":19},"end":{"line":10,"column":61}}}))
22842                            + "px;\n                left:"
22843                            + alias3((lookupProperty(helpers,"grid-left")||(depth0 && lookupProperty(depth0,"grid-left"))||alias2).call(alias1,depth0,((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"dates")),{"name":"grid-left","hash":{},"data":data,"loc":{"start":{"line":11,"column":21},"end":{"line":11,"column":51}}}))
22844                            + "%;\n                width:"
22845                            + alias3((lookupProperty(helpers,"grid-width")||(depth0 && lookupProperty(depth0,"grid-width"))||alias2).call(alias1,depth0,((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"dates")),{"name":"grid-width","hash":{},"data":data,"loc":{"start":{"line":12,"column":22},"end":{"line":12,"column":53}}}))
22846                            + "%\">\n        <div data-schedule-id=\""
22847                            + alias3(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"id") : stack1), depth0))
22848                            + "\" data-calendar-id=\""
22849                            + alias3(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"calendarId") : stack1), depth0))
22850                            + "\" class=\""
22851                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":13,"column":92},"end":{"line":13,"column":106}}}) : helper)))
22852                            + "weekday-schedule "
22853                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":13,"column":123},"end":{"line":13,"column":192}}})) != null ? stack1 : "")
22854                            + "\"\n            style=\"height:"
22855                            + alias3(alias5(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
22856                            + "px; line-height:"
22857                            + alias3(alias5(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
22858                            + "px; border-radius: "
22859                            + alias3(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderRadius")), depth0))
22860                            + ";\n"
22861                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.program(13, data, 0),"data":data,"loc":{"start":{"line":15,"column":16},"end":{"line":19,"column":23}}})) != null ? stack1 : "")
22862                            + "            "
22863                            + alias3(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"customStyle") : stack1), depth0))
22864                            + "\">\n            <span class=\""
22865                            + alias3(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":21,"column":25},"end":{"line":21,"column":39}}}) : helper)))
22866                            + "weekday-schedule-title\" "
22867                            // + "title=\""
22868                            // + alias3(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"title") : stack1), depth0))
22869                            // + "\""
22870                            + ">"
22871                            + ((stack1 = (lookupProperty(helpers,"schedule-tmpl")||(depth0 && lookupProperty(depth0,"schedule-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"schedule-tmpl","hash":{},"data":data,"loc":{"start":{"line":21,"column":87},"end":{"line":21,"column":112}}})) != null ? stack1 : "")
22872                            + "</span>\n            "
22873                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(lookupProperty(helpers,"or")||(depth0 && lookupProperty(depth0,"or"))||alias2).call(alias1,((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"isReadOnly")),((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isReadOnly") : stack1),{"name":"or","hash":{},"data":data,"loc":{"start":{"line":22,"column":22},"end":{"line":22,"column":60}}}),{"name":"unless","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":22,"column":12},"end":{"line":22,"column":193}}})) != null ? stack1 : "")
22874                            + "\n        </div>\n    </div>\n";
22875                    },"5":function(container,depth0,helpers,partials,data) {
22876                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22877                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22878                                return parent[propertyName];
22879                            }
22880                            return undefined
22881                        };
22882
22883                        return " "
22884                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":8,"column":31},"end":{"line":8,"column":45}}}) : helper)))
22885                            + "weekday-exceed-left";
22886                    },"7":function(container,depth0,helpers,partials,data) {
22887                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22888                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22889                                return parent[propertyName];
22890                            }
22891                            return undefined
22892                        };
22893
22894                        return " "
22895                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":9,"column":32},"end":{"line":9,"column":46}}}) : helper)))
22896                            + "weekday-exceed-right";
22897                    },"9":function(container,depth0,helpers,partials,data) {
22898                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22899                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22900                                return parent[propertyName];
22901                            }
22902                            return undefined
22903                        };
22904
22905                        return container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":13,"column":146},"end":{"line":13,"column":160}}}) : helper)))
22906                            + "weekday-schedule-focused ";
22907                    },"11":function(container,depth0,helpers,partials,data) {
22908                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22909                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22910                                return parent[propertyName];
22911                            }
22912                            return undefined
22913                        };
22914
22915                        return "                    color: #ffffff; background-color:"
22916                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
22917                            + "; border-color:"
22918                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
22919                            + ";\n";
22920                    },"13":function(container,depth0,helpers,partials,data) {
22921                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22922                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22923                                return parent[propertyName];
22924                            }
22925                            return undefined
22926                        };
22927
22928                        return "                    color:"
22929                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
22930                            + "; background-color:"
22931                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"bgColor") : stack1), depth0))
22932                            + "; border-color:"
22933                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
22934                            + ";\n";
22935                    },"15":function(container,depth0,helpers,partials,data) {
22936                        var stack1, helper, alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22937                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22938                                return parent[propertyName];
22939                            }
22940                            return undefined
22941                        };
22942
22943                        return "<span class=\""
22944                            + alias1(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":22,"column":75},"end":{"line":22,"column":89}}}) : helper)))
22945                            + "weekday-resize-handle handle-y\" style=\"line-height:"
22946                            + alias1(container.lambda(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleHeight")), depth0))
22947                            + "px;\">&nbsp;</span>";
22948                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
22949                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22950                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22951                                return parent[propertyName];
22952                            }
22953                            return undefined
22954                        };
22955
22956                        return "<div class=\""
22957                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
22958                            + "weekday-schedules "
22959                            + alias4(((helper = (helper = lookupProperty(helpers,"collapsed") || (depth0 != null ? lookupProperty(depth0,"collapsed") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"collapsed","hash":{},"data":data,"loc":{"start":{"line":1,"column":44},"end":{"line":1,"column":57}}}) : helper)))
22960                            + "\"style=\"top:"
22961                            + alias4(container.lambda(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"scheduleContainerTop")), depth0))
22962                            + "px;\">\n"
22963                            + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"matrices") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":28,"column":15}}})) != null ? stack1 : "")
22964                            + "</div>\n";
22965                    },"useData":true});
22966
22967                /***/ }),
22968
22969            /***/ "./src/js/view/template/week/daynames.hbs":
22970            /*!************************************************!*\
22971  !*** ./src/js/view/template/week/daynames.hbs ***!
22972  \************************************************/
22973            /*! no static exports found */
22974            /***/ (function(module, exports, __webpack_require__) {
22975
22976                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
22977                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
22978                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
22979                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
22980                                return parent[propertyName];
22981                            }
22982                            return undefined
22983                        };
22984
22985                        return "<div class=\""
22986                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":12},"end":{"line":3,"column":26}}}) : helper)))
22987                            + "dayname "
22988                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isToday") : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":34},"end":{"line":3,"column":75}}})) != null ? stack1 : "")
22989                            + " "
22990                            + alias4((lookupProperty(helpers,"holiday")||(depth0 && lookupProperty(depth0,"holiday"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"day") : depth0),{"name":"holiday","hash":{},"data":data,"loc":{"start":{"line":3,"column":76},"end":{"line":3,"column":91}}}))
22991                            + "\"\n     data-date=\""
22992                            + alias4(((helper = (helper = lookupProperty(helpers,"renderDate") || (depth0 != null ? lookupProperty(depth0,"renderDate") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"renderDate","hash":{},"data":data,"loc":{"start":{"line":4,"column":16},"end":{"line":4,"column":30}}}) : helper)))
22993                            + "\"\n     style=\""
22994                            + alias4((lookupProperty(helpers,"common-width")||(depth0 && lookupProperty(depth0,"common-width"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"width") : depth0),{"name":"common-width","hash":{},"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":5,"column":34}}}))
22995                            + ";left:"
22996                            + alias4(((helper = (helper = lookupProperty(helpers,"left") || (depth0 != null ? lookupProperty(depth0,"left") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"left","hash":{},"data":data,"loc":{"start":{"line":5,"column":40},"end":{"line":5,"column":48}}}) : helper)))
22997                            + "%; line-height: "
22998                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"height")), depth0))
22999                            + "; border-left: "
23000                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderLeft")), depth0))
23001                            + "; padding-left: "
23002                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"paddingLeft")), depth0))
23003                            + ";\">\n    <span class=\""
23004                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":6,"column":17},"end":{"line":6,"column":31}}}) : helper)))
23005                            + "dayname-date-area\" style=\"color: "
23006                            + alias4(((helper = (helper = lookupProperty(helpers,"color") || (depth0 != null ? lookupProperty(depth0,"color") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"color","hash":{},"data":data,"loc":{"start":{"line":6,"column":64},"end":{"line":6,"column":73}}}) : helper)))
23007                            + ";\">\n        "
23008                            + ((stack1 = (lookupProperty(helpers,"weekDayname-tmpl")||(depth0 && lookupProperty(depth0,"weekDayname-tmpl"))||alias2).call(alias1,depth0,{"name":"weekDayname-tmpl","hash":{},"data":data,"loc":{"start":{"line":7,"column":8},"end":{"line":7,"column":35}}})) != null ? stack1 : "")
23009                            + "\n    </span>\n</div>\n";
23010                    },"2":function(container,depth0,helpers,partials,data) {
23011                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23012                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23013                                return parent[propertyName];
23014                            }
23015                            return undefined
23016                        };
23017
23018                        return container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":49},"end":{"line":3,"column":63}}}) : helper)))
23019                            + "today";
23020                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
23021                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23022                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23023                                return parent[propertyName];
23024                            }
23025                            return undefined
23026                        };
23027
23028                        return "<div class=\""
23029                            + alias2(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
23030                            + "dayname-leftmargin\" style=\"margin-left: "
23031                            + alias2(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"marginLeft")), depth0))
23032                            + ";\">\n"
23033                            + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"dayNames") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":0},"end":{"line":10,"column":9}}})) != null ? stack1 : "")
23034                            + "</div>\n";
23035                    },"useData":true});
23036
23037                /***/ }),
23038
23039            /***/ "./src/js/view/template/week/time.hbs":
23040            /*!********************************************!*\
23041  !*** ./src/js/view/template/week/time.hbs ***!
23042  \********************************************/
23043            /*! no static exports found */
23044            /***/ (function(module, exports, __webpack_require__) {
23045
23046                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
23047                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
23048                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23049                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23050                                return parent[propertyName];
23051                            }
23052                            return undefined
23053                        };
23054
23055                        return ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":4},"end":{"line":60,"column":13}}})) != null ? stack1 : "");
23056                    },"2":function(container,depth0,helpers,partials,data) {
23057                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23058                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23059                                return parent[propertyName];
23060                            }
23061                            return undefined
23062                        };
23063
23064                        return ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"each","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":8},"end":{"line":59,"column":17}}})) != null ? stack1 : "");
23065                    },"3":function(container,depth0,helpers,partials,data) {
23066                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23067                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23068                                return parent[propertyName];
23069                            }
23070                            return undefined
23071                        };
23072
23073                        return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":5,"column":8},"end":{"line":58,"column":17}}})) != null ? stack1 : "");
23074                    },"4":function(container,depth0,helpers,partials,data) {
23075                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23076                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23077                                return parent[propertyName];
23078                            }
23079                            return undefined
23080                        };
23081
23082                        return "<div class=\""
23083                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":6,"column":20},"end":{"line":6,"column":34}}}) : helper)))
23084                            + "time-date-schedule-block "
23085                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isPending") : stack1),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":6,"column":59},"end":{"line":6,"column":136}}})) != null ? stack1 : "")
23086                            + "\" data-id=\""
23087                            + alias4((lookupProperty(helpers,"stamp")||(depth0 && lookupProperty(depth0,"stamp"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"stamp","hash":{},"data":data,"loc":{"start":{"line":6,"column":147},"end":{"line":6,"column":162}}}))
23088                            + "\"\n            style=\""
23089                            + alias4((lookupProperty(helpers,"time-scheduleBlock")||(depth0 && lookupProperty(depth0,"time-scheduleBlock"))||alias2).call(alias1,depth0,{"name":"time-scheduleBlock","hash":{},"data":data,"loc":{"start":{"line":7,"column":19},"end":{"line":7,"column":46}}}))
23090                            + ";\n"
23091                            + ((stack1 = (lookupProperty(helpers,"fi")||(depth0 && lookupProperty(depth0,"fi"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"left") : depth0),"!==",0,{"name":"fi","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":16},"end":{"line":10,"column":23}}})) != null ? stack1 : "")
23092                            + "            \">\n            <div data-schedule-id=\""
23093                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"id") : stack1), depth0))
23094                            + "\" data-calendar-id=\""
23095                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"calendarId") : stack1), depth0))
23096                            + "\" class=\""
23097                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":96},"end":{"line":12,"column":110}}}) : helper)))
23098                            + "time-schedule "
23099                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":124},"end":{"line":12,"column":190}}})) != null ? stack1 : "")
23100                            + "\"\n                style=\"\n"
23101                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"croppedEnd") : depth0),{"name":"unless","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":14,"column":16},"end":{"line":17,"column":27}}})) != null ? stack1 : "")
23102                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"croppedStart") : depth0),{"name":"unless","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":18,"column":16},"end":{"line":21,"column":27}}})) != null ? stack1 : "")
23103                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.program(17, data, 0),"data":data,"loc":{"start":{"line":22,"column":16},"end":{"line":26,"column":23}}})) != null ? stack1 : "")
23104                            + "                 "
23105                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"customStyle") : stack1), depth0))
23106                            + "\"\n            >\n"
23107                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hasGoingDuration") : depth0),{"name":"if","hash":{},"fn":container.program(19, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":29,"column":12},"end":{"line":37,"column":19}}})) != null ? stack1 : "")
23108                            + "                <div class=\""
23109                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":38,"column":28},"end":{"line":38,"column":42}}}) : helper)))
23110                            + "time-schedule-content "
23111                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":38,"column":64},"end":{"line":38,"column":78}}}) : helper)))
23112                            + "time-schedule-content-time\" style=\"height: "
23113                            + alias4(((helper = (helper = lookupProperty(helpers,"modelDurationHeight") || (depth0 != null ? lookupProperty(depth0,"modelDurationHeight") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"modelDurationHeight","hash":{},"data":data,"loc":{"start":{"line":38,"column":121},"end":{"line":38,"column":144}}}) : helper)))
23114                            + "px;\n"
23115                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(20, data, 0),"inverse":container.program(22, data, 0),"data":data,"loc":{"start":{"line":39,"column":16},"end":{"line":43,"column":23}}})) != null ? stack1 : "")
23116                            + "                "
23117                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hasComingDuration") : depth0),{"name":"if","hash":{},"fn":container.program(24, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":44,"column":16},"end":{"line":44,"column":96}}})) != null ? stack1 : "")
23118                            + "\">\n                    "
23119                            + ((stack1 = (lookupProperty(helpers,"time-tmpl")||(depth0 && lookupProperty(depth0,"time-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"time-tmpl","hash":{},"data":data,"loc":{"start":{"line":45,"column":20},"end":{"line":45,"column":41}}})) != null ? stack1 : "")
23120                            + "\n                </div>\n"
23121                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hasComingDuration") : depth0),{"name":"if","hash":{},"fn":container.program(26, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":47,"column":12},"end":{"line":54,"column":19}}})) != null ? stack1 : "")
23122                            + "            </div>\n            "
23123                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(lookupProperty(helpers,"or")||(depth0 && lookupProperty(depth0,"or"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"croppedEnd") : depth0),((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"isReadOnly")),((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isReadOnly") : stack1),{"name":"or","hash":{},"data":data,"loc":{"start":{"line":56,"column":22},"end":{"line":56,"column":71}}}),{"name":"unless","hash":{},"fn":container.program(29, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":56,"column":12},"end":{"line":56,"column":202}}})) != null ? stack1 : "")
23124                            + "\n        </div>\n";
23125                    },"5":function(container,depth0,helpers,partials,data) {
23126                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23127                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23128                                return parent[propertyName];
23129                            }
23130                            return undefined
23131                        };
23132
23133                        return " "
23134                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":6,"column":83},"end":{"line":6,"column":97}}}) : helper)))
23135                            + "time-date-schedule-block-pending";
23136                    },"7":function(container,depth0,helpers,partials,data) {
23137                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23138                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23139                                return parent[propertyName];
23140                            }
23141                            return undefined
23142                        };
23143
23144                        return "                    padding-left: "
23145                            + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"paddingLeft")), depth0))
23146                            + ";\n";
23147                    },"9":function(container,depth0,helpers,partials,data) {
23148                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23149                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23150                                return parent[propertyName];
23151                            }
23152                            return undefined
23153                        };
23154
23155                        return container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":147},"end":{"line":12,"column":161}}}) : helper)))
23156                            + "time-schedule-focused ";
23157                    },"11":function(container,depth0,helpers,partials,data) {
23158                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23159                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23160                                return parent[propertyName];
23161                            }
23162                            return undefined
23163                        };
23164
23165                        return "                    border-bottom-left-radius: "
23166                            + alias2(alias1(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderRadius")), depth0))
23167                            + ";\n                    border-bottom-right-radius: "
23168                            + alias2(alias1(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderRadius")), depth0))
23169                            + ";\n";
23170                    },"13":function(container,depth0,helpers,partials,data) {
23171                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23172                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23173                                return parent[propertyName];
23174                            }
23175                            return undefined
23176                        };
23177
23178                        return "                    border-top-left-radius: "
23179                            + alias2(alias1(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderRadius")), depth0))
23180                            + ";\n                    border-top-right-radius: "
23181                            + alias2(alias1(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderRadius")), depth0))
23182                            + ";\n";
23183                    },"15":function(container,depth0,helpers,partials,data) {
23184                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23185                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23186                                return parent[propertyName];
23187                            }
23188                            return undefined
23189                        };
23190
23191                        return "                    color: #ffffff; background-color:"
23192                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
23193                            + "; border-color:"
23194                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
23195                            + ";\n";
23196                    },"17":function(container,depth0,helpers,partials,data) {
23197                        var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23198                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23199                                return parent[propertyName];
23200                            }
23201                            return undefined
23202                        };
23203
23204                        return "                    color:"
23205                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
23206                            + "; background-color:"
23207                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"bgColor") : stack1), depth0))
23208                            + "; border-color:"
23209                            + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
23210                            + ";\n";
23211                    },"19":function(container,depth0,helpers,partials,data) {
23212                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23213                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23214                                return parent[propertyName];
23215                            }
23216                            return undefined
23217                        };
23218
23219                        return "                <div class=\""
23220                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":30,"column":28},"end":{"line":30,"column":42}}}) : helper)))
23221                            + "time-schedule-content "
23222                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":30,"column":64},"end":{"line":30,"column":78}}}) : helper)))
23223                            + "time-schedule-content-travel-time\" style=\"height: "
23224                            + alias4(((helper = (helper = lookupProperty(helpers,"goingDurationHeight") || (depth0 != null ? lookupProperty(depth0,"goingDurationHeight") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"goingDurationHeight","hash":{},"data":data,"loc":{"start":{"line":30,"column":128},"end":{"line":30,"column":151}}}) : helper)))
23225                            + "px;\n"
23226                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(20, data, 0),"inverse":container.program(22, data, 0),"data":data,"loc":{"start":{"line":31,"column":16},"end":{"line":35,"column":23}}})) != null ? stack1 : "")
23227                            + "                border-bottom: 1px dashed "
23228                            + alias4(((helper = (helper = lookupProperty(helpers,"travelBorderColor") || (depth0 != null ? lookupProperty(depth0,"travelBorderColor") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"travelBorderColor","hash":{},"data":data,"loc":{"start":{"line":36,"column":42},"end":{"line":36,"column":63}}}) : helper)))
23229                            + ";\">"
23230                            + ((stack1 = (lookupProperty(helpers,"goingDuration-tmpl")||(depth0 && lookupProperty(depth0,"goingDuration-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"goingDuration-tmpl","hash":{},"data":data,"loc":{"start":{"line":36,"column":66},"end":{"line":36,"column":96}}})) != null ? stack1 : "")
23231                            + "</div>\n";
23232                    },"20":function(container,depth0,helpers,partials,data) {
23233                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23234                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23235                                return parent[propertyName];
23236                            }
23237                            return undefined
23238                        };
23239
23240                        return "                    border-color:"
23241                            + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
23242                            + ";\n";
23243                    },"22":function(container,depth0,helpers,partials,data) {
23244                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23245                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23246                                return parent[propertyName];
23247                            }
23248                            return undefined
23249                        };
23250
23251                        return "                    border-color:"
23252                            + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
23253                            + ";\n";
23254                    },"24":function(container,depth0,helpers,partials,data) {
23255                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23256                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23257                                return parent[propertyName];
23258                            }
23259                            return undefined
23260                        };
23261
23262                        return "border-bottom: 1px dashed "
23263                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"travelBorderColor") || (depth0 != null ? lookupProperty(depth0,"travelBorderColor") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"travelBorderColor","hash":{},"data":data,"loc":{"start":{"line":44,"column":67},"end":{"line":44,"column":88}}}) : helper)))
23264                            + ";";
23265                    },"26":function(container,depth0,helpers,partials,data) {
23266                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23267                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23268                                return parent[propertyName];
23269                            }
23270                            return undefined
23271                        };
23272
23273                        return "                <div class=\""
23274                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":48,"column":28},"end":{"line":48,"column":42}}}) : helper)))
23275                            + "time-schedule-content "
23276                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":48,"column":64},"end":{"line":48,"column":78}}}) : helper)))
23277                            + "time-schedule-content-travel-time\" style=\"height: "
23278                            + alias4(((helper = (helper = lookupProperty(helpers,"comingDurationHeight") || (depth0 != null ? lookupProperty(depth0,"comingDurationHeight") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"comingDurationHeight","hash":{},"data":data,"loc":{"start":{"line":48,"column":128},"end":{"line":48,"column":152}}}) : helper)))
23279                            + "px;\n"
23280                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"isFocused") : stack1),{"name":"if","hash":{},"fn":container.program(20, data, 0),"inverse":container.program(27, data, 0),"data":data,"loc":{"start":{"line":49,"column":16},"end":{"line":53,"column":23}}})) != null ? stack1 : "")
23281                            + ";\">"
23282                            + ((stack1 = (lookupProperty(helpers,"comingDuration-tmpl")||(depth0 && lookupProperty(depth0,"comingDuration-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"comingDuration-tmpl","hash":{},"data":data,"loc":{"start":{"line":53,"column":26},"end":{"line":53,"column":57}}})) != null ? stack1 : "")
23283                            + "</div>\n";
23284                    },"27":function(container,depth0,helpers,partials,data) {
23285                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23286                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23287                                return parent[propertyName];
23288                            }
23289                            return undefined
23290                        };
23291
23292                        return "                    border-color:"
23293                            + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
23294                            + ";\n                ";
23295                    },"29":function(container,depth0,helpers,partials,data) {
23296                        var stack1, helper, alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23297                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23298                                return parent[propertyName];
23299                            }
23300                            return undefined
23301                        };
23302
23303                        return "<div class=\""
23304                            + alias1(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":56,"column":85},"end":{"line":56,"column":99}}}) : helper)))
23305                            + "time-resize-handle handle-x\" style=\"margin-left: "
23306                            + alias1(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"paddingLeft")), depth0))
23307                            + ";\">&nbsp;</div>";
23308                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
23309                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23310                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23311                                return parent[propertyName];
23312                            }
23313                            return undefined
23314                        };
23315
23316                        return "<div class=\""
23317                            + alias2(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
23318                            + "time-date-schedule-block-wrap\" style=\"margin-right: "
23319                            + alias2(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"marginRight") : stack1), depth0))
23320                            + ";\">\n"
23321                            + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"matrices") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":0},"end":{"line":61,"column":9}}})) != null ? stack1 : "")
23322                            + "</div>\n";
23323                    },"useData":true});
23324
23325                /***/ }),
23326
23327            /***/ "./src/js/view/template/week/timeGrid.hbs":
23328            /*!************************************************!*\
23329  !*** ./src/js/view/template/week/timeGrid.hbs ***!
23330  \************************************************/
23331            /*! no static exports found */
23332            /***/ (function(module, exports, __webpack_require__) {
23333
23334                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
23335                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
23336                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23337                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23338                                return parent[propertyName];
23339                            }
23340                            return undefined
23341                        };
23342
23343                        return "<div class=\""
23344                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":20},"end":{"line":3,"column":34}}}) : helper)))
23345                            + "timegrid-timezone\" data-timezone-index=\""
23346                            + alias4(((helper = (helper = lookupProperty(helpers,"index") || (data && lookupProperty(data,"index"))) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"index","hash":{},"data":data,"loc":{"start":{"line":3,"column":74},"end":{"line":3,"column":84}}}) : helper)))
23347                            + "\" style=\""
23348                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hidden") : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":93},"end":{"line":3,"column":127}}})) != null ? stack1 : "")
23349                            + "position: absolute; top: 0; width: "
23350                            + alias4(((helper = (helper = lookupProperty(helpers,"width") || (depth0 != null ? lookupProperty(depth0,"width") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"width","hash":{},"data":data,"loc":{"start":{"line":3,"column":162},"end":{"line":3,"column":171}}}) : helper)))
23351                            + "%; left: "
23352                            + alias4(((helper = (helper = lookupProperty(helpers,"left") || (depth0 != null ? lookupProperty(depth0,"left") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"left","hash":{},"data":data,"loc":{"start":{"line":3,"column":180},"end":{"line":3,"column":188}}}) : helper)))
23353                            + "%; border-right: "
23354                            + alias4(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"leftBorderRight")), depth0))
23355                            + "; background-color: "
23356                            + alias4(((helper = (helper = lookupProperty(helpers,"backgroundColor") || (depth0 != null ? lookupProperty(depth0,"backgroundColor") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"backgroundColor","hash":{},"data":data,"loc":{"start":{"line":3,"column":257},"end":{"line":3,"column":276}}}) : helper)))
23357                            + ";\" >\n"
23358                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isPrimary") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.program(10, data, 0),"data":data,"loc":{"start":{"line":4,"column":8},"end":{"line":26,"column":15}}})) != null ? stack1 : "")
23359                            + "        </div>\n";
23360                    },"2":function(container,depth0,helpers,partials,data) {
23361                        return "display:none;";
23362                    },"4":function(container,depth0,helpers,partials,data) {
23363                        var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
23364                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23365                                return parent[propertyName];
23366                            }
23367                            return undefined
23368                        };
23369
23370                        return ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"timeSlots") : depth0),{"name":"each","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":5,"column":12},"end":{"line":9,"column":23}}})) != null ? stack1 : "")
23371                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"showHourMarker")),{"name":"if","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":12},"end":{"line":14,"column":19}}})) != null ? stack1 : "");
23372                    },"5":function(container,depth0,helpers,partials,data) {
23373                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23374                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23375                                return parent[propertyName];
23376                            }
23377                            return undefined
23378                        };
23379
23380                        return "<div class=\""
23381                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":6,"column":28},"end":{"line":6,"column":42}}}) : helper)))
23382                            + "timegrid-hour\" style=\"height: "
23383                            + alias4(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"oneHourHeight")), depth0))
23384                            + "; color: "
23385                            + alias4(((helper = (helper = lookupProperty(helpers,"color") || (depth0 != null ? lookupProperty(depth0,"color") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"color","hash":{},"data":data,"loc":{"start":{"line":6,"column":111},"end":{"line":6,"column":120}}}) : helper)))
23386                            + "; font-weight: "
23387                            + alias4(((helper = (helper = lookupProperty(helpers,"fontWeight") || (depth0 != null ? lookupProperty(depth0,"fontWeight") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"fontWeight","hash":{},"data":data,"loc":{"start":{"line":6,"column":135},"end":{"line":6,"column":149}}}) : helper)))
23388                            + ";\">\n                    <span style=\""
23389                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hidden") : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":7,"column":33},"end":{"line":7,"column":66}}})) != null ? stack1 : "")
23390                            + "\">"
23391                            + ((stack1 = (lookupProperty(helpers,"timegridDisplayPrimayTime-tmpl")||(depth0 && lookupProperty(depth0,"timegridDisplayPrimayTime-tmpl"))||alias2).call(alias1,depth0,{"name":"timegridDisplayPrimayTime-tmpl","hash":{},"data":data,"loc":{"start":{"line":7,"column":68},"end":{"line":7,"column":109}}})) != null ? stack1 : "")
23392                            + "</span>\n                </div>\n";
23393                    },"6":function(container,depth0,helpers,partials,data) {
23394                        return "display:none";
23395                    },"8":function(container,depth0,helpers,partials,data) {
23396                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23397                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23398                                return parent[propertyName];
23399                            }
23400                            return undefined
23401                        };
23402
23403                        return "                <div class=\""
23404                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":11,"column":28},"end":{"line":11,"column":42}}}) : helper)))
23405                            + "timegrid-hourmarker\" style=\"top:"
23406                            + alias4(alias5(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"hourmarkerTop")), depth0))
23407                            + "%; margin-top: calc(6px - "
23408                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"halfHourHeight")), depth0))
23409                            + "); height: "
23410                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"halfHourHeight")), depth0))
23411                            + ";\">\n                    <div class=\""
23412                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":12,"column":32},"end":{"line":12,"column":46}}}) : helper)))
23413                            + "timegrid-hourmarker-time\" style=\"color: "
23414                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"currentTimeColor")), depth0))
23415                            + "; font-size: "
23416                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"currentTimeFontSize")), depth0))
23417                            + "; font-weight: "
23418                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"currentTimeFontWeight")), depth0))
23419                            + "\">"
23420                            + ((stack1 = (lookupProperty(helpers,"timegridCurrentTime-tmpl")||(depth0 && lookupProperty(depth0,"timegridCurrentTime-tmpl"))||alias2).call(alias1,depth0,{"name":"timegridCurrentTime-tmpl","hash":{},"data":data,"loc":{"start":{"line":12,"column":223},"end":{"line":12,"column":258}}})) != null ? stack1 : "")
23421                            + "</div>\n                </div>\n";
23422                    },"10":function(container,depth0,helpers,partials,data) {
23423                        var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
23424                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23425                                return parent[propertyName];
23426                            }
23427                            return undefined
23428                        };
23429
23430                        return ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"timeSlots") : depth0),{"name":"each","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":16,"column":12},"end":{"line":20,"column":23}}})) != null ? stack1 : "")
23431                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"showHourMarker")),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":21,"column":12},"end":{"line":25,"column":19}}})) != null ? stack1 : "");
23432                    },"11":function(container,depth0,helpers,partials,data) {
23433                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23434                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23435                                return parent[propertyName];
23436                            }
23437                            return undefined
23438                        };
23439
23440                        return "<div class=\""
23441                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":17,"column":28},"end":{"line":17,"column":42}}}) : helper)))
23442                            + "timegrid-hour\" style=\"height: "
23443                            + alias4(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"oneHourHeight")), depth0))
23444                            + "; color: "
23445                            + alias4(((helper = (helper = lookupProperty(helpers,"color") || (depth0 != null ? lookupProperty(depth0,"color") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"color","hash":{},"data":data,"loc":{"start":{"line":17,"column":111},"end":{"line":17,"column":120}}}) : helper)))
23446                            + "; font-weight: "
23447                            + alias4(((helper = (helper = lookupProperty(helpers,"fontWeight") || (depth0 != null ? lookupProperty(depth0,"fontWeight") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"fontWeight","hash":{},"data":data,"loc":{"start":{"line":17,"column":135},"end":{"line":17,"column":149}}}) : helper)))
23448                            + ";\">\n                    <span style=\""
23449                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hidden") : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":18,"column":33},"end":{"line":18,"column":66}}})) != null ? stack1 : "")
23450                            + "\">"
23451                            + ((stack1 = (lookupProperty(helpers,"timegridDisplayTime-tmpl")||(depth0 && lookupProperty(depth0,"timegridDisplayTime-tmpl"))||alias2).call(alias1,depth0,{"name":"timegridDisplayTime-tmpl","hash":{},"data":data,"loc":{"start":{"line":18,"column":68},"end":{"line":18,"column":103}}})) != null ? stack1 : "")
23452                            + "</span>\n                </div>\n";
23453                    },"13":function(container,depth0,helpers,partials,data) {
23454                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23455                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23456                                return parent[propertyName];
23457                            }
23458                            return undefined
23459                        };
23460
23461                        return "                <div class=\""
23462                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":22,"column":28},"end":{"line":22,"column":42}}}) : helper)))
23463                            + "timegrid-hourmarker\" style=\"top:"
23464                            + alias4(alias5(((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"hourmarkerTop")), depth0))
23465                            + "%; margin-top: calc(6px - "
23466                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"halfHourHeight")), depth0))
23467                            + "); height: "
23468                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"halfHourHeight")), depth0))
23469                            + ";\">\n                    <div class=\""
23470                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":23,"column":32},"end":{"line":23,"column":46}}}) : helper)))
23471                            + "timegrid-hourmarker-time\" style=\"color: "
23472                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"currentTimeColor")), depth0))
23473                            + "; font-size: "
23474                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"currentTimeFontSize")), depth0))
23475                            + ";\">"
23476                            + ((stack1 = (lookupProperty(helpers,"timegridCurrentTime-tmpl")||(depth0 && lookupProperty(depth0,"timegridCurrentTime-tmpl"))||alias2).call(alias1,depth0,{"name":"timegridCurrentTime-tmpl","hash":{},"data":data,"loc":{"start":{"line":23,"column":171},"end":{"line":23,"column":206}}})) != null ? stack1 : "")
23477                            + "</div>\n                </div>\n";
23478                    },"15":function(container,depth0,helpers,partials,data) {
23479                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23480                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23481                                return parent[propertyName];
23482                            }
23483                            return undefined
23484                        };
23485
23486                        return "<div class=\""
23487                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":33,"column":20},"end":{"line":33,"column":34}}}) : helper)))
23488                            + "timegrid-gridline\" style=\"height: "
23489                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"oneHourHeight")), depth0))
23490                            + ";\n"
23491                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(data && lookupProperty(data,"last")),{"name":"unless","hash":{},"fn":container.program(16, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":34,"column":12},"end":{"line":36,"column":23}}})) != null ? stack1 : "")
23492                            + "        \">\n            <div class=\""
23493                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":38,"column":24},"end":{"line":38,"column":38}}}) : helper)))
23494                            + "timegrid-gridline-half\" style=\"height: "
23495                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"halfHourHeight")), depth0))
23496                            + "; border-bottom: "
23497                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"halfHourBorderBottom")), depth0))
23498                            + ";\"></div>\n        </div>\n";
23499                    },"16":function(container,depth0,helpers,partials,data) {
23500                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23501                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23502                                return parent[propertyName];
23503                            }
23504                            return undefined
23505                        };
23506
23507                        return "            border-bottom: "
23508                            + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"borderBottom")), depth0))
23509                            + ";\n";
23510                    },"18":function(container,depth0,helpers,partials,data) {
23511                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23512                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23513                                return parent[propertyName];
23514                            }
23515                            return undefined
23516                        };
23517
23518                        return "    <div class=\""
23519                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":47,"column":16},"end":{"line":47,"column":30}}}) : helper)))
23520                            + "timegrid-hourmarker\" style=\"top:"
23521                            + alias4(((helper = (helper = lookupProperty(helpers,"hourmarkerTop") || (depth0 != null ? lookupProperty(depth0,"hourmarkerTop") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"hourmarkerTop","hash":{},"data":data,"loc":{"start":{"line":47,"column":62},"end":{"line":47,"column":79}}}) : helper)))
23522                            + "%\">\n        <div class=\""
23523                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":48,"column":20},"end":{"line":48,"column":34}}}) : helper)))
23524                            + "timegrid-hourmarker-line-left\" style=\"width:"
23525                            + alias4(((helper = (helper = lookupProperty(helpers,"todaymarkerLeft") || (depth0 != null ? lookupProperty(depth0,"todaymarkerLeft") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"todaymarkerLeft","hash":{},"data":data,"loc":{"start":{"line":48,"column":78},"end":{"line":48,"column":97}}}) : helper)))
23526                            + "%; border-top: "
23527                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"currentTimeLeftBorderTop") : stack1), depth0))
23528                            + ";\"></div>\n        <div class=\""
23529                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":49,"column":20},"end":{"line":49,"column":34}}}) : helper)))
23530                            + "timegrid-todaymarker\" style=\"left:"
23531                            + alias4(((helper = (helper = lookupProperty(helpers,"todaymarkerLeft") || (depth0 != null ? lookupProperty(depth0,"todaymarkerLeft") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"todaymarkerLeft","hash":{},"data":data,"loc":{"start":{"line":49,"column":68},"end":{"line":49,"column":87}}}) : helper)))
23532                            + "%; background-color: "
23533                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"currentTimeBulletBackgroundColor") : stack1), depth0))
23534                            + "; \">today</div>\n        <div class=\""
23535                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":50,"column":20},"end":{"line":50,"column":34}}}) : helper)))
23536                            + "timegrid-hourmarker-line-today\" style=\"left:"
23537                            + alias4(((helper = (helper = lookupProperty(helpers,"todaymarkerLeft") || (depth0 != null ? lookupProperty(depth0,"todaymarkerLeft") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"todaymarkerLeft","hash":{},"data":data,"loc":{"start":{"line":50,"column":78},"end":{"line":50,"column":97}}}) : helper)))
23538                            + "%; width: "
23539                            + alias4(((helper = (helper = lookupProperty(helpers,"todaymarkerWidth") || (depth0 != null ? lookupProperty(depth0,"todaymarkerWidth") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"todaymarkerWidth","hash":{},"data":data,"loc":{"start":{"line":50,"column":107},"end":{"line":50,"column":127}}}) : helper)))
23540                            + "%; border-top: "
23541                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"currentTimeTodayBorderTop") : stack1), depth0))
23542                            + ";\"></div>\n        <div class=\""
23543                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":51,"column":20},"end":{"line":51,"column":34}}}) : helper)))
23544                            + "timegrid-hourmarker-line-right\" style=\"left:"
23545                            + alias4(((helper = (helper = lookupProperty(helpers,"todaymarkerRight") || (depth0 != null ? lookupProperty(depth0,"todaymarkerRight") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"todaymarkerRight","hash":{},"data":data,"loc":{"start":{"line":51,"column":78},"end":{"line":51,"column":98}}}) : helper)))
23546                            + "%; border-top: "
23547                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"currentTimeRightBorderTop") : stack1), depth0))
23548                            + ";\"></div>\n    </div>\n";
23549                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
23550                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23551                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23552                                return parent[propertyName];
23553                            }
23554                            return undefined
23555                        };
23556
23557                        return "<div class=\""
23558                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
23559                            + "timegrid-left\" style=\"width: "
23560                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"leftWidth") : stack1), depth0))
23561                            + "; font-size: "
23562                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"styles") : depth0)) != null ? lookupProperty(stack1,"leftFontSize") : stack1), depth0))
23563                            + ";\">\n"
23564                            + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"timezones") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":4},"end":{"line":28,"column":15}}})) != null ? stack1 : "")
23565                            + "</div>\n<div class=\""
23566                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":30,"column":12},"end":{"line":30,"column":26}}}) : helper)))
23567                            + "timegrid-right\" style=\"margin-left: "
23568                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"leftWidth")), depth0))
23569                            + ";\">\n    <div class=\""
23570                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":31,"column":16},"end":{"line":31,"column":30}}}) : helper)))
23571                            + "timegrid-h-grid\">\n"
23572                            + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"hoursLabels") : depth0),{"name":"each","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":32,"column":8},"end":{"line":40,"column":19}}})) != null ? stack1 : "")
23573                            + "</div>\n    <div class=\""
23574                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":42,"column":16},"end":{"line":42,"column":30}}}) : helper)))
23575                            + "timegrid-schedules\">\n        <div class=\""
23576                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":43,"column":20},"end":{"line":43,"column":34}}}) : helper)))
23577                            + "timegrid-schedules-container\"></div>\n    </div>\n\n"
23578                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"showHourMarker") : depth0),{"name":"if","hash":{},"fn":container.program(18, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":46,"column":4},"end":{"line":53,"column":11}}})) != null ? stack1 : "")
23579                            + "</div>\n";
23580                    },"useData":true});
23581
23582                /***/ }),
23583
23584            /***/ "./src/js/view/template/week/timeGridCurrentTime.hbs":
23585            /*!***********************************************************!*\
23586  !*** ./src/js/view/template/week/timeGridCurrentTime.hbs ***!
23587  \***********************************************************/
23588            /*! no static exports found */
23589            /***/ (function(module, exports, __webpack_require__) {
23590
23591                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
23592                module.exports = (Handlebars['default'] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
23593                        var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23594                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23595                                return parent[propertyName];
23596                            }
23597                            return undefined
23598                        };
23599
23600                        return ((stack1 = (lookupProperty(helpers,"timegridCurrentTime-tmpl")||(depth0 && lookupProperty(depth0,"timegridCurrentTime-tmpl"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"timegridCurrentTime-tmpl","hash":{},"data":data,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":35}}})) != null ? stack1 : "")
23601                            + "\n";
23602                    },"useData":true});
23603
23604                /***/ }),
23605
23606            /***/ "./src/js/view/template/week/timeMoveGuide.hbs":
23607            /*!*****************************************************!*\
23608  !*** ./src/js/view/template/week/timeMoveGuide.hbs ***!
23609  \*****************************************************/
23610            /*! no static exports found */
23611            /***/ (function(module, exports, __webpack_require__) {
23612
23613                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
23614                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
23615                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23616                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23617                                return parent[propertyName];
23618                            }
23619                            return undefined
23620                        };
23621
23622                        return "            <div class=\""
23623                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":4,"column":24},"end":{"line":4,"column":38}}}) : helper)))
23624                            + "time-schedule-content "
23625                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":4,"column":60},"end":{"line":4,"column":74}}}) : helper)))
23626                            + "time-schedule-content-travel-time\" style=\"border-color:"
23627                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
23628                            + "; border-bottom: 1px dashed "
23629                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
23630                            + "; height: "
23631                            + alias4(((helper = (helper = lookupProperty(helpers,"goingDurationHeight") || (depth0 != null ? lookupProperty(depth0,"goingDurationHeight") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"goingDurationHeight","hash":{},"data":data,"loc":{"start":{"line":4,"column":203},"end":{"line":4,"column":226}}}) : helper)))
23632                            + "%;\">"
23633                            + ((stack1 = (lookupProperty(helpers,"goingDuration-tmpl")||(depth0 && lookupProperty(depth0,"goingDuration-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"goingDuration-tmpl","hash":{},"data":data,"loc":{"start":{"line":4,"column":230},"end":{"line":4,"column":260}}})) != null ? stack1 : "")
23634                            + "</div>\n";
23635                    },"3":function(container,depth0,helpers,partials,data) {
23636                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23637                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23638                                return parent[propertyName];
23639                            }
23640                            return undefined
23641                        };
23642
23643                        return "            <div class=\""
23644                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":10,"column":24},"end":{"line":10,"column":38}}}) : helper)))
23645                            + "time-schedule-content "
23646                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":10,"column":60},"end":{"line":10,"column":74}}}) : helper)))
23647                            + "time-schedule-content-travel-time\" style=\"border-color:"
23648                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
23649                            + "; border-top: 1px dashed "
23650                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"color") : stack1), depth0))
23651                            + "; height: "
23652                            + alias4(((helper = (helper = lookupProperty(helpers,"comingDurationHeight") || (depth0 != null ? lookupProperty(depth0,"comingDurationHeight") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"comingDurationHeight","hash":{},"data":data,"loc":{"start":{"line":10,"column":200},"end":{"line":10,"column":224}}}) : helper)))
23653                            + "%;\">"
23654                            + ((stack1 = (lookupProperty(helpers,"comingDuration-tmpl")||(depth0 && lookupProperty(depth0,"comingDuration-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"comingDuration-tmpl","hash":{},"data":data,"loc":{"start":{"line":10,"column":228},"end":{"line":10,"column":259}}})) != null ? stack1 : "")
23655                            + "</div>\n";
23656                    },"5":function(container,depth0,helpers,partials,data) {
23657                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23658                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23659                                return parent[propertyName];
23660                            }
23661                            return undefined
23662                        };
23663
23664                        return "<div class=\""
23665                            + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":13,"column":38},"end":{"line":13,"column":52}}}) : helper)))
23666                            + "time-resize-handle handle-x\">&nbsp;</div>";
23667                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
23668                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23669                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23670                                return parent[propertyName];
23671                            }
23672                            return undefined
23673                        };
23674
23675                        return "<div class=\""
23676                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}}}) : helper)))
23677                            + "time-date-schedule-block\" data-id=\""
23678                            + alias4((lookupProperty(helpers,"stamp")||(depth0 && lookupProperty(depth0,"stamp"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"stamp","hash":{},"data":data,"loc":{"start":{"line":1,"column":61},"end":{"line":1,"column":76}}}))
23679                            + "\" style=\"width: 100%; height: 100%;\">\n    <div class=\""
23680                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":2,"column":16},"end":{"line":2,"column":30}}}) : helper)))
23681                            + "time-schedule "
23682                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":2,"column":44},"end":{"line":2,"column":58}}}) : helper)))
23683                            + "time-date-schedule-block-focused\" style=\"color: #ffffff; background-color:"
23684                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"dragBgColor") : stack1), depth0))
23685                            + ";\">\n"
23686                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hasGoingDuration") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":8},"end":{"line":5,"column":15}}})) != null ? stack1 : "")
23687                            + "            <div class=\""
23688                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":6,"column":24},"end":{"line":6,"column":38}}}) : helper)))
23689                            + "time-schedule-content\" style=\"height: "
23690                            + alias4(((helper = (helper = lookupProperty(helpers,"modelDurationHeight") || (depth0 != null ? lookupProperty(depth0,"modelDurationHeight") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"modelDurationHeight","hash":{},"data":data,"loc":{"start":{"line":6,"column":76},"end":{"line":6,"column":99}}}) : helper)))
23691                            + "%; border-color:"
23692                            + alias4(alias5(((stack1 = (depth0 != null ? lookupProperty(depth0,"model") : depth0)) != null ? lookupProperty(stack1,"borderColor") : stack1), depth0))
23693                            + ";\">\n                "
23694                            + ((stack1 = (lookupProperty(helpers,"time-tmpl")||(depth0 && lookupProperty(depth0,"time-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"model") : depth0),{"name":"time-tmpl","hash":{},"data":data,"loc":{"start":{"line":7,"column":16},"end":{"line":7,"column":37}}})) != null ? stack1 : "")
23695                            + "\n            </div>\n"
23696                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hasComingDuration") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":9,"column":8},"end":{"line":11,"column":15}}})) != null ? stack1 : "")
23697                            + "    </div>\n    "
23698                            + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"croppedEnd") : depth0),{"name":"unless","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":13,"column":4},"end":{"line":13,"column":104}}})) != null ? stack1 : "")
23699                            + "\n    <div class=\""
23700                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":14,"column":16},"end":{"line":14,"column":30}}}) : helper)))
23701                            + "time-date-schedule-block-cover\"></div>\n</div>\n";
23702                    },"useData":true});
23703
23704                /***/ }),
23705
23706            /***/ "./src/js/view/template/week/timezoneSticky.hbs":
23707            /*!******************************************************!*\
23708  !*** ./src/js/view/template/week/timezoneSticky.hbs ***!
23709  \******************************************************/
23710            /*! no static exports found */
23711            /***/ (function(module, exports, __webpack_require__) {
23712
23713                var Handlebars = __webpack_require__(/*! ./node_modules/handlebars/runtime.js */ "./node_modules/handlebars/runtime.js");
23714                module.exports = (Handlebars['default'] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
23715                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23716                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23717                                return parent[propertyName];
23718                            }
23719                            return undefined
23720                        };
23721
23722                        return "<div class=\""
23723                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":2,"column":12},"end":{"line":2,"column":26}}}) : helper)))
23724                            + "timegrid-timezone-label-container\" style=\""
23725                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hidden") : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":68},"end":{"line":2,"column":102}}})) != null ? stack1 : "")
23726                            + "background-color: "
23727                            + alias4(((helper = (helper = lookupProperty(helpers,"backgroundColor") || (depth0 != null ? lookupProperty(depth0,"backgroundColor") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"backgroundColor","hash":{},"data":data,"loc":{"start":{"line":2,"column":120},"end":{"line":2,"column":139}}}) : helper)))
23728                            + "; height: 100%; width: "
23729                            + alias4(((helper = (helper = lookupProperty(helpers,"width") || (depth0 != null ? lookupProperty(depth0,"width") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"width","hash":{},"data":data,"loc":{"start":{"line":2,"column":162},"end":{"line":2,"column":171}}}) : helper)))
23730                            + "%; left: "
23731                            + alias4(((helper = (helper = lookupProperty(helpers,"left") || (depth0 != null ? lookupProperty(depth0,"left") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"left","hash":{},"data":data,"loc":{"start":{"line":2,"column":180},"end":{"line":2,"column":188}}}) : helper)))
23732                            + "%; font-size: "
23733                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"leftFontSize")), depth0))
23734                            + "; border-right: "
23735                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"leftBorderRight")), depth0))
23736                            + ";\">\n    <div title=\""
23737                            + alias4(((helper = (helper = lookupProperty(helpers,"tooltip") || (depth0 != null ? lookupProperty(depth0,"tooltip") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"tooltip","hash":{},"data":data,"loc":{"start":{"line":3,"column":16},"end":{"line":3,"column":27}}}) : helper)))
23738                            + "\" class=\""
23739                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":3,"column":36},"end":{"line":3,"column":50}}}) : helper)))
23740                            + "timegrid-timezone-label-cell\" data-timezone=\""
23741                            + alias4(((helper = (helper = lookupProperty(helpers,"displayLabel") || (depth0 != null ? lookupProperty(depth0,"displayLabel") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"displayLabel","hash":{},"data":data,"loc":{"start":{"line":3,"column":95},"end":{"line":3,"column":111}}}) : helper)))
23742                            + "\" style=\"height: 100%; width: 100%;\">\n"
23743                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,(lookupProperty(helpers,"and")||(depth0 && lookupProperty(depth0,"and"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"isPrimary") : depth0),((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"showTimezoneCollapseButton")),{"name":"and","hash":{},"data":data,"loc":{"start":{"line":4,"column":14},"end":{"line":4,"column":62}}}),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":8},"end":{"line":10,"column":15}}})) != null ? stack1 : "")
23744                            + "        <div class=\""
23745                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":11,"column":20},"end":{"line":11,"column":34}}}) : helper)))
23746                            + "timegrid-timezone-label\">"
23747                            + ((stack1 = (lookupProperty(helpers,"timezoneDisplayLabel-tmpl")||(depth0 && lookupProperty(depth0,"timezoneDisplayLabel-tmpl"))||alias2).call(alias1,(depth0 != null ? lookupProperty(depth0,"timezoneOffset") : depth0),(depth0 != null ? lookupProperty(depth0,"displayLabel") : depth0),{"name":"timezoneDisplayLabel-tmpl","hash":{},"data":data,"loc":{"start":{"line":11,"column":59},"end":{"line":11,"column":118}}})) != null ? stack1 : "")
23748                            + "</div>\n    </div>\n</div>\n";
23749                    },"2":function(container,depth0,helpers,partials,data) {
23750                        return "display:none;";
23751                    },"4":function(container,depth0,helpers,partials,data) {
23752                        var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23753                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23754                                return parent[propertyName];
23755                            }
23756                            return undefined
23757                        };
23758
23759                        return "            <div class=\""
23760                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":5,"column":24},"end":{"line":5,"column":38}}}) : helper)))
23761                            + "timegrid-timezone-close-btn\" style=\"border: 1px solid #ddd; top:2px; bottom: 2px; width: 10px; border-left: none;\">\n                <span style=\"color: #777; height: calc("
23762                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"displayTimezoneLabelHeight")), depth0))
23763                            + " - 6px); line-height: calc("
23764                            + alias4(alias5(((stack1 = ((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"styles"))) && lookupProperty(stack1,"displayTimezoneLabelHeight")), depth0))
23765                            + " - 6px);\">\n                    <span class=\""
23766                            + alias4(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":33},"end":{"line":7,"column":47}}}) : helper)))
23767                            + "icon "
23768                            + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (data && lookupProperty(data,"root"))) && lookupProperty(stack1,"timezonesCollapsed")),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.program(7, data, 0),"data":data,"loc":{"start":{"line":7,"column":52},"end":{"line":7,"column":154}}})) != null ? stack1 : "")
23769                            + "\"></span>\n                </span>\n            </div>\n";
23770                    },"5":function(container,depth0,helpers,partials,data) {
23771                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23772                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23773                                return parent[propertyName];
23774                            }
23775                            return undefined
23776                        };
23777
23778                        return container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":84},"end":{"line":7,"column":98}}}) : helper)))
23779                            + "ic-arrow-right";
23780                    },"7":function(container,depth0,helpers,partials,data) {
23781                        var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
23782                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23783                                return parent[propertyName];
23784                            }
23785                            return undefined
23786                        };
23787
23788                        return container.escapeExpression(((helper = (helper = lookupProperty(helpers,"CSS_PREFIX") || (depth0 != null ? lookupProperty(depth0,"CSS_PREFIX") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"CSS_PREFIX","hash":{},"data":data,"loc":{"start":{"line":7,"column":120},"end":{"line":7,"column":134}}}) : helper)))
23789                            + "ic-arrow-left";
23790                    },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
23791                        var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
23792                            if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
23793                                return parent[propertyName];
23794                            }
23795                            return undefined
23796                        };
23797
23798                        return ((stack1 = lookupProperty(helpers,"each").call(alias1,(lookupProperty(helpers,"reverse")||(depth0 && lookupProperty(depth0,"reverse"))||container.hooks.helperMissing).call(alias1,(depth0 != null ? lookupProperty(depth0,"timezones") : depth0),{"name":"reverse","hash":{},"data":data,"loc":{"start":{"line":1,"column":8},"end":{"line":1,"column":27}}}),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":0},"end":{"line":14,"column":11}}})) != null ? stack1 : "");
23799                    },"useData":true});
23800
23801                /***/ }),
23802
23803            
23803/***/ "./src/js/view/view.js":
23804            /*!*****************************!*\
23805  !*** ./src/js/view/view.js ***!
23806  \*****************************/
23807            /*! no static exports found */
23808            /***/ (function(module, exports, __webpack_require__) {
23809
23810                "use strict";
23811                /**
23812                 * @fileoverview The base class of views.
23813                 * @author NHN FE Development Lab <[email protected]>
23814                 */
23815
23816
23817                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
23818                var domutil = __webpack_require__(/*! ../common/domutil */ "./src/js/common/domutil.js");
23819                var Collection = __webpack_require__(/*! ../common/collection */ "./src/js/common/collection.js");
23820
23821                /**
23822                 * Base class of views.
23823                 *
23824                 * All views create own container element inside supplied container element.
23825                 * @constructor
23826                 * @param {HTMLElement} container Default container element for view.
23827                 *  you can use this element for this.container syntax.
23828                 */
23829                function View(container) {
23830                    var id = util.stamp(this);
23831
23832                    if (util.isUndefined(container)) {
23833                        container = domutil.appendHTMLElement('div');
23834                    }
23835
23836                    domutil.addClass(container, this.cssprefix(id));
23837
23838                    /**
23839                     * unique id
23840                     * @type {number}
23841                     */
23842                    this.id = id;
23843
23844                    /**
23845                     * base element of view.
23846                     * @type {HTMLDIVElement}
23847                     */
23848                    this.container = container;
23849
23850                    /*eslint-disable*/
23851                    /**
23852                     * child views.
23853                     * @type {Collection}
23854                     */
23855                    this.children = new Collection(function(view) {
23856                        return util.stamp(view);
23857                    });
23858                    /* eslint-enable*/
23859
23860                    /**
23861                     * parent view instance.
23862                     * @type {View}
23863                     */
23864                    this.parent = null;
23865
23866                    /**
23867                     * state of view
23868                     */
23869                    this.state = {};
23870                }
23871
23872                /**
23873                 * CSS classname prefix
23874                 * @type {string}
23875                 */
23876                View.prototype.cssPrefix = 'tui-view-';
23877
23878                /**
23879                 * Add child views.
23880                 * @param {View} view The view instance to add.
23881                 * @param {function} [fn] Function for invoke before add. parent view class is supplied first arguments.
23882                 */
23883                View.prototype.addChild = function(view, fn) {
23884                    if (fn) {
23885                        fn.call(view, this);
23886                    }
23887                    // add parent view
23888                    view.parent = this;
23889
23890                    this.children.add(view);
23891                };
23892
23893                /**
23894                 * Remove added child view.
23895                 * @param {(number|View)} id View id or instance itself to remove.
23896                 * @param {function} [fn] Function for invoke before remove. parent view class is supplied first arguments.
23897                 */
23898                View.prototype.removeChild = function(id, fn) {
23899                    var view = util.isNumber(id) ? this.children.items[id] : id;
23900
23901                    id = util.stamp(view);
23902
23903                    if (fn) {
23904                        fn.call(view, this);
23905                    }
23906
23907                    this.children.remove(id);
23908                };
23909
23910                /**
23911                 * Render view recursively.
23912                 */
23913                View.prototype.render = function() {
23914                    this.children.each(function(childView) {
23915                        childView.render();
23916                    });
23917                };
23918
23919                /**
23920                 * Invoke function recursively.
23921                 * @param {function} fn - function to invoke child view recursively
23922                 * @param {boolean} [skipThis=false] - set true then skip invoke with this(root) view.
23923                 */
23924                View.prototype.recursive = function(fn, skipThis) {
23925                    if (!util.isFunction(fn)) {
23926                        return;
23927                    }
23928
23929                    if (!skipThis) {
23930                        fn(this);
23931                    }
23932
23933                    this.children.each(function(childView) {
23934                        childView.recursive(fn);
23935                    });
23936                };
23937
23938                /**
23939                 * Resize view recursively to parent.
23940                 */
23941                View.prototype.resize = function() {
23942                    var args = Array.prototype.slice.call(arguments),
23943                        parent = this.parent;
23944
23945                    while (parent) {
23946                        if (util.isFunction(parent._onResize)) {
23947                            parent._onResize.apply(parent, args);
23948                        }
23949
23950                        parent = parent.parent;
23951                    }
23952                };
23953
23954                /**
23955                 * Invoking method before destroying.
23956                 */
23957                View.prototype._beforeDestroy = function() {};
23958
23959                /**
23960                 * Clear properties
23961                 */
23962                View.prototype._destroy = function() {
23963                    this._beforeDestroy();
23964                    this.children.clear();
23965                    this.container.innerHTML = '';
23966
23967                    this.id = this.parent = this.children = this.container = null;
23968                };
23969
23970                /*eslint-disable*/
23971                /**
23972                 * Destroy child view recursively.
23973                 */
23974                View.prototype.destroy = function(isChildView) {
23975                    this.children.each(function(childView) {
23976                        childView.destroy(true);
23977                        childView._destroy();
23978                    });
23979
23980                    if (isChildView) {
23981                        return;
23982                    }
23983
23984                    this._destroy();
23985                };
23986                /* eslint-enable*/
23987
23988                /**
23989                 * Calculate view's container element bound.
23990                 * @returns {object} The bound of container element.
23991                 */
23992                View.prototype.getViewBound = function() {
23993                    var container = this.container,
23994                        position = domutil.getPosition(container),
23995                        size = domutil.getSize(container);
23996
23997                    return {
23998                        x: position[0],
23999                        y: position[1],
24000                        width: size[0],
24001                        height: size[1]
24002                    };
24003                };
24004
24005                /**
24006                 * Return view default CSS prefix
24007                 * @param {string} [className] - if supplied then return prefix added class name
24008                 * @returns {string} CSS prefix value
24009                 */
24010                View.prototype.cssprefix = function(className) {
24011                    return this.cssPrefix + (className || '');
24012                };
24013
24014                /**
24015                 * set state
24016                 * @param {object} state - state
24017                 */
24018                View.prototype.setState = function(state) {
24019                    util.extend(this.state, state);
24020                };
24021
24022                util.CustomEvents.mixin(View);
24023
24024                module.exports = View;
24025
24026
24027                /***/ }),
24028
24029            
24029/***/ "./src/js/view/week/dayGrid.js":
24030            /*!*************************************!*\
24031  !*** ./src/js/view/week/dayGrid.js ***!
24032  \*************************************/
24033            /*! no static exports found */
24034            /***/ (function(module, exports, __webpack_require__) {
24035
24036                "use strict";
24037                /**
24038                 * @fileoverview DayGrid in weekly view
24039                 * @author NHN FE Development Lab <[email protected]>
24040                 */
24041
24042
24043                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
24044                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js"),
24045                    common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js"),
24046                    datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js"),
24047                    domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js"),
24048                    TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date,
24049                    View = __webpack_require__(/*! ../../view/view */ "./src/js/view/view.js"),
24050                    DayGridSchedule = __webpack_require__(/*! ./dayGridSchedule */ "./src/js/view/week/dayGridSchedule.js"),
24051                    baseTmpl = __webpack_require__(/*! ../template/week/dayGrid.hbs */ "./src/js/view/template/week/dayGrid.hbs"),
24052                    reqAnimFrame = __webpack_require__(/*! ../../common/reqAnimFrame */ "./src/js/common/reqAnimFrame.js");
24053                var mmax = Math.max,
24054                    mmin = Math.min;
24055
24056                /**
24057                 * @constructor
24058                 * @extends {Weekday}
24059                 * @param {string} name - view name
24060                 * @param {object} options - options for DayGridSchedule view
24061                 * @param {number} [options.heightPercent] - height percent of view
24062                 * @param {number} [options.containerButtonGutter=8] - free space at bottom to
24063                 *  make create easy.
24064                 * @param {number} [options.scheduleHeight=18] - height of each schedule block.
24065                 * @param {number} [options.scheduleGutter=2] - gutter height of each schedule block.
24066                 * @param {HTMLDIVElement} container - DOM element to use container for this
24067                 *  view.
24068                 * @param {Theme} theme - theme instance
24069                 */
24070                function DayGrid(name, options, container, theme) {
24071                    container = domutil.appendHTMLElement(
24072                        'div',
24073                        container,
24074                        config.classname('daygrid-layout')
24075                    );
24076                    View.call(this, container);
24077
24078                    name = name || 'daygrid';
24079
24080                    this.options = util.extend({
24081                        viewName: name,
24082                        daynames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
24083                        renderStartDate: '',
24084                        renderEndDate: '',
24085                        containerBottomGutter: 18,
24086                        scheduleHeight: parseInt(theme.week.dayGridSchedule.height, 10),
24087                        scheduleGutter: parseInt(theme.week.dayGridSchedule.marginTop, 10),
24088                        scheduleContainerTop: 1,
24089                        timezones: options.timezones,
24090                        isReadOnly: options.isReadOnly,
24091                        getViewModelFunc: function(viewModel) {
24092                            return viewModel.schedulesInDateRange[name];
24093                        },
24094                        setViewModelFunc: function(viewModel, matrices) {
24095                            viewModel.schedulesInDateRange[name] = matrices;
24096                        }
24097                    }, options.week);
24098
24099                    this.handler = {};
24100                    this.vPanel = null;
24101
24102                    this.state.collapsed = true;
24103                }
24104
24105                util.inherit(DayGrid, View);
24106
24107                /**
24108                 * @override
24109                 * @param {object} viewModel - schedules view models
24110                 */
24111                DayGrid.prototype.getBaseViewModel = function(viewModel) {
24112                    var opt = this.options,
24113                        daynames = opt.daynames,
24114                        range = viewModel.range,
24115                        grids = viewModel.grids,
24116                        matrices = opt.getViewModelFunc(viewModel),
24117                        exceedDate = {},
24118                        panel = getPanel(opt.panels, opt.viewName),
24119                        panelHeight = this.getViewBound().height,
24120                        collapsed = this.state.collapsed,
24121                        heightForcedSet = this.vPanel ? this.vPanel.getHeightForcedSet() : false,
24122                        timezonesCollapsed = viewModel.state.timezonesCollapsed,
24123                        styles = this._getStyles(viewModel.theme, timezonesCollapsed);
24124
24125                    var baseViewModel, visibleScheduleCount;
24126                    var now = new TZDate().toLocalTime();
24127
24128                    if (panel.showExpandableButton) {
24129                        if (!heightForcedSet) {
24130                            if (collapsed) {
24131                                panelHeight = mmax(panelHeight, panel.maxHeight);
24132                            } else {
24133                                panelHeight = mmin(panelHeight, panel.maxExpandableHeight);
24134                            }
24135                        }
24136
24137                        visibleScheduleCount = Math.floor(panelHeight / (opt.scheduleHeight + opt.scheduleGutter));
24138                        if (collapsed) {
24139                            exceedDate = this.parent.controller.getExceedDate(visibleScheduleCount,
24140                                matrices,
24141                                viewModel.range
24142                            );
24143                            matrices = this.parent.controller.excludeExceedSchedules(matrices, visibleScheduleCount);
24144                            opt.setViewModelFunc(viewModel, matrices);
24145                        }
24146                    }
24147
24148                    baseViewModel = {
24149                        viewName: opt.viewName,
24150                        range: range,
24151                        grids: grids,
24152                        days: util.map(viewModel.range, function(d, index) {
24153                            var day = d.getDay();
24154                            var ymd = datetime.format(d, 'YYYYMMDD');
24155                            var isToday = datetime.isSameDate(now, d);
24156
24157                            return {
24158                                day: day,
24159                                dayName: daynames[day],
24160                                isToday: isToday,
24161                                date: d.getDate(),
24162                                renderDate: datetime.format(d, 'YYYY-MM-DD'),
24163                                hiddenSchedules: exceedDate[ymd] || 0,
24164                                width: grids[index] ? grids[index].width : 0,
24165                                left: grids[index] ? grids[index].left : 0,
24166                                backgroundColor: viewModel.range.length > 1 ?
24167                                    getWeekBackgroundColor(day, isToday, styles) : styles.backgroundColor
24168                            };
24169                        }),
24170                        exceedDate: exceedDate,
24171                        showExpandableButton: panel.showExpandableButton,
24172                        collapsed: collapsed,
24173                        collapseBtnIndex: this.state.clickedExpandBtnIndex,
24174                        styles: styles
24175                    };
24176
24177                    return baseViewModel;
24178                };
24179
24180                /**
24181                 * @override
24182                 * @param {object} viewModel - schedules view models
24183                 */
24184                DayGrid.prototype.render = function(viewModel) {
24185                    var opt = this.options,
24186                        container = this.container,
24187                        baseViewModel = this.getBaseViewModel(viewModel),
24188                        scheduleContainerTop = this.options.scheduleContainerTop;
24189                    var dayGridSchedule;
24190
24191                    container.innerHTML = baseTmpl(baseViewModel);
24192
24193                    this.children.clear();
24194
24195                    dayGridSchedule = new DayGridSchedule(
24196                        opt,
24197                        domutil.find(config.classname('.container'), container)
24198                    );
24199                    this.addChild(dayGridSchedule);
24200
24201                    dayGridSchedule.on('afterRender', function(weekdayViewModel) {
24202                        baseViewModel.height = weekdayViewModel.minHeight + scheduleContainerTop;
24203                    });
24204
24205                    this.children.each(function(childView) {
24206                        childView.render(viewModel);
24207                    }, this);
24208
24209                    this.fire('afterRender', baseViewModel);
24210                };
24211
24212                DayGrid.prototype._beforeDestroy = function() {
24213                };
24214
24215                DayGrid.prototype.addHandler = function(type, handler, vPanel) {
24216                    var self = this;
24217
24218                    this.handler[type] = handler;
24219                    this.vPanel = vPanel;
24220
24221                    if (type === 'click') {
24222                        handler.on('expand', function() {
24223                            self.setState({
24224                                collapsed: false
24225                            });
24226                        }, this);
24227                        handler.on('collapse', function() {
24228                            self.setState({
24229                                collapsed: true
24230                            });
24231                        }, this);
24232                    }
24233                };
24234
24235                DayGrid.prototype._expand = function() {
24236                    reqAnimFrame.requestAnimFrame(function() {
24237                        var vPanel = this.vPanel;
24238                        var opt = this.options;
24239                        var panel = getPanel(opt.panels, opt.viewName);
24240
24241                        vPanel.setMaxHeight(panel.maxExpandableHeight);
24242                        vPanel.setHeightForcedSet(false);
24243                        vPanel.setHeight(null, panel.maxExpandableHeight);
24244
24245                        if (this.parent) {
24246                            this.parent.render();
24247                        }
24248                    }, this);
24249                };
24250
24251                DayGrid.prototype._collapse = function() {
24252                    reqAnimFrame.requestAnimFrame(function() {
24253                        var vPanel = this.vPanel;
24254                        var opt = this.options;
24255                        var panel = getPanel(opt.panels, opt.viewName);
24256
24257                        vPanel.setMaxHeight(panel.maxHeight);
24258                        vPanel.setHeightForcedSet(false);
24259                        vPanel.setHeight(null, panel.minHeight);
24260
24261                        if (this.parent) {
24262                            this.parent.render();
24263                        }
24264                    }, this);
24265                };
24266
24267                /**
24268                 * set state
24269                 * @param {object} state - state
24270                 */
24271                DayGrid.prototype.setState = function(state) {
24272                    var collapsed = this.state.collapsed;
24273                    View.prototype.setState.call(this, state);
24274
24275                    if (this.state.collapsed === collapsed) {
24276                        return;
24277                    }
24278
24279                    if (this.state.collapsed) {
24280                        this._collapse();
24281                    } else {
24282                        this._expand();
24283                    }
24284                };
24285
24286                /**
24287                 * Get the styles from theme
24288                 * @param {Theme} theme - theme instance
24289                 * @param {boolean} timezonesCollapsed - multiple timezones are collapsed.
24290                 * @returns {object} styles - styles object
24291                 */
24292                DayGrid.prototype._getStyles = function(theme, timezonesCollapsed) {
24293                    var styles = {};
24294                    var timezonesLength = this.options.timezones.length;
24295                    var collapsed = timezonesCollapsed;
24296                    var numberAndUnit;
24297
24298                    if (theme) {
24299                        styles.borderRight = theme.week.daygrid.borderRight || theme.common.border;
24300                        styles.todayBackgroundColor = theme.week.today.backgroundColor;
24301                        styles.weekendBackgroundColor = theme.week.weekend.backgroundColor;
24302                        styles.backgroundColor = theme.week.daygrid.backgroundColor;
24303                        styles.leftWidth = theme.week.daygridLeft.width;
24304                        styles.leftBackgroundColor = theme.week.daygridLeft.backgroundColor;
24305                        styles.leftPaddingRight = theme.week.daygridLeft.paddingRight;
24306                        styles.leftBorderRight = theme.week.daygridLeft.borderRight;
24307
24308                        if (!collapsed && timezonesLength > 1) {
24309                            numberAndUnit = common.parseUnit(styles.leftWidth);
24310                            styles.leftWidth = (numberAndUnit[0] * timezonesLength) + numberAndUnit[1];
24311                        }
24312                    }
24313
24314                    return styles;
24315                };
24316
24317                /**
24318                 * Get a background color based on day.
24319                 * @param {number} day - day number
24320                 * @param {boolean} isToday - today flag
24321                 * @param {object} styles - style object
24322                 * @returns {string} backgroundColor
24323                 */
24324                function getWeekBackgroundColor(day, isToday, styles) {
24325                    var backgroundColor = '';
24326
24327                    if (day === 0 || day === 6) {
24328                        backgroundColor = styles.weekendBackgroundColor;
24329                    } else if (isToday) {
24330                        backgroundColor = styles.todayBackgroundColor;
24331                    } else {
24332                        backgroundColor = styles.backgroundColor;
24333                    }
24334
24335                    return backgroundColor;
24336                }
24337
24338                /**
24339                 * get a panel infomation
24340                 * @param {Array.<object[]>} panels - panel infomations
24341                 * @param {string} name - panel name
24342                 * @returns {object} panel information
24343                 */
24344                function getPanel(panels, name) {
24345                    var found;
24346
24347                    util.forEach(panels, function(panel) {
24348                        if (panel.name === name) {
24349                            found = panel;
24350                        }
24351                    });
24352
24353                    return found;
24354                }
24355
24356                module.exports = DayGrid;
24357
24358
24359                /***/ }),
24360
24361            
24361/***/ "./src/js/view/week/dayGridSchedule.js":
24362            /*!*********************************************!*\
24363  !*** ./src/js/view/week/dayGridSchedule.js ***!
24364  \*********************************************/
24365            /*! no static exports found */
24366            /***/ (function(module, exports, __webpack_require__) {
24367
24368                "use strict";
24369                /**
24370                 * @fileoverview Weekday view for week
24371                 * @author NHN FE Development Lab <[email protected]>
24372                 */
24373
24374
24375                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
24376                var Weekday = __webpack_require__(/*! ../weekday */ "./src/js/view/weekday.js"),
24377                    tmpl = __webpack_require__(/*! ../template/week/dayGridSchedule.hbs */ "./src/js/view/template/week/dayGridSchedule.hbs");
24378                var mmax = Math.max;
24379
24380                /**
24381                 * @constructor
24382                 * @extends {Weekday}
24383                 * @param {object} options - options for DayGridSchedule view
24384                 * @param {number} [options.containerButtonGutter=8] - free space at bottom to
24385                 *  make create easy.
24386                 * @param {number} [options.scheduleHeight=18] - height of each schedule block.
24387                 * @param {number} [options.scheduleGutter=2] - gutter height of each schedule block.
24388                 * @param {HTMLDIVElement} container - DOM element to use container for this
24389                 *  view.
24390                 */
24391                function DayGridSchedule(options, container) {
24392                    Weekday.call(this, options, container);
24393
24394                    this.collapsed = true;
24395                }
24396
24397                util.inherit(DayGridSchedule, Weekday);
24398
24399                /**
24400                 * Render Weekday view
24401                 * @override
24402                 */
24403                DayGridSchedule.prototype.render = function(viewModel) {
24404                    var container = this.container;
24405                    var baseViewModel;
24406
24407                    baseViewModel = this.getBaseViewModel(viewModel);
24408
24409                    container.innerHTML = tmpl(baseViewModel);
24410
24411                    this.fire('afterRender', baseViewModel);
24412                };
24413
24414                /**
24415                 * returns maximum schedule count in day
24416                 * @param {array} matrices - The matrices for schedule placing.
24417                 * @returns {number} maximum schedule count in day
24418                 */
24419                DayGridSchedule.prototype._getMaxScheduleInDay = function(matrices) {
24420                    return mmax.apply(
24421                        null,
24422                        util.map(matrices, function(matrix) {
24423                            return Math.max.apply(null, util.map(matrix, function(row) {
24424                                return row.length;
24425                            }));
24426                        })
24427                    );
24428                };
24429
24430                /**
24431                 * returns minimum height for container.
24432                 * @param {number} maxScheduleInDay - max schedule blocks in one day
24433                 * @returns {number}
24434                 */
24435                DayGridSchedule.prototype._getMinHeight = function(maxScheduleInDay) {
24436                    var opt = this.options;
24437                    var contentHeight = (maxScheduleInDay * opt.scheduleHeight)
24438                        + ((maxScheduleInDay - 1) * opt.scheduleGutter);
24439
24440                    // if (this.collapsed && this.aboutMe.maxHeight >= contentHeight + opt.containerBottomGutter) {
24441                    //     contentHeight += opt.containerBottomGutter;
24442                    // }
24443
24444                    return contentHeight;
24445                };
24446
24447                /**
24448                 * @override
24449                 * @param {object} viewModel - schedules view models
24450                 */
24451                DayGridSchedule.prototype.getBaseViewModel = function(viewModel) {
24452                    var opt = this.options;
24453                    var matrices = opt.getViewModelFunc(viewModel);
24454                    var maxScheduleInDay = this._getMaxScheduleInDay(matrices);
24455                    var baseViewModel;
24456                    var styles = this._getStyles(viewModel.theme);
24457
24458                    baseViewModel = Weekday.prototype.getBaseViewModel.call(this, viewModel);
24459
24460                    baseViewModel = util.extend({
24461                        minHeight: this._getMinHeight(maxScheduleInDay),
24462                        matrices: matrices,
24463                        scheduleContainerTop: this.options.scheduleContainerTop,
24464                        maxScheduleInDay: maxScheduleInDay,
24465                        isReadOnly: opt.isReadOnly,
24466                        styles: styles
24467                    }, baseViewModel);
24468
24469                    return baseViewModel;
24470                };
24471
24472                /**
24473                 * Get the styles from theme
24474                 * @param {Theme} theme - theme instance
24475                 * @returns {object} styles - styles object
24476                 */
24477                DayGridSchedule.prototype._getStyles = function(theme) {
24478                    var styles = {};
24479
24480                    if (theme) {
24481                        styles.borderRadius = theme.week.dayGridSchedule.borderRadius;
24482                    }
24483
24484                    return styles;
24485                };
24486
24487                module.exports = DayGridSchedule;
24488
24489
24490                /***/ }),
24491
24492            
24492/***/ "./src/js/view/week/dayname.js":
24493            /*!*************************************!*\
24494  !*** ./src/js/view/week/dayname.js ***!
24495  \*************************************/
24496            /*! no static exports found */
24497            /***/ (function(module, exports, __webpack_require__) {
24498
24499                "use strict";
24500                /**
24501                 * @fileoverview View for rendering daynames
24502                 * @author NHN FE Development Lab <[email protected]>
24503                 */
24504
24505
24506                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
24507                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
24508                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
24509                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
24510                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
24511                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
24512                var View = __webpack_require__(/*! ../view */ "./src/js/view/view.js");
24513                var daynameTmpl = __webpack_require__(/*! ../template/week/daynames.hbs */ "./src/js/view/template/week/daynames.hbs");
24514
24515                /**
24516                 * @constructor
24517                 * @param {object} options - options for dayname view
24518                 * @param {HTMLElement} container Container element to use.
24519                 * @param {Theme} theme - theme instance
24520                 * @extends {View}
24521                 */
24522                function DayName(options, container, theme) {
24523                    container = domutil.appendHTMLElement(
24524                        'div',
24525                        container,
24526                        config.classname('dayname-container')
24527                    );
24528
24529                    this.options = util.extend({
24530                        daynames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
24531                        timezones: options.timezones
24532                    }, options.week);
24533
24534                    /**
24535                     * @type {Theme}
24536                     */
24537                    this.theme = theme;
24538
24539                    View.call(this, container);
24540
24541                    this.applyTheme();
24542                }
24543
24544                util.inherit(DayName, View);
24545
24546                /**
24547                 * Get default viewmodels.
24548                 * @param {Date} start The date of start render
24549                 * @param {Date} end The end of end render
24550                 * @param {object} grids grid data(width, left, day)
24551                 * @returns {array} viewmodel.
24552                 */
24553                DayName.prototype._getBaseViewModel = function(start, end, grids) {
24554                    var daynames = this.options.daynames,
24555                        theme = this.theme,
24556                        now = new TZDate().toLocalTime(),
24557                        viewModel;
24558
24559                    viewModel = util.map(datetime.range(
24560                        datetime.start(start),
24561                        datetime.end(end),
24562                        datetime.MILLISECONDS_PER_DAY
24563                    ), function(d, i) {
24564                        var day = d.getDay();
24565                        var isToday = datetime.isSameDate(d, now);
24566                        var isPastDay = d < now && !isToday;
24567
24568                        return {
24569                            day: day,
24570                            dayName: daynames[day],
24571                            isToday: isToday,
24572                            date: d.getDate(),
24573                            left: grids[i] ? grids[i].left : 0,
24574                            width: grids[i] ? grids[i].width : 0,
24575                            renderDate: datetime.format(d, 'YYYY-MM-DD'),
24576                            color: this._getDayNameColor(theme, day, isToday, isPastDay)
24577                        };
24578                    }, this);
24579
24580                    return viewModel;
24581                };
24582
24583                /**
24584                 * @override
24585                 * @param {object}
24585 viewModel View model from parent (WeekView)
24586                 */
24587                DayName.prototype.render = function(viewModel) {
24588                    var dayNames = this._getBaseViewModel(
24589                        viewModel.renderStartDate,
24590                        viewModel.renderEndDate,
24591                        viewModel.grids
24592                    );
24593                    var timezonesCollapsed = viewModel.state.timezonesCollapsed;
24594                    var styles = this._getStyles(this.theme, timezonesCollapsed);
24595                    var baseViewModel = util.extend({}, {
24596                        dayNames: dayNames,
24597                        styles: styles
24598                    });
24599
24600                    this.container.innerHTML = daynameTmpl(baseViewModel);
24601                };
24602
24603                /**
24604                 * Get a day name color
24605                 * @param {Theme} theme - theme instance
24606                 * @param {number} day - day number
24607                 * @param {boolean} isToday - today flag
24608                 * @param {boolean} isPastDay - is past day flag
24609                 * @returns {string} style - color style
24610                 */
24611                DayName.prototype._getDayNameColor = function(theme, day, isToday, isPastDay) {
24612                    var color = '';
24613
24614                    if (theme) {
24615                        if (day === 0) {
24616                            color = theme.common.holiday.color;
24617                        } else if (isPastDay) {
24618                            color = theme.week.pastDay.color || theme.common.dayname.color;
24619                        } else if (day === 6) {
24620                            color = theme.common.saturday.color;
24621                        } else if (isToday) {
24622                            color = theme.week.today.color || theme.common.today.color;
24623                        } else {
24624                            color = theme.common.dayname.color;
24625                        }
24626                    }
24627
24628                    return color;
24629                };
24630
24631                /**
24632                 * Get the styles from theme
24633                 * @param {Theme} theme - theme instance
24634                 * @param {boolean} timezonesCollapsed - multiple timezones are collapsed.
24635                 * @returns {object} styles - styles object
24636                 */
24637                DayName.prototype._getStyles = function(theme, timezonesCollapsed) {
24638                    var styles = {};
24639                    var timezonesLength = this.options.timezones.length;
24640                    var collapsed = timezonesCollapsed;
24641                    var numberAndUnit;
24642
24643                    if (theme) {
24644                        styles.borderTop = theme.week.dayname.borderTop || theme.common.border;
24645                        styles.borderBottom = theme.week.dayname.borderBottom || theme.common.border;
24646                        styles.borderLeft = theme.week.dayname.borderLeft || theme.common.border;
24647                        styles.paddingLeft = theme.week.dayname.paddingLeft;
24648                        styles.backgroundColor = theme.week.dayname.backgroundColor;
24649                        styles.height = theme.week.dayname.height;
24650                        styles.textAlign = theme.week.dayname.textAlign;
24651                        styles.marginLeft = theme.week.daygridLeft.width;
24652
24653                        if (!collapsed && timezonesLength > 1) {
24654                            numberAndUnit = common.parseUnit(styles.marginLeft);
24655                            styles.marginLeft = (numberAndUnit[0] * timezonesLength) + numberAndUnit[1];
24656                        }
24657                    }
24658
24659                    return styles;
24660                };
24661
24662                DayName.prototype.applyTheme = function() {
24663                    var styles = this._getStyles(this.theme);
24664                    var style = this.container.style;
24665
24666                    style.borderTop = styles.borderTop;
24667                    style.borderBottom = styles.borderBottom;
24668                    style.height = styles.height;
24669                    style.backgroundColor = styles.backgroundColor;
24670                    style.textAlign = styles.textAlign;
24671
24672                    return style;
24673                };
24674
24675                module.exports = DayName;
24676
24677
24678                /***/ }),
24679
24680            
24680/***/ "./src/js/view/week/time.js":
24681            /*!**********************************!*\
24682  !*** ./src/js/view/week/time.js ***!
24683  \**********************************/
24684            /*! no static exports found */
24685            /***/ (function(module, exports, __webpack_require__) {
24686
24687                "use strict";
24688                /**
24689                 * @fileoverview View of time.
24690                 * @author NHN FE Development Lab <[email protected]>
24691                 */
24692
24693
24694                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
24695                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
24696                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
24697                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
24698                var View = __webpack_require__(/*! ../view */ "./src/js/view/view.js");
24699                var timeTmpl = __webpack_require__(/*! ../template/week/time.hbs */ "./src/js/view/template/week/time.hbs");
24700
24701                var forEachArr = util.forEachArray;
24702                var SCHEDULE_MIN_DURATION = datetime.MILLISECONDS_SCHEDULE_MIN_DURATION;
24703
24704                /**
24705                 * @constructor
24706                 * @extends {View}
24707                 * @param {object} options Options
24708                 * @param {number} options.index Date index in week view.
24709                 * @param {number} options.width Date element width (percent)
24710                 * @param {string} options.ymd YYYMMDD string for this view
24711                 * @param {boolean} options.isToday when set true then assign today design class to container.
24712                 * @param {number} options.hourStart Can limit of render hour start.
24713                 * @param {number} options.hourEnd Can limit of render hour end.
24714                 * @param {HTMLElement} container Element to use container for this view.
24715                 * @param {Theme} theme - theme instance
24716                 */
24717                function Time(options, container, theme) {
24718                    View.call(this, container);
24719
24720                    this.options = util.extend({
24721                        index: 0,
24722                        width: 0,
24723                        ymd: '',
24724                        isToday: false,
24725                        pending: false,
24726                        hourStart: 0,
24727                        hourEnd: 24,
24728                        defaultMarginBottom: 2,
24729                        minHeight: 18.5,
24730                        isReadOnly: false
24731                    }, options);
24732
24733                    this.timeTmpl = timeTmpl;
24734
24735                    /**
24736                     * @type {Theme}
24737                     */
24738                    this.theme = theme;
24739
24740                    container.style.width = options.width + '%';
24741                    container.style.left = options.left + '%';
24742
24743                    if (this.options.isToday) {
24744                        domutil.addClass(this.container, config.classname('today'));
24745                    }
24746
24747                    this.applyTheme();
24748                }
24749
24750                util.inherit(Time, View);
24751
24752                /**
24753                 * Convert YYYYMMDD formatted string date to Date.
24754                 * @param {string} str formatted string.
24755                 * @returns {Date} start of date.
24756                 */
24757                Time.prototype._parseDateGroup = function(str) {
24758                    var y = parseInt(str.substr(0, 4), 10),
24759                        m = parseInt(str.substr(4, 2), 10),
24760                        d = parseInt(str.substr(6, 2), 10);
24761                    var date = datetime.start();
24762
24763                    date.setFullYear(y, m - 1, d);
24764
24765                    return datetime.start(date);
24766                };
24767
24768                /**
24769                 * calculate left and width
24770                 * @param {ScheduleViewModel} viewModel - view model instance to calculate bound.
24771                 * @param {object} options - options for calculating schedule element's bound.
24772                 * @returns {object} - left and width
24773                 */
24774                Time.prototype._getScheduleViewBoundX = function(viewModel, options) {
24775                    var width = options.baseWidth * (viewModel.extraSpace + 1);
24776
24777                    // set width auto when has no collisions.
24778                    if (!viewModel.hasCollide) {
24779                        width = null;
24780                    }
24781
24782                    return {
24783                        left: options.baseLeft[options.columnIndex],
24784                        width: width
24785                    };
24786                };
24787
24788                /**
24789                 * calculate top, height, croppedStart and croppedEnd
24790                 * @param {ScheduleViewModel} viewModel - view model instance to calculate bound.
24791                 * @param {object} options - options for calculating schedule element's bound.
24792                 * @returns {object} - left and width
24793                 */
24794                Time.prototype._getScheduleViewBoundY = function(viewModel, options) {
24795                    var baseMS = options.baseMS;
24796                    var baseHeight = options.baseHeight;
24797                    var croppedStart = false;
24798                    var croppedEnd = false;
24799                    var goingDuration = datetime.millisecondsFrom('minutes', viewModel.valueOf().goingDuration);
24800                    var comingDuration = datetime.millisecondsFrom('minutes', viewModel.valueOf().comingDuration);
24801                    var offsetStart = viewModel.valueOf().start - goingDuration - options.todayStart;
24802                    // containerHeight : milliseconds in day = x : schedule's milliseconds
24803                    var top = (baseHeight * offsetStart) / baseMS;
24804                    var modelDuration = viewModel.duration();
24805                    var height;
24806                    var duration;
24807                    var goingDurationHeight;
24808                    var modelDurationHeight;
24809                    var comingDurationHeight;
24810
24811                    modelDuration = modelDuration > SCHEDULE_MIN_DURATION ? modelDuration : SCHEDULE_MIN_DURATION;
24812                    duration = modelDuration + goingDuration + comingDuration;
24813                    height = (baseHeight * duration) / baseMS;
24814
24815                    goingDurationHeight = (baseHeight * goingDuration) / baseMS; // common.ratio(duration, goingDuration, 100);
24816                    modelDurationHeight = (baseHeight * modelDuration) / baseMS; // common.ratio(duration, modelDuration, 100);
24817                    comingDurationHeight = (baseHeight * comingDuration) / baseMS; // common.ratio(duration, comingDuration, 100);
24818
24819                    if (offsetStart < 0) {
24820                        top = 0;
24821                        height += ((baseHeight * offsetStart) / baseMS);
24822                        croppedStart = true;
24823                    }
24824
24825                    if (height + top > baseHeight) {
24826                        height = baseHeight - top;
24827                        croppedEnd = true;
24828                    }
24829
24830                    return {
24831                        top: top,
24832                        height: Math.max(height, this.options.minHeight) - this.options.defaultMarginBottom,
24833                        modelDurationHeight: modelDurationHeight,
24834                        goingDurationHeight: goingDurationHeight,
24835                        comingDurationHeight: comingDurationHeight,
24836                        hasGoingDuration: goingDuration > 0,
24837                        hasComingDuration: comingDuration > 0,
24838                        croppedStart: croppedStart,
24839                        croppedEnd: croppedEnd
24840                    };
24841                };
24842
24843                /**
24844                 * @param {ScheduleViewModel} viewModel - view model instance to calculate bound.
24845                 * @param {object} options - options for calculating schedule element's bound.
24846                 * @param {Date} options.todayStart - date object represent schedule date's start (00:00:00)
24847                 * @param {number} options.baseMS - the number of milliseconds to render schedule blocks.
24848                 * @param {number} options.baseHeight - pixel value related with baseMS options.
24849                 * @param {number[]} options.baseLeft - left position percents for each columns.
24850                 * @param {number} options.baseWidth - the unit of schedule blocks width percent.
24851                 * @param {number} options.columnIndex - the number index of schedule blocks.
24852                 * it represent rendering index from left sides in view.
24853                 * @returns {object} bound object for supplied view model.
24854                 */
24855                Time.prototype.getScheduleViewBound = function(viewModel, options) {
24856                    var boundX = this._getScheduleViewBoundX(viewModel, options);
24857                    var boundY = this._getScheduleViewBoundY(viewModel, options);
24858                    var schedule = viewModel.model;
24859                    var isReadOnly = util.pick(schedule, 'isReadOnly') || false;
24860                    var travelBorderColor = schedule.isFocused ? '#ffffff' : schedule.borderColor;
24861                    if (travelBorderColor === schedule.bgColor) {
24862                        travelBorderColor = null; // follow text color
24863                    }
24864
24865                    return util.extend({
24866                        isReadOnly: isReadOnly,
24867                        travelBorderColor: travelBorderColor
24868                    }, boundX, boundY);
24869                };
24870
24871                /**
24872                 * Set viewmodels for rendering.
24873                 * @param {string} ymd The date of schedules. YYYYMMDD format.
24874                 * @param {array} matrices The matrices for schedule placing.
24875                 * @param {number} containerHeight - container's height
24876                 */
24877                Time.prototype._getBaseViewModel = function(ymd, matrices, containerHeight) {
24878                    var self = this,
24879                        options = this.options,
24880                        hourStart = options.hourStart,
24881                        hourEnd = options.hourEnd,
24882                        isReadOnly = options.isReadOnly,
24883                        todayStart,
24884                        baseMS;
24885
24886                    /**
24887                     * Calculate each schedule element bounds relative with rendered hour milliseconds and
24888                     * wrap each schedule model to viewmodels.
24889                     */
24890                    containerHeight = containerHeight || this.getViewBound().height;
24891                    todayStart = this._parseDateGroup(ymd);
24892                    todayStart.setHours(hourStart);
24893                    baseMS = datetime.millisecondsFrom('hour', (hourEnd - hourStart));
24894
24895                    forEachArr(matrices, function(matrix) {
24896                        var maxRowLength,
24897                            widthPercent,
24898                            leftPercents,
24899                            i;
24900
24901                        maxRowLength = Math.max.apply(null, util.map(matrix, function(row) {
24902                            return row.length;
24903                        }));
24904
24905                        widthPercent = 100 / maxRowLength;
24906
24907                        leftPercents = [];
24908                        for (i = 0; i < maxRowLength; i += 1) {
24909                            leftPercents[i] = widthPercent * i;
24910                        }
24911
24912                        forEachArr(matrix, function(row) {
24913                            forEachArr(row, function(viewModel, col) {
24914                                var viewBound;
24915
24916                                if (!viewModel) {
24917                                    return;
24918                                }
24919
24920                                viewBound = self.getScheduleViewBound(viewModel, {
24921                                    todayStart: todayStart,
24922                                    baseMS: baseMS,
24923                                    baseLeft: leftPercents,
24924                                    baseWidth: widthPercent,
24925                                    baseHeight: containerHeight,
24926                                    columnIndex: col,
24927                                    isReadOnly: isReadOnly
24928                                });
24929
24930                                util.extend(viewModel, viewBound);
24931                            });
24932                        });
24933                    });
24934                };
24935
24936                /**
24937                 * @returns {Date} - Date of this view.
24938                 */
24939                Time.prototype.getDate = function() {
24940                    return this._parseDateGroup(this.options.ymd);
24941                };
24942
24943                /**
24944                 * @override
24945                 * @param {string} ymd The date of schedules. YYYYMMDD format
24946                 * @param {array} matrices Matrices for placing schedules
24947                 * @param {number} containerHeight - container's height
24948                 */
24949                Time.prototype.render = function(ymd, matrices, containerHeight) {
24950                    this._getBaseViewModel(ymd, matrices, containerHeight);
24951                    this.container.innerHTML = this.timeTmpl({
24952                        matrices: matrices,
24953                        styles: this._getStyles(this.theme),
24954                        isReadOnly: this.options.isReadOnly
24955                    });
24956                };
24957
24958                /**
24959                 * Get the styles from theme
24960                 * @param {Theme} theme - theme instance
24961                 * @returns {object} styles - styles object
24962                 */
24963                Time.prototype._getStyles = function(theme) {
24964                    var styles = {};
24965                    var options = this.options;
24966
24967                    if (theme) {
24968                        styles.borderRight = theme.week.timegrid.borderRight || theme.common.border;
24969                        styles.marginRight = theme.week.timegrid.paddingRight;
24970                        styles.borderRadius = theme.week.timegridSchedule.borderRadius;
24971                        styles.paddingLeft = theme.week.timegridSchedule.paddingLeft;
24972                        styles.backgroundColor = options.isToday ? theme.week.today.backgroundColor : 'inherit';
24973                    }
24974
24975                    return styles;
24976                };
24977
24978                Time.prototype.applyTheme = function() {
24979                    var style = this.container.style;
24980                    var styles = this._getStyles(this.theme);
24981
24982                    style.borderRight = styles.borderRight;
24983                    style.backgroundColor = styles.backgroundColor;
24984                };
24985
24986                module.exports = Time;
24987
24988
24989                /***/ }),
24990
24991            
24991/***/ "./src/js/view/week/timeGrid.js":
24992            /*!**************************************!*\
24993  !*** ./src/js/view/week/timeGrid.js ***!
24994  \**************************************/
24995            /*! no static exports found */
24996            /***/ (function(module, exports, __webpack_require__) {
24997
24998                "use strict";
24999                /**
25000                 * @fileoverview View for rendered schedules by times.
25001                 * @author NHN FE Development Lab <[email protected]>
25002                 */
25003
25004
25005                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
25006                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
25007                var common = __webpack_require__(/*! ../../common/common */ "./src/js/common/common.js");
25008                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
25009                var domevent = __webpack_require__(/*! ../../common/domevent */ "./src/js/common/domevent.js");
25010                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
25011                var Timezone = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js");
25012                var reqAnimFrame = __webpack_require__(/*! ../../common/reqAnimFrame */ "./src/js/common/reqAnimFrame.js");
25013                var View = __webpack_require__(/*! ../view */ "./src/js/view/view.js");
25014                var Time = __webpack_require__(/*! ./time */ "./src/js/view/week/time.js");
25015                var AutoScroll = __webpack_require__(/*! ../../common/autoScroll */ "./src/js/common/autoScroll.js");
25016                var mainTmpl = __webpack_require__(/*! ../template/week/timeGrid.hbs */ "./src/js/view/template/week/timeGrid.hbs");
25017                var timezoneStickyTmpl = __webpack_require__(/*! ../template/week/timezoneSticky.hbs */ "./src/js/view/template/week/timezoneSticky.hbs");
25018                var timegridCurrentTimeTmpl = __webpack_require__(/*! ../template/week/timeGridCurrentTime.hbs */ "./src/js/view/template/week/timeGridCurrentTime.hbs");
25019                var TZDate = Timezone.Date;
25020                var HOURMARKER_REFRESH_INTERVAL = 1000 * 60;
25021                var SIXTY_SECONDS = 60;
25022                var SIXTY_MINUTES = 60;
25023
25024                /**
25025                 * Returns a list of time labels from start to end.
25026                 * For hidden labels near the current time, set to hidden: true.
25027                 * @param {object} opt - TimeGrid.options
25028                 * @param {boolean} hasHourMarker - Whether the current time is displayed
25029                 * @param {number} timezoneOffset - timezone offset
25030                 * @param {object} styles - styles
25031                 * @returns {Array.<Object>}
25032                 */
25033                function getHoursLabels(opt, hasHourMarker, timezoneOffset, styles) {
25034                    var hourStart = opt.hourStart;
25035                    var hourEnd = opt.hourEnd;
25036                    var renderEndDate = new TZDate(opt.renderEndDate);
25037                    var shiftByOffset = parseInt(timezoneOffset / SIXTY_MINUTES, 10);
25038                    var shiftMinutes = Math.abs(timezoneOffset % SIXTY_MINUTES);
25039                    var now = new TZDate().toLocalTime();
25040                    var nowMinutes = now.getMinutes();
25041                    var hoursRange = util.range(0, 24);
25042                    var nowAroundHours = null;
25043                    var nowHours, nowHoursIndex;
25044                    var isNegativeZero = 1 / -Infinity === shiftByOffset;
25045
25046                    if ((shiftByOffset < 0 || isNegativeZero) && shiftMinutes > 0) {
25047                        shiftByOffset -= 1;
25048                    }
25049
25050                    // shift the array and take elements between start and end
25051                    common.shiftArray(hoursRange, shiftByOffset);
25052                    common.takeArray(hoursRange, hourStart, hourEnd);
25053
25054                    nowHours = common.shiftHours(now.getHours(), shiftByOffset) % 24;
25055                    nowHoursIndex = util.inArray(nowHours, hoursRange);
25056
25057                    if (hasHourMarker) {
25058                        if (nowMinutes < 20) {
25059                            nowAroundHours = nowHours;
25060                        } else if (nowMinutes > 40) {
25061                            nowAroundHours = nowHours + 1;
25062                        }
25063
25064                        if (util.isNumber(nowAroundHours)) {
25065                            nowAroundHours %= 24;
25066                        }
25067                    }
25068
25069                    return util.map(hoursRange, function(hour, index) {
25070                        var color;
25071                        var fontWeight;
25072                        var isPast = (hasHourMarker && index <= nowHoursIndex) ||
25073                            (renderEndDate < now && !datetime.isSameDate(renderEndDate, now));
25074
25075                        if (isPast) {
25076                            // past
25077                            color = styles.pastTimeColor;
25078                            fontWeight = styles.pastTimeFontWeight;
25079                        } else {
25080                            // future
25081                            color = styles.futureTimeColor;
25082                            fontWeight = styles.futureTimeFontWeight;
25083                        }
25084
25085                        return {
25086                            hour: hour,
25087                            minutes: shiftMinutes,
25088                            hidden: nowAroundHours === hour || index === 0,
25089                            color: color || '',
25090                            fontWeight: fontWeight || ''
25091                        };
25092                    });
25093                }
25094                /**
25095                 * @constructor
25096                 * @extends {View}
25097                 * @param {string} name - view name
25098                 * @param {object} options The object for view customization.
25099                 * @param {string} options.renderStartDate - render start date. YYYY-MM-DD
25100                 * @param {string} options.renderEndDate - render end date. YYYY-MM-DD
25101                 * @param {number} [options.hourStart=0] You can change view's start hours.
25102                 * @param {number} [options.hourEnd=0] You can change view's end hours.
25103                 * @param {HTMLElement} panelElement panel element.
25104                 */
25105                function TimeGrid(name, options, panelElement) {
25106                    var container = domutil.appendHTMLElement(
25107                        'div',
25108                        panelElement,
25109                        config.classname('timegrid-container')
25110                    );
25111                    var stickyContainer = domutil.appendHTMLElement(
25112                        'div',
25113                        panelElement,
25114                        config.classname('timegrid-sticky-container')
25115                    );
25116
25117                    panelElement.style.position = 'relative'; // for stickyContainer
25118
25119                    name = name || 'time';
25120
25121                    View.call(this, container);
25122
25123                    if (!util.browser.safari) {
25124                        /**
25125                         * @type {AutoScroll}
25126                         */
25127                        this._autoScroll = new AutoScroll(container);
25128                    }
25129
25130                    this.stickyContainer = stickyContainer;
25131
25132                    /**
25133                     * Time view options.
25134                     * @type {object}
25135                     */
25136                    this.options = util.extend({
25137                        viewName: name,
25138                        renderStartDate: '',
25139                        renderEndDate: '',
25140                        hourStart: 0,
25141                        hourEnd: 24,
25142                        timezones: options.timezones,
25143                        isReadOnly: options.isReadOnly,
25144                        showTimezoneCollapseButton: false
25145                    }, options.week);
25146
25147                    if (this.options.timezones.length < 1) {
25148                        this.options.timezones = [{
25149                            timezoneOffset: Timezone.getOffset()
25150                        }];
25151                    }
25152
25153                    /**
25154                     * Interval id for hourmarker animation.
25155                     * @type {number}
25156                     */
25157                    this.intervalID = 0;
25158
25159                    /**
25160                     * timer id for hourmarker initial state
25161                     * @type {number}
25162                     */
25163                    this.timerID = 0;
25164
25165                    /**
25166                     * @type {boolean}
25167                     */
25168                    this._scrolled = false;
25169
25170                    /**
25171                     * cache parent's view model
25172                     * @type {object}
25173                     */
25174                    this._cacheParentViewModel = null;
25175
25176                    /**
25177                     * cache hoursLabels view model to render again TimeGrid
25178                     * @type {object}
25179                     */
25180                    this._cacheHoursLabels = null;
25181
25182                    this.attachEvent();
25183                }
25184
25185                util.inherit(TimeGrid, View);
25186
25187                /**********
25188                 * Prototype props
25189                 **********/
25190
25191                /**
25192                 * @type {string}
25193                 */
25194                TimeGrid.prototype.viewName = 'timegrid';
25195
25196                /**
25197                 * Destroy view.
25198                 * @override
25199                 */
25200                TimeGrid.prototype._beforeDestroy = function() {
25201                    clearInterval(this.intervalID);
25202                    clearTimeout(this.timerID);
25203
25204                    if (this._autoScroll) {
25205                        this._autoScroll.destroy();
25206                    }
25207
25208                    domevent.off(this.stickyContainer, 'click', this._onClickStickyContainer, this);
25209
25210                    this._autoScroll = this.hourmarkers = this.intervalID =
25211                        this.timerID = this._cacheParentViewModel = this.stickyContainer = null;
25212                };
25213
25214                /**
25215                 * @param {Date} [time] - date object to convert pixel in grids.
25216                 * use **Date.now()** when not supplied.
25217                 * @returns {number} The pixel value represent current time in grids.
25218                 */
25219                TimeGrid.prototype._getTopPercentByTime = function(time) {
25220                    var opt = this.options,
25221                        raw = datetime.raw(time || new TZDate()),
25222                        hourLength = util.range(opt.hourStart, opt.hourEnd).length,
25223                        maxMilliseconds = hourLength * datetime.MILLISECONDS_PER_HOUR,
25224                        hmsMilliseconds = datetime.millisecondsFrom('hour', raw.h) +
25225                            datetime.millisecondsFrom('minutes', raw.m) +
25226                            datetime.millisecondsFrom('seconds', raw.s) +
25227                            raw.ms,
25228                        topPercent;
25229
25230                    topPercent = common.ratio(maxMilliseconds, 100, hmsMilliseconds);
25231                    topPercent -= common.ratio(maxMilliseconds, 100, datetime.millisecondsFrom('hour', opt.hourStart));
25232
25233                    return common.limit(topPercent, [0], [100]);
25234                };
25235
25236                /**
25237                 * Get Hourmarker viewmodel.
25238                 * @param {TZDate} now - now
25239                 * @param {object} grids grid information(width, left, day)
25240                 * @param {Array.<TZDate>} range render range
25241                 * @returns {object} ViewModel of hourmarker.
25242                 */
25243                TimeGrid.prototype._getHourmarkerViewModel = function(now, grids, range) {
25244                    var todaymarkerLeft = -1;
25245                    var todaymarkerWidth = -1;
25246                    var hourmarkerTimzones = [];
25247                    var opt = this.options;
25248                    var primaryOffset = Timezone.getOffset();
25249                    var timezones = opt.timezones;
25250                    var viewModel;
25251
25252                    util.forEach(range, function(date, index) {
25253                        if (datetime.isSameDate(now, date)) {
25254                            todaymarkerLeft = grids[index] ? grids[index].left : 0;
25255                            todaymarkerWidth = grids[index] ? grids[index].width : 0;
25256                        }
25257                    });
25258
25259                    util.forEach(timezones, function(timezone) {
25260                        var timezoneDifference = timezone.timezoneOffset + primaryOffset;
25261                        var hourmarker = new TZDate(now);
25262                        var dateDifference;
25263
25264                        hourmarker.setMinutes(hourmarker.getMinutes() + timezoneDifference);
25265                        dateDifference = hourmarker.getDate() - now.getDate();
25266
25267                        hourmarkerTimzones.push({
25268                            hourmarker: hourmarker,
25269                            dateDifferenceSign: (dateDifference < 0) ? '-' : '+',
25270                            dateDifference: Math.abs(dateDifference)
25271                        });
25272                    });
25273
25274                    viewModel = {
25275                        currentHours: now.getHours(),
25276                        hourmarkerTop: this._getTopPercentByTime(now),
25277                        hourmarkerTimzones: hourmarkerTimzones,
25278                        todaymarkerLeft: todaymarkerLeft,
25279                        todaymarkerWidth: todaymarkerWidth,
25280                        todaymarkerRight: todaymarkerLeft + todaymarkerWidth
25281                    };
25282
25283                    return viewModel;
25284                };
25285
25286                /**
25287                 * Get timezone view model
25288                 * @param {number} currentHours - current hour
25289                 * @param {boolean} timezonesCollapsed - multiple timezones are collapsed.
25290                 * @param {object} styles - styles
25291                 * @returns {object} ViewModel
25292                 */
25293                TimeGrid.prototype._getTimezoneViewModel = function(currentHours, timezonesCollapsed, styles) {
25294                    var opt = this.options;
25295                    var primaryOffset = Timezone.getOffset();
25296                    var timezones = opt.timezones;
25297                    var timezonesLength = timezones.length;
25298                    var timezoneViewModel = [];
25299                    var collapsed = timezonesCollapsed;
25300                    var width = collapsed ? 100 : 100 / timezonesLength;
25301                    var now = new TZDate().toLocalTime();
25302                    var backgroundColor = styles.displayTimezoneLabelBackgroundColor;
25303
25304                    util.forEach(timezones, function(timezone, index) {
25305                        var hourmarker = new TZDate(now);
25306                        var timezoneDifference;
25307                        var timeSlots;
25308                        var dateDifference;
25309
25310                        timezoneDifference = timezone.timezoneOffset + primaryOffset;
25311                        timeSlots = getHoursLabels(opt, currentHours >= 0, timezoneDifference, styles);
25312
25313                        hourmarker.setMinutes(hourmarker.getMinutes() + timezoneDifference);
25314                        dateDifference = hourmarker.getDate() - now.getDate();
25315
25316                        if (index > 0) {
25317                            backgroundColor = styles.additionalTimezoneBackgroundColor;
25318                        }
25319
25320                        timezoneViewModel.push({
25321                            timeSlots: timeSlots,
25322                            displayLabel: timezone.displayLabel,
25323                            timezoneOffset: timezone.timezoneOffset,
25324                            tooltip: timezone.tooltip || '',
25325                            width: width,
25326                            left: collapsed ? 0 : (timezones.length - index - 1) * width,
25327                            isPrimary: index === 0,
25328                            backgroundColor: backgroundColor || '',
25329                            hidden: index !== 0 && collapsed,
25330                            hourmarker: hourmarker,
25331                            dateDifferenceSign: (dateDifference < 0) ? '-' : '+',
25332                            dateDifference: Math.abs(dateDifference)
25333                        });
25334                    });
25335
25336                    return timezoneViewModel;
25337                };
25338
25339                /**
25340                 * Get base viewModel.
25341                 * @param {object} viewModel - view model
25342                 * @returns {object} ViewModel
25343                 */
25344                TimeGrid.prototype._getBaseViewModel = function(viewModel) {
25345                    var grids = viewModel.grids;
25346                    var range = viewModel.range;
25347                    var opt = this.options;
25348                    var baseViewModel = this._getHourmarkerViewModel(new TZDate().toLocalTime(), grids, range);
25349                    var timezonesCollapsed = util.pick(viewModel, 'state', 'timezonesCollapsed');
25350                    var styles = this._getStyles(viewModel.theme, timezonesCollapsed);
25351
25352                    return util.extend(baseViewModel, {
25353                        timezones: this._getTimezoneViewModel(baseViewModel.todaymarkerLeft, timezonesCollapsed, styles),
25354                        hoursLabels: getHoursLabels(opt, baseViewModel.todaymarkerLeft >= 0, 0, styles),
25355                        styles: styles,
25356                        showTimezoneCollapseButton: util.pick(opt, 'showTimezoneCollapseButton'),
25357                        timezonesCollapsed: timezonesCollapsed
25358                    });
25359                };
25360
25361                /**
25362                 * Reconcilation child views and render.
25363                 * @param {object} viewModels Viewmodel
25364                 * @param {object} grids grid information(width, left, day)
25365                 * @param {HTMLElement} container Container element for each time view.
25366                 * @param {Theme} theme - theme instance
25367                 */
25368                TimeGrid.prototype._renderChildren = function(viewModels, grids, container, theme) {
25369                    var self = this,
25370                        options = this.options,
25371                        childOption,
25372                        child,
25373                        isToday,
25374                        containerHeight,
25375                        today = datetime.format(new TZDate(), 'YYYYMMDD'),
25376                        i = 0;
25377
25378                    // clear contents
25379                    container.innerHTML = '';
25380                    this.children.clear();
25381
25382                    containerHeight = domutil.getSize(container.parentElement)[1];
25383
25384                    // reconcilation of child views
25385                    util.forEach(viewModels, function(schedules, ymd) {
25386                        isToday = ymd === today;
25387
25388                        childOption = {
25389                            index: i,
25390                            left: grids[i] ? grids[i].left : 0,
25391                            width: grids[i] ? grids[i].width : 0,
25392                            ymd: ymd,
25393                            isToday: isToday,
25394                            isPending: options.isPending,
25395                            isFocused: options.isFocused,
25396                            isReadOnly: options.isReadOnly,
25397                            hourStart: options.hourStart,
25398                            hourEnd: options.hourEnd
25399                        };
25400
25401                        child = new Time(
25402                            childOption,
25403                            domutil.appendHTMLElement('div', container, config.classname('time-date')),
25404                            theme
25405                        );
25406                        child.render(ymd, schedules, containerHeight);
25407
25408                        self.addChild(child);
25409
25410                        i += 1;
25411                    });
25412                };
25413
25414                /**
25415                 * @override
25416                 * @param {object} viewModel ViewModel list from Week view.
25417                 */
25418                TimeGrid.prototype.render = function(viewModel) {
25419                    var opt = this.options,
25420                        timeViewModel = viewModel.schedulesInDateRange[opt.viewName],
25421                        container = this.container,
25422                        grids = viewModel.grids,
25423                        baseViewModel = this._getBaseViewModel(viewModel),
25424                        scheduleLen = util.keys(timeViewModel).length;
25425
25426                    this._cacheParentViewModel = viewModel;
25427                    this._cacheHoursLabels = baseViewModel.hoursLabels;
25428
25429                    if (!scheduleLen) {
25430                        return;
25431                    }
25432
25433                    baseViewModel.showHourMarker = baseViewModel.todaymarkerLeft >= 0;
25434
25435                    container.innerHTML = mainTmpl(baseViewModel);
25436
25437                    /**********
25438                     * Render sticky container for timezone display label
25439                     **********/
25440                    this.renderStickyContainer(baseViewModel);
25441
25442                    /**********
25443                     * Render children
25444                     **********/
25445                    this._renderChildren(
25446                        timeViewModel,
25447                        grids,
25448                        domutil.find(config.classname('.timegrid-schedules-container'), container),
25449                        viewModel.theme
25450                    );
25451
25452                    this._hourLabels = domutil.find('ul', container);
25453
25454                    /**********
25455                     * Render hourmarker
25456                     **********/
25457                    this.hourmarkers = domutil.find(config.classname('.timegrid-hourmarker'), container, true);
25458
25459                    if (!this._scrolled) {
25460                        this._scrolled = true;
25461                        this.scrollToNow();
25462                    }
25463                };
25464
25465                TimeGrid.prototype.renderStickyContainer = function(baseViewModel) {
25466                    var stickyContainer = this.stickyContainer;
25467
25468                    stickyContainer.innerHTML = timezoneStickyTmpl(baseViewModel);
25469
25470                    stickyContainer.style.display = baseViewModel.timezones.length > 1 ? 'block' : 'none';
25471                    stickyContainer.style.width = baseViewModel.styles.leftWidth;
25472                    stickyContainer.style.height = baseViewModel.styles.displayTimezoneLabelHeight;
25473                    stickyContainer.style.borderBottom = baseViewModel.styles.leftBorderRight;
25474                };
25475
25476                /**
25477                 * Refresh hourmarker element.
25478                 */
25479                TimeGrid.prototype.refreshHourmarker = function() {
25480                    var hourmarkers = this.hourmarkers;
25481                    var viewModel = this._cacheParentViewModel;
25482                    var hoursLabels = this._cacheHoursLabels;
25483                    var baseViewModel;
25484
25485                    if (!hourmarkers || !viewModel) {
25486                        return;
25487                    }
25488
25489                    baseViewModel = this._getBaseViewModel(viewModel);
25490
25491                    reqAnimFrame.requestAnimFrame(function() {
25492                        var needsRender = false;
25493
25494                        util.forEach(hoursLabels, function(hoursLabel, index) {
25495                            if (hoursLabel.hidden !== baseViewModel.hoursLabels[index].hidden) {
25496                                needsRender = true;
25497
25498                                return false;
25499                            }
25500
25501                            return true;
25502                        });
25503
25504                        if (needsRender) {
25505                            this.render(viewModel);
25506                        } else {
25507                            util.forEach(hourmarkers, function(hourmarker) {
25508                                var todaymarker = domutil.find(config.classname('.timegrid-todaymarker'), hourmarker);
25509                                var hourmarkerContainer = domutil.find(config.classname('.timegrid-hourmarker-time'), hourmarker);
25510                                var timezone = domutil.closest(hourmarker, config.classname('.timegrid-timezone'));
25511                                var timezoneIndex = timezone ? domutil.getData(timezone, 'timezoneIndex') : 0;
25512
25513                                hourmarker.style.top = baseViewModel.hourmarkerTop + '%';
25514
25515                                if (todaymarker) {
25516                                    todaymarker.style.display = (baseViewModel.todaymarkerLeft >= 0) ? 'block' : 'none';
25517                                }
25518                                if (hourmarkerContainer) {
25519                                    hourmarkerContainer.innerHTML = timegridCurrentTimeTmpl(
25520                                        baseViewModel.hourmarkerTimzone
25520s[timezoneIndex]
25521                                    );
25522                                }
25523                            });
25524                        }
25525                    }, this);
25526                };
25527
25528                /**
25529                 * Attach events
25530                 */
25531                TimeGrid.prototype.attachEvent = function() {
25532                    clearInterval(this.intervalID);
25533                    clearTimeout(this.timerID);
25534                    this.intervalID = this.timerID = null;
25535
25536                    this.timerID = setTimeout(util.bind(this.onTick, this), (SIXTY_SECONDS - new TZDate().getSeconds()) * 1000);
25537
25538                    domevent.on(this.stickyContainer, 'click', this._onClickStickyContainer, this);
25539                };
25540
25541                /**
25542                 * Scroll time grid to current hourmarker.
25543                 */
25544                TimeGrid.prototype.scrollToNow = function() {
25545                    var container = this.container;
25546                    var offsetTop,
25547                        viewB
25547ound,
25548                        scrollTop,
25549                        scrollAmount,
25550                        scrollBy,
25551                        scrollFn;
25552
25553                    if (!this.hourmarkers || !this.hourmarkers.length) {
25554                        return;
25555                    }
25556
25557                    offsetTop = this.hourmarkers[0].offsetTop;
25558                    viewBound = this.getViewBound();
25559                    scrollTop = offsetTop;
25560                    scrollAmount = viewBound.height / 4;
25561                    scrollBy = 10;
25562
25563                    scrollFn = function() {
25564                        if (scrollTop > offsetTop - scrollAmount) {
25565                            scrollTop -= scrollBy;
25566                            container.scrollTop = scrollTop;
25567
25568                            reqAnimFrame.requestAnimFrame(scrollFn);
25569                        } else {
25570                            container.scrollTop = offsetTop - scrollAmount;
25571                        }
25572                    };
25573
25574                    reqAnimFrame.requestAnimFrame(scrollFn);
25575                };
25576
25577                /**********
25578                 * Schedule handlers
25579                 **********/
25580
25581                /**
25582                 * Interval tick handler
25583                 */
25584                TimeGrid.prototype.onTick = function() {
25585                    if (this.timerID) {
25586                        clearTimeout(this.timerID);
25587                        this.timerID = null;
25588                    }
25589
25590                    if (!this.intervalID) {
25591                        this.intervalID = setInterval(util.bind(this.onTick, this), HOURMARKER_REFRESH_INTERVAL);
25592                    }
25593                    this.refreshHourmarker();
25594                };
25595
25596                /**
25597                 * Get the styles from theme
25598                 * @param {Theme} theme - theme instance
25599                 * @param {boolean} timezonesCollapsed - multiple timezones are collapsed.
25600                 * @returns {object} styles - styles object
25601                 */
25602                TimeGrid.prototype._getStyles = function(theme, timezonesCollapsed) {
25603                    var styles = {};
25604                    var timezonesLength = this.options.timezones.length;
25605                    var collapsed = timezonesCollapsed;
25606                    var numberAndUnit;
25607
25608                    if (theme) {
25609                        styles.borderBottom = theme.week.timegridHorizontalLine.borderBottom || theme.common.border;
25610                        styles.halfHourBorderBottom = theme.week.timegridHalfHour.borderBottom || theme.common.border;
25611
25612                        styles.todayBackgroundColor = theme.week.today.backgroundColor;
25613                        styles.weekendBackgroundColor = theme.week.weekend.backgroundColor;
25614                        styles.backgroundColor = theme.week.daygrid.backgroundColor;
25615                        styles.leftWidth = theme.week.timegridLeft.width;
25616                        styles.leftBackgroundColor = theme.week.timegridLeft.backgroundColor;
25617                        styles.leftBorderRight = theme.week.timegridLeft.borderRight || theme.common.border;
25618                        styles.leftFontSize = theme.week.timegridLeft.fontSize;
25619                        styles.timezoneWidth = theme.week.timegridLeft.width;
25620                        styles.additionalTimezoneBackgroundColor = theme.week.timegridLeftAdditionalTimezone.backgroundColor
25621                            || styles.leftBackgroundColor;
25622
25623                        styles.displayTimezoneLabelHeight = theme.week.timegridLeftTimezoneLabel.height;
25624                        styles.displayTimezoneLabelBackgroundColor = theme.week.timegridLeft.backgroundColor === 'inherit' ? 'white' : theme.week.timegridLeft.backgroundColor;
25625
25626                        styles.oneHourHeight = theme.week.timegridOneHour.height;
25627                        styles.halfHourHeight = theme.week.timegridHalfHour.height;
25628                        styles.quaterHourHeight = (parseInt(styles.halfHourHeight, 10) / 2) + 'px';
25629
25630                        styles.currentTimeColor = theme.week.currentTime.color;
25631                        styles.currentTimeFontSize = theme.week.currentTime.fontSize;
25632                        styles.currentTimeFontWeight = theme.week.currentTime.fontWeight;
25633
25634                        styles.pastTimeColor = theme.week.pastTime.color;
25635                        styles.pastTimeFontWeight = theme.week.pastTime.fontWeight;
25636
25637                        styles.futureTimeColor = theme.week.futureTime.color;
25638                        styles.futureTimeFontWeight = theme.week.futureTime.fontWeight;
25639
25640                        styles.currentTimeLeftBorderTop = theme.week.currentTimeLinePast.border;
25641                        styles.currentTimeBulletBackgroundColor = theme.week.currentTimeLineBullet.backgroundColor;
25642                        styles.currentTimeTodayBorderTop = theme.week.currentTimeLineToday.border;
25643                        styles.currentTimeRightBorderTop = theme.week.currentTimeLineFuture.border;
25644
25645                        if (!collapsed && timezonesLength > 1) {
25646                            numberAndUnit = common.parseUnit(styles.leftWidth);
25647                            styles.leftWidth = (numberAndUnit[0] * timezonesLength) + numberAndUnit[1];
25648                        }
25649                    }
25650
25651                    return styles;
25652                };
25653
25654                /**
25655                 * @param {MouseEvent} event - mouse event object
25656                 */
25657                TimeGrid.prototype._onClickStickyContainer = function(event) {
25658                    var target = event.target || event.srcElement;
25659                    var closeBtn = domutil.closest(target, config.classname('.timegrid-timezone-close-btn'));
25660
25661                    if (!closeBtn) {
25662                        return;
25663                    }
25664
25665                    this.fire('clickTimezonesCollapsedBtn');
25666                };
25667
25668                module.exports = TimeGrid;
25669
25670
25671                /***/ }),
25672
25673            
25673/***/ "./src/js/view/week/week.js":
25674            /*!**********************************!*\
25675  !*** ./src/js/view/week/week.js ***!
25676  \**********************************/
25677            /*! no static exports found */
25678            /***/ (function(module, exports, __webpack_require__) {
25679
25680                "use strict";
25681                /**
25682                 * @fileoverview View of days UI.
25683                 * @author NHN FE Development Lab <[email protected]>
25684                 */
25685
25686
25687                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
25688                var config = __webpack_require__(/*! ../../config */ "./src/js/config.js");
25689                var domutil = __webpack_require__(/*! ../../common/domutil */ "./src/js/common/domutil.js");
25690                var datetime = __webpack_require__(/*! ../../common/datetime */ "./src/js/common/datetime.js");
25691                var TZDate = __webpack_require__(/*! ../../common/timezone */ "./src/js/common/timezone.js").Date;
25692                var View = __webpack_require__(/*! ../view */ "./src/js/view/view.js");
25693
25694                /**
25695                 * @constructor
25696                 * @param {Base.Week} controller The controller mixin part.
25697                 * @param {object} options View options
25698                 * @param {string} [options.renderStartDate] Start date of render.
25699                 *  if not supplied then use -3d from today. YYYY-MM-DD format.
25700                 * @param {string} [options.renderEndDate] End date of render.
25701                 *  if not supplied then use +3d from today. YYYY-MM-DD format.
25702                 * @param {string} [options.cssPrefix] - CSS classname prefix
25703                 * @param {HTMLElement} container The element to use container for this view.
25704                 * @param {object} panels - schedule panels like 'milestone', 'task', 'allday', 'time'
25705                 * @param {string} viewName - 'week', 'day'
25706                 * @extends {View}
25707                 */
25708                function Week(controller, options, container, panels, viewName) {
25709                    var range;
25710
25711                    container = domutil.appendHTMLElement('div', container);
25712
25713                    View.call(this, container);
25714
25715                    domutil.addClass(container, config.classname('week-container'));
25716
25717                    range = this._getRenderDateRange(new TZDate());
25718
25719                    /**
25720                     * @type {object} Options for view.
25721                     */
25722                    this.options = util.extend({
25723                        scheduleFilter: [function(schedule) {
25724                            return Boolean(schedule.isVisible);
25725                        }],
25726                        renderStartDate: datetime.format(range.start, 'YYYY-MM-DD'),
25727                        renderEndDate: datetime.format(range.end, 'YYYY-MM-DD'),
25728                        narrowWeekend: false,
25729                        startDayOfWeek: 0,
25730                        workweek: false,
25731                        showTimezoneCollapseButton: false,
25732                        timezonesCollapsed: false,
25733                        hourStart: 0,
25734                        hourEnd: 24
25735                    }, options);
25736
25737                    /**
25738                     * Week controller mixin.
25739                     * @type {Base.Week}
25740                     */
25741                    this.controller = controller;
25742
25743                    /**
25744                     * Schedule Panels
25745                     * @type {Array.<object>}
25746                     */
25747                    this.panels = panels;
25748
25749                    /**
25750                     * Week view states
25751                     * @type {object}
25752                     */
25753                    this.state = {
25754                        timezonesCollapsed: this.options.timezonesCollapsed
25755                    };
25756
25757                    if (viewName === 'day') {
25758                        _disableDayOptions(this.options);
25759                    }
25760                }
25761
25762                util.inherit(Week, View);
25763
25764                /**********
25765                 * Override props
25766                 **********/
25767
25768                /**
25769                 * Render each child view with schedules in ranges.
25770                 * @fires Week#afterRender
25771                 * @override
25772                 */
25773                Week.prototype.render = function() {
25774                    var self = this,
25775                        options = this.options,
25776                        scheduleFilter = options.scheduleFilter,
25777                        narrowWeekend = options.narrowWeekend,
25778                        startDayOfWeek = options.startDayOfWeek,
25779                        workweek = options.workweek,
25780                        theme = this.controller.theme || {},
25781                        state = this.state;
25782                    var renderStartDate, renderEndDate, schedulesInDateRange, viewModel, grids, range;
25783
25784                    renderStartDate = new TZDate(options.renderStartDate);
25785                    renderEndDate = new TZDate(options.renderEndDate);
25786
25787                    range = datetime.range(
25788                        datetime.start(renderStartDate),
25789                        datetime.end(renderEndDate),
25790                        datetime.MILLISECONDS_PER_DAY
25791                    );
25792
25793                    if (options.workweek && datetime.compare(renderStartDate, renderEndDate)) {
25794                        range = util.filter(range, function(date) {
25795                            return !datetime.isWeekend(date.getDay());
25796                        });
25797
25798                        renderStartDate = range[0];
25799                        renderEndDate = range[range.length - 1];
25800                    }
25801
25802                    schedulesInDateRange = this.controller.findByDateRange(
25803                        datetime.start(renderStartDate),
25804                        datetime.end(renderEndDate),
25805                        this.panels,
25806                        scheduleFilter,
25807                        this.options
25808                    );
25809
25810                    grids = datetime.getGridLeftAndWidth(
25811                        range.length,
25812                        narrowWeekend,
25813                        startDayOfWeek,
25814                        workweek
25815                    );
25816
25817                    viewModel = {
25818                        schedulesInDateRange: schedulesInDateRange,
25819                        renderStartDate: renderStartDate,
25820                        renderEndDate: renderEndDate,
25821                        grids: grids,
25822                        range: range,
25823                        theme: theme,
25824                        state: state
25825                    };
25826
25827                    this.children.each(function(childView) {
25828                        var matrices;
25829                        var viewName = util.pick(childView.options, 'viewName');
25830                        childView.render(viewModel);
25831
25832                        if (viewName) {
25833                            matrices = viewModel.schedulesInDateRange[viewName]; // DayGrid limits schedule count by visibleScheduleCount after rendering it.
25834
25835                            if (util.isArray(matrices)) {
25836                                self._invokeAfterRenderSchedule(matrices);
25837                            } else {
25838                                util.forEach(matrices, function(matricesOfDay) {
25839                                    self._invokeAfterRenderSchedule(matricesOfDay);
25840                                });
25841                            }
25842                        }
25843                    });
25844
25845                    /**
25846                     * @event Week#afterRender
25847                     */
25848                    this.fire('afterRender');
25849                };
25850
25851                /**
25852                 * Fire 'afterRenderSchedule' event
25853                 * @param {Array} matrices - schedule matrices from view model
25854                 * @fires Week#afterRenderSchedule
25855                 */
25856                Week.prototype._invokeAfterRenderSchedule = function(matrices) {
25857                    var self = this;
25858                    util.forEachArray(matrices, function(matrix) {
25859                        util.forEachArray(matrix, function(column) {
25860                            util.forEachArray(column, function(scheduleViewModel) {
25861                                if (scheduleViewModel) {
25862                                    /**
25863                                     * @event Week#afterRenderSchedule
25864                                     */
25865                                    self.fire('afterRenderSchedule', {schedule: scheduleViewModel.model});
25866                                }
25867                            });
25868                        });
25869                    });
25870                };
25871
25872                /**********
25873                 * Prototype props
25874                 **********/
25875
25876                Week.prototype.viewName = 'week';
25877
25878                /**
25879                 * Calculate default render date range from supplied date.
25880                 * @param {Date} baseDate base date.
25881                 * @returns {object} date range.
25882                 */
25883                Week.prototype._getRenderDateRange = function(baseDate) {
25884                    var base = datetime.start(baseDate),
25885                        start = new TZDate(Number(base)),
25886                        end = new TZDate(Number(base));
25887
25888                    start.setDate(start.getDate() - 3);
25889                    end.setDate(end.getDate() + 3);
25890
25891                    return {
25892                        start: start,
25893                        end: end
25894                    };
25895                };
25896
25897                /**
25898                 * disable options for day view
25899                 * @param {WeekOptions} options - week options to disable
25900                 */
25901                function _disableDayOptions(options) {
25902                    options.workweek = false;
25903                }
25904
25905                util.CustomEvents.mixin(Week);
25906
25907                module.exports = Week;
25908
25909
25910                /***/ }),
25911
25912            
25912/***/ "./src/js/view/weekday.js":
25913            /*!********************************!*\
25914  !*** ./src/js/view/weekday.js ***!
25915  \********************************/
25916            /*! no static exports found */
25917            /***/ (function(module, exports, __webpack_require__) {
25918
25919                "use strict";
25920                /**
25921                 * @fileoverview Weekday view
25922                 * @author NHN FE Development Lab <[email protected]>
25923                 */
25924
25925
25926                var util = __webpack_require__(/*! tui-code-snippet */ "tui-code-snippet");
25927                var config = __webpack_require__(/*! ../config */ "./src/js/config.js"),
25928                    domutil = __webpack_require__(/*! ../common/domutil */ "./src/js/common/domutil.js"),
25929                    datetime = __webpack_require__(/*! ../common/datetime */ "./src/js/common/datetime.js"),
25930                    TZDate = __webpack_require__(/*! ../common/timezone */ "./src/js/common/timezone.js").Date,
25931                    View = __webpack_require__(/*! ./view */ "./src/js/view/view.js");
25932
25933                /**
25934                 * @constructor
25935                 * @extends {View}
25936                 * @param {object} options - view options.
25937                 * @param {number} [options.containerButtonGutter=8] - free space at bottom to
25938                 *  make create easy.
25939                 * @param {number} [options.scheduleHeight=18] - height of each schedule block.
25940                 * @param {number} [options.scheduleGutter=2] - gutter height of each schedule block.
25941                 * @param {HTMLDIVElement} container - DOM element to use container for this
25942                 *  view.
25943                 */
25944                function Weekday(options, container) {
25945                    container = domutil.appendHTMLElement(
25946                        'div',
25947                        container,
25948                        config.classname('weekday')
25949                    );
25950
25951                    /**
25952                     * @type {object}
25953                     */
25954                    this.options = util.extend({
25955                        containerBottomGutter: 8,
25956                        scheduleHeight: 18,
25957                        scheduleGutter: 2,
25958                        narrowWeekend: false,
25959                        startDayOfWeek: 0,
25960                        workweek: false
25961                    }, options);
25962
25963                    /*
25964     * cache parent's view model
25965     * @type {object}
25966     */
25967                    this._cacheParentViewModel = null;
25968
25969                    View.call(this, container);
25970                }
25971
25972                util.inherit(Weekday, View);
25973
25974                /**
25975                 * Get render date range
25976                 * @returns {Date[]} rendered date range
25977                 */
25978                Weekday.prototype.getRenderDateRange = function() {
25979                    return this._cacheParentViewModel.range;
25980                };
25981
25982                /**
25983                 * Get render date grids information
25984                 * @returns {Date[]} rendered date grids information
25985                 */
25986                Weekday.prototype.getRenderDateGrids = function() {
25987                    return this._cacheParentViewModel.grids;
25988                };
25989
25990                /**
25991                 * Get default view model.
25992                 * @param {object} viewModel parent's view model
25993                 * @returns {object} viewModel to rendering.
25994                 */
25995                Weekday.prototype.getBaseViewModel = function(viewModel) {
25996                    var opt = this.options;
25997                    var range = viewModel.range;
25998                    var gridWidth = (100 / range.length);
25999                    var grids = viewModel.grids;
26000                    var exceedDate = viewModel.exceedDate || {};
26001                    var theme = viewModel.theme;
26002                    var now = new TZDate().toLocalTime();
26003
26004                    this._cacheParentViewModel = viewModel;
26005
26006                    return {
26007                        width: gridWidth,
26008                        scheduleHeight: opt.scheduleHeight,
26009                        scheduleBlockHeight: (opt.scheduleHeight + opt.scheduleGutter),
26010                        scheduleBlockGutter: opt.scheduleGutter,
26011                        dates: util.map(range, function(date, index) {
26012                            var day = date.getDay();
26013                            var ymd = datetime.format(new TZDate(date), 'YYYYMMDD');
26014                            var isToday = datetime.isSameDate(now, date);
26015
26016                            return {
26017                                date: datetime.format(date, 'YYYY-MM-DD'),
26018                                month: date.getMonth() + 1,
26019                                day: day,
26020                                isToday: isToday,
26021                                ymd: ymd,
26022                                hiddenSchedules: exceedDate[ymd] || 0,
26023                                width: grids[index] ? grids[index].width : 0,
26024                                left: grids[index] ? grids[index].left : 0,
26025                                color: this._getDayNameColor(theme, day, isToday),
26026                                backgroundColor: this._getDayBackgroun
26026dColor(theme, day)
26027                            };
26028                        }, this)
26029                    };
26030                };
26031
26032                /* eslint max-nested-callbacks: 0 */
26033                /**
26034                 * Make exceed date information
26035                 * @param {number} maxCount - exceed schedule count
26036                 * @param {Array} eventsInDateRange  - matrix of ScheduleViewModel
26037                 * @param {Array.<TZDate>} range - date range of one week
26038                 * @returns {object} exceedDate
26039                 */
26040                Weekday.prototype.getExceedDate = function(maxCount, eventsInDateRange, range) {
26041                    var exceedDate = this._initExceedDate(range);
26042
26043                    util.forEach(eventsInDateRange, function(matrix) {
26044                        util.forEach(matrix, function(column) {
26045                            util.forEach(column, function(viewModel) {
26046                                var period;
26047                                if (!viewModel || viewModel.top < maxCount) {
26048                                    return;
26049                                }
26050
26051                                // check that this schedule block is not visible after rendered.
26052                                viewModel.hidden = true;
26053
26054                                period = datetime.range(
26055                                    viewModel.getStarts(),
26056                                    viewModel.getEnds(),
26057                                    datetime.MILLISECONDS_PER_DAY
26058                                );
26059
26060                                util.forEach(period, function(date) {
26061                                    var ymd = datetime.format(date, 'YYYYMMDD');
26062                                    exceedDate[ymd] += 1;
26063                                });
26064                            });
26065                        });
26066                    });
26067
26068                    return exceedDate;
26069                };
26070
26071                /**
26072                 * Initiate exceed date information
26073                 * @param {Array.<TZDate>} range - date range of one week
26074                 * @returns {Object} - initiated exceed date
26075                 */
26076                Weekday.prototype._initExceedDate = function(range) {
26077                    var exceedDate = {};
26078
26079                    util.forEach(range, function(date) {
26080                        var ymd = datetime.format(date, 'YYYYMMDD');
26081                        exceedDate[ymd] = 0;
26082                    });
26083
26084                    return exceedDate;
26085                };
26086
26087                /**
26088                 * Get a day name color
26089                 * @param {Theme} theme - theme instance
26090                 * @param {number} day - day number
26091                 * @param {boolean} isToday - today flag
26092                 * @param {boolean} isOtherMonth - not this month flag
26093                 * @returns {string} style - color style
26094                 */
26095                Weekday.prototype._getDayNameColor = function(theme, day, isToday, isOtherMonth) {
26096                    var color = '';
26097
26098                    if (theme) {
26099                        if (day === 0) {
26100                            color = isOtherMonth ? theme.month.holidayExceptThisMonth.color : theme.common.holiday.color;
26101                        } else if (day === 6) {
26102                            color = isOtherMonth ? theme.month.dayExceptThisMonth.color : theme.common.saturday.color;
26103                        } else if (isToday) {
26104                            color = theme.common.today.color;
26105                        } else {
26106                            color = isOtherMonth ? theme.month.dayExceptThisMonth.color : theme.common.dayname.color;
26107                        }
26108                    }
26109
26110                    return color;
26111                };
26112
26113                /**
26114                 * Get a day background color
26115                 * @param {Theme} theme - theme instance
26116                 * @param {number} day - day number
26117                 * @returns {string} style - color style
26118                 */
26119                Weekday.prototype._getDayBackgroundColor = function(theme, day) {
26120                    var color = '';
26121
26122                    if (theme) {
26123                        if (day === 0 || day === 6) {
26124                            color = theme.month.weekend.backgroundColor;
26125                        } else {
26126                            color = 'inherit';
26127                        }
26128                    }
26129
26130                    return color;
26131                };
26132
26133                module.exports = Weekday;
26134
26135
26136                /***/ })
26136,
26137
26138            /***/ "tui-code-snippet":
26139            /*!******************************************************************************************************************************!*\
26140  !*** external {"commonjs":"tui-code-snippet","commonjs2":"tui-code-snippet","amd":"tui-code-snippet","root":["tui","util"]} ***!
26141  \******************************************************************************************************************************/
26142            /*! no static exports found */
26143            /***/ (function(module, exports) {
26144
26145                module.exports = __WEBPACK_EXTERNAL_MODULE_tui_code_snippet__;
26146
26147                /***/ }),
26148
26149            /***/ "tui-date-picker":
26150            /*!*********************************************************************************************************************************!*\
26151  !*** external {"commonjs":"tui-date-picker","commonjs2":"tui-date-picker","amd":"tui-date-picker","root":["tui","DatePicker"]} ***!
26152  \*********************************************************************************************************************************/
26153            /*! no static exports found */
26154            /***/ (function(module, exports) {
26155
26156                module.exports = __WEBPACK_EXTERNAL_MODULE_tui_date_picker__;
26157
26158                /***/ })
26159
26160            /******/ });
26161});
26162//# sourceMappingURL=tui-calendar.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.