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 '&': '&', 1591 '<': '<', 1592 '>': '>', 1593 '"': '"', 1594 "'": ''', 1595 '`': '`', 1596 '=': '=' 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> <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 ['milestone', 'task']. 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 ['allday', 'time']. 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 ' #' + 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 + ";\"> </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> <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;\"> </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;\"> </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 + ";\"> </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\"> </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.