![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/www/html/esp-mini-home/dist/ |
Upload File : |
/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 77); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return _; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return $; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return $$; }); /* harmony import */ var _css_default_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82); /* harmony import */ var _css_default_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_default_css__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1); var ACore = new absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__[/* default */ "b"]({ creator: Object.assign({}, absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__[/* default */ "b"].ShareInstance.creator) }); var _ = ACore._; var $ = ACore.$; var $$ = ACore.$$; /* harmony default export */ __webpack_exports__["d"] = (ACore); /***/ }), /* 1 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, "f", function() { return /* binding */ isDomNode; }); __webpack_require__.d(__webpack_exports__, "g", function() { return /* binding */ traceOutBoundingClientRect; }); __webpack_require__.d(__webpack_exports__, "d", function() { return /* binding */ getScreenSize; }); __webpack_require__.d(__webpack_exports__, "h", function() { return /* binding */ waitImageLoaded; }); __webpack_require__.d(__webpack_exports__, "c", function() { return /* binding */ depthClone; }); __webpack_require__.d(__webpack_exports__, "a", function() { return /* binding */ copyStyleRule; }); __webpack_require__.d(__webpack_exports__, "e", function() { return /* binding */ getTextNodeBound; }); // UNUSED EXPORTS: FeatureClass, activeFullScreen, inactiveFullScreen, deactiveFullScreen, isFullScreen, fontFaceIsLoaded, waitIFrameLoaded, imageToCanvas, getScrollSize, depthCloneWithStyle, getSystemFontSize, getConstructDescriptor // CONCATENATED MODULE: ./node_modules/absol/src/HTML5/JSPath.js function JSPath(props) { this.path = props.path; } /** * * @param {Element} element * @returns {Boolean} */ JSPath.prototype.match = function (element, query) { if (query.id) { if (!element.getAttribute || element.getAttribute('id') != query.id) return false; } if (query.tagName) { var matchTag = false; if (element._azar_extendTags && element._azar_extendTags[query.tagName]) matchTag = true; matchTag = matchTag || ((element.tagName || '').toUpperCase() == query.tagName.toUpperCase()); if (!matchTag) return false; } if (query.classList) for (var i = 0; i < query.classList.length; ++i) { if (!element.classList || !element.classList.contains(query.classList[i])) return false; } if (query.attributes) { for (var key in query.attributes) { var value; if (element.attr) { value = element.attr(key); if (value != query.attributes[key]) return false; } else if (element.getAttribute) { value = element.getAttribute(key); if (value != query.attributes[key]) return false; } } } return true; }; /** * Warning : still fail in some testcase */ JSPath.prototype.findFirst = function (root, onFound) { var queue = [{ e: root, i: 0 }]; var current; while (queue.length > 0) { current = queue.shift(); var isMathed = false; var currentElt = current.e; var currentI = current.i; if (this.match(currentElt, this.path[currentI])) { if (this.path[currentI].childCombinate) { var trackI = currentI; var trackElement = currentElt; var isTrackMatch = true; while (isTrackMatch && trackI > 0 && this.path[trackI].childCombinate) { if (!trackElement.parentNode || !this.match(trackElement.parentNode, this.path[trackI - 1])) { isTrackMatch = false; } else { trackElement = trackElement.parentNode; trackI--; } } if (isTrackMatch) isMathed = true; } else { isMathed = true; } } if (isMathed && currentI + 1 == this.path.length) { if (!onFound || (onFound && onFound(currentElt))) return currentElt; } if (currentElt.childNodes) { var l = currentElt.childNodes.length; for (var i = 0; i < l; ++i) { if (currentElt.childNodes[i].tagName) queue.push({ e: currentElt.childNodes[i], i: currentI + (isMathed && currentI + 1 < this.path.length ? 1 : 0) }); } } } return undefined; }; JSPath.prototype.findAll = function (root, onFound) { var res = []; var queue = [{ e: root, i: 0 }]; var current; while (queue.length > 0) { current = queue.shift(); var isMathed = false; var currentElt = current.e; var currentI = current.i; if (this.match(currentElt, this.path[currentI])) { if (this.path[currentI].childCombinate) { var trackI = currentI; var trackElement = currentElt; var isTrackMatch = true; while (isTrackMatch && trackI > 0 && this.path[trackI].childCombinate) { if (!trackElement.parentNode || !this.match(trackElement.parentNode, this.path[trackI - 1])) { isTrackMatch = false; } else { trackElement = trackElement.parentNode; trackI--; } } if (isTrackMatch) isMathed = true; } else { isMathed = true; } } if (isMathed && currentI + 1 == this.path.length) { if (!onFound || (onFound && onFound(currentElt))) res.push(currentElt); } if (currentElt.childNodes) { var l = currentElt.childNodes.length; for (var i = 0; i < l; ++i) { if (currentElt.childNodes[i].tagName) queue.push({ e: currentElt.childNodes[i], i: currentI + (isMathed && currentI + 1 < this.path.length ? 1 : 0) }); } } } return res; }; var identRegex = /[a-zA-Z0-9\-_]+/; var stringRegex = /"(([^"\\]*|(\\.))*)"/; var classRegex = new RegExp('\\.' + identRegex.source); var idRegex = new RegExp('#' + identRegex.source); var booleanRegex = /true|false/; var valueRegex = new RegExp(stringRegex.source + '|' + booleanRegex.source); var attributeRegex = new RegExp('\\[\\s*(' + identRegex.source + ')\\s*(=\\s*(' + valueRegex.source + '))\\]'); var queryRegex = new RegExp([ '(', identRegex.source, '|', attributeRegex.source, '|', classRegex.source, '|', idRegex.source, ')+' ].join('')); JSPath.__tagRegex = new RegExp(queryRegex.source + '|\\>', 'g'); JSPath.__tagNameRegex = new RegExp('^' + identRegex.source, 'i'); JSPath.__classRegex = new RegExp(classRegex.source, 'g'); JSPath.__idRegex = new RegExp(idRegex.source, 'i'); JSPath.__attrRegex = new RegExp(attributeRegex.source, 'g'); JSPath.parseQuery = function (s) { var tag = {}; s = s.replace(JSPath.__attrRegex, function (full, name, assign, jsonTextValue) { tag.attributes = tag.attributes || {}; if (assign) { tag.attributes[name] = JSON.parse(jsonTextValue); } else tag.attributes[name] = true; return ''; }); var classList = s.match(this.__classRegex); var idList = s.match(this.__idRegex); var tagList = s.match(this.__tagNameRegex); if (idList && idList.length > 0) { tag.id = idList[0].substring(1); } if (tagList && tagList.length > 0) { tag.tagName = tagList[0].trim(); } if (classList && classList.length > 0) { tag.classList = classList.map(function (s) { return s.substring(1) }); } return tag; }; /** * @param {String} text * @returns {JSPath} */ JSPath.compileJSPath = function (text) { var tagTexts = text.match(this.__tagRegex) || ['']; var path = []; var childCombinate = false; for (var i = 0; i < tagTexts.length; ++i) { var s = tagTexts[i]; if (s == '>') { childCombinate = true; } else { var tag = this.parseQuery(s); tag.childCombinate = childCombinate; path.push(tag); childCombinate = false; } } return new JSPath({ path: path }); }; /* harmony default export */ var HTML5_JSPath = (JSPath); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js var OOP = __webpack_require__(2); // CONCATENATED MODULE: ./node_modules/absol/src/String/getFunctionName.js /** * * @param {Function} func */ function getFunctionName(func) { var ret = func.toString(); ret = ret.substr('function '.length); ret = ret.substr(0, ret.indexOf('(')); return ret; } // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/ElementNS.js var ElementNS = __webpack_require__(22); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AElement.js var AElement = __webpack_require__(6); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/ResizeSystem.js var ResizeSystem = __webpack_require__(7); // EXTERNAL MODULE: ./node_modules/absol/src/JSX/attribute.js var attribute = __webpack_require__(10); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AttachHook.js var AttachHook = __webpack_require__(18); // CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Dom.js /*** * @typedef {{"accept-charset":string, "http-equiv": string, accept : string, accesskey : string, action : string, align : string, allow : string, alt : string, async : string, autocapitalize : string, autocomplete : string, autofocus : string, autoplay : string, background : string, bgcolor : string, border : string, buffered : string, capture : string, challenge : string, charset : string, checked : string, cite : string, class : string, code : string, codebase : string, color : string, cols : string, colspan : string, content : string, contenteditable : string, contextmenu : string, controls : string, coords : string, crossorigin : string, csp : string, data : string, "data-*" : string, datetime : string, decoding : string, default : string, defer : string, dir : string, dirname : string, disabled : string, download : string, draggable : string, dropzone : string, enctype : string, enterkeyhint : string, for : string, form : string, formaction : string, formenctype : string, formmethod : string, formnovalidate : string, formtarget : string, headers : string, height : string, hidden : string, high : string, href : string, hreflang : string, icon : string, id : string, importance : string, integrity : string, intrinsicsize : string, inputmode : string, ismap : string, itemprop : string, keytype : string, kind : string, label : string, lang : string, language : string, loading : string, list : string, loop : string, low : string, manifest : string, max : string, maxlength : string, minlength : string, media : string, method : string, min : string, multiple : string, muted : string, name : string, novalidate : string, open : string, optimum : string, pattern : string, ping : string, placeholder : string, poster : string, preload : string, radiogroup : string, readonly : string, referrerpolicy : string, rel : string, required : string, reversed : string, rows : string, rowspan : string, sandbox : string, scope : string, scoped : string, selected : string, shape : string, size : string, sizes : string, slot : string, span : string, spellcheck : string, src : string, srcdoc : string, srclang : string, srcset : string, start : string, step : string, style : string, summary : string, tabindex : string, target : string, title : string, translate : string, type : string, usemap : string, value : string, width : string, wrap : string, }} AElementAttributeDescriptor */ /** * @typedef {{"arabic-form":string,"baseline-shift": string, "accent-height": string, "alignment-baseline": string, "cap-height": string, "clip-path": string, "clip-rule": string, "color-dinterpolation": string, "color-interpolation-filters": string, "color-profile": string, "color-rendering": string, "dominant-baseline": string, "enable-background": string, "fill-opacity": string, "fill-rule": string, "flood-color": string, "flood-opacity": string, "font-family": string, "font-size": string, "font-size-adjust": string, "font-stretch": string, "font-style": string, "font-variant": string, "font-weight": string, "glyph-name": string, "glyph-orientation-horizontal": string, "glyph-orientation-vertical": string, "horiz-adv-x": string, "horiz-origin-x": string, "image-rendering": string, "letter-spacing": string, "lighting-color": string, "marker-end": string, "marker-mid": string, "marker-start": string, "overline-position": string, "overline-thickness": string, "panose-1": string, "paint-order": string, "pointer-events": string, "rendering-intent": string, "shape-rendering": string, "stop-color": string, "stop-opacity": string, "strikethrough-position": string, "strikethrough-thickness": string, "stroke-dasharray": string, "stroke-dashoffset": string, "stroke-linecap": string, "stroke-linejoin": string, "stroke-miterlimit": string, "stroke-opacity": string, "stroke-width": string, "text-anchor": string, "text-decoration": string, "text-rendering": string, "transform-origin": string, "underline-position": string, "underline-thickness": string, "unicode-bidi": string, "unicode-range": string, "units-per-em": string, "v-alphabetic": string, "v-hanging": string, "v-ideographic": string, "v-mathematical": string, "vector-effect": string, "vert-adv-y": string, "vert-origin-x": string, "vert-origin-y": string, "word-spacing": string, "writing-mode": string, "x-height": string, "xlink:actuate": string, "xlink:arcrole": string, "xlink:href": string, "xlink:role": string, "xlink:show": string, "xlink:title": string, "xlink:type": string, "xml:base": string, "xml:lang": string, "xml:space": string, accumulate:string, additive:string, allowReorder:string, alphabetic:string, amplitude:string, ascent:string, attributeName:string, attributeType:string, autoReverse:string, azimuth:string, baseFrequency:string, baseProfile:string, bbox:string, begin:string, bias:string, by:string, calcMode:string, class:string, clip:string, clipPathUnits:string, color:string, contentScriptType:string, contentStyleType:string, cursor:string, cx:string, cy:string, d:string, decelerate:string, descent:string, diffuseConstant:string, direction:string, display:string, divisor:string, dur:string, dx:string, dy:string, edgeMode:string, elevation:string, end:string, exponent:string, externalResourcesRequired:string, fill:NamedColor|Color|string, filter:string, filterRes:string, filterUnits:string, format:string, from:string, fr:string, fx:string, fy:string, g1:string, g2:string, glyphRef:string, gradientTransform:string, gradientUnits:string, hanging:string, height:string, href:string, hreflang:string, id:string, ideographic:string, in:string, in2:string, intercept:string, k:string, k1:string, k2:string, k3:string, k4:string, kernelMatrix:string, kernelUnitLength:string, kerning:string, keyPoints:string, keySplines:string, keyTimes:string, lang:string, lengthAdjust:string, limitingConeAngle:string, local:string, markerHeight:string, markerUnits:string, markerWidth:string, mask:string, maskContentUnits:string, maskUnits:string, mathematical:string, max:string, media:string, method:string, min:string, mode:string, name:string, numOctaves:string, offset:string, opacity:string, operator:string, order:string, orient:string, orientation:string, origin:string, overflow:string, path:string, pathLength:string, patternContentUnits:string, patternTransform:string, patternUnits:string, ping:string, points:string, pointsAtX:string, pointsAtY:string, pointsAtZ:string, preserveAlpha:string, preserveAspectRatio:string, primitiveUnits:string, r:string, radius:string, referrerPolicy:string, refX:string, refY:string, rel:string, repeatCount:string, repeatDur:string, requiredExtensions:string, requiredFeatures:string, restart:string, result:string, rotate:string, rx:string, ry:string, scale:string, seed:string, slope:string, spacing:string, specularConstant:string, specularExponent:string, speed:string, spreadMethod:string, startOffset:string, stdDeviation:string, stemh:string, stemv:string, stitchTiles:string, string:string, stroke:string, style:string, surfaceScale:string, systemLanguage:string, tabindex:string, tableValues:string, target:string, targetX:string, targetY:string, textLength:string, to:string, transform:string, type:string, u1:string, u2:string, unicode:string, values:string, version:string, viewBox:string, viewTarget:string, visibility:string, width:string, widths:string, x:string, x1:string, x2:string, xChannelSelector:string, y:string, y1:string, y2:string, yChannelSelector:string, z:string, zoomAndPan:string, }} AElementNSAttributeDescriptor */ /*** * @typedef {{abort:function(event:(UiEvent|Event)):void,afterprint:function(event:Event):void,animationend:function(event:AnimationEvent):void,animationiteration:function(event:AnimationEvent):void,animationstart:function(event:AnimationEvent):void,beforeprint:function(event:Event):void,beforeunload:function(event:(UiEvent|Event)):void,blur:function(event:FocusEvent):void,canplay:function(event:Event):void,canplaythrough:function(event:Event):void,change:function(event:Event):void,click:function(event:MouseEvent):void,contextmenu:function(event:MouseEvent):void,copy:function(event:ClipboardEvent):void,cut:function(event:ClipboardEvent):void,dblclick:function(event:MouseEvent):void,drag:function(event:DragEvent):void,dragend:function(event:DragEvent):void,dragenter:function(event:DragEvent):void,dragleave:function(event:DragEvent):void,dragover:function(event:DragEvent):void,dragstart:function(event:DragEvent):void,drop:function(event:DragEvent):void,durationchange:function(event:Event):void,ended:function(event:Event):void,error:function(event:(ProgressEvent|UiEvent|Event)):void,focus:function(event:FocusEvent):void,focusin:function(event:FocusEvent):void,focusout:function(event:FocusEvent):void,fullscreenchange:function(event:Event):void,fullscreenerror:function(event:Event):void,hashchange:function(event:HashChangeEvent):void,input:function(event:(InputEvent|Event)):void,invalid:function(event:Event):void,keydown:function(event:KeyboardEvent):void,keypress:function(event:KeyboardEvent):void,keyup:function(event:KeyboardEvent):void,load:function(event:(UiEvent|Event)):void,loadeddata:function(event:Event):void,loadedmetadata:function(event:Event):void,loadstart:function(event:ProgressEvent):void,message:function(event:Event):void,mousedown:function(event:MouseEvent):void,mouseenter:function(event:MouseEvent):void,mouseleave:function(event:MouseEvent):void,mousemove:function(event:MouseEvent):void,mouseover:function(event:MouseEvent):void,mouseout:function(event:MouseEvent):void,mouseup:function(event:MouseEvent):void,mousewheel:function(event:WheelEvent):void,offline:function(event:Event):void,online:function(event:Event):void,open:function(event:Event):void,pagehide:function(event:PageTransitionEvent):void,pageshow:function(event:PageTransitionEvent):void,paste:function(event:ClipboardEvent):void,pause:function(event:Event):void,play:function(event:Event):void,playing:function(event:Event):void,popstate:function(event:PopStateEvent):void,progress:function(event:Event):void,ratechange:function(event:Event):void,resize:function(event:(UiEvent|Event)):void,reset:function(event:Event):void,scroll:function(event:(UiEvent|Event)):void,search:function(event:Event):void,seeked:function(event:Event):void,seeking:function(event:Event):void,select:function(event:(UiEvent|Event)):void,show:function(event:Event):void,stalled:function(event:Event):void,storage:function(event:StorageEvent):void,submit:function(event:Event):void,suspend:function(event:Event):void,timeupdate:function(event:Event):void,toggle:function(event:Event):void,touchcancel:function(event:TouchEvent):void,touchend:function(event:TouchEvent):void,touchmove:function(event:TouchEvent):void,touchstart:function(event:TouchEvent):void,transitionend:function(event:TransitionEvent):void,unload:function(event:(UiEvent|Event)):void,volumechange:function(event:Event):void,waiting:function(event:Event):void,wheel:function(event:WheelEvent):void}} AElementEventDescriptor */ /*** * @typedef AbsolConstructDescriptor * @property {string | function |null} tag * @property {CSSStyleDeclaration} style * @property {Array | string} extendEvent * @property {Array | string} class * @property {Object} data * @property {AElementAttributeDescriptor|AElementNSAttributeDescriptor} attr * @property {string|AElement | AElementNS | AbsolConstructDescriptor | string[] |AElement[] | AElementNS[] | AbsolConstructDescriptor[]} child * @property {string} text to create a TextNode, not Element * @property {AElement} elt * @property {AElementEventDescriptor|{}} on * @property {Object} props * */ var svgCreator = function () { var temp = document.createElement('div'); temp.innerHTML = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"></svg>'; var element = temp.childNodes[0]; var prototypes = Object.getOwnPropertyDescriptors(AElement["a" /* default */].prototype); Object.defineProperties(element, prototypes); AElement["a" /* default */].call(element); return element; }; /*** * * @param {*=} option * @constructor */ function Dom(option) { option = option || {}; this.creator = option.creator || {}; Object.defineProperties(this.creator, { svg: { set: function () { //do nothing }, get: function () { return svgCreator; } }, attachhook: { set: function () { //do nothing }, get: function () { return AttachHook["a" /* default */]; } } }); this['$ '.trim()] = this.$.bind(this); this['_ '.trim()] = this._.bind(this); this['$' + '$'] = this.$$.bind(this); this.buildDom = this._; } Dom.prototype.defaultTag = 'div'; Dom.prototype.fromCode = function (code) { code = code.trim().replace(/>\s+</gm, '><'); var temTag = 'div'; if (code.startsWith('<td') || (code.startsWith('<th') && !code.startsWith('<thead'))) temTag = 'tr'; else if (code.startsWith('<tr')) temTag = 'tbody'; else if (code.startsWith('<thead') || code.startsWith('<tbody')) temTag = 'table'; var tempDiv = document.createElement(temTag); tempDiv.innerHTML = code; var element = tempDiv.childNodes[0]; var prototypes = Object.getOwnPropertyDescriptors(AElement["a" /* default */].prototype); Object.defineProperties(element, prototypes); AElement["a" /* default */].call(element); return element; }; /** * DFS * @param {string | AElement} query * @param {AElement} root * @param {function} onFound - return true to stop find * @returns {AElement | AElementNS} */ Dom.prototype.$ = function (query, root, onFound) { var res; if (Dom.isDomNode(query)) res = query; else res = this.select(query, root, onFound); if (res) this.attach(res); return res; }; /*** * * @type {function(string, AElement, Function): AElement} */ Dom.prototype.selectAttacth = Dom.prototype.$; /** * DFS * @param {string} query * @param {AElement} root * @param {function} onFound - return true to stop find */ Dom.prototype.select = function (query, root, onFound) { root = root || document.documentElement; var matcher = HTML5_JSPath.compileJSPath(query); return matcher.findFirst(root, onFound); }; var FeatureClass = { AElementNS: { constructor: ElementNS["a" /* default */], prototypeKeys: Object.keys(ElementNS["a" /* default */].prototype) }, AElement: { constructor: AElement["a" /* default */], prototypeKeys: Object.keys(AElement["a" /* default */].prototype) } }; /** * * @param {AElement | AElementNS } element */ Dom.prototype.attach = function (element) { if (element.attr) return; var feature = (element.getBBox && element.tagName !== 'svg') ? FeatureClass.AElementNS : FeatureClass.AElement; var elementConstructor = feature.constructor; var proto = elementConstructor.prototype; var prototypeKeys = feature.prototypeKeys; var n = prototypeKeys.length; var key; for (var i = 0; i < n; ++i) { key = prototypeKeys[i]; element[key] = proto[key]; } Object.assign(element, elementConstructor.prototype) elementConstructor.call(element); }; Dom.prototype.makeNewElement = function (tagName) { return document.createElement(tagName); }; Dom.prototype.makeNewTextNode = function (data) { return document.createTextNode(data); }; /** * * @param {AbsolConstructDescriptor | string | {} } option * @param {boolean=} isInherited * @returns {AElementNS| AElement | Text} */ Dom.prototype._ = function (option, isInherited) { var res; var creator; if (Dom.isDomNode(option)) { res = option; option = {}; /** fix reinit component */ isInherited = true; } else { if (option.charAt) { option = option.trim(); if (option[0] === '<') { res = this.fromCode(option); option = {}; } else { var queryObj = HTML5_JSPath.parseQuery(option); option = {}; option.tag = queryObj.tagName || this.defaultTag; if (queryObj.classList && queryObj.classList.length > 0) option.class = queryObj.classList; if (queryObj.id) option.id = queryObj.id; if (queryObj.attributes) option.attr = queryObj.attributes; } } } if (option.text || option.text === '') {//is textNode return this.makeNewTextNode(option.text); } option.tag = option.tag || this.defaultTag; creator = option.tag.prototype ? option.tag : this.creator[option.tag]; if (option.tag.prototype) option.tag = option.tag.tag; if (option.elt) { res = this._(option.elt); } else { if (!res) { if (creator) { if (creator.render) { res = creator.render(option.data, option,this); } else { res = creator(option.data,option ,this); } } else { res = this.makeNewElement(option.tag); Object.assign(res, option.data); } } } this.attach(res); if (creator) { res._azar_extendTags = res._azar_extendTags || {}; res._azar_extendTags[option.tag] = creator; creator.property && Object.defineProperties(res, creator.property); creator.prototype && OOP["a" /* default */].extends(res, creator.prototype); creator.attribute && res.defineAttributes(creator.attribute); if (creator.render) { if (creator.eventHandler) { res.eventHandler = res.eventHandler || {}; var eventHandler = OOP["a" /* default */].bindFunctions(res, creator.eventHandler || creator.prototype.eventHandler); for (var eventHandlerKey in eventHandler) { if (res.eventHandler[eventHandlerKey]) { throw new Error("Same name of eventHandler[" + eventHandlerKey + "]"); } else { res.eventHandler[eventHandlerKey] = eventHandler[eventHandlerKey]; } } } creator.call(res); } } option.extendEvent && res.defineEvent(option.extendEvent); option.attr && res.attr(option.attr); option.on && res.on(option.on); option.once && res.once(option.once); option.class && res.addClass(option.class); option.style && res.addStyle(option.style); option.id && res.attr('id', option.id); if (!isInherited) res.init(option.props); var children = option.child; if (children) { if (!children.forEach || !children.map) { children = [children]; } for (var i = 0; i < children.length; ++i) { res.addChild(this._(children[i], false)); } } return res; }; /*** * * @type {function(Object, boolean): AElement} */ Dom.prototype.create = Dom.prototype._; /*** * * @param query * @param root * @returns {Array<AElement|AElementNS>} */ Dom.prototype.$$ = function (query, root) { var thisD = this; var res = []; this.selectAttacth(query, root, function (elt) { thisD.attach(elt); res.push(elt); }); return res; }; Dom.prototype.install = function (arg0, arg1) { var _this = this; if (arguments.length === 1) { if (arg0.creator && arg0.create && arg0.select) { // is a dom core var creator = arg0.creator; Object.keys(creator).forEach(function (key) { if (key.startsWith('_') || key.startsWith('$')) return; var func = creator[key]; if (typeof (func) == 'function') if (_this.creator[key] !== func) _this.creator[key] = func; }); } else if (typeof (arg0) == 'function') { var name = arg0.tag || getFunctionName(arg0) || arg0.name; if (name) { this.creator[name.toLowerCase()] = arg0; } else { console.error('No ident name of creator function', arg0); } } else if (arg0 instanceof Array) { arg0.forEach(function (func) { var name = func.tag || getFunctionName(func) || func.name; if (name) { _this.creator[name.toLowerCase()] = func; } }); } else if (typeof arg0 == 'object') { Object.keys(arg0).forEach(function (key) { if (key.startsWith('_') || key.startsWith('$')) return; var func = arg0[key]; if (typeof (func) == 'function') if (_this.creator[key] !== func) _this.creator[key] = func; }); } else { console.error('Unknown data', arg0); } } else if (arguments.length === 2) { if (arg0 instanceof Array) { if (arg1.creator) arg1 = arg1.creator; arg0.forEach(function (key) { var func = arg1[key]; if (typeof (func) == 'function') if (_this.creator[key] !== func) _this.creator[key] = func; }); } else if (arg0 instanceof RegExp) { if (arg1.creator) arg1 = arg1.creator; Object.keys(arg1).forEach(function (key) { if (key.match(arg0)) { var func = arg1[key]; if (typeof (func) == 'function') if (_this.creator[key] !== func) _this.creator[key] = func; } }); } else if (typeof (arg0) == 'string' && arg0.length > 0) { if (typeof (arg1) == 'function') { this.creator[arg0] = arg1; } else { console.error('arg1 is not a function'); } } } else { console.error('Invalid param'); } return this; }; /*** * * @param {String | null} tagName */ Dom.prototype.require = function (tagName) { return this.creator[tagName] || null; }; /** * * @param {*} o * @returns {Boolean} */ function isDomNode(o) { return ( typeof Node === "object" ? o instanceof Node : o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string" ); } Dom.isDomNode = isDomNode; /** * @param {AElement|Node|HTMLElement} element */ function activeFullScreen(element) { if (element.requestFullscreen) { element.requestFullscreen(); } else if (element.mozRequestFullScreen) { element.mozRequestFullScreen(); } else if (element.webkitRequestFullscreen) { element.webkitRequestFullscreen(AElement["a" /* default */].ALLOW_KEYBOARD_INPUT); } else if (element.msRequestFullscreen) { element.msRequestFullscreen(); } } Dom.activeFullScreen = activeFullScreen; function inactiveFullScreen() { if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); } } Dom.inactiveFullScreen = inactiveFullScreen; //adapt var deactiveFullScreen = inactiveFullScreen; Dom.deactiveFullScreen = deactiveFullScreen; function isFullScreen() { var fullScreenElement = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement; return !!fullScreenElement; } Dom.isFullScreen = isFullScreen; /** * @param {AElement|Node|HTMLElement} current * @returns {ClientRect} */ function traceOutBoundingClientRect(current) { var screenSize = Dom.getScreenSize(); var left = 0; var right = screenSize.width; var top = 0; var bottom = screenSize.height; while (current) { var ox = AElement["a" /* default */].prototype.getComputedStyleValue.call(current, 'overflow-x') !== "visible"; var oy = AElement["a" /* default */].prototype.getComputedStyleValue.call(current, 'overflow-y') !== "visible"; var isHtml = current.tagName.toLowerCase() === 'html'; if (ox || oy || isHtml) { var bound; if (isHtml) { bound = Object.assign({ left: 0, top: 0 }, getScreenSize()); bound.bottom = bound.height; bound.right = bound.width; } else { bound = current.getBoundingClientRect(); } if (ox || isHtml) { left = Math.max(left, bound.left); right = Math.min(right, bound.right); } if (oy || isHtml) { top = Math.max(top, bound.top); bottom = Math.min(bottom, bound.bottom); } } if (isHtml) break; current = current.parentElement; } return { left: left, right: right, top: top, bottom: bottom, width: right - left, height: bottom - top }; } Dom.traceOutBoundingClientRect = traceOutBoundingClientRect; /*** * * @param {string} fontFace * @param {number} timeout * @returns {Promise<boolean>} */ function fontFaceIsLoaded(fontFace, timeout) { timeout = timeout || 0; var element = this.ShareInstance._({ tag: 'span', style: { visibility: 'hidden', position: 'fixed', top: '-9999px', left: '-9999px', 'font-size': '256px' }, props: { innerHTML: "Test string long long long" } }); element.addTo(document.body); return element.afterAttached().then(function () { var lastOffsetWidth = element.getBoundingClientRect().width; element.addStyle('font-family', fontFace); return new Promise(function (resolve, reject) { function check(remainTime) { if (remainTime < 0) { resolve(false); element.selfRemove(); } else requestAnimationFrame(function () { var currentOffsetWidth = element.getBoundingClientRect().width; if (currentOffsetWidth != lastOffsetWidth) { resolve(true); element.selfRemove(); } else check(remainTime - 10); }); } check(timeout); }); }); } Dom.fontFaceIsLoaded = fontFaceIsLoaded; /*** * * @returns {{width: number, WIDTH: number, HEIGHT: number, height: number}} */ function getScreenSize() { var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; return { WIDTH: width, HEIGHT: height, width: width, height: height }; } Dom.getScreenSize = getScreenSize; /*** * * @param {HTMLImageElement} img * @param {number=} timeout * @returns {Promise<void>} */ function waitImageLoaded(img, timeout) { var isLoaded = true; if (!img.complete) { isLoaded = false; } if (img.naturalWidth === 0) { isLoaded = false; } if (isLoaded) return Promise.resolve(); if (!img.src) return Promise.resolve(); return new Promise(function (rs) { if (img.addEventListener) { img.addEventListener('load', rs, false); img.addEventListener('error', rs, false); } else { img.attachEvent('onload', rs, false); } setTimeout(rs, timeout || 5000); }); // No other way of checking: assume it’s ok. } Dom.waitImageLoaded = waitImageLoaded; /*** * * @param {HTMLIFrameElement| Worker} iframe * @returns {Promise} */ function waitIFrameLoaded(iframe) { return new Promise(function (rs, rj) { if (document.all) { iframe.onreadystatechange = function () { if (iframe.readyState === "complete" || iframe.readyState === "loaded") rs(); }; } else { iframe.onload = rs; } setTimeout(rs, 5000) }); } Dom.waitIFrameLoaded = waitIFrameLoaded; /*** * * @param {Image} element * @returns {Promise<HTMLCanvasElement>} */ function imageToCanvas(element) { if (typeof element == 'string') { element = Dom.ShareInstance.$(element); } if (element.tagName.toLowerCase() === 'img') { var preRender = Dom.ShareInstance._('div'); preRender.addStyle({ position: 'fixed', top: '0', left: '0', zIndex: '-10000', opacity: '0' }).addTo(document.body); var canvas = document.createElement("canvas"); preRender.addChild(canvas); return Dom.waitImageLoaded(element).then(function () { canvas.width = element.width; canvas.height = element.height; var context = canvas.getContext("2d"); context.drawImage(element, 0, 0); preRender.selfRemove(); return canvas; }); } else { throw new Error("AElement must be image"); } } Dom.imageToCanvas = imageToCanvas; Dom.ShareInstance = new Dom(); Dom.scrollWidthPromise; Dom.documentReady = new Promise(function (resolve) { if (document.body) { resolve(); } else { window.addEventListener("load", resolve); } }); function getScrollSize() { if (!Dom.scrollWidthPromise) Dom.scrollWidthPromise = new Promise(function (resolve) { function prerender() { var parent = Dom.ShareInstance._({ style: { 'z-index': '-100', opacity: '0', width: '100px', height: '100px', overflow: 'scroll', top: '0', left: '0', 'box-sizing': 'content-box', position: 'fixed' } }) .addTo(document.body); var child = Dom.ShareInstance._({ style: { width: '100%', height: '100%' } }).addTo(parent); requestAnimationFrame(function () { var parentBound = parent.getBoundingClientRect(); var childBound = child.getBoundingClientRect(); resolve({ width: parentBound.width - childBound.width, height: parentBound.height - childBound.height }); parent.selfRemove(); }); } Dom.documentReady.then(prerender); }); return Dom.scrollWidthPromise; } Dom.getScrollSize = getScrollSize; /*** * * @param {(AElement|AElementNS|Node)} originElt * @param {function(originElt: (AElement|AElementNS|Node), originElt: (AElement|AElementNS|Node)):void } afterCloneCb * @return {AElement|AElementNS|Node} */ function depthClone(originElt, afterCloneCb) { /*** * * @type {AElement|AElementNS|Node} */ var newElt = originElt.cloneNode();//no deep if (originElt.childNodes) { /*** * * @type {(AElement|AElementNS)[]} */ var children = Array.prototype.map.call(originElt.childNodes, function (child) { return depthClone(child, afterCloneCb) }); for (var i = 0; i < children.length; ++i) { newElt.appendChild(children[i]); } } return (afterCloneCb && afterCloneCb(originElt, newElt)) || newElt; } /*** * * @param originElt * @param afterCloneCb * @returns {AElement|HTMLElement|Node} */ function depthCloneWithStyle(originElt, afterCloneCb) { return depthClone(originElt, function (originElt, newElt) { if (!originElt.getAttribute && !originElt.getAttributeNS) return; copyStyleRule(originElt, newElt); afterCloneCb && afterCloneCb(originElt, newElt); }); } Dom.depthClone = depthClone; Dom.depthCloneWithStyle = depthCloneWithStyle; /*** * * @param {AElement|HTMLElement|Node}sourceElt * @param {AElement|HTMLElement|Node} destElt * @returns {AElement|HTMLElement|Node} */ function copyStyleRule(sourceElt, destElt) { if (!sourceElt.getAttribute && !sourceElt.getAttributeNS) return destElt;//is text node if (!destElt.getAttribute && !destElt.getAttributeNS) return destElt;//is text node, nothing to copy var cssRules = AElement["a" /* default */].prototype.getCSSRules.call(sourceElt); var cssKey = cssRules.reduce(function (ac, rule) { for (var i = 0; i < rule.style.length; ++i) { ac[rule.style[i]] = true; } return ac; }, {}); for (var key in cssKey) { destElt.style[key] = AElement["a" /* default */].prototype.getComputedStyleValue.call(sourceElt, key); } return destElt; } Dom.copyStyleRule = copyStyleRule; /** * */ function getSystemFontSize() { if (window.mobileHost && window.mobileHost.systemFont) { return window.mobileHost.systemFont.pointSize; } var _ = Dom.ShareInstance._; var initSpan = Dom.ShareInstance._({ tag: 'span', style: { font: 'inherit', } }); var appleSpan = Dom.ShareInstance._({ tag: 'span', style: { font: '-apple-system-body', } }).addTo(document.body); var renderer = _({ style: { font: 'initial', position: 'fixed', top: 0, left: 0, visibility: 'hidden', opacity: 0, zIndex: -100 }, child: [initSpan && appleSpan] }).addTo(document.body); var appleSize = appleSpan.getFontSize(); var initSize = initSpan.getFontSize(); var defaultSize = appleSize !== initSize ? appleSize : initSize; renderer.remove(); return Math.round(defaultSize * 14 / 16); } function getTextNodeBound(textNode) { if (document.createRange) { var range = document.createRange(); range.selectNodeContents(textNode); if (range.getBoundingClientRect) { return range.getBoundingClientRect(); } } return null; } Dom.getTextNodeBound = getTextNodeBound; /*** * get absol construct descriptor for HTML element only * @param {AElement | Text} elt * @returns {AbsolConstructDescriptor} */ function getConstructDescriptor(elt) { var obj = {}; obj.tag = elt.tagName.toLowerCase(); var classAttr = elt.getAttribute('class'); var classList; if (classAttr) classList = Object(attribute["a" /* parseClassAttr */])(classAttr); if (classList && classList.length > 0) obj.class = classList; var styleAttr = elt.getAttribute('style'); var style; if (styleAttr) style = Object(attribute["c" /* parseStyleAttr */])(styleAttr); var attributes = elt.attributes; var attNode; var attrName; var attrValue; var attr = {}; var on = {}; var props = {}; var eventMatch, eventName; var propMatch, propName; for (var i = 0; i < attributes.length; ++i) { attNode = attributes[i]; attrName = attNode.nodeName; attrValue = attNode.nodeValue; if (attrName == 'style' || attrName == 'class') continue; eventMatch = attrName.match(/^on(.+)/) if (eventMatch) { eventName = eventMatch[1]; on[eventName] = new Function('event', 'sender', attrValue); continue; } propMatch = attrName.match(/^prop-(.+)/); if (propMatch) { propName = propMatch[1]; props[propName] = attrValue; continue; } attr[attrName] = attrValue; } var key; for (key in style) { //style is not empty obj.style = style; break; } for (key in attr) { obj.attr = attr; break; } for (key in on) { obj.on = on; break; } for (key in props) { obj.props = props; break; } return obj; } Dom.getConstructDescriptor = getConstructDescriptor; Dom.addToResizeSystem = function (element) { ResizeSystem["a" /* default */].add(element); }; Dom.updateResizeSystem = function () { ResizeSystem["a" /* default */].update(); } Dom.updateSizeUp = function (fromElt) { ResizeSystem["a" /* default */].updateUp(fromElt); }; /* harmony default export */ var HTML5_Dom = __webpack_exports__["b"] = (Dom); /***/ }), /* 2 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; var OOP = {}; /** * @param {Object} object * @param {String} key * @param {Function} method */ OOP.overrideMethod = function (object, key, method) { if (object[key] === undefined) object[key] = method; else { var _superMethod = object[key]; object[key] = (function (_superMethod, method) { return function () { var _super = this.super; this.super = _superMethod; var result = method.apply(this, arguments); this.super = _super; return result; }; })(_superMethod, method); } }; OOP.extends = function (object, prototype) { // do not use setter, getter for (var key in prototype) { if (key !== 'constructor' && key !== '__proto__') { if ((typeof prototype[key] == 'function')) { OOP.overrideMethod(object, key, prototype[key]); } else if (prototype[key] !== undefined && prototype[key] !== null) { object[key] = prototype[key];//just copy } } } }; OOP.inherit = function (child, parent) { // do not use setter, getter Object.keys(parent).forEach(function (key) { if (key !== 'constructor' && (typeof parent[key] == 'function')) { var superMethod = parent[key]; var currentMethod = child[key]; if (!currentMethod) child[key] = superMethod; else { child[key] = function () { var _super = this.super; this.super = superMethod; var result = currentMethod.apply(this, arguments); this.super = _super; return result; }; } } }); }; OOP.drillProperty = function (topObject, botObject, keyTop, keyBot) { if (typeof (keyTop) == 'string') { keyBot = keyBot || keyTop; Object.defineProperty(topObject, keyTop, { set: function (value) { botObject[keyBot] = value; }, get: function () { return botObject[keyBot]; } }); } else { if (keyTop instanceof Array) { for (var i = 0; i < keyTop.length; ++i) { OOP.drillProperty(topObject, botObject, keyTop[i], keyTop[i]); } } else { for (var key in keyTop) { OOP.drillProperty(topObject, botObject, key, keyTop[key]); } } } }; OOP.bindFunctions = function (_this, handlers) { var res = {}; for (var key in handlers) { res[key] = handlers[key].bind(_this); } return res; }; OOP.inheritCreator = function (parent, child) { var i; if (child.property) { if (parent.property) { for (i in parent.property) { if (!child.property[i]) child.property[i] = parent.property[i]; } } } for (i in parent.prototype) { if (!child.prototype[i]) { child.prototype[i] = parent.prototype[i]; } else { child.prototype[i] = (function (superFunction, childFunction) { return function () { var _super = this.super; this.super = superFunction; var result = childFunction.apply(this, arguments); this.super = _super; return result; }; })(parent.prototype[i], child.prototype[i]); } } }; /*** * * @param {Function} constructor */ OOP.mixClass = function (constructor) { var descriptors = {}; for (var i = 1; i < arguments.length; ++i) { Object.assign(descriptors, Object.getOwnPropertyDescriptors(arguments[i].prototype)); } delete descriptors.constructor; Object.defineProperties(constructor.prototype, descriptors); }; /* harmony default export */ __webpack_exports__["a"] = (OOP); /***/ }), /* 3 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export eventProperties */ /* unused harmony export touchProperties */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return isMouseRight; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return isMouseLeft; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return hitElement; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return copyEvent; }); /* unused harmony export copyTouch */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return findChangedTouchByIdent; }); /* unused harmony export findTouchByIdent */ /* harmony import */ var _Code_safeThrow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(11); function EventEmitter() { if (!this._azar_extendEvents) { Object.defineProperty(this, '_azar_extendEvents', { enumerable: false, value: this._azar_extendEvents || { supported: {}, prioritize: {}, nonprioritize: {} } }); Object.defineProperty(this, '__azar_force', { value: !(typeof Node === "object" ? this instanceof Node : this && typeof this === "object" && typeof this.nodeType === "number" && typeof this.nodeName === "string"), enumerable: false }); } } EventEmitter.prototype.defineEvent = function (name) { if (name instanceof Array) { for (var i = 0; i < name.length; ++i) this._azar_extendEvents.supported[name[i]] = true; } else this._azar_extendEvents.supported[name] = true; return this; }; EventEmitter.prototype.isSupportedEvent = function (name) { return this.__azar_force || !!this._azar_extendEvents.supported[name]; }; EventEmitter.prototype.emit = function (eventName, data) { this.fire.apply(this, arguments); }; EventEmitter.prototype.fire = function (eventName, data) { var others = Array.prototype.slice.call(arguments, 1); if (this.isSupportedEvent(eventName)) { var listenerList; var i; if (this._azar_extendEvents.prioritize[eventName]) { listenerList = this._azar_extendEvents.prioritize[eventName].slice(); for (i = 0; i < listenerList.length; ++i) { try { listenerList[i].wrappedCallback.apply(this, others); } catch (e) { Object(_Code_safeThrow__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(e); } } } if (this._azar_extendEvents.nonprioritize[eventName]) { listenerList = this._azar_extendEvents.nonprioritize[eventName].slice(); for (i = 0; i < listenerList.length; ++i) { try { listenerList[i].wrappedCallback.apply(this, others); } catch (e) { Object(_Code_safeThrow__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(e); } } } } else { if (this.dispatchEvent) { var event = new Event(eventName); data && Object.assign(event, data); this.dispatchEvent(event); } else throw new Error("Not support event " + eventName); } return this; }; EventEmitter.prototype.eventEmittorOnWithTime = function (isOnce, arg0, arg1, arg2) { if (typeof arg0 == 'object') { for (var key in arg0) { this.eventEmittorOnWithTime(isOnce, key, arg0[key]); } return this; } else { if (typeof arg1 == 'object') { return this.eventEmittorOnWithTime(isOnce, arg0, arg1.callback, arg1.cap); } else { var eventArr = this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] || []; var eventIndex = -1; for (var i = 0; i < eventArr.length; ++i) { if (eventArr[i].wrappedCallback == arg1) { eventIndex = i; break; } } if (eventIndex < 0) { var event = { isOnce: isOnce, eventName: arg0, callback: arg1, cap: !!arg2 }; //wrappedCallback will be call if (isOnce) { event.wrappedCallback = function () { this.off(event.eventName, event.wrappedCallback, event.cap); event.callback.apply(this, arguments); }; } else { event.wrappedCallback = event.callback; } if (!this.isSupportedEvent(arg0)) { if (this.addEventListener) { this.addEventListener(arg0, event.wrappedCallback, !!arg2); } else { this.attachEvent('on' + arg0, arg1, !!arg2); } } eventArr.push(event); this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = eventArr; } else { console.warn("dupplicate event"); } } return this; } }; EventEmitter.prototype.on = function (arg0, arg1, arg2) { this.eventEmittorOnWithTime(false, arg0, arg1, arg2); return this; }; EventEmitter.prototype.once = function (arg0, arg1, arg2) { this.eventEmittorOnWithTime(true, arg0, arg1, arg2); return this; }; EventEmitter.prototype.off = function (arg0, arg1, arg2) { if (typeof arg0 == 'object') { for (var key in arg0) { this.off(key, arg0[key]); } return this; } else { if (typeof arg1 == 'object') { return this.off(arg0, arg1.callback, arg1.cap); } else { var eventArr = this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] || []; var newEventArray = []; for (var i = 0; i < eventArr.length; ++i) { var event = eventArr[i]; if (event.wrappedCallback == arg1) { //Dont add to newEventArray if (this.isSupportedEvent(arg0)) { } else { if (this.removeEventListener) { this.removeEventListener(event.eventName, event.wrappedCallback, !!event.cap); } else { this.detachEvent('on' + event.eventName, event.wrappedCallback, !!event.cap); } } } else { newEventArray.push(event); } } this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = newEventArray; return this; } } }; var eventProperties = ["altKey", "bubbles", "button", "buttons", "cancelBubble", "cancelable", "clientX", "clientY", "composed", "ctrlKey", "currentTarget", "defaultPrevented", "deltaMode", "deltaX", "deltaY", "deltaZ", "detail", "eventPhase", "explicitOriginalTarget", "isTrusted", "layerX", "layerY", "metaKey", "movementX", "movementY", "mozInputSource", "mozPressure", "offsetX", "offsetY", "originalTarget", "pageX", "pageY", "rangeOffset", "rangeParent", "region", "relatedTarget", "returnValue", "screenX", "screenY", "shiftKey", "srcElement", "target", "timeStamp", "type", "deltaMode", "deltaX", "deltaY", "deltaZ", 'preventDefault']; var touchProperties = ['clientX', 'clientY', 'force', 'identifier', 'pageX', 'pageY', 'rotationAngle', 'screenX', 'screenY', 'target']; function isMouseRight(event) { var isRightMB = false; if ("which" in event) // Gecko (Firefox), WebKit (Safari/Chrome) & Opera isRightMB = event.which == 3; else if ("button" in event) // IE, Opera isRightMB = event.button == 2; return isRightMB; } function isMouseLeft(event) { var isLeftMB = false; if ("which" in event) // Gecko (Firefox), WebKit (Safari/Chrome) & Opera isLeftMB = event.which == 1; else if ("button" in event) // IE, Opera isLeftMB = event.button == 1; return isLeftMB; } /** * * @type AElement * @name sponsorElement * @memberof AElement# */ /** * * @param {AElement} element * @param {Event |{target: AElement}} event * @returns {boolean} */ function hitElement(element, event) { var current = event.target; while (current) { if (current === element) return true; if (current.sponsorElement && current.sponsorElement !== current.parentElement) {// sponsorElement like trigger of quick-menu if (hitElement(element, { target: current.sponsorElement })) return true; } current = current.parentElement; } return false; } function copyEvent(event, props) { var result = {}; var key, value; //copy native property for (var i = 0; i < eventProperties.length; ++i) { key = eventProperties[i]; value = event[key]; if (value !== undefined) { if (typeof value == "function") { result[key] = event[key].bind(event); } else { result[key] = event[key]; } } } Object.assign(result, event); if (props) Object.assign(result, props) if (event.changedTouches) { result.changedTouches = Array.prototype.map.call(event.changedTouches, function (touch) { return copyTouch(touch); }); } if (event.touches) { result.touches = Array.prototype.map.call(event.touches, function (touch) { return copyTouch(touch); }); } return result; } function copyTouch(touch, props) { var result = {}; var key, value; //copy native property for (var i = 0; i < touchProperties.length; ++i) { key = touchProperties[i]; value = touch[key]; if (value !== undefined) { if (typeof value == "function") { result[key] = touch[key].bind(touch); } else { result[key] = touch[key]; } } } Object.assign(result, touch); if (props) Object.assign(result, props); return result; } /*** * * @param {TouchEvent} event * @return {Touch | null} */ function findChangedTouchByIdent(event, identifier) { if (event.changedTouches) { for (var i = 0; i < event.changedTouches.length; ++i) { if (event.changedTouches[i].identifier === identifier) { return event.changedTouches[i]; } } } return null; } /*** * * @param event * @param identifier * @return {Touch|null} */ function findTouchByIdent(event, identifier) { if (event.touches) { for (var i = 0; i < event.touches.length; ++i) { if (event.touches[i].identifier === identifier) { return event.touches[i]; } } } return null; } EventEmitter.isMouseRight = isMouseRight; EventEmitter.isMouseLeft = isMouseLeft; EventEmitter.hitElement = hitElement; EventEmitter.copyEvent = copyEvent; EventEmitter.eventProperties = eventProperties; /* harmony default export */ __webpack_exports__["b"] = (EventEmitter); /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ // css base code, injected by the css-loader module.exports = function (useSourceMap) { var list = []; // return the list of modules as css string list.toString = function toString() { return this.map(function (item) { var content = cssWithMappingToString(item, useSourceMap); if (item[2]) { return '@media ' + item[2] + '{' + content + '}'; } else { return content; } }).join(''); }; // import a list of modules into the list list.i = function (modules, mediaQuery) { if (typeof modules === 'string') { modules = [[null, modules, '']]; } var alreadyImportedModules = {}; for (var i = 0; i < this.length; i++) { var id = this[i][0]; if (id != null) { alreadyImportedModules[id] = true; } } for (i = 0; i < modules.length; i++) { var item = modules[i]; // skip already imported module // this implementation is not 100% perfect for weird media query combinations // when a module is imported multiple times with different media queries. // I hope this will never occur (Hey this way we have smaller bundles) if (item[0] == null || !alreadyImportedModules[item[0]]) { if (mediaQuery && !item[2]) { item[2] = mediaQuery; } else if (mediaQuery) { item[2] = '(' + item[2] + ') and (' + mediaQuery + ')'; } list.push(item); } } }; return list; }; function cssWithMappingToString(item, useSourceMap) { var content = item[1] || ''; var cssMapping = item[3]; if (!cssMapping) { return content; } if (useSourceMap && typeof btoa === 'function') { var sourceMapping = toComment(cssMapping); var sourceURLs = cssMapping.sources.map(function (source) { return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'; }); return [content].concat(sourceURLs).concat([sourceMapping]).join('\n'); } return [content].join('\n'); } // Adapted from convert-source-map (MIT) function toComment(sourceMap) { // eslint-disable-next-line no-undef var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64; return '/*# ' + data + ' */'; } /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { /* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ var stylesInDom = {}; var memoize = function (fn) { var memo; return function () { if (typeof memo === "undefined") memo = fn.apply(this, arguments); return memo; }; }; var isOldIE = memoize(function () { // Test for IE <= 9 as proposed by Browserhacks // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 // Tests for existence of standard globals is to allow style-loader // to operate correctly into non-standard environments // @see https://github.com/webpack-contrib/style-loader/issues/177 return window && document && document.all && !window.atob; }); var getTarget = function (target, parent) { if (parent){ return parent.querySelector(target); } return document.querySelector(target); }; var getElement = (function (fn) { var memo = {}; return function(target, parent) { // If passing function in options, then use it for resolve "head" element. // Useful for Shadow Root style i.e // { // insertInto: function () { return document.querySelector("#foo").shadowRoot } // } if (typeof target === 'function') { return target(); } if (typeof memo[target] === "undefined") { var styleTarget = getTarget.call(this, target, parent); // Special case to return head of iframe instead of iframe itself if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { try { // This will throw an exception if access to iframe is blocked // due to cross-origin restrictions styleTarget = styleTarget.contentDocument.head; } catch(e) { styleTarget = null; } } memo[target] = styleTarget; } return memo[target] }; })(); var singleton = null; var singletonCounter = 0; var stylesInsertedAtTop = []; var fixUrls = __webpack_require__(79); module.exports = function(list, options) { if (typeof DEBUG !== "undefined" && DEBUG) { if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment"); } options = options || {}; options.attrs = typeof options.attrs === "object" ? options.attrs : {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> // tags it will allow on a page if (!options.singleton && typeof options.singleton !== "boolean") options.singleton = isOldIE(); // By default, add <style> tags to the <head> element if (!options.insertInto) options.insertInto = "head"; // By default, add <style> tags to the bottom of the target if (!options.insertAt) options.insertAt = "bottom"; var styles = listToStyles(list, options); addStylesToDom(styles, options); return function update (newList) { var mayRemove = []; for (var i = 0; i < styles.length; i++) { var item = styles[i]; var domStyle = stylesInDom[item.id]; domStyle.refs--; mayRemove.push(domStyle); } if(newList) { var newStyles = listToStyles(newList, options); addStylesToDom(newStyles, options); } for (var i = 0; i < mayRemove.length; i++) { var domStyle = mayRemove[i]; if(domStyle.refs === 0) { for (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j](); delete stylesInDom[domStyle.id]; } } }; }; function addStylesToDom (styles, options) { for (var i = 0; i < styles.length; i++) { var item = styles[i]; var domStyle = stylesInDom[item.id]; if(domStyle) { domStyle.refs++; for(var j = 0; j < domStyle.parts.length; j++) { domStyle.parts[j](item.parts[j]); } for(; j < item.parts.length; j++) { domStyle.parts.push(addStyle(item.parts[j], options)); } } else { var parts = []; for(var j = 0; j < item.parts.length; j++) { parts.push(addStyle(item.parts[j], options)); } stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts}; } } } function listToStyles (list, options) { var styles = []; var newStyles = {}; for (var i = 0; i < list.length; i++) { var item = list[i]; var id = options.base ? item[0] + options.base : item[0]; var css = item[1]; var media = item[2]; var sourceMap = item[3]; var part = {css: css, media: media, sourceMap: sourceMap}; if(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]}); else newStyles[id].parts.push(part); } return styles; } function insertStyleElement (options, style) { var target = getElement(options.insertInto) if (!target) { throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid."); } var lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1]; if (options.insertAt === "top") { if (!lastStyleElementInsertedAtTop) { target.insertBefore(style, target.firstChild); } else if (lastStyleElementInsertedAtTop.nextSibling) { target.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling); } else { target.appendChild(style); } stylesInsertedAtTop.push(style); } else if (options.insertAt === "bottom") { target.appendChild(style); } else if (typeof options.insertAt === "object" && options.insertAt.before) { var nextSibling = getElement(options.insertAt.before, target); target.insertBefore(style, nextSibling); } else { throw new Error("[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n"); } } function removeStyleElement (style) { if (style.parentNode === null) return false; style.parentNode.removeChild(style); var idx = stylesInsertedAtTop.indexOf(style); if(idx >= 0) { stylesInsertedAtTop.splice(idx, 1); } } function createStyleElement (options) { var style = document.createElement("style"); if(options.attrs.type === undefined) { options.attrs.type = "text/css"; } if(options.attrs.nonce === undefined) { var nonce = getNonce(); if (nonce) { options.attrs.nonce = nonce; } } addAttrs(style, options.attrs); insertStyleElement(options, style); return style; } function createLinkElement (options) { var link = document.createElement("link"); if(options.attrs.type === undefined) { options.attrs.type = "text/css"; } options.attrs.rel = "stylesheet"; addAttrs(link, options.attrs); insertStyleElement(options, link); return link; } function addAttrs (el, attrs) { Object.keys(attrs).forEach(function (key) { el.setAttribute(key, attrs[key]); }); } function getNonce() { if (false) {} return __webpack_require__.nc; } function addStyle (obj, options) { var style, update, remove, result; // If a transform function was defined, run it on the css if (options.transform && obj.css) { result = typeof options.transform === 'function' ? options.transform(obj.css) : options.transform.default(obj.css); if (result) { // If transform returns a value, use that instead of the original css. // This allows running runtime transformations on the css. obj.css = result; } else { // If the transform function returns a falsy value, don't add this css. // This allows conditional loading of css return function() { // noop }; } } if (options.singleton) { var styleIndex = singletonCounter++; style = singleton || (singleton = createStyleElement(options)); update = applyToSingletonTag.bind(null, style, styleIndex, false); remove = applyToSingletonTag.bind(null, style, styleIndex, true); } else if ( obj.sourceMap && typeof URL === "function" && typeof URL.createObjectURL === "function" && typeof URL.revokeObjectURL === "function" && typeof Blob === "function" && typeof btoa === "function" ) { style = createLinkElement(options); update = updateLink.bind(null, style, options); remove = function () { removeStyleElement(style); if(style.href) URL.revokeObjectURL(style.href); }; } else { style = createStyleElement(options); update = applyToTag.bind(null, style); remove = function () { removeStyleElement(style); }; } update(obj); return function updateStyle (newObj) { if (newObj) { if ( newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap ) { return; } update(obj = newObj); } else { remove(); } }; } var replaceText = (function () { var textStore = []; return function (index, replacement) { textStore[index] = replacement; return textStore.filter(Boolean).join('\n'); }; })(); function applyToSingletonTag (style, index, remove, obj) { var css = remove ? "" : obj.css; if (style.styleSheet) { style.styleSheet.cssText = replaceText(index, css); } else { var cssNode = document.createTextNode(css); var childNodes = style.childNodes; if (childNodes[index]) style.removeChild(childNodes[index]); if (childNodes.length) { style.insertBefore(cssNode, childNodes[index]); } else { style.appendChild(cssNode); } } } function applyToTag (style, obj) { var css = obj.css; var media = obj.media; if(media) { style.setAttribute("media", media) } if(style.styleSheet) { style.styleSheet.cssText = css; } else { while(style.firstChild) { style.removeChild(style.firstChild); } style.appendChild(document.createTextNode(css)); } } function updateLink (link, options, obj) { var css = obj.css; var sourceMap = obj.sourceMap; /* If convertToAbsoluteUrls isn't defined, but sourcemaps are enabled and there is no publicPath defined then lets turn convertToAbsoluteUrls on by default. Otherwise default to the convertToAbsoluteUrls option directly */ var autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap; if (options.convertToAbsoluteUrls || autoFixUrls) { css = fixUrls(css); } if (sourceMap) { // http://stackoverflow.com/a/26603875 css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */"; } var blob = new Blob([css], { type: "text/css" }); var oldSrc = link.href; link.href = URL.createObjectURL(blob); if(oldSrc) URL.revokeObjectURL(oldSrc); } /***/ }), /* 6 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var _EventEmitter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3); /* harmony import */ var _Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8); /* harmony import */ var _OOP__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2); /*** * @augments Node * @augments ChildNode * @augments ParentNode * @augments Element * @augments HTMLElement * @augments EventEmitter * @augments ElementCSSInlineStyle * @constructor */ function AElement() { _EventEmitter__WEBPACK_IMPORTED_MODULE_0__[/* default */ "b"].call(this); this._azar_extendAttributes = this._azar_extendAttributes || {}; this._azar_extendTags = {}; this.eventHandler = {}; } _OOP__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].mixClass(AElement, _EventEmitter__WEBPACK_IMPORTED_MODULE_0__[/* default */ "b"]); AElement.prototype.init = function (props) { Object.assign(this, props || {}); }; AElement.prototype.eventHandler = {}; /*** * run super-class method */ AElement.prototype.super = function () {/* nope */ }; /** * @typedef {Object} AttributeDefiner * @property {Function} set * @property {Function} get * @property {Function} remove * * @param {String} key * @param {AttributeDefiner} def */ AElement.prototype.defineAttribute = function (key, def) { this._azar_extendAttributes[key] = def; }; AElement.prototype.defineAttributes = function (defs) { for (var key in defs) { this.defineAttribute(key, defs[key]); } }; AElement.prototype.attr = function () { if (arguments.length === 1) { if (typeof (arguments[0]) == 'string') { if (this._azar_extendAttributes[arguments[0]]) { return this._azar_extendAttributes[arguments[0]].get.call(this); } else return this.getAttribute(arguments[0]); } else { for (var key in arguments[0]) { this.attr(key, arguments[0][key]); } } } else { if (arguments.length == 2) { if (arguments[1] === null || arguments[1] === undefined) { if (this._azar_extendAttributes[arguments[0]]) { this._azar_extendAttributes[arguments[0]].remove.call(this, arguments[1]); } else this.removeAttribute(arguments[0]); } else { if (this._azar_extendAttributes[arguments[0]]) { this._azar_extendAttributes[arguments[0]].set.call(this, arguments[1]); } else { this.setAttribute(arguments[0], arguments[1]); } } } } return this; }; /*** * add style * @param {CSSStyleDeclaration|string|{}} arg0 * @param {string} arg1 * @returns {this} */ /** * add style * @param {CSSStyleDeclaration|string|{}} arg0 * @param {string|[]=} arg1 * @returns {this} */ AElement.prototype.addStyle = function (arg0, arg1) { if (typeof arg0 == 'string') if (arg0.indexOf('-') >= 0) { if (arg1 && arg1.forEach) { this.style.setProperty.apply(this.style, [arg0].concat(arg1)); } else { this.style.setProperty(arg0, arg1); } } else { this.style[arg0] = arg1; } else { for (var key in arg0) this.addStyle(key, arg0[key]); } return this; }; /*** * * @param {string|string[]|CSSStyleDeclaration} arg0 * @returns {this} */ AElement.prototype.removeStyle = function (arg0) { var key; if (arg0.charAt) { if (arg0.indexOf('-') >= 0) { this.style.removeProperty(arg0); } else { this.style[arg0] = null; delete this.style[arg0]; } } else { if (arg0.map && arg0.forEach) { for (var i = 0; i < arg0.length; ++i) this.removeStyle(arg0[i]); } else { for (key in arg0) this.removeStyle(key); } } return this; }; AElement.prototype.addChild = function (child) { if (child.indexOf && child.map && child.forEach) { for (var i = 0; i < child.length; ++i) this.appendChild(child[i]); } else this.appendChild(child); return this; }; AElement.prototype.addTo = function (parent) { if (parent && parent.appendChild) { if (parent.addChild) parent.addChild(this); else parent.appendChild(this); } else throw Error("Can not append to " + parent + "!"); return this; }; AElement.prototype.selfRemove = function () { if (this.parentElement) this.parentElement.removeChild(this); return this; }; AElement.prototype.selfReplace = function (newNode) { if (this.parentElement) this.parentElement.replaceChild(newNode, this); return this; }; AElement.prototype.clearChild = function () { while (this.firstChild) { this.removeChild(this.firstChild); } return this; }; /** * * @param {string|Array} className * @returns {Boolean} */ AElement.prototype.hasClass = function (className) { return this.classList.contains(className); }; /** * * @param {string|Array} className * @returns {this} */ AElement.prototype.addClass = function (className) { if (className && className.forEach && className.map) { for (var i = 0; i < className.length; ++i) this.classList.add(className[i]); } else this.classList.add(className); return this; }; /** * * @param {string|Array} className * @returns {this} */ AElement.prototype.removeClass = function (className) { if (className && className.forEach && className.map) { for (var i = 0; i < className.length; ++i) this.classList.remove(className[i]); } else this.classList.remove(className); return this; }; AElement.prototype.getComputedStyleValue = function (key) { return window.getComputedStyle(this).getPropertyValue(key); }; AElement.prototype.getFontSize = function () { return parseFloat(this.getComputedStyleValue('font-size').replace('px', '')); }; AElement.prototype.findChildAfter = function (obj) { var r = 0; for (var i = 0; i < this.childNodes.length; ++i) { if (obj == this.childNodes[i]) { r = i + 1; break; } } if (this.childNodes[r]) return this.childNodes[r]; return undefined; }; AElement.prototype.findChildBefore = function (obj) { var r = 0; for (var i = 0; i < this.childNodes.length; ++i) { if (obj == this.childNodes[i]) { r = i - 1; break; } } if (this.childNodes[r]) return this.childNodes[r]; return undefined; }; AElement.prototype.addChildBefore = function (newItem, bf) { this.insertBefore(newItem, bf); return this; }; AElement.prototype.addChildAfter = function (newItem, at) { var atIdx; if (at) { atIdx = Array.prototype.indexOf.call(this.childNodes, at); if (atIdx >= 0) { this.insertBefore(newItem, this.childNodes[atIdx + 1]); } else { throw new Error("Failed to execute 'addChildAfter' on 'Node': The node before which the new node is to be inserted is not a child of this node."); } } else { this.insertBefore(newItem, this.firstChild); } return this; }; /** * @returns {DOMRect} */ AElement.prototype.getBoundingRecursiveRect = function (depth) { if (depth === undefined) depth = 10000; var current, next; var oo = 1000000; var ac = { left: oo, right: -oo, top: oo, bottom: -oo, width: 0, height: 0 }; var stacks = [{ e: this, d: 0 }]; while (stacks.length > 0) { current = stacks.pop(); if (current.e.getBoundingClientRect) { var cRect = current.e.getBoundingClientRect(); if (!cRect || !(cRect.width || cRect.height || cRect.left || cRect.right)) continue; ac.left = Math.min(ac.left, cRect.left); ac.top = Math.min(ac.top, cRect.top); ac.bottom = Math.max(ac.bottom, cRect.bottom); ac.right = Math.max(ac.right, cRect.right); ac.height = ac.bottom - ac.top; ac.width = ac.right - ac.left; var childNodes = current.e.childNodes; if (childNodes && childNodes.length > 0 && current.d < depth) { for (var i = 0; i < childNodes.length; ++i) { next = { e: childNodes[i], d: current.d + 1 }; stacks.push(next); } } } } return ac; }; /*** * * @param parent * @returns {boolean} */ AElement.prototype.isDescendantOf = function (parent) { if (!parent || !parent.childNodes || !parent.childNodes.length) return false; var child = this; while (child) { if (child === parent) return true; child = child.parentNode; } return false; }; /*************************** **********************/ AElement.prototype.getCSSRules = function () { var sheets = document.styleSheets; var ret = []; this.matches = this.matches || this.webkitMatchesSelector || this.mozMatchesSelector || this.msMatchesSelector || this.oMatchesSelector; for (var i in sheets) { if (sheets[i].href) continue;//because can not access, you must clone link node instead var rules = sheets[i].rules || sheets[i].cssRules; for (var r in rules) { if (this.matches(rules[r].selectorText)) { ret.push(rules[r]); } } } return ret; }; /*** * @returns {Promise} */ /*** * WARNING: this function may be unsafe */ AElement.prototype.afterDisplayed = function (requestTimesOut) { if (!requestTimesOut) requestTimesOut = 24 * 3600 * 33; // var tracer = new Error(); var current = this; return new Promise(function (resolve, reject) { function trace() { if (requestTimesOut < 0) { // reject(tracer); // if (absol.BUILD && absol.BUILD.version == "DEBUG") // console.warn("Element not displayed", trace); } else { requestTimesOut--; var bound = current.getBoundingClientRect(); if (bound.width > 0 || bound.height > 0) { resolve(); } else { setTimeout(trace, 33); return; } } } trace(); }); }; !(function () { var origin = AElement.prototype.on; if (_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].isSafari && !_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].isMobile) { AElement.prototype.on = function () { if (!this.isSupportedEvent('mouseleave') && arguments[0] == 'mouseleave') { this.defineEvent('mouseleave'); var mouseLeaveEventHandler = function (event) { var bound = this.getBoundingClientRect(); var ok = false; ok |= event.clientX < bound.left + 1; ok |= event.clientX >= bound.right - 1; ok |= event.clientY < bound.top + 1; ok |= event.clientY >= bound.bottom - 1; if (ok) this.emit('mouseleave', event); }; this.addEventListener('mouseleave', mouseLeaveEventHandler, true); } origin.apply(this, arguments); return this; }; } if (_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].isFirefox) { AElement.prototype.on = function () { if (!this.isSupportedEvent('wheel') && arguments[0] == 'wheel') { this.defineEvent('wheel'); var wheelEventHandler = function (oldEvent) { //clone event to avoid some lib fix it var event = oldEvent.absolEvent; if (!event) { event = Object.assign({}, oldEvent); for (var i = 0; i < AElement.eventProperties.length; ++i) { var key = AElement.eventProperties[i]; if (typeof (event[key]) == 'function') { event[key] = event[key].bind(oldEvent); } } event.preventDefault = function () { oldEvent.preventDefault(); }; if (!event.mozFixWheelScale) { event.mozDeltaY = oldEvent.deltaY; event.mozFixWheelScale = true; Object.defineProperty(event, 'deltaY', { get: function () { return this.mozDeltaY * 100 / 3; } }); } oldEvent.absolEvent = event; } this.emit('wheel', event); }; this.addEventListener('wheel', wheelEventHandler); } origin.apply(this, arguments); return this; }; } }()); AElement.eventProperties = ["altKey", "bubbles", "button", "buttons", "cancelBubble", "cancelable", "clientX", "clientY", "composed", "ctrlKey", "currentTarget", "defaultPrevented", "deltaMode", "deltaX", "deltaY", "deltaZ", "detail", "eventPhase", "explicitOriginalTarget", "isTrusted", "layerX", "layerY", "metaKey", "movementX", "movementY", "mozInputSource", "mozPressure", "offsetX", "offsetY", "originalTarget", "pageX", "pageY", "rangeOffset", "rangeParent", "region", "relatedTarget", "returnValue", "screenX", "screenY", "shiftKey", "srcElement", "target", "timeStamp", "type", "deltaMode", "deltaX", "deltaY", "deltaZ"]; /* harmony default export */ __webpack_exports__["a"] = (AElement); /***/ }), /* 7 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var _AElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); /* harmony import */ var _AElementNS__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(38); /* harmony import */ var _DomSignal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9); /** * * @constructor */ function ResizeSystem() { this.elts = []; this.cache = []; this.cacheOf = null; this.lastResizeTime = 0; this.pendingElts = {}; window.addEventListener('resize', this.update.bind(this)); this['goDown' + 'AndCache'] = this.goDownAndCache.bind(this); this['notify' + 'ToElt'] = this.notifyToElt.bind(this); setTimeout(() => { this.domSignal = new _DomSignal__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"](); this.domSignal.on('request_update_signal', this.update.bind(this)); this.domSignal.on('request_update_pending_signal', this.updatePending.bind(this)); }, 1000); } /*** * * @param {AElement | AElementNS} elt */ ResizeSystem.prototype.goDownAndCache = function (elt) { if (this.notifyToElt(elt)) this.cache.push(elt); if (elt.childNodes) { Array.prototype.forEach.call(elt.childNodes, this.goDownAndCache); } }; ResizeSystem.prototype.notifyToElt = function (elt) { try { if (typeof elt.requestUpdateSize == 'function') { elt.requestUpdateSize(); return true; } else if (typeof elt.updateSize == 'function') { elt.updateSize(); return true; } else if (typeof elt.onresize == 'function') { elt.onresize(); return true; } } catch (err) { console.error(err); } }; ResizeSystem.prototype.update = function () { var now = Date.now(); if (now - 100 > this.lastResizeTime) { this.removeTrash(); this.cache = undefined; } this.lastResizeTime = now; if (this.cacheOf !== null) { this.cache = undefined; this.cacheOf = null; } if (this.cache === undefined) { this.cache = []; this.elts.forEach(this.goDownAndCache); } else { this.cache.forEach(this.notifyToElt); } }; ResizeSystem.prototype.requestUpdateSignal = function () { if (!this.domSignal) return; this.domSignal.emit('request_update_signal'); }; ResizeSystem.prototype.removeTrash = function () { this.elts = this.elts.filter(function (element) { return _AElement__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].prototype.isDescendantOf.call(element, document.body); }); }; /*** * * @param {AElement| AElementNS | Node} fromElt * @param {boolean=} toRoot * @returns {boolean} */ ResizeSystem.prototype.updateUp = function (fromElt, toRoot) { var found = false; while (fromElt && (!found || toRoot)) { found = this.notifyToElt(fromElt); fromElt = fromElt.parentElement; } return found; }; ResizeSystem.prototype.updatePending = function () { var o = this.pendingElts; this.pendingElts = {}; for (var key in o) { this.notifyToElt(o[key]); } }; /*** * * @param {AElement| AElementNS | Node} fromElt * @param {boolean=} toRoot * @returns {boolean} */ ResizeSystem.prototype.requestUpdateUpSignal = function (fromElt, toRoot) { if (!this.domSignal) return; var elts = []; var found = false; while (fromElt && (!found || toRoot)) { if (typeof fromElt.requestUpdateSize == 'function' || typeof fromElt.updateSize == 'function' || typeof fromElt.onresize == 'function' ) { elts.push(fromElt); found = true; } fromElt = fromElt.parentElement; } var pendingElts = this.pendingElts; elts.forEach(function (elt) { if (!elt.__resize_ident__) elt.__resize_ident__ = Date.now() + '_' + Math.random(); if (!pendingElts[elt.__resize_ident__]) pendingElts[elt.__resize_ident__] = elt; }); this.domSignal.emit('request_update_pending_signal'); return found; }; /*** * * @param {AElement| AElementNS | Node} fromElt * @returns {boolean} */ ResizeSystem.prototype.updateDown = function (fromElt) { var now = Date.now(); if (now - 100 > this.lastResizeTime) { this.cache = undefined; } this.lastResizeTime = now; if (this.cacheOf !== fromElt) { this.cache = undefined; this.cacheOf = fromElt; } if (this.cache === undefined) { this.cache = []; this.goDownAndCache(fromElt); } else { this.cache.forEach(this.notifyToElt); } }; /*** * * @param {AElement| AElementNS | Node} elt * @return {boolean} */ ResizeSystem.prototype.add = function (elt) { for (var i = 0; i < this.elts.length; ++i) if (_AElement__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].prototype.isDescendantOf.call(elt, this.elts[i])) { return false; } this.elts = this.elts.filter(function (e) { return !_AElement__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].prototype.isDescendantOf.call(e, elt); }); this.removeTrash(); this.cache = undefined; this.elts.push(elt); return true; }; /* harmony default export */ __webpack_exports__["a"] = (new ResizeSystem()); /***/ }), /* 8 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(global) {/* unused harmony export calcBenchmark */ /* harmony import */ var _BrowserRules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75); /* harmony import */ var _BrowserRules__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_BrowserRules__WEBPACK_IMPORTED_MODULE_0__); /** * * @param rulesheet * @param {string=} userAgent */ function BrowserDetector(rulesheet, userAgent) { this.au = userAgent || (global.navigator ? (navigator.userAgent || '') : ''); this.rulesheet = rulesheet; this.os = this.detectByRules(this.rulesheet.os); this.device = this.detectByRules(this.rulesheet.device); this.engine = this.detectByRules(this.rulesheet.engine); this.browser = this.detectByRules(this.rulesheet.browser); this.isFirefox = this.au.toLowerCase().indexOf('firefox') > -1; this.isCococ = this.au.toLowerCase().indexOf('coc_coc_browser') >= 1; this.isSafari = this.browser.type === 'safari' || (!this.isCococ && this.au.toLowerCase().indexOf('safari') > -1 && this.au.toLowerCase().indexOf('win') < 0 && this.au.toLowerCase().indexOf('android') < 0); // this.isSafari = /constructor/i.test(window.HTMLElement) || window.safari; this.isMobile = this.au.indexOf('KFFOWI') > -1 || this.au.toLowerCase().indexOf('mobile') > -1 || this.device.type === 'iphone'|| this.device.type === 'ipad'; this.isMacOSWebView = /Macintosh/.test(this.au) && /AppWebkit/.test(this.au) && !/Safari/.test(this.au); this.isChromeIOS = /CriOS\/[\d]+/.test(this.au); this.hasTouch = 'ontouchstart' in global || global.DocumentTouch && document instanceof global.DocumentTouch || (global.navigator && (navigator.maxTouchPoints > 0 || global.navigator.msMaxTouchPoints > 0)); this.isTouchDevice = this.isMobile && this.hasTouch; this.supportPassiveEvent = (function () { var supportsPassiveOption = false; try { var opts = Object.defineProperty({}, 'passive', { get: function () { supportsPassiveOption = true; } }); global.addEventListener('test', null, opts); global.removeEventListener('test', null, opts); } catch (e) { } return supportsPassiveOption; })(); this.supportGridLayout = global.document && (typeof document.createElement('div').style.grid === 'string'); Object.defineProperty(this, 'zoom', { get: function () { return this.getZoom(); }, enumerable: true, configurable: false }); } BrowserDetector.prototype.detectByRules = function (rules) { var result = {}; for (var i = 0; i < rules.length; ++i) { var rule = rules[i]; var type = rule[0]; var rgx = rule[1]; if (typeof (rgx) == 'function') { rgx = rgx(this.au.toLowerCase()); } if (Object.prototype.toString.call(rgx).indexOf('RegExp') >= 0) { var matched = this.au.toLowerCase().match(rgx); if (matched) { result.type = type; if (matched[1]) { result.version = matched[1].replace(/_/g, '.'); } break; } } else if (typeof (rgx) == 'string') { if (this.au.toLowerCase().indexOf(rgx) >= 0) { result.type = type; } } } result.type = result.type || 'unknow'; result.version = result.version || '0'; return result; }; BrowserDetector.prototype.getZoom = function () { //todo: wrong on chrome var type; if ('chrome' in global) { type = "chrome"; } else if (this.isSafari) { type = 'safari'; } else if ('orientation' in global && 'webkitRequestAnimationFrame' in global) { type = 'webkitMobile'; } else if ('webkitRequestAnimationFrame' in global) { type = 'webkit'; } switch (type) { case 'chrome': return Math.round(((global.outerWidth) / global.innerWidth) * 100) / 100; case 'safari': return Math.round(((document.documentElement.clientWidth) / global.innerWidth) * 100) / 100; case 'webkitMobile': return ((Math.abs(global.orientation) == 90) ? screen.height : screen.width) / global.innerWidth; case 'webkit': return (() => { var important = (str) => { return str.replace(/;/g, " !important;"); }; var div = document.createElement('div'); div.innerHTML = "1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>0"; div.setAttribute('style', important('font: 100px/1em sans-serif; -webkit-text-size-adjust: none; text-size-adjust: none; height: auto; width: 1em; padding: 0; overflow: visible;')); var container = document.createElement('div'); container.setAttribute('style', important('width:0; height:0; overflow:hidden; visibility:hidden; position: absolute;')); container.appendChild(div); document.body.appendChild(container); var zoom = 1000 / div.clientHeight; zoom = Math.round(zoom * 100) / 100; document.body.removeChild(container); return zoom; })(); default: return 1; } return 1; }; function calcBenchmark() { var now = new Date().getTime(); var i = 0; while (now === new Date().getTime()) { } now++; while (now === new Date().getTime()) { ++i } return i; } BrowserDetector.prototype.calcBenchmark = calcBenchmark; /* harmony default export */ __webpack_exports__["a"] = (new BrowserDetector(_BrowserRules__WEBPACK_IMPORTED_MODULE_0___default.a)); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12))) /***/ }), /* 9 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export setDomImmediate */ /* unused harmony export clearDomImmediate */ /* harmony import */ var _EventEmitter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3); /* harmony import */ var _AElement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); /* harmony import */ var _OOP__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2); /* harmony import */ var _AttachHook__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(18); /* harmony import */ var _Code_safeThrow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(11); /*** * * @extends EventEmitter * @param {AElement=} attachHookElt * @constructor */ function DomSignal(attachHookElt) { _EventEmitter__WEBPACK_IMPORTED_MODULE_0__[/* default */ "b"].call(this); this.signals = {}; this.ev_attached = this.ev_attached.bind(this); this.$attachhook = attachHookElt || this.createBuildInAttachHook(); this.$attachhookParent = (attachHookElt && attachHookElt.parentElement) || null; this.$attachhook.on('attached', this.ev_attached); } _OOP__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].mixClass(DomSignal, _EventEmitter__WEBPACK_IMPORTED_MODULE_0__[/* default */ "b"]); DomSignal.prototype.createBuildInAttachHook = function () { var elt = document.createElement('img'); Object.defineProperties(elt, Object.getOwnPropertyDescriptors(_AElement__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].prototype)); Object.defineProperties(elt, Object.getOwnPropertyDescriptors(_AttachHook__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].prototype)); Object.defineProperties(elt, _AttachHook__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].property); _AElement__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].call(elt); elt.setAttribute('src', ''); elt.defineEvent('attached'); _AttachHook__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].call(elt); return elt; } DomSignal.prototype.execSignal = function () { var signals = this.signals; if (this.$attachhook) { this.$attachhook.remove(); this.$attachhook.resetState(); } this.signals = {}; for (var name in signals) { this.fire.apply(this, [name].concat(signals[name])); } }; DomSignal.prototype.emit = function (name) { this.signals[name] = Array.prototype.slice.call(arguments, 1); if (!this.$attachhookParent) { this.$attachhookParent = document.body; } if (!this.$attachhook.parentElement) { this.$attachhookParent.appendChild(this.$attachhook); } }; DomSignal.prototype.ev_attached = function () { this.execSignal(); }; /* harmony default export */ __webpack_exports__["a"] = (DomSignal); var currentAT = null; var callbackList = {}; var id = 0; function setDomImmediate(callback) { var cid = ++id; callbackList[cid] = { exec: callback, args: Array.prototype.slice.call(arguments, 1) }; if (!currentAT) { currentAT = document.createElement('img'); currentAT.setAttribute('src', ''); currentAT.addEventListener('error', function () { currentAT.remove(); currentAT = null; Object.keys(callbackList).map(function (key) { var cb = callbackList[key]; delete callbackList[key]; if (cb) { try { cb.exec.call(null, cb.args); } catch (error) { Object(_Code_safeThrow__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"])(error); } } }) }) } return cid; } function clearDomImmediate(id) { delete callbackList[id]; } /***/ }), /* 10 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return parseStyleAttr; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return parseClassAttr; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return parseMeasureValue; }); /** * * @param {String} text * @returns {Object} */ function parseStyleAttr(text) { return text.split(';').map(function (line) { var parts = line.split(':'); if (parts.length < 2) return null; var key = parts.shift().trim(); var value = parts.join(':').trim(); if (key.length == 0 || value.length == 0) return null; return [key, value]; }).filter(function (it) { return it != null }).reduce(function (ac, cr) { ac[cr[0]] = cr[1]; return ac; }, {}); } /** * * @param {String} text * @returns {Array<String>} */ function parseClassAttr(text) { return text.trim().split(/\s+/); } /** * * @param mValue * @returns {{unit: null, value: string}|{unit: string, value: number}|null} */ function parseMeasureValue(mValue) { if (mValue === 'auto') return { unit: null, value: 'auto' }; if (mValue === 'match_parent') return { unit: null, value: 'match_parent' }; var value = NaN; var unit = null; var matched; if (typeof mValue === "number") { value = mValue; unit = 'px'; } else if (typeof mValue === "string") { matched = mValue.match(/([+-]?([0-9]*[.])?[0-9]+([eE][+-]?[0-9]+)?)(px|%|vw|vh)?/i); if (matched) { value = parseFloat(matched[1]); unit = matched[4]; } } if (isNaN(value)) return null; unit = unit || 'px'; return { value: value, unit: unit }; } /***/ }), /* 11 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return safeThrow; }); function safeThrow(error) { setTimeout(function () { throw error; }, 0); } /***/ }), /* 12 */ /***/ (function(module, exports) { var g; // This works in non-strict mode g = (function() { return this; })(); try { // This works if eval is allowed (see CSP) g = g || new Function("return this")(); } catch (e) { // This works if the window reference is available if (typeof window === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(global) {/*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh <http://feross.org> * @license MIT */ /* eslint-disable no-proto */ var base64 = __webpack_require__(325) var ieee754 = __webpack_require__(326) var isArray = __webpack_require__(59) exports.Buffer = Buffer exports.SlowBuffer = SlowBuffer exports.INSPECT_MAX_BYTES = 50 /** * If `Buffer.TYPED_ARRAY_SUPPORT`: * === true Use Uint8Array implementation (fastest) * === false Use Object implementation (most compatible, even IE6) * * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, * Opera 11.6+, iOS 4.2+. * * Due to various browser bugs, sometimes the Object implementation will be used even * when the browser supports typed arrays. * * Note: * * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. * * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. * * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of * incorrect length in some situations. * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they * get the Object implementation, which is slower but behaves correctly. */ Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport() /* * Export kMaxLength after typed array support is determined. */ exports.kMaxLength = kMaxLength() function typedArraySupport () { try { var arr = new Uint8Array(1) arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} return arr.foo() === 42 && // typed array instances can be augmented typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` } catch (e) { return false } } function kMaxLength () { return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff } function createBuffer (that, length) { if (kMaxLength() < length) { throw new RangeError('Invalid typed array length') } if (Buffer.TYPED_ARRAY_SUPPORT) { // Return an augmented `Uint8Array` instance, for best performance that = new Uint8Array(length) that.__proto__ = Buffer.prototype } else { // Fallback: Return an object instance of the Buffer class if (that === null) { that = new Buffer(length) } that.length = length } return that } /** * The Buffer constructor returns instances of `Uint8Array` that have their * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of * `Uint8Array`, so the returned instances will have all the node `Buffer` methods * and the `Uint8Array` methods. Square bracket notation works as expected -- it * returns a single octet. * * The `Uint8Array` prototype remains unmodified. */ function Buffer (arg, encodingOrOffset, length) { if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { return new Buffer(arg, encodingOrOffset, length) } // Common case. if (typeof arg === 'number') { if (typeof encodingOrOffset === 'string') { throw new Error( 'If encoding is specified then the first argument must be a string' ) } return allocUnsafe(this, arg) } return from(this, arg, encodingOrOffset, length) } Buffer.poolSize = 8192 // not used by this implementation // TODO: Legacy, not needed anymore. Remove in next major version. Buffer._augment = function (arr) { arr.__proto__ = Buffer.prototype return arr } function from (that, value, encodingOrOffset, length) { if (typeof value === 'number') { throw new TypeError('"value" argument must not be a number') } if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { return fromArrayBuffer(that, value, encodingOrOffset, length) } if (typeof value === 'string') { return fromString(that, value, encodingOrOffset) } return fromObject(that, value) } /** * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError * if value is a number. * Buffer.from(str[, encoding]) * Buffer.from(array) * Buffer.from(buffer) * Buffer.from(arrayBuffer[, byteOffset[, length]]) **/ Buffer.from = function (value, encodingOrOffset, length) { return from(null, value, encodingOrOffset, length) } if (Buffer.TYPED_ARRAY_SUPPORT) { Buffer.prototype.__proto__ = Uint8Array.prototype Buffer.__proto__ = Uint8Array if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) { // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 Object.defineProperty(Buffer, Symbol.species, { value: null, configurable: true }) } } function assertSize (size) { if (typeof size !== 'number') { throw new TypeError('"size" argument must be a number') } else if (size < 0) { throw new RangeError('"size" argument must not be negative') } } function alloc (that, size, fill, encoding) { assertSize(size) if (size <= 0) { return createBuffer(that, size) } if (fill !== undefined) { // Only pay attention to encoding if it's a string. This // prevents accidentally sending in a number that would // be interpretted as a start offset. return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill) } return createBuffer(that, size) } /** * Creates a new filled Buffer instance. * alloc(size[, fill[, encoding]]) **/ Buffer.alloc = function (size, fill, encoding) { return alloc(null, size, fill, encoding) } function allocUnsafe (that, size) { assertSize(size) that = createBuffer(that, size < 0 ? 0 : checked(size) | 0) if (!Buffer.TYPED_ARRAY_SUPPORT) { for (var i = 0; i < size; ++i) { that[i] = 0 } } return that } /** * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. * */ Buffer.allocUnsafe = function (size) { return allocUnsafe(null, size) } /** * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. */ Buffer.allocUnsafeSlow = function (size) { return allocUnsafe(null, size) } function fromString (that, string, encoding) { if (typeof encoding !== 'string' || encoding === '') { encoding = 'utf8' } if (!Buffer.isEncoding(encoding)) { throw new TypeError('"encoding" must be a valid string encoding') } var length = byteLength(string, encoding) | 0 that = createBuffer(that, length) var actual = that.write(string, encoding) if (actual !== length) { // Writing a hex string, for example, that contains invalid characters will // cause everything after the first invalid character to be ignored. (e.g. // 'abxxcd' will be treated as 'ab') that = that.slice(0, actual) } return that } function fromArrayLike (that, array) { var length = array.length < 0 ? 0 : checked(array.length) | 0 that = createBuffer(that, length) for (var i = 0; i < length; i += 1) { that[i] = array[i] & 255 } return that } function fromArrayBuffer (that, array, byteOffset, length) { array.byteLength // this throws if `array` is not a valid ArrayBuffer if (byteOffset < 0 || array.byteLength < byteOffset) { throw new RangeError('\'offset\' is out of bounds') } if (array.byteLength < byteOffset + (length || 0)) { throw new RangeError('\'length\' is out of bounds') } if (byteOffset === undefined && length === undefined) { array = new Uint8Array(array) } else if (length === undefined) { array = new Uint8Array(array, byteOffset) } else { array = new Uint8Array(array, byteOffset, length) } if (Buffer.TYPED_ARRAY_SUPPORT) { // Return an augmented `Uint8Array` instance, for best performance that = array that.__proto__ = Buffer.prototype } else { // Fallback: Return an object instance of the Buffer class that = fromArrayLike(that, array) } return that } function fromObject (that, obj) { if (Buffer.isBuffer(obj)) { var len = checked(obj.length) | 0 that = createBuffer(that, len) if (that.length === 0) { return that } obj.copy(that, 0, 0, len) return that } if (obj) { if ((typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer) || 'length' in obj) { if (typeof obj.length !== 'number' || isnan(obj.length)) { return createBuffer(that, 0) } return fromArrayLike(that, obj) } if (obj.type === 'Buffer' && isArray(obj.data)) { return fromArrayLike(that, obj.data) } } throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') } function checked (length) { // Note: cannot use `length < kMaxLength()` here because that fails when // length is NaN (which is otherwise coerced to zero.) if (length >= kMaxLength()) { throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes') } return length | 0 } function SlowBuffer (length) { if (+length != length) { // eslint-disable-line eqeqeq length = 0 } return Buffer.alloc(+length) } Buffer.isBuffer = function isBuffer (b) { return !!(b != null && b._isBuffer) } Buffer.compare = function compare (a, b) { if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { throw new TypeError('Arguments must be Buffers') } if (a === b) return 0 var x = a.length var y = b.length for (var i = 0, len = Math.min(x, y); i < len; ++i) { if (a[i] !== b[i]) { x = a[i] y = b[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } Buffer.isEncoding = function isEncoding (encoding) { switch (String(encoding).toLowerCase()) { case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'latin1': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return true default: return false } } Buffer.concat = function concat (list, length) { if (!isArray(list)) { throw new TypeError('"list" argument must be an Array of Buffers') } if (list.length === 0) { return Buffer.alloc(0) } var i if (length === undefined) { length = 0 for (i = 0; i < list.length; ++i) { length += list[i].length } } var buffer = Buffer.allocUnsafe(length) var pos = 0 for (i = 0; i < list.length; ++i) { var buf = list[i] if (!Buffer.isBuffer(buf)) { throw new TypeError('"list" argument must be an Array of Buffers') } buf.copy(buffer, pos) pos += buf.length } return buffer } function byteLength (string, encoding) { if (Buffer.isBuffer(string)) { return string.length } if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { return string.byteLength } if (typeof string !== 'string') { string = '' + string } var len = string.length if (len === 0) return 0 // Use a for loop to avoid recursion var loweredCase = false for (;;) { switch (encoding) { case 'ascii': case 'latin1': case 'binary': return len case 'utf8': case 'utf-8': case undefined: return utf8ToBytes(string).length case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return len * 2 case 'hex': return len >>> 1 case 'base64': return base64ToBytes(string).length default: if (loweredCase) return utf8ToBytes(string).length // assume utf8 encoding = ('' + encoding).toLowerCase() loweredCase = true } } } Buffer.byteLength = byteLength function slowToString (encoding, start, end) { var loweredCase = false // No need to verify that "this.length <= MAX_UINT32" since it's a read-only // property of a typed array. // This behaves neither like String nor Uint8Array in that we set start/end // to their upper/lower bounds if the value passed is out of range. // undefined is handled specially as per ECMA-262 6th Edition, // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. if (start === undefined || start < 0) { start = 0 } // Return early if start > this.length. Done here to prevent potential uint32 // coercion fail below. if (start > this.length) { return '' } if (end === undefined || end > this.length) { end = this.length } if (end <= 0) { return '' } // Force coersion to uint32. This will also coerce falsey/NaN values to 0. end >>>= 0 start >>>= 0 if (end <= start) { return '' } if (!encoding) encoding = 'utf8' while (true) { switch (encoding) { case 'hex': return hexSlice(this, start, end) case 'utf8': case 'utf-8': return utf8Slice(this, start, end) case 'ascii': return asciiSlice(this, start, end) case 'latin1': case 'binary': return latin1Slice(this, start, end) case 'base64': return base64Slice(this, start, end) case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return utf16leSlice(this, start, end) default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) encoding = (encoding + '').toLowerCase() loweredCase = true } } } // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect // Buffer instances. Buffer.prototype._isBuffer = true function swap (b, n, m) { var i = b[n] b[n] = b[m] b[m] = i } Buffer.prototype.swap16 = function swap16 () { var len = this.length if (len % 2 !== 0) { throw new RangeError('Buffer size must be a multiple of 16-bits') } for (var i = 0; i < len; i += 2) { swap(this, i, i + 1) } return this } Buffer.prototype.swap32 = function swap32 () { var len = this.length if (len % 4 !== 0) { throw new RangeError('Buffer size must be a multiple of 32-bits') } for (var i = 0; i < len; i += 4) { swap(this, i, i + 3) swap(this, i + 1, i + 2) } return this } Buffer.prototype.swap64 = function swap64 () { var len = this.length if (len % 8 !== 0) { throw new RangeError('Buffer size must be a multiple of 64-bits') } for (var i = 0; i < len; i += 8) { swap(this, i, i + 7) swap(this, i + 1, i + 6) swap(this, i + 2, i + 5) swap(this, i + 3, i + 4) } return this } Buffer.prototype.toString = function toString () { var length = this.length | 0 if (length === 0) return '' if (arguments.length === 0) return utf8Slice(this, 0, length) return slowToString.apply(this, arguments) } Buffer.prototype.equals = function equals (b) { if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') if (this === b) return true return Buffer.compare(this, b) === 0 } Buffer.prototype.inspect = function inspect () { var str = '' var max = exports.INSPECT_MAX_BYTES if (this.length > 0) { str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') if (this.length > max) str += ' ... ' } return '<Buffer ' + str + '>' } Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { if (!Buffer.isBuffer(target)) { throw new TypeError('Argument must be a Buffer') } if (start === undefined) { start = 0 } if (end === undefined) { end = target ? target.length : 0 } if (thisStart === undefined) { thisStart = 0 } if (thisEnd === undefined) { thisEnd = this.length } if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { throw new RangeError('out of range index') } if (thisStart >= thisEnd && start >= end) { return 0 } if (thisStart >= thisEnd) { return -1 } if (start >= end) { return 1 } start >>>= 0 end >>>= 0 thisStart >>>= 0 thisEnd >>>= 0 if (this === target) return 0 var x = thisEnd - thisStart var y = end - start var len = Math.min(x, y) var thisCopy = this.slice(thisStart, thisEnd) var targetCopy = target.slice(start, end) for (var i = 0; i < len; ++i) { if (thisCopy[i] !== targetCopy[i]) { x = thisCopy[i] y = targetCopy[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, // OR the last index of `val` in `buffer` at offset <= `byteOffset`. // // Arguments: // - buffer - a Buffer to search // - val - a string, Buffer, or number // - byteOffset - an index into `buffer`; will be clamped to an int32 // - encoding - an optional encoding, relevant is val is a string // - dir - true for indexOf, false for lastIndexOf function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { // Empty buffer means no match if (buffer.length === 0) return -1 // Normalize byteOffset if (typeof byteOffset === 'string') { encoding = byteOffset byteOffset = 0 } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff } else if (byteOffset < -0x80000000) { byteOffset = -0x80000000 } byteOffset = +byteOffset // Coerce to Number. if (isNaN(byteOffset)) { // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer byteOffset = dir ? 0 : (buffer.length - 1) } // Normalize byteOffset: negative offsets start from the end of the buffer if (byteOffset < 0) byteOffset = buffer.length + byteOffset if (byteOffset >= buffer.length) { if (dir) return -1 else byteOffset = buffer.length - 1 } else if (byteOffset < 0) { if (dir) byteOffset = 0 else return -1 } // Normalize val if (typeof val === 'string') { val = Buffer.from(val, encoding) } // Finally, search either indexOf (if dir is true) or lastIndexOf if (Buffer.isBuffer(val)) { // Special case: looking for empty string/buffer always fails if (val.length === 0) { return -1 } return arrayIndexOf(buffer, val, byteOffset, encoding, dir) } else if (typeof val === 'number') { val = val & 0xFF // Search for a byte value [0-255] if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') { if (dir) { return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) } else { return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) } } return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) } throw new TypeError('val must be string, number or Buffer') } function arrayIndexOf (arr, val, byteOffset, encoding, dir) { var indexSize = 1 var arrLength = arr.length var valLength = val.length if (encoding !== undefined) { encoding = String(encoding).toLowerCase() if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { if (arr.length < 2 || val.length < 2) { return -1 } indexSize = 2 arrLength /= 2 valLength /= 2 byteOffset /= 2 } } function read (buf, i) { if (indexSize === 1) { return buf[i] } else { return buf.readUInt16BE(i * indexSize) } } var i if (dir) { var foundIndex = -1 for (i = byteOffset; i < arrLength; i++) { if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { if (foundIndex === -1) foundIndex = i if (i - foundIndex + 1 === valLength) return foundIndex * indexSize } else { if (foundIndex !== -1) i -= i - foundIndex foundIndex = -1 } } } else { if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength for (i = byteOffset; i >= 0; i--) { var found = true for (var j = 0; j < valLength; j++) { if (read(arr, i + j) !== read(val, j)) { found = false break } } if (found) return i } } return -1 } Buffer.prototype.includes = function includes (val, byteOffset, encoding) { return this.indexOf(val, byteOffset, encoding) !== -1 } Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, true) } Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, false) } function hexWrite (buf, string, offset, length) { offset = Number(offset) || 0 var remaining = buf.length - offset if (!length) { length = remaining } else { length = Number(length) if (length > remaining) { length = remaining } } // must be an even number of digits var strLen = string.length if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') if (length > strLen / 2) { length = strLen / 2 } for (var i = 0; i < length; ++i) { var parsed = parseInt(string.substr(i * 2, 2), 16) if (isNaN(parsed)) return i buf[offset + i] = parsed } return i } function utf8Write (buf, string, offset, length) { return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) } function asciiWrite (buf, string, offset, length) { return blitBuffer(asciiToBytes(string), buf, offset, length) } function latin1Write (buf, string, offset, length) { return asciiWrite(buf, string, offset, length) } function base64Write (buf, string, offset, length) { return blitBuffer(base64ToBytes(string), buf, offset, length) } function ucs2Write (buf, string, offset, length) { return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) } Buffer.prototype.write = function write (string, offset, length, encoding) { // Buffer#write(string) if (offset === undefined) { encoding = 'utf8' length = this.length offset = 0 // Buffer#write(string, encoding) } else if (length === undefined && typeof offset === 'string') { encoding = offset length = this.length offset = 0 // Buffer#write(string, offset[, length][, encoding]) } else if (isFinite(offset)) { offset = offset | 0 if (isFinite(length)) { length = length | 0 if (encoding === undefined) encoding = 'utf8' } else { encoding = length length = undefined } // legacy write(string, encoding, offset, length) - remove in v0.13 } else { throw new Error( 'Buffer.write(string, encoding, offset[, length]) is no longer supported' ) } var remaining = this.length - offset if (length === undefined || length > remaining) length = remaining if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { throw new RangeError('Attempt to write outside buffer bounds') } if (!encoding) encoding = 'utf8' var loweredCase = false for (;;) { switch (encoding) { case 'hex': return hexWrite(this, string, offset, length) case 'utf8': case 'utf-8': return utf8Write(this, string, offset, length) case 'ascii': return asciiWrite(this, string, offset, length) case 'latin1': case 'binary': return latin1Write(this, string, offset, length) case 'base64': // Warning: maxLength not taken into account in base64Write return base64Write(this, string, offset, length) case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return ucs2Write(this, string, offset, length) default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) encoding = ('' + encoding).toLowerCase() loweredCase = true } } } Buffer.prototype.toJSON = function toJSON () { return { type: 'Buffer', data: Array.prototype.slice.call(this._arr || this, 0) } } function base64Slice (buf, start, end) { if (start === 0 && end === buf.length) { return base64.fromByteArray(buf) } else { return base64.fromByteArray(buf.slice(start, end)) } } function utf8Slice (buf, start, end) { end = Math.min(buf.length, end) var res = [] var i = start while (i < end) { var firstByte = buf[i] var codePoint = null var bytesPerSequence = (firstByte > 0xEF) ? 4 : (firstByte > 0xDF) ? 3 : (firstByte > 0xBF) ? 2 : 1 if (i + bytesPerSequence <= end) { var secondByte, thirdByte, fourthByte, tempCodePoint switch (bytesPerSequence) { case 1: if (firstByte < 0x80) { codePoint = firstByte } break case 2: secondByte = buf[i + 1] if ((secondByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) if (tempCodePoint > 0x7F) { codePoint = tempCodePoint } } break case 3: secondByte = buf[i + 1] thirdByte = buf[i + 2] if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { codePoint = tempCodePoint } } break case 4: secondByte = buf[i + 1] thirdByte = buf[i + 2] fourthByte = buf[i + 3] if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { codePoint = tempCodePoint } } } } if (codePoint === null) { // we did not generate a valid codePoint so insert a // replacement char (U+FFFD) and advance only 1 byte codePoint = 0xFFFD bytesPerSequence = 1 } else if (codePoint > 0xFFFF) { // encode to utf16 (surrogate pair dance) codePoint -= 0x10000 res.push(codePoint >>> 10 & 0x3FF | 0xD800) codePoint = 0xDC00 | codePoint & 0x3FF } res.push(codePoint) i += bytesPerSequence } return decodeCodePointsArray(res) } // Based on http://stackoverflow.com/a/22747272/680742, the browser with // the lowest limit is Chrome, with 0x10000 args. // We go 1 magnitude less, for safety var MAX_ARGUMENTS_LENGTH = 0x1000 function decodeCodePointsArray (codePoints) { var len = codePoints.length if (len <= MAX_ARGUMENTS_LENGTH) { return String.fromCharCode.apply(String, codePoints) // avoid extra slice() } // Decode in chunks to avoid "call stack size exceeded". var res = '' var i = 0 while (i < len) { res += String.fromCharCode.apply( String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) ) } return res } function asciiSlice (buf, start, end) { var ret = '' end = Math.min(buf.length, end) for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i] & 0x7F) } return ret } function latin1Slice (buf, start, end) { var ret = '' end = Math.min(buf.length, end) for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i]) } return ret } function hexSlice (buf, start, end) { var len = buf.length if (!start || start < 0) start = 0 if (!end || end < 0 || end > len) end = len var out = '' for (var i = start; i < end; ++i) { out += toHex(buf[i]) } return out } function utf16leSlice (buf, start, end) { var bytes = buf.slice(start, end) var res = '' for (var i = 0; i < bytes.length; i += 2) { res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) } return res } Buffer.prototype.slice = function slice (start, end) { var len = this.length start = ~~start end = end === undefined ? len : ~~end if (start < 0) { start += len if (start < 0) start = 0 } else if (start > len) { start = len } if (end < 0) { end += len if (end < 0) end = 0 } else if (end > len) { end = len } if (end < start) end = start var newBuf if (Buffer.TYPED_ARRAY_SUPPORT) { newBuf = this.subarray(start, end) newBuf.__proto__ = Buffer.prototype } else { var sliceLen = end - start newBuf = new Buffer(sliceLen, undefined) for (var i = 0; i < sliceLen; ++i) { newBuf[i] = this[i + start] } } return newBuf } /* * Need to make sure that buffer isn't trying to write out of bounds. */ function checkOffset (offset, ext, length) { if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') } Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var val = this[offset] var mul = 1 var i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } return val } Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) { checkOffset(offset, byteLength, this.length) } var val = this[offset + --byteLength] var mul = 1 while (byteLength > 0 && (mul *= 0x100)) { val += this[offset + --byteLength] * mul } return val } Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length) return this[offset] } Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) return this[offset] | (this[offset + 1] << 8) } Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) return (this[offset] << 8) | this[offset + 1] } Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return ((this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16)) + (this[offset + 3] * 0x1000000) } Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] * 0x1000000) + ((this[offset + 1] << 16) | (this[offset + 2] << 8) | this[offset + 3]) } Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var val = this[offset] var mul = 1 var i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var i = byteLength var mul = 1 var val = this[offset + --i] while (i > 0 && (mul *= 0x100)) { val += this[offset + --i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length) if (!(this[offset] & 0x80)) return (this[offset]) return ((0xff - this[offset] + 1) * -1) } Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) var val = this[offset] | (this[offset + 1] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) var val = this[offset + 1] | (this[offset] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16) | (this[offset + 3] << 24) } Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] << 24) | (this[offset + 1] << 16) | (this[offset + 2] << 8) | (this[offset + 3]) } Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, true, 23, 4) } Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, false, 23, 4) } Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, true, 52, 8) } Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, false, 52, 8) } function checkInt (buf, value, offset, ext, max, min) { if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') if (offset + ext > buf.length) throw new RangeError('Index out of range') } Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } var mul = 1 var i = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } var i = byteLength - 1 var mul = 1 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) this[offset] = (value & 0xff) return offset + 1 } function objectWriteUInt16 (buf, value, offset, littleEndian) { if (value < 0) value = 0xffff + value + 1 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> (littleEndian ? i : 1 - i) * 8 } } Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) } else { objectWriteUInt16(this, value, offset, true) } return offset + 2 } Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) } else { objectWriteUInt16(this, value, offset, false) } return offset + 2 } function objectWriteUInt32 (buf, value, offset, littleEndian) { if (value < 0) value = 0xffffffff + value + 1 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff } } Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset + 3] = (value >>> 24) this[offset + 2] = (value >>> 16) this[offset + 1] = (value >>> 8) this[offset] = (value & 0xff) } else { objectWriteUInt32(this, value, offset, true) } return offset + 4 } Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) } else { objectWriteUInt32(this, value, offset, false) } return offset + 4 } Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 if (!noAssert) { var limit = Math.pow(2, 8 * byteLength - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } var i = 0 var mul = 1 var sub = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 if (!noAssert) { var limit = Math.pow(2, 8 * byteLength - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } var i = byteLength - 1 var mul = 1 var sub = 0 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) if (value < 0) value = 0xff + value + 1 this[offset] = (value & 0xff) return offset + 1 } Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) } else { objectWriteUInt16(this, value, offset, true) } return offset + 2 } Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) } else { objectWriteUInt16(this, value, offset, false) } return offset + 2 } Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) this[offset + 2] = (value >>> 16) this[offset + 3] = (value >>> 24) } else { objectWriteUInt32(this, value, offset, true) } return offset + 4 } Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) if (value < 0) value = 0xffffffff + value + 1 if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) } else { objectWriteUInt32(this, value, offset, false) } return offset + 4 } function checkIEEE754 (buf, value, offset, ext, max, min) { if (offset + ext > buf.length) throw new RangeError('Index out of range') if (offset < 0) throw new RangeError('Index out of range') } function writeFloat (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) } ieee754.write(buf, value, offset, littleEndian, 23, 4) return offset + 4 } Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { return writeFloat(this, value, offset, true, noAssert) } Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { return writeFloat(this, value, offset, false, noAssert) } function writeDouble (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) } ieee754.write(buf, value, offset, littleEndian, 52, 8) return offset + 8 } Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { return writeDouble(this, value, offset, true, noAssert) } Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { return writeDouble(this, value, offset, false, noAssert) } // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) Buffer.prototype.copy = function copy (target, targetStart, start, end) { if (!start) start = 0 if (!end && end !== 0) end = this.length if (targetStart >= target.length) targetStart = target.length if (!targetStart) targetStart = 0 if (end > 0 && end < start) end = start // Copy 0 bytes; we're done if (end === start) return 0 if (target.length === 0 || this.length === 0) return 0 // Fatal error conditions if (targetStart < 0) { throw new RangeError('targetStart out of bounds') } if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') if (end < 0) throw new RangeError('sourceEnd out of bounds') // Are we oob? if (end > this.length) end = this.length if (target.length - targetStart < end - start) { end = target.length - targetStart + start } var len = end - start var i if (this === target && start < targetStart && targetStart < end) { // descending copy from end for (i = len - 1; i >= 0; --i) { target[i + targetStart] = this[i + start] } } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { // ascending copy from start for (i = 0; i < len; ++i) { target[i + targetStart] = this[i + start] } } else { Uint8Array.prototype.set.call( target, this.subarray(start, start + len), targetStart ) } return len } // Usage: // buffer.fill(number[, offset[, end]]) // buffer.fill(buffer[, offset[, end]]) // buffer.fill(string[, offset[, end]][, encoding]) Buffer.prototype.fill = function fill (val, start, end, encoding) { // Handle string cases: if (typeof val === 'string') { if (typeof start === 'string') { encoding = start start = 0 end = this.length } else if (typeof end === 'string') { encoding = end end = this.length } if (val.length === 1) { var code = val.charCodeAt(0) if (code < 256) { val = code } } if (encoding !== undefined && typeof encoding !== 'string') { throw new TypeError('encoding must be a string') } if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { throw new TypeError('Unknown encoding: ' + encoding) } } else if (typeof val === 'number') { val = val & 255 } // Invalid ranges are not set to a default, so can range check early. if (start < 0 || this.length < start || this.length < end) { throw new RangeError('Out of range index') } if (end <= start) { return this } start = start >>> 0 end = end === undefined ? this.length : end >>> 0 if (!val) val = 0 var i if (typeof val === 'number') { for (i = start; i < end; ++i) { this[i] = val } } else { var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString()) var len = bytes.length for (i = 0; i < end - start; ++i) { this[i + start] = bytes[i % len] } } return this } // HELPER FUNCTIONS // ================ var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g function base64clean (str) { // Node strips out invalid characters like \n and \t from the string, base64-js does not str = stringtrim(str).replace(INVALID_BASE64_RE, '') // Node converts strings with length < 2 to '' if (str.length < 2) return '' // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not while (str.length % 4 !== 0) { str = str + '=' } return str } function stringtrim (str) { if (str.trim) return str.trim() return str.replace(/^\s+|\s+$/g, '') } function toHex (n) { if (n < 16) return '0' + n.toString(16) return n.toString(16) } function utf8ToBytes (string, units) { units = units || Infinity var codePoint var length = string.length var leadSurrogate = null var bytes = [] for (var i = 0; i < length; ++i) { codePoint = string.charCodeAt(i) // is surrogate component if (codePoint > 0xD7FF && codePoint < 0xE000) { // last char was a lead if (!leadSurrogate) { // no lead yet if (codePoint > 0xDBFF) { // unexpected trail if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) continue } else if (i + 1 === length) { // unpaired lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) continue } // valid lead leadSurrogate = codePoint continue } // 2 leads in a row if (codePoint < 0xDC00) { if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) leadSurrogate = codePoint continue } // valid surrogate pair codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 } else if (leadSurrogate) { // valid bmp char, but last char was a lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) } leadSurrogate = null // encode utf8 if (codePoint < 0x80) { if ((units -= 1) < 0) break bytes.push(codePoint) } else if (codePoint < 0x800) { if ((units -= 2) < 0) break bytes.push( codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80 ) } else if (codePoint < 0x10000) { if ((units -= 3) < 0) break bytes.push( codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80 ) } else if (codePoint < 0x110000) { if ((units -= 4) < 0) break bytes.push( codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80 ) } else { throw new Error('Invalid code point') } } return bytes } function asciiToBytes (str) { var byteArray = [] for (var i = 0; i < str.length; ++i) { // Node's code seems to be doing this and not & 0x7F.. byteArray.push(str.charCodeAt(i) & 0xFF) } return byteArray } function utf16leToBytes (str, units) { var c, hi, lo var byteArray = [] for (var i = 0; i < str.length; ++i) { if ((units -= 2) < 0) break c = str.charCodeAt(i) hi = c >> 8 lo = c % 256 byteArray.push(lo) byteArray.push(hi) } return byteArray } function base64ToBytes (str) { return base64.toByteArray(base64clean(str)) } function blitBuffer (src, dst, offset, length) { for (var i = 0; i < length; ++i) { if ((i + offset >= dst.length) || (i >= src.length)) break dst[i + offset] = src[i] } return i } function isnan (val) { return val !== val // eslint-disable-line no-self-compare } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12))) /***/ }), /* 14 */ /***/ (function(module, exports) { // shim for using process in browser var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it // don't break things. But we need to wrap it in a try catch in case it is // wrapped in strict mode code which doesn't define any globals. It's inside a // function because try/catches deoptimize in certain engines. var cachedSetTimeout; var cachedClearTimeout; function defaultSetTimout() { throw new Error('setTimeout has not been defined'); } function defaultClearTimeout () { throw new Error('clearTimeout has not been defined'); } (function () { try { if (typeof setTimeout === 'function') { cachedSetTimeout = setTimeout; } else { cachedSetTimeout = defaultSetTimout; } } catch (e) { cachedSetTimeout = defaultSetTimout; } try { if (typeof clearTimeout === 'function') { cachedClearTimeout = clearTimeout; } else { cachedClearTimeout = defaultClearTimeout; } } catch (e) { cachedClearTimeout = defaultClearTimeout; } } ()) function runTimeout(fun) { if (cachedSetTimeout === setTimeout) { //normal enviroments in sane situations return setTimeout(fun, 0); } // if setTimeout wasn't available but was latter defined if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { cachedSetTimeout = setTimeout; return setTimeout(fun, 0); } try { // when when somebody has screwed with setTimeout but no I.E. maddness return cachedSetTimeout(fun, 0); } catch(e){ try { // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally return cachedSetTimeout.call(null, fun, 0); } catch(e){ // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error return cachedSetTimeout.call(this, fun, 0); } } } function runClearTimeout(marker) { if (cachedClearTimeout === clearTimeout) { //normal enviroments in sane situations return clearTimeout(marker); } // if clearTimeout wasn't available but was latter defined if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { cachedClearTimeout = clearTimeout; return clearTimeout(marker); } try { // when when somebody has screwed with setTimeout but no I.E. maddness return cachedClearTimeout(marker); } catch (e){ try { // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally return cachedClearTimeout.call(null, marker); } catch (e){ // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. // Some versions of I.E. have different rules for clearTimeout vs setTimeout return cachedClearTimeout.call(this, marker); } } } var queue = []; var draining = false; var currentQueue; var queueIndex = -1; function cleanUpNextTick() { if (!draining || !currentQueue) { return; } draining = false; if (currentQueue.length) { queue = currentQueue.concat(queue); } else { queueIndex = -1; } if (queue.length) { drainQueue(); } } function drainQueue() { if (draining) { return; } var timeout = runTimeout(cleanUpNextTick); draining = true; var len = queue.length; while(len) { currentQueue = queue; queue = []; while (++queueIndex < len) { if (currentQueue) { currentQueue[queueIndex].run(); } } queueIndex = -1; len = queue.length; } currentQueue = null; draining = false; runClearTimeout(timeout); } process.nextTick = function (fun) { var args = new Array(arguments.length - 1); if (arguments.length > 1) { for (var i = 1; i < arguments.length; i++) { args[i - 1] = arguments[i]; } } queue.push(new Item(fun, args)); if (queue.length === 1 && !draining) { runTimeout(drainQueue); } }; // v8 likes predictible objects function Item(fun, array) { this.fun = fun; this.array = array; } Item.prototype.run = function () { this.fun.apply(null, this.array); }; process.title = 'browser'; process.browser = true; process.env = {}; process.argv = []; process.version = ''; // empty string to avoid regexp issues process.versions = {}; function noop() {} process.on = noop; process.addListener = noop; process.once = noop; process.off = noop; process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; process.prependListener = noop; process.prependOnceListener = noop; process.listeners = function (name) { return [] } process.binding = function (name) { throw new Error('process.binding is not supported'); }; process.cwd = function () { return '/' }; process.chdir = function (dir) { throw new Error('process.chdir is not supported'); }; process.umask = function() { return 0; }; /***/ }), /* 15 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/* eslint-env browser */ /** * This is the web browser implementation of `debug()`. */ exports.formatArgs = formatArgs; exports.save = save; exports.load = load; exports.useColors = useColors; exports.storage = localstorage(); exports.destroy = (() => { let warned = false; return () => { if (!warned) { warned = true; console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); } }; })(); /** * Colors. */ exports.colors = [ '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33' ]; /** * Currently only WebKit-based Web Inspectors, Firefox >= v31, * and the Firebug extension (any Firefox version) are known * to support "%c" CSS customizations. * * TODO: add a `localStorage` variable to explicitly enable/disable colors */ // eslint-disable-next-line complexity function useColors() { // NB: In an Electron preload script, document will be defined but not fully // initialized. Since we know we're in Chrome, we'll just detect this case // explicitly if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { return true; } // Internet Explorer and Edge do not support colors. if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { return false; } // Is webkit? http://stackoverflow.com/a/16459606/376773 // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || // Is firebug? http://stackoverflow.com/a/398120/376773 (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || // Is firefox >= v31? // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || // Double check webkit in userAgent just in case we are in a worker (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); } /** * Colorize log arguments if enabled. * * @api public */ function formatArgs(args) { args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff); if (!this.useColors) { return; } const c = 'color: ' + this.color; args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other // arguments passed either before or after the %c, so we need to // figure out the correct index to insert the CSS into let index = 0; let lastC = 0; args[0].replace(/%[a-zA-Z%]/g, match => { if (match === '%%') { return; } index++; if (match === '%c') { // We only are interested in the *last* %c // (the user may have provided their own) lastC = index; } }); args.splice(lastC, 0, c); } /** * Invokes `console.debug()` when available. * No-op when `console.debug` is not a "function". * If `console.debug` is not available, falls back * to `console.log`. * * @api public */ exports.log = console.debug || console.log || (() => {}); /** * Save `namespaces`. * * @param {String} namespaces * @api private */ function save(namespaces) { try { if (namespaces) { exports.storage.setItem('debug', namespaces); } else { exports.storage.removeItem('debug'); } } catch (error) { // Swallow // XXX (@Qix-) should we be logging these? } } /** * Load `namespaces`. * * @return {String} returns the previously persisted debug modes * @api private */ function load() { let r; try { r = exports.storage.getItem('debug'); } catch (error) { // Swallow // XXX (@Qix-) should we be logging these? } // If debug isn't set in LS, and we're in Electron, try to load $DEBUG if (!r && typeof process !== 'undefined' && 'env' in process) { r = process.env.DEBUG; } return r; } /** * Localstorage attempts to return the localstorage. * * This is necessary because safari throws * when a user disables cookies/localstorage * and you attempt to access it. * * @return {LocalStorage} * @api private */ function localstorage() { try { // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context // The Browser also has localStorage in the global context. return localStorage; } catch (error) { // Swallow // XXX (@Qix-) should we be logging these? } } module.exports = __webpack_require__(341)(exports); const {formatters} = module.exports; /** * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. */ formatters.j = function (v) { try { return JSON.stringify(v); } catch (error) { return '[UnexpectedJSONParseError]: ' + error.message; } }; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(14))) /***/ }), /* 16 */ /***/ (function(module, exports) { if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }) } }; } else { // old school shim for old browsers module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor var TempCtor = function () {} TempCtor.prototype = superCtor.prototype ctor.prototype = new TempCtor() ctor.prototype.constructor = ctor } } } /***/ }), /* 17 */ /***/ (function(module) { module.exports = JSON.parse("[\"3g2\",\"3ga\",\"3gp\",\"7z\",\"aa\",\"aac\",\"ac\",\"accdb\",\"accdt\",\"ace\",\"adn\",\"ai\",\"aif\",\"aifc\",\"aiff\",\"ait\",\"amr\",\"ani\",\"apk\",\"app\",\"applescript\",\"asax\",\"asc\",\"ascx\",\"asf\",\"ash\",\"ashx\",\"asm\",\"asmx\",\"asp\",\"aspx\",\"asx\",\"au\",\"aup\",\"avi\",\"axd\",\"aze\",\"bak\",\"bash\",\"bat\",\"bin\",\"blank\",\"bmp\",\"bowerrc\",\"bpg\",\"browser\",\"bz2\",\"bzempty\",\"c\",\"cab\",\"cad\",\"caf\",\"cal\",\"cd\",\"cdda\",\"cer\",\"cfg\",\"cfm\",\"cfml\",\"cgi\",\"chm\",\"class\",\"cmd\",\"code-workspace\",\"codekit\",\"coffee\",\"coffeelintignore\",\"com\",\"compile\",\"conf\",\"config\",\"cpp\",\"cptx\",\"cr2\",\"crdownload\",\"crt\",\"crypt\",\"cs\",\"csh\",\"cson\",\"csproj\",\"css\",\"csv\",\"cue\",\"cur\",\"dart\",\"dat\",\"data\",\"db\",\"dbf\",\"deb\",\"default\",\"dgn\",\"dist\",\"diz\",\"dll\",\"dmg\",\"dng\",\"doc\",\"docb\",\"docm\",\"docx\",\"dot\",\"dotm\",\"dotx\",\"download\",\"dpj\",\"ds_store\",\"dsn\",\"dtd\",\"dwg\",\"dxf\",\"editorconfig\",\"el\",\"elf\",\"eml\",\"enc\",\"eot\",\"eps\",\"epub\",\"eslintignore\",\"exe\",\"f4v\",\"fax\",\"fb2\",\"fla\",\"flac\",\"flv\",\"fnt\",\"folder\",\"fon\",\"gadget\",\"gdp\",\"gem\",\"gif\",\"gitattributes\",\"gitignore\",\"go\",\"gpg\",\"gpl\",\"gradle\",\"gz\",\"h\",\"handlebars\",\"hbs\",\"heic\",\"hlp\",\"hs\",\"hsl\",\"htm\",\"html\",\"ibooks\",\"icns\",\"ico\",\"ics\",\"idx\",\"iff\",\"ifo\",\"image\",\"img\",\"iml\",\"in\",\"inc\",\"indd\",\"inf\",\"info\",\"ini\",\"inv\",\"iso\",\"j2\",\"jar\",\"java\",\"jpe\",\"jpeg\",\"jpg\",\"js\",\"json\",\"jsp\",\"jsx\",\"key\",\"kf8\",\"kmk\",\"ksh\",\"kt\",\"kts\",\"kup\",\"less\",\"lex\",\"licx\",\"lisp\",\"lit\",\"lnk\",\"lock\",\"log\",\"lua\",\"m\",\"m2v\",\"m3u\",\"m3u8\",\"m4\",\"m4a\",\"m4r\",\"m4v\",\"map\",\"master\",\"mc\",\"md\",\"mdb\",\"mdf\",\"me\",\"mi\",\"mid\",\"midi\",\"mk\",\"mkv\",\"mm\",\"mng\",\"mo\",\"mobi\",\"mod\",\"mov\",\"mp2\",\"mp3\",\"mp4\",\"mpa\",\"mpd\",\"mpe\",\"mpeg\",\"mpg\",\"mpga\",\"mpp\",\"mpt\",\"msg\",\"msi\",\"msu\",\"nef\",\"nes\",\"nfo\",\"nix\",\"npmignore\",\"ocx\",\"odb\",\"ods\",\"odt\",\"ogg\",\"ogv\",\"ost\",\"otf\",\"ott\",\"ova\",\"ovf\",\"p12\",\"p7b\",\"pages\",\"part\",\"pcd\",\"pdb\",\"pdf\",\"pem\",\"pfx\",\"pgp\",\"ph\",\"phar\",\"php\",\"pid\",\"pkg\",\"pl\",\"plist\",\"pm\",\"png\",\"po\",\"pom\",\"pot\",\"potx\",\"pps\",\"ppsx\",\"ppt\",\"pptm\",\"pptx\",\"prop\",\"ps\",\"ps1\",\"psd\",\"psp\",\"pst\",\"pub\",\"py\",\"pyc\",\"qt\",\"ra\",\"ram\",\"rar\",\"raw\",\"rb\",\"rdf\",\"rdl\",\"reg\",\"resx\",\"retry\",\"rm\",\"rom\",\"rpm\",\"rpt\",\"rsa\",\"rss\",\"rst\",\"rtf\",\"ru\",\"rub\",\"sass\",\"scss\",\"sdf\",\"sed\",\"sh\",\"sit\",\"sitemap\",\"skin\",\"sldm\",\"sldx\",\"sln\",\"sol\",\"sphinx\",\"sql\",\"sqlite\",\"step\",\"stl\",\"svg\",\"swd\",\"swf\",\"swift\",\"swp\",\"sys\",\"tar\",\"tax\",\"tcsh\",\"tex\",\"tfignore\",\"tga\",\"tgz\",\"tif\",\"tiff\",\"tmp\",\"tmx\",\"torrent\",\"tpl\",\"ts\",\"tsv\",\"ttf\",\"twig\",\"txt\",\"udf\",\"vb\",\"vbproj\",\"vbs\",\"vcd\",\"vcf\",\"vcs\",\"vdi\",\"vdx\",\"vmdk\",\"vob\",\"vox\",\"vscodeignore\",\"vsd\",\"vss\",\"vst\",\"vsx\",\"vtx\",\"war\",\"wav\",\"wbk\",\"webinfo\",\"webm\",\"webp\",\"wma\",\"wmf\",\"wmv\",\"woff\",\"woff2\",\"wps\",\"wsf\",\"xaml\",\"xcf\",\"xfl\",\"xlm\",\"xls\",\"xlsm\",\"xlsx\",\"xlt\",\"xltm\",\"xltx\",\"xml\",\"xpi\",\"xps\",\"xrb\",\"xsd\",\"xsl\",\"xspf\",\"xz\",\"yaml\",\"yml\",\"z\",\"zip\",\"zsh\"]"); /***/ }), /* 18 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export AttachHook */ /*** * @extends AElement * @constructor */ function AttachHook() { this._attached = false; this.on('error', function (event) { if (!this._attached && this.isDescendantOf(document.body)) { this._attached = true; this.emit('attached', event, this); } }); this.waitAttaching(); } AttachHook.render = function (data, option,domInstance) { var attributes = {}; var tag; if (domInstance.defaultTag === 'div') { attributes.src = ''; tag = 'img'; } else { tag = 'image'; attributes.href = ''; } return domInstance._({ tag: tag, class: 'absol-attachhook', extendEvent: ['attached'], style: { display: 'none' }, attr: attributes, props: { domInstance: domInstance } }); }; AttachHook.prototype.waitAttaching = function () { var self = this; // if (BrowserDetector.browser.type.startsWith('chrome') && parseInt((BrowserDetector.browser.version || '').split('.').shift()) >= 113) { if (this.waitTimeout > 0) clearTimeout(this.waitTimeout); this.waitTimeout = setTimeout(function wait() { self.waitTimeout = -1; if (!self._attached && self.isDescendantOf(document.body)) { self._attached = true; self.emit('attached', { target: this }, self); } else if (!self._attached ) { self.waitTimeout = setTimeout(wait, 10); } }, 0); // } }; AttachHook.prototype.resetState = function () { this._attached = false; if (this.tagName.toLowerCase() === 'img') { this.attr('src', ''); } else { this.attr('href', ''); } this.waitAttaching(); }; AttachHook.property = { attached: { get: function () { return !!this._attached; } } }; /* harmony default export */ __webpack_exports__["a"] = (AttachHook); /***/ }), /* 19 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(58); exports.Stream = exports; exports.Readable = exports; exports.Writable = __webpack_require__(62); exports.Duplex = __webpack_require__(20); exports.Transform = __webpack_require__(64); exports.PassThrough = __webpack_require__(333); /***/ }), /* 20 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. // a duplex stream is just a stream that is both readable and writable. // Since JS doesn't have multiple prototypal inheritance, this class // prototypally inherits from Readable, and then parasitically from // Writable. /*<replacement>*/ var pna = __webpack_require__(24); /*</replacement>*/ /*<replacement>*/ var objectKeys = Object.keys || function (obj) { var keys = []; for (var key in obj) { keys.push(key); }return keys; }; /*</replacement>*/ module.exports = Duplex; /*<replacement>*/ var util = Object.create(__webpack_require__(25)); util.inherits = __webpack_require__(16); /*</replacement>*/ var Readable = __webpack_require__(58); var Writable = __webpack_require__(62); util.inherits(Duplex, Readable); { // avoid scope creep, the keys array can then be collected var keys = objectKeys(Writable.prototype); for (var v = 0; v < keys.length; v++) { var method = keys[v]; if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; } } function Duplex(options) { if (!(this instanceof Duplex)) return new Duplex(options); Readable.call(this, options); Writable.call(this, options); if (options && options.readable === false) this.readable = false; if (options && options.writable === false) this.writable = false; this.allowHalfOpen = true; if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; this.once('end', onend); } Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function () { return this._writableState.highWaterMark; } }); // the no-half-open enforcer function onend() { // if we allow half-open state, or if the writable side ended, // then we're ok. if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written. // But allow more writes to happen in this tick. pna.nextTick(onEndNT, this); } function onEndNT(self) { self.end(); } Object.defineProperty(Duplex.prototype, 'destroyed', { get: function () { if (this._readableState === undefined || this._writableState === undefined) { return false; } return this._readableState.destroyed && this._writableState.destroyed; }, set: function (value) { // we ignore the value if the stream // has not been initialized yet if (this._readableState === undefined || this._writableState === undefined) { return; } // backward compatibility, the user is explicitly // managing destroyed this._readableState.destroyed = value; this._writableState.destroyed = value; } }); Duplex.prototype._destroy = function (err, cb) { this.push(null); this.end(); pna.nextTick(cb, err); }; /***/ }), /* 21 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var undefined; var $Error = __webpack_require__(361); var $EvalError = __webpack_require__(362); var $RangeError = __webpack_require__(363); var $ReferenceError = __webpack_require__(364); var $SyntaxError = __webpack_require__(67); var $TypeError = __webpack_require__(26); var $URIError = __webpack_require__(365); var $Function = Function; // eslint-disable-next-line consistent-return var getEvalledConstructor = function (expressionSyntax) { try { return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); } catch (e) {} }; var $gOPD = Object.getOwnPropertyDescriptor; if ($gOPD) { try { $gOPD({}, ''); } catch (e) { $gOPD = null; // this is IE 8, which has a broken gOPD } } var throwTypeError = function () { throw new $TypeError(); }; var ThrowTypeError = $gOPD ? (function () { try { // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties arguments.callee; // IE 8 does not throw here return throwTypeError; } catch (calleeThrows) { try { // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') return $gOPD(arguments, 'callee').get; } catch (gOPDthrows) { return throwTypeError; } } }()) : throwTypeError; var hasSymbols = __webpack_require__(366)(); var hasProto = __webpack_require__(368)(); var getProto = Object.getPrototypeOf || ( hasProto ? function (x) { return x.__proto__; } // eslint-disable-line no-proto : null ); var needsEval = {}; var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array); var INTRINSICS = { __proto__: null, '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, '%Array%': Array, '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, '%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined, '%AsyncFromSyncIteratorPrototype%': undefined, '%AsyncFunction%': needsEval, '%AsyncGenerator%': needsEval, '%AsyncGeneratorFunction%': needsEval, '%AsyncIteratorPrototype%': needsEval, '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, '%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array, '%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array, '%Boolean%': Boolean, '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, '%Date%': Date, '%decodeURI%': decodeURI, '%decodeURIComponent%': decodeURIComponent, '%encodeURI%': encodeURI, '%encodeURIComponent%': encodeURIComponent, '%Error%': $Error, '%eval%': eval, // eslint-disable-line no-eval '%EvalError%': $EvalError, '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, '%Function%': $Function, '%GeneratorFunction%': needsEval, '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, '%isFinite%': isFinite, '%isNaN%': isNaN, '%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined, '%JSON%': typeof JSON === 'object' ? JSON : undefined, '%Map%': typeof Map === 'undefined' ? undefined : Map, '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()), '%Math%': Math, '%Number%': Number, '%Object%': Object, '%parseFloat%': parseFloat, '%parseInt%': parseInt, '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, '%RangeError%': $RangeError, '%ReferenceError%': $ReferenceError, '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, '%RegExp%': RegExp, '%Set%': typeof Set === 'undefined' ? undefined : Set, '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()), '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, '%String%': String, '%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined, '%Symbol%': hasSymbols ? Symbol : undefined, '%SyntaxError%': $SyntaxError, '%ThrowTypeError%': ThrowTypeError, '%TypedArray%': TypedArray, '%TypeError%': $TypeError, '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, '%URIError%': $URIError, '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet }; if (getProto) { try { null.error; // eslint-disable-line no-unused-expressions } catch (e) { // https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229 var errorProto = getProto(getProto(e)); INTRINSICS['%Error.prototype%'] = errorProto; } } var doEval = function doEval(name) { var value; if (name === '%AsyncFunction%') { value = getEvalledConstructor('async function () {}'); } else if (name === '%GeneratorFunction%') { value = getEvalledConstructor('function* () {}'); } else if (name === '%AsyncGeneratorFunction%') { value = getEvalledConstructor('async function* () {}'); } else if (name === '%AsyncGenerator%') { var fn = doEval('%AsyncGeneratorFunction%'); if (fn) { value = fn.prototype; } } else if (name === '%AsyncIteratorPrototype%') { var gen = doEval('%AsyncGenerator%'); if (gen && getProto) { value = getProto(gen.prototype); } } INTRINSICS[name] = value; return value; }; var LEGACY_ALIASES = { __proto__: null, '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], '%ArrayPrototype%': ['Array', 'prototype'], '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], '%ArrayProto_values%': ['Array', 'prototype', 'values'], '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], '%BooleanPrototype%': ['Boolean', 'prototype'], '%DataViewPrototype%': ['DataView', 'prototype'], '%DatePrototype%': ['Date', 'prototype'], '%ErrorPrototype%': ['Error', 'prototype'], '%EvalErrorPrototype%': ['EvalError', 'prototype'], '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], '%FunctionPrototype%': ['Function', 'prototype'], '%Generator%': ['GeneratorFunction', 'prototype'], '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], '%JSONParse%': ['JSON', 'parse'], '%JSONStringify%': ['JSON', 'stringify'], '%MapPrototype%': ['Map', 'prototype'], '%NumberPrototype%': ['Number', 'prototype'], '%ObjectPrototype%': ['Object', 'prototype'], '%ObjProto_toString%': ['Object', 'prototype', 'toString'], '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], '%PromisePrototype%': ['Promise', 'prototype'], '%PromiseProto_then%': ['Promise', 'prototype', 'then'], '%Promise_all%': ['Promise', 'all'], '%Promise_reject%': ['Promise', 'reject'], '%Promise_resolve%': ['Promise', 'resolve'], '%RangeErrorPrototype%': ['RangeError', 'prototype'], '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], '%RegExpPrototype%': ['RegExp', 'prototype'], '%SetPrototype%': ['Set', 'prototype'], '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], '%StringPrototype%': ['String', 'prototype'], '%SymbolPrototype%': ['Symbol', 'prototype'], '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], '%TypedArrayPrototype%': ['TypedArray', 'prototype'], '%TypeErrorPrototype%': ['TypeError', 'prototype'], '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], '%URIErrorPrototype%': ['URIError', 'prototype'], '%WeakMapPrototype%': ['WeakMap', 'prototype'], '%WeakSetPrototype%': ['WeakSet', 'prototype'] }; var bind = __webpack_require__(33); var hasOwn = __webpack_require__(370); var $concat = bind.call(Function.call, Array.prototype.concat); var $spliceApply = bind.call(Function.apply, Array.prototype.splice); var $replace = bind.call(Function.call, String.prototype.replace); var $strSlice = bind.call(Function.call, String.prototype.slice); var $exec = bind.call(Function.call, RegExp.prototype.exec); /* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ var stringToPath = function stringToPath(string) { var first = $strSlice(string, 0, 1); var last = $strSlice(string, -1); if (first === '%' && last !== '%') { throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); } else if (last === '%' && first !== '%') { throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); } var result = []; $replace(string, rePropName, function (match, number, quote, subString) { result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; }); return result; }; /* end adaptation */ var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { var intrinsicName = name; var alias; if (hasOwn(LEGACY_ALIASES, intrinsicName)) { alias = LEGACY_ALIASES[intrinsicName]; intrinsicName = '%' + alias[0] + '%'; } if (hasOwn(INTRINSICS, intrinsicName)) { var value = INTRINSICS[intrinsicName]; if (value === needsEval) { value = doEval(intrinsicName); } if (typeof value === 'undefined' && !allowMissing) { throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); } return { alias: alias, name: intrinsicName, value: value }; } throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); }; module.exports = function GetIntrinsic(name, allowMissing) { if (typeof name !== 'string' || name.length === 0) { throw new $TypeError('intrinsic name must be a non-empty string'); } if (arguments.length > 1 && typeof allowMissing !== 'boolean') { throw new $TypeError('"allowMissing" argument must be a boolean'); } if ($exec(/^%?[^%]*%?$/, name) === null) { throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name'); } var parts = stringToPath(name); var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); var intrinsicRealName = intrinsic.name; var value = intrinsic.value; var skipFurtherCaching = false; var alias = intrinsic.alias; if (alias) { intrinsicBaseName = alias[0]; $spliceApply(parts, $concat([0, 1], alias)); } for (var i = 1, isOwn = true; i < parts.length; i += 1) { var part = parts[i]; var first = $strSlice(part, 0, 1); var last = $strSlice(part, -1); if ( ( (first === '"' || first === "'" || first === '`') || (last === '"' || last === "'" || last === '`') ) && first !== last ) { throw new $SyntaxError('property names with quotes must have matching quotes'); } if (part === 'constructor' || !isOwn) { skipFurtherCaching = true; } intrinsicBaseName += '.' + part; intrinsicRealName = '%' + intrinsicBaseName + '%'; if (hasOwn(INTRINSICS, intrinsicRealName)) { value = INTRINSICS[intrinsicRealName]; } else if (value != null) { if (!(part in value)) { if (!allowMissing) { throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); } return void undefined; } if ($gOPD && (i + 1) >= parts.length) { var desc = $gOPD(value, part); isOwn = !!desc; // By convention, when a data property is converted to an accessor // property to emulate a data property that does not suffer from // the override mistake, that accessor's getter is marked with // an `originalValue` property. Here, when we detect this, we // uphold the illusion by pretending to see that original data // property, i.e., returning the value rather than the getter // itself. if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { value = desc.get; } else { value = value[part]; } } else { isOwn = hasOwn(value, part); value = value[part]; } if (isOwn && !skipFurtherCaching) { INTRINSICS[intrinsicRealName] = value; } } } return value; }; /***/ }), /* 22 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var _AElementNS__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(38); /* harmony default export */ __webpack_exports__["a"] = (_AElementNS__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"]); /***/ }), /* 23 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. var R = typeof Reflect === 'object' ? Reflect : null var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) { return Function.prototype.apply.call(target, receiver, args); } var ReflectOwnKeys if (R && typeof R.ownKeys === 'function') { ReflectOwnKeys = R.ownKeys } else if (Object.getOwnPropertySymbols) { ReflectOwnKeys = function ReflectOwnKeys(target) { return Object.getOwnPropertyNames(target) .concat(Object.getOwnPropertySymbols(target)); }; } else { ReflectOwnKeys = function ReflectOwnKeys(target) { return Object.getOwnPropertyNames(target); }; } function ProcessEmitWarning(warning) { if (console && console.warn) console.warn(warning); } var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { return value !== value; } function EventEmitter() { EventEmitter.init.call(this); } module.exports = EventEmitter; module.exports.once = once; // Backwards-compat with node 0.10.x EventEmitter.EventEmitter = EventEmitter; EventEmitter.prototype._events = undefined; EventEmitter.prototype._eventsCount = 0; EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are // added to it. This is a useful default which helps finding memory leaks. var defaultMaxListeners = 10; function checkListener(listener) { if (typeof listener !== 'function') { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } } Object.defineProperty(EventEmitter, 'defaultMaxListeners', { enumerable: true, get: function() { return defaultMaxListeners; }, set: function(arg) { if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); } defaultMaxListeners = arg; } }); EventEmitter.init = function() { if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) { this._events = Object.create(null); this._eventsCount = 0; } this._maxListeners = this._maxListeners || undefined; }; // Obviously not all Emitters should be limited to 10. This function allows // that to be increased. Set to zero for unlimited. EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); } this._maxListeners = n; return this; }; function _getMaxListeners(that) { if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners; return that._maxListeners; } EventEmitter.prototype.getMaxListeners = function getMaxListeners() { return _getMaxListeners(this); }; EventEmitter.prototype.emit = function emit(type) { var args = []; for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); var doError = (type === 'error'); var events = this._events; if (events !== undefined) doError = (doError && events.error === undefined); else if (!doError) return false; // If there is no 'error' event listener then throw. if (doError) { var er; if (args.length > 0) er = args[0]; if (er instanceof Error) { // Note: The comments on the `throw` lines are intentional, they show // up in Node's output if this results in an unhandled exception. throw er; // Unhandled 'error' event } // At least give some kind of context to the user var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); err.context = er; throw err; // Unhandled 'error' event } var handler = events[type]; if (handler === undefined) return false; if (typeof handler === 'function') { ReflectApply(handler, this, args); } else { var len = handler.length; var listeners = arrayClone(handler, len); for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args); } return true; }; function _addListener(target, type, listener, prepend) { var m; var events; var existing; checkListener(listener); events = target._events; if (events === undefined) { events = target._events = Object.create(null); target._eventsCount = 0; } else { // To avoid recursion in the case that type === "newListener"! Before // adding it to the listeners, first emit "newListener". if (events.newListener !== undefined) { target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the // this._events to be assigned to a new object events = target._events; } existing = events[type]; } if (existing === undefined) { // Optimize the case of one listener. Don't need the extra array object. existing = events[type] = listener; ++target._eventsCount; } else { if (typeof existing === 'function') { // Adding the second element, need to change to array. existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append. } else if (prepend) { existing.unshift(listener); } else { existing.push(listener); } // Check for listener leak m = _getMaxListeners(target); if (m > 0 && existing.length > m && !existing.warned) { existing.warned = true; // No error code for this since it is a Warning // eslint-disable-next-line no-restricted-syntax var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit'); w.name = 'MaxListenersExceededWarning'; w.emitter = target; w.type = type; w.count = existing.length; ProcessEmitWarning(w); } } return target; } EventEmitter.prototype.addListener = function addListener(type, listener) { return _addListener(this, type, listener, false); }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.prependListener = function prependListener(type, listener) { return _addListener(this, type, listener, true); }; function onceWrapper() { if (!this.fired) { this.target.removeListener(this.type, this.wrapFn); this.fired = true; if (arguments.length === 0) return this.listener.call(this.target); return this.listener.apply(this.target, arguments); } } function _onceWrap(target, type, listener) { var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; var wrapped = onceWrapper.bind(state); wrapped.listener = listener; state.wrapFn = wrapped; return wrapped; } EventEmitter.prototype.once = function once(type, listener) { checkListener(listener); this.on(type, _onceWrap(this, type, listener)); return this; }; EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) { checkListener(listener); this.prependListener(type, _onceWrap(this, type, listener)); return this; }; // Emits a 'removeListener' event if and only if the listener was removed. EventEmitter.prototype.removeListener = function removeListener(type, listener) { var list, events, position, i, originalListener; checkListener(listener); events = this._events; if (events === undefined) return this; list = events[type]; if (list === undefined) return this; if (list === listener || list.listener === listener) { if (--this._eventsCount === 0) this._events = Object.create(null); else { delete events[type]; if (events.removeListener) this.emit('removeListener', type, list.listener || listener); } } else if (typeof list !== 'function') { position = -1; for (i = list.length - 1; i >= 0; i--) { if (list[i] === listener || list[i].listener === listener) { originalListener = list[i].listener; position = i; break; } } if (position < 0) return this; if (position === 0) list.shift(); else { spliceOne(list, position); } if (list.length === 1) events[type] = list[0]; if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener); } return this; }; EventEmitter.prototype.off = EventEmitter.prototype.removeListener; EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) { var listeners, events, i; events = this._events; if (events === undefined) return this; // not listening for removeListener, no need to emit if (events.removeListener === undefined) { if (arguments.length === 0) { this._events = Object.create(null); this._eventsCount = 0; } else if (events[type] !== undefined) { if (--this._eventsCount === 0) this._events = Object.create(null); else delete events[type]; } return this; } // emit removeListener for all listeners on all events if (arguments.length === 0) { var keys = Object.keys(events); var key; for (i = 0; i < keys.length; ++i) { key = keys[i]; if (key === 'removeListener') continue; this.removeAllListeners(key); } this.removeAllListeners('removeListener'); this._events = Object.create(null); this._eventsCount = 0; return this; } listeners = events[type]; if (typeof listeners === 'function') { this.removeListener(type, listeners); } else if (listeners !== undefined) { // LIFO order for (i = listeners.length - 1; i >= 0; i--) { this.removeListener(type, listeners[i]); } } return this; }; function _listeners(target, type, unwrap) { var events = target._events; if (events === undefined) return []; var evlistener = events[type]; if (evlistener === undefined) return []; if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener]; return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); } EventEmitter.prototype.listeners = function listeners(type) { return _listeners(this, type, true); }; EventEmitter.prototype.rawListeners = function rawListeners(type) { return _listeners(this, type, false); }; EventEmitter.listenerCount = function(emitter, type) { if (typeof emitter.listenerCount === 'function') { return emitter.listenerCount(type); } else { return listenerCount.call(emitter, type); } }; EventEmitter.prototype.listenerCount = listenerCount; function listenerCount(type) { var events = this._events; if (events !== undefined) { var evlistener = events[type]; if (typeof evlistener === 'function') { return 1; } else if (evlistener !== undefined) { return evlistener.length; } } return 0; } EventEmitter.prototype.eventNames = function eventNames() { return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; }; function arrayClone(arr, n) { var copy = new Array(n); for (var i = 0; i < n; ++i) copy[i] = arr[i]; return copy; } function spliceOne(list, index) { for (; index + 1 < list.length; index++) list[index] = list[index + 1]; list.pop(); } function unwrapListeners(arr) { var ret = new Array(arr.length); for (var i = 0; i < ret.length; ++i) { ret[i] = arr[i].listener || arr[i]; } return ret; } function once(emitter, name) { return new Promise(function (resolve, reject) { function errorListener(err) { emitter.removeListener(name, resolver); reject(err); } function resolver() { if (typeof emitter.removeListener === 'function') { emitter.removeListener('error', errorListener); } resolve([].slice.call(arguments)); }; eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); if (name !== 'error') { addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); } }); } function addErrorHandlerIfEventEmitter(emitter, handler, flags) { if (typeof emitter.on === 'function') { eventTargetAgnosticAddListener(emitter, 'error', handler, flags); } } function eventTargetAgnosticAddListener(emitter, name, listener, flags) { if (typeof emitter.on === 'function') { if (flags.once) { emitter.once(name, listener); } else { emitter.on(name, listener); } } else if (typeof emitter.addEventListener === 'function') { // EventTarget does not have `error` event semantics like Node // EventEmitters, we do not listen for `error` events here. emitter.addEventListener(name, function wrapListener(arg) { // IE does not have builtin `{ once: true }` support so we // have to do it manually. if (flags.once) { emitter.removeEventListener(name, wrapListener); } listener(arg); }); } else { throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); } } /***/ }), /* 24 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process) { if (typeof process === 'undefined' || !process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { module.exports = { nextTick: nextTick }; } else { module.exports = process } function nextTick(fn, arg1, arg2, arg3) { if (typeof fn !== 'function') { throw new TypeError('"callback" argument must be a function'); } var len = arguments.length; var args, i; switch (len) { case 0: case 1: return process.nextTick(fn); case 2: return process.nextTick(function afterTickOne() { fn.call(null, arg1); }); case 3: return process.nextTick(function afterTickTwo() { fn.call(null, arg1, arg2); }); case 4: return process.nextTick(function afterTickThree() { fn.call(null, arg1, arg2, arg3); }); default: args = new Array(len - 1); i = 0; while (i < args.length) { args[i++] = arguments[i]; } return process.nextTick(function afterTick() { fn.apply(null, args); }); } } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(14))) /***/ }), /* 25 */ /***/ (function(module, exports, __webpack_require__) { // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. // NOTE: These type checking functions intentionally don't use `instanceof` // because it is fragile and can be easily faked with `Object.create()`. function isArray(arg) { if (Array.isArray) { return Array.isArray(arg); } return objectToString(arg) === '[object Array]'; } exports.isArray = isArray; function isBoolean(arg) { return typeof arg === 'boolean'; } exports.isBoolean = isBoolean; function isNull(arg) { return arg === null; } exports.isNull = isNull; function isNullOrUndefined(arg) { return arg == null; } exports.isNullOrUndefined = isNullOrUndefined; function isNumber(arg) { return typeof arg === 'number'; } exports.isNumber = isNumber; function isString(arg) { return typeof arg === 'string'; } exports.isString = isString; function isSymbol(arg) { return typeof arg === 'symbol'; } exports.isSymbol = isSymbol; function isUndefined(arg) { return arg === void 0; } exports.isUndefined = isUndefined; function isRegExp(re) { return objectToString(re) === '[object RegExp]'; } exports.isRegExp = isRegExp; function isObject(arg) { return typeof arg === 'object' && arg !== null; } exports.isObject = isObject; function isDate(d) { return objectToString(d) === '[object Date]'; } exports.isDate = isDate; function isError(e) { return (objectToString(e) === '[object Error]' || e instanceof Error); } exports.isError = isError; function isFunction(arg) { return typeof arg === 'function'; } exports.isFunction = isFunction; function isPrimitive(arg) { return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || // ES6 symbol typeof arg === 'undefined'; } exports.isPrimitive = isPrimitive; exports.isBuffer = __webpack_require__(13).Buffer.isBuffer; function objectToString(o) { return Object.prototype.toString.call(o); } /***/ }), /* 26 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** @type {import('./type')} */ module.exports = TypeError; /***/ }), /* 27 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1); var _ = _ACore__WEBPACK_IMPORTED_MODULE_0__[/* default */ "d"]._; var $ = _ACore__WEBPACK_IMPORTED_MODULE_0__[/* default */ "d"].$; var originSetTimeout = setTimeout; var originClearTimeout = clearTimeout; var originSetInterval = setInterval; var originClearInterval = clearInterval; var pendingTimeout = 0; var pendingInterval = 0; var timeoutDict = {}; var intervalDict = {}; function DebugTask() { var res = _({ class: 'absol-debug-task', child: [ { child: [{ tag: 'span', class: 'absol-debug-task-name', child: { text: 'settimeout ' } }, { tag: 'span', class: ['absol-debug-task-value', 'settimeout'], child: { text: '0' } }] }, { child: [{ tag: 'span', class: 'absol-debug-task-name', child: { text: 'setintervel ' } }, { tag: 'span', class: ['absol-debug-task-value', 'setinterval'], child: { text: '0' } }, ] }, { child: [{ tag: 'span', class: 'absol-debug-task-name', child: { text: 'Work ' } }, { tag: 'span', class: ['absol-debug-task-value', 'work'], child: { text: '0%' } }, ] } ] }); res._timeout = 0; res._interval = 0; res._work = 0; res.$setTimeOutValue = $('.absol-debug-task-value.settimeout', res); res.$setIntervalValue = $('.absol-debug-task-value.setinterval', res); res.$setWorkValue = $('.absol-debug-task-value.work', res); return res; } DebugTask.property = {}; DebugTask.property.timeout = { set: function (value) { this._timeout = value; this.$setTimeOutValue.innerHTML = value + ''; }, get: function () { return this._timeout; } }; DebugTask.property.interval = { set: function (value) { this._interval = value; this.$setIntervalValue.innerHTML = value + ''; }, get: function () { return this._interval; } }; DebugTask.property.work = { set: function (value) { this._work = value; value = (value * 100).toFixed(1); this.$setWorkValue.innerHTML = value + '%'; }, get: function () { return this._work; } }; DebugTask.start = function () { if (DebugTask.started) return; if (!DebugTask.$view) { DebugTask.$view = _('debugtask'); } var times = []; originSetInterval(function(){ var now = performance.now(); while (times.length > 0 && times[0].end < now - 2000) { times.shift(); } if (times.length == 0) DebugTask.$view.work = 0; },3000); global.setTimeout = function () { var args = Array.prototype.map.call(arguments, function (x) { return x; }); var originCallback = arguments[0]; if (typeof originCallback == 'undefined') return; if (typeof originCallback == 'string') { originCallback = new Function(originCallback); } args[0] = function () { var ret; try { var now = performance.now(); while (times.length > 0 && times[0].end < now - 1000) { times.shift(); } ret = originCallback.apply(null, arguments); var now1 = performance.now(); var long = now1 - now; times.push({ long:long, start:now, end:now1 }); var sTime = 0; for (var i = 0; i< times.length; ++i ){ sTime+= times[i].long; } DebugTask.$view.work = sTime/(Math.max(now1 - times[0].start, 1000)); } catch (e) { console.error(e); } if (timeoutDict[timeoutId]) { pendingTimeout--; delete timeoutDict[timeoutId]; DebugTask.$view.timeout = pendingTimeout; } return ret; } var timeoutId = originSetTimeout.apply(global, args) pendingTimeout++; timeoutDict[timeoutId] = true; DebugTask.$view.timeout = pendingTimeout; return timeoutId; } global.clearTimeout = function (timeoutId) { if (timeoutDict[timeoutId]) { pendingTimeout--; delete timeoutDict[timeoutId]; DebugTask.$view.timeout = pendingTimeout; } return originClearTimeout.apply(global, arguments); }; global.setInterval = function () { var args = Array.prototype.map.call(arguments, function (x) { return x; }); var originCallback = arguments[0]; if (typeof originCallback == 'undefined') return; if (typeof originCallback == 'string') { originCallback = new Function(originCallback); } args[0] = function () { var ret; try { var now = performance.now(); while (times.length > 0 && times[0].end < now - 1000) { times.shift(); } ret = originCallback.apply(null, arguments); var now1 = performance.now(); var long = now1 - now; times.push({ long:long, start:now, end:now1 }); var sTime = 0; for (var i = 0; i< times.length; ++i ){ sTime+= times[i].long; } DebugTask.$view.work = sTime/(Math.max(now1 - times[0].start, 1000)); } catch (e) { console.error(e); } return ret; } var intervalId = originSetInterval.apply(global, args) pendingInterval++; intervalDict[intervalId] = true; DebugTask.$view.interval = pendingInterval; return intervalId; } global.clearInterval = function (intervalId) { var args = Array.prototype.map.call(arguments, function (x) { return x; }); if (intervalDict[intervalId]) { pendingInterval--; delete intervalDict[intervalId]; DebugTask.$view.interval = pendingInterval; } return originClearInterval.apply(global, args); }; absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__[/* default */ "b"].documentReady.then(function () { DebugTask.$view.addTo(document.body); }); }; _ACore__WEBPACK_IMPORTED_MODULE_0__[/* default */ "d"].install('debugtask', DebugTask); /* harmony default export */ __webpack_exports__["a"] = (DebugTask); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12))) /***/ }), /* 28 */ /***/ (function(module, exports, __webpack_require__) { /* eslint-disable node/no-deprecated-api */ var buffer = __webpack_require__(13) var Buffer = buffer.Buffer // alternative to using Object.keys for old browsers function copyProps (src, dst) { for (var key in src) { dst[key] = src[key] } } if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { module.exports = buffer } else { // Copy properties from require('buffer') copyProps(buffer, exports) exports.Buffer = SafeBuffer } function SafeBuffer (arg, encodingOrOffset, length) { return Buffer(arg, encodingOrOffset, length) } // Copy static methods from Buffer copyProps(Buffer, SafeBuffer) SafeBuffer.from = function (arg, encodingOrOffset, length) { if (typeof arg === 'number') { throw new TypeError('Argument must not be a number') } return Buffer(arg, encodingOrOffset, length) } SafeBuffer.alloc = function (size, fill, encoding) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } var buf = Buffer(size) if (fill !== undefined) { if (typeof encoding === 'string') { buf.fill(fill, encoding) } else { buf.fill(fill) } } else { buf.fill(0) } return buf } SafeBuffer.allocUnsafe = function (size) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } return Buffer(size) } SafeBuffer.allocUnsafeSlow = function (size) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } return buffer.SlowBuffer(size) } /***/ }), /* 29 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(137); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 30 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(180); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 31 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(309); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 32 */ /***/ (function(module, exports) { module.exports = extend var hasOwnProperty = Object.prototype.hasOwnProperty; function extend() { var target = {} for (var i = 0; i < arguments.length; i++) { var source = arguments[i] for (var key in source) { if (hasOwnProperty.call(source, key)) { target[key] = source[key] } } } return target } /***/ }), /* 33 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var implementation = __webpack_require__(369); module.exports = Function.prototype.bind || implementation; /***/ }), /* 34 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var GetIntrinsic = __webpack_require__(21); /** @type {import('.')} */ var $defineProperty = GetIntrinsic('%Object.defineProperty%', true) || false; if ($defineProperty) { try { $defineProperty({}, 'a', { value: 1 }); } catch (e) { // IE 8 has a broken defineProperty $defineProperty = false; } } module.exports = $defineProperty; /***/ }), /* 35 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var replace = String.prototype.replace; var percentTwenties = /%20/g; var Format = { RFC1738: 'RFC1738', RFC3986: 'RFC3986' }; module.exports = { 'default': Format.RFC3986, formatters: { RFC1738: function (value) { return replace.call(value, percentTwenties, '+'); }, RFC3986: function (value) { return String(value); } }, RFC1738: Format.RFC1738, RFC3986: Format.RFC3986 }; /***/ }), /* 36 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const tls = __webpack_require__(379) const net = __webpack_require__(71) const debug = __webpack_require__(15)('mqttjs:tls') function buildBuilder (mqttClient, opts) { opts.port = opts.port || 8883 opts.host = opts.hostname || opts.host || 'localhost' if (net.isIP(opts.host) === 0) { opts.servername = opts.host } opts.rejectUnauthorized = opts.rejectUnauthorized !== false delete opts.path debug('port %d host %s rejectUnauthorized %b', opts.port, opts.host, opts.rejectUnauthorized) const connection = tls.connect(opts) /* eslint no-use-before-define: [2, "nofunc"] */ connection.on('secureConnect', function () { if (opts.rejectUnauthorized && !connection.authorized) { connection.emit('error', new Error('TLS not authorized')) } else { connection.removeListener('error', handleTLSerrors) } }) function handleTLSerrors (err) { // How can I get verify this error is a tls error? if (opts.rejectUnauthorized) { mqttClient.emit('error', err) } // close this connection to match the behaviour of net // otherwise all we get is an error from the connection // and close event doesn't fire. This is a work around // to enable the reconnect code to work the same as with // net.createConnection connection.end() } connection.on('error', handleTLSerrors) return connection } module.exports = buildBuilder /***/ }), /* 37 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(Buffer, process) {var stream = __webpack_require__(19) var eos = __webpack_require__(380) var inherits = __webpack_require__(16) var shift = __webpack_require__(383) var SIGNAL_FLUSH = (Buffer.from && Buffer.from !== Uint8Array.from) ? Buffer.from([0]) : new Buffer([0]) var onuncork = function(self, fn) { if (self._corked) self.once('uncork', fn) else fn() } var autoDestroy = function (self, err) { if (self._autoDestroy) self.destroy(err) } var destroyer = function(self, end) { return function(err) { if (err) autoDestroy(self, err.message === 'premature close' ? null : err) else if (end && !self._ended) self.end() } } var end = function(ws, fn) { if (!ws) return fn() if (ws._writableState && ws._writableState.finished) return fn() if (ws._writableState) return ws.end(fn) ws.end() fn() } var noop = function() {} var toStreams2 = function(rs) { return new (stream.Readable)({objectMode:true, highWaterMark:16}).wrap(rs) } var Duplexify = function(writable, readable, opts) { if (!(this instanceof Duplexify)) return new Duplexify(writable, readable, opts) stream.Duplex.call(this, opts) this._writable = null this._readable = null this._readable2 = null this._autoDestroy = !opts || opts.autoDestroy !== false this._forwardDestroy = !opts || opts.destroy !== false this._forwardEnd = !opts || opts.end !== false this._corked = 1 // start corked this._ondrain = null this._drained = false this._forwarding = false this._unwrite = null this._unread = null this._ended = false this.destroyed = false if (writable) this.setWritable(writable) if (readable) this.setReadable(readable) } inherits(Duplexify, stream.Duplex) Duplexify.obj = function(writable, readable, opts) { if (!opts) opts = {} opts.objectMode = true opts.highWaterMark = 16 return new Duplexify(writable, readable, opts) } Duplexify.prototype.cork = function() { if (++this._corked === 1) this.emit('cork') } Duplexify.prototype.uncork = function() { if (this._corked && --this._corked === 0) this.emit('uncork') } Duplexify.prototype.setWritable = function(writable) { if (this._unwrite) this._unwrite() if (this.destroyed) { if (writable && writable.destroy) writable.destroy() return } if (writable === null || writable === false) { this.end() return } var self = this var unend = eos(writable, {writable:true, readable:false}, destroyer(this, this._forwardEnd)) var ondrain = function() { var ondrain = self._ondrain self._ondrain = null if (ondrain) ondrain() } var clear = function() { self._writable.removeListener('drain', ondrain) unend() } if (this._unwrite) process.nextTick(ondrain) // force a drain on stream reset to avoid livelocks this._writable = writable this._writable.on('drain', ondrain) this._unwrite = clear this.uncork() // always uncork setWritable } Duplexify.prototype.setReadable = function(readable) { if (this._unread) this._unread() if (this.destroyed) { if (readable && readable.destroy) readable.destroy() return } if (readable === null || readable === false) { this.push(null) this.resume() return } var self = this var unend = eos(readable, {writable:false, readable:true}, destroyer(this)) var onreadable = function() { self._forward() } var onend = function() { self.push(null) } var clear = function() { self._readable2.removeListener('readable', onreadable) self._readable2.removeListener('end', onend) unend() } this._drained = true this._readable = readable this._readable2 = readable._readableState ? readable : toStreams2(readable) this._readable2.on('readable', onreadable) this._readable2.on('end', onend) this._unread = clear this._forward() } Duplexify.prototype._read = function() { this._drained = true this._forward() } Duplexify.prototype._forward = function() { if (this._forwarding || !this._readable2 || !this._drained) return this._forwarding = true var data while (this._drained && (data = shift(this._readable2)) !== null) { if (this.destroyed) continue this._drained = this.push(data) } this._forwarding = false } Duplexify.prototype.destroy = function(err, cb) { if (!cb) cb = noop if (this.destroyed) return cb(null) this.destroyed = true var self = this process.nextTick(function() { self._destroy(err) cb(null) }) } Duplexify.prototype._destroy = function(err) { if (err) { var ondrain = this._ondrain this._ondrain = null if (ondrain) ondrain(err) else this.emit('error', err) } if (this._forwardDestroy) { if (this._readable && this._readable.destroy) this._readable.destroy() if (this._writable && this._writable.destroy) this._writable.destroy() } this.emit('close') } Duplexify.prototype._write = function(data, enc, cb) { if (this.destroyed) return if (this._corked) return onuncork(this, this._write.bind(this, data, enc, cb)) if (data === SIGNAL_FLUSH) return this._finish(cb) if (!this._writable) return cb() if (this._writable.write(data) === false) this._ondrain = cb else if (!this.destroyed) cb() } Duplexify.prototype._finish = function(cb) { var self = this this.emit('preend') onuncork(this, function() { end(self._forwardEnd && self._writable, function() { // haxx to not emit prefinish twice if (self._writableState.prefinished === false) self._writableState.prefinished = true self.emit('prefinish') onuncork(self, cb) }) }) } Duplexify.prototype.end = function(data, enc, cb) { if (typeof data === 'function') return this.end(null, null, data) if (typeof enc === 'function') return this.end(data, null, enc) this._ended = true if (data) this.write(data) if (!this._writableState.ending && !this._writableState.destroyed) this.write(SIGNAL_FLUSH) return stream.Writable.prototype.end.call(this, cb) } module.exports = Duplexify /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13).Buffer, __webpack_require__(14))) /***/ }), /* 38 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var _AElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); /* harmony import */ var _OOP__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2); /*** * @augments AElement * @augments SVGGraphicsElement * @constructor */ function AElementNS() { _AElement__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].call(this); } _AElement__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].prototype.afterAttached = function () { if (this.isDescendantOf(document.body)) return Promise.resolve(); var attachHookElt = this.$attachhook || this.querySelector('.absol-attachhook'); if (!attachHookElt) { var constructor; if (this.tagName.toLowerCase() === 'svg' || this.getBBox) { attachHookElt = document.createElementNS('http://www.w3.org/2000/svg', 'image'); attachHookElt.setAttributeNS(null, 'href',''); constructor = AElementNS; } else { attachHookElt = document.createElement('img'); attachHookElt.src = ''; constructor = AElementNS; } attachHookElt.classList.add('absol-attachhook'); Object.assign(attachHookElt, constructor.prototype); constructor.call(attachHookElt); attachHookElt.defineEvent('attached'); this.$attachhook = attachHookElt; this.$attachhook.on('error', function (event) { if (this.isDescendantOf(document.body)) this.emit('attached', event, this); }); this.appendChild(attachHookElt); } return new Promise(function (rs) { attachHookElt.once('attached', rs); }); }; _OOP__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].mixClass(AElementNS, _AElement__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"]); AElementNS.prototype.attr = function () { if (arguments.length == 1) { if (typeof (arguments[0]) == 'string') { if (this._azar_extendAttributes[arguments[0]]) { return this._azar_extendAttributes[arguments[0]].get.call(this); } else return this.getAttributeNS(null, arguments[0]); } else { for (var key in arguments[0]) { this.attr(key, arguments[0][key]); } } } else { if (arguments.length == 2) { if (arguments[1] === null || arguments[1] === undefined) { if (this._azar_extendAttributes[arguments[0]]) { this._azar_extendAttributes[arguments[0]].remove.call(this, arguments[1]); } else this.removeAttributeNS(null, arguments[0]); } else { if (this._azar_extendAttributes[arguments[0]]) { this._azar_extendAttributes[arguments[0]].set.call(this, arguments[1]); } else { this.setAttributeNS(null, arguments[0], arguments[1]); } } } } return this; }; /* harmony default export */ __webpack_exports__["a"] = (AElementNS); /***/ }), /* 39 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(78); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 40 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(90); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 41 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(91); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 42 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(98); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 43 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(117); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 44 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(120); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 45 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(123); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 46 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(124); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 47 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(160); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 48 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(163); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 49 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(183); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 50 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(204); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 51 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(205); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 52 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(230); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 53 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(269); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 54 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(270); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 55 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(289); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 56 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(290); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 57 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Module dependencies */ const xtend = __webpack_require__(32) const Readable = __webpack_require__(19).Readable const streamsOpts = { objectMode: true } const defaultStoreOptions = { clean: true } /** * In-memory implementation of the message store * This can actually be saved into files. * * @param {Object} [options] - store options */ function Store (options) { if (!(this instanceof Store)) { return new Store(options) } this.options = options || {} // Defaults this.options = xtend(defaultStoreOptions, options) this._inflights = new Map() } /** * Adds a packet to the store, a packet is * anything that has a messageId property. * */ Store.prototype.put = function (packet, cb) { this._inflights.set(packet.messageId, packet) if (cb) { cb() } return this } /** * Creates a stream with all the packets in the store * */ Store.prototype.createStream = function () { const stream = new Readable(streamsOpts) const values = [] let destroyed = false let i = 0 this._inflights.forEach(function (value, key) { values.push(value) }) stream._read = function () { if (!destroyed && i < values.length) { this.push(values[i++]) } else { this.push(null) } } stream.destroy = function () { if (destroyed) { return } const self = this destroyed = true setTimeout(function () { self.emit('close') }, 0) } return stream } /** * deletes a packet from the store. */ Store.prototype.del = function (packet, cb) { packet = this._inflights.get(packet.messageId) if (packet) { this._inflights.delete(packet.messageId) cb(null, packet) } else if (cb) { cb(new Error('missing packet')) } return this } /** * get a packet from the store. */ Store.prototype.get = function (packet, cb) { packet = this._inflights.get(packet.messageId) if (packet) { cb(null, packet) } else if (cb) { cb(new Error('missing packet')) } return this } /** * Close the store */ Store.prototype.close = function (cb) { if (this.options.clean) { this._inflights = null } if (cb) { cb() } } module.exports = Store /***/ }), /* 58 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. /*<replacement>*/ var pna = __webpack_require__(24); /*</replacement>*/ module.exports = Readable; /*<replacement>*/ var isArray = __webpack_require__(59); /*</replacement>*/ /*<replacement>*/ var Duplex; /*</replacement>*/ Readable.ReadableState = ReadableState; /*<replacement>*/ var EE = __webpack_require__(23).EventEmitter; var EElistenerCount = function (emitter, type) { return emitter.listeners(type).length; }; /*</replacement>*/ /*<replacement>*/ var Stream = __webpack_require__(60); /*</replacement>*/ /*<replacement>*/ var Buffer = __webpack_require__(28).Buffer; var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); } function _isUint8Array(obj) { return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; } /*</replacement>*/ /*<replacement>*/ var util = Object.create(__webpack_require__(25)); util.inherits = __webpack_require__(16); /*</replacement>*/ /*<replacement>*/ var debugUtil = __webpack_require__(327); var debug = void 0; if (debugUtil && debugUtil.debuglog) { debug = debugUtil.debuglog('stream'); } else { debug = function () {}; } /*</replacement>*/ var BufferList = __webpack_require__(328); var destroyImpl = __webpack_require__(61); var StringDecoder; util.inherits(Readable, Stream); var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; function prependListener(emitter, event, fn) { // Sadly this is not cacheable as some libraries bundle their own // event emitter implementation with them. if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any // userland ones. NEVER DO THIS. This is here only because this code needs // to continue to work with older versions of Node.js that do not include // the prependListener() method. The goal is to eventually remove this hack. if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; } function ReadableState(options, stream) { Duplex = Duplex || __webpack_require__(20); options = options || {}; // Duplex streams are both readable and writable, but share // the same options object. // However, some cases require setting options to different // values for the readable and the writable sides of the duplex stream. // These options can be provided separately as readableXXX and writableXXX. var isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to // make all the buffer merging and length checks go away this.objectMode = !!options.objectMode; if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer // Note: 0 is a valid value, means "don't call _read preemptively ever" var hwm = options.highWaterMark; var readableHwm = options.readableHighWaterMark; var defaultHwm = this.objectMode ? 16 : 16 * 1024; if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; // cast to ints. this.highWaterMark = Math.floor(this.highWaterMark); // A linked list is used to store data chunks instead of an array because the // linked list can remove elements from the beginning faster than // array.shift() this.buffer = new BufferList(); this.length = 0; this.pipes = null; this.pipesCount = 0; this.flowing = null; this.ended = false; this.endEmitted = false; this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted // immediately, or on a later tick. We set this to true at first, because // any actions that shouldn't happen until "later" should generally also // not happen before the first read call. this.sync = true; // whenever we return null, then we set a flag to say // that we're awaiting a 'readable' event emission. this.needReadable = false; this.emittedReadable = false; this.readableListening = false; this.resumeScheduled = false; // has it been destroyed this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string // encoding is 'binary' so we have to make this configurable. // Everything else in the universe uses 'utf8', though. this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled this.readingMore = false; this.decoder = null; this.encoding = null; if (options.encoding) { if (!StringDecoder) StringDecoder = __webpack_require__(63).StringDecoder; this.decoder = new StringDecoder(options.encoding); this.encoding = options.encoding; } } function Readable(options) { Duplex = Duplex || __webpack_require__(20); if (!(this instanceof Readable)) return new Readable(options); this._readableState = new ReadableState(options, this); // legacy this.readable = true; if (options) { if (typeof options.read === 'function') this._read = options.read; if (typeof options.destroy === 'function') this._destroy = options.destroy; } Stream.call(this); } Object.defineProperty(Readable.prototype, 'destroyed', { get: function () { if (this._readableState === undefined) { return false; } return this._readableState.destroyed; }, set: function (value) { // we ignore the value if the stream // has not been initialized yet if (!this._readableState) { return; } // backward compatibility, the user is explicitly // managing destroyed this._readableState.destroyed = value; } }); Readable.prototype.destroy = destroyImpl.destroy; Readable.prototype._undestroy = destroyImpl.undestroy; Readable.prototype._destroy = function (err, cb) { this.push(null); cb(err); }; // Manually shove something into the read() buffer. // This returns true if the highWaterMark has not been hit yet, // similar to how Writable.write() returns true if you should // write() some more. Readable.prototype.push = function (chunk, encoding) { var state = this._readableState; var skipChunkCheck; if (!state.objectMode) { if (typeof chunk === 'string') { encoding = encoding || state.defaultEncoding; if (encoding !== state.encoding) { chunk = Buffer.from(chunk, encoding); encoding = ''; } skipChunkCheck = true; } } else { skipChunkCheck = true; } return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); }; // Unshift should *always* be something directly out of read() Readable.prototype.unshift = function (chunk) { return readableAddChunk(this, chunk, null, true, false); }; function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { var state = stream._readableState; if (chunk === null) { state.reading = false; onEofChunk(stream, state); } else { var er; if (!skipChunkCheck) er = chunkInvalid(state, chunk); if (er) { stream.emit('error', er); } else if (state.objectMode || chunk && chunk.length > 0) { if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { chunk = _uint8ArrayToBuffer(chunk); } if (addToFront) { if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); } else if (state.ended) { stream.emit('error', new Error('stream.push() after EOF')); } else { state.reading = false; if (state.decoder && !encoding) { chunk = state.decoder.write(chunk); if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); } else { addChunk(stream, state, chunk, false); } } } else if (!addToFront) { state.reading = false; } } return needMoreData(state); } function addChunk(stream, state, chunk, addToFront) { if (state.flowing && state.length === 0 && !state.sync) { stream.emit('data', chunk); stream.read(0); } else { // update the buffer info. state.length += state.objectMode ? 1 : chunk.length; if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); if (state.needReadable) emitReadable(stream); } maybeReadMore(stream, state); } function chunkInvalid(state, chunk) { var er; if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { er = new TypeError('Invalid non-string/buffer chunk'); } return er; } // if it's past the high water mark, we can push in some more. // Also, if we have no data yet, we can stand some // more bytes. This is to work around cases where hwm=0, // such as the repl. Also, if the push() triggered a // readable event, and the user called read(largeNumber) such that // needReadable was set, then we ought to push more, so that another // 'readable' event will be triggered. function needMoreData(state) { return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); } Readable.prototype.isPaused = function () { return this._readableState.flowing === false; }; // backwards compatibility. Readable.prototype.setEncoding = function (enc) { if (!StringDecoder) StringDecoder = __webpack_require__(63).StringDecoder; this._readableState.decoder = new StringDecoder(enc); this._readableState.encoding = enc; return this; }; // Don't raise the hwm > 8MB var MAX_HWM = 0x800000; function computeNewHighWaterMark(n) { if (n >= MAX_HWM) { n = MAX_HWM; } else { // Get the next highest power of 2 to prevent increasing hwm excessively in // tiny amounts n--; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; n++; } return n; } // This function is designed to be inlinable, so please take care when making // changes to the function body. function howMuchToRead(n, state) { if (n <= 0 || state.length === 0 && state.ended) return 0; if (state.objectMode) return 1; if (n !== n) { // Only flow one buffer at a time if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; } // If we're asking for more than the current hwm, then raise the hwm. if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); if (n <= state.length) return n; // Don't have enough if (!state.ended) { state.needReadable = true; return 0; } return state.length; } // you can override either this method, or the async _read(n) below. Readable.prototype.read = function (n) { debug('read', n); n = parseInt(n, 10); var state = this._readableState; var nOrig = n; if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we // already have a bunch of data in the buffer, then just trigger // the 'readable' event and move on. if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { debug('read: emitReadable', state.length, state.ended); if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); return null; } n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. if (n === 0 && state.ended) { if (state.length === 0) endReadable(this); return null; } // All the actual chunk generation logic needs to be // *below* the call to _read. The reason is that in certain // synthetic stream cases, such as passthrough streams, _read // may be a completely synchronous operation which may change // the state of the read buffer, providing enough data when // before there was *not* enough. // // So, the steps are: // 1. Figure out what the state of things will be after we do // a read from the buffer. // // 2. If that resulting state will trigger a _read, then call _read. // Note that this may be asynchronous, or synchronous. Yes, it is // deeply ugly to write APIs this way, but that still doesn't mean // that the Readable class should behave improperly, as streams are // designed to be sync/async agnostic. // Take note if the _read call is sync or async (ie, if the read call // has returned yet), so that we know whether or not it's safe to emit // 'readable' etc. // // 3. Actually pull the requested chunks out of the buffer and return. // if we need a readable event, then we need to do some reading. var doRead = state.needReadable; debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some if (state.length === 0 || state.length - n < state.highWaterMark) { doRead = true; debug('length less than watermark', doRead); } // however, if we've ended, then there's no point, and if we're already // reading, then it's unnecessary. if (state.ended || state.reading) { doRead = false; debug('reading or ended', doRead); } else if (doRead) { debug('do read'); state.reading = true; state.sync = true; // if the length is currently zero, then we *need* a readable event. if (state.length === 0) state.needReadable = true; // call internal read method this._read(state.highWaterMark); state.sync = false; // If _read pushed data synchronously, then `reading` will be false, // and we need to re-evaluate how much data we can return to the user. if (!state.reading) n = howMuchToRead(nOrig, state); } var ret; if (n > 0) ret = fromList(n, state);else ret = null; if (ret === null) { state.needReadable = true; n = 0; } else { state.length -= n; } if (state.length === 0) { // If we have nothing in the buffer, then we want to know // as soon as we *do* get something into the buffer. if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. if (nOrig !== n && state.ended) endReadable(this); } if (ret !== null) this.emit('data', ret); return ret; }; function onEofChunk(stream, state) { if (state.ended) return; if (state.decoder) { var chunk = state.decoder.end(); if (chunk && chunk.length) { state.buffer.push(chunk); state.length += state.objectMode ? 1 : chunk.length; } } state.ended = true; // emit 'readable' now to make sure it gets picked up. emitReadable(stream); } // Don't emit readable right away in sync mode, because this can trigger // another read() call => stack overflow. This way, it might trigger // a nextTick recursion warning, but that's not so bad. function emitReadable(stream) { var state = stream._readableState; state.needReadable = false; if (!state.emittedReadable) { debug('emitReadable', state.flowing); state.emittedReadable = true; if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); } } function emitReadable_(stream) { debug('emit readable'); stream.emit('readable'); flow(stream); } // at this point, the user has presumably seen the 'readable' event, // and called read() to consume some data. that may have triggered // in turn another _read(n) call, in which case reading = true if // it's in progress. // However, if we're not ended, or reading, and the length < hwm, // then go ahead and try to read some more preemptively. function maybeReadMore(stream, state) { if (!state.readingMore) { state.readingMore = true; pna.nextTick(maybeReadMore_, stream, state); } } function maybeReadMore_(stream, state) { var len = state.length; while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { debug('maybeReadMore read 0'); stream.read(0); if (len === state.length) // didn't get any data, stop spinning. break;else len = state.length; } state.readingMore = false; } // abstract method. to be overridden in specific implementation classes. // call cb(er, data) where data is <= n in length. // for virtual (non-string, non-buffer) streams, "length" is somewhat // arbitrary, and perhaps not very meaningful. Readable.prototype._read = function (n) { this.emit('error', new Error('_read() is not implemented')); }; Readable.prototype.pipe = function (dest, pipeOpts) { var src = this; var state = this._readableState; switch (state.pipesCount) { case 0: state.pipes = dest; break; case 1: state.pipes = [state.pipes, dest]; break; default: state.pipes.push(dest); break; } state.pipesCount += 1; debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; var endFn = doEnd ? onend : unpipe; if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); dest.on('unpipe', onunpipe); function onunpipe(readable, unpipeInfo) { debug('onunpipe'); if (readable === src) { if (unpipeInfo && unpipeInfo.hasUnpiped === false) { unpipeInfo.hasUnpiped = true; cleanup(); } } } function onend() { debug('onend'); dest.end(); } // when the dest drains, it reduces the awaitDrain counter // on the source. This would be more elegant with a .once() // handler in flow(), but adding and removing repeatedly is // too slow. var ondrain = pipeOnDrain(src); dest.on('drain', ondrain); var cleanedUp = false; function cleanup() { debug('cleanup'); // cleanup event handlers once the pipe is broken dest.removeListener('close', onclose); dest.removeListener('finish', onfinish); dest.removeListener('drain', ondrain); dest.removeListener('error', onerror); dest.removeListener('unpipe', onunpipe); src.removeListener('end', onend); src.removeListener('end', unpipe); src.removeListener('data', ondata); cleanedUp = true; // if the reader is waiting for a drain event from this // specific writer, then it would cause it to never start // flowing again. // So, if this is awaiting a drain, then we just call it now. // If we don't know, then assume that we are waiting for one. if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); } // If the user pushes more data while we're writing to dest then we'll end up // in ondata again. However, we only want to increase awaitDrain once because // dest will only emit one 'drain' event for the multiple writes. // => Introduce a guard on increasing awaitDrain. var increasedAwaitDrain = false; src.on('data', ondata); function ondata(chunk) { debug('ondata'); increasedAwaitDrain = false; var ret = dest.write(chunk); if (false === ret && !increasedAwaitDrain) { // If the user unpiped during `dest.write()`, it is possible // to get stuck in a permanently paused state if that write // also returned false. // => Check whether `dest` is still a piping destination. if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { debug('false write response, pause', state.awaitDrain); state.awaitDrain++; increasedAwaitDrain = true; } src.pause(); } } // if the dest has an error, then stop piping into it. // however, don't suppress the throwing behavior for this. function onerror(er) { debug('onerror', er); unpipe(); dest.removeListener('error', onerror); if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); } // Make sure our error handler is attached before userland ones. prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. function onclose() { dest.removeListener('finish', onfinish); unpipe(); } dest.once('close', onclose); function onfinish() { debug('onfinish'); dest.removeListener('close', onclose); unpipe(); } dest.once('finish', onfinish); function unpipe() { debug('unpipe'); src.unpipe(dest); } // tell the dest that it's being piped to dest.emit('pipe', src); // start the flow if it hasn't been started already. if (!state.flowing) { debug('pipe resume'); src.resume(); } return dest; }; function pipeOnDrain(src) { return function () { var state = src._readableState; debug('pipeOnDrain', state.awaitDrain); if (state.awaitDrain) state.awaitDrain--; if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { state.flowing = true; flow(src); } }; } Readable.prototype.unpipe = function (dest) { var state = this._readableState; var unpipeInfo = { hasUnpiped: false }; // if we're not piping anywhere, then do nothing. if (state.pipesCount === 0) return this; // just one destination. most common case. if (state.pipesCount === 1) { // passed in one, but it's not the right one. if (dest && dest !== state.pipes) return this; if (!dest) dest = state.pipes; // got a match. state.pipes = null; state.pipesCount = 0; state.flowing = false; if (dest) dest.emit('unpipe', this, unpipeInfo); return this; } // slow case. multiple pipe destinations. if (!dest) { // remove all. var dests = state.pipes; var len = state.pipesCount; state.pipes = null; state.pipesCount = 0; state.flowing = false; for (var i = 0; i < len; i++) { dests[i].emit('unpipe', this, { hasUnpiped: false }); }return this; } // try to find the right one. var index = indexOf(state.pipes, dest); if (index === -1) return this; state.pipes.splice(index, 1); state.pipesCount -= 1; if (state.pipesCount === 1) state.pipes = state.pipes[0]; dest.emit('unpipe', this, unpipeInfo); return this; }; // set up data events if they are asked for // Ensure readable listeners eventually get something Readable.prototype.on = function (ev, fn) { var res = Stream.prototype.on.call(this, ev, fn); if (ev === 'data') { // Start flowing on next tick if stream isn't explicitly paused if (this._readableState.flowing !== false) this.resume(); } else if (ev === 'readable') { var state = this._readableState; if (!state.endEmitted && !state.readableListening) { state.readableListening = state.needReadable = true; state.emittedReadable = false; if (!state.reading) { pna.nextTick(nReadingNextTick, this); } else if (state.length) { emitReadable(this); } } } return res; }; Readable.prototype.addListener = Readable.prototype.on; function nReadingNextTick(self) { debug('readable nexttick read 0'); self.read(0); } // pause() and resume() are remnants of the legacy readable stream API // If the user uses them, then switch into old mode. Readable.prototype.resume = function () { var state = this._readableState; if (!state.flowing) { debug('resume'); state.flowing = true; resume(this, state); } return this; }; function resume(stream, state) { if (!state.resumeScheduled) { state.resumeScheduled = true; pna.nextTick(resume_, stream, state); } } function resume_(stream, state) { if (!state.reading) { debug('resume read 0'); stream.read(0); } state.resumeScheduled = false; state.awaitDrain = 0; stream.emit('resume'); flow(stream); if (state.flowing && !state.reading) stream.read(0); } Readable.prototype.pause = function () { debug('call pause flowing=%j', this._readableState.flowing); if (false !== this._readableState.flowing) { debug('pause'); this._readableState.flowing = false; this.emit('pause'); } return this; }; function flow(stream) { var state = stream._readableState; debug('flow', state.flowing); while (state.flowing && stream.read() !== null) {} } // wrap an old-style stream as the async data source. // This is *not* part of the readable stream interface. // It is an ugly unfortunate mess of history. Readable.prototype.wrap = function (stream) { var _this = this; var state = this._readableState; var paused = false; stream.on('end', function () { debug('wrapped end'); if (state.decoder && !state.ended) { var chunk = state.decoder.end(); if (chunk && chunk.length) _this.push(chunk); } _this.push(null); }); stream.on('data', function (chunk) { debug('wrapped data'); if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; var ret = _this.push(chunk); if (!ret) { paused = true; stream.pause(); } }); // proxy all the other methods. // important when wrapping filters and duplexes. for (var i in stream) { if (this[i] === undefined && typeof stream[i] === 'function') { this[i] = function (method) { return function () { return stream[method].apply(stream, arguments); }; }(i); } } // proxy certain important events. for (var n = 0; n < kProxyEvents.length; n++) { stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); } // when we try to consume some more bytes, simply unpause the // underlying stream. this._read = function (n) { debug('wrapped _read', n); if (paused) { paused = false; stream.resume(); } }; return this; }; Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function () { return this._readableState.highWaterMark; } }); // exposed for testing purposes only. Readable._fromList = fromList; // Pluck off n bytes from an array of buffers. // Length is the combined lengths of all the buffers in the list. // This function is designed to be inlinable, so please take care when making // changes to the function body. function fromList(n, state) { // nothing buffered if (state.length === 0) return null; var ret; if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { // read it all, truncate the list if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); state.buffer.clear(); } else { // read part of list ret = fromListPartial(n, state.buffer, state.decoder); } return ret; } // Extracts only enough buffered data to satisfy the amount requested. // This function is designed to be inlinable, so please take care when making // changes to the function body. function fromListPartial(n, list, hasStrings) { var ret; if (n < list.head.data.length) { // slice is the same for buffers and strings ret = list.head.data.slice(0, n); list.head.data = list.head.data.slice(n); } else if (n === list.head.data.length) { // first chunk is a perfect match ret = list.shift(); } else { // result spans more than one buffer ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); } return ret; } // Copies a specified amount of characters from the list of buffered data // chunks. // This function is designed to be inlinable, so please take care when making // changes to the function body. function copyFromBufferString(n, list) { var p = list.head; var c = 1; var ret = p.data; n -= ret.length; while (p = p.next) { var str = p.data; var nb = n > str.length ? str.length : n; if (nb === str.length) ret += str;else ret += str.slice(0, n); n -= nb; if (n === 0) { if (nb === str.length) { ++c; if (p.next) list.head = p.next;else list.head = list.tail = null; } else { list.head = p; p.data = str.slice(nb); } break; } ++c; } list.length -= c; return ret; } // Copies a specified amount of bytes from the list of buffered data chunks. // This function is designed to be inlinable, so please take care when making // changes to the function body. function copyFromBuffer(n, list) { var ret = Buffer.allocUnsafe(n); var p = list.head; var c = 1; p.data.copy(ret); n -= p.data.length; while (p = p.next) { var buf = p.data; var nb = n > buf.length ? buf.length : n; buf.copy(ret, ret.length - n, 0, nb); n -= nb; if (n === 0) { if (nb === buf.length) { ++c; if (p.next) list.head = p.next;else list.head = list.tail = null; } else { list.head = p; p.data = buf.slice(nb); } break; } ++c; } list.length -= c; return ret; } function endReadable(stream) { var state = stream._readableState; // If we get here before consuming all the bytes, then that is a // bug in node. Should never happen. if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); if (!state.endEmitted) { state.ended = true; pna.nextTick(endReadableNT, state, stream); } } function endReadableNT(state, stream) { // Check that we didn't get one last unshift. if (!state.endEmitted && state.length === 0) { state.endEmitted = true; stream.readable = false; stream.emit('end'); } } function indexOf(xs, x) { for (var i = 0, l = xs.length; i < l; i++) { if (xs[i] === x) return i; } return -1; } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12), __webpack_require__(14))) /***/ }), /* 59 */ /***/ (function(module, exports) { var toString = {}.toString; module.exports = Array.isArray || function (arr) { return toString.call(arr) == '[object Array]'; }; /***/ }), /* 60 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(23).EventEmitter; /***/ }), /* 61 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /*<replacement>*/ var pna = __webpack_require__(24); /*</replacement>*/ // undocumented cb() API, needed for core, not for public API function destroy(err, cb) { var _this = this; var readableDestroyed = this._readableState && this._readableState.destroyed; var writableDestroyed = this._writableState && this._writableState.destroyed; if (readableDestroyed || writableDestroyed) { if (cb) { cb(err); } else if (err) { if (!this._writableState) { pna.nextTick(emitErrorNT, this, err); } else if (!this._writableState.errorEmitted) { this._writableState.errorEmitted = true; pna.nextTick(emitErrorNT, this, err); } } return this; } // we set destroyed to true before firing error callbacks in order // to make it re-entrance safe in case destroy() is called within callbacks if (this._readableState) { this._readableState.destroyed = true; } // if this is a duplex stream mark the writable part as destroyed as well if (this._writableState) { this._writableState.destroyed = true; } this._destroy(err || null, function (err) { if (!cb && err) { if (!_this._writableState) { pna.nextTick(emitErrorNT, _this, err); } else if (!_this._writableState.errorEmitted) { _this._writableState.errorEmitted = true; pna.nextTick(emitErrorNT, _this, err); } } else if (cb) { cb(err); } }); return this; } function undestroy() { if (this._readableState) { this._readableState.destroyed = false; this._readableState.reading = false; this._readableState.ended = false; this._readableState.endEmitted = false; } if (this._writableState) { this._writableState.destroyed = false; this._writableState.ended = false; this._writableState.ending = false; this._writableState.finalCalled = false; this._writableState.prefinished = false; this._writableState.finished = false; this._writableState.errorEmitted = false; } } function emitErrorNT(self, err) { self.emit('error', err); } module.exports = { destroy: destroy, undestroy: undestroy }; /***/ }), /* 62 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process, setImmediate, global) {// Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. // A bit simpler than readable streams. // Implement an async ._write(chunk, encoding, cb), and it'll handle all // the drain event emission and buffering. /*<replacement>*/ var pna = __webpack_require__(24); /*</replacement>*/ module.exports = Writable; /* <replacement> */ function WriteReq(chunk, encoding, cb) { this.chunk = chunk; this.encoding = encoding; this.callback = cb; this.next = null; } // It seems a linked list but it is not // there will be only 2 of these for each stream function CorkedRequest(state) { var _this = this; this.next = null; this.entry = null; this.finish = function () { onCorkedFinish(_this, state); }; } /* </replacement> */ /*<replacement>*/ var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; /*</replacement>*/ /*<replacement>*/ var Duplex; /*</replacement>*/ Writable.WritableState = WritableState; /*<replacement>*/ var util = Object.create(__webpack_require__(25)); util.inherits = __webpack_require__(16); /*</replacement>*/ /*<replacement>*/ var internalUtil = { deprecate: __webpack_require__(332) }; /*</replacement>*/ /*<replacement>*/ var Stream = __webpack_require__(60); /*</replacement>*/ /*<replacement>*/ var Buffer = __webpack_require__(28).Buffer; var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); } function _isUint8Array(obj) { return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; } /*</replacement>*/ var destroyImpl = __webpack_require__(61); util.inherits(Writable, Stream); function nop() {} function WritableState(options, stream) { Duplex = Duplex || __webpack_require__(20); options = options || {}; // Duplex streams are both readable and writable, but share // the same options object. // However, some cases require setting options to different // values for the readable and the writable sides of the duplex stream. // These options can be provided separately as readableXXX and writableXXX. var isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream // contains buffers or objects. this.objectMode = !!options.objectMode; if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false // Note: 0 is a valid value, means that we always return false if // the entire buffer is not flushed immediately on write() var hwm = options.highWaterMark; var writableHwm = options.writableHighWaterMark; var defaultHwm = this.objectMode ? 16 : 16 * 1024; if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; // cast to ints. this.highWaterMark = Math.floor(this.highWaterMark); // if _final has been called this.finalCalled = false; // drain event flag. this.needDrain = false; // at the start of calling end() this.ending = false; // when end() has been called, and returned this.ended = false; // when 'finish' is emitted this.finished = false; // has it been destroyed this.destroyed = false; // should we decode strings into buffers before passing to _write? // this is here so that some node-core streams can optimize string // handling at a lower level. var noDecode = options.decodeStrings === false; this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string // encoding is 'binary' so we have to make this configurable. // Everything else in the universe uses 'utf8', though. this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement // of how much we're waiting to get pushed to some underlying // socket or file. this.length = 0; // a flag to see when we're in the middle of a write. this.writing = false; // when true all writes will be buffered until .uncork() call this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, // or on a later tick. We set this to true at first, because any // actions that shouldn't happen until "later" should generally also // not happen before the first write call. this.sync = true; // a flag to know if we're processing previously buffered items, which // may call the _write() callback in the same tick, so that we don't // end up in an overlapped onwrite situation. this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) this.onwrite = function (er) { onwrite(stream, er); }; // the callback that the user supplies to write(chunk,encoding,cb) this.writecb = null; // the amount that is being written when _write is called. this.writelen = 0; this.bufferedRequest = null; this.lastBufferedRequest = null; // number of pending user-supplied write callbacks // this must be 0 before 'finish' can be emitted this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs // This is relevant for synchronous Transform streams this.prefinished = false; // True if the error was already emitted and should not be thrown again this.errorEmitted = false; // count buffered requests this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always // one allocated and free to use, and we maintain at most two this.corkedRequestsFree = new CorkedRequest(this); } WritableState.prototype.getBuffer = function getBuffer() { var current = this.bufferedRequest; var out = []; while (current) { out.push(current); current = current.next; } return out; }; (function () { try { Object.defineProperty(WritableState.prototype, 'buffer', { get: internalUtil.deprecate(function () { return this.getBuffer(); }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') }); } catch (_) {} })(); // Test _writableState for inheritance to account for Duplex streams, // whose prototype chain only points to Readable. var realHasInstance; if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { realHasInstance = Function.prototype[Symbol.hasInstance]; Object.defineProperty(Writable, Symbol.hasInstance, { value: function (object) { if (realHasInstance.call(this, object)) return true; if (this !== Writable) return false; return object && object._writableState instanceof WritableState; } }); } else { realHasInstance = function (object) { return object instanceof this; }; } function Writable(options) { Duplex = Duplex || __webpack_require__(20); // Writable ctor is applied to Duplexes, too. // `realHasInstance` is necessary because using plain `instanceof` // would return false, as no `_writableState` property is attached. // Trying to use the custom `instanceof` for Writable here will also break the // Node.js LazyTransform implementation, which has a non-trivial getter for // `_writableState` that would lead to infinite recursion. if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { return new Writable(options); } this._writableState = new WritableState(options, this); // legacy. this.writable = true; if (options) { if (typeof options.write === 'function') this._write = options.write; if (typeof options.writev === 'function') this._writev = options.writev; if (typeof options.destroy === 'function') this._destroy = options.destroy; if (typeof options.final === 'function') this._final = options.final; } Stream.call(this); } // Otherwise people can pipe Writable streams, which is just wrong. Writable.prototype.pipe = function () { this.emit('error', new Error('Cannot pipe, not readable')); }; function writeAfterEnd(stream, cb) { var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb stream.emit('error', er); pna.nextTick(cb, er); } // Checks that a user-supplied chunk is valid, especially for the particular // mode the stream is in. Currently this means that `null` is never accepted // and undefined/non-string values are only allowed in object mode. function validChunk(stream, state, chunk, cb) { var valid = true; var er = false; if (chunk === null) { er = new TypeError('May not write null values to stream'); } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { er = new TypeError('Invalid non-string/buffer chunk'); } if (er) { stream.emit('error', er); pna.nextTick(cb, er); valid = false; } return valid; } Writable.prototype.write = function (chunk, encoding, cb) { var state = this._writableState; var ret = false; var isBuf = !state.objectMode && _isUint8Array(chunk); if (isBuf && !Buffer.isBuffer(chunk)) { chunk = _uint8ArrayToBuffer(chunk); } if (typeof encoding === 'function') { cb = encoding; encoding = null; } if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; if (typeof cb !== 'function') cb = nop; if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { state.pendingcb++; ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); } return ret; }; Writable.prototype.cork = function () { var state = this._writableState; state.corked++; }; Writable.prototype.uncork = function () { var state = this._writableState; if (state.corked) { state.corked--; if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); } }; Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { // node::ParseEncoding() requires lower case. if (typeof encoding === 'string') encoding = encoding.toLowerCase(); if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); this._writableState.defaultEncoding = encoding; return this; }; function decodeChunk(state, chunk, encoding) { if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { chunk = Buffer.from(chunk, encoding); } return chunk; } Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function () { return this._writableState.highWaterMark; } }); // if we're already writing something, then just put this // in the queue, and wait our turn. Otherwise, call _write // If we return false, then we need a drain event, so set that flag. function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { if (!isBuf) { var newChunk = decodeChunk(state, chunk, encoding); if (chunk !== newChunk) { isBuf = true; encoding = 'buffer'; chunk = newChunk; } } var len = state.objectMode ? 1 : chunk.length; state.length += len; var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. if (!ret) state.needDrain = true; if (state.writing || state.corked) { var last = state.lastBufferedRequest; state.lastBufferedRequest = { chunk: chunk, encoding: encoding, isBuf: isBuf, callback: cb, next: null }; if (last) { last.next = state.lastBufferedRequest; } else { state.bufferedRequest = state.lastBufferedRequest; } state.bufferedRequestCount += 1; } else { doWrite(stream, state, false, len, chunk, encoding, cb); } return ret; } function doWrite(stream, state, writev, len, chunk, encoding, cb) { state.writelen = len; state.writecb = cb; state.writing = true; state.sync = true; if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); state.sync = false; } function onwriteError(stream, state, sync, er, cb) { --state.pendingcb; if (sync) { // defer the callback if we are being called synchronously // to avoid piling up things on the stack pna.nextTick(cb, er); // this can emit finish, and it will always happen // after error pna.nextTick(finishMaybe, stream, state); stream._writableState.errorEmitted = true; stream.emit('error', er); } else { // the caller expect this to happen before if // it is async cb(er); stream._writableState.errorEmitted = true; stream.emit('error', er); // this can emit finish, but finish must // always follow error finishMaybe(stream, state); } } function onwriteStateUpdate(state) { state.writing = false; state.writecb = null; state.length -= state.writelen; state.writelen = 0; } function onwrite(stream, er) { var state = stream._writableState; var sync = state.sync; var cb = state.writecb; onwriteStateUpdate(state); if (er) onwriteError(stream, state, sync, er, cb);else { // Check if we're actually ready to finish, but don't emit yet var finished = needFinish(state); if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { clearBuffer(stream, state); } if (sync) { /*<replacement>*/ asyncWrite(afterWrite, stream, state, finished, cb); /*</replacement>*/ } else { afterWrite(stream, state, finished, cb); } } } function afterWrite(stream, state, finished, cb) { if (!finished) onwriteDrain(stream, state); state.pendingcb--; cb(); finishMaybe(stream, state); } // Must force callback to be called on nextTick, so that we don't // emit 'drain' before the write() consumer gets the 'false' return // value, and has a chance to attach a 'drain' listener. function onwriteDrain(stream, state) { if (state.length === 0 && state.needDrain) { state.needDrain = false; stream.emit('drain'); } } // if there's something in the buffer waiting, then process it function clearBuffer(stream, state) { state.bufferProcessing = true; var entry = state.bufferedRequest; if (stream._writev && entry && entry.next) { // Fast case, write everything using _writev() var l = state.bufferedRequestCount; var buffer = new Array(l); var holder = state.corkedRequestsFree; holder.entry = entry; var count = 0; var allBuffers = true; while (entry) { buffer[count] = entry; if (!entry.isBuf) allBuffers = false; entry = entry.next; count += 1; } buffer.allBuffers = allBuffers; doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time // as the hot path ends with doWrite state.pendingcb++; state.lastBufferedRequest = null; if (holder.next) { state.corkedRequestsFree = holder.next; holder.next = null; } else { state.corkedRequestsFree = new CorkedRequest(state); } state.bufferedRequestCount = 0; } else { // Slow case, write chunks one-by-one while (entry) { var chunk = entry.chunk; var encoding = entry.encoding; var cb = entry.callback; var len = state.objectMode ? 1 : chunk.length; doWrite(stream, state, false, len, chunk, encoding, cb); entry = entry.next; state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then // it means that we need to wait until it does. // also, that means that the chunk and cb are currently // being processed, so move the buffer counter past them. if (state.writing) { break; } } if (entry === null) state.lastBufferedRequest = null; } state.bufferedRequest = entry; state.bufferProcessing = false; } Writable.prototype._write = function (chunk, encoding, cb) { cb(new Error('_write() is not implemented')); }; Writable.prototype._writev = null; Writable.prototype.end = function (chunk, encoding, cb) { var state = this._writableState; if (typeof chunk === 'function') { cb = chunk; chunk = null; encoding = null; } else if (typeof encoding === 'function') { cb = encoding; encoding = null; } if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks if (state.corked) { state.corked = 1; this.uncork(); } // ignore unnecessary end() calls. if (!state.ending) endWritable(this, state, cb); }; function needFinish(state) { return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; } function callFinal(stream, state) { stream._final(function (err) { state.pendingcb--; if (err) { stream.emit('error', err); } state.prefinished = true; stream.emit('prefinish'); finishMaybe(stream, state); }); } function prefinish(stream, state) { if (!state.prefinished && !state.finalCalled) { if (typeof stream._final === 'function') { state.pendingcb++; state.finalCalled = true; pna.nextTick(callFinal, stream, state); } else { state.prefinished = true; stream.emit('prefinish'); } } } function finishMaybe(stream, state) { var need = needFinish(state); if (need) { prefinish(stream, state); if (state.pendingcb === 0) { state.finished = true; stream.emit('finish'); } } return need; } function endWritable(stream, state, cb) { state.ending = true; finishMaybe(stream, state); if (cb) { if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); } state.ended = true; stream.writable = false; } function onCorkedFinish(corkReq, state, err) { var entry = corkReq.entry; corkReq.entry = null; while (entry) { var cb = entry.callback; state.pendingcb--; cb(err); entry = entry.next; } // reuse the free corkReq. state.corkedRequestsFree.next = corkReq; } Object.defineProperty(Writable.prototype, 'destroyed', { get: function () { if (this._writableState === undefined) { return false; } return this._writableState.destroyed; }, set: function (value) { // we ignore the value if the stream // has not been initialized yet if (!this._writableState) { return; } // backward compatibility, the user is explicitly // managing destroyed this._writableState.destroyed = value; } }); Writable.prototype.destroy = destroyImpl.destroy; Writable.prototype._undestroy = destroyImpl.undestroy; Writable.prototype._destroy = function (err, cb) { this.end(); cb(err); }; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(14), __webpack_require__(330).setImmediate, __webpack_require__(12))) /***/ }), /* 63 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. /*<replacement>*/ var Buffer = __webpack_require__(28).Buffer; /*</replacement>*/ var isEncoding = Buffer.isEncoding || function (encoding) { encoding = '' + encoding; switch (encoding && encoding.toLowerCase()) { case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': return true; default: return false; } }; function _normalizeEncoding(enc) { if (!enc) return 'utf8'; var retried; while (true) { switch (enc) { case 'utf8': case 'utf-8': return 'utf8'; case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return 'utf16le'; case 'latin1': case 'binary': return 'latin1'; case 'base64': case 'ascii': case 'hex': return enc; default: if (retried) return; // undefined enc = ('' + enc).toLowerCase(); retried = true; } } }; // Do not cache `Buffer.isEncoding` when checking encoding names as some // modules monkey-patch it to support additional encodings function normalizeEncoding(enc) { var nenc = _normalizeEncoding(enc); if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); return nenc || enc; } // StringDecoder provides an interface for efficiently splitting a series of // buffers into a series of JS strings without breaking apart multi-byte // characters. exports.StringDecoder = StringDecoder; function StringDecoder(encoding) { this.encoding = normalizeEncoding(encoding); var nb; switch (this.encoding) { case 'utf16le': this.text = utf16Text; this.end = utf16End; nb = 4; break; case 'utf8': this.fillLast = utf8FillLast; nb = 4; break; case 'base64': this.text = base64Text; this.end = base64End; nb = 3; break; default: this.write = simpleWrite; this.end = simpleEnd; return; } this.lastNeed = 0; this.lastTotal = 0; this.lastChar = Buffer.allocUnsafe(nb); } StringDecoder.prototype.write = function (buf) { if (buf.length === 0) return ''; var r; var i; if (this.lastNeed) { r = this.fillLast(buf); if (r === undefined) return ''; i = this.lastNeed; this.lastNeed = 0; } else { i = 0; } if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); return r || ''; }; StringDecoder.prototype.end = utf8End; // Returns only complete characters in a Buffer StringDecoder.prototype.text = utf8Text; // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer StringDecoder.prototype.fillLast = function (buf) { if (this.lastNeed <= buf.length) { buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); return this.lastChar.toString(this.encoding, 0, this.lastTotal); } buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); this.lastNeed -= buf.length; }; // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a // continuation byte. If an invalid byte is detected, -2 is returned. function utf8CheckByte(byte) { if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; return byte >> 6 === 0x02 ? -1 : -2; } // Checks at most 3 bytes at the end of a Buffer in order to detect an // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) // needed to complete the UTF-8 character (if applicable) are returned. function utf8CheckIncomplete(self, buf, i) { var j = buf.length - 1; if (j < i) return 0; var nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) self.lastNeed = nb - 1; return nb; } if (--j < i || nb === -2) return 0; nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) self.lastNeed = nb - 2; return nb; } if (--j < i || nb === -2) return 0; nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) { if (nb === 2) nb = 0;else self.lastNeed = nb - 3; } return nb; } return 0; } // Validates as many continuation bytes for a multi-byte UTF-8 character as // needed or are available. If we see a non-continuation byte where we expect // one, we "replace" the validated continuation bytes we've seen so far with // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding // behavior. The continuation byte check is included three times in the case // where all of the continuation bytes for a character exist in the same buffer. // It is also done this way as a slight performance increase instead of using a // loop. function utf8CheckExtraBytes(self, buf, p) { if ((buf[0] & 0xC0) !== 0x80) { self.lastNeed = 0; return '\ufffd'; } if (self.lastNeed > 1 && buf.length > 1) { if ((buf[1] & 0xC0) !== 0x80) { self.lastNeed = 1; return '\ufffd'; } if (self.lastNeed > 2 && buf.length > 2) { if ((buf[2] & 0xC0) !== 0x80) { self.lastNeed = 2; return '\ufffd'; } } } } // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. function utf8FillLast(buf) { var p = this.lastTotal - this.lastNeed; var r = utf8CheckExtraBytes(this, buf, p); if (r !== undefined) return r; if (this.lastNeed <= buf.length) { buf.copy(this.lastChar, p, 0, this.lastNeed); return this.lastChar.toString(this.encoding, 0, this.lastTotal); } buf.copy(this.lastChar, p, 0, buf.length); this.lastNeed -= buf.length; } // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a // partial character, the character's bytes are buffered until the required // number of bytes are available. function utf8Text(buf, i) { var total = utf8CheckIncomplete(this, buf, i); if (!this.lastNeed) return buf.toString('utf8', i); this.lastTotal = total; var end = buf.length - (total - this.lastNeed); buf.copy(this.lastChar, 0, end); return buf.toString('utf8', i, end); } // For UTF-8, a replacement character is added when ending on a partial // character. function utf8End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) return r + '\ufffd'; return r; } // UTF-16LE typically needs two bytes per character, but even if we have an even // number of bytes available, we need to check if we end on a leading/high // surrogate. In that case, we need to wait for the next two bytes in order to // decode the last character properly. function utf16Text(buf, i) { if ((buf.length - i) % 2 === 0) { var r = buf.toString('utf16le', i); if (r) { var c = r.charCodeAt(r.length - 1); if (c >= 0xD800 && c <= 0xDBFF) { this.lastNeed = 2; this.lastTotal = 4; this.lastChar[0] = buf[buf.length - 2]; this.lastChar[1] = buf[buf.length - 1]; return r.slice(0, -1); } } return r; } this.lastNeed = 1; this.lastTotal = 2; this.lastChar[0] = buf[buf.length - 1]; return buf.toString('utf16le', i, buf.length - 1); } // For UTF-16LE we do not explicitly append special replacement characters if we // end on a partial character, we simply let v8 handle that. function utf16End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) { var end = this.lastTotal - this.lastNeed; return r + this.lastChar.toString('utf16le', 0, end); } return r; } function base64Text(buf, i) { var n = (buf.length - i) % 3; if (n === 0) return buf.toString('base64', i); this.lastNeed = 3 - n; this.lastTotal = 3; if (n === 1) { this.lastChar[0] = buf[buf.length - 1]; } else { this.lastChar[0] = buf[buf.length - 2]; this.lastChar[1] = buf[buf.length - 1]; } return buf.toString('base64', i, buf.length - n); } function base64End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); return r; } // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) function simpleWrite(buf) { return buf.toString(this.encoding); } function simpleEnd(buf) { return buf && buf.length ? this.write(buf) : ''; } /***/ }), /* 64 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. // a transform stream is a readable/writable stream where you do // something with the data. Sometimes it's called a "filter", // but that's not a great name for it, since that implies a thing where // some bits pass through, and others are simply ignored. (That would // be a valid example of a transform, of course.) // // While the output is causally related to the input, it's not a // necessarily symmetric or synchronous transformation. For example, // a zlib stream might take multiple plain-text writes(), and then // emit a single compressed chunk some time in the future. // // Here's how this works: // // The Transform stream has all the aspects of the readable and writable // stream classes. When you write(chunk), that calls _write(chunk,cb) // internally, and returns false if there's a lot of pending writes // buffered up. When you call read(), that calls _read(n) until // there's enough pending readable data buffered up. // // In a transform stream, the written data is placed in a buffer. When // _read(n) is called, it transforms the queued up data, calling the // buffered _write cb's as it consumes chunks. If consuming a single // written chunk would result in multiple output chunks, then the first // outputted bit calls the readcb, and subsequent chunks just go into // the read buffer, and will cause it to emit 'readable' if necessary. // // This way, back-pressure is actually determined by the reading side, // since _read has to be called to start processing a new chunk. However, // a pathological inflate type of transform can cause excessive buffering // here. For example, imagine a stream where every byte of input is // interpreted as an integer from 0-255, and then results in that many // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in // 1kb of data being output. In this case, you could write a very small // amount of input, and end up with a very large amount of output. In // such a pathological inflating mechanism, there'd be no way to tell // the system to stop doing the transform. A single 4MB write could // cause the system to run out of memory. // // However, even in such a pathological case, only a single written chunk // would be consumed, and then the rest would wait (un-transformed) until // the results of the previous transformed chunk were consumed. module.exports = Transform; var Duplex = __webpack_require__(20); /*<replacement>*/ var util = Object.create(__webpack_require__(25)); util.inherits = __webpack_require__(16); /*</replacement>*/ util.inherits(Transform, Duplex); function afterTransform(er, data) { var ts = this._transformState; ts.transforming = false; var cb = ts.writecb; if (!cb) { return this.emit('error', new Error('write callback called multiple times')); } ts.writechunk = null; ts.writecb = null; if (data != null) // single equals check for both `null` and `undefined` this.push(data); cb(er); var rs = this._readableState; rs.reading = false; if (rs.needReadable || rs.length < rs.highWaterMark) { this._read(rs.highWaterMark); } } function Transform(options) { if (!(this instanceof Transform)) return new Transform(options); Duplex.call(this, options); this._transformState = { afterTransform: afterTransform.bind(this), needTransform: false, transforming: false, writecb: null, writechunk: null, writeencoding: null }; // start out asking for a readable event once data is transformed. this._readableState.needReadable = true; // we have implemented the _read method, and done the other things // that Readable wants before the first _read call, so unset the // sync guard flag. this._readableState.sync = false; if (options) { if (typeof options.transform === 'function') this._transform = options.transform; if (typeof options.flush === 'function') this._flush = options.flush; } // When the writable side finishes, then flush out anything remaining. this.on('prefinish', prefinish); } function prefinish() { var _this = this; if (typeof this._flush === 'function') { this._flush(function (er, data) { done(_this, er, data); }); } else { done(this, null, null); } } Transform.prototype.push = function (chunk, encoding) { this._transformState.needTransform = false; return Duplex.prototype.push.call(this, chunk, encoding); }; // This is the part where you do stuff! // override this function in implementation classes. // 'chunk' is an input chunk. // // Call `push(newChunk)` to pass along transformed output // to the readable side. You may call 'push' zero or more times. // // Call `cb(err)` when you are done with this chunk. If you pass // an error, then that'll put the hurt on the whole operation. If you // never call cb(), then you'll never get another chunk. Transform.prototype._transform = function (chunk, encoding, cb) { throw new Error('_transform() is not implemented'); }; Transform.prototype._write = function (chunk, encoding, cb) { var ts = this._transformState; ts.writecb = cb; ts.writechunk = chunk; ts.writeencoding = encoding; if (!ts.transforming) { var rs = this._readableState; if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); } }; // Doesn't matter what the args are here. // _transform does all the work. // That we got here means that the readable side wants more data. Transform.prototype._read = function (n) { var ts = this._transformState; if (ts.writechunk !== null && ts.writecb && !ts.transforming) { ts.transforming = true; this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); } else { // mark that we need a transform, so that any data that comes in // will get processed, now that we've asked for it. ts.needTransform = true; } }; Transform.prototype._destroy = function (err, cb) { var _this2 = this; Duplex.prototype._destroy.call(this, err, function (err2) { cb(err2); _this2.emit('close'); }); }; function done(stream, er, data) { if (er) return stream.emit('error', er); if (data != null) // single equals check for both `null` and `undefined` stream.push(data); // if there's nothing in the write buffer, then that means // that nothing more will ever be provided if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); return stream.push(null); } /***/ }), /* 65 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(Buffer) {/* Protocol - protocol constants */ const protocol = module.exports /* Command code => mnemonic */ protocol.types = { 0: 'reserved', 1: 'connect', 2: 'connack', 3: 'publish', 4: 'puback', 5: 'pubrec', 6: 'pubrel', 7: 'pubcomp', 8: 'subscribe', 9: 'suback', 10: 'unsubscribe', 11: 'unsuback', 12: 'pingreq', 13: 'pingresp', 14: 'disconnect', 15: 'auth' } /* Mnemonic => Command code */ protocol.codes = {} for (const k in protocol.types) { const v = protocol.types[k] protocol.codes[v] = k } /* Header */ protocol.CMD_SHIFT = 4 protocol.CMD_MASK = 0xF0 protocol.DUP_MASK = 0x08 protocol.QOS_MASK = 0x03 protocol.QOS_SHIFT = 1 protocol.RETAIN_MASK = 0x01 /* Length */ protocol.VARBYTEINT_MASK = 0x7F protocol.VARBYTEINT_FIN_MASK = 0x80 protocol.VARBYTEINT_MAX = 268435455 /* Connack */ protocol.SESSIONPRESENT_MASK = 0x01 protocol.SESSIONPRESENT_HEADER = Buffer.from([protocol.SESSIONPRESENT_MASK]) protocol.CONNACK_HEADER = Buffer.from([protocol.codes.connack << protocol.CMD_SHIFT]) /* Connect */ protocol.USERNAME_MASK = 0x80 protocol.PASSWORD_MASK = 0x40 protocol.WILL_RETAIN_MASK = 0x20 protocol.WILL_QOS_MASK = 0x18 protocol.WILL_QOS_SHIFT = 3 protocol.WILL_FLAG_MASK = 0x04 protocol.CLEAN_SESSION_MASK = 0x02 protocol.CONNECT_HEADER = Buffer.from([protocol.codes.connect << protocol.CMD_SHIFT]) /* Properties */ protocol.properties = { sessionExpiryInterval: 17, willDelayInterval: 24, receiveMaximum: 33, maximumPacketSize: 39, topicAliasMaximum: 34, requestResponseInformation: 25, requestProblemInformation: 23, userProperties: 38, authenticationMethod: 21, authenticationData: 22, payloadFormatIndicator: 1, messageExpiryInterval: 2, contentType: 3, responseTopic: 8, correlationData: 9, maximumQoS: 36, retainAvailable: 37, assignedClientIdentifier: 18, reasonString: 31, wildcardSubscriptionAvailable: 40, subscriptionIdentifiersAvailable: 41, sharedSubscriptionAvailable: 42, serverKeepAlive: 19, responseInformation: 26, serverReference: 28, topicAlias: 35, subscriptionIdentifier: 11 } protocol.propertiesCodes = {} for (const prop in protocol.properties) { const id = protocol.properties[prop] protocol.propertiesCodes[id] = prop } protocol.propertiesTypes = { sessionExpiryInterval: 'int32', willDelayInterval: 'int32', receiveMaximum: 'int16', maximumPacketSize: 'int32', topicAliasMaximum: 'int16', requestResponseInformation: 'byte', requestProblemInformation: 'byte', userProperties: 'pair', authenticationMethod: 'string', authenticationData: 'binary', payloadFormatIndicator: 'byte', messageExpiryInterval: 'int32', contentType: 'string', responseTopic: 'string', correlationData: 'binary', maximumQoS: 'int8', retainAvailable: 'byte', assignedClientIdentifier: 'string', reasonString: 'string', wildcardSubscriptionAvailable: 'byte', subscriptionIdentifiersAvailable: 'byte', sharedSubscriptionAvailable: 'byte', serverKeepAlive: 'int16', responseInformation: 'string', serverReference: 'string', topicAlias: 'int16', subscriptionIdentifier: 'var' } function genHeader (type) { return [0, 1, 2].map(qos => { return [0, 1].map(dup => { return [0, 1].map(retain => { const buf = Buffer.alloc(1) buf.writeUInt8( protocol.codes[type] << protocol.CMD_SHIFT | (dup ? protocol.DUP_MASK : 0) | qos << protocol.QOS_SHIFT | retain, 0, true) return buf }) }) }) } /* Publish */ protocol.PUBLISH_HEADER = genHeader('publish') /* Subscribe */ protocol.SUBSCRIBE_HEADER = genHeader('subscribe') protocol.SUBSCRIBE_OPTIONS_QOS_MASK = 0x03 protocol.SUBSCRIBE_OPTIONS_NL_MASK = 0x01 protocol.SUBSCRIBE_OPTIONS_NL_SHIFT = 2 protocol.SUBSCRIBE_OPTIONS_RAP_MASK = 0x01 protocol.SUBSCRIBE_OPTIONS_RAP_SHIFT = 3 protocol.SUBSCRIBE_OPTIONS_RH_MASK = 0x03 protocol.SUBSCRIBE_OPTIONS_RH_SHIFT = 4 protocol.SUBSCRIBE_OPTIONS_RH = [0x00, 0x10, 0x20] protocol.SUBSCRIBE_OPTIONS_NL = 0x04 protocol.SUBSCRIBE_OPTIONS_RAP = 0x08 protocol.SUBSCRIBE_OPTIONS_QOS = [0x00, 0x01, 0x02] /* Unsubscribe */ protocol.UNSUBSCRIBE_HEADER = genHeader('unsubscribe') /* Confirmations */ protocol.ACKS = { unsuback: genHeader('unsuback'), puback: genHeader('puback'), pubcomp: genHeader('pubcomp'), pubrel: genHeader('pubrel'), pubrec: genHeader('pubrec') } protocol.SUBACK_HEADER = Buffer.from([protocol.codes.suback << protocol.CMD_SHIFT]) /* Protocol versions */ protocol.VERSION3 = Buffer.from([3]) protocol.VERSION4 = Buffer.from([4]) protocol.VERSION5 = Buffer.from([5]) protocol.VERSION131 = Buffer.from([131]) protocol.VERSION132 = Buffer.from([132]) /* QoS */ protocol.QOS = [0, 1, 2].map(qos => { return Buffer.from([qos]) }) /* Empty packets */ protocol.EMPTY = { pingreq: Buffer.from([protocol.codes.pingreq << 4, 0]), pingresp: Buffer.from([protocol.codes.pingresp << 4, 0]), disconnect: Buffer.from([protocol.codes.disconnect << 4, 0]) } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13).Buffer)) /***/ }), /* 66 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(Buffer) {const protocol = __webpack_require__(65) const empty = Buffer.allocUnsafe(0) const zeroBuf = Buffer.from([0]) const numbers = __webpack_require__(349) const nextTick = __webpack_require__(24).nextTick const debug = __webpack_require__(15)('mqtt-packet:writeToStream') const numCache = numbers.cache const generateNumber = numbers.generateNumber const generateCache = numbers.generateCache const genBufVariableByteInt = numbers.genBufVariableByteInt const generate4ByteBuffer = numbers.generate4ByteBuffer let writeNumber = writeNumberCached let toGenerate = true function generate (packet, stream, opts) { debug('generate called') if (stream.cork) { stream.cork() nextTick(uncork, stream) } if (toGenerate) { toGenerate = false generateCache() } debug('generate: packet.cmd: %s', packet.cmd) switch (packet.cmd) { case 'connect': return connect(packet, stream, opts) case 'connack': return connack(packet, stream, opts) case 'publish': return publish(packet, stream, opts) case 'puback': case 'pubrec': case 'pubrel': case 'pubcomp': return confirmation(packet, stream, opts) case 'subscribe': return subscribe(packet, stream, opts) case 'suback': return suback(packet, stream, opts) case 'unsubscribe': return unsubscribe(packet, stream, opts) case 'unsuback': return unsuback(packet, stream, opts) case 'pingreq': case 'pingresp': return emptyPacket(packet, stream, opts) case 'disconnect': return disconnect(packet, stream, opts) case 'auth': return auth(packet, stream, opts) default: stream.emit('error', new Error('Unknown command')) return false } } /** * Controls numbers cache. * Set to "false" to allocate buffers on-the-flight instead of pre-generated cache */ Object.defineProperty(generate, 'cacheNumbers', { get () { return writeNumber === writeNumberCached }, set (value) { if (value) { if (!numCache || Object.keys(numCache).length === 0) toGenerate = true writeNumber = writeNumberCached } else { toGenerate = false writeNumber = writeNumberGenerated } } }) function uncork (stream) { stream.uncork() } function connect (packet, stream, opts) { const settings = packet || {} const protocolId = settings.protocolId || 'MQTT' let protocolVersion = settings.protocolVersion || 4 const will = settings.will let clean = settings.clean const keepalive = settings.keepalive || 0 const clientId = settings.clientId || '' const username = settings.username const password = settings.password /* mqtt5 new oprions */ const properties = settings.properties if (clean === undefined) clean = true let length = 0 // Must be a string and non-falsy if (!protocolId || (typeof protocolId !== 'string' && !Buffer.isBuffer(protocolId))) { stream.emit('error', new Error('Invalid protocolId')) return false } else length += protocolId.length + 2 // Must be 3 or 4 or 5 if (protocolVersion !== 3 && protocolVersion !== 4 && protocolVersion !== 5) { stream.emit('error', new Error('Invalid protocol version')) return false } else length += 1 // ClientId might be omitted in 3.1.1 and 5, but only if cleanSession is set to 1 if ((typeof clientId === 'string' || Buffer.isBuffer(clientId)) && (clientId || protocolVersion >= 4) && (clientId || clean)) { length += Buffer.byteLength(clientId) + 2 } else { if (protocolVersion < 4) { stream.emit('error', new Error('clientId must be supplied before 3.1.1')) return false } if ((clean * 1) === 0) { stream.emit('error', new Error('clientId must be given if cleanSession set to 0')) return false } } // Must be a two byte number if (typeof keepalive !== 'number' || keepalive < 0 || keepalive > 65535 || keepalive % 1 !== 0) { stream.emit('error', new Error('Invalid keepalive')) return false } else length += 2 // Connect flags length += 1 // Properties if (protocolVersion === 5) { var propertiesData = getProperties(stream, properties) if (!propertiesData) { return false } length += propertiesData.length } // If will exists... if (will) { // It must be an object if (typeof will !== 'object') { stream.emit('error', new Error('Invalid will')) return false } // It must have topic typeof string if (!will.topic || typeof will.topic !== 'string') { stream.emit('error', new Error('Invalid will topic')) return false } else { length += Buffer.byteLength(will.topic) + 2 } // Payload length += 2 // payload length if (will.payload) { if (will.payload.length >= 0) { if (typeof will.payload === 'string') { length += Buffer.byteLength(will.payload) } else { length += will.payload.length } } else { stream.emit('error', new Error('Invalid will payload')) return false } } // will properties var willProperties = {} if (protocolVersion === 5) { willProperties = getProperties(stream, will.properties) if (!willProperties) { return false } length += willProperties.length } } // Username let providedUsername = false if (username != null) { if (isStringOrBuffer(username)) { providedUsername = true length += Buffer.byteLength(username) + 2 } else { stream.emit('error', new Error('Invalid username')) return false } } // Password if (password != null) { if (!providedUsername) { stream.emit('error', new Error('Username is required to use password')) return false } if (isStringOrBuffer(password)) { length += byteLength(password) + 2 } else { stream.emit('error', new Error('Invalid password')) return false } } // Generate header stream.write(protocol.CONNECT_HEADER) // Generate length writeVarByteInt(stream, length) // Generate protocol ID writeStringOrBuffer(stream, protocolId) if (settings.bridgeMode) { protocolVersion += 128 } stream.write( protocolVersion === 131 ? protocol.VERSION131 : protocolVersion === 132 ? protocol.VERSION132 : protocolVersion === 4 ? protocol.VERSION4 : protocolVersion === 5 ? protocol.VERSION5 : protocol.VERSION3 ) // Connect flags let flags = 0 flags |= (username != null) ? protocol.USERNAME_MASK : 0 flags |= (password != null) ? protocol.PASSWORD_MASK : 0 flags |= (will && will.retain) ? protocol.WILL_RETAIN_MASK : 0 flags |= (will && will.qos) ? will.qos << protocol.WILL_QOS_SHIFT : 0 flags |= will ? protocol.WILL_FLAG_MASK : 0 flags |= clean ? protocol.CLEAN_SESSION_MASK : 0 stream.write(Buffer.from([flags])) // Keepalive writeNumber(stream, keepalive) // Properties if (protocolVersion === 5) { propertiesData.write() } // Client ID writeStringOrBuffer(stream, clientId) // Will if (will) { if (protocolVersion === 5) { willProperties.write() } writeString(stream, will.topic) writeStringOrBuffer(stream, will.payload) } // Username and password if (username != null) { writeStringOrBuffer(stream, username) } if (password != null) { writeStringOrBuffer(stream, password) } // This is a small packet that happens only once on a stream // We assume the stream is always free to receive more data after this return true } function connack (packet, stream, opts) { const version = opts ? opts.protocolVersion : 4 const settings = packet || {} const rc = version === 5 ? settings.reasonCode : settings.returnCode const properties = settings.properties let length = 2 // length of rc and sessionHeader // Check return code if (typeof rc !== 'number') { stream.emit('error', new Error('Invalid return code')) return false } // mqtt5 properties let propertiesData = null if (version === 5) { propertiesData = getProperties(stream, properties) if (!propertiesData) { return false } length += propertiesData.length } stream.write(protocol.CONNACK_HEADER) // length writeVarByteInt(stream, length) stream.write(settings.sessionPresent ? protocol.SESSIONPRESENT_HEADER : zeroBuf) stream.write(Buffer.from([rc])) if (propertiesData != null) { propertiesData.write() } return true } function publish (packet, stream, opts) { debug('publish: packet: %o', packet) const version = opts ? opts.protocolVersion : 4 const settings = packet || {} const qos = settings.qos || 0 const retain = settings.retain ? protocol.RETAIN_MASK : 0 const topic = settings.topic const payload = settings.payload || empty const id = settings.messageId const properties = settings.properties let length = 0 // Topic must be a non-empty string or Buffer if (typeof topic === 'string') length += Buffer.byteLength(topic) + 2 else if (Buffer.isBuffer(topic)) length += topic.length + 2 else { stream.emit('error', new Error('Invalid topic')) return false } // Get the payload length if (!Buffer.isBuffer(payload)) length += Buffer.byteLength(payload) else length += payload.length // Message ID must a number if qos > 0 if (qos && typeof id !== 'number') { stream.emit('error', new Error('Invalid messageId')) return false } else if (qos) length += 2 // mqtt5 properties let propertiesData = null if (version === 5) { propertiesData = getProperties(stream, properties) if (!propertiesData) { return false } length += propertiesData.length } // Header stream.write(protocol.PUBLISH_HEADER[qos][settings.dup ? 1 : 0][retain ? 1 : 0]) // Remaining length writeVarByteInt(stream, length) // Topic writeNumber(stream, byteLength(topic)) stream.write(topic) // Message ID if (qos > 0) writeNumber(stream, id) // Properties if (propertiesData != null) { propertiesData.write() } // Payload debug('publish: payload: %o', payload) return stream.write(payload) } /* Puback, pubrec, pubrel and pubcomp */ function confirmation (packet, stream, opts) { const version = opts ? opts.protocolVersion : 4 const settings = packet || {} const type = settings.cmd || 'puback' const id = settings.messageId const dup = (settings.dup && type === 'pubrel') ? protocol.DUP_MASK : 0 let qos = 0 const reasonCode = settings.reasonCode const properties = settings.properties let length = version === 5 ? 3 : 2 if (type === 'pubrel') qos = 1 // Check message ID if (typeof id !== 'number') { stream.emit('error', new Error('Invalid messageId')) return false } // properies mqtt 5 let propertiesData = null if (version === 5) { // Confirm should not add empty property length with no properties (rfc 3.4.2.2.1) if (typeof properties === 'object') { propertiesData = getPropertiesByMaximumPacketSize(stream, properties, opts, length) if (!propertiesData) { return false } length += propertiesData.length } } // Header stream.write(protocol.ACKS[type][qos][dup][0]) // Length writeVarByteInt(stream, length) // Message ID writeNumber(stream, id) // reason code in header if (version === 5) { stream.write(Buffer.from([reasonCode])) } // properies mqtt 5 if (propertiesData !== null) { propertiesData.write() } return true } function subscribe (packet, stream, opts) { debug('subscribe: packet: ') const version = opts ? opts.protocolVersion : 4 const settings = packet || {} const dup = settings.dup ? protocol.DUP_MASK : 0 const id = settings.messageId const subs = settings.subscriptions const properties = settings.properties let length = 0 // Check message ID if (typeof id !== 'number') { stream.emit('error', new Error('Invalid messageId')) return false } else length += 2 // properies mqtt 5 let propertiesData = null if (version === 5) { propertiesData = getProperties(stream, properties) if (!propertiesData) { return false } length += propertiesData.length } // Check subscriptions if (typeof subs === 'object' && subs.length) { for (let i = 0; i < subs.length; i += 1) { const itopic = subs[i].topic const iqos = subs[i].qos if (typeof itopic !== 'string') { stream.emit('error', new Error('Invalid subscriptions - invalid topic')) return false } if (typeof iqos !== 'number') { stream.emit('error', new Error('Invalid subscriptions - invalid qos')) return false } if (version === 5) { const nl = subs[i].nl || false if (typeof nl !== 'boolean') { stream.emit('error', new Error('Invalid subscriptions - invalid No Local')) return false } const rap = subs[i].rap || false if (typeof rap !== 'boolean') { stream.emit('error', new Error('Invalid subscriptions - invalid Retain as Published')) return false } const rh = subs[i].rh || 0 if (typeof rh !== 'number' || rh > 2) { stream.emit('error', new Error('Invalid subscriptions - invalid Retain Handling')) return false } } length += Buffer.byteLength(itopic) + 2 + 1 } } else { stream.emit('error', new Error('Invalid subscriptions')) return false } // Generate header debug('subscribe: writing to stream: %o', protocol.SUBSCRIBE_HEADER) stream.write(protocol.SUBSCRIBE_HEADER[1][dup ? 1 : 0][0]) // Generate length writeVarByteInt(stream, length) // Generate message ID writeNumber(stream, id) // properies mqtt 5 if (propertiesData !== null) { propertiesData.write() } let result = true // Generate subs for (const sub of subs) { const jtopic = sub.topic const jqos = sub.qos const jnl = +sub.nl const jrap = +sub.rap const jrh = sub.rh let joptions // Write topic string writeString(stream, jtopic) // options process joptions = protocol.SUBSCRIBE_OPTIONS_QOS[jqos] if (version === 5) { joptions |= jnl ? protocol.SUBSCRIBE_OPTIONS_NL : 0 joptions |= jrap ? protocol.SUBSCRIBE_OPTIONS_RAP : 0 joptions |= jrh ? protocol.SUBSCRIBE_OPTIONS_RH[jrh] : 0 } // Write options result = stream.write(Buffer.from([joptions])) } return result } function suback (packet, stream, opts) { const version = opts ? opts.protocolVersion : 4 const settings = packet || {} const id = settings.messageId const granted = settings.granted const properties = settings.properties let length = 0 // Check message ID if (typeof id !== 'number') { stream.emit('error', new Error('Invalid messageId')) return false } else length += 2 // Check granted qos vector if (typeof granted === 'object' && granted.length) { for (let i = 0; i < granted.length; i += 1) { if (typeof granted[i] !== 'number') { stream.emit('error', new Error('Invalid qos vector')) return false } length += 1 } } else { stream.emit('error', new Error('Invalid qos vector')) return false } // properies mqtt 5 let propertiesData = null if (version === 5) { propertiesData = getPropertiesByMaximumPacketSize(stream, properties, opts, length) if (!propertiesData) { return false } length += propertiesData.length } // header stream.write(protocol.SUBACK_HEADER) // Length writeVarByteInt(stream, length) // Message ID writeNumber(stream, id) // properies mqtt 5 if (propertiesData !== null) { propertiesData.write() } return stream.write(Buffer.from(granted)) } function unsubscribe (packet, stream, opts) { const version = opts ? opts.protocolVersion : 4 const settings = packet || {} const id = settings.messageId const dup = settings.dup ? protocol.DUP_MASK : 0 const unsubs = settings.unsubscriptions const properties = settings.properties let length = 0 // Check message ID if (typeof id !== 'number') { stream.emit('error', new Error('Invalid messageId')) return false } else { length += 2 } // Check unsubs if (typeof unsubs === 'object' && unsubs.length) { for (let i = 0; i < unsubs.length; i += 1) { if (typeof unsubs[i] !== 'string') { stream.emit('error', new Error('Invalid unsubscriptions')) return false } length += Buffer.byteLength(unsubs[i]) + 2 } } else { stream.emit('error', new Error('Invalid unsubscriptions')) return false } // properies mqtt 5 let propertiesData = null if (version === 5) { propertiesData = getProperties(stream, properties) if (!propertiesData) { return false } length += propertiesData.length } // Header stream.write(protocol.UNSUBSCRIBE_HEADER[1][dup ? 1 : 0][0]) // Length writeVarByteInt(stream, length) // Message ID writeNumber(stream, id) // properies mqtt 5 if (propertiesData !== null) { propertiesData.write() } // Unsubs let result = true for (let j = 0; j < unsubs.length; j++) { result = writeString(stream, unsubs[j]) } return result } function unsuback (packet, stream, opts) { const version = opts ? opts.protocolVersion : 4 const settings = packet || {} const id = settings.messageId const dup = settings.dup ? protocol.DUP_MASK : 0 const granted = settings.granted const properties = settings.properties const type = settings.cmd const qos = 0 let length = 2 // Check message ID if (typeof id !== 'number') { stream.emit('error', new Error('Invalid messageId')) return false } // Check granted if (version === 5) { if (typeof granted === 'object' && granted.length) { for (let i = 0; i < granted.length; i += 1) { if (typeof granted[i] !== 'number') { stream.emit('error', new Error('Invalid qos vector')) return false } length += 1 } } else { stream.emit('error', new Error('Invalid qos vector')) return false } } // properies mqtt 5 let propertiesData = null if (version === 5) { propertiesData = getPropertiesByMaximumPacketSize(stream, properties, opts, length) if (!propertiesData) { return false } length += propertiesData.length } // Header stream.write(protocol.ACKS[type][qos][dup][0]) // Length writeVarByteInt(stream, length) // Message ID writeNumber(stream, id) // properies mqtt 5 if (propertiesData !== null) { propertiesData.write() } // payload if (version === 5) { stream.write(Buffer.from(granted)) } return true } function emptyPacket (packet, stream, opts) { return stream.write(protocol.EMPTY[packet.cmd]) } function disconnect (packet, stream, opts) { const version = opts ? opts.protocolVersion : 4 const settings = packet || {} const reasonCode = settings.reasonCode const properties = settings.properties let length = version === 5 ? 1 : 0 // properies mqtt 5 let propertiesData = null if (version === 5) { propertiesData = getPropertiesByMaximumPacketSize(stream, properties, opts, length) if (!propertiesData) { return false } length += propertiesData.length } // Header stream.write(Buffer.from([protocol.codes.disconnect << 4])) // Length writeVarByteInt(stream, length) // reason code in header if (version === 5) { stream.write(Buffer.from([reasonCode])) } // properies mqtt 5 if (propertiesData !== null) { propertiesData.write() } return true } function auth (packet, stream, opts) { const version = opts ? opts.protocolVersion : 4 const settings = packet || {} const reasonCode = settings.reasonCode const properties = settings.properties let length = version === 5 ? 1 : 0 if (version !== 5) stream.emit('error', new Error('Invalid mqtt version for auth packet')) // properies mqtt 5 const propertiesData = getPropertiesByMaximumPacketSize(stream, properties, opts, length) if (!propertiesData) { return false } length += propertiesData.length // Header stream.write(Buffer.from([protocol.codes.auth << 4])) // Length writeVarByteInt(stream, length) // reason code in header stream.write(Buffer.from([reasonCode])) // properies mqtt 5 if (propertiesData !== null) { propertiesData.write() } return true } /** * writeVarByteInt - write an MQTT style variable byte integer to the buffer * * @param <Buffer> buffer - destination * @param <Number> pos - offset * @param <Number> length - length (>0) * @returns <Number> number of bytes written * * @api private */ const varByteIntCache = {} function writeVarByteInt (stream, num) { if (num > protocol.VARBYTEINT_MAX) { stream.emit('error', new Error(`Invalid variable byte integer: ${num}`)) return false } let buffer = varByteIntCache[num] if (!buffer) { buffer = genBufVariableByteInt(num) if (num < 16384) varByteIntCache[num] = buffer } debug('writeVarByteInt: writing to stream: %o', buffer) return stream.write(buffer) } /** * writeString - write a utf8 string to the buffer * * @param <Buffer> buffer - destination * @param <Number> pos - offset * @param <String> string - string to write * @return <Number> number of bytes written * * @api private */ function writeString (stream, string) { const strlen = Buffer.byteLength(string) writeNumber(stream, strlen) debug('writeString: %s', string) return stream.write(string, 'utf8') } /** * writeStringPair - write a utf8 string pairs to the buffer * * @param <Buffer> buffer - destination * @param <String> name - string name to write * @param <String> value - string value to write * @return <Number> number of bytes written * * @api private */ function writeStringPair (stream, name, value) { writeString(stream, name) writeString(stream, value) } /** * writeNumber - write a two byte number to the buffer * * @param <Buffer> buffer - destination * @param <Number> pos - offset * @param <String> number - number to write * @return <Number> number of bytes written * * @api private */ function writeNumberCached (stream, number) { debug('writeNumberCached: number: %d', number) debug('writeNumberCached: %o', numCache[number]) return stream.write(numCache[number]) } function writeNumberGenerated (stream, number) { const generatedNumber = generateNumber(number) debug('writeNumberGenerated: %o', generatedNumber) return stream.write(generatedNumber) } function write4ByteNumber (stream, number) { const generated4ByteBuffer = generate4ByteBuffer(number) debug('write4ByteNumber: %o', generated4ByteBuffer) return stream.write(generated4ByteBuffer) } /** * writeStringOrBuffer - write a String or Buffer with the its length prefix * * @param <Buffer> buffer - destination * @param <Number> pos - offset * @param <String> toWrite - String or Buffer * @return <Number> number of bytes written */ function writeStringOrBuffer (stream, toWrite) { if (typeof toWrite === 'string') { writeString(stream, toWrite) } else if (toWrite) { writeNumber(stream, toWrite.length) stream.write(toWrite) } else writeNumber(stream, 0) } function getProperties (stream, properties) { /* connect properties */ if (typeof properties !== 'object' || properties.length != null) { return { length: 1, write () { writeProperties(stream, {}, 0) } } } let propertiesLength = 0 function getLengthProperty (name, value) { const type = protocol.propertiesTypes[name] let length = 0 switch (type) { case 'byte': { if (typeof value !== 'boolean') { stream.emit('error', new Error(`Invalid ${name}: ${value}`)) return false } length += 1 + 1 break } case 'int8': { if (typeof value !== 'number' || value < 0 || value > 0xff) { stream.emit('error', new Error(`Invalid ${name}: ${value}`)) return false } length += 1 + 1 break } case 'binary': { if (value && value === null) { stream.emit('error', new Error(`Invalid ${name}: ${value}`)) return false } length += 1 + Buffer.byteLength(value) + 2 break } case 'int16': { if (typeof value !== 'number' || value < 0 || value > 0xffff) { stream.emit('error', new Error(`Invalid ${name}: ${value}`)) return false } length += 1 + 2 break } case 'int32': { if (typeof value !== 'number' || value < 0 || value > 0xffffffff) { stream.emit('error', new Error(`Invalid ${name}: ${value}`)) return false } length += 1 + 4 break } case 'var': { // var byte integer is max 24 bits packed in 32 bits if (typeof value !== 'number' || value < 0 || value > 0x0fffffff) { stream.emit('error', new Error(`Invalid ${name}: ${value}`)) return false } length += 1 + Buffer.byteLength(genBufVariableByteInt(value)) break } case 'string': { if (typeof value !== 'string') { stream.emit('error', new Error(`Invalid ${name}: ${value}`)) return false } length += 1 + 2 + Buffer.byteLength(value.toString()) break } case 'pair': { if (typeof value !== 'object') { stream.emit('error', new Error(`Invalid ${name}: ${value}`)) return false } length += Object.getOwnPropertyNames(value).reduce((result, name) => { const currentValue = value[name] if (Array.isArray(currentValue)) { result += currentValue.reduce((currentLength, value) => { currentLength += 1 + 2 + Buffer.byteLength(name.toString()) + 2 + Buffer.byteLength(value.toString()) return currentLength }, 0) } else { result += 1 + 2 + Buffer.byteLength(name.toString()) + 2 + Buffer.byteLength(value[name].toString()) } return result }, 0) break } default: { stream.emit('error', new Error(`Invalid property ${name}: ${value}`)) return false } } return length } if (properties) { for (const propName in properties) { let propLength = 0 let propValueLength = 0 const propValue = properties[propName] if (Array.isArray(propValue)) { for (let valueIndex = 0; valueIndex < propValue.length; valueIndex++) { propValueLength = getLengthProperty(propName, propValue[valueIndex]) if (!propValueLength) { return false } propLength += propValueLength } } else { propValueLength = getLengthProperty(propName, propValue) if (!propValueLength) { return false } propLength = propValueLength } if (!propLength) return false propertiesLength += propLength } } const propertiesLengthLength = Buffer.byteLength(genBufVariableByteInt(propertiesLength)) return { length: propertiesLengthLength + propertiesLength, write () { writeProperties(stream, properties, propertiesLength) } } } function getPropertiesByMaximumPacketSize (stream, properties, opts, length) { const mayEmptyProps = ['reasonString', 'userProperties'] const maximumPacketSize = opts && opts.properties && opts.properties.maximumPacketSize ? opts.properties.maximumPacketSize : 0 let propertiesData = getProperties(stream, properties) if (maximumPacketSize) { while (length + propertiesData.length > maximumPacketSize) { const currentMayEmptyProp = mayEmptyProps.shift() if (currentMayEmptyProp && properties[currentMayEmptyProp]) { delete properties[currentMayEmptyProp] propertiesData = getProperties(stream, properties) } else { return false } } } return propertiesData } function writeProperty (stream, propName, value) { const type = protocol.propertiesTypes[propName] switch (type) { case 'byte': { stream.write(Buffer.from([protocol.properties[propName]])) stream.write(Buffer.from([+value])) break } case 'int8': { stream.write(Buffer.from([protocol.properties[propName]])) stream.write(Buffer.from([value])) break } case 'binary': { stream.write(Buffer.from([protocol.properties[propName]])) writeStringOrBuffer(stream, value) break } case 'int16': { stream.write(Buffer.from([protocol.properties[propName]])) writeNumber(stream, value) break } case 'int32': { stream.write(Buffer.from([protocol.properties[propName]])) write4ByteNumber(stream, value) break } case 'var': { stream.write(Buffer.from([protocol.properties[propName]])) writeVarByteInt(stream, value) break } case 'string': { stream.write(Buffer.from([protocol.properties[propName]])) writeString(stream, value) break } case 'pair': { Object.getOwnPropertyNames(value).forEach(name => { const currentValue = value[name] if (Array.isArray(currentValue)) { currentValue.forEach(value => { stream.write(Buffer.from([protocol.properties[propName]])) writeStringPair(stream, name.toString(), value.toString()) }) } else { stream.write(Buffer.from([protocol.properties[propName]])) writeStringPair(stream, name.toString(), currentValue.toString()) } }) break } default: { stream.emit('error', new Error(`Invalid property ${propName} value: ${value}`)) return false } } } function writeProperties (stream, properties, propertiesLength) { /* write properties to stream */ writeVarByteInt(stream, propertiesLength) for (const propName in properties) { if (Object.prototype.hasOwnProperty.call(properties, propName) && properties[propName] !== null) { const value = properties[propName] if (Array.isArray(value)) { for (let valueIndex = 0; valueIndex < value.length; valueIndex++) { writeProperty(stream, propName, value[valueIndex]) } } else { writeProperty(stream, propName, value) } } } } function byteLength (bufOrString) { if (!bufOrString) return 0 else if (bufOrString instanceof Buffer) return bufOrString.length else return Buffer.byteLength(bufOrString) } function isStringOrBuffer (field) { return typeof field === 'string' || field instanceof Buffer } module.exports = generate /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13).Buffer)) /***/ }), /* 67 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** @type {import('./syntax')} */ module.exports = SyntaxError; /***/ }), /* 68 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var GetIntrinsic = __webpack_require__(21); var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true); if ($gOPD) { try { $gOPD([], 'length'); } catch (e) { // IE 8 has a broken gOPD $gOPD = null; } } module.exports = $gOPD; /***/ }), /* 69 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var formats = __webpack_require__(35); var has = Object.prototype.hasOwnProperty; var isArray = Array.isArray; var hexTable = (function () { var array = []; for (var i = 0; i < 256; ++i) { array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); } return array; }()); var compactQueue = function compactQueue(queue) { while (queue.length > 1) { var item = queue.pop(); var obj = item.obj[item.prop]; if (isArray(obj)) { var compacted = []; for (var j = 0; j < obj.length; ++j) { if (typeof obj[j] !== 'undefined') { compacted.push(obj[j]); } } item.obj[item.prop] = compacted; } } }; var arrayToObject = function arrayToObject(source, options) { var obj = options && options.plainObjects ? Object.create(null) : {}; for (var i = 0; i < source.length; ++i) { if (typeof source[i] !== 'undefined') { obj[i] = source[i]; } } return obj; }; var merge = function merge(target, source, options) { /* eslint no-param-reassign: 0 */ if (!source) { return target; } if (typeof source !== 'object') { if (isArray(target)) { target.push(source); } else if (target && typeof target === 'object') { if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { target[source] = true; } } else { return [target, source]; } return target; } if (!target || typeof target !== 'object') { return [target].concat(source); } var mergeTarget = target; if (isArray(target) && !isArray(source)) { mergeTarget = arrayToObject(target, options); } if (isArray(target) && isArray(source)) { source.forEach(function (item, i) { if (has.call(target, i)) { var targetItem = target[i]; if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { target[i] = merge(targetItem, item, options); } else { target.push(item); } } else { target[i] = item; } }); return target; } return Object.keys(source).reduce(function (acc, key) { var value = source[key]; if (has.call(acc, key)) { acc[key] = merge(acc[key], value, options); } else { acc[key] = value; } return acc; }, mergeTarget); }; var assign = function assignSingleSource(target, source) { return Object.keys(source).reduce(function (acc, key) { acc[key] = source[key]; return acc; }, target); }; var decode = function (str, decoder, charset) { var strWithoutPlus = str.replace(/\+/g, ' '); if (charset === 'iso-8859-1') { // unescape never throws, no try...catch needed: return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); } // utf-8 try { return decodeURIComponent(strWithoutPlus); } catch (e) { return strWithoutPlus; } }; var limit = 1024; /* eslint operator-linebreak: [2, "before"] */ var encode = function encode(str, defaultEncoder, charset, kind, format) { // This code was originally written by Brian White (mscdex) for the io.js core querystring library. // It has been adapted here for stricter adherence to RFC 3986 if (str.length === 0) { return str; } var string = str; if (typeof str === 'symbol') { string = Symbol.prototype.toString.call(str); } else if (typeof str !== 'string') { string = String(str); } if (charset === 'iso-8859-1') { return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; }); } var out = ''; for (var j = 0; j < string.length; j += limit) { var segment = string.length >= limit ? string.slice(j, j + limit) : string; var arr = []; for (var i = 0; i < segment.length; ++i) { var c = segment.charCodeAt(i); if ( c === 0x2D // - || c === 0x2E // . || c === 0x5F // _ || c === 0x7E // ~ || (c >= 0x30 && c <= 0x39) // 0-9 || (c >= 0x41 && c <= 0x5A) // a-z || (c >= 0x61 && c <= 0x7A) // A-Z || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( ) ) { arr[arr.length] = segment.charAt(i); continue; } if (c < 0x80) { arr[arr.length] = hexTable[c]; continue; } if (c < 0x800) { arr[arr.length] = hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]; continue; } if (c < 0xD800 || c >= 0xE000) { arr[arr.length] = hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]; continue; } i += 1; c = 0x10000 + (((c & 0x3FF) << 10) | (segment.charCodeAt(i) & 0x3FF)); arr[arr.length] = hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]; } out += arr.join(''); } return out; }; var compact = function compact(value) { var queue = [{ obj: { o: value }, prop: 'o' }]; var refs = []; for (var i = 0; i < queue.length; ++i) { var item = queue[i]; var obj = item.obj[item.prop]; var keys = Object.keys(obj); for (var j = 0; j < keys.length; ++j) { var key = keys[j]; var val = obj[key]; if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { queue.push({ obj: obj, prop: key }); refs.push(val); } } } compactQueue(queue); return value; }; var isRegExp = function isRegExp(obj) { return Object.prototype.toString.call(obj) === '[object RegExp]'; }; var isBuffer = function isBuffer(obj) { if (!obj || typeof obj !== 'object') { return false; } return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); }; var combine = function combine(a, b) { return [].concat(a, b); }; var maybeMap = function maybeMap(val, fn) { if (isArray(val)) { var mapped = []; for (var i = 0; i < val.length; i += 1) { mapped.push(fn(val[i])); } return mapped; } return fn(val); }; module.exports = { arrayToObject: arrayToObject, assign: assign, combine: combine, compact: compact, decode: decode, encode: encode, isBuffer: isBuffer, isRegExp: isRegExp, maybeMap: maybeMap, merge: merge }; /***/ }), /* 70 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const net = __webpack_require__(71) const debug = __webpack_require__(15)('mqttjs:tcp') /* variables port and host can be removed since you have all required information in opts object */ function streamBuilder (client, opts) { opts.port = opts.port || 1883 opts.hostname = opts.hostname || opts.host || 'localhost' const port = opts.port const host = opts.hostname debug('port %d and host %s', port, host) return net.createConnection(port, host) } module.exports = streamBuilder /***/ }), /* 71 */ /***/ (function(module, exports) { /* (ignored) */ /***/ }), /* 72 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const { Buffer } = __webpack_require__(13) const Transform = __webpack_require__(19).Transform const duplexify = __webpack_require__(37) /* global wx */ let socketTask, proxy, stream function buildProxy () { const proxy = new Transform() proxy._write = function (chunk, encoding, next) { socketTask.send({ data: chunk.buffer, success: function () { next() }, fail: function (errMsg) { next(new Error(errMsg)) } }) } proxy._flush = function socketEnd (done) { socketTask.close({ success: function () { done() } }) } return proxy } function setDefaultOpts (opts) { if (!opts.hostname) { opts.hostname = 'localhost' } if (!opts.path) { opts.path = '/' } if (!opts.wsOptions) { opts.wsOptions = {} } } function buildUrl (opts, client) { const protocol = opts.protocol === 'wxs' ? 'wss' : 'ws' let url = protocol + '://' + opts.hostname + opts.path if (opts.port && opts.port !== 80 && opts.port !== 443) { url = protocol + '://' + opts.hostname + ':' + opts.port + opts.path } if (typeof (opts.transformWsUrl) === 'function') { url = opts.transformWsUrl(url, opts, client) } return url } function bindEventHandler () { socketTask.onOpen(function () { stream.setReadable(proxy) stream.setWritable(proxy) stream.emit('connect') }) socketTask.onMessage(function (res) { let data = res.data if (data instanceof ArrayBuffer) data = Buffer.from(data) else data = Buffer.from(data, 'utf8') proxy.push(data) }) socketTask.onClose(function () { stream.end() stream.destroy() }) socketTask.onError(function (res) { stream.destroy(new Error(res.errMsg)) }) } function buildStream (client, opts) { opts.hostname = opts.hostname || opts.host if (!opts.hostname) { throw new Error('Could not determine host. Specify host manually.') } const websocketSubProtocol = (opts.protocolId === 'MQIsdp') && (opts.protocolVersion === 3) ? 'mqttv3.1' : 'mqtt' setDefaultOpts(opts) const url = buildUrl(opts, client) socketTask = wx.connectSocket({ url: url, protocols: [websocketSubProtocol] }) proxy = buildProxy() stream = duplexify.obj() stream._destroy = function (err, cb) { socketTask.close({ success: function () { cb && cb(err) } }) } const destroyRef = stream.destroy stream.destroy = function () { stream.destroy = destroyRef const self = this setTimeout(function () { socketTask.close({ fail: function () { self._destroy(new Error()) } }) }, 0) }.bind(stream) bindEventHandler() return stream } module.exports = buildStream /***/ }), /* 73 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const { Buffer } = __webpack_require__(13) const Transform = __webpack_require__(19).Transform const duplexify = __webpack_require__(37) /* global FileReader */ let my let proxy let stream let isInitialized = false function buildProxy () { const proxy = new Transform() proxy._write = function (chunk, encoding, next) { my.sendSocketMessage({ data: chunk.buffer, success: function () { next() }, fail: function () { next(new Error()) } }) } proxy._flush = function socketEnd (done) { my.closeSocket({ success: function () { done() } }) } return proxy } function setDefaultOpts (opts) { if (!opts.hostname) { opts.hostname = 'localhost' } if (!opts.path) { opts.path = '/' } if (!opts.wsOptions) { opts.wsOptions = {} } } function buildUrl (opts, client) { const protocol = opts.protocol === 'alis' ? 'wss' : 'ws' let url = protocol + '://' + opts.hostname + opts.path if (opts.port && opts.port !== 80 && opts.port !== 443) { url = protocol + '://' + opts.hostname + ':' + opts.port + opts.path } if (typeof (opts.transformWsUrl) === 'function') { url = opts.transformWsUrl(url, opts, client) } return url } function bindEventHandler () { if (isInitialized) return isInitialized = true my.onSocketOpen(function () { stream.setReadable(proxy) stream.setWritable(proxy) stream.emit('connect') }) my.onSocketMessage(function (res) { if (typeof res.data === 'string') { const buffer = Buffer.from(res.data, 'base64') proxy.push(buffer) } else { const reader = new FileReader() reader.addEventListener('load', function () { let data = reader.result if (data instanceof ArrayBuffer) data = Buffer.from(data) else data = Buffer.from(data, 'utf8') proxy.push(data) }) reader.readAsArrayBuffer(res.data) } }) my.onSocketClose(function () { stream.end() stream.destroy() }) my.onSocketError(function (res) { stream.destroy(res) }) } function buildStream (client, opts) { opts.hostname = opts.hostname || opts.host if (!opts.hostname) { throw new Error('Could not determine host. Specify host manually.') } const websocketSubProtocol = (opts.protocolId === 'MQIsdp') && (opts.protocolVersion === 3) ? 'mqttv3.1' : 'mqtt' setDefaultOpts(opts) const url = buildUrl(opts, client) my = opts.my my.connectSocket({ url: url, protocols: websocketSubProtocol }) proxy = buildProxy() stream = duplexify.obj() bindEventHandler() return stream } module.exports = buildStream /***/ }), /* 74 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process) { const { Buffer } = __webpack_require__(13) const WS = __webpack_require__(384) const debug = __webpack_require__(15)('mqttjs:ws') const duplexify = __webpack_require__(37) const Transform = __webpack_require__(19).Transform const WSS_OPTIONS = [ 'rejectUnauthorized', 'ca', 'cert', 'key', 'pfx', 'passphrase' ] // eslint-disable-next-line camelcase const IS_BROWSER = (typeof process !== 'undefined' && process.title === 'browser') || typeof __webpack_require__ === 'function' function buildUrl (opts, client) { let url = opts.protocol + '://' + opts.hostname + ':' + opts.port + opts.path if (typeof (opts.transformWsUrl) === 'function') { url = opts.transformWsUrl(url, opts, client) } return url } function setDefaultOpts (opts) { const options = opts if (!opts.hostname) { options.hostname = 'localhost' } if (!opts.port) { if (opts.protocol === 'wss') { options.port = 443 } else { options.port = 80 } } if (!opts.path) { options.path = '/' } if (!opts.wsOptions) { options.wsOptions = {} } if (!IS_BROWSER && opts.protocol === 'wss') { // Add cert/key/ca etc options WSS_OPTIONS.forEach(function (prop) { if (Object.prototype.hasOwnProperty.call(opts, prop) && !Object.prototype.hasOwnProperty.call(opts.wsOptions, prop)) { options.wsOptions[prop] = opts[prop] } }) } return options } function setDefaultBrowserOpts (opts) { const options = setDefaultOpts(opts) if (!options.hostname) { options.hostname = options.host } if (!options.hostname) { // Throwing an error in a Web Worker if no `hostname` is given, because we // can not determine the `hostname` automatically. If connecting to // localhost, please supply the `hostname` as an argument. if (typeof (document) === 'undefined') { throw new Error('Could not determine host. Specify host manually.') } const parsed = new URL(document.URL) options.hostname = parsed.hostname if (!options.port) { options.port = parsed.port } } // objectMode should be defined for logic if (options.objectMode === undefined) { options.objectMode = !(options.binary === true || options.binary === undefined) } return options } function createWebSocket (client, url, opts) { debug('createWebSocket') debug('protocol: ' + opts.protocolId + ' ' + opts.protocolVersion) const websocketSubProtocol = (opts.protocolId === 'MQIsdp') && (opts.protocolVersion === 3) ? 'mqttv3.1' : 'mqtt' debug('creating new Websocket for url: ' + url + ' and protocol: ' + websocketSubProtocol) const socket = new WS(url, [websocketSubProtocol], opts.wsOptions) return socket } function createBrowserWebSocket (client, opts) { const websocketSubProtocol = (opts.protocolId === 'MQIsdp') && (opts.protocolVersion === 3) ? 'mqttv3.1' : 'mqtt' const url = buildUrl(opts, client) /* global WebSocket */ const socket = new WebSocket(url, [websocketSubProtocol]) socket.binaryType = 'arraybuffer' return socket } function streamBuilder (client, opts) { debug('streamBuilder') const options = setDefaultOpts(opts) const url = buildUrl(options, client) const socket = createWebSocket(client, url, options) const webSocketStream = WS.createWebSocketStream(socket, options.wsOptions) webSocketStream.url = url socket.on('close', () => { webSocketStream.destroy() }) return webSocketStream } function browserStreamBuilder (client, opts) { debug('browserStreamBuilder') let stream const options = setDefaultBrowserOpts(opts) // sets the maximum socket buffer size before throttling const bufferSize = options.browserBufferSize || 1024 * 512 const bufferTimeout = opts.browserBufferTimeout || 1000 const coerceToBuffer = !opts.objectMode const socket = createBrowserWebSocket(client, opts) const proxy = buildProxy(opts, socketWriteBrowser, socketEndBrowser) if (!opts.objectMode) { proxy._writev = writev } proxy.on('close', () => { socket.close() }) const eventListenerSupport = (typeof socket.addEventListener !== 'undefined') // was already open when passed in if (socket.readyState === socket.OPEN) { stream = proxy } else { stream = stream = duplexify(undefined, undefined, opts) if (!opts.objectMode) { stream._writev = writev } if (eventListenerSupport) { socket.addEventListener('open', onopen) } else { socket.onopen = onopen } } stream.socket = socket if (eventListenerSupport) { socket.addEventListener('close', onclose) socket.addEventListener('error', onerror) socket.addEventListener('message', onmessage) } else { socket.onclose = onclose socket.onerror = onerror socket.onmessage = onmessage } // methods for browserStreamBuilder function buildProxy (options, socketWrite, socketEnd) { const proxy = new Transform({ objectModeMode: options.objectMode }) proxy._write = socketWrite proxy._flush = socketEnd return proxy } function onopen () { stream.setReadable(proxy) stream.setWritable(proxy) stream.emit('connect') } function onclose () { stream.end() stream.destroy() } function onerror (err) { stream.destroy(err) } function onmessage (event) { let data = event.data if (data instanceof ArrayBuffer) data = Buffer.from(data) else data = Buffer.from(data, 'utf8') proxy.push(data) } // this is to be enabled only if objectMode is false function writev (chunks, cb) { const buffers = new Array(chunks.length) for (let i = 0; i < chunks.length; i++) { if (typeof chunks[i].chunk === 'string') { buffers[i] = Buffer.from(chunks[i], 'utf8') } else { buffers[i] = chunks[i].chunk } } this._write(Buffer.concat(buffers), 'binary', cb) } function socketWriteBrowser (chunk, enc, next) { if (socket.bufferedAmount > bufferSize) { // throttle data until buffered amount is reduced. setTimeout(socketWriteBrowser, bufferTimeout, chunk, enc, next) } if (coerceToBuffer && typeof chunk === 'string') { chunk = Buffer.from(chunk, 'utf8') } try { socket.send(chunk) } catch (err) { return next(err) } next() } function socketEndBrowser (done) { socket.close() done() } // end methods for browserStreamBuilder return stream } if (IS_BROWSER) { module.exports = browserStreamBuilder } else { module.exports = streamBuilder } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(14))) /***/ }), /* 75 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(global) { const external = global.external; const re_msie = /\b(?:msie |ie |trident\/[0-9].*rv[ :])([0-9.]+)/; const re_blackberry_10 = /\bbb10\b.+?\bversion\/([\d.]+)/; const re_blackberry_6_7 = /\bblackberry\b.+\bversion\/([\d.]+)/; const re_blackberry_4_5 = /\bblackberry\d+\/([\d.]+)/; const NA_VERSION = "-1"; const DEVICES = [ ["nokia", function (ua) { // nokia/-1 if (ua.indexOf("nokia ") !== -1) { return /\bnokia ([0-9]+)?/; } else { return /\bnokia([a-z0-9]+)?/; } }], //Android WP ["samsung", function (ua) { if (ua.indexOf("samsung") !== -1) { return /\bsamsung(?:[ \-](?:sgh|gt|sm))?-([a-z0-9]+)/; } else { return /\b(?:sgh|sch|gt|sm)-([a-z0-9]+)/; } }], ["wp", function (ua) { return ua.indexOf("windows phone ") !== -1 || ua.indexOf("xblwp") !== -1 || ua.indexOf("zunewp") !== -1 || ua.indexOf("windows ce") !== -1; }], ["pc", "windows"], ["ipad", "ipad"], // ipod iphone ["ipod", "ipod"], ["iphone", /\biphone\b|\biph(\d)/], ["mac", "macintosh"], ["mi", /\bmi[ \-]?([a-z0-9 ]+(?= build|\)))/], ["hongmi", /\bhm[ \-]?([a-z0-9]+)/], ["aliyun", /\baliyunos\b(?:[\-](\d+))?/], ["meizu", function (ua) { return ua.indexOf("meizu") >= 0 ? /\bmeizu[\/ ]([a-z0-9]+)\b/ : /\bm([0-9cx]{1,4})\b/; }], ["nexus", /\bnexus ([0-9s.]+)/], ["huawei", function (ua) { const re_mediapad = /\bmediapad (.+?)(?= build\/huaweimediapad\b)/; if (ua.indexOf("huawei-huawei") !== -1) { return /\bhuawei\-huawei\-([a-z0-9\-]+)/; } else if (re_mediapad.test(ua)) { return re_mediapad; } else { return /\bhuawei[ _\-]?([a-z0-9]+)/; } }], ["lenovo", function (ua) { if (ua.indexOf("lenovo-lenovo") !== -1) { return /\blenovo\-lenovo[ \-]([a-z0-9]+)/; } else { return /\blenovo[ \-]?([a-z0-9]+)/; } }], ["zte", function (ua) { if (/\bzte\-[tu]/.test(ua)) { return /\bzte-[tu][ _\-]?([a-su-z0-9\+]+)/; } else { return /\bzte[ _\-]?([a-su-z0-9\+]+)/; } }], ["vivo", /\bvivo(?: ([a-z0-9]+))?/], ["htc", function (ua) { if (/\bhtc[a-z0-9 _\-]+(?= build\b)/.test(ua)) { return /\bhtc[ _\-]?([a-z0-9 ]+(?= build))/; } else { return /\bhtc[ _\-]?([a-z0-9 ]+)/; } }], ["oppo", /\boppo[_ ]([a-z0-9]+)/], ["konka", /\bkonka[_\-]([a-z0-9]+)/], ["sonyericsson", /\bmt([a-z0-9]+)/], ["coolpad", /\bcoolpad[_ ]?([a-z0-9]+)/], ["lg", /\blg[\-]([a-z0-9]+)/], ["android", /\bandroid\b|\badr\b/], ["blackberry", function (ua) { if (ua.indexOf("blackberry") >= 0) { return /\bblackberry\s?(\d+)/; } return "bb10"; }], ]; const OS = [ ["wp", function (ua) { if (ua.indexOf("windows phone ") !== -1) { return /\bwindows phone (?:os )?([0-9.]+)/; } else if (ua.indexOf("xblwp") !== -1) { return /\bxblwp([0-9.]+)/; } else if (ua.indexOf("zunewp") !== -1) { return /\bzunewp([0-9.]+)/; } return "windows phone"; }], ["windows", /\bwindows nt ([0-9.]+)/], ["macosx", /\bmac os x ([0-9._]+)/], ["ios", function (ua) { if (/\bcpu(?: iphone)? os /.test(ua)) { return /\bcpu(?: iphone)? os ([0-9._]+)/; } else if (ua.indexOf("iph os ") !== -1) { return /\biph os ([0-9_]+)/; } else { return /\bios\b/; } }], ["yunos", /\baliyunos ([0-9.]+)/], ["android", function (ua) { if (ua.indexOf("android") >= 0) { return /\bandroid[ \/-]?([0-9.x]+)?/; } else if (ua.indexOf("adr") >= 0) { if (ua.indexOf("mqqbrowser") >= 0) { return /\badr[ ]\(linux; u; ([0-9.]+)?/; } else { return /\badr(?:[ ]([0-9.]+))?/; } } return "android"; //return /\b(?:android|\badr)(?:[\/\- ](?:\(linux; u; )?)?([0-9.x]+)?/; }], ["chromeos", /\bcros i686 ([0-9.]+)/], ["linux", "linux"], ["linux", /\blinux\s(?:[xi][0-9_]+;)\srv:([0-9.]+)/],//Linux x86_64; rv:34.0 ["windowsce", /\bwindows ce(?: ([0-9.]+))?/], ["cros", /\bcros armv7l ([0-9.]+)/],//CrOS armv7l 7077.134.0 ["symbian", /\bsymbian(?:os)?\/([0-9.]+)/], ["blackberry", function (ua) { const m = ua.match(re_blackberry_10) || ua.match(re_blackberry_6_7) || ua.match(re_blackberry_4_5); return m ? { version: m[1] } : "blackberry"; }], ['ie', /\rv\:\/([0-9.]+)/] ]; const ENGINE = [ ["edgehtml", /edge\/([0-9.]+)/], ["trident", re_msie], ["blink", function () { return "chrome" in global && "CSS" in global && /\bapplewebkit[\/]?([0-9.+]+)/; }], ["webkit", /\bapplewebkit[\/]?([0-9.+]+)/], ["gecko", function (ua) { const match = ua.match(/\brv:([\d\w.]+).*\bgecko\/(\d+)/); if (match) { return { version: match[1] + "." + match[2], }; } }], ["presto", /\bpresto\/([0-9.]+)/], ["androidwebkit", /\bandroidwebkit\/([0-9.]+)/], ["coolpadwebkit", /\bcoolpadwebkit\/([0-9.]+)/], ["u2", /\bu2\/([0-9.]+)/], ["u3", /\bu3\/([0-9.]+)/], ]; const BROWSER = [ ['coccoc', /coc_coc_browser\/([0-9.]+)/], // Microsoft Edge Browser, Default browser in Windows 10. ["edge", /edge\/([0-9.]+)/], ["chrome-edge", /chrome.+edg\/([0-9.]+)/], // Sogou. ["sogou", function (ua) { if (ua.indexOf("sogoumobilebrowser") >= 0) { return /sogoumobilebrowser\/([0-9.]+)/; } else if (ua.indexOf("sogoumse") >= 0) { return true; } return / se ([0-9.x]+)/; }], // Maxthon ["maxthon", function () { try { if (external && (external.mxVersion || external.max_version)) { return { version: external.mxVersion || external.max_version, }; } } catch (ex) { /* */ } return /\b(?:maxthon|mxbrowser)(?:[ \/]([0-9.]+))?/; }], ["micromessenger", /\bmicromessenger\/([\d.]+)/], ["qq", /\bm?qqbrowser\/([0-9.]+)/], ["green", "greenbrowser"], ["tt", /\btencenttraveler ([0-9.]+)/], ["liebao", function (ua) { if (ua.indexOf("liebaofast") >= 0) { return /\bliebaofast\/([0-9.]+)/; } if (ua.indexOf("lbbrowser") === -1) { return false; } var version; try { if (external && external.LiebaoGetVersion) { version = external.LiebaoGetVersion(); } } catch (ex) { /* */ } return { version: version || NA_VERSION, }; }], ["tao", /\btaobrowser\/([0-9.]+)/], ["coolnovo", /\bcoolnovo\/([0-9.]+)/], ["saayaa", "saayaa"], ["baidu", /\b(?:ba?idubrowser|baiduhd)[ \/]([0-9.x]+)/], ["ie", re_msie], ["mi", /\bmiuibrowser\/([0-9.]+)/], ["opera", function (ua) { const re_opera_old = /\bopera.+version\/([0-9.ab]+)/; const re_opera_new = /\bopr\/([0-9.]+)/; return re_opera_old.test(ua) ? re_opera_old : re_opera_new; }], ["oupeng", /\boupeng\/([0-9.]+)/], ["yandex", /yabrowser\/([0-9.]+)/], ["ali-ap", function (ua) { if (ua.indexOf("aliapp") > 0) { return /\baliapp\(ap\/([0-9.]+)\)/; } else { return /\balipayclient\/([0-9.]+)\b/; } }], ["ali-ap-pd", /\baliapp\(ap-pd\/([0-9.]+)\)/], ["ali-am", /\baliapp\(am\/([0-9.]+)\)/], ["ali-tb", /\baliapp\(tb\/([0-9.]+)\)/], ["ali-tb-pd", /\baliapp\(tb-pd\/([0-9.]+)\)/], ["ali-tm", /\baliapp\(tm\/([0-9.]+)\)/], ["ali-tm-pd", /\baliapp\(tm-pd\/([0-9.]+)\)/], ["uc", function (ua) { if (ua.indexOf("ucbrowser/") >= 0) { return /\bucbrowser\/([0-9.]+)/; } else if (ua.indexOf("ubrowser/") >= 0) { return /\bubrowser\/([0-9.]+)/; } else if (/\buc\/[0-9]/.test(ua)) { return /\buc\/([0-9.]+)/; } else if (ua.indexOf("ucweb") >= 0) { // `ucweb/2.0` is compony info. // `UCWEB8.7.2.214/145/800` is browser info. return /\bucweb([0-9.]+)?/; } else { return /\b(?:ucbrowser|uc)\b/; } }], ["baiduboxapp", function (ua) { var back = 0; var a; if (/ baiduboxapp\//i.test(ua)) { a = /([\d+.]+)_(?:diordna|enohpi)_/.exec(ua); if (a) { a = a[1].split("."); back = a.reverse().join("."); } else if ((a = /baiduboxapp\/([\d+.]+)/.exec(ua))) { back = a[1]; } return { version: back, }; } return false; }, ], ["oppobrowser", /\boppobrowser\/([0-9.]+)/], ["edge-android",/ (?:edga)\/([0-9.]+)/], ["chrome", / (?:chrome|crios|crmo)\/([0-9.]+)/], // Android safari ["android", function (ua) { if (ua.indexOf("android") === -1) { return; } return /\bversion\/([0-9.]+(?: beta)?)/; }], ["blackberry", function (ua) { const m = ua.match(re_blackberry_10) || ua.match(re_blackberry_6_7) || ua.match(re_blackberry_4_5); return m ? { version: m[1] } : "blackberry"; }], ["safari", /\bversion\/([0-9.]+(?: beta)?)(?: mobile(?:\/[a-z0-9]+)?)? safari\//], // Safari, WebView ["webview", /\bcpu(?: iphone)? os (?:[0-9._]+).+\bapplewebkit\/([0-9.]+)\b/], ["webview", /os x (?:[0-9._]+).+\bapplewebkit\/([0-9.]+)\b/], ["firefox", /\bfirefox\/([0-9.ab]+)/], ["nokia", /\bnokiabrowser\/([0-9.]+)/] ]; module.exports = { device: DEVICES, os: OS, browser: BROWSER, engine: ENGINE, re_msie: re_msie, }; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12))) /***/ }), /* 76 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process) { const MqttClient = __webpack_require__(324) const Store = __webpack_require__(57) const url = __webpack_require__(355) const xtend = __webpack_require__(32) const debug = __webpack_require__(15)('mqttjs') const protocols = {} // eslint-disable-next-line camelcase if ((typeof process !== 'undefined' && process.title !== 'browser') || typeof __webpack_require__ !== 'function') { protocols.mqtt = __webpack_require__(70) protocols.tcp = __webpack_require__(70) protocols.ssl = __webpack_require__(36) protocols.tls = __webpack_require__(36) protocols.mqtts = __webpack_require__(36) } else { protocols.wx = __webpack_require__(72) protocols.wxs = __webpack_require__(72) protocols.ali = __webpack_require__(73) protocols.alis = __webpack_require__(73) } protocols.ws = __webpack_require__(74) protocols.wss = __webpack_require__(74) /** * Parse the auth attribute and merge username and password in the options object. * * @param {Object} [opts] option object */ function parseAuthOptions (opts) { let matches if (opts.auth) { matches = opts.auth.match(/^(.+):(.+)$/) if (matches) { opts.username = matches[1] opts.password = matches[2] } else { opts.username = opts.auth } } } /** * connect - connect to an MQTT broker. * * @param {String} [brokerUrl] - url of the broker, optional * @param {Object} opts - see MqttClient#constructor */ function connect (brokerUrl, opts) { debug('connecting to an MQTT broker...') if ((typeof brokerUrl === 'object') && !opts) { opts = brokerUrl brokerUrl = null } opts = opts || {} if (brokerUrl) { // eslint-disable-next-line const parsed = url.parse(brokerUrl, true) if (parsed.port != null) { parsed.port = Number(parsed.port) } opts = xtend(parsed, opts) if (opts.protocol === null) { throw new Error('Missing protocol') } opts.protocol = opts.protocol.replace(/:$/, '') } // merge in the auth options if supplied parseAuthOptions(opts) // support clientId passed in the query string of the url if (opts.query && typeof opts.query.clientId === 'string') { opts.clientId = opts.query.clientId } if (opts.cert && opts.key) { if (opts.protocol) { if (['mqtts', 'wss', 'wxs', 'alis'].indexOf(opts.protocol) === -1) { switch (opts.protocol) { case 'mqtt': opts.protocol = 'mqtts' break case 'ws': opts.protocol = 'wss' break case 'wx': opts.protocol = 'wxs' break case 'ali': opts.protocol = 'alis' break default: throw new Error('Unknown protocol for secure connection: "' + opts.protocol + '"!') } } } else { // A cert and key was provided, however no protocol was specified, so we will throw an error. throw new Error('Missing secure protocol key') } } if (!protocols[opts.protocol]) { const isSecure = ['mqtts', 'wss'].indexOf(opts.protocol) !== -1 opts.protocol = [ 'mqtt', 'mqtts', 'ws', 'wss', 'wx', 'wxs', 'ali', 'alis' ].filter(function (key, index) { if (isSecure && index % 2 === 0) { // Skip insecure protocols when requesting a secure one. return false } return (typeof protocols[key] === 'function') })[0] } if (opts.clean === false && !opts.clientId) { throw new Error('Missing clientId for unclean clients') } if (opts.protocol) { opts.defaultProtocol = opts.protocol } function wrapper (client) { if (opts.servers) { if (!client._reconnectCount || client._reconnectCount === opts.servers.length) { client._reconnectCount = 0 } opts.host = opts.servers[client._reconnectCount].host opts.port = opts.servers[client._reconnectCount].port opts.protocol = (!opts.servers[client._reconnectCount].protocol ? opts.defaultProtocol : opts.servers[client._reconnectCount].protocol) opts.hostname = opts.host client._reconnectCount++ } debug('calling streambuilder for', opts.protocol) return protocols[opts.protocol](client, opts) } const client = new MqttClient(wrapper, opts) client.on('error', function () { /* Automatically set up client error handling */ }) return client } module.exports = connect module.exports.connect = connect module.exports.MqttClient = MqttClient module.exports.Store = Store /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(14))) /***/ }), /* 77 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(387); /***/ }), /* 78 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "html, body {\r\n padding: 0;\r\n margin: 0;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.emh-app {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n\r\n.emh-app-devices-ctn {\r\n height: 100%;\r\n overflow-y: auto;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n", ""]); /***/ }), /* 79 */ /***/ (function(module, exports) { /** * When source maps are enabled, `style-loader` uses a link element with a data-uri to * embed the css on the page. This breaks all relative urls because now they are relative to a * bundle instead of the current page. * * One solution is to only use full urls, but that may be impossible. * * Instead, this function "fixes" the relative urls to be absolute according to the current page location. * * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command. * */ module.exports = function (css) { // get current location var location = typeof window !== "undefined" && window.location; if (!location) { throw new Error("fixUrls requires window.location"); } // blank or null? if (!css || typeof css !== "string") { return css; } var baseUrl = location.protocol + "//" + location.host; var currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/"); // convert each url(...) /* This regular expression is just a way to recursively match brackets within a string. /url\s*\( = Match on the word "url" with any whitespace after it and then a parens ( = Start a capturing group (?: = Start a non-capturing group [^)(] = Match anything that isn't a parentheses | = OR \( = Match a start parentheses (?: = Start another non-capturing groups [^)(]+ = Match anything that isn't a parentheses | = OR \( = Match a start parentheses [^)(]* = Match anything that isn't a parentheses \) = Match a end parentheses ) = End Group *\) = Match anything and then a close parens ) = Close non-capturing group * = Match anything ) = Close capturing group \) = Match a close parens /gi = Get all matches, not the first. Be case insensitive. */ var fixedCss = css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(fullMatch, origUrl) { // strip quotes (if they exist) var unquotedOrigUrl = origUrl .trim() .replace(/^"(.*)"$/, function(o, $1){ return $1; }) .replace(/^'(.*)'$/, function(o, $1){ return $1; }); // already a full url? no change if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(unquotedOrigUrl)) { return fullMatch; } // convert the url to a full url var newUrl; if (unquotedOrigUrl.indexOf("//") === 0) { //TODO: should we add protocol? newUrl = unquotedOrigUrl; } else if (unquotedOrigUrl.indexOf("/") === 0) { // path should be relative to the base url newUrl = baseUrl + unquotedOrigUrl; // already starts with '/' } else { // path should be relative to current directory newUrl = currentDir + unquotedOrigUrl.replace(/^\.\//, ""); // Strip leading './' } // send back the fixed url(...) return "url(" + JSON.stringify(newUrl) + ")"; }); // send back the fixed css return fixedCss; }; /***/ }), /* 80 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(81); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 81 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".am-navigator-menu {\n font-family: Arial, Helvetica, sans-serif;\n}\n\n.am-navigator-menu-header {\n background-image: url(http://absol.cf/assets/background/188-1881044_dual-android-navigation-drawer-background.jpg);\n min-width: 12em;\n background-size: cover;\n color: white;\n box-sizing: border-box;\n padding-left: 0.625em;\n padding-top: 0.625em;\n padding-bottom: 0.625em;\n padding-right: 0.125em;\n}\n\n.am-navigator-menu .am-navigator-content {\n background-color: white;\n overflow-y: auto;\n}\n\n.am-navigator-menu-avatar-ctn {\n padding-top: 0.625em;\n padding-bottom: 0.625em;\n}\n\n\n.am-navigator-menu-avatar {\n width: 5em;\n height: 5em;\n border-radius: 50%;\n background-image: url(https://avatars2.githubusercontent.com/u/9133017?s=460&v=4);\n background-size: cover;\n}\n\n.am-navigator-menu-full-name {\n font-size: 1.14285714286em;\n font-weight: bold;\n white-space: nowrap;\n}\n\n.am-navigator-menu-email {}\n\n\n.am-navigator-menu-group-name {\n padding-left: 0.625em;\n line-height: 2.5;\n color: rgb(104, 104, 105);\n font-weight: bold;\n}\n\n\n\n.am-navigator-menu-item {\n position: relative;\n height: 2.5em;\n padding-left: 2.92857143em;\n}\n\n.am-navigator-menu-item:active{\n background-color: rgba(169, 169, 169, 0.3 );\n}\n\n\n\n\n .am-navigator-menu-item-icon-ctn {\n position: absolute;\n left: 0.625em;\n top: 0.5em;\n bottom: 0.5em;\n width: 1.5em;\n height: 1.5em;\n}\n\n.am-navigator-menu-item-icon-ctn span {\n font-size: 1.5em;\n line-height: 1;\n}\n\n.am-navigator-menu-item-text {\n font-size: inherit;\n line-height: 2.5;\n}\n\n.am-navigator-menu-group:not(:last-child) {\n border-bottom: 1px solid #ddd;\n}", ""]); /***/ }), /* 82 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(83); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 83 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ":root {\n --as-input-height: calc(2rem + 2px);\n --as-input-font-size: 1rem;\n --as-input-font-family: Arial, Helvetica, sans-serif;\n --as-input-vertical-padding: 0.3571em;\n --as-input-horizontal-padding: 0.5em;\n --as-input-border-color: #ddd;\n --as-input-border-radius: 3px;\n --as-context-menu-font-size: 1rem;\n --as-context-font-family: Arial, Helvetica, sans-serif;\n --as-disabled-background-color: #ebebe4;\n --as-disabled-text-color: rgb(102, 102, 102);\n --icon-background-cover-hover: #91e4fb;\n --as-transparent-button-hover-color: rgba(169, 169, 172, 0.1);\n --as-transparent-button-focus-color: rgba(20, 185, 235, 0.3);\n --as-transparent-button-active-color: rgba(169, 169, 172, 0.2);\n --as-transparent-button-text-color: rgb(139, 139, 140);\n --as-transparent-button-text-hover-color: rgb(107, 107, 107);\n --as-transparent-button-text-active-color: rgb(0, 0, 0);\n\n --modal-margin-top: 10vh;\n --icon-font-size: 1.42857142857rem;\n}\n\n", ""]); /***/ }), /* 84 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(85); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 85 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-debug-task {\n position: fixed;\n right: 10px;\n bottom: 10px;\n z-index: 999999;\n border-radius: 4px;\n background: rgba(169, 169, 171, 0.3);\n border: solid 1px rgba(21, 21, 214, 0.5);\n min-width: 45px;\n min-height: 30px;\n font-size: 12px;\n padding: 5px;\n pointer-events: none;\n}\n\n.absol-debug-task-name{\n color: darkcyan;\n}\n\n.absol-debug-task-value{\n color: rgb(159, 8, 197);\n}", ""]); /***/ }), /* 86 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(87); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 87 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-text-input {\n border-style: solid;\n border-width: 1px;\n border-radius: var(--as-input-border-radius);\n border-color: var(--as-input-border-color);\n outline: none;\n height: var(--as-input-height);\n padding-left: var(--as-input-vertical-padding);\n font-size: inherit;\n box-sizing: border-box;\n}\n\n.as-text-input[readonly].as-border-none {\n border: none;\n padding-left: 0;\n padding-right: 0;\n}\n\ninput[type=\"text\"].as-text-input:disabled,\ntextarea.as-text-input:disabled {\n background-color: var(--as-disabled-background-color);\n}\n\n\n.as-blink-text {\n --blink-duration: 1s;\n --text-color: black;\n animation-name: as-anim-text-blink-1-1;\n animation-duration: var(--blink-duration);\n animation-iteration-count: infinite;\n}\n\n\n@keyframes as-anim-text-blink-1-1 {\n 0% {\n color: var(--text-color);\n }\n 49% {\n color: var(--text-color);\n }\n 50% {\n color: transparent;\n }\n 99% {\n color: transparent;\n }\n 100% {\n color: var(--text-color);\n }\n}\n\n.as-mti-star {\n font-family: 'Material Icons';\n color: #ffa834;\n font-size: var(--icon-font-size);\n -webkit-font-smoothing: antialiased;\n}\n\n.as-mti-star::before {\n content: \"star\";\n}\n\n.as-cursor-pointer {\n cursor: pointer;\n}\n\n\n.as-table-grid {\n display: table;\n}\n\n.as-table-grid.as-inline {\n display: inline-table;\n}\n\n.as-table-grid-row {\n display: table-row;\n}\n\n\n.as-table-grid-cell {\n display: table-cell;\n}\n\n\n.as-pseudo-align-child-center {\n text-align: center;\n}\n\n.as-pseudo-align-child-center::before {\n height: 100%;\n content: \"\";\n vertical-align: middle;\n display: inline-block;\n}\n\n.as-pseudo-align-child-center > * {\n display: inline-block;\n vertical-align: middle;\n}\n\n\n.as-transparent-button {\n background-color: transparent;\n border: none;\n padding: 0;\n margin: 0;\n font-size: inherit;\n color: var(--as-transparent-button-text-color);\n}\n\n.as-transparent-button:hover {\n color: var(--as-transparent-button-text-hover-color);\n}\n\n\n.as-transparent-button:active {\n color: var(--as-transparent-button-text-active-color);\n}\n\n.as-transparent-button .mdi {\n font-size: 1.5em;\n}\n\n.as-transparent-button > svg,\n.as-transparent-button > img {\n width: 1.5em;\n height: 1.5em;\n}\n\n\n.as-transparent-button.as-variant-danger {\n color: var(--variant-color-danger)\n}\n\n.as-transparent-button.as-variant-danger:hover {\n color: #c03542;\n}\n\n\n\n.as-transparent-button.as-variant-danger:active{\n color: #ef0d23;\n}\n\nbutton.as-transparent-button:disabled {\n color: #dddddd;\n}\n\n.as-section-text-n-line {\n position: relative;\n display: block;\n padding-bottom: 5px;\n}\n\n.as-section-text-n-line span {\n background-color: white;\n position: relative;\n z-index: 2;\n padding-right: 5px;\n display: inline-block;\n}\n\n\n.as-section-text-n-line::after {\n content: \"\";\n position: absolute;\n z-index: 1;\n left: 0;\n right: 0;\n top: calc(50% - 1px);\n border-top: 1px solid #dddddd;\n}\n", ""]); /***/ }), /* 88 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(89); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 89 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-autocomplete-input {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n border: solid 1px #d6d6d6;\n}\n\n.absol-autocomplete-input.absol-disabled {\n pointer-events: none;\n color: rgb(84, 84, 84);\n background-color: rgb(235, 235, 228);\n}\n\n.absol-autocomplete-input>input {\n min-width: 100%;\n min-height: 100%;\n box-sizing: border-box;\n background-color: transparent;\n border: none;\n}\n\n\n.absol-autocomplete-input-dropdown {\n position: absolute;\n left: 0;\n top: 100%;\n min-width: 100%;\n z-index: 1005;\n border: solid 1px rgb(169, 169, 169);\n box-sizing: border-box;\n background-color: white;\n}\n\n.absol-autocomplete-input-dropdown .as-bscroller{\n overflow-y: auto;\n}\n\n.absol-autocomplete-input-dropdown.top {\n top: auto;\n bottom: 100%;\n}\n\n.absol-autocomplete-input-item {\n height: 30px;\n}\n\n.absol-autocomplete-input-item:hover {\n background-color: rgba(169, 169, 169, 0.18605);\n cursor: pointer;\n}\n\n.absol-autocomplete-input-item.active,\n.absol-autocomplete-input-item.active:hover {\n background-color: rgba(169, 169, 169, 0.37209);\n}\n\n.absol-autocomplete-input-item-text {\n line-height: 30px;\n margin-left: 5px;\n margin-right: 5px;\n}", ""]); /***/ }), /* 90 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-has-board-table-drag,\n.as-has-board-table-drag * {\n cursor: grabbing;\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n -ms-user-select: none !important;\n user-select: none !important;\n}\n\n\n\n.as-board-table {\n overflow: visible;\n position: relative;\n\n}\n\n.as-board-drag-zone {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n -ms-user-select: none !important;\n user-select: none !important;\n}\n\n\n.as-board {\n white-space: normal;\n box-sizing: border-box;\n position: relative;\n vertical-align: middle;\n}\n\n/**\nBug note: don't put fixed position element to a element which has transform\n */\n.as-board-moving {\n transform-origin: 30% 55%;\n transform: rotate(5deg);\n transition: transform 0.05s;\n user-select: none;\n pointer-events: none;\n position: fixed !important;\n z-index: 2000;\n}\n\n\n.as-board-place-holder {\n opacity: 0.3;\n}\n\n.as-board-table-prevent-context {\n position: fixed;\n --x: -10000px;\n --y: -10000px;\n left: calc(var(--x) - 100px);\n top: calc(var(--y) - 100px);\n opacity: 0;\n z-index: 100000000;\n width: 200px;\n height: 200px;\n cursor: default;\n -webkit-user-select: none;\n -webkit-touch-callout: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n -o-user-select: none;\n}", ""]); /***/ }), /* 91 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-message-dialog {\n font-size: 1rem;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n box-sizing: border-box;\n background-color: white;\n border-radius: 0.3em;\n border: 1px solid #dddddd;\n -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n}\n\n.as-message-dialog-header {\n padding: calc(5em / 14) 1em;\n border-bottom: 1px solid #e9ecef;\n}\n\n\n.as-message-dialog-title {\n font-size: 1.25em;\n font-weight: 500;\n}\n\n.as-message-dialog-body {\n padding: 1em;\n}\n\n.as-message-dialog-footer {\n text-align: right;\n padding: 10px 20px;\n border-top: 1px solid #e9ecef;\n}\n\n.as-message-dialog-footer:empty,\n.as-message-dialog-header:empty {\n display: none;\n}\n\n\n.as-message-dialog-footer button {\n margin-left: 1.5em;\n}\n\n\n.as-message-dialog-footer button.as-flexicon-button .as-flexicon-button-text-container {\n padding-left: 2em;\n padding-right: 2em;\n}", ""]); /***/ }), /* 92 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(93); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 93 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-flexicon-button {\n box-sizing: border-box;\n border: solid 1px #bfbfbf;\n background-color: #ebebeb;\n border-radius: 0.2em;\n outline: none;\n padding: 0;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n height: var(--as-input-height);\n font-size: 1rem;\n}\n\n.as-flexicon-button:disabled {\n pointer-events: none;\n background-color: #c7c7c7 !important;\n}\n\n\n.as-flexicon-button div,\n.as-flexicon-button span {\n font-weight: inherit;\n font-size: inherit;\n}\n\n\n.as-icon-button-table-box {\n display: table;\n width: 100%;\n height: 100%;\n}\n\n.as-flexicon-button:hover .as-flexicon-button-content {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.as-flexicon-button:active {\n -webkit-box-shadow: inset 0 0.2em 0.25em rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 0.2em 0.25em rgba(0, 0, 0, 0.125);\n}\n\n\n.as-flexicon-button-content {\n display: table-row;\n}\n\n\n.as-flexicon-button-icon-container,\n.as-flexicon-button-text-container {\n display: table-cell;\n box-sizing: content-box;\n vertical-align: middle;\n text-align: center;\n}\n\n.as-flexicon-button-icon-container:empty,\n.as-flexicon-button-text-container:empty:not([data-ml-key]) {\n display: none;\n}\n\n.as-flexicon-button-icon-container {\n width: 2em;\n background-color: rgba(0, 0, 0, 0.0893617021);\n color: rgb(146, 146, 146);\n}\n\n\n.as-flexicon-button-icon-container > span,\n.as-flexicon-button-icon-container > i,\n.as-flexicon-button-icon-container > svg,\n.as-flexicon-button-icon-container > img {\n font-size: 1em;\n}\n\n.as-flexicon-button-text-container {\n padding-left: 0.357em;\n padding-right: 0.357em;\n box-sizing: border-box;\n min-width: 2em;\n}\n\n\n.as-flexicon-button-icon-container + .as-flexicon-button-text-container {\n border-left: solid 1px #bfbfbf;\n}\n\n.as-flexicon-button-icon-container:empty + .as-flexicon-button-text-container {\n border-left: none;\n padding-left: 0.714em;\n padding-right: 0.714em;\n}\n\n/*** theme ***/\n\n.as-flexicon-button.primary {\n border-color: #005bbd;\n background-color: #007bff;\n color: white;\n}\n\n.as-flexicon-button.primary .as-flexicon-button-icon-container {\n color: white;\n}\n\n.as-flexicon-button.primary .as-flexicon-button-text-container {\n border-color: #005bbd;\n}\n\n\n.as-flexicon-button.secondary {\n border-color: #4e555a;\n background-color: #6d767e;\n color: white;\n}\n\n.as-flexicon-button.secondary .as-flexicon-button-icon-container {\n color: white;\n}\n\n.as-flexicon-button.secondary .as-flexicon-button-text-container {\n border-left-color: #4e555a;\n}\n\n\n.as-flexicon-button.success {\n border-color: #1e7b34;\n background-color: #29a847;\n color: white;\n}\n\n.as-flexicon-button.success .as-flexicon-button-icon-container {\n color: white;\n}\n\n.as-flexicon-button.success .as-flexicon-button-text-container {\n border-left-color: #1e7b34;\n}\n\n\n.as-flexicon-button.danger {\n border-color: #b21f2e;\n background-color: #dc3848;\n color: white;\n}\n\n.as-flexicon-button.danger .as-flexicon-button-icon-container {\n color: white;\n}\n\n.as-flexicon-button.danger .as-flexicon-button-text-container {\n border-left-color: #b21f2e;\n}\n\n.as-flexicon-button.warning {\n border-color: #9e7700;\n background-color: #e0a800;\n color: black;\n}\n\n.as-flexicon-button.warning .as-flexicon-button-icon-container {\n color: white;\n}\n\n.as-flexicon-button.warning .as-flexicon-button-text-container {\n border-left-color: #9e7700;\n}\n\n.as-flexicon-button.info {\n border-color: #117888;\n background-color: #17a2b8;\n color: white;\n}\n\n.as-flexicon-button.info .as-flexicon-button-icon-container {\n color: white;\n}\n\n.as-flexicon-button.info .as-flexicon-button-text-container {\n border-left-color: #117888;\n}\n\n.as-flexicon-button.light {\n border-color: #c9d1d9;\n background-color: #f8f9fa;\n color: #212529;\n}\n\n.as-flexicon-button.light .as-flexicon-button-icon-container {\n color: white;\n}\n\n.as-flexicon-button.light .as-flexicon-button-text-container {\n border-left-color: #c9d1d9;\n}\n\n.as-flexicon-button.dark {\n border-color: #171a1c;\n background-color: #343a40;\n color: white;\n}\n\n.as-flexicon-button.dark .as-flexicon-button-icon-container {\n color: white;\n}\n\n.as-flexicon-button.dark .as-flexicon-button-text-container {\n border-left-color: #171a1c;\n}\n\n.as-flexicon-button.link {\n border-color: transparent;\n background-color: transparent;\n color: #007bff;\n}\n\n.as-flexicon-button.link .as-flexicon-button-icon-container {\n color: #007bff;\n background: transparent;\n}\n\n.as-flexicon-button.link .as-flexicon-button-text-container {\n border-left-color: transparent;\n}\n\n.as-flexicon-button.link:hover .as-flexicon-button-text-container {\n text-decoration: underline;\n}", ""]); /***/ }), /* 94 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(95); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 95 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-modal {\n position: fixed;\n left: 0;\n height: 100%;\n top: 0;\n width: 100%;\n z-index: 1001000;\n white-space: nowrap;\n}\n\n.as-modal.as-hidden {\n z-index: -1000;\n visibility: hidden;\n opacity: 0;\n}\n\n.as-modal.as-center {\n text-align: center;\n}\n\n\n.as-modal.as-middle::before {\n content: \"\";\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n width: 0;\n}\n\n.as-modal > .as-modal-content {\n display: inline-block;\n text-align: initial;\n white-space: initial;\n}\n\n/*for content*/\n.as-modal.as-middle > .as-modal-content {\n vertical-align: middle;\n}\n\n.as-loading-cube-modal {\n background-color: rgba(169, 169, 169, 0.3);\n}\n\n\n.as-loading-cube-modal {\n z-index: 1000000;\n background-color: rgba(169, 169, 169, 0.3);\n}\n\n.as-loading-cube-modal > .as-modal-content {\n background-color: white;\n border-radius: 4px;\n padding: 10px;\n -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n display: inline-block;\n}\n\n.as-loading-cube-modal > .as-modal-content > svg {\n width: 5em;\n height: 5em;\n}\n\n\n.am-modal {\n z-index: 100005;\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n text-align: center;\n box-sizing: border-box;\n padding-top: var(--modal-margin-top);\n}\n\n.am-modal>div{\n text-align: initial;\n display: inline-block;\n}", ""]); /***/ }), /* 96 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(97); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 97 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-has-hanger-drag,\n.as-has-hanger-drag * {\n touch-action: none;\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n -ms-user-select: none !important;\n user-select: none !important;\n}", ""]); /***/ }), /* 98 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "/* OLD module */\n\n.absol-bscroller {\n scrollbar-width: thin;\n scrollbar-color: rgba(151, 151, 151, 0.4) rgba(220, 220, 220, 0.4);\n overflow: auto;\n}\n\n\n.absol-bscroller::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n.absol-bscroller::-webkit-scrollbar-track {\n background: rgba(220, 220, 220, 0.4);\n}\n\n.absol-bscroller::-webkit-scrollbar-thumb {\n background: rgba(182, 182, 182, 0.4);\n}\n\n.absol-bscroller::-webkit-scrollbar-thumb:hover {\n background: rgba(32, 32, 32, 0.4);\n}\n\n.absol-bscroller::-webkit-scrollbar-thumb:active {\n background: rgba(13, 13, 13, 0.6);\n}\n\n.absol-bscroller.dark,\n.dark .absol-bscroller {\n scrollbar-color: rgba(104, 104, 104, 0.4) rgba(35, 35, 35, 0.4);\n}\n\n\n.absol-bscroller.dark::-webkit-scrollbar-track,\n.dark .absol-bscroller::-webkit-scrollbar-track {\n background: rgba(35, 35, 35, 0.4);\n}\n\n.absol-bscroller.dark::-webkit-scrollbar-thumb,\n.dark .absol-bscroller::-webkit-scrollbar-thumb {\n background: rgba(73, 73, 73, 0.4);\n}\n\n.absol-bscroller.dark::-webkit-scrollbar-thumb:hover,\n.dark .absol-bscroller::-webkit-scrollbar-thumb:hover {\n background: rgba(223, 223, 223, 0.4);\n}\n\n.absol-bscroller.dark::-webkit-scrollbar-thumb:active,\n.dark .absol-bscroller::-webkit-scrollbar-thumb:active {\n background: rgba(242, 242, 242, 0.6);\n}\n\n/*******************************************/\n.as-bscroller {\n scrollbar-width: thin;\n scrollbar-color: rgba(151, 151, 151, 0.4) rgba(220, 220, 220, 0.4);\n}\n\n\n.as-bscroller::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n.as-bscroller::-webkit-scrollbar-track {\n background: rgba(220, 220, 220, 0.4);\n}\n\n.as-bscroller::-webkit-scrollbar-thumb {\n background: rgba(182, 182, 182, 0.4);\n}\n\n.as-bscroller::-webkit-scrollbar-thumb:hover {\n background: rgba(32, 32, 32, 0.4);\n}\n\n.as-bscroller::-webkit-scrollbar-thumb:active {\n background: rgba(13, 13, 13, 0.6);\n}\n\n.as-bscroller.dark,\n.dark .as-bscroller,\n.as-dark .as-bscroller,\n.as-dark.as-bscroller\n{\n scrollbar-color: rgba(104, 104, 104, 0.4) rgba(150, 150, 150, 0.4);\n}\n\n\n.as-bscroller.dark::-webkit-scrollbar-track,\n.dark .as-bscroller::-webkit-scrollbar-track,\n.as-dark .as-bscroller::-webkit-scrollbar-track,\n.as-dark.as-bscroller::-webkit-scrollbar-track\n{\n background: rgba(150, 150, 150, 0.4);\n}\n\n.as-bscroller.dark::-webkit-scrollbar-thumb,\n.dark .as-bscroller::-webkit-scrollbar-thumb,\n.as-dark .as-bscroller::-webkit-scrollbar-thumb,\n.as-dark.as-bscroller::-webkit-scrollbar-thumb\n{\n background: rgba(104, 104, 104, 0.4);\n}\n\n.as-bscroller.dark::-webkit-scrollbar-thumb:hover,\n.dark .as-bscroller::-webkit-scrollbar-thumb:hover,\n.as-dark .as-bscroller::-webkit-scrollbar-thumb:hover,\n.as-dark.as-bscroller::-webkit-scrollbar-thumb:hover\n{\n background: rgba(223, 223, 223, 0.4);\n}\n\n.as-bscroller.dark::-webkit-scrollbar-thumb:active,\n.dark .as-bscroller::-webkit-scrollbar-thumb:active,\n.as-dark .as-bscroller::-webkit-scrollbar-thumb:active,\n.as-dark.as-bscroller::-webkit-scrollbar-thumb:active\n{\n background: rgba(242, 242, 242, 0.6);\n}", ""]); /***/ }), /* 99 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(100); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 100 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-button-array {\n font-size: 1rem;\n border: 1px solid #006ce5;\n display: inline-block;\n border-radius: 0.2em;\n overflow: hidden;\n}\n\n.as-button-array-item {\n text-align: center;\n font-size: inherit;\n height: 2em;\n border: none;\n box-sizing: border-box;\n padding-left: 0.35714em;\n padding-right: 0.35714em;\n outline: none;\n color: #006ce5;\n background-color: white;\n border-radius: 0;\n transition: background-color 0.1s, color 0.1s;\n margin: 0;\n}\n\n.as-button-array-item:not(:first-child) {\n border-left: 1px solid #006ce5;\n border-right: none;\n}\n\n\n.as-button-array-item.as-active {\n color: white;\n background-color: #006ce5;\n}", ""]); /***/ }), /* 101 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(102); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 102 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-calendar-input {\n font-size: 1rem;\n font-family: Arial, Helvetica, sans-serif;\n width: 7em;\n height: 2em;\n box-sizing: content-box;\n display: inline-block;\n vertical-align: middle;\n border: solid 1px #d6d6d6;\n border-radius: 0.2em;\n}\n\n.absol-calendar-input.as-border-none {\n border: none;\n}\n\n.absol-calendar-input.as-border-none > input {\n text-align: left;\n padding-left: 0;\n}\n\n.absol-calendar-input > input {\n text-align: center;\n width: 100%;\n height: 100%;\n outline: none;\n border: none;\n background: transparent;\n padding: 0;\n font: inherit;\n}\n\n.absol-calendar-input:not(.as-read-only) input {\n cursor: pointer;\n}\n\n.absol-calendar-input:not(.as-read-only) > input:hover,\n.absol-calendar-input:not(.as-read-only) > input:focus {\n color: red;\n}\n\n.absol-calendar-input.absol-disabled {\n pointer-events: none;\n background-color: var(--as-disabled-background-color);\n}\n\n.absol-calendar-input.absol-disabled input {\n color: var(--as-disabled-text-color);\n}\n", ""]); /***/ }), /* 103 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(104); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 104 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-chrome-calendar {\n display: inline-block;\n font-family: Helvetica, Arial, sans-serif;\n font-size: 1rem;\n padding: 0.6em;\n border: solid 1px rgb(191, 191, 191);\n box-shadow: 1px 1px 2px rgb(240, 240, 240);\n z-index: 100;\n touch-action: manipulation;\n user-select: none;\n background-color: rgb(255, 255, 255);\n white-space: initial;\n outline: none;\n}\n\n.absol-chrome-calendar * {\n font-size: inherit;\n}\n\n\n.absol-chrome-calendar-header {\n white-space: nowrap;\n position: relative;\n}\n\n\n.absol-chrome-calendar-title {\n display: inline-block;\n vertical-align: middle;\n}\n\n.absol-chrome-calendar-header-buttons {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n}\n\n.absol-chrome-calendar-header-buttons > button {\n font-size: 1em;\n width: 1.5em;\n height: 1.5em;\n padding: 0;\n border-radius: 0.2em;\n border: solid 1px rgb(167, 167, 167);\n background: linear-gradient(rgb(240, 240, 240), rgb(233, 233, 233), rgb(223, 223, 223));\n cursor: pointer;\n outline: none;\n box-shadow: 1px 1px 2px #aaa;\n color: rgb(110, 110, 110);\n}\n\n.absol-chrome-calendar-header-buttons > button:nth-child(2) {\n margin-left: 0.2em;\n margin-right: 0.2em;\n}\n\n\n.absol-chrome-calendar-header-buttons > button:active {\n box-shadow: 0px 0px 2px #aaa;\n\n}\n\n.absol-chrome-calendar:not(.view-era) .absol-chrome-calendar-title {\n cursor: pointer;\n}\n\n.absol-chrome-calendar[data-level=\"day\"] .absol-chrome-calendar-title::after {\n content: \"\\25BC\";\n}\n\n\n.absol-chrome-calendar-title > span {\n line-height: 1.5em;\n}\n\n.absol-chrome-calendar-instance {\n margin-top: 1em;\n border: solid 1px rgb(140, 140, 140);\n width: calc(14em + 2px);\n position: relative;\n height: calc(8.4em + 3px);\n overflow: hidden;\n box-sizing: border-box;\n /*border*/\n}\n\n.absol-chrome-calendar-dayofweek {\n background-color: rgb(241, 241, 241);\n height: 1.2em;\n white-space: nowrap;\n position: absolute;\n left: 0;\n right: 0;\n z-index: 10;\n}\n\n.absol-chrome-calendar[data-level=\"week\"] .absol-chrome-calendar-dayofweek::before {\n content: \"wk\";\n text-align: center;\n line-height: 1.2;\n display: inline-block;\n color: rgb(130, 130, 255);\n border-bottom: solid 1px rgb(191, 191, 191);\n border-right: solid 1px rgb(191, 191, 191);\n box-sizing: border-box;\n width: 12.5%;\n}\n\n.absol-chrome-calendar-dayofweek > div {\n text-align: center;\n line-height: 1.2;\n display: inline-block;\n width: calc(100% / 7);\n border-bottom: solid 1px rgb(191, 191, 191);\n box-sizing: border-box;\n}\n\n.absol-chrome-calendar[data-level=\"week\"] .absol-chrome-calendar-dayofweek > div {\n width: 12.5%;\n}\n\n.absol-chrome-calendar-month-animation-container {\n position: absolute;\n transition: top 0.2s;\n}\n\n.absol-chrome-calendar-month-animation-container.old {\n z-index: 7;\n /* background: red; */\n}\n\n.absol-chrome-calendar-month-animation-container.new {\n z-index: 8;\n /* background: blue; */\n}\n\n.absol-chrome-calendar-month-animation-container > .absol-chrome-calendar-month {\n width: 100%;\n height: 100%;\n margin-top: -1px;\n}\n\n\n.absol-chrome-calendar-month {\n width: 100%;\n margin-top: 1.2em;\n background-color: white;\n /*for header*/\n}\n\n.absol-chrome-calendar[data-view=\"month\"] .absol-chrome-calendar-month {\n display: table;\n}\n\n.absol-chrome-calendar[data-view=\"month\"] .absol-chrome-calendar-dayofweek {\n display: block;\n}\n\n\n.absol-chrome-calendar-week-in-month {\n display: table-row;\n height: 1.2em;\n}\n\n.absol-chrome-calendar[data-level=\"week\"] .absol-chrome-calendar-week-in-month::before {\n content: attr(data-week-idx-text);\n display: table-cell;\n text-align: right;\n padding-right: 0.4em;\n color: rgb(130, 130, 255);\n text-shadow: 1px 0 0 currentColor;\n border-right: solid 1px rgb(191, 191, 191);\n width: 12.5%;\n}\n\n\n.absol-chrome-calendar-week-in-month > div {\n display: table-cell;\n text-align: right;\n padding-right: 0.4em;\n cursor: pointer;\n}\n\n.absol-chrome-calendar-week-in-month > div:hover,\n.absol-chrome-calendar[data-level=\"week\"] .absol-chrome-calendar-week-in-month:hover {\n background-color: rgb(224, 245, 256);\n}\n\n.absol-chrome-calendar[data-level=\"day\"] .absol-chrome-calendar-not-in-month {\n color: rgb(140, 140, 140);\n}\n\n.absol-chrome-calendar-today {\n border: inset 1px rgb(191, 191, 191);\n box-sizing: border-box;\n}\n\n.absol-chrome-calendar-selected,\n.absol-chrome-calendar[data-level=\"week\"] .as-week-selected,\n.absol-chrome-calendar[data-level=\"quarter\"] .as-quarter-selected {\n background-color: rgb(188, 205, 236) !important;\n}\n\n.absol-chrome-calendar[data-level=\"week\"] .as-week-selected .absol-chrome-calendar-selected {\n background-color: transparent;\n}\n\n\n.absol-chrome-calendar-years {\n width: 100%;\n height: 100%;\n}\n\n\n.absol-chrome-calendar:not(.view-year) .absol-chrome-calendar-years {\n /* display: none; */\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n z-index: -10000;\n opacity: 0;\n visibility: hidden;\n}\n\n.absol-chrome-calendar.view-year .absol-chrome-calendar-instance {\n border-color: rgb(77, 114, 254)\n}\n\n.absol-chrome-calendar-month,\n.absol-chrome-calendar-dayofweek,\n.absol-chrome-calendar-era {\n display: none;\n}\n\n\n.absol-chrome-calendar:not(.view-month) .absol-chrome-calendar-title {\n color: rgb(191, 191, 191);\n}\n\n\n.absol-chrome-calendar-year {\n overflow: hidden;\n}\n\n\n.absol-chrome-calendar-year-head {\n background-color: rgb(241, 241, 241);\n border-bottom: solid 1px rgb(191, 191, 191);\n height: 1.5em;\n text-align: center;\n line-height: 1.5em;\n}\n\n\n.absol-chrome-calendar-year:last-child .absol-chrome-calendar-year-head {\n border-bottom: solid 1px rgb(191, 191, 191);\n}\n\n.absol-chrome-calendar-year.start-opening .absol-chrome-calendar-year-months,\n.absol-chrome-calendar-year.closing .absol-chrome-calendar-year-months {\n margin-bottom: -6em;\n transition: margin-bottom linear 0.1s;\n}\n\n.absol-chrome-calendar-year.opening .absol-chrome-calendar-year-months,\n.absol-chrome-calendar-year.start-closing .absol-chrome-calendar-year-months {\n margin-bottom: 0;\n transition: margin-bottom linear 0.1s;\n\n}\n\n.absol-chrome-calendar-year-months {\n width: 100%;\n display: table;\n height: 6em;\n border-bottom: solid 1px rgb(191, 191, 191);\n}\n\n.absol-chrome-calendar-year-row-months {\n display: table-row;\n}\n\n.absol-chrome-calendar-year-month {\n text-align: center;\n display: table-cell;\n vertical-align: middle;\n}\n\n.absol-chrome-calendar-year-month:hover,\n.absol-chrome-calendar-era-year:hover,\n.absol-chrome-calendar[data-level=\"quarter\"] .absol-chrome-calendar-year-months[data-hover-quarter=\"0\"] .absol-chrome-calendar-year-month[data-quarter=\"0\"],\n.absol-chrome-calendar[data-level=\"quarter\"] .absol-chrome-calendar-year-months[data-hover-quarter=\"1\"] .absol-chrome-calendar-year-month[data-quarter=\"1\"],\n.absol-chrome-calendar[data-level=\"quarter\"] .absol-chrome-calendar-year-months[data-hover-quarter=\"2\"] .absol-chrome-calendar-year-month[data-quarter=\"2\"],\n.absol-chrome-calendar[data-level=\"quarter\"] .absol-chrome-calendar-year-months[data-hover-quarter=\"3\"] .absol-chrome-calendar-year-month[data-quarter=\"3\"] {\n background-color: rgb(224, 245, 256);\n}\n\n\n.absol-chrome-calendar-years:hover .absol-scrollbar {\n opacity: 1;\n\n}\n\n.absol-chrome-calendar-years .absol-scrollbar {\n background-color: rgba(169, 169, 172, 0.2);\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.absol-chrome-calendar-date-disabled,\n.absol-chrome-calendar-era-year.absol-chrome-calendar-date-disabled {\n color: rgb(240, 230, 230);\n pointer-events: none;\n cursor: not-allowed;\n}\n\nbutton.absol-chrome-calendar-button-disabled,\n.absol-chrome-calendar button:disabled {\n color: rgb(220, 210, 210);\n pointer-events: none;\n box-shadow: none;\n cursor: not-allowed;\n}\n\n.absol-chrome-calendar-era {\n position: absolute;\n left: 0;\n top: 0;\n z-index: 1000000;\n /*width: 100%;*/\n /*height: 100%; */\n width: calc(14em + 17px);\n box-sizing: border-box;\n height: 100%;\n background-color: white;\n box-shadow: 0px 0px 1px 0 black;\n overflow-y: scroll;\n overflow-x: hidden;\n font-size: inherit;\n}\n\n.absol-chrome-calendar[data-level=\"year\"] .absol-chrome-calendar-era {\n display: block;\n}\n\n.absol-chrome-calendar-era-row {\n width: 14em;\n height: 25%;\n white-space: nowrap;\n font-size: inherit;\n}\n\n.absol-chrome-calendar-era-year {\n display: inline-block;\n vertical-align: top;\n height: 100%;\n width: 25%;\n text-align: center;\n line-height: 2.1em;\n font-size: inherit;\n color: rgb(140, 140, 140);\n}\n\n\n.absol-chrome-calendar-in-decade:not(.absol-chrome-calendar-date-disabled) {\n color: black;\n}\n\n/*.absol-chrome-calendar-era*/", ""]); /***/ }), /* 105 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(106); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 106 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-vscroller {\n position: relative;\n overflow-x: hidden;\n}\n\n\n.absol-vscroller.disabled > .absol-vscroller-viewport {\n overflow-y: visible;\n margin-right: 0px;\n min-width: 100%;\n}\n\n.absol-vscroller.disabled {\n overflow: visible;\n overflow-x: visible;\n\n}\n\n\n.absol-vscroller-viewport {\n overflow-y: scroll;\n box-sizing: content-box;\n\n}\n\n.absol-vscroller > .absol-vscroller-viewport {\n max-height: 100%;\n}\n\n.absol-vscroller.limited-height > .absol-vscroller-viewport {\n max-height: inherit;\n}\n\n\n/************ hscroller ***********/\n.absol-hscroller {\n position: relative;\n overflow-y: hidden;\n}\n\n.absol-hscroller.disabled {\n overflow: visible;\n overflow-y: visible;\n}\n\n.absol-hscroller-viewport {\n overflow-x: scroll;\n box-sizing: content-box;\n min-height: calc(100% + 17px);\n}\n\n.absol-hscroller.disabled > .absol-hscroller-viewport {\n overflow-x: visible;\n margin-bottom: 0px;\n}\n\n\n.absol-hscroller > .absol-hscroller-viewport {\n max-width: 100%;\n}\n\n\n/********** scroll bar *********************/\n.absol-scrollbar-force-modal {\n position: fixed;\n top: 5px;\n left: 5px;\n right: 5px;\n bottom: 5px;\n z-index: 1000000;\n}\n\n.absol-scrollbar-container {\n position: absolute;\n right: 0;\n bottom: 0;\n z-index: 10;\n}\n\n.absol-scrollbar-container.vertical {\n top: 0;\n width: 7px;\n}\n\n.absol-scrollbar-container.horizontal {\n height: 7px;\n left: 0;\n}\n\n.absol-scrollbar-container > .absol-scrollbar {\n width: 100%;\n height: 100%;\n}\n\n\n.absol-scrollbar-container.vertical > .absol-scrollbar > .absol-scrollbar-button {\n left: 1px;\n right: 1px;\n top: 0;\n}\n\n.absol-scrollbar-container.horizontal > .absol-scrollbar > .absol-scrollbar-button {\n top: 1px;\n bottom: 1px;\n left: 0;\n}\n\n.absol-scrollbar {\n position: relative;\n background-color: rgba(180, 180, 182, 0.1);\n overflow: hidden;\n}\n\n.absol-scrollbar-button {\n position: absolute;\n background-color: rgba(133, 133, 133, 0.5);\n border-radius: 2px;\n}\n\n.absol-scrollbar-button:hover, .absol-scrollbar-button:active {\n background-color: rgba(133, 133, 133, 1);;\n}\n\n\n.absol-scrollbar.absol-hidden {\n visibility: hidden;\n}\n\n.absol-vscrollbar .absol-scrollbar-button {\n width: 100%;\n}\n\n\n.absol-hscrollbar .absol-scrollbar-button {\n height: 100%;\n}\n\n.absol-table-scroller-vscrollbar-container .absol-vscrollbar:not(.as-overflow) {\n visibility: hidden;\n pointer-events: none;\n}\n\n.absol-table-scroller-left-vscroller-viewport:empty {\n display: none;\n}", ""]); /***/ }), /* 107 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(108); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 108 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ":root {\n --candy-border-color: #929292;\n --candy-hover-background-color: #eeeee9;\n --candy-disabled-background-color: #ebebe4;\n}\n\nlabel.as-checkbox-input {\n display: inline-block;\n position: relative;\n width: calc(1em + 2px);\n height: calc(1em + 2px);\n font-size: inherit;\n box-sizing: border-box;\n vertical-align: middle;\n border-radius: 0.25em;\n padding: 0;\n margin: 0; /*fix boostrap override*/\n}\n\n.as-checkbox-input:not(.as-read-only):not(.as-disabled){\n cursor: pointer;\n}\n\n\nlabel.as-checkbox-input:hover:not(.as-read-only) .bound,\n.absol-checkbox:hover:not(.as-read-only) .bound {\n fill: var(--candy-hover-background-color);\n}\n\n.as-checkbox-input .tick,\n.as-checkbox-input .minus {\n fill: #606060;\n}\n\n\n.as-checkbox-input input.as-checkbox-input-value {\n font-size: inherit;\n position: absolute;\n right: 100%;\n top: 0;\n opacity: 0.0;\n z-index: -100000000000;\n}\n\ninput.as-checkbox-input-value:not(:checked) ~ svg .tick {\n opacity: 0;\n}\n\n.as-checkbox-input.as-has-minus .minus {\n opacity: 1;\n}\n\n.as-checkbox-input .minus,\ninput.as-checkbox-input-value:checked ~ svg .minus {\n opacity: 0;\n}\n\n\nlabel.as-checkbox-input .bound {\n stroke: var(--candy-border-color);\n fill: white;\n}\n\nlabel.as-checkbox-input .tick {\n opacity: 1;\n transition: opacity 0.1s;\n}\n\nlabel.as-checkbox-input .minus {\n transition: opacity 0.1s;\n}\n\nlabel.as-checkbox-input.as-disabled > svg .bound,\nlabel.as-checkbox-input.as-disabled:hover > svg .bound {\n stroke: #929292;\n fill: #ebebe4;\n}\n\n\n.as-checkbox-input > svg {\n width: 100%;\n height: 100%;\n}\n\n.as-checkbox-input.as-read-only.as-border-none .bound{\n display: none;\n}", ""]); /***/ }), /* 109 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(110); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 110 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "/** align middle in table cell **/\n.KPIsimpletableclass td > .absol-checkbox:first-child:last-child,\n.KPIsimpletableclass td > .absol-checkbox.as-no-label:first-child:last-child .as-checkbox-input {\n display: block;\n margin: auto;\n}\n\n.cardsimpletableclass > table > tbody > tr > td > .absol-checkbox:first-child:last-child {\n display: block;\n}\n\n.absol-checkbox {\n display: inline-block;\n vertical-align: middle;\n line-height: 16px;\n}\n\n.absol-checkbox:not(.as-read-only):not(.as-disabled) {\n cursor: pointer;\n user-select: none;\n}\n\n.absol-checkbox.right > .absol-checkbox-label.as-right {\n display: none;\n}\n\n\n.absol-checkbox:not(.right) > .absol-checkbox-label.as-left {\n display: none;\n}\n\n.absol-checkbox-label {\n vertical-align: middle;\n display: inline-block;\n}\n\n\n.absol-checkbox-label.as-left {\n padding-right: 0.3em;\n}\n\n\n.absol-checkbox-label.as-right {\n padding-left: 0.3em;\n}\n\n.absol-checkbox.as-no-label {\n width: calc(1em + 2px);\n height: calc(1em + 2px);\n}\n\n\n.absol-checkbox.as-no-label .absol-checkbox-label {\n display: none;\n}\n\n.absol-checkbox.as-no-label .as-checkbox-input {\n display: block;\n}\n\n.absol-checkbox.as-disabled .absol-checkbox-label {\n color: var(--as-disabled-text-color);\n}\n\n\n.absol-checkbox.as-wrap-text {\n white-space: nowrap;\n}\n\n.absol-checkbox.as-wrap-text .absol-checkbox-label {\n white-space: normal;\n}\n\n.absol-checkbox.as-wrap-text > * {\n vertical-align: top;\n}\n\n.absol-checkbox.as-wrap-text .absol-checkbox-label {\n max-width: calc(100% - 24px);\n}\n\n.absol-checkbox.as-read-only .as-checkbox-input {\n pointer-events: none;\n}\n\n.absol-checkbox.as-read-only.as-border-none .bound {\n display: none;\n}", ""]); /***/ }), /* 111 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(112); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 112 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-circle-section-label {\n position: relative;\n -webkit-print-color-adjust: exact;\n /*friendly print*/\n}\n\n.as-circle-section-label-text {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n font-size: 1em;\n padding-right: 2.5em;\n color: white;\n font-weight: bold;\n z-index: 2;\n}\n\n\n.as-circle-section-label-index {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n text-align: center;\n color: rgb(30, 162, 245);\n font-weight: 900;\n z-index: 2;\n}\n\n\n@media print {\n .as-circle-section-label-text {\n color: white !important;\n }\n\n .as-circle-section-label-index {\n color: rgb(30, 162, 245) !important;\n }\n}\n\n\n.as-circle-section-label-background {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n z-index: 1;\n}\n\n.as-circle-section-label-background>svg {\n display: block;\n}\n\n.as-circle-section-label-index-box {\n stroke: rgb(129, 211, 246);\n fill: white;\n stroke-width: 2.5;\n}\n\n.as-circle-section-label-arrow {\n stroke: rgb(30, 162, 245);\n fill: none;\n stroke-linecap: round;\n}\n\n.as-circle-section-label-text-box {\n fill: rgb(30, 162, 245);\n stroke: none;\n}\n\n.as-circle-section-label-arrow-marker-path {\n fill: rgb(30, 162, 245);\n stroke: none;\n}", ""]); /***/ }), /* 113 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(114); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 114 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-context-menu-hook {\n position: absolute;\n z-index: -100000;\n width: 14px;\n height: 14px;\n top: 0;\n opacity: 0;\n resize: none;\n cursor: default;\n}\n\n.absol-context-hinge-fixed-container {\n position: fixed;\n left: 0;\n top: 0;\n z-index: 1000000001;\n}\n\n.absol-context-hinge {\n position: relative;\n width: 0;\n height: 0;\n}\n\n.absol-context-hinge > .absol-context-menu {\n position: absolute;\n top: -10000px;\n left: -10000px;\n visibility: hidden;\n z-index: 55;\n display: inline-block;\n}\n\n.absol-context-hinge .absol-vmenu,\n.absol-context-hinge .absol-hmenu {\n padding-top: 0.4em;\n padding-bottom: 0.4em;\n /* background-color: rgb(37, 37, 38);\n -webkit-box-shadow: 2px 2px 9px 0px rgba(7, 7, 7, 1);\n -moz-box-shadow: 2px 2px 9px 0px rgb(7, 7, 7, 1);\n box-shadow: 2px 2px 9px 0px rgba(7, 7, 7, 1); */\n color: black;\n background-color: rgb(252, 252, 255);\n -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n}\n\n.absol-context-menu-anchor.dark .absol-hmenu,\n.absol-context-menu-anchor.dark .absol-vmenu,\n.dark .absol-context-menu-anchor .absol-hmenu,\n.dark .absol-context-menu-anchor .absol-vmenu {\n background-color: rgb(37, 37, 38);\n}\n\n\n.absol-context-menu-anchor {\n position: fixed;\n z-index: -1000;\n left: 0;\n top: 0;\n display: block;\n opacity: 0;\n visibility: hidden;\n font-size: inherit;\n}\n\n.absol-context-menu-anchor > textarea {\n width: 160px;\n height: 160px;\n margin: 0;\n resize: none;\n border: none;\n opacity: 0;\n cursor: default;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n}\n\n.absol-context-menu-anchor.absol-active {\n z-index: 100000000 !important;\n opacity: 1;\n visibility: visible;\n}\n\n\n.absol-context-menu-anchor .absol-vmenu,\n.absol-context-menu-anchor .absol-hmenu {\n padding-top: 0.4em;\n padding-bottom: 0.4em;\n color: black;\n background-color: rgb(252, 252, 255);\n -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n}\n\n\n.as-system-context-menu {\n /** nothing here, to define use system context menu**/\n}\n\n.as-context-menu-ctn {\n font-size: var(--as-context-menu-font-size);\n font-family: var(--as-input-font-family);\n}\n\n.as-context-menu-ctn.as-anchor-modal,\n.absol-context-menu-anchor.as-anchor-modal{\n position: fixed;\n z-index: 8000000;\n left: 0 !important;\n right: 0 !important;;\n top: 0 !important;;\n bottom: 0 !important;;\n box-sizing: border-box;\n text-align: center;\n background-color: rgba(155, 155, 155, 0.3);\n}\n\n.as-context-menu-ctn.as-anchor-modal::before,\n.as-context-menu-ctn.as-anchor-modal > .absol-vmenu ,\n.absol-context-menu-anchor.as-anchor-modal::before,\n.absol-context-menu-anchor.as-anchor-modal > .absol-vmenu\n{\n display: inline-block;\n vertical-align: middle;\n white-space: nowrap;\n}\n\n.as-context-menu-ctn.as-anchor-modal > .absol-vmenu,\n.absol-context-menu-anchor.as-anchor-modal > .absol-vmenu\n{\n text-align: left;\n}\n\n\n.as-context-menu-ctn.as-anchor-modal::before,\n.absol-context-menu-anchor.as-anchor-modal::before{\n content: \"\";\n height: 100%;\n}\n\n.as-context-menu-ctn.as-anchor-modal > .absol-vmenu,\n.absol-context-menu-anchor.as-anchor-modal > .absol-vmenu {\n min-width: 70%;\n max-width: calc(100% - 10px);\n max-height: calc(100% - 10px);\n}\n\n.as-quick-menu {\n font-size: 1rem;\n}\n\n.as-quick-menu{\n --available-height: calc(100vh - 20px);\n max-height: var(--available-height);\n}\n\n.absol-context-menu-anchor.as-anchor-modal .as-quick-menu{\n max-height: calc(100vh - 20px);\n}", ""]); /***/ }), /* 115 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(116); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 116 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-ico {\n width: 1em;\n height: 1em;\n}\n\n.absol-button {\n white-space: normal;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.absol-dropdown {\n position: relative;\n}\n\n.absol-dropdown-content {\n z-index: 1;\n position: fixed;\n left: 0;\n top: 0;\n overflow: auto;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.absol-dropdown.top > .absol-dropdown-content {\n top: auto;\n bottom: 100%;\n}\n\n.absol-dropdown.overlap-left > .absol-dropdown-content {\n left: auto;\n right: 0;\n}\n\n.absol-dropright {\n position: relative;\n}\n\n.absol-dropright-content {\n z-index: 1;\n position: fixed;\n left: 0;\n top: 0;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n overflow: auto;\n}\n\n.absol-dropright.overlap-top > .absol-dropright-content {\n top: unset;\n bottom: 0;\n}\n\n.absol-drop-hidden > .absol-dropdown-content,\n.absol-drop-hidden > .absol-dropright-content {\n visibility: hidden;\n top: 0 !important;\n left: 0 !important;\n max-height: 99vh !important;\n opacity: 0;\n pointer-events: none;\n}\n\n.absol-drop-hidden > .absol-dropright-content *,\n.absol-drop-hidden > .absol-dropdown-content * {\n visibility: hidden;\n}\n\n.absol-hmenu {\n display: inline-block;\n background-color: rgb(252, 252, 255);\n /* background-color: rgb(33, 33, 33); */\n\n}\n\n.absol-hmenu > .absol-dropdown {\n display: inline-block;\n vertical-align: middle;\n}\n\n.absol-hmenu-button:hover,\n.absol-hmenu .absol-hmenu-button-hover {\n\n background-color: rgb(175, 175, 175);\n}\n\n.absol-hmenu-button {\n padding-left: 1em;\n padding-right: 1em;\n}\n\n.absol-hmenu-button:focus {\n outline: none;\n}\n\n.absol-hmenu-button,\n.absol-vmenu-button {\n color: rgb(55, 55, 55);\n height: 100%;\n background-color: transparent;\n font-size: 1em;\n border: none;\n padding: 0;\n margin: 0;\n outline: none;\n}\n\n.absol-hmenu-button {\n padding-left: 1em;\n padding-right: 1em;\n}\n\n.absol-vmenu {\n\n}\n\n.absol-hmenu .absol-dropdown-content,\n.absol-hmenu .absol-dropright-content,\n.as-v-root-menu .absol-dropright-content {\n padding-top: 0.4em;\n padding-bottom: 0.4em;\n background-color: rgb(252, 252, 255);\n -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n}\n\n.absol-vmenu-button {\n text-align: left;\n padding-left: 0.5em;\n padding-right: 2em;\n height: 1.8em;\n white-space: nowrap;\n position: relative;\n display: block;\n}\n\nimg.absol-vmenu-button-icon {\n opacity: 0;\n display: none;\n}\n\nimg.absol-vmenu-button-icon[src] {\n display: block;\n}\n\n.absol-vmenu-button-ext-icon-container {\n display: inline-block;\n width: 1.2em;\n height: 1.2em;\n vertical-align: middle;\n margin-right: 0.5em;\n}\n\n.absol-vmenu-button-ext-icon-container > span,\n.absol-vmenu-button-ext-icon-container > i {\n font-size: 1.2em;\n line-height: 1;\n display: block;\n}\n\n\n.absol-vmenu-button-ext-icon-container > svg,\n.absol-vmenu-button-ext-icon-container > img {\n height: 1.2em;\n width: 1.2em;\n display: block;\n}\n\n\n.absol-vmenu-button-text,\n.absol-vmenu-button-key {\n display: inline-block;\n vertical-align: middle;\n}\n\n.absol-vmenu-button-key {\n font-style: italic;\n text-align: right;\n margin-left: 1em;\n}\n\n.absol-vmenu-arrow-container {\n position: absolute;\n right: 0.2em;\n top: 0.3em;\n bottom: 0.3em;\n}\n\n\n.absol-vmenu-arrow-container::after {\n content: \"\";\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n}\n\n\n.absol-vmenu-arrow {\n display: inline-block;\n font-size: inherit;\n vertical-align: middle;\n}\n\n.absol-menu-item-disabled .absol-vmenu-arrow {\n display: none;\n}\n\n.absol-vmenu-button:hover,\n.absol-vmenu .absol-vmenu-button-hover {\n background-color: rgb(214, 214, 217);\n}\n\n.absol-menu-item-disabled .absol-vmenu-button:hover,\n.absol-menu-item-disabled .absol-vmenu .absol-vmenu-button-hover,\n.absol-menu-item-disabled .absol-hmenu-button:hover,\n.absol-menu-item-disabled .absol-hmenu .absol-hmenu-button-hover {\n background-color: transparent;\n}\n\n.absol-vmenu-line {\n text-align: center;\n padding: 0.2em 1em;\n}\n\n.absol-vmenu-line > div {\n height: 1px;\n background-color: rgb(97, 97, 97);\n}\n\n.absol-menu-item-disabled {\n}\n\n.absol-menu-item-hidden {\n display: none;\n}\n\n.absol-menu-item-disabled button {\n color: rgb(155, 155, 159);\n}\n\n.dark .absol-menu-item-disabled button {\n color: rgb(100, 100, 100);\n}\n\n.dark .absol-vmenu-button:hover,\n.dark .absol-vmenu .absol-vmenu-button-hover {\n background-color: rgb(9, 71, 113);\n}\n\n\n.dark .absol-hmenu .absol-dropdown-content,\n.dark .absol-hmenu .absol-dropright-content {\n background-color: rgb(37, 37, 38);\n}\n\n\n.dark .absol-hmenu-button,\n.dark .absol-vmenu-button {\n color: rgb(200, 200, 200);\n\n}\n\n\n.dark .absol-hmenu-button:hover,\n.dark .absol-hmenu .absol-hmenu-button-hover {\n background-color: rgb(80, 80, 80);\n}\n\n\n.dark .absol-hmenu {\n background-color: rgb(33, 33, 33);\n}\n\n/*standard-alone*/\n.absol-vmenu-button.standard-alone {\n height: 2em;\n border-radius: 0.3em;\n border: solid rgb(169, 169, 170) 1px;\n outline: none;\n}\n\n.as-v-root-menu {\n display: inline-block;\n box-sizing: border-box;\n /*overflow-y: auto;*/\n /*overflow-x: hidden;*/\n}", ""]); /***/ }), /* 117 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-date-input {\n font-family: Arial, Helvetica, sans-serif;\n font-size: 1rem;\n border: 1px solid #ddd;\n border-radius: 3px;\n height: calc(2em + 2px);\n width: 10.5em;\n box-sizing: border-box;\n display: inline-block;\n vertical-align: middle;\n position: relative;\n background-color: white;\n overflow: hidden;\n}\n\n.as-date-input-text {\n outline: none;\n width: calc(100% - 29px);\n height: 100%;\n border: none;\n background-color: transparent;\n display: block;\n padding: 0 0 0 var(--as-input-horizontal-padding);\n font: inherit;\n box-sizing: border-box;\n\n}\n\n.as-date-input-icon-ctn {\n font-size: inherit;\n border-left: 1px solid #ddd;\n border-right: none;\n border-top: none;\n border-bottom: none;\n text-align: center;\n position: absolute;\n right: 0;\n width: calc(2em + 1px);\n box-sizing: border-box;\n top: 0;\n height: 100%;\n background-color: rgba(169, 169, 169, 0.1);\n cursor: pointer;\n}\n\n\n.as-date-input-icon-ctn:hover {\n background-color: rgba(169, 169, 169, 0.25);\n}\n\n.as-date-input-icon-ctn:active {\n background-color: rgba(169, 169, 169, 0.5);\n}\n\n\n.as-date-input-icon-ctn > span {\n line-height: 28px;\n font-size: calc(16em / 14);\n}\n\n.as-date-input.as-read-only .as-date-input-icon-ctn {\n pointer-events: none;\n}\n\n.as-date-input.as-disabled {\n color: var(--as-disabled-text-color);\n pointer-events: none;\n}\n\n.as-date-input.as-disabled input {\n background-color: var(--as-disabled-background-color);\n}\n\n.as-date-input.as-value-null .as-date-input-clear-btn,\n.as-date-input.as-must-not-null .as-date-input-clear-btn {\n display: none;\n}\n\n.as-date-input-clear-btn {\n font-size: inherit;\n position: absolute;\n right: 2em;\n height: 2em;\n padding: 0 0.3em;\n top: calc(50% - 1em);\n box-sizing: border-box;\n background-color: transparent;\n border: none;\n color: #bbb;\n visibility: hidden;\n}\n\n.as-date-input.as-read-only .as-date-input-clear-btn {\n display: none;\n}\n\n.as-date-input-clear-btn:hover {\n color: rgb(132, 132, 132)\n}\n\n.as-date-input-clear-btn:active {\n color: #525555;\n}\n\n.as-date-input-text:focus + .as-date-input-clear-btn,\n.as-date-input:hover .as-date-input-clear-btn {\n visibility: visible;\n}\n\n.as-date-input.as-border-none {\n border: transparent;\n background-color: transparent;\n}\n\n.as-date-input.as-border-none .as-date-input-icon-ctn {\n display: none;\n}\n\n.as-date-input.as-border-none .as-date-input-text {\n width: 100%;\n padding-left: 0;\n}\n\n.as-date-n-level-input {\n white-space: nowrap;\n display: inline-block;\n vertical-align: middle;\n margin: 5px;\n position: relative;\n width: 13.5em;\n height: calc(2em + 2px);\n}\n\n.as-date-n-level-input .as-date-input {\n width: 100%;\n height: 100%;\n}\n\n.as-date-n-level-input-select-level {\n position: absolute;\n left: 1px;\n top: 1px;\n width: 2em;\n height: 2em;\n padding: 0;\n}\n\n\n.as-date-n-level-input.as-disabled .as-date-n-level-input-select-level {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.as-date-n-level-input.as-read-only .as-date-n-level-input-select-level {\n pointer-events: none;\n}\n\n\n.as-date-n-level-input .as-date-input-text {\n padding-left: calc(var(--as-input-horizontal-padding) + 2em);\n width: calc(100% - 2em - 1px);\n box-sizing: border-box;\n}\n\n\n.as-date-n-level-input.as-border-none.as-read-only .as-date-input {\n border: none;\n}\n\n\n.as-date-n-level-input.as-border-none.as-read-only .as-date-input-text {\n width: 100%;\n text-align: left;\n padding-left: 0;\n}\n.as-date-n-level-input.as-border-none.as-read-only button {\n display: none;\n}\n", ""]); /***/ }), /* 118 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(119); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 119 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-date-time-input {\n border: 1px solid #ddd;\n border-radius: 3px;\n height: calc(2em + 2px);\n width: calc(14em + 2px);\n box-sizing: border-box;\n display: inline-block;\n vertical-align: middle;\n position: relative;\n background-color: white;\n overflow: hidden;\n}\n\n.as-date-time-input.as-disabled {\n color: var(--as-disabled-text-color);\n pointer-events: none;\n}\n\n\n.as-date-time-input input {\n font-size: inherit;\n outline: none;\n width: calc(100% - 2em - 1px);\n height: 100%;\n border: none;\n display: block;\n padding: 0 0 0 var(--as-input-horizontal-padding);\n -webkit-user-select: auto;\n user-select: auto;\n -webkit-user-drag: none;\n color: inherit;\n box-sizing: border-box;\n}\n\n.as-date-time-input.as-disabled input {\n background-color: var(--as-disabled-background-color);\n}\n\n.as-date-time-input-icon-btn {\n border-right: none;\n border-top: none;\n border-bottom: none;\n border-left: 1px solid #ddd;\n position: absolute;\n right: 0;\n width: calc(2em + 1px);\n box-sizing: border-box;\n top: 0;\n bottom: 0;\n background-color: rgba(169, 169, 169, 0.1);\n cursor: pointer;\n border-radius: 0;\n color: inherit;\n font-size: inherit;\n}\n\n.as-date-time-input-icon-btn > span {\n font-size: calc(16em / 14);\n}\n\n\n.as-date-time-input-icon-btn:hover {\n background-color: rgba(169, 169, 169, 0.25);\n}\n\n.as-date-time-input-icon-btn:active {\n background-color: rgba(169, 169, 169, 0.5);\n}\n\n\n.as-date-time-input-icon-btn.as-disabled {\n color: rgb(102, 102, 102);\n pointer-events: none;\n}\n\n.as-date-time-input-follower {\n box-sizing: border-box;\n background-color: white;\n border: 1px solid #ddd;\n padding: 5px;\n}\n\n.as-date-time-input-date-picker {\n border: none;\n box-shadow: none;\n}\n\n.as-date-time-input-picker-header {\n text-align: right;\n padding-bottom: 5px;\n}\n\n\n.as-date-time-input-picker-btn {\n height: 20px;\n min-width: 25px;\n padding: 0 5px;\n box-sizing: border-box;\n font-size: inherit;\n border: 1px solid rgb(47, 82, 143);\n background-color: rgb(68, 144, 196);\n color: white;\n border-radius: 0;\n}\n\n.as-date-time-input-picker-btn:active {\n background-color: rgb(50, 122, 169);\n}\n\n\n.as-chrome-time-picker.as-date-time-input-time-picker {\n height: 11.8em;\n box-sizing: border-box;\n}\n\n.as-date-time-input-picker-ctn {\n white-space: nowrap;\n}\n\n.as-date-time-input-picker-ctn > div {\n display: inline-block;\n white-space: initial;\n vertical-align: top;\n}\n\n.as-date-time-input-follower > div {\n border-color: white;\n}\n\n.as-date-time-input:hover .as-time-input-clear-btn {\n visibility: visible;\n}\n\n.as-date-time-input.as-must-not-null .as-time-input-clear-btn,\n.as-date-time-input.as-read-only .as-time-input-clear-btn {\n display: none;\n}\n\n\n.as-date-time-input.as-read-only .as-date-time-input-icon-btn {\n pointer-events: none;\n}\n\n\n.as-date-time-input.as-border-none {\n border: none;\n}\n\n\n.as-date-time-input.as-border-none .as-date-time-input-icon-btn {\n display: none;\n}\n\n.as-date-time-input.as-border-none input {\n width: 100%;\n padding-left: 0;\n}", ""]); /***/ }), /* 120 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-chrome-time-picker {\n box-sizing: border-box;\n vertical-align: top;\n display: inline-block;\n font-family: Arial, Helvetica, sans-serif;\n font-size: 1rem;\n padding: 0.6em;\n border: solid 1px rgb(191, 191, 191);\n box-shadow: 1px 1px 2px rgb(240, 240, 240);\n z-index: 100;\n touch-action: manipulation;\n user-select: none;\n background-color: rgb(255, 255, 255);\n /*width: calc(160px + 1.2em);*/\n height: 12.38em;\n white-space: nowrap;\n}\n\n.as-chrome-time-picker.as-24h-clock .as-chrome-time-picker-scroller-h12,\n.as-chrome-time-picker:not(.as-24h-clock) .as-chrome-time-picker-scroller-h24,\n.as-chrome-time-picker.as-24h-clock .as-chrome-time-picker-period {\n display: none;\n}\n\n.as-chrome-time-picker-period {\n padding-top: 1.43em;\n padding-bottom: 1.43em;\n box-sizing: border-box;\n}\n\n\n.as-chrome-time-picker > div:not(:first-child) {\n margin-left: 5px;\n}\n\n\n.as-chrome-time-picker-scroller {\n position: relative;\n padding-top: 1.43em;\n padding-bottom: 1.43em;\n display: inline-block;\n vertical-align: top;\n height: 100%;\n box-sizing: border-box;\n}\n\n.as-chrome-time-picker-scroller-up,\n.as-chrome-time-picker-scroller-down {\n position: absolute;\n left: 0;\n width: 100%;\n height: 1.43em;\n padding: 0;\n box-sizing: border-box;\n background-color: transparent;\n border-radius: 3px;\n border: none;\n font-size: inherit;\n}\n\n\n.as-chrome-time-picker-scroller-up > span,\n.as-chrome-time-picker-scroller-down > span {\n font-size: 1.5em;\n}\n\n.as-chrome-time-picker-scroller-up:hover,\n.as-chrome-time-picker-scroller-down:hover {\n background-color: rgba(169, 169, 169, 0.2);\n}\n\n.as-chrome-time-picker-scroller-up {\n top: -5px;\n}\n\n.as-chrome-time-picker-scroller-down {\n bottom: -5px;\n}\n\n\n.as-chrome-time-picker-viewport {\n width: 3.6em;\n height: 100%;\n overflow: hidden;\n white-space: normal;\n display: inline-block;\n vertical-align: top;\n}\n\n\n.as-chrome-time-picker-list {\n height: 100%;\n overflow-y: scroll;\n width: calc(100% + 18px);\n}\n\n.as-chrome-time-picker-btn {\n font-size: inherit;\n height: 2em;\n width: 100%;\n padding: 0;\n border: none;\n background-color: transparent;\n}\n\n.as-chrome-time-picker-btn:hover {\n background-color: rgb(224, 245, 256);\n}\n\n.as-chrome-time-picker-btn.as-selected {\n background-color: rgb(188, 205, 236);\n border-radius: 3px;\n}\n\n.as-chrome-time-picker-btn > span {\n font-size: calc(16em / 14);\n}\n\n\n\n", ""]); /***/ }), /* 121 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(122); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 122 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-follower {\n position: fixed;\n z-index: 100;\n}\n\n.absol-follower-hidden{\n z-index: -1000 !important;\n opacity: 0;\n visibility: hidden;\n}", ""]); /***/ }), /* 123 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-draggable-stack {\n position: relative;\n}\n\n.absol-draggable-stack .drag-zone {\n touch-action: none;\n}\n\n.absol-draggable-stack > .as-dragging {\n opacity: 0.2 !important;\n}\n\n.absol-draggable-stack-child-container.as-dragging {\n opacity: 0.2 !important;\n}\n\n.absol-draggable-stack-clone-container {\n position: fixed;\n left: 0;\n top: 0;\n z-index: 100000;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n pointer-events: all;\n opacity: 0.5;\n background: white;\n}\n\n.absol-draggable-vstack > .absol-draggable-stack-clone-container {\n left: 0;\n right: 0;\n\n}\n\n.absol-draggable-stack-clone-container * {\n pointer-events: none !important;\n}\n\n.absol-draggable-stack-clone-container > * {\n width: 100% !important;\n height: 100% !important;\n box-sizing: border-box;\n}\n\n\n.absol-draggable-stack-clone-container.home-going {\n transition: top 0.2s;\n}\n\n.absol-draggable-stack-dest-line {\n position: absolute;\n z-index: 99;\n box-sizing: content-box;\n}\n\n.absol-draggable-vstack > .absol-draggable-stack-dest-line {\n transition: top 0.1s;\n left: 0;\n right: 0;\n border-top: solid 3px rgb(74, 174, 233);\n border-bottom: solid 3px rgb(74, 174, 233);\n}\n\n\n.absol-draggable-hstack {\n --dest-x: 0px;\n}\n\n.absol-draggable-hstack.as-has-dragging::after {\n content: \"\";\n position: absolute;\n transition: left 0.1s;\n top: 0;\n bottom: 0;\n left: calc(var(--dest-x) - 3px);\n border-left: solid 3px rgb(74, 174, 233);\n border-right: solid 3px rgb(74, 174, 233);\n}\n\n.absol-draggable-hstack.as-no-change::after {\n visibility: hidden;\n}\n\n\n.absol-draggable-hstack > * {\n display: inline-block;\n vertical-align: middle;\n}\n\n\n.absol-draggable-vstack {\n --dest-y: unset;\n}\n\n/**.as-state-drag*/\n.absol-draggable-vstack.as-state-drag::after {\n content: \"\";\n display: block;\n position: absolute;\n top: calc(var(--dest-y) - 3px);\n left: 0;\n right: 0;\n transition: top 0.1s;\n border-top: solid 3px rgb(74, 174, 233);\n border-bottom: solid 3px rgb(74, 174, 233);\n z-index: 999;\n}\n\n\n.absol-draggable-vstack.as-state-no-change::after {\n visibility: hidden;\n}", ""]); /***/ }), /* 124 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "\n.absol-drop-panel-head {\n height: 2.75em;\n line-height: 2.75em;\n -webkit-box-shadow: 0px 3px 4px -3px rgba(0, 0, 0, 0.75);\n -moz-box-shadow: 0px 3px 4px -3px rgba(0, 0, 0, 0.75);\n box-shadow: 0px 3px 4px -3px rgba(0, 0, 0, 0.75);\n background-color: rgba(240, 240, 242);\n color: black;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n}\n\n.absol-drop-panel-head .toggler-ico path {\n fill: rgb(104, 104, 104);\n}\n\n\n.dark .absol-drop-panel-head {\n background-color: rgba(54, 54, 56);\n color: rgb(204, 204, 204);\n}\n\n.absol-drop-panel.show .absol-drop-panel-body {\n height:auto;\n}\n\n.absol-drop-panel-body {\n transition: height 0.2s;\n height: 0;\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n\n.absol-drop-panel.show>.absol-drop-panel-head .toggle-close{\n display: none;\n}\n\n.absol-drop-panel:not(.show)>.absol-drop-panel-head .toggle-open{\n display: none;\n}\n\n", ""]); /***/ }), /* 125 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(126); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 126 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-exp-node {\n height: 2em;\n text-align: left;\n background-color: transparent;\n border: none;\n outline: none;\n white-space: nowrap;\n font-size: inherit;\n overflow: hidden;\n text-overflow: ellipsis;\n position: relative;\n color: rgb(33, 33, 34);\n}\n\n.absol-exp-node .toggler-ico {\n width: 0.7em;\n height: 0.7em;\n margin-right: 0.35em;\n}\n\n.absol-exp-node .toggler-ico path {\n fill: rgb(104, 104, 104);\n}\n\n.absol-exp-node.status-removable .toggler-ico,\n.absol-exp-node.status-modified .toggler-ico {\n display: none;\n}\n\n.absol-exp-node:not(.status-open) .toggle-open {\n display: none;\n}\n\n.absol-exp-node:not(.status-close) .toggle-close {\n display: none;\n}\n\n\n\n.absol-exp-node:hover .remove-ico {\n visibility: visible;\n}\n\n\n\n.absol-exp-node.status-removable .remove-ico,\n.absol-exp-node.status-modified .remove-ico {\n display: inline-block;\n}\n\n.absol-exp-node.status-removable .remove-ico .modified {\n visibility: hidden;\n}\n\n.absol-exp-node.status-modified .remove-ico .close {\n visibility: hidden;\n}\n\n.absol-exp-node.status-modified .remove-ico:hover .close {\n visibility: visible;\n}\n\n.absol-exp-node.status-modified .remove-ico:hover .modified {\n visibility: hidden;\n}\n\n\n.absol-exp-node .remove-ico {\n width: 0.9em;\n height: 0.9em;\n display: none;\n visibility: hidden;\n margin-left: -0.3em;\n margin-right: 0.45em;\n}\n\n.absol-exp-node .remove-ico .close,\n.absol-exp-node .remove-ico .modified {\n fill: rgb(169, 169, 169);\n stroke: none;\n}\n\n\n.absol-exp-node.has-status {\n padding-right: 2.5em;\n}\n\n.absol-exp-node>div,\n.absol-exp-node>svg {\n display: inline-block;\n vertical-align: middle;\n}\n\n\n.absol-exp-node .editing input {\n color: khaki;\n padding-top: 2px;\n padding-bottom: 2px;\n}\n\n.absol-exp-node:hover {\n background-color: var(--as-transparent-button-hover-color);\n}\n\n.absol-exp-node:focus,\n.absol-exp-node.as-active:focus {\n background-color: var(--as-transparent-button-focus-color);\n}\n\n.absol-exp-node.as-active {\n background-color: var(--as-transparent-button-active-color);\n}\n\n\n\n.absol-exp-node-name {\n /* -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none; */\n user-select: none;\n vertical-align: middle;\n color: black;\n margin-left: 0.5em;\n}\n\n.absol-exp-node-desc {\n color: rgb(104, 104, 104);\n margin-left: 0.5em;\n font-size: 0.85em;\n\tvertical-align: middle;\n}\n\n.absol-exp-node-desc:empty {\n margin-left: 0;\n}\n\n\n.absol-exp-node-expand-icon {\n display: inline-block;\n vertical-align: middle;\n margin-right: 0.2em;\n height: 0.5em;\n width: 0.5em;\n}\n\nimg.absol-exp-node-ext-icon {\n display: none;\n}\n\n.absol-exp-node-ext-icon,\n.absol-exp-node-ext-icon>img {\n display: inline-block;\n vertical-align: middle;\n width: 1.5em;\n height: 1.5em;\n}\n\ndiv.absol-exp-node-ext-icon:empty {\n display: none;\n}\n\ndiv.absol-exp-node-ext-icon {\n text-align: center;\n}\n\n.absol-exp-node-ext-icon>.mdi,\n.absol-exp-node-ext-icon>span .absol-exp-node-ext-icon>svg {\n line-height: 1em;\n font-size: 1.5em;\n}\n\nimg.absol-exp-node-ext-icon[src] {\n display: inline-block;\n}\n\n\n.absol-exp-tree>.absol-exp-node {\n width: 100%;\n display: block;\n}\n\n.absol-exp-tree.hide-children>.absol-exp-items {\n display: none;\n}\n\n\n.dark .toggler-ico path {\n fill: rgb(169, 169, 169);\n}\n\n\n.dark .absol-exp-node-name {\n color: rgb(204, 204, 204);\n}\n\n.dark .absol-exp-node-desc {\n color: rgb(169, 169, 170);\n}\n\n.dark .absol-exp-node {\n color: rgb(169, 169, 170);\n}", ""]); /***/ }), /* 127 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(128); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 128 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "\n.absol-editabe-text {\n display: inline;\n}\n\n.absol-editabe-text span {\n font-style: inherit;\n font-size: inherit;\n white-space: pre;\n}\n\n.absol-editabe-text-higne {\n display: inline-block;\n position: relative;\n width: 0px;\n height: 0ox;\n}\n\n.absol-editabe-text-higne input {\n position: absolute;\n display: none;\n border: none;\n top: -2;\n left: -2;\n padding-top: 0px;\n padding-left: 2px;\n padding-bottom: 4px;\n margin: 0;\n background: transparent;\n outline: none;\n font-style: inherit;\n font-size: inherit;\n}\n\n.absol-editabe-text.editing .absol-editabe-text-higne input {\n display: block;\n}\n\n.absol-editabe-text.editing span {\n visibility: hidden;\n}\n\n.absol-editabe-text.editing {\n -webkit-box-shadow: 0px 0px 2px 0px rgba(33, 77, 255, 1);\n -moz-box-shadow: 0px 0px 2px 0px rgba(33, 77, 255, 1);\n box-shadow: 0px 0px 2px 0px rgba(33, 77, 255, 1);\n border-radius: 0.17em;\n}\n", ""]); /***/ }), /* 129 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(130); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 130 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-emoji-picker {\n font-size: calc(12em / 14);\n border: 1px solid #dddddd;\n box-sizing: border-box;\n font-family: Arial, Helvetica, sans-serif;\n}\n\n.as-emoji-picker-preview {\n display: inline-block;\n vertical-align: top;\n width: 5.7em;\n height: calc(8em + 30px);\n border-right: 1px solid #dddddd;\n text-align: center;\n\n}\n\n\n.as-emoji-picker-preview-anim {\n width: 60px;\n height: 60px;\n margin-top: 5px;\n}\n\n.as-emoji-picker-preview-desc {\n font-size: 12px;\n font-weight: bold;\n color: black;\n}\n\n.as-emoji-picker-preview-shortcut {\n font-size: 12px;\n color: rgb(70, 70, 70);\n}\n\n\n.as-emoji-picker-list {\n display: inline-block;\n vertical-align: top;\n overflow-y: auto;\n width: calc(100% - 5.7em - 1px);\n height: calc(8em + 30px);\n padding: 5px;\n box-sizing: border-box;\n}\n\n\n.as-emoji-picker-item {\n display: inline-block;\n padding: 5px;\n width: 2em;\n height: 2em;\n box-sizing: border-box;\n border-radius: 0.4em;\n}\n\n.as-emoji-picker-item:hover {\n background-color: rgba(169, 169, 170, 0.3);\n}\n\n.as-emoji-picker-item:active {\n background-color: rgba(169, 169, 170, 0.7);\n}", ""]); /***/ }), /* 131 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(132); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 132 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-flexicon-input-icon-ctn > span,\n.as-flexicon-input-icon-ctn > i,\n.as-flexicon-input-icon-ctn > svg,\n.as-flexicon-input-icon-ctn > img {\n font-size: 1em;\n line-height: 1;\n}\n\n.as-flexicon-input {\n position: relative;\n border: 1px solid #dddddd;\n display: inline-block;\n vertical-align: middle;\n height: 2em;\n font-size: 1rem;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n box-sizing: border-box;\n border-radius: 3px;\n text-align: left;\n white-space: nowrap;\n}\n\n.as-flexicon-input.as-border-none {\n border: none;\n}\n\n.as-flexicon-input.as-disabled {\n background-color: var(--as-disabled-background-color);\n}\n\n.as-flexicon-input::before {\n content: \"\";\n width: 0;\n height: 100%;\n display: inline-block;\n vertical-align: middle;\n}\n\n\n.as-flexicon-input-icon-ctn:empty {\n display: none;\n}\n\n\n.as-flexicon-input:not(.as-flexicon-input-has-icon) input {\n padding-left: 0.3em;\n}\n\n.as-flexicon-input-icon-ctn {\n display: inline-block;\n vertical-align: middle;\n /*text-align: center;*/\n font-size: 1.2em;\n width: 1.25em;\n text-align: center;\n}\n\n.as-flexicon-input-unit-ctn {\n width: 1.5em;\n display: inline-block;\n vertical-align: middle;\n text-align: center;\n}\n\n.as-flexicon-input-unit-ctn:empty {\n display: none;\n}\n\n\n.as-flexicon-input input {\n border: none;\n font-size: inherit;\n font-family: inherit;\n outline: none;\n height: 100%;\n background-color: transparent;\n box-sizing: border-box;\n width: 100%;\n padding-left: 0;\n padding-right: 0;\n display: inline-block;\n vertical-align: middle;\n}\n\n\n.as-flexicon-input.as-flexicon-input-has-icon input,\n.as-flexicon-input.as-flexicon-input-has-unit input {\n width: calc(100% - 1.5em);\n}\n\n.as-flexicon-input.as-flexicon-input-has-unit input {\n text-align: right;\n}\n\n\n.as-flexicon-input.as-flexicon-input-has-icon.as-flexicon-input-has-unit input {\n width: calc(100% - 3em);\n}", ""]); /***/ }), /* 133 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(134); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 134 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-frame{\n \n}", ""]); /***/ }), /* 135 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(136); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 136 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-frame-view {\n position: relative;\n}\n\n\n.absol-frame-view-frame-container {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: white;\n}\n\n\n.absol-frame-view-frame-container:not(.absol-active) {\n z-index: -100;\n visibility: hidden;\n opacity: 0;\n}\n\n.absol-frame-view-frame-container:not(.absol-active) *,\n.absol-frame-view-frame-container:not(.absol-active) {\n pointer-events: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n}\n\n\n.absol-frame-view-frame-container > div {\n width: 100%;\n height: 100%;\n display: block;/* avoid overflow if this div is inline-block*/\n}", ""]); /***/ }), /* 137 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-tabbar {\n height: 2em;\n white-space: nowrap;\n}\n\n\n.absol-tabbar .absol-hscroller-viewport {\n overflow-y: hidden;\n}\n\n.absol-tabbar .absol-tabbar-button,\n.absol-tabbar .as-tab-bar-add-btn {\n height: 100%;\n}\n\n/* .absol-tabbar .absol-scrollbar-container {\n height: 5px;\n} */\n\n.absol-tabbar .absol-scrollbar-container.horizontal {\n bottom: -2px;\n}\n\n.absol-tabbar .absol-scrollbar-container {\n opacity: 0;\n transition: opacity 0.2s;\n background: rgba(169, 169, 169, 0.1);\n}\n\n.absol-tabbar:hover .absol-scrollbar-container,\n.absol-tabbar:active .absol-scrollbar-container {\n opacity: 1;\n}\n\n.absol-tabbar .absol-scrollbar-button {\n background-color: rgba(33, 33, 40, 0.1);\n}\n\n.absol-tabbar .absol-scrollbar-button:hover {\n background-color: rgba(33, 33, 40, 0.3);\n}\n\n\n.absol-tabbar .absol-scrollbar-button:active,\n.absol-tabbar .absol-hscrollbar.absol-active .absol-scrollbar-button {\n background-color: rgba(47, 47, 55, 0.4);\n\n}\n\n\n.absol-tabbar-button {\n padding-left: 1em;\n padding-right: 1em;\n background-color: rgb(45, 45, 45);\n color: rgb(200, 200, 200);\n margin-right: 1px;\n border: none;\n outline: none;\n font-size: 1em;\n white-space: nowrap;\n}\n\n.as-tab-bar-add-btn {\n padding-left: 0.5em;\n padding-right: 0.5em;\n background-color: rgb(45, 45, 45);\n color: rgb(200, 200, 200);\n margin-right: 1px;\n border: none;\n outline: none;\n font-size: 1em;\n white-space: nowrap;\n}\n\n\n.as-tab-bar-button-ext-icon-ctn:empty {\n display: none\n}\n\n.as-tab-bar-button-ext-icon-ctn {\n display: inline-block;\n vertical-align: middle;\n padding-right: 0.35em;\n margin-left: -0.5em;\n}\n\n.absol-tabbar-button-text {\n display: inline-block;\n vertical-align: middle;\n max-width: 300px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.as-tab-bar-button-ext-icon-ctn span {\n font-size: 1.2em;\n}\n\n\n.absol-tabbar .absol-tabbar-button-active {\n background-color: rgb(30, 30, 30);\n color: rgb(250, 250, 252);\n}\n\n.absol-tabbar-button-text,\n.absol-tabbar-button-icon-container > span {\n display: inline-block;\n vertical-align: middle;\n font-size: 1em;\n}\n\n.absol-tabbar-button .absol-tabbar-button-close,\n.absol-tabbar-button .absol-tabbar-button-close-circle {\n visibility: hidden;\n color: rgb(190, 190, 190);\n}\n\n.absol-tabbar-button.as-prevent-closing .absol-tabbar-button-close,\n.absol-tabbar-button.as-prevent-closing .absol-tabbar-button-close-circle {\n visibility: hidden;\n}\n\n.absol-tabbar-button.as-prevent-closing .absol-tabbar-button-icon-container {\n pointer-events: none;\n}\n\n.absol-tabbar-button-icon-container {\n display: inline-block;\n vertical-align: middle;\n margin-left: 0.5em;\n}\n\n\n.absol-tabbar-button:not(.as-prevent-closing):hover .absol-tabbar-button-close,\n.absol-tabbar-button-active:not(.as-prevent-closing) .absol-tabbar-button-close,\n.absol-tabbar-button:hover:not(.as-prevent-closing) .absol-tabbar-button-close-circle,\n.absol-tabbar-button-active:not(.as-prevent-closing) .absol-tabbar-button-close-circle {\n visibility: visible;\n color: red;\n}\n\n.absol-tabbar-button-active .absol-tabbar-button-modified-flag {\n color: lightblue;\n}\n\n.absol-tabbar-button-modified-flag {\n color: mediumaquamarine;\n}\n\n.absol-tabbar-button:not(.absol-tabbar-button-modified) .absol-tabbar-button-modified-flag,\n.absol-tabbar-button.absol-tabbar-button-modified:not(.active) .absol-tabbar-button-icon-container:hover .absol-tabbar-button-modified-flag,\n.absol-tabbar-button.absol-tabbar-button-modified .absol-tabbar-button-icon-container:not(:hover) .absol-tabbar-button-close,\n.absol-tabbar-button:not(.absol-tabbar-button-modified) .absol-tabbar-button-icon-container:not(:hover) .absol-tabbar-button-close-circle,\n.absol-tabbar-button:not(.absol-tabbar-button-modified) .absol-tabbar-button-icon-container:hover .absol-tabbar-button-close,\n.absol-tabbar-button.absol-tabbar-button-modified .absol-tabbar-button-close-circle,\n.absol-tabbar-button.absol-tabbar-button-modified .absol-tabbar-button-icon-container:not(:hover) .absol-tabbar-button-close {\n display: none;\n}\n\n\n.absol-button-range {\n}\n\n\n.absol-tabview {\n position: relative;\n}\n\n\n.absol-tabview-container {\n position: absolute;\n top: 2em;\n left: 0;\n right: 0;\n bottom: 0;\n overflow: auto;\n background-color: white;\n}\n\n\n.absol-tabview-container.absol-tabview-container-hidden {\n z-index: -9999;\n visibility: hidden;\n opacity: 0;\n\n}\n\n.absol-tabview-container.absol-tabview-container-hidden *,\n.absol-tabview-container.absol-tabview-container-hidden {\n pointer-events: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n}\n\n\n.absol-tabview-container > div,\n.absol-tabview-container > pre {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n}\n\n.absol-tabview-container > pre {\n margin: 0;\n}\n\n.absol-frame > iframe {\n border: none;\n box-sizing: border-box;\n}\n\n.absol-tabview .absol-tabbar-button {\n border-radius: 0.7em 0.7em 0 0;\n height: 2em;\n box-sizing: border-box;\n border: solid 1px #ccc;\n background-color: white;\n color: black;\n padding-left: 1em;\n padding-right: 0.357em;\n margin-right: 0.357em;\n}\n\n.absol-tabview .as-tab-bar-add-btn {\n border-radius: 0.7em 0.7em 0 0;\n height: 2em;\n box-sizing: border-box;\n border: solid 1px #ccc;\n background-color: white;\n color: black;\n}\n\n.absol-tabview .absol-tabbar {\n height: 2em;\n overflow-y: hidden;\n border-bottom: 1px solid #ccc;\n box-sizing: border-box;\n position: absolute;\n left: 0;\n right: 0;\n}\n\n.absol-tabview .absol-tabbar-button-active {\n background-color: #5bc0de;\n border-color: #46b8da;\n color: white;\n}\n\n/* .absol-tabview .absol-tabbar-button-close {\n color: rgb(170, 170, 170);\n line-height: 1.5em;\n margin-left: 1em;\n font-size: 1.3em;\n} */\n\n.absol-tabview .absol-tabbar-button-close:hover {\n color: red;\n}\n\n\n/************** Mini version - like window form ***********************/\n\n.absol-tabview.xp-tiny .absol-tabbar {\n height: 1.5em;\n border-bottom: none;\n}\n\n.absol-tabview.xp-tiny .absol-tabbar-button,\n.absol-tabview.xp-tiny .as-tab-bar-add-btn {\n height: 1.4em;\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 0;\n vertical-align: bottom;\n margin: 0.1em 0 0 0;\n background-color: rgb(242, 242, 242);\n color: black;\n position: relative;\n}\n\n.absol-tabview.xp-tiny::before {\n content: \"\";\n position: absolute;\n top: calc(1.5em - 4px);\n z-index: 0;\n left: 0;\n right: 0;\n height: 4px;\n border-bottom: solid 1px #ccc;\n box-sizing: border-box;\n}\n\n.absol-tabview.xp-tiny .absol-tabbar-button.absol-tabbar-button-active {\n height: 1.5em;\n margin-top: 0;\n background-color: white;\n border-top-color: #ccc;\n border-left-color: #ccc;\n border-right-color: #ccc;\n border-bottom-color: white;\n}\n\n\n.absol-hscroller.absol-tabbar.disabled .absol-scrollbar-container {\n visibility: hidden;\n}\n\n.absol-tabview.absol-tabview.xp-tiny .absol-tabbar-button-close {\n line-height: 1.4em;\n}\n\n.absol-tabview.xp-tiny .absol-tabbar-button-icon-container {\n display: none;\n}\n\n.absol-tabview.xp-tiny .absol-tabview-container {\n top: 1.5em;\n}\n\n.absol-tabview.xp-tiny .absol-tab-absol {\n border-left: solid 1px #ccc;\n border-right: solid 1px #ccc;\n border-bottom: solid 1px #ccc;\n box-sizing: border-box;\n}\n\n\n.absol-tabview.as-without-close-button > .absol-tabbar .absol-tabbar-button .absol-tabbar-button-icon-container {\n display: none;\n}\n\n.absol-tabview.as-without-close-button > .absol-tabbar .absol-tabbar-button {\n padding-right: 1em;\n}\n\n.absol-tabview > .absol-tabbar .as-tab-bar-add-btn {\n display: none;\n}\n\n.absol-tabview.as-has-add-btn > .absol-tabbar .as-tab-bar-add-btn {\n display: inline-block;\n}\n\n\n/************************ Like Metro theme *********************/\n\n.absol-tabview.metro-flat > .absol-tabbar .absol-tabbar-button,\n.absol-tabview.metro-flat > .absol-tabbar .as-tab-bar-add-btn {\n border-radius: 0;\n margin-right: 0;\n margin-left: 0;\n border-left: none;\n border-top: none;\n border-bottom: none;\n border-right: solid 1px rgba(169, 169, 169, 0.3);\n font-size: 1em;\n}\n\n.absol-tabview.metro-flat > .absol-tabbar {\n box-shadow: 0px -1px 0px 0px #ccc;\n}\n\n/************************ Round Out theme *********************/\n\n/*.absol-tabview.rond-out > .absol-tabbar .absol-tabbar-button*/\n\n.absol-tabview.cad-dark > .absol-tabbar {\n border-bottom: calc(0.1em + 1px) solid #3B4453;;\n}\n\n.absol-tabview.cad-dark > .absol-tabview-container {\n top: 2.1em;\n}\n\n.absol-tabview.cad-dark > .absol-tabbar {\n height: 2.1em;\n box-sizing: border-box;\n}\n\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active {\n background-color: #3B4453;\n color: white;\n}\n\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button {\n background-color: #313946;\n color: rgb(169, 169, 170);\n\n}\n\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button::before,\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n width: 1em;\n height: 1em;\n z-index: 1;\n background-size: cover;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMTYiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDguNDY2NjY2NCA0LjIzMzMzMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIj4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMTMzOTAzNjQgMCAwIC4yNzU0NTg5MSAtLjAzMjY2NDYxIC0uMDgwNjM0OTIpIiBkPSJNIDMxLjg1ODcxNiwwLjI5MjcyOTQxIFYgMTUuNjYxMDIzIEggMC4yNDM5NDExNyBDIDE1LjI0NzAyOCwxNS43NzU5MjkgMzEuMzU0NDkzLDExLjExODk1NiAzMS44NTg3MTYsMC4yOTI3Mjk0MSBaIiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZTtmaWxsOiMzMTM5NDYiLz4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgtLjEzMzkwMzY0IDAgMCAuMjc1NDU4OTEgOC40OTkzMzE1IC0uMDgwNjM0OTIpIiBkPSJNIDMxLjg1ODcxNiwwLjI5MjcyOTQxIFYgMTUuNjYxMDIzIEggMC4yNDM5NDExNyBDIDE1LjI0NzAyOCwxNS43NzU5MjkgMzEuMzU0NDkzLDExLjExODk1NiAzMS44NTg3MTYsMC4yOTI3Mjk0MSBaIiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZTtmaWxsOiMzMTM5NDYiLz4KIDwvZz4KPC9zdmc+Cg==');\n}\n\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active::before,\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active::after,\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active {\n z-index: 3;\n}\n\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active::before,\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active::after {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMTYiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDguNDY2NjY2NCA0LjIzMzMzMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIj4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMTMzOTAzNjQgMCAwIC4yNzU0NTg5MSAtLjAzMjY2NDYxIC0uMDgwNjM0OTIpIiBkPSJNIDMxLjg1ODcxNiwwLjI5MjcyOTQxIFYgMTUuNjYxMDIzIEggMC4yNDM5NDExNyBDIDE1LjI0NzAyOCwxNS43NzU5MjkgMzEuMzU0NDkzLDExLjExODk1NiAzMS44NTg3MTYsMC4yOTI3Mjk0MSBaIiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZTtmaWxsOiMzQjQ0NTMiLz4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgtLjEzMzkwMzY0IDAgMCAuMjc1NDU4OTEgOC40OTkzMzE1IC0uMDgwNjM0OTIpIiBkPSJNIDMxLjg1ODcxNiwwLjI5MjcyOTQxIFYgMTUuNjYxMDIzIEggMC4yNDM5NDExNyBDIDE1LjI0NzAyOCwxNS43NzU5MjkgMzEuMzU0NDkzLDExLjExODk1NiAzMS44NTg3MTYsMC4yOTI3Mjk0MSBaIiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZTtmaWxsOiMzQjQ0NTMiLz4KIDwvZz4KPC9zdmc+Cg==');\n}\n\n\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button {\n position: relative;\n margin-right: 0;\n border: none;\n border-radius: 0.8em 0.8em 0 0;\n}\n\n.absol-tabview.cad-dark > .absol-tabbar .absol-hscroller-viewport {\n padding-left: 1.2em;\n}\n\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button::before {\n left: -0.98em;\n background-position: left;\n}\n\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button::after {\n right: -0.98em;\n background-position: right;\n\n}\n\n.absol-tabview.cad-dark > .absol-tabbar .as-tab-bar-add-btn {\n background-color: #313946;\n color: rgb(169, 169, 170);\n font-weight: bold;\n border: 4px solid #222933;\n border-radius: 0.8em 0.8em 0 0.8em;\n}\n\n.absol-tabview.cad-dark > .absol-tabbar .as-tab-bar-add-btn:active {\n color: white;\n background-color: #3B4453;\n font-weight: bold;\n}", ""]); /***/ }), /* 138 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(139); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 139 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-single-page {\n position: relative;\n}\n\n\n.absol-single-page-header {\n box-sizing: border-box;\n z-index: 2;\n display: block;\n}\n\n.absol-single-page-footer {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n box-sizing: border-box;\n}\n\n\n.absol-single-page-scroller-viewport {\n min-height: 100%;\n display: block;\n position: relative;\n box-sizing: border-box;\n}\n\n.absol-single-page-scroller {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n overflow-y: auto;\n}\n\n.absol-single-page.as-viewport-full > .absol-single-page-scroller > .absol-single-page-scroller-viewport {\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.absol-single-page.as-no-scroll > .absol-single-page-scroller {\n overflow: hidden;\n}", ""]); /***/ }), /* 140 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(141); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 141 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-hexa-section-label {\n position: relative;\n -webkit-print-color-adjust: exact;\n /*friendly print*/\n}\n\n.as-hexa-section-label-text {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n font-size: 1em;\n padding-right: 2.5em;\n color: white;\n font-weight: bold;\n z-index: 2;\n}\n\n@media print {\n .as-hexa-section-label-text {\n color: white !important;\n }\n\n .as-hexa-section-label-index {\n color: rgb(237, 147, 54) !important;\n }\n}\n\n\n.as-hexa-section-label-index {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n text-align: center;\n color: rgb(237, 147, 54);\n font-weight: 900;\n z-index: 2;\n}\n\n.as-hexa-section-label-background {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n z-index: 1;\n}\n\n.as-hexa-section-label-background>svg {\n display: block;\n}\n\n.as-hexa-section-label-index-box {\n stroke: rgb(251, 186, 130);\n fill: white;\n stroke-width: 2.5;\n}\n\n.as-hexa-section-label-text-box {\n fill: rgb(237, 147, 54);\n stroke: none;\n}", ""]); /***/ }), /* 142 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(143); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 143 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "/*margin for border size*/\n.as-vruler {\n position: relative;\n width: 1.5em;\n border: solid 1px black;\n overflow: hidden;\n font-family: courier, \"courier new\", monospace;\n box-sizing: border-box;\n}\n\n\n.as-vruler-line {\n position: absolute;\n right: 0;\n width: 25%;\n border-top: solid 1px rgb(17, 48, 43);\n box-sizing: border-box;\n\n}\n\n.as-vruler-line.major {\n width: 50%;\n border-top: solid 1px rgb(5, 20, 18);\n}\n\n.as-vruler-major-number {\n position: absolute;\n text-align: center;\n width: 5em;\n pointer-events: none;\n font-size: 0.7em;\n right: calc(52% - 2em);\n height: 1em;\n transform-origin: center;\n \n -webkit-transform:rotate(90deg);\n -moz-transform:rotate(90deg);\n -o-transform: rotate(90deg);\n -ms-transform:rotate(90deg);\n transform: rotate(-90deg);\n}", ""]); /***/ }), /* 144 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(145); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 145 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "/*margin for border size*/\n.as-hruler {\n position: relative;\n height: 1.5em;\n border: solid 1px black;\n overflow: hidden;\n font-family: courier, \"courier new\", monospace;\n box-sizing: border-box;\n}\n\n\n.as-hruler-line {\n position: absolute;\n bottom: 0;\n height: 25%;\n border-left: solid 1px rgb(17, 48, 43);\n box-sizing: border-box;\n}\n\n.as-hruler-line.major {\n height: 50%;\n border-left: solid 1px rgb(5, 20, 18);\n}\n\n.as-hruler-major-number{\n position: absolute;\n text-align: center;\n width: 5em;\n pointer-events: none;\n font-size: 0.7em;\n bottom: 50%;\n} ", ""]); /***/ }), /* 146 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(147); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 147 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-linear-color-bar {\n position: relative;\n height: 2em;\n}\n\n.as-linear-color-background {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: block;\n}\n\n.as-linear-color-value-text {\n position: absolute;\n top: 0;\n font-weight: 900;\n white-space: nowrap;\n}\n\n.as-linear-color-min-value-text,\n.as-linear-color-max-value-text {\n position: absolute;\n bottom: 0;\n white-space: nowrap;\n font-weight: bold;\n}\n\n\n\n.as-linear-color-min-value-text {\n left: 0;\n}\n\n.as-linear-color-rect {\n stroke: none;\n}\n\n\n.as-linear-color-value-arrow {\n fill: rgb(244, 124, 32);\n stroke: rgb(244, 124, 32);\n}\n\n.as-linear-color-split-line {\n stroke: white;\n}\n\n\n.as-linear-color-tiny-bar {\n font-size: 1rem;\n --value: 1;\n --extend: 0.5;\n --color: green;\n position: relative;\n\n display: inline-block;\n vertical-align: middle;\n white-space: nowrap;\n}\n\n\n.as-linear-color-tiny-text {\n display: inline-block;\n vertical-align: middle;\n padding-right: 0.3em;\n width: 4em;\n text-align: right;\n}\n\n.as-linear-color-tiny-bar-rect {\n height: calc(10em / 14);\n width: calc(10em * var(--value) / 1.4);\n max-width: calc(10em / 1.4 + 10em * var(--extend) / 1.4);\n min-width: 3px;\n background-color: var(--color);\n display: inline-block;\n vertical-align: middle;\n}\n", ""]); /***/ }), /* 148 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(149); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 149 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".vmedia-no-show {\n position: fixed;\n top: 0;\n left: 0;\n width: 1;\n height: 1;\n z-index: -100000;\n opacity: 0;\n}\n\n.vmedia-no-select,\n.vmedia-no-select * {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\ncoccocgrammar {\n display: none;\n}\n\n.vmedia-media-input {\n box-sizing: border-box;\n border: solid 1px rgba(0, 0, 0, 0.1)\n}\n\n\n.vmedia-media-input-text-container {\n position: relative;\n min-height: 2.5em;\n}\n\n.vmedia-media-input-text-container-editor:focus {\n outline: none;\n}\n\n.vmedia-media-input-text-container-editor img {\n display: none;\n}\n\n.vmedia-media-input-text-container-editor * {\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n text-decoration: inherit;\n color: inherit;\n background: none;\n padding: 0;\n margin: 0;\n white-space: pre;\n}\n\n.vmedia-media-input-text-container-editor {\n min-height: 2em;\n padding-left: 0.5em;\n padding-top: 0.25em;\n padding-bottom: 0.25em;\n margin-right: 0.5em;\n box-sizing: border-box;\n max-height: 6.66666666em;\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.vmedia-media-input-imagepreview-container {\n white-space: normal;\n}\n\n.vmedia-media-input:not(.dragover) .vmedia-media-input-dropover {\n display: none;\n}\n\n.vmedia-media-input-dropover {\n display: inline-block;\n width: 7em;\n height: 7em;\n}\n\n.vmedia-media-input-dropover>svg {\n width: 7em;\n height: 7em;\n}\n\n.vmedia-media-input-imagepreview-container .vmedia-media-input-filepreview,\n.vmedia-media-input-imagepreview-container .vmedia-media-input-imagepreview {\n margin: 0.3em;\n vertical-align: middle;\n}\n\n.vmedia-media-input-filepreview,\n.vmedia-media-input-imagepreview {\n position: relative;\n display: inline-block;\n}\n\n.vmedia-media-input-imagepreview img {\n height: 2.5em;\n width: auto;\n}\n\n.vmedia-media-input-filepreview svg.attachment {\n height: 2em;\n width: 2em;\n}\n\n.vmedia-media-input-filepreview svg.times,\n.vmedia-media-input-imagepreview svg.times {\n position: absolute;\n top: 0.1em;\n right: 0.1em;\n width: 1em;\n height: 1em;\n fill: rgba(69, 69, 69, 0.6);\n}\n\n.vmedia-media-input-filepreview svg.times:hover,\n.vmedia-media-input-imagepreview svg.times:hover {\n fill: rgba(144, 144, 144, 0.6);\n}\n\n.vmedia-media-input-filepreview svg.times:active,\n.vmedia-media-input-imagepreview svg.times:active {\n fill: rgba(220, 220, 240, 0.6);\n}\n\n.vmedia-media-input-plug-button-container {\n position: absolute;\n left: 0.25em;\n bottom: 0.25em;\n top: 0.25em;\n}\n\n.vmedia-media-input-plug-button-container svg {\n height: 1.5em;\n width: 1.5em;\n vertical-align: middle;\n transition: transform .22s cubic-bezier(.5, 0, .4, 1);\n}\n\n\n.vmedia-media-input-plug-button-container svg path {\n fill: rgba(66, 133, 244, 0.7);\n transition: fill .22s cubic-bezier(.5, 0, .4, 1);\n}\n\n.vmedia-media-input.show-plugin .vmedia-media-input-plug-button svg path {\n fill: rgba(134, 142, 153, 0.75);\n}\n\n\n\n.vmedia-media-input-plug-button {\n padding: 0;\n height: 100%;\n width: 2em;\n border: none;\n background: transparent;\n outline: none;\n\n}\n\n\n.vmedia-media-input-plugin-content-container {\n position: absolute;\n bottom: calc(1px + 100%);\n opacity: 1;\n transition: opacity .22s cubic-bezier(.5, 0, .4, 1);\n background-color: white;\n box-sizing: border-box;\n border: solid 1px rgba(0, 0, 0, 0.1);\n z-index: 20;\n background: white;\n}\n\n.vmedia-media-input-plugin-content-container:empty{\n display: none;\n}\n\n\n\n.vmedia-media-input-tool-container {\n position: relative;\n display: block;\n height: 1.5em;\n /* background: red; */\n}\n\n\n\n.vmedia-media-input-tool-container-left {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n}\n\n.vmedia-media-input-tool-container-right {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n}\n\n.vmedia-media-input-tool-container button {\n width: 2.5em;\n height: 100%;\n font-size: 1em;\n margin-left: 0.1em;\n margin-right: 0.1em;\n border: none;\n background-color: transparent;\n border-radius: 0.4em;\n}\n\n.vmedia-media-input-text-container-editor {\n scrollbar-width: thin;\n}\n\n.vmedia-media-input-text-container-editor::-webkit-scrollbar {\n width: 7px;\n}\n\n\n\n.vmedia-media-input-text-container-editor::-webkit-scrollbar-track {\n background: rgb(240, 240, 240);\n}\n\n.vmedia-media-input-text-container-editor::-webkit-scrollbar-thumb {\n background: rgb(205, 205, 205);\n}\n\n.vmedia-media-input-tool-container button svg {\n height: 1.25em;\n width: 1.25em;\n}\n\n.vmedia-media-input-tool-container button:hover {\n background-color: rgba(91, 192, 222, 0.1);\n}\n\n.vmedia-media-input-tool-container button:active {\n background-color: rgba(91, 192, 222, 0.4);\n}\n\n.vmedia-media-input-tool-container button svg.send {\n fill: rgba(66, 133, 244, 0.7);\n}\n\n.vmedia-media-input-tool-container button svg.add-file,\n.vmedia-media-input-tool-container button svg.add-image {\n fill: rgba(66, 66, 66, 0.5);\n}\n\n.vmedia-media-input-tool-container button .mdi{\n font-size:1.2em; \n}\n\n.vmedia-media-input-tool-container button:focus {\n outline: none;\n}\n\n.vmedia-media-input-tool-container button{\n vertical-align: middle;\n}\n\n.vmedia-media-input-plugin-content-container.blur{\n visibility: hidden;\n}", ""]); /***/ }), /* 150 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(151); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 151 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-conversation-box {\n display: flex;\n flex-direction: column;\n font-size: 4rem;\n --right-width: 0;\n}\n\n.as-conversation-box-message-ctn {\n flex-grow: 1;\n}\n\n.as-conversation-box-input-ctn {\n /** empty**/\n}\n\n.as-message-input {\n position: relative;\n box-sizing: border-box;\n padding-top: calc(5em / 14);\n padding-bottom: calc(5em / 14);\n padding-left: calc(5em / 14);\n overflow: visible;\n font-size: var(--as-input-font-size);\n font-family: var(--as-input-font-family);\n}\n\n.as-message-input * {\n font: inherit;\n}\n\n\n.as-message-input-plugin-btn {\n font-size: inherit;\n width: calc(40em / 14);\n height: calc(40em / 14);\n padding: 0;\n border: none;\n color: rgb(122, 122, 122);\n background-color: rgb(241, 241, 241);\n outline: none;\n border-radius: 50%;\n display: inline-block;\n vertical-align: middle;\n}\n\n\n.as-message-input-plugin-btn:active {\n background-color: rgb(212, 212, 212);\n}\n\n.as-message-input-plugin-btn:hover {\n background-color: rgb(235, 235, 235);\n\n}\n\n\n.as-message-input-plugin-btn span {\n font-size: calc(24em / 14);\n}\n\n\n.as-message-input-right {\n position: absolute;\n bottom: calc(10em / 14);\n right: calc(5em / 14);\n z-index: 0;\n white-space: nowrap;\n}\n\n.as-message-input-right .as-message-input-plugin-btn {\n margin-left: calc(10em / 14);\n}\n\n\n.as-message-input-left {\n position: absolute;\n left: calc(5em / 14);\n bottom:calc(5em / 14);\n}\n\n\n.as-message-input-pre-ctn {\n position: relative;\n width: calc(100% - var(--right-width));\n border-radius: 1.8em;\n box-sizing: border-box;\n transition: width 0.1s;\n padding: calc(10em / 14) calc(20em / 14) calc(10em / 14) 3.57em;\n background-color: rgb(241, 241, 244);\n}\n\n\n.as-message-input-pre-ctn::after {\n display: inline-block;\n content: \"\";\n height: calc(2em + 2px);\n vertical-align: middle;\n}\n\n.as-message-input:not(.as-v2) .as-message-input-pre:before {\n content: \"\";\n line-height: calc(2em + 2px);\n display: inline;\n vertical-align: middle;\n}\n\n\n/*.as-message-input.as-has-text.as-text-changed .as-message-input-pre-ctn,*/\n/*.as-message-input.as-has-quote .as-message-input-pre-ctn,*/\n/*.as-message-input.as-has-attachment .as-message-input-pre-ctn {*/\n/* width: calc(100% - 4em - var(--always-visible-buttons-width));*/\n/*}*/\n\n\n.as-message-input-pre {\n display: inline-block;\n width: calc(100% - 2px);\n max-height: 6.5em;\n box-sizing: border-box;\n font-family: inherit;\n font-size: inherit;\n outline: none;\n vertical-align: middle;\n margin: 0;\n white-space: pre-wrap;\n overflow-x: hidden;\n overflow-y: auto;\n line-height: 1.5;\n border: none;\n}\n\n\n\n.as-message-input-camera-caller,\n.as-message-input-camera-microphone {\n display: none;\n}\n\n.as-message-input-emoji-picker-ctn {\n position: absolute;\n bottom: 100%;\n left: 0;\n right: 0;\n user-select: none;\n -webkit-user-select: none;\n background-color: white;\n}\n\n\n.as-message-input-plugin-btn.as-message-input-plugin-send {\n color: white;\n background: linear-gradient(135deg, rgb(0, 120, 212), rgb(0, 188, 242));\n transform: scale(1);\n transition: scale 0.1s;\n}\n\n.as-message-input-plugin-btn.as-message-input-plugin-send span {\n font-size: calc(20em / 14);\n}\n\n.as-message-input-plugin-btn.as-message-input-plugin-send:hover {\n background: linear-gradient(135deg, rgb(0, 140, 212), rgb(0, 208, 252));\n}\n\n.as-message-input-plugin-btn.as-message-input-plugin-send:active {\n transform: scale(0.9);\n}\n\n\n.as-message-input:not(.as-text-changed):not(.as-has-attachment):not(.as-has-quote) .as-message-input-plugin-send,\n.as-message-input:not(.as-has-text):not(.as-has-attachment):not(.as-has-quote) .as-message-input-plugin-send,\n.as-message-input:not(.as-mode-edit) .as-message-input-plugin-cancel,\n.as-message-input.as-mode-edit.as-text-changed.as-has-text .as-message-input-plugin-cancel,\n.as-message-input:not(.as-has-attachment):not(.as-drag-hover) .as-message-input-attachment-ctn,\n.as-message-input.as-auto-send .as-message-input-attachment-ctn,\n.as-message-input.as-mode-edit .as-message-input-plugin-file,\n.as-message-input.as-has-text .as-message-input-plugin-file,\n.as-message-input.as-has-quote .as-message-input-plugin-file,\n.as-message-input:not(.as-has-quote) .as-message-quote-box {\n display: none;\n}\n\n.as-message-input .as-message-quote-box {\n border-bottom: 1px solid #ddd;\n}\n\n.as-message-quote-box {\n position: relative;\n\n}\n\n.as-message-input.as-has-attachment .as-message-quote-box {\n margin-bottom: 5px;\n}\n\n.as-message-quote-remove-btn {\n position: absolute;\n color: rgb(43, 44, 51);\n right: -7px;\n top: 5px;\n width: 20px;\n height: 20px;\n padding: 0;\n background: transparent;\n border: none;\n border-radius: 50%;\n font-size: 16px;\n outline: none;\n}\n\n.as-message-quote-remove-btn:hover {\n color: rgb(143, 144, 151);\n}\n\n.as-message-quote-box {\n user-select: none;\n -webkit-user-select: none;\n}\n\n.as-message-quote-box:not(.as-removable) .as-message-quote-remove-btn {\n display: none;\n}\n\n\n.as-message-quote-box > div {\n display: inline-block;\n vertical-align: top;\n}\n\n.as-message-quote-box:not(.as-has-img):not(.as-has-file) .as-message-quote-img {\n display: none;\n}\n\n.as-message-quote-img {\n width: 40px;\n height: 40px;\n padding: 5px;\n box-sizing: border-box;\n background-size: cover;\n background-origin: border-box;\n background-position: center;\n background-repeat: no-repeat;\n}\n\n.as-message-quote-sym {\n width: 1.8em;\n}\n\n.as-message-quote-sym > span {\n font-size: 1.8em;\n color: rgb(169, 169, 172);\n}\n\n.as-message-quote-content {\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n width: calc(100% - 26px);\n box-sizing: border-box;\n padding-left: 20px;\n}\n\n.as-message-quote-box.as-has-img .as-message-quote-content,\n.as-message-quote-box.as-has-file .as-message-quote-content {\n width: calc(100% - 66px);\n padding-left: 5px;\n}\n\n.as-message-quote-box.as-has-file .as-message-quote-img {\n background-origin: padding-box;\n background-size: contain;\n}\n\n.as-message-quote-text {\n font-size: calc(16em / 14);\n line-height: 1.75;\n font-style: italic;\n color: rgb(43, 44, 51);\n max-width: 100%;\n word-break: break-word;\n white-space: pre-wrap;\n}\n\n.as-message-quote-box.as-shorten-text .as-message-quote-text {\n word-break: normal;\n\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.as-message-quote-text .as-emoji {\n width: 20px;\n height: 20px;\n}\n\n.as-message-quote-desc {\n font-size: 0.85em;\n color: rgb(80, 80, 88);\n}\n\n.as-message-input-attachment-ctn {\n border-bottom: 1px solid #ddd;\n max-height: 170px;\n overflow-y: auto;\n}\n\n\n.as-message-input-attach-preview {\n display: inline-block;\n position: relative;\n width: 135px;\n height: 135px;\n vertical-align: middle;\n margin-right: 5px;\n margin-bottom: 5px;\n border-radius: 10px;\n background-color: white;\n overflow: hidden;\n}\n\n.as-message-input-attach-preview-image {\n min-width: 20px;\n image-orientation: from-image;\n width: 100%;\n height: 100%;\n background-size: cover;\n background-position: center center;\n background-repeat: no-repeat;\n}\n\n\n.as-message-input-attach-preview-file {\n max-width: 50%;\n max-height: 50%;\n margin-left: 10px;\n margin-top: 10px;\n}\n\n.as-message-input-attach-preview-close-btn {\n position: absolute;\n right: 10px;\n top: 10px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n text-align: center;\n border: 1px solid white;\n outline: none;\n padding: 0;\n color: white;\n -webkit-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.64);\n -moz-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.64);\n box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.64);\n background-color: rgba(100, 100, 100, 0.5);\n}\n\n.as-message-input-attach-preview-close-btn span {\n font-size: 14px;\n}\n\n.as-message-input-attach-preview-close-btn:hover {\n background-color: rgba(255, 255, 255, 0.5);\n color: rgb(200, 200, 200);\n}\n\n.as-message-input-attach-preview-close-btn:active {\n background-color: rgba(255, 255, 255, 0.7);\n color: rgb(255, 255, 255);\n}\n\n\n.as-message-input:not(.as-drag-hover) .as-message-input-attachment-add-btn-drop,\n.as-message-input.as-drag-hover .as-message-input-attachment-add-btn-plus {\n display: none;\n}\n\n\n.as-message-input-attach-preview-info {\n position: absolute;\n left: 10px;\n bottom: 10px;\n right: 10px;\n max-height: calc(100% - 20px);\n text-shadow: 0px 1px 3px white;\n color: black;\n font-size: 14px;\n font-family: Arial, Helvetica, sans-serif;\n}\n\n.as-message-input-attach-preview-name {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.as-message-input-attach-preview-size {\n color: #42494c;\n}\n\n.as-message-input-attachment-add-btn {\n display: inline-block;\n vertical-align: middle;\n height: 135px;\n width: 60px;\n border: none;\n border-radius: 10px;\n padding: 0;\n background-color: rgb(196, 196, 200);\n color: white;\n font-size: 50px;\n outline: none;\n margin-bottom: 10px;\n}\n\n.as-message-input-attachment-add-btn:hover {\n background-color: rgb(169, 169, 169)\n\n}\n\n.as-message-input-attachment-add-btn:active {\n background-color: rgb(138, 141, 145)\n}\n\n.as-message-input-external-tools-popup {\n position: absolute;\n\n max-width: 100%;\n bottom: 100%;\n background-color: white;\n}\n\n.as-message-input-external-tools-popup.as-align-left{\n left: 0;\n}\n\n\n.as-message-input-external-tools-popup.as-align-right{\n right: 0;\n}\n\n.as-message-input-external-tools-popup.as-align-fixed{\n right: 0;\n left: 0;\n}\n\nimg.as-emoji {\n vertical-align: bottom;\n}\n\nspan.as-emoji-text {\n position: absolute;\n color: transparent;\n width: 20px;\n opacity: 0;\n}", ""]); /***/ }), /* 152 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(153); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 153 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-number-input {\n text-align: right;\n display: inline-block;\n vertical-align: middle;\n position: relative;\n min-width: calc(1em + 2px);\n height: calc(2em + 2px);\n border: solid 1px #d6d6d6;\n font-size: 1rem;\n box-sizing: border-box;\n width: 4em;\n --text-width: 0.5em;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n}\n\n.absol-number-input.as-width-auto {\n width: calc(var(--text-width) + 2.2em);\n}\n\n.absol-number-input.as-read-only .absol-number-input-text-container {\n right: 0;\n}\n\n.absol-number-input.as-read-only .absol-number-input-button-up-container,\n.absol-number-input.as-read-only .absol-number-input-button-down-container {\n display: none;\n}\n\n.absol-number-input.as-read-only.as-border-none {\n border: none;\n}\n\n.absol-number-input.as-read-only.as-border-none input {\n /*text-align: left;*/\n padding-left: 0;\n}\n\n\n.absol-number-input-button-up-container {\n top: 0;\n}\n\n.absol-number-input-button-down-container {\n bottom: 0;\n}\n\n.absol-number-input-button-up-container,\n.absol-number-input-button-down-container {\n right: 0;\n position: absolute;\n height: 1em;\n width: 1em;\n max-height: 50%;\n}\n\n.absol-number-input-button-up-container > button,\n.absol-number-input-button-down-container > button {\n width: 100%;\n height: 100%;\n line-height: 1;\n padding: 0;\n border: none;\n box-sizing: border-box;\n outline: none;\n color: rgb(101, 101, 101);\n background-color: transparent;\n font-size: inherit;\n}\n\n.as-printer-content .absol-number-input button {\n display: none;\n}\n\n.absol-number-input-button-up-container > button:active,\n.absol-number-input-button-down-container > button:active {\n color: black;\n background-color: rgba(101, 101, 101, 0.3);\n}\n\n.absol-number-input-text-container {\n left: 0em;\n right: 1.2em;\n top: 0;\n bottom: 0;\n position: absolute;\n}\n\n\n.absol-number-input-text-container > input[type=\"text\"] {\n border: none;\n outline: none;\n width: 100%;\n height: 100%;\n text-align: right;\n padding: 0 0.2em;\n box-sizing: border-box;\n font: inherit;\n}\n\n.absol-number-input.absol-disabled {\n pointer-events: none;\n color: var(--as-disabled-text-color);\n}\n\n.absol-number-input.absol-disabled input {\n background-color: var(--as-disabled-background-color);\n}\n\n.absol-number-input.absol-disabled .absol-number-input-button-up-container,\n.absol-number-input.absol-disabled .absol-number-input-button-down-container {\n opacity: 0.3;\n}", ""]); /***/ }), /* 154 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(155); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 155 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-onscreen-window {\n z-index: 1002;\n position: fixed;\n left: 10px;\n top: 10px;\n width: 12em;\n height: 5em;\n /*default size*/\n /* min-width: 12em;\n min-height: 1.4em; */\n}\n\n\n.absol-onscreen-window > .as-window-box {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.absol-onscreen-window > .as-window-box > .as-window-box-body {\n flex-grow: 1;\n}\n\n.as-window-box {\n position: relative;\n\n background: white;\n -webkit-box-shadow: 2px 2px 17px -1px rgba(0, 0, 0, 0.54);\n -moz-box-shadow: 2px 2px 17px -1px rgba(0, 0, 0, 0.54);\n box-shadow: 2px 2px 17px -1px rgba(0, 0, 0, 0.54);\n}\n\n.as-window-box-header {\n display: flex;\n min-height: 1.4em;\n position: relative;\n background-color: rgba(169, 169, 169, 0.15);\n padding: 0.2em;\n box-sizing: border-box;\n align-items: center;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n}\n\n.as-window-box-header-icon-ctn:empty {\n display: none;\n}\n\n.as-window-box-header-title {\n flex-grow: 1;\n padding-left: 0.2em;\n}\n\n.as-window-box-header-button-ctn {\n}\n\n.as-window-box-header-icon {\n margin-right: 0.2em;\n font-size: inherit;\n}\n\nspan.as-window-box-header-icon {\n line-height: 1.2em;\n}\n\nsvg.as-window-box-header-icon {\n width: 1.2em;\n height: 1.2em;\n}\n\nspan.as-window-box-header-title {\n line-height: 1.2em;\n font-size: 1em;\n color: rgb(33, 33, 34);\n}\n\n\n.as-window-box-header-button-ctn > button {\n height: 100%;\n width: 1em;\n font-size: 1em;\n padding: 0;\n margin: 0 0 0 0.1em;\n border: none;\n color: rgb(169, 169, 169);\n outline: none;\n}\n\n.as-window-box-header-button-ctn > button:hover {\n color: rgb(103, 103, 103);\n}\n\n.as-window-box-header-button-ctn > button:active {\n color: rgb(33, 33, 34);\n}\n\n.as-window-box-header-button-ctn > button:hover > .mdi-close {\n color: rgb(255, 59, 59);\n}\n\n.as-window-box-header-button-ctn > button > span {\n vertical-align: middle;\n}\n\n.absol-onscreen-window-body-container {\n position: absolute;\n left: 0;\n right: 0;\n top: 1.4em;\n bottom: 0;\n}\n\n\n.absol-onscreen-window-moving-modal {\n position: fixed;\n left: 1px;\n right: 1px;\n top: 1px;\n bottom: 1px;\n z-index: 1000000006;\n}\n\n.absol-onscreen-window-resizer {\n position: absolute;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom {\n bottom: -3px;\n height: 6px;\n left: 3px;\n right: 3px;\n z-index: 3;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-top {\n top: -3px;\n height: 6px;\n left: 3px;\n right: 3px;\n z-index: 3;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-left {\n left: -3px;\n top: 3px;\n bottom: 3px;\n width: 6px;\n cursor: ew-resize;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-right {\n right: -3px;\n top: 3px;\n bottom: 3px;\n width: 6px;\n cursor: ew-resize;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-right {\n width: 6px;\n height: 6px;\n right: -3px;\n bottom: -3px;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-left {\n width: 6px;\n height: 6px;\n left: -3px;\n bottom: -3px;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-left {\n width: 6px;\n height: 6px;\n left: -3px;\n top: -3px;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-right {\n width: 6px;\n height: 6px;\n right: -3px;\n top: -3px;\n}\n\n\n.absol-onscreen-window-resize-top,\n.absol-onscreen-window-resize-bottom {\n cursor: ns-resize;\n\n}\n\n.absol-onscreen-window-resize-left,\n.absol-onscreen-window-resize-right {\n cursor: ew-resize;\n\n}\n\n\n.absol-onscreen-window-resize-bottom-right {\n cursor: se-resize;\n}\n\n.absol-onscreen-window-resize-bottom-left {\n cursor: sw-resize;\n}\n\n.absol-onscreen-window-resize-top-left {\n cursor: nw-resize;\n}\n\n.absol-onscreen-window-resize-top-right {\n cursor: ne-resize;\n}", ""]); /***/ }), /* 156 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(157); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 157 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-page-selector{\n white-space: normal;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n font-size: 1rem;\n}\n\n.absol-page-selector > ul{\n margin-bottom: 0px;\n margin-top: 0;\n}\n\n.absol-page-number-buttons{\n display: inline-block;\n vertical-align: middle;\n white-space: nowrap;\n}\n\n.absol-page-number-input > label{\n font-weight: 100;\n}\n\n.absol-page-number-buttons > li.page-previous, \n.absol-page-number-buttons > li.page-next,\n.absol-page-number-buttons > li.page-first,\n.absol-page-number-buttons > li.page-last\n{\n display: inline-block;\n height: calc(2em + 2px);;\n padding-left: 10px;\n padding-right: 10px;\n text-align: center;\n transition: all .3s linear;\n background-color: transparent;\n cursor: pointer;\n}\n\n.absol-page-number-buttons > li.absol-page-number{\n font-size: inherit;\n display: inline-block;\n height: calc(2em + 2px);\n width: 3em;\n text-align: center;\n transition: all .3s linear;\n background-color: transparent;\n cursor: pointer;\n}\n\nli.absol-page-number>a{\n font-size: inherit;\n}\n\n\n.absol-page-number-buttons > li.absol-page-number.active{\n box-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);\n background-color: #4285f4;\n border-radius:2px; \n \n}\n\n.absol-page-number-buttons > li.absol-page-number.active > a{\n\tcolor: white;\n \n}\n\n.absol-page-number-buttons > li> a{\n line-height: calc(2em + 2px);\n text-decoration:none;\n outline: none;\n}\n\n.absol-page-number-buttons > li:not(.active):hover{\n background-color: #eee;\n\n}\n\n.absol-page-selector .absol-page-number-input{\n display: inline-block;\n vertical-align: middle;\n}\n\n.absol-page-selector .absol-page-number-input input[type=\"text\"]{\n font-size: inherit;\n width: 3em;\n margin-left: 0.3em;\n margin-right: 0.3em;\n text-align: center;\n height: 1.8em;\n border: solid 1px #ccc;\n border-radius: 2px;\n\n}\n\n.absol-page-link {\n color: #147af6;\n cursor: pointer;\n text-decoration: underline;\n}\n\n.absol-page-number {\n color: #147af6;\n cursor: pointer;\n}\n\n.absol-page-number a::before{\n content: attr(data-index-text);\n}", ""]); /***/ }), /* 158 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(159); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 159 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-preinput {\n margin: 0;\n padding: 0;\n white-space: pre-wrap;\n -moz-user-modify: read-write;\n -webkit-user-modify: read-write;\n word-break: normal;\n}\npre.as-preinput{\n word-break: normal;\n}\n\n\n.as-preinput img {\n display: none;\n}", ""]); /***/ }), /* 160 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-progress-bar {\n height: 1em;\n background-color: #e9ecef;\n border-radius: .25em;\n box-sizing: border-box;\n overflow: hidden;\n --value-color: #007bff;\n}\n\n\n.as-progress-bar-value {\n height: 100%;\n width: 0;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: var(--value-color);\n transition: width .6s ease;\n}\n\n.as-progress-bar.as-variant-success,\n.as-progress-circle.as-variant-success {\n --value-color: #28a745;\n}\n\n.as-progress-bar.as-variant-info,\n.as-progress-circle.as-variant-info {\n --value-color: #17a2b8;\n}\n\n.as-progress-bar.as-variant-warning,\n.as-progress-circle.as-variant-warning {\n --value-color: #ffc107;\n}\n\n.as-progress-bar.as-variant-danger,\n.as-progress-circle.as-variant-danger {\n --value-color: #dc3545;\n}\n\n\n.as-progress-bar.as-striped .as-progress-bar-value,\n.as-progress-bar.as-animated .as-progress-bar-value {\n background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent);\n background-size: 1.33333em 1.33333em;\n}\n\n@keyframes as-progress-bar-stripes {\n 0% {\n background-position: 1.33333em 0\n }\n\n to {\n background-position: 0 0\n }\n}\n\n.as-progress-bar.as-animated .as-progress-bar-value {\n animation: as-progress-bar-stripes 1s linear infinite;\n}\n\n\n.as-progress-circle {\n display: inline-block;\n width: 7em;\n height: 7em;\n background-color: #fcfcf6;\n border-radius: 50%;\n position: relative;\n --value-color: #007bff;\n\n box-shadow: 3px 2px 12px -1px rgba(0, 0, 0, 0.1) inset;\n overflow: hidden;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n}\n\n.as-progress-circle-inner {\n background-color: white;\n position: absolute;\n border-radius: 50%;\n left: 0.8em;\n right: 0.8em;\n top: 0.8em;\n bottom: 0.8em;\n font-size: 1rem;\n box-shadow: 3px 2px 12px -1px rgba(0, 0, 0, 0.1);\n white-space: nowrap;\n text-align: center;\n}\n\n\n.as-progress-circle-inner::before {\n content: \"\";\n height: 100%;\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-progress-circle-text {\n display: inline-block;\n vertical-align: middle;\n white-space: pre-wrap;\n max-width: calc(100% - 0.3em);\n font-size: 1em;\n color: #454c5b;\n}\n\n.as-progress-circle-start,\n.as-progress-circle-end {\n border-radius: 50%;\n width: 0.8em;\n height: 0.8em;\n background-color: var(--value-color);\n /*background-color: red;*/\n top: 0;\n left: calc(50% - 0.4em);\n position: absolute;\n /*box-shadow: 3px 2px 12px -1px rgba(0, 0, 0, 0.1);*/\n}\n\n.as-progress-circle-pie {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n border-radius: 50%;\n background-color: var(--value-color);\n}\n\n\n.as-progress-circle-end {\n\n}\n\n\n", ""]); /***/ }), /* 161 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(162); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 162 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-quick-list-button {\n box-sizing: border-box;\n height: calc(2em + 2px);\n font-size: 14px;\n}\n\n.as-quick-list-button .as-flexicon-button-text-container {\n border-right: solid 1px #bfbfbf;\n}\n\n\n.as-quick-list-button-follower .absol-selectlist {\n max-height: calc(100vh - 20px);\n overflow-y: auto;\n border: solid 1px rgb(100, 100, 255);\n box-sizing: border-box;\n background-color: white;\n display: inline-block;\n vertical-align: top;\n -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n}", ""]); /***/ }), /* 163 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-selectlist {\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n}\n\n.absol-selectlist * {\n box-sizing: border-box;\n}\n\n.absol-selectlist .absol-selectlist-item:hover {\n background-color: #efefef;\n}\n\n.absol-selectlist .absol-selectlist-item {\n height: calc(20rem / 14);\n font-size: 1rem;\n cursor: pointer;\n}\n\n.absol-selectlist-item.as-selected {\n background-color: #dfdfdf;\n}\n\n\n.absol-selectlist-item.as-disabled,\n.absol-selectlist-item.as-disabled * {\n color: var(--as-disabled-text-color);\n pointer-events: none;\n}\n\n.absol-selectlist:not(.as-searching) > .absol-selectlist-item.as-last-in-group,\n.as-select-list-box:not(.as-searching) .as-last-in-group {\n position: relative;\n overflow: visible;\n}\n\n\n.as-select-list-box:not(.as-searching) .as-last-in-group::after,\n.absol-selectlist:not(.as-searching) > .absol-selectlist-item.as-last-in-group:not(:last-child)::after {\n content: \"\";\n border-bottom: 1px solid black;\n position: absolute;\n left: 0.2em;\n right: 0.2em;\n bottom: -0.5px;\n}\n\n.absol-selectlist-item-text {\n line-height: inherit;\n white-space: pre;\n padding-left: var(--as-input-horizontal-padding);\n padding-right: var(--as-input-horizontal-padding);\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.absol-selectlist-item {\n height: 20px;\n line-height: 20px;\n --level: 0;\n padding-left: calc(0.9em * var(--level));\n}\n\n\n.absol-selectlist-item {\n position: relative;\n box-sizing: border-box;\n}\n\n.absol-selectlist-item-desc-container {\n position: absolute;\n right: 0.3em;\n top: 0;\n bottom: 0;\n}\n\n.absol-selectlist-item-desc {\n font-style: italic;\n line-height: 20px;\n white-space: nowrap;\n color: rgb(37, 37, 37);\n}\n\n.absol-selectlist-item-desc:empty {\n display: none;\n}\n\n.absol-selectlist-item {\n padding-right: calc(0.35em + var(--select-list-desc-width));\n}\n\n.absol-selectlist-item-desc-container {\n width: var(--select-list-desc-width);\n}\n\n\n.as-select-list-icon {\n font-size: 1.5em;\n display: inline-block;\n vertical-align: middle;\n padding-left: var(--as-input-horizontal-padding);\n}\n\n\n\n/**************** MOBILE ******************************/\n\n:root {\n --modal-margin-top: 80px;\n --modal-margin-bottom: 80px;\n --modal-max-width: 500px;\n --modal-width: calc(100vw - 80px);\n /*--modal-border-radius: 8px;*/\n --modal-border-radius: 0px;\n}\n\n.am-list-modal {\n z-index: 100005;\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n text-align: center;\n box-sizing: border-box;\n padding-top: var(--modal-margin-top);\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.am-list-modal > div {\n display: inline-block;\n text-align: initial;\n}\n\n\n.am-list-popup-box {\n max-width: var(--modal-max-width);\n width: var(--modal-width);\n /*-webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);*/\n /*-moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);*/\n /*box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);*/\n box-shadow: 2px 2px 2px 0px #908787;\n -webkit-box-shadow: 2px 2px 2px 0px #908787;\n background-color: #ffffff;\n border-radius: var(--modal-border-radius);\n font-family: Arial, Helvetica, sans-serif;\n}\n\n.am-list-popup-box.am-enable-search .absol-search-text-input {\n visibility: visible;\n}\n\n\n.am-list-popup-header {\n height: calc(2em + 10px);\n display: block;\n white-space: nowrap;\n box-sizing: border-box;\n padding-top: 5px;\n padding-bottom: 5px;\n padding-left: 10px;\n border-bottom: solid 1px #dddddd;\n /*background-color: rgba(169, 169, 169, 0.2);*/\n}\n\n.am-list-popup-header .absol-search-text-input {\n display: inline-block;\n width: calc(100% - 2em - 18px);\n vertical-align: middle;\n box-sizing: border-box;\n background-color: white;\n}\n\n.am-list-popup-close-btn {\n display: inline-block;\n vertical-align: middle;\n border-radius: 50%;\n padding: 0;\n height: 2em;\n width: 2em;\n font-size: inherit;\n border: none;\n outline: none;\n margin-left: 10px;\n background-color: rgb(255, 255, 255);\n color: #7a7a7a;\n white-space: nowrap;\n}\n\n.am-list-popup-close-btn:active {\n color: red;\n}\n\n\n.am-list-popup-close-btn:before {\n content: \"\";\n display: inline-block;\n height: 2em;\n vertical-align: middle;\n}\n\n.am-list-popup-close-btn span {\n font-size: 24px;\n display: inline-block;\n vertical-align: middle;\n line-height: 1;\n}\n\n.am-list-popup-box .absol-search-text-input {\n visibility: hidden;\n}\n\n.am-list-popup-paging {\n display: block;\n height: 2em;\n text-align: center;\n box-sizing: border-box;\n border-bottom: 1px solid #dddddd;\n}\n\n.am-list-popup-paging::before {\n content: \"\";\n height: 100%;\n display: inline-block;\n vertical-align: middle;\n}\n\n.am-list-popup-paging-content {\n padding-left: 0.5em;\n padding-right: 0.5em;\n}\n\n.am-list-popup-paging > * {\n display: inline-block;\n vertical-align: middle;\n}\n\n.am-list-popup-paging > button {\n padding: 0;\n margin-left: 0.25em;\n margin-right: 0.25em;\n width: 1.75em;\n height: 1.75em;\n display: inline-block;\n background-color: transparent;\n border: none;\n box-sizing: border-box;\n outline: none;\n}\n\n.am-list-popup-paging > button:active {\n background-color: rgba(169, 169, 169, 0.3);\n}\n\n\ninput[type=\"number\"].am-list-popup-paging-offset {\n width: 4em;\n outline: none;\n margin-right: 0.2em;\n /*border: solid 1px #a9a9a9;*/\n /*border-radius: 0.3em;*/\n border:none;\n text-align: right;\n font-size: inherit;\n height: 1.25em;\n box-sizing: border-box;\n\n}\n\n.am-list-popup-list-scroller {\n width: 100%;\n overflow: auto;\n --content-height: calc(100vh - 200px);\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n}\n\n\n.am-list-popup-list-scroller::-webkit-scrollbar {\n display: none;\n}\n\n.am-list-popup-content {\n display: block;\n position: relative;\n}\n\n.am-list-popup-list-page{\n position: absolute;\n left: 0;\n right: 0;\n top: -200vh;\n box-sizing: border-box;\n}\n\n\n.am-list-modal .am-selectlist {\n width: 100%;\n}\n\n.am-list-popup-list-page.am-selectlist{\n --desc-width: inherit;\n}\n\n.am-value-hidden .am-selectlist-item.as-selected{\n display: none;\n}\n\n.am-selectlist {\n display: table;\n border-collapse: collapse;\n border-spacing: 0;\n}\n\n.am-selectlist > .am-selectlist-item {\n display: table-row;\n\n}\n\n.am-selectlist > .am-selectlist-item:active {\n background-color: rgba(169, 169, 169, 0.4);\n}\n\n.am-selectlist > .am-selectlist-item.as-selected {\n background-color: #dfdfdf;\n}\n\n\n.am-selectlist > .am-selectlist-item {\n border-bottom: 0.5px solid #dddddd;\n}\n\n.am-selectlist > .am-selectlist-item > .am-selectlist-item-check-ctn {\n display: table-cell;\n vertical-align: middle;\n}\n\n.am-selectlist > .am-selectlist-item > .am-selectlist-item-text-ctn,\n.am-selectlist > .am-selectlist-item > .am-selectlist-item-desc-ctn {\n display: table-cell;\n padding-top: 0.5em;\n padding-bottom: 0.5em;\n}\n\n.am-selectlist > .am-selectlist-item > .am-selectlist-item-text-ctn {\n padding-right: 5px;\n padding-left: calc(10px + 0.9em * var(--level));\n}\n\n.am-selectlist > .am-selectlist-item > .am-selectlist-item-desc-ctn {\n padding-left: 5px;\n padding-right: 10px;\n}\n\n\n.am-selectlist {\n --desc-width: auto;\n}\n\n.am-selectlist .am-selectlist-item-desc-ctn {\n width: var(--desc-width);\n}\n\n/******************************************************/\n.am-selectlist-item {\n --level: 0;\n}\n\n.am-selectlist-item-text-ctn {\n display: inline-block;\n vertical-align: middle;\n}\n\n.am-selectlist-item-desc-ctn {\n display: inline-block;\n vertical-align: middle;\n}\n\n\n\n.am-selectlist-item-desc {\n font-style: italic;\n line-height: 20px;\n color: rgb(80, 80, 82);\n}\n\n\n.am-selectlist-item-icon {\n font-size: 1.5em;\n display: inline-block;\n vertical-align: middle;\n}", ""]); /***/ }), /* 164 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(165); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 165 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-checkbox-button{\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-checkbox-button .absol-checkbox-icon{\n display: block;\n}", ""]); /***/ }), /* 166 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(167); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 167 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-quick-path {\n position: relative;\n box-sizing: border-box;\n user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n -moz-user-select: none;\n min-height: 1.5em;\n}\n\n.absol-quick-path button {\n outline: none;\n color: rgb(69, 69, 69);\n height: 1.5em;\n}\n\n.absol-quick-path button:hover {\n color: black;\n}\n\n.absol-quick-path .toggler-ico path {\n fill: rgb(104, 104, 104);\n}\n\n.dark .absol-quick-path button {\n color: rgb(200, 200, 200);\n}\n\n\n.dark .absol-quick-path button:hover {\n color: white;\n}\n\n.dark .absol-quick-path .toggler-ico path {\n fill: rgb(169, 169, 169);\n}\n\n\n\n.absol-quick-path-btn:focus span {\n text-decoration: underline;\n}\n\n/* \n.absol-quick-path-btn .toggler-ico path {\n fill: rgb(104, 104, 104);\n} */\n", ""]); /***/ }), /* 168 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(169); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 169 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-radio-button {\n display: inline;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.absol-radio-button input {\n display: none;\n}\n\n\n.absol-radio-button > svg {\n display: inline-block;\n vertical-align: middle;\n width: calc(1em + 4px);\n height: calc(1em + 4px);\n}\n\n.absol-radio-button > svg .bound {\n stroke: #929292;\n fill: white;\n}\n\n.absol-radio-button:hover > svg .bound {\n fill: #d6d6d6;\n stroke: black;\n}\n\n.absol-radio-icon .border {\n}\n\n.absol-radio-button .dot {\n transition: opacity 0.07s;\n opacity: 0;\n fill: #606060;\n}\n\n.absol-radio-button:hover .dot {\n transition: opacity 0.07s;\n opacity: 0;\n fill: black;\n}\n\n.absol-radio-button.checked .dot {\n opacity: 1;\n transition: opacity 0.1s;\n}\n\n\n\n.absol-radio-button > span:last-child {\n display: none;\n}\n\n\n.absol-radio-button.disabled {\n cursor: default;\n}\n\n.absol-radio-button.disabled:hover .dot,\n.absol-radio-button.disabled .dot {\n fill: #929292;\n}\n\n.absol-radio-button.disabled .bound,\n.absol-radio-button.disabled:hover .bound {\n stroke: #929292;\n fill: #ebebe4;\n}\n\n\n.absol-radio .standar-alone {\n display: inline-block;\n}\n\n.absol-radio > span:not(:last-child) {\n padding-right: 0.3em;\n}\n\n.absol-radio span:last-child {\n padding-left: 0.3em;\n}\n\ninput:checked ~ .absol-radio-icon .dot {\n opacity: 1;\n}", ""]); /***/ }), /* 170 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(171); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 171 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-radio {\n display: inline;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.absol-radio input {\n display: none;\n}\n\n.absol-radio > span {\n white-space: pre;\n cursor: inherit;\n vertical-align: middle;\n margin: 0;\n font-size: inherit;\n}\n\n.absol-radio > span:empty {\n display: none;\n}\n\n.absol-radio > svg {\n display: inline-block;\n vertical-align: middle;\n width: calc(1em + 4px);\n height: calc(1em + 4px);\n}\n\n.absol-radio > svg .bound {\n stroke: #929292;\n fill: white;\n}\n\n.absol-radio:hover > svg .bound {\n fill: #d6d6d6;\n stroke: black;\n}\n\n/* \n.absol-radio>svg .bound {\n fill: none;\n} */\n\n.absol-radio-icon .border {\n}\n\n.absol-radio .dot {\n transition: opacity 0.07s;\n opacity: 0;\n fill: #606060;\n}\n\n.absol-radio:hover .dot {\n transition: opacity 0.07s;\n opacity: 0;\n fill: black;\n}\n\n.absol-radio.checked .dot {\n opacity: 1;\n transition: opacity 0.1s;\n}\n\n.absol-radio:not(.right) > span.absol-radio-left-label {\n display: none;\n}\n\n.absol-radio.right > span.absol-radio-right-label {\n display: none;\n}\n\nspan.absol-radio-left-label {\n padding-right: 0.3em;\n}\n\nspan.absol-radio-right-label {\n padding-left: 0.3em;\n}\n\n\n\n\n.absol-radio.disabled {\n cursor: default;\n}\n\n.absol-radio.disabled{\n color: #777;\n}\n\n.absol-radio.disabled:hover .dot,\n.absol-radio.disabled .dot {\n fill: #929292;\n}\n\n.absol-radio.disabled .bound,\n.absol-radio.disabled:hover .bound {\n stroke: #929292;\n fill: #ebebe4;\n}\n\n\n.absol-radio .standar-alone {\n display: inline-block;\n}\n\ninput:checked ~ .absol-radio-icon .dot {\n opacity: 1;\n}", ""]); /***/ }), /* 172 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(173); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 173 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-resize-box {\n position: absolute;\n /*or fixed*/\n z-index: 1;\n box-sizing: border-box;\n opacity: 0.5;\n pointer-events: none;\n}\n\n.as-resize-box-body {\n margin: -1px;\n width: calc(100% + 2px);\n height: calc(100% + 2px);\n position: relative;\n box-sizing: border-box;\n border: solid 2px rgb(32, 150, 218);\n}\n\n.as-resize-box.as-can-move .as-resize-box-body {\n cursor: move;\n pointer-events: all;\n}\n\n.as-resize-box.as-can-click .as-resize-box-body {\n pointer-events: all;\n}\n\n.as-resize-box.as-can-move .as-resize-box-dot,\n.as-resize-box.as-can-resize .as-resize-box-dot.right,\n.as-resize-box.as-can-resize .as-resize-box-dot.bottom,\n.as-resize-box.as-can-resize .as-resize-box-dot.right-bottom {\n display: unset;\n\n}\n\n.as-resize-box-dot {\n position: absolute;\n width: 0.6em;\n height: 0.6em;\n background: rgb(32, 150, 218);\n display: none;\n pointer-events: all;\n}\n\n.as-resize-box-dot.left-top {\n top: calc(-0.3em - 1px);\n left: calc(-0.3em - 1px);\n cursor: nw-resize;\n}\n\n.as-resize-box-dot.left-bottom {\n bottom: calc(-0.3em - 1px);\n left: calc(-0.3em - 1px);\n cursor: sw-resize;\n}\n\n.as-resize-box-dot.left {\n top: calc(50% - 0.3em);\n left: calc(-0.3em - 1px);\n cursor: w-resize;\n}\n\n.as-resize-box-dot.top {\n top: calc(-0.3em - 1px);\n left: calc(50% - 0.3em);\n cursor: n-resize;\n}\n\n.as-resize-box-dot.bottom {\n bottom: calc(-0.3em - 1px);\n left: calc(50% - 0.3em);\n cursor: s-resize;\n}\n\n.as-resize-box-dot.right-top {\n top: calc(-0.3em - 1px);\n right: calc(-0.3em - 1px);\n cursor: ne-resize;\n}\n\n.as-resize-box-dot.right-bottom {\n bottom: calc(-0.3em - 1px);\n right: calc(-0.3em - 1px);\n cursor: se-resize;\n}\n\n\n.as-resize-box-dot.right {\n top: calc(50% - 0.3em);\n right: calc(-0.3em - 1px);\n cursor: e-resize;\n}\n\n.as-resize-box-overiding .as-resize-box-dot,\n.as-resize-box-overiding .as-resize-box-body {\n cursor: unset;\n}\n\n.as-resize-box-overiding.body {\n cursor: move !important;\n}\n\n\n.as-resize-box-overiding.left-top {\n cursor: nw-resize !important;\n}\n\n.as-resize-box-overiding.left-bottom {\n cursor: sw-resize !important;\n}\n\n.as-resize-box-overiding.left {\n cursor: w-resize !important;\n}\n\n.as-resize-box-overiding.top {\n cursor: n-resize !important;\n}\n\n.as-resize-box-overiding.bottom {\n cursor: s-resize !important;\n}\n\n.as-resize-box-overiding.right-top {\n cursor: ne-resize !important;\n}\n\n.as-resize-box-overiding.right-bottom {\n cursor: se-resize !important;\n}\n\n\n.as-resize-box-overiding.right {\n cursor: e-resize !important;\n}", ""]); /***/ }), /* 174 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(175); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 175 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-search-text-input {\n position: relative;\n height: 2em;\n border-radius: 0.3em;\n border: solid 1px #a9a9a9;\n font-size: 1rem;\n background-color: white;\n}\n\n.absol-search-text-input.focus {\n outline: solid 1px rgba(30, 30, 255, 0.4);\n}\n\n.absol-search-text-input-container {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 2em;\n}\n\n.absol-search-text-button-container {\n position: absolute;\n top: 0;\n right: 0;\n width: 2em;\n bottom: 0em;\n}\n\n.absol-search-text-button-container button {\n width: 100%;\n height: 100%;\n outline: none;\n border: none;\n background: transparent;\n padding: 0;\n font-size: 1em;\n}\n\n.absol-search-text-button-container button > svg {\n height: calc(16em / 14);\n width: calc(16em / 14);\n fill: rgb(132, 132, 132);\n}\n\n.absol-search-text-input-container input {\n width: 100%;\n height: 100%;\n font-size: 1em;\n box-sizing: border-box;\n outline: none;\n border: none;\n background-color: transparent;\n padding-left: 0.6em;\n}\n\n.absol-search-text-input:not(.searching) svg.times {\n display: none;\n}\n\n.absol-search-text-input.searching svg.find {\n display: none;\n}\n\n.absol-search-text-input .as-spinner-ico{\n width: 2em;\n height: 2em;\n}\n\n.absol-search-text-input:not(.as-waiting) svg.as-spinner-ico,\n.absol-search-text-input.as-waiting svg:not(.as-spinner-ico) {\n display: none;\n}\n\n.absol-search-text-input-container input::-webkit-search-cancel-button {\n display: none;\n}", ""]); /***/ }), /* 176 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(177); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 177 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "", ""]); /***/ }), /* 178 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(179); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 179 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ":root {\n --select-box-item-height: calc(20rem / 14);\n --select-box-item-font-size: 1rem;\n --select-box-item-border-radius: 9px;\n --select-box-item-close-opacity: 0;\n --select-box-min-height: calc(2rem + 2px);\n --select-box-focus-item-color: rgb(208, 145, 239);\n}\n\n.absol-selectbox {\n --list-min-width: 3em;\n display: inline-block;\n vertical-align: middle;\n position: relative;\n min-height: var(--select-box-min-height);\n min-width: var(--list-min-width);\n border: solid 1px #d6d6d6;\n border-radius: calc(3rem / 14);\n box-sizing: border-box;\n padding-right: var(--select-box-item-height);\n overflow-y: auto;\n outline: none;\n background-color: white;\n}\n\n.absol-selectbox:not(.as-disable-click-to-focus) {\n cursor: copy;\n}\n\n.absol-selectbox.as-disabled {\n pointer-events: none;\n background-color: var(--as-disabled-background-color);\n}\n\n.absol-selectbox.as-disabled .absol-selectbox-item {\n opacity: 0.7;\n}\n\n.absol-selectbox {\n white-space: normal;\n}\n\n.absol-selectbox .absol-selectbox-item {\n margin: calc((var(--select-box-min-height) - 2px - var(--select-box-item-height)) / 2) 2px;\n}\n\n.absol-selectbox-item {\n font-family: Arial, Helvetica, sans-serif;\n display: inline-block;\n position: relative;\n font-size: var(--select-box-item-font-size);\n height: var(--select-box-item-height);\n box-sizing: border-box;\n border-radius: var(--select-box-item-border-radius);\n overflow: hidden;\n background-color: #5bc0de;\n border-color: #46b8da;\n vertical-align: top;\n white-space: normal;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n color: black;\n cursor: pointer;\n}\n\n\n.absol-selectbox-item.as-theme-confirmed {\n background-color: rgb(145, 228, 251);\n}\n\n.absol-selectbox-item.as-theme-declined {\n background-color: rgb(255, 138, 138)\n}\n\n.absol-selectbox-item.as-theme-waiting {\n background-color: rgb(255, 227, 174);\n color: black;\n}\n\n.absol-selectbox-item-text {\n height: var(--select-box-item-height);\n padding-right: calc(var(--select-box-item-height) + 5px);\n padding-left: 5px;\n font-size: inherit;\n white-space: nowrap;\n}\n\n.absol-selectbox-item-text:hover {\n background-color: rgba(0, 0, 0, 0.0893617021);\n}\n\n.absol-selectbox-item-text span {\n display: inline-block;\n vertical-align: middle;\n white-space: nowrap;\n}\n\n.absol-selectbox-item-close {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n width: var(--select-box-item-height);\n text-align: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: pointer;\n background-color: rgba(0, 0, 0, var(--select-box-item-close-opacity));\n white-space: nowrap;\n}\n\n.absol-selectbox-item-close::after,\n.absol-selectbox-item-text::before {\n content: \"\";\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n}\n\n.absol-selectbox-item-close span {\n font-size: 1.25em;\n display: inline-block;\n vertical-align: middle;\n}\n\n\n.absol-selectbox.as-item-focusable .absol-selectbox-item.as-active {\n background-color: var(--select-box-focus-item-color);\n}", ""]); /***/ }), /* 180 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-selectmenu-anchor-container {\n /* position: fixed; */\n\n /* top: 0; */\n /* left: 0; */\n width: 0;\n height: 0;\n overflow: visible;\n}\n\n.absol-selectmenu-anchor {\n position: relative;\n}\n\n.absol-selectmenu-anchor-content-container {\n position: absolute;\n z-index: 1002;\n top: 0;\n left: 0;\n}\n\n.absol-selectmenu-anchor-content-container .absol-bscroller {\n max-height: calc(100vh - 50px);\n}\n\n\n.absol-selectmenu-anchor.absol-disabled .absol-selectmenu-anchor-content-container {\n visibility: hidden;\n top: -100000px;\n left: -10000px;\n z-index: -1000;\n opacity: 0;\n}\n\n\n.absol-selectmenu-dropdown-box {\n border: solid 1px rgb(100, 100, 255);\n box-sizing: border-box;\n background-color: white;\n display: inline-block;\n vertical-align: top;\n -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n}\n\n.absol-selectmenu-dropdown-box > .as-bscroller {\n overflow-y: auto;\n}\n\n.absol-selectmenu-dropdown-box .absol-search-text-input {\n margin: 0.2em;\n}\n\n\n.absol-selectmenu.absol-hidden {\n display: none !important;\n}\n\n.absol-selectmenu-render-space {\n position: fixed;\n top: 0;\n left: 0;\n z-index: -1000;\n visibility: hidden;\n font-size: 14px;\n}\n\n.absol-selectmenu-render-space > div {\n display: inline-block;\n}\n\n\n.absol-selectmenu.as-disabled,\n.as-select-menu.as-disabled {\n pointer-events: none;\n background-color: var(--as-disabled-background-color);\n color: var(--as-disabled-text-color);\n}\n\n.absol-selectmenu {\n display: inline-block;\n vertical-align: middle;\n position: relative;\n height: calc(2em + 2px);\n min-width: calc(2em + 2px);\n border: solid 1px #d6d6d6;\n border-radius: 2px;\n box-sizing: border-box;\n font-size: 1rem;\n outline: none;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n background-color: white;\n}\n\n.absol-selectmenu.as-border-none {\n border: none;\n}\n\n.absol-selectmenu.as-border-none .absol-selectlist-item span {\n padding-left: 0;\n user-select: inherit;\n -ms-user-select: inherit;\n -webkit-user-select: inherit;\n}\n\n.absol-selectmenu:not(.as-read-only) {\n cursor: pointer;\n}\n\n.absol-selectmenu.as-read-only .absol-selectlist-item span {\n user-select: inherit;\n -moz-user-select: inherit;\n -webkit-user-select: inherit;\n -ms-user-select: inherit;\n}\n\n\n.absol-selectmenu-btn {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n width: 30px;\n border: none;\n background: transparent;\n z-index: 2;\n pointer-events: none;\n}\n\n.absol-selectmenu-btn:focus {\n outline: none;\n}\n\n.absol-selectmenu-btn svg.dropdown {\n width: 10px;\n height: 10px;\n fill: #929292;\n}\n\n.absol-selectmenu.as-read-only svg.dropdown {\n display: none;\n}\n\n.absol-selectmenu:not(.as-read-only):hover svg.dropdown {\n width: 10px;\n height: 10px;\n fill: black;\n}\n\n.absol-selectmenu .absol-selectlist-item-text {\n display: inline-block;\n overflow: hidden;\n max-width: calc(var(--as-width-limit) - 30px);\n text-overflow: ellipsis;\n vertical-align: middle;\n\n}\n\n\n.absol-selectmenu-holder-item {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n /*1px for border*/\n white-space: nowrap;\n}\n\n.absol-selectmenu-holder-item::before {\n content: \"\";\n height: 100%;\n display: inline-block;\n vertical-align: middle;\n}\n\n\n.absol-selectmenu-holder-item > .absol-selectlist-item {\n display: inline-block;\n width: 100%;\n vertical-align: middle;\n}\n\n.absol-selectmenu .absol-selectlist-item-text {\n padding-right: 28px;\n}\n\n.absol-selectmenu .absol-scroll-button {\n background-color: rgba(0, 0, 0, 0.1);\n border-radius: 3px;\n}\n\n.absol-selectmenu .absol-scroll-button:hover {\n background-color: rgba(0, 0, 0, 0.2);\n}\n\n.absol-scroll-bar-v-container {\n width: 10px;\n}\n\n.absol-selectmenu .absol-search-text-input {\n margin: 4px;\n}\n\n.absol-selectmenu-render-space .absol-selectlist-item span {\n padding-right: 0;\n}\n\n\n.absol-selectmenu .absol-selectlist-item-desc-container {\n right: 30px;\n}\n\n\n.absol-selectmenu-dropdown-box .absol-bscroller {\n overflow-y: auto;\n}\n\n\n.as-select-anchor {\n position: fixed;\n z-index: 1000001;\n}\n\n\n.as-select-anchor.as-hidden {\n left: 0;\n top: 0;\n z-index: -1000;\n visibility: hidden;\n opacity: 0;\n}\n\n\n.as-select-menu {\n --select-list-estimate-width: 0px;\n --select-list-desc-width: 0px;\n width: calc(var(--select-list-estimate-width) + 32px);\n min-width: calc(var(--select-list-estimate-width) + 32px);\n}\n\n/***********************************************************************************************************************/\n\n.am-selectmenu-modal {\n z-index: 100005;\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n text-align: center;\n box-sizing: border-box;\n}\n\n.am-selectmenu-modal>div{\n display: inline-block;\n text-align: initial;\n}\n\n.am-selectmenu-popup-box {\n max-width: calc(100vw - 60px);\n -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n background-color: #ffffff;\n border-radius: 0.5em;\n font-family: Arial, Helvetica, sans-serif;\n}\n\n.am-selectmenu-popup-box-header{\n height: calc(2em + 10px);\n display: block;\n white-space: nowrap;\n box-sizing: border-box;\n padding-top: 5px;\n padding-bottom: 5px;\n padding-left: 10px;\n border-bottom: solid 1px #dddddd;\n background-color: rgba(169, 169, 169,0.2);\n}\n\n.am-selectmenu-popup-box-header .absol-search-text-input{\n display: inline-block;\n width: calc(100% - 2em - 25px);\n vertical-align: middle;\n box-sizing: border-box;\n background-color: white;\n}\n\n.am-selectmenu-popup-box-close-btn{\n display: inline-block;\n vertical-align: middle;\n border-radius:50%;\n padding: 0;\n height: 2em;\n width: 2em;\n font-size: inherit;\n border: none;\n outline: none;\n margin-right: 10px;\n background-color: rgb(255, 255, 255);\n color: rgb(190, 30, 30);\n}\n\n.am-selectmenu-popup-box-close-btn:active{\n color: red;\n}\n\n\n.am-selectmenu-popup-box-close-btn:before{\n content: \"\";\n display: inline-block;\n height: 2em;\n vertical-align: middle;\n}\n\n.am-selectmenu-popup-box-close-btn span{\n font-size: 1.5em;\n display: inline-block;\n vertical-align: middle;\n line-height: 1;\n}\n\n.am-selectmenu-scroller {\n max-height: calc(100vh - 140px);\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n.am-selectlist.am-selectmeu-list{\n min-width: 30vw;\n}\n\n.am-selectlist.am-selectmeu-list.as-searching{\n width: 100%;\n}\n\n.am-selectmenu-popup-box .absol-search-text-input{\n display: none;\n}\n\n\n.am-selectmenu-popup-box.am-enable-search .absol-search-text-input{\n display: inline-block;\n vertical-align: middle;\n}\n\n.am-selectmenu{\n white-space: nowrap;\n background: white;\n overflow: hidden;\n box-sizing: border-box;\n padding-right: 35px;\n max-width: 95vw;\n}\n\n.am-selectmenu.disabled .absol-selectmenu-btn{\n background-color: #ebebe4;\n}\n\n.am-selectmenu .absol-selectmenu-btn{\n background: white;\n}\n\n.am-selectmenu::before{\n content: \"\";\n height: 100%;\n vertical-align: middle;\n display: inline-block;\n}\n\n\n.am-selectmenu-holder-item{\n display: inline-table;\n vertical-align: middle;\n width: 100%;\n table-layout: auto;\n}\n\n.am-selectmenu-holder-item>.am-selectlist-item{\n display: table-row;\n}\n\n.am-selectmenu-holder-item .am-selectlist-item-text-ctn,\n.am-selectmenu-holder-item .am-selectlist-item-desc-ctn{\n display: table-cell;\n padding-left: 10px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: auto;\n}\n\n\n.am-selectmenu.disabled {\n pointer-events: none;\n background-color: #ebebe4;\n}", ""]); /***/ }), /* 181 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(182); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 182 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-select-list-box {\n --select-list-estimate-width: 0;\n --max-height: calc(100vh - 80px);\n --as-width-limit: 100vw;\n position: fixed;\n top: 10px;\n left: 10px;\n width: calc(var(--select-list-estimate-width) + 2px + 5px + 7px);\n font-size: 1rem;\n font-family: Arial, Helvetica, sans-serif;\n border: solid 1px rgb(100, 100, 255);\n box-sizing: border-box;\n background-color: white;\n display: inline-block;\n vertical-align: top;\n -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n outline: none;\n}\n\n.as-select-list-box.as-has-icon .absol-selectlist-item {\n height: calc(30rem / 14);\n line-height: calc(30rem / 14);\n}\n\n.as-select-list-box.as-enable-search {\n min-width: 10em;\n}\n\ndiv.absol-follower.as-select-list-box {\n z-index: 4000000;\n}\n\n.as-select-list-box .as-select-list-box {\n min-width: 100%;\n}\n\n.as-select-list-box-search-ctn {\n position: absolute;\n left: 0;\n right: 0;\n}\n\n.as-select-list-box.as-enable-search.as-anchor-6 .as-select-list-box-search-ctn,\n.as-select-list-box.as-enable-search.as-anchor-5 .as-select-list-box-search-ctn {\n bottom: 0;\n top: unset;\n}\n\n.as-select-list-box.as-enable-search.as-anchor-6,\n.as-select-list-box.as-enable-search.as-anchor-5 {\n padding-bottom: calc(2em + 10px);\n padding-top: 0;\n}\n\n.as-select-list-box.as-enable-search,\n.as-select-list-box.as-enable-search.as-anchor-1,\n.as-select-list-box.as-enable-search.as-anchor-2 {\n padding-top: calc(2em + 10px);\n}\n\n.as-select-list-box.as-enable-search .as-select-list-box-search-ctn,\n.as-select-list-box.as-enable-search.as-anchor-1 .as-select-list-box-search-ctn,\n.as-select-list-box.as-enable-search.as-anchor-2 .as-select-list-box-search-ctn {\n top: 0;\n bottom: unset;\n}\n\n.as-select-list-box-scroller {\n overflow-y: auto;\n overflow-x: visible;\n}\n\n.as-select-list-box .as-select-list-box-scroller {\n max-height: var(--max-height);\n}\n\n.as-select-list-box.as-enable-search .as-select-list-box-scroller {\n max-height: calc(var(--max-height) - 2em - 10px);\n}\n\n.as-select-list-box-content {\n position: relative;\n}\n\n.as-select-list-box-page {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n overflow: hidden;\n}\n\n.as-select-list-box .absol-selectlist-item {\n cursor: default;\n}\n\n.as-select-list-box .absol-selectlist-item-text {\n max-width: calc(var(--as-width-limit) - var(--select-list-desc-width) - 10px);\n display: inline-block;\n vertical-align: middle;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.as-select-list-box-search-ctn {\n display: none;\n padding: 5px;\n}\n\n\n.as-select-list-box.as-enable-search .as-select-list-box-search-ctn {\n display: block;\n}\n\n\n.as-select-list-box .as-last-in-group span {\n line-height: 19px;\n}\n\n\n.as-select-list-box .absol-selectlist-item:hover {\n background-color: #efefef;\n}\n\n.as-select-list-box.as-value-hidden .absol-selectlist-item.as-selected {\n color: #aaaaaa;\n}\n\n.as-select-list-box.as-value-hidden .absol-selectlist-item.as-selected.as-is-leaft {\n display: none;\n}\n\n\n/**********************************************************************************************************************/\n", ""]); /***/ }), /* 183 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-select-table-render-space {\n position: fixed;\n top: 0;\n left: 0;\n z-index: -1000;\n visibility: hidden;\n font-size: 14px;\n}\n\n.absol-select-table {\n border: solid 1px #a9a9a9;\n min-width: 26em;\n overflow: hidden;\n}\n\n.absol-select-table-header {\n display: block;\n position: relative;\n box-sizing: content-box;\n height: 2.2857142857em;\n}\n\n.absol-select-table-searchtextinput-container {\n position: absolute;\n left: 0.14285714285em;\n top: 0.14285714285em;\n height: 2em;\n right: 10em;\n /* background-color: cyan; */\n}\n\n.absol-select-table.disable-move-all .absol-select-table-buttons-container {\n display: none;\n}\n\n.absol-select-table.disable-move-all .absol-select-table-searchtextinput-container {\n right: 0.14285714285em !important;\n}\n\n.absol-select-table-buttons-container {\n position: absolute;\n right: 0.14285714285em;\n top: 0.14285714285em;\n width: 10.7142857143em;\n height: 2em;\n white-space: nowrap;\n}\n\n.absol-select-table-buttons-container>button {\n height: 2em;\n font-size: 1em;\n background-color: transparent;\n border: none;\n padding: 0 0.5em;\n margin: 0;\n text-decoration: underline;\n cursor: pointer;\n}\n\n.absol-select-table-buttons-container>button:focus {\n outline: none;\n}\n\n.absol-select-table-buttons-container>button:hover {\n color: #a9a9a9;\n}\n\n.absol-select-table-buttons-container>button:active {\n color: #a9a9ff;\n}\n\n.absol-select-table-body {\n margin: 0.14285714285em;\n white-space: nowrap;\n}\n\n.absol-select-table-items-scroller {\n width: 50%;\n display: inline-block;\n box-sizing: border-box;\n vertical-align: top;\n overflow-y: auto;\n}\n\n.absol-select-table-items-scroller .absol-scroll-button {\n background-color: rgba(1, 1, 30, 0.1);\n}\n\n.absol-select-table-items-scroller .absol-scroll-bar-v-container {\n width: 0.69em;\n}\n\n.absol-select-table-selected-search-items-container,\n.absol-select-table-nonselected-search-items-container,\n.absol-select-table.searching .absol-select-table-selected-items-container,\n.absol-select-table.searching .absol-select-table-nonselected-items-container {\n display: none;\n}\n\n.absol-select-table.searching .absol-select-table-selected-search-items-container,\n.absol-select-table.searching .absol-select-table-nonselected-search-items-container {\n display: block;\n padding-right: 0.7em;\n}\n\n.absol-select-table-nonselected-items-container,\n.absol-select-table-selected-items-container {\n padding-right: 0.7em;\n}\n\n.absol-select-table-nonselected-items-container>.absol-select-table-item,\n.absol-select-table-selected-items-container>.absol-select-table-item,\n.absol-select-table-nonselected-search-items-container>.absol-select-table-item,\n.absol-select-table-selected-search-items-container>.absol-select-table-item {\n margin: 0.14285714285em;\n}\n\n.absol-select-table-item {\n display: block;\n line-height: 2em;\n min-height: 2em;\n position: relative;\n background-color: rgba(169, 169, 169, 0.05);\n border: solid 1px rgb(235, 235, 235);\n border-radius: 0.2em;\n overflow: hidden;\n -webkit-user-select: none;\n /* Safari 3.1+ */\n -moz-user-select: none;\n /* Firefox 2+ */\n -ms-user-select: none;\n /* IE 10+ */\n user-select: none;\n /* Standard syntax */\n padding-left: 0.69em;\n padding-right: 1.8em;\n box-sizing: border-box;\n}\n\n.absol-select-table-item:hover {\n background-color: rgba(169, 169, 169, 0.1);\n}\n\n.absol-select-table-item-right-container {\n right: 0.3em;\n bottom: 0.3em;\n top: 0.3em;\n padding: 0.2em;\n width: 1.4em;\n position: absolute;\n border-radius: 0.2em;\n box-sizing: border-box;\n ;\n}\n\n.absol-select-table-item-right-container:hover {\n background-color: rgba(169, 169, 169, 0.3);\n}\n\nspan.absol-select-table-item-text {\n white-space: normal;\n \n}\n\n.absol-select-table-item-right-container-table{\n display: table;\n width: 100%;\n height: 100%;\n}\n.absol-select-table-item-right-container-cell{\n display: table-cell;\n vertical-align: middle;\n}\n\n.absol-select-table-item-right-container svg {\n width: 1em;\n height: 1em;\n display: none;\n}\n\n/* clearfix\n.absol-select-table-none-nonselected-items-container::after,\n.absol-select-table-none-selected-items-container::after {\n content: \"\";\n display:table;\n clear: both;\n} */\n\n.absol-select-table-selected-items-container .absol-select-table-item-right-container svg.sub-icon,\n.absol-select-table-selected-search-items-container .absol-select-table-item-right-container svg.sub-icon {\n display: block;\n stroke: rgb(243, 61, 61);\n fill: rgb(226, 100, 100);\n}\n\n.absol-select-table-nonselected-items-container .absol-select-table-item-right-container svg.add-icon,\n.absol-select-table-nonselected-search-items-container .absol-select-table-item-right-container svg.add-icon {\n display: block;\n fill: rgb(100, 226, 167);\n stroke: rgb(61, 185, 243);\n}\n\n.absol-select-table.portrait {}", ""]); /***/ }), /* 184 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(185); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 185 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-span-input {\n white-space: pre;\n}\n\n.absol-span-input:focus {\n outline-color: rgba(30, 150, 255, 0.3);\n outline-width: 1px;\n}\n\n.absol-span-input:empty::before {\n content: \" \";\n display: inline;\n white-space: pre;\n}\n\n.absol-span-input.absol-span-input-empty-minus:empty::before {\n content: \"-\";\n}", ""]); /***/ }), /* 186 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(187); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 187 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-static-tabbar {\n position: relative;\n}\n\n.absol-static-tabbar-button {\n height: 2em;\n background-color: transparent;\n border: none;\n font-size: 1em;\n padding-left: 0.5em;\n padding-right: 0.5em;\n color: rgb(104, 104, 104);\n}\n\n.absol-static-tabbar-button:hover {\n color: rgb(30, 30, 55);\n}\n\n.absol-static-tabbar-button.active {\n color: black;\n}\n\n.absol-static-tabbar-button:focus {\n outline: none;\n}\n\n.absol-static-tabbar-button>span {\n font-size: 0.7em;\n}\n\n.absol-static-tabbar-hline {\n border-bottom: solid 1px rgb(127, 127, 128);\n height: 100%;\n}\n\n.absol-static-tabbar-active-box {\n position: absolute;\n bottom: 0;\n top: 0;\n left: 0;\n width: 0;\n transition: left 0.15s, width 0.15s;\n padding-left: 0.5em;\n padding-right: 0.5em;\n box-sizing: border-box;\n /* z-index: 1; */\n}\n\n.absol-static-tabbar.dark .absol-static-tabbar-hline{\n border-bottom-color: white;\n}\n\n.absol-static-tabbar.dark .absol-static-tabbar-button.active{\n color: white;\n}\n\n.absol-static-tabbar.dark .absol-static-tabbar-button {\n color: rgb(204, 204, 204);\n}", ""]); /***/ }), /* 188 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(189); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 189 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-switch {\n position: relative;\n display: inline-block;\n width: 2.2em;\n height: 1.2em;\n vertical-align: middle;\n}\n\n.absol-switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.absol-switch:not(.as-read-only) .absol-switch-slider{\n cursor: pointer;\n}\n\n.absol-switch-slider {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n -webkit-transition: .4s;\n transition: .4s;\n border-radius: 0.6em;\n}\n\n.absol-switch-slider:before {\n position: absolute;\n content: \"\";\n height: 1em;\n width: 1em;\n left: 0.1em;\n bottom: 0.1em;\n background-color: white;\n -webkit-transition: .4s;\n transition: .4s;\n border-radius: 0.5em;\n}\n\ninput:checked+.absol-switch-slider {\n background-color: #2196F3;\n}\n\ninput:focus+.absol-switch-slider {\n box-shadow: 0 0 1px #2196F3;\n}\n\ninput:checked+.absol-switch-slider:before {\n -webkit-transform: translateX(1em);\n -ms-transform: translateX(1em);\n transform: translateX(1em);\n}\n\n/* Rounded absol-switch-sliders */\n.absol-switch.square .absol-switch-slider {\n border-radius: 0;\n}\n\n.absol-switch.square .absol-switch-slider:before {\n border-radius: 0;\n}\n\n.absol-switch.disabled {\n pointer-events: none;\n}\n\n.absol-switch.disabled .absol-switch-slider:before{\n background-color: rgb(234, 234, 234);\n}\n\n.absol-switch.disabled input:checked+.absol-switch-slider {\n background-color: rgb(141, 188, 226);\n}\n\n.absol-switch.disabled .absol-switch-slider {\n background-color: rgb(171, 171, 171);\n}\n\n", ""]); /***/ }), /* 190 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(191); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 191 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-table-scroller .absol-table-scroller-viewport {\n width: calc(100% + var(--scrollbar-width));\n height: calc(100% + var(--scrollbar-width));\n}\n\n.absol-table-scroller .absol-table-scroller-header-hscroller-viewport {\n margin-bottom: calc(0px - var(--scrollbar-width))\n}\n\n\n.absol-table-scroller {\n --scrollbar-width: 17px;\n --new-pos-y: 0;\n position: relative;\n padding-right: 17px;\n padding-bottom: 17px;\n}\n\n.absol-table-scroller:not(.as-scroll-vertical) {\n padding-right: 0;\n}\n\n\n.absol-table-scroller:not(.as-scroll-horizontal) {\n padding-bottom: 0;\n}\n\n\n.as-table-scroller-vertical-scroller {\n overflow-y: scroll;\n height: 100%;\n box-sizing: border-box;\n margin-right: calc(0px - var(--scrollbar-width));\n}\n\n.as-table-scroller-fixed-y-header-ctn {\n position: absolute;\n z-index: 4;\n top: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n}\n\n.as-table-scroller-fixed-x-col-ctn {\n position: absolute;\n z-index: 5;\n top: 0;\n left: 0;\n overflow: hidden;\n}\n\n.as-table-scroller-fixed-xy-header-ctn {\n position: absolute;\n z-index: 12;\n top: 0;\n left: 0;\n overflow: hidden;\n}\n\n.as-table-scroller-fixed-y-header-scroller {\n overflow-x: scroll;\n margin-bottom: calc(var(--scrollbar-width) * -1);\n}\n\n\n.as-table-scroller-horizontal-scroller-viewport {\n overflow: hidden;\n position: relative;\n}\n\n.as-table-scroller-horizontal-scroller {\n overflow-x: scroll;\n width: 100%;\n box-sizing: border-box;\n margin-bottom: calc(var(--scrollbar-width) * -1);\n}\n\n.absol-table-scroller-content {\n position: relative;\n overflow: hidden;\n width: 100%;\n height: 100%;\n}\n\n.absol-table-scroller-render-space {\n position: fixed;\n overflow: scroll;\n left: 0;\n top: 0;\n max-width: calc(99vw - 30px);\n max-height: calc(99vh - 30px);\n opacity: 0;\n z-index: -1000;\n visibility: hidden;\n}\n\n\n.absol-table-scroller-viewport {\n box-sizing: border-box;\n overflow: scroll;\n width: calc(100% + 17px);\n height: calc(100% + 17px);\n background-color: white;\n}\n\n.absol-table-scroller-fixed-viewport {\n position: absolute;\n left: 0;\n top: 0;\n z-index: 10;\n overflow: hidden;\n background-color: white;\n /*pointer-events: none;*/\n}\n\n.absol-table-scroller-fixed-viewport > table > thead,\n.absol-table-scroller-fixed-viewport > table {\n /*border-top-color: transparent !important;*/\n}\n\n.absol-table-scroller-fixed-hidden {\n visibility: hidden !important;\n opacity: 0 !important;\n border-color: transparent !important;\n\n}\n\n.absol-table-scroller-header-hscroller {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n z-index: 9;\n overflow: hidden;\n /*pointer-events: none;*/\n}\n\n.absol-table-scroller-header-hscroller-viewport {\n max-width: 100%;\n overflow-x: scroll;\n margin-bottom: -17px; /*default*/\n background-color: white;\n}\n\n.absol-table-scroller-header-hscroller-viewport table {\n table-layout: fixed;\n}\n\n\n.absol-table-scroller-left-vscroller {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n z-index: 7;\n /* width: 200px; */\n overflow-x: hidden;\n /*pointer-events: none;*/\n}\n\n.absol-table-scroller-left-vscroller-viewport {\n max-height: 100%;\n overflow-y: scroll;\n min-width: calc(100% + 19px);\n overflow-x: hidden;\n background-color: white;\n}\n\n\n.absol-table-scroller-head-line,\n.absol-table-scroller-left-line {\n z-index: 30;\n /*pointer-events: none;*/\n position: absolute;\n}\n\n.absol-table-scroller-head-line {\n left: 0;\n border-bottom: solid 2px rgb(169, 169, 170);\n width: 100%;\n}\n\n.absol-table-scroller-left-line {\n top: 0;\n border-right: solid 2px rgb(169, 169, 170);\n height: 100%;\n}\n\n\n.absol-table-scroller.as-scroll-vertical .absol-table-scroller-head-line {\n width: 100%;\n}\n\n.absol-table-scroller.as-scroll-horizontal .absol-table-scroller-left-line {\n height: 100%;\n}\n\n\n.absol-table-scroller:not(.as-scroll-vertical) .absol-table-scroller-head-line {\n display: none;\n}\n\n.absol-table-scroller:not(.as-scroll-horizontal) .absol-table-scroller-left-line {\n display: none;\n}\n\n\n.absol-table-scroller-vscrollbar-container {\n position: absolute;\n top: 0;\n right: 0px;\n width: 17px;\n bottom: 0;\n z-index: 31;\n}\n\n.absol-table-scroller-vscrollbar-container .absol-scrollbar-button {\n left: 1px;\n right: 1px;\n}\n\n\n.absol-table-scroller-vscrollbar-container > div,\n.absol-table-scroller-hscrollbar-container > div {\n width: 100%;\n height: 100%;\n}\n\n.absol-table-scroller-hscrollbar-container {\n position: absolute;\n left: 0;\n right: 0;\n height: 17px;\n bottom: 0;\n z-index: 31;\n}\n\n\n.absol-table-scroller-hscrollbar-container .absol-scrollbar-button {\n top: 1px;\n bottom: 1px;\n}\n\n\n.absol-table-scroller:not(.as-scroll-vertical) .absol-table-scroller-vscrollbar-container {\n display: none;\n}\n\n.absol-table-scroller:not(.as-scroll-horizontal) .absol-table-scroller-hscrollbar-container {\n display: none;\n}\n\n\n.absol-table-scroller.as-scroll-horizontal .absol-table-scroller-vscrollbar-container {\n bottom: 17px;\n}\n\n.absol-table-scroller.as-scroll-vertical .absol-table-scroller-hscrollbar-container {\n right: 17px;\n}\n\n.absol-table-scroller-fixed-table {\n table-layout: fixed;\n box-sizing: border-box;\n\n}\n\n.absol-table-scroller-fixed-table *,\n.absol-table-scroller-header-hscroller * {\n box-sizing: border-box;\n}\n\n.absol-table-scroller .as-drag-zone {\n cursor: move;\n}\n\n\n.absol-table-scroller tr.as-dragging {\n position: relative;\n z-index: 1;\n -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n opacity: 0.8;\n}\n\n.absol-table-scroller td.as-transparent-fix {\n visibility: hidden;\n opacity: 0;\n}\n\n.absol-table-scroller.as-dragging tbody tr:not(.as-dragging) {\n transition: transform 0.1s;\n}\n\n\n.absol-table-scroller-viewport thead .as-rotated-text-anchor,\n.absol-table-scroller-fixed-viewport thead .as-rotated-text-anchor,\n.absol-table-scroller-left-vscroller thead .as-rotated-text-anchor {\n display: none;\n}\n\n.absol-table-scroller .as-rotated-text-anchor {\n white-space: nowrap;\n}\n\n\n.as-table-scroller-row-index::before {\n content: attr(data-idx);\n}\n\n/*.absol-table-scroller.as-has-new-pos.as-dragging::before {*/\n/* content: \"\";*/\n/* position: absolute;*/\n/* left: 0;*/\n/* top: var(--new-pos-y);*/\n/* right: 0;*/\n/* border-top: 2px solid blue;*/\n/* z-index: 8;*/\n/* transition: top 0.1s;*/\n/*}*/\n\n", ""]); /***/ }), /* 192 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(193); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 193 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-table-vscroller {\n position: relative;\n --tvs-scroll-padding-bottom: 1px;\n}\n\n.absol-table-vscroller-head {\n position: absolute;\n z-index: 2;\n width: 300px;\n height: 20px;\n top: 0;\n left: 0;\n}\n\n.absol-table-vscroller-head-line{\n position: absolute;\n left: 0;\n z-index: 3;\n pointer-events: none;\n border-bottom:solid 2px rgb(169, 169, 170); \n width: 100%;\n}\n\n.absol-table-vscroller.scroll-v .absol-table-vscroller-head-line{\n width: calc(100% - 7px);\n}\n\n.absol-table-vscroller-viewport {\n max-height: 100%;\n padding-bottom: var(--tvs-scroll-padding-bottom);\n padding-top: 1px;\n overflow-y: auto;\n}\n\n.absol-table-vscroller-viewport > table{\n box-sizing: border-box;\n width: 100%;\n}", ""]); /***/ }), /* 194 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(195); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 195 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-textarea2 {\n overflow: hidden;\n resize: none;\n box-sizing: border-box;\n --content-height: 1.425em;\n height: var(--content-height);\n font: inherit;\n}\n\n.absol-textarea2.as-border-none {\n border: none;\n outline: none;\n}\n\n.absol-textarea2:disabled {\n background-color: var(--as-disabled-background-color);\n}", ""]); /***/ }), /* 196 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(197); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 197 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-text-clipboard {\n opacity: 0;\n font-size: 1px;\n height: 1px;\n width: 1px;\n}", ""]); /***/ }), /* 198 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(199); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 199 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".ac-time-input {\n box-sizing: border-box;\n height: calc(2em + 2px);\n width: 9em;\n border: solid 1px #d6d6d6;\n border-radius: 2px;\n font-size: 1rem;\n outline: none;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n display: inline-block;\n vertical-align: middle;\n background-color: white;\n position: relative;\n}\n\n.ac-time-input.as-disabled {\n color: rgb(102, 102, 102);\n pointer-events: none;\n}\n\n.ac-time-input.as-must-not-null .as-time-input-clear-btn {\n display: none;\n}\n\n.ac-time-input.as-read-only.as-border-none {\n border: none;\n}\n\n.ac-time-input.as-read-only.as-border-none .as-time-input-icon-btn {\n display: none;\n}\n\n.ac-time-input.as-read-only.as-border-none input {\n padding-left: 0;\n}\n\n.ac-time-input input {\n font: inherit;\n outline: none;\n width: calc(100% - 2em - 2px);\n height: 100%;\n border: none;\n display: block;\n padding: 0 0 0 var(--as-input-horizontal-padding);\n -webkit-user-select: auto;\n user-select: auto;\n -webkit-user-drag: none;\n color: inherit;\n box-sizing: border-box;\n background-color: transparent;\n}\n\n.ac-time-input.as-disabled {\n background-color: var(--as-disabled-background-color);\n}\n\n.as-time-input-icon-btn {\n border-right: none;\n border-top: none;\n border-bottom: none;\n border-left: 1px solid #ddd;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n width: calc(2em + 1px);\n box-sizing: border-box;\n background-color: rgba(169, 169, 169, 0.1);\n cursor: pointer;\n border-radius: 0;\n font-size: inherit;\n color: inherit;\n}\n\n.ac-time-input.as-read-only .as-time-input-icon-btn {\n pointer-events: none;\n}\n\n\n.as-time-input-icon-btn > span {\n font-size: calc(16em / 14);\n}\n\n\n.as-time-input-icon-btn:hover {\n background-color: rgba(169, 169, 169, 0.25);\n}\n\n.as-time-input-icon-btn:active {\n background-color: rgba(169, 169, 169, 0.5);\n}\n\n\n.as-time-input-icon-btn.as-disabled {\n color: rgb(102, 102, 102);\n pointer-events: none;\n}\n\n\n.as-time-input-clear-btn {\n font-size: inherit;\n position: absolute;\n right: calc(2em + 2px);\n height: 2em;\n top: calc(50% - 1em);\n box-sizing: border-box;\n background-color: transparent;\n border: none;\n color: #bbb;\n visibility: hidden;\n}\n\n\n.ac-time-input.as-value-null .as-time-input-clear-btn {\n display: none;\n}\n\n.as-time-input-clear-btn:hover {\n color: rgb(132, 132, 132);\n}\n\n.as-time-input-clear-btn:active {\n color: #525555;\n}\n\ninput:focus + .as-time-input-clear-btn,\n.ac-time-input .as-time-input-clear-btn {\n visibility: visible;\n}\n\n.as-dropdown-box-common-style .as-time-input-picker {\n border: none;\n box-shadow: none;\n}\n\n\n/*.ac-time-input-picker-ctn {*/\n/* position: fixed;*/\n/*}*/\n\n/*.ac-time-input > span {*/\n/* font-size: 1em;*/\n/* line-height: 2em;*/\n/*}*/\n\n/*.ac-time-input-picker-ctn-hidden {*/\n/* z-index: -1000;*/\n/* opacity: 0;*/\n/* visibility: hidden;*/\n/*}*/\n\n/*.ac-time-input-picker-ctn-hidden:not(.absol-follower) {*/\n/* transition: all 0.1s;*/\n/*}*/\n\n/*.ac-time-input.as-disabled {*/\n/* color: rgb(102, 102, 102);*/\n/* pointer-events: none;*/\n/*}*/", ""]); /***/ }), /* 200 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(201); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 201 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".ac-time-picker {\n /*like chrome-calender*/\n display: inline-block;\n font-family: Arial, Helvetica, sans-serif;\n font-size: 1rem;\n padding: 0.6em;\n border: solid 1px rgb(191, 191, 191);\n box-shadow: 1px 1px 2px rgb(240, 240, 240);\n z-index: 100;\n touch-action: manipulation;\n user-select: none;\n background-color: rgb(255, 255, 255);\n white-space: initial;\n}\n\n\n@media screen and (orientation: portrait) {\n .ac-time-picker.ac-time-picker-touch {\n font-size: 5vw;\n }\n}\n\n@media screen and (orientation: landscape) {\n .ac-time-picker.ac-time-picker-touch {\n font-size: 4vh;\n }\n}\n\n\n.ac-time-picker:not(.ac-time-picker-clock-mode) .ac-time-picker-set-clock,\n.ac-time-picker:not(.ac-time-picker-clock-mode) .ac-time-picker-keyboard-btn,\n.ac-time-picker:not(.ac-time-picker-touch) .ac-time-picker-keyboard-btn,\n.ac-time-picker:not(.ac-time-picker-time-mode) .ac-time-picker-set-time,\n.ac-time-picker:not(.ac-time-picker-time-mode) .ac-time-picker-clock-btn {\n display: none;\n}\n\n.ac-time-picker-set-clock-header {\n font-size: 2.8em;\n text-align: center;\n min-width: 4.28571428571em;\n font-weight: bold;\n\n}\n\n.ac-time-picker-set-clock-header > span {\n font-size: inherit;\n}\n\n.ac-time-picker-clock {\n width: 12em;\n height: 12em;\n}\n\n.ac-time-picker-clock-hour-pm {\n fill: rgb(20, 20, 20);\n font-size: 0.7em;\n}\n\n\n.ac-time-picker-clock-hour-am {\n fill: black;\n font-size: 0.8em;\n}\n\n.ac-time-picker-clock-minute {\n fill: black;\n font-size: 0.8em;\n}\n\n\n.ac-time-picker-clock-center,\n.ac-time-picker-clock-select-circle {\n fill: rgb(115, 166, 248);\n}\n\n.ac-time-picker-clock-select-center {\n fill: white;\n}\n\n.ac-time-picker-clock-select-line {\n stroke-width: 1;\n stroke: rgb(115, 166, 248);\n}\n\n\n.ac-time-picker-hour,\n.ac-time-picker-minute {\n outline: none;\n}\n\n.ac-time-picker-edit-hour .ac-time-picker-hour,\n.ac-time-picker-edit-minute .ac-time-picker-minute {\n color: rgb(62, 125, 189);\n}\n\n.ac-time-picker:not(.ac-time-picker-edit-hour) .ac-time-picker-clock-hour-ctn,\n.ac-time-picker:not(.ac-time-picker-edit-minute) .ac-time-picker-clock-minute-ctn {\n visibility: hidden;\n}\n\n.ac-time-picker:not(.ac-time-picker-edit-hour):not(.ac-time-picker-edit-minute) .ac-time-picker-clock {\n display: none;\n}\n\n.ac-time-picker-hour:empty::before,\n.ac-time-picker-minute:empty::before {\n content: \"0\";\n display: inline;\n}\n\n.ac-time-picker-footer {\n display: block;\n position: relative;\n min-height: 1.5em;\n min-width: 12em;\n}\n\n.ac-time-picker-footer-right {\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.ac-time-picker-footer button {\n font-size: 1em;\n height: 1.5em;\n padding-top: 0;\n padding-bottom: 0;\n border: none;\n background-color: transparent;\n outline: none;\n padding-left: 0.3em;\n padding-right: 0.3em;\n}\n\n.ac-time-picker-footer button:hover,\n.ac-time-picker-footer button:focus {\n background-color: rgba(170, 170, 170, 0.3);\n}\n\n.ac-time-picker-footer > button {\n margin-right: 1em;\n}\n\n.ac-time-picker-footer-right > button {\n margin-left: 1em;\n}\n\n\n.ac-time-picker-footer button .mdi {\n font-size: 1.3em;\n}\n\n\n/* .ac-time-picker:not(.ac-time-picker-touch) .ac-time-picker-keyboard-btn {\n display: none;\n} */\n\n/* keyboard-outline */\n\n.ac-time-picker-set-time-header {\n font-size: 1.4em;\n font-weight: bold;\n margin-bottom: 1em;\n}\n\n.ac-time-picker-set-time-label {\n font-size: 1em;\n font-weight: bold;\n margin-bottom: 0.3em;\n}\n\n.ac-time-picker-set-time-input-group {\n margin-bottom: 0.3em;\n font-size: 1em;\n white-space: nowrap;\n}\n\n.ac-time-picker-set-time-input-hm > input {\n height: 1.2em;\n line-height: 1.2em;\n width: 2em;\n text-align: center;\n font-size: 1em;\n border-top: none;\n border-left: none;\n border-right: none;\n border-bottom: 1px solid rgb(70, 70, 72);\n outline: none;\n}\n\n.ac-time-picker-set-time-input-label-hm {\n font-size: 1em;\n white-space: nowrap;\n\n}\n\n.ac-time-picker-set-time-input-label-hm span {\n display: inline-block;\n vertical-align: middle;\n font-size: 1em;\n\n}\n\n\n.ac-time-picker-set-time-input-label-hm > span:first-child {\n width: 2em;\n}", ""]); /***/ }), /* 202 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(203); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 203 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ":root {\n --tool-tip-arrow-pos: 50%;\n --tool-tip-background-color: gray;\n --tool-tip-text-color: white;\n}\n\n.absol-tooltip {\n margin: 0;\n position: relative;\n box-sizing: border-box;\n display: inline-block;\n color: var(--tool-tip-text-color);\n}\n\n.absol-tooltip-content {\n display: block;\n border-radius: 0.25em;\n background-color: var(--tool-tip-background-color);\n padding: 0.25em 0.5em;\n font-size: inherit;\n}\n\n\n.absol-tooltip-arrow {\n width: 0;\n height: 0;\n position: absolute;\n box-sizing: content-box;\n font-size: inherit;\n}\n\n.absol-tooltip.top .absol-tooltip-arrow {\n border-left: 0.4em solid transparent;\n border-right: 0.3em solid transparent;\n\n border-top: 0.3em solid var(--tool-tip-background-color);\n bottom: 0;\n left: calc(var(--tool-tip-arrow-pos) - 0.3em);\n}\n\n\n.absol-tooltip.top {\n padding-bottom: 0.3em;\n}\n\n\n.absol-tooltip.bottom .absol-tooltip-arrow {\n border-left: 0.3em solid transparent;\n border-right: 0.4em solid transparent;\n border-bottom: 0.3em solid var(--tool-tip-background-color);\n\n top: 0;\n left: calc(var(--tool-tip-arrow-pos) - 0.3em);\n}\n\n.absol-tooltip.bottom {\n padding-top: 0.3em;\n}\n\n\n.absol-tooltip.left .absol-tooltip-arrow {\n border-top: 0.3em solid transparent;\n border-bottom: 0.4em solid transparent;\n border-left: 0.4em solid var(--tool-tip-background-color);\n\n right: 0;\n top: calc(var(--tool-tip-arrow-pos) - 0.3em);\n}\n\n.absol-tooltip.left {\n padding-right: 0.4em;\n}\n\n\n.absol-tooltip.right .absol-tooltip-arrow {\n border-top: 0.4em solid transparent;\n border-bottom: 0.4em solid transparent;\n border-right: 0.4em solid var(--tool-tip-background-color);\n\n left: 0;\n top: calc(var(--tool-tip-arrow-pos) - 0.3em);\n}\n\n.absol-tooltip.ne .absol-tooltip-arrow {\n border-top: 0.3em solid transparent;\n border-bottom: 0.4em solid transparent;\n border-left: 0.4em solid var(--tool-tip-background-color);\n bottom: -0.3em;\n left: 0;\n}\n\n.absol-tooltip.nw .absol-tooltip-arrow {\n border-top: 0.3em solid transparent;\n border-bottom: 0.4em solid transparent;\n border-right: 0.4em solid var(--tool-tip-background-color);\n bottom: -0.3em;\n right: 0;\n}\n\n.absol-tooltip.se .absol-tooltip-arrow {\n border-top: 0.3em solid transparent;\n border-bottom: 0.4em solid transparent;\n border-left: 0.4em solid var(--tool-tip-background-color);\n top: -0.3em;\n left: 0;\n}\n\n.absol-tooltip.sw .absol-tooltip-arrow {\n border-top: 0.3em solid transparent;\n border-bottom: 0.4em solid transparent;\n border-right: 0.4em solid var(--tool-tip-background-color);\n top: -0.25em;\n right: 0;\n}\n\n.absol-tooltip.right {\n padding-left: 0.4em;\n}\n\n\n.absol-tooltip-root {\n position: relative;\n width: 0;\n height: 0;\n}\n\n.absol-tooltip-root-holder {\n position: fixed;\n z-index: 100000000;\n left: 0;\n top: 0;\n}\n\n.as-copyable-icon-tooltip {\n font-size: inherit;\n display: inline-block;\n vertical-align: middle;\n color: #428bca;\n border: none;\n padding: 0;\n margin: 0;\n background-color: transparent;\n}\n\n.as-copyable-icon-tooltip:hover {\n background-color: var(--as-transparent-button-hover-color);\n}\n\n.as-copyable-icon-tooltip:active {\n background-color: var(--as-transparent-button-active-color);\n}\n\n.as-cit-icon {\n font-size: inherit;\n color: inherit;\n display: block;\n}\n\n.as-cit-icon::before {\n display: block;\n}\n", ""]); /***/ }), /* 204 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-tree-list {}\n\n.absol-tree-list-item {}\n\n.absol-tree-list-item-parent:hover {\n background: #efefef;\n cursor: pointer;\n}\n\n.absol-tree-list-item-parent {\n padding-left: 0.3em;\n padding-right: 0.6em;\n position: relative;\n}\n\n.absol-tree-list-item.active>.absol-tree-list-item-parent {\n background: #dfdfdf;\n}\n\n.absol-tree-list-item-parent>span {\n line-height: 20px;\n white-space: nowrap;\n}\n\n.absol-tree-list-item-child {}\n\n.absol-tree-list-item>.absol-tree-list-item-child:empty {\n display: none;\n}\n\n.absol-tree-list-item-desc-container {\n right: 0.3em;\n top: 0;\n bottom: 0;\n position: absolute;\n}\n\n.absol-tree-list-item-desc {\n font-style: italic;\n line-height: 20px;\n white-space: nowrap;\n margin-left: 1em;\n color: rgb(37, 37, 37);\n}\n\n.absol-tree-list-item-desc:empty {\n display: none;\n}", ""]); /***/ }), /* 205 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-selecttreemenu .absol-tree-list-item-desc-container{\n right: 30px;\n}\n\n\n.absol-selectmenu-holder-item .absol-tree-list-item-parent:hover {\n background-color: transparent;\n}\n\n.am-select-tree-menu {\n max-width: var(--as-width-limit);\n}", ""]); /***/ }), /* 206 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(207); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 207 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-width-height-resizer {\n position: relative;\n box-sizing: border-box;\n}\n\n.absol-width-height-resizer-anchor-bot-right {\n cursor: nwse-resize;\n position: absolute;\n z-index: 1;\n right: 0;\n bottom: 0;\n height: 13px;\n width: 13px;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAQUlEQVQoz2NgIBGkpaX9Z2IgA9BWU1pa2n+S/UGSZnRFBDVhU4BXEy4bcGrC5ySsmgj5AUMTMZ4mOehhmhjJ0QkA9TYwPsqIBKMAAAAASUVORK5CYII=');\n}\n\n.absol-width-height-resizer-anchor-bot-left {\n cursor: nesw-resize;\n position: absolute;\n z-index: 1;\n left: 0;\n bottom: 0;\n height: 13px;\n width: 13px;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABCSURBVChTY0hLS/vPQCJggtIkAco0keRMZMVEa0RXSJRGbIoIaoQpIMlGZEmiNRJSiFUjNkGCGrGaRAAwkq6JgQEAnaEwPtyU/MEAAAAASUVORK5CYII=');\n}\n\n.absol-width-height-resizer-anchor-top-right {\n cursor: nesw-resize;\n position: absolute;\n z-index: 1;\n right: 0;\n top: 0;\n height: 13px;\n width: 13px;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABMSURBVChTY0xLS/vPQGsAsoQJygYDdFuJdgUhjTgNwqcQpyYQwKURryYQwKaAoCYQwGUjQYCskGhNIABTTJImGABpQolcYgEZmhgYAEPpMD56IPESAAAAAElFTkSuQmCC')\n}\n\n.absol-width-height-resizer-anchor-top-left {\n cursor: nwse-resize;\n position: absolute;\n z-index: 1;\n top: 0;\n left: 0;\n height: 13px;\n width: 13px;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABNSURBVChTnZFbCgAgCAStw3r/GxQLClaSj/kJckcFBzMvqtKRprwHd6OncRRwN7GfKQFoIS0Ar/gVQGmCYkMpAWgwLYBSWHCPG9GQiDbsRTA+Srvt5gAAAABJRU5ErkJggg==');\n}\n\n.absol-width-height-resizer-content {\n width: 100%;\n height: 100%;\n overflow: auto;\n}\n\n/* .absol-width-height-resizer */", ""]); /***/ }), /* 208 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(209); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 209 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-trackbar {\n height: 1.2em;\n min-width: 7em;\n display: inline-block;\n vertical-align: middle;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n padding: 0 0.6em;\n box-sizing: border-box;\n}\n\n.absol-trackbar-line {\n display: block;\n position: relative;\n margin-top: 0.4em;\n height: 0.4em;\n background-color: rgb(200, 200, 200);\n -webkit-box-shadow: 0 0 0.2em 0.1em rgb(160, 160, 160) inset;\n -moz-box-shadow: 0 0 0.2em 0.1em rgb(160, 160, 160) inset;\n box-shadow: 0 0 0.2em 0.1em rgb(160, 160, 160) inset;\n border-radius: 0.15em;\n}\n\n.absol-trackbar-button {\n position: absolute;\n z-index: 1;\n top: -0.4em;\n /* bottom: -0.4em; */\n height: 1.2em;\n left: 0;\n margin-left: -0.6em;\n width: 1.2em;\n background: rgb(245, 245, 245);\n border-radius: 50%;\n border: solid 1px rgb(139, 139, 139);\n}\n\n.absol-trackbar:not(.as-read-only) .absol-trackbar-button,\n.absol-trackbar:not(.as-read-only) .absol-trackbar-line {\n cursor: pointer;\n}\n\n.absol-trackbar.as-disabled {\n pointer-events: none;\n}\n\n.absol-trackbar.as-disabled .absol-trackbar-button {\n background: rgb(225, 225, 225);\n border: solid 1px rgb(200, 200, 200);\n}\n\n.absol-trackbar.as-disabled .absol-trackbar-line {\n background-color: rgb(220, 220, 220);\n -webkit-box-shadow: 0 0 0.2em 0.1em rgb(200, 200, 200) inset;\n -moz-box-shadow: 0 0 0.2em 0.1em rgb(200, 200, 200) inset;\n box-shadow: 0 0 0.2em 0.1em rgb(200, 200, 200) inset;\n}", ""]); /***/ }), /* 210 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(211); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 211 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-trackbar-input {\n box-sizing: border-box;\n display: inline-block;\n white-space: nowrap;\n position: relative;\n min-width: 13.5em;\n height: 2em;\n --input-width: 4em;\n font-size: 1rem;\n}\n\n.absol-trackbar-input::after {\n content: \"\";\n vertical-align: middle;\n height: 100%;\n}\n\n.absol-trackbar-input > .absol-trackbar {\n display: inline-block;\n vertical-align: middle;\n width: calc(100% - var(--input-width) - 5px);\n}\n\n\n.absol-trackbar-input > .as-flexicon-input {\n width: var(--input-width);\n vertical-align: middle;\n height: 2em;\n box-sizing: border-box;\n margin-left: 5px;\n}\n\n.absol-trackbar-input.as-disabled {\n pointer-events: none;\n color: #777777;\n\n}\n\n.absol-trackbar-input input {\n color: inherit;\n font-size: inherit;\n}\n\n.absol-trackbar-input.as-border-none .as-flexicon-input {\n border: none;\n}", ""]); /***/ }), /* 212 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(213); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 213 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-button-range-wrapper {\n border-top: 1px solid rgb(209, 209, 213);\n border-bottom: 1px solid rgb(209, 209, 213);\n}\n\n.as-button-range {\n position: relative;\n overflow-y: hidden;\n height: var(--height);\n box-sizing: border-box;\n font-family: Arial, Helvetica, sans-serif;\n --underline-left: 0;\n --underline-width: 0;\n --height: 2em;\n}\n\n.as-button-range-scroller {\n font-size: inherit;\n height: calc(var(--height) + 17px);\n box-sizing: border-box;\n overflow-x: scroll;\n position: absolute;\n top: 0;\n left: 0.5em;\n right: 0.5em;\n white-space: nowrap;\n}\n\n.as-button-range-scroller::after {\n content: \"\";\n position: absolute;\n left: var(--underline-left);\n width: var(--underline-width);\n height: 0.2em;\n top: calc(var(--height) - 0.2em);\n background-color: rgb(0, 106, 255);\n transition: left 0.2s, width 0.2s;\n}\n\n.as-button-range-left-ctn,\n.as-button-range-right-ctn {\n position: absolute;\n top: 0;\n bottom: 0;\n}\n\n.as-button-range-right-ctn::after,\n.as-button-range-left-ctn::before {\n content: \"\";\n height: 100%;\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-button-range-left-ctn {\n left: 0;\n}\n\n.as-button-range-right-ctn {\n right: 0;\n}\n\n.as-button-range-right-btn,\n.as-button-range-left-btn {\n font-size: inherit;\n padding: 0;\n margin: 0;\n display: inline-block;\n vertical-align: middle;\n border: none;\n outline: none;\n color: rgb(0, 106, 266);\n background-color: rgba(255, 255, 255, 0.5);\n border-radius: 0.5em;\n overflow: hidden;\n}\n\n.as-button-range-left-btn {\n -webkit-box-shadow: 1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n -moz-box-shadow: 1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n box-shadow: 1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n}\n\n.as-button-range-right-btn {\n -webkit-box-shadow: -1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n -moz-box-shadow: -1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n box-shadow: -1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n}\n\n.as-button-range-right-btn polygon,\n.as-button-range-left-btn polygon {\n fill: #2488FF;\n}\n\n.as-button-range-right-btn:disabled,\n.as-button-range-left-btn:disabled {\n display: none;\n}\n\n.as-button-range-left-btn > svg,\n.as-button-range-right-btn > svg {\n width: 1.25em;\n height: 1.25em;\n margin-left: -0.25em;\n margin-right: -0.25em;\n vertical-align: middle;\n}\n\n\n.as-button-range-item {\n outline: none;\n font-size: inherit;\n padding: 0 0.5em;\n margin: 0;\n height: var(--height);\n border: none;\n background-color: transparent;\n color: black;\n}\n\n.as-button-range-item.as-active {\n color: rgb(87, 157, 255);\n}", ""]); /***/ }), /* 214 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(215); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 215 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-drop-zone {\n}", ""]); /***/ }), /* 216 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(217); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 217 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "label.as-radio-input {\n display: inline-block;\n position: relative;\n width: calc(1em + 2px);\n height: calc(1em + 2px);\n cursor: pointer;\n font-size: inherit;\n box-sizing: border-box;\n overflow: hidden;\n vertical-align: middle;\n border-radius: 50%;\n border: 1px solid var(--candy-border-color);\n text-align: center;\n background-color: white;\n text-align: center;\n white-space: nowrap;\n}\n\nlabel.as-radio-input:hover {\n background-color: var(--candy-hover-background-color);\n}\n\nlabel.as-radio-input::after{\n content: \"\";\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n}\n\n.as-radio-input .as-radio-input-check-mark {\n display: inline-block;\n vertical-align: middle;\n width: 0.5em;\n height: 0.5em;\n background-color: #606060;\n font-size: inherit;\n border-radius: 50%;\n}\n\n.as-radio-input input.as-radio-input-value {\n font-size: inherit;\n position: absolute;\n right: 100%;\n top: 0;\n opacity: 0.0;\n}\n\ninput.as-radio-input-value:not(:checked) ~ .as-radio-input-check-mark {\n display: none;\n}\n\n\nlabel.as-radio-input.as-disabled,\nlabel.as-radio-input.as-disabled:hover {\n border-color: #929292;\n background-color: #ebebe4;\n}", ""]); /***/ }), /* 218 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(219); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 219 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-onscreen-widget {\n --client-width: 0px;\n --client-height: 0px;\n --cx: 0.9;\n --cy: 0.9;\n position: fixed;\n z-index: 1000000;\n left: calc((100vw - var(--client-width) - 4px) * var(--cx) + 2px);\n top: calc((100vh - var(--client-height) - 4px) * var(--cy) + 2px);\n touch-action: none;\n user-select: none;\n}\n\n.as-onscreen-widget.as-size-loading {\n visibility: hidden;\n}", ""]); /***/ }), /* 220 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(221); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 221 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-ribbon-split-button {\n display: inline-block;\n vertical-align: middle;\n height: calc(2em + 2px);\n font-family: Arial, Helvetica, sans-serif;\n box-sizing: border-box;\n font-size: 1rem;\n}\n\n.as-ribbon-split-button div,\n.as-ribbon-split-button span,\n.as-ribbon-split-button button {\n font-weight: inherit;\n font-size: inherit;\n}\n\n\n.as-ribbon-split-button-content {\n height: 100%;\n}\n\n.as-ribbon-split-button-content > button {\n font-family: inherit;\n border-radius: 0;\n background-color: transparent;\n height: 100%;\n margin-right: 0;\n outline: none;\n box-sizing: border-box;\n border-style: solid;\n border-color: transparent;\n vertical-align: middle;\n}\n\n\n.as-ribbon-split-button-content > button:hover {\n background-color: rgba(169, 168, 169, 0.15);\n}\n\n.as-ribbon-split-button-content > button:active {\n background-color: rgba(169, 168, 169, 0.3);\n}\n\n\n.as-ribbon-split-button-primary {\n font-size: inherit;\n padding-left: 0.5em;\n padding-right: 0.2em;\n border-width: 1px 0px 1px 1px;\n}\n\n.as-ribbon-split-button-extend {\n color: rgb(37, 36, 35);\n width: calc(1em + 2px);\n padding: 0;\n text-align: center;\n font-size: 20px;\n border-width: 1px 1px 1px 0px;\n}\n\n.as-ribbon-split-button-extend span:before {\n margin-left: -3px;\n}\n\n\n.as-ribbon-split-button:active:hover .as-ribbon-split-button-content > button,\n.as-ribbon-split-button:active .as-ribbon-split-button-content > button {\n border-color: rgba(169, 168, 169, 0.3);\n}\n\n.as-ribbon-split-button:hover .as-ribbon-split-button-content > button {\n border-color: rgba(169, 168, 169, 0.15);\n}\n\n.as-ribbon-split-button-icon {\n margin-right: 0.5em;\n display: inline-block;\n vertical-align: middle;\n}\n\nspan.as-ribbon-split-button-icon {\n font-size: 1.2em;\n}\n\nimg.as-ribbon-split-button-icon,\nsvg.as-ribbon-split-button-icon {\n width: 1.2em;\n height: 1.2em;\n}\n\n.as-ribbon-split-button-text {\n vertical-align: middle;\n font-size: inherit;\n}\n\n.as-ribbon-split-button-text::before {\n content: attr(data-text);\n}\n\n.as-ribbon-split-button-extend .as-ribbon-split-button-text {\n display: none;\n}\n\n.as-ribbon-split-button.as-no-dropdown .as-ribbon-split-button-extend {\n display: none;\n}\n\n.as-ribbon-split-button.as-no-dropdown .as-ribbon-split-button-primary {\n padding-right: 5px;\n border-width: 1px 1px 1px 1px;\n}\n\n.as-ribbon-split-button.as-big {\n width: 5em;\n height: auto;\n}\n\n.as-ribbon-split-button.as-big .as-ribbon-split-button-content {\n height: auto;\n}\n\n.as-ribbon-split-button.as-big span.as-ribbon-split-button-icon {\n font-size: 2em;\n display: block;\n margin: 0;\n}\n\n.as-ribbon-split-button.as-big .as-ribbon-split-button-extend .as-ribbon-split-button-text {\n display: inline-block;\n white-space: normal;\n max-width: calc(100% - 1em);\n}\n\n.as-ribbon-split-button.as-big .as-ribbon-split-button-primary .as-ribbon-split-button-text {\n display: none;\n}\n\n.as-ribbon-split-button.as-big .as-ribbon-split-button-extend {\n white-space: nowrap;\n width: 100%;\n height: auto;\n border-width: 0 1px 1px 1px;\n\n}\n\n.as-ribbon-split-button.as-big .as-ribbon-split-button-primary {\n width: 100%;\n height: 2.5em;\n box-sizing: border-box;\n border-width: 1px 1px 0 1px;\n}\n\n.as-ribbon-split-button.as-big img.as-ribbon-split-button-icon,\n.as-ribbon-split-button.as-big svg.as-ribbon-split-button-icon {\n width: 2em;\n height: 2em;\n}", ""]); /***/ }), /* 222 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(223); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 223 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-ribbon-button {\n display: inline-block;\n vertical-align: middle;\n height: calc(2em + 2);\n padding-left: 0.5em;\n padding-right: 0.5em;\n\n font-family: Arial, Helvetica, sans-serif;\n font-size: 1rem;\n box-sizing: border-box;\n border-radius: 0;\n outline: none;\n border-style: solid;\n border-color: transparent;\n border-width: 1px 1px 1px 1px;\n background-color: transparent;\n}\n\n.as-ribbon-button div,\n.as-ribbon-button span {\n font-weight: inherit;\n font-size: inherit;\n}\n\n.as-ribbon-button:hover {\n background-color: rgba(169, 168, 169, 0.15);\n}\n\n.as-ribbon-button:active {\n background-color: rgba(169, 168, 169, 0.3);\n}\n\n\n.as-ribbon-split-button:active:hover .as-ribbon-split-button-content > button,\n.as-ribbon-split-button:active .as-ribbon-split-button-content > button {\n border-color: rgba(169, 168, 169, 0.3);\n}\n\n.as-ribbon-split-button:hover .as-ribbon-split-button-content > button {\n border-color: rgba(169, 168, 169, 0.15);\n}\n\n.as-ribbon-button-icon {\n font-size: 1.2em;\n margin-right: 0.5em;\n display: inline-block;\n vertical-align: middle;\n}\n\nimg.as-ribbon-button-icon,\nsvg.as-ribbon-button-icon {\n width: 1.2em;\n height: 1.2em;\n}\n\n.as-ribbon-button-text {\n display: inline-block;\n vertical-align: middle;\n font-size: inherit;\n}\n\n.as-ribbon-button-text::before {\n content: attr(data-text);\n}\n\n.as-ribbon-button.as-no-dropdown .mdi.mdi-chevron-down {\n display: none;\n}\n\n.as-ribbon-button.as-big {\n width: 5em;\n height: auto;\n white-space: nowrap;\n padding-left: 0;\n padding-right: 0;\n}\n\n.as-ribbon-button.as-big span.as-ribbon-button-icon {\n font-size: 2em;\n}\n\n.as-ribbon-button.as-big .as-ribbon-button-text {\n white-space: normal;\n max-width: calc(100% - 1em);\n}\n\n.as-ribbon-button.as-big svg.as-ribbon-button-icon,\n.as-ribbon-button.as-big img.as-ribbon-button-icon {\n height: 2em;\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.as-ribbon-button.as-appearance-button {\n height: calc(2rem + 2px);\n box-sizing: border-box;\n border: solid 1px #bfbfbf;\n background-color: #ebebeb;\n border-radius: 0.2em;\n outline: none;\n font-size: 1rem;\n}\n\n\n.as-ribbon-button.as-appearance-button:hover {\n background-color: #D3D3D3;\n}\n\n.as-ribbon-button.as-appearance-button:active,\n.as-ribbon-button.as-appearance-button.as-quick-menu-attached {\n -webkit-box-shadow: inset 0 0.2em 0.25em rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 0.2em 0.25em rgba(0, 0, 0, 0.125);\n}\n", ""]); /***/ }), /* 224 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(225); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 225 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-time-select-input {\n display: inline-block;\n position: relative;\n height: calc(2em + 2px);\n border: solid 1px #d6d6d6;\n border-radius: 2px;\n box-sizing: border-box;\n cursor: pointer;\n font-size: 1rem;\n outline: none;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n white-space: nowrap;\n padding-right: 30px;\n --list-min-width: unset;\n width: calc(var(--list-min-width) + 2em + 2px);\n min-width: calc(var(--list-min-width) + 2em + 2px);\n}\n\n.as-time-select-input.as-disabled {\n pointer-events: none;\n background-color: #ebebe4;\n}\n\n.as-time-select-input-text {\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n width: 100%;\n outline: none;\n border: none;\n box-sizing: border-box;\n padding-left: 10px;\n padding-right: 0;\n background-color: transparent;\n font-size: inherit;\n}", ""]); /***/ }), /* 226 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(227); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 227 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-snackbar {\n visibility: hidden;\n min-width: 250px;\n margin-left: -125px;\n background-color: #333;\n color: #fff;\n text-align: center;\n border-radius: 2px;\n padding: 16px;\n position: fixed;\n z-index: 1000000000;\n left: 50%;\n bottom: 0;\n font-size: 17px;\n opacity: 0;\n transition: opacity 0.25s ease-in, bottom 0.25s ease-in;\n\n}\n\n.as-snackbar.as-show {\n visibility: visible;\n bottom: 30px;\n opacity: 1;\n}\n\n.as-snackbar.as-hiding{\n transition: opacity 0.5s ease-out, bottom 0.5s ease-out;\n visibility: visible;\n bottom: 0;\n opacity: 0;\n}\n\n", ""]); /***/ }), /* 228 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(229); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 229 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ":root {\n --multi-select-menu-max-height: 90px;\n}\n\n.as-multi-select-menu {\n --list-min-width: 3em;\n display: inline-block;\n vertical-align: middle;\n position: relative;\n min-height: var(--select-box-min-height);\n min-width: var(--list-min-width);\n border: solid 1px #d6d6d6;\n border-radius: 3px;\n box-sizing: border-box;\n outline: none;\n background-color: white;\n padding-right: 45px;\n white-space: normal;\n --as-width-limit: 100vw;\n max-width: var(--as-width-limit);\n}\n\n.as-multi-select-menu.am-multi-select-menu {\n min-width: unset;\n}\n\n.as-multi-select-menu .absol-selectbox-item-text span{\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(var(--as-width-limit) - 85px);\n}\n\n.as-multi-select-menu-item-ctn {\n display: block;\n max-height: var(--multi-select-menu-max-height);\n overflow-y: auto;\n}\n\n\n.as-multi-select-menu-toggle-btn {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n width: 30px;\n pointer-events: none;\n border: none;\n background-color: transparent;\n}\n\n.as-multi-select-menu-toggle-btn svg.dropdown {\n width: 10px;\n height: 10px;\n fill: #929292;\n}\n\n.as-multi-select-menu:hover svg.dropdown {\n fill: black;\n}\n\n.as-multi-select-menu.as-disable-click-to-focus .as-multi-select-menu-toggle-btn {\n display: none;\n}\n\n.as-multi-select-menu .absol-selectbox-item {\n margin: calc((var(--select-box-min-height) - 2px - var(--select-box-item-height)) / 2) 2px;\n}\n\n\n.as-multi-select-menu.as-item-focusable .absol-selectbox-item.as-active {\n background-color: var(--select-box-focus-item-color);\n}\n\n.as-multi-select-menu.as-disabled {\n background-color: #ebebe4;\n}\n\n.as-multi-select-menu-toggle-btn {\n\n}\n\n.as-multi-select-menu.as-disabled .as-multi-select-menu-item-ctn * {\n pointer-events: none;\n}\n\n\n.as-multi-select-menu.as-multi-check-tree-leaf-menu {\n min-width: calc(var(--select-list-estimate-width) + 14px);\n}\n\n\n.as-multi-select-menu.as-read-only .absol-selectbox-item-close,\n.as-multi-select-menu.as-read-only .as-multi-select-menu-toggle-btn,\n.as-multi-select-menu.as-disabled .absol-selectbox-item-close,\n.as-multi-select-menu.as-disabled .as-multi-select-menu-toggle-btn {\n display: none;\n}\n\n.as-multi-select-menu.as-read-only .absol-selectbox-item-text {\n padding-right: 10px;\n}\n\n.as-multi-select-menu.as-read-only {\n padding-right: 0;\n}\n\n.as-multi-select-menu.as-border-none {\n border: none;\n}\n\n.as-multi-select-menu.as-border-none .as-multi-select-menu-item-ctn {\n max-height: unset;\n overflow-y: auto;\n}", ""]); /***/ }), /* 230 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-countdown-clock {\n width: 7em;\n height: 7em;\n border-radius: 50%;\n position: relative;\n display:inline-block;\n font-family: Consolas;\n}\n\n.as-countdown-clock-border-wrapper{\n pointer-events:none;\n position: absolute;\n box-sizing: border-box;\n left: 0.2em;\n right: 0.2em;\n top: 0.2em;\n bottom: 0.2em;\n filter: drop-shadow(0 0px 1px rgb(100, 200, 255));\n}\n\n.as-countdown-clock-border {\n width: 100%;\n height: 100%;\n border: solid 0.2em rgb(100, 200, 255);\n border-radius: 50%;\n object-fit: cover;\n}\n\n.as-countdown-clock-text {\n position: absolute;\n left: 50%;\n top: 50%;\n transform:translate(-50%, -50%);\n font-size: 2em;\n}\n\n.as-countdown-clock div,\n.as-countdown-clock span\n{\n font-family: inherit;\n}", ""]); /***/ }), /* 231 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(232); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 232 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-toast-list {\n position: fixed;\n z-index: 1100000000;\n width: 25em;\n max-height: calc(100vh - 20px);\n overflow-y: auto;\n}\n\n.as-toast-list > .as-toast {\n box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.35);\n}\n\n\n.as-toast-list.as-se {\n bottom: 10px;\n right: 10px;\n}\n\n.as-toast-list.as-sw {\n bottom: 10px;\n left: 10px;\n}\n\n.as-toast-list.as-ne {\n top: 10px;\n right: 10px;\n}\n\n.as-toast-list.as-nw {\n top: 10px;\n left: 10px;\n}\n\n\n.as-toast-list.as-sc {\n bottom: 10px;\n left: calc(50% - 177px);\n}\n\n.as-toast-list:empty {\n visibility: hidden;\n}\n\n.as-toast-list.as-ne > .as-toast,\n.as-toast-list.as-nw > .as-toast {\n margin-bottom: 5px;\n}\n\n.as-toast-list.as-sc > .as-toast,\n.as-toast-list.as-se > .as-toast,\n.as-toast-list.as-sw > .as-toast {\n margin-top: 5px;\n}\n\n\n.as-toast {\n display: block;\n max-width: calc(100vw - 20px);\n overflow: hidden;\n background-color: white;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n font-family: Roboto, sans-serif;\n font-size: 1rem;\n}\n\n.as-toast-header {\n display: flex;\n display: -ms-flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.25em 0.75em;\n color: #6c757d;\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.as-toast-header strong {\n text-align: left;\n margin-right: auto;\n}\n\n.as-toast-variant-color {\n margin-right: 0.5em;\n display: inline-block;\n vertical-align: middle;\n background-color: var(--variant-color-primary);\n width: 1.25em;\n height: 1.25em;\n}\n\n\n.as-toast-close-btn {\n padding: 0;\n background-color: transparent;\n border: none;\n outline: none;\n color: inherit;\n margin-left: 0.25em;\n margin-bottom: 0.25em;\n font-size: inherit;\n}\n\n.as-toast-close-btn:hover {\n color: black;\n}\n\n.as-toast-close-btn span {\n font-size: 1.5em;\n text-shadow: 0 1px 0 currentColor;\n}\n\n.as-toast-body {\n\n}\n\n.as-toast-message {\n padding: 0.75em;\n}\n\n\n.as-toast.as-not-appeared {\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.as-toast.as-not-appeared.as-appearing {\n opacity: 1;\n}\n\n.as-toast.as-appeared {\n transition: opacity 0.5s;\n opacity: 1;\n}\n\n.as-toast.as-disappearing {\n opacity: 0;\n}\n\n.as-toast.as-variant-sticky-note {\n background-color: #ffff88;\n}\n\n\n.as-toast.as-variant-sticky-note .as-toast-variant-color,\n.as-toast.as-variant-background .as-toast-variant-color {\n display: none;\n}\n\n.as-toast.as-variant-sticky-note .as-toast-title {\n color: #1e1ec8;\n}", ""]); /***/ }), /* 233 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(234); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 234 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ":root {\n --variant-color-primary: #007bff;\n --variant-color-secondary: #6c757d;\n --variant-color-success: #28a745;\n --variant-color-warning: #ffc107;\n --variant-color-danger: #dc3545;\n --variant-color-info: #17a2b8;\n --variant-color-light: #f8f9fa;\n --variant-color-dark: #343a40;\n --variant-color-error: #ff4052;\n --variant-color-link: #007bff;\n --variant-color-note: #ffff88;\n\n\n --variant-medium-contract-color-primary: #e2edd5;\n --variant-medium-contract-color-secondary: #fca75b;\n --variant-medium-contract-color-success: #fce8e8;\n --variant-medium-contract-color-info: #fcf5e8;\n --variant-medium-contract-color-warning: #5e5a75;\n --variant-medium-contract-color-error:#e0dfce;\n --variant-medium-contract-color-danger: #e5e8d5;\n --variant-medium-contract-color-light: #7a5b3c;\n --variant-medium-contract-color-dark: #bf7d3b;\n --variant-medium-contract-color-link: #dde8c9;\n --variant-medium-contract-color-note: #1e1ec8;\n}", ""]); /***/ }), /* 235 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(236); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 236 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-emoji-picker-tooltip {\n --tool-tip-background-color: white;\n filter: drop-shadow(2px 2px 4px rgba(0, 0, 0, 0.5));\n}\n\n.as-emoji-picker-tooltip .absol-tooltip-content {\n display: block;\n padding: 0;\n box-sizing: border-box;\n position: relative;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.as-emoji-picker-tooltip-left-btn,\n.as-emoji-picker-tooltip-right-btn {\n display: inline-block;\n vertical-align: middle;\n height: 60px;\n width: 40px;\n font-size: 25px;\n padding: 0;\n background-color: transparent;\n border: none;\n color: rgb(155, 155, 175);\n outline: none;\n}\n\n.as-emoji-picker-tooltip-left-btn:hover,\n.as-emoji-picker-tooltip-right-btn:hover {\n background-color: rgba(156, 156, 156, 0.15);\n}\n\n.as-emoji-picker-tooltip-left-btn:active,\n.as-emoji-picker-tooltip-right-btn:active {\n background-color: rgba(0, 0, 0, 0.15);\n}\n\n.as-emoji-picker-tooltip-left-btn:disabled,\n.as-emoji-picker-tooltip-right-btn:disabled {\n pointer-events: none;\n color: rgb(230, 230, 235);\n}\n\n.as-emoji-picker-tooltip-scroller {\n display: inline-block;\n vertical-align: middle;\n position: relative;\n width: 360px;\n height: 60px;\n overflow: hidden;\n}\n\n.as-emoji-picker-tooltip-icon-list {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n white-space: nowrap;\n}\n\n\n.as-emoji-picker-tooltip:not(.as-scrolling) .as-emoji-picker-tooltip-icon-list {\n transition: left 0.5s;\n}\n\n.as-emoji-picker-tooltip-icon-btn {\n display: inline-block;\n vertical-align: middle;\n height: 60px;\n width: 60px;\n padding: 0;\n border: none;\n outline: none;\n background-color: transparent;\n}\n\n\n.as-emoji-picker-tooltip-icon {\n transition: width 0.3s, height 0.3s;\n width: 35px;\n height: 35px;\n}\n\n.as-emoji-picker-tooltip-icon-btn:hover .as-emoji-picker-tooltip-icon {\n width: 45px;\n height: 45px;\n}\n\n.as-emoji-picker-tooltip-remove-btn {\n display: inline-block;\n vertical-align: middle;\n height: 60px;\n width: 60px;\n padding: 0;\n border: none;\n outline: none;\n background-color: transparent;\n font-size: 40px;\n color: rgb(185, 185, 185);\n}\n\n.as-emoji-picker-tooltip-remove-btn:hover {\n color: rgb(255, 30, 30);\n}\n\n\n.as-emoji-picker-tooltip:not(.as-mobile) .as-emoji-picker-tooltip-page-indicator {\n display: none;\n}\n\n.as-emoji-picker-tooltip.as-mobile .as-emoji-picker-tooltip-right-btn,\n.as-emoji-picker-tooltip.as-mobile .as-emoji-picker-tooltip-left-btn {\n display: none;\n}\n\n\n@media (max-width: 410px) and (min-width: 310px) {\n .as-emoji-picker-tooltip-left-btn,\n .as-emoji-picker-tooltip-right-btn {\n height: 36px;\n width: 24px;\n font-size: 15px;\n }\n\n .as-emoji-picker-tooltip-scroller {\n width: 216px;\n height: 36px;\n }\n\n .as-emoji-picker-tooltip-icon-btn {\n height: 36px;\n width: 36px;\n }\n\n\n .as-emoji-picker-tooltip-icon {\n width: 21px;\n height: 21px;\n }\n\n .as-emoji-picker-tooltip-icon-btn:hover .as-emoji-picker-tooltip-icon {\n width: 27px;\n height: 27px;\n }\n\n .as-emoji-picker-tooltip-remove-btn {\n height: 36px;\n width: 36px;\n font-size: 24px;\n }\n}\n\n@media (max-width: 510px) and (min-width: 410px) {\n .as-emoji-picker-tooltip-left-btn,\n .as-emoji-picker-tooltip-right-btn {\n height: 48px;\n width: 32px;\n font-size: 20px;\n }\n\n\n .as-emoji-picker-tooltip-scroller {\n width: 288px;\n height: 48px;\n }\n\n\n .as-emoji-picker-tooltip-icon-btn {\n height: 48px;\n width: 48px;\n }\n\n\n .as-emoji-picker-tooltip-icon {\n width: 28px;\n height: 28px;\n }\n\n .as-emoji-picker-tooltip-icon-btn:hover .as-emoji-picker-tooltip-icon {\n width: 36px;\n height: 36px;\n }\n\n .as-emoji-picker-tooltip-remove-btn {\n height: 48px;\n width: 48px;\n font-size: 32px;\n }\n}", ""]); /***/ }), /* 237 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(238); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 238 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-page-indicator {\n text-align: center;\n white-space: nowrap;\n}\n\n.as-page-indicator::before{\n content: \"\";\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n}\n\n.as-page-indicator-item {\n display: inline-block;\n vertical-align: middle;\n text-align: center;\n font-size: inherit;\n width: 1.5em;\n padding: 0;\n border: 0;\n background-color: transparent;\n}\n\n\n\n.as-page-indicator-item::before {\n content: \"\";\n display: inline-block;\n height: 0.5em;\n width: 0.5em;\n transition: width 0.25s, height 0.25s, color 0.25s;\n border-radius: 50%;\n background-color: rgb(196, 196, 196);\n font-size: inherit;\n vertical-align: middle;\n}\n\n.as-page-indicator-item.as-active::before{\n width: 0.75em;\n height: 0.75em;\n background-color: var(--variant-color-primary);\n\n}", ""]); /***/ }), /* 239 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(240); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 240 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-emoji-counter {\n display: inline-block;\n vertical-align: middle;\n color: rgb(38, 141, 145);\n box-sizing: border-box;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2);\n height: calc(2rem + 2px);\n text-align: center;\n min-height: calc(2rem + 2px);\n padding: 0 8px;\n border-radius: calc(1rem + 1px);\n font-size: 1rem;\n background-color: white;\n outline: none;\n}\n\n.as-emoji-counter::before {\n content: \"\";\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n}\n\n.as-emoji-counter-sprite {\n display: inline-block;\n vertical-align: middle;\n width: 1.285em;\n height: 1.285em;\n}\n\n.as-emoji-counter-num {\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n margin-left: 0.2em;\n display: inline-block;\n vertical-align: middle;\n font-size: inherit;\n color: inherit;\n cursor: default;\n}\n\n.as-emoji-counter-num:empty {\n display: none;\n}\n\n.as-emoji-counter.as-zero {\n background-color: rgba(220, 220, 220);\n}\n\n.as-emoji-counter + .as-emoji-counter {\n margin-left: 0.3em;\n}", ""]); /***/ }), /* 241 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(242); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 242 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-emoji-user-list-tooltip {\n --tool-tip-background-color: white;\n filter: drop-shadow(2px 2px 4px rgba(0, 0, 0, 0.5));\n text-align: left;\n}\n\n\n.as-emoji-user-list-tooltip-emoji {\n position: absolute;\n width: 60px;\n height: 60px;\n top: -30px;\n left: calc(50% - 30px);\n z-index: 2;\n\n}\n\n.as-emoji-user-list-tooltip .absol-tooltip-content {\n min-height: 60px;\n min-width: 120px;\n padding-top: 25px;\n}\n\n.as-emoji-user-list-tooltip-user{\n padding: 3px 10px 3px 0 ;\n}\n\n.as-emoji-user-list-tooltip-user.as-clickable{\n cursor: pointer;\n}\n\n.as-emoji-user-list-tooltip-avatar {\n width: 30px;\n height: 30px;\n border-radius: 50%;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-emoji-user-list-tooltip-name {\n display: inline-block;\n vertical-align: middle;\n margin-left: 10px;\n color: rgb(70, 70, 72);\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n}", ""]); /***/ }), /* 243 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(244); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 244 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-rotated-text {\n\n}\n\n.as-rotated-text::after {\n content: \"o\";\n color: transparent;\n display: inline;\n}\n\n.as-rotated-text-content {\n transform: rotate(0deg);\n transform-origin: 0.3em 50%;\n display: block;\n zoom: 1.001;\n}\n\n\n.as-rotated-text-anchor{\n position: fixed;\n z-index: 1000;\n}\n\n.as-rotated-text,.as-rotated-text-anchor, .as-rotated-text-content{\n font: inherit;\n}", ""]); /***/ }), /* 245 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(246); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 246 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-vertical-tree-diagram {\n --node-name-max-width: 200px;\n}\n\n\n.as-vertical-tree-diagram-node {\n\n}\n\n.template-ctn {\n display: none;\n}\n\n.as-vertical-tree-diagram-node, .as-vertical-tree-diagram-node * {\n box-sizing: border-box;\n}\n\n.as-vertical-tree-diagram-node {\n display: inline-block;\n vertical-align: top;\n position: relative;\n background: white;\n}\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node:not(:first-child) {\n margin-left: 10px;\n}\n\n.as-vertical-tree-diagram-node-name-ctn {\n text-align: center;\n padding-bottom: 9px;\n}\n\n.as-vertical-tree-diagram-node-name {\n display: inline-block;\n padding: 5px;\n border: 1px solid #333;\n position: relative;\n white-space: normal;\n max-width: var(--node-name-max-width);\n}\n\n.as-vertical-tree-diagram-node.as-has-child > .as-vertical-tree-diagram-node-name-ctn .as-vertical-tree-diagram-node-name::before {\n content: \"\";\n position: absolute;\n height: 10px;\n left: 50%;\n top: 100%;\n border-left: 1px solid #333;\n}\n\n.as-vertical-tree-diagram-node.as-has-child.as-has-1-child > .as-vertical-tree-diagram-node-name-ctn .as-vertical-tree-diagram-node-name::before {\n height: 20px;\n}\n\n.as-vertical-tree-diagram-child-ctn {\n padding-top: 10px;\n\n}\n\n.as-vertical-tree-diagram-node:not(.as-has-1-child) > .as-vertical-tree-diagram-child-ctn {\n border-top: 1px solid #333;\n}\n\n.as-vertical-tree-diagram-node:not(.as-has-child) > .as-vertical-tree-diagram-child-ctn {\n display: none;\n}\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node::before {\n content: \"\";\n position: absolute;\n z-index: 1;\n left: 50%;\n bottom: 100%;\n height: 10px;\n border-left: 1px solid black;\n}\n\n.as-vertical-tree-diagram-node.as-has-1-child > .as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node::before,\n.as-vertical-tree-diagram-node.as-has-1-child > .as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node::after {\n display: none;\n}\n\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node:last-child::before {\n left: unset;\n right: 50%;\n}\n\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node:first-child::after {\n content: \"\";\n position: absolute;\n z-index: 2;\n right: 50%;\n left: 0;\n bottom: 100%;\n height: 11px;\n background-color: white;\n}\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node:last-child::after {\n content: \"\";\n position: absolute;\n z-index: 2;\n left: 50%;\n right: 0;\n bottom: 100%;\n height: 11px;\n background-color: white;\n}\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node:first-child:last-child::after {\n display: none;\n}", ""]); /***/ }), /* 247 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(248); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 248 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-token-field {\n font-size: 1rem;\n border: 1px solid #dddddd;\n}\n\n.as-token-field-input-text {\n font: inherit;\n padding: 0;\n box-sizing: border-box;\n min-width: 4.3em;\n border: none;\n outline: none;\n height: var(--select-box-item-height);\n line-height: var(--select-box-item-height);\n vertical-align: top;\n margin-top: 2px;\n}\n\n.absol-selectbox-item.as-token-field-item {\n font: inherit;\n margin: 2px;\n outline: none;\n}\n\n.as-token-field-item:focus {\n background-color: var(--select-box-focus-item-color);\n}\n", ""]); /***/ }), /* 249 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(250); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 250 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-dv-exp-tree {\n\n}\n\n.as-dv-exp-tree > .absol-exp-node > .absol-exp-node-level {\n}\n\n.as-dv-exp-tree > .absol-exp-node > .absol-radio-button {\n vertical-align: middle;\n display: inline-block;\n margin-right: 5px;\n /*margin-left: 5px;*/\n}\n\n\n.as-dv-exp-tree:not(.as-has-radio) > .absol-exp-node > .absol-radio-button {\n /*visibility: hidden;*/\n display: none;\n}\n\n\n.as-dv-exp-tree > .absol-exp-node > .as-dv-exp-tree-index {\n box-sizing: border-box;\n padding: 0 0 0 0.5em;\n margin-left: 0.5em;\n outline: none;\n height: 1.2em;\n min-width: 3em;\n box-shadow: 0 0 0 1px #dddddd;\n display: inline-block;\n vertical-align: middle;\n background-color: white;\n}\n\n.as-dv-exp-tree > .absol-exp-node > .as-dv-exp-tree-index:hover{\n box-shadow: 0 0 0 1px #aaaaaa;\n}\n\n.as-dv-exp-tree:not(.as-has-index-input) > .absol-exp-node > .as-dv-exp-tree-index {\n display: none;\n}\n\n/*.as-dv-exp-tree>.absol-exp-node:not(.status-open):not(.status-close)>.toggler-ico{*/\n/* display: none;*/\n/*}*/\n\n/*.as-dv-exp-tree .absol-exp-node-ext-icon{*/\n/* display: none;*/\n/*}*/", ""]); /***/ }), /* 251 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(252); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 252 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-check-list-item {\n padding-left: 0.35em;\n height: calc(30rem / 14);\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n}\n\n.as-check-list-item-checkbox {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-check-list-item-checkbox .as-checkbox-input-check-icon{\n display: block;\n\n}\n\n.absol-selectlist-item.as-check-list-item > span {\n display: inline-block;\n vertical-align: middle;\n line-height: calc(30rem / 14);\n}\n\n.absol-selectlist-item.as-check-list-item .absol-selectlist-item-desc {\n line-height: calc(25rem / 14);\n}\n\n.as-check-list-item.as-no-select .as-check-list-item-checkbox {\n visibility: hidden;\n}\n\n.as-check-list-item.as-no-select {\n pointer-events: none;\n}", ""]); /***/ }), /* 253 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(254); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 254 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-check-list-box.as-select-list-box {\n width: calc(var(--select-list-estimate-width) + 2px + 5px + 23px + 7px);\n --as-width-limit: calc(100vw - 20px);\n}\n\n.as-check-list-box.as-select-list-box.as-enable-search .as-select-list-box-scroller {\n max-height: calc(var(--max-height) - 2em - 10px - 2em - 1px);\n}\n\n.as-check-list-box.as-select-list-box .as-select-list-box-scroller {\n max-height: calc(var(--max-height) - 2em - 1px);\n}\n\n\n.as-check-list-box.as-select-list-box .absol-selectlist-item-text {\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(var(--as-width-limit) - 0.7em - 2.5em);\n}\n", ""]); /***/ }), /* 255 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(256); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 256 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".ac-time-input.as-time-24-input {\n width: 13em;\n}\n\n\n.as-chrome-time-24-picker .as-chrome-time-picker-h24 {\n width: 120px;\n}\n\n.as-chrome-time-24-picker-tomorrow-text {\n display: none;\n}\n\n.as-in-tomorrow.as-chrome-time-picker-btn .as-chrome-time-24-picker-tomorrow-text {\n display: initial;\n}\n\n.as-chrome-time-24-picker .as-chrome-time-picker-btn:disabled {\n pointer-events: none;\n}", ""]); /***/ }), /* 257 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(258); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 258 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-time-range-24-input {\n white-space: nowrap;\n display: inline-block;\n min-width: 318px;\n}\n\n.as-time-range-24-input > div:first-child {\n margin-right: 10px;\n}\n\n\n.as-time-range-24-input.as-read-only.as-border-none .ac-time-input {\n display: none;\n}\n\n.as-time-range-24-input.as-read-only.as-border-none::after{\n content: attr(data-text);\n vertical-align: middle;\n display: inline-block;\n}\n\n.as-time-range-24-input.as-read-only.as-border-none::before{\n content: \"\";\n vertical-align: middle;\n display: inline-block;\n height: calc(2em + 2px);\n}\n\n\n.as-chrome-time-24-picker-follower .as-chrome-time-24-picker {\n border: none;\n box-shadow: none;\n}", ""]); /***/ }), /* 259 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(260); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 260 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-check-tree-item {\n font-size: inherit;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n height: 2em;\n}\n\n.as-check-tree-item:focus {\n background-color: unset;\n}\n\n.as-check-tree-item:hover:focus {\n background-color: rgba(169, 169, 172, 0.1);\n}\n\n.as-check-tree-item .as-checkbox-input {\n margin-right: 0.35em;\n}\n\n.as-check-tree-item.as-no-select .as-checkbox-input,\n.absol-checkbox.as-no-select {\n pointer-events: none;\n opacity: 0.3;\n}\n\n.as-check-tree-item.as-no-select .as-checkbox-input .bound,\n.absol-checkbox.as-no-select .bound {\n stroke: #929292;\n fill: #ebebe4;\n}\n\n.as-check-tree-item.as-no-select .as-checkbox-input .tick,\n.as-check-tree-item.as-no-select .as-checkbox-input .minus,\n.absol-checkbox.as-no-select .tick,\n.absol-checkbox.as-no-select .minus {\n display: none;\n opacity: 0;\n visibility: hidden;\n}\n\n.absol-checkbox.as-no-select{\n visibility: hidden;\n}", ""]); /***/ }), /* 261 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(262); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 262 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-select-list-box-page > .as-check-tree-item {\n width: 100%;\n}\n\n.as-check-tree-box {\n min-width: 18em;\n}\n\n.as-check-tree-box.as-no-transition label.as-checkbox-input .minus,\n.as-check-tree-box.as-no-transition label.as-checkbox-input .tick {\n transition: none;\n}\n\n\n.as-check-tree-box.as-select-list-box.as-enable-search .as-select-list-box-scroller {\n max-height: calc(var(--max-height) - 2em - 10px - 2em - 1px);\n}\n\n.as-check-tree-box.as-select-list-box .as-select-list-box-scroller {\n max-height: calc(var(--max-height) - 2em - 1px);\n}\n\n/***********************************************************************************************************************/\n\n.am-check-tree-box .as-dropdown-box-footer {\n min-width: 18em;\n}\n\n.am-check-tree-box-list {\n --text-width: 100%;\n --desc-width: 0;\n}\n\n.am-check-tree-box-modal:not(.as-enable-search) .absol-search-text-input {\n visibility: hidden;\n opacity: 0;\n pointer-events: none;\n}\n\n.am-check-tree-box .as-check-tree-box-scroller {\n max-height: calc(100vh - var(--modal-margin-top) - 100px);\n}\n\n.am-check-tree-box {\n width: var(--select-list-estimate-width);\n /*max-width: calc(100vw - 20px);*/\n}\n\n.am-check-tree-box .as-check-tree-box-content {\n /*max-width: calc(100vw - 20px);*/\n}\n\n.am-check-tree-box.as-has-desc {\n --text-width: 50%;\n --desc-width: 50%;\n}\n\n\n.am-check-tree-box-body {\n overflow-y: auto;\n max-height: calc(80vh - 2em);\n}\n\n.am-check-tree-box.as-enable-search .am-check-tree-box-body {\n max-height: calc(80vh - 4em - 10px);\n}\n\n.am-check-tree-item {\n display: block;\n white-space: nowrap;\n position: relative;\n width: 100%;\n overflow: hidden;\n --level: 0;\n --icon-width: 0px;\n}\n\n\n.am-check-tree-item.as-has-icon {\n --icon-width: 2.7em;\n}\n\n\n.am-check-tree-item-toggle-ctn,\n.am-check-tree-item-icon-ctn,\n.am-check-tree-item-checkbox-ctn {\n position: absolute;\n white-space: nowrap;\n top: 0;\n bottom: 0;\n}\n\n.am-check-tree-item-toggle-ctn {\n left: calc(2em * var(--level) + 0.2em);\n width: 1.5em;\n text-align: center;\n}\n\n.am-check-tree-item-toggle-ctn > svg {\n width: 0.7em;\n height: 0.7em;\n}\n\n\n.am-check-tree-item-icon-ctn {\n left: calc(2em * var(--level) + 3.2em);\n}\n\n.am-check-tree-item-checkbox-ctn {\n left: calc(2em * var(--level) + 1.7em)\n}\n\n.am-check-tree-item-icon-ctn > svg {\n display: inline-block;\n vertical-align: middle;\n\n}\n\n\n.am-check-tree-item.as-status-open svg .toggle-close,\n.am-check-tree-item.as-status-close svg .toggle-open,\n.am-check-tree-item:not(.as-status-close):not(.as-status-open) .am-check-tree-item-toggle-ctn {\n display: none;\n}\n\n.am-check-tree-item-icon-ctn::before,\n.am-check-tree-item-toggle-ctn::before,\n.am-check-tree-item-checkbox-ctn::before {\n content: \"\";\n height: 100%;\n vertical-align: middle;\n display: inline-block;\n}\n\n.am-check-tree-item-icon-ctn:empty {\n display: none;\n}\n\n.am-check-tree-item-icon-ctn > span {\n font-size: 1.8em;\n display: inline-block;\n vertical-align: middle;\n}\n\n\n.am-check-tree-item-icon-ctn img,\n.am-check-tree-item-icon-ctn svg {\n width: 1.8em;\n height: 1.8em;\n display: inline-block;\n}\n\n\n.am-check-tree-item-text {\n width: var(--text-width);\n box-sizing: border-box;\n padding: 0.3em 0.5em 0.3em calc(3em + 2em * var(--level) + var(--icon-width));\n display: inline-block;\n vertical-align: middle;\n line-height: 1.5;\n white-space: normal;\n}\n\n\n.am-check-tree-item-desc {\n display: none;\n vertical-align: middle;\n}\n\n\n.am-check-tree-leaf-item:not(.as-is-leaf) .am-check-tree-item-checkbox-ctn {\n display: none;\n}\n\n.am-check-tree-leaf-item:not(.as-is-leaf) .am-check-tree-item-text {\n padding: 0.3em 0.5em 0.3em calc(2em * var(--level) + var(--icon-width) + 1em);\n}\n\n.am-check-tree-leaf-item:not(.as-is-leaf) .am-check-tree-item-icon-ctn {\n left: calc(2em * var(--level) + 1.5em);\n}\n\n.am-check-tree-box-list.as-has-desc .am-check-tree-item-desc {\n display: inline-block;\n}\n\n.am-check-tree-box.as-leaf-only .am-check-tree-item:not(.as-has-leaf) .as-checkbox-input {\n pointer-events: none;\n opacity: 0.2;\n}\n\n\n.am-check-tree-box.as-leaf-only:not(.as-has-leaf) .as-select-list-box-check-all {\n pointer-events: none;\n color: var(--as-disabled-text-color);\n}\n\n.am-check-tree-box.as-leaf-only:not(.as-has-leaf) .as-select-list-box-check-all label.as-checkbox-input .bound {\n stroke: #929292;\n fill: #ebebe4;\n}", ""]); /***/ }), /* 263 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(264); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 264 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-cpu-viewer{\n position: fixed;\n bottom: 5px;\n right: 5px;\n box-sizing: border-box;\n z-index: 1000000000;\n border: 1px solid black;\n display: inline-block;\n}\n\n.as-cpu-viewer canvas{\n display: block;\n}", ""]); /***/ }), /* 265 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(266); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 266 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-file-input-box {\n font-size: 14px;\n position: relative;\n width: 100px;\n height: 100px;\n box-sizing: border-box;\n border: 1px solid #dddddd;\n background-color: white;\n font-family: Arial, Helvetica, sans-serif;\n overflow: visible;\n}\n\n.as-file-input-box-trigger:hover + .as-file-input-box-upload-overlay,\n.as-file-input-box-trigger.as-drag-over + .as-file-input-box-upload-overlay {\n display: block;\n}\n\n.as-file-input-box-trigger input {\n visibility: hidden;\n opacity: 0;\n}\n\n.as-file-input-box-upload-overlay {\n display: none;\n pointer-events: none;\n background-color: rgba(30, 30, 80, 0.3);\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n z-index: 5;\n overflow: hidden;\n text-align: center;\n white-space: nowrap;\n font-size: 3em;\n color: #b0fffb;\n}\n\n.as-file-input-box-upload-overlay::before,\n.as-file-input-box-upload-overlay > span {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-file-input-box-upload-overlay::before {\n content: \"\";\n height: 100%;\n}\n\n\n.as-file-input-box-trigger {\n position: absolute;\n z-index: 2;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n opacity: 0;\n}\n\n.as-file-input-box:not(.as-has-file-name) .as-file-input-box-file-name,\n.as-file-input-box:not(.as-has-file-name) .as-file-input-box-file-name + br,\n.as-file-input-box:not(.as-has-file-size) .as-file-input-box-file-size,\n.as-file-input-box:not(.as-has-value) .as-file-input-box-action-left,\n.as-file-input-box:not(.as-has-value) .as-file-input-box-action-right,\n.as-file-input-box:not(.as-downloadable) .as-file-input-box-action-right,\n.as-file-input-box:not(.as-removable) .as-file-input-box-action-left,\n.as-file-input-box:not(.as-allow-upload) .as-file-input-box-trigger {\n display: none;\n}\n\n\n.as-file-input-box-background {\n position: absolute;\n z-index: 1;\n left: 4%;\n top: 4%;\n right: 4%;\n bottom: 4%;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n overflow: hidden;\n}\n\n.as-file-input-box.as-allow-upload .as-file-input-box-background {\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSIgIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4NCiAgIDxwYXRoIGZpbGw9IiNhYWFhYWEiIGQ9Ik0xMyw5SDE4LjVMMTMsMy41VjlNNiwySDE0TDIwLDhWMjBBMiwyIDAgMCwxIDE4LDIySDZDNC44OSwyMiA0LDIxLjEgNCwyMFY0QzQsMi44OSA0Ljg5LDIgNiwyTTExLDE1VjEySDlWMTVINlYxN0g5VjIwSDExVjE3SDE0VjE1SDExWiIgLz4NCjwvc3ZnPg==);\n}\n\n\n.as-file-input-box-info {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 2px;\n z-index: 3;\n overflow: hidden;\n text-overflow: ellipsis;\n background-color: rgba(255, 255, 255, 0.3);\n pointer-events: none;\n text-align: center;\n}\n\n.as-file-input-box-file-name {\n font-size: inherit;\n color: black;\n text-shadow: 0 0 5px white;\n white-space: nowrap;\n}\n\n.as-file-input-box-action-left,\n.as-file-input-box-action-right {\n position: absolute;\n z-index: 6;\n top: 0;\n}\n\n\n.as-file-input-box-action-left {\n left: 0;\n}\n\n\n.as-file-input-box-action-right {\n right: 0;\n}\n\n.as-file-input-box button {\n height: 2em;\n width: 2em;\n padding: 0;\n border: none;\n background-color: rgba(255, 255, 255, 0.3);\n border-radius: 0;\n}\n\n.as-file-input-box button span {\n font-size: 1.5em;\n}\n\n.as-file-input-box .mdi-close {\n color: rgb(250, 100, 100);\n}\n\n.as-file-input-box .mdi-download {\n color: rgb(100, 100, 250);\n}\n\n.as-file-input-box button:hover .mdi-close {\n color: rgb(250, 50, 50);\n}\n\n.as-file-input-box button:hover .mdi-download {\n color: rgb(50, 50, 250);\n}\n\n.as-file-input-box button:active .mdi-close {\n color: rgb(250, 0, 0);\n}\n\n.as-file-input-box button:active .mdi-download {\n color: rgb(0, 0, 250);\n}\n\n.as-file-input-box-checked {\n display: none;\n box-sizing: border-box;\n z-index: 4;\n position: absolute;\n left: -1px;\n top: -1px;\n bottom: -1px;\n right: -1px;\n pointer-events: none;\n border: 3px solid #0a90eb;\n overflow: hidden;\n}\n\n.as-file-input-box.as-checked .as-file-input-box-checked{\n display: block;\n}\n\n.as-file-input-box-checked::before {\n content: \"\";\n display: block;\n position: absolute;\n right: -20px;\n top: -20px;\n width: 40px;\n height: 40px;\n transform: rotate(45deg);\n background-color: #0a90eb;\n}\n\n.as-file-input-box-checked .mdi {\n display: inline-block;\n position: absolute;\n right: 0;\n top: 0;\n font-size: 14px;\n color: white;\n}", ""]); /***/ }), /* 267 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(268); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 268 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-countdown-text {\n\n}\n", ""]); /***/ }), /* 269 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-select-tree-leaf-item:not(.as-is-leaf) > .absol-exp-node > .absol-exp-node-name,\n.as-select-tree-leaf-item:not(.as-is-leaf) > .absol-exp-node > .absol-exp-node-ext-icon,\n.as-select-tree-leaf-item.as-no-select > .absol-exp-node > .absol-exp-node-name,\n.as-select-tree-leaf-item.as-no-select > .absol-exp-node > .absol-exp-node-ext-icon\n{\n color: #888;\n}\n\n.as-select-tree-leaf-item:not(.as-is-leaf) > .absol-exp-node > .absol-exp-node-desc {\n color: rgb(169, 169, 172)\n}\n\n.as-select-tree-leaf-item > .absol-exp-node:hover,\n.as-select-tree-leaf-item > .absol-exp-node:focus,\n.as-select-tree-leaf-item > .absol-exp-node:active {\n background-color: transparent;\n}\n\n.as-select-tree-leaf-item.as-is-leaf:not(.as-no-select) > .absol-exp-node:hover {\n background-color: #efefef;\n}\n\n.as-select-tree-leaf-item.as-selected > .absol-exp-node {\n background-color: #dfdfdf;\n}\n\n.am-select-tree-menu.absol-selectmenu {\n width: auto;\n}\n\n.am-select-tree-menu .absol-selectmenu-holder-item {\n position: relative;\n left: unset;\n right: unset;\n top: unset;\n bottom: unset;\n height: 100%;\n max-width: 100%;\n}\n\n\n.am-select-tree-menu .absol-selectlist-item-text {\n max-width: calc(100vw - 200px);/**TODO: find better solution*/\n text-overflow: ellipsis;\n overflow: hidden;\n}", ""]); /***/ }), /* 270 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".am-select-tree-leaf-box {\n min-width: 10em;\n}\n\n.am-select-tree-leaf-box-body {\n overflow-y: auto;\n max-height: calc(80vh - 2em);\n}\n\n.am-select-tree-leaf-box.as-enable-search .am-select-tree-leaf-box-body {\n max-height: calc(80vh - 4em - 10px);\n}\n\n\n.am-select-tree-leaf-item {\n display: block;\n white-space: nowrap;\n position: relative;\n width: 100%;\n overflow: hidden;\n --level: 0;\n --icon-width: 0px;\n}\n\n.am-select-tree-leaf-item:active {\n background-color: #efefef;\n}\n\n.am-select-tree-leaf-item.as-selected {\n background-color: #dfdfdf;\n}\n\n\n.am-select-tree-leaf-item.as-has-icon {\n --icon-width: 2.7em;\n}\n\n\n.am-select-tree-leaf-item-toggle-ctn,\n.am-select-tree-leaf-item-icon-ctn,\n.am-select-tree-leaf-item-checkbox-ctn {\n position: absolute;\n white-space: nowrap;\n top: 0;\n bottom: 0;\n}\n\n.am-select-tree-leaf-item-toggle-ctn {\n left: calc(2em * var(--level) + 0.2em);\n width: 1.5em;\n text-align: center;\n}\n\n.am-select-tree-leaf-item-toggle-ctn > svg {\n width: 0.7em;\n height: 0.7em;\n}\n\n\n.am-select-tree-leaf-item-icon-ctn {\n left: calc(2em * var(--level) + 1.7em);\n}\n\n\n.am-select-tree-leaf-item-icon-ctn > svg {\n display: inline-block;\n vertical-align: middle;\n\n}\n\n.am-select-tree-leaf-item-icon-ctn {\n\n}\n\n.am-select-tree-leaf-item.as-status-open svg .toggle-close,\n.am-select-tree-leaf-item.as-status-close svg .toggle-open,\n.am-select-tree-leaf-item:not(.as-status-close):not(.as-status-open) .am-select-tree-leaf-item-toggle-ctn {\n display: none;\n}\n\n.am-select-tree-leaf-item-icon-ctn::before,\n.am-select-tree-leaf-item-toggle-ctn::before,\n.am-select-tree-leaf-item-checkbox-ctn::before {\n content: \"\";\n height: 100%;\n vertical-align: middle;\n display: inline-block;\n}\n\n.am-select-tree-leaf-item-icon-ctn:empty {\n display: none;\n}\n\n.am-select-tree-leaf-item-icon-ctn > span {\n font-size: 1.8em;\n display: inline-block;\n vertical-align: middle;\n}\n\n\n.am-select-tree-leaf-item-icon-ctn img,\n.am-select-tree-leaf-item-icon-ctn svg {\n width: 1.8em;\n height: 1.8em;\n display: inline-block;\n}\n\n\n.am-select-tree-leaf-item-text {\n width: var(--text-width);\n box-sizing: border-box;\n padding: 0.3em 0.5em 0.3em calc(1.2em + 2em * var(--level) + var(--icon-width));\n display: inline-block;\n vertical-align: middle;\n line-height: 1.5;\n white-space: normal;\n}\n\n\n.am-select-tree-leaf-item-desc {\n display: none;\n vertical-align: middle;\n}\n", ""]); /***/ }), /* 271 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(272); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 272 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "\n/**********************************************************************************************************************/\ndiv.as-dropdown-box-common-style {\n -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n border: solid 1px rgb(100, 100, 255);\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n background-color: white;\n}\n\n.as-dropdown-box-footer {\n height: calc(2em + 1px);\n border-top: 1px solid #dddddd;\n box-sizing: border-box;\n padding-left: 0.35em;\n white-space: nowrap;\n position: relative;\n}\n\n\n.as-dropdown-box-footer > *,\n.as-dropdown-box-footer::before,\n.as-dropdown-box-footer-right::before,\n.as-dropdown-box-footer-right > * {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-dropdown-box-footer-right::before,\n.as-dropdown-box-footer::before {\n content: \"\";\n height: 100%;\n}\n\n.as-dropdown-box-footer > *:not(:last-child) {\n margin-right: 6.5em;\n}\n\n.as-dropdown-box-footer .absol-checkbox-label.as-right {\n padding-left: 0.35em;\n}\n\n.as-dropdown-box-footer-right {\n position: absolute;\n right: 10px;\n top: 0;\n height: 100%;\n}\n\n.as-dropdown-box-footer a {\n cursor: pointer;\n margin-left: 30px;\n}\n\n.as-dropdown-box-footer a:hover {\n color: #1da1ff;\n}\n\n.as-dropdown-box-footer a.as-select-list-box-cancel-btn {\n color: #888888;\n}\n\n.as-dropdown-box-footer a.as-select-list-box-close-btn {\n padding: 0 10px;\n}\n\n.as-dropdown-box-footer a.as-select-list-box-cancel-btn:hover {\n color: #ea2121;\n}\n\n/********** MOBILE ***************/\n\n.am-modal.am-dropdown-box-modal{\n z-index: 100001000;\n}\n\n.am-dropdown-box {\n font-family: Arial, Helvetica, sans-serif;\n font-size: 1rem;\n max-width: 95vw;\n}\n\n.am-dropdown-box.as-enable-search .absol-search-text-input,\n.am-dropdown-box-modal.as-enable-search .absol-search-text-input\n{\n visibility: visible;\n}\n\n.am-dropdown-box-header {\n height: calc(2em + 10px);\n display: block;\n white-space: nowrap;\n box-sizing: border-box;\n padding-top: 5px;\n padding-bottom: 5px;\n padding-left: 10px;\n border-bottom: solid 1px #dddddd;\n}\n\n.am-dropdown-box-header .absol-search-text-input {\n display: inline-block;\n width: calc(100% - 2em - 18px);\n vertical-align: middle;\n box-sizing: border-box;\n background-color: white;\n visibility: hidden;\n}\n\n.am-dropdown-box-close-btn {\n display: inline-block;\n vertical-align: middle;\n border-radius: 50%;\n padding: 0;\n height: 2em;\n width: 2em;\n font-size: inherit;\n border: none;\n outline: none;\n margin-left: 10px;\n background-color: rgb(255, 255, 255);\n color: #7a7a7a;\n white-space: nowrap;\n}\n\n.am-dropdown-box-close-btn span {\n font-size: 1.5em;\n}\n\n.am-dropdown-box-close-btn:active {\n background-color: rgba(169, 169, 172, 0.3);\n}\n\n.am-dropdown-box-item {\n border-bottom: 1px solid #efefef;\n}\n", ""]); /***/ }), /* 273 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(274); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 274 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "\n.as-file-list-input {\n padding: 5px;\n border: 1px solid #dddddd;\n box-sizing: border-box;\n overflow: auto;\n --item-width: 100%;\n --item-require-width: 300px;\n position: relative;\n min-height: 42px;\n}\n\n.as-file-list-input.as-border-none {\n border: none;\n padding: 0;\n}\n\n.as-file-list-input.as-disabled {\n background-color: var(--as-disabled-background-color);\n}\n\n.as-file-list-input.as-disabled > * {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.as-file-list-input-upload-overlay {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n overflow: hidden;\n text-align: center;\n white-space: nowrap;\n pointer-events: none;\n background-color: rgba(30, 30, 80, 0.3);\n color: #b0fffb;\n}\n\n.as-file-list-input-upload-overlay::before {\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n content: \"\";\n}\n\n.as-file-list-input-upload-overlay > span {\n font-size: 30px;\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-file-list-input:not(.as-drag-over) .as-file-list-input-upload-overlay,\n.as-file-list-input:not(.as-droppable) .as-file-list-input-upload-overlay,\n.as-file-list-input:not(.as-droppable) .as-file-list-drag-file-text,\n.as-file-list-input.as-read-only .as-file-list-input-upload-overlay {\n display: none;\n}\n\n/*span.mdi.mdi-upload*/\n\n.as-file-list-input .as-file-input-box {\n display: inline-block;\n vertical-align: middle;\n margin-right: 10px;\n}\n\n.as-file-list-input.as-read-only .as-file-list-input-add {\n display: none;\n}\n\n.as-file-list-input-add {\n border: none;\n width: 3.5em;\n border-radius: 5px;\n background-color: rgba(235, 235, 235, 0.2);\n height: calc(2em + 2px);\n padding-bottom: 10px;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n position: relative;\n vertical-align: middle;\n margin-right: 5px;\n font-size: inherit;\n}\n\n\n.as-file-list-input-add:hover {\n background-color: rgb(235, 235, 235);\n}\n\n.as-file-list-input-add:active {\n background-color: rgb(212, 212, 212);\n}\n\n\n.as-file-list-input-add input {\n opacity: 0;\n visibility: hidden;\n}\n\n.as-file-list-input-add-icon-ctn {\n font-size: 1.5em;\n text-align: center;\n color: rgb(100, 100, 250);\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n white-space: nowrap;\n pointer-events: none;\n}\n\n.as-file-list-input-add-icon-ctn span {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-file-list-input-add-icon-ctn::before {\n content: \"\";\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n}\n\n.as-file-list-input.as-drag-over.as-droppable .as-file-list-input-add,\n.as-file-list-input.as-drag-over .as-file-list-drag-file-text {\n visibility: hidden;\n}\n\n.as-file-list-item {\n position: relative;\n height: calc(2em + 2px);\n font-size: 1rem;\n font-family: Arial, Helvetica, sans-serif;\n width: calc(var(--item-width) - 5px);\n padding-left: 2.3em;\n white-space: nowrap;\n box-sizing: border-box;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n padding-right: calc(2.3em + 5px);\n}\n\n.as-file-list-item .as-file-list-item-check {\n display: none;\n position: absolute;\n left: 0.1em;\n top:calc(50% - 1px - 0.5em);\n\n\n}\n\n\n.as-file-list-input.as-show-check .as-file-list-item .as-file-list-item-check {\n display: block;\n}\n\n.as-file-list-input.as-show-check .as-file-list-item\n{\n padding-left: 3.5em ;\n}\n\n.as-file-list-input.as-show-check .as-file-list-item .as-file-list-item-icon{\n left: 1.2em;\n}\n\n.as-file-list-item-icon {\n position: absolute;\n left: 0;\n top: calc(50% - 1em - 1px);\n bottom: 0;\n width: calc(2em + 2px);\n height: calc(2em + 2px);\n}\n\n\n.as-file-list-item-name {\n color: rgb(89, 89, 95);\n display: inline-block;\n overflow-x: hidden;\n vertical-align: middle;\n width: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: bold;\n}\n\n\n.as-file-list-item::before {\n content: \"\";\n display: inline-block;\n height: 100%;\n vertical-align: middle;\n}\n\n\n.as-file-list-input .as-file-list-item {\n display: inline-block;\n vertical-align: middle;\n margin-bottom: 5px;\n margin-right: 5px;\n}\n\n.as-file-list-input:not(.as-empty) .as-file-list-drag-file-text,\n.as-file-list-input.as-read-only .as-file-list-drag-file-text {\n display: none;\n}\n\n\n.as-file-list-item:hover {\n background-color: rgba(169, 169, 172, 0.1);\n}\n\n\n.as-file-list-input .as-file-list-item:hover .as-file-list-item-quick-btn {\n visibility: visible;\n}\n\n\n.as-file-list-item-quick-btn {\n position: absolute;\n border: none;\n background-color: transparent;\n outline: none;\n border-radius: 3px;\n height: 2em;\n width: 2em;\n font-size: inherit;\n padding: 0;\n right: 5px;\n top: calc(50% - 1em);\n visibility: hidden;\n}\n\n\n.as-file-list-item-quick-btn.as-quick-menu-attached {\n display: block;\n}\n\n.as-file-list-item-quick-btn > span {\n font-size: 1.2em;\n}\n\n\n.as-file-list-item-quick-btn.as-active {\n background-color: rgba(20, 185, 235, 0.3);\n}\n\n.as-file-list-item-quick-btn:hover {\n background-color: #91e4fb77;\n}\n\n.as-file-list-item-quick-btn:active {\n background-color: #91e4fb;\n\n}\n\n", ""]); /***/ }), /* 275 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(276); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 276 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-date-in-year-follower {\n z-index: 900000000;\n}\n\n.as-date-in-year-picker {\n font-size: 1rem;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n /*width: 20em;*/\n box-sizing: border-box;\n border: 1px solid #dddddd;\n display: inline-block;\n padding: calc(10em / 14) calc(5rem / 14);\n box-shadow: 1px 1px 2px rgb(240, 240, 240);\n background-color: white;\n}\n\n\n.as-date-in-year-picker-table {\n display: table;\n}\n\n.as-date-in-year-picker-row {\n display: table-row;\n}\n\n\n.as-date-in-year-picker-row:first-child {\n text-align: center;\n line-height: 1.5;\n}\n\n.as-date-in-year-picker-cell {\n display: table-cell;\n}\n\n\n.as-date-in-year-picker-cell:first-child {\n padding-right: 10px;\n}\n\n\n.as-date-in-year-picker-month-col {\n position: relative;\n padding-top: calc(25em / 14);\n padding-bottom: calc(25em / 14);\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-date-in-year-picker-month-viewport {\n width: calc(50em / 14);\n overflow: hidden;\n\n}\n\n.as-date-in-year-picker-month-scroller {\n width: calc(100% + 17px);\n height: 8em;\n overflow-y: scroll;\n box-sizing: border-box;\n}\n\n\nbutton.as-date-in-year-picker-month {\n font-size: inherit;\n height: 2em;\n width: calc(50em / 14);\n padding: 0;\n border: none;\n background-color: transparent;\n}\n\nbutton.as-date-in-year-picker-month:hover {\n background-color: rgb(224, 245, 256);\n}\n\nbutton.as-date-in-year-picker-month.as-selected {\n background-color: rgb(188, 205, 236);\n border-radius: 3px;\n}\n\nbutton.as-date-in-year-picker-month > span {\n font-size: calc(16rem / 14);\n}\n\n\n.as-chrome-time-picker-scroller-up:hover,\n.as-chrome-time-picker-scroller-down:hover {\n background-color: rgba(169, 169, 169, 0.2);\n}\n\n\n.as-date-in-year-picker-month-btn {\n position: absolute;\n left: 0;\n font-size: inherit;\n height: calc(20em / 14);\n width: calc(50em / 14);\n padding: 0;\n border: none;\n background-color: transparent;\n box-sizing: border-box;\n border-radius: 3px;\n}\n\n.as-date-in-year-picker-month-btn.as-up {\n top: 0;\n}\n\n.as-date-in-year-picker-month-btn.as-down {\n bottom: 0;\n}\n\n\n.as-date-in-year-picker-month-btn:hover {\n background-color: rgba(169, 169, 169, 0.2);\n}\n\n.as-date-in-year-picker-month-btn > span {\n font-size: 1.5em;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n}\n\n\n.as-date-in-year-picker-days {\n display: inline-table;\n vertical-align: middle;\n border: solid 1px rgb(190, 190, 190);\n}\n\n.as-date-in-year-picker-week {\n display: table-row;\n}\n\n.as-date-in-year-picker-day {\n display: table-cell;\n text-align: right;\n padding: calc(5em / 14);\n line-height: calc(20em / 14);\n font-size: inherit;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n}\n\n\n.as-date-in-year-picker-day:hover {\n background-color: rgb(224, 245, 256);\n cursor: default;\n}\n\n.as-date-in-year-picker-day.as-selected {\n background-color: rgb(188, 205, 236);\n}\n\n\n.as-date-time-input.as-date-in-year-input {\n width: calc(8em + 2px);\n}\n\n.as-date-in-year-input.as-must-not-null .as-time-input-clear-btn,\n.as-date-in-year-input.as-empty .as-time-input-clear-btn {\n display: none;\n}\n\n\n.as-date-in-year-follower {\n z-index: 1000000;\n}", ""]); /***/ }), /* 277 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(278); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 278 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-dual-select-box {\n -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n --max-height: 70vh;\n box-sizing: border-box;\n --dual-list-estimate-width: 0;\n width: var(--dual-list-estimate-width);\n z-index: 10000000;\n background-color: white;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n font-size: 1rem;\n\n}\n\n.as-dual-select-box-search-ctn {\n padding: 5px;\n position: absolute;\n left: 0;\n right: 0;\n}\n\n.as-dual-select-box.as-enable-search.as-anchor-6 .as-dual-select-box-search-ctn,\n.as-dual-select-box.as-enable-search.as-anchor-5 .as-dual-select-box-search-ctn {\n bottom: 0;\n}\n\n.as-dual-select-box.as-enable-search.as-anchor-6,\n.as-dual-select-box.as-enable-search.as-anchor-5 {\n padding-bottom: calc(2rem + 10px);\n}\n\n.as-dual-select-box.as-enable-search.as-anchor-1,\n.as-dual-select-box.as-enable-search.as-anchor-2 {\n padding-top: calc(2rem + 10px);\n}\n\n.as-dual-select-box.as-enable-search.as-anchor-1 .as-dual-select-box-search-ctn,\n.as-dual-select-box.as-enable-search.as-anchor-2 .as-dual-select-box-search-ctn {\n top: 0;\n}\n\n\n.as-dual-select-box-list-ctn {\n white-space: nowrap;\n display: flex;\n align-items: stretch;\n}\n\n.as-dual-select-box:not(.as-enable-search) .as-dual-select-box-search-ctn {\n display: none;\n}\n\n.as-dual-select-box-list {\n display: inline-block;\n vertical-align: top;\n max-height: calc(var(--max-height) - 2em - 2em - 11px);\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n.as-dual-select-box.as-enable-search .as-dual-select-box-list {\n max-height: calc(var(--max-height) - 6rem - 11px);\n}\n\n.as-dual-select-box-arrow-ctn {\n display: inline-block;\n vertical-align: top;\n}\n\n.as-dual-select-box-arrow-ctn::before,\n.as-dual-select-box-arrow-ctn span {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-dual-select-box-arrow-ctn::before {\n content: \"\";\n height: 100%;\n}\n\n\n.as-dual-select-box-list:first-child {\n border-right: solid 1px #dddddd;\n}\n\n\n.as-dual-select-box-list:last-child {\n border-left: solid 1px #dddddd;\n flex-grow: 1;\n}\n\n.as-dual-select-menu.absol-selectmenu {\n min-width: calc(var(--dual-list-estimate-text-width) + 5.5em);\n --dual-list-estimate-text-width: 20px;\n}\n\n\n.am-dual-select-menu .absol-selectmenu-holder-item{\n position: relative;\n height: 100%;\n top: unset;\n bottom: unset;\n}\n\n.am-dual-select-menu{\n width: auto;\n}", ""]); /***/ }), /* 279 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(280); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 280 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-toc-list {\n\n}\n\n.as-toc-list.as-searching .as-toc-list-body,\n.as-toc-list:not(.as-searching) .as-toc-list-searching {\n display: none;\n}\n\n.as-toc-item {\n font-size: 14px;\n font-family: Arial, Helvetica, sans-serif;\n display: flex;\n height: 30px;\n align-items: stretch;\n --level: 0;\n}\n\n.as-toc-item:not(.as-status-close) .as-toc-item-toggle-ico-ctn .toggle-close,\n.as-toc-item:not(.as-status-open) .as-toc-item-toggle-ico-ctn .toggle-open {\n display: none;\n}\n\n.as-toc-item.as-status-none .as-toc-item-toggle-ico-ctn {\n visibility: hidden;\n}\n\n.as-toc-item.as-active {\n background-color: var(--as-transparent-button-active-color);\n}\n\n\n.as-toc-item:hover {\n background-color: var(--as-transparent-button-hover-color);\n}\n\n.as-toc-item > div {\n white-space: nowrap;\n width: 30px;\n}\n\n.as-toc-item > div::before,\n.as-toc-item > div > * {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-toc-item > div::before {\n content: \"\";\n height: 100%;\n}\n\n.as-toc-item-name-ctn {\n flex-grow: 1;\n\n}\n\n.as-toc-item-name {\n user-select: none;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\ndiv.as-toc-item-toggle-ico-ctn {\n padding-left: calc(20px * var(--level));\n box-sizing: content-box !important;\n}\n\n.as-toc-item-toggle-ico-ctn .toggler-ico {\n width: 0.7em;\n height: 0.7em;\n}\n\n.as-toc-item-toggle-ico-ctn .toggler-ico path {\n fill: rgb(104, 104, 104);\n}\n\n.as-toc-item-ext-icon-ctn:empty {\n display: none;\n}\n\n.as-toc-item-ext-icon-ctn > img,\n.as-toc-item-ext-icon-ctn > svg {\n width: 20px;\n height: 20px;\n}\n\n.as-toc-item-ext-icon-ctn > span {\n font-size: 20px;\n}\n\n\n.as-toc-item-toggle-ico-ctn,\n.as-toc-item-check-ctn,\n.as-toc-item-quick-menu-ctn,\n.as-toc-item-ext-icon-ctn {\n text-align: center;\n width: 30px;\n}\n\n.as-toc-item-quick-menu-ctn span {\n font-size: 20px;\n}\n\n.as-toc-item-quick-menu-ctn button {\n border: none;\n background-color: transparent;\n padding: 0;\n width: 24px;\n height: 24px;\n}\n\n.as-toc-item-quick-menu-ctn button.as-quick-menu-attached {\n background-color: var(--as-transparent-button-active-color);\n}\n\n.as-toc-item-quick-menu-ctn button:hover {\n background-color: var(--icon-background-cover-hover);\n}\n\n.as-toc-item:not(.as-has-quick-menu) .as-toc-item-quick-menu-ctn {\n visibility: hidden;\n pointer-events: none;\n opacity: 0;\n}\n\n.as-toc-item-name-ctn input {\n font: inherit;\n border: none;\n /*background-color: transparent;*/\n width: 8px;\n padding-left: 2px;\n padding-right: 2px;\n margin-left: -2px;\n margin-right: -2px;\n outline: none;\n box-sizing: content-box;\n background-color: #5bc0de;\n max-width: 100%;\n}\n\n.as-toc-item:not(.as-renaming) .as-toc-item-name-ctn input,\n.as-toc-item.as-renaming .as-toc-item-name {\n display: none;\n}\n", ""]); /***/ }), /* 281 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(282); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 282 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".cke_panel {\n z-index: 1000000000 !important;\n}\n\n\nspan.cke_button_icon.cke_button__as-variable-box-ico_icon {\n background-size: cover;\n background-image: url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB2aWV3Qm94PSIwIDAgMjQgMjQiPgogICAgPHBhdGggZmlsbD0iIzAwMDBmZiIgZD0iTTE5IDNINUMzLjkgMyAzIDMuOSAzIDVWMTlDMyAyMC4xIDMuOSAyMSA1IDIxSDE5QzIwLjEgMjEgMjEgMjAuMSAyMSAxOVY1QzIxIDMuOSAyMC4xIDMgMTkgM003LjQgMThDNS45IDE2LjUgNSAxNC4zIDUgMTJTNS45IDcuNSA3LjQgNkw5IDYuN0M3LjcgNy45IDcgOS45IDcgMTJTNy43IDE2LjEgOSAxNy4zTDcuNCAxOE0xMi43IDE1TDExLjkgMTNMMTAuNSAxNUg5TDExLjMgMTEuOUwxMCA5SDExLjNMMTIuMSAxMUwxMy41IDlIMTVMMTIuOCAxMkwxNC4xIDE1SDEyLjdNMTYuNiAxOEwxNSAxNy4zQzE2LjMgMTYgMTcgMTQuMSAxNyAxMlMxNi4zIDcuOSAxNSA2LjdMMTYuNiA2QzE4LjEgNy41IDE5IDkuNyAxOSAxMlMxOC4xIDE2LjUgMTYuNiAxOFoiIC8+Cjwvc3ZnPg==\");\n}\n\nspan.cke_button_icon.cke_button__as-expression-box-ico_icon {\n background-size: cover;\n background-image: url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik01LDNIN1Y1SDVWMTBBMiwyIDAgMCwxIDMsMTJBMiwyIDAgMCwxIDUsMTRWMTlIN1YyMUg1QzMuOTMsMjAuNzMgMywyMC4xIDMsMTlWMTVBMiwyIDAgMCwwIDEsMTNIMFYxMUgxQTIsMiAwIDAsMCAzLDlWNUEyLDIgMCAwLDEgNSwzTTE5LDNBMiwyIDAgMCwxIDIxLDVWOUEyLDIgMCAwLDAgMjMsMTFIMjRWMTNIMjNBMiwyIDAgMCwwIDIxLDE1VjE5QTIsMiAwIDAsMSAxOSwyMUgxN1YxOUgxOVYxNEEyLDIgMCAwLDEgMjEsMTJBMiwyIDAgMCwxIDE5LDEwVjVIMTdWM0gxOU0xMiwxNUExLDEgMCAwLDEgMTMsMTZBMSwxIDAgMCwxIDEyLDE3QTEsMSAwIDAsMSAxMSwxNkExLDEgMCAwLDEgMTIsMTVNOCwxNUExLDEgMCAwLDEgOSwxNkExLDEgMCAwLDEgOCwxN0ExLDEgMCAwLDEgNywxNkExLDEgMCAwLDEgOCwxNU0xNiwxNUExLDEgMCAwLDEgMTcsMTZBMSwxIDAgMCwxIDE2LDE3QTEsMSAwIDAsMSAxNSwxNkExLDEgMCAwLDEgMTYsMTVaIiAvPgo8L3N2Zz4=\");\n}\n\nspan.cke_button_icon.cke_button__insert_video_icon {\n background-size: cover;\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik0xOSwxOUg1VjVIMTlNMTksM0g1QTIsMiAwIDAsMCAzLDVWMTlBMiwyIDAgMCwwIDUsMjFIMTlBMiwyIDAgMCwwIDIxLDE5VjVDMjEsMy44OSAyMC4xLDMgMTksM00xMCw4VjE2TDE1LDEyTDEwLDhaIiAvPgo8L3N2Zz4=\");\n}\n\n\ndiv.as-ck-inline-short-text {\n border: 1px solid #dddddd;\n height: 30px;\n line-height: 28px;\n font-size: 14px;\n font-family: Arial, Helvetica, sans-serif;\n padding-left: var(--as-input-horizontal-padding);\n padding-right: var(--as-input-horizontal-padding);\n outline: none;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.as-ck-inline-short-text p {\n padding: 0;\n margin: 0;\n}\n\n.as-ck-inline-short-text p::after {\n content: \"\";\n}\n\n.as-ck-inline-short-text .cke_reset.cke_widget_drag_handler_container {\n visibility: hidden;\n opacity: 0;\n display: none;\n}\n\n.cke.cke_browser_webkit {\n z-index: 2000000 !important;\n}\n\n.cke.cke_browser_webkit.as-hidden {\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n}\n\n.cke.as-has-sticky-toolbar {\n border-top: none;\n}\n\n.cke.as-has-sticky-toolbar > .cke_inner > .cke_top {\n border-top: 1px solid #d1d1d1;\n z-index: 100;\n}\n", ""]); /***/ }), /* 283 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(284); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 284 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "\n.as-video-url-dialog-url {\n max-width: calc(100vw - 8em - 40px);\n width: 500px;\n min-height: 30px;\n box-sizing: border-box;\n}\n\n.as-video-url-dialog input[type=\"number\"] {\n width: 5em;\n}\n\n.as-video-url-dialog-row> label {\n display: inline-block;\n vertical-align: middle;\n width: 6em;\n}\n\n.as-video-url-dialog-row {\n padding-bottom: 10px;\n white-space: pre;\n}\n\n.as-video-url-dialog-row > * {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-video-url-dialog-video-image{\n max-width: 200px;\n max-height: 200px;\n\n}", ""]); /***/ }), /* 285 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(286); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 286 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ":root {\n --as-vertical-timeline-item-height: 40px;\n}\n\n.as-vertical-timeline {\n display: inline-block;\n color: white;\n font-size: 14px;\n font-family: Arial, Helvetica, sans-serif;\n text-align: left;\n padding: 5px;\n}\n\n.as-vertical-timeline-item {\n height: var(--as-vertical-timeline-item-height);\n white-space: nowrap;\n}\n\n.as-vertical-timeline-item.as-inactive {\n color: rgba(200, 200, 200, 0.5);\n}\n\n.as-vertical-timeline-item.as-active .as-vertical-timeline-tile {\n text-shadow: 1px 0 0 currentColor;\n}\n\n.as-vertical-timeline-item:not(:first-child) .as-vertical-timeline-icon-ctn::before {\n content: \"\";\n display: inline-block;\n height: calc(var(--as-vertical-timeline-item-height) - 30px);\n border-left: 2px solid currentColor;\n position: absolute;\n left: calc(50% - 1px);\n bottom: calc(100% + 2px);\n}\n\n\n.as-vertical-timeline-icon-ctn {\n display: inline-block;\n margin-right: 20px;\n position: relative;\n vertical-align: middle;\n\n}\n\n.as-vertical-timeline-icon-ctn span {\n font-size: 24px;\n}\n\n\n.as-vertical-timeline-tile {\n display: inline-block;\n vertical-align: middle;\n\n}\n\n\n/*//check-circle*/", ""]); /***/ }), /* 287 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(288); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 288 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".absol-autocomplete-input-item.as-place-search-auto-complete-item:not(:last-child) {\n border-bottom: 1px solid #dddddd;\n\n}\n\n.absol-autocomplete-input-item.as-place-search-auto-complete-item {\n padding: 3px 5px;\n height: auto;\n}\n", ""]); /***/ }), /* 289 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-location-input-modal {\n z-index: 800001;\n}\n\n\n.as-location-picker-control-ctn {\n margin: 10px;\n background-color: white;\n box-shadow: rgb(0 0 0 / 30%) 0px 1px 4px -1px;\n border-radius: 2px;\n}\n\n\n.as-location-picker-control-btn {\n width: 40px;\n height: 40px;\n padding: 0;\n box-sizing: border-box;\n background-color: transparent;\n border: none;\n color: rgb(102, 102, 102);\n}\n\n.as-location-picker-control-btn:hover {\n color: black;\n}\n\n.gm-ui-hover-effect {\n outline: none;\n}\n\n.as-location-picker-control-btn > span {\n font-size: 2em;\n}\n\n\n.as-location-picker-search-input {\n height: 30px;\n width: 250px;\n border-radius: 2px;\n padding-right: 30px;\n position: relative;\n}\n\n.as-location-picker-search-input > input {\n outline: none;\n}\n\n\n.as-location-picker-search-input-search-icon-ctn {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n width: 30px;\n text-align: center;\n font-size: 20px;\n color: rgb(102, 102, 102);\n}\n\n.as-location-picker-search-input-search-icon-ctn:hover {\n color: black;\n}\n\n.as-location-picker-search-input-search-icon-ctn::before,\n.as-location-picker-search-input-search-icon-ctn > span {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-location-picker-search-input-search-icon-ctn::before {\n content: \"\";\n height: 100%;\n}\n\n.as-location-picker-control-ctn .as-flexicon-button {\n font-size: 14px;\n min-width: 9em;\n height: calc(2em + 2px);\n}\n\n.as-location-picker-control-ctn .as-flexicon-button:not(:last-child) {\n margin-right: 20px;\n}\n\n\n.as-location-picker-control-ctn.as-transparent {\n background-color: transparent;\n box-shadow: none;\n}\n\n.as-location-picker.as-read-only .as-location-picker-cancel-btn,\n.as-location-picker.as-read-only .as-location-picker-search-input {\n display: none;\n}\n\n.as-location-picker-control-ctn.as-bottom button{\n box-shadow: 0 0px 2px 4px white;\n -webkit-box-shadow: 0 0 2px 4px white;\n -moz-box-shadow: 0 0 2px 4px white;\n}\n\n\n.as-location-input-modal {\n\n}\n\n.as-location-input-modal-window {\n padding: 10px;\n width: calc(100vw - 10px);\n height: calc(100vh - 10px);\n box-sizing: border-box;\n max-width: 900px;\n max-height: 600px;\n box-shadow: 0px 1px 4px -1px rgba(0, 0, 0, 0.7);\n -webkit-box-shadow: 0px 1px 4px -1px rgba(0, 0, 0, 0.7);\n border-radius: 5px;\n background-color: white;\n}\n\n\n.as-location-input-modal-window > .as-location-picker {\n width: 100%;\n height: 100%;\n}\n\n.as-location-input {\n height: var(--as-input-height);\n border-radius: var(--as-input-border-radius);\n border: 1px solid #dddddd;\n box-sizing: border-box;\n width: calc(13em + 50px);\n display: inline-block;\n vertical-align: middle;\n position: relative;\n background-color: white;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n}\n\n\n.as-location-input.as-disabled {\n background-color: var(--as-disabled-background-color);\n pointer-events: none;\n}\n\n\n.as-location-input-text {\n outline: none;\n width: calc(100% - 2em - 1px);\n height: 100%;\n border: none;\n background-color: transparent;\n display: block;\n padding: 0 0 0 var(--as-input-horizontal-padding);\n font: inherit;\n box-sizing: border-box;\n\n}\n\n.as-location-input-icon-ctn {\n border-left: 1px solid #ddd;\n border-right: none;\n border-top: none;\n border-bottom: none;\n text-align: center;\n position: absolute;\n right: 0;\n width: calc(2rem + 1px);\n box-sizing: border-box;\n top: 0;\n height: 100%;\n background-color: rgba(169, 169, 169, 0.1);\n cursor: pointer;\n font-size: inherit;\n}\n\n\n.as-location-input-icon-ctn:hover {\n background-color: rgba(169, 169, 169, 0.25);\n}\n\n.as-location-input-icon-ctn:active {\n background-color: rgba(169, 169, 169, 0.5);\n}\n\n\n.as-location-input-icon-ctn > span {\n line-height: 2em;\n font-size: calc(16em / 14);\n}\n\n.as-location-input.as-disabled {\n color: var(--as-disabled-text-color);\n pointer-events: none;\n}\n\n.as-location-input.as-disabled input {\n background-color: var(--as-disabled-background-color);\n}\n\n.as-location-input.as-value-null .as-location-input-clear-btn,\n.as-location-input.as-must-not-null .as-location-input-clear-btn {\n display: none;\n}\n\n.as-location-input-clear-btn {\n font-size: inherit;\n position: absolute;\n right: calc(2em + 2px);\n height: calc(2em + 2px);\n top: calc(50% - -1em - 1px);\n box-sizing: border-box;\n background-color: transparent;\n border: none;\n color: #bbb;\n visibility: hidden;\n}\n\n.as-location-input-clear-btn:hover {\n color: rgb(132, 132, 132)\n}\n\n.as-location-input-clear-btn:active {\n color: #525555;\n}\n\n.as-location-input-text:focus + .as-location-input-clear-btn,\n.as-location-input:hover .as-location-input-clear-btn {\n visibility: visible;\n}\n\n\n@media screen and (max-width: 600px) {\n .as-location-input-modal-window {\n max-width: unset;\n max-height: unset;\n\n }\n}\n\n\n@media screen and (max-width: 500px) {\n .as-location-picker-control-ctn.as-top {\n margin-top: 60px;\n width: calc(100% - 20px);\n }\n\n .as-location-picker-control-ctn.as-top .as-location-picker-search-input {\n width: 100%;\n }\n\n .as-location-input-modal-window {\n padding: 0;\n }\n\n .as-location-picker-control-ctn.as-bottom button{\n margin-top: 20px;\n }\n}\n\n\n.as-location-input-modal.as-mobile .as-location-input-modal-window {\n height: calc(100vh - 80px);\n}", ""]); /***/ }), /* 290 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ":root {\n --control-horizontal-distance-2: 10px;\n}\n\n.mk-nav {\n position: relative;\n --mk-nav-line-top: 0;\n font-family: Arial, Helvetica, sans-serif;\n font-size: 1rem;\n user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n -moz-user-select: none;\n --mk-navigator-bound-left: 0;\n}\n\n.mk-nav::after {\n content: \"\";\n position: absolute;\n transition: top 0.2s;\n top: var(--mk-nav-line-top);\n height: calc(2em + 12px);\n border-right: 4px solid rgb(20, 100, 246);\n right: -3px;\n}\n\n.mk-nav.mk-has-draggable .mk-nav-item {\n padding-left: calc(2em + 2px);\n}\n\n.mk-nav-item {\n height: calc(2em + 12px);\n padding-left: var(--control-horizontal-distance-2);\n padding-right: 20px;\n min-width: 100px;\n cursor: pointer;\n white-space: nowrap;\n position: relative;\n overflow: visible;\n display: flex;\n align-items: center;\n background-color: white;\n}\n\n.mk-nav-item.as-board-moving {\n transform: none;\n left: var(--mk-navigator-bound-left) !important;\n background-color: rgb(169, 169, 172, 0.3);\n}\n\n.mk-nav-item:hover {\n background-color: rgb(169, 169, 172, 0.3);\n}\n\n.mk-nav-item.as-hidden{\n display: none;\n}\n\n.mk-nav-item-text-ctn {\n flex-grow: 1;\n padding-right: var(--control-horizontal-distance-2);\n padding-left: var(--control-horizontal-distance-2)\n}\n\n\n.mk-nav-item-switch-ctn {\n\n}\n\n/*\n.mk-nav-item::after {\n content: \"\";\n border: 1px solid #ddd;\n z-index: 2;\n pointer-events: none;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: -1px;\n}\n\n.mk-nav-item:hover::after,\n.mk-nav-item.mk-current::after{\n border-color: rgb(20, 100, 246);\n z-index: 3;\n}\n*/\n\n\n.mk-nav-item.mk-current {\n color: rgb(20, 100, 246);\n text-shadow: 1px 0 0 currentColor;\n}\n\n.mk-nav-item-drag-zone {\n position: absolute;\n z-index: 1;\n left: 0;\n top: 0;\n bottom: 0;\n width: 30px;\n font-size: inherit;\n}\n\n.mk-nav-item-drag-zone i {\n font-size: 1.7em;\n}\n\n.mk-nav-item-drag-zone::before {\n content: \"\";\n height: 100%;\n}\n\n.mk-nav-item-drag-zone::before,\n.mk-nav-item-drag-zone i {\n display: inline-block;\n vertical-align: middle;\n}", ""]); /***/ }), /* 291 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(292); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 292 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ":root {\n --as-process-l-bar-active-color: rgb(255, 160, 0);\n --as-process-l-bar-item-width: 60px;\n}\n\n.as-process-l-bar {\n font-family: Arial, Helvetica, sans-serif;\n font-size: 14px;\n display: inline-block;\n vertical-align: top;\n position: relative;\n --as-process-l-bar-item-min-width: 0;\n}\n\n\n\n.as-process-l-bar-step-ctn {\n white-space: nowrap;\n}\n\n.as-process-l-bar-col:not(:last-child) {\n margin-right: 10px;\n}\n\n.as-process-l-bar-col {\n vertical-align: top;\n display: inline-block;\n}\n\n.as-process-l-bar-step {\n width: var(--as-process-l-bar-item-width);\n min-width: var(--as-process-l-bar-item-min-width);\n height: 15px;\n background-color: #ebebeb;\n border: solid 1px #bfbfbf;\n transition: background-color 0.2s;\n position: relative;\n}\n\n\n\n.as-process-l-bar-step.as-active {\n background-color: var(--as-process-l-bar-active-color);\n border-color: rgb(20, 100, 246);\n}\n\n.as-process-l-bar-step.as-active::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n top: calc(100% + 3px);\n border-top: 2px solid rgb(20, 100, 246);\n}\n\n\n.as-process-l-bar-step::before {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n}\n\n.as-process-l-bar.as-disabled .as-process-l-bar-step::before{\n display: none;\n}\n\n.as-process-l-bar-step:hover::before {\n background-color: rgba(169, 169, 172, 0.3);\n}\n\n.as-process-l-bar-step.as-active,\n.as-process-l-bar-step:hover {\n background-color: var(--as-process-l-bar-active-color);\n}\n\n\n.as-process-l-bar-col .as-process-l-bar-step:not(:last-child) {\n margin-bottom: 10px;\n}\n\n.as-process-l-bar-step-name {\n position: absolute;\n left: 0;\n top: 24px;\n font-weight: bold;\n}\n\n\n.as-process-l-bar.as-col-layout .as-process-l-bar-step-name {\n position: relative;\n left: initial;\n top: unset;\n}\n\n\n.as-process-l-bar.as-single-line .as-process-l-bar-step-ctn {\n white-space: normal;\n}\n\n\n.as-process-l-bar.as-single-line .as-process-l-bar-col {\n margin-bottom: 10px;\n}\n\n.as-process-l-bar.as-single-line .as-process-l-bar-step-name {\n position: relative;\n display: block;\n left: 0 !important;\n top: 0!important;\n}", ""]); /***/ }), /* 293 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(294); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 294 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".kv-comment-item {\n font-size: 1rem;\n font-family: Arial, Helvetica, sans-serif;\n position: relative;\n\n padding: 0 calc(2em + 7px) 0 calc(2.85em + 20px);\n cursor: pointer;\n background-color: white;\n}\n\n.kv-comment-item:hover{\n background-color: #f2f5fa;\n}\n\n\n.kv-comment-avatar-ctn {\n position: absolute;\n left: 10px;\n top: 0;\n bottom: 0;\n}\n\n.kv-comment-avatar-ctn::before,\n.kv-comment-item-flag-ctn::before {\n content: \"\";\n display: inline-block;\n height: 100%;\n vertical-align: middle;\n}\n\n.kv-comment-avatar {\n width: 2.85em;\n height: 2.85em;\n background-size: cover;\n border-radius: 50%;\n display: inline-block;\n vertical-align: middle;\n}\n\n.kv-comment-item-content {\n padding: 5px 10px;\n border: 1px solid #d6d6d6;\n border-radius: 7px;\n line-height: 1.5;\n}\n\n\n.kv-comment-item-flag-ctn {\n position: absolute;\n right: 10px;\n top: 0;\n bottom: 0;\n}\n\n.kv-comment-item-flag-unread {\n display: none;\n vertical-align: middle;\n width: 0.75em;\n height: 0.75em;\n background-color: blue;\n border-radius: 50%;\n}\n\n.kv-comment-item.as-unread .kv-comment-item-flag-unread {\n display: inline-block;\n}\n\n.kv-comment-item-time {\n font-weight: bold;\n}", ""]); /***/ }), /* 295 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(296); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 296 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ":root {\n --table-row-height: 40px;\n}\n\n\n.as-dynamic-table-wrapper {\n --dt-content-height: 0px;\n --dt-scroll-bar-width: 17px;\n --dt-content-width: 0;\n --dt-header-height: 0;\n --dt-fixed-x-width: 0;\n --dt-dragging-row-height: 0;\n position: relative;\n\n /*padding-right: 17px;*/\n /*padding-bottom: 17px;*/\n box-sizing: border-box;\n height: var(--dt-content-height);\n overflow: hidden;\n}\n\n\n.as-dynamic-table-wrapper.as-table-layout-fixed table.as-dynamic-table{\n table-layout: fixed;\n}\n\ntd .as-dynamic-table-wrapper .as-dt-header-cell {\n --as-force-min-width: 0;\n}\n\n.as-dynamic-table-wrapper .as-dt-header-cell.as-col-width-auto::before { /*table in table bug*/\n content: \"\";\n display: block;\n width: var(--as-force-min-width);\n}\n\n\n.as-dynamic-table-wrapper.as-inline {\n max-width: calc(var(--dt-content-width) + var(--dt-scroll-bar-width));\n}\n\n.as-dynamic-table-wrapper.as-overflow-x.as-has-fixed-col .as-dynamic-table-viewport::before {\n content: \"\";\n position: absolute;\n top: 0;\n bottom: 0;\n border-right: 2px solid #aaa;\n left: calc(var(--dt-fixed-x-width) - 1px);\n z-index: 20;\n pointer-events: none;\n}\n\n.as-dynamic-table-wrapper.as-overflow-y .as-dynamic-table-viewport::after {\n content: \"\";\n position: absolute;\n left: 0;\n width: 100%;\n max-width: var(--dt-content-width);\n border-top: 2px solid #aaa;\n top: calc(var(--dt-header-height) - 1px);\n z-index: 20;\n}\n\n.as-dynamic-table-wrapper.as-has-fixed-col {\n max-width: var(--dt-content-width);\n}\n\n\n.as-dynamic-table-wrapper.as-inline {\n}\n\n\n.as-dynamic-table-wrapper.as-overflow-x {\n padding-bottom: var(--dt-scroll-bar-width);\n}\n\n.as-dynamic-table-wrapper.as-overflow-x {\n height: calc(var(--dt-content-height) + var(--dt-scroll-bar-width));\n}\n\n.as-dynamic-table-wrapper.as-overflow-x .as-dynamic-table-hb,\n.as-dynamic-table-wrapper.as-overflow-y .as-dynamic-table-vb {\n display: block;\n}\n\n.as-dynamic-table-wrapper.as-overflow-y {\n padding-right: var(--dt-scroll-bar-width);\n}\n\n\n.as-dynamic-table-wrapper.as-overflow-y.as-has-fixed-col {\n max-width: calc(var(--dt-content-width) + var(--dt-scroll-bar-width));\n}\n\n\n.as-dynamic-table-viewport {\n width: 100%;\n height: 100%;\n overflow: hidden;\n position: relative;\n}\n\n\n.as-dynamic-table.as-dt-fixed-y,\n.as-dynamic-table.as-fixed-x {\n table-layout: fixed;\n width: auto;\n /*display: inline-block;*/\n}\n\n.as-dynamic-table-fixed-x-ctn {\n position: absolute;\n left: 0;\n top: 0;\n z-index: 6;\n display: none;\n}\n\n.as-dynamic-table-wrapper.as-has-fixed-col .as-dynamic-table-fixed-x-ctn {\n display: block;\n}\n\n.as-dynamic-table-fixed-xy-ctn {\n position: absolute;\n left: 0;\n top: 0;\n z-index: 9;\n}\n\n\n.as-dynamic-table-fixed-y-ctn {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 6;\n}\n\n.as-dynamic-table-wrapper.as-headless .as-dynamic-table-fixed-x-ctn,\n.as-dynamic-table-wrapper.as-headless .as-dynamic-table-fixed-y-ctn,\n.as-dynamic-table-wrapper.as-headless .as-dynamic-table-fixed-xy-ctn {\n visibility: hidden;\n}\n\n.as-dynamic-table-space {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n}\n\n.as-dynamic-table-wrapper.as-has-fixed-col .as-dynamic-table-space,\n.as-dynamic-table-wrapper.as-inline .as-dynamic-table-space {\n width: 8096px;\n}\n\n\n.as-dynamic-table-vb {\n position: absolute;\n right: 0;\n top: 0;\n height: 100%;\n width: var(--dt-scroll-bar-width);\n display: none;\n}\n\n.as-dynamic-table-wrapper.as-overflow-x .as-dynamic-table-vb {\n height: calc(100% - var(--dt-scroll-bar-width));\n}\n\n.as-dynamic-table-hb {\n position: absolute;\n left: 0;\n bottom: 0;\n width: 100%;\n height: var(--dt-scroll-bar-width);\n display: none;\n}\n\n.as-dynamic-table-wrapper.as-overflow-y .as-dynamic-table-hb {\n width: calc(100% - var(--dt-scroll-bar-width));\n}\n\n\n.as-dynamic-table-wrapper.as-no-paging .absol-page-selector {\n display: none;\n}\n\n.as-dynamic-table-wrapper .absol-page-selector[data-page-count=\"1\"] {\n display: none;\n}\n\n\n.as-dynamic-table-fixed-x-col {\n display: none;\n position: absolute;\n left: 0;\n top: 0;\n width: auto !important;\n z-index: 12;\n}\n\n.as-dynamic-table-wrapper.as-has-fixed-col .as-dynamic-table-fixed-x-col {\n display: block;\n}\n\n.as-dynamic-table {\n font-size: 1rem;\n font-family: Arial, Helvetica, sans-serif;\n border-collapse: collapse;\n box-sizing: border-box;\n display: inline-table;\n table-layout: fixed;\n}\n\n\n.as-dynamic-table-wrapper:not(.as-inline) .as-dynamic-table-space .as-dynamic-table {\n /*min-width: 100%;*/\n table-layout: auto;\n /*display: table;*/\n}\n\n.as-dt-header {\n background-color: #d6d6d6;\n}\n\n.as-dt-header-cell {\n font-weight: bold;\n padding: 10px;\n border: 1px solid #ababab;\n position: relative;\n box-sizing: border-box;\n}\n\n.as-dt-header-cell-resizer {\n position: absolute;\n right: -2px;\n top: 0;\n bottom: 0;\n border-right: 4px solid transparent;\n z-index: 5;\n cursor: col-resize;\n /*display: none;*/\n}\n\n/*\n.as-dynamic-table-wrapper[id] .as-dt-header-cell[data-col-id] .as-dt-header-cell-resizer {\n display: block;\n}*/\n\n.as-dt-header-cell[data-sort-key] {\n padding-right: 1.75em;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n}\n\n.as-dt-sort-btn {\n display: none;\n vertical-align: middle;\n line-height: 1.5em;\n position: absolute;\n right: 0.25em;\n top: calc(50% - 0.75em);\n color: #a9a9a9;\n\n height: 1.5em;\n width: 1.5em;\n pointer-events: none;\n}\n\n.as-dt-header-cell[data-sort-key] .as-dt-sort-btn {\n display: inline-block;\n}\n\n.as-dt-header-cell[data-sort-order=\"ascending\"] .as-dt-sort-btn .mdi-menu-down,\n.as-dt-header-cell[data-sort-order=\"descending\"] .as-dt-sort-btn .mdi-menu-up {\n color: #007bff;\n}\n\n.as-dt-sort-btn span {\n position: absolute;\n display: inline-block;\n left: 0;\n font-size: 2em;\n\n}\n\n.as-dt-sort-btn .mdi-menu-up {\n bottom: 0.18em;\n}\n\n\n.as-dt-sort-btn .mdi-menu-down {\n top: 0.18em;\n}\n\n\n.as-dt-body-row:nth-child(odd) {\n background-color: rgb(245, 245, 245);\n}\n\n.as-dt-body-row:nth-child(even) {\n background-color: white;\n}\n\n.as-dt-body-cell {\n padding: 4px 5px;\n border: 1px solid #ddd;\n box-sizing: border-box;\n}\n\n.as-dt-body-row .as-drag-zone .mdi,\n.as-tree-table-row .as-drag-zone .mdi {\n font-size: 25px;\n}\n\n\n.as-dt-body-row {\n height: calc(40em / 14);\n}\n\n.as-dt-body-row {\n height: var(--table-row-height);\n}\n\n.as-dynamic-table-wrapper:not(.as-searching) .as-dt-body-row .as-drag-zone,\n.as-tree-table:not(.as-searching) .as-tree-table-row .as-drag-zone {\n cursor: move;\n}\n\n.as-dynamic-table-wrapper.as-row-dragging .as-dt-body-row {\n transition: transform 0.2s;\n}\n\n.as-dt-body-row.as-dragging {\n opacity: 0.0;\n /*position: relative;*/\n /*z-index: 1000000;*/\n\n /*opacity: 0.8;*/\n}\n\n\n.as-dt-body-row.as-after-dragging {\n\n}\n\n\n.as-dt-body-row-cloned-ctn {\n position: fixed;\n cursor: move;\n opacity: 0.7;\n -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n\n}\n\n.as-dt-body-row-cloned-ctn > table {\n display: block;\n}\n\n.as-dt-body-row.as-drag-neighbor {\n position: relative;\n z-index: 1;\n transition: transform 0.05s;\n\n}\n\n.as-dt-body-row.as-dragging.as-homing {\n transition: transform 0.06s;\n}\n\n\n.as-dynamic-table-wrapper.as-searching .as-drag-zone {\n opacity: 0.3;\n pointer-events: none;\n}\n\n.as-dynamic-table-wrapper .as-drag-zone {\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n}\n\n.as-dt-insert-line {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 2px solid blue;\n}\n\n.as-dt-body-cell > .absol-checkbox:last-child:first-child {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-dt-row-index::before {\n content: attr(data-idx);\n}\n\n.as-dt-row-index:not([data-idx])::before {\n content: \"000\";\n}\n\n\n.as-dynamic-table-wrapper.as-no-graphic .as-dt-header-cell,\n.as-dynamic-table-wrapper.as-no-graphic .as-dt-body-cell {\n border: none;\n}\n\n.as-dynamic-table-wrapper.as-no-graphic .as-dt-header,\n.as-dynamic-table-wrapper.as-no-graphic .as-dt-body-row {\n background-color: transparent;\n}\n\n\n.absol-single-page-scroller-viewport .as-dynamic-table-wrapper:not(.as-adapt-infinity-grow) {\n max-height: calc(var(--single-page-scroller-height) - 20px);\n}\n\n.absol-single-page-scroller-viewport > div:last-child .as-dynamic-table-wrapper:not(.as-adapt-infinity-grow) {\n max-height: calc(var(--single-page-scroller-height) - 20px);\n}\n\n/*Keeview modal*/\nbody > div > table .as-dynamic-table-wrapper {\n width: var(--dt-content-width);\n max-width: calc(90vw - 50px);\n}\n\nbody > div > table .as-dynamic-table-wrapper.as-overflow-y {\n width: calc(var(--dt-content-width) + var(--dt-scroll-bar-width));\n max-width: calc(90vw - 50px);\n}\n\n/*.as-dynamic-table-wrapper*/\n\n", ""]); /***/ }), /* 297 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(298); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 298 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-omt {\n display: block;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n font-size: 1rem;\n}\n\n.as-omt-node {\n\n}\n\n\n.as-omt-field {\n --level: 0;\n position: relative;\n padding-bottom: 10px;\n}\n\n\n.as-omt-field.as-hover::before {\n border-color: rgb(30, 101, 234);\n border-width: 2px;\n}\n\n.as-omt-field::before {\n content: \"\";\n position: absolute;\n left: 0;\n top: 15px;\n right: 0;\n bottom: 0;\n border: 1px solid rgb(170, 170, 200);\n z-index: 0;\n pointer-events: none;\n}\n\n.as-omt-field-header {\n padding-left: 10px;\n line-height: 2;\n}\n\n\n.as-omt-field-body {\n padding-left: 10px;\n padding-right: 10px;\n min-height: 1em;\n}\n\n\n.as-omt-field-raw-ctn,\n.as-omt-field.as-mode-raw > .as-omt-field-body {\n display: none;\n}\n\n.as-omt-field.as-mode-raw > .as-omt-field-raw-ctn {\n display: block;\n}\n\n\n.as-omt-field-command-ctn {\n position: absolute;\n z-index: 20;\n right: 10px;\n top: 20px;\n background-color: white;\n height: 30px;\n display: none;\n}\n\n.bsc-white .as-omt-field-command-ctn button[data-command=\"view_mode\"] {\n display: none;\n}\n\n\n.as-omt-field.as-hover > .as-omt-field-command-ctn {\n display: block;\n}\n\n.as-omt-field-command-ctn > button {\n height: 30px;\n}\n\n.as-omt-field-command-ctn > button:not(:first-child) {\n margin-left: 5px;\n}\n\n.as-omt-field-command-ctn > button span {\n font-size: 24px;\n}\n\n.as-omt-field-name {\n font-weight: bold;\n background-color: white;\n display: inline-block;\n z-index: 3;\n position: relative;\n padding-left: 5px;\n padding-right: 5px;\n margin-right: 10px;\n}\n\n\n.as-omt-field-body > .as-omt-field:first-child {\n margin-top: 10px;\n}\n\n.as-omt-field code {\n white-space: pre-wrap;\n}\n\n.as-omt-field-raw-ctn {\n padding-left: 10px;\n padding-right: 10px;\n}\n\n.as-omt-field.as-type-struct > .as-omt-field-body {\n padding-left: 20px;\n}\n\nimg.as-omt-field-value {\n max-width: calc(100vw - 5em);\n max-height: 10em;\n}\n\n.as-omt-dialog .as-message-dialog-body {\n max-height: calc(90vh - 5em);\n max-width: calc(90vw - 5em);\n overflow: auto;\n}\n\n.as-omt-option-row {\n display: flex;\n align-items: center;\n}\n\n.as-omt-option-row:not(:first-child) {\n margin-top: 5px;\n}\n\n.as-omt-field-raw-ctn > div > .as-omt-field-name {\n display: none;\n}\n\n.as-omt-option-row > .as-omt-field {\n flex-grow: 1;\n}\n\n\n.as-omt-field-color-value-bg {\n height: 2em;\n width: 5em;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBhXYzh8+PD///8hJAOcBSRxyRw+DABJUCox2kjvSgAAAABJRU5ErkJggg==');\n background-size: 1.5em;\n image-rendering: optimizeSpeed;\n image-rendering: -moz-crisp-edges;\n image-rendering: -o-crisp-edges;\n image-rendering: -webkit-optimize-contrast;\n image-rendering: pixelated;\n image-rendering: optimize-contrast;\n -ms-interpolation-mode: nearest-neighbor;\n --omt-color-value: transparent;\n}\n\n.as-omt-field-color-value {\n width: 100%;\n height: 100%;\n background-color: var(--omt-color-value);\n}\n", ""]); /***/ }), /* 299 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(300); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 300 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-tokenize-hyper-input {\n margin: 0;\n padding: 0;\n white-space: pre-wrap;\n -moz-user-modify: read-write;\n -webkit-user-modify: read-write;\n word-break: normal;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n}\n\n\n.as-emoji-token{\n font-size: inherit;\n overflow: hidden;\n box-sizing: border-box;\n display: inline;\n white-space: pre;\n background-size: 1.2em;\n background-position:left;\n background-repeat: no-repeat;\n}\n\n.as-tag-token{\n font-size: inherit;\n display: inline;\n white-space: pre;\n font-weight: bold;\n color: #1e1ec8;\n}\n\n\n\n", ""]); /***/ }), /* 301 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(302); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 302 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ":root {\n --as-path-menu-max-text-width: 150px;\n}\n\n.am-mobile-theme{\n --as-path-menu-max-text-width: 100px;\n}\n\n\n.as-path-menu-item .mdi-chevron-right::before {\n transition: transform 0.1s;\n}\n\n.as-path-menu .as-ribbon-split-button-text {\n max-width: var(--as-path-menu-max-text-width);\n text-overflow: ellipsis;\n overflow: hidden;\n display: inline-block;\n white-space: nowrap;\n}\n\n.as-path-menu-item.as-has-no-item .as-ribbon-split-button-extend {\n display: none;\n}", ""]); /***/ }), /* 303 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(304); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 304 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".am-dual-select-box {\n\n}\n\n\n.am-dual-select-box .absol-selectlist-item span {\n white-space: normal;\n display: inline-block;\n margin-right: 0;\n line-height: calc(30rem / 14);\n}\n\n.am-mobile-theme.bsc-white .am-dual-select-box .absol-selectlist-item span{\n line-height: calc(30rem / 14);\n}\n\n.am-dual-select-box .absol-selectlist-item {\n height: auto;\n}\n\n.am-mobile-theme.bsc-white .am-dual-select-box .absol-selectlist-item {\n height: auto;\n}\n\n.am-dual-select-box .absol-selectlist-item:not(:last-child) {\n border-bottom: 1px solid #efefef;\n}", ""]); /***/ }), /* 305 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(306); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 306 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "\n.as-tree-table {\n font-size: 1rem;\n font-family: Arial, Helvetica, sans-serif;\n border-collapse: collapse;\n}\n\n.as-tree-table-toggle {\n position: absolute;\n left: 5px;\n top: 0;\n bottom: 0;\n vertical-align: middle;\n padding-right: 0.3em;\n white-space: nowrap;\n user-select: none;\n}\n\n\n\n.as-tree-table-toggle::before {\n display: inline-block;\n vertical-align: middle;\n content: \"\";\n height: 100%;\n}\n\n.as-tree-table-head {\n background-color: #d6d6d6;\n}\n\n\n.as-tree-table-head-cell {\n font-weight: bold;\n padding: 10px;\n border: 1px solid #ddd;\n position: relative;\n}\n\n\n.as-tree-table-row {\n height: calc(40em / 14);\n}\n\n.as-tree-table-row:nth-child(odd) {\n background-color: rgb(245, 245, 245);\n}\n\n.as-tree-table-row:nth-child(even) {\n background-color: white;\n}\n\n.as-tree-table-cell {\n padding: 5px;\n border: 1px solid #ddd;\n position: relative;\n}\n\n.as-tree-table-cell[data-type=\"number\"] {\n text-align: right;\n}\n\n.as-tree-table-row.as-is-opened .as-tree-table-toggle .toggle-close,\n.as-tree-table-row:not(.as-is-opened) .as-tree-table-toggle .toggle-open {\n display: none;\n}\n\n.as-tree-table-toggle .toggler-ico {\n display: inline-block;\n vertical-align: middle;\n}\n\n\n\n.as-tree-table-row:not(.as-has-sub-row) .as-tree-table-toggle .toggler-ico {\n visibility: hidden;\n}\n\n/*.as-tree-table-row {*/\n/* height: var(--table-row-height);*/\n/*}*/\n\n.as-printer-content .as-tree-table-toggle svg{\n display: none;\n}\n\n.as-printer-content .as-tree-table-head-cell,\n.as-printer-content .as-tree-table-cell{\n border-color: black;\n}", ""]); /***/ }), /* 307 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(308); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 308 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-finder {\n font-size: 1rem;\n position: relative;\n --finder-header-height: 51px;\n --finder-nav-width: 250px;\n overflow: hidden;\n font-family: Arial, Helvetica, sans-serif;\n}\n\n.as-finder.as-compact-mode {\n --finder-header-height: 0;\n}\n\n.as-finder.as-compact-mode .as-finder-header {\n display: none;\n}\n\n.as-finder-header {\n position: absolute;\n top: 0;\n left: 0;\n height: var(--finder-header-height);\n width: 100%;\n border-bottom: 1px solid #dddddd;\n box-sizing: border-box;\n}\n\n.as-finder-header .as-flexicon-button {\n min-width: 110px;\n}\n\n.as-finder-nav-ctn,\n.as-finder-search-ctn {\n position: absolute;\n left: 0;\n top: var(--finder-header-height);\n width: var(--finder-nav-width);\n bottom: 0;\n border-right: 1px solid #dddddd;\n padding-top: 29px;\n background-color: white;\n z-index: 20;\n}\n\n.as-finder-nav-ctn {\n}\n\n.as-finder-search-ctn {\n visibility: hidden;\n\n}\n\n\n.as-finder-nav-header,\n.as-finder-search-header {\n display: flex;\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n height: 29px;\n box-sizing: border-box;\n border-bottom: 1px solid #dddddd;\n align-items: center;\n}\n\n.as-finder-nav-header-left {\n flex-grow: 1;\n}\n\n.as-finder-nav-header-right button {\n height: 100%;\n width: 30px;\n margin-left: 5px;\n}\n\n.as-finder-nav-ctn > .as-exp-group,\n.as-finder-search-ctn > .as-finder-search-body {\n overflow-y: auto;\n width: 100%;\n height: 100%;\n}\n\n\n.as-finder-search-body {\n padding: 10px 5px;\n box-sizing: border-box;\n}\n\n\n.as-finder-search-field {\n padding-top: 10px;\n}\n\n.as-finder-search-field > div {\n display: inline-block;\n}\n\n.as-finder-search-field > div:first-child {\n width: 5em;\n}\n\n\n.as-finder-search-footer {\n text-align: center;\n padding-top: 20px;\n\n}\n\n.as-finder-search-footer button {\n min-width: 100px;\n}\n\n.as-finder-search-footer button:not(:last-child) {\n margin-right: 20px;\n}\n\n.as-finder-body {\n position: absolute;\n right: 0;\n left: var(--finder-nav-width);\n top: var(--finder-header-height);\n bottom: 0;\n padding-top: 29px;\n}\n\n.as-finder-content-header {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n height: 29px;\n box-sizing: border-box;\n border-bottom: 1px solid white;\n display: flex;\n\n}\n\n.as-finder-content-header-left {\n flex-grow: 1;\n}\n\n.as-finder:not(.as-mobile) .as-finder-content-header-right::after {\n content: \"Kéo thả file vào đây để tải lên\";\n color: rgb(100, 100, 180);\n font-style: italic;\n line-height: 28px;\n padding-right: 10px;\n display: inline-block;\n}\n\n\n.as-finder-content-ctn {\n width: 100%;\n height: 100%;\n}\n\n\n.as-finder-normal-action-button-ctn,\n.as-finder-tiny-action-button-ctn {\n position: absolute;\n left: 10px;\n top: calc(50% - 15px);\n white-space: nowrap;\n max-width: calc(100% - 50px);\n overflow: hidden;\n}\n\n.as-finder-normal-action-button-ctn > button:not(:last-child),\n.as-finder-tiny-action-button-ctn > button:not(:last-child) {\n margin-right: 10px;\n}\n\n.as-finder-tiny-action-button-ctn button,\n.as-finder-content-header button:not(.as-ribbon-button) {\n background-color: transparent;\n border: none;\n border-radius: 3px;\n width: 30px;\n height: 30px;\n font-size: inherit;\n padding: 0;\n color: var(--as-transparent-button-text-color);\n}\n\n.as-finder-content-header button.as-ribbon-button {\n height: 30px;\n}\n\n\n\n.as-finder-tiny-action-button-ctn button span {\n font-size: 1.3em;\n}\n\n.as-finder-tiny-action-button-ctn button:hover {\n color: var(--as-transparent-button-text-hover-color);\n}\n\n.as-finder-tiny-action-button-ctn button:active {\n color: var(--as-transparent-button-text-active-color);\n}\n\n\n.as-action-button-minimized .as-finder-normal-action-button-ctn,\n.as-finder:not(.as-action-button-minimized) .as-finder-tiny-action-button-ctn {\n visibility: hidden;\n}\n\n.as-finder[data-selected-file-count=\"0\"] .as-finder-header button[name=\"view\"],\n.as-finder[data-selected-file-count=\"0\"] .as-finder-header button[name=\"delete\"],\n.as-finder:not([data-selected-folder-count=\"0\"]) .as-finder-header button[name=\"delete\"],\n.as-finder[data-selected-file-count=\"0\"] .as-finder-header button[name=\"download\"],\n.as-finder[data-selected-file-count=\"0\"][data-selected-folder-count=\"0\"] .as-finder-header button[name=\"move\"],\n.as-finder:not([data-selected-file-count=\"1\"][data-selected-folder-count=\"0\"]) .as-finder-header button[name=\"rename\"],\n.as-finder:not(.as-mini-layout) .as-finder-content-header button[name=\"nav_toggle\"],\n.as-finder:not(.as-mini-layout) .as-finder-nav-ctn button[name=\"nav_toggle\"] {\n display: none;\n}\n\n.as-finder-nav-ctn {\n overflow-y: auto;\n\n}\n\n.as-finder-content-ctn {\n overflow-y: auto;\n z-index: 1;\n}\n\n.as-finder.as-mini-layout .as-finder-body {\n left: 0;\n}\n\n.as-finder.as-mini-layout .as-finder-nav-ctn,\n.as-finder.as-mini-layout .as-finder-search-ctn {\n left: calc(var(--finder-nav-width) * -1);\n transition: left 0.2s;\n}\n\n\n.as-finder.as-mini-layout.as-nav-open .as-finder-nav-ctn,\n.as-finder.as-mini-layout.as-nav-open .as-finder-search-ctn {\n left: 0;\n}\n\n.as-finder.as-mini-layout.as-nav-open::after {\n content: \"\";\n display: block;\n z-index: 8;\n position: absolute;\n left: 0;\n top: var(--finder-header-height);\n width: 100%;\n height: 100%;\n background-color: rgba(169, 169, 172, 0.2);\n}\n\n\n.as-finder-content::before,\n.as-finder-content::after {\n content: \"\";\n display: block;\n}\n\n.as-finder-content .as-file-thumbnail {\n display: inline-block;\n margin: 5px;\n}\n\n\n.as-finder-content {\n user-select: none;\n min-height: 100%;\n box-sizing: border-box;\n position: relative;\n}\n\n\n.as-finder:not(.as-writable-folder) .as-finder-header button[name=\"upload\"],\n.as-finder:not(.as-writable-folder) .as-finder-header button[name=\"delete\"],\n.as-finder:not(.as-writable-folder) .as-finder-header button[name=\"rename\"],\n.as-finder:not(.as-writable-folder) .as-finder-header button[name=\"move\"],\n.as-finder.as-disable-create-folder .as-finder-header button[name=\"new_folder\"]\n{\n display: none;\n}\n\n.as-finder-select-area {\n position: fixed;\n box-sizing: border-box;\n border: 2px solid rgba(0, 103, 240, 0.5);\n width: 100px;\n height: 100px;\n background-color: rgba(0, 103, 240, 0.2);\n /*background-color: ;*/\n}\n\n.as-finder:not(.as-dragging) .as-file-thumbnail:hover {\n background-color: rgba(29, 161, 255, 0.13);\n}\n\n\n.as-finder-upload-overlay {\n display: none;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n z-index: 4;\n backdrop-filter: blur(1px);\n -webkit-backdrop-filter: blur(1px);\n background-color: rgba(167, 167, 167, 0.1);\n font-size: 2rem;\n text-align: center;\n text-shadow: 2px 2px 3px white, -2px -2px 3px white, -2px 2px 3px white, 2px -2px 3px white;\n color: rgb(97, 79, 100);\n font-weight: bold;\n padding-top: calc(50% - 6em);\n}\n\n\n.as-finder-upload-overlay-icon-ctn {\n text-align: center;\n color: #1da1ff;\n font-size: 8rem;\n\n}\n\n.as-finder:not(.as-searching) .as-finder-body.as-drag-over .as-finder-upload-overlay {\n display: block;\n}\n\n\n.as-finder.as-searching .as-finder-nav-ctn {\n visibility: hidden;\n}\n\n.as-finder.as-searching .as-finder-search-ctn {\n visibility: visible;\n}\n\n.as-finder.as-searching .as-finder-content-header-right,\n.as-finder.as-searching .as-finder-header button[name='upload'],\n.as-finder.as-searching .as-finder-header button[name='move'] {\n display: none;\n}\n\n.as-finder-task-check {\n white-space: nowrap;\n}\n\n.as-finder-task-check >span{\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-finder-task-check .mdi {\n font-size: 1.5em;\n color: rgb(30, 237, 219);\n}\n\n\n.as-finder-task-check .mdi.mdi-alert-decagram-outline {\n color: red;\n}\n\n\n/**************************************************/\n\n.as-file-thumbnail {\n display: inline-block;\n vertical-align: top;\n position: relative;\n}\n\n.as-file-thumbnail-background {\n display: block;\n width: 100px;\n height: 100px;\n background-size: contain;\n background-position: center;\n background-repeat: no-repeat;\n box-sizing: border-box;\n border: 1px solid #c0c0c0;\n}\n\n.as-file-thumbnail-check {\n display: none;\n position: absolute;\n top: -2px;\n left: -2px;\n bottom: -2px;\n right: -2px;\n overflow: hidden;\n z-index: 4;\n pointer-events: none;\n border: 2px solid #0a90eb;\n}\n\n.as-file-thumbnail.as-checked .as-file-thumbnail-check {\n display: block;\n}\n\n.as-file-thumbnail-check::before {\n content: \"\";\n position: absolute;\n right: -28px;\n top: -28px;\n width: 56px;\n height: 56px;\n transform: rotate(45deg);\n background-color: #0a90eb;\n}\n\n.as-file-thumbnail-check .mdi {\n display: inline-block;\n position: absolute;\n right: 5px;\n top: 5px;\n font-size: 14px;\n color: white;\n}\n\n.as-file-thumbnail-file-name {\n word-wrap: break-word; /* IE 5.5-7 */\n white-space: -moz-pre-wrap; /* Firefox 1.0-2.0 */\n white-space: pre-wrap;\n text-overflow: ellipsis;\n overflow: hidden;\n width: 100px;\n max-height: 6.2em;\n line-height: 1.5;\n text-align: center;\n font-size: 13px;\n padding-top: 0.2em;\n box-sizing: border-box;\n}\n\n.as-file-thumbnail-file-name > span:last-child {\n white-space: nowrap;\n}\n\n.as-finder-folder-dialog-tree-ctn {\n max-height: calc(90vh - 250px);\n overflow-y: auto;\n border: 1px solid #dddddd;\n}\n\n.as-finder-folder-dialog-tree-ctn > .as-exp-group {\n width: 300px;\n}\n\n.as-finder-folder-dialog-selected-ctn {\n padding-bottom: 10px;\n white-space: pre-wrap;\n}\n\n.as-finder-folder-dialog-selected-ctn > span {\n white-space: nowrap;\n}\n\ndiv[data-view-as=\"list\"] {\n --col: 1;\n}\n\ndiv[data-view-as=\"list\"] .as-file-thumbnail {\n display: inline-block;\n margin-right: 4px;\n height: 50px;\n padding-left: 60px;\n white-space: nowrap;\n box-sizing: border-box;\n width: calc(100% / var(--col) - 10px * var(--col));\n}\n\ndiv[data-view-as=\"list\"] .as-file-thumbnail::before {\n content: \"\";\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n}\n\ndiv[data-view-as=\"list\"] .as-file-thumbnail-background {\n position: absolute;\n left: 0;\n top: 0;\n width: 50px;\n height: 50px;\n}\n\ndiv[data-view-as=\"list\"] .as-file-thumbnail-file-name {\n width: unset;\n max-width: 100%;\n text-align: left;\n}\n\ndiv[data-view-as=\"list\"] .as-file-thumbnail-background,\ndiv[data-view-as=\"list\"] .as-file-thumbnail-file-name {\n display: inline-block;\n vertical-align: middle;\n}\n\n\ndiv[data-view-as=\"lage_icons\"] .as-file-thumbnail-background{\n width: 200px;\n height: 200px;\n}\n\ndiv[data-view-as=\"lage_icons\"] .as-file-thumbnail-file-name {\n width: 200px;\n}", ""]); /***/ }), /* 309 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "/**** APP ***************/\n\n.am-application {\n width: 100%;\n height: 100%;\n position: relative;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n font-size: 14px;\n}\n\n.am-application-frameview {\n width: 100%;\n height: 100%;\n}\n\n\n.am-application-tabbar {\n display: none;\n}\n\n.am-application.am-show-tabbar .am-application-tabbar {\n display: block;\n}\n\n.am-application.am-show-tabbar .am-application-frameview {\n height: calc(100% - 3em);\n}\n\n\n/*************** HEADER****************************************/\n\n.am-header-bar {\n display: flex;\n align-items: center;\n background-color: var(--variant-color-primary);\n -webkit-box-shadow: 0px 1px 10px 2px rgba(0, 0, 0, 0.5);\n -moz-box-shadow: 0px 1px 10px 2px rgba(0, 0, 0, 0.5);\n box-shadow: 0px 1px 5px 1px rgba(0, 0, 0, 0.5);\n box-sizing: border-box;\n position: relative;\n font-family: Arial, Helvetica, sans-serif;\n color: white;\n height: 3em;\n font-size: 1rem;\n}\n\n\n.am-header-bar-left-btn,\nbutton.am-header-bar-command {\n display: inline-block;\n text-align: center;\n border: none;\n background-color: transparent;\n height: 3em;\n width: 3em;\n padding: 0;\n margin: 0;\n vertical-align: middle;\n color: white;\n outline: none;\n font-size: inherit;\n}\n\n.am-header-bar-left-btn span,\nbutton.am-header-bar-command span,\n.am-header-bar-left-btn i,\nbutton.am-header-bar-command i {\n font-size: 2em;\n}\n\nbutton.am-header-bar-command:not(:last-child) {\n margin-right: 0.6256em;\n}\n\n\n.am-header-bar-left-btn:active,\nbutton.am-header-bar-action:active,\nbutton.am-header-bar-command:active {\n color: rgb(220, 220, 222);\n}\n\n.am-header-bar-title-ctn {\n flex-grow: 1;\n white-space: nowrap;\n overflow: inherit;\n position: relative;\n height: 3em;\n}\n\n.am-header-bar-no-size-wrapper {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n white-space: nowrap;\n}\n\n.am-header-bar-no-size-wrapper::before {\n content: \"\";\n height: 100%;\n display: inline-block;\n vertical-align: middle;\n}\n\n.am-header-bar-title-wrapper {\n display: inline-block;\n vertical-align: middle;\n width: 100%;\n\n}\n\n.am-header-bar-title-ctn:first-child .am-header-bar-title {\n padding-left: 1.2em;\n}\n\n\n.am-header-bar-title {\n font-size: 1.2em;\n color: white;\n overflow: hidden;\n text-overflow: ellipsis;\n\n}\n\n.am-header-bar-title-desc {\n font-size: 0.8em;\n line-height: 2;\n}\n\n.am-header-bar-title-desc:empty {\n display: none;\n}\n\n\n.am-header-bar-right {\n\n}\n\n.am-header-bar-right::after {\n content: \"\";\n height: 100%;\n vertical-align: middle;\n display: inline-block;\n width: 0.357142857em;\n}\n\n\n.am-header-bar-right-item-ctn {\n vertical-align: middle;\n display: inline-block;\n}\n\n\nbutton.am-header-bar-action {\n height: 3em;\n width: 3em;\n background-color: transparent;\n color: white;\n border: none;\n font-size: inherit;\n outline: none;\n vertical-align: middle;\n}\n\n.am-header-bar-quickmenu-btn.am-status-active .am-header-bar-quickmenu-btn-circle {\n background-color: rgba(169, 169, 169, 0.5);\n}\n\n\n.am-header-bar-quickmenu-btn-circle {\n height: 2em;\n width: 2em;\n border-radius: 50%;\n text-align: center;\n}\n\n.am-header-bar-quickmenu-btn-circle span {\n font-size: 1.6em;\n line-height: 1.25em;\n}\n\n.am-header-bar-quickmenu-btn.as-active .mdi-dots-horizontal-circle-outline,\n.am-header-bar-quickmenu-btn:not(.as-active) .mdi-dots-horizontal-circle {\n display: none;\n}\n\n\n.am-header-bar.am-light-weight,\n.am-header-bar.am-light-weight .am-header-bar-title-ctn,\n.am-header-bar.am-light-weight .am-header-bar-left-btn,\n.am-header-bar.am-light-weight button.am-header-bar-command,\n.am-header-bar.am-light-weight button.am-header-bar-action {\n height: calc(2rem + 2px);\n}\n\n\n.am-header-bar.am-light-weight .am-header-bar-left-btn span,\n.am-header-bar.am-light-weight button.am-header-bar-command span,\n.am-header-bar-left-btn i,\n.am-header-bar.am-light-weight button.am-header-bar-command i {\n font-size: 1.6em;\n}\n\n.am-application.am-stack > .am-activity {\n position: absolute;\n left: 0;\n top: 0;\n}\n\n\n.am-activity {\n width: 100%;\n height: 100%;\n background-color: white;\n}\n\n.am-activity.am-grid {\n grid-template-areas: 'header' 'body';\n grid-template-rows: 3em auto;\n display: grid;\n}\n\n\n.am-activity.am-grid > .am-header-bar {\n grid-area: header;\n}\n\n.am-activity.am-grid > .am-activity-body {\n grid-area: body;\n padding: 10px 5px;\n overflow: auto;\n}\n\n.am-explore-item-block {\n display: inline-block;\n vertical-align: top;\n padding: 5px 18px;\n position: relative;\n user-select: none;\n}\n\n.am-explore-item-block:active::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 10px;\n right: 10px;\n background-color: var(--as-transparent-button-active-color);\n top: 0;\n bottom: 0;\n z-index: 2;\n border-radius: 5px;\n\n\n}\n\n.am-explore-item-block-icon {\n display: block;\n width: 50px;\n height: 50px;\n text-align: center;\n white-space: nowrap;\n color: var(--variant-color-secondary);\n padding: 0 5px;\n}\n\n.am-explore-item-block-icon::before {\n content: \"\";\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n}\n\n.am-explore-item-block-icon > span:first-child,\n.am-explore-item-block-icon > .mdi {\n display: inline-block;\n font-size: 50px;\n vertical-align: middle;\n}\n\n\n.am-explore-item-block-name {\n width: 60px;\n text-align: center;\n padding: 10px 0 5px 0;\n}\n\n\n.am-explore-section-break {\n display: flex;\n align-content: center;\n margin-bottom: 10px;\n}\n\n.am-explore-section-break-name {\n padding: 3px 5px 3px 5px;\n background-color: var(--variant-color-link);\n border-radius: 2px;\n color: white;\n\n}\n\n.am-explore-section-break-line {\n flex-grow: 1;\n position: relative;\n}\n\n.am-explore-section-break-line::after {\n position: absolute;\n left: 0;\n width: 100%;\n top: calc(50% - 1px);\n display: block;\n content: \"\";\n flex-grow: 1;\n border-top: 2px solid #dddddd;\n vertical-align: center;\n}\n\n.am-float-button {\n position: fixed;\n bottom: 12px;\n right: 12px;\n border-radius: 50%;\n width: 50px;\n height: 50px;\n transition: box-shadow 0.4s ease;\n background: #4610f5;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.6);\n color: #fff;\n font-size: 1.7rem;\n font-weight: bold;\n cursor: pointer;\n z-index: 500;\n border: none;\n}\n\n.am-explore-group {\n padding: 5px 5px 10px 5px;\n}\n\n/******************************/\n.am-springboard-menu.am-style-simple {\n background-color: rgb(235, 235, 235);\n padding: 10px;\n}\n\n.am-springboard-menu.am-style-simple .am-explore-group {\n background-color: white;\n border-radius: 5px;\n padding: 5px;\n\n}\n\n\n.am-springboard-menu.am-style-simple .am-explore-group:not(:last-child) {\n margin-bottom: 10px;\n}\n\n.am-springboard-menu.am-style-simple .am-explore-section-break-line {\n display: none;\n}\n\n\n.am-springboard-menu.am-style-simple .am-explore-section-break-name {\n background-color: transparent;\n color: black;\n font-weight: bold;\n padding: 5px 15px;\n}\n\n.am-springboard-menu.am-style-simple .am-explore-item-block {\n padding: 5px 16px;\n}\n\n\n.am-springboard-menu.am-style-simple .am-explore-section-break {\n margin-bottom: 0;\n}\n", ""]); /***/ }), /* 310 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(311); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 311 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-tree-chart * {\n box-sizing: border-box;\n font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n\n}\n\n.as-tree-chart {\n --root-background-color: #ED7D31;\n --root-text-color: white;\n\n --vert-node-background-color: #4472C4;\n --vert-node-text-color: white;\n\n --horz-node-background-color: #A9D18E;\n --horz-node-text-color: black;\n\n --leaf-node-background-color: #F8CBAD;\n --leaf-node-text-color: black;\n\n\n font-size: 1rem;\n display: inline-block;\n}\n\n.as-tree-chart-node {\n display: inline-block;\n white-space: normal;\n vertical-align: top;\n position: relative;\n}\n\n.as-tree-chart-content-ctn {\n text-align: center;\n position: relative;\n}\n\n.as-tree-chart-node[data-level=\"0\"] >.as-tree-chart-content-ctn> .as-tree-chart-content {\n background-color: var(--root-background-color);\n color: var(--root-text-color);\n}\n\n.as-tree-chart-node.as-horizontal .as-tree-chart-child-ctn .as-tree-chart-content{\n background-color: var(--horz-node-background-color);\n color: var(--horz-node-text-color);\n}\n\n.as-tree-chart-node.as-is-leaf >.as-tree-chart-content-ctn> .as-tree-chart-content {\n background-color: var(--leaf-node-background-color);\n color: var(--leaf-node-text-color);\n}\n\n\n\n.as-tree-chart-content {\n padding: 5px;\n border-radius: 4px;\n border: 1px solid black;\n text-align: center;\n position: relative;\n display: inline-block;\n background-color: var(--vert-node-background-color);\n color: var(--vert-node-text-color);\n}\n\n.as-tree-chart-icon,\n.as-tree-chart-text {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-tree-chart-icon {\n font-size: 1.25em;\n padding-right: 0.25em;\n}\n\n.as-tree-chart-node.as-has-children > .as-tree-chart-content-ctn {\n padding-bottom: 10px;\n}\n\n.as-tree-chart-node.as-has-children > .as-tree-chart-content-ctn::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 50%;\n height: 10px;\n border-left: 1px solid black;\n}\n\n.as-tree-chart-child-ctn {\n white-space: nowrap;\n padding-top: 10px;\n text-align: center;\n vertical-align: top;\n box-sizing: border-box;\n}\n\n.as-tree-chart-node:not(.as-horizontal) > .as-tree-chart-child-ctn > .as-tree-chart-node:not(:last-child) {\n margin-right: 10px;\n}\n\n.as-tree-chart-child-ctn > .as-tree-chart-node:not(:first-child):not(:last-child)::before {\n content: \"\";\n border-top: 1px solid black;\n position: absolute;\n left: 0;\n right: -10px;\n top: -10px;\n}\n\n.as-tree-chart-child-ctn > .as-tree-chart-node:first-child:not(:last-child)::before {\n content: \"\";\n border-top: 1px solid black;\n position: absolute;\n left: 50%;\n right: -10px;\n top: -10px;\n}\n\n.as-tree-chart-child-ctn > .as-tree-chart-node > .as-tree-chart-content-ctn .as-tree-chart-content::before {\n content: \"\";\n position: absolute;\n left: 50%;\n height: 10px;\n top: -11px;\n border-left: 1px solid black;\n}\n\n.as-tree-chart-child-ctn > .as-tree-chart-node:not(:first-child):last-child > .as-tree-chart-content-ctn::before {\n content: \"\";\n border-top: 1px solid black;\n position: absolute;\n left: 0;\n width: calc(50% + 1px);\n top: -10px;\n}\n\n.as-tree-chart-node.as-horizontal .as-tree-chart-child-ctn .as-tree-chart-content {\n text-align: left;\n}\n\n.as-tree-chart-node.as-horizontal > .as-tree-chart-content-ctn .as-tree-chart-content {\n display: block;\n}\n\n.as-tree-chart-node.as-horizontal .as-tree-chart-node {\n display: block;\n}\n\n.as-tree-chart-node.as-horizontal .as-tree-chart-child-ctn {\n padding-left: 20px;\n}\n\n.as-tree-chart-node.as-horizontal .as-tree-chart-child-ctn .as-tree-chart-content-ctn {\n text-align: left;\n}\n\n.as-tree-chart-node.as-horizontal .as-tree-chart-content-ctn::after {\n left: 10px;\n}\n\n.as-tree-chart-node.as-horizontal .as-tree-chart-node:not(:last-child)::before {\n right: unset;\n bottom: 0;\n border-top: none;\n border-left: 1px solid black;\n left: -10px;\n height: unset;\n}\n\n.as-tree-chart-node.as-horizontal .as-tree-chart-child-ctn > .as-tree-chart-node > .as-tree-chart-content-ctn .as-tree-chart-content::before {\n border-left: none;\n border-top: 1px solid black;\n left: -10px;\n width: 10px;\n top: 50%;\n}\n\n.as-tree-chart-node.as-horizontal .as-tree-chart-node:last-child > .as-tree-chart-content-ctn::before {\n content: \"\";\n position: absolute;\n left: -10px;\n top: -10px;\n height: calc(50% + 10px);\n border-top: none;\n border-left: 1px solid black;\n /*width: unset;*/\n}\n\n.as-tree-chart-node.as-horizontal .as-tree-chart-node.as-has-children:last-child > .as-tree-chart-content-ctn::before {\n height: calc(50% + 5px);\n /*width: unset;*/\n}\n", ""]); /***/ }), /* 312 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(313); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 313 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, "\n.as-table-of-text-input-wrapper {\n border: 1px solid #dddddd;\n}\n\n.as-table-of-text-input-content-ctn {\n overflow: auto;\n}\n\n\n.as-table-of-text-input {\n width: 100%;\n border-collapse: collapse;\n color: black;\n font-family: 'Aptos Narrow', Calibri, sans-serif, 'Mongolian Baiti', 'Microsoft Yi Baiti', 'Javanese Text', 'Yu Gothic';\n font-size: 11pt;\n margin: 10px;\n}\n\n.as-table-of-text-input-wrapper.as-size-a4 .as-table-of-text-input {\n width: 445pt;\n}\n\n.as-table-of-text-input pre {\n font: inherit;\n line-height: 1.75;\n}\n\n.as-table-of-text-input.as-inline {\n display: inline-table;\n}\n\n.as-table-of-text-input-cell {\n vertical-align: top;\n padding: 0px 5px;\n border: 1px dashed #808080;\n position: relative;\n}\n\n.as-table-of-text-input-cell.as-focus::before {\n pointer-events: none;\n content: \"\";\n position: absolute;\n border: 1px dashed var(--variant-color-primary);\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n}\n\n.as-table-of-text-input-cell .as-preinput {\n outline: none;\n display: block;\n}\n\n.as-table-of-text-input-cell.as-bold {\n font-weight: bold;\n}\n\n.as-table-of-text-input-cell.as-italic {\n font-style: italic;\n}\n\n.as-table-of-text-input-tool {\n background-color: #f8f8f8;\n font-size: 14px;\n /*-webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);*/\n /*-moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);*/\n /*box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);*/\n /*border-radius: 4px;*/\n padding: 3px;\n border-bottom: 1px solid #dddddd;\n}\n\n.as-table-of-text-input-tool > button {\n height: 30px;\n width: 30px;\n vertical-align: middle;\n}\n\n\n.as-table-of-text-input-tool > button.as-checked {\n color: #2977ff;\n background-color: rgb(240, 247, 255);\n}", ""]); /***/ }), /* 314 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(315); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 315 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-color-cell {\n position: relative;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBhXYzh8+PD///8hJAOcBSRxyRw+DABJUCox2kjvSgAAAABJRU5ErkJggg==');\n background-size: 1.5em;\n image-rendering: optimizeSpeed;\n /* STOP SMOOTHING, GIVE ME SPEED */\n image-rendering: -moz-crisp-edges;\n /* Firefox */\n image-rendering: -o-crisp-edges;\n /* Opera */\n image-rendering: -webkit-optimize-contrast;\n /* Chrome (and eventually Safari) */\n image-rendering: pixelated;\n /* Chrome */\n image-rendering: optimize-contrast;\n /* CSS3 Proposed */\n -ms-interpolation-mode: nearest-neighbor;\n /* IE8+ */\n}\n\n.as-color-cell.as-null .as-color-cell-value {\n background-color: transparent !important;\n background-size: contain;\n background-position: center;\n }\n\n.as-color-cell-value {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n}\n\n.as-swatches-table {\n display: table;\n table-layout: fixed;\n}\n\n.as-swatches-table-row {\n display: table-row;\n}\n\n\n.as-swatches-table-cell.as-color-cell {\n position: relative;\n display: table-cell;\n background-size: 1.5em;\n\n}\n", ""]); /***/ }), /* 316 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(317); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 317 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-solid-color-picker:not(.as-solid-color-picker-mode-swatches) .as-solid-color-picker-swatches-select-ctn,\n.as-solid-color-picker:not(.as-solid-color-picker-mode-swatches) .as-solid-color-picker-swatches-ctn,\n.as-solid-color-picker:not(.as-solid-color-picker-mode-picker) .as-solid-color-picker-spectrum,\n.as-solid-color-picker:not(.as-solid-color-picker-mode-picker) .as-solid-color-picker-hue,\n.as-solid-color-picker:not(.as-solid-color-picker-mode-picker) .as-solid-color-picker-alpha,\n.as-solid-color-picker:not(.as-solid-color-picker-mode-picker) .as-solid-color-picker-near {\n display: none;\n}\n\n.as-solid-color-picker:not(.as-has-opacity) .as-solid-color-picker-color-opacity,\n.as-solid-color-picker:not(.as-has-opacity) .as-solid-color-picker-alpha {\n visibility: hidden;\n}\n\n.as-solid-color-picker .as-hanger {\n user-select: none;\n touch-action: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n.as-solid-color-picker {\n display: inline-block;\n border: 1px solid black;\n font-size: 12px;\n font-family: Arial, Helvetica, sans-serif;\n outline: none;\n background-color: white;\n}\n\n.as-solid-color-picker-body {\n padding-bottom: 10px;\n padding-left: 10px;\n padding-right: 10px;\n box-sizing: border-box;\n border-bottom: 1px solid #dddddd;\n}\n\n.as-solid-color-picker-header {\n padding: 10px;\n}\n\n.as-solid-color-picker-mode {\n font-size: 0.9em;\n}\n\n.as-solid-color-picker-mode button {\n height: 1.5em;\n min-width: 7em;\n}\n\n.as-solid-color-picker-swatches-name {\n color: #006ce5;\n text-decoration: underline;\n cursor: pointer;\n}\n\n.as-solid-color-picker-swatches-select-ctn {\n line-height: 2em;\n}\n\n.as-solid-color-picker-swatches-ctn {\n overflow-y: auto;\n width: 20em;\n height: 20em;\n box-sizing: content-box;\n}\n\n.as-solid-color-picker-swatches-ctn .as-swatches-table {\n width: 100%;\n}\n\n.as-solid-color-picker-swatches-ctn .as-swatches-table-row,\n.as-solid-color-picker-recent-swatches-ctn .as-swatches-table-row {\n height: 2em;\n}\n\n.as-solid-color-picker-recent-swatches-ctn .as-swatches-table-cell {\n width: 1.6666666em;\n}\n\n\n.as-solid-color-picker-recent-title {\n line-height: 1.5em;\n margin-top: 0.5em;\n font-weight: bold;\n}\n\n.as-solid-color-picker-recent-swatches-ctn {\n overflow-y: auto;\n width: 20em;\n height: 4em;\n box-sizing: content-box;\n}\n\n.as-solid-color-picker-footer {\n padding: 10px;\n}\n\n.as-solid-color-picker-footer .as-flexicon-button {\n font-size: inherit;\n height: 2em;\n box-sizing: border-box;\n vertical-align: middle;\n}\n\n.as-solid-color-picker-selected {\n display: inline-block;\n vertical-align: middle;\n height: 2em;\n width: 5em;\n border: 1px solid #ddd;\n box-sizing: border-box;\n}\n\n.as-solid-color-picker-color-hex,\n.as-solid-color-picker-color-opacity {\n font-size: inherit;\n width: 6em;\n}\n\n.as-solid-color-picker-color-hex input {\n margin-left: 0;\n}\n\n.as-flexicon-input.as-solid-color-picker-color-opacity.as-flexicon-input-has-icon.as-flexicon-input-has-unit input {\n width: calc(100% - 4em);\n}\n\n.as-solid-color-picker.as-nullable .as-solid-color-picker-none-ctn{\n display: inline-block;\n\n}\n\n.as-solid-color-picker-none-ctn {\n display: none;\n margin-top: 5px;\n padding: 5px;\n cursor: default;\n user-select: none;\n}\n\n.as-solid-color-picker-none-ctn.as-selected {\n box-shadow: rgba(0, 0, 0, 0.7) 0px 0px 0.3em 0.125em inset;\n}\n\n.as-solid-color-picker-none-ctn:hover {\n color: var(--as-transparent-button-text-hover-color);\n}\n\n\n.as-solid-color-picker-none-ctn:active {\n color: var(--as-transparent-button-text-active-color);\n}\n\n.as-solid-color-picker-none-ctn > * {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-solid-color-picker-none-cell {\n width: 1.5em;\n height: 1.5em;\n margin-right: 0.3em;\n}\n\n\n.as-solid-color-picker-color-opacity input {\n padding-left: 0;\n padding-right: 0;\n}\n\n.as-solid-color-picker-footer > *:not(:first-child) {\n margin-left: 0.5em;\n}\n\n.as-swatches-table-cell .as-solid-color-picker-selected-dot {\n left: calc(50% - 0.5em);\n top: calc(50% - 0.5em);\n}\n\n.as-solid-color-picker-selected-dot {\n position: absolute;\n width: 1em;\n height: 1em;\n box-shadow: inset 0px 0px 0.3em 0.125em rgba(255, 255, 255, 0.7);\n z-index: 1;\n border-radius: 50%;\n}\n\n\n.as-solid-color-picker-spectrum {\n width: 20em;\n height: 13.3em;\n background-color: red;\n position: relative;\n}\n\n.as-solid-color-picker-spectrum-dot {\n width: 1em;\n height: 1em;\n box-shadow: inset 0px 0px 0.3em 0.125em rgba(0, 0, 0, 0.7);\n z-index: 1;\n border-radius: 50%;\n position: absolute;\n bottom: calc(100% - 0.5em);\n left: calc(100% - 0.5em);\n}\n\n\n.as-solid-color-picker-hue {\n width: 20em;\n height: 2em;\n background: linear-gradient(to right, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n position: relative;\n}\n\n.as-solid-color-picker-hue-dot {\n width: 1em;\n height: 1em;\n box-shadow: inset 0px 0px 0.3em 0.125em rgba(0, 0, 0, 0.7);\n z-index: 1;\n border-radius: 50%;\n position: absolute;\n top: calc(50% - 0.5em);\n left: calc(0% - 0.5em);\n}\n\n\n.as-solid-color-picker-alpha {\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBhXYzh8+PD///8hJAOcBSRxyRw+DABJUCox2kjvSgAAAABJRU5ErkJggg==');\n background-size: 1.5em;\n image-rendering: optimizeSpeed;\n image-rendering: -moz-crisp-edges;\n image-rendering: -o-crisp-edges;\n image-rendering: -webkit-optimize-contrast;\n image-rendering: pixelated;\n image-rendering: optimize-contrast;\n -ms-interpolation-mode: nearest-neighbor;\n\n width: 20em;\n height: 2em;\n position: relative;\n}\n\n.as-solid-color-picker-alpha-color {\n background: linear-gradient(to right, rgba(255, 0, 0, 0.0) 0%, rgba(255, 0, 0, 1) 100%);\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n}\n\n.as-solid-color-picker-alpha-dot {\n width: 1em;\n height: 1em;\n box-shadow: inset 0px 0px 0.3em 0.125em rgba(0, 0, 0, 0.7);\n z-index: 1;\n border-radius: 50%;\n position: absolute;\n top: calc(50% - 0.5em);\n left: calc(100% - 0.5em);\n}\n\n\n.as-solid-color-picker-near {\n margin-top: 0.5em;\n width: 20em;\n height: 4.2em;\n}\n\n.as-solid-color-picker-near .as-swatches-table-cell-color {\n transition: transform 0.1s;\n}\n\n\n.as-solid-color-picker-near .as-swatches-table-cell-color:hover {\n transform: scale(1.2);\n z-index: 2;\n}", ""]); /***/ }), /* 318 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(319); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 319 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-spectrum-color {\n position: relative;\n touch-action: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n}\n\n.as-spectrum-color-sat {\n width: 100%;\n height: 100%;\n box-sizing: content-box;\n background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0)));\n background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0));\n background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0));\n -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)\";\n filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81');\n}\n\n\n.as-spectrum-color-val {\n width: 100%;\n height: 100%;\n box-sizing: content-box;\n background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0)));\n background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0));\n background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0));\n -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)\";\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000');\n}", ""]); /***/ }), /* 320 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(321); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 321 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".as-color-picker-button {\n width: 45px;\n height: 30px;\n border-radius: 3px;\n border: 1px solid #d6d6d6;\n background-color: transparent;\n padding: 5px;\n outline: none;\n}\n\n.as-color-picker-button-inner {\n height: 100%;\n width: 100%;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBhXYzh8+PD///8hJAOcBSRxyRw+DABJUCox2kjvSgAAAABJRU5ErkJggg==');\n background-size: 1.5em;\n image-rendering: optimizeSpeed;\n /* STOP SMOOTHING, GIVE ME SPEED */\n image-rendering: -moz-crisp-edges;\n /* Firefox */\n image-rendering: -o-crisp-edges;\n /* Opera */\n image-rendering: -webkit-optimize-contrast;\n /* Chrome (and eventually Safari) */\n image-rendering: pixelated;\n /* Chrome */\n image-rendering: optimize-contrast;\n /* CSS3 Proposed */\n -ms-interpolation-mode: nearest-neighbor;\n /* IE8+ */\n}\n\n.as-color-picker-button-inner-value {\n width: 100%;\n height: 100%;\n}\n\n.as-color-picker-button-fol {\n z-index: 1000;\n}\n\n.as-color-picker-button[data-mode=\"HEX6\"] .as-null .as-color-cell-value {\n display: none;\n}\n\n\n.absol-selectmenu {\n\n}\n\n.as-select-color-scheme-menu-dropdown {\n font-size: 14px;\n padding: 5px;\n}\n\n.as-select-color-scheme-menu {\n box-sizing: border-box;\n padding-right: 30px;\n padding-left: 5px;\n}\n\n.as-select-color-scheme-menu::before {\n content: \"\";\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n}\n\n.as-select-color-scheme-menu-selected-item {\n display: inline-block;\n vertical-align: middle;\n}\n\n.as-select-color-scheme-menu-selected-item .as-scsm-item-cell {\n width: 20px;\n height: 20px;\n}\n\n.as-scsm-item-list-row {\n white-space: nowrap;\n}\n\n.as-scsm-item-wrapper {\n display: inline-block;\n vertical-align: top;\n padding: 7px;\n}\n\n.as-scsm-item {\n\n border-radius: 4px;\n overflow: hidden;\n box-sizing: border-box;\n}\n\n.as-scsm-item-wrapper:hover .as-scsm-item:not(.as-selected) {\n box-shadow: 0px 0px 0px 2px rgba(107, 159, 255, 0.5);\n}\n\n.as-scsm-item.as-selected {\n box-shadow: 0px 0px 0px 2px #1464f6;\n}\n\n.as-scsm-item-row {\n white-space: nowrap;\n}\n\n.as-scsm-item-cell {\n width: 1.2em;\n height: 1.2em;\n display: inline-block;\n vertical-align: top;\n}", ""]); /***/ }), /* 322 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(323); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 323 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".am-navigator {}\n\n.am-navigator-content {\n right: 100%;\n top: 0;\n bottom: 0;\n z-index: 1001;\n position: fixed;\n /* touch-action: auto; */\n overflow-y: scroll;\n}\n\n.am-navigator-content:empty {\n background-color: gray;\n width: 60vw;\n}\n\n.am-navigator-modal {\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n width: 20px;\n touch-action: none;\n opacity: 0.001;\n}\n\n.am-navigator.am-dragging {\n touch-action: none;\n user-select: none;\n}\n\n\n.am-navigator.am-dragging .am-navigator-modal,\n.am-navigator.am-open .am-navigator-modal {\n width: 100%;\n background-color: rgb(169, 160, 170);\n z-index: 1000;\n}\n\n.am-navigator.am-open .am-navigator-modal {\n opacity: 0.5;\n}", ""]); /***/ }), /* 324 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process, global) { /** * Module dependencies */ const EventEmitter = __webpack_require__(23).EventEmitter const Store = __webpack_require__(57) const TopicAliasRecv = __webpack_require__(334) const TopicAliasSend = __webpack_require__(335) const mqttPacket = __webpack_require__(343) const DefaultMessageIdProvider = __webpack_require__(350) const Writable = __webpack_require__(19).Writable const inherits = __webpack_require__(16) const reInterval = __webpack_require__(351) const clone = __webpack_require__(352) const validations = __webpack_require__(354) const xtend = __webpack_require__(32) const debug = __webpack_require__(15)('mqttjs:client') const nextTick = process ? process.nextTick : function (callback) { setTimeout(callback, 0) } const setImmediate = global.setImmediate || function (callback) { // works in node v0.8 nextTick(callback) } const defaultConnectOptions = { keepalive: 60, reschedulePings: true, protocolId: 'MQTT', protocolVersion: 4, reconnectPeriod: 1000, connectTimeout: 30 * 1000, clean: true, resubscribe: true } const errors = { 0: '', 1: 'Unacceptable protocol version', 2: 'Identifier rejected', 3: 'Server unavailable', 4: 'Bad username or password', 5: 'Not authorized', 16: 'No matching subscribers', 17: 'No subscription existed', 128: 'Unspecified error', 129: 'Malformed Packet', 130: 'Protocol Error', 131: 'Implementation specific error', 132: 'Unsupported Protocol Version', 133: 'Client Identifier not valid', 134: 'Bad User Name or Password', 135: 'Not authorized', 136: 'Server unavailable', 137: 'Server busy', 138: 'Banned', 139: 'Server shutting down', 140: 'Bad authentication method', 141: 'Keep Alive timeout', 142: 'Session taken over', 143: 'Topic Filter invalid', 144: 'Topic Name invalid', 145: 'Packet identifier in use', 146: 'Packet Identifier not found', 147: 'Receive Maximum exceeded', 148: 'Topic Alias invalid', 149: 'Packet too large', 150: 'Message rate too high', 151: 'Quota exceeded', 152: 'Administrative action', 153: 'Payload format invalid', 154: 'Retain not supported', 155: 'QoS not supported', 156: 'Use another server', 157: 'Server moved', 158: 'Shared Subscriptions not supported', 159: 'Connection rate exceeded', 160: 'Maximum connect time', 161: 'Subscription Identifiers not supported', 162: 'Wildcard Subscriptions not supported' } function defaultId () { return 'mqttjs_' + Math.random().toString(16).substr(2, 8) } function applyTopicAlias (client, packet) { if (client.options.protocolVersion === 5) { if (packet.cmd === 'publish') { let alias if (packet.properties) { alias = packet.properties.topicAlias } const topic = packet.topic.toString() if (client.topicAliasSend) { if (alias) { if (topic.length !== 0) { // register topic alias debug('applyTopicAlias :: register topic: %s - alias: %d', topic, alias) if (!client.topicAliasSend.put(topic, alias)) { debug('applyTopicAlias :: error out of range. topic: %s - alias: %d', topic, alias) return new Error('Sending Topic Alias out of range') } } } else { if (topic.length !== 0) { if (client.options.autoAssignTopicAlias) { alias = client.topicAliasSend.getAliasByTopic(topic) if (alias) { packet.topic = '' packet.properties = { ...(packet.properties), topicAlias: alias } debug('applyTopicAlias :: auto assign(use) topic: %s - alias: %d', topic, alias) } else { alias = client.topicAliasSend.getLruAlias() client.topicAliasSend.put(topic, alias) packet.properties = { ...(packet.properties), topicAlias: alias } debug('applyTopicAlias :: auto assign topic: %s - alias: %d', topic, alias) } } else if (client.options.autoUseTopicAlias) { alias = client.topicAliasSend.getAliasByTopic(topic) if (alias) { packet.topic = '' packet.properties = { ...(packet.properties), topicAlias: alias } debug('applyTopicAlias :: auto use topic: %s - alias: %d', topic, alias) } } } } } else if (alias) { debug('applyTopicAlias :: error out of range. topic: %s - alias: %d', topic, alias) return new Error('Sending Topic Alias out of range') } } } } function removeTopicAliasAndRecoverTopicName (client, packet) { let alias if (packet.properties) { alias = packet.properties.topicAlias } let topic = packet.topic.toString() if (topic.length === 0) { // restore topic from alias if (typeof alias === 'undefined') { return new Error('Unregistered Topic Alias') } else { topic = client.topicAliasSend.getTopicByAlias(alias) if (typeof topic === 'undefined') { return new Error('Unregistered Topic Alias') } else { packet.topic = topic } } } if (alias) { delete packet.properties.topicAlias } } function sendPacket (client, packet, cb) { debug('sendPacket :: packet: %O', packet) debug('sendPacket :: emitting `packetsend`') client.emit('packetsend', packet) debug('sendPacket :: writing to stream') const result = mqttPacket.writeToStream(packet, client.stream, client.options) debug('sendPacket :: writeToStream result %s', result) if (!result && cb && cb !== nop) { debug('sendPacket :: handle events on `drain` once through callback.') client.stream.once('drain', cb) } else if (cb) { debug('sendPacket :: invoking cb') cb() } } function flush (queue) { if (queue) { debug('flush: queue exists? %b', !!(queue)) Object.keys(queue).forEach(function (messageId) { if (typeof queue[messageId].cb === 'function') { queue[messageId].cb(new Error('Connection closed')) // This is suspicious. Why do we only delete this if we have a callbck? // If this is by-design, then adding no as callback would cause this to get deleted unintentionally. delete queue[messageId] } }) } } function flushVolatile (queue) { if (queue) { debug('flushVolatile :: deleting volatile messages from the queue and setting their callbacks as error function') Object.keys(queue).forEach(function (messageId) { if (queue[messageId].volatile && typeof queue[messageId].cb === 'function') { queue[messageId].cb(new Error('Connection closed')) delete queue[messageId] } }) } } function storeAndSend (client, packet, cb, cbStorePut) { debug('storeAndSend :: store packet with cmd %s to outgoingStore', packet.cmd) let storePacket = packet let err if (storePacket.cmd === 'publish') { // The original packet is for sending. // The cloned storePacket is for storing to resend on reconnect. // Topic Alias must not be used after disconnected. storePacket = clone(packet) err = removeTopicAliasAndRecoverTopicName(client, storePacket) if (err) { return cb && cb(err) } } client.outgoingStore.put(storePacket, function storedPacket (err) { if (err) { return cb && cb(err) } cbStorePut() sendPacket(client, packet, cb) }) } function nop (error) { debug('nop ::', error) } /** * MqttClient constructor * * @param {Stream} stream - stream * @param {Object} [options] - connection options * (see Connection#connect) */ function MqttClient (streamBuilder, options) { let k const that = this if (!(this instanceof MqttClient)) { return new MqttClient(streamBuilder, options) } this.options = options || {} // Defaults for (k in defaultConnectOptions) { if (typeof this.options[k] === 'undefined') { this.options[k] = defaultConnectOptions[k] } else { this.options[k] = options[k] } } debug('MqttClient :: options.protocol', options.protocol) debug('MqttClient :: options.protocolVersion', options.protocolVersion) debug('MqttClient :: options.username', options.username) debug('MqttClient :: options.keepalive', options.keepalive) debug('MqttClient :: options.reconnectPeriod', options.reconnectPeriod) debug('MqttClient :: options.rejectUnauthorized', options.rejectUnauthorized) debug('MqttClient :: options.topicAliasMaximum', options.topicAliasMaximum) this.options.clientId = (typeof options.clientId === 'string') ? options.clientId : defaultId() debug('MqttClient :: clientId', this.options.clientId) this.options.customHandleAcks = (options.protocolVersion === 5 && options.customHandleAcks) ? options.customHandleAcks : function () { arguments[3](0) } this.streamBuilder = streamBuilder this.messageIdProvider = (typeof this.options.messageIdProvider === 'undefined') ? new DefaultMessageIdProvider() : this.options.messageIdProvider // Inflight message storages this.outgoingStore = options.outgoingStore || new Store() this.incomingStore = options.incomingStore || new Store() // Should QoS zero messages be queued when the connection is broken? this.queueQoSZero = options.queueQoSZero === undefined ? true : options.queueQoSZero // map of subscribed topics to support reconnection this._resubscribeTopics = {} // map of a subscribe messageId and a topic this.messageIdToTopic = {} // Ping timer, setup in _setupPingTimer this.pingTimer = null // Is the client connected? this.connected = false // Are we disconnecting? this.disconnecting = false // Packet queue this.queue = [] // connack timer this.connackTimer = null // Reconnect timer this.reconnectTimer = null // Is processing store? this._storeProcessing = false // Packet Ids are put into the store during store processing this._packetIdsDuringStoreProcessing = {} // Store processing queue this._storeProcessingQueue = [] // Inflight callbacks this.outgoing = {} // True if connection is first time. this._firstConnection = true if (options.topicAliasMaximum > 0) { if (options.topicAliasMaximum > 0xffff) { debug('MqttClient :: options.topicAliasMaximum is out of range') } else { this.topicAliasRecv = new TopicAliasRecv(options.topicAliasMaximum) } } // Send queued packets this.on('connect', function () { const queue = this.queue function deliver () { const entry = queue.shift() debug('deliver :: entry %o', entry) let packet = null if (!entry) { that._resubscribe() return } packet = entry.packet debug('deliver :: call _sendPacket for %o', packet) let send = true if (packet.messageId && packet.messageId !== 0) { if (!that.messageIdProvider.register(packet.messageId)) { send = false } } if (send) { that._sendPacket( packet, function (err) { if (entry.cb) { entry.cb(err) } deliver() } ) } else { debug('messageId: %d has already used. The message is skipped and removed.', packet.messageId) deliver() } } debug('connect :: sending queued packets') deliver() }) this.on('close', function () { debug('close :: connected set to `false`') this.connected = false debug('close :: clearing connackTimer') clearTimeout(this.connackTimer) debug('close :: clearing ping timer') if (that.pingTimer !== null) { that.pingTimer.clear() that.pingTimer = null } if (this.topicAliasRecv) { this.topicAliasRecv.clear() } debug('close :: calling _setupReconnect') this._setupReconnect() }) EventEmitter.call(this) debug('MqttClient :: setting up stream') this._setupStream() } inherits(MqttClient, EventEmitter) /** * setup the event handlers in the inner stream. * * @api private */ MqttClient.prototype._setupStream = function () { const that = this const writable = new Writable() const parser = mqttPacket.parser(this.options) let completeParse = null const packets = [] debug('_setupStream :: calling method to clear reconnect') this._clearReconnect() debug('_setupStream :: using streamBuilder provided to client to create stream') this.stream = this.streamBuilder(this) parser.on('packet', function (packet) { debug('parser :: on packet push to packets array.') packets.push(packet) }) function nextTickWork () { if (packets.length) { nextTick(work) } else { const done = completeParse completeParse = null done() } } function work () { debug('work :: getting next packet in queue') const packet = packets.shift() if (packet) { debug('work :: packet pulled from queue') that._handlePacket(packet, nextTickWork) } else { debug('work :: no packets in queue') const done = completeParse completeParse = null debug('work :: done flag is %s', !!(done)) if (done) done() } } writable._write = function (buf, enc, done) { completeParse = done debug('writable stream :: parsing buffer') parser.parse(buf) work() } function streamErrorHandler (error) { debug('streamErrorHandler :: error', error.message) // error.code will only be set on NodeJS env, browse don't allow to detect erros on sockets // also emitting errors on browser seems to create issues if (error.code) { // handle error debug('streamErrorHandler :: emitting error') that.emit('error', error) } else { nop(error) } } debug('_setupStream :: pipe stream to writable stream') this.stream.pipe(writable) // Suppress connection errors this.stream.on('error', streamErrorHandler) // Echo stream close this.stream.on('close', function () { debug('(%s)stream :: on close', that.options.clientId) flushVolatile(that.outgoing) debug('stream: emit close to MqttClient') that.emit('close') }) // Send a connect packet debug('_setupStream: sending packet `connect`') const connectPacket = Object.create(this.options) connectPacket.cmd = 'connect' if (this.topicAliasRecv) { if (!connectPacket.properties) { connectPacket.properties = {} } if (this.topicAliasRecv) { connectPacket.properties.topicAliasMaximum = this.topicAliasRecv.max } } // avoid message queue sendPacket(this, connectPacket) // Echo connection errors parser.on('error', this.emit.bind(this, 'error')) // auth if (this.options.properties) { if (!this.options.properties.authenticationMethod && this.options.properties.authenticationData) { that.end(() => this.emit('error', new Error('Packet has no Authentication Method') )) return this } if (this.options.properties.authenticationMethod && this.options.authPacket && typeof this.options.authPacket === 'object') { const authPacket = xtend({ cmd: 'auth', reasonCode: 0 }, this.options.authPacket) sendPacket(this, authPacket) } } // many drain listeners are needed for qos 1 callbacks if the connection is intermittent this.stream.setMaxListeners(1000) clearTimeout(this.connackTimer) this.connackTimer = setTimeout(function () { debug('!!connectTimeout hit!! Calling _cleanUp with force `true`') that._cleanUp(true) }, this.options.connectTimeout) } MqttClient.prototype._handlePacket = function (packet, done) { const options = this.options if (options.protocolVersion === 5 && options.properties && options.properties.maximumPacketSize && options.properties.maximumPacketSize < packet.length) { this.emit('error', new Error('exceeding packets size ' + packet.cmd)) this.end({ reasonCode: 149, properties: { reasonString: 'Maximum packet size was exceeded' } }) return this } debug('_handlePacket :: emitting packetreceive') this.emit('packetreceive', packet) switch (packet.cmd) { case 'publish': this._handlePublish(packet, done) break case 'puback': case 'pubrec': case 'pubcomp': case 'suback': case 'unsuback': this._handleAck(packet) done() break case 'pubrel': this._handlePubrel(packet, done) break case 'connack': this._handleConnack(packet) done() break case 'auth': this._handleAuth(packet) done() break case 'pingresp': this._handlePingresp(packet) done() break case 'disconnect': this._handleDisconnect(packet) done() break default: // do nothing // maybe we should do an error handling // or just log it break } } MqttClient.prototype._checkDisconnecting = function (callback) { if (this.disconnecting) { if (callback && callback !== nop) { callback(new Error('client disconnecting')) } else { this.emit('error', new Error('client disconnecting')) } } return this.disconnecting } /** * publish - publish <message> to <topic> * * @param {String} topic - topic to publish to * @param {String, Buffer} message - message to publish * @param {Object} [opts] - publish options, includes: * {Number} qos - qos level to publish on * {Boolean} retain - whether or not to retain the message * {Boolean} dup - whether or not mark a message as duplicate * {Function} cbStorePut - function(){} called when message is put into `outgoingStore` * @param {Function} [callback] - function(err){} * called when publish succeeds or fails * @returns {MqttClient} this - for chaining * @api public * * @example client.publish('topic', 'message'); * @example * client.publish('topic', 'message', {qos: 1, retain: true, dup: true}); * @example client.publish('topic', 'message', console.log); */ MqttClient.prototype.publish = function (topic, message, opts, callback) { debug('publish :: message `%s` to topic `%s`', message, topic) const options = this.options // .publish(topic, payload, cb); if (typeof opts === 'function') { callback = opts opts = null } // default opts const defaultOpts = { qos: 0, retain: false, dup: false } opts = xtend(defaultOpts, opts) if (this._checkDisconnecting(callback)) { return this } const that = this const publishProc = function () { let messageId = 0 if (opts.qos === 1 || opts.qos === 2) { messageId = that._nextId() if (messageId === null) { debug('No messageId left') return false } } const packet = { cmd: 'publish', topic: topic, payload: message, qos: opts.qos, retain: opts.retain, messageId: messageId, dup: opts.dup } if (options.protocolVersion === 5) { packet.properties = opts.properties } debug('publish :: qos', opts.qos) switch (opts.qos) { case 1: case 2: // Add to callbacks that.outgoing[packet.messageId] = { volatile: false, cb: callback || nop } debug('MqttClient:publish: packet cmd: %s', packet.cmd) that._sendPacket(packet, undefined, opts.cbStorePut) break default: debug('MqttClient:publish: packet cmd: %s', packet.cmd) that._sendPacket(packet, callback, opts.cbStorePut) break } return true } if (this._storeProcessing || this._storeProcessingQueue.length > 0 || !publishProc()) { this._storeProcessingQueue.push( { invoke: publishProc, cbStorePut: opts.cbStorePut, callback: callback } ) } return this } /** * subscribe - subscribe to <topic> * * @param {String, Array, Object} topic - topic(s) to subscribe to, supports objects in the form {'topic': qos} * @param {Object} [opts] - optional subscription options, includes: * {Number} qos - subscribe qos level * @param {Function} [callback] - function(err, granted){} where: * {Error} err - subscription error (none at the moment!) * {Array} granted - array of {topic: 't', qos: 0} * @returns {MqttClient} this - for chaining * @api public * @example client.subscribe('topic'); * @example client.subscribe('topic', {qos: 1}); * @example client.subscribe({'topic': {qos: 0}, 'topic2': {qos: 1}}, console.log); * @example client.subscribe('topic', console.log); */ MqttClient.prototype.subscribe = function () { const that = this const args = new Array(arguments.length) for (let i = 0; i < arguments.length; i++) { args[i] = arguments[i] } const subs = [] let obj = args.shift() const resubscribe = obj.resubscribe let callback = args.pop() || nop let opts = args.pop() const version = this.options.protocolVersion delete obj.resubscribe if (typeof obj === 'string') { obj = [obj] } if (typeof callback !== 'function') { opts = callback callback = nop } const invalidTopic = validations.validateTopics(obj) if (invalidTopic !== null) { setImmediate(callback, new Error('Invalid topic ' + invalidTopic)) return this } if (this._checkDisconnecting(callback)) { debug('subscribe: discconecting true') return this } const defaultOpts = { qos: 0 } if (version === 5) { defaultOpts.nl = false defaultOpts.rap = false defaultOpts.rh = 0 } opts = xtend(defaultOpts, opts) if (Array.isArray(obj)) { obj.forEach(function (topic) { debug('subscribe: array topic %s', topic) if (!Object.prototype.hasOwnProperty.call(that._resubscribeTopics, topic) || that._resubscribeTopics[topic].qos < opts.qos || resubscribe) { const currentOpts = { topic: topic, qos: opts.qos } if (version === 5) { currentOpts.nl = opts.nl currentOpts.rap = opts.rap currentOpts.rh = opts.rh currentOpts.properties = opts.properties } debug('subscribe: pushing topic `%s` and qos `%s` to subs list', currentOpts.topic, currentOpts.qos) subs.push(currentOpts) } }) } else { Object .keys(obj) .forEach(function (k) { debug('subscribe: object topic %s', k) if (!Object.prototype.hasOwnProperty.call(that._resubscribeTopics, k) || that._resubscribeTopics[k].qos < obj[k].qos || resubscribe) { const currentOpts = { topic: k, qos: obj[k].qos } if (version === 5) { currentOpts.nl = obj[k].nl currentOpts.rap = obj[k].rap currentOpts.rh = obj[k].rh currentOpts.properties = opts.properties } debug('subscribe: pushing `%s` to subs list', currentOpts) subs.push(currentOpts) } }) } if (!subs.length) { callback(null, []) return this } const subscribeProc = function () { const messageId = that._nextId() if (messageId === null) { debug('No messageId left') return false } const packet = { cmd: 'subscribe', subscriptions: subs, qos: 1, retain: false, dup: false, messageId: messageId } if (opts.properties) { packet.properties = opts.properties } // subscriptions to resubscribe to in case of disconnect if (that.options.resubscribe) { debug('subscribe :: resubscribe true') const topics = [] subs.forEach(function (sub) { if (that.options.reconnectPeriod > 0) { const topic = { qos: sub.qos } if (version === 5) { topic.nl = sub.nl || false topic.rap = sub.rap || false topic.rh = sub.rh || 0 topic.properties = sub.properties } that._resubscribeTopics[sub.topic] = topic topics.push(sub.topic) } }) that.messageIdToTopic[packet.messageId] = topics } that.outgoing[packet.messageId] = { volatile: true, cb: function (err, packet) { if (!err) { const granted = packet.granted for (let i = 0; i < granted.length; i += 1) { subs[i].qos = granted[i] } } callback(err, subs) } } debug('subscribe :: call _sendPacket') that._sendPacket(packet) return true } if (this._storeProcessing || this._storeProcessingQueue.length > 0 || !subscribeProc()) { this._storeProcessingQueue.push( { invoke: subscribeProc, callback: callback } ) } return this } /** * unsubscribe - unsubscribe from topic(s) * * @param {String, Array} topic - topics to unsubscribe from * @param {Object} [opts] - optional subscription options, includes: * {Object} properties - properties of unsubscribe packet * @param {Function} [callback] - callback fired on unsuback * @returns {MqttClient} this - for chaining * @api public * @example client.unsubscribe('topic'); * @example client.unsubscribe('topic', console.log); */ MqttClient.prototype.unsubscribe = function () { const that = this const args = new Array(arguments.length) for (let i = 0; i < arguments.length; i++) { args[i] = arguments[i] } let topic = args.shift() let callback = args.pop() || nop let opts = args.pop() if (typeof topic === 'string') { topic = [topic] } if (typeof callback !== 'function') { opts = callback callback = nop } const invalidTopic = validations.validateTopics(topic) if (invalidTopic !== null) { setImmediate(callback, new Error('Invalid topic ' + invalidTopic)) return this } if (that._checkDisconnecting(callback)) { return this } const unsubscribeProc = function () { const messageId = that._nextId() if (messageId === null) { debug('No messageId left') return false } const packet = { cmd: 'unsubscribe', qos: 1, messageId: messageId } if (typeof topic === 'string') { packet.unsubscriptions = [topic] } else if (Array.isArray(topic)) { packet.unsubscriptions = topic } if (that.options.resubscribe) { packet.unsubscriptions.forEach(function (topic) { delete that._resubscribeTopics[topic] }) } if (typeof opts === 'object' && opts.properties) { packet.properties = opts.properties } that.outgoing[packet.messageId] = { volatile: true, cb: callback } debug('unsubscribe: call _sendPacket') that._sendPacket(packet) return true } if (this._storeProcessing || this._storeProcessingQueue.length > 0 || !unsubscribeProc()) { this._storeProcessingQueue.push( { invoke: unsubscribeProc, callback: callback } ) } return this } /** * end - close connection * * @returns {MqttClient} this - for chaining * @param {Boolean} force - do not wait for all in-flight messages to be acked * @param {Object} opts - added to the disconnect packet * @param {Function} cb - called when the client has been closed * * @api public */ MqttClient.prototype.end = function (force, opts, cb) { const that = this debug('end :: (%s)', this.options.clientId) if (force == null || typeof force !== 'boolean') { cb = opts || nop opts = force force = false if (typeof opts !== 'object') { cb = opts opts = null if (typeof cb !== 'function') { cb = nop } } } if (typeof opts !== 'object') { cb = opts opts = null } debug('end :: cb? %s', !!cb) cb = cb || nop function closeStores () { debug('end :: closeStores: closing incoming and outgoing stores') that.disconnected = true that.incomingStore.close(function (e1) { that.outgoingStore.close(function (e2) { debug('end :: closeStores: emitting end') that.emit('end') if (cb) { const err = e1 || e2 debug('end :: closeStores: invoking callback with args') cb(err) } }) }) if (that._deferredReconnect) { that._deferredReconnect() } } function finish () { // defer closesStores of an I/O cycle, // just to make sure things are // ok for websockets debug('end :: (%s) :: finish :: calling _cleanUp with force %s', that.options.clientId, force) that._cleanUp(force, () => { debug('end :: finish :: calling process.nextTick on closeStores') // const boundProcess = nextTick.bind(null, closeStores) nextTick(closeStores.bind(that)) }, opts) } if (this.disconnecting) { cb() return this } this._clearReconnect() this.disconnecting = true if (!force && Object.keys(this.outgoing).length > 0) { // wait 10ms, just to be sure we received all of it debug('end :: (%s) :: calling finish in 10ms once outgoing is empty', that.options.clientId) this.once('outgoingEmpty', setTimeout.bind(null, finish, 10)) } else { debug('end :: (%s) :: immediately calling finish', that.options.clientId) finish() } return this } /** * removeOutgoingMessage - remove a message in outgoing store * the outgoing callback will be called withe Error('Message removed') if the message is removed * * @param {Number} messageId - messageId to remove message * @returns {MqttClient} this - for chaining * @api public * * @example client.removeOutgoingMessage(client.getLastAllocated()); */ MqttClient.prototype.removeOutgoingMessage = function (messageId) { const cb = this.outgoing[messageId] ? this.outgoing[messageId].cb : null delete this.outgoing[messageId] this.outgoingStore.del({ messageId: messageId }, function () { cb(new Error('Message removed')) }) return this } /** * reconnect - connect again using the same options as connect() * * @param {Object} [opts] - optional reconnect options, includes: * {Store} incomingStore - a store for the incoming packets * {Store} outgoingStore - a store for the outgoing packets * if opts is not given, current stores are used * @returns {MqttClient} this - for chaining * * @api public */ MqttClient.prototype.reconnect = function (opts) { debug('client reconnect') const that = this const f = function () { if (opts) { that.options.incomingStore = opts.incomingStore that.options.outgoingStore = opts.outgoingStore } else { that.options.incomingStore = null that.options.outgoingStore = null } that.incomingStore = that.options.incomingStore || new Store() that.outgoingStore = that.options.outgoingStore || new Store() that.disconnecting = false that.disconnected = false that._deferredReconnect = null that._reconnect() } if (this.disconnecting && !this.disconnected) { this._deferredReconnect = f } else { f() } return this } /** * _reconnect - implement reconnection * @api privateish */ MqttClient.prototype._reconnect = function () { debug('_reconnect: emitting reconnect to client') this.emit('reconnect') if (this.connected) { this.end(() => { this._setupStream() }) debug('client already connected. disconnecting first.') } else { debug('_reconnect: calling _setupStream') this._setupStream() } } /** * _setupReconnect - setup reconnect timer */ MqttClient.prototype._setupReconnect = function () { const that = this if (!that.disconnecting && !that.reconnectTimer && (that.options.reconnectPeriod > 0)) { if (!this.reconnecting) { debug('_setupReconnect :: emit `offline` state') this.emit('offline') debug('_setupReconnect :: set `reconnecting` to `true`') this.reconnecting = true } debug('_setupReconnect :: setting reconnectTimer for %d ms', that.options.reconnectPeriod) that.reconnectTimer = setInterval(function () { debug('reconnectTimer :: reconnect triggered!') that._reconnect() }, that.options.reconnectPeriod) } else { debug('_setupReconnect :: doing nothing...') } } /** * _clearReconnect - clear the reconnect timer */ MqttClient.prototype._clearReconnect = function () { debug('_clearReconnect : clearing reconnect timer') if (this.reconnectTimer) { clearInterval(this.reconnectTimer) this.reconnectTimer = null } } /** * _cleanUp - clean up on connection end * @api private */ MqttClient.prototype._cleanUp = function (forced, done) { const opts = arguments[2] if (done) { debug('_cleanUp :: done callback provided for on stream close') this.stream.on('close', done) } debug('_cleanUp :: forced? %s', forced) if (forced) { if ((this.options.reconnectPeriod === 0) && this.options.clean) { flush(this.outgoing) } debug('_cleanUp :: (%s) :: destroying stream', this.options.clientId) this.stream.destroy() } else { const packet = xtend({ cmd: 'disconnect' }, opts) debug('_cleanUp :: (%s) :: call _sendPacket with disconnect packet', this.options.clientId) this._sendPacket( packet, setImmediate.bind( null, this.stream.end.bind(this.stream) ) ) } if (!this.disconnecting) { debug('_cleanUp :: client not disconnecting. Clearing and resetting reconnect.') this._clearReconnect() this._setupReconnect() } if (this.pingTimer !== null) { debug('_cleanUp :: clearing pingTimer') this.pingTimer.clear() this.pingTimer = null } if (done && !this.connected) { debug('_cleanUp :: (%s) :: removing stream `done` callback `close` listener', this.options.clientId) this.stream.removeListener('close', done) done() } } /** * _sendPacket - send or queue a packet * @param {Object} packet - packet options * @param {Function} cb - callback when the packet is sent * @param {Function} cbStorePut - called when message is put into outgoingStore * @api private */ MqttClient.prototype._sendPacket = function (packet, cb, cbStorePut) { debug('_sendPacket :: (%s) :: start', this.options.clientId) cbStorePut = cbStorePut || nop cb = cb || nop const err = applyTopicAlias(this, packet) if (err) { cb(err) return } if (!this.connected) { // allow auth packets to be sent while authenticating with the broker (mqtt5 enhanced auth) if (packet.cmd === 'auth') { this._shiftPingInterval() sendPacket(this, packet, cb) return } debug('_sendPacket :: client not connected. Storing packet offline.') this._storePacket(packet, cb, cbStorePut) return } // When sending a packet, reschedule the ping timer this._shiftPingInterval() switch (packet.cmd) { case 'publish': break case 'pubrel': storeAndSend(this, packet, cb, cbStorePut) return default: sendPacket(this, packet, cb) return } switch (packet.qos) { case 2: case 1: storeAndSend(this, packet, cb, cbStorePut) break /** * no need of case here since it will be caught by default * and jshint comply that before default it must be a break * anyway it will result in -1 evaluation */ case 0: /* falls through */ default: sendPacket(this, packet, cb) break } debug('_sendPacket :: (%s) :: end', this.options.clientId) } /** * _storePacket - queue a packet * @param {Object} packet - packet options * @param {Function} cb - callback when the packet is sent * @param {Function} cbStorePut - called when message is put into outgoingStore * @api private */ MqttClient.prototype._storePacket = function (packet, cb, cbStorePut) { debug('_storePacket :: packet: %o', packet) debug('_storePacket :: cb? %s', !!cb) cbStorePut = cbStorePut || nop let storePacket = packet if (storePacket.cmd === 'publish') { // The original packet is for sending. // The cloned storePacket is for storing to resend on reconnect. // Topic Alias must not be used after disconnected. storePacket = clone(packet) const err = removeTopicAliasAndRecoverTopicName(this, storePacket) if (err) { return cb && cb(err) } } // check that the packet is not a qos of 0, or that the command is not a publish if (((storePacket.qos || 0) === 0 && this.queueQoSZero) || storePacket.cmd !== 'publish') { this.queue.push({ packet: storePacket, cb: cb }) } else if (storePacket.qos > 0) { cb = this.outgoing[storePacket.messageId] ? this.outgoing[storePacket.messageId].cb : null this.outgoingStore.put(storePacket, function (err) { if (err) { return cb && cb(err) } cbStorePut() }) } else if (cb) { cb(new Error('No connection to broker')) } } /** * _setupPingTimer - setup the ping timer * * @api private */ MqttClient.prototype._setupPingTimer = function () { debug('_setupPingTimer :: keepalive %d (seconds)', this.options.keepalive) const that = this if (!this.pingTimer && this.options.keepalive) { this.pingResp = true this.pingTimer = reInterval(function () { that._checkPing() }, this.options.keepalive * 1000) } } /** * _shiftPingInterval - reschedule the ping interval * * @api private */ MqttClient.prototype._shiftPingInterval = function () { if (this.pingTimer && this.options.keepalive && this.options.reschedulePings) { this.pingTimer.reschedule(this.options.keepalive * 1000) } } /** * _checkPing - check if a pingresp has come back, and ping the server again * * @api private */ MqttClient.prototype._checkPing = function () { debug('_checkPing :: checking ping...') if (this.pingResp) { debug('_checkPing :: ping response received. Clearing flag and sending `pingreq`') this.pingResp = false this._sendPacket({ cmd: 'pingreq' }) } else { // do a forced cleanup since socket will be in bad shape debug('_checkPing :: calling _cleanUp with force true') this._cleanUp(true) } } /** * _handlePingresp - handle a pingresp * * @api private */ MqttClient.prototype._handlePingresp = function () { this.pingResp = true } /** * _handleConnack * * @param {Object} packet * @api private */ MqttClient.prototype._handleConnack = function (packet) { debug('_handleConnack') const options = this.options const version = options.protocolVersion const rc = version === 5 ? packet.reasonCode : packet.returnCode clearTimeout(this.connackTimer) delete this.topicAliasSend if (packet.properties) { if (packet.properties.topicAliasMaximum) { if (packet.properties.topicAliasMaximum > 0xffff) { this.emit('error', new Error('topicAliasMaximum from broker is out of range')) return } if (packet.properties.topicAliasMaximum > 0) { this.topicAliasSend = new TopicAliasSend(packet.properties.topicAliasMaximum) } } if (packet.properties.serverKeepAlive && options.keepalive) { options.keepalive = packet.properties.serverKeepAlive this._shiftPingInterval() } if (packet.properties.maximumPacketSize) { if (!options.properties) { options.properties = {} } options.properties.maximumPacketSize = packet.properties.maximumPacketSize } } if (rc === 0) { this.reconnecting = false this._onConnect(packet) } else if (rc > 0) { const err = new Error('Connection refused: ' + errors[rc]) err.code = rc this.emit('error', err) } } MqttClient.prototype._handleAuth = function (packet) { const options = this.options const version = options.protocolVersion const rc = version === 5 ? packet.reasonCode : packet.returnCode if (version !== 5) { const err = new Error('Protocol error: Auth packets are only supported in MQTT 5. Your version:' + version) err.code = rc this.emit('error', err) return } const that = this this.handleAuth(packet, function (err, packet) { if (err) { that.emit('error', err) return } if (rc === 24) { that.reconnecting = false that._sendPacket(packet) } else { const error = new Error('Connection refused: ' + errors[rc]) err.code = rc that.emit('error', error) } }) } /** * @param packet the packet received by the broker * @return the auth packet to be returned to the broker * @api public */ MqttClient.prototype.handleAuth = function (packet, callback) { callback() } /** * _handlePublish * * @param {Object} packet * @api private */ /* those late 2 case should be rewrite to comply with coding style: case 1: case 0: // do not wait sending a puback // no callback passed if (1 === qos) { this._sendPacket({ cmd: 'puback', messageId: messageId }); } // emit the message event for both qos 1 and 0 this.emit('message', topic, message, packet); this.handleMessage(packet, done); break; default: // do nothing but every switch mus have a default // log or throw an error about unknown qos break; for now i just suppressed the warnings */ MqttClient.prototype._handlePublish = function (packet, done) { debug('_handlePublish: packet %o', packet) done = typeof done !== 'undefined' ? done : nop let topic = packet.topic.toString() const message = packet.payload const qos = packet.qos const messageId = packet.messageId const that = this const options = this.options const validReasonCodes = [0, 16, 128, 131, 135, 144, 145, 151, 153] if (this.options.protocolVersion === 5) { let alias if (packet.properties) { alias = packet.properties.topicAlias } if (typeof alias !== 'undefined') { if (topic.length === 0) { if (alias > 0 && alias <= 0xffff) { const gotTopic = this.topicAliasRecv.getTopicByAlias(alias) if (gotTopic) { topic = gotTopic debug('_handlePublish :: topic complemented by alias. topic: %s - alias: %d', topic, alias) } else { debug('_handlePublish :: unregistered topic alias. alias: %d', alias) this.emit('error', new Error('Received unregistered Topic Alias')) return } } else { debug('_handlePublish :: topic alias out of range. alias: %d', alias) this.emit('error', new Error('Received Topic Alias is out of range')) return } } else { if (this.topicAliasRecv.put(topic, alias)) { debug('_handlePublish :: registered topic: %s - alias: %d', topic, alias) } else { debug('_handlePublish :: topic alias out of range. alias: %d', alias) this.emit('error', new Error('Received Topic Alias is out of range')) return } } } } debug('_handlePublish: qos %d', qos) switch (qos) { case 2: { options.customHandleAcks(topic, message, packet, function (error, code) { if (!(error instanceof Error)) { code = error error = null } if (error) { return that.emit('error', error) } if (validReasonCodes.indexOf(code) === -1) { return that.emit('error', new Error('Wrong reason code for pubrec')) } if (code) { that._sendPacket({ cmd: 'pubrec', messageId: messageId, reasonCode: code }, done) } else { that.incomingStore.put(packet, function () { that._sendPacket({ cmd: 'pubrec', messageId: messageId }, done) }) } }) break } case 1: { // emit the message event options.customHandleAcks(topic, message, packet, function (error, code) { if (!(error instanceof Error)) { code = error error = null } if (error) { return that.emit('error', error) } if (validReasonCodes.indexOf(code) === -1) { return that.emit('error', new Error('Wrong reason code for puback')) } if (!code) { that.emit('message', topic, message, packet) } that.handleMessage(packet, function (err) { if (err) { return done && done(err) } that._sendPacket({ cmd: 'puback', messageId: messageId, reasonCode: code }, done) }) }) break } case 0: // emit the message event this.emit('message', topic, message, packet) this.handleMessage(packet, done) break default: // do nothing debug('_handlePublish: unknown QoS. Doing nothing.') // log or throw an error about unknown qos break } } /** * Handle messages with backpressure support, one at a time. * Override at will. * * @param Packet packet the packet * @param Function callback call when finished * @api public */ MqttClient.prototype.handleMessage = function (packet, callback) { callback() } /** * _handleAck * * @param {Object} packet * @api private */ MqttClient.prototype._handleAck = function (packet) { /* eslint no-fallthrough: "off" */ const messageId = packet.messageId const type = packet.cmd let response = null const cb = this.outgoing[messageId] ? this.outgoing[messageId].cb : null const that = this let err // Checking `!cb` happens to work, but it's not technically "correct". // // Why? This code assumes that "no callback" is the same as that "we're not // waiting for responses" (puback, pubrec, pubcomp, suback, or unsuback). // // It would be better to check `if (!this.outgoing[messageId])` here, but // there's no reason to change it and risk (another) regression. // // The only reason this code works is becaues code in MqttClient.publish, // MqttClinet.subscribe, and MqttClient.unsubscribe ensures that we will // have a callback even if the user doesn't pass one in.) if (!cb) { debug('_handleAck :: Server sent an ack in error. Ignoring.') // Server sent an ack in error, ignore it. return } // Process debug('_handleAck :: packet type', type) switch (type) { case 'pubcomp': // same thing as puback for QoS 2 case 'puback': { const pubackRC = packet.reasonCode // Callback - we're done if (pubackRC && pubackRC > 0 && pubackRC !== 16) { err = new Error('Publish error: ' + errors[pubackRC]) err.code = pubackRC cb(err, packet) } delete this.outgoing[messageId] this.outgoingStore.del(packet, cb) this.messageIdProvider.deallocate(messageId) this._invokeStoreProcessingQueue() break } case 'pubrec': { response = { cmd: 'pubrel', qos: 2, messageId: messageId } const pubrecRC = packet.reasonCode if (pubrecRC && pubrecRC > 0 && pubrecRC !== 16) { err = new Error('Publish error: ' + errors[pubrecRC]) err.code = pubrecRC cb(err, packet) } else { this._sendPacket(response) } break } case 'suback': { delete this.outgoing[messageId] this.messageIdProvider.deallocate(messageId) for (let grantedI = 0; grantedI < packet.granted.length; grantedI++) { if ((packet.granted[grantedI] & 0x80) !== 0) { // suback with Failure status const topics = this.messageIdToTopic[messageId] if (topics) { topics.forEach(function (topic) { delete that._resubscribeTopics[topic] }) } } } this._invokeStoreProcessingQueue() cb(null, packet) break } case 'unsuback': { delete this.outgoing[messageId] this.messageIdProvider.deallocate(messageId) this._invokeStoreProcessingQueue() cb(null) break } default: that.emit('error', new Error('unrecognized packet type')) } if (this.disconnecting && Object.keys(this.outgoing).length === 0) { this.emit('outgoingEmpty') } } /** * _handlePubrel * * @param {Object} packet * @api private */ MqttClient.prototype._handlePubrel = function (packet, callback) { debug('handling pubrel packet') callback = typeof callback !== 'undefined' ? callback : nop const messageId = packet.messageId const that = this const comp = { cmd: 'pubcomp', messageId: messageId } that.incomingStore.get(packet, function (err, pub) { if (!err) { that.emit('message', pub.topic, pub.payload, pub) that.handleMessage(pub, function (err) { if (err) { return callback(err) } that.incomingStore.del(pub, nop) that._sendPacket(comp, callback) }) } else { that._sendPacket(comp, callback) } }) } /** * _handleDisconnect * * @param {Object} packet * @api private */ MqttClient.prototype._handleDisconnect = function (packet) { this.emit('disconnect', packet) } /** * _nextId * @return unsigned int */ MqttClient.prototype._nextId = function () { return this.messageIdProvider.allocate() } /** * getLastMessageId * @return unsigned int */ MqttClient.prototype.getLastMessageId = function () { return this.messageIdProvider.getLastAllocated() } /** * _resubscribe * @api private */ MqttClient.prototype._resubscribe = function () { debug('_resubscribe') const _resubscribeTopicsKeys = Object.keys(this._resubscribeTopics) if (!this._firstConnection && (this.options.clean || (this.options.protocolVersion === 5 && !this.connackPacket.sessionPresent)) && _resubscribeTopicsKeys.length > 0) { if (this.options.resubscribe) { if (this.options.protocolVersion === 5) { debug('_resubscribe: protocolVersion 5') for (let topicI = 0; topicI < _resubscribeTopicsKeys.length; topicI++) { const resubscribeTopic = {} resubscribeTopic[_resubscribeTopicsKeys[topicI]] = this._resubscribeTopics[_resubscribeTopicsKeys[topicI]] resubscribeTopic.resubscribe = true this.subscribe(resubscribeTopic, { properties: resubscribeTopic[_resubscribeTopicsKeys[topicI]].properties }) } } else { this._resubscribeTopics.resubscribe = true this.subscribe(this._resubscribeTopics) } } else { this._resubscribeTopics = {} } } this._firstConnection = false } /** * _onConnect * * @api private */ MqttClient.prototype._onConnect = function (packet) { if (this.disconnected) { this.emit('connect', packet) return } const that = this this.connackPacket = packet this.messageIdProvider.clear() this._setupPingTimer() this.connected = true function startStreamProcess () { let outStore = that.outgoingStore.createStream() function clearStoreProcessing () { that._storeProcessing = false that._packetIdsDuringStoreProcessing = {} } that.once('close', remove) outStore.on('error', function (err) { clearStoreProcessing() that._flushStoreProcessingQueue() that.removeListener('close', remove) that.emit('error', err) }) function remove () { outStore.destroy() outStore = null that._flushStoreProcessingQueue() clearStoreProcessing() } function storeDeliver () { // edge case, we wrapped this twice if (!outStore) { return } that._storeProcessing = true const packet = outStore.read(1) let cb if (!packet) { // read when data is available in the future outStore.once('readable', storeDeliver) return } // Skip already processed store packets if (that._packetIdsDuringStoreProcessing[packet.messageId]) { storeDeliver() return } // Avoid unnecessary stream read operations when disconnected if (!that.disconnecting && !that.reconnectTimer) { cb = that.outgoing[packet.messageId] ? that.outgoing[packet.messageId].cb : null that.outgoing[packet.messageId] = { volatile: false, cb: function (err, status) { // Ensure that the original callback passed in to publish gets invoked if (cb) { cb(err, status) } storeDeliver() } } that._packetIdsDuringStoreProcessing[packet.messageId] = true if (that.messageIdProvider.register(packet.messageId)) { that._sendPacket(packet) } else { debug('messageId: %d has already used.', packet.messageId) } } else if (outStore.destroy) { outStore.destroy() } } outStore.on('end', function () { let allProcessed = true for (const id in that._packetIdsDuringStoreProcessing) { if (!that._packetIdsDuringStoreProcessing[id]) { allProcessed = false break } } if (allProcessed) { clearStoreProcessing() that.removeListener('close', remove) that._invokeAllStoreProcessingQueue() that.emit('connect', packet) } else { startStreamProcess() } }) storeDeliver() } // start flowing startStreamProcess() } MqttClient.prototype._invokeStoreProcessingQueue = function () { if (this._storeProcessingQueue.length > 0) { const f = this._storeProcessingQueue[0] if (f && f.invoke()) { this._storeProcessingQueue.shift() return true } } return false } MqttClient.prototype._invokeAllStoreProcessingQueue = function () { while (this._invokeStoreProcessingQueue()) { /* empty */ } } MqttClient.prototype._flushStoreProcessingQueue = function () { for (const f of this._storeProcessingQueue) { if (f.cbStorePut) f.cbStorePut(new Error('Connection closed')) if (f.callback) f.callback(new Error('Connection closed')) } this._storeProcessingQueue.splice(0) } module.exports = MqttClient /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(14), __webpack_require__(12))) /***/ }), /* 325 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; exports.byteLength = byteLength exports.toByteArray = toByteArray exports.fromByteArray = fromByteArray var lookup = [] var revLookup = [] var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' for (var i = 0, len = code.length; i < len; ++i) { lookup[i] = code[i] revLookup[code.charCodeAt(i)] = i } // Support decoding URL-safe base64 strings, as Node.js does. // See: https://en.wikipedia.org/wiki/Base64#URL_applications revLookup['-'.charCodeAt(0)] = 62 revLookup['_'.charCodeAt(0)] = 63 function getLens (b64) { var len = b64.length if (len % 4 > 0) { throw new Error('Invalid string. Length must be a multiple of 4') } // Trim off extra bytes after placeholder bytes are found // See: https://github.com/beatgammit/base64-js/issues/42 var validLen = b64.indexOf('=') if (validLen === -1) validLen = len var placeHoldersLen = validLen === len ? 0 : 4 - (validLen % 4) return [validLen, placeHoldersLen] } // base64 is 4/3 + up to two characters of the original data function byteLength (b64) { var lens = getLens(b64) var validLen = lens[0] var placeHoldersLen = lens[1] return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen } function _byteLength (b64, validLen, placeHoldersLen) { return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen } function toByteArray (b64) { var tmp var lens = getLens(b64) var validLen = lens[0] var placeHoldersLen = lens[1] var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) var curByte = 0 // if there are placeholders, only get up to the last complete 4 chars var len = placeHoldersLen > 0 ? validLen - 4 : validLen var i for (i = 0; i < len; i += 4) { tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] arr[curByte++] = (tmp >> 16) & 0xFF arr[curByte++] = (tmp >> 8) & 0xFF arr[curByte++] = tmp & 0xFF } if (placeHoldersLen === 2) { tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) arr[curByte++] = tmp & 0xFF } if (placeHoldersLen === 1) { tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) arr[curByte++] = (tmp >> 8) & 0xFF arr[curByte++] = tmp & 0xFF } return arr } function tripletToBase64 (num) { return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] } function encodeChunk (uint8, start, end) { var tmp var output = [] for (var i = start; i < end; i += 3) { tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF) output.push(tripletToBase64(tmp)) } return output.join('') } function fromByteArray (uint8) { var tmp var len = uint8.length var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes var parts = [] var maxChunkLength = 16383 // must be multiple of 3 // go through the array every three bytes, we'll deal with trailing stuff later for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) } // pad the end with zeros, but make sure to not forget the extra bytes if (extraBytes === 1) { tmp = uint8[len - 1] parts.push( lookup[tmp >> 2] + lookup[(tmp << 4) & 0x3F] + '==' ) } else if (extraBytes === 2) { tmp = (uint8[len - 2] << 8) + uint8[len - 1] parts.push( lookup[tmp >> 10] + lookup[(tmp >> 4) & 0x3F] + lookup[(tmp << 2) & 0x3F] + '=' ) } return parts.join('') } /***/ }), /* 326 */ /***/ (function(module, exports) { /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */ exports.read = function (buffer, offset, isLE, mLen, nBytes) { var e, m var eLen = (nBytes * 8) - mLen - 1 var eMax = (1 << eLen) - 1 var eBias = eMax >> 1 var nBits = -7 var i = isLE ? (nBytes - 1) : 0 var d = isLE ? -1 : 1 var s = buffer[offset + i] i += d e = s & ((1 << (-nBits)) - 1) s >>= (-nBits) nBits += eLen for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} m = e & ((1 << (-nBits)) - 1) e >>= (-nBits) nBits += mLen for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} if (e === 0) { e = 1 - eBias } else if (e === eMax) { return m ? NaN : ((s ? -1 : 1) * Infinity) } else { m = m + Math.pow(2, mLen) e = e - eBias } return (s ? -1 : 1) * m * Math.pow(2, e - mLen) } exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { var e, m, c var eLen = (nBytes * 8) - mLen - 1 var eMax = (1 << eLen) - 1 var eBias = eMax >> 1 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) var i = isLE ? 0 : (nBytes - 1) var d = isLE ? 1 : -1 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 value = Math.abs(value) if (isNaN(value) || value === Infinity) { m = isNaN(value) ? 1 : 0 e = eMax } else { e = Math.floor(Math.log(value) / Math.LN2) if (value * (c = Math.pow(2, -e)) < 1) { e-- c *= 2 } if (e + eBias >= 1) { value += rt / c } else { value += rt * Math.pow(2, 1 - eBias) } if (value * c >= 2) { e++ c /= 2 } if (e + eBias >= eMax) { m = 0 e = eMax } else if (e + eBias >= 1) { m = ((value * c) - 1) * Math.pow(2, mLen) e = e + eBias } else { m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) e = 0 } } for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} e = (e << mLen) | m eLen += mLen for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} buffer[offset + i - d] |= s * 128 } /***/ }), /* 327 */ /***/ (function(module, exports) { /* (ignored) */ /***/ }), /* 328 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Buffer = __webpack_require__(28).Buffer; var util = __webpack_require__(329); function copyBuffer(src, target, offset) { src.copy(target, offset); } module.exports = function () { function BufferList() { _classCallCheck(this, BufferList); this.head = null; this.tail = null; this.length = 0; } BufferList.prototype.push = function push(v) { var entry = { data: v, next: null }; if (this.length > 0) this.tail.next = entry;else this.head = entry; this.tail = entry; ++this.length; }; BufferList.prototype.unshift = function unshift(v) { var entry = { data: v, next: this.head }; if (this.length === 0) this.tail = entry; this.head = entry; ++this.length; }; BufferList.prototype.shift = function shift() { if (this.length === 0) return; var ret = this.head.data; if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; --this.length; return ret; }; BufferList.prototype.clear = function clear() { this.head = this.tail = null; this.length = 0; }; BufferList.prototype.join = function join(s) { if (this.length === 0) return ''; var p = this.head; var ret = '' + p.data; while (p = p.next) { ret += s + p.data; }return ret; }; BufferList.prototype.concat = function concat(n) { if (this.length === 0) return Buffer.alloc(0); var ret = Buffer.allocUnsafe(n >>> 0); var p = this.head; var i = 0; while (p) { copyBuffer(p.data, ret, i); i += p.data.length; p = p.next; } return ret; }; return BufferList; }(); if (util && util.inspect && util.inspect.custom) { module.exports.prototype[util.inspect.custom] = function () { var obj = util.inspect({ length: this.length }); return this.constructor.name + ' ' + obj; }; } /***/ }), /* 329 */ /***/ (function(module, exports) { /* (ignored) */ /***/ }), /* 330 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) || (typeof self !== "undefined" && self) || window; var apply = Function.prototype.apply; // DOM APIs, for completeness exports.setTimeout = function() { return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout); }; exports.setInterval = function() { return new Timeout(apply.call(setInterval, scope, arguments), clearInterval); }; exports.clearTimeout = exports.clearInterval = function(timeout) { if (timeout) { timeout.close(); } }; function Timeout(id, clearFn) { this._id = id; this._clearFn = clearFn; } Timeout.prototype.unref = Timeout.prototype.ref = function() {}; Timeout.prototype.close = function() { this._clearFn.call(scope, this._id); }; // Does not start the time, just sets up the members needed. exports.enroll = function(item, msecs) { clearTimeout(item._idleTimeoutId); item._idleTimeout = msecs; }; exports.unenroll = function(item) { clearTimeout(item._idleTimeoutId); item._idleTimeout = -1; }; exports._unrefActive = exports.active = function(item) { clearTimeout(item._idleTimeoutId); var msecs = item._idleTimeout; if (msecs >= 0) { item._idleTimeoutId = setTimeout(function onTimeout() { if (item._onTimeout) item._onTimeout(); }, msecs); } }; // setimmediate attaches itself to the global object __webpack_require__(331); // On some exotic environments, it's not clear which object `setimmediate` was // able to install onto. Search each possibility in the same order as the // `setimmediate` library. exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) || (typeof global !== "undefined" && global.setImmediate) || (this && this.setImmediate); exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) || (typeof global !== "undefined" && global.clearImmediate) || (this && this.clearImmediate); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12))) /***/ }), /* 331 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { "use strict"; if (global.setImmediate) { return; } var nextHandle = 1; // Spec says greater than zero var tasksByHandle = {}; var currentlyRunningATask = false; var doc = global.document; var registerImmediate; function setImmediate(callback) { // Callback can either be a function or a string if (typeof callback !== "function") { callback = new Function("" + callback); } // Copy function arguments var args = new Array(arguments.length - 1); for (var i = 0; i < args.length; i++) { args[i] = arguments[i + 1]; } // Store and register the task var task = { callback: callback, args: args }; tasksByHandle[nextHandle] = task; registerImmediate(nextHandle); return nextHandle++; } function clearImmediate(handle) { delete tasksByHandle[handle]; } function run(task) { var callback = task.callback; var args = task.args; switch (args.length) { case 0: callback(); break; case 1: callback(args[0]); break; case 2: callback(args[0], args[1]); break; case 3: callback(args[0], args[1], args[2]); break; default: callback.apply(undefined, args); break; } } function runIfPresent(handle) { // From the spec: "Wait until any invocations of this algorithm started before this one have completed." // So if we're currently running a task, we'll need to delay this invocation. if (currentlyRunningATask) { // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a // "too much recursion" error. setTimeout(runIfPresent, 0, handle); } else { var task = tasksByHandle[handle]; if (task) { currentlyRunningATask = true; try { run(task); } finally { clearImmediate(handle); currentlyRunningATask = false; } } } } function installNextTickImplementation() { registerImmediate = function(handle) { process.nextTick(function () { runIfPresent(handle); }); }; } function canUsePostMessage() { // The test against `importScripts` prevents this implementation from being installed inside a web worker, // where `global.postMessage` means something completely different and can't be used for this purpose. if (global.postMessage && !global.importScripts) { var postMessageIsAsynchronous = true; var oldOnMessage = global.onmessage; global.onmessage = function() { postMessageIsAsynchronous = false; }; global.postMessage("", "*"); global.onmessage = oldOnMessage; return postMessageIsAsynchronous; } } function installPostMessageImplementation() { // Installs an event handler on `global` for the `message` event: see // * https://developer.mozilla.org/en/DOM/window.postMessage // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages var messagePrefix = "setImmediate$" + Math.random() + "$"; var onGlobalMessage = function(event) { if (event.source === global && typeof event.data === "string" && event.data.indexOf(messagePrefix) === 0) { runIfPresent(+event.data.slice(messagePrefix.length)); } }; if (global.addEventListener) { global.addEventListener("message", onGlobalMessage, false); } else { global.attachEvent("onmessage", onGlobalMessage); } registerImmediate = function(handle) { global.postMessage(messagePrefix + handle, "*"); }; } function installMessageChannelImplementation() { var channel = new MessageChannel(); channel.port1.onmessage = function(event) { var handle = event.data; runIfPresent(handle); }; registerImmediate = function(handle) { channel.port2.postMessage(handle); }; } function installReadyStateChangeImplementation() { var html = doc.documentElement; registerImmediate = function(handle) { // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. var script = doc.createElement("script"); script.onreadystatechange = function () { runIfPresent(handle); script.onreadystatechange = null; html.removeChild(script); script = null; }; html.appendChild(script); }; } function installSetTimeoutImplementation() { registerImmediate = function(handle) { setTimeout(runIfPresent, 0, handle); }; } // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live. var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global); attachTo = attachTo && attachTo.setTimeout ? attachTo : global; // Don't get fooled by e.g. browserify environments. if ({}.toString.call(global.process) === "[object process]") { // For Node.js before 0.9 installNextTickImplementation(); } else if (canUsePostMessage()) { // For non-IE10 modern browsers installPostMessageImplementation(); } else if (global.MessageChannel) { // For web workers, where supported installMessageChannelImplementation(); } else if (doc && "onreadystatechange" in doc.createElement("script")) { // For IE 6–8 installReadyStateChangeImplementation(); } else { // For older browsers installSetTimeoutImplementation(); } attachTo.setImmediate = setImmediate; attachTo.clearImmediate = clearImmediate; }(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self)); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12), __webpack_require__(14))) /***/ }), /* 332 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) { /** * Module exports. */ module.exports = deprecate; /** * Mark that a method should not be used. * Returns a modified function which warns once by default. * * If `localStorage.noDeprecation = true` is set, then it is a no-op. * * If `localStorage.throwDeprecation = true` is set, then deprecated functions * will throw an Error when invoked. * * If `localStorage.traceDeprecation = true` is set, then deprecated functions * will invoke `console.trace()` instead of `console.error()`. * * @param {Function} fn - the function to deprecate * @param {String} msg - the string to print to the console when `fn` is invoked * @returns {Function} a new "deprecated" version of `fn` * @api public */ function deprecate (fn, msg) { if (config('noDeprecation')) { return fn; } var warned = false; function deprecated() { if (!warned) { if (config('throwDeprecation')) { throw new Error(msg); } else if (config('traceDeprecation')) { console.trace(msg); } else { console.warn(msg); } warned = true; } return fn.apply(this, arguments); } return deprecated; } /** * Checks `localStorage` for boolean values for the given `name`. * * @param {String} name * @returns {Boolean} * @api private */ function config (name) { // accessing global.localStorage can trigger a DOMException in sandboxed iframes try { if (!global.localStorage) return false; } catch (_) { return false; } var val = global.localStorage[name]; if (null == val) return false; return String(val).toLowerCase() === 'true'; } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12))) /***/ }), /* 333 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. // a passthrough stream. // basically just the most minimal sort of Transform stream. // Every written chunk gets output as-is. module.exports = PassThrough; var Transform = __webpack_require__(64); /*<replacement>*/ var util = Object.create(__webpack_require__(25)); util.inherits = __webpack_require__(16); /*</replacement>*/ util.inherits(PassThrough, Transform); function PassThrough(options) { if (!(this instanceof PassThrough)) return new PassThrough(options); Transform.call(this, options); } PassThrough.prototype._transform = function (chunk, encoding, cb) { cb(null, chunk); }; /***/ }), /* 334 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Topic Alias receiving manager * This holds alias to topic map * @param {Number} [max] - topic alias maximum entries */ function TopicAliasRecv (max) { if (!(this instanceof TopicAliasRecv)) { return new TopicAliasRecv(max) } this.aliasToTopic = {} this.max = max } /** * Insert or update topic - alias entry. * @param {String} [topic] - topic * @param {Number} [alias] - topic alias * @returns {Boolean} - if success return true otherwise false */ TopicAliasRecv.prototype.put = function (topic, alias) { if (alias === 0 || alias > this.max) { return false } this.aliasToTopic[alias] = topic this.length = Object.keys(this.aliasToTopic).length return true } /** * Get topic by alias * @param {String} [topic] - topic * @returns {Number} - if mapped topic exists return topic alias, otherwise return undefined */ TopicAliasRecv.prototype.getTopicByAlias = function (alias) { return this.aliasToTopic[alias] } /** * Clear all entries */ TopicAliasRecv.prototype.clear = function () { this.aliasToTopic = {} } module.exports = TopicAliasRecv /***/ }), /* 335 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Module dependencies */ const LruMap = __webpack_require__(336) const NumberAllocator = __webpack_require__(339).NumberAllocator /** * Topic Alias sending manager * This holds both topic to alias and alias to topic map * @param {Number} [max] - topic alias maximum entries */ function TopicAliasSend (max) { if (!(this instanceof TopicAliasSend)) { return new TopicAliasSend(max) } if (max > 0) { this.aliasToTopic = new LruMap({ max: max }) this.topicToAlias = {} this.numberAllocator = new NumberAllocator(1, max) this.max = max this.length = 0 } } /** * Insert or update topic - alias entry. * @param {String} [topic] - topic * @param {Number} [alias] - topic alias * @returns {Boolean} - if success return true otherwise false */ TopicAliasSend.prototype.put = function (topic, alias) { if (alias === 0 || alias > this.max) { return false } const entry = this.aliasToTopic.get(alias) if (entry) { delete this.topicToAlias[entry] } this.aliasToTopic.set(alias, topic) this.topicToAlias[topic] = alias this.numberAllocator.use(alias) this.length = this.aliasToTopic.length return true } /** * Get topic by alias * @param {Number} [alias] - topic alias * @returns {String} - if mapped topic exists return topic, otherwise return undefined */ TopicAliasSend.prototype.getTopicByAlias = function (alias) { return this.aliasToTopic.get(alias) } /** * Get topic by alias * @param {String} [topic] - topic * @returns {Number} - if mapped topic exists return topic alias, otherwise return undefined */ TopicAliasSend.prototype.getAliasByTopic = function (topic) { const alias = this.topicToAlias[topic] if (typeof alias !== 'undefined') { this.aliasToTopic.get(alias) // LRU update } return alias } /** * Clear all entries */ TopicAliasSend.prototype.clear = function () { this.aliasToTopic.reset() this.topicToAlias = {} this.numberAllocator.clear() this.length = 0 } /** * Get Least Recently Used (LRU) topic alias * @returns {Number} - if vacant alias exists then return it, otherwise then return LRU alias */ TopicAliasSend.prototype.getLruAlias = function () { const alias = this.numberAllocator.firstVacant() if (alias) return alias return this.aliasToTopic.keys()[this.aliasToTopic.length - 1] } module.exports = TopicAliasSend /***/ }), /* 336 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // A linked list to keep track of recently-used-ness const Yallist = __webpack_require__(337) const MAX = Symbol('max') const LENGTH = Symbol('length') const LENGTH_CALCULATOR = Symbol('lengthCalculator') const ALLOW_STALE = Symbol('allowStale') const MAX_AGE = Symbol('maxAge') const DISPOSE = Symbol('dispose') const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') const LRU_LIST = Symbol('lruList') const CACHE = Symbol('cache') const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') const naiveLength = () => 1 // lruList is a yallist where the head is the youngest // item, and the tail is the oldest. the list contains the Hit // objects as the entries. // Each Hit object has a reference to its Yallist.Node. This // never changes. // // cache is a Map (or PseudoMap) that matches the keys to // the Yallist.Node object. class LRUCache { constructor (options) { if (typeof options === 'number') options = { max: options } if (!options) options = {} if (options.max && (typeof options.max !== 'number' || options.max < 0)) throw new TypeError('max must be a non-negative number') // Kind of weird to have a default max of Infinity, but oh well. const max = this[MAX] = options.max || Infinity const lc = options.length || naiveLength this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc this[ALLOW_STALE] = options.stale || false if (options.maxAge && typeof options.maxAge !== 'number') throw new TypeError('maxAge must be a number') this[MAX_AGE] = options.maxAge || 0 this[DISPOSE] = options.dispose this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false this.reset() } // resize the cache when the max changes. set max (mL) { if (typeof mL !== 'number' || mL < 0) throw new TypeError('max must be a non-negative number') this[MAX] = mL || Infinity trim(this) } get max () { return this[MAX] } set allowStale (allowStale) { this[ALLOW_STALE] = !!allowStale } get allowStale () { return this[ALLOW_STALE] } set maxAge (mA) { if (typeof mA !== 'number') throw new TypeError('maxAge must be a non-negative number') this[MAX_AGE] = mA trim(this) } get maxAge () { return this[MAX_AGE] } // resize the cache when the lengthCalculator changes. set lengthCalculator (lC) { if (typeof lC !== 'function') lC = naiveLength if (lC !== this[LENGTH_CALCULATOR]) { this[LENGTH_CALCULATOR] = lC this[LENGTH] = 0 this[LRU_LIST].forEach(hit => { hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) this[LENGTH] += hit.length }) } trim(this) } get lengthCalculator () { return this[LENGTH_CALCULATOR] } get length () { return this[LENGTH] } get itemCount () { return this[LRU_LIST].length } rforEach (fn, thisp) { thisp = thisp || this for (let walker = this[LRU_LIST].tail; walker !== null;) { const prev = walker.prev forEachStep(this, fn, walker, thisp) walker = prev } } forEach (fn, thisp) { thisp = thisp || this for (let walker = this[LRU_LIST].head; walker !== null;) { const next = walker.next forEachStep(this, fn, walker, thisp) walker = next } } keys () { return this[LRU_LIST].toArray().map(k => k.key) } values () { return this[LRU_LIST].toArray().map(k => k.value) } reset () { if (this[DISPOSE] && this[LRU_LIST] && this[LRU_LIST].length) { this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) } this[CACHE] = new Map() // hash of items by key this[LRU_LIST] = new Yallist() // list of items in order of use recency this[LENGTH] = 0 // length of items in the list } dump () { return this[LRU_LIST].map(hit => isStale(this, hit) ? false : { k: hit.key, v: hit.value, e: hit.now + (hit.maxAge || 0) }).toArray().filter(h => h) } dumpLru () { return this[LRU_LIST] } set (key, value, maxAge) { maxAge = maxAge || this[MAX_AGE] if (maxAge && typeof maxAge !== 'number') throw new TypeError('maxAge must be a number') const now = maxAge ? Date.now() : 0 const len = this[LENGTH_CALCULATOR](value, key) if (this[CACHE].has(key)) { if (len > this[MAX]) { del(this, this[CACHE].get(key)) return false } const node = this[CACHE].get(key) const item = node.value // dispose of the old one before overwriting // split out into 2 ifs for better coverage tracking if (this[DISPOSE]) { if (!this[NO_DISPOSE_ON_SET]) this[DISPOSE](key, item.value) } item.now = now item.maxAge = maxAge item.value = value this[LENGTH] += len - item.length item.length = len this.get(key) trim(this) return true } const hit = new Entry(key, value, len, now, maxAge) // oversized objects fall out of cache automatically. if (hit.length > this[MAX]) { if (this[DISPOSE]) this[DISPOSE](key, value) return false } this[LENGTH] += hit.length this[LRU_LIST].unshift(hit) this[CACHE].set(key, this[LRU_LIST].head) trim(this) return true } has (key) { if (!this[CACHE].has(key)) return false const hit = this[CACHE].get(key).value return !isStale(this, hit) } get (key) { return get(this, key, true) } peek (key) { return get(this, key, false) } pop () { const node = this[LRU_LIST].tail if (!node) return null del(this, node) return node.value } del (key) { del(this, this[CACHE].get(key)) } load (arr) { // reset the cache this.reset() const now = Date.now() // A previous serialized cache has the most recent items first for (let l = arr.length - 1; l >= 0; l--) { const hit = arr[l] const expiresAt = hit.e || 0 if (expiresAt === 0) // the item was created without expiration in a non aged cache this.set(hit.k, hit.v) else { const maxAge = expiresAt - now // dont add already expired items if (maxAge > 0) { this.set(hit.k, hit.v, maxAge) } } } } prune () { this[CACHE].forEach((value, key) => get(this, key, false)) } } const get = (self, key, doUse) => { const node = self[CACHE].get(key) if (node) { const hit = node.value if (isStale(self, hit)) { del(self, node) if (!self[ALLOW_STALE]) return undefined } else { if (doUse) { if (self[UPDATE_AGE_ON_GET]) node.value.now = Date.now() self[LRU_LIST].unshiftNode(node) } } return hit.value } } const isStale = (self, hit) => { if (!hit || (!hit.maxAge && !self[MAX_AGE])) return false const diff = Date.now() - hit.now return hit.maxAge ? diff > hit.maxAge : self[MAX_AGE] && (diff > self[MAX_AGE]) } const trim = self => { if (self[LENGTH] > self[MAX]) { for (let walker = self[LRU_LIST].tail; self[LENGTH] > self[MAX] && walker !== null;) { // We know that we're about to delete this one, and also // what the next least recently used key will be, so just // go ahead and set it now. const prev = walker.prev del(self, walker) walker = prev } } } const del = (self, node) => { if (node) { const hit = node.value if (self[DISPOSE]) self[DISPOSE](hit.key, hit.value) self[LENGTH] -= hit.length self[CACHE].delete(hit.key) self[LRU_LIST].removeNode(node) } } class Entry { constructor (key, value, length, now, maxAge) { this.key = key this.value = value this.length = length this.now = now this.maxAge = maxAge || 0 } } const forEachStep = (self, fn, node, thisp) => { let hit = node.value if (isStale(self, hit)) { del(self, node) if (!self[ALLOW_STALE]) hit = undefined } if (hit) fn.call(thisp, hit.value, hit.key, self) } module.exports = LRUCache /***/ }), /* 337 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = Yallist Yallist.Node = Node Yallist.create = Yallist function Yallist (list) { var self = this if (!(self instanceof Yallist)) { self = new Yallist() } self.tail = null self.head = null self.length = 0 if (list && typeof list.forEach === 'function') { list.forEach(function (item) { self.push(item) }) } else if (arguments.length > 0) { for (var i = 0, l = arguments.length; i < l; i++) { self.push(arguments[i]) } } return self } Yallist.prototype.removeNode = function (node) { if (node.list !== this) { throw new Error('removing node which does not belong to this list') } var next = node.next var prev = node.prev if (next) { next.prev = prev } if (prev) { prev.next = next } if (node === this.head) { this.head = next } if (node === this.tail) { this.tail = prev } node.list.length-- node.next = null node.prev = null node.list = null return next } Yallist.prototype.unshiftNode = function (node) { if (node === this.head) { return } if (node.list) { node.list.removeNode(node) } var head = this.head node.list = this node.next = head if (head) { head.prev = node } this.head = node if (!this.tail) { this.tail = node } this.length++ } Yallist.prototype.pushNode = function (node) { if (node === this.tail) { return } if (node.list) { node.list.removeNode(node) } var tail = this.tail node.list = this node.prev = tail if (tail) { tail.next = node } this.tail = node if (!this.head) { this.head = node } this.length++ } Yallist.prototype.push = function () { for (var i = 0, l = arguments.length; i < l; i++) { push(this, arguments[i]) } return this.length } Yallist.prototype.unshift = function () { for (var i = 0, l = arguments.length; i < l; i++) { unshift(this, arguments[i]) } return this.length } Yallist.prototype.pop = function () { if (!this.tail) { return undefined } var res = this.tail.value this.tail = this.tail.prev if (this.tail) { this.tail.next = null } else { this.head = null } this.length-- return res } Yallist.prototype.shift = function () { if (!this.head) { return undefined } var res = this.head.value this.head = this.head.next if (this.head) { this.head.prev = null } else { this.tail = null } this.length-- return res } Yallist.prototype.forEach = function (fn, thisp) { thisp = thisp || this for (var walker = this.head, i = 0; walker !== null; i++) { fn.call(thisp, walker.value, i, this) walker = walker.next } } Yallist.prototype.forEachReverse = function (fn, thisp) { thisp = thisp || this for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { fn.call(thisp, walker.value, i, this) walker = walker.prev } } Yallist.prototype.get = function (n) { for (var i = 0, walker = this.head; walker !== null && i < n; i++) { // abort out of the list early if we hit a cycle walker = walker.next } if (i === n && walker !== null) { return walker.value } } Yallist.prototype.getReverse = function (n) { for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { // abort out of the list early if we hit a cycle walker = walker.prev } if (i === n && walker !== null) { return walker.value } } Yallist.prototype.map = function (fn, thisp) { thisp = thisp || this var res = new Yallist() for (var walker = this.head; walker !== null;) { res.push(fn.call(thisp, walker.value, this)) walker = walker.next } return res } Yallist.prototype.mapReverse = function (fn, thisp) { thisp = thisp || this var res = new Yallist() for (var walker = this.tail; walker !== null;) { res.push(fn.call(thisp, walker.value, this)) walker = walker.prev } return res } Yallist.prototype.reduce = function (fn, initial) { var acc var walker = this.head if (arguments.length > 1) { acc = initial } else if (this.head) { walker = this.head.next acc = this.head.value } else { throw new TypeError('Reduce of empty list with no initial value') } for (var i = 0; walker !== null; i++) { acc = fn(acc, walker.value, i) walker = walker.next } return acc } Yallist.prototype.reduceReverse = function (fn, initial) { var acc var walker = this.tail if (arguments.length > 1) { acc = initial } else if (this.tail) { walker = this.tail.prev acc = this.tail.value } else { throw new TypeError('Reduce of empty list with no initial value') } for (var i = this.length - 1; walker !== null; i--) { acc = fn(acc, walker.value, i) walker = walker.prev } return acc } Yallist.prototype.toArray = function () { var arr = new Array(this.length) for (var i = 0, walker = this.head; walker !== null; i++) { arr[i] = walker.value walker = walker.next } return arr } Yallist.prototype.toArrayReverse = function () { var arr = new Array(this.length) for (var i = 0, walker = this.tail; walker !== null; i++) { arr[i] = walker.value walker = walker.prev } return arr } Yallist.prototype.slice = function (from, to) { to = to || this.length if (to < 0) { to += this.length } from = from || 0 if (from < 0) { from += this.length } var ret = new Yallist() if (to < from || to < 0) { return ret } if (from < 0) { from = 0 } if (to > this.length) { to = this.length } for (var i = 0, walker = this.head; walker !== null && i < from; i++) { walker = walker.next } for (; walker !== null && i < to; i++, walker = walker.next) { ret.push(walker.value) } return ret } Yallist.prototype.sliceReverse = function (from, to) { to = to || this.length if (to < 0) { to += this.length } from = from || 0 if (from < 0) { from += this.length } var ret = new Yallist() if (to < from || to < 0) { return ret } if (from < 0) { from = 0 } if (to > this.length) { to = this.length } for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { walker = walker.prev } for (; walker !== null && i > from; i--, walker = walker.prev) { ret.push(walker.value) } return ret } Yallist.prototype.splice = function (start, deleteCount /*, ...nodes */) { if (start > this.length) { start = this.length - 1 } if (start < 0) { start = this.length + start; } for (var i = 0, walker = this.head; walker !== null && i < start; i++) { walker = walker.next } var ret = [] for (var i = 0; walker && i < deleteCount; i++) { ret.push(walker.value) walker = this.removeNode(walker) } if (walker === null) { walker = this.tail } if (walker !== this.head && walker !== this.tail) { walker = walker.prev } for (var i = 2; i < arguments.length; i++) { walker = insert(this, walker, arguments[i]) } return ret; } Yallist.prototype.reverse = function () { var head = this.head var tail = this.tail for (var walker = head; walker !== null; walker = walker.prev) { var p = walker.prev walker.prev = walker.next walker.next = p } this.head = tail this.tail = head return this } function insert (self, node, value) { var inserted = node === self.head ? new Node(value, null, node, self) : new Node(value, node, node.next, self) if (inserted.next === null) { self.tail = inserted } if (inserted.prev === null) { self.head = inserted } self.length++ return inserted } function push (self, item) { self.tail = new Node(item, self.tail, null, self) if (!self.head) { self.head = self.tail } self.length++ } function unshift (self, item) { self.head = new Node(item, null, self.head, self) if (!self.tail) { self.tail = self.head } self.length++ } function Node (value, prev, next, list) { if (!(this instanceof Node)) { return new Node(value, prev, next, list) } this.list = list this.value = value if (prev) { prev.next = this this.prev = prev } else { this.prev = null } if (next) { next.prev = this this.next = next } else { this.next = null } } try { // add if support for Symbol.iterator is present __webpack_require__(338)(Yallist) } catch (er) {} /***/ }), /* 338 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = function (Yallist) { Yallist.prototype[Symbol.iterator] = function* () { for (let walker = this.head; walker; walker = walker.next) { yield walker.value } } } /***/ }), /* 339 */ /***/ (function(module, exports, __webpack_require__) { // Copyright Takatoshi Kondo 2021 // // Distributed under the MIT License const NumberAllocator = __webpack_require__(340) module.exports.NumberAllocator = NumberAllocator /***/ }), /* 340 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // Copyright Takatoshi Kondo 2021 // // Distributed under the MIT License const SortedSet = __webpack_require__(388).OrderedSet const debugTrace = __webpack_require__(15)('number-allocator:trace') const debugError = __webpack_require__(15)('number-allocator:error') /** * Interval constructor * @constructor * @param {Number} low - The lowest value of the interval * @param {Number} high - The highest value of the interval */ function Interval (low, high) { this.low = low this.high = high } Interval.prototype.equals = function (other) { return this.low === other.low && this.high === other.high } Interval.prototype.compare = function (other) { if (this.low < other.low && this.high < other.low) return -1 if (other.low < this.low && other.high < this.low) return 1 return 0 } /** * NumberAllocator constructor. * The all numbers are set to vacant status. * Time Complexity O(1) * @constructor * @param {Number} min - The maximum number of allocatable. The number must be integer. * @param {Number} maxh - The minimum number of allocatable. The number must be integer. */ function NumberAllocator (min, max) { if (!(this instanceof NumberAllocator)) { return new NumberAllocator(min, max) } this.min = min this.max = max this.ss = new SortedSet( [], (lhs, rhs) => { return lhs.compare(rhs) } ) debugTrace('Create') this.clear() } /** * Get the first vacant number. The status of the number is not updated. * Time Complexity O(1) * @return {Number} - The first vacant number. If all numbers are occupied, return null. * When alloc() is called then the same value will be allocated. */ NumberAllocator.prototype.firstVacant = function () { if (this.ss.size() === 0) return null return this.ss.front().low } /** * Allocate the first vacant number. The number become occupied status. * Time Complexity O(1) * @return {Number} - The first vacant number. If all numbers are occupied, return null. */ NumberAllocator.prototype.alloc = function () { if (this.ss.size() === 0) { debugTrace('alloc():empty') return null } const it = this.ss.begin() const low = it.pointer.low const high = it.pointer.high const num = low if (num + 1 <= high) { // x|----| this.ss.updateKeyByIterator(it, new Interval(low + 1, high)) } else { this.ss.eraseElementByPos(0) } debugTrace('alloc():' + num) return num } /** * Use the number. The number become occupied status. * If the number has already been occupied, then return false. * Time Complexity O(logN) : N is the number of intervals (not numbers) * @param {Number} num - The number to request use. * @return {Boolean} - If `num` was not occupied, then return true, otherwise return false. */ NumberAllocator.prototype.use = function (num) { const key = new Interval(num, num) const it = this.ss.lowerBound(key) if (!it.equals(this.ss.end())) { const low = it.pointer.low const high = it.pointer.high if (it.pointer.equals(key)) { // |x| this.ss.eraseElementByIterator(it) debugTrace('use():' + num) return true } // x |-----| if (low > num) return false // |x----| if (low === num) { // x|----| this.ss.updateKeyByIterator(it, new Interval(low + 1, high)) debugTrace('use():' + num) return true } // |----x| if (high === num) { // |----|x this.ss.updateKeyByIterator(it, new Interval(low, high - 1)) debugTrace('use():' + num) return true } // |--x--| // x|--| this.ss.updateKeyByIterator(it, new Interval(num + 1, high)) // |--|x|--| this.ss.insert(new Interval(low, num - 1)) debugTrace('use():' + num) return true } debugTrace('use():failed') return false } /** * Deallocate the number. The number become vacant status. * Time Complexity O(logN) : N is the number of intervals (not numbers) * @param {Number} num - The number to deallocate. The number must be occupied status. * In other words, the number must be allocated by alloc() or occupied be use(). */ NumberAllocator.prototype.free = function (num) { if (num < this.min || num > this.max) { debugError('free():' + num + ' is out of range') return } const key = new Interval(num, num) const it = this.ss.upperBound(key) if (it.equals(this.ss.end())) { // ....v if (it.equals(this.ss.begin())) { // Insert new interval this.ss.insert(key) return } it.pre() const low = it.pointer.high const high = it.pointer.high if (high + 1 === num) { // Concat to left this.ss.updateKeyByIterator(it, new Interval(low, num)) } else { // Insert new interval this.ss.insert(key) } } else { if (it.equals(this.ss.begin())) { // v.... if (num + 1 === it.pointer.low) { // Concat to right const high = it.pointer.high this.ss.updateKeyByIterator(it, new Interval(num, high)) } else { // Insert new interval this.ss.insert(key) } } else { // ..v.. const rLow = it.pointer.low const rHigh = it.pointer.high it.pre() const lLow = it.pointer.low const lHigh = it.pointer.high if (lHigh + 1 === num) { if (num + 1 === rLow) { // Concat to left and right this.ss.eraseElementByIterator(it) this.ss.updateKeyByIterator(it, new Interval(lLow, rHigh)) } else { // Concat to left this.ss.updateKeyByIterator(it, new Interval(lLow, num)) } } else { if (num + 1 === rLow) { // Concat to right this.ss.eraseElementByIterator(it.next()) this.ss.insert(new Interval(num, rHigh)) } else { // Insert new interval this.ss.insert(key) } } } } debugTrace('free():' + num) } /** * Clear all occupied numbers. * The all numbers are set to vacant status. * Time Complexity O(1) */ NumberAllocator.prototype.clear = function () { debugTrace('clear()') this.ss.clear() this.ss.insert(new Interval(this.min, this.max)) } /** * Get the number of intervals. Interval is internal structure of this library. * This function is for debugging. * Time Complexity O(1) * @return {Number} - The number of intervals. */ NumberAllocator.prototype.intervalCount = function () { return this.ss.size() } /** * Dump the internal structor of the library. * This function is for debugging. * Time Complexity O(N) : N is the number of intervals (not numbers) */ NumberAllocator.prototype.dump = function () { console.log('length:' + this.ss.size()) for (const element of this.ss) { console.log(element) } } module.exports = NumberAllocator /***/ }), /* 341 */ /***/ (function(module, exports, __webpack_require__) { /** * This is the common logic for both the Node.js and web browser * implementations of `debug()`. */ function setup(env) { createDebug.debug = createDebug; createDebug.default = createDebug; createDebug.coerce = coerce; createDebug.disable = disable; createDebug.enable = enable; createDebug.enabled = enabled; createDebug.humanize = __webpack_require__(342); createDebug.destroy = destroy; Object.keys(env).forEach(key => { createDebug[key] = env[key]; }); /** * The currently active debug mode names, and names to skip. */ createDebug.names = []; createDebug.skips = []; /** * Map of special "%n" handling functions, for the debug "format" argument. * * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". */ createDebug.formatters = {}; /** * Selects a color for a debug namespace * @param {String} namespace The namespace string for the debug instance to be colored * @return {Number|String} An ANSI color code for the given namespace * @api private */ function selectColor(namespace) { let hash = 0; for (let i = 0; i < namespace.length; i++) { hash = ((hash << 5) - hash) + namespace.charCodeAt(i); hash |= 0; // Convert to 32bit integer } return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; } createDebug.selectColor = selectColor; /** * Create a debugger with the given `namespace`. * * @param {String} namespace * @return {Function} * @api public */ function createDebug(namespace) { let prevTime; let enableOverride = null; let namespacesCache; let enabledCache; function debug(...args) { // Disabled? if (!debug.enabled) { return; } const self = debug; // Set `diff` timestamp const curr = Number(new Date()); const ms = curr - (prevTime || curr); self.diff = ms; self.prev = prevTime; self.curr = curr; prevTime = curr; args[0] = createDebug.coerce(args[0]); if (typeof args[0] !== 'string') { // Anything else let's inspect with %O args.unshift('%O'); } // Apply any `formatters` transformations let index = 0; args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { // If we encounter an escaped % then don't increase the array index if (match === '%%') { return '%'; } index++; const formatter = createDebug.formatters[format]; if (typeof formatter === 'function') { const val = args[index]; match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format` args.splice(index, 1); index--; } return match; }); // Apply env-specific formatting (colors, etc.) createDebug.formatArgs.call(self, args); const logFn = self.log || createDebug.log; logFn.apply(self, args); } debug.namespace = namespace; debug.useColors = createDebug.useColors(); debug.color = createDebug.selectColor(namespace); debug.extend = extend; debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. Object.defineProperty(debug, 'enabled', { enumerable: true, configurable: false, get: () => { if (enableOverride !== null) { return enableOverride; } if (namespacesCache !== createDebug.namespaces) { namespacesCache = createDebug.namespaces; enabledCache = createDebug.enabled(namespace); } return enabledCache; }, set: v => { enableOverride = v; } }); // Env-specific initialization logic for debug instances if (typeof createDebug.init === 'function') { createDebug.init(debug); } return debug; } function extend(namespace, delimiter) { const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); newDebug.log = this.log; return newDebug; } /** * Enables a debug mode by namespaces. This can include modes * separated by a colon and wildcards. * * @param {String} namespaces * @api public */ function enable(namespaces) { createDebug.save(namespaces); createDebug.namespaces = namespaces; createDebug.names = []; createDebug.skips = []; let i; const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); const len = split.length; for (i = 0; i < len; i++) { if (!split[i]) { // ignore empty strings continue; } namespaces = split[i].replace(/\*/g, '.*?'); if (namespaces[0] === '-') { createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); } else { createDebug.names.push(new RegExp('^' + namespaces + '$')); } } } /** * Disable debug output. * * @return {String} namespaces * @api public */ function disable() { const namespaces = [ ...createDebug.names.map(toNamespace), ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) ].join(','); createDebug.enable(''); return namespaces; } /** * Returns true if the given mode name is enabled, false otherwise. * * @param {String} name * @return {Boolean} * @api public */ function enabled(name) { if (name[name.length - 1] === '*') { return true; } let i; let len; for (i = 0, len = createDebug.skips.length; i < len; i++) { if (createDebug.skips[i].test(name)) { return false; } } for (i = 0, len = createDebug.names.length; i < len; i++) { if (createDebug.names[i].test(name)) { return true; } } return false; } /** * Convert regexp to namespace * * @param {RegExp} regxep * @return {String} namespace * @api private */ function toNamespace(regexp) { return regexp.toString() .substring(2, regexp.toString().length - 2) .replace(/\.\*\?$/, '*'); } /** * Coerce `val`. * * @param {Mixed} val * @return {Mixed} * @api private */ function coerce(val) { if (val instanceof Error) { return val.stack || val.message; } return val; } /** * XXX DO NOT USE. This is a temporary stub function. * XXX It WILL be removed in the next major release. */ function destroy() { console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); } createDebug.enable(createDebug.load()); return createDebug; } module.exports = setup; /***/ }), /* 342 */ /***/ (function(module, exports) { /** * Helpers. */ var s = 1000; var m = s * 60; var h = m * 60; var d = h * 24; var w = d * 7; var y = d * 365.25; /** * Parse or format the given `val`. * * Options: * * - `long` verbose formatting [false] * * @param {String|Number} val * @param {Object} [options] * @throws {Error} throw an error if val is not a non-empty string or a number * @return {String|Number} * @api public */ module.exports = function(val, options) { options = options || {}; var type = typeof val; if (type === 'string' && val.length > 0) { return parse(val); } else if (type === 'number' && isFinite(val)) { return options.long ? fmtLong(val) : fmtShort(val); } throw new Error( 'val is not a non-empty string or a valid number. val=' + JSON.stringify(val) ); }; /** * Parse the given `str` and return milliseconds. * * @param {String} str * @return {Number} * @api private */ function parse(str) { str = String(str); if (str.length > 100) { return; } var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( str ); if (!match) { return; } var n = parseFloat(match[1]); var type = (match[2] || 'ms').toLowerCase(); switch (type) { case 'years': case 'year': case 'yrs': case 'yr': case 'y': return n * y; case 'weeks': case 'week': case 'w': return n * w; case 'days': case 'day': case 'd': return n * d; case 'hours': case 'hour': case 'hrs': case 'hr': case 'h': return n * h; case 'minutes': case 'minute': case 'mins': case 'min': case 'm': return n * m; case 'seconds': case 'second': case 'secs': case 'sec': case 's': return n * s; case 'milliseconds': case 'millisecond': case 'msecs': case 'msec': case 'ms': return n; default: return undefined; } } /** * Short format for `ms`. * * @param {Number} ms * @return {String} * @api private */ function fmtShort(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return Math.round(ms / d) + 'd'; } if (msAbs >= h) { return Math.round(ms / h) + 'h'; } if (msAbs >= m) { return Math.round(ms / m) + 'm'; } if (msAbs >= s) { return Math.round(ms / s) + 's'; } return ms + 'ms'; } /** * Long format for `ms`. * * @param {Number} ms * @return {String} * @api private */ function fmtLong(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return plural(ms, msAbs, d, 'day'); } if (msAbs >= h) { return plural(ms, msAbs, h, 'hour'); } if (msAbs >= m) { return plural(ms, msAbs, m, 'minute'); } if (msAbs >= s) { return plural(ms, msAbs, s, 'second'); } return ms + ' ms'; } /** * Pluralization helper. */ function plural(ms, msAbs, n, name) { var isPlural = msAbs >= n * 1.5; return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); } /***/ }), /* 343 */ /***/ (function(module, exports, __webpack_require__) { exports.parser = __webpack_require__(344).parser exports.generate = __webpack_require__(348) exports.writeToStream = __webpack_require__(66) /***/ }), /* 344 */ /***/ (function(module, exports, __webpack_require__) { const bl = __webpack_require__(345) const EventEmitter = __webpack_require__(23) const Packet = __webpack_require__(347) const constants = __webpack_require__(65) const debug = __webpack_require__(15)('mqtt-packet:parser') class Parser extends EventEmitter { constructor () { super() this.parser = this.constructor.parser } static parser (opt) { if (!(this instanceof Parser)) return (new Parser()).parser(opt) this.settings = opt || {} this._states = [ '_parseHeader', '_parseLength', '_parsePayload', '_newPacket' ] this._resetState() return this } _resetState () { debug('_resetState: resetting packet, error, _list, and _stateCounter') this.packet = new Packet() this.error = null this._list = bl() this._stateCounter = 0 } parse (buf) { if (this.error) this._resetState() this._list.append(buf) debug('parse: current state: %s', this._states[this._stateCounter]) while ((this.packet.length !== -1 || this._list.length > 0) && this[this._states[this._stateCounter]]() && !this.error) { this._stateCounter++ debug('parse: state complete. _stateCounter is now: %d', this._stateCounter) debug('parse: packet.length: %d, buffer list length: %d', this.packet.length, this._list.length) if (this._stateCounter >= this._states.length) this._stateCounter = 0 } debug('parse: exited while loop. packet: %d, buffer list length: %d', this.packet.length, this._list.length) return this._list.length } _parseHeader () { // There is at least one byte in the buffer const zero = this._list.readUInt8(0) this.packet.cmd = constants.types[zero >> constants.CMD_SHIFT] this.packet.retain = (zero & constants.RETAIN_MASK) !== 0 this.packet.qos = (zero >> constants.QOS_SHIFT) & constants.QOS_MASK this.packet.dup = (zero & constants.DUP_MASK) !== 0 debug('_parseHeader: packet: %o', this.packet) this._list.consume(1) return true } _parseLength () { // There is at least one byte in the list const result = this._parseVarByteNum(true) if (result) { this.packet.length = result.value this._list.consume(result.bytes) } debug('_parseLength %d', result.value) return !!result } _parsePayload () { debug('_parsePayload: payload %O', this._list) let result = false // Do we have a payload? Do we have enough data to complete the payload? // PINGs have no payload if (this.packet.length === 0 || this._list.length >= this.packet.length) { this._pos = 0 switch (this.packet.cmd) { case 'connect': this._parseConnect() break case 'connack': this._parseConnack() break case 'publish': this._parsePublish() break case 'puback': case 'pubrec': case 'pubrel': case 'pubcomp': this._parseConfirmation() break case 'subscribe': this._parseSubscribe() break case 'suback': this._parseSuback() break case 'unsubscribe': this._parseUnsubscribe() break case 'unsuback': this._parseUnsuback() break case 'pingreq': case 'pingresp': // These are empty, nothing to do break case 'disconnect': this._parseDisconnect() break case 'auth': this._parseAuth() break default: this._emitError(new Error('Not supported')) } result = true } debug('_parsePayload complete result: %s', result) return result } _parseConnect () { debug('_parseConnect') let topic // Will topic let payload // Will payload let password // Password let username // Username const flags = {} const packet = this.packet // Parse protocolId const protocolId = this._parseString() if (protocolId === null) return this._emitError(new Error('Cannot parse protocolId')) if (protocolId !== 'MQTT' && protocolId !== 'MQIsdp') { return this._emitError(new Error('Invalid protocolId')) } packet.protocolId = protocolId // Parse constants version number if (this._pos >= this._list.length) return this._emitError(new Error('Packet too short')) packet.protocolVersion = this._list.readUInt8(this._pos) if (packet.protocolVersion >= 128) { packet.bridgeMode = true packet.protocolVersion = packet.protocolVersion - 128 } if (packet.protocolVersion !== 3 && packet.protocolVersion !== 4 && packet.protocolVersion !== 5) { return this._emitError(new Error('Invalid protocol version')) } this._pos++ if (this._pos >= this._list.length) { return this._emitError(new Error('Packet too short')) } // Parse connect flags flags.username = (this._list.readUInt8(this._pos) & constants.USERNAME_MASK) flags.password = (this._list.readUInt8(this._pos) & constants.PASSWORD_MASK) flags.will = (this._list.readUInt8(this._pos) & constants.WILL_FLAG_MASK) if (flags.will) { packet.will = {} packet.will.retain = (this._list.readUInt8(this._pos) & constants.WILL_RETAIN_MASK) !== 0 packet.will.qos = (this._list.readUInt8(this._pos) & constants.WILL_QOS_MASK) >> constants.WILL_QOS_SHIFT } packet.clean = (this._list.readUInt8(this._pos) & constants.CLEAN_SESSION_MASK) !== 0 this._pos++ // Parse keepalive packet.keepalive = this._parseNum() if (packet.keepalive === -1) return this._emitError(new Error('Packet too short')) // parse properties if (packet.protocolVersion === 5) { const properties = this._parseProperties() if (Object.getOwnPropertyNames(properties).length) { packet.properties = properties } } // Parse clientId const clientId = this._parseString() if (clientId === null) return this._emitError(new Error('Packet too short')) packet.clientId = clientId debug('_parseConnect: packet.clientId: %s', packet.clientId) if (flags.will) { if (packet.protocolVersion === 5) { const willProperties = this._parseProperties() if (Object.getOwnPropertyNames(willProperties).length) { packet.will.properties = willProperties } } // Parse will topic topic = this._parseString() if (topic === null) return this._emitError(new Error('Cannot parse will topic')) packet.will.topic = topic debug('_parseConnect: packet.will.topic: %s', packet.will.topic) // Parse will payload payload = this._parseBuffer() if (payload === null) return this._emitError(new Error('Cannot parse will payload')) packet.will.payload = payload debug('_parseConnect: packet.will.paylaod: %s', packet.will.payload) } // Parse username if (flags.username) { username = this._parseString() if (username === null) return this._emitError(new Error('Cannot parse username')) packet.username = username debug('_parseConnect: packet.username: %s', packet.username) } // Parse password if (flags.password) { password = this._parseBuffer() if (password === null) return this._emitError(new Error('Cannot parse password')) packet.password = password } // need for right parse auth packet and self set up this.settings = packet debug('_parseConnect: complete') return packet } _parseConnack () { debug('_parseConnack') const packet = this.packet if (this._list.length < 1) return null packet.sessionPresent = !!(this._list.readUInt8(this._pos++) & constants.SESSIONPRESENT_MASK) if (this.settings.protocolVersion === 5) { if (this._list.length >= 2) { packet.reasonCode = this._list.readUInt8(this._pos++) } else { packet.reasonCode = 0 } } else { if (this._list.length < 2) return null packet.returnCode = this._list.readUInt8(this._pos++) } if (packet.returnCode === -1 || packet.reasonCode === -1) return this._emitError(new Error('Cannot parse return code')) // mqtt 5 properties if (this.settings.protocolVersion === 5) { const properties = this._parseProperties() if (Object.getOwnPropertyNames(properties).length) { packet.properties = properties } } debug('_parseConnack: complete') } _parsePublish () { debug('_parsePublish') const packet = this.packet packet.topic = this._parseString() if (packet.topic === null) return this._emitError(new Error('Cannot parse topic')) // Parse messageId if (packet.qos > 0) if (!this._parseMessageId()) { return } // Properties mqtt 5 if (this.settings.protocolVersion === 5) { const properties = this._parseProperties() if (Object.getOwnPropertyNames(properties).length) { packet.properties = properties } } packet.payload = this._list.slice(this._pos, packet.length) debug('_parsePublish: payload from buffer list: %o', packet.payload) } _parseSubscribe () { debug('_parseSubscribe') const packet = this.packet let topic let options let qos let rh let rap let nl let subscription if (packet.qos !== 1) { return this._emitError(new Error('Wrong subscribe header')) } packet.subscriptions = [] if (!this._parseMessageId()) { return } // Properties mqtt 5 if (this.settings.protocolVersion === 5) { const properties = this._parseProperties() if (Object.getOwnPropertyNames(properties).length) { packet.properties = properties } } while (this._pos < packet.length) { // Parse topic topic = this._parseString() if (topic === null) return this._emitError(new Error('Cannot parse topic')) if (this._pos >= packet.length) return this._emitError(new Error('Malformed Subscribe Payload')) options = this._parseByte() qos = options & constants.SUBSCRIBE_OPTIONS_QOS_MASK nl = ((options >> constants.SUBSCRIBE_OPTIONS_NL_SHIFT) & constants.SUBSCRIBE_OPTIONS_NL_MASK) !== 0 rap = ((options >> constants.SUBSCRIBE_OPTIONS_RAP_SHIFT) & constants.SUBSCRIBE_OPTIONS_RAP_MASK) !== 0 rh = (options >> constants.SUBSCRIBE_OPTIONS_RH_SHIFT) & constants.SUBSCRIBE_OPTIONS_RH_MASK subscription = { topic, qos } // mqtt 5 options if (this.settings.protocolVersion === 5) { subscription.nl = nl subscription.rap = rap subscription.rh = rh } else if (this.settings.bridgeMode) { subscription.rh = 0 subscription.rap = true subscription.nl = true } // Push pair to subscriptions debug('_parseSubscribe: push subscription `%s` to subscription', subscription) packet.subscriptions.push(subscription) } } _parseSuback () { debug('_parseSuback') const packet = this.packet this.packet.granted = [] if (!this._parseMessageId()) { return } // Properties mqtt 5 if (this.settings.protocolVersion === 5) { const properties = this._parseProperties() if (Object.getOwnPropertyNames(properties).length) { packet.properties = properties } } // Parse granted QoSes while (this._pos < this.packet.length) { this.packet.granted.push(this._list.readUInt8(this._pos++)) } } _parseUnsubscribe () { debug('_parseUnsubscribe') const packet = this.packet packet.unsubscriptions = [] // Parse messageId if (!this._parseMessageId()) { return } // Properties mqtt 5 if (this.settings.protocolVersion === 5) { const properties = this._parseProperties() if (Object.getOwnPropertyNames(properties).length) { packet.properties = properties } } while (this._pos < packet.length) { // Parse topic const topic = this._parseString() if (topic === null) return this._emitError(new Error('Cannot parse topic')) // Push topic to unsubscriptions debug('_parseUnsubscribe: push topic `%s` to unsubscriptions', topic) packet.unsubscriptions.push(topic) } } _parseUnsuback () { debug('_parseUnsuback') const packet = this.packet if (!this._parseMessageId()) return this._emitError(new Error('Cannot parse messageId')) // Properties mqtt 5 if (this.settings.protocolVersion === 5) { const properties = this._parseProperties() if (Object.getOwnPropertyNames(properties).length) { packet.properties = properties } // Parse granted QoSes packet.granted = [] while (this._pos < this.packet.length) { this.packet.granted.push(this._list.readUInt8(this._pos++)) } } } // parse packets like puback, pubrec, pubrel, pubcomp _parseConfirmation () { debug('_parseConfirmation: packet.cmd: `%s`', this.packet.cmd) const packet = this.packet this._parseMessageId() if (this.settings.protocolVersion === 5) { if (packet.length > 2) { // response code packet.reasonCode = this._parseByte() debug('_parseConfirmation: packet.reasonCode `%d`', packet.reasonCode) } else { packet.reasonCode = 0 } if (packet.length > 3) { // properies mqtt 5 const properties = this._parseProperties() if (Object.getOwnPropertyNames(properties).length) { packet.properties = properties } } } return true } // parse disconnect packet _parseDisconnect () { const packet = this.packet debug('_parseDisconnect') if (this.settings.protocolVersion === 5) { // response code if (this._list.length > 0) { packet.reasonCode = this._parseByte() } else { packet.reasonCode = 0 } // properies mqtt 5 const properties = this._parseProperties() if (Object.getOwnPropertyNames(properties).length) { packet.properties = properties } } debug('_parseDisconnect result: true') return true } // parse auth packet _parseAuth () { debug('_parseAuth') const packet = this.packet if (this.settings.protocolVersion !== 5) { return this._emitError(new Error('Not supported auth packet for this version MQTT')) } // response code packet.reasonCode = this._parseByte() // properies mqtt 5 const properties = this._parseProperties() if (Object.getOwnPropertyNames(properties).length) { packet.properties = properties } debug('_parseAuth: result: true') return true } _parseMessageId () { const packet = this.packet packet.messageId = this._parseNum() if (packet.messageId === null) { this._emitError(new Error('Cannot parse messageId')) return false } debug('_parseMessageId: packet.messageId %d', packet.messageId) return true } _parseString (maybeBuffer) { const length = this._parseNum() const end = length + this._pos if (length === -1 || end > this._list.length || end > this.packet.length) return null const result = this._list.toString('utf8', this._pos, end) this._pos += length debug('_parseString: result: %s', result) return result } _parseStringPair () { debug('_parseStringPair') return { name: this._parseString(), value: this._parseString() } } _parseBuffer () { const length = this._parseNum() const end = length + this._pos if (length === -1 || end > this._list.length || end > this.packet.length) return null const result = this._list.slice(this._pos, end) this._pos += length debug('_parseBuffer: result: %o', result) return result } _parseNum () { if (this._list.length - this._pos < 2) return -1 const result = this._list.readUInt16BE(this._pos) this._pos += 2 debug('_parseNum: result: %s', result) return result } _parse4ByteNum () { if (this._list.length - this._pos < 4) return -1 const result = this._list.readUInt32BE(this._pos) this._pos += 4 debug('_parse4ByteNum: result: %s', result) return result } _parseVarByteNum (fullInfoFlag) { debug('_parseVarByteNum') const maxBytes = 4 let bytes = 0 let mul = 1 let value = 0 let result = false let current const padding = this._pos ? this._pos : 0 while (bytes < maxBytes && (padding + bytes) < this._list.length) { current = this._list.readUInt8(padding + bytes++) value += mul * (current & constants.VARBYTEINT_MASK) mul *= 0x80 if ((current & constants.VARBYTEINT_FIN_MASK) === 0) { result = true break } if (this._list.length <= bytes) { break } } if (!result && bytes === maxBytes && this._list.length >= bytes) { this._emitError(new Error('Invalid variable byte integer')) } if (padding) { this._pos += bytes } result = result ? fullInfoFlag ? { bytes, value } : value : false debug('_parseVarByteNum: result: %o', result) return result } _parseByte () { let result if (this._pos < this._list.length) { result = this._list.readUInt8(this._pos) this._pos++ } debug('_parseByte: result: %o', result) return result } _parseByType (type) { debug('_parseByType: type: %s', type) switch (type) { case 'byte': { return this._parseByte() !== 0 } case 'int8': { return this._parseByte() } case 'int16': { return this._parseNum() } case 'int32': { return this._parse4ByteNum() } case 'var': { return this._parseVarByteNum() } case 'string': { return this._parseString() } case 'pair': { return this._parseStringPair() } case 'binary': { return this._parseBuffer() } } } _parseProperties () { debug('_parseProperties') const length = this._parseVarByteNum() const start = this._pos const end = start + length const result = {} while (this._pos < end) { const type = this._parseByte() if (!type) { this._emitError(new Error('Cannot parse property code type')) return false } const name = constants.propertiesCodes[type] if (!name) { this._emitError(new Error('Unknown property')) return false } // user properties process if (name === 'userProperties') { if (!result[name]) { result[name] = Object.create(null) } const currentUserProperty = this._parseByType(constants.propertiesTypes[name]) if (result[name][currentUserProperty.name]) { if (Array.isArray(result[name][currentUserProperty.name])) { result[name][currentUserProperty.name].push(currentUserProperty.value) } else { const currentValue = result[name][currentUserProperty.name] result[name][currentUserProperty.name] = [currentValue] result[name][currentUserProperty.name].push(currentUserProperty.value) } } else { result[name][currentUserProperty.name] = currentUserProperty.value } continue } if (result[name]) { if (Array.isArray(result[name])) { result[name].push(this._parseByType(constants.propertiesTypes[name])) } else { result[name] = [result[name]] result[name].push(this._parseByType(constants.propertiesTypes[name])) } } else { result[name] = this._parseByType(constants.propertiesTypes[name]) } } return result } _newPacket () { debug('_newPacket') if (this.packet) { this._list.consume(this.packet.length) debug('_newPacket: parser emit packet: packet.cmd: %s, packet.payload: %s, packet.length: %d', this.packet.cmd, this.packet.payload, this.packet.length) this.emit('packet', this.packet) } debug('_newPacket: new packet') this.packet = new Packet() this._pos = 0 return true } _emitError (err) { debug('_emitError') this.error = err this.emit('error', err) } } module.exports = Parser /***/ }), /* 345 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const DuplexStream = __webpack_require__(19).Duplex const inherits = __webpack_require__(16) const BufferList = __webpack_require__(346) function BufferListStream (callback) { if (!(this instanceof BufferListStream)) { return new BufferListStream(callback) } if (typeof callback === 'function') { this._callback = callback const piper = function piper (err) { if (this._callback) { this._callback(err) this._callback = null } }.bind(this) this.on('pipe', function onPipe (src) { src.on('error', piper) }) this.on('unpipe', function onUnpipe (src) { src.removeListener('error', piper) }) callback = null } BufferList._init.call(this, callback) DuplexStream.call(this) } inherits(BufferListStream, DuplexStream) Object.assign(BufferListStream.prototype, BufferList.prototype) BufferListStream.prototype._new = function _new (callback) { return new BufferListStream(callback) } BufferListStream.prototype._write = function _write (buf, encoding, callback) { this._appendBuffer(buf) if (typeof callback === 'function') { callback() } } BufferListStream.prototype._read = function _read (size) { if (!this.length) { return this.push(null) } size = Math.min(size, this.length) this.push(this.slice(0, size)) this.consume(size) } BufferListStream.prototype.end = function end (chunk) { DuplexStream.prototype.end.call(this, chunk) if (this._callback) { this._callback(null, this.slice()) this._callback = null } } BufferListStream.prototype._destroy = function _destroy (err, cb) { this._bufs.length = 0 this.length = 0 cb(err) } BufferListStream.prototype._isBufferList = function _isBufferList (b) { return b instanceof BufferListStream || b instanceof BufferList || BufferListStream.isBufferList(b) } BufferListStream.isBufferList = BufferList.isBufferList module.exports = BufferListStream module.exports.BufferListStream = BufferListStream module.exports.BufferList = BufferList /***/ }), /* 346 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const { Buffer } = __webpack_require__(13) const symbol = Symbol.for('BufferList') function BufferList (buf) { if (!(this instanceof BufferList)) { return new BufferList(buf) } BufferList._init.call(this, buf) } BufferList._init = function _init (buf) { Object.defineProperty(this, symbol, { value: true }) this._bufs = [] this.length = 0 if (buf) { this.append(buf) } } BufferList.prototype._new = function _new (buf) { return new BufferList(buf) } BufferList.prototype._offset = function _offset (offset) { if (offset === 0) { return [0, 0] } let tot = 0 for (let i = 0; i < this._bufs.length; i++) { const _t = tot + this._bufs[i].length if (offset < _t || i === this._bufs.length - 1) { return [i, offset - tot] } tot = _t } } BufferList.prototype._reverseOffset = function (blOffset) { const bufferId = blOffset[0] let offset = blOffset[1] for (let i = 0; i < bufferId; i++) { offset += this._bufs[i].length } return offset } BufferList.prototype.get = function get (index) { if (index > this.length || index < 0) { return undefined } const offset = this._offset(index) return this._bufs[offset[0]][offset[1]] } BufferList.prototype.slice = function slice (start, end) { if (typeof start === 'number' && start < 0) { start += this.length } if (typeof end === 'number' && end < 0) { end += this.length } return this.copy(null, 0, start, end) } BufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) { if (typeof srcStart !== 'number' || srcStart < 0) { srcStart = 0 } if (typeof srcEnd !== 'number' || srcEnd > this.length) { srcEnd = this.length } if (srcStart >= this.length) { return dst || Buffer.alloc(0) } if (srcEnd <= 0) { return dst || Buffer.alloc(0) } const copy = !!dst const off = this._offset(srcStart) const len = srcEnd - srcStart let bytes = len let bufoff = (copy && dstStart) || 0 let start = off[1] // copy/slice everything if (srcStart === 0 && srcEnd === this.length) { if (!copy) { // slice, but full concat if multiple buffers return this._bufs.length === 1 ? this._bufs[0] : Buffer.concat(this._bufs, this.length) } // copy, need to copy individual buffers for (let i = 0; i < this._bufs.length; i++) { this._bufs[i].copy(dst, bufoff) bufoff += this._bufs[i].length } return dst } // easy, cheap case where it's a subset of one of the buffers if (bytes <= this._bufs[off[0]].length - start) { return copy ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes) : this._bufs[off[0]].slice(start, start + bytes) } if (!copy) { // a slice, we need something to copy in to dst = Buffer.allocUnsafe(len) } for (let i = off[0]; i < this._bufs.length; i++) { const l = this._bufs[i].length - start if (bytes > l) { this._bufs[i].copy(dst, bufoff, start) bufoff += l } else { this._bufs[i].copy(dst, bufoff, start, start + bytes) bufoff += l break } bytes -= l if (start) { start = 0 } } // safeguard so that we don't return uninitialized memory if (dst.length > bufoff) return dst.slice(0, bufoff) return dst } BufferList.prototype.shallowSlice = function shallowSlice (start, end) { start = start || 0 end = typeof end !== 'number' ? this.length : end if (start < 0) { start += this.length } if (end < 0) { end += this.length } if (start === end) { return this._new() } const startOffset = this._offset(start) const endOffset = this._offset(end) const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1) if (endOffset[1] === 0) { buffers.pop() } else { buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1]) } if (startOffset[1] !== 0) { buffers[0] = buffers[0].slice(startOffset[1]) } return this._new(buffers) } BufferList.prototype.toString = function toString (encoding, start, end) { return this.slice(start, end).toString(encoding) } BufferList.prototype.consume = function consume (bytes) { // first, normalize the argument, in accordance with how Buffer does it bytes = Math.trunc(bytes) // do nothing if not a positive number if (Number.isNaN(bytes) || bytes <= 0) return this while (this._bufs.length) { if (bytes >= this._bufs[0].length) { bytes -= this._bufs[0].length this.length -= this._bufs[0].length this._bufs.shift() } else { this._bufs[0] = this._bufs[0].slice(bytes) this.length -= bytes break } } return this } BufferList.prototype.duplicate = function duplicate () { const copy = this._new() for (let i = 0; i < this._bufs.length; i++) { copy.append(this._bufs[i]) } return copy } BufferList.prototype.append = function append (buf) { if (buf == null) { return this } if (buf.buffer) { // append a view of the underlying ArrayBuffer this._appendBuffer(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)) } else if (Array.isArray(buf)) { for (let i = 0; i < buf.length; i++) { this.append(buf[i]) } } else if (this._isBufferList(buf)) { // unwrap argument into individual BufferLists for (let i = 0; i < buf._bufs.length; i++) { this.append(buf._bufs[i]) } } else { // coerce number arguments to strings, since Buffer(number) does // uninitialized memory allocation if (typeof buf === 'number') { buf = buf.toString() } this._appendBuffer(Buffer.from(buf)) } return this } BufferList.prototype._appendBuffer = function appendBuffer (buf) { this._bufs.push(buf) this.length += buf.length } BufferList.prototype.indexOf = function (search, offset, encoding) { if (encoding === undefined && typeof offset === 'string') { encoding = offset offset = undefined } if (typeof search === 'function' || Array.isArray(search)) { throw new TypeError('The "value" argument must be one of type string, Buffer, BufferList, or Uint8Array.') } else if (typeof search === 'number') { search = Buffer.from([search]) } else if (typeof search === 'string') { search = Buffer.from(search, encoding) } else if (this._isBufferList(search)) { search = search.slice() } else if (Array.isArray(search.buffer)) { search = Buffer.from(search.buffer, search.byteOffset, search.byteLength) } else if (!Buffer.isBuffer(search)) { search = Buffer.from(search) } offset = Number(offset || 0) if (isNaN(offset)) { offset = 0 } if (offset < 0) { offset = this.length + offset } if (offset < 0) { offset = 0 } if (search.length === 0) { return offset > this.length ? this.length : offset } const blOffset = this._offset(offset) let blIndex = blOffset[0] // index of which internal buffer we're working on let buffOffset = blOffset[1] // offset of the internal buffer we're working on // scan over each buffer for (; blIndex < this._bufs.length; blIndex++) { const buff = this._bufs[blIndex] while (buffOffset < buff.length) { const availableWindow = buff.length - buffOffset if (availableWindow >= search.length) { const nativeSearchResult = buff.indexOf(search, buffOffset) if (nativeSearchResult !== -1) { return this._reverseOffset([blIndex, nativeSearchResult]) } buffOffset = buff.length - search.length + 1 // end of native search window } else { const revOffset = this._reverseOffset([blIndex, buffOffset]) if (this._match(revOffset, search)) { return revOffset } buffOffset++ } } buffOffset = 0 } return -1 } BufferList.prototype._match = function (offset, search) { if (this.length - offset < search.length) { return false } for (let searchOffset = 0; searchOffset < search.length; searchOffset++) { if (this.get(offset + searchOffset) !== search[searchOffset]) { return false } } return true } ;(function () { const methods = { readDoubleBE: 8, readDoubleLE: 8, readFloatBE: 4, readFloatLE: 4, readInt32BE: 4, readInt32LE: 4, readUInt32BE: 4, readUInt32LE: 4, readInt16BE: 2, readInt16LE: 2, readUInt16BE: 2, readUInt16LE: 2, readInt8: 1, readUInt8: 1, readIntBE: null, readIntLE: null, readUIntBE: null, readUIntLE: null } for (const m in methods) { (function (m) { if (methods[m] === null) { BufferList.prototype[m] = function (offset, byteLength) { return this.slice(offset, offset + byteLength)[m](0, byteLength) } } else { BufferList.prototype[m] = function (offset = 0) { return this.slice(offset, offset + methods[m])[m](0) } } }(m)) } }()) // Used internally by the class and also as an indicator of this object being // a `BufferList`. It's not possible to use `instanceof BufferList` in a browser // environment because there could be multiple different copies of the // BufferList class and some `BufferList`s might be `BufferList`s. BufferList.prototype._isBufferList = function _isBufferList (b) { return b instanceof BufferList || BufferList.isBufferList(b) } BufferList.isBufferList = function isBufferList (b) { return b != null && b[symbol] } module.exports = BufferList /***/ }), /* 347 */ /***/ (function(module, exports) { class Packet { constructor () { this.cmd = null this.retain = false this.qos = 0 this.dup = false this.length = -1 this.topic = null this.payload = null } } module.exports = Packet /***/ }), /* 348 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(Buffer) {const writeToStream = __webpack_require__(66) const EventEmitter = __webpack_require__(23) function generate (packet, opts) { const stream = new Accumulator() writeToStream(packet, stream, opts) return stream.concat() } class Accumulator extends EventEmitter { constructor () { super() this._array = new Array(20) this._i = 0 } write (chunk) { this._array[this._i++] = chunk return true } concat () { let length = 0 const lengths = new Array(this._array.length) const list = this._array let pos = 0 let i for (i = 0; i < list.length && list[i] !== undefined; i++) { if (typeof list[i] !== 'string') lengths[i] = list[i].length else lengths[i] = Buffer.byteLength(list[i]) length += lengths[i] } const result = Buffer.allocUnsafe(length) for (i = 0; i < list.length && list[i] !== undefined; i++) { if (typeof list[i] !== 'string') { list[i].copy(result, pos) pos += lengths[i] } else { result.write(list[i], pos) pos += lengths[i] } } return result } } module.exports = generate /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13).Buffer)) /***/ }), /* 349 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(Buffer) {const max = 65536 const cache = {} // in node 6 Buffer.subarray returns a Uint8Array instead of a Buffer // later versions return a Buffer // alternative is Buffer.slice but that creates a new buffer // creating new buffers takes time // SubOk is only false on node < 8 const SubOk = Buffer.isBuffer(Buffer.from([1, 2]).subarray(0, 1)) function generateBuffer (i) { const buffer = Buffer.allocUnsafe(2) buffer.writeUInt8(i >> 8, 0) buffer.writeUInt8(i & 0x00FF, 0 + 1) return buffer } function generateCache () { for (let i = 0; i < max; i++) { cache[i] = generateBuffer(i) } } function genBufVariableByteInt (num) { const maxLength = 4 // max 4 bytes let digit = 0 let pos = 0 const buffer = Buffer.allocUnsafe(maxLength) do { digit = num % 128 | 0 num = num / 128 | 0 if (num > 0) digit = digit | 0x80 buffer.writeUInt8(digit, pos++) } while (num > 0 && pos < maxLength) if (num > 0) { pos = 0 } return SubOk ? buffer.subarray(0, pos) : buffer.slice(0, pos) } function generate4ByteBuffer (num) { const buffer = Buffer.allocUnsafe(4) buffer.writeUInt32BE(num, 0) return buffer } module.exports = { cache, generateCache, generateNumber: generateBuffer, genBufVariableByteInt, generate4ByteBuffer } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13).Buffer)) /***/ }), /* 350 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * DefaultMessageAllocator constructor * @constructor */ function DefaultMessageIdProvider () { if (!(this instanceof DefaultMessageIdProvider)) { return new DefaultMessageIdProvider() } /** * MessageIDs starting with 1 * ensure that nextId is min. 1, see https://github.com/mqttjs/MQTT.js/issues/810 */ this.nextId = Math.max(1, Math.floor(Math.random() * 65535)) } /** * allocate * * Get the next messageId. * @return unsigned int */ DefaultMessageIdProvider.prototype.allocate = function () { // id becomes current state of this.nextId and increments afterwards const id = this.nextId++ // Ensure 16 bit unsigned int (max 65535, nextId got one higher) if (this.nextId === 65536) { this.nextId = 1 } return id } /** * getLastAllocated * Get the last allocated messageId. * @return unsigned int */ DefaultMessageIdProvider.prototype.getLastAllocated = function () { return (this.nextId === 1) ? 65535 : (this.nextId - 1) } /** * register * Register messageId. If success return true, otherwise return false. * @param { unsigned int } - messageId to register, * @return boolean */ DefaultMessageIdProvider.prototype.register = function (messageId) { return true } /** * deallocate * Deallocate messageId. * @param { unsigned int } - messageId to deallocate, */ DefaultMessageIdProvider.prototype.deallocate = function (messageId) { } /** * clear * Deallocate all messageIds. */ DefaultMessageIdProvider.prototype.clear = function () { } module.exports = DefaultMessageIdProvider /***/ }), /* 351 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; function ReInterval (callback, interval, args) { var self = this; this._callback = callback; this._args = args; this._interval = setInterval(callback, interval, this._args); this.reschedule = function (interval) { // if no interval entered, use the interval passed in on creation if (!interval) interval = self._interval; if (self._interval) clearInterval(self._interval); self._interval = setInterval(self._callback, interval, self._args); }; this.clear = function () { if (self._interval) { clearInterval(self._interval); self._interval = undefined; } }; this.destroy = function () { if (self._interval) { clearInterval(self._interval); } self._callback = undefined; self._interval = undefined; self._args = undefined; }; } function reInterval () { if (typeof arguments[0] !== 'function') throw new Error('callback needed'); if (typeof arguments[1] !== 'number') throw new Error('interval needed'); var args; if (arguments.length > 0) { args = new Array(arguments.length - 2); for (var i = 0; i < args.length; i++) { args[i] = arguments[i + 2]; } } return new ReInterval(arguments[0], arguments[1], args); } module.exports = reInterval; /***/ }), /* 352 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = __webpack_require__(353)() /***/ }), /* 353 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(Buffer) { module.exports = rfdc function copyBuffer (cur) { if (cur instanceof Buffer) { return Buffer.from(cur) } return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length) } function rfdc (opts) { opts = opts || {} if (opts.circles) return rfdcCircles(opts) return opts.proto ? cloneProto : clone function cloneArray (a, fn) { var keys = Object.keys(a) var a2 = new Array(keys.length) for (var i = 0; i < keys.length; i++) { var k = keys[i] var cur = a[k] if (typeof cur !== 'object' || cur === null) { a2[k] = cur } else if (cur instanceof Date) { a2[k] = new Date(cur) } else if (ArrayBuffer.isView(cur)) { a2[k] = copyBuffer(cur) } else { a2[k] = fn(cur) } } return a2 } function clone (o) { if (typeof o !== 'object' || o === null) return o if (o instanceof Date) return new Date(o) if (Array.isArray(o)) return cloneArray(o, clone) if (o instanceof Map) return new Map(cloneArray(Array.from(o), clone)) if (o instanceof Set) return new Set(cloneArray(Array.from(o), clone)) var o2 = {} for (var k in o) { if (Object.hasOwnProperty.call(o, k) === false) continue var cur = o[k] if (typeof cur !== 'object' || cur === null) { o2[k] = cur } else if (cur instanceof Date) { o2[k] = new Date(cur) } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), clone)) } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), clone)) } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur) } else { o2[k] = clone(cur) } } return o2 } function cloneProto (o) { if (typeof o !== 'object' || o === null) return o if (o instanceof Date) return new Date(o) if (Array.isArray(o)) return cloneArray(o, cloneProto) if (o instanceof Map) return new Map(cloneArray(Array.from(o), cloneProto)) if (o instanceof Set) return new Set(cloneArray(Array.from(o), cloneProto)) var o2 = {} for (var k in o) { var cur = o[k] if (typeof cur !== 'object' || cur === null) { o2[k] = cur } else if (cur instanceof Date) { o2[k] = new Date(cur) } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), cloneProto)) } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), cloneProto)) } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur) } else { o2[k] = cloneProto(cur) } } return o2 } } function rfdcCircles (opts) { var refs = [] var refsNew = [] return opts.proto ? cloneProto : clone function cloneArray (a, fn) { var keys = Object.keys(a) var a2 = new Array(keys.length) for (var i = 0; i < keys.length; i++) { var k = keys[i] var cur = a[k] if (typeof cur !== 'object' || cur === null) { a2[k] = cur } else if (cur instanceof Date) { a2[k] = new Date(cur) } else if (ArrayBuffer.isView(cur)) { a2[k] = copyBuffer(cur) } else { var index = refs.indexOf(cur) if (index !== -1) { a2[k] = refsNew[index] } else { a2[k] = fn(cur) } } } return a2 } function clone (o) { if (typeof o !== 'object' || o === null) return o if (o instanceof Date) return new Date(o) if (Array.isArray(o)) return cloneArray(o, clone) if (o instanceof Map) return new Map(cloneArray(Array.from(o), clone)) if (o instanceof Set) return new Set(cloneArray(Array.from(o), clone)) var o2 = {} refs.push(o) refsNew.push(o2) for (var k in o) { if (Object.hasOwnProperty.call(o, k) === false) continue var cur = o[k] if (typeof cur !== 'object' || cur === null) { o2[k] = cur } else if (cur instanceof Date) { o2[k] = new Date(cur) } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), clone)) } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), clone)) } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur) } else { var i = refs.indexOf(cur) if (i !== -1) { o2[k] = refsNew[i] } else { o2[k] = clone(cur) } } } refs.pop() refsNew.pop() return o2 } function cloneProto (o) { if (typeof o !== 'object' || o === null) return o if (o instanceof Date) return new Date(o) if (Array.isArray(o)) return cloneArray(o, cloneProto) if (o instanceof Map) return new Map(cloneArray(Array.from(o), cloneProto)) if (o instanceof Set) return new Set(cloneArray(Array.from(o), cloneProto)) var o2 = {} refs.push(o) refsNew.push(o2) for (var k in o) { var cur = o[k] if (typeof cur !== 'object' || cur === null) { o2[k] = cur } else if (cur instanceof Date) { o2[k] = new Date(cur) } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), cloneProto)) } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), cloneProto)) } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur) } else { var i = refs.indexOf(cur) if (i !== -1) { o2[k] = refsNew[i] } else { o2[k] = cloneProto(cur) } } } refs.pop() refsNew.pop() return o2 } } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13).Buffer)) /***/ }), /* 354 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Validate a topic to see if it's valid or not. * A topic is valid if it follow below rules: * - Rule #1: If any part of the topic is not `+` or `#`, then it must not contain `+` and '#' * - Rule #2: Part `#` must be located at the end of the mailbox * * @param {String} topic - A topic * @returns {Boolean} If the topic is valid, returns true. Otherwise, returns false. */ function validateTopic (topic) { const parts = topic.split('/') for (let i = 0; i < parts.length; i++) { if (parts[i] === '+') { continue } if (parts[i] === '#') { // for Rule #2 return i === parts.length - 1 } if (parts[i].indexOf('+') !== -1 || parts[i].indexOf('#') !== -1) { return false } } return true } /** * Validate an array of topics to see if any of them is valid or not * @param {Array} topics - Array of topics * @returns {String} If the topics is valid, returns null. Otherwise, returns the invalid one */ function validateTopics (topics) { if (topics.length === 0) { return 'empty_topic_list' } for (let i = 0; i < topics.length; i++) { if (!validateTopic(topics[i])) { return topics[i] } } return null } module.exports = { validateTopics: validateTopics } /***/ }), /* 355 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* * Copyright Joyent, Inc. and other Node contributors. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to permit * persons to whom the Software is furnished to do so, subject to the * following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * USE OR OTHER DEALINGS IN THE SOFTWARE. */ var punycode = __webpack_require__(356); function Url() { this.protocol = null; this.slashes = null; this.auth = null; this.host = null; this.port = null; this.hostname = null; this.hash = null; this.search = null; this.query = null; this.pathname = null; this.path = null; this.href = null; } // Reference: RFC 3986, RFC 1808, RFC 2396 /* * define these here so at least they only have to be * compiled once on the first module load. */ var protocolPattern = /^([a-z0-9.+-]+:)/i, portPattern = /:[0-9]*$/, // Special case for a simple path URL simplePathPattern = /^(\/\/?(?!\/)[^?\s]*)(\?[^\s]*)?$/, /* * RFC 2396: characters reserved for delimiting URLs. * We actually just auto-escape these. */ delims = [ '<', '>', '"', '`', ' ', '\r', '\n', '\t' ], // RFC 2396: characters not allowed for various reasons. unwise = [ '{', '}', '|', '\\', '^', '`' ].concat(delims), // Allowed by RFCs, but cause of XSS attacks. Always escape these. autoEscape = ['\''].concat(unwise), /* * Characters that are never ever allowed in a hostname. * Note that any invalid chars are also handled, but these * are the ones that are *expected* to be seen, so we fast-path * them. */ nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape), hostEndingChars = [ '/', '?', '#' ], hostnameMaxLen = 255, hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, // protocols that can allow "unsafe" and "unwise" chars. unsafeProtocol = { javascript: true, 'javascript:': true }, // protocols that never have a hostname. hostlessProtocol = { javascript: true, 'javascript:': true }, // protocols that always contain a // bit. slashedProtocol = { http: true, https: true, ftp: true, gopher: true, file: true, 'http:': true, 'https:': true, 'ftp:': true, 'gopher:': true, 'file:': true }, querystring = __webpack_require__(358); function urlParse(url, parseQueryString, slashesDenoteHost) { if (url && typeof url === 'object' && url instanceof Url) { return url; } var u = new Url(); u.parse(url, parseQueryString, slashesDenoteHost); return u; } Url.prototype.parse = function (url, parseQueryString, slashesDenoteHost) { if (typeof url !== 'string') { throw new TypeError("Parameter 'url' must be a string, not " + typeof url); } /* * Copy chrome, IE, opera backslash-handling behavior. * Back slashes before the query string get converted to forward slashes * See: https://code.google.com/p/chromium/issues/detail?id=25916 */ var queryIndex = url.indexOf('?'), splitter = queryIndex !== -1 && queryIndex < url.indexOf('#') ? '?' : '#', uSplit = url.split(splitter), slashRegex = /\\/g; uSplit[0] = uSplit[0].replace(slashRegex, '/'); url = uSplit.join(splitter); var rest = url; /* * trim before proceeding. * This is to support parse stuff like " http://foo.com \n" */ rest = rest.trim(); if (!slashesDenoteHost && url.split('#').length === 1) { // Try fast path regexp var simplePath = simplePathPattern.exec(rest); if (simplePath) { this.path = rest; this.href = rest; this.pathname = simplePath[1]; if (simplePath[2]) { this.search = simplePath[2]; if (parseQueryString) { this.query = querystring.parse(this.search.substr(1)); } else { this.query = this.search.substr(1); } } else if (parseQueryString) { this.search = ''; this.query = {}; } return this; } } var proto = protocolPattern.exec(rest); if (proto) { proto = proto[0]; var lowerProto = proto.toLowerCase(); this.protocol = lowerProto; rest = rest.substr(proto.length); } /* * figure out if it's got a host * user@server is *always* interpreted as a hostname, and url * resolution will treat //foo/bar as host=foo,path=bar because that's * how the browser resolves relative URLs. */ if (slashesDenoteHost || proto || rest.match(/^\/\/[^@/]+@[^@/]+/)) { var slashes = rest.substr(0, 2) === '//'; if (slashes && !(proto && hostlessProtocol[proto])) { rest = rest.substr(2); this.slashes = true; } } if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) { /* * there's a hostname. * the first instance of /, ?, ;, or # ends the host. * * If there is an @ in the hostname, then non-host chars *are* allowed * to the left of the last @ sign, unless some host-ending character * comes *before* the @-sign. * URLs are obnoxious. * * ex: * http://a@b@c/ => user:a@b host:c * http://a@b?@c => user:a host:c path:/?@c */ /* * v0.12 TODO(isaacs): This is not quite how Chrome does things. * Review our test case against browsers more comprehensively. */ // find the first instance of any hostEndingChars var hostEnd = -1; for (var i = 0; i < hostEndingChars.length; i++) { var hec = rest.indexOf(hostEndingChars[i]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; } } /* * at this point, either we have an explicit point where the * auth portion cannot go past, or the last @ char is the decider. */ var auth, atSign; if (hostEnd === -1) { // atSign can be anywhere. atSign = rest.lastIndexOf('@'); } else { /* * atSign must be in auth portion. * http://a@b/c@d => host:b auth:a path:/c@d */ atSign = rest.lastIndexOf('@', hostEnd); } /* * Now we have a portion which is definitely the auth. * Pull that off. */ if (atSign !== -1) { auth = rest.slice(0, atSign); rest = rest.slice(atSign + 1); this.auth = decodeURIComponent(auth); } // the host is the remaining to the left of the first non-host char hostEnd = -1; for (var i = 0; i < nonHostChars.length; i++) { var hec = rest.indexOf(nonHostChars[i]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; } } // if we still have not hit it, then the entire thing is a host. if (hostEnd === -1) { hostEnd = rest.length; } this.host = rest.slice(0, hostEnd); rest = rest.slice(hostEnd); // pull out port. this.parseHost(); /* * we've indicated that there is a hostname, * so even if it's empty, it has to be present. */ this.hostname = this.hostname || ''; /* * if hostname begins with [ and ends with ] * assume that it's an IPv6 address. */ var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; // validate a little. if (!ipv6Hostname) { var hostparts = this.hostname.split(/\./); for (var i = 0, l = hostparts.length; i < l; i++) { var part = hostparts[i]; if (!part) { continue; } if (!part.match(hostnamePartPattern)) { var newpart = ''; for (var j = 0, k = part.length; j < k; j++) { if (part.charCodeAt(j) > 127) { /* * we replace non-ASCII char with a temporary placeholder * we need this to make sure size of hostname is not * broken by replacing non-ASCII by nothing */ newpart += 'x'; } else { newpart += part[j]; } } // we test again with ASCII char only if (!newpart.match(hostnamePartPattern)) { var validParts = hostparts.slice(0, i); var notHost = hostparts.slice(i + 1); var bit = part.match(hostnamePartStart); if (bit) { validParts.push(bit[1]); notHost.unshift(bit[2]); } if (notHost.length) { rest = '/' + notHost.join('.') + rest; } this.hostname = validParts.join('.'); break; } } } } if (this.hostname.length > hostnameMaxLen) { this.hostname = ''; } else { // hostnames are always lower case. this.hostname = this.hostname.toLowerCase(); } if (!ipv6Hostname) { /* * IDNA Support: Returns a punycoded representation of "domain". * It only converts parts of the domain name that * have non-ASCII characters, i.e. it doesn't matter if * you call it with a domain that already is ASCII-only. */ this.hostname = punycode.toASCII(this.hostname); } var p = this.port ? ':' + this.port : ''; var h = this.hostname || ''; this.host = h + p; this.href += this.host; /* * strip [ and ] from the hostname * the host field still retains them, though */ if (ipv6Hostname) { this.hostname = this.hostname.substr(1, this.hostname.length - 2); if (rest[0] !== '/') { rest = '/' + rest; } } } /* * now rest is set to the post-host stuff. * chop off any delim chars. */ if (!unsafeProtocol[lowerProto]) { /* * First, make 100% sure that any "autoEscape" chars get * escaped, even if encodeURIComponent doesn't think they * need to be. */ for (var i = 0, l = autoEscape.length; i < l; i++) { var ae = autoEscape[i]; if (rest.indexOf(ae) === -1) { continue; } var esc = encodeURIComponent(ae); if (esc === ae) { esc = escape(ae); } rest = rest.split(ae).join(esc); } } // chop off from the tail first. var hash = rest.indexOf('#'); if (hash !== -1) { // got a fragment string. this.hash = rest.substr(hash); rest = rest.slice(0, hash); } var qm = rest.indexOf('?'); if (qm !== -1) { this.search = rest.substr(qm); this.query = rest.substr(qm + 1); if (parseQueryString) { this.query = querystring.parse(this.query); } rest = rest.slice(0, qm); } else if (parseQueryString) { // no query string, but parseQueryString still requested this.search = ''; this.query = {}; } if (rest) { this.pathname = rest; } if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) { this.pathname = '/'; } // to support http.request if (this.pathname || this.search) { var p = this.pathname || ''; var s = this.search || ''; this.path = p + s; } // finally, reconstruct the href based on what has been validated. this.href = this.format(); return this; }; // format a parsed object into a url string function urlFormat(obj) { /* * ensure it's an object, and not a string url. * If it's an obj, this is a no-op. * this way, you can call url_format() on strings * to clean up potentially wonky urls. */ if (typeof obj === 'string') { obj = urlParse(obj); } if (!(obj instanceof Url)) { return Url.prototype.format.call(obj); } return obj.format(); } Url.prototype.format = function () { var auth = this.auth || ''; if (auth) { auth = encodeURIComponent(auth); auth = auth.replace(/%3A/i, ':'); auth += '@'; } var protocol = this.protocol || '', pathname = this.pathname || '', hash = this.hash || '', host = false, query = ''; if (this.host) { host = auth + this.host; } else if (this.hostname) { host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']'); if (this.port) { host += ':' + this.port; } } if (this.query && typeof this.query === 'object' && Object.keys(this.query).length) { query = querystring.stringify(this.query, { arrayFormat: 'repeat', addQueryPrefix: false }); } var search = this.search || (query && ('?' + query)) || ''; if (protocol && protocol.substr(-1) !== ':') { protocol += ':'; } /* * only the slashedProtocols get the //. Not mailto:, xmpp:, etc. * unless they had them to begin with. */ if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) { host = '//' + (host || ''); if (pathname && pathname.charAt(0) !== '/') { pathname = '/' + pathname; } } else if (!host) { host = ''; } if (hash && hash.charAt(0) !== '#') { hash = '#' + hash; } if (search && search.charAt(0) !== '?') { search = '?' + search; } pathname = pathname.replace(/[?#]/g, function (match) { return encodeURIComponent(match); }); search = search.replace('#', '%23'); return protocol + host + pathname + search + hash; }; function urlResolve(source, relative) { return urlParse(source, false, true).resolve(relative); } Url.prototype.resolve = function (relative) { return this.resolveObject(urlParse(relative, false, true)).format(); }; function urlResolveObject(source, relative) { if (!source) { return relative; } return urlParse(source, false, true).resolveObject(relative); } Url.prototype.resolveObject = function (relative) { if (typeof relative === 'string') { var rel = new Url(); rel.parse(relative, false, true); relative = rel; } var result = new Url(); var tkeys = Object.keys(this); for (var tk = 0; tk < tkeys.length; tk++) { var tkey = tkeys[tk]; result[tkey] = this[tkey]; } /* * hash is always overridden, no matter what. * even href="" will remove it. */ result.hash = relative.hash; // if the relative url is empty, then there's nothing left to do here. if (relative.href === '') { result.href = result.format(); return result; } // hrefs like //foo/bar always cut to the protocol. if (relative.slashes && !relative.protocol) { // take everything except the protocol from relative var rkeys = Object.keys(relative); for (var rk = 0; rk < rkeys.length; rk++) { var rkey = rkeys[rk]; if (rkey !== 'protocol') { result[rkey] = relative[rkey]; } } // urlParse appends trailing / to urls like http://www.example.com if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) { result.pathname = '/'; result.path = result.pathname; } result.href = result.format(); return result; } if (relative.protocol && relative.protocol !== result.protocol) { /* * if it's a known url protocol, then changing * the protocol does weird things * first, if it's not file:, then we MUST have a host, * and if there was a path * to begin with, then we MUST have a path. * if it is file:, then the host is dropped, * because that's known to be hostless. * anything else is assumed to be absolute. */ if (!slashedProtocol[relative.protocol]) { var keys = Object.keys(relative); for (var v = 0; v < keys.length; v++) { var k = keys[v]; result[k] = relative[k]; } result.href = result.format(); return result; } result.protocol = relative.protocol; if (!relative.host && !hostlessProtocol[relative.protocol]) { var relPath = (relative.pathname || '').split('/'); while (relPath.length && !(relative.host = relPath.shift())) { } if (!relative.host) { relative.host = ''; } if (!relative.hostname) { relative.hostname = ''; } if (relPath[0] !== '') { relPath.unshift(''); } if (relPath.length < 2) { relPath.unshift(''); } result.pathname = relPath.join('/'); } else { result.pathname = relative.pathname; } result.search = relative.search; result.query = relative.query; result.host = relative.host || ''; result.auth = relative.auth; result.hostname = relative.hostname || relative.host; result.port = relative.port; // to support http.request if (result.pathname || result.search) { var p = result.pathname || ''; var s = result.search || ''; result.path = p + s; } result.slashes = result.slashes || relative.slashes; result.href = result.format(); return result; } var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/', isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/', mustEndAbs = isRelAbs || isSourceAbs || (result.host && relative.pathname), removeAllDots = mustEndAbs, srcPath = result.pathname && result.pathname.split('/') || [], relPath = relative.pathname && relative.pathname.split('/') || [], psychotic = result.protocol && !slashedProtocol[result.protocol]; /* * if the url is a non-slashed url, then relative * links like ../.. should be able * to crawl up to the hostname, as well. This is strange. * result.protocol has already been set by now. * Later on, put the first path part into the host field. */ if (psychotic) { result.hostname = ''; result.port = null; if (result.host) { if (srcPath[0] === '') { srcPath[0] = result.host; } else { srcPath.unshift(result.host); } } result.host = ''; if (relative.protocol) { relative.hostname = null; relative.port = null; if (relative.host) { if (relPath[0] === '') { relPath[0] = relative.host; } else { relPath.unshift(relative.host); } } relative.host = null; } mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); } if (isRelAbs) { // it's absolute. result.host = relative.host || relative.host === '' ? relative.host : result.host; result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname; result.search = relative.search; result.query = relative.query; srcPath = relPath; // fall through to the dot-handling below. } else if (relPath.length) { /* * it's relative * throw away the existing file, and take the new path instead. */ if (!srcPath) { srcPath = []; } srcPath.pop(); srcPath = srcPath.concat(relPath); result.search = relative.search; result.query = relative.query; } else if (relative.search != null) { /* * just pull out the search. * like href='?foo'. * Put this after the other two cases because it simplifies the booleans */ if (psychotic) { result.host = srcPath.shift(); result.hostname = result.host; /* * occationaly the auth can get stuck only in host * this especially happens in cases like * url.resolveObject('mailto:local1@domain1', 'local2@domain2') */ var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false; if (authInHost) { result.auth = authInHost.shift(); result.hostname = authInHost.shift(); result.host = result.hostname; } } result.search = relative.search; result.query = relative.query; // to support http.request if (result.pathname !== null || result.search !== null) { result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : ''); } result.href = result.format(); return result; } if (!srcPath.length) { /* * no path at all. easy. * we've already handled the other stuff above. */ result.pathname = null; // to support http.request if (result.search) { result.path = '/' + result.search; } else { result.path = null; } result.href = result.format(); return result; } /* * if a url ENDs in . or .., then it must get a trailing slash. * however, if it ends in anything else non-slashy, * then it must NOT get a trailing slash. */ var last = srcPath.slice(-1)[0]; var hasTrailingSlash = (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === ''; /* * strip single dots, resolve double dots to parent dir * if the path tries to go above the root, `up` ends up > 0 */ var up = 0; for (var i = srcPath.length; i >= 0; i--) { last = srcPath[i]; if (last === '.') { srcPath.splice(i, 1); } else if (last === '..') { srcPath.splice(i, 1); up++; } else if (up) { srcPath.splice(i, 1); up--; } } // if the path is allowed to go above the root, restore leading ..s if (!mustEndAbs && !removeAllDots) { for (; up--; up) { srcPath.unshift('..'); } } if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { srcPath.unshift(''); } if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { srcPath.push(''); } var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/'); // put the host back if (psychotic) { result.hostname = isAbsolute ? '' : srcPath.length ? srcPath.shift() : ''; result.host = result.hostname; /* * occationaly the auth can get stuck only in host * this especially happens in cases like * url.resolveObject('mailto:local1@domain1', 'local2@domain2') */ var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false; if (authInHost) { result.auth = authInHost.shift(); result.hostname = authInHost.shift(); result.host = result.hostname; } } mustEndAbs = mustEndAbs || (result.host && srcPath.length); if (mustEndAbs && !isAbsolute) { srcPath.unshift(''); } if (srcPath.length > 0) { result.pathname = srcPath.join('/'); } else { result.pathname = null; result.path = null; } // to support request.http if (result.pathname !== null || result.search !== null) { result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : ''); } result.auth = relative.auth || result.auth; result.slashes = result.slashes || relative.slashes; result.href = result.format(); return result; }; Url.prototype.parseHost = function () { var host = this.host; var port = portPattern.exec(host); if (port) { port = port[0]; if (port !== ':') { this.port = port.substr(1); } host = host.substr(0, host.length - port.length); } if (host) { this.hostname = host; } }; exports.parse = urlParse; exports.resolve = urlResolve; exports.resolveObject = urlResolveObject; exports.format = urlFormat; exports.Url = Url; /***/ }), /* 356 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */ ;(function(root) { /** Detect free variables */ var freeExports = true && exports && !exports.nodeType && exports; var freeModule = true && module && !module.nodeType && module; var freeGlobal = typeof global == 'object' && global; if ( freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal ) { root = freeGlobal; } /** * The `punycode` object. * @name punycode * @type Object */ var punycode, /** Highest positive signed 32-bit float value */ maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 /** Bootstring parameters */ base = 36, tMin = 1, tMax = 26, skew = 38, damp = 700, initialBias = 72, initialN = 128, // 0x80 delimiter = '-', // '\x2D' /** Regular expressions */ regexPunycode = /^xn--/, regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators /** Error messages */ errors = { 'overflow': 'Overflow: input needs wider integers to process', 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', 'invalid-input': 'Invalid input' }, /** Convenience shortcuts */ baseMinusTMin = base - tMin, floor = Math.floor, stringFromCharCode = String.fromCharCode, /** Temporary variable */ key; /*--------------------------------------------------------------------------*/ /** * A generic error utility function. * @private * @param {String} type The error type. * @returns {Error} Throws a `RangeError` with the applicable error message. */ function error(type) { throw new RangeError(errors[type]); } /** * A generic `Array#map` utility function. * @private * @param {Array} array The array to iterate over. * @param {Function} callback The function that gets called for every array * item. * @returns {Array} A new array of values returned by the callback function. */ function map(array, fn) { var length = array.length; var result = []; while (length--) { result[length] = fn(array[length]); } return result; } /** * A simple `Array#map`-like wrapper to work with domain name strings or email * addresses. * @private * @param {String} domain The domain name or email address. * @param {Function} callback The function that gets called for every * character. * @returns {Array} A new string of characters returned by the callback * function. */ function mapDomain(string, fn) { var parts = string.split('@'); var result = ''; if (parts.length > 1) { // In email addresses, only the domain name should be punycoded. Leave // the local part (i.e. everything up to `@`) intact. result = parts[0] + '@'; string = parts[1]; } // Avoid `split(regex)` for IE8 compatibility. See #17. string = string.replace(regexSeparators, '\x2E'); var labels = string.split('.'); var encoded = map(labels, fn).join('.'); return result + encoded; } /** * Creates an array containing the numeric code points of each Unicode * character in the string. While JavaScript uses UCS-2 internally, * this function will convert a pair of surrogate halves (each of which * UCS-2 exposes as separate characters) into a single code point, * matching UTF-16. * @see `punycode.ucs2.encode` * @see <https://mathiasbynens.be/notes/javascript-encoding> * @memberOf punycode.ucs2 * @name decode * @param {String} string The Unicode input string (UCS-2). * @returns {Array} The new array of code points. */ function ucs2decode(string) { var output = [], counter = 0, length = string.length, value, extra; while (counter < length) { value = string.charCodeAt(counter++); if (value >= 0xD800 && value <= 0xDBFF && counter < length) { // high surrogate, and there is a next character extra = string.charCodeAt(counter++); if ((extra & 0xFC00) == 0xDC00) { // low surrogate output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); } else { // unmatched surrogate; only append this code unit, in case the next // code unit is the high surrogate of a surrogate pair output.push(value); counter--; } } else { output.push(value); } } return output; } /** * Creates a string based on an array of numeric code points. * @see `punycode.ucs2.decode` * @memberOf punycode.ucs2 * @name encode * @param {Array} codePoints The array of numeric code points. * @returns {String} The new Unicode string (UCS-2). */ function ucs2encode(array) { return map(array, function(value) { var output = ''; if (value > 0xFFFF) { value -= 0x10000; output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); value = 0xDC00 | value & 0x3FF; } output += stringFromCharCode(value); return output; }).join(''); } /** * Converts a basic code point into a digit/integer. * @see `digitToBasic()` * @private * @param {Number} codePoint The basic numeric code point value. * @returns {Number} The numeric value of a basic code point (for use in * representing integers) in the range `0` to `base - 1`, or `base` if * the code point does not represent a value. */ function basicToDigit(codePoint) { if (codePoint - 48 < 10) { return codePoint - 22; } if (codePoint - 65 < 26) { return codePoint - 65; } if (codePoint - 97 < 26) { return codePoint - 97; } return base; } /** * Converts a digit/integer into a basic code point. * @see `basicToDigit()` * @private * @param {Number} digit The numeric value of a basic code point. * @returns {Number} The basic code point whose value (when used for * representing integers) is `digit`, which needs to be in the range * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is * used; else, the lowercase form is used. The behavior is undefined * if `flag` is non-zero and `digit` has no uppercase form. */ function digitToBasic(digit, flag) { // 0..25 map to ASCII a..z or A..Z // 26..35 map to ASCII 0..9 return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); } /** * Bias adaptation function as per section 3.4 of RFC 3492. * https://tools.ietf.org/html/rfc3492#section-3.4 * @private */ function adapt(delta, numPoints, firstTime) { var k = 0; delta = firstTime ? floor(delta / damp) : delta >> 1; delta += floor(delta / numPoints); for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { delta = floor(delta / baseMinusTMin); } return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); } /** * Converts a Punycode string of ASCII-only symbols to a string of Unicode * symbols. * @memberOf punycode * @param {String} input The Punycode string of ASCII-only symbols. * @returns {String} The resulting string of Unicode symbols. */ function decode(input) { // Don't use UCS-2 var output = [], inputLength = input.length, out, i = 0, n = initialN, bias = initialBias, basic, j, index, oldi, w, k, digit, t, /** Cached calculation results */ baseMinusT; // Handle the basic code points: let `basic` be the number of input code // points before the last delimiter, or `0` if there is none, then copy // the first basic code points to the output. basic = input.lastIndexOf(delimiter); if (basic < 0) { basic = 0; } for (j = 0; j < basic; ++j) { // if it's not a basic code point if (input.charCodeAt(j) >= 0x80) { error('not-basic'); } output.push(input.charCodeAt(j)); } // Main decoding loop: start just after the last delimiter if any basic code // points were copied; start at the beginning otherwise. for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { // `index` is the index of the next character to be consumed. // Decode a generalized variable-length integer into `delta`, // which gets added to `i`. The overflow checking is easier // if we increase `i` as we go, then subtract off its starting // value at the end to obtain `delta`. for (oldi = i, w = 1, k = base; /* no condition */; k += base) { if (index >= inputLength) { error('invalid-input'); } digit = basicToDigit(input.charCodeAt(index++)); if (digit >= base || digit > floor((maxInt - i) / w)) { error('overflow'); } i += digit * w; t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); if (digit < t) { break; } baseMinusT = base - t; if (w > floor(maxInt / baseMinusT)) { error('overflow'); } w *= baseMinusT; } out = output.length + 1; bias = adapt(i - oldi, out, oldi == 0); // `i` was supposed to wrap around from `out` to `0`, // incrementing `n` each time, so we'll fix that now: if (floor(i / out) > maxInt - n) { error('overflow'); } n += floor(i / out); i %= out; // Insert `n` at position `i` of the output output.splice(i++, 0, n); } return ucs2encode(output); } /** * Converts a string of Unicode symbols (e.g. a domain name label) to a * Punycode string of ASCII-only symbols. * @memberOf punycode * @param {String} input The string of Unicode symbols. * @returns {String} The resulting Punycode string of ASCII-only symbols. */ function encode(input) { var n, delta, handledCPCount, basicLength, bias, j, m, q, k, t, currentValue, output = [], /** `inputLength` will hold the number of code points in `input`. */ inputLength, /** Cached calculation results */ handledCPCountPlusOne, baseMinusT, qMinusT; // Convert the input in UCS-2 to Unicode input = ucs2decode(input); // Cache the length inputLength = input.length; // Initialize the state n = initialN; delta = 0; bias = initialBias; // Handle the basic code points for (j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue < 0x80) { output.push(stringFromCharCode(currentValue)); } } handledCPCount = basicLength = output.length; // `handledCPCount` is the number of code points that have been handled; // `basicLength` is the number of basic code points. // Finish the basic string - if it is not empty - with a delimiter if (basicLength) { output.push(delimiter); } // Main encoding loop: while (handledCPCount < inputLength) { // All non-basic code points < n have been handled already. Find the next // larger one: for (m = maxInt, j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue >= n && currentValue < m) { m = currentValue; } } // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, // but guard against overflow handledCPCountPlusOne = handledCPCount + 1; if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { error('overflow'); } delta += (m - n) * handledCPCountPlusOne; n = m; for (j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue < n && ++delta > maxInt) { error('overflow'); } if (currentValue == n) { // Represent delta as a generalized variable-length integer for (q = delta, k = base; /* no condition */; k += base) { t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); if (q < t) { break; } qMinusT = q - t; baseMinusT = base - t; output.push( stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) ); q = floor(qMinusT / baseMinusT); } output.push(stringFromCharCode(digitToBasic(q, 0))); bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); delta = 0; ++handledCPCount; } } ++delta; ++n; } return output.join(''); } /** * Converts a Punycode string representing a domain name or an email address * to Unicode. Only the Punycoded parts of the input will be converted, i.e. * it doesn't matter if you call it on a string that has already been * converted to Unicode. * @memberOf punycode * @param {String} input The Punycoded domain name or email address to * convert to Unicode. * @returns {String} The Unicode representation of the given Punycode * string. */ function toUnicode(input) { return mapDomain(input, function(string) { return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; }); } /** * Converts a Unicode string representing a domain name or an email address to * Punycode. Only the non-ASCII parts of the domain name will be converted, * i.e. it doesn't matter if you call it with a domain that's already in * ASCII. * @memberOf punycode * @param {String} input The domain name or email address to convert, as a * Unicode string. * @returns {String} The Punycode representation of the given domain name or * email address. */ function toASCII(input) { return mapDomain(input, function(string) { return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; }); } /*--------------------------------------------------------------------------*/ /** Define the public API */ punycode = { /** * A string representing the current Punycode.js version number. * @memberOf punycode * @type String */ 'version': '1.4.1', /** * An object of methods to convert from JavaScript's internal character * representation (UCS-2) to Unicode code points, and back. * @see <https://mathiasbynens.be/notes/javascript-encoding> * @memberOf punycode * @type Object */ 'ucs2': { 'decode': ucs2decode, 'encode': ucs2encode }, 'decode': decode, 'encode': encode, 'toASCII': toASCII, 'toUnicode': toUnicode }; /** Expose `punycode` */ // Some AMD build optimizers, like r.js, check for specific condition patterns // like the following: if ( true ) { !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { return punycode; }).call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else {} }(this)); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(357)(module), __webpack_require__(12))) /***/ }), /* 357 */ /***/ (function(module, exports) { module.exports = function(module) { if (!module.webpackPolyfill) { module.deprecate = function() {}; module.paths = []; // module.parent = undefined by default if (!module.children) module.children = []; Object.defineProperty(module, "loaded", { enumerable: true, get: function() { return module.l; } }); Object.defineProperty(module, "id", { enumerable: true, get: function() { return module.i; } }); module.webpackPolyfill = 1; } return module; }; /***/ }), /* 358 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var stringify = __webpack_require__(359); var parse = __webpack_require__(378); var formats = __webpack_require__(35); module.exports = { formats: formats, parse: parse, stringify: stringify }; /***/ }), /* 359 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var getSideChannel = __webpack_require__(360); var utils = __webpack_require__(69); var formats = __webpack_require__(35); var has = Object.prototype.hasOwnProperty; var arrayPrefixGenerators = { brackets: function brackets(prefix) { return prefix + '[]'; }, comma: 'comma', indices: function indices(prefix, key) { return prefix + '[' + key + ']'; }, repeat: function repeat(prefix) { return prefix; } }; var isArray = Array.isArray; var push = Array.prototype.push; var pushToArray = function (arr, valueOrArray) { push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); }; var toISO = Date.prototype.toISOString; var defaultFormat = formats['default']; var defaults = { addQueryPrefix: false, allowDots: false, allowEmptyArrays: false, arrayFormat: 'indices', charset: 'utf-8', charsetSentinel: false, delimiter: '&', encode: true, encodeDotInKeys: false, encoder: utils.encode, encodeValuesOnly: false, format: defaultFormat, formatter: formats.formatters[defaultFormat], // deprecated indices: false, serializeDate: function serializeDate(date) { return toISO.call(date); }, skipNulls: false, strictNullHandling: false }; var isNonNullishPrimitive = function isNonNullishPrimitive(v) { return typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || typeof v === 'symbol' || typeof v === 'bigint'; }; var sentinel = {}; var stringify = function stringify( object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel ) { var obj = object; var tmpSc = sideChannel; var step = 0; var findFlag = false; while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) { // Where object last appeared in the ref tree var pos = tmpSc.get(object); step += 1; if (typeof pos !== 'undefined') { if (pos === step) { throw new RangeError('Cyclic object value'); } else { findFlag = true; // Break while } } if (typeof tmpSc.get(sentinel) === 'undefined') { step = 0; } } if (typeof filter === 'function') { obj = filter(prefix, obj); } else if (obj instanceof Date) { obj = serializeDate(obj); } else if (generateArrayPrefix === 'comma' && isArray(obj)) { obj = utils.maybeMap(obj, function (value) { if (value instanceof Date) { return serializeDate(value); } return value; }); } if (obj === null) { if (strictNullHandling) { return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix; } obj = ''; } if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { if (encoder) { var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format); return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))]; } return [formatter(prefix) + '=' + formatter(String(obj))]; } var values = []; if (typeof obj === 'undefined') { return values; } var objKeys; if (generateArrayPrefix === 'comma' && isArray(obj)) { // we need to join elements in if (encodeValuesOnly && encoder) { obj = utils.maybeMap(obj, encoder); } objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }]; } else if (isArray(filter)) { objKeys = filter; } else { var keys = Object.keys(obj); objKeys = sort ? keys.sort(sort) : keys; } var encodedPrefix = encodeDotInKeys ? prefix.replace(/\./g, '%2E') : prefix; var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix; if (allowEmptyArrays && isArray(obj) && obj.length === 0) { return adjustedPrefix + '[]'; } for (var j = 0; j < objKeys.length; ++j) { var key = objKeys[j]; var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key]; if (skipNulls && value === null) { continue; } var encodedKey = allowDots && encodeDotInKeys ? key.replace(/\./g, '%2E') : key; var keyPrefix = isArray(obj) ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']'); sideChannel.set(object, step); var valueSideChannel = getSideChannel(); valueSideChannel.set(sentinel, sideChannel); pushToArray(values, stringify( value, keyPrefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel )); } return values; }; var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { if (!opts) { return defaults; } if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') { throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided'); } if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') { throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided'); } if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') { throw new TypeError('Encoder has to be a function.'); } var charset = opts.charset || defaults.charset; if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); } var format = formats['default']; if (typeof opts.format !== 'undefined') { if (!has.call(formats.formatters, opts.format)) { throw new TypeError('Unknown format option provided.'); } format = opts.format; } var formatter = formats.formatters[format]; var filter = defaults.filter; if (typeof opts.filter === 'function' || isArray(opts.filter)) { filter = opts.filter; } var arrayFormat; if (opts.arrayFormat in arrayPrefixGenerators) { arrayFormat = opts.arrayFormat; } else if ('indices' in opts) { arrayFormat = opts.indices ? 'indices' : 'repeat'; } else { arrayFormat = defaults.arrayFormat; } if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') { throw new TypeError('`commaRoundTrip` must be a boolean, or absent'); } var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots; return { addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, allowDots: allowDots, allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays, arrayFormat: arrayFormat, charset: charset, charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, commaRoundTrip: opts.commaRoundTrip, delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys, encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, filter: filter, format: format, formatter: formatter, serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, sort: typeof opts.sort === 'function' ? opts.sort : null, strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling }; }; module.exports = function (object, opts) { var obj = object; var options = normalizeStringifyOptions(opts); var objKeys; var filter; if (typeof options.filter === 'function') { filter = options.filter; obj = filter('', obj); } else if (isArray(options.filter)) { filter = options.filter; objKeys = filter; } var keys = []; if (typeof obj !== 'object' || obj === null) { return ''; } var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat]; var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip; if (!objKeys) { objKeys = Object.keys(obj); } if (options.sort) { objKeys.sort(options.sort); } var sideChannel = getSideChannel(); for (var i = 0; i < objKeys.length; ++i) { var key = objKeys[i]; if (options.skipNulls && obj[key] === null) { continue; } pushToArray(keys, stringify( obj[key], key, generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel )); } var joined = keys.join(options.delimiter); var prefix = options.addQueryPrefix === true ? '?' : ''; if (options.charsetSentinel) { if (options.charset === 'iso-8859-1') { // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark prefix += 'utf8=%26%2310003%3B&'; } else { // encodeURIComponent('✓') prefix += 'utf8=%E2%9C%93&'; } } return joined.length > 0 ? prefix + joined : ''; }; /***/ }), /* 360 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var GetIntrinsic = __webpack_require__(21); var callBound = __webpack_require__(371); var inspect = __webpack_require__(376); var $TypeError = __webpack_require__(26); var $WeakMap = GetIntrinsic('%WeakMap%', true); var $Map = GetIntrinsic('%Map%', true); var $weakMapGet = callBound('WeakMap.prototype.get', true); var $weakMapSet = callBound('WeakMap.prototype.set', true); var $weakMapHas = callBound('WeakMap.prototype.has', true); var $mapGet = callBound('Map.prototype.get', true); var $mapSet = callBound('Map.prototype.set', true); var $mapHas = callBound('Map.prototype.has', true); /* * This function traverses the list returning the node corresponding to the given key. * * That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list. By doing so, all the recently used nodes can be accessed relatively quickly. */ /** @type {import('.').listGetNode} */ var listGetNode = function (list, key) { // eslint-disable-line consistent-return /** @type {typeof list | NonNullable<(typeof list)['next']>} */ var prev = list; /** @type {(typeof list)['next']} */ var curr; for (; (curr = prev.next) !== null; prev = curr) { if (curr.key === key) { prev.next = curr.next; // eslint-disable-next-line no-extra-parens curr.next = /** @type {NonNullable<typeof list.next>} */ (list.next); list.next = curr; // eslint-disable-line no-param-reassign return curr; } } }; /** @type {import('.').listGet} */ var listGet = function (objects, key) { var node = listGetNode(objects, key); return node && node.value; }; /** @type {import('.').listSet} */ var listSet = function (objects, key, value) { var node = listGetNode(objects, key); if (node) { node.value = value; } else { // Prepend the new node to the beginning of the list objects.next = /** @type {import('.').ListNode<typeof value>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens key: key, next: objects.next, value: value }); } }; /** @type {import('.').listHas} */ var listHas = function (objects, key) { return !!listGetNode(objects, key); }; /** @type {import('.')} */ module.exports = function getSideChannel() { /** @type {WeakMap<object, unknown>} */ var $wm; /** @type {Map<object, unknown>} */ var $m; /** @type {import('.').RootNode<unknown>} */ var $o; /** @type {import('.').Channel} */ var channel = { assert: function (key) { if (!channel.has(key)) { throw new $TypeError('Side channel does not contain ' + inspect(key)); } }, get: function (key) { // eslint-disable-line consistent-return if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { if ($wm) { return $weakMapGet($wm, key); } } else if ($Map) { if ($m) { return $mapGet($m, key); } } else { if ($o) { // eslint-disable-line no-lonely-if return listGet($o, key); } } }, has: function (key) { if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { if ($wm) { return $weakMapHas($wm, key); } } else if ($Map) { if ($m) { return $mapHas($m, key); } } else { if ($o) { // eslint-disable-line no-lonely-if return listHas($o, key); } } return false; }, set: function (key, value) { if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { if (!$wm) { $wm = new $WeakMap(); } $weakMapSet($wm, key, value); } else if ($Map) { if (!$m) { $m = new $Map(); } $mapSet($m, key, value); } else { if (!$o) { // Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head $o = { key: {}, next: null }; } listSet($o, key, value); } } }; return channel; }; /***/ }), /* 361 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** @type {import('.')} */ module.exports = Error; /***/ }), /* 362 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** @type {import('./eval')} */ module.exports = EvalError; /***/ }), /* 363 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** @type {import('./range')} */ module.exports = RangeError; /***/ }), /* 364 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** @type {import('./ref')} */ module.exports = ReferenceError; /***/ }), /* 365 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** @type {import('./uri')} */ module.exports = URIError; /***/ }), /* 366 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var origSymbol = typeof Symbol !== 'undefined' && Symbol; var hasSymbolSham = __webpack_require__(367); module.exports = function hasNativeSymbols() { if (typeof origSymbol !== 'function') { return false; } if (typeof Symbol !== 'function') { return false; } if (typeof origSymbol('foo') !== 'symbol') { return false; } if (typeof Symbol('bar') !== 'symbol') { return false; } return hasSymbolSham(); }; /***/ }), /* 367 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* eslint complexity: [2, 18], max-statements: [2, 33] */ module.exports = function hasSymbols() { if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } if (typeof Symbol.iterator === 'symbol') { return true; } var obj = {}; var sym = Symbol('test'); var symObj = Object(sym); if (typeof sym === 'string') { return false; } if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } // temp disabled per https://github.com/ljharb/object.assign/issues/17 // if (sym instanceof Symbol) { return false; } // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 // if (!(symObj instanceof Symbol)) { return false; } // if (typeof Symbol.prototype.toString !== 'function') { return false; } // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } var symVal = 42; obj[sym] = symVal; for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } var syms = Object.getOwnPropertySymbols(obj); if (syms.length !== 1 || syms[0] !== sym) { return false; } if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } if (typeof Object.getOwnPropertyDescriptor === 'function') { var descriptor = Object.getOwnPropertyDescriptor(obj, sym); if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } } return true; }; /***/ }), /* 368 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var test = { __proto__: null, foo: {} }; var $Object = Object; /** @type {import('.')} */ module.exports = function hasProto() { // @ts-expect-error: TS errors on an inherited property for some reason return { __proto__: test }.foo === test.foo && !(test instanceof $Object); }; /***/ }), /* 369 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* eslint no-invalid-this: 1 */ var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; var toStr = Object.prototype.toString; var max = Math.max; var funcType = '[object Function]'; var concatty = function concatty(a, b) { var arr = []; for (var i = 0; i < a.length; i += 1) { arr[i] = a[i]; } for (var j = 0; j < b.length; j += 1) { arr[j + a.length] = b[j]; } return arr; }; var slicy = function slicy(arrLike, offset) { var arr = []; for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) { arr[j] = arrLike[i]; } return arr; }; var joiny = function (arr, joiner) { var str = ''; for (var i = 0; i < arr.length; i += 1) { str += arr[i]; if (i + 1 < arr.length) { str += joiner; } } return str; }; module.exports = function bind(that) { var target = this; if (typeof target !== 'function' || toStr.apply(target) !== funcType) { throw new TypeError(ERROR_MESSAGE + target); } var args = slicy(arguments, 1); var bound; var binder = function () { if (this instanceof bound) { var result = target.apply( this, concatty(args, arguments) ); if (Object(result) === result) { return result; } return this; } return target.apply( that, concatty(args, arguments) ); }; var boundLength = max(0, target.length - args.length); var boundArgs = []; for (var i = 0; i < boundLength; i++) { boundArgs[i] = '$' + i; } bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder); if (target.prototype) { var Empty = function Empty() {}; Empty.prototype = target.prototype; bound.prototype = new Empty(); Empty.prototype = null; } return bound; }; /***/ }), /* 370 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var call = Function.prototype.call; var $hasOwn = Object.prototype.hasOwnProperty; var bind = __webpack_require__(33); /** @type {import('.')} */ module.exports = bind.call(call, $hasOwn); /***/ }), /* 371 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var GetIntrinsic = __webpack_require__(21); var callBind = __webpack_require__(372); var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf')); module.exports = function callBoundIntrinsic(name, allowMissing) { var intrinsic = GetIntrinsic(name, !!allowMissing); if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { return callBind(intrinsic); } return intrinsic; }; /***/ }), /* 372 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var bind = __webpack_require__(33); var GetIntrinsic = __webpack_require__(21); var setFunctionLength = __webpack_require__(373); var $TypeError = __webpack_require__(26); var $apply = GetIntrinsic('%Function.prototype.apply%'); var $call = GetIntrinsic('%Function.prototype.call%'); var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); var $defineProperty = __webpack_require__(34); var $max = GetIntrinsic('%Math.max%'); module.exports = function callBind(originalFunction) { if (typeof originalFunction !== 'function') { throw new $TypeError('a function is required'); } var func = $reflectApply(bind, $call, arguments); return setFunctionLength( func, 1 + $max(0, originalFunction.length - (arguments.length - 1)), true ); }; var applyBind = function applyBind() { return $reflectApply(bind, $apply, arguments); }; if ($defineProperty) { $defineProperty(module.exports, 'apply', { value: applyBind }); } else { module.exports.apply = applyBind; } /***/ }), /* 373 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var GetIntrinsic = __webpack_require__(21); var define = __webpack_require__(374); var hasDescriptors = __webpack_require__(375)(); var gOPD = __webpack_require__(68); var $TypeError = __webpack_require__(26); var $floor = GetIntrinsic('%Math.floor%'); /** @type {import('.')} */ module.exports = function setFunctionLength(fn, length) { if (typeof fn !== 'function') { throw new $TypeError('`fn` is not a function'); } if (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) { throw new $TypeError('`length` must be a positive 32-bit integer'); } var loose = arguments.length > 2 && !!arguments[2]; var functionLengthIsConfigurable = true; var functionLengthIsWritable = true; if ('length' in fn && gOPD) { var desc = gOPD(fn, 'length'); if (desc && !desc.configurable) { functionLengthIsConfigurable = false; } if (desc && !desc.writable) { functionLengthIsWritable = false; } } if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) { if (hasDescriptors) { define(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true); } else { define(/** @type {Parameters<define>[0]} */ (fn), 'length', length); } } return fn; }; /***/ }), /* 374 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $defineProperty = __webpack_require__(34); var $SyntaxError = __webpack_require__(67); var $TypeError = __webpack_require__(26); var gopd = __webpack_require__(68); /** @type {import('.')} */ module.exports = function defineDataProperty( obj, property, value ) { if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { throw new $TypeError('`obj` must be an object or a function`'); } if (typeof property !== 'string' && typeof property !== 'symbol') { throw new $TypeError('`property` must be a string or a symbol`'); } if (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) { throw new $TypeError('`nonEnumerable`, if provided, must be a boolean or null'); } if (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) { throw new $TypeError('`nonWritable`, if provided, must be a boolean or null'); } if (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) { throw new $TypeError('`nonConfigurable`, if provided, must be a boolean or null'); } if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { throw new $TypeError('`loose`, if provided, must be a boolean'); } var nonEnumerable = arguments.length > 3 ? arguments[3] : null; var nonWritable = arguments.length > 4 ? arguments[4] : null; var nonConfigurable = arguments.length > 5 ? arguments[5] : null; var loose = arguments.length > 6 ? arguments[6] : false; /* @type {false | TypedPropertyDescriptor<unknown>} */ var desc = !!gopd && gopd(obj, property); if ($defineProperty) { $defineProperty(obj, property, { configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable, enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable, value: value, writable: nonWritable === null && desc ? desc.writable : !nonWritable }); } else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) { // must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable obj[property] = value; // eslint-disable-line no-param-reassign } else { throw new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.'); } }; /***/ }), /* 375 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $defineProperty = __webpack_require__(34); var hasPropertyDescriptors = function hasPropertyDescriptors() { return !!$defineProperty; }; hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() { // node v0.6 has a bug where array lengths can be Set but not Defined if (!$defineProperty) { return null; } try { return $defineProperty([], 'length', { value: 1 }).length !== 1; } catch (e) { // In Firefox 4-22, defining length on an array throws an exception. return true; } }; module.exports = hasPropertyDescriptors; /***/ }), /* 376 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {var hasMap = typeof Map === 'function' && Map.prototype; var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null; var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null; var mapForEach = hasMap && Map.prototype.forEach; var hasSet = typeof Set === 'function' && Set.prototype; var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null; var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null; var setForEach = hasSet && Set.prototype.forEach; var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype; var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype; var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype; var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; var booleanValueOf = Boolean.prototype.valueOf; var objectToString = Object.prototype.toString; var functionToString = Function.prototype.toString; var $match = String.prototype.match; var $slice = String.prototype.slice; var $replace = String.prototype.replace; var $toUpperCase = String.prototype.toUpperCase; var $toLowerCase = String.prototype.toLowerCase; var $test = RegExp.prototype.test; var $concat = Array.prototype.concat; var $join = Array.prototype.join; var $arrSlice = Array.prototype.slice; var $floor = Math.floor; var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null; var gOPS = Object.getOwnPropertySymbols; var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null; var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object'; // ie, `has-tostringtag/shams var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') ? Symbol.toStringTag : null; var isEnumerable = Object.prototype.propertyIsEnumerable; var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ( [].__proto__ === Array.prototype // eslint-disable-line no-proto ? function (O) { return O.__proto__; // eslint-disable-line no-proto } : null ); function addNumericSeparator(num, str) { if ( num === Infinity || num === -Infinity || num !== num || (num && num > -1000 && num < 1000) || $test.call(/e/, str) ) { return str; } var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; if (typeof num === 'number') { var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num) if (int !== num) { var intStr = String(int); var dec = $slice.call(str, intStr.length + 1); return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, ''); } } return $replace.call(str, sepRegex, '$&_'); } var utilInspect = __webpack_require__(377); var inspectCustom = utilInspect.custom; var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null; module.exports = function inspect_(obj, options, depth, seen) { var opts = options || {}; if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) { throw new TypeError('option "quoteStyle" must be "single" or "double"'); } if ( has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity : opts.maxStringLength !== null ) ) { throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); } var customInspect = has(opts, 'customInspect') ? opts.customInspect : true; if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') { throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`'); } if ( has(opts, 'indent') && opts.indent !== null && opts.indent !== '\t' && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0) ) { throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); } if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') { throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); } var numericSeparator = opts.numericSeparator; if (typeof obj === 'undefined') { return 'undefined'; } if (obj === null) { return 'null'; } if (typeof obj === 'boolean') { return obj ? 'true' : 'false'; } if (typeof obj === 'string') { return inspectString(obj, opts); } if (typeof obj === 'number') { if (obj === 0) { return Infinity / obj > 0 ? '0' : '-0'; } var str = String(obj); return numericSeparator ? addNumericSeparator(obj, str) : str; } if (typeof obj === 'bigint') { var bigIntStr = String(obj) + 'n'; return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; } var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth; if (typeof depth === 'undefined') { depth = 0; } if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') { return isArray(obj) ? '[Array]' : '[Object]'; } var indent = getIndent(opts, depth); if (typeof seen === 'undefined') { seen = []; } else if (indexOf(seen, obj) >= 0) { return '[Circular]'; } function inspect(value, from, noIndent) { if (from) { seen = $arrSlice.call(seen); seen.push(from); } if (noIndent) { var newOpts = { depth: opts.depth }; if (has(opts, 'quoteStyle')) { newOpts.quoteStyle = opts.quoteStyle; } return inspect_(value, newOpts, depth + 1, seen); } return inspect_(value, opts, depth + 1, seen); } if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable var name = nameOf(obj); var keys = arrObjKeys(obj, inspect); return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : ''); } if (isSymbol(obj)) { var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString; } if (isElement(obj)) { var s = '<' + $toLowerCase.call(String(obj.nodeName)); var attrs = obj.attributes || []; for (var i = 0; i < attrs.length; i++) { s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts); } s += '>'; if (obj.childNodes && obj.childNodes.length) { s += '...'; } s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>'; return s; } if (isArray(obj)) { if (obj.length === 0) { return '[]'; } var xs = arrObjKeys(obj, inspect); if (indent && !singleLineValues(xs)) { return '[' + indentedJoin(xs, indent) + ']'; } return '[ ' + $join.call(xs, ', ') + ' ]'; } if (isError(obj)) { var parts = arrObjKeys(obj, inspect); if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) { return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }'; } if (parts.length === 0) { return '[' + String(obj) + ']'; } return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }'; } if (typeof obj === 'object' && customInspect) { if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) { return utilInspect(obj, { depth: maxDepth - depth }); } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') { return obj.inspect(); } } if (isMap(obj)) { var mapParts = []; if (mapForEach) { mapForEach.call(obj, function (value, key) { mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj)); }); } return collectionOf('Map', mapSize.call(obj), mapParts, indent); } if (isSet(obj)) { var setParts = []; if (setForEach) { setForEach.call(obj, function (value) { setParts.push(inspect(value, obj)); }); } return collectionOf('Set', setSize.call(obj), setParts, indent); } if (isWeakMap(obj)) { return weakCollectionOf('WeakMap'); } if (isWeakSet(obj)) { return weakCollectionOf('WeakSet'); } if (isWeakRef(obj)) { return weakCollectionOf('WeakRef'); } if (isNumber(obj)) { return markBoxed(inspect(Number(obj))); } if (isBigInt(obj)) { return markBoxed(inspect(bigIntValueOf.call(obj))); } if (isBoolean(obj)) { return markBoxed(booleanValueOf.call(obj)); } if (isString(obj)) { return markBoxed(inspect(String(obj))); } // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other /* eslint-env browser */ if (typeof window !== 'undefined' && obj === window) { return '{ [object Window] }'; } if (obj === global) { return '{ [object globalThis] }'; } if (!isDate(obj) && !isRegExp(obj)) { var ys = arrObjKeys(obj, inspect); var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; var protoTag = obj instanceof Object ? '' : 'null prototype'; var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : ''; var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : ''; var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : ''); if (ys.length === 0) { return tag + '{}'; } if (indent) { return tag + '{' + indentedJoin(ys, indent) + '}'; } return tag + '{ ' + $join.call(ys, ', ') + ' }'; } return String(obj); }; function wrapQuotes(s, defaultStyle, opts) { var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'"; return quoteChar + s + quoteChar; } function quote(s) { return $replace.call(String(s), /"/g, '"'); } function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } // Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives function isSymbol(obj) { if (hasShammedSymbols) { return obj && typeof obj === 'object' && obj instanceof Symbol; } if (typeof obj === 'symbol') { return true; } if (!obj || typeof obj !== 'object' || !symToString) { return false; } try { symToString.call(obj); return true; } catch (e) {} return false; } function isBigInt(obj) { if (!obj || typeof obj !== 'object' || !bigIntValueOf) { return false; } try { bigIntValueOf.call(obj); return true; } catch (e) {} return false; } var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; }; function has(obj, key) { return hasOwn.call(obj, key); } function toStr(obj) { return objectToString.call(obj); } function nameOf(f) { if (f.name) { return f.name; } var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); if (m) { return m[1]; } return null; } function indexOf(xs, x) { if (xs.indexOf) { return xs.indexOf(x); } for (var i = 0, l = xs.length; i < l; i++) { if (xs[i] === x) { return i; } } return -1; } function isMap(x) { if (!mapSize || !x || typeof x !== 'object') { return false; } try { mapSize.call(x); try { setSize.call(x); } catch (s) { return true; } return x instanceof Map; // core-js workaround, pre-v2.5.0 } catch (e) {} return false; } function isWeakMap(x) { if (!weakMapHas || !x || typeof x !== 'object') { return false; } try { weakMapHas.call(x, weakMapHas); try { weakSetHas.call(x, weakSetHas); } catch (s) { return true; } return x instanceof WeakMap; // core-js workaround, pre-v2.5.0 } catch (e) {} return false; } function isWeakRef(x) { if (!weakRefDeref || !x || typeof x !== 'object') { return false; } try { weakRefDeref.call(x); return true; } catch (e) {} return false; } function isSet(x) { if (!setSize || !x || typeof x !== 'object') { return false; } try { setSize.call(x); try { mapSize.call(x); } catch (m) { return true; } return x instanceof Set; // core-js workaround, pre-v2.5.0 } catch (e) {} return false; } function isWeakSet(x) { if (!weakSetHas || !x || typeof x !== 'object') { return false; } try { weakSetHas.call(x, weakSetHas); try { weakMapHas.call(x, weakMapHas); } catch (s) { return true; } return x instanceof WeakSet; // core-js workaround, pre-v2.5.0 } catch (e) {} return false; } function isElement(x) { if (!x || typeof x !== 'object') { return false; } if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) { return true; } return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function'; } function inspectString(str, opts) { if (str.length > opts.maxStringLength) { var remaining = str.length - opts.maxStringLength; var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : ''); return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; } // eslint-disable-next-line no-control-regex var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte); return wrapQuotes(s, 'single', opts); } function lowbyte(c) { var n = c.charCodeAt(0); var x = { 8: 'b', 9: 't', 10: 'n', 12: 'f', 13: 'r' }[n]; if (x) { return '\\' + x; } return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16)); } function markBoxed(str) { return 'Object(' + str + ')'; } function weakCollectionOf(type) { return type + ' { ? }'; } function collectionOf(type, size, entries, indent) { var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', '); return type + ' (' + size + ') {' + joinedEntries + '}'; } function singleLineValues(xs) { for (var i = 0; i < xs.length; i++) { if (indexOf(xs[i], '\n') >= 0) { return false; } } return true; } function getIndent(opts, depth) { var baseIndent; if (opts.indent === '\t') { baseIndent = '\t'; } else if (typeof opts.indent === 'number' && opts.indent > 0) { baseIndent = $join.call(Array(opts.indent + 1), ' '); } else { return null; } return { base: baseIndent, prev: $join.call(Array(depth + 1), baseIndent) }; } function indentedJoin(xs, indent) { if (xs.length === 0) { return ''; } var lineJoiner = '\n' + indent.prev + indent.base; return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev; } function arrObjKeys(obj, inspect) { var isArr = isArray(obj); var xs = []; if (isArr) { xs.length = obj.length; for (var i = 0; i < obj.length; i++) { xs[i] = has(obj, i) ? inspect(obj[i], obj) : ''; } } var syms = typeof gOPS === 'function' ? gOPS(obj) : []; var symMap; if (hasShammedSymbols) { symMap = {}; for (var k = 0; k < syms.length; k++) { symMap['$' + syms[k]] = syms[k]; } } for (var key in obj) { // eslint-disable-line no-restricted-syntax if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) { // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section continue; // eslint-disable-line no-restricted-syntax, no-continue } else if ($test.call(/[^\w$]/, key)) { xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj)); } else { xs.push(key + ': ' + inspect(obj[key], obj)); } } if (typeof gOPS === 'function') { for (var j = 0; j < syms.length; j++) { if (isEnumerable.call(obj, syms[j])) { xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj)); } } } return xs; } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(12))) /***/ }), /* 377 */ /***/ (function(module, exports) { /* (ignored) */ /***/ }), /* 378 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var utils = __webpack_require__(69); var has = Object.prototype.hasOwnProperty; var isArray = Array.isArray; var defaults = { allowDots: false, allowEmptyArrays: false, allowPrototypes: false, allowSparse: false, arrayLimit: 20, charset: 'utf-8', charsetSentinel: false, comma: false, decodeDotInKeys: false, decoder: utils.decode, delimiter: '&', depth: 5, duplicates: 'combine', ignoreQueryPrefix: false, interpretNumericEntities: false, parameterLimit: 1000, parseArrays: true, plainObjects: false, strictNullHandling: false }; var interpretNumericEntities = function (str) { return str.replace(/&#(\d+);/g, function ($0, numberStr) { return String.fromCharCode(parseInt(numberStr, 10)); }); }; var parseArrayValue = function (val, options) { if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) { return val.split(','); } return val; }; // This is what browsers will submit when the ✓ character occurs in an // application/x-www-form-urlencoded body and the encoding of the page containing // the form is iso-8859-1, or when the submitted form has an accept-charset // attribute of iso-8859-1. Presumably also with other charsets that do not contain // the ✓ character, such as us-ascii. var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓') // These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded. var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓') var parseValues = function parseQueryStringValues(str, options) { var obj = { __proto__: null }; var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; var parts = cleanStr.split(options.delimiter, limit); var skipIndex = -1; // Keep track of where the utf8 sentinel was found var i; var charset = options.charset; if (options.charsetSentinel) { for (i = 0; i < parts.length; ++i) { if (parts[i].indexOf('utf8=') === 0) { if (parts[i] === charsetSentinel) { charset = 'utf-8'; } else if (parts[i] === isoSentinel) { charset = 'iso-8859-1'; } skipIndex = i; i = parts.length; // The eslint settings do not allow break; } } } for (i = 0; i < parts.length; ++i) { if (i === skipIndex) { continue; } var part = parts[i]; var bracketEqualsPos = part.indexOf(']='); var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; var key, val; if (pos === -1) { key = options.decoder(part, defaults.decoder, charset, 'key'); val = options.strictNullHandling ? null : ''; } else { key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key'); val = utils.maybeMap( parseArrayValue(part.slice(pos + 1), options), function (encodedVal) { return options.decoder(encodedVal, defaults.decoder, charset, 'value'); } ); } if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { val = interpretNumericEntities(val); } if (part.indexOf('[]=') > -1) { val = isArray(val) ? [val] : val; } var existing = has.call(obj, key); if (existing && options.duplicates === 'combine') { obj[key] = utils.combine(obj[key], val); } else if (!existing || options.duplicates === 'last') { obj[key] = val; } } return obj; }; var parseObject = function (chain, val, options, valuesParsed) { var leaf = valuesParsed ? val : parseArrayValue(val, options); for (var i = chain.length - 1; i >= 0; --i) { var obj; var root = chain[i]; if (root === '[]' && options.parseArrays) { obj = options.allowEmptyArrays && leaf === '' ? [] : [].concat(leaf); } else { obj = options.plainObjects ? Object.create(null) : {}; var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot; var index = parseInt(decodedRoot, 10); if (!options.parseArrays && decodedRoot === '') { obj = { 0: leaf }; } else if ( !isNaN(index) && root !== decodedRoot && String(index) === decodedRoot && index >= 0 && (options.parseArrays && index <= options.arrayLimit) ) { obj = []; obj[index] = leaf; } else if (decodedRoot !== '__proto__') { obj[decodedRoot] = leaf; } } leaf = obj; } return leaf; }; var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { if (!givenKey) { return; } // Transform dot notation to bracket notation var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; // The regex chunks var brackets = /(\[[^[\]]*])/; var child = /(\[[^[\]]*])/g; // Get the parent var segment = options.depth > 0 && brackets.exec(key); var parent = segment ? key.slice(0, segment.index) : key; // Stash the parent if it exists var keys = []; if (parent) { // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties if (!options.plainObjects && has.call(Object.prototype, parent)) { if (!options.allowPrototypes) { return; } } keys.push(parent); } // Loop through children appending to the array until we hit depth var i = 0; while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) { i += 1; if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { if (!options.allowPrototypes) { return; } } keys.push(segment[1]); } // If there's a remainder, just add whatever is left if (segment) { keys.push('[' + key.slice(segment.index) + ']'); } return parseObject(keys, val, options, valuesParsed); }; var normalizeParseOptions = function normalizeParseOptions(opts) { if (!opts) { return defaults; } if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') { throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided'); } if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') { throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided'); } if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') { throw new TypeError('Decoder has to be a function.'); } if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); } var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates; if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') { throw new TypeError('The duplicates option must be either combine, first, or last'); } var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots; return { allowDots: allowDots, allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays, allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse, arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, charset: charset, charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys, decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, // eslint-disable-next-line no-implicit-coercion, no-extra-parens depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth, duplicates: duplicates, ignoreQueryPrefix: opts.ignoreQueryPrefix === true, interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, parseArrays: opts.parseArrays !== false, plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling }; }; module.exports = function (str, opts) { var options = normalizeParseOptions(opts); if (str === '' || str === null || typeof str === 'undefined') { return options.plainObjects ? Object.create(null) : {}; } var tempObj = typeof str === 'string' ? parseValues(str, options) : str; var obj = options.plainObjects ? Object.create(null) : {}; // Iterate over the keys and setup the new object var keys = Object.keys(tempObj); for (var i = 0; i < keys.length; ++i) { var key = keys[i]; var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string'); obj = utils.merge(obj, newObj, options); } if (options.allowSparse === true) { return obj; } return utils.compact(obj); }; /***/ }), /* 379 */ /***/ (function(module, exports) { /* (ignored) */ /***/ }), /* 380 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {var once = __webpack_require__(381); var noop = function() {}; var isRequest = function(stream) { return stream.setHeader && typeof stream.abort === 'function'; }; var isChildProcess = function(stream) { return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 }; var eos = function(stream, opts, callback) { if (typeof opts === 'function') return eos(stream, null, opts); if (!opts) opts = {}; callback = once(callback || noop); var ws = stream._writableState; var rs = stream._readableState; var readable = opts.readable || (opts.readable !== false && stream.readable); var writable = opts.writable || (opts.writable !== false && stream.writable); var cancelled = false; var onlegacyfinish = function() { if (!stream.writable) onfinish(); }; var onfinish = function() { writable = false; if (!readable) callback.call(stream); }; var onend = function() { readable = false; if (!writable) callback.call(stream); }; var onexit = function(exitCode) { callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); }; var onerror = function(err) { callback.call(stream, err); }; var onclose = function() { process.nextTick(onclosenexttick); }; var onclosenexttick = function() { if (cancelled) return; if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close')); if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close')); }; var onrequest = function() { stream.req.on('finish', onfinish); }; if (isRequest(stream)) { stream.on('complete', onfinish); stream.on('abort', onclose); if (stream.req) onrequest(); else stream.on('request', onrequest); } else if (writable && !ws) { // legacy streams stream.on('end', onlegacyfinish); stream.on('close', onlegacyfinish); } if (isChildProcess(stream)) stream.on('exit', onexit); stream.on('end', onend); stream.on('finish', onfinish); if (opts.error !== false) stream.on('error', onerror); stream.on('close', onclose); return function() { cancelled = true; stream.removeListener('complete', onfinish); stream.removeListener('abort', onclose); stream.removeListener('request', onrequest); if (stream.req) stream.req.removeListener('finish', onfinish); stream.removeListener('end', onlegacyfinish); stream.removeListener('close', onlegacyfinish); stream.removeListener('finish', onfinish); stream.removeListener('exit', onexit); stream.removeListener('end', onend); stream.removeListener('error', onerror); stream.removeListener('close', onclose); }; }; module.exports = eos; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(14))) /***/ }), /* 381 */ /***/ (function(module, exports, __webpack_require__) { var wrappy = __webpack_require__(382) module.exports = wrappy(once) module.exports.strict = wrappy(onceStrict) once.proto = once(function () { Object.defineProperty(Function.prototype, 'once', { value: function () { return once(this) }, configurable: true }) Object.defineProperty(Function.prototype, 'onceStrict', { value: function () { return onceStrict(this) }, configurable: true }) }) function once (fn) { var f = function () { if (f.called) return f.value f.called = true return f.value = fn.apply(this, arguments) } f.called = false return f } function onceStrict (fn) { var f = function () { if (f.called) throw new Error(f.onceError) f.called = true return f.value = fn.apply(this, arguments) } var name = fn.name || 'Function wrapped with `once`' f.onceError = name + " shouldn't be called more than once" f.called = false return f } /***/ }), /* 382 */ /***/ (function(module, exports) { // Returns a wrapper function that returns a wrapped callback // The wrapper function should do some stuff, and return a // presumably different callback function. // This makes sure that own properties are retained, so that // decorations and such are not lost along the way. module.exports = wrappy function wrappy (fn, cb) { if (fn && cb) return wrappy(fn)(cb) if (typeof fn !== 'function') throw new TypeError('need wrapper function') Object.keys(fn).forEach(function (k) { wrapper[k] = fn[k] }) return wrapper function wrapper() { var args = new Array(arguments.length) for (var i = 0; i < args.length; i++) { args[i] = arguments[i] } var ret = fn.apply(this, args) var cb = args[args.length-1] if (typeof ret === 'function' && ret !== cb) { Object.keys(cb).forEach(function (k) { ret[k] = cb[k] }) } return ret } } /***/ }), /* 383 */ /***/ (function(module, exports) { module.exports = shift function shift (stream) { var rs = stream._readableState if (!rs) return null return (rs.objectMode || typeof stream._duplexState === 'number') ? stream.read() : stream.read(getStateLength(rs)) } function getStateLength (state) { if (state.buffer.length) { var idx = state.bufferIndex || 0 // Since node 6.3.0 state.buffer is a BufferList not an array if (state.buffer.head) { return state.buffer.head.data.length } else if (state.buffer.length - idx > 0 && state.buffer[idx]) { return state.buffer[idx].length } } return state.length } /***/ }), /* 384 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = function () { throw new Error( 'ws does not work in the browser. Browser clients must use the native ' + 'WebSocket object' ); }; /***/ }), /* 385 */ /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(386); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(5)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /* 386 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(4)(false); // Module exports.push([module.i, ".emh-esp-smart-plug {\r\n position: relative;\r\n padding: 0.5em 0.5em 0.5em 7em;\r\n min-height: 7em;\r\n box-sizing: border-box;\r\n font-family: Arial, Helvetica, sans-serif;\r\n}\r\n\r\n.emh-esp-smart-plug:not(.emh-online) {\r\n pointer-events: none;\r\n opacity: 0.5;\r\n}\r\n\r\n.emh-esp-smart-plug.emh-online .emh-esp-smart-plug-device-id {\r\n color: lightgreen;\r\n font-weight: bold;\r\n}\r\n\r\n.emh-esp-smart-plug-device-id {\r\n color: gray;\r\n font-size: 1.2em;\r\n}\r\n\r\n\r\n.emh-esp-smart-plug-type-img-ctn {\r\n position: absolute;\r\n left: 0.5em;\r\n top: calc(50% - 3em);\r\n width: 6em;\r\n height: 6em;\r\n}\r\n\r\n.emh-esp-smart-plug-type-img-ctn img,\r\n.emh-esp-smart-plug-type-img-ctn svg {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.emh-esp-smart-plug-switch-ctn {\r\n padding: 0.5em;\r\n}\r\n\r\n.emh-esp-smart-plug-switch-ctn > .absol-switch {\r\n font-size: 3em;\r\n}", ""]); /***/ }), /* 387 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXTERNAL MODULE: ./app/style/app.css var app = __webpack_require__(39); // CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/ContextManager.js function ContextManager(){ this.__contextData__ = {}; } /** * @param {String} key * @returns {*} */ ContextManager.prototype.get = function(key){ return this.__contextData__[key]; }; /** * @param {String} key * @param {*} value * @returns {Context} */ ContextManager.prototype.set = function(key, value){ this.__contextData__[key] = value; return this; }; ContextManager.prototype.assign = function(obj){ Object.assign(this.__contextData__, obj); return this; }; ContextManager.prototype.remove = function(key){ delete this.__contextData__[key]; return this; }; ContextManager.prototype.contains = function(key){ return (key in this.__contextData__); }; /* harmony default export */ var AppPattern_ContextManager = (ContextManager); // CONCATENATED MODULE: ./node_modules/absol/src/Code/noop.js function noop(){}; // CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Context.js function Context() { /**** * * @type {"CREATE"|"PAUSE"|"RUNNING"|"STANDBY"|"DIE"|"STOP"} */ this.state = "CREATE"; /** * @type {Context} */ this.parent = null; /*** * * @type {null|ContextManager} */ this.ctxMng = null; } /** * @returns {*} */ Context.prototype.getContext = function (key) { var ctx = this; var res; while (ctx && !res){ if (ctx.ctxMng) { res = ctx.ctxMng.get(key); } ctx = ctx.parent; } return res; }; /** * @param {string} key * @param {*} value * @returns {*} */ Context.prototype.setContext = function (key, value) { return this.getContextManager().set(key, value); }; /** * @returns {ContextManager} */ Context.prototype.getContextManager = function () { var ctx = this; var res; while (ctx && !res){ if (ctx.ctxMng) { res = ctx.ctxMng; } ctx = ctx.parent; } return res; }; /** * @param {Context} parent */ Context.prototype.attach = function (parent) { //stop before attach to new context this.stop(); /** * @type {Application} */ this.parent = parent; this.onAttached && this.onAttached(); }; Context.prototype.detach = function () { this.stop(); this.onDetached && this.onDetached(); this.parent = null; }; Context.prototype.pause = function () { if (this.state.match(/RUNNING|PAUSE/)) { if (this.state === "RUNNING"){ this.state = "PAUSE"; this.onPause && this.onPause(); } } else { console.warn(this, "NOT RUNNING"); } }; Context.prototype.resume = function () { if (!this.state.match(/STANDBY|PAUSE|RUNNING/)) { // console.warn(this, 'NOT READY!', this.state); return; } if (this.state === "RUNNING") return; this.state = "RUNNING"; this.onResume && this.onResume(); }; /*** * @param {boolean=} standBy start but waiting for resume() */ Context.prototype.start = function (standBy) { if (this.state.match(/DIE/)) { // console.warn(this, 'DIED!'); return; } if (this.state.match(/RUNNING/)) return; if (this.state.match(/STOP|CREATE/)) { this.state = "STANDBY"; this.onStart && this.onStart(); } if (!standBy && this.state.match(/STANDBY|PAUSE/)) { this.resume(); } }; Context.prototype.stop = function () { if (this.state.match(/STOP|DIE|CREATE/)) return; if (this.state.match(/RUNNING/)) this.pause(); this.state = "STOP"; this.onStop && this.onStop(); }; Context.prototype.destroy = function () { if (this.state.match(/DIE/)) return; if (this.state.match(/RUNNING|PAUSE/)) this.stop(); this.state = "DIE"; this.onDestroy && this.onDestroy(); }; Context.prototype.onDestroy = noop; Context.prototype.onStop = noop; Context.prototype.onStart = noop; Context.prototype.onResume = noop; Context.prototype.onPause = noop; Context.prototype.onDetached = noop; Context.prototype.onAttached = noop; /* harmony default export */ var AppPattern_Context = (Context); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js var OOP = __webpack_require__(2); // CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/GrandContext.js /*** * @extends Context * @constructor */ function GrandContext(){ AppPattern_Context.call(this); this.ctxMng = new AppPattern_ContextManager(); } OOP["a" /* default */].mixClass(GrandContext, AppPattern_Context); /* harmony default export */ var AppPattern_GrandContext = (GrandContext); // CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Fragment.js /*** * @extends GrandContext * @constructor */ function Fragment() { AppPattern_GrandContext.call(this); } OOP["a" /* default */].mixClass(Fragment, AppPattern_GrandContext); Fragment.prototype.createView = function () { throw new Error("Not implement!"); }; Fragment.prototype.getView = function () { if (this.$view) return this.$view; this.$view = this.createView() || this.$view; if (!this.$view) throw new Error("this.$view must be not null!"); if (this.onCreated) this.onCreated(); return this.$view; }; Fragment.prototype.onCreated = noop; /* harmony default export */ var AppPattern_Fragment = (Fragment); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Dom.js + 2 modules var Dom = __webpack_require__(1); // EXTERNAL MODULE: ./node_modules/absol-mobile/css/mnavigatormenu.css var mnavigatormenu = __webpack_require__(80); // EXTERNAL MODULE: ./node_modules/absol-acomp/ACore.js var ACore = __webpack_require__(0); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiLanguageCSS.js var MultiLanguageCSS_counter = 30; function makeCss(data) { var cssText = Object.keys(data).map(key => { return [ '[data-ml-key=' + JSON.stringify(key) + ']::before {', ' content: ' + JSON.stringify(data[key]) + ';', '}' ].join('\n'); }).join('\n\n'); Object(ACore["c" /* _ */])({ tag: 'style', attr: { type: 'text/css' }, props: { innerHTML: cssText } }).addTo(document.head); } var MultiLanguageCSS_data = { txt_ok: 'OK', txt_cancel: 'Cancel', txt_close: 'Close', txt_option: 'Option', txt_check_all: 'Check All' }; makeCss(MultiLanguageCSS_data); var overrideData = {}; function waitLanguage() { if (window['LanguageModule'] && window['LanguageModule'].data && window['LanguageModule'].data.length > 0) { var text; var newest = false; for (var key in MultiLanguageCSS_data) { text = window['LanguageModule'].text(key); if (!text.startsWith('[key:') && text !== MultiLanguageCSS_data[key]) { overrideData[key] = text; newest = true; } } if (newest) makeCss(overrideData); } else { if (MultiLanguageCSS_counter--) setTimeout(waitLanguage, 400 + Math.floor(16000 / MultiLanguageCSS_counter / MultiLanguageCSS_counter)); } } waitLanguage() /* harmony default export */ var MultiLanguageCSS = ({}); // EXTERNAL MODULE: ./node_modules/absol-acomp/js/DebugTask.js var DebugTask = __webpack_require__(27); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/debugtask.css var debugtask = __webpack_require__(84); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/common.css var common = __webpack_require__(86); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Draggable.js function Draggable(element) { if (!element) element = ACore["d" /* default */]._('div'); else ACore["d" /* default */].$(element); element.defineEvent(['predrag', 'drag', 'begindrag', 'enddrag']); var body = ACore["d" /* default */].$('body'); var isMoving = false; var firstMove = false; var offsetX; var offsetY; var fontSize; var left0em, top0em, left0, top0; var finishMoving = function (event) { if (isMoving) { isMoving = false; body.off('mousemove', mouseMoveEventHandler); event.moveDX = event.clientX - offsetX; event.moveDY = event.clientY - offsetY; event.moveDXem = event.moveDX / fontSize; event.moveDYem = event.moveDY / fontSize; event.moveToX = left0 + event.moveDX; event.moveToY = top0 + event.moveDY; element.emit('enddrag', event); } }; var mouseUpEventHandler = function (event) { finishMoving(event); }; var mouseMoveEventHandler = function (event) { event.preventDefault(); event.moveDX = event.clientX - offsetX; event.moveDY = event.clientY - offsetY; event.moveDXem = event.moveDX / fontSize; event.moveDYem = event.moveDY / fontSize; event.moveToX = left0 + event.moveDX; event.moveToY = top0 + event.moveDY; event.moveToXem = left0em + event.moveDXem; event.moveToYem = top0em + event.moveDYem; if (firstMove) { firstMove = false; element.emit('begindrag', event); } element.emit('drag', event); }; var mouseOutEventHandler = function (event) { finishMoving(event); }; var mouseDownEventHandler = function (event) { isMoving = true; firstMove = true; body.on('mousemove', mouseMoveEventHandler); body.once('mouseleave', mouseOutEventHandler); body.once('mouseup', mouseUpEventHandler); fontSize = this.getFontSize(); offsetX = event.clientX; offsetY = event.clientY; left0 = parseFloat(element.getComputedStyleValue('left').replace('px', '')); top0 = parseFloat(element.getComputedStyleValue('top').replace('px', '')); left0em = left0 / fontSize; top0em = top0 / fontSize; event.x0 = left0; event.y0 = top0; event.y0em = left0em; event.y0em = top0em; element.emit('predrag', event); }; element.on('mousedown', mouseDownEventHandler); return element; }; /* harmony default export */ var js_Draggable = (Draggable); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiChars.js var EmojiChars = [["Smileys & Emotion", [["face-smiling", [[["U+1F600"], "😀", "grinning face"], [["U+1F603"], "😃", "grinning face with big eyes"], [["U+1F604"], "😄", "grinning face with smiling eyes"], [["U+1F601"], "😁", "beaming face with smiling eyes"], [["U+1F606"], "😆", "grinning squinting face"], [["U+1F605"], "😅", "grinning face with sweat"], [["U+1F923"], "🤣", "rolling on the floor laughing"], [["U+1F602"], "😂", "face with tears of joy"], [["U+1F642"], "🙂", "slightly smiling face"], [["U+1F643"], "🙃", "upside-down face"], [["U+1F609"], "😉", "winking face"], [["U+1F60A"], "😊", "smiling face with smiling eyes"], [["U+1F607"], "😇", "smiling face with halo"]]], ["face-affection", [[["U+1F970"], "🥰", "smiling face with hearts"], [["U+1F60D"], "😍", "smiling face with heart-eyes"], [["U+1F929"], "🤩", "star-struck"], [["U+1F618"], "😘", "face blowing a kiss"], [["U+1F617"], "😗", "kissing face"], [["U+263A"], "☺", "smiling face"], [["U+1F61A"], "😚", "kissing face with closed eyes"], [["U+1F619"], "😙", "kissing face with smiling eyes"], [["U+1F972"], "🥲", "⊛ smiling face with tear"]]], ["face-tongue", [[["U+1F60B"], "😋", "face savoring food"], [["U+1F61B"], "😛", "face with tongue"], [["U+1F61C"], "😜", "winking face with tongue"], [["U+1F92A"], "🤪", "zany face"], [["U+1F61D"], "😝", "squinting face with tongue"], [["U+1F911"], "🤑", "money-mouth face"]]], ["face-hand", [[["U+1F917"], "🤗", "hugging face"], [["U+1F92D"], "🤭", "face with hand over mouth"], [["U+1F92B"], "🤫", "shushing face"], [["U+1F914"], "🤔", "thinking face"]]], ["face-neutral-skeptical", [[["U+1F910"], "🤐", "zipper-mouth face"], [["U+1F928"], "🤨", "face with raised eyebrow"], [["U+1F610"], "😐", "neutral face"], [["U+1F611"], "😑", "expressionless face"], [["U+1F636"], "😶", "face without mouth"], [["U+1F60F"], "😏", "smirking face"], [["U+1F612"], "😒", "unamused face"], [["U+1F644"], "🙄", "face with rolling eyes"], [["U+1F62C"], "😬", "grimacing face"], [["U+1F925"], "🤥", "lying face"]]], ["face-sleepy", [[["U+1F60C"], "😌", "relieved face"], [["U+1F614"], "😔", "pensive face"], [["U+1F62A"], "😪", "sleepy face"], [["U+1F924"], "🤤", "drooling face"], [["U+1F634"], "😴", "sleeping face"]]], ["face-unwell", [[["U+1F637"], "😷", "face with medical mask"], [["U+1F912"], "🤒", "face with thermometer"], [["U+1F915"], "🤕", "face with head-bandage"], [["U+1F922"], "🤢", "nauseated face"], [["U+1F92E"], "🤮", "face vomiting"], [["U+1F927"], "🤧", "sneezing face"], [["U+1F975"], "🥵", "hot face"], [["U+1F976"], "🥶", "cold face"], [["U+1F974"], "🥴", "woozy face"], [["U+1F635"], "😵", "dizzy face"], [["U+1F92F"], "🤯", "exploding head"]]], ["face-hat", [[["U+1F920"], "🤠", "cowboy hat face"], [["U+1F973"], "🥳", "partying face"], [["U+1F978"], "🥸", "⊛ disguised face"]]], ["face-glasses", [[["U+1F60E"], "😎", "smiling face with sunglasses"], [["U+1F913"], "🤓", "nerd face"], [["U+1F9D0"], "🧐", "face with monocle"]]], ["face-concerned", [[["U+1F615"], "😕", "confused face"], [["U+1F61F"], "😟", "worried face"], [["U+1F641"], "🙁", "slightly frowning face"], [["U+2639"], "☹", "frowning face"], [["U+1F62E"], "😮", "face with open mouth"], [["U+1F62F"], "😯", "hushed face"], [["U+1F632"], "😲", "astonished face"], [["U+1F633"], "😳", "flushed face"], [["U+1F97A"], "🥺", "pleading face"], [["U+1F626"], "😦", "frowning face with open mouth"], [["U+1F627"], "😧", "anguished face"], [["U+1F628"], "😨", "fearful face"], [["U+1F630"], "😰", "anxious face with sweat"], [["U+1F625"], "😥", "sad but relieved face"], [["U+1F622"], "😢", "crying face"], [["U+1F62D"], "😭", "loudly crying face"], [["U+1F631"], "😱", "face screaming in fear"], [["U+1F616"], "😖", "confounded face"], [["U+1F623"], "😣", "persevering face"], [["U+1F61E"], "😞", "disappointed face"], [["U+1F613"], "😓", "downcast face with sweat"], [["U+1F629"], "😩", "weary face"], [["U+1F62B"], "😫", "tired face"], [["U+1F971"], "🥱", "yawning face"]]], ["face-negative", [[["U+1F624"], "😤", "face with steam from nose"], [["U+1F621"], "😡", "pouting face"], [["U+1F620"], "😠", "angry face"], [["U+1F92C"], "🤬", "face with symbols on mouth"], [["U+1F608"], "😈", "smiling face with horns"], [["U+1F47F"], "👿", "angry face with horns"], [["U+1F480"], "💀", "skull"], [["U+2620"], "☠", "skull and crossbones"]]], ["face-costume", [[["U+1F4A9"], "💩", "pile of poo"], [["U+1F921"], "🤡", "clown face"], [["U+1F479"], "👹", "ogre"], [["U+1F47A"], "👺", "goblin"], [["U+1F47B"], "👻", "ghost"], [["U+1F47D"], "👽", "alien"], [["U+1F47E"], "👾", "alien monster"], [["U+1F916"], "🤖", "robot"]]], ["cat-face", [[["U+1F63A"], "😺", "grinning cat"], [["U+1F638"], "😸", "grinning cat with smiling eyes"], [["U+1F639"], "😹", "cat with tears of joy"], [["U+1F63B"], "😻", "smiling cat with heart-eyes"], [["U+1F63C"], "😼", "cat with wry smile"], [["U+1F63D"], "😽", "kissing cat"], [["U+1F640"], "🙀", "weary cat"], [["U+1F63F"], "😿", "crying cat"], [["U+1F63E"], "😾", "pouting cat"]]], ["monkey-face", [[["U+1F648"], "🙈", "see-no-evil monkey"], [["U+1F649"], "🙉", "hear-no-evil monkey"], [["U+1F64A"], "🙊", "speak-no-evil monkey"]]], ["emotion", [[["U+1F48B"], "💋", "kiss mark"], [["U+1F48C"], "💌", "love letter"], [["U+1F498"], "💘", "heart with arrow"], [["U+1F49D"], "💝", "heart with ribbon"], [["U+1F496"], "💖", "sparkling heart"], [["U+1F497"], "💗", "growing heart"], [["U+1F493"], "💓", "beating heart"], [["U+1F49E"], "💞", "revolving hearts"], [["U+1F495"], "💕", "two hearts"], [["U+1F49F"], "💟", "heart decoration"], [["U+2763"], "❣", "heart exclamation"], [["U+1F494"], "💔", "broken heart"], [["U+2764"], "❤", "red heart"], [["U+1F9E1"], "🧡", "orange heart"], [["U+1F49B"], "💛", "yellow heart"], [["U+1F49A"], "💚", "green heart"], [["U+1F499"], "💙", "blue heart"], [["U+1F49C"], "💜", "purple heart"], [["U+1F90E"], "🤎", "brown heart"], [["U+1F5A4"], "🖤", "black heart"], [["U+1F90D"], "🤍", "white heart"], [["U+1F4AF"], "💯", "hundred points"], [["U+1F4A2"], "💢", "anger symbol"], [["U+1F4A5"], "💥", "collision"], [["U+1F4AB"], "💫", "dizzy"], [["U+1F4A6"], "💦", "sweat droplets"], [["U+1F4A8"], "💨", "dashing away"], [["U+1F573"], "🕳", "hole"], [["U+1F4A3"], "💣", "bomb"], [["U+1F4AC"], "💬", "speech balloon"], [["U+1F441", "U+FE0F", "U+200D", "U+1F5E8", "U+FE0F"], "👁️🗨️", "eye in speech bubble"], [["U+1F5E8"], "🗨", "left speech bubble"], [["U+1F5EF"], "🗯", "right anger bubble"], [["U+1F4AD"], "💭", "thought balloon"], [["U+1F4A4"], "💤", "zzz"]]]]], ["People & Body", [["hand-fingers-open", [[["U+1F44B"], "👋", "waving hand"], [["U+1F91A"], "🤚", "raised back of hand"], [["U+1F590"], "🖐", "hand with fingers splayed"], [["U+270B"], "✋", "raised hand"], [["U+1F596"], "🖖", "vulcan salute"]]], ["hand-fingers-partial", [[["U+1F44C"], "👌", "OK hand"], [["U+1F90C"], "🤌", "⊛ pinched fingers"], [["U+1F90F"], "🤏", "pinching hand"], [["U+270C"], "✌", "victory hand"], [["U+1F91E"], "🤞", "crossed fingers"], [["U+1F91F"], "🤟", "love-you gesture"], [["U+1F918"], "🤘", "sign of the horns"], [["U+1F919"], "🤙", "call me hand"]]], ["hand-single-finger", [[["U+1F448"], "👈", "backhand index pointing left"], [["U+1F449"], "👉", "backhand index pointing right"], [["U+1F446"], "👆", "backhand index pointing up"], [["U+1F595"], "🖕", "middle finger"], [["U+1F447"], "👇", "backhand index pointing down"], [["U+261D"], "☝", "index pointing up"]]], ["hand-fingers-closed", [[["U+1F44D"], "👍", "thumbs up"], [["U+1F44E"], "👎", "thumbs down"], [["U+270A"], "✊", "raised fist"], [["U+1F44A"], "👊", "oncoming fist"], [["U+1F91B"], "🤛", "left-facing fist"], [["U+1F91C"], "🤜", "right-facing fist"]]], ["hands", [[["U+1F44F"], "👏", "clapping hands"], [["U+1F64C"], "🙌", "raising hands"], [["U+1F450"], "👐", "open hands"], [["U+1F932"], "🤲", "palms up together"], [["U+1F91D"], "🤝", "handshake"], [["U+1F64F"], "🙏", "folded hands"]]], ["hand-prop", [[["U+270D"], "✍", "writing hand"], [["U+1F485"], "💅", "nail polish"], [["U+1F933"], "🤳", "selfie"]]], ["body-parts", [[["U+1F4AA"], "💪", "flexed biceps"], [["U+1F9BE"], "🦾", "mechanical arm"], [["U+1F9BF"], "🦿", "mechanical leg"], [["U+1F9B5"], "🦵", "leg"], [["U+1F9B6"], "🦶", "foot"], [["U+1F442"], "👂", "ear"], [["U+1F9BB"], "🦻", "ear with hearing aid"], [["U+1F443"], "👃", "nose"], [["U+1F9E0"], "🧠", "brain"], [["U+1F9B7"], "🦷", "tooth"], [["U+1F9B4"], "🦴", "bone"], [["U+1F440"], "👀", "eyes"], [["U+1F441"], "👁", "eye"], [["U+1F445"], "👅", "tongue"], [["U+1F444"], "👄", "mouth"]]], ["person", [[["U+1F476"], "👶", "baby"], [["U+1F9D2"], "🧒", "child"], [["U+1F466"], "👦", "boy"], [["U+1F467"], "👧", "girl"], [["U+1F9D1"], "🧑", "person"], [["U+1F471"], "👱", "person: blond hair"], [["U+1F468"], "👨", "man"], [["U+1F9D4"], "🧔", "man: beard"], [["U+1F468", "U+200D", "U+1F9B0"], "👨🦰", "man: red hair"], [["U+1F468", "U+200D", "U+1F9B1"], "👨🦱", "man: curly hair"], [["U+1F468", "U+200D", "U+1F9B3"], "👨🦳", "man: white hair"], [["U+1F468", "U+200D", "U+1F9B2"], "👨🦲", "man: bald"], [["U+1F469"], "👩", "woman"], [["U+1F469", "U+200D", "U+1F9B0"], "👩🦰", "woman: red hair"], [["U+1F9D1", "U+200D", "U+1F9B0"], "🧑🦰", "person: red hair"], [["U+1F469", "U+200D", "U+1F9B1"], "👩🦱", "woman: curly hair"], [["U+1F9D1", "U+200D", "U+1F9B1"], "🧑🦱", "person: curly hair"], [["U+1F469", "U+200D", "U+1F9B3"], "👩🦳", "woman: white hair"], [["U+1F9D1", "U+200D", "U+1F9B3"], "🧑🦳", "person: white hair"], [["U+1F469", "U+200D", "U+1F9B2"], "👩🦲", "woman: bald"], [["U+1F9D1", "U+200D", "U+1F9B2"], "🧑🦲", "person: bald"], [["U+1F471", "U+200D", "U+2640", "U+FE0F"], "👱♀️", "woman: blond hair"], [["U+1F471", "U+200D", "U+2642", "U+FE0F"], "👱♂️", "man: blond hair"], [["U+1F9D3"], "🧓", "older person"], [["U+1F474"], "👴", "old man"], [["U+1F475"], "👵", "old woman"]]], ["person-gesture", [[["U+1F64D"], "🙍", "person frowning"], [["U+1F64D", "U+200D", "U+2642", "U+FE0F"], "🙍♂️", "man frowning"], [["U+1F64D", "U+200D", "U+2640", "U+FE0F"], "🙍♀️", "woman frowning"], [["U+1F64E"], "🙎", "person pouting"], [["U+1F64E", "U+200D", "U+2642", "U+FE0F"], "🙎♂️", "man pouting"], [["U+1F64E", "U+200D", "U+2640", "U+FE0F"], "🙎♀️", "woman pouting"], [["U+1F645"], "🙅", "person gesturing NO"], [["U+1F645", "U+200D", "U+2642", "U+FE0F"], "🙅♂️", "man gesturing NO"], [["U+1F645", "U+200D", "U+2640", "U+FE0F"], "🙅♀️", "woman gesturing NO"], [["U+1F646"], "🙆", "person gesturing OK"], [["U+1F646", "U+200D", "U+2642", "U+FE0F"], "🙆♂️", "man gesturing OK"], [["U+1F646", "U+200D", "U+2640", "U+FE0F"], "🙆♀️", "woman gesturing OK"], [["U+1F481"], "💁", "person tipping hand"], [["U+1F481", "U+200D", "U+2642", "U+FE0F"], "💁♂️", "man tipping hand"], [["U+1F481", "U+200D", "U+2640", "U+FE0F"], "💁♀️", "woman tipping hand"], [["U+1F64B"], "🙋", "person raising hand"], [["U+1F64B", "U+200D", "U+2642", "U+FE0F"], "🙋♂️", "man raising hand"], [["U+1F64B", "U+200D", "U+2640", "U+FE0F"], "🙋♀️", "woman raising hand"], [["U+1F9CF"], "🧏", "deaf person"], [["U+1F9CF", "U+200D", "U+2642", "U+FE0F"], "🧏♂️", "deaf man"], [["U+1F9CF", "U+200D", "U+2640", "U+FE0F"], "🧏♀️", "deaf woman"], [["U+1F647"], "🙇", "person bowing"], [["U+1F647", "U+200D", "U+2642", "U+FE0F"], "🙇♂️", "man bowing"], [["U+1F647", "U+200D", "U+2640", "U+FE0F"], "🙇♀️", "woman bowing"], [["U+1F926"], "🤦", "person facepalming"], [["U+1F926", "U+200D", "U+2642", "U+FE0F"], "🤦♂️", "man facepalming"], [["U+1F926", "U+200D", "U+2640", "U+FE0F"], "🤦♀️", "woman facepalming"], [["U+1F937"], "🤷", "person shrugging"], [["U+1F937", "U+200D", "U+2642", "U+FE0F"], "🤷♂️", "man shrugging"], [["U+1F937", "U+200D", "U+2640", "U+FE0F"], "🤷♀️", "woman shrugging"]]], ["person-role", [[["U+1F9D1", "U+200D", "U+2695", "U+FE0F"], "🧑⚕️", "health worker"], [["U+1F468", "U+200D", "U+2695", "U+FE0F"], "👨⚕️", "man health worker"], [["U+1F469", "U+200D", "U+2695", "U+FE0F"], "👩⚕️", "woman health worker"], [["U+1F9D1", "U+200D", "U+1F393"], "🧑🎓", "student"], [["U+1F468", "U+200D", "U+1F393"], "👨🎓", "man student"], [["U+1F469", "U+200D", "U+1F393"], "👩🎓", "woman student"], [["U+1F9D1", "U+200D", "U+1F3EB"], "🧑🏫", "teacher"], [["U+1F468", "U+200D", "U+1F3EB"], "👨🏫", "man teacher"], [["U+1F469", "U+200D", "U+1F3EB"], "👩🏫", "woman teacher"], [["U+1F9D1", "U+200D", "U+2696", "U+FE0F"], "🧑⚖️", "judge"], [["U+1F468", "U+200D", "U+2696", "U+FE0F"], "👨⚖️", "man judge"], [["U+1F469", "U+200D", "U+2696", "U+FE0F"], "👩⚖️", "woman judge"], [["U+1F9D1", "U+200D", "U+1F33E"], "🧑🌾", "farmer"], [["U+1F468", "U+200D", "U+1F33E"], "👨🌾", "man farmer"], [["U+1F469", "U+200D", "U+1F33E"], "👩🌾", "woman farmer"], [["U+1F9D1", "U+200D", "U+1F373"], "🧑🍳", "cook"], [["U+1F468", "U+200D", "U+1F373"], "👨🍳", "man cook"], [["U+1F469", "U+200D", "U+1F373"], "👩🍳", "woman cook"], [["U+1F9D1", "U+200D", "U+1F527"], "🧑🔧", "mechanic"], [["U+1F468", "U+200D", "U+1F527"], "👨🔧", "man mechanic"], [["U+1F469", "U+200D", "U+1F527"], "👩🔧", "woman mechanic"], [["U+1F9D1", "U+200D", "U+1F3ED"], "🧑🏭", "factory worker"], [["U+1F468", "U+200D", "U+1F3ED"], "👨🏭", "man factory worker"], [["U+1F469", "U+200D", "U+1F3ED"], "👩🏭", "woman factory worker"], [["U+1F9D1", "U+200D", "U+1F4BC"], "🧑💼", "office worker"], [["U+1F468", "U+200D", "U+1F4BC"], "👨💼", "man office worker"], [["U+1F469", "U+200D", "U+1F4BC"], "👩💼", "woman office worker"], [["U+1F9D1", "U+200D", "U+1F52C"], "🧑🔬", "scientist"], [["U+1F468", "U+200D", "U+1F52C"], "👨🔬", "man scientist"], [["U+1F469", "U+200D", "U+1F52C"], "👩🔬", "woman scientist"], [["U+1F9D1", "U+200D", "U+1F4BB"], "🧑💻", "technologist"], [["U+1F468", "U+200D", "U+1F4BB"], "👨💻", "man technologist"], [["U+1F469", "U+200D", "U+1F4BB"], "👩💻", "woman technologist"], [["U+1F9D1", "U+200D", "U+1F3A4"], "🧑🎤", "singer"], [["U+1F468", "U+200D", "U+1F3A4"], "👨🎤", "man singer"], [["U+1F469", "U+200D", "U+1F3A4"], "👩🎤", "woman singer"], [["U+1F9D1", "U+200D", "U+1F3A8"], "🧑🎨", "artist"], [["U+1F468", "U+200D", "U+1F3A8"], "👨🎨", "man artist"], [["U+1F469", "U+200D", "U+1F3A8"], "👩🎨", "woman artist"], [["U+1F9D1", "U+200D", "U+2708", "U+FE0F"], "🧑✈️", "pilot"], [["U+1F468", "U+200D", "U+2708", "U+FE0F"], "👨✈️", "man pilot"], [["U+1F469", "U+200D", "U+2708", "U+FE0F"], "👩✈️", "woman pilot"], [["U+1F9D1", "U+200D", "U+1F680"], "🧑🚀", "astronaut"], [["U+1F468", "U+200D", "U+1F680"], "👨🚀", "man astronaut"], [["U+1F469", "U+200D", "U+1F680"], "👩🚀", "woman astronaut"], [["U+1F9D1", "U+200D", "U+1F692"], "🧑🚒", "firefighter"], [["U+1F468", "U+200D", "U+1F692"], "👨🚒", "man firefighter"], [["U+1F469", "U+200D", "U+1F692"], "👩🚒", "woman firefighter"], [["U+1F46E"], "👮", "police officer"], [["U+1F46E", "U+200D", "U+2642", "U+FE0F"], "👮♂️", "man police officer"], [["U+1F46E", "U+200D", "U+2640", "U+FE0F"], "👮♀️", "woman police officer"], [["U+1F575"], "🕵", "detective"], [["U+1F575", "U+FE0F", "U+200D", "U+2642", "U+FE0F"], "🕵️♂️", "man detective"], [["U+1F575", "U+FE0F", "U+200D", "U+2640", "U+FE0F"], "🕵️♀️", "woman detective"], [["U+1F482"], "💂", "guard"], [["U+1F482", "U+200D", "U+2642", "U+FE0F"], "💂♂️", "man guard"], [["U+1F482", "U+200D", "U+2640", "U+FE0F"], "💂♀️", "woman guard"], [["U+1F977"], "🥷", "⊛ ninja"], [["U+1F477"], "👷", "construction worker"], [["U+1F477", "U+200D", "U+2642", "U+FE0F"], "👷♂️", "man construction worker"], [["U+1F477", "U+200D", "U+2640", "U+FE0F"], "👷♀️", "woman construction worker"], [["U+1F934"], "🤴", "prince"], [["U+1F478"], "👸", "princess"], [["U+1F473"], "👳", "person wearing turban"], [["U+1F473", "U+200D", "U+2642", "U+FE0F"], "👳♂️", "man wearing turban"], [["U+1F473", "U+200D", "U+2640", "U+FE0F"], "👳♀️", "woman wearing turban"], [["U+1F472"], "👲", "person with skullcap"], [["U+1F9D5"], "🧕", "woman with headscarf"], [["U+1F935"], "🤵", "person in tuxedo"], [["U+1F935", "U+200D", "U+2642", "U+FE0F"], "🤵♂️", "⊛ man in tuxedo"], [["U+1F935", "U+200D", "U+2640", "U+FE0F"], "🤵♀️", "⊛ woman in tuxedo"], [["U+1F470"], "👰", "person with veil"], [["U+1F930"], "🤰", "pregnant woman"], [["U+1F931"], "🤱", "breast-feeding"]]], ["person-fantasy", [[["U+1F47C"], "👼", "baby angel"], [["U+1F385"], "🎅", "Santa Claus"], [["U+1F936"], "🤶", "Mrs. Claus"], [["U+1F9B8"], "🦸", "superhero"], [["U+1F9B8", "U+200D", "U+2642", "U+FE0F"], "🦸♂️", "man superhero"], [["U+1F9B8", "U+200D", "U+2640", "U+FE0F"], "🦸♀️", "woman superhero"], [["U+1F9B9"], "🦹", "supervillain"], [["U+1F9B9", "U+200D", "U+2642", "U+FE0F"], "🦹♂️", "man supervillain"], [["U+1F9B9", "U+200D", "U+2640", "U+FE0F"], "🦹♀️", "woman supervillain"], [["U+1F9D9"], "🧙", "mage"], [["U+1F9D9", "U+200D", "U+2642", "U+FE0F"], "🧙♂️", "man mage"], [["U+1F9D9", "U+200D", "U+2640", "U+FE0F"], "🧙♀️", "woman mage"], [["U+1F9DA"], "🧚", "fairy"], [["U+1F9DA", "U+200D", "U+2642", "U+FE0F"], "🧚♂️", "man fairy"], [["U+1F9DA", "U+200D", "U+2640", "U+FE0F"], "🧚♀️", "woman fairy"], [["U+1F9DB"], "🧛", "vampire"], [["U+1F9DB", "U+200D", "U+2642", "U+FE0F"], "🧛♂️", "man vampire"], [["U+1F9DB", "U+200D", "U+2640", "U+FE0F"], "🧛♀️", "woman vampire"], [["U+1F9DC"], "🧜", "merperson"], [["U+1F9DC", "U+200D", "U+2642", "U+FE0F"], "🧜♂️", "merman"], [["U+1F9DC", "U+200D", "U+2640", "U+FE0F"], "🧜♀️", "mermaid"], [["U+1F9DD"], "🧝", "elf"], [["U+1F9DD", "U+200D", "U+2642", "U+FE0F"], "🧝♂️", "man elf"], [["U+1F9DD", "U+200D", "U+2640", "U+FE0F"], "🧝♀️", "woman elf"], [["U+1F9DE"], "🧞", "genie"], [["U+1F9DE", "U+200D", "U+2642", "U+FE0F"], "🧞♂️", "man genie"], [["U+1F9DE", "U+200D", "U+2640", "U+FE0F"], "🧞♀️", "woman genie"], [["U+1F9DF"], "🧟", "zombie"], [["U+1F9DF", "U+200D", "U+2642", "U+FE0F"], "🧟♂️", "man zombie"], [["U+1F9DF", "U+200D", "U+2640", "U+FE0F"], "🧟♀️", "woman zombie"]]], ["person-activity", [[["U+1F486"], "💆", "person getting massage"], [["U+1F486", "U+200D", "U+2642", "U+FE0F"], "💆♂️", "man getting massage"], [["U+1F486", "U+200D", "U+2640", "U+FE0F"], "💆♀️", "woman getting massage"], [["U+1F487"], "💇", "person getting haircut"], [["U+1F487", "U+200D", "U+2642", "U+FE0F"], "💇♂️", "man getting haircut"], [["U+1F487", "U+200D", "U+2640", "U+FE0F"], "💇♀️", "woman getting haircut"], [["U+1F6B6"], "🚶", "person walking"], [["U+1F6B6", "U+200D", "U+2642", "U+FE0F"], "🚶♂️", "man walking"], [["U+1F6B6", "U+200D", "U+2640", "U+FE0F"], "🚶♀️", "woman walking"], [["U+1F9CD"], "🧍", "person standing"], [["U+1F9CD", "U+200D", "U+2642", "U+FE0F"], "🧍♂️", "man standing"], [["U+1F9CD", "U+200D", "U+2640", "U+FE0F"], "🧍♀️", "woman standing"], [["U+1F9CE"], "🧎", "person kneeling"], [["U+1F9CE", "U+200D", "U+2642", "U+FE0F"], "🧎♂️", "man kneeling"], [["U+1F9CE", "U+200D", "U+2640", "U+FE0F"], "🧎♀️", "woman kneeling"], [["U+1F9D1", "U+200D", "U+1F9AF"], "🧑🦯", "person with white cane"], [["U+1F468", "U+200D", "U+1F9AF"], "👨🦯", "man with white cane"], [["U+1F469", "U+200D", "U+1F9AF"], "👩🦯", "woman with white cane"], [["U+1F9D1", "U+200D", "U+1F9BC"], "🧑🦼", "person in motorized wheelchair"], [["U+1F468", "U+200D", "U+1F9BC"], "👨🦼", "man in motorized wheelchair"], [["U+1F469", "U+200D", "U+1F9BC"], "👩🦼", "woman in motorized wheelchair"], [["U+1F9D1", "U+200D", "U+1F9BD"], "🧑🦽", "person in manual wheelchair"], [["U+1F468", "U+200D", "U+1F9BD"], "👨🦽", "man in manual wheelchair"], [["U+1F469", "U+200D", "U+1F9BD"], "👩🦽", "woman in manual wheelchair"], [["U+1F3C3"], "🏃", "person running"], [["U+1F3C3", "U+200D", "U+2642", "U+FE0F"], "🏃♂️", "man running"], [["U+1F3C3", "U+200D", "U+2640", "U+FE0F"], "🏃♀️", "woman running"], [["U+1F483"], "💃", "woman dancing"], [["U+1F57A"], "🕺", "man dancing"], [["U+1F574"], "🕴", "person in suit levitating"], [["U+1F46F"], "👯", "people with bunny ears"], [["U+1F46F", "U+200D", "U+2642", "U+FE0F"], "👯♂️", "men with bunny ears"], [["U+1F46F", "U+200D", "U+2640", "U+FE0F"], "👯♀️", "women with bunny ears"], [["U+1F9D6"], "🧖", "person in steamy room"], [["U+1F9D6", "U+200D", "U+2642", "U+FE0F"], "🧖♂️", "man in steamy room"], [["U+1F9D6", "U+200D", "U+2640", "U+FE0F"], "🧖♀️", "woman in steamy room"], [["U+1F9D7"], "🧗", "person climbing"], [["U+1F9D7", "U+200D", "U+2642", "U+FE0F"], "🧗♂️", "man climbing"], [["U+1F9D7", "U+200D", "U+2640", "U+FE0F"], "🧗♀️", "woman climbing"]]], ["person-sport", [[["U+1F93A"], "🤺", "person fencing"], [["U+1F3C7"], "🏇", "horse racing"], [["U+26F7"], "⛷", "skier"], [["U+1F3C2"], "🏂", "snowboarder"], [["U+1F3CC"], "🏌", "person golfing"], [["U+1F3CC", "U+FE0F", "U+200D", "U+2642", "U+FE0F"], "🏌️♂️", "man golfing"], [["U+1F3CC", "U+FE0F", "U+200D", "U+2640", "U+FE0F"], "🏌️♀️", "woman golfing"], [["U+1F3C4"], "🏄", "person surfing"], [["U+1F3C4", "U+200D", "U+2642", "U+FE0F"], "🏄♂️", "man surfing"], [["U+1F3C4", "U+200D", "U+2640", "U+FE0F"], "🏄♀️", "woman surfing"], [["U+1F6A3"], "🚣", "person rowing boat"], [["U+1F6A3", "U+200D", "U+2642", "U+FE0F"], "🚣♂️", "man rowing boat"], [["U+1F6A3", "U+200D", "U+2640", "U+FE0F"], "🚣♀️", "woman rowing boat"], [["U+1F3CA"], "🏊", "person swimming"], [["U+1F3CA", "U+200D", "U+2642", "U+FE0F"], "🏊♂️", "man swimming"], [["U+1F3CA", "U+200D", "U+2640", "U+FE0F"], "🏊♀️", "woman swimming"], [["U+26F9"], "⛹", "person bouncing ball"], [["U+26F9", "U+FE0F", "U+200D", "U+2642", "U+FE0F"], "⛹️♂️", "man bouncing ball"], [["U+26F9", "U+FE0F", "U+200D", "U+2640", "U+FE0F"], "⛹️♀️", "woman bouncing ball"], [["U+1F3CB"], "🏋", "person lifting weights"], [["U+1F3CB", "U+FE0F", "U+200D", "U+2642", "U+FE0F"], "🏋️♂️", "man lifting weights"], [["U+1F3CB", "U+FE0F", "U+200D", "U+2640", "U+FE0F"], "🏋️♀️", "woman lifting weights"], [["U+1F6B4"], "🚴", "person biking"], [["U+1F6B4", "U+200D", "U+2642", "U+FE0F"], "🚴♂️", "man biking"], [["U+1F6B4", "U+200D", "U+2640", "U+FE0F"], "🚴♀️", "woman biking"], [["U+1F6B5"], "🚵", "person mountain biking"], [["U+1F6B5", "U+200D", "U+2642", "U+FE0F"], "🚵♂️", "man mountain biking"], [["U+1F6B5", "U+200D", "U+2640", "U+FE0F"], "🚵♀️", "woman mountain biking"], [["U+1F938"], "🤸", "person cartwheeling"], [["U+1F938", "U+200D", "U+2642", "U+FE0F"], "🤸♂️", "man cartwheeling"], [["U+1F938", "U+200D", "U+2640", "U+FE0F"], "🤸♀️", "woman cartwheeling"], [["U+1F93C"], "🤼", "people wrestling"], [["U+1F93C", "U+200D", "U+2642", "U+FE0F"], "🤼♂️", "men wrestling"], [["U+1F93C", "U+200D", "U+2640", "U+FE0F"], "🤼♀️", "women wrestling"], [["U+1F93D"], "🤽", "person playing water polo"], [["U+1F93D", "U+200D", "U+2642", "U+FE0F"], "🤽♂️", "man playing water polo"], [["U+1F93D", "U+200D", "U+2640", "U+FE0F"], "🤽♀️", "woman playing water polo"], [["U+1F93E"], "🤾", "person playing handball"], [["U+1F93E", "U+200D", "U+2642", "U+FE0F"], "🤾♂️", "man playing handball"], [["U+1F93E", "U+200D", "U+2640", "U+FE0F"], "🤾♀️", "woman playing handball"], [["U+1F939"], "🤹", "person juggling"], [["U+1F939", "U+200D", "U+2642", "U+FE0F"], "🤹♂️", "man juggling"], [["U+1F939", "U+200D", "U+2640", "U+FE0F"], "🤹♀️", "woman juggling"]]], ["person-resting", [[["U+1F9D8"], "🧘", "person in lotus position"], [["U+1F9D8", "U+200D", "U+2642", "U+FE0F"], "🧘♂️", "man in lotus position"], [["U+1F9D8", "U+200D", "U+2640", "U+FE0F"], "🧘♀️", "woman in lotus position"], [["U+1F6C0"], "🛀", "person taking bath"], [["U+1F6CC"], "🛌", "person in bed"]]], ["family", [[["U+1F9D1", "U+200D", "U+1F91D", "U+200D", "U+1F9D1"], "🧑🤝🧑", "people holding hands"], [["U+1F46D"], "👭", "women holding hands"], [["U+1F46B"], "👫", "woman and man holding hands"], [["U+1F46C"], "👬", "men holding hands"], [["U+1F48F"], "💏", "kiss"], [["U+1F469", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F48B", "U+200D", "U+1F468"], "👩❤️💋👨", "kiss: woman, man"], [["U+1F468", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F48B", "U+200D", "U+1F468"], "👨❤️💋👨", "kiss: man, man"], [["U+1F469", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F48B", "U+200D", "U+1F469"], "👩❤️💋👩", "kiss: woman, woman"], [["U+1F491"], "💑", "couple with heart"], [["U+1F469", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F468"], "👩❤️👨", "couple with heart: woman, man"], [["U+1F468", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F468"], "👨❤️👨", "couple with heart: man, man"], [["U+1F469", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F469"], "👩❤️👩", "couple with heart: woman, woman"], [["U+1F46A"], "👪", "family"], [["U+1F468", "U+200D", "U+1F469", "U+200D", "U+1F466"], "👨👩👦", "family: man, woman, boy"], [["U+1F468", "U+200D", "U+1F469", "U+200D", "U+1F467"], "👨👩👧", "family: man, woman, girl"], [["U+1F468", "U+200D", "U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F466"], "👨👩👧👦", "family: man, woman, girl, boy"], [["U+1F468", "U+200D", "U+1F469", "U+200D", "U+1F466", "U+200D", "U+1F466"], "👨👩👦👦", "family: man, woman, boy, boy"], [["U+1F468", "U+200D", "U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F467"], "👨👩👧👧", "family: man, woman, girl, girl"], [["U+1F468", "U+200D", "U+1F468", "U+200D", "U+1F466"], "👨👨👦", "family: man, man, boy"], [["U+1F468", "U+200D", "U+1F468", "U+200D", "U+1F467"], "👨👨👧", "family: man, man, girl"], [["U+1F468", "U+200D", "U+1F468", "U+200D", "U+1F467", "U+200D", "U+1F466"], "👨👨👧👦", "family: man, man, girl, boy"], [["U+1F468", "U+200D", "U+1F468", "U+200D", "U+1F466", "U+200D", "U+1F466"], "👨👨👦👦", "family: man, man, boy, boy"], [["U+1F468", "U+200D", "U+1F468", "U+200D", "U+1F467", "U+200D", "U+1F467"], "👨👨👧👧", "family: man, man, girl, girl"], [["U+1F469", "U+200D", "U+1F469", "U+200D", "U+1F466"], "👩👩👦", "family: woman, woman, boy"], [["U+1F469", "U+200D", "U+1F469", "U+200D", "U+1F467"], "👩👩👧", "family: woman, woman, girl"], [["U+1F469", "U+200D", "U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F466"], "👩👩👧👦", "family: woman, woman, girl, boy"], [["U+1F469", "U+200D", "U+1F469", "U+200D", "U+1F466", "U+200D", "U+1F466"], "👩👩👦👦", "family: woman, woman, boy, boy"], [["U+1F469", "U+200D", "U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F467"], "👩👩👧👧", "family: woman, woman, girl, girl"], [["U+1F468", "U+200D", "U+1F466"], "👨👦", "family: man, boy"], [["U+1F468", "U+200D", "U+1F466", "U+200D", "U+1F466"], "👨👦👦", "family: man, boy, boy"], [["U+1F468", "U+200D", "U+1F467"], "👨👧", "family: man, girl"], [["U+1F468", "U+200D", "U+1F467", "U+200D", "U+1F466"], "👨👧👦", "family: man, girl, boy"], [["U+1F468", "U+200D", "U+1F467", "U+200D", "U+1F467"], "👨👧👧", "family: man, girl, girl"], [["U+1F469", "U+200D", "U+1F466"], "👩👦", "family: woman, boy"], [["U+1F469", "U+200D", "U+1F466", "U+200D", "U+1F466"], "👩👦👦", "family: woman, boy, boy"], [["U+1F469", "U+200D", "U+1F467"], "👩👧", "family: woman, girl"], [["U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F466"], "👩👧👦", "family: woman, girl, boy"], [["U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F467"], "👩👧👧", "family: woman, girl, girl"]]], ["person-symbol", [[["U+1F5E3"], "🗣", "speaking head"], [["U+1F464"], "👤", "bust in silhouette"], [["U+1F465"], "👥", "busts in silhouette"], [["U+1FAC2"], "🫂", "⊛ people hugging"], [["U+1F463"], "👣", "footprints"]]]]], ["Component", [["hair-style", [[["U+1F9B0"], "🦰", "red hair"], [["U+1F9B1"], "🦱", "curly hair"], [["U+1F9B3"], "🦳", "white hair"], [["U+1F9B2"], "🦲", "bald"]]]]], ["Animals & Nature", [["animal-mammal", [[["U+1F435"], "🐵", "monkey face"], [["U+1F412"], "🐒", "monkey"], [["U+1F98D"], "🦍", "gorilla"], [["U+1F9A7"], "🦧", "orangutan"], [["U+1F436"], "🐶", "dog face"], [["U+1F415"], "🐕", "dog"], [["U+1F9AE"], "🦮", "guide dog"], [["U+1F415", "U+200D", "U+1F9BA"], "🐕🦺", "service dog"], [["U+1F429"], "🐩", "poodle"], [["U+1F43A"], "🐺", "wolf"], [["U+1F98A"], "🦊", "fox"], [["U+1F99D"], "🦝", "raccoon"], [["U+1F431"], "🐱", "cat face"], [["U+1F408"], "🐈", "cat"], [["U+1F981"], "🦁", "lion"], [["U+1F42F"], "🐯", "tiger face"], [["U+1F405"], "🐅", "tiger"], [["U+1F406"], "🐆", "leopard"], [["U+1F434"], "🐴", "horse face"], [["U+1F40E"], "🐎", "horse"], [["U+1F984"], "🦄", "unicorn"], [["U+1F993"], "🦓", "zebra"], [["U+1F98C"], "🦌", "deer"], [["U+1F42E"], "🐮", "cow face"], [["U+1F402"], "🐂", "ox"], [["U+1F403"], "🐃", "water buffalo"], [["U+1F404"], "🐄", "cow"], [["U+1F437"], "🐷", "pig face"], [["U+1F416"], "🐖", "pig"], [["U+1F417"], "🐗", "boar"], [["U+1F43D"], "🐽", "pig nose"], [["U+1F40F"], "🐏", "ram"], [["U+1F411"], "🐑", "ewe"], [["U+1F410"], "🐐", "goat"], [["U+1F42A"], "🐪", "camel"], [["U+1F42B"], "🐫", "two-hump camel"], [["U+1F999"], "🦙", "llama"], [["U+1F992"], "🦒", "giraffe"], [["U+1F418"], "🐘", "elephant"], [["U+1F98F"], "🦏", "rhinoceros"], [["U+1F99B"], "🦛", "hippopotamus"], [["U+1F42D"], "🐭", "mouse face"], [["U+1F401"], "🐁", "mouse"], [["U+1F400"], "🐀", "rat"], [["U+1F439"], "🐹", "hamster"], [["U+1F430"], "🐰", "rabbit face"], [["U+1F407"], "🐇", "rabbit"], [["U+1F43F"], "🐿", "chipmunk"], [["U+1F994"], "🦔", "hedgehog"], [["U+1F987"], "🦇", "bat"], [["U+1F43B"], "🐻", "bear"], [["U+1F43B", "U+200D", "U+2744", "U+FE0F"], "🐻❄️", "⊛ polar bear"], [["U+1F428"], "🐨", "koala"], [["U+1F43C"], "🐼", "panda"], [["U+1F9A5"], "🦥", "sloth"], [["U+1F9A6"], "🦦", "otter"], [["U+1F9A8"], "🦨", "skunk"], [["U+1F998"], "🦘", "kangaroo"], [["U+1F9A1"], "🦡", "badger"], [["U+1F43E"], "🐾", "paw prints"]]], ["animal-bird", [[["U+1F983"], "🦃", "turkey"], [["U+1F414"], "🐔", "chicken"], [["U+1F413"], "🐓", "rooster"], [["U+1F423"], "🐣", "hatching chick"], [["U+1F424"], "🐤", "baby chick"], [["U+1F425"], "🐥", "front-facing baby chick"], [["U+1F426"], "🐦", "bird"], [["U+1F427"], "🐧", "penguin"], [["U+1F54A"], "🕊", "dove"], [["U+1F985"], "🦅", "eagle"], [["U+1F986"], "🦆", "duck"], [["U+1F9A2"], "🦢", "swan"], [["U+1F989"], "🦉", "owl"], [["U+1FAB6"], "🪶", "⊛ feather"], [["U+1F9A9"], "🦩", "flamingo"], [["U+1F99A"], "🦚", "peacock"], [["U+1F99C"], "🦜", "parrot"]]], ["animal-amphibian", [[["U+1F438"], "🐸", "frog"]]], ["animal-reptile", [[["U+1F40A"], "🐊", "crocodile"], [["U+1F422"], "🐢", "turtle"], [["U+1F98E"], "🦎", "lizard"], [["U+1F40D"], "🐍", "snake"], [["U+1F432"], "🐲", "dragon face"], [["U+1F409"], "🐉", "dragon"], [["U+1F995"], "🦕", "sauropod"], [["U+1F996"], "🦖", "T-Rex"]]], ["animal-marine", [[["U+1F433"], "🐳", "spouting whale"], [["U+1F40B"], "🐋", "whale"], [["U+1F42C"], "🐬", "dolphin"], [["U+1F41F"], "🐟", "fish"], [["U+1F420"], "🐠", "tropical fish"], [["U+1F421"], "🐡", "blowfish"], [["U+1F988"], "🦈", "shark"], [["U+1F419"], "🐙", "octopus"], [["U+1F41A"], "🐚", "spiral shell"]]], ["animal-bug", [[["U+1F40C"], "🐌", "snail"], [["U+1F98B"], "🦋", "butterfly"], [["U+1F41B"], "🐛", "bug"], [["U+1F41C"], "🐜", "ant"], [["U+1F41D"], "🐝", "honeybee"], [["U+1F41E"], "🐞", "lady beetle"], [["U+1F997"], "🦗", "cricket"], [["U+1F577"], "🕷", "spider"], [["U+1F578"], "🕸", "spider web"], [["U+1F982"], "🦂", "scorpion"], [["U+1F99F"], "🦟", "mosquito"], [["U+1F9A0"], "🦠", "microbe"]]], ["plant-flower", [[["U+1F490"], "💐", "bouquet"], [["U+1F338"], "🌸", "cherry blossom"], [["U+1F4AE"], "💮", "white flower"], [["U+1F3F5"], "🏵", "rosette"], [["U+1F339"], "🌹", "rose"], [["U+1F940"], "🥀", "wilted flower"], [["U+1F33A"], "🌺", "hibiscus"], [["U+1F33B"], "🌻", "sunflower"], [["U+1F33C"], "🌼", "blossom"], [["U+1F337"], "🌷", "tulip"]]], ["plant-other", [[["U+1F331"], "🌱", "seedling"], [["U+1FAB4"], "🪴", "⊛ potted plant"], [["U+1F332"], "🌲", "evergreen tree"], [["U+1F333"], "🌳", "deciduous tree"], [["U+1F334"], "🌴", "palm tree"], [["U+1F335"], "🌵", "cactus"], [["U+1F33E"], "🌾", "sheaf of rice"], [["U+1F33F"], "🌿", "herb"], [["U+2618"], "☘", "shamrock"], [["U+1F340"], "🍀", "four leaf clover"], [["U+1F341"], "🍁", "maple leaf"], [["U+1F342"], "🍂", "fallen leaf"], [["U+1F343"], "🍃", "leaf fluttering in wind"]]]]], ["Food & Drink", [["food-fruit", [[["U+1F347"], "🍇", "grapes"], [["U+1F348"], "🍈", "melon"], [["U+1F349"], "🍉", "watermelon"], [["U+1F34A"], "🍊", "tangerine"], [["U+1F34B"], "🍋", "lemon"], [["U+1F34C"], "🍌", "banana"], [["U+1F34D"], "🍍", "pineapple"], [["U+1F96D"], "🥭", "mango"], [["U+1F34E"], "🍎", "red apple"], [["U+1F34F"], "🍏", "green apple"], [["U+1F350"], "🍐", "pear"], [["U+1F351"], "🍑", "peach"], [["U+1F352"], "🍒", "cherries"], [["U+1F353"], "🍓", "strawberry"], [["U+1FAD0"], "🫐", "⊛ blueberries"], [["U+1F95D"], "🥝", "kiwi fruit"], [["U+1F345"], "🍅", "tomato"], [["U+1FAD2"], "🫒", "⊛ olive"], [["U+1F965"], "🥥", "coconut"]]], ["food-vegetable", [[["U+1F951"], "🥑", "avocado"], [["U+1F346"], "🍆", "eggplant"], [["U+1F954"], "🥔", "potato"], [["U+1F955"], "🥕", "carrot"], [["U+1F33D"], "🌽", "ear of corn"], [["U+1F336"], "🌶", "hot pepper"], [["U+1F952"], "🥒", "cucumber"], [["U+1F96C"], "🥬", "leafy green"], [["U+1F966"], "🥦", "broccoli"], [["U+1F9C4"], "🧄", "garlic"], [["U+1F9C5"], "🧅", "onion"], [["U+1F344"], "🍄", "mushroom"], [["U+1F95C"], "🥜", "peanuts"], [["U+1F330"], "🌰", "chestnut"]]], ["food-prepared", [[["U+1F35E"], "🍞", "bread"], [["U+1F950"], "🥐", "croissant"], [["U+1F956"], "🥖", "baguette bread"], [["U+1FAD3"], "🫓", "⊛ flatbread"], [["U+1F968"], "🥨", "pretzel"], [["U+1F96F"], "🥯", "bagel"], [["U+1F95E"], "🥞", "pancakes"], [["U+1F9C7"], "🧇", "waffle"], [["U+1F9C0"], "🧀", "cheese wedge"], [["U+1F356"], "🍖", "meat on bone"], [["U+1F357"], "🍗", "poultry leg"], [["U+1F969"], "🥩", "cut of meat"], [["U+1F953"], "🥓", "bacon"], [["U+1F354"], "🍔", "hamburger"], [["U+1F35F"], "🍟", "french fries"], [["U+1F355"], "🍕", "pizza"], [["U+1F32D"], "🌭", "hot dog"], [["U+1F96A"], "🥪", "sandwich"], [["U+1F32E"], "🌮", "taco"], [["U+1F32F"], "🌯", "burrito"], [["U+1FAD4"], "🫔", "⊛ tamale"], [["U+1F959"], "🥙", "stuffed flatbread"], [["U+1F9C6"], "🧆", "falafel"], [["U+1F95A"], "🥚", "egg"], [["U+1F373"], "🍳", "cooking"], [["U+1F958"], "🥘", "shallow pan of food"], [["U+1F372"], "🍲", "pot of food"], [["U+1FAD5"], "🫕", "⊛ fondue"], [["U+1F963"], "🥣", "bowl with spoon"], [["U+1F957"], "🥗", "green salad"], [["U+1F37F"], "🍿", "popcorn"], [["U+1F9C8"], "🧈", "butter"], [["U+1F9C2"], "🧂", "salt"], [["U+1F96B"], "🥫", "canned food"]]], ["food-asian", [[["U+1F371"], "🍱", "bento box"], [["U+1F358"], "🍘", "rice cracker"], [["U+1F359"], "🍙", "rice ball"], [["U+1F35A"], "🍚", "cooked rice"], [["U+1F35B"], "🍛", "curry rice"], [["U+1F35C"], "🍜", "steaming bowl"], [["U+1F35D"], "🍝", "spaghetti"], [["U+1F360"], "🍠", "roasted sweet potato"], [["U+1F362"], "🍢", "oden"], [["U+1F363"], "🍣", "sushi"], [["U+1F364"], "🍤", "fried shrimp"], [["U+1F365"], "🍥", "fish cake with swirl"], [["U+1F96E"], "🥮", "moon cake"], [["U+1F361"], "🍡", "dango"], [["U+1F95F"], "🥟", "dumpling"], [["U+1F960"], "🥠", "fortune cookie"], [["U+1F961"], "🥡", "takeout box"]]], ["food-marine", [[["U+1F980"], "🦀", "crab"], [["U+1F99E"], "🦞", "lobster"], [["U+1F990"], "🦐", "shrimp"], [["U+1F991"], "🦑", "squid"], [["U+1F9AA"], "🦪", "oyster"]]], ["food-sweet", [[["U+1F366"], "🍦", "soft ice cream"], [["U+1F367"], "🍧", "shaved ice"], [["U+1F368"], "🍨", "ice cream"], [["U+1F369"], "🍩", "doughnut"], [["U+1F36A"], "🍪", "cookie"], [["U+1F382"], "🎂", "birthday cake"], [["U+1F370"], "🍰", "shortcake"], [["U+1F9C1"], "🧁", "cupcake"], [["U+1F967"], "🥧", "pie"], [["U+1F36B"], "🍫", "chocolate bar"], [["U+1F36C"], "🍬", "candy"], [["U+1F36D"], "🍭", "lollipop"], [["U+1F36E"], "🍮", "custard"], [["U+1F36F"], "🍯", "honey pot"]]], ["drink", [[["U+1F37C"], "🍼", "baby bottle"], [["U+1F95B"], "🥛", "glass of milk"], [["U+2615"], "☕", "hot beverage"], [["U+1F375"], "🍵", "teacup without handle"], [["U+1F376"], "🍶", "sake"], [["U+1F37E"], "🍾", "bottle with popping cork"], [["U+1F377"], "🍷", "wine glass"], [["U+1F378"], "🍸", "cocktail glass"], [["U+1F379"], "🍹", "tropical drink"], [["U+1F37A"], "🍺", "beer mug"], [["U+1F37B"], "🍻", "clinking beer mugs"], [["U+1F942"], "🥂", "clinking glasses"], [["U+1F943"], "🥃", "tumbler glass"], [["U+1F964"], "🥤", "cup with straw"], [["U+1F9CB"], "🧋", "⊛ bubble tea"], [["U+1F9C3"], "🧃", "beverage box"], [["U+1F9C9"], "🧉", "mate"], [["U+1F9CA"], "🧊", "ice"]]], ["dishware", [[["U+1F962"], "🥢", "chopsticks"], [["U+1F37D"], "🍽", "fork and knife with plate"], [["U+1F374"], "🍴", "fork and knife"], [["U+1F944"], "🥄", "spoon"], [["U+1F52A"], "🔪", "kitchen knife"], [["U+1F3FA"], "🏺", "amphora"]]]]], ["Travel & Places", [["place-map", [[["U+1F30D"], "🌍", "globe showing Europe-Africa"], [["U+1F30E"], "🌎", "globe showing Americas"], [["U+1F30F"], "🌏", "globe showing Asia-Australia"], [["U+1F310"], "🌐", "globe with meridians"], [["U+1F5FA"], "🗺", "world map"], [["U+1F5FE"], "🗾", "map of Japan"], [["U+1F9ED"], "🧭", "compass"]]], ["place-geographic", [[["U+1F3D4"], "🏔", "snow-capped mountain"], [["U+26F0"], "⛰", "mountain"], [["U+1F30B"], "🌋", "volcano"], [["U+1F5FB"], "🗻", "mount fuji"], [["U+1F3D5"], "🏕", "camping"], [["U+1F3D6"], "🏖", "beach with umbrella"], [["U+1F3DC"], "🏜", "desert"], [["U+1F3DD"], "🏝", "desert island"], [["U+1F3DE"], "🏞", "national park"]]], ["place-building", [[["U+1F3DF"], "🏟", "stadium"], [["U+1F3DB"], "🏛", "classical building"], [["U+1F3D7"], "🏗", "building construction"], [["U+1F9F1"], "🧱", "brick"], [["U+1FAA8"], "🪨", "⊛ rock"], [["U+1FAB5"], "🪵", "⊛ wood"], [["U+1F3D8"], "🏘", "houses"], [["U+1F3DA"], "🏚", "derelict house"], [["U+1F3E0"], "🏠", "house"], [["U+1F3E1"], "🏡", "house with garden"], [["U+1F3E2"], "🏢", "office building"], [["U+1F3E3"], "🏣", "Japanese post office"], [["U+1F3E4"], "🏤", "post office"], [["U+1F3E5"], "🏥", "hospital"], [["U+1F3E6"], "🏦", "bank"], [["U+1F3E8"], "🏨", "hotel"], [["U+1F3E9"], "🏩", "love hotel"], [["U+1F3EA"], "🏪", "convenience store"], [["U+1F3EB"], "🏫", "school"], [["U+1F3EC"], "🏬", "department store"], [["U+1F3ED"], "🏭", "factory"], [["U+1F3EF"], "🏯", "Japanese castle"], [["U+1F3F0"], "🏰", "castle"], [["U+1F492"], "💒", "wedding"], [["U+1F5FC"], "🗼", "Tokyo tower"], [["U+1F5FD"], "🗽", "Statue of Liberty"]]], ["place-religious", [[["U+26EA"], "⛪", "church"], [["U+1F54C"], "🕌", "mosque"], [["U+1F6D5"], "🛕", "hindu temple"], [["U+1F54D"], "🕍", "synagogue"], [["U+26E9"], "⛩", "shinto shrine"], [["U+1F54B"], "🕋", "kaaba"]]], ["place-other", [[["U+26F2"], "⛲", "fountain"], [["U+26FA"], "⛺", "tent"], [["U+1F301"], "🌁", "foggy"], [["U+1F303"], "🌃", "night with stars"], [["U+1F3D9"], "🏙", "cityscape"], [["U+1F304"], "🌄", "sunrise over mountains"], [["U+1F305"], "🌅", "sunrise"], [["U+1F306"], "🌆", "cityscape at dusk"], [["U+1F307"], "🌇", "sunset"], [["U+1F309"], "🌉", "bridge at night"], [["U+2668"], "♨", "hot springs"], [["U+1F3A0"], "🎠", "carousel horse"], [["U+1F3A1"], "🎡", "ferris wheel"], [["U+1F3A2"], "🎢", "roller coaster"], [["U+1F488"], "💈", "barber pole"], [["U+1F3AA"], "🎪", "circus tent"]]], ["transport-ground", [[["U+1F682"], "🚂", "locomotive"], [["U+1F683"], "🚃", "railway car"], [["U+1F684"], "🚄", "high-speed train"], [["U+1F685"], "🚅", "bullet train"], [["U+1F686"], "🚆", "train"], [["U+1F687"], "🚇", "metro"], [["U+1F688"], "🚈", "light rail"], [["U+1F689"], "🚉", "station"], [["U+1F68A"], "🚊", "tram"], [["U+1F69D"], "🚝", "monorail"], [["U+1F69E"], "🚞", "mountain railway"], [["U+1F68B"], "🚋", "tram car"], [["U+1F68C"], "🚌", "bus"], [["U+1F68D"], "🚍", "oncoming bus"], [["U+1F68E"], "🚎", "trolleybus"], [["U+1F690"], "🚐", "minibus"], [["U+1F691"], "🚑", "ambulance"], [["U+1F692"], "🚒", "fire engine"], [["U+1F693"], "🚓", "police car"], [["U+1F694"], "🚔", "oncoming police car"], [["U+1F695"], "🚕", "taxi"], [["U+1F696"], "🚖", "oncoming taxi"], [["U+1F697"], "🚗", "automobile"], [["U+1F698"], "🚘", "oncoming automobile"], [["U+1F699"], "🚙", "sport utility vehicle"], [["U+1F69A"], "🚚", "delivery truck"], [["U+1F69B"], "🚛", "articulated lorry"], [["U+1F69C"], "🚜", "tractor"], [["U+1F3CE"], "🏎", "racing car"], [["U+1F3CD"], "🏍", "motorcycle"], [["U+1F6F5"], "🛵", "motor scooter"], [["U+1F9BD"], "🦽", "manual wheelchair"], [["U+1F9BC"], "🦼", "motorized wheelchair"], [["U+1F6FA"], "🛺", "auto rickshaw"], [["U+1F6B2"], "🚲", "bicycle"], [["U+1F6F4"], "🛴", "kick scooter"], [["U+1F6F9"], "🛹", "skateboard"], [["U+1F6FC"], "🛼", "⊛ roller skate"], [["U+1F68F"], "🚏", "bus stop"], [["U+1F6E3"], "🛣", "motorway"], [["U+1F6E4"], "🛤", "railway track"], [["U+1F6E2"], "🛢", "oil drum"], [["U+26FD"], "⛽", "fuel pump"], [["U+1F6A8"], "🚨", "police car light"], [["U+1F6A5"], "🚥", "horizontal traffic light"], [["U+1F6A6"], "🚦", "vertical traffic light"], [["U+1F6D1"], "🛑", "stop sign"], [["U+1F6A7"], "🚧", "construction"]]], ["transport-water", [[["U+2693"], "⚓", "anchor"], [["U+26F5"], "⛵", "sailboat"], [["U+1F6F6"], "🛶", "canoe"], [["U+1F6A4"], "🚤", "speedboat"], [["U+1F6F3"], "🛳", "passenger ship"], [["U+26F4"], "⛴", "ferry"], [["U+1F6E5"], "🛥", "motor boat"], [["U+1F6A2"], "🚢", "ship"]]], ["transport-air", [[["U+2708"], "✈", "airplane"], [["U+1F6E9"], "🛩", "small airplane"], [["U+1F6EB"], "🛫", "airplane departure"], [["U+1F6EC"], "🛬", "airplane arrival"], [["U+1FA82"], "🪂", "parachute"], [["U+1F4BA"], "💺", "seat"], [["U+1F681"], "🚁", "helicopter"], [["U+1F69F"], "🚟", "suspension railway"], [["U+1F6A0"], "🚠", "mountain cableway"], [["U+1F6A1"], "🚡", "aerial tramway"], [["U+1F6F0"], "🛰", "satellite"], [["U+1F680"], "🚀", "rocket"], [["U+1F6F8"], "🛸", "flying saucer"]]], ["hotel", [[["U+1F6CE"], "🛎", "bellhop bell"], [["U+1F9F3"], "🧳", "luggage"]]], ["time", [[["U+231B"], "⌛", "hourglass done"], [["U+23F3"], "⏳", "hourglass not done"], [["U+231A"], "⌚", "watch"], [["U+23F0"], "⏰", "alarm clock"], [["U+23F1"], "⏱", "stopwatch"], [["U+23F2"], "⏲", "timer clock"], [["U+1F570"], "🕰", "mantelpiece clock"], [["U+1F55B"], "🕛", "twelve o’clock"], [["U+1F567"], "🕧", "twelve-thirty"], [["U+1F550"], "🕐", "one o’clock"], [["U+1F55C"], "🕜", "one-thirty"], [["U+1F551"], "🕑", "two o’clock"], [["U+1F55D"], "🕝", "two-thirty"], [["U+1F552"], "🕒", "three o’clock"], [["U+1F55E"], "🕞", "three-thirty"], [["U+1F553"], "🕓", "four o’clock"], [["U+1F55F"], "🕟", "four-thirty"], [["U+1F554"], "🕔", "five o’clock"], [["U+1F560"], "🕠", "five-thirty"], [["U+1F555"], "🕕", "six o’clock"], [["U+1F561"], "🕡", "six-thirty"], [["U+1F556"], "🕖", "seven o’clock"], [["U+1F562"], "🕢", "seven-thirty"], [["U+1F557"], "🕗", "eight o’clock"], [["U+1F563"], "🕣", "eight-thirty"], [["U+1F558"], "🕘", "nine o’clock"], [["U+1F564"], "🕤", "nine-thirty"], [["U+1F559"], "🕙", "ten o’clock"], [["U+1F565"], "🕥", "ten-thirty"], [["U+1F55A"], "🕚", "eleven o’clock"], [["U+1F566"], "🕦", "eleven-thirty"]]], ["sky & weather", [[["U+1F311"], "🌑", "new moon"], [["U+1F312"], "🌒", "waxing crescent moon"], [["U+1F313"], "🌓", "first quarter moon"], [["U+1F314"], "🌔", "waxing gibbous moon"], [["U+1F315"], "🌕", "full moon"], [["U+1F316"], "🌖", "waning gibbous moon"], [["U+1F317"], "🌗", "last quarter moon"], [["U+1F318"], "🌘", "waning crescent moon"], [["U+1F319"], "🌙", "crescent moon"], [["U+1F31A"], "🌚", "new moon face"], [["U+1F31B"], "🌛", "first quarter moon face"], [["U+1F31C"], "🌜", "last quarter moon face"], [["U+1F321"], "🌡", "thermometer"], [["U+2600"], "☀", "sun"], [["U+1F31D"], "🌝", "full moon face"], [["U+1F31E"], "🌞", "sun with face"], [["U+1FA90"], "🪐", "ringed planet"], [["U+2B50"], "⭐", "star"], [["U+1F31F"], "🌟", "glowing star"], [["U+1F320"], "🌠", "shooting star"], [["U+1F30C"], "🌌", "milky way"], [["U+2601"], "☁", "cloud"], [["U+26C5"], "⛅", "sun behind cloud"], [["U+26C8"], "⛈", "cloud with lightning and rain"], [["U+1F324"], "🌤", "sun behind small cloud"], [["U+1F325"], "🌥", "sun behind large cloud"], [["U+1F326"], "🌦", "sun behind rain cloud"], [["U+1F327"], "🌧", "cloud with rain"], [["U+1F328"], "🌨", "cloud with snow"], [["U+1F329"], "🌩", "cloud with lightning"], [["U+1F32A"], "🌪", "tornado"], [["U+1F32B"], "🌫", "fog"], [["U+1F32C"], "🌬", "wind face"], [["U+1F300"], "🌀", "cyclone"], [["U+1F308"], "🌈", "rainbow"], [["U+1F302"], "🌂", "closed umbrella"], [["U+2602"], "☂", "umbrella"], [["U+2614"], "☔", "umbrella with rain drops"], [["U+26F1"], "⛱", "umbrella on ground"], [["U+26A1"], "⚡", "high voltage"], [["U+2744"], "❄", "snowflake"], [["U+2603"], "☃", "snowman"], [["U+26C4"], "⛄", "snowman without snow"], [["U+2604"], "☄", "comet"], [["U+1F525"], "🔥", "fire"], [["U+1F4A7"], "💧", "droplet"], [["U+1F30A"], "🌊", "water wave"]]]]], ["Activities", [["event", [[["U+1F383"], "🎃", "jack-o-lantern"], [["U+1F384"], "🎄", "Christmas tree"], [["U+1F386"], "🎆", "fireworks"], [["U+1F387"], "🎇", "sparkler"], [["U+1F9E8"], "🧨", "firecracker"], [["U+2728"], "✨", "sparkles"], [["U+1F388"], "🎈", "balloon"], [["U+1F389"], "🎉", "party popper"], [["U+1F38A"], "🎊", "confetti ball"], [["U+1F38B"], "🎋", "tanabata tree"], [["U+1F38D"], "🎍", "pine decoration"], [["U+1F38E"], "🎎", "Japanese dolls"], [["U+1F38F"], "🎏", "carp streamer"], [["U+1F390"], "🎐", "wind chime"], [["U+1F391"], "🎑", "moon viewing ceremony"], [["U+1F9E7"], "🧧", "red envelope"], [["U+1F380"], "🎀", "ribbon"], [["U+1F381"], "🎁", "wrapped gift"], [["U+1F397"], "🎗", "reminder ribbon"], [["U+1F39F"], "🎟", "admission tickets"], [["U+1F3AB"], "🎫", "ticket"]]], ["award-medal", [[["U+1F396"], "🎖", "military medal"], [["U+1F3C6"], "🏆", "trophy"], [["U+1F3C5"], "🏅", "sports medal"], [["U+1F947"], "🥇", "1st place medal"], [["U+1F948"], "🥈", "2nd place medal"], [["U+1F949"], "🥉", "3rd place medal"]]], ["sport", [[["U+26BD"], "⚽", "soccer ball"], [["U+26BE"], "⚾", "baseball"], [["U+1F94E"], "🥎", "softball"], [["U+1F3C0"], "🏀", "basketball"], [["U+1F3D0"], "🏐", "volleyball"], [["U+1F3C8"], "🏈", "american football"], [["U+1F3C9"], "🏉", "rugby football"], [["U+1F3BE"], "🎾", "tennis"], [["U+1F94F"], "🥏", "flying disc"], [["U+1F3B3"], "🎳", "bowling"], [["U+1F3CF"], "🏏", "cricket game"], [["U+1F3D1"], "🏑", "field hockey"], [["U+1F3D2"], "🏒", "ice hockey"], [["U+1F94D"], "🥍", "lacrosse"], [["U+1F3D3"], "🏓", "ping pong"], [["U+1F3F8"], "🏸", "badminton"], [["U+1F94A"], "🥊", "boxing glove"], [["U+1F94B"], "🥋", "martial arts uniform"], [["U+1F945"], "🥅", "goal net"], [["U+26F3"], "⛳", "flag in hole"], [["U+26F8"], "⛸", "ice skate"], [["U+1F3A3"], "🎣", "fishing pole"], [["U+1F93F"], "🤿", "diving mask"], [["U+1F3BD"], "🎽", "running shirt"], [["U+1F3BF"], "🎿", "skis"], [["U+1F6F7"], "🛷", "sled"], [["U+1F94C"], "🥌", "curling stone"]]], ["game", [[["U+1F3AF"], "🎯", "direct hit"], [["U+1FA80"], "🪀", "yo-yo"], [["U+1FA81"], "🪁", "kite"], [["U+1F3B1"], "🎱", "pool 8 ball"], [["U+1F52E"], "🔮", "crystal ball"], [["U+1FA84"], "🪄", "⊛ magic wand"], [["U+1F9FF"], "🧿", "nazar amulet"], [["U+1F3AE"], "🎮", "video game"], [["U+1F579"], "🕹", "joystick"], [["U+1F3B0"], "🎰", "slot machine"], [["U+1F3B2"], "🎲", "game die"], [["U+1F9E9"], "🧩", "puzzle piece"], [["U+1F9F8"], "🧸", "teddy bear"], [["U+1FA85"], "🪅", "⊛ piñata"], [["U+1FA86"], "🪆", "⊛ nesting dolls"], [["U+2660"], "♠", "spade suit"], [["U+2665"], "♥", "heart suit"], [["U+2666"], "♦", "diamond suit"], [["U+2663"], "♣", "club suit"], [["U+265F"], "♟", "chess pawn"], [["U+1F0CF"], "🃏", "joker"], [["U+1F004"], "🀄", "mahjong red dragon"], [["U+1F3B4"], "🎴", "flower playing cards"]]], ["arts & crafts", [[["U+1F3AD"], "🎭", "performing arts"], [["U+1F5BC"], "🖼", "framed picture"], [["U+1F3A8"], "🎨", "artist palette"], [["U+1F9F5"], "🧵", "thread"], [["U+1FAA1"], "🪡", "⊛ sewing needle"], [["U+1F9F6"], "🧶", "yarn"], [["U+1FAA2"], "🪢", "⊛ knot"]]]]], ["Objects", [["clothing", [[["U+1F453"], "👓", "glasses"], [["U+1F576"], "🕶", "sunglasses"], [["U+1F97D"], "🥽", "goggles"], [["U+1F97C"], "🥼", "lab coat"], [["U+1F9BA"], "🦺", "safety vest"], [["U+1F454"], "👔", "necktie"], [["U+1F455"], "👕", "t-shirt"], [["U+1F456"], "👖", "jeans"], [["U+1F9E3"], "🧣", "scarf"], [["U+1F9E4"], "🧤", "gloves"], [["U+1F9E5"], "🧥", "coat"], [["U+1F9E6"], "🧦", "socks"], [["U+1F457"], "👗", "dress"], [["U+1F458"], "👘", "kimono"], [["U+1F97B"], "🥻", "sari"], [["U+1FA71"], "🩱", "one-piece swimsuit"], [["U+1FA72"], "🩲", "briefs"], [["U+1FA73"], "🩳", "shorts"], [["U+1F459"], "👙", "bikini"], [["U+1F45A"], "👚", "woman’s clothes"], [["U+1F45B"], "👛", "purse"], [["U+1F45C"], "👜", "handbag"], [["U+1F45D"], "👝", "clutch bag"], [["U+1F6CD"], "🛍", "shopping bags"], [["U+1F392"], "🎒", "backpack"], [["U+1FA74"], "🩴", "⊛ thong sandal"], [["U+1F45E"], "👞", "man’s shoe"], [["U+1F45F"], "👟", "running shoe"], [["U+1F97E"], "🥾", "hiking boot"], [["U+1F97F"], "🥿", "flat shoe"], [["U+1F460"], "👠", "high-heeled shoe"], [["U+1F461"], "👡", "woman’s sandal"], [["U+1FA70"], "🩰", "ballet shoes"], [["U+1F462"], "👢", "woman’s boot"], [["U+1F451"], "👑", "crown"], [["U+1F452"], "👒", "woman’s hat"], [["U+1F3A9"], "🎩", "top hat"], [["U+1F393"], "🎓", "graduation cap"], [["U+1F9E2"], "🧢", "billed cap"], [["U+1FA96"], "🪖", "⊛ military helmet"], [["U+26D1"], "⛑", "rescue worker’s helmet"], [["U+1F4FF"], "📿", "prayer beads"], [["U+1F484"], "💄", "lipstick"], [["U+1F48D"], "💍", "ring"], [["U+1F48E"], "💎", "gem stone"]]], ["sound", [[["U+1F507"], "🔇", "muted speaker"], [["U+1F508"], "🔈", "speaker low volume"], [["U+1F509"], "🔉", "speaker medium volume"], [["U+1F50A"], "🔊", "speaker high volume"], [["U+1F4E2"], "📢", "loudspeaker"], [["U+1F4E3"], "📣", "megaphone"], [["U+1F4EF"], "📯", "postal horn"], [["U+1F514"], "🔔", "bell"], [["U+1F515"], "🔕", "bell with slash"]]], ["music", [[["U+1F3BC"], "🎼", "musical score"], [["U+1F3B5"], "🎵", "musical note"], [["U+1F3B6"], "🎶", "musical notes"], [["U+1F399"], "🎙", "studio microphone"], [["U+1F39A"], "🎚", "level slider"], [["U+1F39B"], "🎛", "control knobs"], [["U+1F3A4"], "🎤", "microphone"], [["U+1F3A7"], "🎧", "headphone"], [["U+1F4FB"], "📻", "radio"]]], ["musical-instrument", [[["U+1F3B7"], "🎷", "saxophone"], [["U+1FA97"], "🪗", "⊛ accordion"], [["U+1F3B8"], "🎸", "guitar"], [["U+1F3B9"], "🎹", "musical keyboard"], [["U+1F3BA"], "🎺", "trumpet"], [["U+1F3BB"], "🎻", "violin"], [["U+1FA95"], "🪕", "banjo"], [["U+1F941"], "🥁", "drum"], [["U+1FA98"], "🪘", "⊛ long drum"]]], ["phone", [[["U+1F4F1"], "📱", "mobile phone"], [["U+1F4F2"], "📲", "mobile phone with arrow"], [["U+260E"], "☎", "telephone"], [["U+1F4DE"], "📞", "telephone receiver"], [["U+1F4DF"], "📟", "pager"], [["U+1F4E0"], "📠", "fax machine"]]], ["computer", [[["U+1F50B"], "🔋", "battery"], [["U+1F50C"], "🔌", "electric plug"], [["U+1F4BB"], "💻", "laptop"], [["U+1F5A5"], "🖥", "desktop computer"], [["U+1F5A8"], "🖨", "printer"], [["U+2328"], "⌨", "keyboard"], [["U+1F5B1"], "🖱", "computer mouse"], [["U+1F5B2"], "🖲", "trackball"], [["U+1F4BD"], "💽", "computer disk"], [["U+1F4BE"], "💾", "floppy disk"], [["U+1F4BF"], "💿", "optical disk"], [["U+1F4C0"], "📀", "dvd"], [["U+1F9EE"], "🧮", "abacus"]]], ["light & video", [[["U+1F3A5"], "🎥", "movie camera"], [["U+1F39E"], "🎞", "film frames"], [["U+1F4FD"], "📽", "film projector"], [["U+1F3AC"], "🎬", "clapper board"], [["U+1F4FA"], "📺", "television"], [["U+1F4F7"], "📷", "camera"], [["U+1F4F8"], "📸", "camera with flash"], [["U+1F4F9"], "📹", "video camera"], [["U+1F4FC"], "📼", "videocassette"], [["U+1F50D"], "🔍", "magnifying glass tilted left"], [["U+1F50E"], "🔎", "magnifying glass tilted right"], [["U+1F56F"], "🕯", "candle"], [["U+1F4A1"], "💡", "light bulb"], [["U+1F526"], "🔦", "flashlight"], [["U+1F3EE"], "🏮", "red paper lantern"], [["U+1FA94"], "🪔", "diya lamp"]]], ["book-paper", [[["U+1F4D4"], "📔", "notebook with decorative cover"], [["U+1F4D5"], "📕", "closed book"], [["U+1F4D6"], "📖", "open book"], [["U+1F4D7"], "📗", "green book"], [["U+1F4D8"], "📘", "blue book"], [["U+1F4D9"], "📙", "orange book"], [["U+1F4DA"], "📚", "books"], [["U+1F4D3"], "📓", "notebook"], [["U+1F4D2"], "📒", "ledger"], [["U+1F4C3"], "📃", "page with curl"], [["U+1F4DC"], "📜", "scroll"], [["U+1F4C4"], "📄", "page facing up"], [["U+1F4F0"], "📰", "newspaper"], [["U+1F5DE"], "🗞", "rolled-up newspaper"], [["U+1F4D1"], "📑", "bookmark tabs"], [["U+1F516"], "🔖", "bookmark"], [["U+1F3F7"], "🏷", "label"]]], ["money", [[["U+1F4B0"], "💰", "money bag"], [["U+1FA99"], "🪙", "⊛ coin"], [["U+1F4B4"], "💴", "yen banknote"], [["U+1F4B5"], "💵", "dollar banknote"], [["U+1F4B6"], "💶", "euro banknote"], [["U+1F4B7"], "💷", "pound banknote"], [["U+1F4B8"], "💸", "money with wings"], [["U+1F4B3"], "💳", "credit card"], [["U+1F9FE"], "🧾", "receipt"], [["U+1F4B9"], "💹", "chart increasing with yen"]]], ["mail", [[["U+2709"], "✉", "envelope"], [["U+1F4E7"], "📧", "e-mail"], [["U+1F4E8"], "📨", "incoming envelope"], [["U+1F4E9"], "📩", "envelope with arrow"], [["U+1F4E4"], "📤", "outbox tray"], [["U+1F4E5"], "📥", "inbox tray"], [["U+1F4E6"], "📦", "package"], [["U+1F4EB"], "📫", "closed mailbox with raised flag"], [["U+1F4EA"], "📪", "closed mailbox with lowered flag"], [["U+1F4EC"], "📬", "open mailbox with raised flag"], [["U+1F4ED"], "📭", "open mailbox with lowered flag"], [["U+1F4EE"], "📮", "postbox"], [["U+1F5F3"], "🗳", "ballot box with ballot"]]], ["writing", [[["U+270F"], "✏", "pencil"], [["U+2712"], "✒", "black nib"], [["U+1F58B"], "🖋", "fountain pen"], [["U+1F58A"], "🖊", "pen"], [["U+1F58C"], "🖌", "paintbrush"], [["U+1F58D"], "🖍", "crayon"], [["U+1F4DD"], "📝", "memo"]]], ["office", [[["U+1F4BC"], "💼", "briefcase"], [["U+1F4C1"], "📁", "file folder"], [["U+1F4C2"], "📂", "open file folder"], [["U+1F5C2"], "🗂", "card index dividers"], [["U+1F4C5"], "📅", "calendar"], [["U+1F4C6"], "📆", "tear-off calendar"], [["U+1F5D2"], "🗒", "spiral notepad"], [["U+1F5D3"], "🗓", "spiral calendar"], [["U+1F4C7"], "📇", "card index"], [["U+1F4C8"], "📈", "chart increasing"], [["U+1F4C9"], "📉", "chart decreasing"], [["U+1F4CA"], "📊", "bar chart"], [["U+1F4CB"], "📋", "clipboard"], [["U+1F4CC"], "📌", "pushpin"], [["U+1F4CD"], "📍", "round pushpin"], [["U+1F4CE"], "📎", "paperclip"], [["U+1F587"], "🖇", "linked paperclips"], [["U+1F4CF"], "📏", "straight ruler"], [["U+1F4D0"], "📐", "triangular ruler"], [["U+2702"], "✂", "scissors"], [["U+1F5C3"], "🗃", "card file box"], [["U+1F5C4"], "🗄", "file cabinet"], [["U+1F5D1"], "🗑", "wastebasket"]]], ["lock", [[["U+1F512"], "🔒", "locked"], [["U+1F513"], "🔓", "unlocked"], [["U+1F50F"], "🔏", "locked with pen"], [["U+1F510"], "🔐", "locked with key"], [["U+1F511"], "🔑", "key"], [["U+1F5DD"], "🗝", "old key"]]], ["tool", [[["U+1F528"], "🔨", "hammer"], [["U+1FA93"], "🪓", "axe"], [["U+26CF"], "⛏", "pick"], [["U+2692"], "⚒", "hammer and pick"], [["U+1F6E0"], "🛠", "hammer and wrench"], [["U+1F5E1"], "🗡", "dagger"], [["U+2694"], "⚔", "crossed swords"], [["U+1F52B"], "🔫", "pistol"], [["U+1FA83"], "🪃", "⊛ boomerang"], [["U+1F3F9"], "🏹", "bow and arrow"], [["U+1F6E1"], "🛡", "shield"], [["U+1F527"], "🔧", "wrench"], [["U+1FA9B"], "🪛", "⊛ screwdriver"], [["U+1F529"], "🔩", "nut and bolt"], [["U+2699"], "⚙", "gear"], [["U+1F5DC"], "🗜", "clamp"], [["U+2696"], "⚖", "balance scale"], [["U+1F9AF"], "🦯", "white cane"], [["U+1F517"], "🔗", "link"], [["U+26D3"], "⛓", "chains"], [["U+1FA9D"], "🪝", "⊛ hook"], [["U+1F9F0"], "🧰", "toolbox"], [["U+1F9F2"], "🧲", "magnet"], [["U+1FA9C"], "🪜", "⊛ ladder"]]], ["science", [[["U+2697"], "⚗", "alembic"], [["U+1F9EA"], "🧪", "test tube"], [["U+1F9EB"], "🧫", "petri dish"], [["U+1F9EC"], "🧬", "dna"], [["U+1F52C"], "🔬", "microscope"], [["U+1F52D"], "🔭", "telescope"], [["U+1F4E1"], "📡", "satellite antenna"]]], ["medical", [[["U+1F489"], "💉", "syringe"], [["U+1FA78"], "🩸", "drop of blood"], [["U+1F48A"], "💊", "pill"], [["U+1FA79"], "🩹", "adhesive bandage"], [["U+1FA7A"], "🩺", "stethoscope"]]], ["household", [[["U+1F6AA"], "🚪", "door"], [["U+1F6D7"], "🛗", "⊛ elevator"], [["U+1F6CF"], "🛏", "bed"], [["U+1F6CB"], "🛋", "couch and lamp"], [["U+1FA91"], "🪑", "chair"], [["U+1F6BD"], "🚽", "toilet"], [["U+1FAA0"], "🪠", "⊛ plunger"], [["U+1F6BF"], "🚿", "shower"], [["U+1F6C1"], "🛁", "bathtub"], [["U+1FA92"], "🪒", "razor"], [["U+1F9F4"], "🧴", "lotion bottle"], [["U+1F9F7"], "🧷", "safety pin"], [["U+1F9F9"], "🧹", "broom"], [["U+1F9FA"], "🧺", "basket"], [["U+1F9FB"], "🧻", "roll of paper"], [["U+1FAA3"], "🪣", "⊛ bucket"], [["U+1F9FC"], "🧼", "soap"], [["U+1FAA5"], "🪥", "⊛ toothbrush"], [["U+1F9FD"], "🧽", "sponge"], [["U+1F9EF"], "🧯", "fire extinguisher"], [["U+1F6D2"], "🛒", "shopping cart"]]], ["other-object", [[["U+1F6AC"], "🚬", "cigarette"], [["U+26B0"], "⚰", "coffin"], [["U+26B1"], "⚱", "funeral urn"], [["U+1F5FF"], "🗿", "moai"], [["U+1FAA7"], "🪧", "⊛ placard"]]]]], ["Symbols", [["transport-sign", [[["U+1F3E7"], "🏧", "ATM sign"], [["U+1F6AE"], "🚮", "litter in bin sign"], [["U+1F6B0"], "🚰", "potable water"], [["U+267F"], "♿", "wheelchair symbol"], [["U+1F6B9"], "🚹", "men’s room"], [["U+1F6BA"], "🚺", "women’s room"], [["U+1F6BB"], "🚻", "restroom"], [["U+1F6BC"], "🚼", "baby symbol"], [["U+1F6BE"], "🚾", "water closet"], [["U+1F6C2"], "🛂", "passport control"], [["U+1F6C3"], "🛃", "customs"], [["U+1F6C4"], "🛄", "baggage claim"], [["U+1F6C5"], "🛅", "left luggage"]]], ["warning", [[["U+26A0"], "⚠", "warning"], [["U+1F6B8"], "🚸", "children crossing"], [["U+26D4"], "⛔", "no entry"], [["U+1F6AB"], "🚫", "prohibited"], [["U+1F6B3"], "🚳", "no bicycles"], [["U+1F6AD"], "🚭", "no smoking"], [["U+1F6AF"], "🚯", "no littering"], [["U+1F6B1"], "🚱", "non-potable water"], [["U+1F6B7"], "🚷", "no pedestrians"], [["U+1F4F5"], "📵", "no mobile phones"], [["U+1F51E"], "🔞", "no one under eighteen"], [["U+2622"], "☢", "radioactive"], [["U+2623"], "☣", "biohazard"]]], ["arrow", [[["U+2B06"], "⬆", "up arrow"], [["U+2197"], "↗", "up-right arrow"], [["U+27A1"], "➡", "right arrow"], [["U+2198"], "↘", "down-right arrow"], [["U+2B07"], "⬇", "down arrow"], [["U+2199"], "↙", "down-left arrow"], [["U+2B05"], "⬅", "left arrow"], [["U+2196"], "↖", "up-left arrow"], [["U+2195"], "↕", "up-down arrow"], [["U+2194"], "↔", "left-right arrow"], [["U+21A9"], "↩", "right arrow curving left"], [["U+21AA"], "↪", "left arrow curving right"], [["U+2934"], "⤴", "right arrow curving up"], [["U+2935"], "⤵", "right arrow curving down"], [["U+1F503"], "🔃", "clockwise vertical arrows"], [["U+1F504"], "🔄", "counterclockwise arrows button"], [["U+1F519"], "🔙", "BACK arrow"], [["U+1F51A"], "🔚", "END arrow"], [["U+1F51B"], "🔛", "ON! arrow"], [["U+1F51C"], "🔜", "SOON arrow"], [["U+1F51D"], "🔝", "TOP arrow"]]], ["religion", [[["U+1F6D0"], "🛐", "place of worship"], [["U+269B"], "⚛", "atom symbol"], [["U+1F549"], "🕉", "om"], [["U+2721"], "✡", "star of David"], [["U+2638"], "☸", "wheel of dharma"], [["U+262F"], "☯", "yin yang"], [["U+271D"], "✝", "latin cross"], [["U+2626"], "☦", "orthodox cross"], [["U+262A"], "☪", "star and crescent"], [["U+262E"], "☮", "peace symbol"], [["U+1F54E"], "🕎", "menorah"], [["U+1F52F"], "🔯", "dotted six-pointed star"]]], ["zodiac", [[["U+2648"], "♈", "Aries"], [["U+2649"], "♉", "Taurus"], [["U+264A"], "♊", "Gemini"], [["U+264B"], "♋", "Cancer"], [["U+264C"], "♌", "Leo"], [["U+264D"], "♍", "Virgo"], [["U+264E"], "♎", "Libra"], [["U+264F"], "♏", "Scorpio"], [["U+2650"], "♐", "Sagittarius"], [["U+2651"], "♑", "Capricorn"], [["U+2652"], "♒", "Aquarius"], [["U+2653"], "♓", "Pisces"], [["U+26CE"], "⛎", "Ophiuchus"]]], ["av-symbol", [[["U+1F500"], "🔀", "shuffle tracks button"], [["U+1F501"], "🔁", "repeat button"], [["U+1F502"], "🔂", "repeat single button"], [["U+25B6"], "▶", "play button"], [["U+23E9"], "⏩", "fast-forward button"], [["U+23ED"], "⏭", "next track button"], [["U+23EF"], "⏯", "play or pause button"], [["U+25C0"], "◀", "reverse button"], [["U+23EA"], "⏪", "fast reverse button"], [["U+23EE"], "⏮", "last track button"], [["U+1F53C"], "🔼", "upwards button"], [["U+23EB"], "⏫", "fast up button"], [["U+1F53D"], "🔽", "downwards button"], [["U+23EC"], "⏬", "fast down button"], [["U+23F8"], "⏸", "pause button"], [["U+23F9"], "⏹", "stop button"], [["U+23FA"], "⏺", "record button"], [["U+23CF"], "⏏", "eject button"], [["U+1F3A6"], "🎦", "cinema"], [["U+1F505"], "🔅", "dim button"], [["U+1F506"], "🔆", "bright button"], [["U+1F4F6"], "📶", "antenna bars"], [["U+1F4F3"], "📳", "vibration mode"], [["U+1F4F4"], "📴", "mobile phone off"]]], ["gender", [[["U+2640"], "♀", "female sign"], [["U+2642"], "♂", "male sign"], [["U+26A7"], "⚧", "⊛ transgender symbol"]]], ["math", [[["U+2716"], "✖", "multiply"], [["U+2795"], "➕", "plus"], [["U+2796"], "➖", "minus"], [["U+2797"], "➗", "divide"], [["U+267E"], "♾", "infinity"]]], ["punctuation", [[["U+203C"], "‼", "double exclamation mark"], [["U+2049"], "⁉", "exclamation question mark"], [["U+2753"], "❓", "question mark"], [["U+2754"], "❔", "white question mark"], [["U+2755"], "❕", "white exclamation mark"], [["U+2757"], "❗", "exclamation mark"], [["U+3030"], "〰", "wavy dash"]]], ["currency", [[["U+1F4B1"], "💱", "currency exchange"], [["U+1F4B2"], "💲", "heavy dollar sign"]]], ["other-symbol", [[["U+2695"], "⚕", "medical symbol"], [["U+267B"], "♻", "recycling symbol"], [["U+269C"], "⚜", "fleur-de-lis"], [["U+1F531"], "🔱", "trident emblem"], [["U+1F4DB"], "📛", "name badge"], [["U+1F530"], "🔰", "Japanese symbol for beginner"], [["U+2B55"], "⭕", "hollow red circle"], [["U+2705"], "✅", "check mark button"], [["U+2611"], "☑", "check box with check"], [["U+2714"], "✔", "check mark"], [["U+274C"], "❌", "cross mark"], [["U+274E"], "❎", "cross mark button"], [["U+27B0"], "➰", "curly loop"], [["U+27BF"], "➿", "double curly loop"], [["U+303D"], "〽", "part alternation mark"], [["U+2733"], "✳", "eight-spoked asterisk"], [["U+2734"], "✴", "eight-pointed star"], [["U+2747"], "❇", "sparkle"], [["U+00A9"], "©", "copyright"], [["U+00AE"], "®", "registered"], [["U+2122"], "™", "trade mark"]]], ["keycap", [[["U+0023", "U+FE0F", "U+20E3"], "#️⃣", "keycap: #"], [["U+002A", "U+FE0F", "U+20E3"], "*️⃣", "keycap: *"], [["U+0030", "U+FE0F", "U+20E3"], "0️⃣", "keycap: 0"], [["U+0031", "U+FE0F", "U+20E3"], "1️⃣", "keycap: 1"], [["U+0032", "U+FE0F", "U+20E3"], "2️⃣", "keycap: 2"], [["U+0033", "U+FE0F", "U+20E3"], "3️⃣", "keycap: 3"], [["U+0034", "U+FE0F", "U+20E3"], "4️⃣", "keycap: 4"], [["U+0035", "U+FE0F", "U+20E3"], "5️⃣", "keycap: 5"], [["U+0036", "U+FE0F", "U+20E3"], "6️⃣", "keycap: 6"], [["U+0037", "U+FE0F", "U+20E3"], "7️⃣", "keycap: 7"], [["U+0038", "U+FE0F", "U+20E3"], "8️⃣", "keycap: 8"], [["U+0039", "U+FE0F", "U+20E3"], "9️⃣", "keycap: 9"], [["U+1F51F"], "🔟", "keycap: 10"]]], ["alphanum", [[["U+1F520"], "🔠", "input latin uppercase"], [["U+1F521"], "🔡", "input latin lowercase"], [["U+1F522"], "🔢", "input numbers"], [["U+1F523"], "🔣", "input symbols"], [["U+1F524"], "🔤", "input latin letters"], [["U+1F170"], "🅰", "A button (blood type)"], [["U+1F18E"], "🆎", "AB button (blood type)"], [["U+1F171"], "🅱", "B button (blood type)"], [["U+1F191"], "🆑", "CL button"], [["U+1F192"], "🆒", "COOL button"], [["U+1F193"], "🆓", "FREE button"], [["U+2139"], "ℹ", "information"], [["U+1F194"], "🆔", "ID button"], [["U+24C2"], "Ⓜ", "circled M"], [["U+1F195"], "🆕", "NEW button"], [["U+1F196"], "🆖", "NG button"], [["U+1F17E"], "🅾", "O button (blood type)"], [["U+1F197"], "🆗", "OK button"], [["U+1F17F"], "🅿", "P button"], [["U+1F198"], "🆘", "SOS button"], [["U+1F199"], "🆙", "UP! button"], [["U+1F19A"], "🆚", "VS button"], [["U+1F201"], "🈁", "Japanese “here” button"], [["U+1F202"], "🈂", "Japanese “service charge” button"], [["U+1F237"], "🈷", "Japanese “monthly amount” button"], [["U+1F236"], "🈶", "Japanese “not free of charge” button"], [["U+1F22F"], "🈯", "Japanese “reserved” button"], [["U+1F250"], "🉐", "Japanese “bargain” button"], [["U+1F239"], "🈹", "Japanese “discount” button"], [["U+1F21A"], "🈚", "Japanese “free of charge” button"], [["U+1F232"], "🈲", "Japanese “prohibited” button"], [["U+1F251"], "🉑", "Japanese “acceptable” button"], [["U+1F238"], "🈸", "Japanese “application” button"], [["U+1F234"], "🈴", "Japanese “passing grade” button"], [["U+1F233"], "🈳", "Japanese “vacancy” button"], [["U+3297"], "㊗", "Japanese “congratulations” button"], [["U+3299"], "㊙", "Japanese “secret” button"], [["U+1F23A"], "🈺", "Japanese “open for business” button"], [["U+1F235"], "🈵", "Japanese “no vacancy” button"]]], ["geometric", [[["U+1F534"], "🔴", "red circle"], [["U+1F7E0"], "🟠", "orange circle"], [["U+1F7E1"], "🟡", "yellow circle"], [["U+1F7E2"], "🟢", "green circle"], [["U+1F535"], "🔵", "blue circle"], [["U+1F7E3"], "🟣", "purple circle"], [["U+1F7E4"], "🟤", "brown circle"], [["U+26AB"], "⚫", "black circle"], [["U+26AA"], "⚪", "white circle"], [["U+1F7E5"], "🟥", "red square"], [["U+1F7E7"], "🟧", "orange square"], [["U+1F7E8"], "🟨", "yellow square"], [["U+1F7E9"], "🟩", "green square"], [["U+1F7E6"], "🟦", "blue square"], [["U+1F7EA"], "🟪", "purple square"], [["U+1F7EB"], "🟫", "brown square"], [["U+2B1B"], "⬛", "black large square"], [["U+2B1C"], "⬜", "white large square"], [["U+25FC"], "◼", "black medium square"], [["U+25FB"], "◻", "white medium square"], [["U+25FE"], "◾", "black medium-small square"], [["U+25FD"], "◽", "white medium-small square"], [["U+25AA"], "▪", "black small square"], [["U+25AB"], "▫", "white small square"], [["U+1F536"], "🔶", "large orange diamond"], [["U+1F537"], "🔷", "large blue diamond"], [["U+1F538"], "🔸", "small orange diamond"], [["U+1F539"], "🔹", "small blue diamond"], [["U+1F53A"], "🔺", "red triangle pointed up"], [["U+1F53B"], "🔻", "red triangle pointed down"], [["U+1F4A0"], "💠", "diamond with a dot"], [["U+1F518"], "🔘", "radio button"], [["U+1F533"], "🔳", "white square button"], [["U+1F532"], "🔲", "black square button"]]]]], ["Flags", [["flag", [[["U+1F3C1"], "🏁", "chequered flag"], [["U+1F6A9"], "🚩", "triangular flag"], [["U+1F38C"], "🎌", "crossed flags"], [["U+1F3F4"], "🏴", "black flag"], [["U+1F3F3"], "🏳", "white flag"], [["U+1F3F3", "U+FE0F", "U+200D", "U+1F308"], "🏳️🌈", "rainbow flag"], [["U+1F3F3", "U+FE0F", "U+200D", "U+26A7", "U+FE0F"], "🏳️⚧️", "⊛ transgender flag"], [["U+1F3F4", "U+200D", "U+2620", "U+FE0F"], "🏴☠️", "pirate flag"]]], ["country-flag", [[["U+1F1E6", "U+1F1E8"], "🇦🇨", "flag: Ascension Island"], [["U+1F1E6", "U+1F1E9"], "🇦🇩", "flag: Andorra"], [["U+1F1E6", "U+1F1EA"], "🇦🇪", "flag: United Arab Emirates"], [["U+1F1E6", "U+1F1EB"], "🇦🇫", "flag: Afghanistan"], [["U+1F1E6", "U+1F1EC"], "🇦🇬", "flag: Antigua & Barbuda"], [["U+1F1E6", "U+1F1EE"], "🇦🇮", "flag: Anguilla"], [["U+1F1E6", "U+1F1F1"], "🇦🇱", "flag: Albania"], [["U+1F1E6", "U+1F1F2"], "🇦🇲", "flag: Armenia"], [["U+1F1E6", "U+1F1F4"], "🇦🇴", "flag: Angola"], [["U+1F1E6", "U+1F1F6"], "🇦🇶", "flag: Antarctica"], [["U+1F1E6", "U+1F1F7"], "🇦🇷", "flag: Argentina"], [["U+1F1E6", "U+1F1F8"], "🇦🇸", "flag: American Samoa"], [["U+1F1E6", "U+1F1F9"], "🇦🇹", "flag: Austria"], [["U+1F1E6", "U+1F1FA"], "🇦🇺", "flag: Australia"], [["U+1F1E6", "U+1F1FC"], "🇦🇼", "flag: Aruba"], [["U+1F1E6", "U+1F1FD"], "🇦🇽", "flag: Åland Islands"], [["U+1F1E6", "U+1F1FF"], "🇦🇿", "flag: Azerbaijan"], [["U+1F1E7", "U+1F1E6"], "🇧🇦", "flag: Bosnia & Herzegovina"], [["U+1F1E7", "U+1F1E7"], "🇧🇧", "flag: Barbados"], [["U+1F1E7", "U+1F1E9"], "🇧🇩", "flag: Bangladesh"], [["U+1F1E7", "U+1F1EA"], "🇧🇪", "flag: Belgium"], [["U+1F1E7", "U+1F1EB"], "🇧🇫", "flag: Burkina Faso"], [["U+1F1E7", "U+1F1EC"], "🇧🇬", "flag: Bulgaria"], [["U+1F1E7", "U+1F1ED"], "🇧🇭", "flag: Bahrain"], [["U+1F1E7", "U+1F1EE"], "🇧🇮", "flag: Burundi"], [["U+1F1E7", "U+1F1EF"], "🇧🇯", "flag: Benin"], [["U+1F1E7", "U+1F1F1"], "🇧🇱", "flag: St. Barthélemy"], [["U+1F1E7", "U+1F1F2"], "🇧🇲", "flag: Bermuda"], [["U+1F1E7", "U+1F1F3"], "🇧🇳", "flag: Brunei"], [["U+1F1E7", "U+1F1F4"], "🇧🇴", "flag: Bolivia"], [["U+1F1E7", "U+1F1F6"], "🇧🇶", "flag: Caribbean Netherlands"], [["U+1F1E7", "U+1F1F7"], "🇧🇷", "flag: Brazil"], [["U+1F1E7", "U+1F1F8"], "🇧🇸", "flag: Bahamas"], [["U+1F1E7", "U+1F1F9"], "🇧🇹", "flag: Bhutan"], [["U+1F1E7", "U+1F1FB"], "🇧🇻", "flag: Bouvet Island"], [["U+1F1E7", "U+1F1FC"], "🇧🇼", "flag: Botswana"], [["U+1F1E7", "U+1F1FE"], "🇧🇾", "flag: Belarus"], [["U+1F1E7", "U+1F1FF"], "🇧🇿", "flag: Belize"], [["U+1F1E8", "U+1F1E6"], "🇨🇦", "flag: Canada"], [["U+1F1E8", "U+1F1E8"], "🇨🇨", "flag: Cocos (Keeling) Islands"], [["U+1F1E8", "U+1F1E9"], "🇨🇩", "flag: Congo - Kinshasa"], [["U+1F1E8", "U+1F1EB"], "🇨🇫", "flag: Central African Republic"], [["U+1F1E8", "U+1F1EC"], "🇨🇬", "flag: Congo - Brazzaville"], [["U+1F1E8", "U+1F1ED"], "🇨🇭", "flag: Switzerland"], [["U+1F1E8", "U+1F1EE"], "🇨🇮", "flag: Côte d’Ivoire"], [["U+1F1E8", "U+1F1F0"], "🇨🇰", "flag: Cook Islands"], [["U+1F1E8", "U+1F1F1"], "🇨🇱", "flag: Chile"], [["U+1F1E8", "U+1F1F2"], "🇨🇲", "flag: Cameroon"], [["U+1F1E8", "U+1F1F3"], "🇨🇳", "flag: China"], [["U+1F1E8", "U+1F1F4"], "🇨🇴", "flag: Colombia"], [["U+1F1E8", "U+1F1F5"], "🇨🇵", "flag: Clipperton Island"], [["U+1F1E8", "U+1F1F7"], "🇨🇷", "flag: Costa Rica"], [["U+1F1E8", "U+1F1FA"], "🇨🇺", "flag: Cuba"], [["U+1F1E8", "U+1F1FB"], "🇨🇻", "flag: Cape Verde"], [["U+1F1E8", "U+1F1FC"], "🇨🇼", "flag: Curaçao"], [["U+1F1E8", "U+1F1FD"], "🇨🇽", "flag: Christmas Island"], [["U+1F1E8", "U+1F1FE"], "🇨🇾", "flag: Cyprus"], [["U+1F1E8", "U+1F1FF"], "🇨🇿", "flag: Czechia"], [["U+1F1E9", "U+1F1EA"], "🇩🇪", "flag: Germany"], [["U+1F1E9", "U+1F1EC"], "🇩🇬", "flag: Diego Garcia"], [["U+1F1E9", "U+1F1EF"], "🇩🇯", "flag: Djibouti"], [["U+1F1E9", "U+1F1F0"], "🇩🇰", "flag: Denmark"], [["U+1F1E9", "U+1F1F2"], "🇩🇲", "flag: Dominica"], [["U+1F1E9", "U+1F1F4"], "🇩🇴", "flag: Dominican Republic"], [["U+1F1E9", "U+1F1FF"], "🇩🇿", "flag: Algeria"], [["U+1F1EA", "U+1F1E6"], "🇪🇦", "flag: Ceuta & Melilla"], [["U+1F1EA", "U+1F1E8"], "🇪🇨", "flag: Ecuador"], [["U+1F1EA", "U+1F1EA"], "🇪🇪", "flag: Estonia"], [["U+1F1EA", "U+1F1EC"], "🇪🇬", "flag: Egypt"], [["U+1F1EA", "U+1F1ED"], "🇪🇭", "flag: Western Sahara"], [["U+1F1EA", "U+1F1F7"], "🇪🇷", "flag: Eritrea"], [["U+1F1EA", "U+1F1F8"], "🇪🇸", "flag: Spain"], [["U+1F1EA", "U+1F1F9"], "🇪🇹", "flag: Ethiopia"], [["U+1F1EA", "U+1F1FA"], "🇪🇺", "flag: European Union"], [["U+1F1EB", "U+1F1EE"], "🇫🇮", "flag: Finland"], [["U+1F1EB", "U+1F1EF"], "🇫🇯", "flag: Fiji"], [["U+1F1EB", "U+1F1F0"], "🇫🇰", "flag: Falkland Islands"], [["U+1F1EB", "U+1F1F2"], "🇫🇲", "flag: Micronesia"], [["U+1F1EB", "U+1F1F4"], "🇫🇴", "flag: Faroe Islands"], [["U+1F1EB", "U+1F1F7"], "🇫🇷", "flag: France"], [["U+1F1EC", "U+1F1E6"], "🇬🇦", "flag: Gabon"], [["U+1F1EC", "U+1F1E7"], "🇬🇧", "flag: United Kingdom"], [["U+1F1EC", "U+1F1E9"], "🇬🇩", "flag: Grenada"], [["U+1F1EC", "U+1F1EA"], "🇬🇪", "flag: Georgia"], [["U+1F1EC", "U+1F1EB"], "🇬🇫", "flag: French Guiana"], [["U+1F1EC", "U+1F1EC"], "🇬🇬", "flag: Guernsey"], [["U+1F1EC", "U+1F1ED"], "🇬🇭", "flag: Ghana"], [["U+1F1EC", "U+1F1EE"], "🇬🇮", "flag: Gibraltar"], [["U+1F1EC", "U+1F1F1"], "🇬🇱", "flag: Greenland"], [["U+1F1EC", "U+1F1F2"], "🇬🇲", "flag: Gambia"], [["U+1F1EC", "U+1F1F3"], "🇬🇳", "flag: Guinea"], [["U+1F1EC", "U+1F1F5"], "🇬🇵", "flag: Guadeloupe"], [["U+1F1EC", "U+1F1F6"], "🇬🇶", "flag: Equatorial Guinea"], [["U+1F1EC", "U+1F1F7"], "🇬🇷", "flag: Greece"], [["U+1F1EC", "U+1F1F8"], "🇬🇸", "flag: South Georgia & South Sandwich Islands"], [["U+1F1EC", "U+1F1F9"], "🇬🇹", "flag: Guatemala"], [["U+1F1EC", "U+1F1FA"], "🇬🇺", "flag: Guam"], [["U+1F1EC", "U+1F1FC"], "🇬🇼", "flag: Guinea-Bissau"], [["U+1F1EC", "U+1F1FE"], "🇬🇾", "flag: Guyana"], [["U+1F1ED", "U+1F1F0"], "🇭🇰", "flag: Hong Kong SAR China"], [["U+1F1ED", "U+1F1F2"], "🇭🇲", "flag: Heard & McDonald Islands"], [["U+1F1ED", "U+1F1F3"], "🇭🇳", "flag: Honduras"], [["U+1F1ED", "U+1F1F7"], "🇭🇷", "flag: Croatia"], [["U+1F1ED", "U+1F1F9"], "🇭🇹", "flag: Haiti"], [["U+1F1ED", "U+1F1FA"], "🇭🇺", "flag: Hungary"], [["U+1F1EE", "U+1F1E8"], "🇮🇨", "flag: Canary Islands"], [["U+1F1EE", "U+1F1E9"], "🇮🇩", "flag: Indonesia"], [["U+1F1EE", "U+1F1EA"], "🇮🇪", "flag: Ireland"], [["U+1F1EE", "U+1F1F1"], "🇮🇱", "flag: Israel"], [["U+1F1EE", "U+1F1F2"], "🇮🇲", "flag: Isle of Man"], [["U+1F1EE", "U+1F1F3"], "🇮🇳", "flag: India"], [["U+1F1EE", "U+1F1F4"], "🇮🇴", "flag: British Indian Ocean Territory"], [["U+1F1EE", "U+1F1F6"], "🇮🇶", "flag: Iraq"], [["U+1F1EE", "U+1F1F7"], "🇮🇷", "flag: Iran"], [["U+1F1EE", "U+1F1F8"], "🇮🇸", "flag: Iceland"], [["U+1F1EE", "U+1F1F9"], "🇮🇹", "flag: Italy"], [["U+1F1EF", "U+1F1EA"], "🇯🇪", "flag: Jersey"], [["U+1F1EF", "U+1F1F2"], "🇯🇲", "flag: Jamaica"], [["U+1F1EF", "U+1F1F4"], "🇯🇴", "flag: Jordan"], [["U+1F1EF", "U+1F1F5"], "🇯🇵", "flag: Japan"], [["U+1F1F0", "U+1F1EA"], "🇰🇪", "flag: Kenya"], [["U+1F1F0", "U+1F1EC"], "🇰🇬", "flag: Kyrgyzstan"], [["U+1F1F0", "U+1F1ED"], "🇰🇭", "flag: Cambodia"], [["U+1F1F0", "U+1F1EE"], "🇰🇮", "flag: Kiribati"], [["U+1F1F0", "U+1F1F2"], "🇰🇲", "flag: Comoros"], [["U+1F1F0", "U+1F1F3"], "🇰🇳", "flag: St. Kitts & Nevis"], [["U+1F1F0", "U+1F1F5"], "🇰🇵", "flag: North Korea"], [["U+1F1F0", "U+1F1F7"], "🇰🇷", "flag: South Korea"], [["U+1F1F0", "U+1F1FC"], "🇰🇼", "flag: Kuwait"], [["U+1F1F0", "U+1F1FE"], "🇰🇾", "flag: Cayman Islands"], [["U+1F1F0", "U+1F1FF"], "🇰🇿", "flag: Kazakhstan"], [["U+1F1F1", "U+1F1E6"], "🇱🇦", "flag: Laos"], [["U+1F1F1", "U+1F1E7"], "🇱🇧", "flag: Lebanon"], [["U+1F1F1", "U+1F1E8"], "🇱🇨", "flag: St. Lucia"], [["U+1F1F1", "U+1F1EE"], "🇱🇮", "flag: Liechtenstein"], [["U+1F1F1", "U+1F1F0"], "🇱🇰", "flag: Sri Lanka"], [["U+1F1F1", "U+1F1F7"], "🇱🇷", "flag: Liberia"], [["U+1F1F1", "U+1F1F8"], "🇱🇸", "flag: Lesotho"], [["U+1F1F1", "U+1F1F9"], "🇱🇹", "flag: Lithuania"], [["U+1F1F1", "U+1F1FA"], "🇱🇺", "flag: Luxembourg"], [["U+1F1F1", "U+1F1FB"], "🇱🇻", "flag: Latvia"], [["U+1F1F1", "U+1F1FE"], "🇱🇾", "flag: Libya"], [["U+1F1F2", "U+1F1E6"], "🇲🇦", "flag: Morocco"], [["U+1F1F2", "U+1F1E8"], "🇲🇨", "flag: Monaco"], [["U+1F1F2", "U+1F1E9"], "🇲🇩", "flag: Moldova"], [["U+1F1F2", "U+1F1EA"], "🇲🇪", "flag: Montenegro"], [["U+1F1F2", "U+1F1EB"], "🇲🇫", "flag: St. Martin"], [["U+1F1F2", "U+1F1EC"], "🇲🇬", "flag: Madagascar"], [["U+1F1F2", "U+1F1ED"], "🇲🇭", "flag: Marshall Islands"], [["U+1F1F2", "U+1F1F0"], "🇲🇰", "flag: North Macedonia"], [["U+1F1F2", "U+1F1F1"], "🇲🇱", "flag: Mali"], [["U+1F1F2", "U+1F1F2"], "🇲🇲", "flag: Myanmar (Burma)"], [["U+1F1F2", "U+1F1F3"], "🇲🇳", "flag: Mongolia"], [["U+1F1F2", "U+1F1F4"], "🇲🇴", "flag: Macao SAR China"], [["U+1F1F2", "U+1F1F5"], "🇲🇵", "flag: Northern Mariana Islands"], [["U+1F1F2", "U+1F1F6"], "🇲🇶", "flag: Martinique"], [["U+1F1F2", "U+1F1F7"], "🇲🇷", "flag: Mauritania"], [["U+1F1F2", "U+1F1F8"], "🇲🇸", "flag: Montserrat"], [["U+1F1F2", "U+1F1F9"], "🇲🇹", "flag: Malta"], [["U+1F1F2", "U+1F1FA"], "🇲🇺", "flag: Mauritius"], [["U+1F1F2", "U+1F1FB"], "🇲🇻", "flag: Maldives"], [["U+1F1F2", "U+1F1FC"], "🇲🇼", "flag: Malawi"], [["U+1F1F2", "U+1F1FD"], "🇲🇽", "flag: Mexico"], [["U+1F1F2", "U+1F1FE"], "🇲🇾", "flag: Malaysia"], [["U+1F1F2", "U+1F1FF"], "🇲🇿", "flag: Mozambique"], [["U+1F1F3", "U+1F1E6"], "🇳🇦", "flag: Namibia"], [["U+1F1F3", "U+1F1E8"], "🇳🇨", "flag: New Caledonia"], [["U+1F1F3", "U+1F1EA"], "🇳🇪", "flag: Niger"], [["U+1F1F3", "U+1F1EB"], "🇳🇫", "flag: Norfolk Island"], [["U+1F1F3", "U+1F1EC"], "🇳🇬", "flag: Nigeria"], [["U+1F1F3", "U+1F1EE"], "🇳🇮", "flag: Nicaragua"], [["U+1F1F3", "U+1F1F1"], "🇳🇱", "flag: Netherlands"], [["U+1F1F3", "U+1F1F4"], "🇳🇴", "flag: Norway"], [["U+1F1F3", "U+1F1F5"], "🇳🇵", "flag: Nepal"], [["U+1F1F3", "U+1F1F7"], "🇳🇷", "flag: Nauru"], [["U+1F1F3", "U+1F1FA"], "🇳🇺", "flag: Niue"], [["U+1F1F3", "U+1F1FF"], "🇳🇿", "flag: New Zealand"], [["U+1F1F4", "U+1F1F2"], "🇴🇲", "flag: Oman"], [["U+1F1F5", "U+1F1E6"], "🇵🇦", "flag: Panama"], [["U+1F1F5", "U+1F1EA"], "🇵🇪", "flag: Peru"], [["U+1F1F5", "U+1F1EB"], "🇵🇫", "flag: French Polynesia"], [["U+1F1F5", "U+1F1EC"], "🇵🇬", "flag: Papua New Guinea"], [["U+1F1F5", "U+1F1ED"], "🇵🇭", "flag: Philippines"], [["U+1F1F5", "U+1F1F0"], "🇵🇰", "flag: Pakistan"], [["U+1F1F5", "U+1F1F1"], "🇵🇱", "flag: Poland"], [["U+1F1F5", "U+1F1F2"], "🇵🇲", "flag: St. Pierre & Miquelon"], [["U+1F1F5", "U+1F1F3"], "🇵🇳", "flag: Pitcairn Islands"], [["U+1F1F5", "U+1F1F7"], "🇵🇷", "flag: Puerto Rico"], [["U+1F1F5", "U+1F1F8"], "🇵🇸", "flag: Palestinian Territories"], [["U+1F1F5", "U+1F1F9"], "🇵🇹", "flag: Portugal"], [["U+1F1F5", "U+1F1FC"], "🇵🇼", "flag: Palau"], [["U+1F1F5", "U+1F1FE"], "🇵🇾", "flag: Paraguay"], [["U+1F1F6", "U+1F1E6"], "🇶🇦", "flag: Qatar"], [["U+1F1F7", "U+1F1EA"], "🇷🇪", "flag: Réunion"], [["U+1F1F7", "U+1F1F4"], "🇷🇴", "flag: Romania"], [["U+1F1F7", "U+1F1F8"], "🇷🇸", "flag: Serbia"], [["U+1F1F7", "U+1F1FA"], "🇷🇺", "flag: Russia"], [["U+1F1F7", "U+1F1FC"], "🇷🇼", "flag: Rwanda"], [["U+1F1F8", "U+1F1E6"], "🇸🇦", "flag: Saudi Arabia"], [["U+1F1F8", "U+1F1E7"], "🇸🇧", "flag: Solomon Islands"], [["U+1F1F8", "U+1F1E8"], "🇸🇨", "flag: Seychelles"], [["U+1F1F8", "U+1F1E9"], "🇸🇩", "flag: Sudan"], [["U+1F1F8", "U+1F1EA"], "🇸🇪", "flag: Sweden"], [["U+1F1F8", "U+1F1EC"], "🇸🇬", "flag: Singapore"], [["U+1F1F8", "U+1F1ED"], "🇸🇭", "flag: St. Helena"], [["U+1F1F8", "U+1F1EE"], "🇸🇮", "flag: Slovenia"], [["U+1F1F8", "U+1F1EF"], "🇸🇯", "flag: Svalbard & Jan Mayen"], [["U+1F1F8", "U+1F1F0"], "🇸🇰", "flag: Slovakia"], [["U+1F1F8", "U+1F1F1"], "🇸🇱", "flag: Sierra Leone"], [["U+1F1F8", "U+1F1F2"], "🇸🇲", "flag: San Marino"], [["U+1F1F8", "U+1F1F3"], "🇸🇳", "flag: Senegal"], [["U+1F1F8", "U+1F1F4"], "🇸🇴", "flag: Somalia"], [["U+1F1F8", "U+1F1F7"], "🇸🇷", "flag: Suriname"], [["U+1F1F8", "U+1F1F8"], "🇸🇸", "flag: South Sudan"], [["U+1F1F8", "U+1F1F9"], "🇸🇹", "flag: São Tomé & Príncipe"], [["U+1F1F8", "U+1F1FB"], "🇸🇻", "flag: El Salvador"], [["U+1F1F8", "U+1F1FD"], "🇸🇽", "flag: Sint Maarten"], [["U+1F1F8", "U+1F1FE"], "🇸🇾", "flag: Syria"], [["U+1F1F8", "U+1F1FF"], "🇸🇿", "flag: Eswatini"], [["U+1F1F9", "U+1F1E6"], "🇹🇦", "flag: Tristan da Cunha"], [["U+1F1F9", "U+1F1E8"], "🇹🇨", "flag: Turks & Caicos Islands"], [["U+1F1F9", "U+1F1E9"], "🇹🇩", "flag: Chad"], [["U+1F1F9", "U+1F1EB"], "🇹🇫", "flag: French Southern Territories"], [["U+1F1F9", "U+1F1EC"], "🇹🇬", "flag: Togo"], [["U+1F1F9", "U+1F1ED"], "🇹🇭", "flag: Thailand"], [["U+1F1F9", "U+1F1EF"], "🇹🇯", "flag: Tajikistan"], [["U+1F1F9", "U+1F1F0"], "🇹🇰", "flag: Tokelau"], [["U+1F1F9", "U+1F1F1"], "🇹🇱", "flag: Timor-Leste"], [["U+1F1F9", "U+1F1F2"], "🇹🇲", "flag: Turkmenistan"], [["U+1F1F9", "U+1F1F3"], "🇹🇳", "flag: Tunisia"], [["U+1F1F9", "U+1F1F4"], "🇹🇴", "flag: Tonga"], [["U+1F1F9", "U+1F1F7"], "🇹🇷", "flag: Turkey"], [["U+1F1F9", "U+1F1F9"], "🇹🇹", "flag: Trinidad & Tobago"], [["U+1F1F9", "U+1F1FB"], "🇹🇻", "flag: Tuvalu"], [["U+1F1F9", "U+1F1FC"], "🇹🇼", "flag: Taiwan"], [["U+1F1F9", "U+1F1FF"], "🇹🇿", "flag: Tanzania"], [["U+1F1FA", "U+1F1E6"], "🇺🇦", "flag: Ukraine"], [["U+1F1FA", "U+1F1EC"], "🇺🇬", "flag: Uganda"], [["U+1F1FA", "U+1F1F2"], "🇺🇲", "flag: U.S. Outlying Islands"], [["U+1F1FA", "U+1F1F3"], "🇺🇳", "flag: United Nations"], [["U+1F1FA", "U+1F1F8"], "🇺🇸", "flag: United States"], [["U+1F1FA", "U+1F1FE"], "🇺🇾", "flag: Uruguay"], [["U+1F1FA", "U+1F1FF"], "🇺🇿", "flag: Uzbekistan"], [["U+1F1FB", "U+1F1E6"], "🇻🇦", "flag: Vatican City"], [["U+1F1FB", "U+1F1E8"], "🇻🇨", "flag: St. Vincent & Grenadines"], [["U+1F1FB", "U+1F1EA"], "🇻🇪", "flag: Venezuela"], [["U+1F1FB", "U+1F1EC"], "🇻🇬", "flag: British Virgin Islands"], [["U+1F1FB", "U+1F1EE"], "🇻🇮", "flag: U.S. Virgin Islands"], [["U+1F1FB", "U+1F1F3"], "🇻🇳", "flag: Vietnam"], [["U+1F1FB", "U+1F1FA"], "🇻🇺", "flag: Vanuatu"], [["U+1F1FC", "U+1F1EB"], "🇼🇫", "flag: Wallis & Futuna"], [["U+1F1FC", "U+1F1F8"], "🇼🇸", "flag: Samoa"], [["U+1F1FD", "U+1F1F0"], "🇽🇰", "flag: Kosovo"], [["U+1F1FE", "U+1F1EA"], "🇾🇪", "flag: Yemen"], [["U+1F1FE", "U+1F1F9"], "🇾🇹", "flag: Mayotte"], [["U+1F1FF", "U+1F1E6"], "🇿🇦", "flag: South Africa"], [["U+1F1FF", "U+1F1F2"], "🇿🇲", "flag: Zambia"], [["U+1F1FF", "U+1F1FC"], "🇿🇼", "flag: Zimbabwe"]]], ["subdivision-flag", [[["U+1F3F4", "U+E0067", "U+E0062", "U+E0065", "U+E006E", "U+E0067", "U+E007F"], "🏴", "flag: England"], [["U+1F3F4", "U+E0067", "U+E0062", "U+E0073", "U+E0063", "U+E0074", "U+E007F"], "🏴", "flag: Scotland"], [["U+1F3F4", "U+E0067", "U+E0062", "U+E0077", "U+E006C", "U+E0073", "U+E007F"], "🏴", "flag: Wales"]]]]]]; /* harmony default export */ var js_EmojiChars = (EmojiChars); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiAnims.js var EmojiAnims = [ [ "(heart)", "heart.png", "Heart" ], [ "(cool)", "cool.png", "Cool" ], [ "(hearteyes)", "hearteyes.png", "Heart eyes" ], [ "(stareyes)", "stareyes.png", "Star eyes" ], [ "(like)", "like.png", "Like" ], [ "(unamused)", "unamused.png", "Unamused" ], [ "(cwl)", "cwl.png", "Crying with laughter" ], [ "(xd)", "xd.png", "XD smiley" ], [ ":)", "smile.png", "Smile" ], [ ":(", "sad.png", "Sad" ], [ ":D", "laugh.png", "Laugh" ], [ ":O", "surprised.png", "Surprised" ], [ ";)", "wink.png", "Wink" ], [ ";(", "cry.png", "Crying" ], [ "(shivering)", "shivering.png", "Cold shivering" ], [ "(:|", "sweat.png", "Sweating" ], [ ":|", "speechless.png", "Speechless" ], [ ":P", "tongueout.png", "Cheeky" ], [ ":$", "blush.png", "Blushing" ], [ "(inlove)", "inlove.png", "In love" ], [ "(kiss)", "kiss.png", "Kiss" ], [ ":^)", "wonder.png", "Wondering" ], [ "|-)", "sleepy.png", "Sleepy" ], [ "|-(", "dull.png", "Dull" ], [ "(yawn)", "yawn.png", "Yawn" ], [ "(puke)", "puke.png", "Vomiting" ], [ "(doh)", "doh.png", "Doh!" ], [ "(angry)", "angry.png", "Angry" ], [ "(wasntme)", "wasntme.png", "It wasn't me!" ], [ "(worry)", "worry.png", "Worried" ], [ "(mm)", "mmm.png", "Mmmmm…" ], [ "(nerd)", "nerdy.png", "Nerdy" ], [ "(rainbowsmile)", "rainbowsmile.png", "Rainbow smile" ], [ ":x", "lipssealed.png", "My lips are sealed" ], [ "(devil)", "devil.png", "Devil" ], [ "(angel)", "angel.png", "Angel" ], [ "(envy)", "envy.png", "Envy" ], [ "(makeup)", "makeup.png", "Make-up" ], [ "(think)", "think.png", "Thinking" ], [ "(rofl)", "rofl.png", "Rolling on the floor laughing" ], [ "(happy)", "happy.png", "Happy" ], [ "(smirk)", "smirk.png", "Smirking" ], [ "(nod)", "nod.png", "Nodding" ], [ "(shake)", "shake.png", "Shake" ], [ "(waiting)", "waiting.png", "Waiting" ], [ "(emo)", "emo.png", "Emo" ], [ "(donttalk)", "donttalktome.png", "Don't talk to me" ], [ "(idea)", "idea.png", "Idea" ], [ "(talk)", "talk.png", "Talking" ], [ "(swear)", "swear.png", "Swearing" ], [ "]:)", "evilgrin.png", "Evil grin" ], [ "(headbang)", "headbang.png", "Banging head on wall" ], [ "(learn)", "learn.png", "Global Learning" ], [ "(headphones)", "headphones.png", "Listening to headphones" ], [ "(morningafter)", "hungover.png", "Morning after party" ], [ "(selfie)", "selfie.png", "Selfie" ], [ "(shock)", "shock.png", "Spoiler alert" ], [ "(llsshock)", "llsshock.png", "Spoiler alert" ], [ "(ttm)", "ttm.png", "Talking too much" ], [ "(dream)", "dream.png", "Dreaming" ], [ "(ill)", "ill.png", "Ill" ], [ "(tired)", "tired.png", "Tired" ], [ "(party)", "party.png", "Party" ], [ "(bandit)", "bandit.png", "Bandit" ], [ "(tauri)", "tauri.png", "Bald man with glasses" ], [ "(nazar)", "nazar.png", "Blessing" ], [ "(movember)", "movember.png", "Movember" ], [ "(mysteryskype)", "mysteryskype.png", "Mystery Skype" ], [ "(dotdfemale)", "dotdfemale.png", "Day of the dead" ], [ "(dotdmale)", "dotdmale.png", "Day of the dead" ], [ "(selfiediwali)", "selfiediwali.png", "Selfie Diwali" ], [ "(diwaliselfie)", "diwaliselfie.png", "Diwali selfie" ], [ "(steveaoki)", "steveaoki.png", "Steve Aoki" ], [ "(aokijump)", "aokijump.png", "Aoki jump" ], [ "(cakethrow)", "cakethrow.png", "Cake throw" ], [ "(kolony)", "kolony.png", "Kolony" ], [ "(joy)", "joy.png", "Joy" ], [ "(anger)", "anger.png", "Anger" ], [ "(sadness)", "sadness.png", "Sadness" ], [ "(disgust)", "disgust.png", "Disgust" ], [ "(fear)", "fear.png", "Fear" ], [ "(hestonfacepalm)", "hestonfacepalm.png", "Heston facepalm" ], [ "(heston)", "heston.png", "Heston Blumenthal" ], [ "(stormtrooper)", "stormtrooper.png", "Storm trooper" ], [ "(kyloren)", "kyloren.png", "Kylo Ren" ], [ "(captainphasma)", "captainphasma.png", "Captain Phasma" ], [ "(malthe)", "malthe.png", "Smiling man with glasses" ], [ "(ladyvamp)", "ladyvampire.png", "Lady vampire" ], [ "(vampire)", "vampire.png", "Vampire" ], [ "(ghost)", "ghost.png", "Ghost" ], [ "(skull)", "skull.png", "Skull" ], [ "(pumpkin)", "pumpkin.png", "Pumpkin" ], [ "(santa)", "santa.png", "Santa" ], [ "(xmascwl)", "xmascwl.png", "Xmas crying with laughter" ], [ "(festiveparty)", "festiveparty.png", "Festive party" ], [ "(holidayspirit)", "holidayspirit.png", "Holiday spirit" ], [ "(rudolfsurprise)", "rudolfsurprise.png", "Surprised Rudolf" ], [ "(rudolfidea)", "rudolfidea.png", "Rudolf idea" ], [ "(wtf)", "wtf.png", "WTF…" ], [ "(smoking)", "smoke.png", "Smoking" ], [ "(drunk)", "drunk.png", "Drunk" ], [ "(finger)", "finger.png", "Finger" ], [ "(oliver)", "oliver.png", "Man saying come on" ], [ "(xmassarcastic)", "xmassarcastic.png", "Xmas sarcastic" ], [ "(xmascry)", "xmascry.png", "Xmas cry" ], [ "(wave)", "hi.png", "Hi" ], [ "(highfive)", "highfive.png", "High five" ], [ "(clap)", "clap.png", "Clapping" ], [ "(sarcastic)", "sarcastic.png", "Sarcastic" ], [ "(chuckle)", "giggle.png", "Giggle" ], [ "(facepalm)", "facepalm.png", "Facepalm" ], [ "(rock)", "rock.png", "Rock" ], [ "(yn)", "fingerscrossed.png", "Fingers crossed" ], [ "(listening)", "listening.png", "Listening" ], [ "(wait)", "wait.png", "Wait" ], [ "(whew)", "whew.png", "Relieved" ], [ "(tmi)", "tmi.png", "Too much information" ], [ "(call)", "call.png", "Call" ], [ "(punch)", "punch.png", "Punch" ], [ "(talktothehand)", "talktothehand.png", "Talk to the hand" ], [ "(whistle)", "whistle.png", "Whistle" ], [ "(slap)", "slap.png", "Slap" ], [ "(lalala)", "lalala.png", "Lalala" ], [ "(y)", "yes.png", "Yes" ], [ "(n)", "no.png", "No" ], [ "(handshake)", "handshake.png", "Handshake" ], [ "(fistbump)", "fistbump.png", "Fist bump" ], [ "(poke)", "poke.png", "Poke" ], [ "(celebrate)", "handsinair.png", "Hands celebrating" ], [ "(hearthands)", "hearthands.png", "Heart hands" ], [ "(victory)", "victory.png", "Victory sign" ], [ "(noworries)", "noworries.png", "No worries" ], [ "(ok)", "ok.png", "OK" ], [ "(pray)", "praying.png", "Praying" ], [ "(flex)", "muscle.png", "Muscle" ], [ "(ek)", "naturescall.png", "Nature's call" ], [ "(woty)", "woty.png", "Woman of the year" ], [ "(glassceiling)", "glassceiling.png", "Glass ceiling" ], [ "(deadyes)", "deadyes.png", "Dead yes" ], [ "(xmasyes)", "xmasyes.png", "Xmas yes" ], [ "(dropthemic)", "dropthemic.png", "Drop the mic" ] ]; /* harmony default export */ var js_EmojiAnims = (EmojiAnims); var EmojiAnimByIdent = EmojiAnims.reduce((ac, cr) => { ac[cr[0]] = cr; return ac; }, {}); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/autocompleteinput.css var autocompleteinput = __webpack_require__(88); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/adapter/SearchStringArrayAdapter.js /** * @typedef {Object} SearchArrayAdapterOption * @property {function} searchFuntion * * * * @param {Array<String>} arr * @param {SearchArrayAdapterOption} options not implement yet */ function SearchStringArrayAdapter(texts, options) { if (!this.queryItems) return new SearchStringArrayAdapter(texts, options); this.texts = texts; } SearchStringArrayAdapter.prototype.queryItems = function (query, mInput) { var query = query.toLocaleLowerCase(); return this.texts.map(function (text) { var start = text.toLocaleLowerCase().indexOf(query); if (start >= 0) { var hightlightedText = text.substr(0, start) + '<strong style="color:red">' + text.substr(start, query.length) + '</strong>' + text.substr(start + query.length); return { text: text, hightlightedText: hightlightedText } } else return null; }).filter(function (it) { return it !== null; }) }; SearchStringArrayAdapter.onAttached = function(parent){ this.parent = parent; }; SearchStringArrayAdapter.prototype.getItemText = function (item, mInput) { return item.text; }; SearchStringArrayAdapter.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent, mInput) { if (reuseItem) { reuseItem.childNodes[0].innerHTML = item.hightlightedText; return reuseItem; } else return _({ tag: 'div', child: { tag: 'span', class: 'absol-autocomplete-input-item-text', props: { innerHTML: item.hightlightedText } } }) } /* harmony default export */ var adapter_SearchStringArrayAdapter = (SearchStringArrayAdapter); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/adapter/SearchObjectArrayAdapter.js /** * @typedef {Object} SearchObjectArrayAdapter * @property {function} getItemText * * * * @param {Array<Object>} arr * @param {SearchArrayAdapterOption} options */ function SearchObjectArrayAdapter(objects, options) { if (!this.queryItems) return new SearchObjectArrayAdapter(texts, options); this.objects = objects; this.options = options; } SearchObjectArrayAdapter.prototype.queryItems = function (query, mInput) { var query = query.toLocaleLowerCase(); return this.objects.map(function (object) { var text = this.getItemText(object); var start = text.toLocaleLowerCase().indexOf(query); if (start >= 0) { var hightlightedText = text.substr(0, start) + '<strong style="color:red">' + text.substr(start, query.length) + '</strong>' + text.substr(start + query.length); return Object.assign(object, { __hightlightedText__: hightlightedText }); } else return null; }.bind(this)).filter(function (it) { return it !== null; }) }; SearchObjectArrayAdapter.prototype.onAttached = function (parent) { this.parent = parent; parent.getSelectedObject = function () { if (this._selectedIndex >= 0) { return this.$poolItems[this._selectedIndex]._holderItem; } else { return null; } } }; SearchObjectArrayAdapter.prototype.getItemText = function (item, mInput) { if (this.options && this.options.getItemText) return this.options.getItemText.call(this, item, mInput); else if (typeof item.text == 'string') { return item.text; } else return item.toString(); }; SearchObjectArrayAdapter.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent, mInput) { if (reuseItem) { reuseItem.childNodes[0].innerHTML = item.__hightlightedText__; return reuseItem; } else return _({ tag: 'div', child: { tag: 'span', props: { innerHTML: item.__hightlightedText__ } } }) } /* harmony default export */ var adapter_SearchObjectArrayAdapter = (SearchObjectArrayAdapter); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/EventEmitter.js var EventEmitter = __webpack_require__(3); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/AutoCompleteInput.js var AutoCompleteInput_ = ACore["d" /* default */]._; var AutoCompleteInput_$ = ACore["d" /* default */].$; /*** * * @extends {AElement} * @constructor */ function AutoCompleteInput() { this.$input = AutoCompleteInput_$('input', this) .on('keyup', this.eventHandler.keyup) .on('keydown', this.eventHandler.keydown) .on('focus', this.eventHandler.focus) .on('blur', this.eventHandler.blur); this.$dropdown = AutoCompleteInput_$('.absol-autocomplete-input-dropdown', this); this.$vscroller = AutoCompleteInput_$('bscroller', this).on('click', this.eventHandler.vscrollerClick); this.$poolItems = []; this._currentData = []; this._sessionIndex = 0; this._updatedSession = -1; this._cache = {}; OOP["a" /* default */].drillProperty(this, this.$input, 'value'); } AutoCompleteInput.tag = 'AutoCompleteInput'.toLowerCase(); AutoCompleteInput.render = function () { return AutoCompleteInput_({ extendEvent: 'change', class: 'absol-autocomplete-input', child: [ 'input[type="text"].absol-autocomplete-input-text', { class: 'absol-autocomplete-input-dropdown', style: { display: 'none' }, child: { tag: 'bscroller', style: { 'max-height': '500px' } } } ] }); }; AutoCompleteInput.eventHandler = {}; AutoCompleteInput.eventHandler.keyup = function (event) { if (this._keyTimeout) { clearTimeout(this._keyTimeout); this._keyTimeout = 0; } var cTimeout = setTimeout(function () { clearTimeout(cTimeout); this.find(); }.bind(this), 300); if (this._cacheTimeout) { clearTimeout(this._cacheTimeout); this._cacheTimeout = 0; } var cacheTimeout = setTimeout(function () { clearTimeout(cacheTimeout); this.clearCache(); }.bind(this), 300); this._cacheTimeout = cacheTimeout; this._keyTimeout = cTimeout; }; AutoCompleteInput.eventHandler.blur = function () { if (!this.hasClass('focus')) return; this.removeClass('focus'); AutoCompleteInput_$(document.body).off('mousedown', this.eventHandler.clickOut); }; AutoCompleteInput.eventHandler.focus = function () { if (this.hasClass('focus')) return; this.addClass('focus'); AutoCompleteInput_$(document.body).on('mousedown', this.eventHandler.clickOut); } AutoCompleteInput.eventHandler.clickOut = function (event) { if (EventEmitter["b" /* default */].hitElement(this, event)) return; AutoCompleteInput_$(document.body).off('mousedown', this.eventHandler.clickOut); var text = this.$input.value; if (this._lastValue != text) { this._lastValue = text; this.$dropdown.addStyle('display', 'none'); this._lastValue = text; this.emit('change', { target: this, value: text }, this); } } AutoCompleteInput.eventHandler.vscrollerClick = function (event) { var current = event.target; while (current && !current.hasClass('absol-autocomplete-input-item') && current != this.$vscroller) { current = current.parentElement; } if (current && current._holderItem) { var text = this.getItemText(current._holderItem); this.$input.value = text; this._lastQuery = text; this._selectedIndex = current._holderIndex; this.$dropdown.addStyle('display', 'none'); this._lastValue = text; this.emit('change', { target: this, value: text }, this); } }; AutoCompleteInput.eventHandler.keydown = function (event) { var key = event.key; if (key === 'ArrowDown') { if (this._selectedIndex + 1 < this._currentData.length) { if (this.$poolItems[this._selectedIndex]) { this.$poolItems[this._selectedIndex].removeClass('active'); } this._selectedIndex += 1; if (this.$poolItems[this._selectedIndex]) { this.$poolItems[this._selectedIndex].addClass('active'); this.$vscroller.scrollInto(this.$poolItems[this._selectedIndex]); } } event.preventDefault(); } else if (key === 'ArrowUp') { if (this._selectedIndex - 1 >= 0) { if (this.$poolItems[this._selectedIndex]) { this.$poolItems[this._selectedIndex].removeClass('active'); } this._selectedIndex -= 1; if (this.$poolItems[this._selectedIndex]) { this.$poolItems[this._selectedIndex].addClass('active'); this.$vscroller.scrollInto(this.$poolItems[this._selectedIndex]); } } event.preventDefault(); } else if (key === 'Enter') { var text; if (this._currentData[this._selectedIndex] === undefined) { text = this.$input.value; } else { text = this.getItemText(this._currentData[this._selectedIndex]); this.$input.value = text; } this._lastQuery = text; this.$dropdown.addStyle('display', 'none'); this._lastValue = text; this.emit('change', { target: this, value: text }, this); } }; AutoCompleteInput.prototype.focus = function () { if (this.disabled) return; this.$input.focus.apply(this.$input, arguments); }; AutoCompleteInput.prototype.blur = function () { this.$input.blur.apply(this.$input, arguments); }; AutoCompleteInput.prototype.select = function () { this.$input.select.apply(this.$input, arguments); } AutoCompleteInput.prototype.find = function () { var query = this.$input.value; if (query == this._lastQuery) return; this._lastQuery = query; var currentSession = ++this._sessionIndex; if (!query) { this.pushData([], currentSession, query) return; } if (this.disableCache) { var onReciveData = function (data) { cacheHolder.data = data; this.pushData(data, currentSession, query);//sessionIndex may be change }.bind(this); var result = this.queryItems(query); if (typeof result.then == 'function') result.then(onReciveData); else onReciveData(result) } else { if (this._cache[query]) { this._cache[query].sessionIndex = currentSession; if (!this._cache[query].pending) { var data = this._cache[query].data; this.pushData(data, currentSession); } } else { var cacheHolder = { pending: true, sessionIndex: currentSession }; var onReciveData = function (data) { cacheHolder.data = data; cacheHolder.pending = false; this.pushData(data, cacheHolder.sessionIndex, query);//sessionIndex may be change }.bind(this); var result = this.queryItems(query); if (typeof result.then == 'function') result.then(onReciveData); else onReciveData(result) this._cache[query] = cacheHolder; } } }; AutoCompleteInput.prototype.pushData = function (data, sessionIndex, query) { if (sessionIndex > this._updatedSession) { this._updatedSession = sessionIndex; this.$vscroller.clearChild(); this._currentData = data; if (data && data.length > 0) { this.$dropdown.removeStyle('display'); } else { this.$dropdown.addStyle('display', 'none'); } var maxHeight = this.getComputedStyleValue('max-height'); if (maxHeight == 'none' || !maxHeight) { maxHeight = 10000; } else { maxHeight = parseFloat(maxHeight.replace('px', '')); } var outBound = Dom["b" /* default */].traceOutBoundingClientRect(this); var bound = this.$input.getBoundingClientRect(); var aTop = bound.top - outBound.top; var aBotom = outBound.bottom - bound.bottom; this.$dropdown.removeClass('top'); if (aTop > aBotom) { maxHeight = Math.min(maxHeight, aTop - 10); } else { maxHeight = Math.min(maxHeight, aBotom - 10); } this.$vscroller.addStyle('max-height', maxHeight + 'px'); this._selectedIndex = -1; data.reduce(function (sync, item, i, arr) { return sync.then(function () { if (this._updatedSession != sessionIndex) return; return new Promise(function (rs) { if (this._updatedSession != sessionIndex) return; var reuseItem = this.$poolItems.length > i ? this.$poolItems[i] : undefined; if (reuseItem) { reuseItem.removeClass('active'); } var newView = this.getItemView(item, i, AutoCompleteInput_, AutoCompleteInput_$, query, reuseItem, this); newView.addClass('absol-autocomplete-input-item'); newView._holderItem = item; newView._holderIndex = i; if (i == this._selectedIndex) newView.addClass('active'); if (this.$poolItems.length <= i) { this.$poolItems.push(newView); } else { this.$poolItems[i] = newView; } this.$vscroller.addChild(newView); if (i == 0) { var estimateHeight = newView.getBoundingClientRect().height * arr.length; if (aTop > aBotom && estimateHeight > aBotom) { this.$dropdown.addClass('top'); } } if (i >= 50 && i % 50 == 0) setTimeout(rs, 0); else rs(); }.bind(this)); }.bind(this)) }.bind(this), Promise.resolve()); } }; AutoCompleteInput.prototype.getItemText = function (item) { if (this.adapter && this.adapter.getItemText) { return this.adapter.getItemText(item, this); } else if (typeof item == 'string') { return item; } else { throw Error('You need adapter.getItemText(item, mAutoCompleteInput) to handle your item text!'); } } AutoCompleteInput.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent) { if (this.adapter && this.adapter.getItemView) { return this.adapter.getItemView(item, index, _, $, query, reuseItem, refParent, this); } else { var text = this.getItemText(item); if (reuseItem) { reuseItem.childNodes[0].innerHTML = text; return reuseItem; } return _({ child: { tag: 'span', class: 'absol-autocomplete-input-item-text', child: { text: text } } }); } }; /** * @param {String} query * @returns {Array} */ AutoCompleteInput.prototype.queryItems = function (query) { if (this.adapter && this.adapter.queryItems) { return this.adapter.queryItems(query, this); } else { throw new Error('Invalid adapter: queryItems(query, mAutoCompleteInput) not found!'); } }; AutoCompleteInput.prototype.clearCache = function (old) { if (typeof old != "number") old = 30; for (var key in this._cache) { var cacheHolder = this._cache[key]; if (this._sessionIndex - cacheHolder.sessionIndex > old) { delete this._cache[key]; } } } AutoCompleteInput.property = {}; AutoCompleteInput.property.adapter = { set: function (value) { if (value instanceof Array) { if (value[0] == 'SearchStringArray') { this._adapter = new adapter_SearchStringArrayAdapter(value[1], value[2]); } else if (value[0] == 'SearchObjectArray') { this._adapter = new adapter_SearchObjectArrayAdapter(value[1], value[2]); } else { throw new Error("Unknown adapter type name"); } } else { this._adapter = value; } if (this.adapter && this.adapter.onAttached) { this.adapter.onAttached(this); } }, get: function () { return this._adapter; } }; AutoCompleteInput.property.selectedItem = { get: function (){ return ( this._currentData && this._currentData[this._selectedIndex]) || null; } }; AutoCompleteInput.property.disabled = { set: function (value) { if (value) { this.addClass('absol-disabled'); } else { this.removeClass('absol-disabled'); } }, get: function () { return this.hasClass('absol-disabled'); } }; AutoCompleteInput.attribute = {}; AutoCompleteInput.attribute.disabled = { set: function (value) { if (value === true || value === 'true' || value === null) { this.disabled = true; } else { this.disabled = false; } }, get: function () { return this.disabled ? 'true' : 'false' }, remove: function () { this.disabled = false; } }; ACore["d" /* default */].install( AutoCompleteInput); /* harmony default export */ var js_AutoCompleteInput = (AutoCompleteInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/boardtable.css var boardtable = __webpack_require__(40); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AElement.js var AElement = __webpack_require__(6); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Board.js var Board_ = ACore["d" /* default */]._; var Board_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function Board() { } Board.tag = "board"; Board.render = function () { return Board_({ class: 'as-board', extendEvent: ['sizechange', 'changeposition'] }); }; Board.prototype.getParent = function () { var parent = this.parentElement; while (parent) { if (parent.classList.contains('ac-board-table')) return parent; parent = parent.parentElement; } return null; }; ACore["d" /* default */].install(Board); /* harmony default export */ var js_Board = (Board); // CONCATENATED MODULE: ./node_modules/absol/src/Math/Vec2.js /*** * * @param {Number} x * @param {Number} y * @constructor */ function Vec2(x, y) { this.x = x; this.y = y; } /*** * * @returns {Vec2} */ Vec2.prototype.copy = function () { return new Vec2(this.x, this.y); }; /*** * * @returns {string} */ Vec2.prototype.toString = function () { return "(" + this.x + ", " + this.y + ")"; }; /*** * * @returns {number} */ Vec2.prototype.abs = function () { return Math.sqrt(this.x * this.x + this.y * this.y); }; /*** * * @returns {Vec2} */ Vec2.prototype.normalized = function () { var l = this.abs(); if (l == 0) l = 1; return this.div(l); }; /*** * * @param {number} h * @returns {Vec2} */ Vec2.prototype.mult = function (h) { return new Vec2(this.x * h, this.y * h); }; /*** * * @param {number} h * @returns {Vec2} */ Vec2.prototype.div = function (h) { return new Vec2(this.x / h, this.y / h); }; /*** * * @param v * @returns {number} */ Vec2.prototype.dist = function (v) { var dx = v.x - this.x; var dy = v.y - this.y; return Math.sqrt(dx * dx + dy * dy); }; /*** * * @param {Vec2} v * @returns {Vec2} */ Vec2.prototype.sub = function (v) { return new Vec2(this.x - v.x, this.y - v.y); }; /*** * * @param {Vec2} v * @returns {Vec2} */ Vec2.prototype.add = function (v) { return new Vec2(this.x + v.x, this.y + v.y); }; /*** * * @returns {Vec2} */ Vec2.prototype.inv = function () { return new Vec2(-this.x, -this.y); }; /*** * * @param {Vec2} v * @param {number} h * @returns {Vec2} */ Vec2.prototype.linear = function (v, h) { return new Vec2(this.x * (1 - h) + v.x * h, this.y * (1 - h) + v.y * h); }; /*** * * @param {Vec2} v1 * @returns {number} */ Vec2.prototype.dot = function (v1) { return this.x * v1.x + this.y * v1.y; }; /*** * * @param {Vec2} v1 * @returns {number} */ Vec2.prototype.cross = function (v1) { return this.x * v1.y - this.y * v1.x; }; /*** * * @returns {number} */ Vec2.prototype.direction = function () { return Math.atan2(this.y, this.x); }; /*** * * @param {Number} dx * @param {Number} dy */ Vec2.prototype.translate = function (dx, dy) { return this.add(new Vec2(dx, dy)); }; /**** * * @param {Number} angle - radian * @returns {Vec2} */ Vec2.prototype.rotate = function (angle) { var sinA = Math.sin(angle); var cosA = Math.cos(angle); var x = this.x * cosA - this.y * sinA; var y = this.x * sinA + this.y * cosA; return new Vec2(x, y); }; /*** * * @returns {Vec2} */ Vec2.prototype.rotate90 = function () { return new Vec2(-this.y, this.x); }; /*** * * @param {Vec2} b */ Vec2.prototype.equals = function (b){ return b && this.x === b.x && this.y === b.y; }; /*** * * @param {number} angle * @returns {Vec2} */ Vec2.fromDirection = function (angle) { return new Vec2(Math.cos(angle), Math.sin(angle)); }; /*** * * @param x * @param y * @returns {Vec2} */ Vec2.make = function (x, y) { if (x instanceof Array) { return new Vec2(x[0], x[1]); } else if (x instanceof Vec2) { return x.copy(); } else return new Vec2(x, y); }; Vec2.ZERO = new Vec2(0, 0); Vec2.OX = new Vec2(1, 0); Vec2.OY = new Vec2(0, 1); /* harmony default export */ var Math_Vec2 = (Vec2); // CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Element.js /* harmony default export */ var Element = (AElement["a" /* default */]); // CONCATENATED MODULE: ./node_modules/absol/src/Math/Rectangle.js /** * * @param {Number} x * @param {Number} y * @param {Number} width * @param {Number} height */ function Rectangle(x, y, width, height) { this.width = width; this.height = height; this.x = x; this.y = y; } /** * * @return {Vec2} * @constructor */ Rectangle.prototype.A = function () { return new Math_Vec2(this.x, this.y); }; /*** * * @return {Vec2} * @constructor */ Rectangle.prototype.B = function () { return new Math_Vec2(this.x + this.width, this.y); }; /*** * * @return {Vec2} * @constructor */ Rectangle.prototype.C = function () { return new Math_Vec2(this.x + this.width, this.y + this.height); }; /*** * * @return {Vec2} * @constructor */ Rectangle.prototype.D = function () { return new Math_Vec2(this.x, this.y + this.height); }; /*** * * @return {number} */ Rectangle.prototype.square = function () { return this.width * this.height; }; Rectangle.prototype.nearestPoint = function (arg0, arg1) { if (arg1) arg0 = Math_Vec2.make(arg0, arg1); var res = this.A(); var mind = res.dist(arg0); var d = this.B().dist(arg0); if (d < mind) { mind = d; res = this.B(); } d = this.C().dist(arg0); if (d < mind) { mind = d; res = this.C(); } d = this.D().dist(arg0); if (d < mind) { mind = d; res = this.D(); } return res; }; Rectangle.prototype.centerPoint = function () { return new Math_Vec2(this.x + this.width / 2, this.y + this.height / 2); }; /*** * * @param {Rectangle} r * @param {number=} margin * @return {boolean} */ Rectangle.prototype.isCollapse = function (r, margin) { if (!margin) margin = 0; return !(this.x >= r.x + r.width + margin || this.y >= r.y + r.height + margin || r.x >= this.x + this.width + margin || r.y >= this.y + this.height + margin); }; /*** * * @param {Rectangle} r * @return {number} */ Rectangle.prototype.collapsedSquare = function (r) { var collapseRect = this.collapsedRect(r); if (collapseRect) { return collapseRect.square(); } else { return 0; } }; /*** * * @param {Rectangle} r * @return {Rectangle} */ Rectangle.prototype.collapsedRect = function (r) { var maxX, minX, maxY, minY, width, height; minX = Math.max(this.x, r.x); minY = Math.max(this.y, r.y); maxX = Math.min(this.x + this.width, r.x + r.width); maxY = Math.min(this.y + this.height, r.y + r.height); width = maxX - minX; height = maxY - minY; if (width >= 0 && height >= 0) { return new Rectangle(minX, minY, width, height); } return null; }; /** * @param {Rectangle} r * @returns {Boolean} */ Rectangle.prototype.contains = function (r) { return (this.x <= r.x) && (this.y <= r.y) && (this.x + this.width >= r.x + r.width) && (this.y + this.height >= r.y + r.height); }; /** * @param {Vec2} p * @returns {Boolean} */ Rectangle.prototype.containsPoint = function (p) { return (this.x <= p.x) && (this.y <= p.y) && (this.x + this.width >= p.x) && (this.y + this.height >= p.y); }; /** * @param {Rectangle} other * @returns {Rectangle} */ Rectangle.prototype.merge = function (other) { var left = Math.min(this.x, other.x); var top = Math.min(this.y, other.y); var right = Math.max(this.x + this.width, other.x + other.width); var bottom = Math.max(this.y + this.height, other.y + other.height); return new Rectangle(left, top, right - left, bottom - top); }; /** * @returns {Rectangle} */ Rectangle.prototype.clone = function () { return new Rectangle(this.x, this.y, this.width, this.height); }; /*** * * @param {Rectangle} r */ Rectangle.prototype.equals = function (r) { return this.x === r.x && this.y === r.y && this.height === r.height && this.width === r.width; }; /** * @param {Number} x * @param {Number} y * @param {Number} width * @param {Number} height * @returns {Rectangle} */ Rectangle.make = function (x, y, width, height) { return new Rectangle(x, y, width, height); }; /** * @param {Number} x * @param {Number} y * @param {Number} width * @param {Number} height * @returns {Rectangle} */ Rectangle.makeCenter = function (x, y, width, height) { return new Rectangle(x - width / 2, y - height / 2, width, height); }; /** * @param {ClientRect|DOMRect} clientRect * @returns {Rectangle} */ Rectangle.fromClientRect = function (clientRect) { return new Rectangle(clientRect.left, clientRect.top, clientRect.width, clientRect.height); }; /*** * * @param {Vec2[]} points * @returns {Rectangle} */ Rectangle.boundingPoints = function (points) { var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity; var point; for (var i = 0; i < points.length; ++i) { point = points[i]; minX = Math.min(minX, point.x); maxX = Math.max(maxX, point.x); minY = Math.min(minY, point.y); maxY = Math.max(maxY, point.y); } return new Rectangle(minX, minY, maxX - minX, maxY - minY); }; /* harmony default export */ var Math_Rectangle = (Rectangle); // CONCATENATED MODULE: ./node_modules/absol/src/String/stringUtils.js function stringHashCode(st) { var hash = 0, i, chr; if (st.length === 0) return hash; for (i = 0; i < st.length; i++) { chr = st.charCodeAt(i); hash = ((hash << 5) - hash) + chr; hash |= 0; // Convert to 32bit integer } return hash; } function crc16($str) { var $CRC16_Lookup = [ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 ] var $crc16 = 0xFFFF; // the CRC var $len = $str.length; var $t; for (var $i = 0; $i < $len; $i++) { $t = ($crc16 >> 8) ^ $str.charCodeAt($i); // High byte Xor Message Byte to get index $crc16 = (($crc16 << 8) & 0xffff) ^ $CRC16_Lookup[$t]; // Update the CRC from table } $crc16 = $crc16.toString(16).toUpperCase(); return $crc16; } // EXTERNAL MODULE: ./node_modules/absol-acomp/css/messagedialog.css var messagedialog = __webpack_require__(41); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/flexiconbutton.css var flexiconbutton = __webpack_require__(92); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/FlexiconButton.js var FlexiconButton_ = ACore["d" /* default */]._; var FlexiconButton_$ = ACore["d" /* default */].$; /** * @extends AElement * @constructor */ function FlexiconButton() { this._icon = null; this.$content = FlexiconButton_$('.as-flexicon-button-content', this); this.$iconCtn = FlexiconButton_$('.as-flexicon-button-icon-container', this); this.$textCtn = FlexiconButton_$('.as-flexicon-button-text-container', this); } FlexiconButton.tag = 'FlexiconButton'.toLowerCase(); FlexiconButton.render = function () { return FlexiconButton_({ tag: 'button', class: 'as-flexicon-button', child: { class: 'as-icon-button-table-box', child: { class: 'as-flexicon-button-content', child: [ '.as-flexicon-button-icon-container', '.as-flexicon-button-text-container', ] } } }); }; FlexiconButton.property = {}; FlexiconButton.property.icon = { set: function (value) { value = value || null; this._icon = value; this.$iconCtn.clearChild(); if (value !== null) { this.$iconCtn.addChild(FlexiconButton_(value)); } }, get: function () { return this._icon; } }; FlexiconButton.property.text = { /*** * * @param {string| {mlKey:string}|*} value */ set: function (value) { value = value || null; this._text = value; this.$textCtn.clearChild(); this.$textCtn.attr('data-ml-key', undefined); if (value === null || value === undefined) { } else if (typeof value === "object") { if (value.mlKey) { this.$textCtn.attr('data-ml-key', value.mlKey); } } else { this.$textCtn.addChild(FlexiconButton_({ text: value + '' })); } }, get: function () { return this._text; } }; ACore["d" /* default */].install(FlexiconButton); /* harmony default export */ var js_FlexiconButton = (FlexiconButton); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MessageDialog.js /*** * @extends AElement * @constructor */ function MessageDialog() { this.$header = Object(ACore["a" /* $ */])('.as-message-dialog-header', this); this.$title = Object(ACore["c" /* _ */])({ tag: 'span', class: 'as-message-dialog-title', child: { text: '' } }); this.$body = Object(ACore["a" /* $ */])('.as-message-dialog-body', this); this.$footer = Object(ACore["a" /* $ */])('.as-message-dialog-footer', this); this.$actionBtns = []; } MessageDialog.tag = 'MessageDialog'.toLowerCase(); MessageDialog.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['action'], class: 'as-message-dialog', child: [ { class: 'as-message-dialog-header', }, { class: 'as-message-dialog-body' }, { class: 'as-message-dialog-footer' } ] }); }; ['addChild', 'removeChild', 'clearChild', 'addChildBefore', 'addChildAfter'].forEach(key => { MessageDialog.prototype[key] = function () { this.$body[key].apply(this.$body, arguments); return this; }; }); MessageDialog.prototype._makeActionBtn = function (action) { var button = Object(ACore["c" /* _ */])({ tag: js_FlexiconButton.tag, class: action.class || [], props: { text: action.text || action.name, icon: action.icon || null }, on: { click: (event) => { this.emit('action', { type: 'action', target: this, originalEvent: event, action: action }, this); } } }); if (action.name) button.attr('data-name', action.name); return button; }; MessageDialog.property = {}; MessageDialog.property.dialogActions = { /*** * @this MessageDialog * @param actions */ set: function (actions) { this._actions = actions || []; this.$actionBtns.forEach(button => button.remove()); this.$actionBtns = this._actions.map(action => this._makeActionBtn(action)); this.$footer.addChild(this.$actionBtns); }, get: function () { return this._actions; } }; MessageDialog.property.dialogTitle = { set: function (value) { this._dialogTitle = value; this.$title.firstChild.data = ''; this.$title.attr('data-ml-key', undefined); if (typeof value === "string") { this.$title.firstChild.data = value; } else if (value && value.mlKey) { this.$title.firstChild.data = ''; this.$title.attr('data-ml-key', value.mlKey); } if (value && !this.$title.parentElement) { this.$header.addChild(this.$title); } else if (!value && this.$title.parentElement) { this.$title.remove(); } }, get: function () { return this._dialogTitle; } }; ACore["d" /* default */].install(MessageDialog); /* harmony default export */ var js_MessageDialog = (MessageDialog); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/YesNoQuestionDialog.js /*** * @extends MessageDialog * @constructor */ function YesNoQuestionDialog() { this.dialogActions = [ { class: 'secondary', text: 'No', name: 'no', }, { class: 'primary', text: 'Yes', name: 'yes' } ]; this.$yesBtn = this.$actionBtns[1]; this.$noBtn = this.$actionBtns[0]; this.$message = Object(ACore["a" /* $ */])('.as-message-dialog-message', this); /*{ class: 'as-message-dialog-footer', child: [ { tag: FlexiconButton.tag, class: ['as-message-dialog-no-btn', 'secondary'], props: { text: 'No' } }, { tag: FlexiconButton.tag, class: ['as-message-dialog-yes-btn', 'primary'], props: { text: 'Yes' } } ] }*/ } YesNoQuestionDialog.tag = 'YesNoQuestionDialog'.toLowerCase(); YesNoQuestionDialog.render = function () { return Object(ACore["c" /* _ */])({ tag: js_MessageDialog.tag, child: [ { tag: 'span', class: 'as-message-dialog-message', child: { text: '' } } ] }); }; YesNoQuestionDialog.eventHandler = {}; YesNoQuestionDialog.property = {}; YesNoQuestionDialog.property.message = { set: function (value) { value = (value || '') + ''; this.$message.firstChild.data = value; }, get: function () { return this.$message.firstChild.data; } }; YesNoQuestionDialog.property.textYes = { set: function (value) { value = (value || 'Yes') + ''; this.$yesBtn.text = value; this.dialogActions[1].text = value; }, get: function () { return this.$yesBtn.text; } }; YesNoQuestionDialog.property.textNo = { set: function (value) { value = (value || 'No') + ''; this.$noBtn.text = value; this.dialogActions[0].text = value; }, get: function () { return this.$noBtn.text; } }; ACore["d" /* default */].install(YesNoQuestionDialog); /* harmony default export */ var js_YesNoQuestionDialog = (YesNoQuestionDialog); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/modal.css var css_modal = __webpack_require__(94); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Modal.js var Modal_$ = ACore["d" /* default */].$; var Modal_ = ACore["d" /* default */]._; function Modal() { this._contentAlign = []; this.contentAlign = 'middle center'; this.$content = Modal_$('.as-modal-content', this); } Modal.tag = 'modal'; Modal.render = function () { return Modal_({ class: 'as-modal', child: '.as-modal-content' }); }; ['findChildBefore', 'findChildAfter', 'removeChild', 'clearChild', 'addChild'].forEach(function (key) { Modal.prototype[key] = function () { this.$content[key].apply(this.$content, arguments); } }); Modal.prototype.getChildren = function (){ return this.$content.children; }; Modal.property = {}; Modal.property.show = { set: function (value) { if (value) this.removeClass('as-hidden'); else this.addClass('as-hidden'); }, get: function () { return !this.hasClass('as-hidden'); } }; Modal.property.contentAlign = { set: function (value) { var thisM = this; this._contentAlign.forEach(function (name) { thisM.removeClass('as-' + name); }) value = value || ''; if (typeof value === 'string') { this._contentAlign = value.split(/\s+/); } else if (value instanceof Array) { this._contentAlign = value; } else { throw new Error("Invalid contentAlign!"); } var thisM = this; this._contentAlign.forEach(function (name) { thisM.addClass('as-' + name); }) }, get: function () { return this._contentAlign.join(' '); } } ACore["d" /* default */].install(Modal); /* harmony default export */ var js_Modal = (Modal); // CONCATENATED MODULE: ./node_modules/absol/src/Converter/ext2MineType.js var ext2MineType = { "323": "text/h323", "*": "application/octet-stream", "3g2": "video/3gpp2", "3gp": "video/3gpp", "7z": "application/x-7z-compressed", aac: "audio/aac", abw: "application/x-abiword", acx: "application/internet-property-stream", ai: "application/postscript", aif: "audio/x-aiff", aifc: "audio/x-aiff", aiff: "audio/x-aiff", arc: "application/x-freearc", asf: "video/x-ms-asf", asr: "video/x-ms-asf", asx: "video/x-ms-asf", au: "audio/basic", avi: "video/x-msvideo", axs: "application/olescript", azw: "application/vnd.amazon.ebook", bas: "text/plain", bcpio: "application/x-bcpio", bin: "application/octet-stream", bmp: "image/bmp", bz: "application/x-bzip", bz2: "application/x-bzip2", c: "text/plain", cat: "application/vnd.ms-pkiseccat", cda: "application/x-cdf", cdf: "application/x-netcdf", cer: "application/x-x509-ca-cert", class: "application/octet-stream", clp: "application/x-msclip", cmx: "image/x-cmx", cod: "image/cis-cod", cpio: "application/x-cpio", crd: "application/x-mscardfile", crl: "application/pkix-crl", crt: "application/x-x509-ca-cert", csh: "application/x-csh", css: "text/css", csv: "text/csv", dcr: "application/x-director", der: "application/x-x509-ca-cert", dir: "application/x-director", dll: "application/x-msdownload", dms: "application/octet-stream", doc: "application/msword", docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document", dot: "application/msword", dvi: "application/x-dvi", dxr: "application/x-director", eot: "application/vnd.ms-fontobject", eps: "application/postscript", epub: "application/epub+zip", etx: "text/x-setext", evy: "application/envoy", exe: "application/octet-stream", fif: "application/fractals", flr: "x-world/x-vrml", gif: "image/gif", gtar: "application/x-gtar", gz: "application/gzip", h: "text/plain", hdf: "application/x-hdf", hlp: "application/winhlp", hqx: "application/mac-binhex40", hta: "application/hta", htc: "text/x-component", htm: "text/html", html: "text/html", htt: "text/webviewhtml", ico: "image/vnd.microsoft.icon", ics: "text/calendar", ief: "image/ief", iii: "application/x-iphone", ins: "application/x-internet-signup", isp: "application/x-internet-signup", jar: "application/java-archive", jfif: "image/pipeg", jpe: "image/jpeg", jpeg: "image/jpeg", jpg: "image/jpeg", js: "text/javascript", json: "application/json", jsonld: "application/ld+json", latex: "application/x-latex", lha: "application/octet-stream", lsf: "video/x-la-asf", lsx: "video/x-la-asf", lzh: "application/octet-stream", m13: "application/x-msmediaview", m14: "application/x-msmediaview", m3u: "audio/x-mpegurl", man: "application/x-troff-man", mdb: "application/x-msaccess", me: "application/x-troff-me", mht: "message/rfc822", mhtml: "message/rfc822", mid: "audio/midi", midi: "audio/midi", mjs: "text/javascript", mny: "application/x-msmoney", mov: "video/quicktime", movie: "video/x-sgi-movie", mp2: "video/mpeg", mp3: "audio/mpeg", mp4: "video/mp4", mpa: "video/mpeg", mpe: "video/mpeg", mpeg: "video/mpeg", mpg: "video/mpeg", mpkg: "application/vnd.apple.installer+xml", mpp: "application/vnd.ms-project", mpv2: "video/mpeg", ms: "application/x-troff-ms", msg: "application/vnd.ms-outlook", mvb: "application/x-msmediaview", nc: "application/x-netcdf", nws: "message/rfc822", oda: "application/oda", odp: "application/vnd.oasis.opendocument.presentation", ods: "application/vnd.oasis.opendocument.spreadsheet", odt: "application/vnd.oasis.opendocument.text", oga: "audio/ogg", ogv: "video/ogg", ogx: "application/ogg", opus: "audio/opus", otf: "font/otf", p10: "application/pkcs10", p12: "application/x-pkcs12", p7b: "application/x-pkcs7-certificates", p7c: "application/x-pkcs7-mime", p7m: "application/x-pkcs7-mime", p7r: "application/x-pkcs7-certreqresp", p7s: "application/x-pkcs7-signature", pbm: "image/x-portable-bitmap", pdf: "application/pdf", pfx: "application/x-pkcs12", pgm: "image/x-portable-graymap", php: "application/x-httpd-php", pko: "application/ynd.ms-pkipko", pma: "application/x-perfmon", pmc: "application/x-perfmon", pml: "application/x-perfmon", pmr: "application/x-perfmon", pmw: "application/x-perfmon", png: "image/png", pnm: "image/x-portable-anymap", pot: "application/vnd.ms-powerpoint", ppm: "image/x-portable-pixmap", pps: "application/vnd.ms-powerpoint", ppt: "application/vnd.ms-powerpoint", pptx: "application/vnd.openxmlformats-officedocument.presentationml.presentation", prf: "application/pics-rules", ps: "application/postscript", pub: "application/x-mspublisher", qt: "video/quicktime", ra: "audio/x-pn-realaudio", ram: "audio/x-pn-realaudio", rar: "application/vnd.rar", ras: "image/x-cmu-raster", rgb: "image/x-rgb", rmi: "audio/mid", roff: "application/x-troff", rtf: "application/rtf", rtx: "text/richtext", scd: "application/x-msschedule", sct: "text/scriptlet", setpay: "application/set-payment-initiation", setreg: "application/set-registration-initiation", sh: "application/x-sh", shar: "application/x-shar", sit: "application/x-stuffit", snd: "audio/basic", spc: "application/x-pkcs7-certificates", spl: "application/futuresplash", src: "application/x-wais-source", sst: "application/vnd.ms-pkicertstore", stl: "application/vnd.ms-pkistl", stm: "text/html", sv4cpio: "application/x-sv4cpio", sv4crc: "application/x-sv4crc", svg: "image/svg+xml", swf: "application/x-shockwave-flash", t: "application/x-troff", tar: "application/x-tar", tcl: "application/x-tcl", tex: "application/x-tex", texi: "application/x-texinfo", texinfo: "application/x-texinfo", tgz: "application/x-compressed", tif: "image/tiff", tiff: "image/tiff", tr: "application/x-troff", trm: "application/x-msterminal", ts: "video/mp2t", tsv: "text/tab-separated-values", ttf: "font/ttf", txt: "text/plain", uls: "text/iuls", ustar: "application/x-ustar", vcf: "text/x-vcard", vrml: "x-world/x-vrml", vsd: "application/vnd.visio", wav: "audio/wav", wcm: "application/vnd.ms-works", wdb: "application/vnd.ms-works", weba: "audio/webm", webm: "video/webm", webp: "image/webp", wks: "application/vnd.ms-works", wmf: "application/x-msmetafile", woff: "font/woff", woff2: "font/woff2", wps: "application/vnd.ms-works", wri: "application/x-mswrite", wrl: "x-world/x-vrml", wrz: "x-world/x-vrml", xaf: "x-world/x-vrml", xbm: "image/x-xbitmap", xhtml: "application/xhtml+xml", xla: "application/vnd.ms-excel", xlc: "application/vnd.ms-excel", xlm: "application/vnd.ms-excel", xls: "application/vnd.ms-excel", xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", xlt: "application/vnd.ms-excel", xlw: "application/vnd.ms-excel", xml: "application/xml", xof: "x-world/x-vrml", xpm: "image/x-xpixmap", xul: "application/vnd.mozilla.xul+xml", xwd: "image/x-xwindowdump", z: "application/x-compress", zip: "application/zip" }; /* harmony default export */ var Converter_ext2MineType = (ext2MineType); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/tool/TextMeasurement.js function TextMeasurement(opts) { opts = opts || {}; this.chars = opts.chars || (" !\"$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "[\\]^_abcdefghijklmnopqrstuvwxyz{|}" + "¥©ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚÝàáâãèéêìíñòóôõùúýĂăĐđĨĩŨũƠơƯưẠ̌̀́̃̉Р" + "ийксуẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊị" + "ỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ–’“”…₫€?").split(''); this.computed = Object.assign({}, opts.computed || {}); } TextMeasurement.prototype.compute = function (font) { if (this.computed[font]) return true; if (!('document' in window)) return false; if (!this.canvas) { this.canvas = document.createElement('canvas'); this.ctx = this.canvas.getContext('2d'); } var ctx = this.ctx; ctx.font = font; var data = {}; var charBoxes = {}; data.charBoxes = charBoxes; var c, d, i, j; var metrics; var n = this.chars.length; var chars = this.chars; for (i = 0; i < n; ++i) { c = chars[i]; metrics = ctx.measureText(c); charBoxes[c] = metrics.width; } var spacing = {}; data.spacing = spacing; var pair; for (i = 0; i < n; ++i) { c = chars[i]; for (j = 0; j < n; ++j) { d = chars[j]; pair = c + d; metrics = ctx.measureText(pair); spacing[pair] = metrics.width - charBoxes[c] - charBoxes[d]; } } this.computed[font] = data; return true; }; /*** * * @param {string} text * @param {string=} font * @return {number} */ TextMeasurement.prototype.measureTextWidth = function (text, font) { var l = text.length; if (l === 0) return 0; var width = 0; var data = this.computed[font]; var charBoxes = data.charBoxes; var spacing = data.spacing; var c, pc; pc = text[0]; width += charBoxes[pc] || charBoxes['0']; for (var i = 1; i < l; ++i) { c = text[i]; width += spacing[pc + c]; width += charBoxes[c] || charBoxes['0']; pc = c; } return width; }; /* harmony default export */ var tool_TextMeasurement = (TextMeasurement); // CONCATENATED MODULE: ./node_modules/absol/src/String/stringFormat.js /** * * @param {String} s * @param {Number} maxLength */ function wrapToLines(s, maxLength) { var res = []; var currentWord = ''; var currentLine = ''; for (var i = 0; i < s.length; ++i) { if (s[i].match(/\s/)) { if (currentWord.length + currentLine.length >= maxLength) { if (currentLine.length > 0) { res.push(currentLine.trim()); currentLine = ''; currentWord = currentWord.trimLeft() + s[i]; } else { currentLine = currentLine + currentWord; res.push(currentLine.trim()); currentLine = ''; currentWord = ''; } } else { currentLine = currentLine + currentWord; currentWord = s[i]; } } else { currentWord = currentWord + s[i]; } } currentLine = (currentLine + currentWord).trim(); if (currentLine.length > 0) res.push(currentLine); return res; } /** * * @param {String} s * @returns {String} */ function nonAccentVietnamese(s) { return s.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a") .replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, "A") .replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e") .replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, "E") .replace(/ì|í|ị|ỉ|ĩ/g, "i") .replace(/Ì|Í|Ị|Ỉ|Ĩ/g, "I") .replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o") .replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, "O") .replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u") .replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, "U") .replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y") .replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, "Y") .replace(/đ/g, "d") .replace(/Đ/g, "D") .replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, "") .replace(/\u02C6|\u0306|\u031B/g, ""); } /** * * @param {String} s * @returns {String} */ function pascalCaseToCamelCase(s) { return s.substr(0, 1).toLowerCase() + s.substr(1); } /** * * @param {String} s * @returns {String} */ function kebabCaseToCamelCase(s) { return s.replace(/-+([^-])/g, function (full, c) { return c.toUpperCase(); }); } /** * * @param {String} s * @returns {String} */ function underScoreToCamelCase(s) { return s.replace(/(_+)?([^_]+)/g, function (full, underscore, word) { if (underscore) { if (word) { return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase(); } else return ''; } else { return word.toLowerCase(); } }); } /** * * @param {String} s * @returns {String} */ function camelCaseToPascalCase(s) { return s.substr(0, 1).toUpperCase() + s.substr(1); } /** * * @param {String} s * @returns {String} */ function underScoreToPascalCase(s) { return s.replace(/(_+|^)?([^_]+)/g, function (full, underscore, word) { return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase(); }); } /** * * @param {String} s * @returns {String} */ function kebabCaseToPascalCase(s) { return s.replace(/(-+|^)([^-])/g, function (full, u, c) { return c.toUpperCase(); }); } /** * * @param {String} s * @returns {String} */ function pascalCaseToKebabCase(s) { return s.replace(/[A-Z][^A-Z]*/g, function (full, index) { if (index == 0) return full.toLowerCase(); return '-' + full.toLowerCase() }); } /** * * @param {String} s * @returns {String} */ function camelCaseToKebabCase(s) { return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) { if (index == 0) return full.toLowerCase(); return '-' + full.toLowerCase() }); } /** * * @param {String} s * @returns {String} */ function underScoreToKebabCase(s) { return s.replace(/(^|_+)([^_]+)/g, function (full, score, word, index) { if (index == 0) return word.toLowerCase(); return '-' + word.toLowerCase() }); } /** * * @param {String} s * @returns {String} */ function pascalCaseToUnderScore(s) { return s.replace(/[A-Z][^A-Z]*/g, function (full, index) { if (index == 0) return full.toLowerCase(); return '_' + full.toLowerCase() }); } /** * * @param {String} s * @returns {String} */ function pascalCaseToUpperUnderScore(s) { return s.replace(/[A-Z][^A-Z]*/g, function (full, index) { if (index == 0) return full.toUpperCase(); return '_' + full.toUpperCase() }); } /** * * @param {String} s * @returns {String} */ function camelCaseToUnderScore(s) { return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) { if (index == 0) return full.toLowerCase(); return '_' + full.toLowerCase() }); } /** * * @param {String} s * @returns {String} */ function camelCaseToUpperUnderScore(s) { return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) { if (index == 0) return full.toUpperCase(); return '_' + full.toUpperCase() }); } /** * * @param {String} s * @returns {String} */ function kebabCaseToUnderScore(s) { return s.replace(/(-+|^)([^-]+)/g, function (full, u, word, index) { if (index == 0) return word.toLowerCase(); return '_' + word.toLowerCase() }); } /** * * @param {String} s * @returns {String} */ function kebabCaseToUpperUnderScore(s) { return s.replace(/(-+|^)([^-]+)/g, function (full, u, word, index) { if (index == 0) return word.toUpperCase(); return '_' + word.toUpperCase() }); } /*** * * @param {String} text */ function normalizeIdent(text, opt) { var spaces = '_'; if (opt && ('spaces' in opt)) { spaces = opt.spaces || ''; } var symbols = '_'; if (opt && ('symbols' in opt)) { symbols = opt.symbols || ''; } var startsWithDigit = false; if (opt && ('startsWithDigit' in opt)) { startsWithDigit = opt.startsWithDigit || false; } var res = nonAccentVietnamese(text); if (typeof spaces === "string") { res = res.replace(/\s+/g, spaces); } if (typeof symbols === 'string') { if (spaces === '_') res = res.replace(/[^a-zA-Z0-9_$]+/g, symbols); else if (spaces === '-') { res = res.replace(/[^a-zA-Z0-9_$\-]+/g, symbols); } } if (!startsWithDigit && res.match(/^[0-9]/)) { res = '$' + res; } return res; } function breakTextToLineByLength(text, limitLength) { limitLength = limitLength || 256; var lines = text.split(/\n/); var newLines = []; var breakLine = line => { var testLine = nonAccentVietnamese(line).toLowerCase(); var wordRgx = /(\(?(\d+([.]\d*)?([eE][+-]?\d+)?|[.]\d+([eE][+-]?\d+)?)\)?)|([()_a-z0-9,.]+)|([^\sa-z0-9,._()])/g; var poss = []; var matched = wordRgx.exec(testLine); while (matched) { poss.push(matched.index); matched = wordRgx.exec(testLine); } if (poss[0] !== 0) poss.unshift(0); poss.push(testLine.length); poss.push(testLine.length); var start = poss[0] || 0; var end, pend = start; var newLine; var chars; for (var i = 1; i < poss.length; ++i) { end = poss[i]; if (end - start > limitLength || i+1 === poss.length) { newLine = line.substring(start, pend).trimEnd(); if (newLine.length > limitLength) { chars = newLine.split(''); while (chars.length > 0) { newLine = chars.splice(0, limitLength).join(''); newLines.push(newLine); } } else if (newLine.length >0){ newLines.push(newLine); } start = pend; } pend = end; } }; lines.forEach(line => breakLine(line)); return newLines.join('\n'); } // window.t = `Sử dụng công thức tính: (Luong_Gio OT150 0.5) + (Luong_Gio OT200 1.0) + (Luong_Gio OT210 1.1) + (Luong_Gio OT270 1.7) + (Luong_Gio OT300 2.0)`; // console.log(breakTextToLineByLength(t, 50)) String.nonAccentVietnamese = nonAccentVietnamese; String.prototype.nonAccentVietnamese = function () { return String.nonAccentVietnamese(this); }; // CONCATENATED MODULE: ./node_modules/absol/src/Math/int.js /** * * @param {number} x * @param {number} l * @param {number} h * @param {number} L * @param {number} H * @returns {number} */ function int_map(x, l, h, L, H) { return (x - l) / (h - l) * (H - L) + L; } function sumArr(arr) { var res = 0; for (var i = 0; i < arr.length; ++i) res += arr[i]; return res; } function radianInRange(x, start, end) { if (start > end) return radianInRange(x, end, start); if (x < start) x += (Math.PI * 2) * Math.ceil((start - x) / 2 / Math.PI); if (x > end) x -= (Math.PI * 2) * Math.ceil((x - end) / 2 / Math.PI); return x >= start && x <= end; } function int_distance(x0, y0, x1, y1) { var dx = x0 - x1; var dy = y0 - y1; return Math.sqrt(dx * dx + dy * dy); } /** * * @param {Number} numb * @param {Number} floatFixed * @param {"."|","} decimalSeparator * @param {","|"."} thousandsSeparator * @param {Number} decimalPadding */ function numberToString(numb, floatFixed, decimalSeparator, thousandsSeparator, decimalPadding) { if (floatFixed === undefined || floatFixed === null || typeof floatFixed != "number" || isNaN(floatFixed) || floatFixed < -1) floatFixed = -1; if (decimalSeparator === undefined || decimalSeparator === null || (decimalSeparator != '.' && decimalSeparator != ',')) decimalSeparator = '.'; if (thousandsSeparator === undefined || thousandsSeparator === null || (floatFixed >= 0 && thousandsSeparator == decimalSeparator)) thousandsSeparator = undefined; if (thousandsSeparator != ',' && thousandsSeparator != '.') thousandsSeparator = undefined; if (decimalPadding === undefined || decimalPadding === null || typeof decimalPadding != "number" || isNaN(decimalPadding) || decimalPadding < 0) decimalPadding = 0; var text = numb.toString(); var matched = text.match(/[+-]?([0-9]*)(\.([0-9]*))?(e([+-]?[0-9]+))?/); var dec = matched[1] || ''; var real = matched[3] || ''; var floatPoint = parseInt(matched[5] || '0'); var decDigits = dec.split('').map(function (d) { return parseInt(d) }); var realDigits = real.split('').map(function (d) { return parseInt(d) }); while (floatPoint < 0) { if (decDigits.length > 0) { realDigits.unshift(decDigits.pop()); } else { realDigits.unshift(0); } floatPoint++; } while (floatPoint > 0) { if (realDigits.length > 0) { decDigits.push(realDigits.unshift()); } else { decDigits.push(0); } floatPoint++; } var mem = 0, i, cValue; if (floatFixed > realDigits.length) { while (realDigits.length < floatFixed) { realDigits.push(0); } } else if (floatFixed < realDigits.length && floatFixed >= 0) { i = floatFixed; mem = realDigits[i] >= 5 ? 1 : 0; realDigits.splice(floatFixed); --i; while (mem > 0) { if (i >= 0) { cValue = realDigits[i] + mem; realDigits[i] = cValue % 10; mem = Math.floor(cValue / 10); } else { if (decDigits.length + i < 0) decDigits.unshift(0); cValue = decDigits[decDigits.length + i] + mem; decDigits[decDigits.length + i] = cValue % 10; mem = Math.floor(cValue / 10); } --i; } } while (decDigits.length < decimalPadding) { decDigits.unshift(0); } var decText = numb < 0 ? '-' : ''; var breadMod = (decDigits.length + 2) % 3; if (thousandsSeparator) { for (i = 0; i < decDigits.length; ++i) { decText += decDigits[i]; if (i % 3 == breadMod && i + 1 < decDigits.length) { decText += thousandsSeparator; } } } else { decText += decDigits.join(''); } var realText = realDigits.length == 0 ? '' : decimalSeparator + realDigits.join(''); return decText + realText; } /*** * * @param value * @param {string=}decimalSeparator */ function isNumber(value, decimalSeparator) { decimalSeparator = decimalSeparator || '.'; if (typeof value === "number") return true; if (typeof value !== "string") return false; var thousandsSeparator = decimalSeparator === '.' ? ',' : '.'; value = value.split(thousandsSeparator).join(''); value = value.replace(decimalSeparator, '.'); return !!value.match(/^[+-]?\d+(\.\d+)?$/); } function numberAutoFixed(x, eDelta) { eDelta = eDelta || 10; eDelta = Math.round(eDelta); var e = parseFloat('1e+' + eDelta); return Math.round(x * e) / e; } /*** * * @param {number} number * @param {number} length * @returns {string} */ function integerZeroPadding(number, length) { var res = number + ''; while (res.length < length) res = '0' + res; return res; } function harmonicMean(a, b) { return 2 / (1 / a + 1 / b); } // CONCATENATED MODULE: ./node_modules/absol/src/Time/datetime.js var MILLIS_PER_DAY = 24 * 3600000; var MILLIS_PER_HOUR = 3600000; var MILLIS_PER_MINUTE = 60000; var _default_first_day_of_week = 1; function getDefaultFirstDayOfWeek() { return _default_first_day_of_week; } function setDefaultFirstDayOfWeek(value) { if (isNaN(value) || !isFinite(value)) return; value = Math.floor(value) % 7; _default_first_day_of_week = value; } /** * * @param {Date} date * @returns {String} */ function ddmmyyyy(date) { return formatDateTime(date, 'dd/MM/yyyy'); } var language2LocalDateFormat = { "af-ZA": "yyyy/mm/dd", "am-ET": "d/m/yyyy", "ar-AE": "dd/mm/yyyy", "ar-BH": "dd/mm/yyyy", "ar-DZ": "dd-mm-yyyy", "ar-EG": "dd/mm/yyyy", "ar-IQ": "dd/mm/yyyy", "ar-JO": "dd/mm/yyyy", "ar-KW": "dd/mm/yyyy", "ar-LB": "dd/mm/yyyy", "ar-LY": "dd/mm/yyyy", "ar-MA": "dd-mm-yyyy", "ar-OM": "dd/mm/yyyy", "ar-QA": "dd/mm/yyyy", "ar-SA": "dd/mm/yy", "ar-SY": "dd/mm/yyyy", "ar-TN": "dd-mm-yyyy", "ar-YE": "dd/mm/yyyy", "arn-CL": "dd-mm-yyyy", "as-IN": "dd-mm-yyyy", "az-Cyrl-AZ": "dd.mm.yyyy", "az-Latn-AZ": "dd.mm.yyyy", "ba-RU": "dd.mm.yy", "be-BY": "dd.mm.yyyy", "bg-BG": "dd.m.yyyy", "bn-BD": "dd-mm-yy", "bn-IN": "dd-mm-yy", "bo-CN": "yyyy/m/d", "br-FR": "dd/mm/yyyy", "bs-Cyrl-BA": "d.m.yyyy", "bs-Latn-BA": "d.m.yyyy", "ca-ES": "dd/mm/yyyy", "co-FR": "dd/mm/yyyy", "cs-CZ": "d.m.yyyy", "cy-GB": "dd/mm/yyyy", "da-DK": "dd-mm-yyyy", "de-AT": "dd.mm.yyyy", "de-CH": "dd.mm.yyyy", "de-DE": "dd.mm.yyyy", "de-LI": "dd.mm.yyyy", "de-LU": "dd.mm.yyyy", "dsb-DE": "d. m. yyyy", "dv-MV": "dd/mm/yy", "el-GR": "d/m/yyyy", "en-029": "mm/dd/yyyy", "en-AU": "d/mm/yyyy", "en-BZ": "dd/mm/yyyy", "en-CA": "dd/mm/yyyy", "en-GB": "dd/mm/yyyy", "en-IE": "dd/mm/yyyy", "en-IN": "dd-mm-yyyy", "en-JM": "dd/mm/yyyy", "en-MY": "d/m/yyyy", "en-NZ": "d/mm/yyyy", "en-PH": "m/d/yyyy", "en-SG": "d/m/yyyy", "en-TT": "dd/mm/yyyy", "en-US": "m/d/yyyy", "en-ZA": "yyyy/mm/dd", "en-ZW": "m/d/yyyy", "es-AR": "dd/mm/yyyy", "es-BO": "dd/mm/yyyy", "es-CL": "dd-mm-yyyy", "es-CO": "dd/mm/yyyy", "es-CR": "dd/mm/yyyy", "es-DO": "dd/mm/yyyy", "es-EC": "dd/mm/yyyy", "es-ES": "dd/mm/yyyy", "es-GT": "dd/mm/yyyy", "es-HN": "dd/mm/yyyy", "es-MX": "dd/mm/yyyy", "es-NI": "dd/mm/yyyy", "es-PA": "mm/dd/yyyy", "es-PE": "dd/mm/yyyy", "es-PR": "dd/mm/yyyy", "es-PY": "dd/mm/yyyy", "es-SV": "dd/mm/yyyy", "es-US": "m/d/yyyy", "es-UY": "dd/mm/yyyy", "es-VE": "dd/mm/yyyy", "et-EE": "d.mm.yyyy", "eu-ES": "yyyy/mm/dd", "fa-IR": "mm/dd/yyyy", "fi-FI": "d.m.yyyy", "fil-PH": "m/d/yyyy", "fo-FO": "dd-mm-yyyy", "fr-BE": "d/mm/yyyy", "fr-CA": "yyyy-mm-dd", "fr-CH": "dd.mm.yyyy", "fr-FR": "dd/mm/yyyy", "fr-LU": "dd/mm/yyyy", "fr-MC": "dd/mm/yyyy", "fy-NL": "d-m-yyyy", "ga-IE": "dd/mm/yyyy", "gd-GB": "dd/mm/yyyy", "gl-ES": "dd/mm/yy", "gsw-FR": "dd/mm/yyyy", "gu-IN": "dd-mm-yy", "ha-Latn-NG": "d/m/yyyy", "he-IL": "dd/mm/yyyy", "hi-IN": "dd-mm-yyyy", "hr-BA": "d.m.yyyy.", "hr-HR": "d.m.yyyy", "hsb-DE": "d. m. yyyy", "hu-HU": "yyyy. mm. dd.", "hy-AM": "dd.mm.yyyy", "id-ID": "dd/mm/yyyy", "ig-NG": "d/m/yyyy", "ii-CN": "yyyy/m/d", "is-IS": "d.m.yyyy", "it-CH": "dd.mm.yyyy", "it-IT": "dd/mm/yyyy", "iu-Cans-CA": "d/m/yyyy", "iu-Latn-CA": "d/mm/yyyy", "ja-JP": "yyyy/mm/dd", "ka-GE": "dd.mm.yyyy", "kk-KZ": "dd.mm.yyyy", "kl-GL": "dd-mm-yyyy", "km-KH": "yyyy-mm-dd", "kn-IN": "dd-mm-yy", "ko-KR": "yyyy-mm-dd", "kok-IN": "dd-mm-yyyy", "ky-KG": "dd.mm.yy", "lb-LU": "dd/mm/yyyy", "lo-LA": "dd/mm/yyyy", "lt-LT": "yyyy.mm.dd", "lv-LV": "yyyy.mm.dd.", "mi-NZ": "dd/mm/yyyy", "mk-MK": "dd.mm.yyyy", "ml-IN": "dd-mm-yy", "mn-MN": "yy.mm.dd", "mn-Mong-CN": "yyyy/m/d", "moh-CA": "m/d/yyyy", "mr-IN": "dd-mm-yyyy", "ms-BN": "dd/mm/yyyy", "ms-MY": "dd/mm/yyyy", "mt-MT": "dd/mm/yyyy", "nb-NO": "dd.mm.yyyy", "ne-NP": "m/d/yyyy", "nl-BE": "d/mm/yyyy", "nl-NL": "d-m-yyyy", "nn-NO": "dd.mm.yyyy", "nso-ZA": "yyyy/mm/dd", "oc-FR": "dd/mm/yyyy", "or-IN": "dd-mm-yy", "pa-IN": "dd-mm-yy", "pl-PL": "yyyy-mm-dd", "prs-AF": "dd/mm/yy", "ps-AF": "dd/mm/yy", "pt-BR": "d/m/yyyy", "pt-PT": "dd-mm-yyyy", "qut-GT": "dd/mm/yyyy", "quz-BO": "dd/mm/yyyy", "quz-EC": "dd/mm/yyyy", "quz-PE": "dd/mm/yyyy", "rm-CH": "dd/mm/yyyy", "ro-RO": "dd.mm.yyyy", "ru-RU": "dd.mm.yyyy", "rw-RW": "m/d/yyyy", "sa-IN": "dd-mm-yyyy", "sah-RU": "mm.dd.yyyy", "se-FI": "d.m.yyyy", "se-NO": "dd.mm.yyyy", "se-SE": "yyyy-mm-dd", "si-LK": "yyyy-mm-dd", "sk-SK": "d. m. yyyy", "sl-SI": "d.m.yyyy", "sma-NO": "dd.mm.yyyy", "sma-SE": "yyyy-mm-dd", "smj-NO": "dd.mm.yyyy", "smj-SE": "yyyy-mm-dd", "smn-FI": "d.m.yyyy", "sms-FI": "d.m.yyyy", "sq-AL": "yyyy-mm-dd", "sr-Cyrl-BA": "d.m.yyyy", "sr-Cyrl-CS": "d.m.yyyy", "sr-Cyrl-ME": "d.m.yyyy", "sr-Cyrl-RS": "d.m.yyyy", "sr-Latn-BA": "d.m.yyyy", "sr-Latn-CS": "d.m.yyyy", "sr-Latn-ME": "d.m.yyyy", "sr-Latn-RS": "d.m.yyyy", "sv-FI": "d.m.yyyy", "sv-SE": "yyyy-mm-dd", "sw-KE": "m/d/yyyy", "syr-SY": "dd/mm/yyyy", "ta-IN": "dd-mm-yyyy", "te-IN": "dd-mm-yy", "tg-Cyrl-TJ": "dd.mm.yy", "th-TH": "d/m/yyyy", "tk-TM": "dd.mm.yy", "tn-ZA": "yyyy/mm/dd", "tr-TR": "dd.mm.yyyy", "tt-RU": "dd.mm.yyyy", "tzm-Latn-DZ": "dd-mm-yyyy", "ug-CN": "yyyy-m-d", "uk-UA": "dd.mm.yyyy", "ur-PK": "dd/mm/yyyy", "uz-Cyrl-UZ": "dd.mm.yyyy", "uz-Latn-UZ": "dd/mm yyyy", "vi-VN": "dd/mm/yyyy", "wo-SN": "dd/mm/yyyy", "xh-ZA": "yyyy/mm/dd", "yo-NG": "d/m/yyyy", "zh-CN": "yyyy/m/d", "zh-HK": "d/m/yyyy", "zh-MO": "d/m/yyyy", "zh-SG": "d/m/yyyy", "zh-TW": "yyyy/m/d", "zu-ZA": "yyyy/mm/dd", }; var dateFormat2LocationList = Object.keys(language2LocalDateFormat).reduce(function (ac, cr) { ac[language2LocalDateFormat[cr]] = ac[language2LocalDateFormat[cr]] || []; ac[language2LocalDateFormat[cr]].push(cr); return ac; }, {}); var dateFormatList = Object.keys(dateFormat2LocationList); /** * * @param {Date} date * @returns {String} */ function yyymmdd(date) { return formatDateTime(date, 'yyyy/MM/dd'); } var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; var shortDayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; var shortMonthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; var formatTokenRegex = /([,.\-\/])|([a-zA-Z0-9]+)/g;//more var DATE_TIME_TOKEN_RGX = /([^\s.\/:\-,]+)|([.\/:\-,]+)/i; /** * * @param {Date} date * @param {String=} format * @returns {String} */ function formatDateString(date, format) { format = format || 'dd/mm/yyyy'; var dt = date.getDate(); var day = date.getDay(); var month = date.getMonth(); var year = date.getFullYear() return format.replace(formatTokenRegex, function (x) { switch (x) { case "dddd": return dayNames[day]; case "ddd": return shortDayNames[day]; case "dd": return dt < 10 ? '0' + dt : '' + dt; case "d": return '' + dt; case "mmmm": return monthNames[month]; case "mmm": return shortMonthNames[month]; case "mm": return (month + 1) < 10 ? '0' + (month + 1) : '' + (month + 1); case "m": return '' + (month + 1); case 'yy': return (year + '').match(/..$/)[0]; case 'yyyy': return year + ''; default: return x; } }); } var LOCAL_DATE_FORMAT = (function () { var d = new Date(2021, 4, 4); var s = d.toLocaleDateString(); var fm = s.replace(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (token) { switch (token) { case '2021': return 'yyyy'; case '5': return 'M'; case '05': return 'MM'; case '4': return 'd'; case '04': return 'dd'; default: return token; } }); return fm; })(); var LOCAL_DATE_TIME_FORMAT = (function () { var d = new Date(2021, 4, 4, 6, 7, 3); var s = d.toLocaleString(); var fm = s.replace(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (token) { switch (token) { case '2021': return 'yyyy'; case '5': return 'M'; case '05': return 'MM'; case '4': return 'd'; case '04': return 'dd'; case '06': if (new Date(2021, 4, 4, 18, 7, 3).toLocaleString().indexOf(18) >= 0) return 'HH'; return 'hh'; case '6': return 'h'; case '07': return 'mm'; case '7': return 'm'; case '03': return 'ss'; case '3': return 's'; case 'AM': return 'a' default: return token; } }); return fm; })(); function formartDateString() { window.ALogger.warn("spelled incorrectly: formartDateString"); return formatDateString.apply(null, arguments); } /** * * @param {String} text * @param {String} format * @returns {Date} */ function parseDateString(text, format) { text = nonAccentVietnamese(text).toLowerCase(); format = nonAccentVietnamese(format).toLowerCase(); var textTokens = text.match(formatTokenRegex) || []; var formatTokens = format.match(formatTokenRegex) || []; var year = new Date().getFullYear(); var month = 0; var day = 1; var n = Math.min(textTokens.length, formatTokens.length); var textToken; var formatToken; for (var i = 0; i < n; ++i) { textToken = textTokens[i]; formatToken = formatTokens[i]; switch (formatToken) { case "dd": day = parseInt(textToken); break; case "d": day = parseInt(textToken); break; case "mmmm": month = monthNames.indexOf(textToken.substr(0, 1).toUpperCase() + textToken.substr(1).toLowerCase()); break; case "mmm": month = shortMonthNames.indexOf(textToken.substr(0, 1).toUpperCase() + textToken.substr(1).toLowerCase()); break; case "mm": case 'MM': month = parseInt(textToken) - 1; break; case "m": case 'M': month = parseInt(textToken) - 1; break; case 'yy': year = Math.floor((new Date().getFullYear()) / 100) * 100 + parseInt(textToken); break; case 'yyyy': year = parseInt(textToken); break; default: if (textToken !== formatToken) throw new Error('Unexpected token ' + textToken); } } if (isNaN(year)) throw new Error('Invalid year'); if (isNaN(month) && month !== -1) { throw new Error('Invalid month'); } else { month = Math.max(0, Math.min(11, month)); } if (!isNaN(day)) { day = Math.max(1, Math.min(31, day)); if (!isNaN(month)) { day = Math.min(daysInMonth(2000, month), day); if (!isNaN(year)) day = Math.min(daysInMonth(year, month), day); } } else { throw new Error('Invalid day'); } return new Date(year, month, day); } /*** * * @param date * @param {number} delta - must be a integer * @param {boolean=} gmt * @returns {Date} */ function addDate(date, delta, gmt) { delta = Math.round(delta); var res = beginOfDay(date, gmt); if (gmt) { res.setUTCDate(date.getUTCDate() + delta); } else { res.setDate(date.getDate() + delta); } return beginOfDay(res, gmt); } /** * @param {Date} date * @param {boolean=} gmt * @return {Date} */ function prevDate(date, gmt) { return addDate(date, -1, gmt); } /** * @param {Date} date * @param {boolean=} gmt * @return {Date} */ function nextDate(date, gmt) { return addDate(date, 1, gmt); } /**** * * @param {Date} date * @param {boolean=} gmt * @param {number=} startDayOfWeek * @returns {number} */ function weekIndexOf(date, gmt, startDayOfWeek) { if (typeof startDayOfWeek !== "number") startDayOfWeek = getDefaultFirstDayOfWeek(); var by = beginOfYear(date, gmt); var byw = beginOfWeek(by, gmt, startDayOfWeek); var bw = beginOfWeek(date, gmt, startDayOfWeek); if (compareYear(by, bw) > 0) { return weekIndexOf(bw, gmt, startDayOfWeek); } var i = compareYear(byw, by) < 0 ? -1 : 0; return Math.floor(compareDate(date, byw, gmt) / 7) + i; } /*** * * @param {number} year * @param {number} weekIdx * @param {boolean=} gmt * @param {number=} startDayOfWeek * @returns {Date} */ function weekInYear(year, weekIdx, gmt, startDayOfWeek) { if (typeof startDayOfWeek !== "number") startDayOfWeek = getDefaultFirstDayOfWeek(); var bg = new Date(year, 0, 1); if (gmt) bg.setUTCHours(0); var byw = beginOfWeek(bg, gmt, startDayOfWeek); var d = compareYear(bg, byw) > 0 ? MILLIS_PER_DAY * 7 : 0; return new Date(byw.getTime() + d + weekIdx * 7 * MILLIS_PER_DAY); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at xx:xx:xx:00 */ function beginOfSecond(date, gmt) { var res = new Date(date.getTime()); if (gmt) res.setUTCMilliseconds(0); else res.setMilliseconds(0); return res; } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at xx:xx:00 */ function beginOfMinute(date, gmt) { var res = new Date(date.getTime()); if (gmt) res.setUTCSeconds(0, 0); else res.setSeconds(0, 0); return res; } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 */ function beginOfDay(date, gmt) { var res = new Date(date.getTime()); if (gmt) res.setUTCHours(0, 0, 0, 0); else res.setHours(0, 0, 0, 0) return res; } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at xx:00 */ function beginOfHour(date, gmt) { var res = new Date(date.getTime()); if (gmt) res.setUTCMinutes(0, 0, 0); else res.setMinutes(0, 0, 0); return res; } /** * @param {Date} date * @param {Boolean=} gmt default:false * @param {number=} startDayOfWeek default:0 * @return {Date} date at 00:00 */ function beginOfWeek(date, gmt, startDayOfWeek) { if (typeof startDayOfWeek !== "number") startDayOfWeek = getDefaultFirstDayOfWeek(); var res = beginOfDay(date, gmt); if (isNaN(res.getTime())) return res; while ((gmt ? res.getUTCDay() : res.getDay()) !== startDayOfWeek) { res = prevDate(res, gmt); } return res; } /*** * * @param {Date} date * @param {number} delta * @param {boolean=} gmt */ function addWeek(date, delta, gmt) { date = beginOfWeek(date, gmt); delta = Math.round(delta); return addDate(date, delta * 7, gmt); } /**** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function nextWeek(date, gmt) { return addWeek(date, 1, gmt); } /**** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function prevWeek(date, gmt) { return addWeek(date, -1, gmt); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function datetime_beginOfMonth(date, gmt) { var m = gmt ? date.getUTCMonth() : date.getMonth(); var y = gmt ? date.getUTCFullYear() : date.getFullYear(); var res = new Date(); if (gmt) res.setUTCFullYear(y, m, 1); else res.setFullYear(y, m, 1); return beginOfDay(res, gmt); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function beginOfQuarter(date, gmt) { var y = gmt ? date.getUTCFullYear() : date.getFullYear(); var m = gmt ? date.getUTCMonth() : date.getMonth(); m = Math.floor(m / 3) * 3; var res = new Date(); if (gmt) res.setUTCFullYear(y, m, 1); else res.setFullYear(y, m, 1); return beginOfDay(res, gmt); } /*** * * @param {Date} date * @param {number=} delta * @param {boolean=} gmt */ function addQuarter(date, delta, gmt) { delta = Math.round(delta); date = beginOfQuarter(date, gmt); return addMonth(date, delta * 3, gmt); } /*** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function nextQuarter(date, gmt) { date = beginOfQuarter(date); return nextMonth(nextMonth(nextMonth(date, gmt), gmt), gmt); } /*** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function prevQuarter(date, gmt) { date = beginOfQuarter(date, gmt); return prevMonth(prevMonth(prevMonth(date, gmt), gmt), gmt); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function beginOfYear(date, gmt) { var y = gmt ? date.getUTCFullYear() : date.getFullYear(); var res = new Date(); if (gmt) res.setUTCFullYear(y, 0, 1); else res.setFullYear(y, 0, 1); return beginOfDay(res, gmt); } /** * @param {Date} date * @param {number} delta * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function addYear(date, delta, gmt) { delta = Math.round(delta); var y = gmt ? date.getUTCFullYear() : date.getFullYear(); var res = new Date(); if (gmt) res.setUTCFullYear(y + delta, 0, 1); else res.setFullYear(y + delta, 0, 1); return beginOfDay(res, gmt); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function nextYear(date, gmt) { return addYear(date, 1, gmt); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function prevYear(date, gmt) { return addYear(date, -1, gmt); } /** * @param {Date} date0 * @param {Date} date1 * @param {Boolean=} gmt default:false * @return {number} */ function compareDate(date0, date1, gmt) { date0 = beginOfDay(date0, gmt); date1 = beginOfDay(date1, gmt); //Date(1975, 5, 12) has 1 hour extend return Math.floor((date0.getTime() - date1.getTime()) / 86400000); } /** * @param {Date} date0 * @param {Date} date1 * @param {Boolean=} gmt default:false * @return {number} */ function compareMonth(date0, date1, gmt) { var m0 = gmt ? date0.getUTCMonth() : date0.getMonth(); var y0 = gmt ? date0.getUTCFullYear() : date0.getFullYear(); var m1 = gmt ? date1.getUTCMonth() : date1.getMonth(); var y1 = gmt ? date1.getUTCFullYear() : date1.getFullYear(); return (y0 - y1) * 12 + (m0 - m1); } /*** * * @param {Date} date0 * @param {Date} date1 * @param {boolean=}gmt * @returns {number} */ function compareYear(date0, date1, gmt) { var y0 = gmt ? date0.getUTCFullYear() : date0.getFullYear(); var y1 = gmt ? date1.getUTCFullYear() : date1.getFullYear(); return y0 - y1; } /** * * @param {Date} date * @param {number} delta * @param {boolean=} gmt * @returns {Date} */ function addMonth(date, delta, gmt) { var res = datetime_beginOfMonth(date, gmt); if (gmt) { res.setUTCMonth(res.getUTCMonth() + delta); } else { res.setMonth(res.getMonth() + delta); } return beginOfDay(res, gmt); } /** * * @param {Date} date * @param {number} delta * @param {boolean=} gmt * @returns {Date} */ function addMonthKeepDate(date, delta, gmt) { var res = addMonth(date, delta, gmt); var dateNum = gmt ? date.getUTCDate() : date.getDate(); var dim = daysInMonth(gmt ? date.getUTCFullYear() : date.getFullYear(), gmt ? date.getUTCFullYear() : date.getFullYear()); dateNum = Math.min(dateNum, dim); res = addDate(res, dateNum - 1, gmt); return res; } /** * * @param {Date} date * @param {number} delta * @param {boolean=} gmt * @returns {Date} */ function addMonthKeepDateTime(date, delta, gmt) { var dayOffset = date.getTime() - beginOfDay(date, gmt).getTime(); var res = addMonthKeepDate(date, delta, gmt); res = new Date(res.getTime() + dayOffset); return res; } /** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function nextMonth(date, gmt) { return addMonth(date, 1, gmt); } /** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function prevMonth(date, gmt) { return addMonth(date, -1, gmt); } /** * note:argument will be converted to 00h00 * @param date0 * @param date1 */ function monthOfTwoDate(date0, date1) { date0 = beginOfDay(date0); date1 = beginOfDay(date1); var temp; var sign = 1; var res = 0; var cmdv = compareDate(date0, date1); if (cmdv > 0) { sign = -1; temp = date0; date0 = date1; date1 = temp; } else if (cmdv === 0) return 0; var d1 = date0.getDate(); var d2 = date1.getDate(); var y0 = date0.getFullYear(); var y1 = date1.getFullYear(); var m0 = date0.getMonth(); var m1 = date1.getMonth(); var nextMD0; if (d1 <= d2) { res += (y1 - y0) * 12 + (m1 - m0); res += 2 * (d2 - d1) / (daysInMonth(y0, m0) + daysInMonth(y1, m1)); } else { res += (y1 - y0) * 12 + (m1 - m0) - 1; nextMD0 = datetime_beginOfMonth(nextMonth(date0)); res += 2 * (compareDate(nextMD0, date0) + compareDate(date1, datetime_beginOfMonth(date1))) / (daysInMonth(y0, m0) + daysInMonth(y1, m1)) } return sign * res; } /** * * @param {Number} year * @param {Number} month * @returns {Number} */ function daysInMonth(year, month) { var start = new Date(year, month, 1); var end = nextMonth(start); return compareDate(end, start); } /**** * * @param text * @param format support d, M, Y, Q * @param {*=} opt * @returns {Date} */ function parseDateTime(text, format, opt) { opt = Object.assign({ startDayOfWeek: 0 }, opt); var tokenMap = {}; var txtRgx = new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'); var fmRgx = new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'); var tkMatched, fmMatched; tkMatched = txtRgx.exec(text); fmMatched = fmRgx.exec(format); var tkText, fmText; while (tkMatched && fmMatched) { tkText = tkMatched[0]; fmText = fmMatched[0]; switch (fmText) { case 'd': case 'dd': tokenMap.day = parseInt(tkText, 10); break; case 'w': case 'ww': tokenMap.week = parseInt(tkText, 10) - 1; break; case 'M': case 'MM': tokenMap.month = parseInt(tkText, 10) - 1; break; case 'y': case 'yyyy': tokenMap.year = parseInt(tkText, 10); break; case 'h': case 'hh': case 'H': case 'HH': tokenMap.hour = parseInt(tkText, 10); break; case 'm': case 'mm': tokenMap.minute = parseInt(tkText, 10); break; case 'a': if (tkText === 'AM' || tkText === 'PM') tokenMap.period = tkText; else throw new Error('Invalid period(a):' + tkText) break; case 'Q': case 'QQ': tokenMap.month = (parseInt(tkText, 10) - 1) * 3; break; default: if (tkText !== fmText) { throw new Error('Unexpected token ' + JSON.stringify(tkText) + ' at ' + tkMatched.index + ', expected ' + fmText); } } tkMatched = txtRgx.exec(text); fmMatched = fmRgx.exec(format); } if (tokenMap.period) { if (tokenMap.period === 'AM' && tokenMap.hour === 12) tokenMap.hour = 0; else if (tokenMap.period === "PM" && tokenMap.hour < 12) tokenMap.hour += 12; } var paramNames = ['year', 'month', 'day', 'hour', 'minute', 'second']; var paramShortNames = ['y', 'M', 'd', 'h', 'm', 's']; var paramDefaultValues = [new Date().getFullYear(), 0, 1, 0, 0, 0]; var resParam = paramDefaultValues.slice(); var paramList = paramNames.reduce(function (ac, cr, i) { var sN = paramShortNames[i]; if (cr in tokenMap) { ac += sN; } return ac; }, ''); var paramName; for (var i = 0; i < paramNames.length; ++i) { paramName = paramNames[i]; resParam[i] = tokenMap[paramName] === undefined ? paramDefaultValues[i] : tokenMap[paramName]; } var weekDate; if ('week' in tokenMap && !isNaN(tokenMap.week)) { weekDate = weekInYear(resParam[0], tokenMap.week, false, opt.startDayOfWeek); resParam[1] = weekDate.getMonth(); resParam[2] = weekDate.getDate(); } switch (paramList) { case 'hm': resParam.splice(1, 2, new Date().getMonth(), new Date().getDate()); break; } return new Date(resParam[0], resParam[1], resParam[2], resParam[3], resParam[4], resParam[5]); } /*** * * @param {Date} date * @param {string} format * @param {*=} opt * @return {string} */ function formatDateTime(date, format, opt) { opt = Object.assign({ startDayOfWeek: 0 }, opt); var fmRgx = new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'); return format.replace(fmRgx, function (s) { var res = s; switch (s) { case 'd': case 'dd': res = integerZeroPadding(date.getDate(), s.length); break; case 'w': case 'ww': res = integerZeroPadding(weekIndexOf(date, false, opt.startDayOfWeek || 0) + 1, s.length); break; case 'M': case 'MM': res = integerZeroPadding(date.getMonth() + 1, s.length); break; case 'MMM': res = shortMonthNames[date.getMonth()]; break; case 'MMMM': res = monthNames[date.getMonth()]; break; case 'y': case 'yyyy': res = integerZeroPadding(date.getFullYear(), s.length); break; case 'yy': res = integerZeroPadding(date.getFullYear() % 100, s.length); break; case 'a': res = date.getHours() < 12 ? "AM" : "PM"; break; case "H": case 'HH': res = integerZeroPadding(date.getHours(), s.length); break; case 'h': case 'hh': res = integerZeroPadding(1 + (date.getHours() - 1) % 12, s.length); break; case 'm': case 'mm': res = integerZeroPadding(date.getMinutes(), s.length); break; case 'Q': case 'QQ': res = integerZeroPadding(Math.floor(date.getMonth() / 3) + 1, s.length) break; } return res; }); } var number = [/[+-]?\d+$/, matched => new Date(parseInt(matched[0]))]; var reISO = [/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*))(?:Z|(\+|-)([\d|:]*))?$/, matched => new Date(matched[0])]; var reMsAjax = [/^\/Date\((d|-|.*)\)[\/|\\]$/, matched => new Date(parseInt(matched[1]))]; var reString = [/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s+([a-zA-Z]{3})\s+[\d\s:]+GMT[\d+]+\s*\([^)]+\)$/, matched => new Date(matched[0])]; function implicitDate(o) { var res = null; if (o instanceof Date) { res = new Date(o.getTime()); } else if (typeof o === "number") { res = new Date(o); } else if (typeof o === 'string') { [reString, reISO, reMsAjax, number].some(rule => { var matched = o.match(rule[0]); if (matched) { res = rule[1](matched); return true; } return false; }); } if (res && isNaN(res.getTime())) res = null; return res; } /*** * * @param {null|{dayOffset?: number, duration?: number}}range * @param opt */ function formatTimeRange24(range, opt) { opt = Object.assign({ nextDayText: (!window.systemconfig || (typeof window.systemconfig.language !== "string") || (window.systemconfig.language.toLowerCase().indexOf('vn') >= 0 || window.systemconfig.language.toLowerCase().indexOf('vi') >= 0)) ? 'Hôm sau' : 'Next day' }, opt || {}); range = range || {}; var m0 = Math.floor(range.dayOffset / MILLIS_PER_MINUTE); var h0 = Math.floor(m0 / 60); var d0 = Math.floor(h0 / 24); m0 = m0 % 60; h0 = h0 % 24; var endOffset = range.dayOffset + range.duration; var m1 = Math.floor(endOffset / MILLIS_PER_MINUTE); var h1 = Math.floor(m1 / 60); var d1 = Math.floor(h1 / 24); m1 = m1 % 60; h1 = h1 % 24; var res = h0 + ':' + integerZeroPadding(m0, 2) + ' - ' + h1 + ':' + integerZeroPadding(m1, 2); if (d0 !== d1) res += ' (' + opt.nextDayText + ')'; return res; } /** * * @param {Date} date * @param type * @param {number} n * @returns {{expireddate: Date, startdate: Date}} */ function getTimeRangeFromStep(date, type, n) { var startDate, expiredDate; var initHandlers = { month: x => datetime_beginOfMonth(x), quarter: x => beginOfQuarter(x), year: x => beginOfYear(x) } var addHandlers = { month: (x, d) => addMonth(x, d), quarter: (x, d) => addQuarter(x, d), year: (x, d) => addYear(x, d) } startDate = initHandlers[type](addHandlers[type](date, n)); expiredDate = addHandlers[type](startDate, 1); return { startdate: startDate, expireddate: expiredDate }; } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/utils.js function getSelectionRangeDirection(range) { var sel = document.getSelection(); var direction = 'forward'; var cmpPosition = sel.anchorNode.compareDocumentPosition(sel.focusNode); if (cmpPosition === 4) { direction = 'forward'; } else if (cmpPosition === 2) { direction = 'backward' } else if (!cmpPosition && sel.anchorOffset > sel.focusOffset || cmpPosition === Node.DOCUMENT_POSITION_PRECEDING) { direction = 'backward'; } return direction; } /*** * * @param {Range} range * @param {boolean=} backward */ function setSelectionRange(range, backward) { var sel = document.getSelection(); if (backward) { if (typeof sel.extend != "undefined") { var endRange = range.cloneRange(); endRange.collapse(false); sel.removeAllRanges(); sel.addRange(endRange); sel.extend(range.startContainer, range.startOffset); } } else { sel.removeAllRanges(); sel.addRange(range); } } function insertTextAtCursor(text) { var sel, range; if (window.getSelection) { sel = window.getSelection(); if (sel.getRangeAt && sel.rangeCount) { range = sel.getRangeAt(0); range.deleteContents(); range.insertNode(document.createTextNode(text)); } } else if (document.selection && document.selection.createRange) { document.selection.createRange().text = text; } } function contenteditableTextOnly(element, processText) { if (element.__contenteditableTextOnly__) return; element.__contenteditableTextOnly__ = true; element.addEventListener("paste", function (e) { e.preventDefault(); if (e.clipboardData && e.clipboardData.getData) { var text = e.clipboardData.getData("text/plain"); if (processText) text = processText(text) document.execCommand("insertHTML", false, text); } else if (window.clipboardData && window.clipboardData.getData) { var text = window.clipboardData.getData("Text"); if (processText) text = processText(text) insertTextAtCursor(text); } }); } function getSelectionText() { var text = ""; var activeEl = document.activeElement; var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null; if ( (activeElTagName == "textarea") || (activeElTagName == "input" && /^(?:text|search|password|tel|url)$/i.test(activeEl.type)) && (typeof activeEl.selectionStart == "number") ) { text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd); } else if (window.getSelection) { text = window.getSelection().toString(); } return text; } /*** * * @param num * @param maxVal * @return {number} */ function positiveIntMod(num, maxVal) { if (maxVal <= 0) return 0; if (num >= 0 && num < maxVal) { return Math.floor(num); } else if (num === Infinity) { if (maxVal === Infinity) return Infinity; else return 0; } else if (num < 0) { return (num + (Math.ceil(-num / maxVal) * maxVal)) % maxVal; } else if (num >= maxVal) { return Math.floor(num) % maxVal } else return 0; } function nearFloor(x, epsilon) { var y = Math.floor(x); if (x - y + epsilon >= 1) y++; return y; } function measureText(text, font) { // re-use canvas object for better performance var canvas = measureText.canvas || (measureText.canvas = document.createElement("canvas")); var context = canvas.getContext("2d"); if (font) context.font = font; var metrics = context.measureText(text); return metrics; } function utils_getCaretPosition(oField) { var iCaretPos = 0; if (document.selection) { oField.focus(); var oSel = document.selection.createRange(); oSel.moveStart('character', -oField.value.length); iCaretPos = oSel.text.length; } else if (oField.selectionStart || oField.selectionStart == '0') iCaretPos = oField.selectionDirection == 'backward' ? oField.selectionStart : oField.selectionEnd; return iCaretPos; } /** * * @param {AElement} elt */ function preventNotNumberInput(elt) { elt.addEventListener('keyup', function () { var lastValue = (elt.tagName === "DIV" || elt.tagName === "SPAN") ? elt.innerHTML : elt.attributes.value; var cValue = parseFloat(this.value); if (this.value != lastValue) { elt.attributes.value = cValue; elt.emit('change', cValue, elt); } }); elt.addEventListener("paste", function (e) { e.preventDefault(); var text = ""; if (e.clipboardData && e.clipboardData.getData) { text = e.clipboardData.getData("text/plain"); } else if (window.clipboardData && window.clipboardData.getData) { text = window.clipboardData.getData("Text"); } var matched = text.match(/[+-]?([0-9]*[.])?[0-9]+/); if (matched) { this.value = matched[0]; } }); elt.addEventListener('keydown', function (event) { var key = event.key; if (key && key.length == 1 && !event.ctrlKey && !event.altKey) { if (key.match(/[0-9.\-\+]/)) { if (key == '.' && this.value.indexOf('.') >= 0) event.preventDefault(); if ((key == '+' || key == '-') && (this.value.indexOf('+') >= 0 || this.value.indexOf('-') >= 0 || utils_getCaretPosition(this) > 0)) event.preventDefault(); } else event.preventDefault(); } }); } function buildCss(StyleSheet) { return Object(ACore["c" /* _ */])({ tag: 'style', props: { innerHTML: Object.keys(StyleSheet).map(function (key) { var style = StyleSheet[key]; return key + ' {\n' + Object.keys(style).map(function (propName) { return propName + ': ' + style[propName] + ';'; }).join('\n') + '}'; }).join('\n') } }).addTo(document.head); } function forwardEvent(elt, fromName, toName) { elt.defineEvent(toName); elt.on(fromName, function (event) { event = Object.assign({}, event); event.type = toName; this.emit.apply(this, [toName, event].concat(Array.prototype.slice.call(arguments, 1))); }); } function forwardMethod(elt, fromName, toName) { elt[fromName] = function () { this[toName].apply(this, arguments); } } /*** * * @param {"camera"|"microphone"|"camcorder"|{accept:("image/*"|"audio/*"|"video/*"|undefined), capture:boolean|undefined, multiple:boolean|undefined}|{}=} props * @param {boolean=}unSafe * @return {Promise<File[]>} */ function openFileDialog(props, unSafe) { return new Promise(function (resolve) { var input = ACore["d" /* default */]._({ tag: 'input', style: { display: 'none' }, attr: { type: 'file' } }).addTo(document.body); props = props || {}; if (props === 'camera') { props = { accept: 'image/*', capture: 'camera' } } else if (props === 'microphone') { props = { accept: 'audio/*', capture: "microphone" } } else if (props === 'camcorder') { props = { accept: 'video/*', capture: 'camcorder' } } if (props.accept) { if (props.accept instanceof Array) input.attr('accept', props.accept.join(',')); else input.attr('accept', props.accept); } else { input.attr('accept', null); } if (props.capture) { input.attr('capture', props.capture); } if (props.multiple) { input.attr('multiple', 'true'); } else { input.attr('multiple'); } input.value = null; function focusHandler() { setTimeout(function () { window.removeEventListener('focus', focusHandler); if (unSafe) { input.off('change', changeHandler); input.remove(); resolve([]); } }, 1000); } function changeHandler() { input.off('change', changeHandler); window.removeEventListener('focus', focusHandler); var files = Array.prototype.slice.call(input.files) resolve(files); input.remove(); } input.on('change', changeHandler); input.click(); setTimeout(function () { window.addEventListener('focus', focusHandler); }, 10); }); } function openYesNoQuestionDialog(title, message) { return new Promise(resolve => { if (window.ModalElement && window.ModalElement.question) { window.ModalElement.question({ title: title, message: message, onclick: function (sel) { if (sel === 0) { resolve(true); } else { resolve(false); } } }); } else { var modal = Object(ACore["c" /* _ */])({ tag: js_Modal.tag, child: { tag: js_YesNoQuestionDialog.tag, props: { textYes: 'Có', textNo: 'Không', message: message, dialogTitle: title }, on: { action: (event) => { modal.remove(); resolve(event.action.name === 'yes'); } } } }).addTo(document.body); } }); } var charWidth = { "A": 9.337890625, "Á": 9.337890625, "À": 9.337890625, "Ả": 9.337890625, "Ã": 9.337890625, "Ạ": 9.337890625, "a": 7.7861328125, "á": 7.7861328125, "à": 7.7861328125, "ả": 7.7861328125, "ã": 7.7861328125, "ạ": 7.7861328125, "Ă": 9.337890625, "Ắ": 9.337890625, "Ằ": 9.337890625, "Ẳ": 9.337890625, "Ẵ": 9.337890625, "Ặ": 9.337890625, "ă": 7.7861328125, "ắ": 7.7861328125, "ằ": 7.7861328125, "ẳ": 7.7861328125, "ẵ": 7.7861328125, "ặ": 7.7861328125, "Â": 9.337890625, "Ấ": 9.337890625, "Ầ": 9.337890625, "Ẩ": 9.337890625, "Ẫ": 9.337890625, "Ậ": 9.337890625, "â": 7.7861328125, "ấ": 7.7861328125, "ầ": 7.7861328125, "ẩ": 7.7861328125, "ẫ": 7.7861328125, "ậ": 7.7861328125, "B": 9.337890625, "b": 7.7861328125, "C": 10.1103515625, "c": 7, "D": 10.1103515625, "d": 7.7861328125, "Đ": 10.1103515625, "đ": 7.7861328125, "E": 9.337890625, "É": 9.337890625, "È": 9.337890625, "Ẻ": 9.337890625, "Ẽ": 9.337890625, "Ẹ": 9.337890625, "e": 7.7861328125, "é": 7.7861328125, "è": 7.7861328125, "ẻ": 7.7861328125, "ẽ": 7.7861328125, "ẹ": 7.7861328125, "Ê": 9.337890625, "Ế": 9.337890625, "Ề": 9.337890625, "Ể": 9.337890625, "Ễ": 9.337890625, "Ệ": 9.337890625, "ê": 7.7861328125, "ế": 7.7861328125, "ề": 7.7861328125, "ể": 7.7861328125, "ễ": 7.7861328125, "ệ": 7.7861328125, "G": 10.8896484375, "g": 7.7861328125, "H": 10.1103515625, "h": 7.7861328125, "I": 3.8896484375, "Í": 3.8896484375, "Ì": 3.8896484375, "Ỉ": 3.8896484375, "Ĩ": 3.8896484375, "Ị": 3.8896484375, "i": 3.1103515625, "í": 3.1103515625, "ì": 3.1103515625, "ỉ": 3.1103515625, "ĩ": 3.1103515625, "ị": 3.1103515625, "K": 9.337890625, "k": 7, "L": 7.7861328125, "l": 3.1103515625, "M": 11.662109375, "m": 11.662109375, "N": 10.1103515625, "n": 7.7861328125, "O": 10.8896484375, "Ó": 10.8896484375, "Ò": 10.8896484375, "Ỏ": 10.8896484375, "Õ": 10.8896484375, "Ọ": 10.8896484375, "o": 7.7861328125, "ó": 7.7861328125, "ò": 7.7861328125, "ỏ": 7.7861328125, "õ": 7.7861328125, "ọ": 7.7861328125, "Ô": 10.8896484375, "Ố": 10.8896484375, "Ồ": 10.8896484375, "Ổ": 10.8896484375, "Ỗ": 10.8896484375, "Ộ": 10.8896484375, "ô": 7.7861328125, "ố": 7.7861328125, "ồ": 7.7861328125, "ổ": 7.7861328125, "ỗ": 7.7861328125, "ộ": 7.7861328125, "Ơ": 12.00390625, "Ớ": 12.00390625, "Ờ": 12.00390625, "Ở": 12.00390625, "Ỡ": 12.00390625, "Ợ": 12.00390625, "ơ": 9.1806640625, "ớ": 9.1806640625, "ờ": 9.1806640625, "ở": 9.1806640625, "ỡ": 9.1806640625, "ợ": 9.1806640625, "P": 9.337890625, "p": 7.7861328125, "Q": 10.8896484375, "q": 7.7861328125, "R": 10.1103515625, "r": 4.662109375, "S": 9.337890625, "s": 7, "T": 8.5517578125, "t": 3.8896484375, "U": 10.1103515625, "Ú": 10.1103515625, "Ù": 10.1103515625, "Ủ": 10.1103515625, "Ũ": 10.1103515625, "Ụ": 10.1103515625, "u": 7.7861328125, "ú": 7.7861328125, "ù": 7.7861328125, "ủ": 7.7861328125, "ũ": 7.7861328125, "ụ": 7.7861328125, "Ư": 11.9560546875, "Ứ": 11.9560546875, "Ừ": 11.9560546875, "Ử": 11.9560546875, "Ữ": 11.9560546875, "Ự": 11.9560546875, "ư": 9.3720703125, "ứ": 9.3720703125, "ừ": 9.3720703125, "ử": 9.3720703125, "ữ": 9.3720703125, "ự": 9.3720703125, "V": 9.337890625, "v": 7, "X": 9.337890625, "x": 7, "Y": 9.337890625, "Ý": 9.337890625, "Ỳ": 9.337890625, "Ỷ": 9.337890625, "Ỹ": 9.337890625, "Ỵ": 9.337890625, "y": 7, "ý": 7, "ỳ": 7, "ỷ": 7, "ỹ": 7, "ỵ": 7, " ": 3.8896484375 }; function estimateWidth14(text) { // return absol.text.measureText(text, '14px arial').width var l = 0; for (var j = 0; j < text.length; ++j) { l += (charWidth[text.charAt(j)]) || 9.337890625; } return l; } /** *TODO: import from absol-acomp * @param {Text} text * @param {number=} startOffset * @param {number=} endOffset * @returns {*[]} */ function getTextNodeBounds(text, startOffset, endOffset) { if (!text || text.nodeType !== Node.TEXT_NODE || !text.parentElement) return null; var style = getComputedStyle(text.parentElement); var fontSize = parseFloat(style.getPropertyValue('font-size').replace('px', '')); var lineHeight = style.getPropertyValue('line-height'); if (lineHeight === 'normal') lineHeight = 1.2; else lineHeight = parseFloat(lineHeight.replace('px', '')) / fontSize; var txt = text.data; var y = -Infinity; var c; var range; var parts = []; var cPart; var j; var delta = lineHeight * fontSize / 3; var rect; var i = 0; if (isNaturalNumber(startOffset)) i = Math.max(startOffset, i); if (isNaturalNumber(endOffset)) endOffset = Math.min(txt.length, endOffset); else endOffset = txt.length while (i < endOffset) { c = txt[i]; j = i + 1; range = document.createRange(); range.setStart(text, i); range.setEnd(text, j); rect = Math_Rectangle.fromClientRect(range.getBoundingClientRect()); if (Math.abs(rect.y - y) < delta) { cPart.end = j; cPart.rect = cPart.rect.merge(rect); } else { cPart = { start: i, end: j, rect: rect }; y = rect.y; parts.push(cPart); } i = j; } parts.forEach(part => { rect = part.rect; part.text = txt.substring(part.start, part.end); }); return parts; } /*** * * @param {number} v * @returns {number} */ function absCeil(v) { var a = Math.ceil(Math.abs(v)); return v < 0 ? -a : a; } /*** * * @param {number} x * @param {number} l * @returns {String} */ function zeroPadding(x, l) { var res = Math.abs(x) + ''; while (res.length < l) { res = '0' + res; } if (x < 0) res = '-' + res; return res; } var propertyFilter = ["$trigger", "$content", "_isShow", "defineEvent", "isSupportedEvent", "emit", "fire", "eventEmittorOnWithTime", "on", "once", "off", "init", "eventHandler", "super", "defineAttribute", "defineAttributes", "attr", "addStyle", "removeStyle", "addChild", "addTo", "selfRemove", "selfReplace", "clearChild", "containsClass", "addClass", "removeClass", "getComputedStyleValue", "getFontSize", "findChildAfter", "findChildBefore", "addChildBefore", "addChildAfter", "getBoundingRecursiveRect", "isDescendantOf", "getCSSRules", "afterAttached", "afterDisplayed", "_azar_extendEvents", "__azar_force", "_azar_extendAttributes", "_azar_extendTags", "findAvailablePosition", "$container", "autoFixParentSize", "sync", "$dropper", "$vmenu", "$button", "$text", "$key", "$arrow", "$iconCtn", "_textMarginRight", "_tabIndex", '$icon', '_icon', '$textNode', '$primaryBtn', '$extendBtn', '_menuHolder', '_items', 'hasClass'].reduce(function (ac, cr) { ac[cr] = true; return ac; }, {}); /** * This is a solution for menu, before a better one. * @param obj * @returns {{}} */ function cleanMenuItemProperty(obj) { var res = {}; var keys = Object.keys(obj); var key; for (var i = 0; i < keys.length; ++i) { key = keys[i]; if (!propertyFilter[key]) { res[key] = obj[key]; } } res.text = obj.text; if (obj.icon) { res.icon = obj.icon; } if (obj.items) { res.items = obj.items; } return res; } function getTagListInTextMessage(text) { var rg = /@\[id:(\d+)]/g; var matched = rg.exec(text); var dict = {}; var v; var res = []; while (matched) { v = parseInt(matched[1]); if (isNaN(v)) v = matched[1]; if (!dict[v]) { dict[v] = true; res.push(v); } matched = rg.exec(text); } return res; } /*** * * @param {AElement} e1 * @param {AElement} e2 */ function swapElt(e1, e2) { var temp = Object(ACore["c" /* _ */])('div'); e1.parentElement.replaceChild(temp, e1); e2.parentElement.replaceChild(e1, e2); temp.parentElement.replaceChild(e2, temp); } function swapChildrenInElt(e1, e2) { var c1 = Array.prototype.slice.call(e1.childNodes); var c2 = Array.prototype.slice.call(e2.childNodes); Object(ACore["a" /* $ */])(e1).clearChild(); Object(ACore["a" /* $ */])(e2).clearChild(); while (c2.length > 0) { e1.appendChild(c2.shift()); } while (c1.length > 0) { e2.appendChild(c1.shift()); } } function replaceChildrenInElt(elt, childNodes) { var nChildren = childNodes.slice(); var cChildren = Array.prototype.slice.call(elt.childNodes); var cC, nC; while (cChildren.length > 0 && nChildren.length > 0) { cC = cChildren[0]; nC = nChildren[0]; if (cC === nC) { cChildren.shift(); nChildren.shift(); } else { break; } } cChildren.forEach((elt) => { elt.remove(); }); elt.addChild(nChildren); } function findVScrollContainer(elt) { var parent = elt.parentElement; var overflowStyle; while (parent) { overflowStyle = window.getComputedStyle(parent)['overflow']; if ((overflowStyle === 'auto scroll' || overflowStyle === 'auto' || overflowStyle === 'hidden auto' || overflowStyle === 'scroll' || parent.tagName === 'HTML') && (parent.clientHeight < parent.scrollHeight)) { break; } parent = parent.parentElement; } if (!parent || parent === document || parent.tagName === "HTML" || parent.tagName === "html") { parent = document.body.parentElement; } return parent; } /** * * @param {HTMLElement} elt */ function vScrollIntoView(elt) { var parent = findVScrollContainer(elt); var eBound = elt.getBoundingClientRect(); var viewportBound = parent.getBoundingClientRect(); var currentScrollTop = parent.scrollTop; var newScrollTop = currentScrollTop; if (eBound.bottom > viewportBound.bottom) { newScrollTop = currentScrollTop + (eBound.bottom - viewportBound.bottom); } if (eBound.top < viewportBound.top) { newScrollTop = currentScrollTop - (viewportBound.top - eBound.top); } if (newScrollTop !== currentScrollTop) { parent.scrollTop = newScrollTop; } } function fileSize2Text(s) { if (typeof s !== "number" || isNaN(s)) return ''; var units = ['B', 'KB', 'MB', 'GB', 'TB']; var b = 1; for (var i = 0; i < units.length; ++i) { if (s <= b * 1024) { return Math.floor(s / b * 100) / 100 + units[i]; } b *= 1024; } return Math.floor(s / b * 10) / 100 + 'PB'; } function isDateTimeFormatToken(text) { return ['d', 'dd', 'M', 'MM', 'y', 'yyyy', 'h', 'hh', 'H', 'HH', 'm', 'mm', 'a', 'w', 'ww', 'Q', 'QQ'].indexOf(text) >= 0; } var normalizeMinuteOfMillis = mil => { mil = mil >> 0; if (mil < 0) { mil += Math.ceil(-mil / MILLIS_PER_DAY) * MILLIS_PER_DAY } mil = mil % MILLIS_PER_DAY; return Math.floor(mil / 6e4) * 6e4; }; /** * * @param {number} mil * @returns {{hour: number, minute: number, isNextDate: boolean}} */ var millisToClock = mil => { var res = {}; res.minute = Math.floor(mil / 6e4) % 60; var hour = Math.floor(mil / 36e5); if (hour >= 24) { res.hour = hour % 24; res.isNextDate = true; } else { res.hour = hour; } return res; }; var clockToMillis = (hour, minute) => { var res = hour * MILLIS_PER_HOUR + minute * MILLIS_PER_MINUTE; if (isNaturalNumber(res)) return res; return null; }; function isRealNumber(value) { return (isFinite(value) && (typeof value === "number")); } function isNaturalNumber(value) { return (isFinite(value) && (typeof value === "number") && Math.floor(value) === value && value >= 0); } /**** * * @param {string} text * @param {{locales?:string}|string =} opt */ function parseLocalFloat(text, opt) { if (typeof opt === "string") opt = { locales: opt }; var locales = (opt && opt.locales) || (window.systemconfig && window.systemconfig.numberFormatLocales); var sample = locales ? (new Intl.NumberFormat(locales).format(123456.78)) : (123456.78.toLocaleString()); // decimal-separator, thousand-separator. var thousandSeparator = sample.match(/3(.?)4/)[1] || ''; var decimalSeparator = sample.match(/6(.?)7/)[1]; text = text.replace(new RegExp('[' + thousandSeparator + ']', 'g'), '') .replace(new RegExp('[' + decimalSeparator + ']', 'g'), '.'); return parseFloat(text); } function formatLocalFloat(value, opt) { if (typeof opt === "string") opt = { locales: opt }; var formatOpt = Object.assign({}, opt); delete formatOpt.locales; var locales = (opt && opt.locales) || (window.systemconfig && window.systemconfig.numberFormatLocales); var sample; var thousandSeparator; var decimalSeparator; if (!locales) { sample = (123456.78.toLocaleString()); thousandSeparator = sample.match(/3(.?)4/)[1] || ''; decimalSeparator = sample.match(/6(.?)7/)[1]; if (decimalSeparator === '.') locales = 'en-US'; else if (decimalSeparator === ',') { locales = 'vi-VN'; } } return new Intl.NumberFormat(locales, formatOpt).format(value); } /*** * * @param {String} text * @returns {Boolean} */ function isURLAddress(text) { if (typeof text != "string") return false; return text.startsWith('.') || text.startsWith('http://') || text.startsWith('https://') || text.startsWith('/'); } /*** * * @param {string | null} pattern * @param {string} typeString * @returns {boolean} */ function fileAccept(pattern, typeString) { if (!pattern) return true; var parts = pattern.split(',').map(function (x) { return x.trim().toLowerCase(); }); var ext = typeString.split('.').pop().toLowerCase(); var mineType = typeString.split('/').shift().toLowerCase(); return parts.some(function (part) { if (part === '*') return true; if (part === 'audio/*') { return mineType === 'audio' || ['.3gp', '.aa', '.aac', '.aax', '.act', '.aiff', '.alac', '.amr', '.ape', '.au', '.awb', '.dss', '.flac', '.gsm', '.m4a', '.m4b', '.m4p', '.mp3', '.mpc', '.ogg, .oga, .mogg' , '.opus', '.ra', '.rm', '.raw', '.rf64', '.sln', '.tta', '.voc', '.vox', '.wav', '.wma', '.wv', '.webm', '.8svx', '.cda'].indexOf(ext) >= 0; } else if (part === 'video/*') { return mineType === 'video' || ['.webm', '.mkv', '.flv', '.flv', '.vob', '.drc', '.gif', '.gifv', '.mng', '.avi', '.wmv', '.yuv', '.rm', '.rmvb', '.viv', '.asf', '.amv', '.m4v', '.svi', '.3gp', '.3g2', '.mxf', '.roq', '.nsv'].indexOf(ext) >= 0; } else if (part === 'image/*') { return mineType === 'video' || [ "ase", "art", "bmp", "blp", "cd5", "cit", "cpt", "cr2", "cut", "dds", "dib", "djvu", "egt", "exif", "gif", "gpl", "grf", "icns", "ico", "iff", "jng", "jpeg", "jpg", "jfif", "jp2", "jps", "lbm", "max", "miff", "mng", "msp", "nef", "nitf", "ota", "pbm", "pc1", "pc2", "pc3", "pcf", "pcx", "pdn", "pgm", "PI1", "PI2", "PI3", "pict", "pct", "pnm", "pns", "ppm", "psb", "psd", "pdd", "psp", "px", "pxm", "pxr", "qfx", "raw", "rle", "sct", "sgi", "rgb", "int", "bw", "tga", "tiff", "tif", "vtf", "xbm", "xcf", "xpm", "3dv", "amf", "ai", "awg", "cgm", "cdr", "cmx", "dxf", "e2d", "egt", "eps", "fs", "gbr", "odg", "svg", "stl", "vrml", "x3d", "sxd", "v2d", "vnd", "wmf", "emf", "art", "xar", "png", "webp", "jxr", "hdp", "wdp", "cur", "ecw", "iff", "lbm", "liff", "nrrd", "pam", "pcx", "pgf", "sgi", "rgb", "rgba", "bw", "int", "inta", "sid", "ras", "sun", "tga", "heic", "heif" ].indexOf(ext) >= 0; } else if (part.startsWith('.')) { return '.' + ext === part; } else { return part === ext || part === mineType; } }); } /*** * * @param {File|Blob|string|{url:string}} fi */ function fileInfoOf(fi) { var res = {}; var handle = o => { var parts; if (typeof o === "string") { res.name = res.name || (o.split('/').pop() || '').replace(/%([\dA-Fa-f][\dA-Fa-f])/g, (all, g1) => { var n = parseInt(g1, 16); if (typeof n === "number") { return String.fromCharCode(n); } return all; }).replace(/\?.+$/, ''); if (!res.url && isURLAddress(o)) res.url = o; parts = res.name.split('.'); if (!res.type && parts.length > 1) { res.type = parts.pop(); } else if (typeof res.url === 'string') { parts = res.url.split('.'); res.type = parts.pop(); } if (res.type === 'upload') res.type = parts.pop(); } else if ((typeof o === "object") && o) { if (o instanceof Blob) { res.mimeType = o.type; } if (!res.name && (typeof o.name === "string")) { res.name = o.name; } if (!res.size && (typeof o.size === "number")) { res.size = o.size; } if (typeof o.url === "string") { res.url = o.url; handle(o.url); } } }; handle(fi); if (res.name) { res.name = res.name.replace(/\.upload$/, '') } if (!res.type && res.name) { res.type = res.name.toLowerCase().split('.').slice(1).pop(); } if (!res.mimeType && res.type) { res.mimeType = Converter_ext2MineType[res.type]; } for (var k in res) { if (res[k] === undefined) delete res[k]; } return res; } function addElementsBefore(inElement, elements, at) { for (var i = 0; i < elements.length; ++i) { (inElement.addChildBefore || inElement.insertBefore).call(inElement, elements[i], at); } } function addElementAfter(inElement, elements, at) { var atIdx; var before; var i; if (at) { atIdx = Array.prototype.indexOf.call(inElement.childNodes, at); if (at && atIdx < 0) throw new Error("The node before which the new node is to be inserted is not a child of this node."); before = inElement.childNodes[atIdx + 1]; if (before) { for (i = 0; i < elements.length; ++i) { (inElement.addChildBefore || inElement.insertBefore).call(inElement, elements[i], before); } } else { for (i = 0; i < elements.length; ++i) { (inElement.addChild || inElement.appendChild).call(inElement, elements[i]); } } } else { before = inElement.firstChild; for (i = 0; i < elements.length; ++i) { (inElement.addChildBefore || inElement.insertBefore).call(inElement, elements[i], before); } } } function addElementClassName(elt, className) { if (typeof className === "string") { className = className.trim().split(/\s+/); } if (className instanceof Array) { className.forEach(cls => elt.classList.add(cls)); } } function findMaxZIndex(elt) { var e = elt var style; var res = 0; while (e && e !== document.body) { style = getComputedStyle(e); res = Math.max(parseFloat(style.getPropertyValue('z-index')) || 0); e = e.parentElement; } return res; } function getAncestorElementOf(elt) { while (elt.parentElement) { elt = elt.parentElement; } return elt; } function checkedValues2RootTreeValues(items, values) { var keyOf = (x) => (typeof x) + x; var dict = values.reduce((ac, cr) => { ac[keyOf(cr)] = true; return ac; }, {}); var checkScan = item => { if (dict[keyOf(item.value)]) return true; if (item.items && item.items.length > 0) { item.items.forEach(sItem => checkScan(sItem)); dict[keyOf(item.value)] = item.items.every(sItem => dict[keyOf(sItem.value)]); } return dict[keyOf(item.value)]; } var res = []; var scan = item => { if (dict[keyOf(item.value)]) { res.push(item.value); } else if (item.items && item.items.length > 0) { item.items.forEach(sItem => scan(sItem)); } } items.forEach(sItem => scan(sItem)); return res; } function rootTreeValues2CheckedValues(items, values) { var keyOf = (x) => (typeof x) + x; var dict = values.reduce((ac, cr) => { ac[keyOf(cr)] = true; return ac; }, {}); var res = []; var visit = (item, checked) => { if (checked) res.push(item.value); if (item.items && item.items.length > 0) { item.items.forEach(cr => visit(cr, checked || dict[keyOf(cr.value)])); } } items.forEach(cr => visit(cr, dict[keyOf(cr.value)])) return res; } /*** * * @param {SelectionItem[]} items * @param {{removeNoView?: boolean, removeNewLine?:boolean}=} opt * @returns {SelectionItem[]} */ function copySelectionItemArray(items, opt) { opt = opt || {}; if (opt.removeNoView) { items = items.filter((item) => !item.noView); } if (opt.removeNewLine) { items.forEach(it => { if (it.text && it.text.indexOf && it.text.indexOf('\n') >= 0) { it.text = it.text.replace(/[\r\n]/g, ''); } }) } return items.map(item => { var newItem; if (typeof item === "object" && ('text' in item)) { newItem = Object.assign({}, item); } else { newItem = { text: item + '', value: item } } if (item.items) { newItem.items = copySelectionItemArray(item.items, opt); } return newItem; }); } function compareSelectionItemArray(a, b) { if (a === b) return true; var aEmpty = !a || !a.length; var bEmpty = !b || !b.length; if (!aEmpty && aEmpty === bEmpty) return true; if (aEmpty !== bEmpty) return false; if (a.length !== b.length) return false; var n = a.length; var ait, bit; for (var i = 0; i < n; ++i) { ait = a[i]; bit = b[i]; if (ait === bit) continue; if (ait.text !== bit.text) return false; if (ait.text !== bit.text) return false; if (!compareSelectionItemArray(ait.items, bit.items)) return false; } return true; } /*** * * @param {AElement|HTMLElement} element * @param {number} padding */ function isScrolledToBottom(element, padding) { if (!isRealNumber(padding)) padding = 0; return (element.scrollHeight - element.scrollTop - padding <= element.clientHeight); } function implicitLatLng(value) { var latlng = null; var nums; if (typeof value === "string") { nums = value.split(/\s*,\s*/).map(function (t) { return parseFloat(t); }); if (isRealNumber(nums[0]) && isRealNumber(nums[1])) { latlng = new google.maps.LatLng(nums[0], nums[1]); } } else if (value instanceof google.maps.LatLng) { latlng = value; } else if (value && isRealNumber(value.latitude) && isRealNumber(value.longitude)) { latlng = new google.maps.LatLng(value.latitude, value.longitude); } else if (value && isRealNumber(value.lat) && isRealNumber(value.lng)) { latlng = new google.maps.LatLng(value.lat, value.lng); } else if ((value instanceof Array) && isRealNumber(value[0]) && isRealNumber(value[1])) { latlng = new google.maps.LatLng(value[0], value[1]); } return latlng; } function getMapZoomLevel(mapDim, bounds) { var WORLD_DIM = { height: 256, width: 256 }; var ZOOM_MAX = 21; function latRad(lat) { var sin = Math.sin(lat * Math.PI / 180); var radX2 = Math.log((1 + sin) / (1 - sin)) / 2; return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2; } function zoom(mapPx, worldPx, fraction) { return Math.floor(Math.log(mapPx / worldPx / fraction) / Math.LN2); } var ne = bounds.getNorthEast(); var sw = bounds.getSouthWest(); var latFraction = (latRad(ne.lat()) - latRad(sw.lat())) / Math.PI; var lngDiff = ne.lng() - sw.lng(); var lngFraction = ((lngDiff < 0) ? (lngDiff + 360) : lngDiff) / 360; var latZoom = zoom(mapDim.height, WORLD_DIM.height, latFraction); var lngZoom = zoom(mapDim.width, WORLD_DIM.width, lngFraction); return Math.min(latZoom, lngZoom, ZOOM_MAX); } /*** * * @param p0 * @param p1 * @returns {number} */ function latLngDistance(p0, p1) { var lat0 = p0.lat(); var lat1 = p1.lat(); var lng0 = p0.lng(); var lng1 = p1.lng(); var toRad = function (value) { return value * Math.PI / 180; }; var R = 6371; var dLat = toRad(lat1 - lat0); var dLng = toRad(lng1 - lng0); lat0 = toRad(lat0); lat1 = toRad(lat1); var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLng / 2) * Math.sin(dLng / 2) * Math.cos(lat0) * Math.cos(lat1); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); var d = R * c; return d; } function keyStringOf(o) { var type = typeof o; var keys; if (o && type === "object") { if (typeof o.getTime === "function") { return 'd(' + o.getTime() + ')'; } else if (typeof o.map === "function") { return 'a(' + o.map(val => keyStringOf(val)).join(',') + ')'; } else { keys = Object.keys(o); keys.sort(); return 'o(' + keys.map(key => key + ':' + keyStringOf(o[key])).join(',') + ')'; } } else { return type[0] + '(' + o + ')'; } } function jsStringOf(x) { if (x === null) return 'null'; if (x === undefined) return 'undefined'; var type = typeof x; if (type === 'string' || type === 'number') return JSON.stringify(x); if (x instanceof Date) return 'new Date(' + x.getTime() + ')'; var keys; keys = Object.keys(x); keys.sort(); return '{' + keys.map(function (key) { return JSON.stringify(key) + ':' + jsStringOf(x[key]); }).join(',') + '}'; } function calcDTQueryHash(o) { var s = jsStringOf(o); return stringHashCode(s); } function replaceInObject(o, replacer, test) { return new Promise((rs) => { var sync = []; function visit(so) { Object.keys(so).forEach((key) => { var newValue; if (test(so[key])) { newValue = replacer(so[key], key, so); if (newValue && newValue.then) { sync.push(newValue); newValue.then(newValue => so[key] = newValue); } else { so[key] = newValue; } } else if (typeof so[key] === "object" && so[key]) { visit(so[key]); } }); } visit(o); Promise.all(sync).then(() => { rs(o); }) }); } function replaceFileInObject(o, replacer) { return replaceInObject(o, replacer, (value, key, object) => { return (value instanceof File) || (value instanceof Blob); }); } function isNone(x) { return x === null || x === undefined; } var measureTool = new tool_TextMeasurement(); function wrapWord(text, width, font) { font = font || '14px arial'; measureTool.compute(font); var res = []; var i = 1; var prevText = ''; var curText; while (text.length > 0) { if (i > text.length && text) { res.push(text); break; } curText = text.substring(0, i); if (measureTool.measureTextWidth(curText, font) <= width || !prevText) { prevText = curText; } else { text = text.substring(prevText.length).trimStart(); res.push(prevText); prevText = ''; i = 1; continue; } ++i; } return res; } function wrapText(text, width, font) { font = font || '14px arial'; measureTool.compute(font); var res = []; var i = 1; var prevText = ''; var prevWidth = 0; var curText, curWidth; while (text.length > 0) { if (i > text.length && text) { prevText = text; prevWidth = measureTool.measureTextWidth(prevText, font); if (prevWidth <= width) { res.push(prevText); } else { res.push.apply(res, wrapWord(prevText, width, font)); } break; } if (!text[i - 1].match(/[\s\n]/) && (!text[i] || text[i].match(/[\s\n]/))) { curText = text.substring(0, i); curWidth = measureTool.measureTextWidth(curText, font); if (curWidth <= width || !prevText) { prevText = curText; prevWidth = curWidth; } else { if (prevWidth <= width) { res.push(prevText); } else { prevText = wrapWord(prevText, width, font).shift(); res.push(prevText); } text = text.substring(prevText.length).trimStart(); prevText = ''; i = 1; continue; } } ++i; } return res; } // EXTERNAL MODULE: ./node_modules/absol-acomp/css/hanger.css var hanger = __webpack_require__(96); // EXTERNAL MODULE: ./node_modules/absol/src/Detector/BrowserDetector.js var BrowserDetector = __webpack_require__(8); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Hanger.js var Hanger_ = ACore["d" /* default */]._; var Hanger_$ = ACore["d" /* default */].$; /**** * @extends AElement * @constructor */ function Hanger() { this.addClass('as-hanger'); this.defineEvent(['predrag', 'dragstart', 'drag', 'dragend', 'draginit', 'dragdeinit']);//predrag is draginit this._hangOn = 0; this._hangerPointerData = null; this.on2({ mousedown: this.eventHandler.hangerPointerDown, touchstart: this.eventHandler.hangerPointerDown, }); this._touchEvents = { touchend: this.eventHandler.hangerPointerFinish, touchcancel: this.eventHandler.hangerPointerFinish, touchmove: this.eventHandler.hangerPointerMove } this._mouseEvents = { mouseup: this.eventHandler.hangerPointerFinish, mouseleave: this.eventHandler.hangerPointerFinish, mousemove: this.eventHandler.hangerPointerMove }; } Hanger.tag = 'hanger'; Hanger.render = function () { return Hanger_('div'); }; Hanger.prototype.on2 = function () { if (arguments.length == 1) { for (var name in arguments[0]) { Hanger.prototype.on2.call(this, name, arguments[0][name]); } } else if (arguments.length == 2) { this.addEventListener(arguments[0], arguments[1], BrowserDetector["a" /* default */].supportPassiveEvent ? { passive: false } : true); } }; Hanger.prototype.off2 = function () { if (arguments.length == 1) { for (var name in arguments[0]) { Hanger.prototype.off2.call(this, name, arguments[0][name]); } } else if (arguments.length == 2) { this.removeEventListener(arguments[0], arguments[1], BrowserDetector["a" /* default */].supportPassiveEvent ? { passive: false } : true); } }; Hanger.property = {}; /** * @type {Hanger} */ Hanger.property.hangOn = { set: function (value) { if (!(value > 0)) value = 0; this._hangOn = value; }, get: function () { return this._hangOn; } }; /** * @type {Hanger} */ Hanger.eventHandler = {}; Hanger.eventHandler.hangerPointerDown = function (event) { if (this._hangerPointerData) return; var bound = this.getBoundingClientRect(); var startingPoint; var isTouch = event.type === 'touchstart'; var pointerIdent = -1; var target; if (isTouch) { var touch = event.changedTouches[0]; target = touch.target; pointerIdent = touch.identifier; startingPoint = new Math_Vec2(touch.clientX, touch.clientY); } else { startingPoint = new Math_Vec2(event.clientX, event.clientY); target = event.target; } var offsetVec = startingPoint.sub(new Math_Vec2(bound.left, bound.top)); this._hangerPointerData = { state: 0, isTouch: isTouch, bound: bound, startingPoint: startingPoint, offsetVec: offsetVec, pointerIdent: pointerIdent, target: target }; var preDragEvent = { type: 'draginit', originEvent: event, isTouch: isTouch, bound: bound, startingPoint: startingPoint, currentPoint: startingPoint, offsetVec: offsetVec, pointerIdent: pointerIdent, canceled: false, cancel: function () { this.canceled = true; }, clientX: startingPoint.x, clientY: startingPoint.y, target: target, preventDefault: function () { event.preventDefault(); } }; this.emit('draginit', preDragEvent, this); this.emit('predrag', Object.assign(preDragEvent, { type: 'predrag' }), this); if (preDragEvent.canceled) { this._hangerPointerData = null; return; } if (isTouch) this.on2.call(document, this._touchEvents) else this.on2.call(document, this._mouseEvents); }; Hanger.eventHandler.hangerPointerMove = function (event) { var pointerData = this._hangerPointerData; var isTouch = pointerData.isTouch; var pointerIdent = -2; var currentPoint; if (isTouch) { var touch = Object(EventEmitter["c" /* findChangedTouchByIdent */])(event, pointerData.pointerIdent); if (touch) { pointerIdent = touch.identifier; currentPoint = new Math_Vec2(touch.clientX, touch.clientY); } } else { currentPoint = new Math_Vec2(event.clientX, event.clientY); pointerIdent = -1; } if (pointerIdent != pointerData.pointerIdent) return; pointerData.currentPoint = currentPoint; if (pointerData.state == 0) { var distance = currentPoint.sub(pointerData.startingPoint).abs(); if (distance >= this._hangOn) { var dragStartEvent = { type: 'dragstart', originEvent: event, isTouch: isTouch, bound: pointerData.bound, startingPoint: pointerData.startingPoint, offsetVec: pointerData.offsetVec, pointerIdent: pointerIdent, currentPoint: currentPoint, target: pointerData.target, clientX: currentPoint.x, clientY: currentPoint.y, preventDefault: function () { event.preventDefault(); } }; pointerData.trackedScrollers = (() => { var res = []; var c = this._hangerPointerData.target; while (c) { c.addEventListener('scroll', this.eventHandler.trackingScroll); res.push(c); c = c.parentElement; } document.addEventListener('scroll', this.eventHandler.trackingScroll); res.push(document); return res; })(); pointerData.state = 1; this.emit('dragstart', dragStartEvent, this); } } if (pointerData.state === 1) { var dragEvent = { type: 'drag', originEvent: event, isTouch: isTouch, bound: pointerData.bound, startingPoint: pointerData.startingPoint, offsetVec: pointerData.offsetVec, pointerIdent: pointerIdent, currentPoint: currentPoint, target: pointerData.target, clientX: currentPoint.x, clientY: currentPoint.y, preventDefault: function () { event.preventDefault(); } }; this.emit('drag', dragEvent, this); } }; Hanger.eventHandler.hangerPointerFinish = function (event) { var pointerData = this._hangerPointerData; var isTouch = event.type === 'touchend'; var dragEndEvent; if (pointerData.isTouch !== isTouch) return; var pointerIdent = -2; var currentPoint; if (isTouch) { var touch = Object(EventEmitter["c" /* findChangedTouchByIdent */])(event, pointerData.pointerIdent); if (touch) { pointerIdent = touch.identifier; currentPoint = new Math_Vec2(touch.clientX, touch.clientY); } } else { currentPoint = new Math_Vec2(event.clientX, event.clientY); pointerIdent = -1; } if (pointerIdent !== pointerData.pointerIdent) return; if (pointerData.state === 1) { pointerData.trackedScrollers.forEach(elt => elt.removeEventListener('scroll', this.eventHandler.trackingScroll)); dragEndEvent = { type: 'dragend', originEvent: event, isTouch: isTouch, bound: pointerData.bound, startingPoint: pointerData.startingPoint, offsetVec: pointerData.offsetVec, pointerIdent: pointerIdent, currentPoint: currentPoint, target: pointerData.target, clientX: currentPoint.x, clientY: currentPoint.y, preventDefault: function () { event.preventDefault(); } }; this.emit('dragend', dragEndEvent, this); } this._hangerPointerData = null; if (isTouch) this.off2.call(document, this._touchEvents) else this.off2.call(document, this._mouseEvents); this.emit('dragdeinit', { type: 'dragdeinit', originEvent: event, isTouch: isTouch, bound: pointerData.bound, startingPoint: pointerData.startingPoint, offsetVec: pointerData.offsetVec, pointerIdent: pointerIdent, currentPoint: currentPoint, target: pointerData.target, clientX: currentPoint.x, clientY: currentPoint.y, }); }; Hanger.eventHandler.trackingScroll = function (event) { var pointerData = this._hangerPointerData; var currentPoint = pointerData.currentPoint; var dragEvent = { type: 'drag', originEvent: event, isTouch: false, bound: pointerData.bound, startingPoint: pointerData.startingPoint, offsetVec: pointerData.offsetVec, pointerIdent: pointerData.pointerIdent, currentPoint: currentPoint, target: pointerData.target, clientX: currentPoint.x, clientY: currentPoint.y, isScrolling: true, preventDefault: function () { // event.preventDefault(); } }; this.emit('drag', dragEvent, this); }; ACore["d" /* default */].install(Hanger); /* harmony default export */ var js_Hanger = (Hanger); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/BoardTable.js var BoardTable_ = ACore["d" /* default */]._; var BoardTable_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function BoardTable() { var events = { touchstart: this.eventHandler.mousedown, mousedown: this.eventHandler.mousedown }; js_Hanger.prototype.on2.call(this, events); this._childHolders = []; this._dragEventData = null; this._friends = []; this._longPressEventData = null; } BoardTable.tag = 'boardtable'; BoardTable.render = function () { return BoardTable_({ class: 'as-board-table', extendEvent: ['sizechange', 'orderchange', 'itemleave', 'itementer', 'dragitemstart', 'dragitemend'] }); }; var EFFECT_ZONE_CLASS_NAME = 'as-board-table-effect-zone'; var DRAG_ZONE_CLASS_NAME = 'as-board-drag-zone'; var FREE_ZONE_CLASS_NAME = 'as-board-free-zone'; BoardTable.EFFECT_ZONE_CLASS_NAME = EFFECT_ZONE_CLASS_NAME; BoardTable.DRAG_ZONE_CLASS_NAME = DRAG_ZONE_CLASS_NAME; BoardTable.FREE_ZONE_CLASS_NAME = FREE_ZONE_CLASS_NAME; BoardTable.prototype.$preventContext = BoardTable_({ tag: 'textarea', class: 'as-board-table-prevent-context', props: { readOnly: true } }); BoardTable.prototype.maxScrollSpeed = 300; BoardTable.prototype.findDomChildBefore = function (elt) { var nodes = this.childNodes; for (var i = 0; i < nodes.length; ++i) { if (nodes[i] == elt) return nodes[i - 1]; } return null; }; BoardTable.prototype.findDomChildAfter = function (elt) { var nodes = this.childNodes; for (var i = 0; i < nodes.length; ++i) { if (nodes[i] == elt) return nodes[i + 1]; } return null; }; BoardTable.prototype.addChild = function (elt) { if (elt.classList.contains('as-board')) { elt.selfRemove(); var atElt; if (this._childHolders.length > 0) { atElt = this.findDomChildAfter(this._childHolders[this._childHolders.length - 1].elt); if (atElt) { if (atElt != -1) this.insertBefore(elt, atElt); else throw new Error("Violation data!"); } else { this.appendChild(elt); } } else { this.appendChild(elt); } var holder = { elt: elt, }; // elt.on('sizechange', holder.onsizechange); this._childHolders.push(holder); } else { this.appendChild(elt); } return this; }; BoardTable.prototype.removeChild = function (elt) { var holderIndex = this.findChildHolderIndex(elt); if (holderIndex >= 0) { var holder = this._childHolders[holderIndex]; // holder.elt.off('sizechange', holder.onsizechange); this._childHolders.splice(holderIndex, 1); holder.elt.remove(); } else { this.super(elt); } }; BoardTable.prototype.findChildBefore = function (elt) { var holderIndex = this.findChildHolderIndex(elt); if (holderIndex < 0) return holderIndex; if (holderIndex < 1) return null; return this._childHolders[holderIndex - 1]; }; BoardTable.prototype.findChildAfter = function (elt) { var holderIndex = this.findChildHolderIndex(elt); if (holderIndex < 0) return holderIndex; if (holderIndex <= this._childHolders.length) return null; return this._childHolders[holderIndex + 1]; }; BoardTable.prototype.addChildBefore = function (elt, at) { elt.selfRemove(); var atIndex = this.findChildHolderIndex(at); if (elt.classList.contains('as-board')) { if (atIndex < 0) { if (this._childHolders.length > 0) { if (this.findDomChildAfter(this._childHolders[this._childHolders.length - 1].elt) == at) { atIndex = this._childHolders.length; } else { throw new Error("Invalid position, you must insert board next to other board!"); } } } this.insertBefore(elt, at); var holder = { elt: elt }; this._childHolders.splice(atIndex, 0, holder); } else { if (atIndex > 0) { throw new Error("Invalid position, you can not insert othert type between two board!"); } else { this.insertBefore(elt, at); } } return this; }; BoardTable.prototype.addChildAfter = function (elt, at) { elt.selfRemove(); var atIndex = this.findChildHolderIndex(at); var afterAt = this.findDomChildAfter(at); if (elt.classList.contains('as-board')) { if (atIndex < 0) { if (this._childHolders.length > 0) { if (this.findDomChildBefore(this._childHolders[0].elt) == at) { atIndex = -1; } else throw new Error("Invalid position, you must insert board next to other board!"); } } var holder = { elt: elt }; if (!afterAt) { this.appendChild(elt); } else { this.insertBefore(elt, afterAt); } this._childHolders.splice(atIndex + 1, 0, holder); } else { if (this._childHolders.length > 1 && atIndex >= 0 && atIndex + 1 < this._childHolders.length) { throw new Error("Invalid position, you can not insert othert type between two board!"); } else { if (!afterAt) { this.appendChild(elt); } else { this.insertBefore(elt, afterAt); } } } return this; }; BoardTable.prototype.clearChild = function () { this._childHolders = []; return Element.prototype.clearChild.call(this); }; BoardTable.prototype.findChildHolder = function (elt) { return this._childHolders[this.findChildHolderIndex(elt)]; }; BoardTable.prototype.findChildHolderIndex = function (elt) { for (var i = 0; i < this._childHolders.length; ++i) { if (this._childHolders[i].elt == elt) return i; } return -1; }; BoardTable.prototype.getEffectZone = function () { var ez = this; while (ez) { if (ez.classList.contains(EFFECT_ZONE_CLASS_NAME)) { return ez; } ez = ez.parentElement; } return this; }; BoardTable.prototype._findDragZone = function (elt) { var res = null; while (elt != this && elt) { if (elt.classList.contains('as-board-table')) return null;//maybe in other if (!res && elt.classList.contains(DRAG_ZONE_CLASS_NAME)) { res = elt; } if (!res && elt.classList.contains(FREE_ZONE_CLASS_NAME)) return null;// do not drag elt = elt.parentElement; } return res; }; BoardTable.prototype._findBoard = function (elt) { while (elt != this && elt) { if (elt.classList.contains('as-board')) return elt; elt = elt.parentElement; } return null; }; BoardTable.prototype.getAllFriends = function () { var thisBT = this; var res = []; var friendQR; for (var i = 0; i < this._friends.length; ++i) { friendQR = this._friends[i]; if (friendQR != this && friendQR && friendQR.classList && friendQR.classList.contains('as-board-table')) { res.push(friendQR); } else if (typeof friendQR == 'string') {// query BoardTable_$(friendQR, false, function (elt) { if (thisBT != elt && elt.classList && elt.classList.contains('as-board-table')) { res.push(elt); } return false; }); } } return res; }; BoardTable.prototype._findHoverBoardIndex = function (clientX, clientY, excludes) { var cli = new Math_Vec2(clientX, clientY); var bound; for (var i = 0; i < this._childHolders.length; ++i) { // holder = if (excludes && excludes.indexOf(this._childHolders[i].elt) >= 0) continue; bound = Math_Rectangle.fromClientRect(this._childHolders[i].elt.getBoundingClientRect()); if (bound.containsPoint(cli)) return i; } return -1; }; /** * @type {BoardTable} */ BoardTable.eventHandler = {}; BoardTable.eventHandler.mousedown = function (event) { if (this._dragEventData) return; var mousePos; var pointerIdent = -1; var target; var isTouch = event.type === 'touchstart'; if (isTouch) { var touch = event.changedTouches[0]; target = touch.target; pointerIdent = touch.identifier; mousePos = new Math_Vec2(touch.clientX, touch.clientY); } else { mousePos = new Math_Vec2(event.clientX, event.clientY); target = event.target; } var dragzone = this._findDragZone(target); if (dragzone) { var boardElt = this._findBoard(dragzone); var holderIndex = this.findChildHolderIndex(boardElt); if (holderIndex < 0) return;// can not move var cBound = boardElt.getBoundingClientRect(); var mouseBoardOffset = mousePos.sub(new Math_Vec2(cBound.left, cBound.top)); this._dragEventData = { boardElt: boardElt, state: 'WAIT', mouseStartPos: mousePos, mousePos: mousePos, mouseBoardOffset: mouseBoardOffset, holderIndex: holderIndex, boardBound: cBound, isTouch: isTouch, pointerIdent: pointerIdent }; var cEvent = EventEmitter["b" /* default */].copyEvent(event); if (isTouch) { js_Hanger.prototype.on2.call(document.body, { touchend: this.eventHandler.touchFinishBeforeReadyDrag, touchcancel: this.eventHandler.touchFinishBeforeReadyDrag, touchmove: this.eventHandler.touchMoveBeforeReadyDrag }); this.$preventContext.off('contextmenu', this.eventHandler.contextMenu);//event maybe not remove because of double click this.$preventContext.on('contextmenu', this.eventHandler.contextMenu); var thisBT = this; this._dragEventData._longPressTimeout = setTimeout(function () { thisBT._longPressEventData = -1; thisBT.$preventContext.addStyle({ '--x': mousePos.x + 'px', '--y': mousePos.y + 'px' }).addTo(document.body); thisBT.eventHandler.readyDrag(cEvent); }, 400); } else { this.eventHandler.readyDrag(event); } } }; BoardTable.eventHandler.touchFinishBeforeReadyDrag = function (event) { var thisBT = this; var dragEventData = this._dragEventData; if (!dragEventData) return; js_Hanger.prototype.off2.call(document.body, { touchend: this.eventHandler.touchFinishBeforeReadyDrag, touchcancel: this.eventHandler.touchFinishBeforeReadyDrag, touchmove: this.eventHandler.touchMoveBeforeReadyDrag }) if (this._dragEventData._longPressTimeout > 0) { clearTimeout(this._dragEventData._longPressTimeout); } if (dragEventData.state === 'WAIT') { this._dragEventData = null;// canceled } else { setTimeout(function () { thisBT.$preventContext.off('contextmenu', thisBT.eventHandler.contextMenu); thisBT.$preventContext.remove(); }, 60); } }; BoardTable.eventHandler.contextMenu = function (event) { event.preventDefault(); this.$preventContext.off('contextmenu', this.eventHandler.contextMenu); this.$preventContext.remove(); this.eventHandler.touchFinishBeforeReadyDrag(event); } BoardTable.eventHandler.touchMoveBeforeReadyDrag = function (event) { var dragEventData = this._dragEventData; var touch = Object(EventEmitter["c" /* findChangedTouchByIdent */])(event, dragEventData.pointerIdent); if (!touch) return; var mousePos = new Math_Vec2(touch.clientX, touch.clientY); if (dragEventData.state === 'WAIT') { var dv = mousePos.sub(dragEventData.mouseStartPos); if (dv.abs() > 8) { this.eventHandler.touchFinishBeforeReadyDrag(event); this._dragEventData = null;// cancel } } else { this.$preventContext.addStyle({ '--x': mousePos.x + 'px', '--y': mousePos.y + 'px' }); } }; BoardTable.eventHandler.readyDrag = function (event) { var dragEventData = this._dragEventData; dragEventData.state = "PRE_DRAG"; var bodyEvents = {}; if (dragEventData.isTouch) { bodyEvents.touchmove = this.eventHandler.mousemove; bodyEvents.touchcancel = this.eventHandler.mousefinish; bodyEvents.touchend = this.eventHandler.mousefinish; } else { bodyEvents.mousemove = this.eventHandler.mousemove; bodyEvents.mouseup = this.eventHandler.mousefinish; bodyEvents.mouseleave = this.eventHandler.mousefinish; } js_Hanger.prototype.on2.call(document.body, bodyEvents); if (dragEventData.isTouch) { this.eventHandler.mousemove(event); } }; BoardTable.eventHandler.mousemovePredrag = function (event) { var dragEventData = this._dragEventData; var mousePos = dragEventData.mousePos; var thisBT = this; event.preventDefault(); var cBound = dragEventData.boardElt.getBoundingClientRect(); if (mousePos.sub(dragEventData.mouseStartPos).abs() > 8 || dragEventData.isTouch) { dragEventData.placeHolderElt = BoardTable_$(dragEventData.boardElt.cloneNode(false)) .addClass('as-board-place-holder') .addStyle({ width: cBound.width + 'px', height: cBound.height + 'px' }); dragEventData.friendHolders = this.getAllFriends().concat([this]).map(function (elt) { //include itself var effectZone = elt.getEffectZone(); var res = { elt: elt, effectZone: effectZone } if (!dragEventData.isTouch) { var enterEvent = thisBT.eventHandler.enterFriendEffectZone.bind(thisBT, elt); js_Hanger.prototype.on2.call(effectZone, dragEventData.isTouch ? 'touchmove' : 'mouseenter', enterEvent); res.enterEvent = enterEvent; } else { // use move event to detect } return res; }); dragEventData.inEffectZoneOf = this dragEventData.cardStyle = { width: dragEventData.boardElt.style.width, height: dragEventData.boardElt.style.height }; dragEventData.boardElt.addStyle({ width: cBound.width + 'px', height: cBound.height + 'px' }); this.insertBefore(dragEventData.placeHolderElt, dragEventData.boardElt); dragEventData.state = "DRAG"; BoardTable_$(document.body).addClass('as-has-board-table-drag'); dragEventData.boardElt.addClass('as-board-moving'); dragEventData.boardAt = dragEventData.holderIndex; dragEventData.boardIn = thisBT; this.emit('dragitemstart', { type: 'dragitemstart', target: this, boardElt: this._dragEventData.boardElt }, this); } }; BoardTable.eventHandler.mousemoveDragInSelf = function (event) { var dragEventData = this._dragEventData; var mousePos = dragEventData.mousePos; if (this._childHolders.length < 2) { if (dragEventData.boardIn != this) { this.insertBefore(dragEventData.placeHolderElt, this._childHolders[0].elt); dragEventData.boardIn = this; dragEventData.boardAt = 0; } } else { // bản thân chỉ có 1, hoặc nhiều hơn var i = this._findHoverBoardIndex(mousePos.x, mousePos.y, [dragEventData.boardElt]); if (i >= 0) { if (dragEventData.boardIn != this) { dragEventData.boardIn = this; } var viewIndex; if ((i < dragEventData.holderIndex && i < dragEventData.boardAt) || (i > dragEventData.holderIndex && i > dragEventData.boardAt) || dragEventData.holderIndex == dragEventData.boardAt) { viewIndex = i; } else { if (dragEventData.holderIndex > dragEventData.boardAt) { viewIndex = i + 1; } else { viewIndex = i - 1; } } var fbound = this._childHolders[i].elt.getBoundingClientRect(); var displayStyple = this._childHolders[i].elt.getComputedStyleValue('display'); if (mousePos.x > fbound.left && mousePos.x < fbound.right && mousePos.y > fbound.top && mousePos.y < fbound.bottom) { if (displayStyple.startsWith('inline')) { if (dragEventData.boardBound.width < fbound.width) { if (dragEventData.boardAt > viewIndex && mousePos.x > fbound.left + dragEventData.boardBound.width) { viewIndex += 1; } else if (dragEventData.boardAt < viewIndex && mousePos.x < fbound.left + fbound.width - dragEventData.boardBound.width) { viewIndex -= 1; } } } else { if (dragEventData.boardBound.height < fbound.height) { if (dragEventData.boardAt > viewIndex && mousePos.y >= fbound.top + dragEventData.boardBound.height) { viewIndex += 1; } else if (dragEventData.boardAt < viewIndex && mousePos.y <= fbound.top + fbound.height - dragEventData.boardBound.height) { viewIndex -= 1; } } } viewIndex = Math.max(0, Math.min(this._childHolders.length, viewIndex)); if (viewIndex != dragEventData.boardAt) { dragEventData.boardAt = viewIndex; if (dragEventData.holderIndex >= viewIndex) { this.insertBefore(dragEventData.placeHolderElt, this._childHolders[viewIndex].elt); } else { var bf = Element.prototype.findChildAfter.call(this, this._childHolders[viewIndex].elt); if (bf) this.insertBefore(dragEventData.placeHolderElt, bf); else { this.appendChild(dragEventData.placeHolderElt); } } } } } } }; BoardTable.eventHandler.mousemoveDragInOther = function (event) { var dragEventData = this._dragEventData; var mousePos = dragEventData.mousePos; var other = dragEventData.inEffectZoneOf; if (other._childHolders.length == 0) { if (dragEventData.boardIn != other) { dragEventData.boardIn = other; dragEventData.boardAt = 0; other.appendChild(dragEventData.placeHolderElt); } } else { var i = other._findHoverBoardIndex(mousePos.x, mousePos.y); if (i >= 0) { if (dragEventData.boardIn != other) { dragEventData.boardIn = other; } var displayStyple = other._childHolders[i].elt.getComputedStyleValue('display'); var di = 0; var bbound = other._childHolders[i].elt.getBoundingClientRect(); if (displayStyple.startsWith('inline')) { if (mousePos.x > bbound.left + bbound.width / 2) di++; } else { if (mousePos.y > bbound.top + bbound.height / 2) di++; } i += di; if (i < other._childHolders.length) { other.insertBefore(dragEventData.placeHolderElt, other._childHolders[i].elt); } else { var bf = other.findChildAfter(other._childHolders[other._childHolders.length - 1].elt); if (bf) { other.insertBefore(dragEventData.placeHolderElt, bf); } else { other.appendChild(dragEventData.placeHolderElt) } } dragEventData.boardAt = i; } } }; BoardTable.eventHandler.mousemoveDrag = function (event) { var dragEventData = this._dragEventData; if (dragEventData.inEffectZoneOf == this) { this.eventHandler.mousemoveDragInSelf(event); } else { this.eventHandler.mousemoveDragInOther(event); } }; BoardTable.eventHandler.boarDrag = function (event) { var dragEventData = this._dragEventData; var mousePos = dragEventData.mousePos; var boardPos = mousePos.sub(dragEventData.mouseBoardOffset); dragEventData.boardElt.addStyle({ left: boardPos.x + 'px', top: boardPos.y + 'px' }); }; BoardTable.eventHandler.dragOnEffectZone = function (event) { var dragEventData = this._dragEventData; var mousePos = dragEventData.mousePos; var friendHolders = dragEventData.friendHolders; var bound; for (var i = 0; i < friendHolders.length; ++i) { bound = Math_Rectangle.fromClientRect(friendHolders[i].effectZone.getBoundingClientRect()); if (bound.containsPoint(mousePos)) { dragEventData.inEffectZoneOf = friendHolders[i].elt; break; } } }; BoardTable.eventHandler.mousemoveOverflow = function (event) { if (!this._dragEventData) return; var dragEventData = this._dragEventData; var scrollerX = this._dragEventData.boardIn; var overflowStyle; while (scrollerX) { overflowStyle = window.getComputedStyle(scrollerX)['overflow']; if ((overflowStyle === 'auto' || overflowStyle === 'auto hidden' || overflowStyle === 'scroll' || scrollerX.tagName === 'HTML') && (scrollerX.clientWidth < scrollerX.scrollWidth)) break; scrollerX = scrollerX.parentElement; } var scrollerY = this._dragEventData.boardIn; while (scrollerY) { overflowStyle = window.getComputedStyle(scrollerY)['overflow']; if ((overflowStyle === 'auto' || overflowStyle === 'hidden auto' || overflowStyle === 'scroll' || scrollerY.tagName === 'HTML') && (scrollerY.clientHeight < scrollerY.scrollHeight)) break; scrollerY = scrollerY.parentElement; } var outBound; var bBound; var screenSize = Dom["b" /* default */].getScreenSize(); var vx = 0; var vy = 0; bBound = this._dragEventData.boardElt.getBoundingClientRect(); if (scrollerX) { if (dragEventData.$scrollerX !== scrollerX) { dragEventData.scrollerXValue = scrollerX.scrollLeft; dragEventData.$scrollerX = scrollerX; } outBound = scrollerX.getBoundingClientRect(); outBound = { left: Math.max(outBound.left, 0), top: Math.max(outBound.top, 0), bottom: Math.min(outBound.bottom, screenSize.height), right: Math.min(outBound.right, screenSize.width) } if (bBound.left < outBound.left) { vx = bBound.left - outBound.left; } else if (bBound.right > outBound.right) { vx = bBound.right - outBound.right; } } else { dragEventData.$scrollerX = null; } if (scrollerY) { if (dragEventData.$scrollerY !== scrollerY) { dragEventData.scrollerYValue = scrollerY.scrollTop; dragEventData.$scrollerY = scrollerY; } outBound = scrollerY.getBoundingClientRect(); outBound = { left: Math.max(outBound.left, 0), top: Math.max(outBound.top, 0), bottom: Math.min(outBound.bottom, screenSize.height), right: Math.min(outBound.right, screenSize.width) } if (bBound.top < outBound.top) { vy = bBound.top - outBound.top; } else if (bBound.bottom > outBound.bottom) { vy = bBound.bottom - outBound.bottom; } } else { dragEventData.$scrollerY = null; } vx = Math.max(-this.maxScrollSpeed, Math.min(this.maxScrollSpeed, vx * Math.sqrt(Math.abs(vx)))); vy = Math.max(-this.maxScrollSpeed, Math.min(this.maxScrollSpeed, vy * Math.sqrt(Math.abs(vy)))); if (vx !== 0 || vy !== 0) { var copyEvent = { type: event.type, preventDefault: function () {/* noop */ }, target: event.target }; if (event.type === 'touchmove') { copyEvent.changedTouches = Array.prototype.map.call(event.changedTouches, function (it) { return { identifier: it.identifier, clientX: it.clientX, clientY: it.clientY, target: it.target } }); copyEvent.touches = Array.prototype.map.call(event.touches, function (it) { return { identifier: it.identifier, clientX: it.clientX, clientY: it.clientY, target: it.target } }); } else { copyEvent.clientX = event.clientX; copyEvent.clientY = event.clientY } var thisBT = this; var now = new Date().getTime(); if (dragEventData.requestAnimationFrameId >= 0) { cancelAnimationFrame(dragEventData.requestAnimationFrameId); } dragEventData.requestAnimationFrameId = requestAnimationFrame(function () { dragEventData.requestAnimationFrameId = -1; var dt = (new Date().getTime() - now) / 1000; if (dragEventData.$scrollerY) { dragEventData.scrollerYValue += vy * dt; dragEventData.scrollerYValue = Math.max(0, Math.min(dragEventData.$scrollerY.scrollHeight - dragEventData.$scrollerY.clientHeight, dragEventData.scrollerYValue)) dragEventData.$scrollerY.scrollTop = dragEventData.scrollerYValue; } if (dragEventData.$scrollerX) { dragEventData.scrollerXValue += vx * dt; dragEventData.scrollerXValue = Math.max(0, Math.min(dragEventData.$scrollerX.scrollWidth - dragEventData.$scrollerX.clientWidth, dragEventData.scrollerXValue)) dragEventData.$scrollerX.scrollLeft = dragEventData.scrollerXValue; } if (thisBT._dragEventData && thisBT._dragEventData.state === "DRAG") { thisBT.eventHandler.mousemoveOverflow(copyEvent); } }); } }; BoardTable.eventHandler.mousemove = function (event) { var dragEventData = this._dragEventData; var isTouch = event.type === 'touchmove' || event.type === 'touchstart';// call from timeout if (dragEventData.isTouch !== isTouch) return; var mousePos; var pointerIdent; var touch = -2; if (isTouch) { touch = Object(EventEmitter["c" /* findChangedTouchByIdent */])(event, dragEventData.pointerIdent); if (touch) { pointerIdent = touch.identifier; mousePos = new Math_Vec2(touch.clientX, touch.clientY); } } else { pointerIdent = -1; mousePos = new Math_Vec2(event.clientX, event.clientY); } if (dragEventData.pointerIdent !== pointerIdent) return; dragEventData.mousePos = mousePos; event.preventDefault(); if (dragEventData.isTouch && dragEventData.state === 'DRAG') { this.eventHandler.dragOnEffectZone(event);//because touch not have mouseenter event } if (dragEventData.state === 'PRE_DRAG') { this.eventHandler.mousemovePredrag(event); } if (dragEventData.state === 'DRAG') { this.eventHandler.mousemoveDrag(event); this.eventHandler.boarDrag(event); this.eventHandler.mousemoveOverflow(event); } }; BoardTable.eventHandler.mousefinish = function (event) { var dragEventData = this._dragEventData; var isTouch = event.type === 'touchend'; if (dragEventData.isTouch !== isTouch) return; var mousePos; var pointerIdent; var touch = -2; if (isTouch) { touch = Object(EventEmitter["c" /* findChangedTouchByIdent */])(event, dragEventData.pointerIdent); if (touch) { pointerIdent = touch.identifier; mousePos = new Math_Vec2(touch.clientX, touch.clientY); } } else { pointerIdent = -1; mousePos = new Math_Vec2(event.clientX, event.clientY); } if (dragEventData.pointerIdent !== pointerIdent) return; dragEventData.mousePos = mousePos; var changed; if (dragEventData.state == 'DRAG') { setTimeout(function () { BoardTable_$(document.body).removeClass('as-has-board-table-drag'); }, 1) dragEventData.boardElt.removeClass('as-board-moving') .removeStyle('left') .removeStyle('top'); dragEventData.boardElt.addStyle(dragEventData.cardStyle); dragEventData.placeHolderElt.remove(); dragEventData.state = "FINISH"; if (!dragEventData.isTouch) dragEventData.friendHolders.forEach(function (holder) { js_Hanger.prototype.off2.call(holder.effectZone, 'mouseenter', holder.enterEvent); }); if (dragEventData.boardIn == this) { if (dragEventData.holderIndex != dragEventData.boardAt) { if (dragEventData.holderIndex > dragEventData.boardAt) { this.insertBefore(dragEventData.boardElt, this._childHolders[dragEventData.boardAt].elt); } else if (dragEventData.holderIndex < dragEventData.boardAt) { var bf = Element.prototype.findChildAfter.call(this, this._childHolders[dragEventData.boardAt].elt); if (bf) this.insertBefore(dragEventData.boardElt, bf); else { this.appendChild(dragEventData.boardElt); } } var holder = this._childHolders.splice(dragEventData.holderIndex, 1)[0]; this._childHolders.splice(dragEventData.boardAt, 0, holder); changed = 'orderchange'; this.emit('orderchange', { type: 'orderchange', boardElt: holder.elt, action: 'move', from: dragEventData.holderIndex, to: dragEventData.boardAt, target: this, }, this); } } else { var holder = this._childHolders.splice(dragEventData.holderIndex, 1)[0]; holder.elt.remove(); ///remove all event var other = dragEventData.boardIn; changed = 'itemleave'; this.emit('itemleave', { type: 'itemleave', item: holder.elt, from: { index: dragEventData.holderIndex, table: this }, to: { index: dragEventData.boardAt, table: other }, target: this }, this); if (other._childHolders.length == 0) { other.appendChild(holder.elt); other._childHolders.push(holder); } else { if (dragEventData.boardAt < other._childHolders.length) { other.insertBefore(holder.elt, other._childHolders[dragEventData.boardAt].elt); other._childHolders.splice(dragEventData.boardAt, 0, holder); } else { var bf = other.findDomChildAfter(other._childHolders.elt); if (bf) { other.insertBefore(holder.elt, bf); } else { other.appendChild(holder.elt); } other._childHolders.push(holder); } } other.emit('itementer', { type: 'itementer', item: holder.elt, target: other, from: { index: dragEventData.holderIndex, table: this }, to: { index: dragEventData.boardAt, table: other } }, other); } this.emit('dragitemend', { type: 'dragitemend', target: this, changed: changed, boardElt: this._dragEventData.boardElt }, this); } var bodyEvents = {}; if (dragEventData.isTouch) { bodyEvents.touchmove = this.eventHandler.mousemove; bodyEvents.touchcancel = this.eventHandler.mousefinish; bodyEvents.touchend = this.eventHandler.mousefinish; } else { bodyEvents.mousemove = this.eventHandler.mousemove; bodyEvents.mouseup = this.eventHandler.mousefinish; bodyEvents.mouseleave = this.eventHandler.mousefinish; } js_Hanger.prototype.off2.call(document.body, bodyEvents); this._dragEventData = null; }; BoardTable.eventHandler.enterFriendEffectZone = function (friendElt, event) { this._dragEventData.inEffectZoneOf = friendElt; }; BoardTable.prototype.getAllBoards = function () { return this._childHolders.map(function (holder) { return holder.elt; }); }; BoardTable.property = {}; BoardTable.property.friends = { set: function (value) { value = value || []; if (!(value instanceof Array)) value = [value]; this._friends = value; }, get: function () { return this._friends; } }; ACore["d" /* default */].install(BoardTable); /* harmony default export */ var js_BoardTable = (BoardTable); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/bscroller.css var bscroller = __webpack_require__(42); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/BScroller.js var BScroller_ = ACore["d" /* default */]._; var BScroller_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function BScroller() { this.addClass('as-bscroller'); } BScroller.tag = "bscroller"; BScroller.render = function (data) { if (data && data.elt) { return BScroller_$(data.elt) } else return BScroller_('div'); }; BScroller.prototype.scrollInto = function (element) { if (Element.prototype.isDescendantOf.call(element, this)) { var elementBound = element.getBoundingClientRect(); var viewportBound = this.getBoundingClientRect(); var currentScrollTop = this.scrollTop; var newScrollTop = currentScrollTop; if (elementBound.bottom > viewportBound.bottom) { newScrollTop = currentScrollTop + (elementBound.bottom - viewportBound.bottom); } if (elementBound.top < viewportBound.top) { newScrollTop = currentScrollTop - (viewportBound.top - elementBound.top); } if (newScrollTop != currentScrollTop) { this.scrollTop = newScrollTop; } var currentScrollLeft = this.scrollLeft; var newScrollLeft = currentScrollLeft; if (elementBound.right > viewportBound.right) { newScrollLeft = currentScrollLeft + (elementBound.right - viewportBound.right); } if (elementBound.left < viewportBound.left) { newScrollLeft = currentScrollLeft - (viewportBound.left - elementBound.left); } if (newScrollLeft != currentScrollLeft) { this.scrollLeft = newScrollLeft; } } } ACore["d" /* default */].install(BScroller); /* harmony default export */ var js_BScroller = (BScroller); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/buttonarray.css var buttonarray = __webpack_require__(99); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ButtonArray.js var ButtonArray_ = ACore["d" /* default */]._; var ButtonArray_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function ButtonArray() { this._dict = {}; this._pool = []; this._items = []; this.$lastActiveBtn = null; this._value = undefined; this._lastValue = this._value; } ButtonArray.tag = 'buttonarray'; ButtonArray.render = function () { return ButtonArray_({ extendEvent: ['change'], class: 'as-button-array' }); }; ButtonArray.prototype._newButton = function () { var button = ButtonArray_({ tag: 'button', class: 'as-button-array-item', child: { text: 'null' } }); button.on('click', this.eventHandler.clickItem.bind(this, button)); return button; }; ButtonArray.prototype._requestButton = function (items) { var button; if (this._pool.length > 0) { button = this._pool.pop(); } else { button = this._newButton(); } return button; }; ButtonArray.prototype._assignButton = function (button, data) { button._data = data; button.childNodes[0].data = data.text; }; ButtonArray.prototype._releaseButton = function (button) { this._pool.push(button); }; ButtonArray.prototype._getFullFormat = function (item) { var res = {}; if ((typeof item == 'string') || (typeof item == 'number') || (typeof item == 'boolean') || (item === null) || (item === undefined)) { res.ident = item; res.value = item; res.text = item + ''; } else if (item && (typeof item == 'object')) { res.value = item.value; res.ident = res.value + ''; res.text = item.text; } return res; }; ButtonArray.property = {}; /** * @type {ButtonArray} */ ButtonArray.property.items = { set: function (items) { items = items || []; this._items = items; var child; while (this.childNodes.length > items.length) { child = this.lastChild; this._releaseButton(child); this.removeChild(child); } while (this.childNodes.length < items.length) { this.addChild(this._requestButton()); } var item; for (var i = 0; i < items.length; ++i) { item = this._getFullFormat(items[i]); this._assignButton(this.childNodes[i], item); this._dict[item.ident] = { elt: this.childNodes[i], data: item } } if (items.length > 0) { if (!this._dict[this._value + '']) { this._value = this._getFullFormat(items[0]).value; } } this.value = this._value; }, get: function () { return this._items; } }; ButtonArray.property.value = { set: function (value) { this._value = value; this._lastValue = this._value; if (this.$lastActiveBtn) { this.$lastActiveBtn.removeClass('as-active'); this.$lastActiveBtn = null; } var hodler = this._dict[value + '']; if (hodler) { hodler.elt.addClass('as-active'); this.$lastActiveBtn = hodler.elt; } }, get: function () { return this._value; } }; ButtonArray.eventHandler = {}; ButtonArray.eventHandler.clickItem = function (item, event) { if (this._lastValue != item._data.value) { this.value = item._data.value; this.emit('change', { target: this, value: this.value, type: 'change' }, this); } }; ACore["d" /* default */].install(ButtonArray); /* harmony default export */ var js_ButtonArray = (ButtonArray); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/calendarinput.css var calendarinput = __webpack_require__(101); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/chromecalendar.css var chromecalendar = __webpack_require__(103); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/scroller.css var css_scroller = __webpack_require__(105); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Scroller.js var Scroller_ = ACore["d" /* default */]._; var Scroller_$ = ACore["d" /* default */].$; ACore["d" /* default */].$scrollStyle = (function () { var element = Scroller_('style#vscroller-style'); element.innerHTML = [ '.absol-vscroller-viewport{ margin-right: ' + (-17) + 'px; min-width: calc(100% + ' + (17) + 'px);}', '.absol-hscroller-viewport{ margin-bottom: ' + (-17) + 'px; min-height: calc(100% + ' + (17) + 'px);}' ].join('\n'); document.head.appendChild(element); Dom["b" /* default */].getScrollSize().then(function (size) { element.innerHTML = [ '.absol-vscroller-viewport{ margin-right: ' + (-size.width) + 'px; min-width: calc(100% + ' + (size.width) + 'px);}', '.absol-hscroller-viewport{ margin-bottom: ' + (-size.height) + 'px; min-height: calc(100% + ' + (size.height) + 'px);}' ].join('\n'); }); return element; } )(); /*** * @extends AElement * @constructor */ function VScroller() { var thisVS = this; this.$attachHook = Scroller_$('attachhook', this); this.sync = new Promise(function (rs) { thisVS.$attachHook.once('error', function () { rs(); }); }); this.$attachHook.on('error', function () { thisVS.requestUpdateSize(); }); this.$vscrollbar = Scroller_$('vscrollbar', this).on('scroll', this.eventHandler.scrollScrollbar); this.$viewport = Scroller_$('.absol-vscroller-viewport', this) .on('scroll', this.eventHandler.scrollViewport); OOP["a" /* default */].extends(thisVS.$viewport, { removeChild: function () { this.super.apply(this, arguments); thisVS.requestUpdateSize(); return thisVS; } }) } VScroller.tag = 'vscroller'; VScroller.render = function () { return Scroller_({ class: 'absol-vscroller', child: ['.absol-vscroller-viewport', { class: ['absol-scrollbar-container', 'vertical'], child: 'vscrollbar' }, 'attachhook' ] }); }; VScroller.prototype.requestUpdateSize = function () { // return; if (this._isRequestingUpdateSize) return this.sync; this._isRequestingUpdateSize = true; this.sync = this.sync.then(function () { this.$vscrollbar.outerHeight = this.$viewport.clientHeight; this.$vscrollbar.innerHeight = this.$viewport.scrollHeight - 2; this.$vscrollbar.innerOffset = this.$viewport.scrollTop; if (this.$vscrollbar.innerHeight <= this.$vscrollbar.outerHeight) { this.$vscrollbar.hidden = true; this.addClass('disabled'); } else { this.removeClass('disabled'); this.$vscrollbar.hidden = false; } this._isRequestingUpdateSize = false; }.bind(this)); return this.sync; }; VScroller.prototype.init = function (props) { this.super(props); this.requestUpdateSize(); }; VScroller.prototype.addChild = function () { var res = this.$viewport.addChild.apply(this.$viewport, arguments); this.requestUpdateSize(); return res; }; VScroller.prototype.clearChild = function () { var res = this.$viewport.clearChild.apply(this.$viewport, arguments); this.requestUpdateSize(); return res; }; VScroller.prototype.addChildBefore = function () { var res = this.$viewport.addChildBefore.apply(this.$viewport, arguments); this.requestUpdateSize(); return res; }; VScroller.prototype.addChildAfter = function () { var res = this.$viewport.addChildAfter.apply(this.$viewport, arguments); this.requestUpdateSize(); return res; }; VScroller.prototype.findChildAfter = function () { return this.$viewport.findChildAfter.apply(this.$viewport, arguments); }; VScroller.prototype.findChildBefore = function () { return this.$viewport.findChildBefore.apply(this.$viewport, arguments); }; VScroller.prototype.removeChild = function () { var res = this.$viewport.removeChild.apply(this.$viewport, arguments); this.requestUpdateSize(); return res; }; VScroller.prototype.scrollInto = function (element, padding, scrollTime, beforFrame, afterFrame) { padding = padding || 0; scrollTime = scrollTime || 0; var frameCount = Math.ceil(scrollTime / 15 + 1); var self = this; function onFrame() { beforFrame && beforFrame(); var elementBound = element.getBoundingClientRect(); var viewportBound = self.$viewport.getBoundingClientRect(); var currentScrollTop = self.$viewport.scrollTop; var newScrollTop = currentScrollTop; if (elementBound.bottom + padding > viewportBound.bottom) { newScrollTop = currentScrollTop + ((elementBound.bottom + padding) - viewportBound.bottom) / (Math.log(frameCount) + 1); } if (elementBound.top - padding < viewportBound.top) { newScrollTop = currentScrollTop - (viewportBound.top - (elementBound.top - padding)) / (Math.log(frameCount) + 1); } if (newScrollTop != currentScrollTop) { self.$viewport.scrollTop = newScrollTop; } afterFrame && afterFrame(); frameCount--; if (frameCount > 0) setTimeout(onFrame, 15) } if (Element.prototype.isDescendantOf.call(element, this.$viewport)) { onFrame(); } }; VScroller.prototype.scrollBy = function (dy, duration) { duration = duration || 0; var frameCount = Math.ceil(duration / 20); var timeOut = duration / frameCount; var i = 0; var self = this; var start = self.$viewport.scrollTop; var end = start + dy; function onFrame() { self.$viewport.scrollTop = Math.max(int_map(i, 0, frameCount, start, end), 0); ++i; if (i <= frameCount) setTimeout(onFrame, timeOut); } onFrame(); }; VScroller.eventHandler = {}; VScroller.eventHandler.scrollViewport = function (event) { this.$vscrollbar.outerHeight = this.$viewport.clientHeight; this.$vscrollbar.innerHeight = this.$viewport.scrollHeight; this.$vscrollbar.innerOffset = this.$viewport.scrollTop; }; VScroller.eventHandler.scrollScrollbar = function (event) { this.$viewport.scrollTop = this.$vscrollbar.innerOffset; }; /*** * @extends AElement * @constructor */ function HScroller() { var thisHS = this; this.$attachHook = Scroller_$('attachhook', this) .on('error', function () { this.requestUpdateSize = this.requestUpdateSize || thisHS.requestUpdateSize.bind(thisHS); Dom["b" /* default */].addToResizeSystem(this); }); this.sync = new Promise(function (rs, rj) { thisHS.$attachHook.once('error', rs); }); this.$hscrollbar = Scroller_$('hscrollbar', this).on('scroll', this.eventHandler.scrollScrollbar); this.$viewport = Scroller_$('.absol-hscroller-viewport', this) .on('scroll', this.eventHandler.scrollViewport); OOP["a" /* default */].extends(this.$viewport, { removeChild: function () { this.super.apply(this, arguments); thisHS.requestUpdateSize(); return thisHS; } }); } HScroller.tag = 'hscroller'; HScroller.render = function () { return Scroller_({ class: 'absol-hscroller', child: ['.absol-hscroller-viewport', { class: ['absol-scrollbar-container', 'horizontal'], child: 'hscrollbar' }, 'attachhook' ] }); }; HScroller.eventHandler = {}; HScroller.eventHandler.scrollViewport = function (event) { this.$hscrollbar.outerWidth = this.$viewport.clientWidth; this.$hscrollbar.innerWidth = this.$viewport.scrollWidth; this.$hscrollbar.innerOffset = this.$viewport.scrollLeft; }; HScroller.eventHandler.scrollScrollbar = function (event) { this.$viewport.scrollLeft = this.$hscrollbar.innerOffset; }; Object.assign(HScroller.prototype, VScroller.prototype); HScroller.prototype.requestUpdateSize = function () { // return; if (this._isRequestingUpdateSize) return this.sync; this._isRequestingUpdateSize = true; this.sync = this.sync.then(function () { this.$hscrollbar.outerWidth = this.$viewport.clientWidth; this.$hscrollbar.innerWidth = this.$viewport.scrollWidth; this.$hscrollbar.innerOffset = this.$viewport.scrollLeft; if (this.$hscrollbar.innerWidth <= this.$hscrollbar.outerWidth) { this.$hscrollbar.hidden = true; this.addClass('disabled'); } else { this.removeClass('disabled'); this.$hscrollbar.hidden = false; } this._isRequestingUpdateSize = false; }.bind(this)); return this.sync; }; HScroller.prototype.scrollInto = function (element) { if (Element.prototype.isDescendantOf.call(element, this.$viewport)) { var elementBound = element.getBoundingClientRect(); var viewportBound = this.$viewport.getBoundingClientRect(); var currentScrollLeft = this.$viewport.scrollLeft; var newScrollLeft = currentScrollLeft; if (elementBound.right > viewportBound.right) { newScrollLeft = currentScrollLeft + (elementBound.right - viewportBound.right); } if (elementBound.left < viewportBound.left) { newScrollLeft = currentScrollLeft - (viewportBound.left - elementBound.left); } if (newScrollLeft != currentScrollLeft) { this.$viewport.scrollLeft = newScrollLeft; } } } /*** * @extends AElement * @constructor */ function Scrollbar() { var thisSB = this; this.$button = Scroller_$('.absol-scrollbar-button', this); this.on('inactive', function (event, sender) { this.emit('deactive', event, sender); }); } Scrollbar.tag = 'scrollbar'; Scrollbar.render = function () { return Scroller_({ tag: js_Hanger.tag, class: ['absol-scrollbar'], extendEvent: ['scroll', 'active', 'inactive', 'deactive'], child: '.absol-scrollbar-button' }); }; Scrollbar.property = {}; Scrollbar.property.hidden = { set: function (value) { value = !!value; if (value !== this._hidden) { this._hidden = value; if (value) this.addClass('absol-hidden'); else this.removeClass('absol-hidden'); } }, get: function () { return this.hasClass('absol-hidden') } }; /*** * @extends Scrollbar * @constructor */ function VScrollbar() { this.on('draginit', this.eventHandler.dragInit, true) .on('drag', this.eventHandler.drag, true) .on('dragend', this.eventHandler.dragEnd, true); /*** * @type {number} * @name outerHeight * @memberOf VScrollbar# */ /*** * @type {number} * @name innerHeight * @memberOf VScrollbar# */ /*** * @type {number} * @name innerHeight * @memberOf VScrollbar# */ } VScrollbar.tag = 'vscrollbar'; VScrollbar.render = function () { return Scroller_({ tag: 'scrollbar', class: 'absol-vscrollbar' }, true); }; VScrollbar.prototype.updateValue = function () { this.$button.addStyle('height', Math.min(this.outerHeight / this.innerHeight, 1) * 100 + '%'); this.$button.addStyle('top', this.innerOffset / this.innerHeight * 100 + '%'); }; VScrollbar.prototype.updateStatus = function () { if (this.innerHeight > this.outerHeight) { this.addClass('as-overflow'); } else { this.removeClass('as-overflow'); } }; VScrollbar.eventHandler = {}; VScrollbar.eventHandler.dragInit = function (event) { event.preventDefault(); var boundRes = this.getBoundingClientRect(); var boundButton = this.$button.getBoundingClientRect(); if (event.target === this.$button) { this.innerOffset0 = this.innerOffset; } else { var newInnerOffset = int_map(event.startingPoint.y - boundButton.height / 2 - boundRes.top, 0, boundRes.height, 0, this.innerHeight); if (newInnerOffset + this.outerHeight > this.innerHeight) newInnerOffset = this.innerHeight - this.outerHeight; if (newInnerOffset < 0) newInnerOffset = 0; this.innerOffset = newInnerOffset; //todo event.innerOffset = newInnerOffset; this.innerOffset0 = newInnerOffset; this.emit('scroll', event); } this.addClass('absol-active'); this.emit('active', { type: 'active', originEvent: event, target: this, originalEvent: event.originalEvent || event }); }; VScrollbar.eventHandler.drag = function (event) { event.preventDefault(); var dy = event.currentPoint.sub(event.startingPoint).y; var newInnerOffset = this.innerOffset0 + dy * (this.innerHeight / this.outerHeight) * (this.outerHeight / this.getBoundingClientRect().height); if (newInnerOffset + this.outerHeight > this.innerHeight) newInnerOffset = this.innerHeight - this.outerHeight; if (newInnerOffset < 0) newInnerOffset = 0; this.innerOffset = newInnerOffset; event.innerOffset = newInnerOffset; this.emit('scroll', event); }; VScrollbar.eventHandler.dragEnd = function (event) { this.removeClass('absol-active'); this.emit('inactive', { type: 'inactive', originEvent: event, target: this, originalEvent: event.originalEvent || event }); }; VScrollbar.property = { innerOffset: { set: function (value) { value = value || 0; if (this._innerOffset != value) { this._innerOffset = value; this.updateValue(); } }, get: function () { return this._innerOffset || 0; } }, innerHeight: { set: function (value) { value = value || 1; value = Math.max(value, 1); if (this._innerHeight !== value) { this._innerHeight = value; this.updateValue(); } this.updateStatus(); }, get: function () { return this._innerHeight || 1; } }, outerHeight: { set: function (value) { value = value || 0; value = Math.max(value, 0); if (this._outerHeight !== value) { this._outerHeight = value; this.updateValue(); } this.updateStatus(); }, get: function () { return this._outerHeight || 0; } } }; /*** * @extends Scrollbar * @constructor */ function HScrollbar() { this.on('draginit', this.eventHandler.dragInit, true) .on('drag', this.eventHandler.drag, true) .on('dragend', this.eventHandler.dragEnd, true); /*** * @type {number} * @name innerOffset * @memberOf HScrollbar# */ /*** * @type {number} * @name innerWidth * @memberOf HScrollbar# */ /*** * @type {number} * @name outerWidth * @memberOf HScrollbar# */ } HScrollbar.tag = 'hscrollbar'; HScrollbar.render = function () { return Scroller_({ tag: 'scrollbar', class: 'absol-hscrollbar' }, true); } HScrollbar.prototype.updateValue = function () { this.$button.addStyle('width', Math.min(this.outerWidth / this.innerWidth, 1) * 100 + '%'); this.$button.addStyle('left', this.innerOffset / this.innerWidth * 100 + '%'); }; HScrollbar.prototype.updateStatus = function () { if (this.innerWidth > this.outerWidth) { this.addClass('as-overflow'); } else { this.removeClass('as-overflow'); } }; /** * * @type {{[key: string]:function}} */ HScrollbar.eventHandler = {}; /** * @this HScrollbar * @param event */ HScrollbar.eventHandler.dragInit = function (event) { event.preventDefault(); var boundRes = this.getBoundingClientRect(); var boundButton = this.$button.getBoundingClientRect(); if (event.target === this.$button) { this.innerOffset0 = this.innerOffset; } else { var newInnerOffset = int_map(event.startingPoint.x - boundButton.width / 2 - boundRes.left, 0, boundRes.width, 0, this.innerWidth); if (newInnerOffset + this.outerWidth > this.innerWidth) newInnerOffset = this.innerWidth - this.outerWidth; if (newInnerOffset < 0) newInnerOffset = 0; this.innerOffset = newInnerOffset; //todo event.innerOffset = newInnerOffset; this.innerOffset0 = newInnerOffset; this.emit('scroll', event); } var body = Scroller_$(document.body); this.addClass('absol-active'); this.emit('active', { type: 'inactive', originEvent: event, target: this }); }; /** * @this HScrollbar * @param event */ HScrollbar.eventHandler.drag = function (event) { event.preventDefault(); var dy = event.currentPoint.x - event.startingPoint.x; var newInnerOffset = this.innerOffset0 + dy * (this.innerWidth / this.outerWidth) * (this.outerWidth / this.getBoundingClientRect().width); if (newInnerOffset + this.outerWidth > this.innerWidth) newInnerOffset = this.innerWidth - this.outerWidth; if (newInnerOffset < 0) newInnerOffset = 0; this.innerOffset = newInnerOffset; //todo event.innerOffset = newInnerOffset; this.emit('scroll', event); }; /** * @this HScrollbar * @param event */ HScrollbar.eventHandler.dragEnd = function (event) { this.removeClass('absol-active'); this.emit('inactive', { type: 'inactive', originEvent: event, target: this }); }; HScrollbar.property = { innerOffset: { set: function (value) { value = value || 0; if (this._innerOffset !== value) { this._innerOffset = value; this.updateValue(); } }, get: function () { return this._innerOffset || 0; } }, innerWidth: { set: function (value) { value = value || 1; value = Math.max(value, 1); if (this._innerWidth !== value) { this._innerWidth = value; this.updateValue(); } this.updateStatus(); }, get: function () { return this._innerWidth || 1; } }, outerWidth: { set: function (value) { value = value || 0; value = Math.max(value, 0); if (this._outerWidth !== value) { this._outerWidth = value; this.updateValue(); } this.updateStatus(); }, get: function () { return this._outerWidth || 0; } } }; ACore["d" /* default */].install([VScrollbar, HScrollbar, Scrollbar, VScroller, HScroller]); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/DomSignal.js var DomSignal = __webpack_require__(9); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ChromeCalendar.js var ChromeCalendar_ = ACore["d" /* default */]._; var ChromeCalendar_$ = ACore["d" /* default */].$; /** * @extends AElement * @constructor */ function ChromeCalendar() { var thisCal = this; this._startDayOfWeek = 0;// getDefaultFirstDayOfWeek(); this._level = "day"; this.$years = ChromeCalendar_$('.absol-chrome-calendar-years', this); this._fillYearList(this.$years); this.$title = ChromeCalendar_$('.absol-chrome-calendar-title', this) .on('click', this.eventHandler.clickTitle); this.$titleTime = ChromeCalendar_$('.title-time', this.$title); this.$instance = ChromeCalendar_$('.absol-chrome-calendar-instance', this); this.$era = ChromeCalendar_$('.absol-chrome-calendar-era', this) .on('scroll', this.eventHandler.eraScroll) .on('click', this.eventHandler.clickEra); this._fillEra(); this.$month = ChromeCalendar_$('.absol-chrome-calendar-month', this); this.$dayOfWeek = ChromeCalendar_$('.absol-chrome-calendar-dayofweek', this); this._min = new Date(1890, 0, 1); this._max = new Date(2090, 0, 1); this._selectedDates = [beginOfDay(new Date())]; this._viewDate = new Date(); this.$prevBtn = ChromeCalendar_$('.absol-chrome-calendar-header-buttons > button.prev-btn', this) .on('click', this.eventHandler.clickPrev); this.$todayBtn = ChromeCalendar_$('.absol-chrome-calendar-header-buttons > button.today-btn', this) .on('click', this.eventHandler.clickToday); this.$nextBtn = ChromeCalendar_$('.absol-chrome-calendar-header-buttons > button.next-btn', this) .on('click', this.eventHandler.clickNext); /*** * * @type {VScroller} */ this.$yearScroller = ChromeCalendar_$('vscroller.absol-chrome-calendar-years', this); this.$yearItems = []; ChromeCalendar_$('.absol-chrome-calendar-year', this.$yearScroller, function (e) { thisCal.$yearItems.push(e); }); this.$attachHook = ChromeCalendar_('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */]((this.$attachHook)) .on('level_change', this.eventHandler.levelChange) .on('request_update_buttons', this._updateButtons.bind(this)) .on('request_update_month', this._updateMonth.bind(this, this.$month)) .on('request_update_open_year', this._updateOpenYear.bind(this)) .on('request_update_disabled_year_in_era', this._updateDisabledYearInEra.bind(this)) .on('request_update_picked_years', this._updatePickedYears.bind(this)); this.on('keydown', this.eventHandler.keydown); this.sync = new Promise(function (rs) { thisCal.$attachHook.on('attached', rs); }); this.domSignal.emit('level_change'); this.sync.then('attached', function () { thisCal.$yearScroller.requestUpdateSize(); thisCal.expandYear(thisCal._viewDate.getFullYear()); thisCal._updateYearInEra(); }); OOP["a" /* default */].drillProperty(this, this, 'minLimitDate', 'min'); OOP["a" /* default */].drillProperty(this, this, 'minDateLimit', 'min'); OOP["a" /* default */].drillProperty(this, this, 'maxLimitDate', 'max'); OOP["a" /* default */].drillProperty(this, this, 'maxDateLimit', 'max'); this.startDayOfWeek = getDefaultFirstDayOfWeek(); } ChromeCalendar.tag = 'ChromeCalendar'.toLowerCase(); ChromeCalendar.render = function () { return ChromeCalendar_({ class: ['absol-chrome-calendar'], attr: { 'data-level': 'day', tabindex: '1' }, extendEvent: 'pick', child: [ { class: 'absol-chrome-calendar-header', child: [ { class: 'absol-chrome-calendar-title', child: [ { tag: 'span', class: 'title-time', child: { text: 'Septemper, 2019' } }, ] }, { class: 'absol-chrome-calendar-header-buttons', child: [ { tag: 'button', class: 'prev-btn', child: 'span.mdi.mdi-menu-left', attr: { title: 'Previous Month' } }, { tag: 'button', class: 'today-btn', child: 'span.mdi.mdi-circle-medium', attr: { title: 'Today' } }, { tag: 'button', class: 'next-btn', child: 'span.mdi.mdi-menu-right', attr: { title: 'Next Month' } } ] } ] }, { class: 'absol-chrome-calendar-instance', child: [ { class: 'absol-chrome-calendar-dayofweek', child: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'].map(function (text) { return { child: { text: text } } }) }, { class: 'absol-chrome-calendar-month', child: Array(6).fill(0).map(function (u, i) { return { class: 'absol-chrome-calendar-week-in-month', child: Array(7).fill(0).map(function (v, j) { return { child: { text: i * 7 + j + '' } } }) } }) }, { tag: 'vscroller', class: 'absol-chrome-calendar-years', child: {} }, { class: "absol-chrome-calendar-era" } ] } ] }); }; /** * @param {Date} date * @returns {Boolean} */ ChromeCalendar.prototype._isSelectedDate = function (date) { for (var i = 0; i < this._selectedDates.length; ++i) { if (compareDate(date, this._selectedDates[i]) === 0) return true; } return false; }; /** * @param {Date} date * @returns {Boolean} */ ChromeCalendar.prototype._isSelectedMonth = function (date) { for (var i = 0; i < this._selectedDates.length; ++i) { if (compareMonth(date, this._selectedDates[i]) === 0) return true; } return false; }; /** * @param {Date} date * @returns {Boolean} */ ChromeCalendar.prototype._isSelectedQuarter = function (date) { for (var i = 0; i < this._selectedDates.length; ++i) { if (compareMonth(beginOfQuarter(date), beginOfQuarter(this._selectedDates[i])) === 0) return true; } return false; }; /** * @param {Date} date * @returns {Boolean} */ ChromeCalendar.prototype._isSelectedYear = function (date) { for (var i = 0; i < this._selectedDates.length; ++i) { if (date.getFullYear() === this._selectedDates[i].getFullYear()) return true; } return false; }; ChromeCalendar.prototype._dayCmpLimit = function (date) { if (compareDate(date, this._min) < 0) return -1; if (compareDate(date, this._max) > 0) return 1; return 0; }; ChromeCalendar.prototype._monthCmpLimit = function (date) { var startOfMonth = datetime_beginOfMonth(date); var endOfMonth = nextMonth(date); var minMil = Math.max(startOfMonth.getTime(), this._min.getTime()); var maxMil = Math.min(endOfMonth.getTime(), nextDate(this._max).getTime()); if (minMil < maxMil) return 0; return this._dayCmpLimit(date); }; ChromeCalendar.prototype._yearCmpLimit = function (date) { var startOfYear = beginOfYear(date); var endOfYear = new Date(date.getFullYear() + 1, 0, 1); var minMil = Math.max(startOfYear.getTime(), this._min.getTime()); var maxMil = Math.min(endOfYear.getTime(), nextDate(this._max).getTime()); if (minMil < maxMil) return 0; return this._dayCmpLimit(date); }; /*** * * @param {Date} date * @param event */ ChromeCalendar.prototype.pickDate = function (date, event) { date = beginOfDay(date); this._selectedDates = [date]; this._updateMonth(this.$month); if (this.$lastOpenYearItem) this.$lastOpenYearItem.$months.updateActiveMonth(); this.emit('pick', { type: 'pick', value: date, isTrusted: event && event.isTrusted, originEvent: event, selectedDates: this.selectedDates }); }; /*** * * @param {Date} date * @param event */ ChromeCalendar.prototype.pickMonth = function (date, event) { date = datetime_beginOfMonth(date); this._selectedDates = [date]; if (this.$lastOpenYearItem) this.$lastOpenYearItem.$months.updateActiveMonth(); this.emit('pick', { type: 'pick', value: date, isTrusted: event && event.isTrusted, originEvent: event, selectedDates: this.selectedDates }); }; ChromeCalendar.prototype._updatePickedYears = function () { var yearElt; var self = this; while (this.$lastPickYears && this.$lastPickYears.length > 0) { yearElt = this.$lastPickYears.pop(); yearElt.removeClass('absol-chrome-calendar-selected'); } this.$lastPickYears = this._selectedDates.map(function (date) { var yearElt = self._yearInAre(date.getFullYear()); yearElt.addClass('absol-chrome-calendar-selected'); return yearElt; }); }; ChromeCalendar.prototype.pickYear = function (year, event) { var date = new Date(year, 0, 1, 0, 0, 0, 0); this._selectedDates = [date]; this.domSignal.emit('request_update_picked_years'); this.scrollIntoDecade(Math.floor(year / 10) * 10, true); this.emit('pick', { type: 'pick', value: date, isTrusted: event && event.isTrusted, originEvent: event, }); }; /** * @param {Element} monthElt * @param {Date} date */ ChromeCalendar.prototype._fillMonth = function (monthElt, date) { var self = this; if (monthElt.$cells === undefined) {//for faster, attach event to element monthElt.$cells = []; Array.prototype.forEach.call(monthElt.childNodes, function (row) { row.on('click', function (event) { if (event.target !== this) return; var pickedElt = this.firstChild; var pickDate = this.firstChild.__date__; self.pickDate(pickDate, event); if (pickedElt.hasClass('absol-chrome-calendar-not-in-month')) { if (pickDate.getDate() < 15) { self.viewNexMonth(); } else { self.viewPrevMonth(); } } }); }); ChromeCalendar_$('.absol-chrome-calendar-week-in-month > div', this.$month, function (elt) { monthElt.$cells.push(elt); elt.on('click', function (event) { var pickedElt = elt; var pickDate = this.__date__; if (self._level === 'week') { pickDate = beginOfWeek(pickDate, false, self._startDayOfWeek); pickedElt = elt.parentElement.firstChild; } self.pickDate(pickDate, event); if (pickedElt.hasClass('absol-chrome-calendar-not-in-month')) { if (pickDate.getDate() < 15) { self.viewNexMonth(); } else { self.viewPrevMonth(); } } }); }); } var currentDate = beginOfWeek(datetime_beginOfMonth(date), false, this._startDayOfWeek); var d; var cell; for (var i = 0; i < monthElt.$cells.length; ++i) { cell = monthElt.$cells[i]; d = currentDate.getDate(); cell.innerHTML = '' + d; cell.__date__ = beginOfDay(currentDate); currentDate = nextDate(currentDate); } Array.prototype.forEach.call(monthElt.childNodes, function (row) { var weekIdx = weekIndexOf(row.firstChild.__date__, false, self._startDayOfWeek); row.attr('data-week-idx-text', zeroPadding(1 + weekIdx, 2) + ''); }); }; ChromeCalendar.prototype._updateMonth = function (monthElt) { if (!monthElt.$cells) return; // days weren't filled var now = new Date(); var viewM = this._viewDate.getMonth(); var m; var cell; var currentDate; var selectedWeeks = {}; for (var i = 0; i < monthElt.$cells.length; ++i) { cell = monthElt.$cells[i]; currentDate = cell.__date__; m = currentDate.getMonth(); if (m != viewM) cell.addClass('absol-chrome-calendar-not-in-month'); else cell.removeClass('absol-chrome-calendar-not-in-month'); if (compareDate(currentDate, now) === 0) cell.addClass('absol-chrome-calendar-today'); else cell.removeClass('absol-chrome-calendar-today'); if (this._isSelectedDate(currentDate)) { cell.addClass('absol-chrome-calendar-selected'); selectedWeeks[weekIndexOf(currentDate, false, this._startDayOfWeek)] = true; } else cell.removeClass('absol-chrome-calendar-selected'); if (compareDate(this._min, currentDate) > 0 || compareDate(currentDate, this._max) > 0) { cell.addClass('absol-chrome-calendar-date-disabled'); } else { cell.removeClass('absol-chrome-calendar-date-disabled'); } } Array.prototype.forEach.call(monthElt.childNodes, function (row) { var weekIdx = weekIndexOf(row.firstChild.__date__, false, this._startDayOfWeek); if (selectedWeeks[weekIdx]) { row.addClass('as-week-selected'); } else { row.removeClass('as-week-selected'); } }.bind(this)) }; ChromeCalendar.prototype._fillYearList = function (ctn) { var thisCal = this; ChromeCalendar_({ child: Array(200).fill(0).map(function (u, i) { return { class: 'absol-chrome-calendar-year', child: [ { class: 'absol-chrome-calendar-year-head', child: { text: i + 1890 + '' }, } ], props: { __year__: i + 1890 }, on: { click: function () { thisCal.expandYear(this.__year__); } } }; }) }).addTo(ctn); }; ChromeCalendar.prototype._fillEra = function () { var now = new Date(); var cYear = now.getFullYear(); var rows = Array(50).fill(0).map(function (u, i) { return ChromeCalendar_({ class: 'absol-chrome-calendar-era-row', child: Array(4).fill(0).map(function (u1, j) { var classList = ['absol-chrome-calendar-era-year']; var year = 1890 + i * 4 + j; if (cYear === year) { classList.push('absol-chrome-calendar-today'); } return { class: classList, child: { text: year + '' }, props: { __year__: year } }; }) }); }); this.$era.addChild(rows); } ChromeCalendar.prototype.viewNexMonth = function () { var self = this; this.sync = this.sync.then(function () { return new Promise(function (rs) { var oldBound = self.$month.getBoundingClientRect(); var oldMonth = self.$month.cloneNode(true); var instanceBound = self.$instance.getBoundingClientRect(); if (self.$lastAnimationCtn) { self.$lastAnimationCtn.removeClass('new').addClass('old'); } var oldMonthCnt = ChromeCalendar_({ class: ['absol-chrome-calendar-month-animation-container', 'old'], style: { top: oldBound.top - instanceBound.top + 'px', height: oldBound.height + 'px', width: oldBound.width + 'px' }, child: oldMonth }).addTo(self.$instance); self._viewDate = nextMonth(self._viewDate); self.viewMonth(); var newMonth = self.$month.cloneNode(true); var overlap = 0; var j = 41; while (j >= 0 && self.$month.$cells[j].hasClass('absol-chrome-calendar-not-in-month')) { overlap += oldBound.height / 6; j -= 7; } var newMonthCtn = ChromeCalendar_({ class: ['absol-chrome-calendar-month-animation-container', 'new'], style: { top: oldBound.top + oldBound.height - instanceBound.top - overlap + 'px', height: oldBound.height + 'px', width: oldBound.width + 'px' }, child: newMonth }).addTo(self.$instance); self.$lastAnimationCtn = newMonthCtn; setTimeout(function () { oldMonthCnt.addStyle('top', oldBound.top - oldBound.height + overlap - instanceBound.top + 'px'); newMonthCtn.addStyle('top', oldBound.top - instanceBound.top + 'px'); }, 20); setTimeout(function () { self.$lastAnimationCtn = undefined; oldMonthCnt.remove(); newMonthCtn.remove(); }, 220); setTimeout(rs, 22); }); }); return this.sync; }; ChromeCalendar.prototype.viewPrevMonth = function () { var self = this; this.sync = this.sync.then(function () { return new Promise(function (rs) { var oldBound = self.$month.getBoundingClientRect(); var oldMonth = self.$month.cloneNode(true); var instanceBound = self.$instance.getBoundingClientRect(); if (self.$lastAnimationCtn) { self.$lastAnimationCtn.removeClass('new').addClass('old'); } var oldMonthCnt = ChromeCalendar_({ class: ['absol-chrome-calendar-month-animation-container', 'old'], style: { top: oldBound.top - instanceBound.top + 'px', height: oldBound.height + 'px', width: oldBound.width + 'px' }, child: oldMonth }).addTo(self.$instance); self._viewDate = prevMonth(self._viewDate); self.viewMonth(); var newMonth = self.$month.cloneNode(true); var overlap = 0; var j = 0; while (j < 42 && self.$month.$cells[j].hasClass('absol-chrome-calendar-not-in-month')) { overlap += oldBound.height / 6; j += 7; } var newMonthCtn = ChromeCalendar_({ class: ['absol-chrome-calendar-month-animation-container', 'new'], style: { top: oldBound.top - oldBound.height + overlap - instanceBound.top + 'px', height: oldBound.height + 'px', width: oldBound.width + 'px' }, child: newMonth }).addTo(self.$instance); self.$lastAnimationCtn = newMonthCtn; setTimeout(function () { oldMonthCnt.addStyle('top', oldBound.top + oldBound.height - overlap - instanceBound.top + 'px'); newMonthCtn.addStyle('top', oldBound.top - instanceBound.top + 'px'); }, 20); setTimeout(function () { self.$lastAnimationCtn = undefined; oldMonthCnt.remove(); newMonthCtn.remove(); }, 220); setTimeout(rs, 22); }) }); return this.sync; }; ChromeCalendar.prototype.viewToday = function () { this._viewDate = new Date(); switch (this._level) { case "day": case 'week': this.viewMonth(); break; case "month": case "quarter": this.viewYear(); break; case "year": this.viewEra(true); break; } }; ChromeCalendar.prototype.viewMonth = function () { this._updateButtons(); this.attr('data-view', 'month'); this._fillMonth(this.$month, this._viewDate); this._updateMonth(this.$month); this.$titleTime.innerHTML = formatDateString(this._viewDate, 'mmmm, yyyy'); }; ChromeCalendar.prototype.viewYear = function () { this.attr('data-view', 'year'); this.removeClass('view-month') .removeClass('view-era') .addClass('view-year'); this.expandYear(this._viewDate.getFullYear()); this.$yearScroller.requestUpdateSize(); if (this._level === 'month' || this._level === 'quarter') { this.$titleTime.innerHTML = formatDateString(this._viewDate, 'yyyy'); } }; ChromeCalendar.prototype.viewEra = function (animation) { this.attr('data-view', 'era'); this.removeClass('view-month') .removeClass('view-year') .addClass('view-era'); this.scrollIntoDecade(Math.floor(this._viewDate.getFullYear() / 10) * 10, animation); }; ChromeCalendar.prototype.viewNextDecade = function (animation) { this._viewDate = new Date(Math.min(2080, Math.floor(this._viewDate.getFullYear() / 10) * 10 + 10), 0, 1); this._viewDate = new Date(Math.min(this._viewDate.getTime(), prevDate(this._max).getTime())); this.viewEra(animation); }; ChromeCalendar.prototype.viewPrevDecade = function (animation) { this._viewDate = new Date((Math.max(1890, Math.floor(this._viewDate.getFullYear() / 10) * 10 - 10)), 0, 1); this._viewDate = new Date(Math.max(this._viewDate.getTime(), this._min.getTime())); this.viewEra(animation); }; ChromeCalendar.prototype.expandYear = function (year) { if (this._level === 'month' || this._level === 'quarter') { this._viewDate = new Date(year, 0, 1); this.$titleTime.innerHTML = formatDateString(this._viewDate, 'yyyy'); this.domSignal.emit('request_update_buttons'); } var fontSize = this.getFontSize(); var self = this; var lastItemElt = this.$lastOpenYearItem; var itemElt = this.$yearItems[year - 1890]; var lastYear = 100000000; if (lastItemElt && lastItemElt.__year__ !== year) { lastYear = lastItemElt.__year__; lastItemElt.addClass('start-closing'); setTimeout(function () { lastItemElt.removeClass('start-closing').addClass('closing'); }, 0); setTimeout(function () { lastItemElt.removeClass('closing'); lastItemElt.$months.remove(); lastItemElt.$months = undefined; }, 100); } if (lastItemElt !== itemElt) { if (!itemElt.$months) { itemElt.$months = this._createMonths(year).addTo(itemElt); itemElt.addClass('start-opening'); setTimeout(function () { itemElt.removeClass('start-opening').addClass('opening'); }, 1); setTimeout(function () { itemElt.removeClass('opening'); }, 100); } } var dy = itemElt.getBoundingClientRect().top - self.$yearScroller.getBoundingClientRect().top - fontSize * 0.45; if (itemElt.__year__ > lastYear) { dy -= 6 * fontSize; } self.$yearScroller.scrollBy(dy, 100); this.$lastOpenYearItem = itemElt; itemElt.$months.updateActiveMonth(); }; ChromeCalendar.prototype.scrollIntoDecade = function (startYear, animation) { if (!this.isDescendantOf(document.body)) { return this; } var thisCal = this; return new Promise(function (resolve) { var eraBound = thisCal.$era.getBoundingClientRect(); var rowIdx = Math.floor((startYear - 1890) / 4); if (thisCal._decadeScrollTimeout > 0) { clearTimeout(thisCal._decadeScrollTimeout); thisCal._decadeScrollTimeout = -1; } if (thisCal.scrollIntoDecadeResolve) { thisCal.scrollIntoDecadeResolve(); thisCal.scrollIntoDecadeResolve = null; } thisCal.scrollIntoDecadeResolve = resolve; var t0 = new Date().getTime(); var t1 = t0 + 250; var y0 = thisCal.$era.scrollTop; var y1 = rowIdx * eraBound.height / 4; if (animation) { thisCal._decadeScrollTimeout = setTimeout(function tick() { var tc = new Date().getTime(); var yc = Math.min(1, Math.pow((tc - t0) / (t1 - t0), 2)) * (y1 - y0) + y0; thisCal.$era.scrollTop = yc; console.log(yc) if (tc < t1) { thisCal._decadeScrollTimeout = setTimeout(tick, 500); } else { thisCal._decadeScrollTimeout = -1; thisCal.scrollIntoDecadeResolve = null; resolve(); } }, 500); } else { thisCal.$era.scrollTop = y1; } }); }; ChromeCalendar.prototype._updateButtons_day = function () { if (this._monthCmpLimit(prevMonth(this._viewDate)) < 0) { this.$prevBtn.addClass('absol-chrome-calendar-button-disabled'); } else { this.$prevBtn.removeClass('absol-chrome-calendar-button-disabled'); } if (this._monthCmpLimit(nextMonth(this._viewDate)) > 0) { this.$nextBtn.addClass('absol-chrome-calendar-button-disabled'); } else { this.$nextBtn.removeClass('absol-chrome-calendar-button-disabled'); } var now = new Date(); if (this._monthCmpLimit(now) === 0) { this.$todayBtn.removeClass('absol-chrome-calendar-button-disabled'); } else { this.$todayBtn.addClass('absol-chrome-calendar-button-disabled'); } }; ChromeCalendar.prototype._updateButtons_week = ChromeCalendar.prototype._updateButtons_day; ChromeCalendar.prototype._updateButtons_year = function () { if (!this._viewDate) return; var year = Math.floor(this._viewDate.getFullYear() / 10) * 10; if (this._yearCmpLimit(new Date(year - 1, 0, 1)) < 0) { this.$prevBtn.addClass('absol-chrome-calendar-button-disabled'); } else { this.$prevBtn.removeClass('absol-chrome-calendar-button-disabled'); } if (this._yearCmpLimit(new Date(year + 10, 0, 1)) > 0) { this.$nextBtn.addClass('absol-chrome-calendar-button-disabled'); } else { this.$nextBtn.removeClass('absol-chrome-calendar-button-disabled'); } var now = new Date(); if (this._yearCmpLimit(now) === 0) { this.$todayBtn.removeClass('absol-chrome-calendar-button-disabled'); } else { this.$todayBtn.addClass('absol-chrome-calendar-button-disabled'); } }; ChromeCalendar.prototype._updateButtons_month = function () { if (this._yearCmpLimit(new Date(this._viewDate.getFullYear() + 1, 0, 1)) > 0) { this.$nextBtn.addClass('absol-chrome-calendar-button-disabled'); } else { this.$nextBtn.removeClass('absol-chrome-calendar-button-disabled'); } if (this._yearCmpLimit(new Date(this._viewDate.getFullYear() - 1, 0, 1)) < 0) { this.$prevBtn.addClass('absol-chrome-calendar-button-disabled'); } else { this.$prevBtn.removeClass('absol-chrome-calendar-button-disabled'); } }; ChromeCalendar.prototype._updateButtons = function () { var fName = '_updateButtons_' + this._level; this[fName] && this[fName](); }; ChromeCalendar.prototype._createMonths = function (year) { var now = new Date(); var self = this; var res = ChromeCalendar_({ class: 'absol-chrome-calendar-year-months', child: Array(3).fill('').map(function (u, i) { return { class: 'absol-chrome-calendar-year-row-months', child: Array(4).fill(0).map(function (v, j) { var date = new Date(year, i * 4 + j, 1, 0, 0, 0, 0, 0); var quarter = Math.floor((i * 4 + j) / 3); return { class: ['absol-chrome-calendar-year-month'] .concat((year == now.getFullYear() && now.getMonth() == i * 4 + j) ? ['absol-chrome-calendar-today'] : []) .concat(self._isSelectedMonth(date) ? ['absol-chrome-calendar-selected'] : []) , attr: { 'data-quarter': quarter + '' }, child: { text: monthNames[i * 4 + j].substr(0, 3) }, on: { click: function () { } }, props: { __date__: date, __quarter__: quarter } } }) } }), on: { click: this.eventHandler.clickMonthsInYear } }); res.$monthList = []; ChromeCalendar_$('.absol-chrome-calendar-year-month', res, function (e) { res.$monthList.push(e); }); function onMouseEnter(event) { document.addEventListener('mousemove', onMouseMove); } function onMouseMove(event) { if (!Object(EventEmitter["d" /* hitElement */])(res, event)) { document.removeEventListener('mousemove', onMouseMove); res.attr('data-hover-quarter', undefined); return; } if (typeof event.target.__quarter__ === "number") { if (res.attr('data-hover-quarter') !== event.target.__quarter__ + '') res.attr('data-hover-quarter', event.target.__quarter__ + ''); } else { res.attr('data-hover-quarter', undefined); } } res.on('mouseenter', onMouseEnter); res.updateActiveMonth = function () { res.$monthList.forEach(function (e) { now = new Date(); if (compareMonth(e.__date__, now) == 0) { e.addClass('absol-chrome-calendar-today'); } else { e.removeClass('absol-chrome-calendar-today'); } if (self._isSelectedMonth(e.__date__)) { e.addClass('absol-chrome-calendar-selected'); } else { e.removeClass('absol-chrome-calendar-selected'); } if (self._isSelectedQuarter(e.__date__)) { e.addClass('as-quarter-selected'); } else { e.removeClass('as-quarter-selected'); } var beginOfMonth = datetime_beginOfMonth(e.__date__); var endOfMonth = prevDate(nextMonth(e.__date__)); if (compareDate(self._min, endOfMonth) > 0 || compareDate(beginOfMonth, self._max) > 0) { e.addClass('absol-chrome-calendar-date-disabled'); } else { e.removeClass('absol-chrome-calendar-date-disabled'); } }); } return res; }; ChromeCalendar.prototype._yearInAre = function (year) { var d = year - 1890; var rowIdx = Math.floor(d / 4); var colIdx = d % 4; return this.$era.childNodes[rowIdx] && this.$era.childNodes[rowIdx].childNodes[colIdx]; }; ChromeCalendar.prototype._clearYearInAre = function (startYear) { var cellElt; for (var i = 0; i < 10; ++i) { cellElt = this._yearInAre(startYear + i); if (cellElt) cellElt.removeClass('absol-chrome-calendar-in-decade'); } }; ChromeCalendar.prototype._activeYearInAre = function (startYear) { var cellElt; for (var i = 0; i < 10; ++i) { cellElt = this._yearInAre(startYear + i); if (cellElt) cellElt.addClass('absol-chrome-calendar-in-decade'); } }; ChromeCalendar.prototype._updateYearInEra = function () { var eraBound = this.$era.getBoundingClientRect(); var startYear = 1890 + 4 * Math.ceil((this.$era.scrollTop - eraBound.height / 16) * 4 / eraBound.height); var startDecade = Math.floor(startYear / 10) * 10; if ((startDecade + 10 - startYear) < 8) startDecade += 10; if (this._lastStartDecade !== startDecade) { if (this._lastStartDecade > 0) { this._clearYearInAre(this._lastStartDecade); } this._lastStartDecade = startDecade; this._activeYearInAre(startDecade); if (this._level === 'year') { this.$titleTime.innerHTML = startDecade + '-' + (startDecade + 10); if (!this._decadeScrollTimeout || this._decadeScrollTimeout < 0) { if (this._yearCmpLimit(new Date(startDecade, 0, 1)) === 0) this._viewDate = new Date(startDecade, 0, 1); } } this.domSignal.emit('request_update_buttons'); } }; ChromeCalendar.prototype._updateDisabledYearInEra = function () { var self = this; Array.prototype.forEach.call(this.$era.childNodes, function (rowElt) { Array.prototype.forEach.call(rowElt.childNodes, function (cellElt) { if (cellElt.__year__) { if (self._yearCmpLimit(new Date(cellElt.__year__, 0, 1)) === 0) { cellElt.removeClass('absol-chrome-calendar-date-disabled'); } else { cellElt.addClass('absol-chrome-calendar-date-disabled'); } } }); }); }; ChromeCalendar.prototype._updateOpenYear = function () { if (this.$lastOpenYearItem) { this.$lastOpenYearItem.$months.updateActiveMonth(); } }; ChromeCalendar.property = {}; ChromeCalendar.property.selectedDates = { set: function (value) { value = value || []; if (!(value instanceof Array)) value = [value]; value = value.map(d => implicitDate(d)).filter(d => !!d); this._selectedDates = value; this._viewDate = this._selectedDates[0] || new Date(); this.domSignal.emit('level_change'); if (this._level === 'year') this.domSignal.emit('request_update_picked_years'); }, get: function () { var level = this._level; var res = this._selectedDates.map(d => { switch (level) { case 'day': return beginOfDay(d); case 'week': return beginOfWeek(d); case 'month': return datetime_beginOfMonth(d); case 'quarter': return beginOfQuarter(d); case 'year': return beginOfYear(d); } }); res = res.reduce((ac, d) => { var key = keyStringOf(d); if (ac.has[key]) return ac; ac.has[key] = d; ac.arr.push(d); return ac; }, { has: {}, arr: [] }).arr; res.sort((a, b) => { return a.getTime() - b.getTime(); }); return res; } }; ChromeCalendar.property.min = { set: function (value) { if (!value) value = new Date(1890, 0, 1); if (typeof value == 'number') value = new Date(value); value = beginOfDay(value); value = new Date(Math.max(new Date(1890, 0, 1).getTime(), value.getTime())); this._min = value; this.domSignal.emit('request_update_buttons'); this.domSignal.emit('request_update_month'); this.domSignal.emit('request_update_open_year'); this.domSignal.emit('request_update_disabled_year_in_era'); }, get: function () { return this._min; } }; //include maxLimitDate ChromeCalendar.property.max = { set: function (value) { if (!value) value = new Date(2090, 0, 1); if (typeof value == 'number') value = new Date(value); if (value.getTime() > beginOfDay(value).getTime()) value = nextDate(beginOfDay(value)); value = new Date(Math.min(new Date(2090, 0, 1).getTime(), value.getTime())); this._max = value; this.domSignal.emit('request_update_buttons'); this.domSignal.emit('request_update_month'); this.domSignal.emit('request_update_open_year'); this.domSignal.emit('request_update_disabled_year_in_era'); }, get: function () { return this._max; } }; ChromeCalendar.property.multiSelect = { set: function (value) { throw new Error('Not support yet!') var lastValue = this.multiSelect; value = !!value; if (lastValue != value) { if (value) { this.addClass('multi-select') } else { this.removeClass('multi-select'); } this._updateMonth(this.$month); } }, get: function () { return this.hasClass('multi-select'); } }; ChromeCalendar.property.level = { set: function (value) { value = (value || '') + ''; value = value.toLowerCase(); if (['day', 'week', 'quarter', 'month', 'year'].indexOf(value) < 0) value = 'day'; if (this._level === value) return; this.attr('data-level', value); this._level = value; this.domSignal.emit('level_change'); if (this._level === 'year') this.domSignal.emit('request_update_picked_years'); }, get: function () { return this._level; } }; ChromeCalendar.prototype.dayInWeekTexts = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']; ChromeCalendar.property.startDayOfWeek = { set: function (value) { value = Math.max(0, Math.min(Math.floor(value || 0), 6)); if (this._startDayOfWeek !== value) { this._startDayOfWeek = value; Array.prototype.forEach.call(this.$dayOfWeek.childNodes, function (e, i) { e.firstChild.data = this.dayInWeekTexts[(i + value) % 7]; }.bind(this)); } this._updateMonth(this.$month); }, get: function () { return this._startDayOfWeek; } }; ChromeCalendar.property.viewDate = { set: function (date) { this._viewDate = date; this.domSignal.emit('level_change'); }, get: function () { return this._viewDate; } } ChromeCalendar.eventHandler = {}; ChromeCalendar.eventHandler.eraScroll = function () { this._updateYearInEra(); }; ChromeCalendar.eventHandler.clickEra = function (event) { var yearElt = event.target; var year = yearElt.__year__; if (typeof year !== "number") return; this.pickYear(year, event); }; ChromeCalendar.eventHandler.clickPrev = function () { switch (this._level) { case "day": case 'week': this.viewPrevMonth(); break; case "month": this.expandYear(Math.min(this._max.getFullYear(), this._viewDate.getFullYear() - 1)); break; case "year": if (!this._decadeScrollTimeout || this._decadeScrollTimeout < 0) this.viewPrevDecade(true); break; } }; ChromeCalendar.eventHandler.clickNext = function () { switch (this._level) { case "day": case 'week': this.viewNexMonth(); break; case "month": this.expandYear(Math.max(prevDate(this._min).getFullYear(), this._viewDate.getFullYear() + 1)); break; case "year": if (!this._decadeScrollTimeout || this._decadeScrollTimeout < 0) this.viewNextDecade(true); break; } }; ChromeCalendar.eventHandler.clickToday = function (event) { this.viewToday(); switch (this._level) { case "day": this.pickDate(new Date(), event); break; case 'week': this.pickDate(beginOfWeek(new Date(), false, this.startDayOfWeek), event) break; case "month": this.expandYear(new Date().getFullYear()); this.pickMonth(datetime_beginOfMonth(new Date()), event); break; case "year": this.pickYear(new Date().getFullYear()); this._viewDate = new Date(new Date().getFullYear(), 0, 1); this.viewEra(true); break; } }; ChromeCalendar.eventHandler.clickTitle = function (event) { switch (this._level) { case "day": case "week": this.viewYear(); break; case "month": break; case "year": break; } }; ChromeCalendar.eventHandler.clickMonthsInYear = function (event) { var monthElt = event.target; var date = monthElt.__date__; if (!date) return; switch (this._level) { case "day": case "week": this._viewDate = date; this.viewMonth(); break; case "month": case "quarter": this.pickMonth(date, event); break; case "year": break; } }; ChromeCalendar.eventHandler.levelChange = function () { switch (this._level) { case "day": case "week": this.viewMonth(); break; case "month": case "quarter": this.viewYear(); break; case "year": this.viewEra(); break; } }; ChromeCalendar.eventHandler.keydown = function (event) { console.log(event.key); }; ChromeCalendar.eventHandler.doubleKey = function (event) { }; ACore["d" /* default */].install(ChromeCalendar); ChromeCalendar._session = Math.random() * 10000000000 >> 0; ChromeCalendar._listener = undefined; ChromeCalendar.showWhenClick = function (element, calendarProps, anchor, calendarPickListener, darkTheme) { var res = { calendarProps: Object.assign({ maxDateLimit: null, minDateLimit: null }, calendarProps), anchor: anchor, currentSession: undefined, element: element, calendarPickListener: calendarPickListener, darkTheme: darkTheme, setDateValue: function (value) { if (this.currentSession == ChromeCalendar._session) { ChromeCalendar.$calendar.selectedDates = [value]; } }, cancel: function () { } }; var clickHandler = function () { if (element.hasClass('as-read-only')) return; if (ChromeCalendar._session == res.currentSession) return; res.currentSession = ChromeCalendar.show(res.element, res.calendarProps, res.anchor, res.calendarPickListener, res.darkTheme); var finish = function (event) { if (event && event.target && EventEmitter["b" /* default */].hitElement(ChromeCalendar.$calendar, event)) return; document.body.removeEventListener('click', finish, false); ChromeCalendar.close(res.currentSession); ChromeCalendar.$calendar.off('pick', finish); res.currentSession = undefined; res.cancel = function () { }; }; setTimeout(function () { document.body.addEventListener('click', finish, false); ChromeCalendar.$calendar.on('pick', finish); res.cancel = finish; }, 10) }; res.remove = function () { element.removeEventListener('click', clickHandler, false); }; element.addEventListener('click', clickHandler, false); return res; }; ChromeCalendar.show = function (element, calendarProps, anchor, calendarPickListener, darkTheme) { ChromeCalendar._session = Math.random() * 10000000000 >> 0; function exec() { if (!ChromeCalendar.$ctn) { ChromeCalendar.$ctn = ChromeCalendar_('.absol-context-hinge-fixed-container'); ChromeCalendar.$follower = ChromeCalendar_('follower').addTo(ChromeCalendar.$ctn); ChromeCalendar.$calendar = ChromeCalendar_('chromecalendar.as-dropdown-box-common-style') .on('pick', function (event) { if (typeof ChromeCalendar._listener == 'function') { ChromeCalendar._listener(event.value); } }).addTo(ChromeCalendar.$follower); } ChromeCalendar.$ctn.addTo(document.body); // only one value need if (calendarProps instanceof Date) calendarProps = { selectedDates: [calendarProps] }; if (calendarProps instanceof Array) calendarProps = { selectedDates: calendarProps }; Object.assign(ChromeCalendar.$calendar, calendarProps); if (darkTheme) ChromeCalendar.$ctn.addClass('dark'); else ChromeCalendar.$ctn.removeClass('dark'); ChromeCalendar.$follower.followTarget = element; ChromeCalendar.$follower.sponsorElement = element; ChromeCalendar.$follower.anchor = anchor; ChromeCalendar.$calendar.addStyle('visibility', 'hidden');//for prevent size change blink ChromeCalendar._listener = calendarPickListener; setTimeout(function () { ChromeCalendar.$follower.updatePosition(); ChromeCalendar.$calendar.removeStyle('visibility'); }, 2); } if (document.body) exec(); else Dom["b" /* default */].documentReady.then(exec); return ChromeCalendar._session; }; ChromeCalendar.close = function (session) { if (session !== true && session != ChromeCalendar._session) return; function exec() { ChromeCalendar.followTarget = undefined; ChromeCalendar._listener = undefined; ChromeCalendar.$ctn.remove(); } if (document.body) exec(); else Dom["b" /* default */].documentReady.then(exec); }; /* harmony default export */ var js_ChromeCalendar = (ChromeCalendar); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CalendarInput.js var CalendarInput_ = ACore["d" /* default */]._; var CalendarInput_$ = ACore["d" /* default */].$; /** * @extends AElement * @constructor */ function CalendarInput() { var thisCI = this; this.$input = CalendarInput_$('input', this); this._value = null; this._quickOption = js_ChromeCalendar.showWhenClick(this, { minLimitDate: this.minLimitDate || this.minDateLimit, maxLimitDate: this.maxLimitDate || this.maxDateLimit, selectedDates: [new Date()] }, 'auto', function (value) { thisCI._value = value; thisCI.$input.value = thisCI.formatDateString(value); thisCI._quickOption.calendarProps.selectedDates = [value];//change new option thisCI.emit('change', { target: thisCI, value: value }, thisCI); }); OOP["a" /* default */].drillProperty(this, this._quickOption.calendarProps, { minLimitDate: 'minLimitDate', maxLimitDate: 'maxLimitDate', minDateLimit: 'minLimitDate', maxDateLimit: 'maxLimitDate' }); } CalendarInput.tag = 'CalendarInput'.toLowerCase(); CalendarInput.render = function () { return CalendarInput_({ extendEvent: ['change'], class: 'absol-calendar-input', child: 'input[type="text"][readonly="true"][value="dd/mm/yyyy"]' }); }; CalendarInput.property = {}; CalendarInput.property.value = { set: function (value) { if (value === null || value === undefined) { this.$input.value = this.formatDateString(value); this._quickOption.calendarProps.selectedDates = []; this._value = value; this._quickOption.calendarProps.selectedDates = [new Date()] } else { if (typeof value == 'number') value = new Date(value); this._value = value; this.$input.value = this.formatDateString(value); this._quickOption.calendarProps.selectedDates = [value]; } }, get: function () { return this._value; } }; CalendarInput.property.disabled = { set: function (value) { this.$input.disabled = !!value; if (value) { this.addClass('absol-disabled'); } else { this.removeClass('absol-disabled'); } }, get: function () { return this.$input.disabled; } }; CalendarInput.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } }, get: function () { return this.hasClass('as-read-only'); } }; CalendarInput.attribute = { disabled: { set: function (value) { this.$input.attr('disabled', value); if (this.$input.disabled) this.addClass('absol-disabled'); }, get: function () { return this.$input.attr('disabled'); }, remove: function () { this.$input.attr('disabled', undefined); this.removeClass('absol-disabled'); } } }; CalendarInput.property.dateToString = { set: function (value) { this._dateToString = value; this.$input.value = this.formatDateString(this.value); }, get: function () { return this._dateToString; } }; CalendarInput.prototype.formatDateString = function (date) { if (!date) { return { 'undefined': 'dd/mm/yyyy', 'function': '--/--/--', 'object': 'dd/mm/yyyy', 'string': typeof this.dateToString }[typeof this.dateToString] || '--/--/--'; } if (!this.dateToString) { return formatDateString(date); } else if (typeof this.dateToString == 'string') { return formatDateString(date, this.dateToString); } else if (typeof this.dateToString == 'function') { return this.dateToString(date); } }; ACore["d" /* default */].install(CalendarInput); function OldCalendarInput() { } OldCalendarInput.tag = 'calendar-input'; OldCalendarInput.render = function (data) { return CalendarInput_({ tag: 'calendarinput', extendEvent: 'changed', props: data, on: { change: function (ev) { this.emit('changed', ev.value); } } }); }; ACore["d" /* default */].install(OldCalendarInput); /* harmony default export */ var js_CalendarInput = (CalendarInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/checkboxinput.css var checkboxinput = __webpack_require__(107); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckBoxInput.js var CheckBoxInput_ = ACore["d" /* default */]._; var CheckBoxInput_$ = ACore["d" /* default */].$; var tickIcon = CheckBoxInput_(['<svg class="as-checkbox-input-check-icon" width="18px" height="18px" version="1.1" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" >', ' <g transform="translate(0 -279)">', ' <path class="bound" d="m3 279.69h12c1.3434 0.0111 2.3298 1.5259 2.3131 2.4775v11.836c0.05005 0.89373-1.1834 2.2964-2.3131 2.3131h-12c-0.82692 0.0166-2.3131-1.1834-2.3131-2.3131v-12.237c0.0022374-1.171 0.3775-2.0759 2.3131-2.0759z" style="stroke-linejoin:round; stroke-width: 1"/>', ' <path class="tick" d="m3.1656 288.66c-0.10159 0.0612-0.11743 0.12506-0.12993 0.18899l3.7473 4.3467c0.066638 0.0459 0.11813 0.0263 0.16832 1e-3 0 0 1.7699-4.2166 4.7251-7.4568 1.4783-1.6208 3.2406-3.3659 3.2406-3.3659 0.0054-0.14125-0.10946-0.15807-0.1754-0.22551 0 0-2.5832 1.6364-4.7524 3.8336-1.8697 1.8939-3.6666 4.4016-3.6666 4.4016z"/>', ' <path class="minus" d="m4 287 h10 v2 h-10z"/>', ' </g>', '</svg>' ].join('') ); /*** * @extends AElement * @constructor */ function CheckboxInput() { this.$input = CheckBoxInput_$('input', this) .on('change', this.notifyChange.bind(this)); this.checked = false; this.disabled = false; this.readOnly = false; this.on('click', this.eventHandler.click); this.onchange = null; } CheckboxInput.tag = "CheckboxInput".toLowerCase(); CheckboxInput.render = function (data) { return CheckBoxInput_({ tag: 'label', extendEvent: 'change', class: 'as-checkbox-input', child: [ { elt: data && data.$input, tag: 'input', class: 'as-checkbox-input-value', attr: { type: 'checkbox' } }, tickIcon.cloneNode(true) ] } ) }; /*** * as normal, change event will be fired when checkbox change by system */ CheckboxInput.prototype.notifyChange = function () { var event = { checked: this.checked }; this.emit('change', event, this); }; CheckboxInput.prototype._updateCheckedClass = function () { if (this.checked) { this.addClass('as-checked'); } else { this.removeClass('as-checked'); } }; CheckboxInput.property = {}; CheckboxInput.property.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } this.$input.disabled = !!value; }, get: function () { return this.$input.disabled; } }; CheckboxInput.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } }, get: function () { return this.hasClass('as-read-only'); } } /*** * * @type {CheckboxInput} */ CheckboxInput.property.checked = { set: function (value) { this.$input.checked = !!value; this._updateCheckedClass(); }, get: function () { return this.$input.checked; } }; /*** * * @type {CheckboxInput} */ CheckboxInput.property.minus = { set: function (value) { if (value) { this.addClass('as-has-minus'); } else { this.removeClass('as-has-minus'); } }, get: function () { return this.hasClass('as-has-minus'); } }; CheckboxInput.attribute = { checked: { set: function (value) { if (value === 'false' || value === null) { this.checked = false; } else { this.checked = true; } }, get: function () { return this.checked ? 'true' : 'false' }, remove: function () { this.checked = false; } }, disabled: { set: function (value) { if (value === 'false' || value === null) { this.disabled = false; } else { this.disabled = true; } }, get: function () { return this.disabled ? 'true' : 'false' }, remove: function () { this.disabled = false; } } }; /*** * * @type {CheckboxInput} */ CheckboxInput.eventHandler = {}; CheckboxInput.eventHandler.click = function (event) { if (this.readOnly) { event.preventDefault(); } this._updateCheckedClass(); }; ACore["d" /* default */].install(CheckboxInput); CheckboxInput.autoReplace = function () { var placeHolders = Array.prototype.slice.call(document.getElementsByTagName(this.tag)); var ph; var attOfPH; var attrs; var style; var classList; var attNode; var attrName, attrValue; var props; for (var i = 0; i < placeHolders.length; ++i) { ph = placeHolders[i]; attOfPH = ph.attributes; classList = []; style = {}; attrs = {}; props = {}; for (var j = 0; j < attOfPH.length; ++j) { attNode = attOfPH[j]; attrName = attNode.nodeName; attrValue = attNode.nodeValue; if (attrName == 'style') { attrValue.trim().split(';').reduce(function (style, prop) { var p = prop.split(':'); if (p.length == 2) { style[p[0].trim()] = p[1].trim(); } return style; }, style); } else if (attrName == 'class') { classList = attrValue.trim().split(/\s+/); } else if (attrName == 'onchange') { props.onchange = new Function('event', 'sender', attrValue); } else { attrs[attrName] = attrValue; } } var newElt = CheckBoxInput_({ tag: this.tag, attr: attrs, class: classList, style: style, props: props }); CheckBoxInput_$(ph).selfReplace(newElt); } }; CheckboxInput.initAfterLoad = function () { Dom["b" /* default */].documentReady.then(function () { CheckboxInput.autoReplace(); }) }; /* harmony default export */ var CheckBoxInput = (CheckboxInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/checkbox.css var css_checkbox = __webpack_require__(109); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckBox.js var CheckBox_ = ACore["d" /* default */]._; var CheckBox_$ = ACore["d" /* default */].$; var $$ = ACore["d" /* default */].$$; /*** * @extends AElement * @constructor */ function CheckBox() { this.defineEvent('change'); /*** * * @type {CheckboxInput} */ this.$input = CheckBox_$('checkboxinput', this).on('change', this.notifyChange.bind(this) ); this.$labels = $$('span', this); this.on('click', this.eventHandler.click); OOP["a" /* default */].drillProperty(this, this.$input, ['checked']); OOP["a" /* default */].drillProperty(this, this.$input, ['minus']); /*** * @type {boolean} * @name checked * @memberOf CheckBox# */ /*** * @type {boolean} * @name minus * @memberOf CheckBox# */ } CheckBox.tag = 'checkbox'; CheckBox.render = function () { return CheckBox_({ class: ['absol-checkbox', 'as-no-label'], child: [ { tag: 'span', class: ['absol-checkbox-label', 'as-left'], child: { text: '' } }, 'checkboxinput', { tag: 'span', class: ['absol-checkbox-label', 'as-right'], child: { text: '' } } ] }); }; CheckBox.prototype.notifyChange = function () { this.emit('change', { type: 'change', checked: this.checked, target: this }, this); }; //v, labelText, checked CheckBox.attribute = { checked: { set: function (value) { if (value === 'false' || value == null) { this.checked = false; } else { this.checked = true; } }, get: function () { return this.checked ? 'true' : 'false' }, remove: function () { this.checked = false; } }, disabled: { set: function (value) { this.disabled = !(value === 'false' || value === null); }, get: function () { return this.disabled ? 'true' : 'false'; }, remove: function () { this.disabled = false; } }, readonly: { set: function (value) { this.readOnly = !(value === 'false' || value === null); }, get: function () { return this.readOnly ? 'true' : 'false' } } }; CheckBox.property = {}; CheckBox.property.text = { get: function () { return this._text; }, set: function (value) { value = value || ''; if (value.length === 0) { this.addClass('as-no-label'); } else { this.removeClass('as-no-label'); } this._text = value; this.$labels[0].firstChild.data = value; this.$labels[1].firstChild.data = value; } }; CheckBox.property.disabled = { get: function () { return this.$input.disabled; }, set: function (value) { value = !!value; this.$input.disabled = value; if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } } }; CheckBox.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); this.$input.readOnly = true; } else { this.addClass('as-read-only'); this.$input.readOnly = false; } }, get: function () { return this.$input.readOnly; } } /*** * * @type {{}|CheckBox} */ CheckBox.eventHandler = {}; CheckBox.eventHandler.click = function (event) { if (!EventEmitter["b" /* default */].hitElement(this.$input, event) && !this.readOnly) { this.$input.click(); } }; ACore["d" /* default */].install(CheckBox); /* harmony default export */ var js_CheckBox = (CheckBox); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/circlesectionlabel.css var circlesectionlabel = __webpack_require__(111); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/ElementNS.js var ElementNS = __webpack_require__(22); // CONCATENATED MODULE: ./node_modules/absol/src/JSMaker/TemplateString.js function TemplateString(props) { this.parts = props.parts; } TemplateString.prototype.toJSCode = function () { return this.parts.map(function (e) { if (e.type == TemplateString.TYPE_EXPRESSION) { return '(' + e.data + ')'; } else { return JSON.stringify(e.data); } }).join('+'); }; TemplateString.__partRegex = /(\{\{(([^\}]|(\}[^\}]))*)\}\})|(([^\{]|(\{[^\{]))+)/g; /** * @param {String} text */ TemplateString.__matchExpression = function (text) { if (text[0] == '{' && text[1] == '{' && text[text.length - 1] == '}' && text[text.length - 2] == '}') { return [text, text.substr(2, text.length - 4).trim()]; } else { return false; } }; TemplateString.TYPE_STRING = 0; TemplateString.TYPE_EXPRESSION = 1; TemplateString.parse = function (text) { text = text+''; var matchedParts = text.match(this.__partRegex); if (matchedParts) { var parts = matchedParts.map(function (e) { var matchedExp = this.__matchExpression(e); if (matchedExp) { return { type: this.TYPE_EXPRESSION, data: matchedExp[1] }; } else { return { type: this.TYPE_STRING, data: e }; } }.bind(this)); return new TemplateString({ parts: parts }); } else { return new TemplateString({ parts: [] }); } }; /* harmony default export */ var JSMaker_TemplateString = (TemplateString); // CONCATENATED MODULE: ./node_modules/absol/src/Color/Color.js function Color(rgba) { this.rgba = rgba.slice(); } /*** * * @returns {string} */ Color.prototype.toHex6 = function () { return this.rgba.slice(0, 3).map(function (b) { b = b * 255 >> 0; return (b < 16 ? '0' : '') + b.toString(16); }).join(''); }; /*** * * @returns {string} */ Color.prototype.toHex8 = function () { return this.rgba.map(function (b) { b = b * 255 >> 0; return (b < 16 ? '0' : '') + b.toString(16); }).join(''); }; /*** * * @returns {string} */ Color.prototype.toHex3 = function () { return this.rgba.slice(0, 3).map(function (b) { b = b * 255 / 17 >> 0; return b.toString(16); }).join(''); }; /*** * * @returns {string} */ Color.prototype.toHex4 = function () { return this.rgba.map(function (b) { b = b * 255 / 17 >> 0; return b.toString(16); }).join(''); }; /*** * * @returns {number[]} */ Color.prototype.toHSLA = function () { return Color.rgbaToHSLA(this.rgba); }; /*** * * @returns {number[]} */ Color.prototype.toHSBA = function () { return Color.rgbaToHSBA(this.rgba); }; /*** * * @returns {number[]} */ Color.prototype.toHWBA = function () { return Color.rgbaToHWBA(this.rgba); }; /*** * * @returns {number[]} */ Color.prototype.toCMYK = function () { return Color.rgbToCMYK(this.rgba); }; /*** * * @returns {Color} */ Color.prototype.getHighContrastColor = function () { var hsba = this.toHSBA(); var h, s, b; h = hsba[0] > 0.5 ? hsba[0] - 0.5 : hsba[0] + 0.5; s = hsba[1] > 0.5 ? hsba[1] - 0.5 : hsba[1] + 0.5; b = hsba[2] > 0.5 ? hsba[2] - 0.5 : hsba[2] + 0.5; return Color.fromHSB(h, s, b); }; Color.prototype.getHightContrastColor = Color.prototype.getHighContrastColor; Color.prototype.getLuminance = function () { var a = this.rgba.slice(0, 3).map(function (v) { return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); }); return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722; }; /*** * * @param {Color} other * @returns {number} */ Color.prototype.getContrastWith = function (other) { var lum1 = this.getLuminance(); var lum2 = other.getLuminance(); var brightest = Math.max(lum1, lum2); var darkest = Math.min(lum1, lum2); return (brightest + 0.05) / (darkest + 0.05); }; /*** * * @returns {Color} */ Color.prototype.getContrastYIQ = function () { var r = this.rgba[0] * 255; var g = this.rgba[1] * 255; var b = this.rgba[2] * 255; var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000; return (yiq >= 128) ? new Color([0, 0, 0, 1]) : new Color([1, 1, 1, 1]); }; /** * * @returns {Color} */ Color.prototype.clone = function () { return new Color(this.rgba.slice()); }; /** * * ['rgba', 'rgba', 'rgba({{x[0]*255>>0}}, {{x[1]*255>>0}}, {{x[2]*255>>0}}, {{x[3]}})'], * ['rgb', 'rgba', 'rgb({{x[0]*255>>0}}, {{x[1]*255>>0}}, {{x[2]*255>>0}})'], * ['hsl', 'toHSLA()', 'hsl({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'], * ['hsla', 'toHSLA()', 'hsla({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'], * ['hsb', 'toHSBA()', 'hsb({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'], * ['hsba', 'toHSBA()', 'hsba({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'], * ['hex3', 'toHex3()', '#{{x}}'], * ['hex4', 'toHex4()', '#{{x}}'], * ['hex6', 'toHex6()', '#{{x}}'], * ['hex6', 'toHex8()', '#{{x}}'], * ['hwb', 'toHWBA()', 'hwb({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'], * ['hwba', 'toHWBA()', 'hwba({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'] * ['cmyk', 'toCMYK()', 'hwba({{x[0] * 100%}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'] */ /**** * * @param {"rgba"|"rgb"|"hsl"|"hsla"|"hsb"|"hsba"|"hex3"|"hex4"|"hex6"|"hex6"|hex8|"hwb"|"hwba"} mode * @returns {string} */ Color.prototype.toString = function (mode) { mode = mode || 'rgba'; mode = mode.toLocaleLowerCase(); return Color.templates[mode](this); }; /*** * * @param notStandard * @param {number[]} hsbWeight * @returns {Color} */ Color.prototype.nearestNamedColor = function (notStandard, hsbWeight) { hsbWeight = hsbWeight || [5, 3, 1] var hsba = this.toHSBA(); var bestMatch = null; var dist = 1000; Object.keys(Color.namedColors).concat(notStandard ? Object.keys(Color.nonStandarNamedColors) : []).forEach(function (name) { var c = Color.parse(Color.namedColors[name] || Color.nonStandarNamedColors[name]); var cHSBA = c.toHSBA(); var cDist = Math.abs(hsba[0] - cHSBA[0]) * hsbWeight[0] + Math.abs(hsba[1] - cHSBA[1]) * hsbWeight[1] + Math.abs(hsba[2] - cHSBA[2]) * hsbWeight[2]; if (cDist < dist) { dist = cDist; bestMatch = name; } }); return bestMatch; }; Color.templates = [ ['rgba', 'rgba', 'rgba({{x[0]*255>>0}}, {{x[1]*255>>0}}, {{x[2]*255>>0}}, {{x[3]}})'], ['rgb', 'rgba', 'rgb({{x[0]*255>>0}}, {{x[1]*255>>0}}, {{x[2]*255>>0}})'], ['hsl', 'toHSLA()', 'hsl({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'], ['hsla', 'toHSLA()', 'hsla({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'], ['hsb', 'toHSBA()', 'hsb({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'], ['hsba', 'toHSBA()', 'hsba({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'], ['hex3', 'toHex3()', '#{{x}}'], ['hex4', 'toHex4()', '#{{x}}'], ['hex6', 'toHex6()', '#{{x}}'], ['hex8', 'toHex8()', '#{{x}}'], ['hwb', 'toHWBA()', 'hwb({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'], ['hwba', 'toHWBA()', 'hwba({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'], ['cmyk', 'toCMYK()', 'cmyk({{x[0] * 100}}%, {{x[1] * 100}}%, {{x[2] * 100}}%)'] ].reduce(function (ac, cr) { ac[cr[0]] = new Function('color', [ 'var x = color.' + cr[1] + ';', 'return ' + JSMaker_TemplateString.parse(cr[2]).toJSCode() + ';' ].join('\n')); return ac; }, {}); Color.regexes = { whiteSpace: /\s*/, // Match zero or more whitespace characters. integer: /(\d{1,3})/, // Match integers: 79, 255, etc. decimal: /((?:\d+(?:\.\d+)?)|(?:\.\d+))/, // Match 129.6, 79, .9, etc. percent: /((?:\d+(?:\.\d+)?)|(?:\.\d+))%/, // Match 12.9%, 79%, .9%, etc. hex3: /^#([a-f0-9])([a-f0-9])([a-f0-9])$/i, // Match colors in format #XXXX, e.g. #5123. hex4: /^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i, // Match colors in format #XXXXXX, e.g. #b4d455. hex6: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i, // Match colors in format #XXXXXXXX, e.g. #b4d45535. hex8: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i }; Color.regexes.percent = new RegExp(Color.regexes.decimal.source + '%'); Color.regexes.rgb = new RegExp( [ '^rgb\\(', Color.regexes.integer.source, ',', Color.regexes.integer.source, ',', Color.regexes.integer.source, '\\)$' ].join(Color.regexes.whiteSpace.source), 'i' ); Color.regexes.rgbPercent = new RegExp( [ '^rgb\\(', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, '\\)$' ].join(Color.regexes.whiteSpace.source), 'i' ); // Match colors in format rgb(R, G, B, A), e.g. rgb(255, 0, 128, 0.25). Color.regexes.rgba = new RegExp( [ '^rgba\\(', Color.regexes.integer.source, ',', Color.regexes.integer.source, ',', Color.regexes.integer.source, ',', Color.regexes.decimal.source, '\\)$' ].join(Color.regexes.whiteSpace.source), 'i' ); // Match colors in format rgb(R%, G%, B%, A), e.g. rgb(100%, 0%, 28.9%, 0.5). Color.regexes.rgbaPercent = new RegExp( [ '^rgba\\(', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.decimal.source, '\\)$' ].join(Color.regexes.whiteSpace.source), 'i' ); // Match colors in format hsla(H, S%, L%), e.g. hsl(100, 40%, 28.9%). Color.regexes.hsl = new RegExp( [ '^hsl\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, '\\)$' ].join(Color.regexes.whiteSpace.source), 'i' ); // Match colors in format hsla(H, S%, L%, A), e.g. hsla(100, 40%, 28.9%, 0.5). Color.regexes.hsla = new RegExp( [ '^hsla\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.decimal.source, '\\)$' ].join(Color.regexes.whiteSpace.source), 'i' ); // Match colors in format hsb(H, S%, B%), e.g. hsb(100, 40%, 28.9%). Color.regexes.hsb = new RegExp( [ '^hsb\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, '\\)$' ].join(Color.regexes.whiteSpace.source), 'i' ); // Match colors in format hsba(H, S%, B%, A), e.g. hsba(100, 40%, 28.9%, 0.5). Color.regexes.hsba = new RegExp( [ '^hsba\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.decimal.source, '\\)$' ].join(Color.regexes.whiteSpace.source), 'i' ); Color.regexes.hwb = new RegExp( [ '^hwb\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, '\\)$' ].join(Color.regexes.whiteSpace.source), 'i' ); // Match colors in format hsba(H, S%, B%, A), e.g. hsba(100, 40%, 28.9%, 0.5). Color.regexes.hwba = new RegExp( [ '^hwba\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.decimal.source, '\\)$' ].join(Color.regexes.whiteSpace.source), 'i' ); Color.regexes.cmyk = new RegExp( [ '^cmyk\\(', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, '\\)$' ].join(Color.regexes.whiteSpace.source), 'i' ); /*** * * @param {number} code * @param {32|24|16|8} bits * @returns {Color} */ Color.fromInt = function (code, bits) { var r, g, b, a; if (bits == 32) { b = (code & 0xff) / 255; g = ((code & 0xff00) >> 8) / 255; r = ((code & 0xff0000) >> 16) / 255; a = (code >> 24) / 255; } else if (bits == 24) { b = (code & 0xff) / 255; g = ((code & 0xff00) >> 8) / 255; r = ((code & 0xff0000) >> 16) / 255; a = 1; } else if (bits == 16) { b = (code & 0x1f) / 0x1f; g = ((code & 0x7e0) >> 5) / 0x3f; b = (code >> 10) / 0x1f; a = 1; } else if (bits == 8) {//gray-scale b = (code & 0x3) / 0x3; g = ((code & 0x1c) >> 2) / 0x7; b = (code >> 5) / 0x7; a = 1; } return new Color([r, g, b, a]); }; /** * * @param {number} r * @param {number} g * @param {number} b * @returns {Color} */ Color.fromRGB = function (r, g, b) { return new Color([r, g, b, 1]); }; /** * * @param {number} r * @param {number} g * @param {number} b * @param {number} a * @returns {Color} */ Color.fromRGBA = function (r, g, b, a) { return new Color([r, g, b, a]); }; /*** * * @param {number} h * @param {number} s * @param {number} l * @returns {Color} */ Color.fromHSL = function (h, s, l) { var rgba = this.hslaToRGBA([h, s, l, 1]); return new Color(rgba); }; /*** * * @param {number} h * @param {number} s * @param {number} l * @param {number} a * @returns {Color} */ Color.fromHSLA = function (h, s, l, a) { var rgba = this.hslaToRGBA([h, s, l, a]); return new Color(rgba); }; /*** * * @param {number} h * @param {number} s * @param {number} b * @returns {Color} */ Color.fromHSB = function (h, s, b) { var rgba = this.hsbaToRGBA([h, s, b, 1]); return new Color(rgba); }; /*** * * @param {number} h * @param {number} s * @param {number} b * @param {number} a * @returns {Color} */ Color.fromHSBA = function (h, s, b, a) { var rgba = this.hsbaToRGBA([h, s, b, a]); return new Color(rgba); }; /*** * * @param {number} h * @param {number} s * @param {number} b * @returns {Color} */ Color.fromHWB = function (h, s, b) { var rgba = this.hwbaToRGBA([h, s, b, 1]); return new Color(rgba); }; /*** * * @param {number} h * @param {number} s * @param {number} b * @param {number} a * @returns {Color} */ Color.fromHWBA = function (h, s, b, a) { var rgba = this.hwbaToRGBA([h, s, b, a]); return new Color(rgba); }; Color.fromCMYK = function (c, m, y, k) { var rgba = this.cmykToRGB([c, m, y, k]).concat([0]); return new Color(rgba); }; /** * @param {String} text * @returns {Color} */ Color.parse = function (text) { if (this.namedColors[text]) text = this.namedColors[text]; if (this.nonStandarNamedColors[text]) text = this.nonStandarNamedColors[text]; if (this.regexes.hex8.test(text)) { return this.fromRGBA.apply(this, this.regexes.hex8.exec(text) .slice(1) .map(function (v) { return parseInt(v, 16) / 255; })); } else if (this.regexes.hex6.test(text)) { return this.fromRGB.apply(this, this.regexes.hex6.exec(text) .slice(1) .map(function (v) { return parseInt(v, 16) / 255; })); } else if (this.regexes.hex4.test(text)) { return this.fromRGBA.apply(this, this.regexes.hex4.exec(text) .slice(1) .map(function (v) { return parseInt(v + v, 16) / 255; })); } else if (this.regexes.hex3.test(text)) { return this.fromRGB.apply(this, this.regexes.hex3.exec(text) .slice(1) .map(function (v) { return parseInt(v + v, 16) / 255; })); } else if (this.regexes.rgba.test(text)) { return this.fromRGBA.apply(this, this.regexes.rgba.exec(text) .slice(1) .map(function (v, i) { return i < 3 ? parseFloat(v) / 255 : parseFloat(v); })); } else if (this.regexes.rgb.test(text)) { return this.fromRGB.apply(this, this.regexes.rgb.exec(text) .slice(1) .map(function (v, i) { return parseFloat(v) / 255; })); } else if (this.regexes.rgbPercent.test(text)) { return this.fromRGB.apply(this, this.regexes.rgbPercent.exec(text) .slice(1) .map(function (v, i) { return parseFloat(v) / 100; })); } else if (this.regexes.rgbaPercent.test(text)) { return this.fromRGBA.apply(this, this.regexes.rgbaPercent.exec(text) .slice(1) .map(function (v, i) { return parseFloat(v) / (i < 3 ? 100 : 1); })); } else if (this.regexes.hsl.test(text)) { return this.fromHSL.apply(this, this.regexes.hsl.exec(text) .slice(1) .map(function (v, i) { return parseFloat(v) / (i == 0 ? 360 : 100); })); } else if (this.regexes.hsla.test(text)) { return this.fromHSLA.apply(this, this.regexes.hsla.exec(text) .slice(1) .map(function (v, i) { return parseFloat(v) / (i == 0 ? 360 : i < 3 ? 100 : 1); })); } else if (this.regexes.hsb.test(text)) { return this.fromHSB.apply(this, this.regexes.hsb.exec(text) .slice(1) .map(function (v, i) { return parseFloat(v) / (i == 0 ? 360 : 100); })); } else if (this.regexes.hsba.test(text)) { return this.fromHSBA.apply(this, this.regexes.hsba.exec(text) .slice(1) .map(function (v, i) { return parseFloat(v) / (i == 0 ? 360 : i < 3 ? 100 : 1); })); } else if (this.regexes.hwb.test(text)) { return this.fromHWB.apply(this, this.regexes.hwb.exec(text) .slice(1) .map(function (v, i) { return parseFloat(v) / (i == 0 ? 360 : 100); })); } else if (this.regexes.hwba.test(text)) { return this.fromHWBA.apply(this, this.regexes.hwba.exec(text) .slice(1) .map(function (v, i) { return parseFloat(v) / (i == 0 ? 360 : i < 3 ? 100 : 1); })); } else if (this.regexes.cmyk.test(text)) { return this.fromCMYK.apply(this, this.regexes.cmyk.exec(text) .slice(1) .map(function (v, i) { return parseFloat(v) /100; })); } else { throw new Error("Fail to parse " + text); } }; /*** * @typedef {"aliceblue"|"antiquewhite"|"aqua"|"aquamarine"|"azure"|"beige"|"bisque"|"black"|"blanchedalmond"|"blue"|"blueviolet"|"brown"|"burlywood"|"cadetblue"|"chartreuse"|"chocolate"|"coral"|"cornflowerblue"|"cornsilk"|"crimson"|"cyan"|"darkblue"|"darkcyan"|"darkgoldenrod"|"darkgray"|"darkgreen"|"darkgrey"|"darkkhaki"|"darkmagenta"|"darkolivegreen"|"darkorange"|"darkorchid"|"darkred"|"darksalmon"|"darkseagreen"|"darkslateblue"|"darkslategray"|"darkslategrey"|"darkturquoise"|"darkviolet"|"deeppink"|"deepskyblue"|"dimgray"|"dimgrey"|"dodgerblue"|"firebrick"|"floralwhite"|"forestgreen"|"fuchsia"|"gainsboro"|"ghostwhite"|"gold"|"goldenrod"|"gray"|"green"|"greenyellow"|"grey"|"honeydew"|"hotpink"|"indianred"|"indigo"|"ivory"|"khaki"|"lavender"|"lavenderblush"|"lawngreen"|"lemonchiffon"|"lightblue"|"lightcoral"|"lightcyan"|"lightgoldenrodyellow"|"lightgray"|"lightgreen"|"lightgrey"|"lightpink"|"lightsalmon"|"lightseagreen"|"lightskyblue"|"lightslategray"|"lightslategrey"|"lightsteelblue"|"lightyellow"|"lime"|"limegreen"|"linen"|"magenta"|"maroon"|"mediumaquamarine"|"mediumblue"|"mediumorchid"|"mediumpurple"|"mediumseagreen"|"mediumslateblue"|"mediumspringgreen"|"mediumturquoise"|"mediumvioletred"|"midnightblue"|"mintcream"|"mistyrose"|"moccasin"|"navajowhite"|"navy"|"oldlace"|"olive"|"olivedrab"|"orange"|"orangered"|"orchid"|"palegoldenrod"|"palegreen"|"paleturquoise"|"palevioletred"|"papayawhip"|"peachpuff"|"peru"|"pink"|"plum"|"powderblue"|"purple"|"red"|"rosybrown"|"royalblue"|"saddlebrown"|"salmon"|"sandybrown"|"seagreen"|"seashell"|"sienna"|"silver"|"skyblue"|"slateblue"|"slategray"|"slategrey"|"snow"|"springgreen"|"steelblue"|"tan"|"teal"|"thistle"|"tomato"|"turquoise"|"violet"|"wheat"|"white"|"whitesmoke"|"yellow"|"yellowgreen"|"transparent"} NamedColor */ Color.namedColors = { aliceblue: '#f0f8ff', antiquewhite: '#faebd7', aqua: '#00ffff', aquamarine: '#7fffd4', azure: '#f0ffff', beige: '#f5f5dc', bisque: '#ffe4c4', black: '#000000', blanchedalmond: '#ffebcd', blue: '#0000ff', blueviolet: '#8a2be2', brown: '#a52a2a', burlywood: '#deb887', cadetblue: '#5f9ea0', chartreuse: '#7fff00', chocolate: '#d2691e', coral: '#ff7f50', cornflowerblue: '#6495ed', cornsilk: '#fff8dc', crimson: '#dc143c', cyan: '#00ffff', darkblue: '#00008b', darkcyan: '#008b8b', darkgoldenrod: '#b8860b', darkgray: '#a9a9a9', darkgreen: '#006400', darkgrey: '#a9a9a9', darkkhaki: '#bdb76b', darkmagenta: '#8b008b', darkolivegreen: '#556b2f', darkorange: '#ff8c00', darkorchid: '#9932cc', darkred: '#8b0000', darksalmon: '#e9967a', darkseagreen: '#8fbc8f', darkslateblue: '#483d8b', darkslategray: '#2f4f4f', darkslategrey: '#2f4f4f', darkturquoise: '#00ced1', darkviolet: '#9400d3', deeppink: '#ff1493', deepskyblue: '#00bfff', dimgray: '#696969', dimgrey: '#696969', dodgerblue: '#1e90ff', firebrick: '#b22222', floralwhite: '#fffaf0', forestgreen: '#228b22', fuchsia: '#ff00ff', gainsboro: '#dcdcdc', ghostwhite: '#f8f8ff', gold: '#ffd700', goldenrod: '#daa520', gray: '#808080', green: '#008000', greenyellow: '#adff2f', grey: '#808080', honeydew: '#f0fff0', hotpink: '#ff69b4', indianred: '#cd5c5c', indigo: '#4b0082', ivory: '#fffff0', khaki: '#f0e68c', lavender: '#e6e6fa', lavenderblush: '#fff0f5', lawngreen: '#7cfc00', lemonchiffon: '#fffacd', lightblue: '#add8e6', lightcoral: '#f08080', lightcyan: '#e0ffff', lightgoldenrodyellow: '#fafad2', lightgray: '#d3d3d3', lightgreen: '#90ee90', lightgrey: '#d3d3d3', lightpink: '#ffb6c1', lightsalmon: '#ffa07a', lightseagreen: '#20b2aa', lightskyblue: '#87cefa', lightslategray: '#778899', lightslategrey: '#778899', lightsteelblue: '#b0c4de', lightyellow: '#ffffe0', lime: '#00ff00', limegreen: '#32cd32', linen: '#faf0e6', magenta: '#ff00ff', maroon: '#800000', mediumaquamarine: '#66cdaa', mediumblue: '#0000cd', mediumorchid: '#ba55d3', mediumpurple: '#9370db', mediumseagreen: '#3cb371', mediumslateblue: '#7b68ee', mediumspringgreen: '#00fa9a', mediumturquoise: '#48d1cc', mediumvioletred: '#c71585', midnightblue: '#191970', mintcream: '#f5fffa', mistyrose: '#ffe4e1', moccasin: '#ffe4b5', navajowhite: '#ffdead', navy: '#000080', oldlace: '#fdf5e6', olive: '#808000', olivedrab: '#6b8e23', orange: '#ffa500', orangered: '#ff4500', orchid: '#da70d6', palegoldenrod: '#eee8aa', palegreen: '#98fb98', paleturquoise: '#afeeee', palevioletred: '#db7093', papayawhip: '#ffefd5', peachpuff: '#ffdab9', peru: '#cd853f', pink: '#ffc0cb', plum: '#dda0dd', powderblue: '#b0e0e6', purple: '#800080', red: '#ff0000', rosybrown: '#bc8f8f', royalblue: '#4169e1', saddlebrown: '#8b4513', salmon: '#fa8072', sandybrown: '#f4a460', seagreen: '#2e8b57', seashell: '#fff5ee', sienna: '#a0522d', silver: '#c0c0c0', skyblue: '#87ceeb', slateblue: '#6a5acd', slategray: '#708090', slategrey: '#708090', snow: '#fffafa', springgreen: '#00ff7f', steelblue: '#4682b4', tan: '#d2b48c', teal: '#008080', thistle: '#d8bfd8', tomato: '#ff6347', turquoise: '#40e0d0', violet: '#ee82ee', wheat: '#f5deb3', white: '#ffffff', whitesmoke: '#f5f5f5', yellow: '#ffff00', yellowgreen: '#9acd32', transparent: '#00000000' }; Color.nonStandarNamedColors = { night: '#0C090A', gunmetal: '#2C3539', midnight: '#2B1B17', charcoal: '#34282C', oil: '#3B3131', blackcat: '#413839', iridium: '#3D3C3A', blackeel: '#463E3F', blackcow: '#4C4646', graywolf: '#504A4B', vampiregray: '#565051', graydolphin: '#5C5858', carbongray: '#625D5D', ashgray: '#666362', cloudygray: '#6D6968', smokeygray: '#726E6D', granite: '#837E7C', battleshipgray: '#848482', graycloud: '#B6B6B4', graygoose: '#D1D0CE', platinum: '#E5E4E2', metallicsilver: '#BCC6CC', bluegray: '#98AFC7', raven: '#657383', jetgray: '#616D7E', mistblue: '#646D7E', marbleblue: '#566D7E', shipcove: '#737CA1', mariner: '#4863A0', bluejay: '#2B547E', biscay: '#2B3856', navyblue: '#000080', bluewhale: '#342D7E', lapisblue: '#15317E', denimdarkblue: '#151B8D', earthblue: '#0000A0', cobaltblue: '#0020C2', blueberryblue: '#0041C2', sapphireblue: '#2554C7', blueeyes: '#1569C7', blueorchid: '#1F45FC', bluelotus: '#6960EC', lightslateblue: '#736AFF', windowsblue: '#357EC7', glacialblueice: '#368BC1', silkblue: '#488AC7', blueivy: '#3090C7', bluekoi: '#659EC7', columbiablue: '#87AFC7', babyblue: '#95B9C7', oceanblue: '#2B65EC', blueribbon: '#306EFF', bluedress: '#157DEC', butterflyblue: '#38ACEC', iceberg: '#56A5EC', crystalblue: '#5CB3FF', denimblue: '#79BAEC', dayskyblue: '#82CAFF', jeansblue: '#A0CFEC', blueangel: '#B7CEEC', pastelblue: '#B4CFEC', seablue: '#C2DFFF', coralblue: '#AFDCEC', robineggblue: '#BDEDFF', palebluelily: '#CFECEC', water: '#EBF4FA', lightslate: '#CCFFFF', lightaquamarine: '#93FFE8', electricblue: '#9AFEFF', cyanoraqua: '#00FFFF', tronblue: '#7DFDFE', bluezircon: '#57FEFF', bluelagoon: '#8EEBEC', celeste: '#50EBEC', bluediamond: '#4EE2EC', tiffanyblue: '#81D8D0', cyanopaque: '#92C7C7', bluehosta: '#77BFC7', northernlightsblue: '#78C7C7', jellyfish: '#46C7C7', bluegreen: '#7BCCB5', macawbluegreen: '#43BFC7', seaturtlegreen: '#438D80', greenishblue: '#307D7E', grayishturquoise: '#5E7D7E', beetlegreen: '#4C787E', camouflagegreen: '#78866B', sagegreen: '#848b79', hazelgreen: '#617C58', venomgreen: '#728C00', ferngreen: '#667C26', darkforestgreen: '#254117', mediumforestgreen: '#347235', seaweedgreen: '#437C17', pinegreen: '#387C44', junglegreen: '#347C2C', shamrockgreen: '#347C17', greenonion: '#6AA121', clovergreen: '#3EA055', greensnake: '#6CBB3C', aliengreen: '#6CC417', greenapple: '#4CC417', kellygreen: '#4CC552', zombiegreen: '#54C571', froggreen: '#99C68E', greenpeas: '#89C35C', dollarbillgreen: '#85BB65', iguanagreen: '#9CB071', avocadogreen: '#B2C248', pistachiogreen: '#9DC209', saladgreen: '#A1C935', hummingbirdgreen: '#7FE817', nebulagreen: '#59E817', stoplightgogreen: '#57E964', algaegreen: '#64E986', jadegreen: '#5EFB6E', emeraldgreen: '#5FFB17', dragongreen: '#6AFB92', mintgreen: '#98FF98', greenthumb: '#B5EAAA', lightjade: '#C3FDB8', teagreen: '#CCFB5D', slimegreen: '#BCE954', harvestgold: '#EDE275', sunyellow: '#FFE87C', cornyellow: '#FFF380', parchment: '#FFFFC2', cream: '#FFFFCC', blonde: '#FBF6D9', champagne: '#F7E7CE', vanilla: '#F3E5AB', tanbrown: '#ECE5B6', peach: '#FFE5B4', mustard: '#FFDB58', rubberduckyyellow: '#FFD801', brightgold: '#FDD017', goldenbrown: '#EAC117', macaroniandcheese: '#F2BB66', saffron: '#FBB917', beer: '#FBB117', cantaloupe: '#FFA62F', beeyellow: '#E9AB17', brownsugar: '#E2A76F', deeppeach: '#FFCBA4', gingerbrown: '#C9BE62', schoolbusyellow: '#E8A317', fallleafbrown: '#C8B560', orangegold: '#D4A017', sand: '#C2B280', cookiebrown: '#C7A317', caramel: '#C68E17', brass: '#B5A642', camelbrown: '#C19A6B', bronze: '#CD7F32', tigerorange: '#C88141', cinnamon: '#C58917', bulletshell: '#AF9B60', copper: '#B87333', wood: '#966F33', oakbrown: '#806517', armybrown: '#827B60', sandstone: '#786D5F', mocha: '#493D26', taupe: '#483C32', coffee: '#6F4E37', brownbear: '#835C3B', reddirt: '#7F5217', sepia: '#7F462C', orangesalmon: '#C47451', rust: '#C36241', redfox: '#C35817', sedona: '#CC6600', papayaorange: '#E56717', halloweenorange: '#E66C2C', pumpkinorange: '#F87217', constructionconeorange: '#F87431', sunriseorange: '#E67451', mangoorange: '#FF8040', basketballorange: '#F88158', tangerine: '#E78A61', beanred: '#F75D59', valentinered: '#E55451', shockingorange: '#E55B3C', scarlet: '#FF2400', rubyred: '#F62217', ferrarired: '#F70D1A', fireenginered: '#F62817', lavared: '#E42217', lovered: '#E41B17', grapefruit: '#DC381F', chestnutred: '#C34A2C', cherryred: '#C24641', mahogany: '#C04000', chillipepper: '#C11B17', cranberry: '#9F000F', redwine: '#990012', burgundy: '#8C001A', chestnut: '#954535', bloodred: '#7E3517', sangria: '#7E3817', plumpie: '#7D0541', velvetmaroon: '#7E354D', plumvelvet: '#7D0552', rosyfinch: '#7F4E52', puce: '#7F5A58', dullpurple: '#7F525D', khakirose: '#C5908E', pinkbow: '#C48189', lipstickpink: '#C48793', rose: '#E8ADAA', rosegold: '#ECC5C0', desertsand: '#EDC9AF', pigpink: '#FDD7E4', cottoncandy: '#FCDFFF', pinkbubblegum: '#FFDFDD', flamingopink: '#F9A7B0', pinkrose: '#E7A1B0', pinkdaisy: '#E799A3', cadillacpink: '#E38AAE', carnationpink: '#F778A1', blushred: '#E56E94', watermelonpink: '#FC6C85', violetred: '#F6358A', pinkcupcake: '#E45E9D', pinklemonade: '#E4287C', neonpink: '#F535AA', dimorphothecamagenta: '#E3319D', brightneonpink: '#F433FF', tulippink: '#C25A7C', roguepink: '#C12869', burntpink: '#C12267', bashfulpink: '#C25283', darkcarnationpink: '#C12283', violapurple: '#7E587E', purpleiris: '#571B7E', plumpurple: '#583759', purplemonster: '#461B7E', purplehaze: '#4E387E', eggplant: '#614051', grape: '#5E5A80', purplejam: '#6A287E', purpleflower: '#A74AC7', purpleamethyst: '#6C2DC7', purplesagebush: '#7A5DC7', lovelypurple: '#7F38EC', aztechpurple: '#893BFF', jasminepurple: '#A23BEC', purpledaffodil: '#B041FF', tyrianpurple: '#C45AEC', crocuspurple: '#9172EC', purplemimosa: '#9E7BFF', heliotropepurple: '#D462FF', purpledragon: '#C38EC7', lilac: '#C8A2C8', blushpink: '#E6A9EC', mauve: '#E0B0FF', wisteriapurple: '#C6AEC7', blossompink: '#F9B7FF', periwinkle: '#E9CFEC', lavenderpinocchio: '#EBDDE2', lavenderblue: '#E3E4FA', pearl: '#FDEEF4', milkwhite: '#FEFCFF' }; /********************** COLOR CONVERTER *******************/ Color.rgbToHex = function (rgb) { return '#' + rgb.slice(0, 3).map(function (c) { var res = ((c * 255) >> 0).toString(16); if (res < 10) res = '0' + res; return res.toUpperCase(); }).join(''); }; Color.rgbaToHex = function (rgb) { return '#' + rgb.map(function (c) { var res = ((c * 255) >> 0).toString(16); if (res < 10) res = '0' + res; return res.toUpperCase(); }).join(''); }; Color.hsbaToText = function (hsba) { return 'hsba(' + (hsba[0] * 360 >> 0) + 'deg, ' + (hsba[1] * 100 >> 0) + '%, ' + (hsba[2] * 100 >> 0) + '%, ' + (hsba[3].toFixed(3)) + ')'; }; Color.hslaToText = function (hsla) { return 'hsla(' + (hsla[0] * 360 >> 0) + 'deg, ' + (hsla[1] * 100 >> 0) + '%, ' + (hsla[2] * 100 >> 0) + '%, ' + (hsla[3].toFixed(3)) + ')'; }; Color.rgbaToText = function (rgba) { return 'rgba(' + (rgba[0] * 255 >> 0) + ', ' + (rgba[1] * 255 >> 0) + ', ' + (rgba[2] * 255 >> 0) + ', ' + (rgba[3].toFixed(3)) + ')'; }; Color.hsbToText = function (hsba) { return 'hsb(' + (hsba[0] * 360 >> 0) + 'deg, ' + (hsba[1] * 100 >> 0) + '%, ' + (hsba[2] * 100 >> 0) + '%)'; }; Color.hslToText = function (hsl) { return 'hsl(' + (hsl[0] * 360 >> 0) + 'deg, ' + (hsl[1] * 100 >> 0) + '%, ' + (hsl[2] * 100 >> 0) + '%)'; }; Color.rgbToText = function (rgba) { return 'rgb(' + (rgba[0] * 255 >> 0) + ', ' + (rgba[1] * 255 >> 0) + ', ' + (rgba[2] * 255 >> 0) + ')'; }; Color.cmykToText = function (cmyk) { return 'cmyk(' + cmyk.map(function (x) { return x * 100 + '%' }).join(', ') + ')'; }; Color.hsbaToHSLA = function (hsba) { var hue = hsba[0]; var sat = hsba[1]; var val = hsba[2]; // Calculate lightness. var li = (2 - sat) * val / 2; // Convert saturation. if (li !== 0) { if (li === 1) { sat = 0; } else if (li < 0.5) { sat = sat / (2 - sat); } else { sat = sat * val / (2 - li * 2); } } // Hue and alpha stay the same. return [hue, sat, li, hsba[3]]; }; Color.hsbaToRGBA = function (hsba) { var hue = hsba[0] * 6; // We will split hue into 6 sectors. var sat = hsba[1]; var val = hsba[2]; var RGBA = []; if (sat === 0) { RGBA = [val, val, val, hsba[3]]; // Return early if grayscale. } else { var sector = Math.floor(hue); var tint1 = val * (1 - sat); var tint2 = val * (1 - sat * (hue - sector)); var tint3 = val * (1 - sat * (1 + sector - hue)); var red, green, blue; if (sector === 1) { // Yellow to green. red = tint2; green = val; blue = tint1; } else if (sector === 2) { // Green to cyan. red = tint1; green = val; blue = tint3; } else if (sector === 3) { // Cyan to blue. red = tint1; green = tint2; blue = val; } else if (sector === 4) { // Blue to magenta. red = tint3; green = tint1; blue = val; } else if (sector === 5) { // Magenta to red. red = val; green = tint1; blue = tint2; } else { // Red to yellow (sector could be 0 or 6). red = val; green = tint3; blue = tint1; } RGBA = [red, green, blue, hsba[3]]; } return RGBA; }; Color.hslaToHSBA = function (hsla) { var hue = hsla[0]; var sat = hsla[1]; var li = hsla[2]; // Calculate brightness. var val; if (li < 0.5) { val = (1 + sat) * li; } else { val = li + sat - li * sat; } // Convert saturation. sat = 2 * (val - li) / val; // Hue and alpha stay the same. return [hue, sat, val, hsla[3]]; }; Color.hslaToRGBA = function (hsla) { var hue = hsla[0] * 6; // We will split hue into 6 sectors. var sat = hsla[1]; var li = hsla[2]; var RGBA = []; if (sat === 0) { RGBA = [li, li, li, hsla[3]]; // Return early if grayscale. } else { // Calculate brightness. var val; if (li < 0.5) { val = (1 + sat) * li; } else { val = li + sat - li * sat; } // Define zest. var zest = 2 * li - val; // Implement projection (project onto green by default). var hzvToRGB = function (hue, zest, val) { if (hue < 0) { // Hue must wrap to allow projection onto red and blue. hue += 6; } else if (hue >= 6) { hue -= 6; } if (hue < 1) { // Red to yellow (increasing green). return zest + (val - zest) * hue; } else if (hue < 3) { // Yellow to cyan (greatest green). return val; } else if (hue < 4) { // Cyan to blue (decreasing green). return zest + (val - zest) * (4 - hue); } else { // Blue to red (least green). return zest; } }; // Perform projections, offsetting hue as necessary. RGBA = [ hzvToRGB(hue + 2, zest, val), hzvToRGB(hue, zest, val), hzvToRGB(hue - 2, zest, val), hsla[3] ]; } return RGBA; }; Color.rgbaToHSBA = function (rgba) { var red = rgba[0]; var green = rgba[1]; var blue = rgba[2]; var val = Math.max(red, green, blue); var chroma = val - Math.min(red, green, blue); var hue, sat; if (chroma === 0) { // Return early if grayscale. hue = 0; sat = 0; } else { sat = chroma / val; if (red === val) { // Magenta to yellow. hue = (green - blue) / chroma; } else if (green === val) { // Yellow to cyan. hue = 2 + (blue - red) / chroma; } else if (blue === val) { // Cyan to magenta. hue = 4 + (red - green) / chroma; } if (hue < 0) { // Confine hue to the interval [0, 1). hue += 6; } else if (hue >= 6) { hue -= 6; } } return [hue / 6, sat, val, rgba[3]]; }; Color.rgbaToHSLA = function (rgba) { var red = rgba[0]; var green = rgba[1]; var blue = rgba[2]; var val = Math.max(red, green, blue); var min = Math.min(red, green, blue); var li = val + min; // We will halve this later. var chroma = val - min; var hue, sat; if (chroma === 0) { // Return early if grayscale. hue = 0; sat = 0; } else { if (li < 1) { sat = chroma / li; } else { sat = chroma / (2 - li); } if (red === val) { // Magenta to yellow. hue = (green - blue) / chroma; } else if (green === val) { // Yellow to cyan. hue = 2 + (blue - red) / chroma; } else if (blue === val) { // Cyan to magenta. hue = 4 + (red - green) / chroma; } if (hue < 0) { // Confine hue to the interval [0, 1). hue += 6; } else if (hue >= 6) { hue -= 6; } } return [hue / 6, sat, li / 2, rgba[3]]; }; Color.hwbaToHSBA = function (hwba) { return [hwba[0], 1 - hwba[1] / (1 - hwba[2]), 1 - hwba[2], hwba[3]]; }; Color.hsbaToHWBA = function (hsla) { return [hsla[0], (1 - hsla[1]) * hsla[2], 1 - hsla[2], hsla[3]]; }; Color.rgbaToHWBA = function (rgba) { return this.hsbaToHWBA(this.rgbaToHSBA(rgba)); }; Color.hwbaToRGBA = function (hwba) { return this.hsbaToRGBA(this.hwbaToHSBA(hwba)); }; Color.cmykToRGB = function (cmyk) { var c = cmyk[0]; var m = cmyk[1]; var y = cmyk[2]; var k = cmyk[3]; c = c * (1 - k) + k; m = m * (1 - k) + k; y = y * (1 - k) + k; var r = 1 - c; var g = 1 - m; var b = 1 - y; return [r, g, b]; }; Color.rgbToCMYK = function (rgb) { var r = rgb[0]; var g = rgb[1]; var b = rgb[2]; var c = 1 - r; var m = 1 - g; var y = 1 - b; var k = Math.min(c, Math.min(m, y)); c = (c - k) / (1 - k); m = (m - k) / (1 - k); y = (y - k) / (1 - k); c = isNaN(c) ? 0 : c; m = isNaN(m) ? 0 : m; y = isNaN(y) ? 0 : y; k = isNaN(k) ? 0 : k; return [c, m, y, k]; }; /* harmony default export */ var Color_Color = (Color); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AttachHook.js var AttachHook = __webpack_require__(18); // CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Svg.js /*** * @extends Dom * @param option * @constructor */ function Svg(option) { Dom["b" /* default */].call(this, option); this.svgNS = "http://www.w3.org/2000/svg"; Object.defineProperties(this.creator, { sattachhook: { set: function () { //do nothing }, get: function () { return AttachHook["a" /* default */]; } } }); delete this.buidDom; this.buildSvg = this.create.bind(this); } OOP["a" /* default */].mixClass(Svg, Dom["b" /* default */]); Svg.prototype.defaultTag = 'g'; Svg.prototype.fromCode = function (code) { code = code.trim(); var receptacle = document.createElement('div'); var element; var prototypes; if (code.startsWith('<svg')) { receptacle.innerHTML = code; element = receptacle.childNodes[0]; prototypes = Object.getOwnPropertyDescriptors(AElement["a" /* default */].prototype); Object.defineProperties(element, prototypes); AElement["a" /* default */].call(element); } else { var svgfragment = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg">' + code + '</svg>'; receptacle.innerHTML = '' + svgfragment; element = receptacle.childNodes[0].childNodes[0]; prototypes = Object.getOwnPropertyDescriptors(ElementNS["a" /* default */].prototype); Object.defineProperties(element, prototypes); ElementNS["a" /* default */].call(element); } return element; }; Svg.prototype.makeNewElement = function (tagName) { return document.createElementNS(this.svgNS, tagName); }; Svg.ShareInstance = new Svg(); Svg.svgToCanvas = function (element) { if (typeof element == 'string') { element = Dom["b" /* default */].ShareInstance.$(element); } if (element && element.tagName == 'svg') { var depthClone = function (originElt) { var newElt = originElt.cloneNode();//no deep if (!originElt.getAttributeNS) return newElt;//is text node var style = getComputedStyle(originElt); var key, value; for (var i = 0; i < style.length; ++i) { key = style[i]; value = style.getPropertyValue(key); if (value && value.length > 0 && value !== 'auto') { newElt.style.setProperty(key, value); } } var children = Array.prototype.map.call(originElt.childNodes, depthClone); for (var i = 0; i < children.length; ++i) { newElt.appendChild(children[i]); } return newElt; }; var cloneElement = depthClone(element); var renderSpace = Dom["b" /* default */].ShareInstance._({ style: { // opacity:0, zIndex: -1000, position: 'fixed', top: 0, bottom: 0 } }).addTo(document.body); renderSpace.addChild(cloneElement); var svgCode = renderSpace.innerHTML; renderSpace.clearChild(); var mBlob = new Blob([svgCode], { type: "image/svg+xml;charset=utf-8" }); var src = (URL || webkitURL).createObjectURL(mBlob); var image = Dom["b" /* default */].ShareInstance._('img'); image.attr('src', src) .addTo(renderSpace); var canvas = document.createElement("canvas"); renderSpace.addChild(canvas); return Dom["b" /* default */].waitImageLoaded(image).then(function () { canvas.width = image.width; canvas.height = image.height; var context = canvas.getContext("2d"); context.drawImage(image, 0, 0); renderSpace.selfRemove(); return canvas; }); } else { throw new Error('Element must be svg'); } }; function svgToRasterImageUrl(element) { return Svg.svgToCanvas(element).then(function (canvas) { return canvas.toDataURL(); }); } Svg.svgToRasterImageUrl = svgToRasterImageUrl; function svgToExportedString(element) { if (typeof element == 'string') { element = Dom["b" /* default */].ShareInstance.$(element); } if (element && element.tagName == 'svg') { var depthClone = function (originElt) { var newElt = originElt.cloneNode();//no deep if (!originElt.getAttributeNS) return newElt;//is text node var cssRules = AElement["a" /* default */].prototype.getCSSRules.call(originElt); var cssKey = cssRules.reduce(function (ac, rule) { for (var i = 0; i < rule.style.length; ++i) { ac[rule.style[i]] = true; } return ac; }, {}); for (var key in cssKey) { newElt.style[key] = AElement["a" /* default */].prototype.getComputedStyleValue.call(originElt, key); } var children = Array.prototype.map.call(originElt.childNodes, depthClone); for (var i = 0; i < children.length; ++i) { newElt.appendChild(children[i]); } return newElt; }; var cloneElement = depthClone(element); var renderSpace = Dom["b" /* default */].ShareInstance._({ style: { // opacity:0, zIndex: -1000, position: 'fixed', top: 0, bottom: 0 } }).addTo(document.body); renderSpace.addChild(cloneElement); var svgCode = renderSpace.innerHTML; renderSpace.selfRemove(); return svgCode; } else { throw new Error('Element must be svg'); } }; Svg.svgToExportedString = svgToExportedString; function svgToSvgUrl(element) { var svg = svgToExportedString(element); svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n' + svg; var blob = new Blob([svg], { type: 'image/svg+xml' }); var url = URL.createObjectURL(blob); return url; } Svg.svgToSvgUrl = svgToSvgUrl; /*** * * @param {AElement|String | {computeStyle?: boolean, elt: AElement, keepBackgroundColor?:boolean,convertSVG?:boolean}} option * @return {Promise<unknown>} */ Dom["b" /* default */].printElement = function (option) { var _ = Dom["b" /* default */].ShareInstance._; var $ = Dom["b" /* default */].ShareInstance.$; option = option || {}; if (typeof option == 'string') { option = { elt: Dom["b" /* default */].ShareInstance.$(option) }; } else if (typeof option.elt == 'string') { option.elt = $(option.elt); } else if (Dom["b" /* default */].isDomNode(option)) { option = { elt: option }; } option = Object.assign({ keepBackgroundColor: true, convertSVG: false, computeStyle: false }, option); if (Dom["b" /* default */].isDomNode(option.elt)) { function afterCloneCb(originElt, newElt) { if (!newElt.tagName) return; var tagName = newElt.tagName.toLowerCase(); if (newElt.getBBox && tagName !== 'svg') return; var url, img; var needCopyStyle = option.computeStyle; var needKeepBackgroundColor = option.keepBackgroundColor; if (tagName === 'canvas' || (tagName === 'svg' && option.convertSVG)) { if (tagName === "canvas") { url = originElt.toDataURL(); } else { url = svgToSvgUrl(originElt); } img = _({ tag: 'img', props: { src: url } }); $(newElt).selfReplace(img); newElt = img; needCopyStyle = true; } else if (tagName === 'script') { newElt.remove(); } else if (tagName === 'img') { newElt.setAttribute('src', originElt.src); } else if (tagName === 'input') { if (originElt.getAttribute('type') === 'radio' || originElt.getAttribute('type') === 'checkbox') { if (originElt.checked) { newElt.setAttribute('checked', true); } } else if (originElt.getAttribute('type') === 'text' || !originElt.getAttribute('type') || originElt.getAttribute('type') === 'number') { newElt.setAttribute('value', originElt.value); } } if (needCopyStyle) { Object(Dom["a" /* copyStyleRule */])(originElt, newElt); } if (needKeepBackgroundColor) { try { var bgColor = AElement["a" /* default */].prototype.getComputedStyleValue.call(originElt, 'background-color'); if (bgColor) { bgColor = Color_Color.parse(bgColor); if (bgColor.rgba[3] > 0) { newElt.style.setProperty('background-color', bgColor.toString('hex8'), 'important'); } } } catch (e) { } } return newElt; } var newElt = Object(Dom["c" /* depthClone */])(option.elt, afterCloneCb); var renderSpace = _({ style: { position: 'fixed', top: '0', left: '0', right: '0', bottom: '0', overflow: 'auto', zIndex: '10', opacity: '0', visibility: 'hidden' } }); $('link', document.head, function (elt) { var temp = elt.cloneNode(false); //copy absolute url temp.setAttribute('href', elt.href); renderSpace.addChild(temp); }); if (!option.computeStyle) { $('style', document.head, function (elt) { if (elt == Dom["b" /* default */].$printStyle) return; renderSpace.addChild(elt.cloneNode(true)); }); } renderSpace.addChild(newElt); var eltCode = renderSpace.innerHTML; renderSpace.clearChild(); option.title = option.title || ($('title', document.head) || { innerHTML: 'absol.js' }).innerHTML; var htmlCode = ['<ht' + 'ml>', ' <h' + 'ead><title>' + option.title + '</title><meta charset="UTF-8">', '<style>', option.overideStyle ? 'html, body{width:initial !important; height:initial !important; overflow: initial !important; overflow-x: initial !important;overflow-y: initial !important; }' : '', '@media print {',//still not work ' body{', ' -webkit-print-color-adjust: exact;', ' color-adjust: exact;', ' } ', ' div, tr, td, table{', ' }', ' }', 'div, table, tr, td{', ' page-break-inside: initial;', ' page-break-before: avoid;', ' page-break-after: avoid;', '}', option.extendCss || '', '</style>', '</he' + 'ad>', '<bod' + 'y>', eltCode, '<scr' + 'ipt>' + (option.extendScript || '') + '</scri' + 'pt>',//browser parse script tag fail '<scr' + 'ipt>setTimeout(function(){ window.print();},1000);</scri' + 'pt>',//browser parse script tag fail '</bod' + 'y>', '</ht' + 'ml>'].join('\n'); var blob = new Blob([htmlCode], { type: 'text/html; charset=UTF-8' }); renderSpace.addTo(document.body); var iframe = _('iframe').attr('src', URL.createObjectURL(blob)).addStyle({ width: '100%', height: '100%' }).addTo(renderSpace); return new Promise(function (rs, rj) { function waitLoad() { if (iframe.contentWindow && iframe.contentWindow.document && iframe.contentWindow.document.body) { if (typeof option.onLoad == 'function') option.onLoad(); iframe.contentWindow.focus(); setTimeout(function () { function waitFocusBack() { if (!document.hasFocus || document.hasFocus()) { renderSpace.remove(); if (typeof option.onFinish == 'function') option.onFinish(); rs(); } else { setTimeout(waitFocusBack, 300) } } waitFocusBack(); }, 4000); } else setTimeout(waitLoad, 1000) } waitLoad(); }); } else { throw new Error('Invalid param!'); } } ; /* harmony default export */ var HTML5_Svg = (Svg); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CircleSectionLabel.js var CircleSectionLabel_ = ACore["d" /* default */]._; var CircleSectionLabel_$ = ACore["d" /* default */].$; var _g = HTML5_Svg.ShareInstance._; var $g = HTML5_Svg.ShareInstance.$; var Design = { circleHeight: 218 - 36, borderWidth: 36, textBoxHeight: 146, textHeight: 48, indexHeight: 54, textBoxPaddingLeft: 80, indexArrowRadius: (172 - 18) / 2, indexArrowStrokeWidth: 18, indexArrowStartAngle: -Math.PI / 6, indexArrowEndAngle: -7 * Math.PI / 12 }; var CircleSectionLabel_StyleSheet = { '.as-circle-section-label-text': { height: Design.textBoxHeight / Design.textHeight + 'em', 'padding-left': Design.textBoxPaddingLeft / Design.textHeight + 'em', 'line-height': Design.textBoxHeight / Design.textHeight + 'em' }, '.as-circle-section-label-index': { 'font-size': Design.indexHeight / Design.textHeight + 'em', height: (Design.circleHeight + Design.borderWidth) / Design.indexHeight + 'em', 'line-height': (Design.circleHeight + Design.borderWidth) / Design.indexHeight + 'em', width: (Design.circleHeight + Design.borderWidth) / Design.indexHeight + 'em' }, }; CircleSectionLabel_({ tag: 'style', id: 'circle-section-label-style', props: { innerHTML: Object.keys(CircleSectionLabel_StyleSheet).map(function (key) { var style = CircleSectionLabel_StyleSheet[key]; return key + ' {\n' + Object.keys(style).map(function (propName) { return propName + ': ' + style[propName] + ';'; }).join('\n') + '}'; }).join('\n') } }).addTo(document.head); /** * @extends AElement * @constructor */ function CircleSectionLabel() { this._ident = (Math.random() + '').replace(/[^0-9]/g, '_'); this.$background = CircleSectionLabel_$('.as-circle-section-label-background', this); this.$index = CircleSectionLabel_$('.as-circle-section-label-index', this); this.$text = CircleSectionLabel_$('.as-circle-section-label-text', this); this.$attachhook = CircleSectionLabel_('attachhook').addTo(this).on('error', function () { Dom["b" /* default */].addToResizeSystem(this); this.requestUpdateSize(); }); this.$attachhook.requestUpdateSize = this.redrawBackground.bind(this); this.$svg = _g({ tag: 'svg', attr: { width: '0', height: '0' }, child: [ { tag: 'defs', child: [ { tag: 'marker', id: 'marker_' + this._ident, attr: { markerWidth: "4", markerHeight: "4", refX: "0", refY: "1", orient: "auto", markerUnits: "strokeWidth", viewBox: "0 0 4 4" }, child: { tag: 'path', class: 'as-circle-section-label-arrow-marker-path', attr: { d: 'M0,0 L0,2 L2,1 z' } } } ] }, 'rect.as-circle-section-label-text-box', 'circle.as-circle-section-label-index-box', 'path.as-circle-section-label-arrow' ] }).addTo(this.$background); this.$indexBox = $g('circle.as-circle-section-label-index-box', this.$svg); this.$textBox = $g('rect.as-circle-section-label-text-box', this.$svg); // this.$marker = $g('defs marker', this.$svg); // this.$markerPath = $g(' path', this.$marker); this.$arrow = $g('path.as-circle-section-label-arrow', this.$svg) .attr({ 'marker-end': "url(" + '#marker_' + this._ident + ")" }); }; CircleSectionLabel.prototype.redrawBackground = function () { var indexBound = this.$index.getBoundingClientRect(); var textBound = this.$text.getBoundingClientRect(); var cHeight = indexBound.height; var cWidth = textBound.right - indexBound.left; this.$svg.attr({ height: cHeight + '', width: cWidth + '', viewBox: [0, 0, cWidth, cHeight].join(' ') }); var borderWidth = cHeight * Design.borderWidth / (Design.circleHeight + Design.borderWidth); var radius = cHeight * Design.circleHeight / (Design.circleHeight + Design.borderWidth) / 2; var x0 = indexBound.width / 2; var y0 = cHeight / 2; this.$indexBox.attr({ r: radius + '', cx: x0, cy: y0 }) .addStyle({ strokeWidth: borderWidth + '' }); var textBoxHeight = textBound.height; this.$textBox.attr( { x: x0 / 2, y: (cHeight - textBoxHeight) / 2, width: cWidth - x0 - 1, height: textBoxHeight, rx: textBoxHeight / 2, ry: textBoxHeight / 2 } ); var arrowRadius = cHeight * Design.indexArrowRadius / (Design.circleHeight + Design.borderWidth); this.$arrow.attr({ d: [ 'M', x0 + arrowRadius * Math.cos(Design.indexArrowStartAngle), y0 + arrowRadius * Math.sin(Design.indexArrowStartAngle), 'A', arrowRadius, arrowRadius, 0, 1, 1, x0 + arrowRadius * Math.cos(Design.indexArrowEndAngle), y0 + arrowRadius * Math.sin(Design.indexArrowEndAngle) ].join(' ') }).addStyle('stroke-width', cHeight * Design.indexArrowStrokeWidth / (Design.circleHeight + Design.borderWidth)) }; CircleSectionLabel.tag = 'CircleSectionLabel'.toLowerCase(); CircleSectionLabel.render = function () { return CircleSectionLabel_({ class: 'as-circle-section-label', child: [ { class: 'as-circle-section-label-background' }, '.as-circle-section-label-index', '.as-circle-section-label-text' ] }); }; CircleSectionLabel.property = {}; CircleSectionLabel.property.index = { set: function (value) { this._index = value; this.$index.clearChild().addChild(CircleSectionLabel_({ text: value + '' })) }, get: function () { return this._index; } }; CircleSectionLabel.property.text = { set: function (value) { this._text = value; this.$text.clearChild().addChild(CircleSectionLabel_({ text: value + '' })) }, get: function () { return this._text; } } ACore["d" /* default */].install(CircleSectionLabel); /* harmony default export */ var js_CircleSectionLabel = (CircleSectionLabel); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/contextmenu.css var contextmenu = __webpack_require__(113); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/menu.css var menu = __webpack_require__(115); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/tool/BlurTrigger.js var STATE_INIT = 0; var STATE_ATTACHED = 1; var STATE_RELEASED = 2; var STATE_FIRED = 3; var STATE_DESTROYED = 4; /*** * * @param {AElement[]|AElement} eltList * @param {"click"|"mousedown"} eventType * @param {function} callback * @param {number=} initAfter * @param {number=} fireDelay * @param {*[]=} args * @constructor */ function BlurTrigger(eltList, eventType, callback, initAfter, fireDelay, args) { this.args = args || []; this.callback = callback; this.eltTargets = eltList || []; this.initAfter = initAfter || 0; this.fireDelay = fireDelay || 0; this.state = STATE_INIT; this.eventType = eventType; this['ev_mouse'] = this.ev_mouse.bind(this); this['ev_blur'] = this.ev_blur.bind(this); if (this.initAfter > 0) { setTimeout(this._attach.bind(this)); } else this._attach(); } BlurTrigger.prototype._attach = function () { if (this.state !== STATE_INIT) return; document.addEventListener(this.eventType, this.ev_mouse); window.addEventListener('blur', this.ev_blur); this.state = STATE_ATTACHED; }; BlurTrigger.prototype._fire = function () { if (this.state !== STATE_RELEASED) return; this.callback.apply(this, this.args); this.state = STATE_FIRED; }; BlurTrigger.prototype._release = function () { if (this.state !== STATE_ATTACHED) return; document.removeEventListener(this.eventType, this.ev_mouse); window.removeEventListener('blur', this.ev_blur); this.state = STATE_RELEASED; }; BlurTrigger.prototype.destroy = function () { if (this.state === 4) return; if (this.state === STATE_ATTACHED) this._release(); this.state = STATE_DESTROYED; }; BlurTrigger.prototype._prepareFire = function () { if (this.fireDelay > 0) { setTimeout(this._fire.bind(this), this.fireDelay); } else { this._fire(); } } BlurTrigger.prototype.ev_mouse = function (event) { var hit = false; if (this.eltTargets instanceof Array) { hit = this.eltTargets.some(function (elt) { return Object(EventEmitter["d" /* hitElement */])(elt, event); }); } else if (typeof hit === "function") { hit = this.eltTargets.call(this, event.target); } if (!hit) { this._release(); this._prepareFire(); } }; BlurTrigger.prototype.ev_blur = function () { setTimeout(function () { if (this.state !== STATE_ATTACHED) return; var tagName = (document.activeElement && document.activeElement.tagName) || ''; tagName = tagName.toLowerCase(); if (tagName === 'iframe') { this._release(); this._prepareFire(); } }.bind(this), 0); }; /* harmony default export */ var tool_BlurTrigger = (BlurTrigger); // EXTERNAL MODULE: ./node_modules/absol/src/HTML5/ResizeSystem.js var ResizeSystem = __webpack_require__(7); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Menu.js var Menu_ = ACore["d" /* default */]._; var Menu_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function MenuButton() { this.$text = Menu_$('.absol-vmenu-button-text', this); this.$key = Menu_$('.absol-vmenu-button-key', this); this.$arrow = Menu_$('.absol-vmenu-arrow', this); this.$iconCtn = Menu_$('.absol-vmenu-button-ext-icon-container', this); OOP["a" /* default */].drillProperty(this, this.$text, 'text', 'innerHTML'); OOP["a" /* default */].drillProperty(this, this.$key, 'key', 'innerHTML'); } MenuButton.tag = 'menubutton'; MenuButton.render = function () { return Menu_({ tag: 'button', class: 'absol-vmenu-button', child: [ { class: 'absol-vmenu-button-ext-icon-container', child: 'img.absol-vmenu-button-icon' }, '.absol-vmenu-button-text', '.absol-vmenu-button-key', { class: 'absol-vmenu-arrow-container', child: 'span.absol-vmenu-arrow' } ] }); }; MenuButton.property = {}; MenuButton.property.extendClasses = { set: function (value) { var self = this; this.extendClasses.forEach(function (className) { self.removeClass(className); }); this._extendClass = []; if (!value) return; if (typeof value == 'string') { value = value.split(/\s+/).filter(function (c) { return c.length > 0 }); } if (value instanceof Array) { this._extendClass = value; this._extendClass.forEach(function (className) { self.addClass(className); }); } else { throw new Error('Invalid extendClasses'); } }, get: function () { return this._extendClass || []; } }; MenuButton.property.icon = { set: function (value) { this.$iconCtn.clearChild(); this._icon = value; if (value) { Menu_(value).addTo(this.$iconCtn); } }, get: function () { return this._icon; } }; MenuButton.property.iconSrc = { set: function (value) { if (value) this.icon = { tag: 'img', props: { src: value } }; else this.icon = value; }, get: function () { return this.icon && this.icon.props && this.icon.props.src; } }; MenuButton.property.extendStyle = { set: function (value) { this.removeStyle(this._extendStyle || {}); this._extendStyle = value || {}; this.addStyle(this.extendStyle); }, get: function () { return this._extendStyle || {}; } }; ACore["d" /* default */].install(MenuButton); /*** * * @extends Follower * @constructor */ function Dropdown() { this.$container = Menu_$('.absol-dropdown-content', this); this.$container.followTarget = this; this.$container.sponsorElement = this; this.$container.anchor = [1, 2, 6, 5]; } Dropdown.tag = 'dropdown'; Dropdown.render = function () { return Menu_({ class: ['absol-drop-hidden', 'absol-dropdown'], child: 'follower.absol-dropdown-content.as-bscroller' }); }; Dropdown.property = {}; Dropdown.property.show = { set: function (value) { if (value) { this.removeClass('absol-drop-hidden'); // ResizeSystem.update(); if (this.$container.lastChild && this.$container.lastChild.$items) { this.$container.lastChild.$items.forEach(function (itemElt) { if (itemElt.autoFixParentSize) { itemElt.autoFixParentSize(); } }); } var aPst = this.findAvailablePosition(); if (aPst.crampedHeight) { this.removeClass('overlap-top'); // this.$container.followTarget = null;? this.$container.addStyle({ 'max-height': aPst.maxHeight + 'px' }); this.$container.refollow(); this.$container.updatePosition(); this.$container.addStyle('top', this.getBoundingClientRect().top + aPst.posTop + 'px'); } else { this.$container.removeStyle('max-height') .removeStyle('top'); this.$container.refollow(); this.$container.updatePosition(); } } else { this.addClass('absol-drop-hidden'); } }, get: function () { return !this.hasClass('absol-drop-hidden'); } }; Dropdown.prototype.findAvailablePosition = function () { var outBound = Dom["b" /* default */].traceOutBoundingClientRect(document.body); var containerBound = this.$container.getBoundingClientRect(); var bound = this.getBoundingClientRect(); var distTop = bound.top - outBound.top; var distLeft = bound.left - outBound.left; var distRight = -bound.right + outBound.right; var distBottom = -bound.bottom + outBound.bottom; var result = {}; if (distLeft >= containerBound.width) result.left = true; if (distTop >= containerBound.height) result.top = true; if (distRight >= containerBound.width) result.right = true; if (distBottom >= containerBound.height) result.bottom = true; if (distRight + bound.width >= containerBound.width) result.overlapRight = true; if (distLeft + bound.width >= containerBound.width) result.overlapLeft = true; if (distBottom + bound.height >= containerBound.height) result.overlapBottom = true; if (distTop + bound.height >= containerBound.height) result.overlapTop = true; if (!result.overlapTop && !result.overlapBottom) { result.crampedHeight = true; result.maxHeight = outBound.height - 20; result.posTop = distBottom - Math.min(containerBound.height, result.maxHeight) + bound.height - 10; } return result; }; Dropdown.prototype.addChild = function (child) { if (child instanceof Array) { for (var i = 0; i < child.length; ++i) this.addChild(child[i]); } else { if (!this.$trigger) { this.super(child); this.$trigger = child; } else { this.$container.addChild(child); } } }; Dropdown.prototype.clearChild = function () { if (this.$trigger) { this.$trigger.selfRemove(); this.$trigger = undefined; } this.$container.clearChild(); }; Dropdown.prototype.init = function (props) { props = props || {}; Object.assign(this, props); }; function Dropright() { this.$container = Menu_$('.absol-dropright-content', this); this.$container.followTarget = this; this.$container.sponsorElement = this; this.$container.anchor = [0, 3, 7, 4]; } Dropright.tag = 'dropright'; Dropright.render = function () { return Menu_({ class: ['absol-drop-hidden', 'absol-dropright'], child: 'follower.absol-dropright-content.as-bscroller', data: { $trigger: undefined, $content: undefined, _isShow: false } }); } Object.assign(Dropright.prototype, Dropdown.prototype); //is the same Dropright.prototype.addChild = Dropdown.prototype.addChild; Dropright.prototype.clearChild = Dropdown.prototype.clearChild; Dropright.property = Object.assign({}, Dropdown.property); function VMenuLine() { return Menu_('<div class="absol-vmenu-line"><div></div></div>'); } VMenuLine.tag = 'VMenuLine'.toLowerCase(); function VMenuItem() { var thisVM = this; this.$dropper = Menu_$('dropright', this); this.$vmenu = Menu_$('vmenu', this); this.$button = Menu_$('menubutton', this); this.$text = thisVM.$button.$text; this.$key = thisVM.$button.$key; this.$arrow = thisVM.$button.$arrow; this.$iconCtn = thisVM.$button.$iconCtn; OOP["a" /* default */].drillProperty(this, this.$button, ['text', 'extendClasses', 'extendStyle', 'key', 'icon', 'iconSrc']); OOP["a" /* default */].drillProperty(this, this.$vmenu, ['activeTab']); this.eventHandler = OOP["a" /* default */].bindFunctions(this, VMenuItem.eventHandler); this.$vmenu.on('press', this.eventHandler.pressItem, true); this.$button.on('click', this.eventHandler.clickButton, true); this.$button.on('mouseenter', this.eventHandler.enterButton, true); this._textMarginRight = 0; } VMenuItem.tag = 'VMenuItem'.toLowerCase(); VMenuItem.render = function () { return Menu_({ tag: 'dropright', extendEvent: ['press', 'enter'], child: ['menubutton', { tag: 'vmenu', }] }); }; VMenuItem.prototype.init = function (props) { Object.assign(this, props || {}); }; VMenuItem.prototype.autoFixParentSize = function () { var parentWidth = this.$dropper.getBoundingClientRect().width;// dropper is fixed parent content size if (!parentWidth) return; var buttonWidth = this.$button.getBoundingClientRect().width; var fontSize = this.$text.getFontSize(); this._textMarginRight = parentWidth - buttonWidth + this._textMarginRight; this.$text.addStyle('margin-right', this._textMarginRight / fontSize + 'em'); }; VMenuItem.eventHandler = {}; VMenuItem.eventHandler.enterButton = function (event) { event.menuItem = this; var newEvent = EventEmitter["b" /* default */].copyEvent(event); this.emit('enter', newEvent, this); }; VMenuItem.eventHandler.pressItem = function (event) { var newEvent = EventEmitter["b" /* default */].copyEvent(event, { target: this }); this.emit('press', newEvent, this); }; VMenuItem.eventHandler.clickButton = function (event) { event.menuDontHide = this.items && this.items.length > 0; event.menuItem = this; event.vmenuItem = this; var newEvent = EventEmitter["b" /* default */].copyEvent(event, { target: this }); this.emit('press', newEvent, this); }; VMenuItem.property = {}; VMenuItem.property.items = { set: function (items) { items = items || []; if (items.length > 0) { this.$arrow.addClass(['mdi', 'mdi-chevron-right']); } else { this.$arrow.removeClass(['mdi', 'mdi-chevron-right']); } this.$vmenu.items = items; }, get: function () { return this.$vmenu.items; } }; VMenuItem.property.disabled = { set: function (value) { if (value) { this.addClass('absol-menu-item-disabled'); } else { this.removeClass('absol-menu-item-disabled'); } }, get: function () { return this.hasClass('absol-menu-item-disabled'); } }; VMenuItem.property.hidden = { set: function (value) { if (value) { this.addClass('absol-menu-item-hidden'); } else { this.removeClass('absol-menu-item-hidden'); } }, get: function () { return this.hasClass('absol-menu-item-hidden'); } }; /** * @extends AElement * @constructor */ function VMenu() { } VMenu.tag = 'vmenu'; VMenu.render = function () { return Menu_({ class: 'absol-vmenu', extendEvent: 'press' }); }; VMenu.property = {}; VMenu.property.activeTab = { set: function (tabIndex) { this._activeTab = tabIndex; if (this.$items) { for (var i = 0; i < this.$items.length; ++i) { var item = this.$items[i]; item.show = i == tabIndex && !item.disabled; item.activeTab = -1; if (i == tabIndex && !item.disabled) { item.$button && item.items && item.items.length > 0 && item.$button.addClass('absol-vmenu-button-hover'); } else { item.$button && item.$button.removeClass('absol-vmenu-button-hover'); } } } }, get: function () { return this._activeTab; } }; VMenu.property.extendStyle = { set: function (value) { this.removeStyle(this._extendStyle || {}); this._extendStyle = value || {}; this.addStyle(this.extendStyle); }, get: function () { return this._extendStyle || {}; } }; VMenu.property.extendClasses = { set: function (value) { var self = this; this.extendClasses.forEach(function (className) { self.removeClass(className); }); this._extendClass = []; if (!value) return; if (typeof value == 'string') { value = value.split(/\s+/).filter(function (c) { return c.length > 0 }); } if (value instanceof Array) { this._extendClass = value; this._extendClass.forEach(function (className) { self.addClass(className); }); } else { throw new Error('Invalid extendClasses'); } }, get: function () { return this._extendClass || []; } }; VMenu.eventHandler = {}; VMenu.eventHandler.enterItem = function (event) { var tabIndex = event.menuItem._tabIndex; this.activeTab = tabIndex; }; VMenu.eventHandler.pressItem = function (event) { this.emit('press', EventEmitter["b" /* default */].copyEvent(event, { target: this }), this); }; VMenu.property.items = { set: function (items) { this._childFromItems(items || []); }, get: function () { return this.$items; } } VMenu.prototype.init = function (props) { Object.assign(this, props || {}); }; VMenu.prototype._childFromItems = function (items) { this.clearChild(); this.$items = items.map(function (item, index) { var itemElt; if (typeof item === 'string' && (item.substr(0, 1) === '-' || item.substr(0, 1) === '=')) { itemElt = Menu_('vmenuline'); } else if (Object(Dom["f" /* isDomNode */])(item)) { itemElt = item; } else if (item.child || item.class || item.tag || item.style || typeof item === 'string') { itemElt = Menu_(item); } else { itemElt = Menu_({ tag: 'vmenuitem', props: Object.assign({ _tabIndex: index }, item), on: { enter: { callback: this.eventHandler.enterItem, cap: true }, press: { callback: this.eventHandler.pressItem, cap: true } } }); } this.addChild(itemElt); return itemElt; }.bind(this)); //todo }; function HMenuItem() { this.blurTrigger = null; this.$vmenu = Menu_$('vmenu', this); this.$dropDown = this; this.$button = Menu_$('button.absol-hmenu-button', this); OOP["a" /* default */].drillProperty(this, this.$button, 'text', 'innerHTML'); OOP["a" /* default */].drillProperty(this, this.$vmenu, 'items'); OOP["a" /* default */].drillProperty(this, this.$vmenu, 'activeTab'); this.$button.on('click', this.eventHandler.clickButton); this.$button.on('mouseenter', this.eventHandler.enterButton, true); this.$vmenu.on('press', this.eventHandler.pressItem, true); //property show not need because dropdown is itself return this; } HMenuItem.tag = 'HMenuItem'.toLowerCase(); HMenuItem.render = function () { return Menu_({ tag: 'dropdown', extendEvent: ['press', 'enter'], child: ['button.absol-hmenu-button', 'vmenu' ] }); }; HMenuItem.eventHandler = {}; HMenuItem.eventHandler.clickButton = function (event) { event.menuItem = this; event.hmenuItem = this; this.emit('press', EventEmitter["b" /* default */].copyEvent(event, { target: this }), this); }; HMenuItem.eventHandler.enterButton = function (event) { event.menuItem = this; this.emit('enter', EventEmitter["b" /* default */].copyEvent(event, { target: this }), this); }; HMenuItem.eventHandler.pressItem = function (event) { this.emit('press', EventEmitter["b" /* default */].copyEvent(event, { target: this }), this); }; HMenuItem.property = {}; HMenuItem.property.disabled = VMenuItem.property.disabled; HMenuItem.property.hidden = VMenuItem.property.hidden; HMenuItem.prototype.init = function (props) { props = props || {}; Object.assign(this, props); }; /*** * @extends AElement * @constructor */ function HMenu() { } HMenu.tag = 'hmenu'; HMenu.render = function () { return Menu_({ class: 'absol-hmenu', extendEvent: ['press', 'enter', 'activetab', 'cancel'] }); }; HMenu.eventHandler = {}; HMenu.eventHandler.pressItem = function (event) { /** * this.activeTab can be undefined * undefine >= 0 => false * undefine < 0 => false */ if (event.menuItem.items && event.menuItem.items.length > 0 && !(this.activeTab >= 0)) { this.activeTab = event.menuItem._tabIndex; } else { event.isLeaf = (!event.menuItem.items || !event.menuItem.items.length); this.emit('press', event, this); } }; HMenu.eventHandler.enterItem = function (event) { if (this.activeTab >= 0) { this.activeTab = event.menuItem._tabIndex; } }; HMenu.eventHandler.clickSomewhere = function (event) { // if (EventEmitter.hitElement(this, event)) return; this.activeTab = -1; // window.removeEventListener('blur', this.eventHandler.clickSomewhere); }; HMenu.prototype._childFromItems = function (items) { this.clearChild(); this.$items = items.map(function (item, index) { var res = Menu_({ tag: 'hmenuitem', props: Object.assign({ _tabIndex: index }, item), on: { press: { callback: this.eventHandler.pressItem, cap: true }, enter: { callback: this.eventHandler.enterItem, cap: true } } }); this.addChild(res); return res; }.bind(this)); }; HMenu.prototype.init = function (props) { Object.assign(this, props || {}); }; HMenu.property = {}; HMenu.property.items = { set: function (items) { this._childFromItems(items || []); }, get: function () { return this.$items; } }; HMenu.property.activeTab = { /*** * @this HMenu * @param tabIndex */ set: function (tabIndex) { var lastValue = this._activeTab; this._activeTab = tabIndex; for (var i = 0; i < this.$items.length; ++i) { var item = this.$items[i]; item.show = i == tabIndex && !item.disabled; item.activeTab = -1; if (i == tabIndex && !item.disabled) { item.$button && item.items && item.items.length > 0 && item.$button.addClass('absol-hmenu-button-hover'); } else { item.$button && item.$button.removeClass('absol-hmenu-button-hover'); } } if (!(lastValue >= 0) && (this._activeTab >= 0)) { if (this.blurTrigger) { this.blurTrigger.destroy(); } this.blurTrigger = new tool_BlurTrigger([this], "click", this.eventHandler.clickSomewhere, 100, 10); } else if ((lastValue >= 0) && !(this._activeTab >= 0)) { if (this.blurTrigger) { this.blurTrigger.destroy(); this.blurTrigger = null; } } if (lastValue >= 0) { if (tabIndex >= 0 && tabIndex != lastValue) { this.emit('activetab', { type: 'activetab', tabIndex: tabIndex, target: this }, this); } else if (!(tabIndex >= 0)) { this.emit('cancel', { type: 'cancel', lastActiveIndex: lastValue, target: this }, this); } } else { if (tabIndex >= 0) { this.emit('activetab', { type: 'activetab', tabIndex: tabIndex, target: this }, this); } } }, get: function () { return this._activeTab; } }; /*** * @extends AElement * @constructor */ function VRootMenu() { this._items = []; this.$attachhook = Menu_({ tag: 'attachhook', props: { prevWidth: 0, requestUpdateSize: () => { var newWidth = this.getBoundingClientRect().width; if (newWidth === this.$attachhook.prevWidth) return; this.$attachhook.prevWidth = newWidth; Array.prototype.forEach.call(this.childNodes, elt => { if (elt.autoFixParentSize) { elt.autoFixParentSize(); } }); } }, on: { attached: () => { ResizeSystem["a" /* default */].add(this.$attachhook); this.$attachhook.requestUpdateSize(); } } }).addTo(this); this.items = []; } VRootMenu.tag = 'VRootMenu'.toLowerCase(); VRootMenu.render = function () { return Menu_({ class: ['as-v-root-menu'], extendEvent: ['press', 'enter', 'activetab', 'cancel'] }); }; VRootMenu.prototype._childFromItems = function (items) { var thisM = this; while (this.lastChild && this.lastChild !== this.$attachhook) this.lastChild.remove(); while (this.firstChild && this.firstChild !== this.$attachhook) this.firstChild.remove(); this.$items = items.map(function (item, i) { var itemElt; if (typeof item === 'string' && (item.substr(0, 1) === '-' || item.substr(0, 1) === '=')) { itemElt = Menu_('vmenuline'); } else if (Object(Dom["f" /* isDomNode */])(item)) { itemElt = item; } else if (item.child || item.class || item.tag || item.style || typeof item === 'string') { itemElt = Menu_(item); } else { itemElt = Menu_({ tag: 'vmenuitem', props: item, on: { enter: thisM.eventHandler.enterItem, press: thisM.eventHandler.pressItem } }); } itemElt._tabIndex = i; thisM.addChild(itemElt); return itemElt; }); this.$attachhook.prevWidth = 0; this.$attachhook.requestUpdateSize(); Object(ACore["b" /* $$ */])('img', this).filter(x => !!x.getAttribute('src') && !x.classList.contains('absol-vmenu-button-icon')).forEach(elt => { Object(Dom["h" /* waitImageLoaded */])(elt).then(() => this.$attachhook.requestUpdateSize()); }); }; VRootMenu.property = Object.assign({}, HMenu.property); VRootMenu.eventHandler = Object.assign({}, HMenu.eventHandler); ACore["d" /* default */].install([HMenu, VMenuItem, VMenu, Dropright, VMenuLine, Dropdown, HMenuItem, VRootMenu]); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ContextMenu.js var ContextMenu_ = ACore["d" /* default */]._; var ContextMenu_$ = ACore["d" /* default */].$; var supportContextEvent = false; var isMobile = BrowserDetector["a" /* default */].isMobile; /** * @extends AElement * @constructor */ function ContextCaptor() { this.attachedElt = null; this.$textarea = ContextMenu_$('textarea', this) .attr('readonly', 'true') .on('contextmenu', this.eventHandler.contextmenu, true); this._ss = 0; this._isTouch = false; /** this._target = null; * @type {Vec2} */ this._posStart = null; /** * @type {Vec2} */ this._posCurrent = null; this._touchId = -100; this._longPressTimeout = -1; this._removeTimeout = -1; this._fireContextMenuTimeout = -1; this.$target = null; this._pointerSession = 0; this._lastContextSession = 0; this.mousedownEvent = null; this.sync = Promise.resolve(); }; ContextCaptor.prototype.attachTo = function (elt) { if (this.attachedElt) { this.attachedElt.removeEventListener('mousedown', this.eventHandler.mousedown); this.attachedElt.removeEventListener('touchstart', this.eventHandler.mousedown); this.attachedElt = null; } this.attachedElt = elt; if (this.attachedElt) { this.attachedElt.addEventListener('mousedown', this.eventHandler.mousedown); this.attachedElt.addEventListener('touchstart', this.eventHandler.mousedown); } return this; }; ContextCaptor.tag = 'ContextCaptor'.toLowerCase(); ContextCaptor.render = function () { return ContextMenu_({ class: ['absol-context-menu-anchor'], extendEvent: 'requestcontextmenu', child: [ 'textarea' ] }); }; ContextCaptor.prototype.showContextMenu = function (x, y, props, onSelectItem) { var self = this; var anchor = ContextMenu_('.as-context-menu-ctn.absol-context-menu-anchor' + (isMobile ? '.as-anchor-modal' : '')).addTo(document.body); var finish = function (event) { document.removeEventListener('click', finish); document.removeEventListener('touchcancel', finish); document.removeEventListener('touchend', finish); document.removeEventListener('contextmenu', finish); anchor.off('click', touchModal); self.off('requestcontextmenu', finish); setTimeout(function () { anchor.selfRemove();// }, 10); }; function touchModal(event) { if (event.target.classList && event.target.classList.contains('as-anchor-modal')) { finish(event); } } var vmenu = ContextMenu_({ tag: 'vmenu', props: props, on: { press: onSelectItem || function () { } } }).addTo(anchor); setTimeout(function () { if (!isMobile) { var screenSize = Dom["b" /* default */].getScreenSize(); var menuBound = vmenu.getBoundingClientRect(); if (x + menuBound.width > screenSize.width - 17) { x -= menuBound.width; } if (y + menuBound.height > screenSize.height - 17) { y -= menuBound.height; } anchor.addStyle({ left: x + 'px', top: y + 'px' }); } anchor.addClass('absol-active'); Object(ACore["b" /* $$ */])('VMenuItem'.toLowerCase(), vmenu).forEach(e => { if (e.autoFixParentSize) e.autoFixParentSize(); }); }, 30); setTimeout(function () { document.addEventListener('click', finish) document.addEventListener('contextmenu', finish); self.on('requestcontextmenu', finish); anchor.on('click', touchModal); }, 10) }; ContextCaptor.prototype._checkNeedHandle = function (target) { var current = target; var needHandle = false; while (current && !needHandle && !current.classList.contains('as-system-context-menu')) { if (current.isSupportedEvent && current.isSupportedEvent('contextmenu')) needHandle = true; current = current.parentElement; } return needHandle; }; ContextCaptor.prototype._fireContextMenuEvent = function () { if (this._lastContextSession >= this._pointerSession) return false;// prevent fire multi-times in a pointer session var showed = false; this._lastContextSession = this._pointerSession; var baseEventData = { clientX: this._posCurrent.x, clientY: this._posCurrent.y, target: this.$target }; this.emit('requestcontextmenu', baseEventData, this); var self = this; var propagation = true; var localEvent = Object.assign({ clientX: this._posCurrent.x, clientY: this._posCurrent.y, target: this.$target, showContextMenu: function (props, onSelectItem) { showed = true; self.sync = self.sync.then(function () { return new Promise(function (rs) { setTimeout(function () { self.showContextMenu(self._posCurrent.x, self._posCurrent.y, props, onSelectItem); rs(); }, 30) }); }) }, stopPropagation: function () { propagation = false; } }, baseEventData); Object.defineProperty(localEvent, 'selectedText', { get: function () { return getSelectionText(); } }); var current = this.$target; while (current && propagation) { if (current.isSupportedEvent && current.isSupportedEvent('contextmenu')) { current.emit('contextmenu', localEvent, current, this); } current = current.parentElement; } return showed; }; /** * @type {ContextCaptor} */ ContextCaptor.eventHandler = {}; ContextCaptor.eventHandler.mousedown = function (event) { if (this._touchId != -100) return; this._pointerSession++; var target; var isTouch; var touchId; var posCurrent; var pointer; if (event.type == 'touchstart') { isTouch = true; pointer = event.changedTouches[0]; touchId = pointer.identifier; } else { isTouch = false; touchId = -1; pointer = event; } target = pointer.target; posCurrent = new Math_Vec2(pointer.clientX, pointer.clientY); if (isTouch) { var dragzone = js_BoardTable.prototype._findDragZone(target); if (dragzone) return; var thisCT = this; this._longPressTimeout = setTimeout(function () { if (!thisCT._checkNeedHandle(target)) return; if (thisCT._removeTimeout > 0) { clearTimeout(thisCT._removeTimeout); thisCT._removeTimeout = -1; } thisCT._ss++; thisCT.moveTo(thisCT._posCurrent); thisCT.active(true); thisCT._longPressTimeout = -1; if (thisCT._fireContextMenuTimeout >= 0) { clearTimeout(thisCT._fireContextMenuTimeout); } // show if device not support contextmenu event (after 700ms) thisCT._fireContextMenuTimeout = setTimeout(function () { if (!supportContextEvent) { thisCT._fireContextMenuEvent(); } }, 300); }, 400); this.$target = target; this._isTouch = isTouch; this._touchId = touchId; this._posCurrent = posCurrent; this._posStart = posCurrent; document.addEventListener('touchmove', thisCT.eventHandler.mousemove); document.addEventListener('touchend', thisCT.eventHandler.mousefinish); document.addEventListener('touchcancel', thisCT.eventHandler.mousefinish); } else { if (EventEmitter["b" /* default */].isMouseRight(event) && this._checkNeedHandle(target)) { if (this._removeTimeout > 0) { clearTimeout(this._removeTimeout); this._removeTimeout = -1; } this.$target = target; this._isTouch = isTouch; this._posCurrent = posCurrent; this._posStart = posCurrent; this._touchId = touchId; this._ss++; this.moveTo(this._posCurrent); this.active(true); document.addEventListener('mousemove', this.eventHandler.mousemove); document.addEventListener('mouseup', this.eventHandler.mousefinish); document.addEventListener('mouseleave', this.eventHandler.mousefinish); } } }; /** * @param {Vec2} pos */ ContextCaptor.prototype.moveTo = function (pos) { this.addStyle({ left: pos.x - 80 + 'px', top: pos.y - 80 + 'px' }); }; ContextCaptor.prototype.active = function (flag) { if (flag) this.addClass('absol-active'); else this.removeClass('absol-active'); }; ContextCaptor.eventHandler.mousemove = function (event) { var isTouch = this._isTouch; var touchId; var pointer; var posCurrent; if (isTouch) { pointer = event.changedTouches[0]; touchId = pointer.identifier; } else { isTouch = false; touchId = -1; pointer = event; } if (touchId != this._touchId) return; posCurrent = new Math_Vec2(pointer.clientX, pointer.clientY); this._posCurrent = posCurrent; if (isTouch) { if (this._posStart.sub(posCurrent).abs() > 10) this.eventHandler.mousefinish(event); } this.moveTo(posCurrent); }; ContextCaptor.eventHandler.mousefinish = function (event) { var isTouch = this._isTouch; var touchId; var pointer; if (isTouch) { pointer = event.changedTouches[0]; touchId = pointer.identifier; } else { isTouch = false; touchId = -1; pointer = event; } if (touchId != this._touchId) return; if (isTouch) { document.removeEventListener('touchmove', this.eventHandler.mousemove); document.removeEventListener('touchend', this.eventHandler.mousefinish); document.removeEventListener('touchcancel', this.eventHandler.mousefinish); if (this._longPressTimeout > 0) { clearTimeout(this._longPressTimeout); this._longPressTimeout = -1; } } else { document.removeEventListener('mousemove', this.eventHandler.mousemove); document.removeEventListener('mouseup', this.eventHandler.mousefinish); document.removeEventListener('mouseleave', this.eventHandler.mousefinish); } this._touchId = -100; if (this._fireContextMenuTimeout >= 0) { clearTimeout(this._fireContextMenuTimeout); } var thisCT = this; this._removeTimeout = setTimeout(function () { thisCT.active(false); thisCT._removeTimeout = -1; }, 1); }; ContextCaptor.eventHandler.contextmenu = function (event) { supportContextEvent = true; event.preventDefault(); this._fireContextMenuEvent(); }; ContextCaptor.auto = function () { if (ContextCaptor.$elt) return; ContextCaptor.$elt = ContextMenu_('contextcaptor'); Dom["b" /* default */].documentReady.then(function () { ContextCaptor.$elt.addTo(document.body); ContextCaptor.$elt.attachTo(document.body); }); }; ACore["d" /* default */].install(ContextCaptor); /* harmony default export */ var ContextMenu = (ContextCaptor); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/dateinput.css var dateinput = __webpack_require__(43); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateInput.js var DateInput_ = ACore["d" /* default */]._; var DateInput_$ = ACore["d" /* default */].$; /** * @extends AElement * @constructor */ function DateInput() { this._lastValue = null; this._value = null; this._format = 'dd/mm/yyyy'; this.$input = DateInput_$('input', this) .on('mouseup', this.eventHandler.mouseup) .on('keydown', this.eventHandler.keydown) .on('paste', this.eventHandler.paste) .on('cut', this.eventHandler.cut) .on('focus', this.eventHandler.focus); this._minLimitDate = new Date(1890, 0, 1, 0, 0, 0, 0); this._maxLimitDate = new Date(2090, 0, 1, 0, 0, 0, 0); this.$calendarBtn = DateInput_$('.as-date-input-icon-ctn', this) .on('mousedown', this.eventHandler.mousedownCalendarBtn); this._calendarHolder = js_ChromeCalendar.showWhenClick(this.$calendarBtn, { minLimitDate: this._minLimitDate, maxLimitDate: this._maxLimitDate, selectedDates: [new Date()], }, 'auto', this.eventHandler.calendarSelect); this._calendarHolder.element = this; this._formater = DateInput.formaters[this._format]; OOP["a" /* default */].drillProperty(this, this._calendarHolder.calendarProps, ['minLimitDate', 'maxLimitDate']); this.value = null; } DateInput.formaters = { 'dd/mm/yyyy': { separator: '/', nan: ['dd', 'mm', 'yyyy'], dayIdx: 0, monthIdx: 1, yearIdx: 2 }, 'dd-mm-yyyy': { separator: '-', nan: ['dd', 'mm', 'yyyy'], dayIdx: 0, monthIdx: 1, yearIdx: 2 }, 'dd.mm.yyyy': { separator: '.', nan: ['dd', 'mm', 'yyyy'], dayIdx: 0, monthIdx: 1, yearIdx: 2 }, 'yyyy/mm/dd': { separator: '/', nan: ['yyyy', 'mm', 'dd'], dayIdx: 2, monthIdx: 1, yearIdx: 0 }, 'yyyy-mm-dd': { separator: '-', nan: ['yyyy', 'mm', 'dd'], dayIdx: 2, monthIdx: 1, yearIdx: 0 }, 'mm/dd/yyyy': { separator: '/', nan: ['mm', 'dd', 'yyyy'], dayIdx: 1, monthIdx: 0, yearIdx: 2 }, }; DateInput.tag = 'dateinput'; DateInput.render = function () { //only support dd/mm/yyyy return DateInput_({ class: 'as-date-input', extendEvent: ['change'], child: [{ tag: 'input', props: { value: '__/__/____' } }, { tag:'button', class: 'as-date-input-icon-ctn', child: 'span.mdi.mdi-calendar' } ] }); }; DateInput.prototype._autoSelect = function () { var slEnd = this.$input.selectionEnd; var slStart = this.$input.selectionStart; var texts = this.$input.value.split(this._formater.separator); var lTexts = texts.reduce(function (ac, cr) { ac.push(ac[ac.length - 1] + cr.length + 1); return ac; }, [0]); function indexOf(offset) { var l; for (var i = 0; i < lTexts.length; ++i) { l = lTexts[i]; if (l > offset) return i; } return texts.length; } var i0 = indexOf(slStart); var i1 = indexOf(slEnd); if (i0 == i1) { this.$input.selectionStart = lTexts[i0 - 1]; this.$input.selectionEnd = lTexts[i0] - 1; } else { this.$input.selectionStart = 0; this.$input.selectionEnd = lTexts[lTexts.length - 1]; } }; DateInput.prototype.notifyChange = function () { this.emit('change', { type: 'change', target: this, value: this._value }, this); } DateInput.prototype._countSeparator = function (text) { return text.replace(new RegExp('[^\\' + this._formater.separator + ']', 'g'), '').length }; DateInput.prototype._cleanCharacter = function (text) { return text.replace(new RegExp('[^0-9\\' + this._formater.separator + ']', 'g'), ''); }; DateInput.prototype._splitBySeparator = function (text) { return text.split(this._formater.separator); }; DateInput.prototype._onlySeparator = function (text) { return text.replace(new RegExp('[^\\' + this._formater.separator + ']', 'g'), '') }; DateInput.prototype._isAcceptKey = function (key) { return !!key.match(new RegExp('[0-9\\' + this._formater.separator + ']', 'i')); }; /** * @type {DateInput} */ DateInput.eventHandler = {}; DateInput.eventHandler.paste = function (event) { var paste = (event.clipboardData || window.clipboardData).getData('text'); event.preventDefault(); paste = this._cleanCharacter(paste); var slEnd = this.$input.selectionEnd; var slStart = this.$input.selectionStart; var sStart = Math.min(slStart, slEnd); var sEnd = Math.max(slEnd, slStart); var value = this.$input.value; var slashPasteCount = this._countSeparator(paste) var slashSelectedCount = this._countSeparator(value.substr(sStart, sEnd - sStart)); if (slashPasteCount < 2) { if (slashPasteCount > slashSelectedCount) { paste = this._splitBySeparator(paste).slice(0, slashSelectedCount + 1).join(this._formater.separator); } else if (slashPasteCount < slashSelectedCount) { paste += this._formater.separator.repeat(slashSelectedCount - slashPasteCount); } slStart = (value.substr(0, sStart) + paste).length; slEnd = slStart; value = value.substr(0, sStart) + paste + value.substr(sEnd); } else { value = this._splitBySeparator(paste).slice(0, 3).join(this._formater.separator); slStart = value.length; slEnd = value.length; } this.$input.value = value; this.$input.selectionStart = slStart; this.$input.selectionEnd = slEnd; }; DateInput.eventHandler.cut = function (event) { event.preventDefault(); var slEnd = this.$input.selectionEnd; var slStart = this.$input.selectionStart; var sStart = Math.min(slStart, slEnd); var sEnd = Math.max(slEnd, slStart); var value = this.$input.value; this.$input.value = value.substr(0, sStart) + this._onlySeparator(value.substr(sStart, sEnd - sStart)) + value.substr(sEnd); this.$input.selectionStart = slStart; this.$input.selectionEnd = slStart; }; DateInput.eventHandler.mouseup = function () { setTimeout(this._autoSelect.bind(this), 1); }; DateInput.eventHandler.focus = function () { this.$input.on('blur', this.eventHandler.blur); }; DateInput.eventHandler.blur = function () { var thisIp = this; this.$input.off('blur', this.eventHandler.blur); var value = this.$input.value; var slashValueCount = this._countSeparator(value).length; for (var i = slashValueCount; i < 2; ++i) value += this._formater.separator; var texts = value.split(this._formater.separator).slice(0, 3); var day = parseInt(texts[this._formater.dayIdx]); var month = parseInt(texts[this._formater.monthIdx]); var year = parseInt(texts[this._formater.yearIdx]); if (!isNaN(year)) year = Math.min(2090, Math.max(year, 1890)); if (!isNaN(month)) month = Math.max(1, Math.min(12, month)); if (!isNaN(day)) { day = Math.max(1, Math.min(31, day)); if (!isNaN(month)) { day = Math.min(daysInMonth(2000, month), day); if (!isNaN(year)) day = Math.min(daysInMonth(year, month), day); } } if (!isNaN(year) && !isNaN(month) && !isNaN(day)) { var dateValue = new Date(year, month - 1, day, 0, 0, 0, 0); if (this._lastValue == null || compareDate(dateValue, this._lastValue) != 0) { this.value = dateValue; this.notifyChange(); } } else { var values = this._formater.nan.slice(); values[this._formater.dayIdx] = day; values[this._formater.monthIdx] = month; values[this._formater.yearIdx] = year; this.$input.value = values.map(function (e, i) { if (isNaN(e)) return thisIp._formater.nan[i]; e = e + ''; while (e.length < thisIp._formater.nan[i].length) e = '0' + e; return e; }).join(this._formater.separator); if (this._lastValue != null) { this._value = null; this.notifyChange(); } } }; DateInput.eventHandler.calendarSelect = function (value) { this.value = value; this.notifyChange(); }; DateInput.eventHandler.keydown = function (event) { var slEnd = this.$input.selectionEnd; var slStart = this.$input.selectionStart; var value = this.$input.value; var sStart = Math.min(slStart, slEnd); var sEnd = Math.max(slEnd, slStart); var selectedValue = value.substr(sStart, sEnd - sStart); var slashValueCount = this._countSeparator(value); var slashSelectedCount = this._countSeparator(selectedValue); var texts = this._splitBySeparator(value); var lTexts = texts.reduce(function (ac, cr) { ac.push(ac[ac.length - 1] + cr.length + 1); return ac; }, [0]); function indexOf(offset) { var l; for (var i = 0; i < lTexts.length; ++i) { l = lTexts[i]; if (l > offset) return i; } return texts.length; } var i0 = indexOf(slStart); var i1 = indexOf(slEnd); if (event.key == 'Enter') { event.preventDefault(); this.$input.blur(); } else if (event.key == 'Meta') { event.preventDefault(); } else if (event.key == 'Backspace') { if (slStart == slEnd) { if (slStart > 0) { if (value.charAt(slStart - 1) == this._formater.separator) { event.preventDefault(); this.$input.value = value; this.$input.selectionStart = slStart - 1; this.$input.selectionEnd = slStart - 1; } } } else if (i0 != i1) { event.preventDefault(); this.$input.value = value.substr(0, sStart) + this._onlySeparator(selectedValue) + value.substr(sEnd); this.$input.selectionStart = slStart; this.$input.selectionEnd = slStart; } } else if (event.key == 'Delete') { if (slStart == slEnd) { if (slStart < value.length) { if (value.charAt(slStart) == this._formater.separator) { event.preventDefault(); this.$input.value = value; this.$input.selectionStart = slStart + 1; this.$input.selectionEnd = slStart + 1; } } } else if (i0 != i1) { event.preventDefault(); this.$input.value = value.substr(0, sStart) + this._onlySeparator(selectedValue) + value.substr(sEnd); this.$input.selectionStart = slStart; this.$input.selectionEnd = slStart; } } else if (!event.ctrlKey && !event.altKey && event.key && event.key.length == 1) { if (this._isAcceptKey(event.key)) { if (event.key == this._formater.separator) { if (slashSelectedCount == 0 && slashValueCount >= 2 && value.charAt(slEnd) != this._formater.separator) { event.preventDefault(); } else if (value.charAt(slEnd) == this._formater.separator) { event.preventDefault(); this.$input.selectionStart = lTexts[i1]; this.$input.selectionEnd = lTexts[i1 + 1] - 1; } } } else { event.preventDefault(); } } else if (!event.ctrlKey && !event.altKey && event.key == "Tab") { if (event.shiftKey) { if (i0 > 1) { event.preventDefault(); this.$input.selectionStart = lTexts[i1 - 2]; this.$input.selectionEnd = lTexts[i1 - 1] - 1; } } else { if (i1 < texts.length) { event.preventDefault(); this.$input.selectionStart = lTexts[i1]; this.$input.selectionEnd = lTexts[i1 + 1] - 1; } } } }; DateInput.property = {}; DateInput.property.value = { set: function (value) { if (value === false || value === null || value === undefined) { this.$input.value = this._format; this._value = null; } else if ((typeof value == 'string') || (typeof value == 'number')) { this._value = beginOfDay(new Date(value)); this.$input.value = formatDateString(this._value, this._format); } else if (value.getTime) { this._value = beginOfDay(value); this.$input.value = formatDateString(this._value, this._format); } this._lastValue = this._value; this._calendarHolder.calendarProps.selectedDates = [this._value || new Date()]; }, get: function () { return this._value; } }; DateInput.property.format = { set: function (value) { value = value || 'dd/mm/yyyy'; if (value == this._format) return; if (DateInput.formaters[value]) { this._formater = DateInput.formaters[value]; this._format = value; this.value = this.value; } else { throw new Error("Not support format " + value); } }, get: function () { return this._format; } }; DateInput.property.disabled = { set: function (value) { value = !!value; this.$input.disabled = value; if (value) this.addClass('as-disabled'); else this.removeClass('as-disabled'); }, get: function () { return this.$input.disabled; } }; ACore["d" /* default */].install(DateInput); /* harmony default export */ var js_DateInput = (DateInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/datetimeinput.css var datetimeinput = __webpack_require__(118); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/chrometimepicker.css var chrometimepicker = __webpack_require__(44); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ChromeTimePicker.js /*** * @extends AElement * @constructor */ function ChromeTimePicker() { this._hour = null; this._minute = null; OOP["a" /* default */].drillProperty(this, this, 'dayOffset', 'value'); this.$lists = Object(ACore["b" /* $$ */])('.as-chrome-time-picker-list', this); this.$hourList = this.$lists[0]; this.$hourList.on('scroll', this.eventHandler.hourScroll) .on('click', this.eventHandler.clickHourList); this.$hour24List = this.$lists[1]; this.$hour24List.on('scroll', this.eventHandler.hour24Scroll) .on('click', this.eventHandler.clickHour24List); this.$minList = this.$lists[2]; this.$minList.on('scroll', this.eventHandler.minScroll) .on('click', this.eventHandler.clickMinList); this.$attachhook = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](this.$attachhook) .on('request_scroll_into_selected', this._scrollIntoSelected.bind(this)); this.$amBtn = Object(ACore["a" /* $ */])('.as-chrome-time-picker-btn[data-value="AM"]', this) .on('click', this.eventHandler.clickAM); this.$pmBtn = Object(ACore["a" /* $ */])('.as-chrome-time-picker-btn[data-value="PM"]', this) .on('click', this.eventHandler.clickPM); this.scrollIntoSelected(); this.hour = null; this.minute = null; this.s24 = false; Object(ACore["b" /* $$ */])('.as-chrome-time-picker-scroller', this).forEach(this._makeScroller.bind(this)); /*** * @memberOf ChromeTimePicker# * @type {number} * @name min */ } ChromeTimePicker.tag = 'ChromeTimePicker'.toLowerCase(); ChromeTimePicker.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-chrome-time-picker', extendEvent: ['change'], child: [ { class: ['as-chrome-time-picker-scroller', 'as-chrome-time-picker-scroller-h12'], child: [ {tag: 'button', class: 'as-chrome-time-picker-scroller-up', child: 'span.mdi.mdi-chevron-up'}, {tag: 'button', class: 'as-chrome-time-picker-scroller-down', child: 'span.mdi.mdi-chevron-down'}, { class: ['as-chrome-time-picker-viewport', 'as-chrome-time-picker-h12'], child: { class: 'as-chrome-time-picker-list', child: Array(36).fill(0).map(function (u, i) { return { tag: 'button', class: 'as-chrome-time-picker-btn', child: { tag: 'span', child: {text: (i % 12) + 1 + ''} }, props: { __hour__: (i % 12) + 1 } } }) } }] }, { class: ['as-chrome-time-picker-scroller', 'as-chrome-time-picker-scroller-h24'], child: [ {tag: 'button', class: 'as-chrome-time-picker-scroller-up', child: 'span.mdi.mdi-chevron-up'}, {tag: 'button', class: 'as-chrome-time-picker-scroller-down', child: 'span.mdi.mdi-chevron-down'}, { class: ['as-chrome-time-picker-viewport', 'as-chrome-time-picker-h24'], child: { class: 'as-chrome-time-picker-list', child: Array(24 * 3).fill(0).map(function (u, i) { return { tag: 'button', class: 'as-chrome-time-picker-btn', child: { tag: 'span', child: {text: (i % 24) + ''} }, props: { __hour__: (i % 24) } } }) } }] }, { class: 'as-chrome-time-picker-scroller', child: [ {tag: 'button', class: 'as-chrome-time-picker-scroller-up', child: 'span.mdi.mdi-chevron-up'}, {tag: 'button', class: 'as-chrome-time-picker-scroller-down', child: 'span.mdi.mdi-chevron-down'}, { class: 'as-chrome-time-picker-viewport', child: { class: 'as-chrome-time-picker-list', child: Array(180).fill(0).map(function (u, i) { return { tag: 'button', class: 'as-chrome-time-picker-btn', child: { tag: 'span', child: {text: (i % 60) + ''} }, props: { __min__: (i % 60) } } }) } }] }, { class: ['as-chrome-time-picker-viewport', 'as-chrome-time-picker-period'], child: ['AM', 'PM'].map(function (u,) { return { tag: 'button', class: 'as-chrome-time-picker-btn', attr: { 'data-value': u }, child: { tag: 'span', child: {text: u} }, props: { __APM__: u } } }) } ] }); }; ChromeTimePicker.prototype._makeScroller = function (rootElt) { var upBtn = Object(ACore["a" /* $ */])('.as-chrome-time-picker-scroller-up', rootElt); var downBtn = Object(ACore["a" /* $ */])('.as-chrome-time-picker-scroller-down', rootElt); var listElt = Object(ACore["a" /* $ */])('.as-chrome-time-picker-list', rootElt); var delta = 0; function tick() { if (delta === 0) return; listElt.scrollTop -= delta; requestAnimationFrame(tick); } function cancel() { delta = 0; document.body.removeEventListener('mouseup', cancel); document.body.removeEventListener('mouseleave', cancel); } upBtn.on('mousedown', function () { delta = 5; document.body.addEventListener('mouseup', cancel); document.body.addEventListener('mouseleave', cancel); tick(); }); downBtn.on('mousedown', function () { delta = -5; document.body.addEventListener('mouseup', cancel); document.body.addEventListener('mouseleave', cancel); tick(); }); }; ChromeTimePicker.prototype.scrollIntoSelected = function () { this.domSignal.emit('request_scroll_into_selected'); }; ChromeTimePicker.prototype._scrollIntoSelected = function () { var hour = this._hour; this.$hour24List.scrollTop = (hour + 24) * 28; hour = this._hour % 12; if (hour === 0) hour = 12; this.$hourList.scrollTop = (hour + 11) * 28; this.$minList.scrollTop = (this._minute + 60) * 28; }; ChromeTimePicker.prototype.notifyChange = function (event) { this.emit('change', { type: 'change', originEvent: event, dayOffset: this.dayOffset, hour: this.hour, minute: this.minute, target: this }, this); } ChromeTimePicker.property = {}; ChromeTimePicker.property.hour = { set: function (value) { if (isRealNumber(value)) { value = Math.min(23, Math.max(0, Math.floor(value) % 24)); } else { value = null; } var prevVal = this._hour; if (prevVal !== null) { this.$hour24List.childNodes[prevVal].removeClass('as-selected'); this.$hour24List.childNodes[prevVal + 24].removeClass('as-selected'); this.$hour24List.childNodes[prevVal + 48].removeClass('as-selected'); prevVal = this._hour % 12; if (prevVal === 0) prevVal = 12; this.$hourList.childNodes[prevVal - 1].removeClass('as-selected'); this.$hourList.childNodes[prevVal - 1 + 12].removeClass('as-selected'); this.$hourList.childNodes[prevVal - 1 + 24].removeClass('as-selected'); } this._hour = value; prevVal = this._hour; if (prevVal !== null) { this.$hour24List.childNodes[prevVal].addClass('as-selected'); this.$hour24List.childNodes[prevVal + 24].addClass('as-selected'); this.$hour24List.childNodes[prevVal + 48].addClass('as-selected'); prevVal = this._hour % 12; if (prevVal === 0) prevVal = 12; this.$hourList.childNodes[prevVal - 1].addClass('as-selected'); this.$hourList.childNodes[prevVal - 1 + 12].addClass('as-selected'); this.$hourList.childNodes[prevVal - 1 + 24].addClass('as-selected'); if (this._hour >= 12) { this.$pmBtn.addClass('as-selected'); this.$amBtn.removeClass('as-selected'); } else { this.$amBtn.addClass('as-selected'); this.$pmBtn.removeClass('as-selected'); } } else { this.$pmBtn.removeClass('as-selected'); this.$amBtn.removeClass('as-selected'); } }, get: function () { return this._hour; } }; ChromeTimePicker.property.minute = { set: function (value) { if (isRealNumber(value)) { value = Math.min(59, Math.max(0, Math.floor(value) % 60)); } else { value = null; } var prevVal = this._minute; if (prevVal !== null) { this.$minList.childNodes[prevVal].removeClass('as-selected'); this.$minList.childNodes[prevVal + 60].removeClass('as-selected'); this.$minList.childNodes[prevVal + 120].removeClass('as-selected'); } this._minute = value; prevVal = this._minute; if (prevVal !== null) { this.$minList.childNodes[prevVal].addClass('as-selected'); this.$minList.childNodes[prevVal + 60].addClass('as-selected'); this.$minList.childNodes[prevVal + 120].addClass('as-selected'); } }, get: function () { return this._minute; } }; ChromeTimePicker.property.value = { set: function (value) { if (!isRealNumber(value) && !(value instanceof Date)) { value = null; } if (value && value.getTime) { value = value.getTime() - beginOfDay(value).getTime(); if (!isRealNumber(value)) value = null; } else if (isRealNumber(value)) { value = Math.min(MILLIS_PER_DAY - 1, Math.max(0, value % MILLIS_PER_DAY)); } if (isRealNumber(value)) { this.hour = Math.floor(value / MILLIS_PER_HOUR); this.minute = Math.floor((value % MILLIS_PER_HOUR) / MILLIS_PER_MINUTE); } else { this.hour = null; this.minute = null; } this.domSignal.emit('request_scroll_into_selected'); }, get: function () { var res = this._hour * MILLIS_PER_HOUR + this._minute * MILLIS_PER_MINUTE; return isRealNumber(res) ? res : null; } }; ChromeTimePicker.property.min = { set: function (value){ }, get: function (){ } }; ChromeTimePicker.property.s24 = { set: function (value) { if (value) { this.addClass('as-24h-clock'); } else { this.removeClass('as-24h-clock'); } }, get: function () { return this.hasClass('as-24h-clock'); } } ChromeTimePicker.eventHandler = {}; ChromeTimePicker.eventHandler.hourScroll = function () { var y = this.$hourList.scrollTop; var dy = 0; if (y < 28 * 12) dy = 28 * 12; else if (y > 28 * 24) { dy = -28 * 12; } if (dy !== 0) { this.$hourList.scrollTop += dy; } }; ChromeTimePicker.eventHandler.hour24Scroll = function () { var y = this.$hour24List.scrollTop; var dy = 0; if (y < 28 * 24) dy = 28 * 24; else if (y > 28 * 48) { dy = -28 * 24; } if (dy !== 0) { this.$hour24List.scrollTop += dy; } }; ChromeTimePicker.eventHandler.minScroll = function () { var y = this.$minList.scrollTop; var dy = 0; if (y < 28 * 60) dy = 28 * 60; else if (y > 28 * 120) { dy = -28 * 60; } if (dy !== 0) { this.$minList.scrollTop += dy; } }; ChromeTimePicker.eventHandler.clickHourList = function (event) { var hour; if ('__hour__' in event.target) hour = event.target.__hour__; if ('__hour__' in event.target.parentElement) hour = event.target.parentElement.__hour__; if (hour !== undefined) { if (this.hour >= 12) { this.hour = hour === 12 ? hour : hour + 12; } else { this.hour = hour === 12 ? 0 : hour; } if ((hour - 1 + 12) * 28 < this.$hourList.scrollTop) { this.$hourList.scrollTop = (hour - 1 + 12) * 28; } else if (((hour - 1 + 13) * 28) > this.$hourList.scrollTop + this.$hourList.clientHeight) { this.$hourList.scrollTop = (hour - 1 + 13) * 28 - this.$hourList.clientHeight; } this.notifyChange(event); } }; ChromeTimePicker.eventHandler.clickHour24List = function (event) { var hour; if ('__hour__' in event.target) hour = event.target.__hour__; if ('__hour__' in event.target.parentElement) hour = event.target.parentElement.__hour__; if (hour !== undefined) { this.hour = hour; if ((hour + 24) * 28 < this.$hourList.scrollTop) { this.$hourList.scrollTop = (hour + 24) * 28; } else if (((hour + 24) * 28) > this.$hourList.scrollTop + this.$hourList.clientHeight) { this.$hourList.scrollTop = (hour + 24) * 28 - this.$hourList.clientHeight; } this.notifyChange(event); } }; ChromeTimePicker.eventHandler.clickMinList = function (event) { var min; if ('__min__' in event.target) min = event.target.__min__; if ('__min__' in event.target.parentElement) min = event.target.parentElement.__min__; if (min !== undefined) { this.minute = min; if ((min + 60) * 28 < this.$minList.scrollTop) { this.$minList.scrollTop = (min + 60) * 28; } else if (((min + 61) * 28) > this.$minList.scrollTop + this.$minList.clientHeight) { this.$minList.scrollTop = (min + 61) * 28 - this.$minList.clientHeight; } this.notifyChange(event); } }; ChromeTimePicker.eventHandler.clickPM = function (event) { if (isRealNumber(this.hour)) { if (this.hour < 12) this.hour += 12; } else { this.hour = 12; } this.notifyChange(event); }; ChromeTimePicker.eventHandler.clickAM = function (event) { if (isRealNumber(this.hour)) { if (this.hour >= 12) this.hour -= 12; } else { this.hour = 0; } this.notifyChange(event); }; ACore["d" /* default */].install(ChromeTimePicker); /* harmony default export */ var js_ChromeTimePicker = (ChromeTimePicker); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/follower.css var follower = __webpack_require__(121); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Follower.js var Follower_ = ACore["d" /* default */]._; var Follower_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function Follower() { this.$attachhook = Follower_('attachhook', this) .addTo(this) .on('attached', function () { this.requestUpdateSize(); Dom["b" /* default */].addToResizeSystem(this); }); this.$attachhook.requestUpdateSize = this.updatePosition.bind(this); this.$followTarget = undefined; this.$scrollTrackElts = []; this._scrollTrackEventHandler = undefined; this._anchor = Follower.ANCHOR_PRIORITY; this.defineEvent(['updateposition', 'preupdateposition']); /*** * @name followTarget * @type {AElement} * @memberOf Follower# */ } Follower.tag = 'Follower'.toLowerCase(); Follower.render = function () { return Follower_('.absol-follower'); }; Follower.prototype.clearChild = function () { var children = Array.prototype.slice.call(this.children); var attachhookElt = this.$attachhook; children.forEach(function (elt) { if (elt != attachhookElt) elt.remove(); }); } //Todo: remove child, find child.... /** * X = $target.x + F[anchor_index][0] * $target.width + F[anchor_index][1] * $content.width * Y = $target.y + F[anchor_index][2] * $target.height + F[anchor_index][3] * $content.height */ Follower.ANCHOR_FACTORS = [ [1, 0, 0, 0],//0 [0, 0, 1, 0],//1 [1, -1, 1, 0],//2 [0, -1, 0, 0],//3 [0, -1, 1, -1],//4 [1, -1, 0, -1],//5 [0, 0, 0, -1],//6 [1, 0, 1, -1],//7 [1, 0, 0.5, -0.5],//8 [0.5, -0.5, 1, 0],//9 [0, -1, 0.5, -0.5],//10 [0.5, -0.5, 0, -1],//11 [1, 0, 1, 0],//12 [0, -1, 1, 0],//13 [0, -1, 0, -1],//14 [1, 0, 0, -1],//15 ]; Follower.ANCHOR_PRIORITY = [1, 6, 2, 5, 0, 7, 3, 4, 9, 11, 8, 10, 12, 15, 13, 14]; Follower.prototype.updatePosition = function () { if (!this.$followTarget) return; this.emit('preupdateposition', { target: this }, this); var targetBound = this.$followTarget.getBoundingClientRect(); var screenSize = Dom["b" /* default */].getScreenSize(); var outRect = new Math_Rectangle(0, 0, screenSize.width, screenSize.height); var bound = this.getBoundingClientRect(); var x = 0; var y = 0; var score; var anchors = this._lastAnchor === undefined ? this.anchor : [this._lastAnchor].concat(this.anchor); var factor; var bestX, bestY, bestScore = -100000; var newContentRect; var bestAnchor; for (var i = 0; i < anchors.length; ++i) { factor = Follower.ANCHOR_FACTORS[anchors[i]]; x = targetBound.left + factor[0] * targetBound.width + factor[1] * bound.width; y = targetBound.top + factor[2] * targetBound.height + factor[3] * bound.height; newContentRect = new Math_Rectangle(x, y, bound.width, bound.height); score = newContentRect.collapsedSquare(outRect); if (score - 10 > bestScore) { bestAnchor = anchors[i]; bestScore = score; bestX = x; bestY = y; } } if (this._lastAnchor !==bestAnchor){ this.removeClass('as-anchor-'+ this._lastAnchor); this._lastAnchor = bestAnchor; this.addClass('as-anchor-'+ this._lastAnchor); } this.addStyle({ left: bestX + 'px', top: bestY + 'px' }); this.emit('updateposition', { target: this }, this); }; Follower.prototype.refollow = function () { if (!this.$followTarget) return; this.updatePosition(); this.addClass('following'); if (this._scrollTrackEventHandler) this.unfollow(); this._scrollTrackEventHandler = this.updatePosition.bind(this); this.$scrollTrackElts = []; var trackElt = this.$followTarget; while (trackElt) { if (trackElt.addEventListener) trackElt.addEventListener('scroll', this._scrollTrackEventHandler, false); else trackElt.attachEvent('onscroll', this._scrollTrackEventHandler, false); this.$scrollTrackElts.push(trackElt); trackElt = trackElt.parentElement; } if (document.addEventListener) { document.addEventListener('scroll', this._scrollTrackEventHandler, false); } else { document.attachEvent('onscroll', this._scrollTrackEventHandler, false); } this.$scrollTrackElts.push(document); }; Follower.prototype.unfollow = function () { if (!this._scrollTrackEventHandler) return;// nothing to do this.removeClass('following'); var trackElt; for (var i = 0; i < this.$scrollTrackElts.length; ++i) { trackElt = this.$scrollTrackElts[i]; if (trackElt.removeEventListener) trackElt.removeEventListener('scroll', this._scrollTrackEventHandler, false); else trackElt.dettachEvent('onscroll', this._scrollTrackEventHandler, false); } this.$scrollTrackElts = []; this._scrollTrackEventHandler = undefined; }; Follower.property = {}; Follower.property.followTarget = { set: function (elt) { if (elt === null || elt === undefined || !elt) { this.unfollow(); this.$followTarget = undefined; return; } else if (typeof elt == 'string') { elt = Follower_$(elt) || document.getElementById(elt); } if (Dom["b" /* default */].isDomNode(elt)) { this.$followTarget = elt; this._lastAncho = undefined; this.refollow(); } else throw new Error("Invalid element"); }, get: function () { return this.$followTarget; } } Follower.property.anchor = { set: function (value) { value = value || Follower.ANCHOR_PRIORITY; if (value == 'auto') value = Follower.ANCHOR_PRIORITY; if (typeof value == null) value = [value]; if (!(value instanceof Array)) throw new Error('Invalid anchor ' + value); value = value.map(function (x) { x = Math.floor(x); if (x >= 0 && x < Follower.ANCHOR_FACTORS.length) { return x; } else throw new Error("Invalid anchor: " + x); }); this._anchor = value; this._lastAnchor = undefined; this.updatePosition(); }, get: function () { return this._anchor; } } ACore["d" /* default */].install(Follower); /* harmony default export */ var js_Follower = (Follower); // CONCATENATED MODULE: ./node_modules/absol/src/Input/keyboard.js function isFnKey(name) { return name.match(/^[fF]([2-9]|(1([0-2]?)))$/) } function isSpaceKey(name) { return name === ' ' || name.match(/^[sS]pace$/); } function isCtrlKey(name) { return name.match(/(^([cC]ontrol)|ctrl)$/); } function isAltKey(name) { return name.match(/^[aA]lt$/); } function isShiftKey(name) { return name.match(/^[sS]hift$/); } function isMetaKey(name) { return name.toLowerCase().match(/^(command|windows|meta)$/); } /*** * * @param {string} text * @return {string} */ function normalizeKeyBindingIdent(text) { var keys = text.trim().toLowerCase().split(/[-+\s_.]+/) .filter(function (w) { return w.length > 0; }); var values = { meta: 1, ctrl: 2, alt: 3, shift: 4 }; keys.sort(function (a, b) { var va, vb; va = values[a] || 100; vb = values[b] || 100; return va - vb; }); return keys.join('-'); } /*** * * @param {KeyboardEvent} event * @return {string} */ function keyboardEventToKeyBindingIdent(event) { var keys = []; if (event.metaKey) { keys.push('meta'); } if (event.ctrlKey) keys.push('ctrl'); if (event.altKey) keys.push('alt'); if (event.shiftKey) keys.push('shift'); if (isSpaceKey(event.key)) { keys.push('space'); } else if (isFnKey(event.key)) { keys.push(event.key.toLowerCase()) } else if (!isMetaKey(event.key) && !isAltKey(event.key) && !isCtrlKey(event.key) && !isShiftKey(event.key)) keys.push(event.key.toLowerCase()); return keys.join('-'); } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateTimeInput.js var STATE_NEW = 1; var STATE_EDITED = 2; var STATE_NONE = 0; /*** * @extends AElement * @constructor */ function DateTimeInput() { this._editingData = {}; this._value = null; this._min = new Date(1890, 0, 1); this._max = new Date(new Date(2090, 0, 1).getTime() - 1); this._format = 'dd/MM/yyyy hh:mm a'; this.$attachhook = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](this.$attachhook); this.domSignal.on('request_auto_select', this._autoSelect.bind(this)); /*** * * @type {HTMLInputElement | AElement} */ this.$text = Object(ACore["a" /* $ */])('.as-date-time-input-text', this) .on('mousedown', this.eventHandler.mouseDownInput) .on('mouseup', this.eventHandler.mouseUpInput) .on('dblclick', this.eventHandler.dblclickInput) .on('keydown', this.eventHandler.keydown) .on('blur', this.eventHandler.inputBlur) .on('contextmenu', function (event) { event.preventDefault(); }); this.$pickerBtn = Object(ACore["a" /* $ */])('.as-date-time-input-icon-btn', this) .on('click', this.eventHandler.clickPickerBtn); this.$clearBtn = Object(ACore["a" /* $ */])('button.as-time-input-clear-btn', this) .on('click', this.clear.bind(this)); this.notNull = false; this.min = this._min; this.max = this._max; } DateTimeInput.tag = 'DateTimeInput'.toLowerCase(); //calendar-clock DateTimeInput.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['change'], class: 'as-date-time-input', child: [ { tag: 'input', class: 'as-date-time-input-text', attr: { ondrop: "return false;" }, props: { value: 'dd/MM/yyyy hh:mm a' } }, { tag: 'button', class: 'as-time-input-clear-btn', child: 'span.mdi.mdi-close-circle' }, { tag: 'button', class: 'as-date-time-input-icon-btn', child: 'span.mdi.mdi-calendar-clock' } ] }); }; DateTimeInput.prototype.tokenRegex = /([^.\/:\-,\\\s]+)|([.\/:\-,\\]+)/i; /*** * * @param start * @returns {null|{ident: string, length: number, sourceText: string, replace: function(s: string, selecting:boolean):void, text: string, idx: number, elt: (HTMLInputElement|absol.AElement)}} */ DateTimeInput.prototype._tokenAt = function (start) { var rgx = new RegExp(this.tokenRegex.source, 'g'); var rgxFormat = new RegExp(this.tokenRegex.source, 'g'); var s = this.$text.value; var format = this._format; var tokenMatched = rgx.exec(s); var formatToken = rgxFormat.exec(format); var tokenMatchedList = []; var formatTokenList = []; var text, ident; var idx; while (tokenMatched && formatToken) { text = tokenMatched[1]; ident = formatToken[1]; if (text && isDateTimeFormatToken(ident)) { tokenMatchedList.push(tokenMatched); formatTokenList.push(formatToken); } tokenMatched = rgx.exec(s); formatToken = rgxFormat.exec(format); } var bestI = -1; var bestD = Infinity; var d; for (var i = 0; i < tokenMatchedList.length; ++i) { tokenMatched = tokenMatchedList[i]; formatToken = formatTokenList[i]; text = tokenMatched[1]; idx = tokenMatched.index; d = Math.min(Math.abs(start - idx), Math.abs(start - (idx + text.length))); if (d < bestD) { bestD = d; bestI = i; } } if (bestI >= 0) { tokenMatched = tokenMatchedList[bestI]; formatToken = formatTokenList[bestI]; text = tokenMatched[1]; ident = formatToken[1]; idx = tokenMatched.index; return { idx: idx, text: text, length: text.length, ident: ident, elt: this.$text, sourceText: s, replace: function (newText, selecting) { var left = this.sourceText.substr(0, this.idx); var right = this.sourceText.substr(this.idx + this.length); this.text = newText; this.length = newText.length; this.sourceText = left + this.text + right; this.elt.value = this.sourceText; if (selecting) { this.elt.setSelectionRange(this.idx, this.idx + this.length); } } } } return null; }; DateTimeInput.prototype._autoSelect = function () { var token = this._tokenAt(this.$text.selectionStart); var tokenEnd = this._tokenAt(this.$text.selectionEnd); if (token) { if (tokenEnd.idx === token.idx) { this.$text.setSelectionRange(token.idx, token.idx + token.length); this._editingData.state = STATE_NEW; } else { this.$text.select(); this._editingData.state = STATE_NONE; } } }; DateTimeInput.prototype._editNextToken = function () { var token = this._tokenAt(this.$text.selectionStart); if (!token) return false; var cIdx = token.idx; var l = this.$text.value.length; for (var i = token.idx + token.length; i < l; ++i) { token = this._tokenAt(i); if (token && token.idx !== cIdx) { this.$text.setSelectionRange(token.idx, token.idx + token.length); this._editingData.state = STATE_NEW; break; } } }; DateTimeInput.prototype._editPrevToken = function () { var token = this._tokenAt(this.$text.selectionStart); if (!token) return false; var cIdx = token.idx; var l = this.$text.value.length; for (var i = token.idx - 1; i >= 0; --i) { token = this._tokenAt(i); if (token && token.idx !== cIdx) { this.$text.setSelectionRange(token.idx, token.idx + token.length); this._editingData.state = STATE_NEW; break; } } }; DateTimeInput.prototype.tokenMap = { d: 'd', dd: 'd', M: 'M', MM: 'M', y: 'y', yyyy: 'y', hh: 'h', h: 'h', mm: 'm', m: 'm', a: 'a', HH: 'H', H: 'H' }; /*** * * @param {string} s * @returns {{}} * @private */ DateTimeInput.prototype._makeTokenDict = function (s) { var rgx = new RegExp(this.tokenRegex.source, 'g'); var rgxFormat = new RegExp(this.tokenRegex.source, 'g'); var format = this._format; var tokenMap = this.tokenMap; var tokenMatched = rgx.exec(s); var formatToken = rgxFormat.exec(format); var text, ident; var idx; var res = {}; while (tokenMatched && formatToken) { text = tokenMatched[1]; ident = formatToken[1]; if (text) { if (tokenMap[ident]) { idx = tokenMatched.index; res[tokenMap[ident]] = { text: text, idx: idx, length: text.length, sourceText: s, value: ident === 'a' ? text : parseInt(text) } } } tokenMatched = rgx.exec(s); formatToken = rgxFormat.exec(format); } return res; }; /*** * * @param {Date} date * @private */ DateTimeInput.prototype._makeValueDict = function (date) { var res = {}; res.d = { value: date.getDate() }; res.y = { value: date.getFullYear() }; res.M = { value: date.getMonth() + 1 }; res.m = { value: date.getMinutes() }; res.h = { value: date.getHours() }; res.H = { value: date.getHours() }; if (res.h.value < 12) { if (res.h.value === 0) res.h.value = 12; res.a = { value: "AM" }; } else { if (res.h.value > 12) res.h.value -= 12; res.a = { value: "PM" }; } return res; }; DateTimeInput.prototype._applyTokenDict = function (format, dict, debug) { var rgx = new RegExp(this.tokenRegex.source, 'g'); var tokenMap = this.tokenMap; return format.replace(rgx, function (full, g1, g2, sourceText) { if (g1 && tokenMap[g1]) { var ident = tokenMap[g1]; if (ident === 'a') { return (dict.a && dict.a.value) || 'a'; } else { if (dict[ident] && !isNaN(dict[ident].value)) { var numberText = dict[ident].value + ''; while (numberText.length < g1.length) numberText = '0' + numberText; return numberText; } else { return full; } } } else return full; }); }; DateTimeInput.prototype._loadValueFromInput = function () { var tkDict = this._makeTokenDict(this.$text.value); var H = NaN; if (tkDict.H && isRealNumber(tkDict.H.value)) { H = tkDict.H.value; } else if (tkDict.a.value === 'AM') { H = tkDict.h.value % 12; } else if (tkDict.a.value === 'PM') { H = tkDict.h.value + (tkDict.h.value === 12 ? 0 : 12); } var date = new Date(tkDict.y.value, tkDict.M.value - 1, tkDict.d.value, H, tkDict.m.value); if (isNaN(date.getTime())) { this._value = null; } else { this._value = date; } }; DateTimeInput.prototype.clear = function () { var lev = this._lastEmitValue; if (this.notNull) { this.value = formatDateTime( new Date(Math.max(this.min.getTime(), Math.min(this.max.getTime(), new Date().getTime()))), this.format); } else { this.value = null; } this._lastEmitValue = lev; this._notifyIfChange(); }; DateTimeInput.prototype._notifyIfChange = function (event) { if (!this._lastEmitValue && !this._value) return; if (this._lastEmitValue && this._value && this._lastEmitValue.getTime() === this._value.getTime()) return; this.emit('change', { type: 'change', target: this, value: this._value, originEvent: event }, this); this._lastEmitValue = this._value; }; DateTimeInput.prototype._correctingInput = function () { var tkDict = this._makeTokenDict(this.$text.value); var equalMin = true; var equalMax = true; if (!isNaN(tkDict.y.value)) { tkDict.y.value = Math.max(this._min.getFullYear(), Math.min(this._max.getFullYear(), tkDict.y.value)); equalMin = tkDict.y.value === this._min.getFullYear(); equalMax = tkDict.y.value === this._max.getFullYear(); } else { equalMin = false; equalMax = false; } if (!isNaN(tkDict.M.value)) { tkDict.M.value = Math.max(1, Math.min(12, tkDict.M.value)); if (equalMin) { tkDict.M.value = Math.max(this._min.getMonth() + 1, tkDict.M.value); equalMin = tkDict.M.value === this._min.getMonth() + 1; } if (equalMax) { tkDict.M.value = Math.min(this._max.getMonth() + 1, tkDict.M.value); equalMax = this._max.getMonth() + 1; } } else { equalMin = false; equalMax = false; } if (!isNaN(tkDict.d.value)) { tkDict.d.value = Math.max(1, Math.min(31, tkDict.d.value)); if (!isNaN(tkDict.M.value)) { tkDict.d.value = Math.min(tkDict.d.value, daysInMonth(isNaN(tkDict.y.value) ? 2020 : tkDict.y.value, tkDict.M.value - 1)); } if (equalMin) { tkDict.d.value = Math.max(this._min.getDate(), tkDict.d.value); equalMin = tkDict.d.value === this._min.getDate(); } if (equalMax) { tkDict.d.value = Math.min(this._max.getDate(), tkDict.d.value); equalMax = tkDict.d.value === this._max.getDate(); } } else { equalMin = false; equalMax = false; } //todo: min max if (tkDict.a && (tkDict.a.value === 'AM' || tkDict.a.value === 'PM')) { if (equalMin) { } } else { equalMin = false; equalMax = false; } this.$text.value = this._applyTokenDict(this._format, tkDict); }; DateTimeInput.prototype._correctingCurrentToken = function () { var token = this._tokenAt(this.$text.selectionStart); if (!token) return; var value; if (token.ident === 'a') { if (token.text !== 'a' && token.text !== 'AM' && token.text !== 'PM') { token.replace('a', false); } } else { value = parseInt(token.text); var rqMin = { d: 1, dd: 1, M: 1, MM: 1, y: 1890, yyyy: 1890, h: 1, hh: 1, HH: 0, H: 0, m: 0, mm: 0 }[token.ident]; var rqMax = { d: 31, dd: 31, M: 12, MM: 12, y: 2089, yyyy: 2089, h: 12, hh: 12, HH: 23, H: 23, m: 59, mm: 59 }[token.ident]; if (rqMin !== undefined) { if (!isNaN(value)) { if ((value < rqMin || value > rqMin)) { value = Math.max(rqMin, Math.min(rqMax, value)); token.replace(zeroPadding(value, token.ident.length), false); this._editingData.d = value; } } else if (token.text !== token.ident) { token.replace(token.ident, false); } } } }; DateTimeInput.prototype._dateFrom = function (value) { var typeV = typeof value; if (typeV === 'string' || typeV === 'number') { value = new Date(value); } if (!value || !value.getTime) value = null; if (value) { value = new Date(value.getTime()); value.setSeconds(0, 0); } return value || null; } DateTimeInput.property = {}; DateTimeInput.property.disabled = { set: function (value) { this.$text.disabled = !!value; if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } }, get: function () { return this.hasClass('as-disabled'); } }; DateTimeInput.property.notNull = { set: function (value) { if (value) { this.addClass('as-must-not-null'); if (!this.value) this.value = new Date(); } else { this.removeClass('as-must-not-null'); } this.value = this.value;//update }, get: function () { return this.hasClass('as-must-not-null'); } }; DateTimeInput.property.format = { set: function (value) { value = value || 'dd/MM/yyyy hh:mm a'; var dict; if (this._value) { dict = this._makeValueDict(this._value); } else { dict = this._makeTokenDict(this.$text.value); } this._format = value; this.$text.value = this._applyTokenDict(value, dict); }, get: function () { return this._format; } }; DateTimeInput.property.value = { set: function (value) { this._value = this._dateFrom(value); var dict; if (this._value) { dict = this._makeValueDict(this._value); } else { dict = this._makeTokenDict(this.$text.value); } if (value) { this.$text.value = this._applyTokenDict(this._format, dict, true); } else { this.$text.value = this.format; } this._lastEmitValue = this._value; }, get: function () { return this._value; } }; DateTimeInput.property.min = { set: function (value) { this._min = this._dateFrom(value) || new Date(1890, 0, 1); }, get: function () { return this._min; } }; DateTimeInput.property.max = { set: function (value) { this._max = this._dateFrom(value) || new Date(new Date(2090, 0, 1).getTime() - 1); }, get: function () { return this._max; } }; DateTimeInput.property.readOnly = { set: function (value) { if (value) { this.addClass(('as-read-only')); } else { this.removeClass(('as-read-only')); } }, get: function () { return this.hasClass('as-read-only'); } }; DateTimeInput.property.text = { get: function () { return this.$text.value; } }; DateTimeInput.eventHandler = {}; DateTimeInput.eventHandler.mouseUpInput = function () { if (!this.readOnly) { this.domSignal.emit('request_auto_select'); } }; DateTimeInput.eventHandler.mouseDownInput = function () { if (!this.readOnly && document.activeElement === this.$text) { this._correctingCurrentToken(); } } DateTimeInput.eventHandler.dblclickInput = function (event) { event.preventDefault(); }; /*** * * @param {KeyboardEvent} event */ DateTimeInput.eventHandler.keydown = function (event) { var kbId = keyboardEventToKeyBindingIdent(event); if (this.readOnly) { if (!kbId.match(/^arrow/) && !kbId.match(/^ctrl-[ca]/)) { event.preventDefault(); } return; } var token = this._tokenAt(this.$text.selectionStart); var endToken = this._tokenAt(this.$text.selectionEnd); if (!token) { if (event.key === 'Enter') { this._correctingInput(); this._loadValueFromInput(); this._notifyIfChange(event); } return; } var newTokenText; var value; if (event.key.startsWith('Arrow') || [' ', ':', '/', '-'].indexOf(event.key) >= 0) { event.preventDefault(); switch (event.key) { case 'ArrowLeft': this._editPrevToken(); break; case 'ArrowRight': case ' ': case ':': case '/': case '-': this._editNextToken(); break; case 'ArrowUp': case 'ArrowDown': switch (token.ident) { case 'dd': case 'd': value = parseInt(token.text); if (isNaN(value)) { this._editingData.d = event.key === 'ArrowUp' ? 1 : 31; } else { this._editingData.d = 1 + (value + (event.key === 'ArrowUp' ? 0 : 29)) % 31; } newTokenText = '' + this._editingData.d; while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true); break; case 'MM': case 'M': value = parseInt(token.text) - 1; if (isNaN(value)) { this._editingData.M = event.key === 'ArrowUp' ? 0 : 11; } else { this._editingData.M = (value + (event.key === 'ArrowUp' ? 1 : 11)) % 12; } newTokenText = '' + (this._editingData.M + 1); while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true); break; case 'yyyy': value = parseInt(token.text); if (isNaN(value)) { this._editingData.y = new Date().getFullYear(); } else { this._editingData.y = Math.max(1890, Math.min(2089, value + (event.key === 'ArrowUp' ? 1 : -1))); } newTokenText = this._editingData.y + ''; while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true); break; case "hh": case 'h': value = parseInt(token.text); if (isNaN(value)) { this._editingData.h = event.key === 'ArrowUp' ? 1 : 12; } else { this._editingData.h = 1 + (value + (event.key === 'ArrowUp' ? 0 : 10)) % 12; } newTokenText = this._editingData.h + ''; while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true); break; case "HH": case 'H': value = parseInt(token.text); if (isNaN(value)) { this._editingData.H = event.key === 'ArrowUp' ? 1 : 12; } else { this._editingData.H = (value + (event.key === 'ArrowUp' ? 1 : 23)) % 24; } newTokenText = this._editingData.H + ''; while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true); break; case "mm": case 'm': value = parseInt(token.text); if (isNaN(value)) { this._editingData.m = event.key === 'ArrowUp' ? 0 : 59; } else { this._editingData.m = (value + (event.key === 'ArrowUp' ? 1 : 59)) % 60; } newTokenText = this._editingData.m + ''; while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true); break; case 'a': value = token.text; this._editingData.a = value === 'PM' ? "AM" : "PM"; newTokenText = this._editingData.a; token.replace(newTokenText, true); break; } break; } } else if (event.key === "Delete" || event.key === 'Backspace') { event.preventDefault(); if (endToken.idx !== token.idx) { if (this.notNull) { this.$text.value = formatDateTime( new Date(Math.max(this.min.getTime(), Math.min(this.max.getTime(), new Date().getTime()))), this.format); } else { this.$text.value = this._format; } this.$text.select(); } else { if (this.notNull) { switch (token.ident) { case 'HH': case 'mm': case 'H': case 'm': token.replace(zeroPadding(0, token.ident.length), true); break; case 'h': case 'hh': token.replace('12', true); break; case 'M': case 'MM': case 'dd': case 'd': token.replace(zeroPadding(1, token.ident.length), true); break; case 'y': case 'yyyy': token.replace( zeroPadding(Math.max(this.min.getFullYear(), Math.min(this.max.getFullYear(), new Date().getFullYear())), token.ident.length), true); break; case 'a': token.replace('AM', true); break; } } else { token.replace(token.ident, true); } if (event.key === "Delete") this._editNextToken(); else this._editPrevToken(); } } else if (event.key === "Enter" || event.key === 'Tab') { this._correctingInput(); this._loadValueFromInput(); this._notifyIfChange(event); } else if (event.ctrlKey) { switch (event.key) { case 'a': case 'A': break; case 'c': case 'C': break; case 'x': case 'X': this.domSignal.once('clear_value', function () { this.$text.value = this._format; this.$text.select(); }.bind(this)); this.domSignal.emit('clear_value'); break; default: event.preventDefault(); } } else if (event.key.match(/^[0-9]$/g)) { event.preventDefault(); var dVal = parseInt(event.key); if (this._editingData.state === STATE_NEW) { switch (token.ident) { case 'dd': case 'd': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = STATE_EDITED; this._editingData.d = dVal; if (dVal > 3) { this._editNextToken(); } break; case 'MM': case 'M': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = STATE_EDITED; this._editingData.M = dVal; if (dVal > 1) { this._editNextToken(); } break; case 'yyyy': case 'y': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = STATE_EDITED; this._editingData.state_num = 1; break; case 'm': case 'mm': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = STATE_EDITED; if (dVal > 5) { this._editNextToken(); } break; case 'h': case 'hh': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = STATE_EDITED; if (dVal > 1) { this._editNextToken(); } break; case 'HH': case 'H': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = STATE_EDITED; if (dVal > 2) { this._editNextToken(); } break; } } else { switch (token.ident) { case 'dd': case 'd': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(1, Math.min(31, dVal)); this._editingData.d = dVal; token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); break; case 'MM': case 'M': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(1, Math.min(12, dVal)); this._editingData.M = dVal - 1; token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); break; case 'yyyy': case 'y': dVal = (parseInt(token.text.replace(/^./, '')) || 0) * 10 + dVal; this._editingData.state_num++; if (this._editingData.state_num >= 4) { // dVal = Math.max(1890, Math.min(2089, dVal)); token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); } else { token.replace(zeroPadding(dVal, token.ident.length), true); } break; case 'm': case 'mm': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(0, Math.min(59, dVal)); this._editingData.m = dVal; token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); break; case 'h': case 'hh': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(1, Math.min(12, dVal)); this._editingData.h = dVal; token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); break; case 'H': case 'HH': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(0, Math.min(23, dVal)); this._editingData.h = dVal; token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); break; } } } else if (event.key.match(/^[aApPSCsc]$/) && token.ident === 'a') { event.preventDefault(); if (event.key.match(/^[aAsS]$/)) { token.replace('AM', true); this._editingData.a = "AM"; } else { token.replace('PM', true); this._editingData.a = "PM"; } this._editNextToken(); } else { event.preventDefault(); } } DateTimeInput.eventHandler.inputBlur = function () { this._correctingInput(); this._loadValueFromInput(); this._notifyIfChange(); }; DateTimeInput.eventHandler.clickPickerBtn = function () { this._attachPicker(); }; DateTimeInput.eventHandler.clickOut = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.share.$follower, event)) return; this._releasePicker(); }; DateTimeInput.eventHandler.clickCancelBtn = function () { this._releasePicker(); }; DateTimeInput.eventHandler.calendarPick = function (event) { var value = event.value; var tkDict = this._makeTokenDict(this.share.pickedValeText); if (tkDict.y) { tkDict.y.value = value.getFullYear(); } if (tkDict.M) { tkDict.M.value = value.getMonth() + 1; } if (tkDict.d) { tkDict.d.value = value.getDate(); } this.share.pickedValeText = this._applyTokenDict(this._format, tkDict); }; DateTimeInput.eventHandler.clickOKBtn = function (event) { this.$text.value = this.share.pickedValeText; this._correctingInput(); this._loadValueFromInput(); this._notifyIfChange(event); this._releasePicker(); }; DateTimeInput.eventHandler.timePick = function (event) { var hour = event.hour; var minute = event.minute; var tkDict = this._makeTokenDict(this.share.pickedValeText); if (tkDict.h) { tkDict.h.value = 1 + ((hour + 11) % 12); if (tkDict.a) { tkDict.a.value = hour >= 12 ? "PM" : 'AM'; } } if (tkDict.H) { tkDict.H.value = hour; } if (tkDict.m) { tkDict.m.value = minute; } this.share.pickedValeText = this._applyTokenDict(this._format, tkDict); }; DateTimeInput.prototype.share = { $follower: null, $calendar: null, $timePicker: null, $holdingInput: null }; DateTimeInput.prototype._preparePicker = function () { if (!this.share.$follower) { this.share.$timePicker = Object(ACore["c" /* _ */])({ tag: js_ChromeTimePicker.tag, class: 'as-date-time-input-time-picker' }); this.share.$calendar = Object(ACore["c" /* _ */])({ tag: js_ChromeCalendar.tag, class: 'as-date-time-input-date-picker' }); this.share.$cancelBtn = Object(ACore["c" /* _ */])({ tag: 'a', class: 'as-select-list-box-cancel-btn', attr: { "data-ml-key": 'txt_cancel' }, }); this.share.$okBtn = Object(ACore["c" /* _ */])({ tag: 'a', class: 'as-select-list-box-ok-btn', attr: { "data-ml-key": 'txt_ok' }, }); this.share.$follower = Object(ACore["c" /* _ */])({ tag: js_Follower.tag, class: ['as-date-time-input-follower', 'as-dropdown-box-common-style'], child: [ { class: 'as-date-time-input-picker-ctn', child: [ this.share.$calendar, this.share.$timePicker ] }, { class: 'as-dropdown-box-footer', child: [{ class: 'as-dropdown-box-footer-right', child: [ this.share.$okBtn, this.share.$cancelBtn ] } ] } ] }); } }; DateTimeInput.prototype._attachPicker = function () { this._preparePicker(); if (this.share.$holdingInput) this.share.$holdingInput._releasePicker(); this.share.pickedValeText = this.$text.value; this.share.$holdingInput = this; this.share.$follower.addStyle('visibility', 'hidden'); this.share.$follower.addTo(document.body); this.share.$follower.followTarget = this; this.share.$follower.sponsorElement = this; this.$pickerBtn.off('click', this.eventHandler.clickPickerBtn); this.share.$calendar.on('pick', this.eventHandler.calendarPick); this.share.$timePicker.on('change', this.eventHandler.timePick); this.share.$okBtn.on('click', this.eventHandler.clickOKBtn); this.share.$cancelBtn.on('click', this.eventHandler.clickCancelBtn); var tkDict = this._makeTokenDict(this.$text.value); if (tkDict.h && !isNaN(tkDict.h.value)) { if (tkDict.a && tkDict.a.value === 'PM') { this.share.$timePicker.hour = 12 + tkDict.h.value % 12; } else { this.share.$timePicker.hour = tkDict.h.value % 12; } } else if (tkDict.H && isRealNumber(tkDict.H.value)) { this.share.$timePicker.hour = tkDict.H.value; } else { this.share.$timePicker.hour = null; } this.share.$timePicker.s24 = !!tkDict.H; if (tkDict.m && !isNaN(tkDict.m.value)) { this.share.$timePicker.minute = tkDict.m.value; } else { this.share.$timePicker.minute = null; } this.share.$timePicker.scrollIntoSelected(); var date = null; if (tkDict.d && !isNaN(tkDict.d.value) && tkDict.M && !isNaN(tkDict.M.value) && tkDict.y && !isNaN(tkDict.y.value)) { date = new Date(tkDict.y.value, tkDict.M.value - 1, tkDict.d.value); if (isNaN(date.getTime())) date = null; } if (date) { this.share.$calendar.selectedDates = [date]; this.share.$calendar.viewDate = date; } else { this.share.$calendar.selectedDates = []; var viewDate = null; if (tkDict.y && !isNaN(tkDict.y.value)) { if (tkDict.M && !isNaN(tkDict.M.value)) { if (tkDict.d && !isNaN(tkDict.d.value)) { viewDate = new Date(tkDict.y.value, tkDict.M.value - 1, tkDict.d.value); } else { viewDate = new Date(tkDict.y.value, tkDict.M.value - 1, 1); } } else { viewDate = new Date(tkDict.y.value, 0, 1); } } else { viewDate = new Date(); } if (viewDate && !isNaN(viewDate.getTime())) { this.share.$calendar.viewDate = viewDate; } else { this.share.$calendar.viewDate = new Date(); } } setTimeout(function () { this.share.$follower.removeStyle('visibility'); document.addEventListener('click', this.eventHandler.clickOut); }.bind(this), 5); }; DateTimeInput.prototype._releasePicker = function () { if (this.share.$holdingInput !== this) return; this.share.$follower.remove(); this.share.$holdingInput = null; this.share.$calendar.off('pick', this.eventHandler.calendarPick); this.share.$timePicker.off('change', this.eventHandler.timePick); this.share.$okBtn.off('click', this.eventHandler.clickOKBtn); this.share.$cancelBtn.off('click', this.eventHandler.clickCancelBtn); document.removeEventListener('click', this.eventHandler.clickOut); setTimeout(function () { this.$pickerBtn.on('click', this.eventHandler.clickPickerBtn); }.bind(this)); }; ACore["d" /* default */].install(DateTimeInput); /* harmony default export */ var js_DateTimeInput = (DateTimeInput); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateInput2.js var DateInput2_STATE_NEW = 1; var DateInput2_STATE_EDITED = 2; var DateInput2_STATE_NONE = 0; /*** * * @param {Date} date * @param level * @returns {Date|null} */ var dateByLevel = (date, level) => { if (!date) return null; switch (level) { case 'week': return beginOfWeek(date); case 'month': return datetime_beginOfMonth(date); case 'quarter': return beginOfQuarter(date); case 'year': return beginOfYear(date); case 'date': default: return beginOfDay(date); } } var DateInput2_ = ACore["d" /* default */]._; var DateInput2_$ = ACore["d" /* default */].$; /** * @extends AElement * @constructor */ function DateInput2() { this._lastValue = null; this._value = null; this._format = 'dd/MM/yyyy'; this.$input = DateInput2_$('input', this); this._editingData = {}; this.startDayOfWeek = getDefaultFirstDayOfWeek(); this.$text = this.$input; this.$text.on('mousedown', this.eventHandler.mouseDownInput) .on('mouseup', this.eventHandler.mouseUpInput) .on('dblclick', this.eventHandler.dblclickInput) .on('keydown', this.eventHandler.keydown) .on('blur', this.eventHandler.inputBlur) .on('contextmenu', function (event) { event.preventDefault(); }); this.$domSignal = DateInput2_('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](this.$domSignal); this.domSignal.on('request_auto_select', this._autoSelect.bind(this)); this._min = new Date(1890, 0, 1, 0, 0, 0, 0); this._max = new Date(2090, 0, 1, 0, 0, 0, 0); this.$calendarBtn = DateInput2_$('.as-date-input-icon-ctn', this) .on('click', this.eventHandler.clickCalendarBtn); this.$clearBtn = DateInput2_$('button.as-date-input-clear-btn', this) .on('click', this.clear.bind(this)); this.value = this._value; this.format = this._format; this.notNull = false; OOP["a" /* default */].drillProperty(this, this, 'minLimitDate', 'min'); OOP["a" /* default */].drillProperty(this, this, 'minDateLimit', 'min'); OOP["a" /* default */].drillProperty(this, this, 'maxLimitDate', 'max'); OOP["a" /* default */].drillProperty(this, this, 'maxDateLimit', 'max'); } DateInput2.tag = 'dateinput'; DateInput2.render = function () { //only support dd/mm/yyyy return DateInput2_({ class: 'as-date-input', extendEvent: ['change'], child: [{ tag: 'input', class: 'as-date-input-text', props: { value: '__/__/____' } }, { tag: 'button', class: 'as-date-input-clear-btn', child: 'span.mdi.mdi-close-circle' }, { tag: 'button', class: 'as-date-input-icon-ctn', child: 'span.mdi.mdi-calendar' }] }); }; /** * @param {String} text */ DateInput2.prototype._verifyFormat = function (text) { var regex = new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'); var tokens = text.match(regex); var map = { d: ['dd', 'd'], M: ['M', 'MM'], y: ['yy', 'yyyy'], Q: ['Q', 'QQ'], w: ['w', 'ww'], }; var rules = ['dMy', 'My', 'y', 'wy', 'Qy'].map(r => { r = r.split(''); r.sort(); return r.join(''); }); var matched = tokens.reduce((ac, cr) => { Object.keys(map).some(key => { if (map[key].indexOf(cr) >= 0) { ac.push(key); return true; } return false; }); return ac; }, []); matched.sort(); matched = matched.join(''); return rules.indexOf(matched) >= 0; }; DateInput2.prototype._notifyIfChange = function (event) { var oldV = this._explicit(this._lastValue); var newV = this._explicit(this._value); if (!oldV !== !newV || (oldV && newV && compareDate(oldV, newV) !== 0)) { this._lastValue = this._value; this.emit('change', { type: 'change', target: this, value: this._value, originEvent: event }, this); } }; DateInput2.prototype.notifyChange = function () { this._lastValue = this._value; this.emit('change', { type: 'change', target: this, value: this._value }, this); }; DateInput2.prototype.focus = function () { this.$input.focus(); }; DateInput2.prototype.blur = function () { this.$input.blur(); }; DateInput2.prototype.clear = function () { this._applyValue(null); this._notifyIfChange(); }; /*** * * @param {Date|null} value */ DateInput2.prototype._applyValue = function (value) { this._value = value; if (!value) { this.$input.value = this.format; } else { this.$input.value = formatDateTime(this._value, this._format); } this._updateNullClass(); }; DateInput2.prototype._updateNullClass = function () { var value = this._value; if (!value) { this.addClass('as-value-null'); } else { this.removeClass('as-value-null'); } }; DateInput2.prototype.tokenRegex = js_DateTimeInput.prototype.tokenRegex; DateInput2.prototype._autoSelect = js_DateTimeInput.prototype._autoSelect; DateInput2.prototype._tokenAt = js_DateTimeInput.prototype._tokenAt; DateInput2.prototype._editNextToken = js_DateTimeInput.prototype._editNextToken; DateInput2.prototype._editPrevToken = js_DateTimeInput.prototype._editPrevToken; DateInput2.prototype._makeTokenDict = js_DateTimeInput.prototype._makeTokenDict; DateInput2.prototype._correctingInput = function () { var tkDict = this._makeTokenDict(this.$text.value); var min = this._min; var max = this._max; var equalMin; var equalMax; if (!isNaN(tkDict.y.value)) { tkDict.y.value = Math.max(min.getFullYear(), Math.min(max.getFullYear(), tkDict.y.value)); equalMin = tkDict.y.value === min.getFullYear(); equalMax = tkDict.y.value === max.getFullYear(); } else { equalMin = false; equalMax = false; } if (tkDict.M && !isNaN(tkDict.M.value)) { tkDict.M.value = Math.max(1, Math.min(12, tkDict.M.value)); if (equalMin) { tkDict.M.value = Math.max(min.getMonth() + 1, tkDict.M.value); equalMin = tkDict.M.value === min.getMonth() + 1; } if (equalMax) { tkDict.M.value = Math.min(max.getMonth() + 1, tkDict.M.value); equalMax = max.getMonth() + 1; } } else { equalMin = false; equalMax = false; } if (tkDict.d && !isNaN(tkDict.d.value)) { tkDict.d.value = Math.max(1, Math.min(31, tkDict.d.value)); if (!isNaN(tkDict.M.value)) { tkDict.d.value = Math.min(tkDict.d.value, daysInMonth(isNaN(tkDict.y.value) ? 2020 : tkDict.y.value, tkDict.M.value - 1)); } if (equalMin) { tkDict.d.value = Math.max(min.getDate(), tkDict.d.value); } if (equalMax) { tkDict.d.value = Math.min(max.getDate(), tkDict.d.value); } } if (tkDict.w && !isNaN(tkDict.w.value)) { if (!isNaN(tkDict.y.value)) { tkDict.w.value = Math.max(1, Math.min(tkDict.w.value, 1 + weekIndexOf(prevDate(new Date(tkDict.y.value + 1, 0, 1)), false, this._startDayOfWeek))); } } this.$text.value = this._applyTokenDict(this._format, tkDict); } DateInput2.prototype._correctingCurrentToken = function () { var token = this._tokenAt(this.$text.selectionStart); if (!token) return; var value; value = parseInt(token.text); var rqMin = { d: 1, dd: 1, M: 1, MM: 1, y: 1890, yyyy: 1890, w: 1, ww: 1, Q: 1, QQ: 1 }[token.ident]; var rqMax = { d: 31, dd: 31, M: 12, MM: 12, y: 2089, yyyy: 2089, w: 54, ww: 54, Q: 4, QQ: 4 }[token.ident]; if (rqMin !== undefined) { if (!isNaN(value)) { if ((value < rqMin || value > rqMin)) { value = Math.max(rqMin, Math.min(rqMax, value)); token.replace(zeroPadding(value, token.ident.length), false); } } else if (this.notNull) { if (token.ident.startsWith('y')) { value = new Date().getFullYear(); } else { value = rqMin; } token.replace(zeroPadding(value, token.ident.length), false); } else if (token.text !== token.ident) { token.replace(token.ident, false); } } }; /*** * * @param {Date|string|null}date * @return {Date|null} */ DateInput2.prototype._normalizeValue = function (date) { var temp; if (date === null || date === undefined || date === false) { return null; } if (typeof date === 'string') { temp = new Date(date); if (isNaN(temp.getTime())) { temp = parseDateTime(date, this._format); } date = temp; } else if (typeof date === 'number') { date = new Date(date); } if (date.getTime && date.getHours) { if (isNaN(date.getTime())) { return null; } else { return beginOfDay(date); } } else { return null; } }; DateInput2.prototype._loadValueFromInput = function () { var tkDict = this._makeTokenDict(this.$text.value); var y = tkDict.y ? tkDict.y.value : new Date().getFullYear(); var m = tkDict.M ? tkDict.M.value - 1 : 0; var d = tkDict.d ? tkDict.d.value : 1; var date; if (tkDict.w && tkDict.y) { if (isRealNumber(tkDict.w.value) && isRealNumber(tkDict.y.value)) date = weekInYear(y, tkDict.w.value - 1); } else if (tkDict.Q && tkDict.y) { if (isRealNumber(tkDict.Q.value) && isRealNumber(tkDict.y.value)) date = new Date(y, (tkDict.Q.value - 1) * 3, 1); } else { date = new Date(y, m, d); } if (!date || isNaN(date.getTime())) { this._value = null; } else { this._value = date; } this._updateNullClass(); }; DateInput2.prototype._explicit = function (value) { value = value || null; if (this.notNull) { value = value || new Date(); } else if (!value) return null; var time = value.getTime(); time = Math.max(this._min.getTime(), time); time = Math.min(this._max.getTime(), time); return dateByLevel(new Date(time), this.calendarLevel); }; DateInput2.prototype._applyTokenDict = function (format, dict, debug) { var rgx = new RegExp(this.tokenRegex.source, 'g'); var tokenMap = this.tokenMap; var res = format.replace(rgx, function (full, g1, g2, sourceText) { if (g1 && tokenMap[g1]) { var ident = tokenMap[g1]; if (dict[ident] && !isNaN(dict[ident].value)) { return zeroPadding(dict[ident].value, g1.length); } else { return full; } } else return full; }); return res; }; DateInput2.prototype.focus = function () { this.$text.focus(); this.$text.select(); }; DateInput2.prototype.tokenMap = { d: 'd', dd: 'd', M: 'M', MM: 'M', y: 'y', yyyy: 'y', ww: 'w', Q: 'Q', QQ: 'Q' } /** * @type {DateInput2} */ DateInput2.eventHandler = {}; DateInput2.eventHandler.keydown = function (event) { if (this.readOnly) { if (!event.ctrlKey || event.key !== 'c') { event.preventDefault(); } return; } var token = this._tokenAt(this.$text.selectionStart); var endToken = this._tokenAt(this.$text.selectionEnd); if (!token) { if (event.key === 'Enter') { this._correctingInput(); this._loadValueFromInput(); this._notifyIfChange(event); } return; } var newTokenText; var value; if (event.key.startsWith('Arrow') || event.key.match(/^[\-/,\s]$/)) { event.preventDefault(); switch (event.key) { case 'ArrowLeft': this._editPrevToken(); break; case 'ArrowRight': case '-': case ',': case '/': case ' ': this._editNextToken(); break; case 'ArrowUp': case 'ArrowDown': switch (token.ident) { case 'dd': case 'd': value = parseInt(token.text); if (isNaN(value)) { this._editingData.d = event.key === 'ArrowUp' ? 1 : 31; } else { this._editingData.d = 1 + (value + (event.key === 'ArrowUp' ? 0 : 29)) % 31; } newTokenText = '' + this._editingData.d; while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true); break; case 'w': case 'ww': value = parseInt(token.text); if (isNaN(value)) { this._editingData.w = event.key === 'ArrowUp' ? 1 : 54; } else { this._editingData.w = 1 + (value + (event.key === 'ArrowUp' ? 0 : 52)) % 54; } newTokenText = zeroPadding(this._editingData.w, token.ident.length); token.replace(newTokenText, true); break; case 'Q': case 'QQ': value = parseInt(token.text); if (isNaN(value)) { this._editingData.Q = event.key === 'ArrowUp' ? 1 : 4; } else { this._editingData.Q = 1 + (value + (event.key === 'ArrowUp' ? 0 : 2)) % 4; } newTokenText = zeroPadding(this._editingData.Q, token.ident.length); token.replace(newTokenText, true); break; case 'MM': case 'M': value = parseInt(token.text) - 1; if (isNaN(value)) { this._editingData.M = event.key === 'ArrowUp' ? 0 : 11; } else { this._editingData.M = (value + (event.key === 'ArrowUp' ? 1 : 11)) % 12; } newTokenText = '' + (this._editingData.M + 1); while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true); break; case 'yyyy': value = parseInt(token.text); if (isNaN(value)) { this._editingData.y = new Date().getFullYear(); } else { this._editingData.y = Math.max(1890, Math.min(2089, value + (event.key === 'ArrowUp' ? 1 : -1))); } newTokenText = this._editingData.y + ''; while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true); break; } } } else if (event.key === "Delete" || event.key === 'Backspace') { event.preventDefault(); if (endToken.idx !== token.idx) { if (this.notNull) { this.$text.value = formatDateTime(new Date(Math.min(this.max.getTime(), Math.max(this.min.getTime(), new Date().getTime()))), this._format); } else { this.$text.value = this._format; } this.$text.select(); } else { if (this.notNull) { switch (token.ident) { case 'y': case 'yyyy': token.replace(zeroPadding(new Date().getFullYear(), token.ident.length), true); break; case 'w': case 'ww': case 'Q': case 'QQ': token.replace(zeroPadding(1, token.ident.length), true); break; case 'M': case 'MM': case 'd': case 'dd': token.replace(zeroPadding(1, token.ident.length), true); break; default: token.replace(token.ident, true); } } else { token.replace(token.ident, true); } if (event.key === "Delete") this._editNextToken(); else this._editPrevToken(); } } else if (event.key === "Enter" || event.key === 'Tab') { this._correctingInput(); this._loadValueFromInput(); this._notifyIfChange(event); } else if (event.ctrlKey) { switch (event.key) { case 'a': case 'A': break; case 'c': case 'C': break; case 'x': case 'X': this.domSignal.once('clear_value', function () { this.$text.value = this._format; this.$text.select(); }.bind(this)); this.domSignal.emit('clear_value'); break; default: event.preventDefault(); } } else if (event.key.match(/^[0-9]$/g)) { event.preventDefault(); var dVal = parseInt(event.key); if (this._editingData.state === DateInput2_STATE_NEW) { switch (token.ident) { case 'dd': case 'd': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = DateInput2_STATE_EDITED; this._editingData.d = dVal; if (dVal > 3) { this._editNextToken(); } break; case 'w': case 'ww': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = DateInput2_STATE_EDITED; this._editingData.d = dVal; if (dVal > 6) { this._editNextToken(); } break; case 'Q': case 'QQ': dVal = Math.max(1, Math.min(dVal, 4)); token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = DateInput2_STATE_EDITED; this._editingData.Q = dVal; this._editNextToken(); break; case 'MM': case 'M': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = DateInput2_STATE_EDITED; this._editingData.M = dVal; if (dVal > 1) { this._editNextToken(); } break; case 'yyyy': case 'y': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = DateInput2_STATE_EDITED; this._editingData.state_num = 1; break; } } else { switch (token.ident) { case 'dd': case 'd': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(1, Math.min(31, dVal)); this._editingData.d = dVal; token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); break; case 'ww': case 'w': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(1, Math.min(54, dVal)); this._editingData.d = dVal; token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); break; case 'Q': case 'QQ': dVal = Math.max(1, Math.min(dVal, 4)); token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.Q = dVal; this._editNextToken(); break; case 'MM': case 'M': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(1, Math.min(12, dVal)); this._editingData.M = dVal - 1; token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); break; case 'yyyy': case 'y': dVal = (parseInt(token.text.replace(/^./, '')) || 0) * 10 + dVal; this._editingData.state_num++; if (this._editingData.state_num >= 4) { // dVal = Math.max(1890, Math.min(2089, dVal)); token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); } else { token.replace(zeroPadding(dVal, token.ident.length), true); } break; } } } else { event.preventDefault(); } }; DateInput2.eventHandler.mouseUpInput = js_DateTimeInput.eventHandler.mouseUpInput; DateInput2.eventHandler.mouseDownInput = js_DateTimeInput.eventHandler.mouseDownInput; DateInput2.eventHandler.dblclickInput = js_DateTimeInput.eventHandler.dblclickInput; DateInput2.eventHandler.inputBlur = js_DateTimeInput.eventHandler.inputBlur; DateInput2.eventHandler.calendarSelect = function (value) { var oldV = this._explicit(this._lastValue); this.value = value; var newV = this._explicit(this._value); if (!oldV !== !newV || (oldV && newV && compareDate(oldV, newV) !== 0)) { this.emit('change', { type: 'change', target: this, value: this._value }, this); } }; DateInput2.eventHandler.clickCalendarBtn = function () { if (this.readOnly) return; this._attachCalendar(); }; DateInput2.eventHandler.clickOut = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.share.$calendar, event)) return; this._releaseCalendar(); }; DateInput2.eventHandler.calendarPick = function (event) { this._applyValue(event.value); this._notifyIfChange(event.originEvent || event); this._releaseCalendar(); }; DateInput2.property = {}; DateInput2.property.value = { set: function (value) { value = this._normalizeValue(value); if (!value && this.notNull) value = beginOfDay(new Date()); this._lastValue = value; this._applyValue(value); }, get: function () { return this._explicit(this._value); } }; /** * not support MMM, MMMM, support number only * @type {DateInput2} */ DateInput2.property.format = { set: function (value) { value = value || 'dd/MM/yyyy'; value = value.replace(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (full) { if (full === 'mm' || full === 'MMM' || full === 'MMMM' || full === 'mmm' || full === 'mmmm') return 'MM'; if (full === 'm') return 'M'; return full; }); if (!this._verifyFormat(value)) { value = 'dd/MM/yyyy'; console.error("Invalid date format: " + value); } this._format = value; this._formatTokens = this._format.match(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g')) || []; this.value = this.value;//update }, get: function () { return this._format; } }; DateInput2.property.disabled = { set: function (value) { value = !!value; this.$input.disabled = value; if (value) this.addClass('as-disabled'); else this.removeClass('as-disabled'); this.$text.disabled = value; }, get: function () { return this.$input.disabled; } }; DateInput2.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); this.$input.readOnly = true; } else { this.removeClass('as-read-only'); this.$input.readOnly = false; } }, get: function () { return this.hasClass('as-read-only'); } }; DateInput2.property.text = { get: function () { return this.$input.value; } }; DateInput2.property.calendarLevel = { /*** * @memberOf DateInput2 * @name calendarLevel * @type {number} */ get: function () { if (this._formatTokens.indexOf('d') >= 0 || this._formatTokens.indexOf('dd') >= 0) return 'day'; if (this._formatTokens.indexOf('w') >= 0 || this._formatTokens.indexOf('ww') >= 0) return 'week'; if (this._formatTokens.indexOf('M') >= 0 || this._formatTokens.indexOf('MM') >= 0) return 'month'; if (this._formatTokens.indexOf('Q') >= 0 || this._formatTokens.indexOf('QQ') >= 0) return 'quarter'; return 'year'; } }; DateInput2.property.min = { set: function (value) { this._min = this._normalizeValue(value) || new Date(1890, 0, 1); }, get: function () { return this._min; } }; DateInput2.property.max = { set: function (value) { this._max = this._normalizeValue(value) || new Date(2090, 0, 1); }, get: function () { return this._max; } }; DateInput2.property.notNull = { set: function (value) { if (value) { this.addClass('as-must-not-null'); if (!this.value) this.value = new Date(); } else { this.removeClass('as-must-not-null'); } this.value = this.value;//update }, get: function () { return this.hasClass('as-must-not-null'); } }; DateInput2.prototype.share = { /*** * @type {ChromeCalendar} */ $calendar: null, /*** * @type {Follower} */ $follower: null, /*** * @type {DateInput2} */ $holdingInput: null }; DateInput2.prototype._prepareCalendar = function () { if (this.share.$calendar) return; this.share.$calendar = DateInput2_({ tag: 'chromecalendar', class: ['as-date-input-calendar', 'as-dropdown-box-common-style'] }); this.share.$follower = DateInput2_({ tag: 'follower', class: 'as-date-input-follower', child: this.share.$calendar }); }; DateInput2.prototype._attachCalendar = function () { this._prepareCalendar(); if (this.share.$holdingInput) this.share.$holdingInput._releaseCalendar(); this.share.$follower.addTo(document.body); this.share.$follower.addStyle('visibility', 'hidden'); this.share.$holdingInput = this; this.share.$follower.followTarget = this; this.share.$follower.sponsorElement = this; this.share.$calendar.level = this.calendarLevel; this.share.$calendar.startDayOfWeek = this.startDayOfWeek || 0; this.share.$calendar.min = this._min; this.share.$calendar.max = this._max; this.share.$calendar.on('pick', this.eventHandler.calendarPick); this.share.$calendar.selectedDates = this.value ? [this.value] : []; this.share.$calendar.viewDate = this.value ? this.value : new Date(Math.max(this._min.getTime(), Math.min(this._max.getTime(), new Date().getTime()))); setTimeout(function () { document.body.addEventListener('click', this.eventHandler.clickOut); this.share.$follower.removeStyle('visibility'); }.bind(this), 5); this.$calendarBtn.off('click', this.eventHandler.clickCalendarBtn); }; DateInput2.prototype._releaseCalendar = function () { if (this.share.$holdingInput !== this) return; this.share.$calendar.off('pick', this.eventHandler.calendarPick); this.share.$follower.remove(); document.body.removeEventListener('click', this.eventHandler.clickOut); setTimeout(function () { this.$calendarBtn.on('click', this.eventHandler.clickCalendarBtn); }.bind(this), 5) this.share.$holdingInput = null; }; ACore["d" /* default */].install(DateInput2); /* harmony default export */ var js_DateInput2 = (DateInput2); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/draggablestack.css var draggablestack = __webpack_require__(45); // CONCATENATED MODULE: ./node_modules/absol/src/Math/random.js /** * Returns a random number between min (inclusive) and max (exclusive) */ function randomArbitrary(min, max) { return Math.random() * (max - min) + min; } /** * Returns a random integer between min (inclusive) and max (inclusive) * Using Math.round() will give you a non-uniform distribution! */ function randomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function randomPick(arr) { var id = randomInt(0, arr.length - 1); return arr[id]; } // CONCATENATED MODULE: ./node_modules/absol/src/String/stringGenerate.js var identCharacters = function () { var chars = 'qwertyuiopasdfghjklzxcvbnm'; chars = chars + chars.toUpperCase(); var num = '0123456789'; var spect = '_'; return (chars + spect + num).split(''); }(); function randomIdent(length) { if (!(length > 0)) length = 4; var factor = identCharacters; return [factor[(Math.random() * (factor.length - 10)) >> 0]].concat(Array(length - 1).fill('').map(function () { return factor[(Math.random() * factor.length) >> 0]; })).join(''); } function parallelMatch(a, b) { var l = Math.min(a.length, b.length); var res = 0; for (var i = 0; i < l; ++i) { if (a[i] == b[i])++res; } return res; } var ipsumLoremWord = ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua', 'enim', 'ad', 'minim', 'veniam', 'quis', 'nostrud', 'exercitation', 'ullamco', 'laboris', 'nisi', 'aliquip', 'ex', 'ea', 'commodo', 'consequat', 'duis', 'aute', 'irure', 'in', 'reprehenderit', 'voluptate', 'velit', 'esse', 'cillum', 'eu', 'fugiat', 'nulla', 'pariatur', 'excepteur', 'sint', 'occaecat', 'cupidatat', 'non', 'proident', 'sunt', 'culpa', 'qui', 'officia', 'deserunt', 'mollit', 'anim', 'id', 'est', 'laborum', 'perspiciatis', 'unde', 'omnis', 'iste', 'natus', 'error', 'voluptatem', 'accusantium', 'doloremque', 'laudantium', 'totam', 'rem', 'aperiam', 'eaque', 'ipsa', 'quae', 'ab', 'illo', 'inventore', 'veritatis', 'quasi', 'architecto', 'beatae', 'vitae', 'dicta', 'explicabo', 'nemo', 'ipsam', 'quia', 'voluptas', 'aspernatur', 'aut', 'odit', 'fugit', 'consequuntur', 'magni', 'dolores', 'eos', 'ratione', 'sequi', 'nesciunt', 'neque', 'porro', 'quisquam', 'dolorem', 'adipisci', 'numquam', 'eius', 'modi', 'tempora', 'incidunt', 'magnam', 'aliquam', 'quaerat', 'minima', 'nostrum', 'exercitationem', 'ullam', 'corporis', 'suscipit', 'laboriosam', 'aliquid', 'commodi', 'consequatur', 'autem', 'vel', 'eum', 'iure', 'quam', 'nihil', 'molestiae', 'illum', 'quo', 'at', 'vero', 'accusamus', 'iusto', 'odio', 'dignissimos', 'ducimus', 'blanditiis', 'praesentium', 'voluptatum', 'deleniti', 'atque', 'corrupti', 'quos', 'quas', 'molestias', 'excepturi', 'occaecati', 'cupiditate', 'provident', 'similique', 'mollitia', 'animi', 'dolorum', 'fuga', 'harum', 'quidem', 'rerum', 'facilis', 'expedita', 'distinctio', 'nam', 'libero', 'tempore', 'sum', 'soluta', 'nobis', 'eligendi', 'optio', 'cumque', 'impedit', 'minus', 'quod', 'maxime', 'placeat', 'facere', 'possimus', 'assumenda', 'repellendus', 'temporibus', 'quibusdam', 'officiis', 'debitis', 'necessitatibus', 'saepe', 'eveniet', 'voluptates', 'repudiandae', 'recusandae', 'itaque', 'earum', 'hic', 'tenetur', 'a', 'sapiente', 'delectus', 'reiciendis', 'voluptatibus', 'maiores', 'alias', 'perferendis', 'doloribus', 'asperiores', 'repellat', 'integer', 'nec', 'praesent', 'cursus', 'ante', 'dapibus', 'diam', 'sem', 'nibh', 'elementum', 'imperdiet', 'sagittis', 'mauris', 'fusce', 'tellus', 'augue', 'semper', 'porta', 'massa', 'vestibulum', 'lacinia', 'arcu', 'eget', 'class', 'aptent', 'taciti', 'sociosqu', 'litora', 'torquent', 'per', 'conubia', 'nostra', 'inceptos', 'himenaeos', 'curabitur', 'sodales', 'ligula', 'dignissim', 'nunc', 'tortor', 'pellentesque', 'aenean', 'scelerisque', 'maecenas', 'mattis', 'convallis', 'tristique', 'proin', 'egestas', 'porttitor', 'morbi', 'lectus', 'risus', 'iaculis', 'luctus', 'ac', 'turpis', 'aliquet', 'metus', 'ullamcorper', 'tincidunt', 'euismod', 'quisque', 'volutpat', 'condimentum', 'urna', 'facilisi', 'fringilla', 'suspendisse', 'potenti', 'feugiat', 'mi', 'sapien', 'etiam', 'ultrices', 'justo', 'lacus', 'pharetra', 'auctor', 'interdum', 'primis', 'faucibus', 'orci', 'posuere', 'cubilia', 'curae', 'molestie', 'dui', 'blandit', 'congue', 'pede', 'facilisis', 'laoreet', 'donec', 'viverra', 'malesuada', 'pulvinar', 'sollicitudin', 'cras', 'nisl', 'felis', 'venenatis', 'ultricies', 'accumsan', 'pretium', 'fermentum', 'nullam', 'purus', 'mollis', 'vivamus', 'consectetuer' ]; function randomWord() { var arr = ipsumLoremWord; var idx = randomInt(0, arr.length - 1); return arr[idx]; } function randomPhrase(limitLenght) { if (!limitLenght) limitLenght = 50; var length = Math.ceil(Math.random() * limitLenght / 7); return new Array(length) .fill(null) .map(randomWord) .reduce(function (ac, cr) { if (ac.length + cr.length < limitLenght) { ac.parts.push(cr); } return ac; }, { parts: [], length: 0 }).parts .join(' '); } function randomSentence(limitLenght) { if (!limitLenght) limitLenght = 300; var length = Math.ceil(Math.random() * limitLenght / 70); var res = new Array(length) .fill(null) .map(randomPhrase) .reduce(function (ac, cr) { if (ac.length + cr.length < limitLenght) { ac.parts.push(cr); } return ac; }, { parts: [], length: 0 }).parts .join(', '); if (Math.random() < 0.03) { res = res.replace(/\,/i, ':'); } res = res.replace(/^./, function (x) { return x.toUpperCase(); }); res += '.'; return res; } function randomParagraph(limitLength) { if (!limitLength) limitLength = 1000; var length = Math.ceil(Math.random() * limitLength / 200); return new Array(length).fill(null) .map(randomSentence) .reduce(function (ac, cr) { if (ac.length + cr.length < limitLength) { ac.parts.push(cr); } return ac; }, { parts: [], length: 0 }).parts .join(' '); } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/PositionTracker.js /*** * @extends {AElement} * @constructor */ function PositionTracker() { this.defineEvent('positionchange'); this.$trackScrollParents = []; this._scrollTrackEventHandler = this.notifyPositionChange.bind(this); } PositionTracker.tag = 'PositionTracker'.toLowerCase(); /*** * * @return {AElement} */ PositionTracker.render = function () { return _('div'); }; PositionTracker.prototype.notifyPositionChange = function (event) { this.emit('positionchange', { type: 'positionchange', originEvent: event }); }; PositionTracker.prototype.startTrackPosition = function () { if (this.$trackScrollParents.length > 0) this.stopTrackPosition(); var trackElt = this; while (trackElt) { if (trackElt.addEventListener) trackElt.addEventListener('scroll', this._scrollTrackEventHandler, false); else trackElt.attachEvent('onscroll', this._scrollTrackEventHandler, false); this.$trackScrollParents.push(trackElt); trackElt = trackElt.parentElement; } if (document.addEventListener) { document.addEventListener('scroll', this._scrollTrackEventHandler, false); } else { document.attachEvent('onscroll', this._scrollTrackEventHandler, false); } this.$trackScrollParents.push(document); }; PositionTracker.prototype.stopTrackPosition = function () { var trackElt; for (var i = 0; i < this.$trackScrollParents.length; ++i) { trackElt = this.$trackScrollParents[i]; if (trackElt.removeEventListener) trackElt.removeEventListener('scroll', this._scrollTrackEventHandler, false); else trackElt.dettachEvent('onscroll', this._scrollTrackEventHandler, false); } this.$trackScrollParents = []; }; ACore["d" /* default */].install(PositionTracker); /* harmony default export */ var js_PositionTracker = (PositionTracker); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DraggableVStack.js var DraggableVStack_ = ACore["d" /* default */]._; var DraggableVStack_$ = ACore["d" /* default */].$; /*** * @augments Hanger * @augments PositionTracker * @constructor */ function DraggableVStack() { DraggableVStack_({ tag: 'PositionTracker'.toLowerCase(), elt: this }); this.$cloneContainer = DraggableVStack_('.absol-draggable-stack-clone-container'); this.on('predrag', this.eventHandler.predrag) .on('dragstart', this.eventHandler.dragstart) .on('drag', this.eventHandler.drag) .on('dragend', this.eventHandler.dragend); this._state = 0; this.friends = []; this.$friends = []; this._privateDraggableVStackIdent = randomIdent(35); this._dragData = null; this.on('positionchange', this.eventHandler.scroll); } DraggableVStack.tag = 'DraggableVStack'.toLowerCase(); DraggableVStack.render = function () { return DraggableVStack_({ tag: 'hanger', extendEvent: ['change', 'orderchange', 'itemleave', 'itementer'], class: ['absol-draggable-stack', 'absol-draggable-vstack'] }); }; DraggableVStack.prototype._updateFriends = function () { var dict = {}; dict[this._privateDraggableVStackIdent] = this; this.$friends = this.friends.reduce(function (ac, cr) { if (Dom["b" /* default */].isDomNode(cr)) { if (cr._privateDraggableVStackIdent) { ac.result.push(cr); ac.dict[cr._privateDraggableVStackIdent] = cr; } } else if (typeof cr === 'string') { DraggableVStack_$(cr, false, function (elt) { if (elt._privateDraggableVStackIdent) { if (!ac.dict[elt._privateDraggableVStackIdent]) { ac.result.push(elt); ac.dict[elt._privateDraggableVStackIdent] = elt; } } }) } return ac; }, { dict: dict, result: [] }).result; }; DraggableVStack.prototype._findIndex = function (clientY) { var childBounds = Array.prototype.map.call(this.childNodes, function (elt) { return elt.getBoundingClientRect() }); var childTops = childBounds.map(function (b) { return b.top; }); childTops.push((childBounds[childBounds.length - 1] || this.getBoundingClientRect()).bottom); var nearestIdx = 0; var nearestVal = 10000000; var val; for (var i = 0; i < childTops.length; ++i) { val = Math.abs(clientY - childTops[i]); if (val < nearestVal) { nearestVal = val; nearestIdx = i; } } return nearestIdx; }; /*** * * @type {DraggableVStack|{}} */ DraggableVStack.eventHandler = {}; DraggableVStack.eventHandler.predrag = function (event) { var dragzone = this._findDragzone(event.target); if (!dragzone) { event.cancel(); } }; DraggableVStack.eventHandler.dragstart = function (event) { this.startTrackPosition(); event.preventDefault(); this._updateFriends(); this._state = 1; this.addClass('as-state-drag'); this._dragData = { mouseStartPos: new Math_Vec2(event.clientX, event.clientY), elt: this._findDirectChild(event.target), rootBound: this.getBoundingClientRect(), dest: this }; this._dragData.mouseCurrentPos = this._dragData.mouseStartPos; this._updateDestChildrenBound(); this._dragData.idx = Array.prototype.indexOf.call(this.childNodes, this._dragData.elt); this._dragData.eltBound = this._dragData.destChildBounds[this._dragData.idx]; this._dragData.offsetPos = this._dragData.mouseStartPos.sub(new Math_Vec2(this._dragData.eltBound.left, this._dragData.eltBound.top)); this._dragData.eltRelative = new Math_Vec2(this._dragData.eltBound.left, this._dragData.eltBound.top).sub(new Math_Vec2(this._dragData.rootBound.left, this._dragData.rootBound.top)); this.$cloneContainer.addTo(document.body); this.$cloneContainer.clearChild().addChild(DraggableVStack_$(this._dragData.elt.cloneNode(true)).addStyle({ boxSizing: 'border-box', width: this._dragData.eltBound.width + 'px', height: this._dragData.eltBound.height + 'px' })); this.$cloneContainer.addStyle({ left: this._dragData.eltBound.left + 'px', top: this._dragData.eltBound.top + 'px', }); this._dragData.elt.addClass('dragging'); }; DraggableVStack.eventHandler.drag = function (event) { event.preventDefault(); this._dragData.mouseCurrentPos = new Math_Vec2(event.clientX, event.clientY); this._updateHoverDest(); this._updateDraggingPosition(); this.eventHandler.dragOverflow(event); }; DraggableVStack.prototype.getClientY = function () { var top = 1000000; var bottom = -10000000; var child; var childBound; for (var i = 0; i < this.childNodes.length; ++i) { child = this.childNodes[i]; if (child === this.$cloneContainer) continue; if (child.getBoundingClientRect) { childBound = child.getBoundingClientRect(); top = Math.min(top, childBound.top); bottom = Math.max(bottom, childBound.bottom); } } return { top: top, bottom: bottom }; }; DraggableVStack.eventHandler.dragOverflow = function (event) { var scroller = this; while (scroller) { var overflowStyle = window.getComputedStyle(scroller)['overflow']; if ((overflowStyle === 'auto' || overflowStyle === 'scroll' || scroller.tagName === 'HTML') && (scroller.clientHeight < scroller.scrollHeight)) break; scroller = scroller.parentElement; } if (!scroller) return; var outBound = scroller.getBoundingClientRect(); var bBound = this.$cloneContainer.getBoundingClientRect(); var screenSize = Dom["b" /* default */].getScreenSize(); if (scroller.tagName !== "HTML") { outBound = { top: Math.max(outBound.top, 0), bottom: Math.min(outBound.bottom, screenSize.height) } } else { outBound = { top: 0, bottom: screenSize.height } } var vy = 0; if (bBound.top < outBound.top) { vy = bBound.top - outBound.top; } else if (bBound.bottom > outBound.bottom) { vy = bBound.bottom - outBound.bottom; } var dt = 1 / 30; if (vy !== 0) { var copyEvent = { type: event.type, preventDefault: function () {/* noop */ }, target: event.target }; copyEvent.clientX = event.clientX; copyEvent.clientY = event.clientY var thisBT = this; setTimeout(function () { if (scroller.scrollHeight > scroller.clientHeight) { scroller.scrollTop += absCeil(vy * dt); } if (thisBT._state === 1) { thisBT.eventHandler.dragOverflow(copyEvent); } }, dt * 1000); } }; DraggableVStack.eventHandler.scroll = function (event) { this._updateDraggingPosition(); }; DraggableVStack.eventHandler.dragend = function (event) { this.stopTrackPosition(); event.preventDefault(); this._dragData.dest.removeClass('as-state-drag'); this.$cloneContainer.remove(); this._dragData.elt.removeClass('dragging'); this.removeClass('as-state-no-change'); this._state = 0; var beforeElt; if (this._dragData.dest === this) { if (this._dragData.idx === this._dragData.destIdx || (this._dragData.idx + 1 === this._dragData.destIdx)) { //todo } else { if (this._dragData.destIdx === this.childNodes.length) { this._dragData.elt.remove(); this.addChild(this._dragData.elt); this.emit('change', { type: 'change', fromStack: this, toStack: this, elt: this._dragData.elt, sourceIndex: this._dragData.idx, destIndex: this.childNodes.length, oldIdx: this._dragData.idx, newIdx: this.childNodes.length - 1, desc: "Move element to end of stack." }, this); this.emit('orderchange', { type: 'orderchange', fromStack: this, toStack: this, elt: this._dragData.elt, oldIdx: this._dragData.idx, newIdx: this.childNodes.length - 1, desc: "Move element to end of stack." }, this); } else { beforeElt = this.childNodes[this._dragData.destIdx]; this._dragData.elt.remove(); this.addChildBefore(this._dragData.elt, beforeElt); this.emit('change', { type: 'change', fromStack: this, toStack: this, elt: this._dragData.elt, sourceIndex: this._dragData.idx, destIndex: this._dragData.destIdx, oldIdx: this._dragData.idx, newIdx: this._dragData.destIdx > this._dragData.idx ? this._dragData.destIdx - 1 : this._dragData.destIdx, desc: "Move element to before this.childNodes[" + this._dragData.destIdx + "]" }, this); this.emit('orderchange', { type: 'orderchange', fromStack: this, toStack: this, elt: this._dragData.elt, oldIdx: this._dragData.idx, newIdx: this._dragData.destIdx > this._dragData.idx ? this._dragData.destIdx - 1 : this._dragData.destIdx, desc: "Move element to before this.childNodes[" + this._dragData.destIdx + "]" }, this); } } } else { if (this._dragData.destIdx === this._dragData.dest.childNodes.length) { this.emit('orderchange', { type: 'itemleave', fromStack: this, toStack: this._dragData.dest, oldIdx: this._dragData.idx, newIdx: this.childNodes.length - 1, desc: "Move element to end of friend stack." }, this); this._dragData.elt.remove(); this._dragData.dest.addChild(this._dragData.elt); this._dragData.dest.emit('orderchange', { type: 'itementer', fromStack: this, toStack: this._dragData.dest, oldIdx: this._dragData.idx, newIdx: this.childNodes.length - 1, desc: "Move element to end of friend stack." }, this._dragData.dest); this.emit('change', { type: 'change', fromStack: this, toStack: this._dragData.dest, elt: this._dragData.elt, sourceIndex: this._dragData.idx, destIndex: this.childNodes.length, oldIdx: this._dragData.idx, newIdx: this.childNodes.length - 1, desc: "Move element to end of friend stack." }); } else { beforeElt = this._dragData.dest.childNodes[this._dragData.destIdx]; this._dragData.elt.remove(); this.emit('itemleave', { type: 'itemleave', fromStack: this, toStack: this._dragData.dest, elt: this._dragData.elt, oldIdx: this._dragData.idx, newIdx: this._dragData.destIdx, desc: "Move element to before friend.childNodes[" + this._dragData.destIdx + "]" }, this); this._dragData.dest.addChildBefore(this._dragData.elt, beforeElt); this._dragData.dest.emit('itementer', { type: 'itementer', fromStack: this, toStack: this._dragData.dest, elt: this._dragData.elt, oldIdx: this._dragData.idx, newIdx: this._dragData.destIdx, desc: "Move element to before friend.childNodes[" + this._dragData.destIdx + "]" }, this._dragData.dest); this.emit('change', { type: 'change', fromStack: this, toStack: this._dragData.dest, elt: this._dragData.elt, sourceIndex: this._dragData.idx, destIndex: this._dragData.destIdx, oldIdx: this._dragData.idx, newIdx: this._dragData.destIdx, desc: "Move element to before friend.childNodes[" + this._dragData.destIdx + "]" }, this); } } }; DraggableVStack.prototype._updateDestChildrenBound = function () { var top0 = this._dragData.dest.getBoundingClientRect().top; this._dragData.destChildBounds = Array.prototype.map.call(this._dragData.dest.childNodes, function (elt) { return elt.getBoundingClientRect() }); this._dragData.destChildTops = this._dragData.destChildBounds.map(function (bound) { return bound.top - top0; }).concat([(this._dragData.destChildBounds[this._dragData.destChildBounds.length - 1] || this.getBoundingClientRect()).bottom - top0]); } DraggableVStack.prototype._updateHoverDest = function () { var bound; var newDest; var friendElt; var friendList = this.$friends.concat([this]); var top0; for (var i = 0; i < friendList.length; ++i) { friendElt = friendList[i]; bound = Math_Rectangle.fromClientRect(friendElt.getBoundingClientRect()); if (bound.containsPoint(this._dragData.mouseCurrentPos)) { top0 = bound.y; newDest = friendElt; break; } } if (newDest && this._dragData.dest !== newDest) { this._dragData.dest.removeClass('as-state-drag'); this._dragData.dest = newDest; this._dragData.dest.addClass('as-state-drag'); this._dragData.dest.addStyle('--dest-y', 'unset'); this._updateDestChildrenBound(); } }; DraggableVStack.prototype._updateDraggingPosition = function () { var bound = this.getBoundingClientRect(); var clonePos = this._dragData.mouseCurrentPos.sub(this._dragData.offsetPos); this.$cloneContainer.addStyle({ top: clonePos.y + 'px', left: bound.left + 'px' }); this._dragData.destIdx = this._dragData.dest._findIndex(clonePos.y + this._dragData.eltBound.height / 2); this._dragData.dest.addStyle('--dest-y', this._dragData.destChildTops[this._dragData.destIdx] + 'px'); if (this._dragData.dest === this) { if (this._dragData.idx === this._dragData.destIdx || (this._dragData.idx + 1 === this._dragData.destIdx)) { this.addClass('as-state-no-change'); } else { this.removeClass('as-state-no-change'); } } }; DraggableVStack.prototype._autoScrollParentIfNeed = function (delta) { //todo: choose which element should be scroll if (!(delta > 0)) delta = 10000; var bound = this.getBoundingClientRect(); var cloneBound = this.$cloneContainer.getBoundingClientRect(); var outBound = Dom["b" /* default */].traceOutBoundingClientRect(this.$cloneContainer); if (outBound.bottom >= cloneBound.bottom && outBound.top <= cloneBound.top) return; var scrollables = []; var current = this; while (current) { var oy = window.getComputedStyle(current); oy = oy['overflow-y'] || oy['overflowY']; if (oy == 'auto' || oy == 'scroll') { scrollables.push(current); } current = current.parentElement; } scrollables.push(document.body.parentElement); }; DraggableVStack.prototype._findDragzone = function (elt) { var result = null; while (elt && elt != this) { if (elt.classList && elt.classList.contains('drag-zone')) { result = elt; break; } elt = elt.parentNode; } if (result) { elt = result; while (elt && elt != this) { if (elt.classList && (elt.classList.contains('absol-draggable-stack'))) { result = null; break; } elt = elt.parentNode; } } return result; }; DraggableVStack.prototype._findDirectChild = function (elt) { while (elt && elt != this) { if (elt.parentNode == this) return elt; elt = elt.parentNode; } return undefined; }; DraggableVStack.property = {}; DraggableVStack.property.friends = { set: function (value) { if (!(value instanceof Array)) value = [value]; this._friends = value; }, get: function () { return this._friends; } }; ACore["d" /* default */].install(DraggableVStack); /* harmony default export */ var js_DraggableVStack = (DraggableVStack); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DraggableHStack.js var DraggableHStack_ = ACore["d" /* default */]._; var DraggableHStack_$ = ACore["d" /* default */].$; /*** * @augments DraggableVStack * @augments PositionTracker * @constructor */ function DraggableHStack() { this._dragData = null; this.$cloneContainer = DraggableHStack_('.absol-draggable-stack-clone-container'); this.on('predrag', this.eventHandler.predrag) .on('dragstart', this.eventHandler.dragstart) .on('drag', this.eventHandler.drag) .on('dragend', this.eventHandler.dragend); DraggableHStack_({ elt: this, tag: js_PositionTracker }) .on('positionchange', this._updateDraggingPosition.bind(this)); } DraggableHStack.tag = "DraggableHStack".toLowerCase(); DraggableHStack.render = function () { return DraggableHStack_({ tag: 'hanger', extendEvent: 'change', class: ['absol-draggable-stack', 'absol-draggable-hstack'] }); }; /*** * * @param {Rectangle} rect * @returns {number} * @private */ DraggableHStack.prototype._findDropIdx = function (rect) { if (!this._dragData) return -1; var centerX = rect.x + rect.width / 2; var currentBound = Math_Rectangle.fromClientRect(this.getBoundingClientRect()); var nearestDistance = Math.abs(centerX - currentBound.width);//end of stack var cDist; var nearestIndex = this._dragData.childBounds.length; var childX; for (var i = 0; i < this._dragData.childBounds.length; ++i) { childX = this._dragData.childBounds[i].x + currentBound.x - this._dragData.bound.x; cDist = Math.abs(centerX - childX); if (cDist < nearestDistance) { nearestDistance = cDist; nearestIndex = i; } } return nearestIndex; }; /*** * * @type {DraggableHStack|{}} */ DraggableHStack.eventHandler = {}; DraggableHStack.eventHandler.predrag = js_DraggableVStack.eventHandler.predrag; DraggableHStack.eventHandler.dragstart = function (event) { this.addClass('as-has-dragging'); this.startTrackPosition(); var mousePos = new Math_Vec2(event.clientX, event.clientY); var elt = this._findDirectChild(event.target); var childBounds = Array.prototype.map.call(this.childNodes, function (e) { return Math_Rectangle.fromClientRect(e.getBoundingClientRect()); }); var eltIdx = Array.prototype.indexOf.call(this.childNodes, elt); var eltBound = childBounds[eltIdx]; var eltMouseOffset = mousePos.sub(new Math_Vec2(eltBound.x, eltBound.y)); this._dragData = { mouseStartPos: mousePos, mousePos: mousePos, bound: Math_Rectangle.fromClientRect(this.getBoundingClientRect()), childBounds: childBounds, elt: elt, eltIdx: eltIdx, eltBound: eltBound, eltMouseOffset: eltMouseOffset }; this.$cloneContainer.addStyle({ left: eltBound.x + 'px', top: eltBound.y + 'px', width: eltBound.width + 'px', height: eltBound.height + 'px', }).clearChild() .addChild(DraggableHStack_$(elt.cloneNode(true))) .addTo(document.body); elt.addClass('as-dragging'); this._updateDraggingPosition(); }; DraggableHStack.eventHandler.drag = function (event) { event.preventDefault(); this._dragData.mousePos = new Math_Vec2(event.clientX, event.clientY); this._updateDraggingPosition(); }; DraggableHStack.eventHandler.dragend = function (event) { var thisS = this; this.stopTrackPosition(); this.removeClass('as-has-dragging'); this._dragData.elt.removeClass('as-dragging'); if (this._dragData.destIdx == this._dragData.eltIdx || this._dragData.destIdx == this._dragData.eltIdx + 1) { this.$cloneContainer.addClass('as-home-going'); this._updateDraggingPosition(); setTimeout(function () { thisS.$cloneContainer.selfRemove() .removeClass('as-home-going'); }, 100); } else { if (this._dragData.destIdx === this._dragData.childBounds.length) { this._dragData.elt.remove(); this.addChild(this._dragData.elt); this.emit('change', { type: 'change', elt: this._dragData.elt, sourceIndex: this._dragData.eltIdx, destIndex: this._dragData.childBounds.length, oldIdx: this._dragData.eltIdx, newIdx: this._dragData.childBounds.length - 1, desc: "Move element to end of stack." }, this); } else { var beforeElt = this.childNodes[this._dragData.destIdx]; this._dragData.elt.remove(); this.addChildBefore(this._dragData.elt, beforeElt); this.emit('change', { type: 'change', elt: this._dragData.elt, sourceIndex: this._dragData.eltIdx, destIndex: this._dragData.destIdx, oldIdx: this._dragData.eltIdx, newIdx: this._dragData.destIdx > this._dragData.eltIdx ? this._dragData.destIdx - 1 : this._dragData.destIdx, desc: "Move element to before this.childNodes[" + this._dragData.destIdx + "]" }, this); } this.$cloneContainer.selfRemove() .removeClass('as-home-going'); } this.removeClass('as-no-change'); }; DraggableHStack.prototype._findDragzone = js_DraggableVStack.prototype._findDragzone; DraggableHStack.prototype._findDirectChild = js_DraggableVStack.prototype._findDirectChild; DraggableHStack.prototype._updateDraggingPosition = function () { var bound = this.getBoundingClientRect(); var x, y; if (this.$cloneContainer.hasClass('as-home-going')) { x = this._dragData.eltBound.x - this._dragData.bound.x + bound.left; y = this._dragData.eltBound.y - this._dragData.bound.y + bound.top; } else { y = bound.top + (this._dragData.eltBound.y - this._dragData.bound.y); var newPos = this._dragData.mousePos.sub(this._dragData.eltMouseOffset); x = newPos.x; } this.$cloneContainer.addStyle({ left: x + 'px', top: y + 'px' }); var cBound = this._dragData.eltBound.clone(); cBound.x = x; cBound.y = y; var destIdx = this._findDropIdx(cBound); this._dragData.destIdx = destIdx; var destX; if (destIdx >= this._dragData.childBounds.length) { var lastRect = this._dragData.childBounds[this._dragData.childBounds.length - 1]; destX = lastRect.x + lastRect.width - this._dragData.bound.x; } else { destX = this._dragData.childBounds[destIdx].x - this._dragData.bound.x; } this.addStyle('--dest-x', destX + 'px'); if (destIdx == this._dragData.eltIdx || destIdx == this._dragData.eltIdx + 1) { this.addClass('as-no-change'); } else { this.removeClass('as-no-change'); } }; ACore["d" /* default */].install(DraggableHStack); /* harmony default export */ var js_DraggableHStack = (DraggableHStack); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/droppanel.css var droppanel = __webpack_require__(46); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/exptree.css var exptree = __webpack_require__(125); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ExpTree.js var ExpTree_ = ACore["d" /* default */]._; var ExpTree_$ = ACore["d" /* default */].$; ACore["d" /* default */].install('toggler-ico', function () { var res = ExpTree_( '<svg class="toggler-ico" width="14" height="14" version="1.1" viewBox="0 0 3.7042 3.7042" xmlns="http://www.w3.org/2000/svg" >' + ' <rect style="fill: transparent; stroke: none" x="0" y="0" width="3.7042" height="3.7042"></rect>' + ' <g transform="translate(0 -293.3)" class="toggle-close">' + ' <path d="m0.52917 293.82v2.6458l2.6458-1.3229z" />' + ' </g>' + ' <g transform="translate(0 -293.3)" class="toggle-open">' + ' <path d="m3.175 294.09-2.6458 2.1167h2.6458z"/>' + ' </g>' + '</svg>' ); return res; }); ACore["d" /* default */].install('remove-ico', function () { return ExpTree_('<svg class="remove-ico" width="24" height="24" viewBox="0 0 24 24">\ <rect style="fill: transparent; stroke: none" x="0" y="0" width="24" height="24"></rect>\ <path class="close" d="M3,16.74L7.76,12L3,7.26L7.26,3L12,7.76L16.74,3L21,7.26L16.24,12L21,16.74L16.74,21L12,16.24L7.26,21L3,16.74" />\ <circle class="modified" cx="12" cy="12" r="10" />\ </svg>'); }); /*** * @extends AElement * @constructor */ function ExpNode() { var thisEN = this; this.$level = ExpTree_$('.absol-exp-node-level', this); this.$removeIcon = ExpTree_$('remove-ico', this) .on('click', function (event) { thisEN.emit('pressremove', {target: thisEN, type: 'pressremove'}, this); }); this.on('keydown', this.eventHandler.buttonKeydown); this.$toggleIcon = ExpTree_$('toggler-ico', this); this.on('click', (event)=> { var toggleBound = this.$toggleIcon.getBoundingClientRect(); if (toggleBound.width > 0 && event.clientX <= toggleBound.right) { this.emit('presstoggle', Object(EventEmitter["a" /* copyEvent */])(event, {target: thisEN, type: 'pressremove'}), this); } else if (!EventEmitter["b" /* default */].hitElement(thisEN.$removeIcon, event)) { this.emit('press', Object(EventEmitter["a" /* copyEvent */])(event, {target: thisEN, type: 'press'}), this); } }); this.$iconCtn = ExpTree_$('div.absol-exp-node-ext-icon', this); this.$extIcon = ExpTree_$('img.absol-exp-node-ext-icon', this); this.$name = ExpTree_$('span.absol-exp-node-name', this); this.$desc = ExpTree_$('span.absol-exp-node-desc', this); contenteditableTextOnly(this.$name, function (text) { return text.replace(/[\\\/\|\?\:\<\>\*\r\n]/, '').trim(); }); OOP["a" /* default */].drillProperty(thisEN, thisEN.$extIcon, 'extSrc', 'src'); this._level = 0; this.__isExpNode__ = true; return thisEN; } ExpNode.tag = 'expnode'; ExpNode.render = function () { return ExpTree_({ tag: 'button', extendEvent: ['pressremove', 'press', 'presstoggle'], class: 'absol-exp-node', child: [ '.absol-exp-node-level', 'remove-ico', 'toggler-ico', 'img.absol-exp-node-ext-icon', 'div.absol-exp-node-ext-icon', 'span.absol-exp-node-name', 'span.absol-exp-node-desc' ] }); }; ExpNode.property = {}; ExpNode.property.icon = { set: function (value) { if (this.$iconP) { this.$iconP.remove(); this.$iconP = undefined; } if (value) { var newE; if (Dom["b" /* default */].isDomNode(value)) { newE = value; } else { newE = ExpTree_(value); } this.$iconP = newE; this.$iconCtn.addChild(newE); this._icon = value; } else { this._icon = undefined; } }, get: function () { return this._icon; } }; ExpNode.property.level = { set: function (value) { value = value || 0; if (value !== this.level) { this._level = value || 0; this.$level.innerHTML = ' '.repeat(this._level * 6); } }, get: function () { return this._level || 0; } }; ExpNode.property.name = { set: function (value) { value = value + ''; this._name = value; this.$name.clearChild(); if (value && value.length > 0) this.$name.addChild(ExpTree_({text: value})); }, get: function () { return this._name || ''; } }; ExpNode.property.desc = { set: function (value) { this._desc = (value || '') + ''; this.$desc.clearChild(); this.$desc.addChild(ExpTree_({text: this._desc})); }, get: function () { return this._desc || ''; } }; ExpNode.property.status = { set: function (value) { this.removeClass('status-open') .removeClass('status-close') .removeClass('status-modified') .removeClass('status-removable'); if (!value || value == 'none') { //todo } else if (value == 'close') { this.addClass('status-close') } else if (value == 'open') { this.addClass('status-open'); } else if (value == 'removable') { this.addClass('status-removable'); } else if (value == 'modified') { this.addClass('status-modified'); } else { throw new Error('Invalid status ' + value) } this._status = value; }, get: function () { return this._status; } } ExpNode.property.active = { set: function (value) { if (value) { this.addClass('as-active'); this.addClass('active'); } else { this.removeClass('as-active'); this.removeClass('active'); } }, get: function () { return this.hasClass('as-active'); } }; ExpNode.prototype.rename = function (resolveCallback, rejectCallback) { var self = this; var span = this.$name; var lastName = span.innerHTML; span.attr('contenteditable', 'true'); span.focus(); document.execCommand('selectAll', false, null); function keydowEventHandle(event) { var key = event.key; if (key == 'Enter') { event.preventDefault(); span.blur(); span.attr('contenteditable', undefined); } else if (key == "ESC") { event.preventDefault(); span.innerHTML = lastName; span.blur(); span.attr('contenteditable', undefined); } } function blurEventHandle(event) { finish(); var curentName = span.innerHTML.replace(/[\\\/\|\?\:\<\>\*\r\n]/, '').trim(); if (curentName == lastName) { rejectCallback && rejectCallback(); } else { if (curentName.length == 0) { span.innerHTML = lastName; rejectCallback && rejectCallback(); } else { var res = resolveCallback && resolveCallback(curentName); if (res === false) { span.innerHTML = lastName; } else if (res && res.then) { res.then(function (result) { if (result === false) { span.innerHTML = lastName; //faile } else { //success } }, function () { //reject value span.innerHTML = lastName; }) } else { //success } } } } function finish() { span.off('keydown', keydowEventHandle); span.off('blur', blurEventHandle); ExpTree_$(document.body).once('click', function () { setTimeout(function () { span.attr('contenteditable', undefined); }, 2); }); } span.on('keydown', keydowEventHandle); span.on('blur', blurEventHandle); }; ExpNode.prototype.findNodeBefore = function () { var tree = this.parentElement; var root; var prevTree; var res = null; if (tree.__isExpTree__) { root = tree.getRoot(); root.visitRecursive(function (cTree) { if (cTree === tree) { res = prevTree; } prevTree = cTree; }) } return res && res.getNode(); }; ExpNode.prototype.findNodeAfter = function () { var tree = this.parentElement; var root; var prevTree; var res = null; if (tree.__isExpTree__) { root = tree.getRoot(); root.visitRecursive(function (cTree) { if (prevTree === tree) { res = cTree; } prevTree = cTree; }) } return res && res.getNode(); }; ExpNode.eventHandler = {}; /**** * * @param {KeyboardEvent} event */ ExpNode.eventHandler.buttonKeydown = function (event) { if (event.target === this) { if (!event.metaKey && !event.shiftKey && !event.ctrlKey && !event.altKey) { var destNode; var tree = this.parentElement; var parentTree = tree && tree.getParent(); switch (event.key) { case 'ArrowLeft': if (tree.status === 'open') { tree.status = 'close'; tree.notifyStatusChange(); } else { destNode = parentTree && parentTree.getNode(); } break; case 'ArrowRight': if (tree.status === 'close') { tree.status = 'open'; tree.notifyStatusChange(); } else { destNode = this.findNodeAfter(); } break; case 'ArrowUp': destNode = this.findNodeBefore(); break; case 'ArrowDown': destNode = this.findNodeAfter(); break; case 'Space': this.click(); break; } if (destNode) { destNode.focus(); event.preventDefault(); } } } }; /*** * @extends AElement * @constructor */ function ExpTree() { var thisET = this; this.$node = ExpTree_$('expnode', this) .on('press', function (event) { thisET.emit('press', Object.assign({}, { target: thisET, node: this, type: 'press' }, event), this); }) .on('pressremove', function (event) { thisET.emit('pressremove', Object.assign({}, { target: thisET, node: this, type: 'pressremove' }, event), this); }) .on('presstoggle', this.eventHandler.nodePressToggle); this.$itemsContainer = ExpTree_$('.absol-exp-items', thisET); OOP["a" /* default */].drillProperty(this, this.$node, ['desc', 'name', 'title', 'extSrc', 'active', 'icon']); this.__isExpTree__ = true; this._level = 0; } ExpTree.tag = 'ExpTree'.toLowerCase(); ExpTree.render = function () { return ExpTree_({ class: 'absol-exp-tree', extendEvent: ['press', 'pressremove', 'statuschange'], child: [ 'expnode', '.absol-exp-items' ] }); }; ExpTree.property = {}; ExpTree.property.level = { set: function (value) { value = value || 0; if (value != this.level) { this.$node.level = value; Array.prototype.forEach.call(this.$itemsContainer.childNodes, function (e) { e.level = value + 1; }) } }, get: function () { return this.$node.level; } }; ExpTree.property.status = { set: function (value) { this.$node.status = value; if (value != 'open') { this.addClass('hide-children'); } else { this.removeClass('hide-children'); } }, get: function () { return this.$node.status; } }; ['findChildBefore', 'findChildAfter', 'removeChild', 'clearChild'] .forEach(function (key) { ExpTree.prototype[key] = function () { this.$itemsContainer[key].apply(this.$itemsContainer, arguments); } }); ExpTree.prototype.addChild = function (child) { if (!child.__isExpTree__) throw new Error('Child node must be a ExpTree'); child.level = this.level + 1; this.$itemsContainer.addChild(child); }; ExpTree.prototype.addChildBefore = function (child, at) { child.level = this.level + 1; this.$itemsContainer.addChildBefore(child, at); }; ExpTree.prototype.addChildAfter = function (child, at) { child.level = this.level + 1; this.$itemsContainer.addChildAfter(child, at); }; /**** * * @return {ExpTree} */ ExpTree.prototype.getParent = function () { var current = this.parentNode; while (current) { if (current.__isExpTree__) break; current = current.parentNode; } return current; }; /*** * * @return {ExpTree} */ ExpTree.prototype.getRoot = function () { var parent = this.getParent(); if (!parent) return this; return parent.getRoot(); } ExpTree.prototype.getNode = function () { return this.$node; }; ExpTree.prototype.getChildren = function () { return Array.apply(null, this.$itemsContainer.childNodes); }; /*** * * @param {function(tree: ExpTree): void} cb */ ExpTree.prototype.visitRecursive = function (cb) { cb(this); if (this.status === 'open') Array.prototype.forEach.call(this.$itemsContainer.childNodes, function (child) { child.visitRecursive(cb); }); }; ExpTree.prototype.getPath = function () { var path = []; var current = this; while (current) { path.push(current.name); current = current.getParent(); } return path.reverse(); }; ExpTree.prototype.accessByPath = function (path) { if (path.length == 0) return this; var childs = this.getChildren(); var res; for (var i = 0; i < childs.length; ++i) { if (childs[i].name == path[0]) { res = childs[i].accessByPath(path.slice(1)); break; } } return res; }; ExpTree.prototype.toggle = function () { switch (this.status) { case 'close': this.status = 'open'; break; case 'open': this.status = 'close'; break; } }; ExpTree.prototype.notifyStatusChange = function (props) { this.emit('statuschange', Object.assign({type: 'statuschange', target: this}, props), this); }; ExpTree.eventHandler = {}; ExpTree.eventHandler.nodePressToggle = function (event) { this.toggle(); this.notifyStatusChange({originEvent: event}); }; /*** * @extends ExpTree * @constructor */ function ExpGroup() { this.addClass('as-exp-group'); this.__isExpTree__ = true; this.name = ''; } ExpGroup.tag = 'ExpGroup'.toLowerCase(); ExpGroup.render = function () { return ExpTree_('div'); }; /*** * * @param {function(tree: ExpTree): void} cb */ ExpGroup.prototype.visitRecursive = function (cb) { Array.prototype.forEach.call(this.childNodes, function (child) { child.visitRecursive(cb); }); }; ExpGroup.prototype.getParent = function () { return null; }; ExpGroup.prototype.getRoot = function () { return this; }; ExpGroup.prototype.getNode = function () { return null; }; ACore["d" /* default */].install(ExpNode); ACore["d" /* default */].install(ExpTree); ACore["d" /* default */].install(ExpGroup); /* harmony default export */ var js_ExpTree = (ExpTree); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DropPanel.js var DropPanel_ = ACore["d" /* default */]._; var DropPanel_$ = ACore["d" /* default */].$; /** * @extends AElement * @constructor */ function DropPanel() { var thisDP = this; /*** * * @type {ExpGroup} */ this.$body = DropPanel_$('.absol-drop-panel-body', this); this.$head = DropPanel_$('.absol-drop-panel-head', this) .on('click', thisDP.eventHandler.clickHead); this.$name = DropPanel_$('.absol-drop-panel-name', thisDP); OOP["a" /* default */].drillProperty(this, this.$name, 'name', 'innerHTML'); return thisDP; } DropPanel.tag = 'DropPanel'.toLowerCase(); DropPanel.render = function () { return DropPanel_({ class: 'absol-drop-panel', extendEvent: ['toggle'], child: [ { class: 'absol-drop-panel-head', child: [ 'toggler-ico', { tag: 'span', class: "absol-drop-panel-name" } ] }, { tag:'expgroup', class: ['absol-drop-panel-body', 'absol-bscroller'] } ] }); }; DropPanel.eventHandler = {}; DropPanel.eventHandler.clickHead = function (event) { if (!this._childOfButton(event.target)) { var event = { target: this, isShowed: this.show, preventDefault: function () { this.prevented = true; } }; this.emit('toggle', event, this); if (!event.prevented) { this.toggle(); } } }; ['findChildBefore', 'findChildAfter', 'removeChild', 'clearChild', 'addChild'] .forEach(function (key) { DropPanel.prototype[key] = function () { this.$body[key].apply(this.$body, arguments); } }); DropPanel.prototype._childOfButton = function (elt) { while (elt && elt != this) { if (elt.tagName == "BUTTON") { return true; } elt = elt.parentElement } return false; }; DropPanel.prototype.toggle = function () { this.show = !this.show; }; DropPanel.property = {}; DropPanel.property.show = { set: function (value) { if (value) { var maxHeight = parseFloat(this.getComputedStyleValue('max-height').replace('px', '')); var headBound = this.$head.getBoundingClientRect(); if (maxHeight != 'none' && maxHeight != 'auto') { this.$body.addStyle('max-height', maxHeight - headBound.height + 'px'); } this.$body.addStyle('height', this.$body.scrollHeight + 'px'); setTimeout(function () { this.$body.removeStyle('height'); window.dispatchEvent(new Event('resize')); }.bind(this), 200); this.addClass('show'); } else { this.$body.addStyle('height', this.$body.scrollHeight + 'px'); setTimeout(function () { this.$body.addStyle('height', '0'); }.bind(this), 0); setTimeout(function () { this.$body.removeStyle('height'); window.dispatchEvent(new Event('resize')); }.bind(this), 200); this.removeClass('show'); } }, get: function () { return this.hasClass('show'); } }; ACore["d" /* default */].install(DropPanel); /* harmony default export */ var js_DropPanel = (DropPanel); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DropPanelStack.js var DropPanelStack_ = ACore["d" /* default */]._; var DropPanelStack_$ = ACore["d" /* default */].$; /** * @extends AElement * @constructor */ function DropPanelStack() { var res = this; this.$attachHook = DropPanelStack_('attachhook').on('error', function () { Dom["b" /* default */].addToResizeSystem(this); this.updateSize = res.updateSize.bind(res); }); this.sync = new Promise(function (rs) { res.$attachHook.once('error', rs); }); } DropPanelStack.tag = 'DropPanelStack'.toLowerCase(); DropPanelStack.render = function () { return DropPanelStack_({ class: 'absol-drop-panel-stack', child: ['attachhook'] }); }; DropPanelStack.prototype.updateSize = function () { }; DropPanelStack.prototype.getFreeHeight = function () { var childNodes = this.childNodes; var sumHeight = 0; var bound = this.getBoundingClientRect(); var childBound; for (var i = 0; i < childNodes.length; ++i) { var child = childNodes[i]; if (child.hasClass && child.hasClass('absol-drop-panel')) { childBound = child.getBoundingClientRect(); sumHeight += childBound.height; } } return bound.height - sumHeight; }; DropPanelStack.prototype.addChild = function (child) { var self = this; if (child.hasClass('absol-drop-panel')) { //remove last event listener off other parent if (child.__drop_panel_toggle_listener__) { child.off('toggle', child.__drop_panel_toggle_listener__); } child.__drop_panel_toggle_listener__ = function (event) { event.preventDefault(); self.sync = self.sync.then(function () { if (event.isShowed) { setTimeout(function () { child.removeStyle('max-height'); }, 200); child.toggle(); } else { var headBound = child.$head.getBoundingClientRect(); var vailableHeight = self.getFreeHeight(); if (vailableHeight > 3) { child.addStyle('max-height', self.getFreeHeight() + headBound.height + 'px'); child.toggle(); } } return new Promise(function (rs) { setTimeout(rs, 200); }); }) }; child.on('toggle', child.__drop_panel_toggle_listener__); this.super(child); } else { throw new Error('Child element must be a DropPanel'); } }; ACore["d" /* default */].install('droppanelstack', DropPanelStack); /* harmony default export */ var js_DropPanelStack = (DropPanelStack); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/editabletext.css var editabletext = __webpack_require__(127); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/EditableText.js var EditableText_ = ACore["d" /* default */]._; var EditableText_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function EditableText() { var thisET = this; this.$span = EditableText_$('span', this); this.$text = document.createTextNode(''); this.$span.addChild(this.$text); this.$higne = EditableText_$('.absol-editabe-text-higne', this); this.$input = EditableText_$('input', this); OOP["a" /* default */].drillProperty(this, this.$input, ['selectionStart', 'selectionEnd']); this.sync = new Promise(function (rs) { EditableText_('attachhook').addTo(thisET).once('error', rs); }); this.$input.on('keydown', this.eventHandler.inputKeyDown, true); this.$input.on('change', this.eventHandler.inputChange); this.$input.on('blur', this.eventHandler.inputBlur); }; EditableText.tag = 'EditableText'.toLowerCase(); EditableText.render = function () { return EditableText_({ class: 'absol-editabe-text', extendEvent: ['blur', 'focus', 'change', 'modify'], child: [ { class: 'absol-editabe-text-higne', child: '<input type="text">' }, 'span' ] }); }; EditableText.prototype.focus = function () { this.$input.focus(); }; EditableText.prototype.blur = function () { this.$input.blur(); }; EditableText.prototype.select = function () { this.$input.select(); }; EditableText.prototype.edit = function (flag, select) { this.editing = !!flag; this.sync = this.sync.then(function () { if (flag) { this.focus(); if (select) this.select(); } else this.blur(); }.bind(this)); return this.sync; } EditableText.prototype._update = function () { this.sync = this.sync.then(function () { return new Promise(function (rs) { // setTimeout(function () { var bound = this.getBoundingClientRect(); var higneBound = this.$higne.getBoundingClientRect(); var fsize = this.getFontSize(); this.$input.addStyle('width', bound.width + 4 + fsize * 0 + 'px'); this.$input.addStyle('height', bound.height + 4 + 'px'); this.$input.addStyle('left', bound.left - higneBound.left - 2 + 'px'); this.$input.addStyle('top', bound.top - higneBound.top + 'px'); rs(); }.bind(this)); }.bind(this)); } EditableText.property = {}; EditableText.property.text = { set: function (value) { this.$text.textContent = value; this.$input.value = value; }, get: function () { return this.$text.textContent; } } EditableText.property.editing = { set: function (value) { if (this._editting === value) return; this._editting = !!value; if (value) { this.$input.value = this.text; this._update(); this.sync = this.sync.then(function () { this.addClass('editing'); this.$input.value = this.text; this.$input.addStyle('font', this.$span.getComputedStyleValue('font')); this.$input.addStyle('font-style', this.$span.getComputedStyleValue('font-style')); this.$input.addStyle('color', this.$span.getComputedStyleValue('color')); }.bind(this)); } else { this.removeClass('editing'); } }, get: function () { return !!this._editting; } }; EditableText.eventHandler = {}; EditableText.eventHandler.inputKeyDown = function (event) { requestAnimationFrame(function () { this.text = this.$input.value; this._update(); event.text = this.text; this.emit('modify', event); }.bind(this)); }; EditableText.eventHandler.inputChange = function (event) { this.editing = false; this.emit('change', event); }; EditableText.eventHandler.inputBlur = function (event) { this.editing = false; this.emit('blur', event); }; ACore["d" /* default */].install(EditableText); /* harmony default export */ var js_EditableText = (EditableText); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/emojipicker.css var emojipicker = __webpack_require__(129); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Sprite.js var Sprite_ = ACore["d" /* default */]._; var Sprite_$ = ACore["d" /* default */].$; var NOT_READY = 0; var READY = 1; var START = 2; var RUNNING = 3; var PAUSE = 4; var STOP = 5; var ERROR = 6; var STATE_TO_STRING = ['NOT_READY', 'READY', 'START', 'RUNNING', 'PAUSE', 'STOP', 'ERROR']; /** * @augments AElement * @augments HTMLCanvasElement * @constructor */ function Sprite() { this.loadTextureTimeout = 5000; this._textureLoaded = false; this._state = NOT_READY; this.defineEvent(['ready', 'srcerror', 'play', 'resume', 'pause', 'stop', 'reset', 'end', 'frame']); this._length = 60; this._lastDrawFrame = -1; this._frameIndex = 0; this._timeout = -1; this.ctx = this.getContext('2d'); this._fps = 10; this._lastDrawMilis = 0; this._overTime = 0; this.draw = this.draw.bind(this); this.texture = null; this._frames = { type: 'grid', col: 1, row: 1 }; this._loop = false; } Sprite.cache = {}; Sprite.prototype.draw = function () { //todo var now = new Date().getTime(); var dt = this._overTime + now - this._lastDrawMilis; var di = Math.floor(dt / 1000 * this._fps); var frameIndex = (this._frameIndex + di); if (this._loop) { frameIndex = frameIndex % this._length; } else { frameIndex = Math.min(this._length - 1, frameIndex); } if (!isNaN(this._frameIndex) && frameIndex != this._frameIndex) { this.drawFrame(this._frameIndex); } this._overTime = dt - di * 1000 / this._fps; var nextTime = now + 1000 / this._fps - this._overTime - new Date().getTime(); this._lastDrawMilis = now; this._frameIndex = frameIndex; this._timeout = -1; if (this._loop || frameIndex + 1 < this._length) { if (this._state == RUNNING) this._timeout = setTimeout(this.draw, nextTime); } else this.stop(); }; Sprite.prototype.drawFrame = function (index) { if (this._lastDrawFrame == index) return; this._lastDrawFrame = index; this.ctx.clearRect(0, 0, this.width, this.height); if (this._frames.type == 'grid') { var imgWidth = this.texture.naturalWidth; var imgHeight = this.texture.naturalHeight; var sHeight = imgHeight / this._frames.row; var sWidth = imgWidth / this._frames.col; var sx = (index % this._frames.col) * sWidth; var sy = Math.floor(index / this._frames.col) * sHeight; this.ctx.drawImage(this.texture, sx, sy, sWidth, sHeight, 0, 0, this.width, this.height) } else { } this.emit('frame', { name: 'frame', target: this, frameIndex: index }, this); }; Sprite.prototype.stop = function () { this.pause(); if (this._state != PAUSE) return this; this._state = STOP; this.emit('stop', { name: 'stop', target: this }, this); return this; }; Sprite.prototype.pause = function () { if (this._state != RUNNING) return this; this._state = PAUSE; if (this._timeout > 0) { clearTimeout(this._timeout); this._timeout = -1; } var now = new Date().getTime(); this._overTime += now - this._lastDrawMilis; this.emit('pause', { name: 'pause', target: this }, this); }; Sprite.prototype.resume = function () { if (this._state != START && this._state != PAUSE) return this; if (this._state == RUNNING) return this; this._state = RUNNING; var now = new Date().getTime(); this._lastDrawMilis = now; this.draw(); this.emit('resume', { name: 'pause', target: this }, this); }; Sprite.prototype.reset = function () { this._frameIndex = 0; this._overTime = 0; } Sprite.prototype.play = function () { if (this._state == ERROR) return this; if (this._state == RUNNING) return this; if (this._state == READY || this._state == STOP) { this.reset(); } this._state = START; this.emit('play', { name: 'start', target: this }, this); this.resume(); return this; }; Sprite.prototype.afterReady = function () { var thisSprite = this; if (this._state != NOT_READY && this._state != ERROR) return Promise.resolve(); else return new Promise(function (rs, rj) { thisSprite.once('ready', rs); thisSprite.once('srcerror', rj); }); }; Sprite.tag = 'sprite'; Sprite.render = function () { return Sprite_('canvas.as-sprite'); }; Sprite.property = {}; Sprite.property.frames = { set: function (value) { this.stop(); this._lastDrawFrame = -1; if (value && value.type == 'grid') { this._length = value.col * value.row; } this._frames = value; if (this._textureLoaded && this._frames && this._state == NOT_READY) {//todo: verify frame this._state = READY; this.emit('ready', { target: this, name: 'ready' }, this); } }, get: function () { return this._frames; } }; Sprite.property.frameIndex = { set: function (value) { value = value || 0; if (value < 0) value = this._length - 1; if (this._loop) { this._frameIndex = value % this._length; this._overTime = 0; } else { this._frameIndex = Math.max(this._length - 1, value); this._overTime = 0; } this.drawFrame(this._frameIndex); }, get: function () { return this._frameIndex; } }; Sprite.property.src = { set: function (value) { this.stop(); this._lastDrawFrame = -1;//did not draw any thing value = value || []; var lastSrc = this._src; this._src = value || null; if (lastSrc == this._src) return; if (!value) this.texture = null; else { var cImage; if (!Sprite.cache[this._src]) { cImage = new Image(); Sprite.cache[this._src] = cImage; cImage.src = this._src; } else { cImage = Sprite.cache[this._src]; } this.texture = cImage; this._state = NOT_READY; var thisSprite = this; this._textureLoaded = false; Dom["b" /* default */].waitImageLoaded(this.texture, this.loadTextureTimeout).then(function (rs) { if (thisSprite.texture == cImage) { thisSprite._textureLoaded = true; if (thisSprite._frames) { thisSprite._lastDrawFrame = -1; thisSprite._state = READY; thisSprite.emit('ready', { target: thisSprite, name: 'ready' }, thisSprite); } } }, function () { if (thisSprite.texture == cImage) { thisSprite._state = ERROR; thisSprite.emit('srcerror', { target: thisSprite, name: 'srcerror' }, thisSprite); } }); } }, get: function () { return this._src; } } Sprite.property.state = { get: function () { return STATE_TO_STRING[this._state]; } }; Sprite.property.length = { get: function () { return this._length; } }; Sprite.property.fps = { set: function (value) { value = Math.max(value || 0, 0); this._fps = value; if (this._state == RUNNING) { clearTimeout(this._timeout); this._timeout = -1; var now = new Date().getTime(); this._overTime += now - this._lastDrawMilis; this._overTime = Math.min(1000 / this._fps, this._overTime); this.draw(); } }, get: function () { return this._fps; } }; Sprite.property.loop = { set: function (value) { value = !!value; this._loop = value; }, get: function () { return this._loop; } } ACore["d" /* default */].install(Sprite); /* harmony default export */ var js_Sprite = (Sprite); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiPicker.js var EmojiPicker_ = ACore["d" /* default */]._; var EmojiPicker_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function EmojiPicker() { var thisPicker = this; this._aliveTimeout = 90; this._assetRoot = this.attr('data-asset-root'); /*** * * @type {Sprite} */ this.$previewAnim = EmojiPicker_$('sprite.as-emoji-picker-preview-anim', this) .on('ready', this.eventHandler.previewAnimReady) .on('frame', this.eventHandler.previewAnimFrame); this.$previewAnim.loop = true; this.$previewAnim.src = this._assetRoot + '/anim/x120/' + js_EmojiAnims[0][1]; this.$previewAnim.fps = 30; this.$desc = EmojiPicker_$('.as-emoji-picker-preview-desc', this); this.$shortcut = EmojiPicker_$('.as-emoji-picker-preview-shortcut', this); this.$desc.clearChild().addChild(EmojiPicker_({ text: js_EmojiAnims[0][2] })); this.$shortcut.clearChild().addChild(EmojiPicker_({ text: js_EmojiAnims[0][0] })); this.$list = EmojiPicker_$('.as-emoji-picker-list', this); this.$items = js_EmojiAnims.reduce(function (ac, it) { var itemElt = EmojiPicker_({ tag: 'img', class: 'as-emoji-picker-item', props: { src: thisPicker._assetRoot + '/static/x20/' + it[1] } }).addTo(thisPicker.$list); itemElt.on('mouseenter', thisPicker.eventHandler.mouseenterItem.bind(thisPicker, it, itemElt)); itemElt.on('click', thisPicker.eventHandler.clickItem.bind(thisPicker, it)); ac[it[0]] = itemElt; return ac; }, {}); this.$attachook = EmojiPicker_('attachhook').addTo(this).on('error', this.eventHandler.attach); } EmojiPicker.assetRoot = (function (){ if (location.hostname.match(/^.*(\.?absol\.cf|absol\.ddns\.net)$/) ||location.hostname.match(/^localhost$/) ) return 'https://absol.cf/emoji'; return '/emoji'; })(); EmojiPicker.tag = 'EmojiPicker'.toLowerCase(); EmojiPicker.render = function (data) { data = data || {}; data.assetRoot = data.assetRoot || EmojiPicker.assetRoot; return EmojiPicker_({ class: 'as-emoji-picker', extendEvent: 'pick', attr: { 'data-asset-root': data.assetRoot }, child: [ { class: 'as-emoji-picker-preview', child: [ { class: '.as-emoji-picker-preview-anim-ctn', child: 'sprite.as-emoji-picker-preview-anim' }, '.as-emoji-picker-preview-desc', '.as-emoji-picker-preview-shortcut' ] }, { tag: 'bscroller', class: 'as-emoji-picker-list' } ] }); }; /** * @type {EmojiPicker} */ EmojiPicker.eventHandler = {}; EmojiPicker.eventHandler.attach = function () { this._aliveTimeout = 90; setTimeout(this.$previewAnim.play.bind(this.$previewAnim), 1); }; EmojiPicker.eventHandler.previewAnimReady = function () { this.$previewAnim.frames = { type: 'grid', col: 1, row: this.$previewAnim.texture.naturalHeight / this.$previewAnim.texture.naturalWidth }; this.$previewAnim.play(); }; EmojiPicker.eventHandler.previewAnimFrame = function () { if (this._aliveTimeout == 0) { var bound = this.getBoundingClientRect(); if (bound.width == 0) { this.$previewAnim.stop(); } else { this._aliveTimeout = 90; } } this._aliveTimeout--; }; EmojiPicker.eventHandler.mouseenterItem = function (itemData, itemElt, event) { if (this.$lastHoverItem == itemElt) return; this.$lastHoverItem = itemElt; this.$previewAnim.src = this._assetRoot + '/anim/x120/' + itemData[1]; this.$desc.clearChild().addChild(EmojiPicker_({ text: itemData[2] })); this.$shortcut.clearChild().addChild(EmojiPicker_({ text: itemData[0] })); }; EmojiPicker.eventHandler.clickItem = function (itemData, event) { this.emit('pick', { name: 'pick', key: itemData[0], target: this }, this); }; ACore["d" /* default */].install(EmojiPicker); /* harmony default export */ var js_EmojiPicker = (EmojiPicker); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/flexiconinput.css var flexiconinput = __webpack_require__(131); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/FlexiconInput.js var FlexiconInput_ = ACore["d" /* default */]._; var FlexiconInput_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function FlexiconInput() { this.$input = FlexiconInput_$('.as-flexicon-input-text-input', this); this.$iconCtn = FlexiconInput_$('.as-flexicon-input-icon-ctn', this); this.$unitCtn = FlexiconInput_$('.as-flexicon-input-unit-ctn', this); OOP["a" /* default */].drillProperty(this, this.$input, ['value', 'readonly']); this.on('click', function (event) { if (event.target != this.$input) this.$input.focus(); }.bind(this)); } FlexiconInput.prototype.on = function () { return this.$input.on.apply(this.$input, arguments); }; FlexiconInput.prototype.once = function () { return this.$input.once.apply(this.$input, arguments); }; FlexiconInput.prototype.off = function () { return this.$input.off.apply(this.$input, arguments); }; FlexiconInput.tag = 'FlexiconInput'.toLowerCase(); FlexiconInput.render = function () { return FlexiconInput_({ class: 'as-flexicon-input', child: [ { class: 'as-flexicon-input-icon-ctn' }, { tag: 'input', class: 'as-flexicon-input-text-input', attr: { type: 'text' }, }, { class: 'as-flexicon-input-unit-ctn' } ] }); }; FlexiconInput.property = {}; FlexiconInput.property.icon = { set: function (value) { value = value || null; this._icon = value; this.$iconCtn.clearChild(); if (value == null) { this.removeClass('as-flexicon-input-has-icon'); } else { this.addClass('as-flexicon-input-has-icon'); this.$iconCtn.addChild(FlexiconInput_(value)); } }, get: function () { return this._icon; } }; FlexiconInput.property.unit = { set: function (value) { this._unit = value; if (this._unit) { this.addClass('as-flexicon-input-has-unit'); this.$unitCtn.clearChild().addChild(FlexiconInput_({ text: value + '' })); } else { this.removeClass('as-flexicon-input-has-unit'); this.$unitCtn.clearChild(); } }, get: function () { return this._unit; } }; FlexiconInput.property.disabled = { set: function (value) { value = !!value; this.$input.disabled = value; if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } }, get: function () { return this.$input.disabled; } }; FlexiconInput.property.readOnly = { set: function (value) { value = !!value; this.$input.readOnly = value; if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } }, get: function () { return this.hasClass('as-read-only'); } }; ACore["d" /* default */].install(FlexiconInput); /* harmony default export */ var js_FlexiconInput = (FlexiconInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/frame.css var css_frame = __webpack_require__(133); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Frame.js var Frame_ = ACore["d" /* default */]._; var Frame_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function Frame() { this.$parent = null;// FrameView or TabView //adapter forwardEvent(this, 'inactive', 'deactive'); } Frame.tag = 'frame'; Frame.render = function () { return Frame_({ class: 'absol-frame', attr: { id: randomIdent(12), }, extendEvent: ['attached', 'detached', 'active', 'inactive']// inactive and active event will be send by parent }); }; Frame.prototype.notifyAttached = function (parentElt) { this.$parent = parentElt; this.emit('attached', { type: 'attached', target: this, parentElt: parentElt }, this); }; Frame.prototype.notifyDetached = function () { this.emit('detached', { type: 'detached', target: this, parentElt: this.$parent }, this); this.$parent = undefined; }; Frame.prototype.selfRemove = function () { if (this.$parent) this.$parent.removeChild(this); else this.super();// normal remove }; Frame.prototype.getParent = function () { return this.$parent; }; Frame.prototype.requestActive = function () { if (this.$parent) { this.$parent.activeFrame(this); } }; ACore["d" /* default */].install(Frame); /* harmony default export */ var js_Frame = (Frame); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/frameview.css var frameview = __webpack_require__(135); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/FrameView.js var FrameView_ = ACore["d" /* default */]._; var FrameView_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function FrameView() { this.$containers = []; //adapt forwardEvent(this, 'inactiveframe', 'deactiveframe'); forwardMethod(this, 'notifyDeactiveFrame', 'notifyInactiveFrame'); } FrameView.tag = 'frameview'; FrameView.render = function () { return FrameView_({ class: 'absol-frame-view', extendEvent: ['activeframe', 'inactiveframe'] }); }; FrameView.prototype.addChild = function (elt) { if (elt.hasClass && elt.hasClass('absol-frame')) { elt.selfRemove(); var containerElt = FrameView_({ class: 'absol-frame-view-frame-container', child: elt, props: { __elt__: elt } }); this.$containers.push(containerElt); this.appendChild(containerElt); elt.notifyAttached(this); } else { throw new Error('Children must be a frame'); } }; FrameView.prototype.addLast = function (elt) { this.addChild(elt); this.activeFrame(elt); }; FrameView.prototype.removeLast = function () { if (this.$containers.length > 0) { this.removeChild(this.$containers[this.$containers.length - 1].__elt__); } if (this.$containers.length > 0) { this.activeFrame(this.$containers[this.$containers.length - 1].__elt__); } }; FrameView.prototype.getLength = function () { return this.$containers.length; }; FrameView.prototype.getAllChild = function () { return this.$containers.map(function (ctn) { return ctn.__elt__; }); }; FrameView.prototype.getLast = function () { if (this.$containers.length > 0) { return (this.$containers[this.$containers.length - 1].__elt__); } return null; }; FrameView.prototype.addChildBefore = function (elt, at) { if (elt.hasClass && elt.hasClass('absol-frame')) { elt.selfRemove(); var index = this.childIndexOf(at); if (index < 0) { throw new Error('Second param is not a child'); } var index = this.childIndexOf(at); var atCtnElt = this.$containers[index]; var containerElt = FrameView_({ class: 'absol-frame-view-frame-container', child: elt, props: { __elt__: elt } }); this.$containers.splice(index, 0, containerElt); this.super(containerElt, atCtnElt); elt.notifyAttached(this); } else { throw new Error('Children must be a frame'); } }; FrameView.prototype.addChildAfter = function (elt, at) { if (elt.hasClass && elt.hasClass('absol-frame')) { elt.selfRemove(); var index = this.childIndexOf(at); if (index < 0) { throw new Error('Second param is not a child'); } var index = this.childIndexOf(at); var atCtnElt = this.$containers[index]; var containerElt = FrameView_({ class: 'absol-frame-view-frame-container', child: elt, props: { __elt__: elt } }); this.$containers.splice(index + 1, 0, containerElt); this.super(containerElt, atCtnElt); elt.notifyAttached(this); } else { throw new Error('Children must be a frame'); } }; FrameView.prototype.removeChild = function (elt) { var ctnEltIndex = this.childIndexOf(elt) if (ctnEltIndex >= 0) { var ctnElt = this.$containers[ctnEltIndex]; this.$containers.splice(ctnEltIndex, 1); this.super(ctnElt); } else { throw new Error('Removed element is not a child!'); } }; FrameView.prototype.childIndexOf = function (elt) { for (var i = 0; i < this.$containers.length; ++i) { if (this.$containers[i].__elt__ == elt) return i; } return -1; }; FrameView.prototype.findChildBefore = function (elt) { var eltIndex = this.childIndexOf(elt); if (eltIndex < 0) return -1; return this.$containers[eltIndex - 1]; }; FrameView.prototype.findChildAfter = function (elt) { var eltIndex = this.childIndexOf(elt); if (eltIndex < 0) return -1; return this.$containers[eltIndex + 1]; }; FrameView.prototype.clearChild = function () { while (this.$containers.length > 0) { this.removeChild(this.$containers[0].__elt__); } return this; }; FrameView.prototype.findChildById = function (id) { var elt; for (var i = 0; i < this.$containers.length; ++i) { elt = this.$containers[i].__elt__; if (elt.getAttribute('id') == id) return elt; } return undefined; }; FrameView.prototype.getAllChild = function () { return this.$containers.map(function (ctnElt) { return ctnElt.__elt__; }); }; FrameView.prototype.activeFrame = function (frameElt) { var ctnElt, elt; for (var i = 0; i < this.$containers.length; ++i) { ctnElt = this.$containers[i]; elt = ctnElt.__elt__; if (frameElt === elt) { if (!ctnElt.hasClass('absol-active')) { ctnElt.addClass('absol-active'); this.notifyActiveFrame(elt); } // else do nothing } else { if (ctnElt.hasClass('absol-active')) { ctnElt.removeClass('absol-active'); this.notifyInactiveFrame(elt); } // else do nonthing } } return this; }; FrameView.prototype.notifyActiveFrame = function (frameElt, originEvent) { frameElt.emit('active', { target: frameElt, type: 'active', originEvent: originEvent }); this.emit('activeframe', { type: 'activeframe', target: this, frameElt: frameElt, originEvent: originEvent }, this); }; FrameView.prototype.notifyInactiveFrame = function (frameElt, originEvent) { this.emit('inactiveframe', { type: 'inactiveframe', target: this, frameElt: frameElt, originEvent: originEvent }, this); }; FrameView.prototype.activeFrameById = function (id) { var frameElt = this.findChildById(id); if (frameElt) this.activeFrame(frameElt); return this; }; ACore["d" /* default */].install( FrameView); /* harmony default export */ var js_FrameView = (FrameView); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabFrame.js var TabFrame_$ = ACore["d" /* default */].$; var TabFrame_ = ACore["d" /* default */]._; function TabFrame() { } TabFrame.tag = 'tabframe'; TabFrame.render = function () { return TabFrame_({ tag: 'frame', class: 'absol-tab-frame', extendEvent: ['requestremove', 'remove'] }, true); } TabFrame.property = {}; TabFrame.property.name = { set: function (value) { if (typeof name == "undefined") { this._name = undefined; } else { this._name = value + ''; } if (this.$parent) { if (this.$parent.notifyUpdateName) this.$parent.notifyUpdateName(this); } }, get: function () { return this._name; } }; TabFrame.property.modified = { set: function (value) { this._modified = !!value; if (this.$parent) { if (this.$parent.notifyUpdateModified) this.$parent.notifyUpdateModified(this); } }, get: function () { return !!this._modified; } }; TabFrame.property.desc = { set: function (value) { if (typeof value == "undefined") { this._desc = undefined; } else { this._desc = value + ''; } if (this.$parent) { if (this.$parent.notifyUpdateDesc) this.$parent.notifyUpdateDesc(this); } }, get: function () { return this._desc; } }; TabFrame.property.preventClosing = { set: function (value) { if (value) { this.addClass('as-prevent-closing'); } else { this.removeClass('as-prevent-closing'); } if (this.$parent && this.$parent.notifyUpdatePreventClosing) { this.$parent.notifyUpdatePreventClosing(this); } }, get: function () { return this.hasClass('as-prevent-closing'); } }; TabFrame.attribute = {}; TabFrame.attribute.name = { set: function (value) { this.name = value; }, get: function () { return this.name; }, remove: function () { this.name = undefined; } }; TabFrame.attribute.desc = { set: function (value) { this.desc = value; }, get: function () { return this.desc; }, remove: function () { this.desc = undefined; } }; TabFrame.attribute.modified = { set: function (value) { this.modified = value == 'true' || value == '1' || value === true; }, get: function () { return this.modified ? 'true' : undefined; }, remove: function () { this.desc = false; } }; TabFrame.prototype.requestRemove = function () { if (this.$parent && this.$parent.removeTab) { this.$parent.removeTab(this.id, false); } else { this.selfRemove(); } }; ACore["d" /* default */].install(TabFrame); /* harmony default export */ var js_TabFrame = (TabFrame); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/tabview.css var tabview = __webpack_require__(29); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabButton.js var TabButton_ = ACore["d" /* default */]._; var TabButton_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function TabButton() { var thisTB = this; this._icon = null; this.$extIconCtn = TabButton_$('.as-tab-bar-button-ext-icon-ctn', this); this.$close = TabButton_$('.absol-tabbar-button-close', this) this.$iconCtn = TabButton_$('.absol-tabbar-button-icon-container', this).on('click', function (event) { event.tabButtonEventName = 'delete'; thisTB.emit('close', event); }); this.$modifiedFlag = TabButton_$('.absol-tabbar-button-modified-flag', this) .on('click', function (event) { event.tabButtonEventName = 'delete'; thisTB.emit('close', event); }); this.$textView = TabButton_$('.absol-tabbar-button-text', this); this.on({ click: function (event) { if (event.tabButtonEventName) return; event.tabButtonEventName = 'active'; thisTB.emit('active', event); } }); } TabButton.tag = 'TabButton'.toLowerCase(); TabButton.render = function () { return TabButton_({ tag: 'button', class: 'absol-tabbar-button', extendEvent: ['close', 'active'], id: randomIdent(20), child: [ { class: 'as-tab-bar-button-ext-icon-ctn' }, { class: 'absol-tabbar-button-text', }, { class: 'absol-tabbar-button-icon-container', child: [ { tag: 'span', class: ['absol-tabbar-button-close', 'mdi-close', 'mdi'], attr: { title: 'Close' } }, { tag: 'span', class: ['absol-tabbar-button-close-circle', 'mdi-close-circle', 'mdi'], attr: { title: 'Close' } }, { tag: 'span', class: ['absol-tabbar-button-modified-flag', 'mdi', 'mdi-checkbox-blank-circle'] } ] } ] }); }; TabButton.property = {}; TabButton.property.active = { set: function (value) { this._active = value; if (value) this.addClass('absol-tabbar-button-active'); else this.removeClass('absol-tabbar-button-active'); }, get: function () { return this._active; } }; TabButton.property.name = { set: function (value) { this._name = value || ''; this.$textView.innerHTML = this._name; }, get: function () { return this._name; } }; TabButton.property.desc = { set: function (value) { this.attr('title', value); }, get: function () { return this.attr('title'); } }; TabButton.property.icon = { set: function (value) { value = value || null; this._icon = value; this.$extIconCtn.clearChild(); if (this._icon) { this.$extIconCtn.addChild(TabButton_(value)); } }, get: function () { return this._icon; } } TabButton.property.modified = { set: function (value) { if (value) { this.addClass('absol-tabbar-button-modified'); } else { this.removeClass('absol-tabbar-button-modified'); } }, get: function () { return this.hasClass('absol-tabbar-button-modified'); } }; TabButton.property.preventClosing = { set: function (value) { if (value) { this.addClass('as-prevent-closing'); } else { this.removeClass('as-prevent-closing'); } }, get: function () { return this.hasClass('as-prevent-closing'); } } ACore["d" /* default */].install(TabButton); /* harmony default export */ var js_TabButton = (TabButton); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabBar.js var TabBar_ = ACore["d" /* default */]._; var TabBar_$ = ACore["d" /* default */].$; /*** * @extends HScroller * @constructor */ function TabBar() { this.$parent = null; this.$addBtn = TabBar_({ tag: 'button', class: 'as-tab-bar-add-btn', child: 'span.mdi.mdi-plus', on: { click: function () { if (this.$parent) { this.$parent.emit('pressaddtab', { type: 'pressaddtab', target: this.$parent }, this.$parent); } }.bind(this) } }); this.addChild(this.$addBtn); this.defineEvent(['active', 'close']); this.on('wheel', function (event) { var lastLeft = this.$viewport.scrollLeft; if (event.deltaY > 1) { this.$viewport.scrollLeft += 50; } else if (event.deltaY < -1) { this.$viewport.scrollLeft -= 50; } if (lastLeft != this.$viewport.scrollLeft) event.preventDefault(); }); this._tabs = []; } TabBar.tag = 'tabbar'; TabBar.render = function () { return TabBar_('hscroller.absol-tabbar'); }; TabBar.prototype.getAllTabButtons = function () { var buttons = []; TabBar_$('tabbutton', this, function (e) { buttons.push(e); }); return buttons; }; /*** * * @param {string} ident * @return {TabButton} */ TabBar.prototype.getButtonByIdent = function (ident) { return TabBar_$('tabbutton#tabbuton-' + ident, this); }; TabBar.property = {}; TabBar.property.tabs = { set: function (value) { this.clearChild(); this._tabs = []; (value || []).forEach(this.addTab.bind(this)); }, get: function () { //each hold item data return this._tabs || []; } }; /*** * * @param {{text}} * @return {tabbar} */ TabBar.prototype.addTab = function (value) { var self = this; var props = {}; if (typeof value == "string") { props.name = value; } else { if (value.name) { props.name = value.name; } else { throw new Error('Tab must has name attribute'); } if (value.desc) props.desc = value.desc; if (value.tabIcon) { props.icon = value.tabIcon; } if (value.preventClosing) { props.preventClosing = value.preventClosing; } } var tabButton = TabBar_({ tag: 'tabbutton', props: props, on: { active: function (event, sender) { var prevented = false; self.emit('active', { target: this, value: value, preventDefault: function () { prevented = true; } }, self); if (!prevented) { self.getAllTabButtons().forEach(function (e) { e.active = false; }); this.active = true; } }, close: function (event, sender) { var prevented = false; self.emit('close', { target: this, value: value, preventDefault: function () { prevented = true; } }, self); if (!prevented) { //todo:active other this.remove(); } } } }); this.addChildBefore(tabButton, this.$addBtn) if (value.id) tabButton.attr('id', 'tabbuton-' + value.id); this._tabs.push(tabButton); this.requestUpdateSize(); return tabButton; }; TabBar.prototype.removeTab = function (id) { this._tabs = this._tabs.filter(function (value) { return value == id; }); TabBar_$('#tabbuton-' + id, this).remove(); this.requestUpdateSize(); }; TabBar.prototype.activeTab = function (id) { var self = this; var activedbtn = TabBar_$('.absol-tabbar-button-active', this); if (activedbtn && activedbtn.attr('id') != id) { activedbtn.active = false; } var mButton = TabBar_$('#tabbuton-' + id, this); if (mButton) { mButton.active = true; setTimeout(function () { self.scrollInto(mButton); }, 30) } }; TabBar.prototype.setModified = function (ident, flag) { var bt = this.getButtonByIdent(ident); if (bt) { bt.modified = flag; } }; ACore["d" /* default */].install(TabBar); /* harmony default export */ var js_TabBar = (TabBar); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabView.js var TabView_ = ACore["d" /* default */]._; var TabView_$ = ACore["d" /* default */].$; function TabView() { var thisTV = this; /*** * * @type {TabBar} */ this.$tabbar = TabView_$('tabbar', this); this.$tabbar.$parent = this; this.$tabbar.on({ close: TabView.eventHandler.closeTab.bind(thisTV), active: TabView.eventHandler.activeTab.bind(thisTV) }); this._frameHolders = []; this._history = []; forwardEvent(this, 'inactivetab', 'deactivetab'); } TabView.tag = 'TabView'.toLowerCase(); TabView.render = function () { return TabView_({ class: 'absol-tabview', extendEvent: ['activetab', 'inactivetab', 'removetab', 'requestremovetab', 'pressaddtab'], child: [ 'tabbar' ] }); }; TabView.eventHandler = {}; TabView.eventHandler.closeTab = function (event) { event.preventDefault(); var id = event.value.id; this.removeTab(id, true); }; TabView.eventHandler.activeTab = function (event) { event.preventDefault(); var id = event.value.id; this.activeTab(id, true); }; TabView.prototype.activeTab = function (id, userActive) { var self = this; var resPromise = []; var needDeactivatedHolder = []; var needActiveHolder = []; this._frameHolders.forEach(function (holder) { if (holder.containerElt.hasClass('absol-tabview-container-hidden')) { if (holder.id == id) { needActiveHolder.push(holder); } } else { if (holder.id != id) { needDeactivatedHolder.push(holder); } } }); needDeactivatedHolder.forEach(function (holder) { holder.containerElt.addClass('absol-tabview-container-hidden'); holder.tabFrame.emit('inactive', { type: 'inactive', target: holder.tabFrame, id: holder.id, userActive: !!userActive, tabButton: holder.tabButton, holder: holder }, holder.tabFrame); }); needActiveHolder.forEach(function (holder) { self._history.push(holder.id); holder.containerElt.removeClass('absol-tabview-container-hidden'); self.$tabbar.activeTab(holder.id); holder.tabFrame.emit('active', { type: 'active', target: holder.tabFrame, id: holder.id, userActive: !!userActive, tabButton: holder.tabButton, holder: holder }, holder.tabFrame); self.emit('activetab', { type: 'activetab', target: self, id: holder.id, userActive: !!userActive, tabButton: holder.tabButton, holder: holder, from: (needDeactivatedHolder[0] && needDeactivatedHolder[0].tabFrame || null), to: holder.tabFrame }, self); }); }; TabView.prototype.removeTab = function (id, userActive) { var self = this; var resPromise = []; this._frameHolders.forEach(function (holder) { if (holder.id == id) { var eventData = { type: 'requestremove', id: id, userActive: !!userActive, target: holder.tabFrame, tabFrame: holder.tabFrame, tabButton: holder.tabButton, holder: holder, __promise__: Promise.resolve(), waitFor: function (promise) { this.__promise__ = promise; } }; holder.tabFrame.emit('requestremove', eventData, holder.tabFrame); eventData.type = 'requestremovetab'; eventData.target = self; self.emit('requestremovetab', eventData, self); resPromise.push( eventData.__promise__.then(function () { //if ok var eventData2 = { type: 'inactive', target: holder.tabFrame, id: holder.id, userActive: !!userActive, tabButton: holder.tabButton, holder: holder }; if (!holder.containerElt.hasClass('absol-tabview-container-hidden')) holder.tabFrame.emit('inactive', eventData2, holder.tabFrame); eventData2.type = 'inactivetab'; eventData2.target = self; if (!holder.containerElt.hasClass('absol-tabview-container-hidden')) self.emit('inactivetab', eventData2, self); self._frameHolders = self._frameHolders.filter(function (x) { return x.id != id; }); holder.tabFrame.notifyDetached(); self.$tabbar.removeTab(holder.id); holder.containerElt.remove(); eventData2.type = 'remove'; eventData2.target = holder.tabFrame; holder.tabFrame.emit('remove', eventData2, holder.tabFrame); eventData2.type = 'removetab'; eventData2.target = self; self.emit('removetab', eventData2, self); self.activeLastTab(); }, function () { //if reject }) ); } }); return Promise.all(resPromise); }; TabView.prototype.notifyUpdateDesc = function (elt) { var holder = this.findHolder(elt); if (holder) { holder.tabButton.desc = elt.desc; } }; TabView.prototype.notifyUpdateName = function (elt) { var holder = this.findHolder(elt); if (holder) { holder.tabButton.name = elt.name; } }; TabView.prototype.notifyUpdateModified = function (elt) { var holder = this.findHolder(elt); if (holder) { holder.tabButton.modified = elt.modified; } }; TabView.prototype.notifyUpdatePreventClosing = function (elt) { var holder = this.findHolder(elt); if (holder) { holder.tabButton.preventClosing = elt.preventClosing; } }; TabView.prototype.findHolder = function (elt) { for (var i = 0; i < this._frameHolders.length; ++i) { var holder = this._frameHolders[i]; if (holder.tabFrame == elt) { return holder; } } }; TabView.prototype.addChild = function () { var self = this; Array.prototype.forEach.call(arguments, function (elt) { if (!elt.notifyAttached || !elt.notifyDetached) { throw new Error('element is not a tabframe'); } var containerElt = TabView_('.absol-tabview-container.absol-tabview-container-hidden'); self.appendChild(containerElt);//origin function elt.selfRemove(); var id = elt.attr('id'); var desc = elt.attr('desc') || undefined; var name = elt.attr('name') || 'NoName'; var tabIcon = elt.tabIcon; var modified = elt.modified; var preventClosing = elt.preventClosing; var tabButton = self.$tabbar.addTab({ name: name, id: id, desc: desc, modified: modified, tabIcon: tabIcon, preventClosing: preventClosing }); containerElt.addChild(elt); elt.notifyAttached(self); var holder = {}; OOP["a" /* default */].drillProperty(holder, elt, 'id'); OOP["a" /* default */].drillProperty(holder, elt, 'desc'); OOP["a" /* default */].drillProperty(holder, elt, 'name'); OOP["a" /* default */].drillProperty(holder, elt, 'preventClosing'); Object.defineProperties(holder, { tabButton: { value: tabButton, writable: false }, tabFrame: { value: elt, writable: false }, containerElt: { value: containerElt, writable: false } }); self._frameHolders.push(holder); self.activeTab(id); }); }; TabView.prototype.activeLastTab = function () { var dict = this._frameHolders.reduce(function (ac, holder) { ac[holder.id] = true; return ac; }, {}); while (this._history.length > 0) { var id = this._history[this._history.length - 1]; if (dict[id]) { this.activeTab(id); break; } else { this._history.pop(); } } }; TabView.prototype.getChildAt = function (index) { return this._frameHolders[index].tabFrame; }; TabView.prototype.getAllChild = function () { return this._frameHolders.map(function (holder) { return holder.tabFrame; }); }; TabView.prototype.getActiveTabHolder = function () { var holder = null; for (var i = 0; i < this._frameHolders.length; ++i) { holder = this._frameHolders[i]; if (!holder.containerElt.hasClass('absol-tabview-container-hidden')) { return holder; } } return null; }; TabView.prototype.getActiveTab = function () { var holder = this.getActiveTabHolder(); return holder && holder.tabFrame; }; TabView.prototype.getActiveTabId = function () { var holder = this.getActiveTabHolder(); return holder && holder.id; }; TabView.prototype.getTabById = function (id) { var holder = this.getTabHolderById(id); return holder && holder.tabFrame; }; TabView.prototype.getTabHolderById = function (id) { var holder = null; for (var i = 0; i < this._frameHolders.length; ++i) { holder = this._frameHolders[i]; if (holder.id === id) { return holder; } } return null; } TabView.prototype.activeFrame = function (elt) { if (typeof elt == "string") { return this.activeTab(elt); } else if (elt && elt.attr) { return this.activeTab(elt.attr('id')); } else { throw new Error("Invalid param, must be id or elt!"); } }; TabView.property = {}; TabView.property.historyOfTab = { get: function () { return this._history.slice(); } }; ACore["d" /* default */].install('tabview', TabView); /* harmony default export */ var js_TabView = (TabView); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/singlepage.css var singlepage = __webpack_require__(138); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SinglePage.js var SinglePage_ = ACore["d" /* default */]._; var SinglePage_$ = ACore["d" /* default */].$; var warned = false; /*** * @extends AElement * @constructor */ function SinglePage() { var thisSP = this; this._updateIntv = -1; this._tick = function () { if (this.isDescendantOf(document.body)) { if (this.$header) { var headerHeight = this.$header.getBoundingClientRect().height; if (this._prevHeaderHeight !== headerHeight) { ResizeSystem["a" /* default */].update(); } } } else { clearInterval(this._updateIntv); this._updateIntv = -1; } }.bind(this); this.$attachhook = SinglePage_$('attachhook', this) .on('attached', function () { this.updateSize(); setTimeout(this.updateSize, 20); Dom["b" /* default */].addToResizeSystem(this); if (thisSP._updateIntv < 0) { thisSP._updateIntv = setInterval(thisSP._tick, 200); } }); this.$attachhook.updateSize = this.updateSize.bind(this); this.$header = null; this.$footer = null; this.$viewport = SinglePage_$('.absol-single-page-scroller-viewport', this); this.$scroller = SinglePage_$('.absol-single-page-scroller', this); } SinglePage.tag = 'SinglePage'.toLowerCase(); SinglePage.render = function () { return SinglePage_({ tag: 'tabframe', extendEvent: ['sizechange'], class: 'absol-single-page', child: [{ class: 'absol-single-page-scroller', child: { class: 'absol-single-page-scroller-viewport' } }, 'attachhook'] }); }; SinglePage.prototype.updateSize = function () { if (!this.isDescendantOf(document.body)) return; var paddingTop = parseFloat(this.getComputedStyleValue('padding-top').replace('px', '')) || 0; if (this.$header) { var headerBound = this.$header.getBoundingClientRect(); var headerMarginTop = parseFloat(this.$header.getComputedStyleValue('margin-top').replace('px', '')) || 0; var headerMarginBottom = parseFloat(this.$header.getComputedStyleValue('margin-bottom').replace('px', '')) || 0; this.$scroller.addStyle('top', (headerBound.height + headerMarginTop + headerMarginBottom + paddingTop) + 'px'); this._prevHeaderHeight = headerBound.height; } if (this.$footer) { var footerBound = this.$footer.getBoundingClientRect(); this.$viewport.addStyle('padding-bottom', footerBound.height + 'px'); } this.addStyle('--single-page-scroller-height', this.$scroller.clientHeight + 'px'); if (this.isSupportedEvent('sizechange')) this.emit('sizechange', { type: 'sizechange', target: this }, this); }; SinglePage.prototype.addChild = function (elt) { if (elt.classList.contains('absol-single-page-header')) { if (this.firstChild) { this.addChildBefore(elt, this.firstChild); } else { this.appendChild(elt); } this.$header = SinglePage_$(elt); this.updateSize(); } else if (elt.classList.contains('absol-single-page-footer')) { this.$viewport.addChild(elt); this.$footer = SinglePage_$(elt); this.updateSize(); } else { this.$viewport.addChild(elt); } }; SinglePage.prototype.removeChild = function (elt) { if (elt == this.$footer) { this.$viewport.removeChild(elt); this.$footer = undefined; this.updateSize(); } else if (elt == this.$header) { this.super(elt); this.$header = undefined; this.updateSize(); } else { this.$viewport.removeChild(elt); } }; ACore["d" /* default */].install(SinglePage); /* harmony default export */ var js_SinglePage = (SinglePage); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/hexasectionlabel.css var hexasectionlabel = __webpack_require__(140); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/HexaSectionLabel.js var HexaSectionLabel_ = ACore["d" /* default */]._; var HexaSectionLabel_$ = ACore["d" /* default */].$; var HexaSectionLabel_g = HTML5_Svg.ShareInstance._; var HexaSectionLabel_$g = HTML5_Svg.ShareInstance.$; var HexaSectionLabel_Design = { hexaHeight: 425, textBoxHeight: 286, textHeight: 96, indexHeight: 110, textBoxPaddingLeft: 127, borderWidth: 38 }; var HexaSectionLabel_StyleSheet = { '.as-hexa-section-label-text': { height: HexaSectionLabel_Design.textBoxHeight / HexaSectionLabel_Design.textHeight + 'em', 'padding-left': HexaSectionLabel_Design.textBoxPaddingLeft / HexaSectionLabel_Design.textHeight + 'em', 'line-height': HexaSectionLabel_Design.textBoxHeight / HexaSectionLabel_Design.textHeight + 'em' }, '.as-hexa-section-label-index': { 'font-size': HexaSectionLabel_Design.indexHeight / HexaSectionLabel_Design.textHeight + 'em', height: HexaSectionLabel_Design.hexaHeight / HexaSectionLabel_Design.indexHeight + 'em', 'line-height': HexaSectionLabel_Design.hexaHeight / HexaSectionLabel_Design.indexHeight + 'em', width: ((HexaSectionLabel_Design.hexaHeight + HexaSectionLabel_Design.borderWidth) / Math.cos(Math.PI / 6)) / HexaSectionLabel_Design.indexHeight + 'em' }, }; HexaSectionLabel_({ tag: 'style', id: 'hexa-section-label-style', props: { innerHTML: Object.keys(HexaSectionLabel_StyleSheet).map(function (key) { var style = HexaSectionLabel_StyleSheet[key]; return key + ' {\n' + Object.keys(style).map(function (propName) { return propName + ': ' + style[propName] + ';'; }).join('\n') + '}'; }).join('\n') } }).addTo(document.head); /*** * @extends AElement * @constructor */ function HexaSectionLabel() { this.$background = HexaSectionLabel_$('.as-hexa-section-label-background', this); this.$index = HexaSectionLabel_$('.as-hexa-section-label-index', this); this.$text = HexaSectionLabel_$('.as-hexa-section-label-text', this); this.$attachhook = HexaSectionLabel_('attachhook').addTo(this).on('error', function () { Dom["b" /* default */].addToResizeSystem(this); this.requestUpdateSize(); }); this.$attachhook.requestUpdateSize = this.redrawBackground.bind(this); this.$svg = HexaSectionLabel_g({ tag: 'svg', attr: { width: '0', height: '0' }, child: [ 'path.as-hexa-section-label-text-box', 'path.as-hexa-section-label-index-box' ] }).addTo(this.$background); this.$indexBox = HexaSectionLabel_$g('path.as-hexa-section-label-index-box', this.$svg); this.$textBox = HexaSectionLabel_$g('path.as-hexa-section-label-text-box', this.$svg); } HexaSectionLabel.prototype.redrawBackground = function () { var indexBound = this.$index.getBoundingClientRect(); var textBound = this.$text.getBoundingClientRect(); var cHeight = indexBound.height; var cWidth = textBound.right - indexBound.left; this.$svg.attr({ height: cHeight + '', width: cWidth + '', viewBox: [0, 0, cWidth, cHeight].join(' ') }); var borderWidth = cHeight * HexaSectionLabel_Design.borderWidth / HexaSectionLabel_Design.hexaHeight; var radius = (cHeight / Math.cos(Math.PI / 6) / 2) - borderWidth / 2; var x0 = indexBound.width / 2; var y0 = cHeight / 2; this.$indexBox.attr('d', Array(6).fill(0).map(function (u, i) { var angle = Math.PI / 3 + i * Math.PI / 3; var x = radius * Math.cos(angle) + x0; var y = radius * Math.sin(angle) + y0; return (i == 0 ? 'M' : 'L') + x + ' ' + y; }).join(' ') + 'Z') .addStyle({ strokeWidth: borderWidth + '' }); var skewX = 18 / 45; var textBoxHeight = textBound.height; this.$textBox.attr('d', [ [x0, (cHeight - textBoxHeight) / 2], [cWidth - 1, (cHeight - textBoxHeight) / 2], [cWidth - 1 - textBoxHeight * skewX, (cHeight - textBoxHeight) / 2 + textBoxHeight], [x0, (cHeight - textBoxHeight) / 2 + textBoxHeight], ].map(function (point, i) { return (i == 0 ? 'M' : 'L') + point.join(' ') }).join(' ') + 'Z') }; HexaSectionLabel.tag = 'HexaSectionLabel'.toLowerCase(); HexaSectionLabel.render = function () { return HexaSectionLabel_({ class: 'as-hexa-section-label', child: [ { class: 'as-hexa-section-label-background' }, '.as-hexa-section-label-index', '.as-hexa-section-label-text' ] }); }; HexaSectionLabel.property = {}; HexaSectionLabel.property.index = { set: function (value) { this._index = value; this.$index.clearChild().addChild(HexaSectionLabel_({ text: value + '' })) }, get: function () { return this._index; } }; HexaSectionLabel.property.text = { set: function (value) { this._text = value; this.$text.clearChild().addChild(HexaSectionLabel_({ text: value + '' })) }, get: function () { return this._text; } }; ACore["d" /* default */].install(HexaSectionLabel); /* harmony default export */ var js_HexaSectionLabel = (HexaSectionLabel); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/vruler.css var vruler = __webpack_require__(142); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/VRuler.js var VRuler_ = ACore["d" /* default */]._; var VRuler_$ = ACore["d" /* default */].$; function VRuler() { var self = this; this.$attachHook = VRuler_('attachhook').on('error', function () { this.updateSize = self.update.bind(self); Dom["b" /* default */].addToResizeSystem(this); this.updateSize(); }).addTo(this); this.$lines = []; this.$numbers = []; this.$measureTarget = undefined; this._viewingNumberCount = 0; this._viewingLineCount = 0; this._spacing = 10; this._major = 10; this._valueFloat = 'top'; } VRuler.tag = 'vruler'; VRuler.render = function () { return VRuler_({ class: 'as-vruler' }); }; VRuler.prototype.measureElement = function (elt) { if (typeof elt == "string") elt = VRuler_$(elt); this.$measureTarget = elt; this.update(); }; VRuler.prototype.update = function () { var fontSize = this.getFontSize(); var measureBound; var bound = this.getBoundingClientRect(); var contentBound = { left: bound.left + 1, right: bound.right - 1, top: bound.top + 1, bottom: bound.bottom - 1, width: bound.width - 2, height: bound.height - 2 }; if (this.$measureTarget) { measureBound = this.$measureTarget.getBoundingClientRect(); } else { measureBound = contentBound; } var startOfset = (measureBound[this._valueFloat] - contentBound[this._valueFloat]) * (this.inverse ? -1 : 1) % this._spacing; if (startOfset < 0) startOfset += this._spacing; var lineIndexOfset = Math.round(((contentBound[this._valueFloat] - measureBound[this._valueFloat]) * (this.inverse ? -1 : 1) + startOfset) / this._spacing); var lineCount = Math.floor((contentBound.height - startOfset) / this._spacing) + 1; while (this.$lines.length < lineCount) { this.$lines.push(VRuler_('.as-vruler-line')); } var i; var lineElt; for (i = 0; i < lineCount; ++i) { lineElt = this.$lines[i]; if ((i + lineIndexOfset) % this._major == 0) { lineElt.addClass('major'); } else { lineElt.removeClass('major'); } lineElt.addStyle(this._valueFloat, startOfset + this._spacing * i - 0.5 + 'px'); } while (this._viewingLineCount < lineCount) { this.$lines[this._viewingLineCount++].addTo(this); } while (this._viewingLineCount > lineCount) { this.$lines[--this._viewingLineCount].remove(); } var numberCount = Math.floor((lineCount + lineIndexOfset - 1) / this._major) - Math.ceil(lineIndexOfset / this._major) + 1; while (this.$numbers.length < numberCount) { this.$numbers.push(VRuler_('.as-vruler-major-number')); } var numberElt; var number; var majorStartOfset = startOfset; if (lineIndexOfset > 0) { majorStartOfset += (this._major - lineIndexOfset % this._spacing) * this._spacing; } else { majorStartOfset += (this._major - (this._spacing + lineIndexOfset % this._spacing)) * this._spacing; } for (i = 0; i < numberCount; ++i) { number = (Math.ceil(lineIndexOfset / this._major) + i) * this._spacing * this._major; numberElt = this.$numbers[i]; if (numberElt.__cacheNumber__ != number) { numberElt.__cacheNumber__ = number; numberElt.innerHTML = number + ''; } numberElt.addStyle(this._valueFloat, majorStartOfset + this._major * i * this._spacing - 0.7 * 0.5 * fontSize + 'px') } while (this._viewingNumberCount < numberCount) { this.$numbers[this._viewingNumberCount++].addTo(this); } while (this._viewingNumberCount > numberCount) { this.$numbers[--this._viewingNumberCount].remove(); } }; VRuler.property = {}; VRuler.property.major = { set: function (value) { if (value > 0) { this._major = value; this.update(); } }, get: function () { return this._major; } }; VRuler.property.spacing = { set: function (value) { if (value > 0) { this._spacing = value; this.update(); } }, get: function () { return this._spacing; } }; VRuler.property.inverse = { set: function (value) { this._valueFloat = value ? 'bottom' : 'top'; this.update(); }, get: function () { return this._valueFloat == 'bottom'; } }; ACore["d" /* default */].install('vruler', VRuler); /* harmony default export */ var js_VRuler = (VRuler); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/hruler.css var hruler = __webpack_require__(144); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/HRuler.js var HRuler_ = ACore["d" /* default */]._; var HRuler_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function HRuler() { var self = this; this.$attachHook = HRuler_('attachhook').on('error', function () { this.updateSize = self.update.bind(self); Dom["b" /* default */].addToResizeSystem(this); this.updateSize(); }).addTo(self); this.$lines = []; this.$numbers = []; this._viewingNumberCount = 0; this._viewingLineCount = 0; this._spacing = 10; this._major = 10; this.$measureTarget = null; this._valueFloat = 'left'; } HRuler.tag = 'hruler'; HRuler.render = function () { return HRuler_({ class: 'as-hruler' }); }; HRuler.prototype.measureElement = function (elt) { if (typeof elt == "string") elt = HRuler_$(elt); this.$measureTarget = elt; this.update(); }; HRuler.prototype.update = function () { var fontSize = this.getFontSize(); var measureBound; var bound = this.getBoundingClientRect(); var contentBound = { left: bound.left + 1, right: bound.right - 1, top: bound.top + 1, bottom: bound.bottom - 1, width: bound.width - 2, height: bound.height - 2 }; if (this.$measureTarget) { measureBound = this.$measureTarget.getBoundingClientRect(); } else { measureBound = contentBound; } var startOfset = (measureBound[this._valueFloat] - contentBound[this._valueFloat]) * (this.inverse ? -1 : 1) % this._spacing; if (startOfset < 0) startOfset += this._spacing; var lineIndexOfset = Math.round(((contentBound[this._valueFloat] - measureBound[this._valueFloat]) * (this.inverse ? -1 : 1) + startOfset) / this._spacing); var lineCount = Math.floor((contentBound.width - startOfset) / this._spacing) + 1; while (this.$lines.length < lineCount) { this.$lines.push(HRuler_('.as-hruler-line')); } var i; var lineElt; for (i = 0; i < lineCount; ++i) { lineElt = this.$lines[i]; if ((i + lineIndexOfset) % this._major == 0) { lineElt.addClass('major'); } else { lineElt.removeClass('major'); } lineElt.addStyle(this._valueFloat, startOfset + this._spacing * i - 0.5 + 'px'); } while (this._viewingLineCount < lineCount) { this.$lines[this._viewingLineCount++].addTo(this); } while (this._viewingLineCount > lineCount) { this.$lines[--this._viewingLineCount].remove(); } var numberCount = Math.floor((lineCount + lineIndexOfset - 1) / this._major) - Math.ceil(lineIndexOfset / this._major) + 1; while (this.$numbers.length < numberCount) { this.$numbers.push(HRuler_('.as-hruler-major-number')); } var numberElt; var number; var majorStartOfset = startOfset; if (lineIndexOfset > 0) { majorStartOfset += (this._major - lineIndexOfset % this._spacing) * this._spacing; } else { majorStartOfset += (this._major - (this._spacing + lineIndexOfset % this._spacing)) * this._spacing; } for (i = 0; i < numberCount; ++i) { number = (Math.ceil(lineIndexOfset / this._major) + i) * this._spacing * this._major; numberElt = this.$numbers[i]; if (numberElt.__cacheNumber__ != number) { numberElt.__cacheNumber__ = number; numberElt.innerHTML = number + ''; } numberElt.addStyle(this._valueFloat, majorStartOfset + this._major * i * this._spacing - 0.7 * 2.5 * fontSize + 'px') } while (this._viewingNumberCount < numberCount) { this.$numbers[this._viewingNumberCount++].addTo(this); } while (this._viewingNumberCount > numberCount) { this.$numbers[--this._viewingNumberCount].remove(); } }; HRuler.property = {}; HRuler.property.major = { set: function (value) { if (value > 0) { this._major = value; this.update(); } }, get: function () { return this._major; } }; HRuler.property.spacing = { set: function (value) { if (value > 0) { this._spacing = value; this.update(); } }, get: function () { return this._spacing; } }; HRuler.property.inverse = { set: function (value) { this._valueFloat = value ? 'right' : 'left'; this.update(); }, get: function () { return this._valueFloat == 'right'; } }; ACore["d" /* default */].install(HRuler); /* harmony default export */ var js_HRuler = (HRuler); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/IconSprite.js var IconSprite_ = ACore["d" /* default */]._; var IconSprite_$ = ACore["d" /* default */].$; function IconSprite() { this.$attachhook = IconSprite_('attachhook').addTo(this).on('error', this.eventHandler.attached); this.on('frame', this.eventHandler.frame); this._checkRootTimeout = 30; this.loop = true; } IconSprite.tag = 'iconsprite'; IconSprite.render = function () { return IconSprite_('sprite', true); }; /** * @type {IconSprite} */ IconSprite.eventHandler = {}; IconSprite.eventHandler.attached = function () { var thisAS = this; this._checkRootTimeout = 30; this.afterReady().then(function () { thisAS.width = thisAS.texture.naturalWidth; thisAS.height = thisAS.width; thisAS.frames = { type: 'grid', col: 1, row: thisAS.texture.naturalHeight / thisAS.texture.naturalWidth } thisAS.drawFrame(0); thisAS.play(); }); }; IconSprite.eventHandler.frame = function () { this._checkRootTimeout--; if (this._checkRootTimeout == 0){ if (this.isDescendantOf(document.body)){ this._checkRootTimeout = 30; } else{ this.stop(); this.remove(); } } }; ACore["d" /* default */].install(IconSprite); /* harmony default export */ var js_IconSprite = (IconSprite); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/linearcolorbar.css var linearcolorbar = __webpack_require__(146); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/LinearColorBar.js var LinearColorBar_ = ACore["d" /* default */]._; var LinearColorBar_$ = ACore["d" /* default */].$; var LinearColorBar_g = HTML5_Svg.ShareInstance._; var LinearColorBar_$g = HTML5_Svg.ShareInstance.$; var LinearColorBar_Design = { textHeight: 56, barHeight: 97, barBlockWidth: 79, barBlockMargin: 19, valueTextHeight: 70, valueStrokeWidth: 5, valueHeight: 99, valueWidth: 52, valueTripHeight: 32, height: 430, barY: 201 }; var SyleSheet = { '.as-linear-color-bar': { height: LinearColorBar_Design.height / LinearColorBar_Design.textHeight + 'em' }, '.as-linear-color-value-text': { 'font-size': LinearColorBar_Design.valueTextHeight / LinearColorBar_Design.textHeight + 'em' } }; buildCss(SyleSheet); function LinearColorBar() { this._indent = (Math.random() + '').replace(/[^0-9]/g, '_'); this._extendValue = 0; this._value = 0; this._valueText = ''; this.$valueText = LinearColorBar_$('.as-linear-color-value-text', this); this.$minValueText = LinearColorBar_$('.as-linear-color-min-value-text', this); this.$maxValueText = LinearColorBar_$('.as-linear-color-max-value-text', this); this.$background = LinearColorBar_$('svg.as-linear-color-background', this); this._attached = false; var thisBar = this; this.$attachhook = LinearColorBar_('attachhook').addTo(this).on('error', function () { thisBar._attached = true; Dom["b" /* default */].addToResizeSystem(this); this.requestUpdateSize(); }); this.$background.attr({ height: 0, width: 0, }); this.$attachhook.requestUpdateSize = this.redraw.bind(this); this.$defs = LinearColorBar_g('defs').addTo(this.$background); this.$gradient = LinearColorBar_g('linearGradient#gradient_' + this._indent) .attr({ x1: "0%", y1: "0%", x2: "100%", y2: "0%" }).addTo(this.$defs); this.$rect = LinearColorBar_g('rect.as-linear-color-bar-rect') .attr({ fill: 'url(#gradient_' + this._indent + ')' }) .addTo(this.$background); this.$splitLine = LinearColorBar_g('path.as-linear-color-split-line').addTo(this.$background) this.$valueArrow = LinearColorBar_g('path.as-linear-color-value-arrow').addTo(this.$background); this.colorMapping = 'rainbow'; } LinearColorBar.prototype.redraw = function () { var bBound = this.getBoundingClientRect(); var cWidth = bBound.width; var cHeight = bBound.height; var maxTextBound = this.$maxValueText.getBoundingClientRect(); var minTextBound = this.$minValueText.getBoundingClientRect(); var valueTextBound = this.$valueText.getBoundingClientRect(); var valueWidth = LinearColorBar_Design.valueWidth / LinearColorBar_Design.height * cHeight; var minValueX = valueWidth / 1.5; this.$minValueText.addStyle('left', Math.max((minValueX - minTextBound.width) / 2, 0) + 'px'); var maxValueX = (cWidth - LinearColorBar_Design.valueWidth) / (1 + this._extendValue); var extendX = cWidth - valueWidth / 1.5; var valueX = minValueX + this._value * (maxValueX - minValueX); this.$valueText.addStyle('left', valueX - valueTextBound.width / 2 + 'px'); this.$maxValueText.addStyle('left', maxValueX - maxTextBound.width / 2 + 'px'); var barY = LinearColorBar_Design.barY / LinearColorBar_Design.height * cHeight; var barHeight = LinearColorBar_Design.barHeight / LinearColorBar_Design.height * cHeight; this.$rect.attr({ x: '' + minValueX, y: '' + barY, width: extendX - minValueX + '', height: barHeight }); this.$background.attr({ height: cHeight + '', width: cWidth + '', viewBox: [0, 0, cWidth, cHeight].join(' ') }); var valueTripHeight = LinearColorBar_Design.valueTripHeight / LinearColorBar_Design.height * cHeight; var valueHeight = LinearColorBar_Design.valueHeight / LinearColorBar_Design.height * cHeight; this.$valueArrow .addStyle('stroke-width', LinearColorBar_Design.valueStrokeWidth / LinearColorBar_Design.height * cHeight + '') .attr('d', [ [ [valueX, barY], [valueX - valueWidth / 2, barY - valueTripHeight], [valueX - valueWidth / 2, barY - valueHeight], [valueX + valueWidth / 2, barY - valueHeight], [valueX + valueWidth / 2, barY - valueTripHeight] ] ].map(function (point, i) { return (i == 0 ? 'M' : 'L') + point.join(' ') }).join(' ') + 'Z'); var splitDistMin = (LinearColorBar_Design.barBlockWidth + LinearColorBar_Design.barBlockMargin) / LinearColorBar_Design.height * cHeight; var splitCounts = [100, 50, 20, 10, 5, 2, 1]; var splitDist = maxValueX - minValueX; var splitCount = 1; for (var i = 0; i < splitCounts.length; ++i) { splitDist = (maxValueX - minValueX) / splitCounts[i]; if (splitDist >= splitDistMin) { splitCount = splitCounts[i]; break; } } this.$splitLine.addStyle('stroke-width', LinearColorBar_Design.barBlockMargin / LinearColorBar_Design.height * cHeight + '') .attr({ d: Array(splitCount + 1).fill(0).map(function (u, i) { return 'M' + (maxValueX - i * splitDist) + ' ' + (barY - 1) + 'v' + (barHeight + 2); }).join(' ') }) }; LinearColorBar.prototype._updateGradient = function () { var barMax = 1 + this._extendValue; var gradientElt = this.$gradient.clearChild(); this._colorMapping.forEach(function (it) { LinearColorBar_g({ tag: 'stop', attr: { offset: (it.value <= 1 ? it.value / barMax * 100 : 100) + '%' }, style: { 'stop-color': it.color + '', 'stop-opacity': '1' } }).addTo(gradientElt); }); }; LinearColorBar.prototype.BUILDIN_COLORS_RANGE = { 'rainbow': [ { value: 0, color: 'red' }, { value: 1 / 6, color: 'orange' }, { value: 1 / 3, color: 'yellow' }, { value: 1 / 2, color: 'green' }, { value: 2 / 3, color: 'blue' }, { value: 5 / 6, color: 'indigo' }, { value: 1, color: 'violet' }, { value: Infinity, color: 'violet' } ], 'rainbow-invert': [ { value: 0, color: 'violet' }, { value: 1 / 6, color: 'indigo' }, { value: 1 / 3, color: 'blue' }, { value: 1 / 2, color: 'green' }, { value: 2 / 3, color: 'yellow' }, { value: 5 / 6, color: 'orange' }, { value: 1, color: 'red' }, { value: Infinity, color: 'violet' } ], 'performance': [ { value: 0, color: 'red' }, { value: 0.5, color: 'orange' }, { value: 1, color: 'green' }, { value: Infinity, color: 'green' } ], 'performance-invert': [ { value: 0, color: 'green' }, { value: 0.5, color: 'orange' }, { value: 1, color: 'red' }, { value: Infinity, color: 'red' } ] } LinearColorBar.tag = 'LinearColorBar'.toLowerCase(); LinearColorBar.render = function () { return LinearColorBar_({ class: 'as-linear-color-bar', child: [ 'svg.as-linear-color-background', '.as-linear-color-value-text', '.as-linear-color-min-value-text', '.as-linear-color-max-value-text' ] }); }; LinearColorBar.property = {}; LinearColorBar.property.valueText = { set: function (value) { value = value + ''; this._valueText = value; this.$valueText.clearChild().addChild(LinearColorBar_({ text: value })); }, get: function () { return this._valueText; } }; LinearColorBar.property.minValueText = { set: function (value) { value = value + ''; this._minValueText = value; this.$minValueText.clearChild().addChild(LinearColorBar_({ text: value })); }, get: function () { return this._valueText; } }; LinearColorBar.property.maxValueText = { set: function (value) { value = value + ''; this._maxValueText = value; this.$maxValueText.clearChild().addChild(LinearColorBar_({ text: value })); }, get: function () { return this._valueText; } }; LinearColorBar.property.value = { set: function (value) { this._value = value; }, get: function () { return this._value; } }; LinearColorBar.property.extendValue = { set: function (value) { this._extendValue = value; this._updateGradient(); }, get: function () { return this._extendValue; } }; LinearColorBar.property.colorMapping = { set: function (value) { if (typeof (value) == "string") value = this.BUILDIN_COLORS_RANGE[value]; this._colorMapping = value.slice(); this._colorMapping.sort(function (a, b) { return a.value - b.value; }) this._updateGradient(); }, get: function () { return this._colorMapping; } }; ACore["d" /* default */].install(LinearColorBar); /* harmony default export */ var js_LinearColorBar = (LinearColorBar); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/mediainput.css var mediainput = __webpack_require__(148); // CONCATENATED MODULE: ./node_modules/absol/src/Converter/file.js function blobToFile(theBlob, fileName) { return new File([theBlob], fileName); } function dataURItoBlob(dataURI) { var byteString = atob(dataURI.split(',')[1]); var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; var ab = new ArrayBuffer(byteString.length); var ia = new Uint8Array(ab); for (var i = 0; i < byteString.length; i++) { ia[i] = byteString.charCodeAt(i); } var blob = new Blob([ab], { type: mimeString }); return blob; } function blobToArrayBuffer(blob) { var fileReader = new FileReader(); return new Promise(function (rs) { fileReader.onload = function (event) { var arrayBuffer = event.target.result; rs(arrayBuffer); }; fileReader.readAsArrayBuffer(blob); }); } function stringToBlob(text, type) { type = type || 'text/plain'; var mineTye = type.split('/').length === 2 ? type : (Converter_ext2MineType[type] || 'text/plain'); return new Blob([text], { type: mineTye }); } // CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Text.js function getTextNodesIn(node) { var textNodes = []; if (node.nodeType == 3) { textNodes.push(node); } else { var children = node.childNodes; for (var i = 0, len = children.length; i < len; ++i) { textNodes.push.apply(textNodes, getTextNodesIn(children[i])); } } return textNodes; } /** * * @param {Element} el * @param {Range} range * @param {Number} start * @returns {Number} -1: ok, ret >= 0(is length of text) : need move to next element * */ function setSelectionRangeStart(el, range, start) { if (start > 0) { if (el.nodeType == Node.TEXT_NODE) { var text = el.data; if (start <= text.length) { range.setStart(el, start); return -1; } else return text.length; } if (el.tagName.toLowerCase() == 'br') { return 0; } else { var delta = 0; var i = 0; var textLength = 0; var newLine = false; while (delta >= 0 && i < el.childNodes.length) { var childElt = el.childNodes[i]; if (newLine) { newLine = false; ++textLength; } delta = setSelectionRangeStart(childElt, range, start - textLength); if (delta >= 0) textLength += delta; if (childElt.nodeType != Node.TEXT_NODE && (window.getComputedStyle(childElt).display == 'block' || childElt.tagName.toLowerCase() == 'br')) { newLine = true; } ++i; } if (delta >= 0) return textLength; return -1; } } else { range.setStart(el, 0); return -1; } } /** * * @param {Element} el * @param {Range} range * @param {Number} end * @returns {Number} -1: ok, ret >= 0(is length of text) : need move to next element * */ function setSelectionRangeEnd(el, range, end) { if (end > 0) { if (el.nodeType == Node.TEXT_NODE) { var text = el.data; if (end <= text.length) { range.setEnd(el, end); return -1; } else return text.length; } if (el.tagName.toLowerCase() == 'br') { return 0; } else { var delta = 0; var i = 0; var textLength = 0; var newLine = false; while (delta >= 0 && i < el.childNodes.length) { var childElt = el.childNodes[i]; if (newLine) { newLine = false; ++textLength; } delta = setSelectionRangeEnd(childElt, range, end - textLength); if (delta >= 0) textLength += delta; if (childElt.nodeType != Node.TEXT_NODE && (window.getComputedStyle(childElt).display == 'block' || childElt.tagName.toLowerCase() == 'br')) { newLine = true; } ++i; } if (delta >= 0) return textLength; return -1; } } else { range.setEnd(el, 0); return -1; } } function Text_setSelectionRange(el, start, end) { if (document.createRange && window.getSelection) { var range = document.createRange(); range.selectNodeContents(el); var delta; if (start >= 0) { delta = setSelectionRangeStart(el, range, start); if (delta >= 0) range.setStart(el, el.childNodes.length); } else { start = 0; range.setStart(el, 0); } if (end >= start) { delta = setSelectionRangeEnd(el, range, end); if (delta >= 0) range.setEnd(el, el.childNodes.length); } var sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); } else if (document.selection && document.body.createTextRange) { var textRange = document.body.createTextRange(); textRange.moveToElementText(el); textRange.collapse(true); textRange.moveEnd("character", end); textRange.moveStart("character", start); textRange.select(); } } function getTextIn(e) { if (e.nodeType == Node.TEXT_NODE) { return e.data; } if (e.tagName && e.tagName.toLowerCase() == 'br') return ''; var texts = []; var newLine = false; for (var i = 0; i < e.childNodes.length; ++i) { if (newLine) { newLine = false; texts.push('\n'); } var childElt = e.childNodes[i]; texts.push(getTextIn(childElt)); if (childElt.nodeType != Node.TEXT_NODE && (window.getComputedStyle(childElt).display == 'block' || childElt.tagName.toLowerCase() == 'br')) { newLine = true; } } return texts.join(''); } function textToNodes(text) { var lines = text.split(/\r?\n/); return lines.map(function (text) { if (text.length == 0) { return Dom["b" /* default */].ShareInstance._({ child: { tag: 'br' } }); } else { return Dom["b" /* default */].ShareInstance._({ child: { text: text } }); } }); } /* ** Returns the caret (cursor) position of the specified text field (oField). ** Return value range is 0-oField.value.length. */ function Text_getCaretPosition(oField) { // Initialize var iCaretPos = 0; // IE Support if (document.selection) { // Set focus on the element oField.focus(); // To get cursor position, get empty selection range var oSel = document.selection.createRange(); // Move selection start to 0 position oSel.moveStart('character', -oField.value.length); // The caret position is selection length iCaretPos = oSel.text.length; } // Firefox support else if (oField.selectionStart || oField.selectionStart == '0') iCaretPos = oField.selectionDirection == 'backward' ? oField.selectionStart : oField.selectionEnd; // Return results return iCaretPos; } function setCaretPosition(oField, caretPos) { if (oField.createTextRange) { var range = oField.createTextRange(); range.move('character', caretPos); range.select(); } else { if (oField.selectionStart) { oField.focus(); oField.setSelectionRange(caretPos, caretPos); } else oField.focus(); } } function Text_measureText(text, font) { // re-use canvas object for better performance var canvas = Text_measureText.canvas || (Text_measureText.canvas = document.createElement("canvas")); var context = canvas.getContext("2d"); if (font) context.font = font; var metrics = context.measureText(text); return metrics; } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MediaInput.js var MediACore = new Dom["b" /* default */](); MediACore.install(ACore["d" /* default */]); var MediaInput_ = MediACore._; var MediaInput_$ = MediACore.$; function MediaInput_openFileDialog(props) { if (!MediACore.$fileInput) { MediACore.$fileInput = MediaInput_({ tag: 'input', class: 'vmedia-no-show', attr: { type: 'file' }, props: {} }).addTo(document.body); } props = props || {}; if (props.accept) { if (props.accept instanceof Array) MediACore.$fileInput.attr('accept', props.accept.join(',')); else MediACore.$fileInput.attr('accept', props.accept); } else { MediACore.$fileInput.attr('accept', null); } if (props.multiple) { MediACore.$fileInput.attr('multiple', 'true'); } else { MediACore.$fileInput.attr('multiple'); } MediACore.$fileInput.value = null; MediACore.$fileInput.click(); return new Promise(function (resolve, reject) { var finish = false; var body = MediaInput_$('body'); MediACore.$fileInput.once('change', function () { finish = true; resolve(Array.prototype.map.call(this.files, function (file) { return file; })); }); body.once('mousedown', function () { if (finish) return; resolve(); }); }); } function MediaInput() { this.$editor = MediaInput_$('.vmedia-media-input-text-container-editor', this); this.$editor.on('paste', this.eventHandler.paste); this.$editor.on('keydown', this.eventHandler.keydown, true); this.$addImagebtn = MediaInput_$('#add-image-btn', this); this.$addImagebtn.on('click', this.eventHandler.clickAddImage); this.$addFilebtn = MediaInput_$('#add-file-btn', this); this.$addFilebtn.on('click', this.eventHandler.clickAddFile); this.$imagePreviewContainer = MediaInput_$('.vmedia-media-input-imagepreview-container', this); this.on('dragover', this.eventHandler.dragOver); this.on('drop', this.eventHandler.drop); this.$sendbtn = MediaInput_$('#send-btn', this); this.$sendbtn.on('click', this.eventHandler.send); this.$toolLeftCtn = MediaInput_$('.vmedia-media-input-tool-container-left', this); this.$pluginContentCtn = MediaInput_$('.vmedia-media-input-plugin-content-container', this); this.snapData = []; this.snapDataHead = 0; this.sync = this.afterAttached(); this.snapText(); } MediaInput.tag = 'MediaInput'.toLowerCase(); MediaInput.render = function () { return MediaInput_({ class: 'vmedia-media-input', extendEvent: ['send', 'update', 'releaseplugin'], child: { class: 'vmedia-media-input-text-container', child: [{ class: 'vmedia-media-input-imagepreview-container', child: { class: 'vmedia-media-input-dropover', child: 'download-ico' } }, { class: 'vmedia-media-input-text-container-editor', attr: { contenteditable: 'true' }, on: {} }, { class: 'vmedia-media-input-text-container-buttons', attr: { title: 'Send' } }, { class: 'vmedia-media-input-tool-container', child: [ { class: 'vmedia-media-input-tool-container-left', child: [ { tag: 'button', attr: { id: 'add-image-btn', title: 'Add image' }, child: 'add-image-ico' }, { tag: 'button', attr: { id: 'add-file-btn', title: 'Add file' }, child: 'add-file-ico' }, ] }, { class: 'vmedia-media-input-tool-container-right', child: [{ tag: 'button', id: 'send-btn', attr: { title: 'Send' }, child: 'send-ico' }] } ], }, '.vmedia-media-input-plugin-content-container.blur', ] } }); }; MediaInput.prototype.addImage = function (url, title, data) { MediaInput_({ tag: 'imagepreview', attr: { title: title }, props: { data: data, imgSrc: url }, on: { pressremove: function () { this.selfRemove(); } } }).addTo(this.$imagePreviewContainer); }; MediaInput.prototype.addFile = function (url, ext, title, data) { MediaInput_({ tag: 'filepreview', attr: { title: title }, props: { fileSrc: url, ext: ext, data: data }, on: { pressremove: function () { this.selfRemove(); } } }).addTo(this.$imagePreviewContainer); }; MediaInput.property = {}; MediaInput.property.text = { set: function (value) { this.$editor.clearChild(); value = value || ''; var lines = value.split(/\r*\n/); if (lines.length < 1) return; this.$editor.addChild(document.createTextNode(lines[0])); lines.shift(); lines.forEach(function (line) { this.$editor.addChild(MediaInput_({ child: document.createTextNode(line) })); }.bind(this)); this.snapText(); }, get: function () { return this.getTextFromElements(this.$editor); } }; MediaInput.property.files = { get: function () { return Array.prototype.filter.call(this.$imagePreviewContainer.childNodes, function (e) { return e._azar_extendTags && e._azar_extendTags.filepreview; }).map(function (e) { return e.data; }); } }; MediaInput.property.images = { get: function () { return Array.prototype.filter.call(this.$imagePreviewContainer.childNodes, function (e) { return e._azar_extendTags && e._azar_extendTags.imagepreview; }).map(function (e) { return e.data; }); } }; // MediaInput.property MediaInput.property.plugins = { set: function (value) { this.sync = this.sync.then(this._dettachPlugins.bind(this, this._plugins)); if (value) { if (!(value instanceof Array)) value = [value]; this._plugins = value; this.addClass('has-plugin'); } else { //remove plugin this.sync.then(this._dettachPlugins.bind(this)); this._plugins = null; this.removeClass('has-plugin'); } this.sync = this.sync.then(this._attachPlugins.bind(this, this._plugins)); }, get: function () { return this._plugins || null; } } MediaInput.prototype.appendText = function (text) { var lastBr = null; if (this.$editor.childNodes && this.$editor.childNodes.length > 0 && this.$editor.childNodes[this.$editor.childNodes.length - 1].tagName && this.$editor.childNodes[this.$editor.childNodes.length - 1].tagName.toLowerCase() == 'br') { lastBr = this.$editor.childNodes[this.$editor.childNodes.length - 1]; } var lines = text.split(/\r?\n/); if (lastBr) { for (var i = 0; i < lines.length; ++i) { if (i > 0) this.$editor.addChild(MediaInput_('br')); var e = MediaInput_({ text: lines[i] }); this.$editor.addChild(e); } } else { for (var i = 0; i < lines.length; ++i) { if (i > 0) this.$editor.addChildBefore(MediaInput_('br'), lastBr); var e = MediaInput_({ text: lines[i] }); } this.$editor.addChildBefore(e, lastBr); } Text_setSelectionRange(this.$editor, Infinity); }; MediaInput.prototype._attachPlugins = function (plugins) { if (!plugins) return; var self = this; plugins.forEach(function (plugin) { var oldContent = null; var $button = MediaInput_('button').addTo(self.$toolLeftCtn).on('click', function () { if (self._lastActivePlugin == plugin) return; self.releasePlugin(); self._lastActivePlugin = plugin; self.$pluginContentCtn.removeClass('blur'); self.$pluginContentCtn.clearChild(); if (plugin.getContent) { var newContent = plugin.getContent(self, MediaInput_, MediaInput_$, self.$pluginContentCtn, oldContent); oldContent = newContent; self.$pluginContentCtn.addChild(newContent); } var buttonBound = $button.getBoundingClientRect(); var rootBound = self.$pluginContentCtn.parentNode.getBoundingClientRect(); self.$pluginContentCtn.addStyle({ left: buttonBound.left + buttonBound.width / 2 - rootBound.left + 'px', bottom: rootBound.bottom - buttonBound.top + 'px' }); if (plugin.onActive) plugin.onActive(self); setTimeout(function () { var outListener = function (event) { if (EventEmitter["b" /* default */].hitElement(self.$pluginContentCtn, event)) { } else if (self._lastActivePlugin == plugin) { var prevented = true; if (plugin.onBlur) plugin.onBlur({ preventDefault: function () { prevented = false; } }); if (prevented) { self.releasePlugin(); MediaInput_$(document.body).off('click', outListener); } } else { MediaInput_$(document.body).off('click', outListener); } }; MediaInput_$(document.body).on('click', outListener); self.once('releaseplugin', function (ev) { if (ev.plugin == plugin) { MediaInput_$(document.body).off('click', outListener); } }); }, 100); }); var btnInners = plugin.getTriggerInner(self, MediaInput_, MediaInput_$, $button); if (!(btnInners instanceof Array)) btnInners = [btnInners]; btnInners.forEach(function (e) { if (typeof e == 'string') { e = MediaInput_({ text: e }); } $button.addChild(e); }); if (plugin.onAttached) plugin.onAttached(self); }); //todo return true; }; MediaInput.prototype.releasePlugin = function () { if (this._lastActivePlugin) { var plugin = this._lastActivePlugin; plugin.onDeactived && plugin.onDeactived(self); this.$pluginContentCtn.addClass('blur'); this.emit('releaseplugin', { target: this, plugin: plugin }, this); this._lastActivePlugin = null; } } MediaInput.prototype._dettachPlugins = function (plugins) { if (!plugins) return; var self = this; plugins.forEach(function (plugin) { if (plugin.onAttached) plugin.onAttached(self); }); //todo this._lastActivePlugin = null; return true; }; MediaInput.prototype.focus = function () { this.$editor.focus(); Text_setSelectionRange(this.$editor, Infinity); }; MediaInput.prototype.clear = function () { Array.prototype.filter.call(this.$imagePreviewContainer.childNodes, function (e) { return e._azar_extendTags && e._azar_extendTags.imagepreview; }).forEach(function (e) { e.selfRemove(); }); Array.prototype.filter.call(this.$imagePreviewContainer.childNodes, function (e) { return e._azar_extendTags && e._azar_extendTags.filepreview; }).forEach(function (e) { return e.selfRemove(); }); this.$editor.innerHTML = ""; this.emit('update', { target: this }, this); }; MediaInput.prototype.escapeSpace = function (s) { return s.replace(/\s/g, ' '); }; MediaInput.prototype.unescapeSpace = function (s) { return s.replace(/ /g, ' '); }; MediaInput.prototype.getTextFromElements = function (element) { return getTextIn(element); // var self = this; // function visit(e, prevE) { // var ac = ''; // var isNewLine = false; // if (prevE && prevE.nodeType != Node.TEXT_NODE) { // if (prevE.tagName && prevE.tagName.toLowerCase() == 'br') { // isNewLine = true; // } // else if (Element.prototype.getComputedStyleValue.call(prevE, 'display') == 'block') { // isNewLine = true; // } // } // if (e.nodeType == Node.TEXT_NODE) { // if (isNewLine) ac += '\n'; // ac += e.data; // } // else { // var lastE = undefined; // for (var i = 0; i < e.childNodes.length; ++i) { // ac += visit(e.childNodes[i], i > 0 ? e.childNodes[i - 1] : null); // } // } // return ac; // } // return visit(element); }; MediaInput.prototype.getElementsFromText = function (text) { var newElements = text.split('\n') .map(function (text) { return document.createTextNode(text); }) .reduce(function (ac, cr, i, arr) { if (i > 0) ac.push(MediaInput_('br')); ac.push(cr); return ac; }, []); return newElements; }; // MediaInput.prototype.textOnly = function(e) { // if (e.nodeType == Node.TEXT_NODE) return e.textContent; // if (!e.tagName) return ''; // if (e.tagName.toLowerCase() == 'br') return '\n'; // return ($(e).getComputedStyleValue('display') == 'block' ? '\n' : '') + Array.prototype.map.call(e.childNodes, this.textOnly.bind(this)).join('') // }; MediaInput.prototype.makeTextOnly = function () { var self = this; var editor = this.$editor; Array.apply(null, this.$editor.childNodes).forEach(function (e) { e = MediaInput_$(e); if (e.nodeType == Node.TEXT_NODE) return; if (e.tagName) { var tagName = e.tagName.toLowerCase(); if (tagName == 'br') return; if (tagName.match(/img|script|svg|button|iframe|hr|video|canvas/)) { e.selfRemove(e); } if (tagName.match(/select|input|textarea/)) { e.selfReplace(document.createTextNode(e.value)); return; } var newElements = self.getElementsFromText(self.getTextFromElements(e)); var lastElement; if (e.getComputedStyleValue('display') == 'block') { lastElement = MediaInput_('br'); } else { lastElement = newElements.pop(); } e.selfReplace(lastElement); newElements.forEach(function (nE) { editor.addChildBefore(nE, lastElement); }); } }); this.emit('update', { target: editor }, this); }; MediaInput.eventHandler = {}; MediaInput.eventHandler.keydown = function (event) { if (event.key == "Enter") { if (!event.ctrlKey && !event.altKey && !event.shiftKey) { event.preventDefault(); this.eventHandler.send(event); this.snapText(); } } if (event.ctrlKey && event.key == 'z') { event.preventDefault(); this.undoText(); } if (event.ctrlKey && event.key == 'x') { setTimeout(this.snapText.bind(this), 100) } setTimeout(this.emit.bind(this, 'update', event, this), 1); }; MediaInput.eventHandler.send = function (event) { if (this.images.length == 0 && this.text.trim().length == 0 && this.files.length == 0) { return; } this.emit('send', event, this); this.snapText(); }; MediaInput.eventHandler.clickAddImage = function (event) { MediaInput_openFileDialog({ accept: 'image/*', multiple: true }).then(function (files) { if (!files) return; files.map(function (file) { var url = (window.URL || window.webkitURL).createObjectURL(file); this.addImage(url, file.name, { file: file, name: file.name, url: url }); this.emit('update', event, this); }.bind(this)); }.bind(this)); }; MediaInput.eventHandler.clickAddFile = function (event) { MediaInput_openFileDialog({ multiple: true }).then(function (files) { if (!files) return; files.map(function (file) { var url = (window.URL || window.webkitURL).createObjectURL(file); if (file.type.match(/^image/)) { this.addImage(url, file.name, { file: file, name: file.name, url: url }); } else { var p = file.name.split('.'); var ext = p.length > 1 ? p[p.length - 1] : ''; this.addFile(url, ext.toUpperCase(), file.name, { file: file, name: file.name, url: url }); } }.bind(this)); this.emit('update', event, this); }.bind(this)); }; MediaInput.eventHandler.dragOver = function (event) { event.preventDefault(); this._lastDragOver = new Date().getTime(); var currentDragOver = this._lastDragOver; if (!this.dragOver) { this.dragOver = true; this.addClass('dragover'); this.emit('update', event, this); } setTimeout(function () { this._waitDragFileOut if (this._lastDragOver == currentDragOver) { this.removeClass('dragover'); this.dragOver = false; this.emit('update', event, this); } }.bind(this), 200); }; MediaInput.eventHandler.drop = function (event) { event.preventDefault(); if (event.dataTransfer.items) { for (var i = 0; i < event.dataTransfer.items.length; i++) { if (event.dataTransfer.items[i].kind === 'file') { var file = event.dataTransfer.items[i].getAsFile(); if (!file.type && file.size % 4096 == 0) { //todo: folder } else { this.addSystemFile(file); this.emit('update', event, this); } } } } else { for (var i = 0; i < event.dataTransfer.files.length; i++) { var file = event.dataTransfer.files[i]; if (!file.type && file.size % 4096 == 0) { } else { this.addSystemFile(file); this.emit('update', event, this); } } } }; MediaInput.prototype.addSystemFile = function (file) { var url = (window.URL || window.webkitURL).createObjectURL(file); if (file.type.match(/^image/)) { this.addImage(url, file.name, { file: file, name: file.name, url: url }); } else { var p = file.name.split('.'); var ext = p.length > 1 ? p[p.length - 1] : ''; this.addFile(url, ext.toUpperCase(), file.name, { file: file, name: file.name, url: url }); } } MediaInput.eventHandler.paste = function (event) { var pasteData = (event.clipboardData || window.clipboardData); var beforePasteElement = []; var self = this; function visit(e, ac) { ac.push(e); if (e.childNodes) { for (var i = 0; i < e.childNodes.length; ++i) { visit(e.childNodes[i], ac) } } } visit(this.$editor, beforePasteElement); function relocalCursor() { var afterPasteElement = []; visit(self.$editor, afterPasteElement); var diffElts = afterPasteElement.filter(function (e) { return beforePasteElement.indexOf(e) < 0; }); if (diffElts.length > 0) { var last = diffElts.pop(); if (last.nodeType == Node.TEXT_NODE) { var range = document.createRange(); range.selectNodeContents(last); range.setStart(last, last.data.length); var sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); } else { Text_setSelectionRange(last, Infinity); } } } /**Safari bug */ if (pasteData && pasteData.items) { var items = pasteData.items; var isAddImage = false; for (var i = 0; i < items.length; i++) { if (items[i].type.indexOf('image') !== -1) { var blob = items[i].getAsFile(); var URLObj = (window.URL || window.webkitURL); var source = URLObj.createObjectURL(blob); var file = blobToFile(blob); var buffer = blobToArrayBuffer(blob).then(function (arrayBuffer) { this.addImage(source, 'Clipboard', { file: blob, name: null, url: source, blob: blob, arrayBuffer: arrayBuffer }); this.emit('update', event, this); }.bind(this)); isAddImage = true; this.emit('update', event, this); } } if (isAddImage) event.preventDefault(); requestAnimationFrame(function () { self.makeTextOnly(); relocalCursor(); }); } else { requestAnimationFrame(function () { var img = MediaInput_$('img', this.$editor, function (img) { if (img) { img = MediaInput_$(img); var source = img.getAttribute('src'); img.selfRemove(); Dom["b" /* default */].imageToCanvas(img).then(function (canvas) { var dataURI = canvas.toDataURL(); var blob = dataURItoBlob(dataURI); var file = blobToFile(blob); var buffer = blobToArrayBuffer(blob).then(function (arrayBuffer) { this.addImage(source, 'Clipboard', { dataURI: dataURI, file: blob, name: null, url: source, blob: blob, arrayBuffer: arrayBuffer }); this.emit('update', event, this); }.bind(this)); }.bind(this), function (e) { }).catch(function (e) { }); } }.bind(this)); this.makeTextOnly(); relocalCursor(); }.bind(this)); } }; MediaInput.prototype.undoText = function () { if (this.snapDataHead <= 1) return; this.snapDataHead--; if (this.snapDataHead <= 0) return; var newText = this.snapData[this.snapDataHead - 1]; this.text = newText; Text_setSelectionRange(this.$editor, Infinity); }; MediaInput.prototype.redoText = function () { if (this.snapData.length <= this.snapDataHead) return; this.snapDataHead++; var newText = this.snapData[this.snapDataHead - 1]; var currentText = this.text; this.text = newText; Text_setSelectionRange(this.$editor, Infinity); }; MediaInput.prototype.snapText = function () { while (this.snapData.length > this.snapDataHead && this.snapData.length > 0) this.snapData.pop(); var oldText = this.snapData[this.snapDataHead - 1]; var newText = this.text; if (newText == oldText) return; this.snapData.push(this.text); this.snapDataHead++; } function ImagePreview() { var res = MediaInput_({ extendEvent: 'pressremove', class: ['vmedia-media-input-imagepreview', 'vmedia-no-select'], child: ['img', 'times-ico'] }); res.$img = MediaInput_$('img', res); res.$timesIco = MediaInput_$('times-ico', res); res.$timesIco.on('click', function (event) { res.emit('pressremove', event, res); }); OOP["a" /* default */].drillProperty(res, res.$img, 'imgSrc', 'src'); return res; }; function FilePreview() { var res = MediaInput_({ extendEvent: 'pressremove', class: ['vmedia-media-input-filepreview', 'vmedia-no-select'], child: ['attachment-ico', 'times-ico'] }); res.$img = MediaInput_$('attachment-ico', res); OOP["a" /* default */].drillProperty(res, res.$img, 'ext'); res.$timesIco = MediaInput_$('times-ico', res); res.$timesIco.on('click', function (event) { res.emit('pressremove', event, res); }); return res; }; MediACore.creator.mediainput = MediaInput; MediACore.creator.imagepreview = ImagePreview; MediACore.creator.filepreview = FilePreview; MediACore.creator['send-ico'] = function () { return MediaInput_( [ '<svg class="send" width="100" height="100" version="1.1" viewBox="0 0 26.458 26.458">', ' <g transform="translate(0 -270.54)">', ' <path d="m0.64298 272.44 3.1712 9.5402 22.152 1.7742-22.152 1.7482-3.1712 9.4749 25.323-11.223z" />', ' </g>', '</svg>' ].join('') ); }; MediACore.creator['add-file-ico'] = function () { return MediaInput_( [ '<svg class="add-file" width="100" height="100" version="1.1" viewBox="0 0 26.458 26.458" xmlns="http://www.w3.org/2000/svg">', ' <g transform="translate(0 -270.54)">', ' <path d="m4.2431 295.69c-0.74006-0.0759-1.4136-0.33772-2.0047-0.77942-0.19965-0.14919-0.60549-0.55475-0.75233-0.75182-0.45099-0.60524-0.7154-1.2913-0.77699-2.016-0.01275-0.15007-0.01628-2.6111-0.01252-8.7468 0.0049-8.0504 0.0068-8.5472 0.03338-8.6986 0.0883-0.50391 0.22692-0.91024 0.44705-1.3104 0.52794-0.95973 1.452-1.6645 2.5119-1.9158 0.44319-0.10508 0.12729-0.0972 4.1445-0.10308 2.5538-4e-3 3.6864-1e-4 3.7795 0.0121 0.38853 0.0508 0.80777 0.24687 1.2709 0.59434 0.44102 0.33085 0.68272 0.55272 1.7227 1.5813 0.46507 0.45998 1.2812 1.2664 1.8136 1.7921 0.96172 0.94958 1.3847 1.3824 1.696 1.7354 0.61073 0.69257 0.92 1.2063 1.0441 1.7344 0.02613 0.11122 0.02875 0.28598 0.03409 2.2731 0.0047 1.7451 0.0018 2.1574-0.01502 2.178-0.01424 0.0174-0.10685 0.0394-0.2936 0.0699-0.45695 0.0745-1.0078 0.22363-1.4356 0.38862-0.10025 0.0387-0.1888 0.0663-0.19678 0.0613-0.0085-5e-3 -0.01461-0.7983-0.01475-1.9156-2.09e-4 -1.6438-0.0036-1.9208-0.0245-2.0096-0.06972-0.29578-0.28642-0.50043-0.63767-0.60222-0.32942-0.0955-0.31104-0.0947-2.4299-0.10482l-1.9437-9e-3 -0.12495-0.0442c-0.25474-0.0901-0.45899-0.26526-0.5666-0.48578-0.10853-0.22238-0.10356-0.127-0.10407-1.9994-4.63e-4 -1.7153-0.01031-2.1544-0.05446-2.4288-0.06935-0.43095-0.22893-0.69171-0.5027-0.82138l-0.10904-0.0516h-3.1807c-3.4262 0-3.27-4e-3 -3.5482 0.0835-0.68034 0.21325-1.1718 0.754-1.3329 1.4666l-0.0345 0.15261v8.5059c0 8.1045 0.0014 8.5125 0.02871 8.6468 0.08088 0.39719 0.25808 0.72858 0.53956 1.0091 0.28082 0.27984 0.576 0.44186 0.98191 0.53896 0.11389 0.0273 0.36156 0.0293 4.5294 0.0374l4.409 9e-3 0.02019 0.0402c0.0111 0.0221 0.07695 0.15943 0.14632 0.30521s0.17519 0.3518 0.23515 0.45783c0.14341 0.25357 0.43703 0.69284 0.61725 0.92343 0.0793 0.10148 0.14077 0.19003 0.13659 0.19679-0.0073 0.0118-9.9306 0.0132-10.046 1e-3z" />', ' <path transform="matrix(.26458 0 0 .26458 0 270.54)" d="m72.469 65.742v7.4062h-7.4062v7.2852h7.4062v7.2812h7.2793v-7.2812h7.3535v-7.2852h-7.3535v-7.4062zm24.948 11.119a21.371 21.371 0 0 1-21.371 21.371 21.371 21.371 0 0 1-21.371-21.371 21.371 21.371 0 0 1 21.371-21.371 21.371 21.371 0 0 1 21.371 21.371z" style="fill-rule:evenodd;" />', ' <path d="m17.256 283.76 1.921-0.47607-0.04725-4.2884c0-0.50159-0.29516-1.2441-1.0789-2.0168l-4.6989-4.6324c-0.73814-0.72769-1.5947-0.97084-2.1519-0.97084h-7.0235c-2.1533 0.0144-3.4601 2.6226-3.4778 3.4778v17.284c0 2.121 2.2409 3.5346 3.5346 3.5346h10.058l-1.1146-1.9305h-8.6658c-1.1271 0-1.8503-1.1115-1.8503-1.8503v-16.867c0-1.0721 1.1373-1.6977 1.6977-1.6977h6.2175c0.43142 0 0.8103 0.28958 0.8103 1.1742v3.714c0 0.24768 0.36442 0.90967 0.90968 0.90967h3.2537c1.2453 0 1.6905 0.32876 1.6905 1.1613z" />', ' </g>', '</svg>' ].join('') ); }; MediACore.creator['add-image-ico'] = function () { return MediaInput_( [ '<svg class="add-image" width="100" height="100" version="1.1" viewBox="0 0 26.458 26.458" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="absol/src/HTML5/Elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">', ' <g transform="translate(0 -270.54)">', ' <path d="m24.73 288.69a5.9808 5.9808 0 0 1-5.9808 5.9808 5.9808 5.9808 0 0 1-5.9808-5.9808 5.9808 5.9808 0 0 1 5.9808-5.9808 5.9808 5.9808 0 0 1 5.9808 5.9808zm1.503-0.037a7.5843 7.5843 0 0 1-7.5843 7.5843 7.5843 7.5843 0 0 1-7.5843-7.5843 7.5843 7.5843 0 0 1 7.5843-7.5843 7.5843 7.5843 0 0 1 7.5843 7.5843z" style="fill-rule:evenodd;fill:#414141"/>', ' <path d="m17.869 284.42v3.4127h-3.4081v1.6066h3.4081v3.438h1.6061v-3.438h3.4432v-1.6066h-3.4432v-3.4127z" style="fill-rule:evenodd;fill:#414141"/>', ' <path d="m24.614 281.39v-6.1305c0-1.6957-1.2841-2.6602-2.6602-2.6602h-18.412c-1.4547 0-2.7249 1.0223-2.7249 2.7249v14.986c0 1.2346 0.99768 2.6028 2.586 2.586h6.9542c-0.36184-0.63963-0.51495-1.0286-0.69323-1.6506h-6.4562c-0.29938 0-0.72246-0.40379-0.72246-0.72247v-1.8082l6.0428-6.7569 2.0296 2.0129 0.9605-1.3029-2.9734-3.1488-5.9885 6.7736v-11.426c0-0.24935 0.30766-0.63476 0.63476-0.63476h18.934c0.3592 0 0.84357 0.19284 0.84357 0.84357v5.2285c0.61147 0.22444 1.1564 0.59412 1.6454 1.0858z" style="fill:#414141"/>', ' <circle cx="17.869" cy="277.61" r="1.6891" style="fill-rule:evenodd;fill:#414141"/>', ' </g>', '</svg>' ].join('') ); }; MediACore.creator['attachment-ico'] = function () { return MediaInput_( [ '<svg class="attachment" width="1024" height="1024" version="1.1" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" >', ' <path d="M145.6 0C100.8 0 64 35.2 64 80v862.4C64 987.2 100.8 1024 145.6 1024h732.8c44.8 0 81.6-36.8 81.6-81.6V324.8L657.6 0h-512z" fill="#8199AF"/>', ' <path d="M960 326.4v16H755.2s-100.8-20.8-99.2-108.8c0 0 4.8 92.8 97.6 92.8H960z" fill="#617F9B"/>', ' <path d="M657.6 0v233.6c0 25.6 17.6 92.8 97.6 92.8H960L657.6 0z" fill="#fff"/>', ' <path d="m491.77 770.31c17.6-19.2 17.6-48 0-67.2s-48-17.6-65.6 0l-147.2 147.2c-17.6 17.6-17.6 48 0 65.6s48 19.2 65.6 0l91.2-89.6c4.8-4.8 4.8-12.8 0-17.6s-14.4-6.4-19.2 0l-57.6 56c-8 8-19.2 8-27.2 0s-8-20.8 0-28.8l56-56c20.8-20.8 54.4-20.8 75.2 0s20.8 54.4 0 75.2l-89.6 89.6c-33.6 33.6-88 33.6-123.2 0-33.6-33.6-33.6-88 0-121.6l147.2-147.2c33.6-33.6 89.6-33.6 123.2 0s33.6 88 0 121.6l-14.4 14.4c-1.6-14.4-6.4-28.8-16-41.6z" style="fill:#fff"/>', ' <path d="m130.09 23.864h504.75v182.93h-545.65v-140.08c0.34155-16.845 13.608-42.414 40.9-42.847z" style="fill-opacity:.29648;fill-rule:evenodd;fill:#fff"/>', '</svg>' ] .join('') ); }; MediACore.creator['attachment-ico'].property = { ext: { set: function (value) { value = value || ''; if (this.$ext) { this.$ext.selfRemove(); } this.$ext = HTML5_Svg.ShareInstance._('<text text-anchor="middle" x="321.39" y="170" font-size="145.76" style="fill:white;" >' + value + '</text>').addTo(this); }, get: function () { return this._ext || ''; } } }; MediACore.creator['times-ico'] = function () { return MediaInput_( [ '<svg class="times" width="100" height="100" version="1.1" viewBox="0 0 26.458 26.458" xmlns="http://www.w3.org/2000/svg">', ' <g transform="translate(0 -270.54)">', ' <path d="m7.7013 276.49 5.4832 5.4832 5.5494-5.5494 1.7874 1.7874-5.5291 5.5291 5.4957 5.4957-1.754 1.754-5.5124-5.5124-5.5542 5.5542-1.7623-1.7623 5.5375-5.5375-5.5208-5.5208zm17.103 7.3351a11.558 11.558 0 0 1-11.558 11.558 11.558 11.558 0 0 1-11.558-11.558 11.558 11.558 0 0 1 11.558-11.558 11.558 11.558 0 0 1 11.558 11.558z" style="fill-rule:evenodd;"/>', ' </g>' ].join('') ); }; MediACore.creator['download-ico'] = function () { return MediaInput_( [ '<svg class="download" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">', ' <g transform="translate(0,-197)">', ' <path d="m44.888 209.14h13.982c1.1087 0.0459 2.2328 0.74137 2.317 2.3612v23.694h13.622c1.9742-0.18801 3.004 2.6244 1.9175 4.1118l-23.469 23.918c-0.876 0.77477-1.9993 0.77232-2.9362 0l-23.559-24.009c-0.86532-1.0422 0.11658-4.1953 2.3821-4.2047h13.268v-22.939c-0.08167-1.1772 0.78292-2.9507 2.4768-2.9312z" style="fill:#00c3e5"/>', ' <path d="m86.97 276.99a3.5027 3.5696 0 0 1-3.5027 3.5696 3.5027 3.5696 0 0 1-3.5027-3.5696 3.5027 3.5696 0 0 1 3.5027-3.5696 3.5027 3.5696 0 0 1 3.5027 3.5696zm-12.768 0a3.5027 3.5696 0 0 1-3.5027 3.5696 3.5027 3.5696 0 0 1-3.5027-3.5696 3.5027 3.5696 0 0 1 3.5027-3.5696 3.5027 3.5696 0 0 1 3.5027 3.5696zm-60.003-16.135h24.609c9.1206 13.508 17.573 12.942 26.609 0h23.839c2.8529 5e-3 3.5087 2.3205 3.4679 3.8227v18.953c0.04867 1.3083-1.5145 2.9901-2.7505 2.9832h-76.253c-1.049 0.0441-2.6554-1.4851-2.6306-3.1451l-1.56e-4 -18.792c0.0024-1.3549 0.50958-3.7927 3.1091-3.8227z" style="fill-rule:evenodd;fill:#00c3e5"/>', ' </g>', '</svg>' ].join('') ); }; MediACore.creator['plus-ico'] = function () { return MediaInput_( '<svg class="_7oal" height="24" width="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><polygon points="-6,30 30,30 30,-6 -6,-6 "></polygon><path d="m18,11l-5,0l0,-5c0,-0.552 -0.448,-1 -1,-1c-0.5525,0 -1,0.448 -1,1l0,5l-5,0c-0.5525,0 -1,0.448 -1,1c0,0.552 0.4475,1 1,1l5,0l0,5c0,0.552 0.4475,1 1,1c0.552,0 1,-0.448 1,-1l0,-5l5,0c0.552,0 1,-0.448 1,-1c0,-0.552 -0.448,-1 -1,-1m-6,13c-6.6275,0 -12,-5.3725 -12,-12c0,-6.6275 5.3725,-12 12,-12c6.627,0 12,5.3725 12,12c0,6.6275 -5.373,12 -12,12" ></path></g></svg>' ); }; ACore["d" /* default */].install(MediaInput); /* harmony default export */ var js_MediaInput = (MediaInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/messageinput.css var messageinput = __webpack_require__(150); // CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/CMDRunner.js function CMDRunner(_this, commands) { this._this = _this; this.commands = {}; this.assign(commands); } CMDRunner.prototype.has = function (cmdName) { return !!this.commands[cmdName]; }; CMDRunner.prototype.add = function (cmdName, handler) { this.commands[cmdName] = handler; return this; }; CMDRunner.prototype.remove = function (cmdName) { delete this.commands[cmdName]; return this; }; CMDRunner.prototype.assign = function (obj) { for (var cmdName in obj) { if (typeof obj[cmdName] == 'function') { this.add(cmdName, obj[cmdName]); } } }; CMDRunner.prototype.invoke = function () { if (this.commands[arguments[0]]) { var args = Array.prototype.slice.call(arguments, 1); return this.commands[arguments[0]].apply(this._this, args); } else { throw new Error('No command: ' + arguments[0]); } }; /* harmony default export */ var AppPattern_CMDRunner = (CMDRunner); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/tokenizeiput/TITextController.js var EMPTY_2_SPACES = String.fromCharCode(0x2003); var emojiCSSLoaded = false; function loadEmojiCSS(){ if (emojiCSSLoaded) return; emojiCSSLoaded = true; Dom["b" /* default */].documentReady.then(() => { var styleSheet = {}; for (var name in EmojiAnimByIdent) { styleSheet['.as-emoji-token[data-text="' + name + '"]'] = { 'background-image': 'url(' + js_EmojiPicker.assetRoot + '/static/x20/' + EmojiAnimByIdent[name][1] + ')' } } buildCss(styleSheet) }); } /*** * * @param {TokenizeHyperInput} elt * @constructor */ function TITextController(elt) { loadEmojiCSS(); this.elt = elt; } TITextController.prototype.setText = function (text) { this.elt.clearChild(); this.elt.addChild(text2ContentElements(text, { tagMap: this.elt.tagMap })); this.elt.addChild(this.elt.$br); }; TITextController.prototype.getText = function () { var nodes = Array.prototype.slice.call(this.elt.childNodes); if (isNewLine(nodes[nodes.length - 1])) { nodes.pop(); } return nodes.map(node => { if (isText(node)) { return node.data; } else if (isToken(node)) { return node.getAttribute('data-text') || ''; } else if (isNewLine(node)) return '\n'; }).join(''); }; /*** * * @param {Range=} range default: previous selected range */ TITextController.prototype.getTextByRange = function (range) { range = range || this.elt.selectionCtrl.prevRange; if (!range) return this.getText(); var nodes = Array.prototype.slice.call(this.elt.childNodes); if (isNewLine(nodes[nodes.length - 1])) nodes.pop(); var startCtn = range.startContainer; var startOffset = range.startOffset; var endCtn = range.endContainer; var endOffset = range.endOffset; if (startCtn === this.elt) { startCtn = this.elt.childNodes[startOffset - 1]; startOffset = 0; } else if (isTokenText(startCtn)) { startCtn = startCtn.parentElement; } if (endCtn === this.elt) { endCtn = this.elt.childNodes[endOffset]; endOffset = 0; } else if (isTokenText(endCtn)) { endCtn = endCtn.parentElement; } if (startCtn === endCtn) { if (isToken(startCtn)) { return startCtn.getAttribute('data-text'); } else if (isText(startCtn)) { return startCtn.data.substring(startOffset, endOffset); } return ''; } var res = ''; var node; var started = false; for (var i = 0; i < nodes.length; ++i) { node = nodes[i]; if (started) { if (endCtn === node) { if (isToken(endCtn)) { res += node.getAttribute('data-text'); } else if (isText(node)) { res += node.data.substring(0, endOffset); } break; } else { if (isToken(node)) { res += node.getAttribute('data-text'); } else if (isText(node)) { res += node.data; } else if (isNewLine(node)) { res += '\n'; } } } else { if (startCtn === node) { started = true; if (isText(node)) { res += node.data.substring(startOffset); } else if (isToken(node)) { if (startOffset === 0) { res += node.getAttribute('data-text'); } } } } } return res; } TITextController.prototype.applyData = function (text, offset) { this.setText(text); this.elt.selectionCtrl.setRangeByOffset(offset); }; TITextController.prototype.insertText = function (text) { var range = document.getSelection().getRangeAt(0); range.deleteContents(); this.elt.selectionCtrl.onSelect(); range = document.getSelection().getRangeAt(0); var eltChain = text2ContentElements(text, { tagMap: this.elt.tagMap }); var startCtn = range.startContainer; var at; if (isTokenText(startCtn)) { at = startCtn.parentElement; } else if (startCtn === this.elt) { at = this.elt.childNodes[range.startOffset - 1]; } var newNode; while (eltChain.length > 0) { newNode = eltChain.shift(); if (!at) { this.elt.addChildBefore(newNode, this.elt.firstChild); at = newNode; } else if (isText(at) && isText(newNode)) { at.data += newNode.data; } else { this.elt.addChildAfter(newNode, at); at = newNode; } } }; /* harmony default export */ var tokenizeiput_TITextController = (TITextController); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/tokenizeiput/tiutils.js function tokenizeMessageText(text) { var emojis = EmojiAnimByIdent; var splitter = Object.keys(EmojiAnimByIdent).concat(['\n']); var tagTokens = text.match(/@\[id:\d+]/g) || []; var otherTokens = text.split(/@\[id:\d+]/g); var tokens = otherTokens.reduce((ac, cr, i) => { ac.push(cr); if (i < tagTokens.length) ac.push(tagTokens[i]); return ac; }, []); tokens = splitter.reduce((chain, splitter) => { return chain.reduce((ac, token) => { var subChain = token.split(splitter); for (var i = 0; i < subChain.length; ++i) { if (subChain[i]) { ac.push(subChain[i]); } if (i + 1 < subChain.length) { ac.push(splitter); } } return ac; }, []); }, tokens); tokens = tokens.map(text => { var tagId; if (text === '\n') { return { type: 'NEW_LINE' }; } else if (emojis[text]) { return { type: 'EMOJI', value: text }; } else if (text.match(/^@\[id:\d+]$/)) { tagId = text.substring(5, text.length - 1); return { type: "TAG", value: tagId }; } else return { type: 'TEXT', value: text }; }); return tokens; } var isText = node => { return node && node.nodeType === Node.TEXT_NODE; } var isNewLine = node => { return node && node.tagName === 'BR'; } /*** * * @param {Text|AElement}node * @returns {null|*} */ var getFirstTextNode = node => { if (node.nodeType === Node.TEXT_NODE || node.tagName === 'BR') return node; var nodes = node.childNodes; var res = null; for (var i = 0; i < nodes.length && !res; ++i) { res = res || getFirstTextNode(nodes[i]); } return res; }; var getLastTextNode = node => { if (node.nodeType === Node.TEXT_NODE || node.tagName === 'BR') return node; var nodes = node.childNodes; var res = null; for (var i = nodes.length - 1; i > 0 && !res; --i) { res = res || getLastTextNode(node); } return res; }; var isTokenText = node => { if (node.nodeType !== Node.TEXT_NODE) return false; return isToken(node.parentElement); } var isToken = node => { return node && node.classList && (node.classList.contains('as-emoji-token') || node.classList.contains('as-tag-token')); } function findNextTextNode(root, current) { var nextTextNode = node => { var res = null; var next = node.nextSibling; while (next && !res) { res = getFirstTextNode(next); next = next.nextSibling; } if (!res && node.parentElement !== root) { res = nextTextNode(node.parentElement); } return res; } return nextTextNode(current); } function findPrevTextNode(root, current) { var prevTextNode = node => { var res = null; var prev = node.previousSibling; while (prev && !res) { res = getLastTextNode(prev); prev = prev.previousSibling; } if (!res && node.parentElement !== root) { res = prevTextNode(node.parentElement); } return res; } return prevTextNode(current); } function text2ContentElements(text, opt) { return tokenizeMessageText(text).map((token) => { var textOfTag; switch (token.type) { case 'NEW_LINE': return Object(ACore["c" /* _ */])('br'); case 'EMOJI': return Object(ACore["c" /* _ */])({ tag: 'span', class: 'as-emoji-token', attr: { 'data-display': EMPTY_2_SPACES, 'data-text': token.value }, child: { text: EMPTY_2_SPACES } }) case 'TAG': textOfTag = opt.tagMap && opt.tagMap[token.value]; return Object(ACore["c" /* _ */])({ tag: 'span', class: 'as-tag-token', attr: { 'data-text': '@[id:' + token.value + ']', 'data-display': textOfTag ? '@' + textOfTag : '@[id:' + token.value + ']' }, child: { text: textOfTag ? '@' + textOfTag : '@[id:' + token.value + ']' } }); case 'TEXT': default: return Object(ACore["c" /* _ */])({ text: token.value }); } }); } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/messageinput/MessageInputPlugin.js /*** * @typedef MessageInputPluginOption * @property {string} [id] * @property {string|Object|AElement} icon * @property {function(_thisAdapter: MessageInputPlugin, _:Dom._, Dom.$):AElement} createContent * @property {function(_thisAdapter:MessageInputPlugin):void} onPressTrigger * @property {"left"|"right"} popupAlign * @property {boolean=} alwaysVisible */ /*** * * @param {MessageInput} inputElt * @param {MessageInputPluginOption} opt * @constructor */ function MessageInputPlugin(inputElt, opt) { this.opt = opt || {}; this.inputElt = inputElt; this.icon = opt.icon; this.id = opt.id || randomIdent(16); this.alwaysVisible = !!opt.alwaysVisible; this.$icon = null; this.$triggerBtn = null; this.$content = null; this.$popup = null; if (opt.createContent) this.createContent = opt.createContent; if (opt.onPressTrigger) this.onPressTrigger = opt.onPressTrigger; this.autoClose = true; if ('autoClose' in opt) { this.autoClose = !!opt.autoClose; } this.popupAlign = opt.popupAlign || 'left'; this.ev_pressTrigger = this.ev_pressTrigger.bind(this); this.ev_pressOut = this.ev_pressOut.bind(this); } MessageInputPlugin.prototype.isMessagePlugin = true; MessageInputPlugin.prototype.ev_pressTrigger = function (event) { var value = this.inputElt.$preInput.value; this._lastInputSelectPosion = this.inputElt.$preInput.getSelectPosition() || { start: value.length, end: value.length }; if (this.onPressTrigger) { this.onPressTrigger(this); } else { if (this.isPopupOpened()) { this.closePopup(); } else { this.openPopup(); } } }; MessageInputPlugin.prototype.insertText = function (itext) { if (!this._lastInputSelectPosion) { throw new Error('Invalid call'); } var text = this.inputElt.$preInput.value; var newText = text.substr(0, this._lastInputSelectPosion.start) + itext + text.substr(this._lastInputSelectPosion.end); var selected = this._lastInputSelectPosion; var newOffset = selected.start + itext.length; this.inputElt.$preInput.focus(); this.inputElt.$preInput.applyData(newText, newOffset); this.inputElt.$preInput.commitChange(newText, newOffset); this.inputElt.notifySizeChange(); this.inputElt.$preInput.focus(); }; MessageInputPlugin.prototype.appendText = function (itext) { if (!this._lastInputSelectPosion) { throw new Error('Invalid call'); } var text = this.inputElt.$preInput.value; var newText = text + itext; var newOffset = newText.length; this.inputElt.$preInput.focus(); this.inputElt.$preInput.applyData(newText, newOffset); this.inputElt.$preInput.commitChange(newText, newOffset); this.inputElt.notifySizeChange(); this.inputElt.$preInput.focus(); } MessageInputPlugin.prototype.replaceText = function (itext) { if (!this._lastInputSelectPosion) { throw new Error('Invalid call'); } var newText = itext; var newOffset = newText.length; this.inputElt.$preInput.focus(); this.inputElt.$preInput.applyData(newText, newOffset); this.inputElt.$preInput.commitChange(newText, newOffset); this.inputElt.notifySizeChange(); this.inputElt.$preInput.focus(); } MessageInputPlugin.prototype.ev_pressOut = function (event) { if (EventEmitter["b" /* default */].hitElement(this.getTriggerButton(), event)) return; if (EventEmitter["b" /* default */].hitElement(this.getPopup(), event)) return; if (!this.autoClose) return; this.closePopup(); }; MessageInputPlugin.prototype.getIconElt = function () { if (!this.$icon) this.$icon = Object(ACore["c" /* _ */])(this.icon); return this.$icon; }; MessageInputPlugin.prototype.getTriggerButton = function () { if (!this.$triggerBtn) { this.$triggerBtn = Object(ACore["c" /* _ */])({ tag: 'button', class: ['as-message-input-plugin-btn', 'as-message-input-plugin-' + this.id], child: this.getIconElt(), on: { click: this.ev_pressTrigger } }); if (this.alwaysVisible) { this.$triggerBtn.addClass('as-always-visible'); } } return this.$triggerBtn; }; MessageInputPlugin.prototype.createContent = function (_thisAdapter, _, $) { return _({ tag: 'div' }); }; /*** * * @type {null|function(_thisAdapter:MessageInputPlugin):void} */ MessageInputPlugin.prototype.onPressTrigger = null; MessageInputPlugin.prototype.getContent = function () { if (!this.$content) this.$content = this.createContent(this.inputElt, ACore["c" /* _ */], ACore["a" /* $ */]); return this.$content; }; MessageInputPlugin.prototype.getPopup = function () { if (!this.$popup) { this.$popup = Object(ACore["c" /* _ */])({ class: ['as-message-input-external-tools-popup', 'as-align-' + this.popupAlign], child: this.getContent() }); } return this.$popup; }; MessageInputPlugin.prototype.openPopup = function () { if (this.isPopupOpened()) return; this.inputElt.appendChild(this.getPopup()); document.body.addEventListener('click', this.ev_pressOut); this.onOpen(); if (this.opt.onOpen) { this.opt.onOpen.call(this, this.inputElt, ACore["c" /* _ */], ACore["a" /* $ */]); } }; MessageInputPlugin.prototype.closePopup = function () { if (!this.isPopupOpened()) return; if (this.opt.onClose) { this.opt.onClose.call(this, this.inputElt, ACore["c" /* _ */], ACore["a" /* $ */]); } this.onClose(); this.getPopup().remove(); document.body.removeEventListener('click', this.ev_pressOut); }; MessageInputPlugin.prototype.isPopupOpened = function () { return !!this.getPopup().parentElement; }; MessageInputPlugin.prototype.onOpen = noop; MessageInputPlugin.prototype.onClose = noop; Object.defineProperty(MessageInputPlugin.prototype, 'contentElt', { get: function () { return this.getContent(); } }); /* harmony default export */ var messageinput_MessageInputPlugin = (MessageInputPlugin); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/messageinput/MIEmojiPlugin.js /**** * @extends MessageInputPlugin * @constructor */ function MIEmojiPlugin(inputElt) { messageinput_MessageInputPlugin.call(this, inputElt, { id: 'emoji_picker', icon: 'span.mdi.mdi-emoticon-happy-outline' }); for (var key in this) { if (key.startsWith('ev_')) { this[key] = this[key].bind(this); } } } OOP["a" /* default */].mixClass(MIEmojiPlugin, messageinput_MessageInputPlugin); MIEmojiPlugin.prototype.createContent = function () { return Object(ACore["c" /* _ */])('emojipicker')//.addTo(this.$emojiPickerCtn) .on('pick', this.ev_PickEmoji); }; MIEmojiPlugin.prototype.ev_PickEmoji = function (event) { var text = this.inputElt.$preInput.value; var selected = this._lastInputSelectPosion; var newText = text.substr(0, selected.start) + event.key + text.substr(selected.end); var newOffset = selected.start + event.key.length; this._lastInputSelectPosion = { start: newOffset, end: newOffset }; this.inputElt.$preInput.focus(); this.inputElt.$preInput.applyData(newText, newOffset); this.inputElt.$preInput.commitChange(newText, newOffset); this.inputElt.notifySizeChange(); this.inputElt.$preInput.focus(); }; MIEmojiPlugin.prototype.onOpen = function (){ var value = this.inputElt.$preInput.value; this._lastInputSelectPosion = this.inputElt.$preInput.getSelectPosition() || { start: value.length, end: value.length }; this.inputElt.$preInput.focus(); } /* harmony default export */ var messageinput_MIEmojiPlugin = (MIEmojiPlugin); // EXTERNAL MODULE: ./node_modules/absol-acomp/assets/exticons/catalog.json var catalog = __webpack_require__(17); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/messageinput/MessageInput.js var MessageInput_ = ACore["d" /* default */]._; var MessageInput_$ = ACore["d" /* default */].$; var MessageInput_$$ = ACore["d" /* default */].$$; /*** * * @typedef {{text:string, desc: string, img?:string, file?:string}|string} MessageInputQuote */ var MODE_NEW = 0; var MODE_EDIT = 1; var MessageInput_isMobile = BrowserDetector["a" /* default */].isMobile; /*** * @extends AElement * @constructor */ function MessageInput() { this._cmdRunner = new AppPattern_CMDRunner(this); this._keyMaps = {}; this._plugins = []; this._mode = MODE_NEW;//edit this._editingText = ""; prepareIcon(); /** * @type {import('../PreInput').default} */ this.$preInput = MessageInput_$('.as-message-input-pre', this); this.$preInput.on('change', this.eventHandler.preInputChange) .on('keyup', this.eventHandler.preInputKeyUp) .on('keydown', this.eventHandler.preInputKeyDown) .on('pasteimg', this.eventHandler.preInputPasteImg) .on('focus', this.eventHandler.preInputFocus) .on('blur', this.eventHandler.preInputBlur); // //every can make size change this._imageFiles = []; this._files = []; this._latBound = {}; this.$quote = MessageInput_$('messagequote.as-message-input-quote', this) .on('pressremove', this.eventHandler.clickQuoteRemoveBtn); this.$left = MessageInput_$('.as-message-input-left', this); this.$right = MessageInput_$('.as-message-input-right', this); this.$attachmentCtn = MessageInput_$('.as-message-input-attachment-ctn', this); this.$fileBtn = MessageInput_$('.as-message-input-plugin-file', this) .on('click', this.openFileDialog.bind(this)); this.$attachmentAddBtn = MessageInput_$('.as-message-input-attachment-add-btn', this) .on('click', this.openFileDialog.bind(this)); this.$sendBtn = MessageInput_$('.as-message-input-plugin-send', this) .on('click', this.notifySend.bind(this)); this.$cancelBtn = MessageInput_$('.as-message-input-plugin-cancel', this) .on('click', this.notifyCancel.bind(this)); this.$attachhook = MessageInput_('attachhook').addTo(this) .on('attached', this.notifySizeChange.bind(this)) .on('attached', this._updateSize.bind(this)); this.on('drop', this.eventHandler.drop) .on('dragover', this.eventHandler.dragover); OOP["a" /* default */].drillProperty(this, this.$preInput, 'tagList'); this.autoSend = false; /*** * * @type {MessageInputQuote|null} */ this.quote = null; this.addPlugin(new messageinput_MIEmojiPlugin(this)); } MessageInput.MODE_EDIT = MODE_EDIT; MessageInput.MODE_NEW = MODE_NEW; MessageInput.iconAssetRoot = (function () { if (location.hostname.match(/^.*(\.?absol\.cf|absol\.ddns\.net)$/) || location.hostname === 'localhost') return 'https://absol.cf/exticons/vivid'; return '/vivid_exticons'; })(); MessageInput.tag = 'MessageInput'.toLowerCase(); MessageInput.render = function (data) { data = data || {}; data.iconAssetRoot = data.iconAssetRoot || MessageInput.iconAssetRoot; return MessageInput_({ attr: { 'data-icon-asset-root': MessageInput.iconAssetRoot }, class: ['as-message-input'].concat(data.v2 ? ['as-v2'] : []), extendEvent: ['sendtext', 'sendimage', 'sendfile', 'sendquote', 'cancel', 'change', 'sizechange', 'send', 'useraddfile'], child: [ { class: 'as-message-input-right', child: [ { tag: 'button', class: ['as-message-input-plugin-btn', 'as-message-input-plugin-file'], child: 'span.mdi.mdi-attachment.mdi-rotate-90' }, { tag: 'button', class: ['as-message-input-plugin-btn', 'as-message-input-plugin-send'], child: 'span.mdi.mdi-send' }, { tag: 'button', class: ['as-message-input-plugin-btn', 'as-message-input-plugin-cancel'], child: 'span.mdi.mdi-close' } ] }, { class: 'as-message-input-pre-ctn', child: [ 'messagequote.as-message-input-quote.as-removable.as-shorten-text', { class: 'as-message-input-left' }, { class: ['as-message-input-attachment-ctn', 'as-bscroller'], child: [{ tag: 'button', class: 'as-message-input-attachment-add-btn', child: [ 'span.mdi.mdi-arrow-down-bold.as-message-input-attachment-add-btn-drop', { tag: 'span', class: 'as-message-input-attachment-add-btn-plus', child: { text: "+" } } ] }] }, (data.v2 ? 'tokenizehyperinput' : 'preinput') + '.as-message-input-pre.absol-bscroller' ] } ] }); }; MessageInput.prototype.notifyChange = function () { this.emit('change', { name: 'change', target: this }, this); if (this.autoSend) { if (this.files.length > 0 || this.images.length > 0) this.notifySend(); } }; MessageInput.prototype.notifySend = function () { var eventData = { imageRemovePrevented: false, fileRemovePrevented: false, textRemovePrevented: false, quoteRemovePrevented: false, target: this, files: this.files, images: this.images, text: this.text }; if (eventData.files.length > 0) { this.emit('sendfile', Object.assign(eventData, { type: 'sendfile', preventDefault: function () { this.fileRemovePrevented = true; } }), this); } if (eventData.images.length > 0) { this.emit('sendimage', Object.assign(eventData, { type: 'sendimage', preventDefault: function () { this.imageRemovePrevented = true; } }), this); } if ((typeof this.quote === "string") || this.quote) { this.emit('sendquote', Object.assign(eventData, { type: 'sendquote', preventDefault: function () { this.quoteRemovePrevented = true; } }), this); } if (this.files.length > 0 || eventData.images.length > 0 || eventData.text || ((typeof this.quote === "string") || this.quote)) { if (eventData.text) this.$preInput.focus(); this.emit('send', Object.assign(eventData, { type: 'send', preventDefault: function () { this.imageRemovePrevented = true; this.fileRemovePrevented = true; this.imageRemovePrevented = true; this.quoteRemovePrevented = true; } }), this); } if (!eventData.fileRemovePrevented) this.files = []; if (!eventData.imageRemovePrevented) this.images = []; if (!eventData.textRemovePrevented) this.text = ''; if (!eventData.quoteRemovePrevented) this.quote = null; }; MessageInput.prototype.notifyCancel = function () { this.emit('cancel', { type: 'cancel', name: 'send', target: this, clearAllContent: this.clearAllContent.bind(this) }, this); }; MessageInput.prototype.clearAllContent = function () { this.text = ''; this.quote = null; this.files = []; this.images = []; }; MessageInput.prototype.focus = function () { var value = this.$preInput.value; var range = this.$preInput.getSelectPosition() || { start: value.length, end: value.length }; this.$preInput.focus(); this.$preInput.applyData(value, range); }; MessageInput.prototype.blur = function () { this.$preInput.blur(); }; MessageInput.prototype._updateAttachmentClass = function () { if (this._imageFiles.length + this._files.length) { this.addClass("as-has-attachment"); } else { this.removeClass("as-has-attachment"); } this._updateSize(); }; MessageInput.prototype._updateSize = function () { var fs = this.getFontSize() || 14; this.addStyle('--right-width', this.$right.getBoundingClientRect().width / fs + 'em'); }; MessageInput.prototype.addImageFiles = function (imageFiles, urls) { var thisMi = this; Array.prototype.forEach.call(imageFiles, function (file, index) { thisMi._imageFiles.push(file); var src; if (urls) { src = urls[index]; } if (!src) { src = URL.createObjectURL(file); } var itemElt = MessageInput_({ class: ['as-message-input-attach-preview', 'as-image'], attr: { title: file.name }, child: [ { class: 'as-message-input-attach-preview-image', style: { backgroundImage: 'url(' + src + ')' } }, { tag: 'button', class: 'as-message-input-attach-preview-close-btn', child: 'span.mdi.mdi-close', attr: { title: 'remove' }, on: { click: function () { thisMi._imageFiles = thisMi._imageFiles.filter(function (it) { return it !== file; }); itemElt.remove(); thisMi._updateAttachmentClass(); thisMi.notifySizeChange(); thisMi.notifyChange(); } } }, { class: 'as-message-input-attach-preview-info', child: [ { class: 'as-message-input-attach-preview-name', child: { text: file.name } }, { class: 'as-message-input-attach-preview-size', child: { text: fileSize2Text(file.size) } } ] } ] }).addTo(thisMi.$attachmentCtn); thisMi.$attachmentCtn.addChildBefore(itemElt, thisMi.$attachmentAddBtn); }); this._updateAttachmentClass(); this.notifySizeChange(); }; MessageInput.prototype.addFiles = function (files) { var thisMi = this; Array.prototype.forEach.call(files, function (file, index) { thisMi._files.push(file); MessageInput.iconSupportAsync.then(function (ExtensionIcons) { var src; var ext = file.name.split('.').pop().toLowerCase(); if (ExtensionIcons.indexOf(ext) > 0) { src = MessageInput.iconAssetRoot + '/' + ext + '.svg' } else { src = MessageInput.iconAssetRoot + '/' + 'default' + '.svg' } var itemElt = MessageInput_({ class: ['as-message-input-attach-preview', 'as-file'], attr: { title: file.name }, child: [ { tag: 'img', class: 'as-message-input-attach-preview-file', props: { src: src } }, { tag: 'button', class: 'as-message-input-attach-preview-close-btn', child: 'span.mdi.mdi-close', attr: { title: 'remove' }, on: { click: function () { thisMi._files = thisMi._files.filter(function (it) { return it !== file; }); itemElt.remove(); thisMi._updateAttachmentClass(); thisMi.notifySizeChange(); thisMi.notifyChange(); } } }, { class: 'as-message-input-attach-preview-info', child: [ { class: 'as-message-input-attach-preview-name', child: { text: file.name } }, { class: 'as-message-input-attach-preview-size', child: { text: fileSize2Text(file.size) } } ] } ] }); thisMi.$attachmentCtn.addChildBefore(itemElt, thisMi.$attachmentAddBtn); }); }); this._updateAttachmentClass(); thisMi.notifySizeChange(); }; MessageInput.prototype.closeEmoji = function () { if (!this.hasClass('as-message-input-show-emoji')) return; this.removeClass('as-message-input-show-emoji'); this.removeChild(this.$emojiPickerCtn); MessageInput_$(document.body).off('mousedown', this.eventHandler.mousedownOutEmoji); }; MessageInput.prototype.notifyAddFiles = function (files) { var event = { resolvedAsync: Promise.resolve(files), files: files, resolve: function (result) { if (!result) { this.resolvedAsync = Promise.resolve(undefined); } else if (result.then) { this.resolvedAsync = result; } else { this.resolvedAsync = Promise.resolve(result); } } }; this.emit('useraddfile', event); return event.resolvedAsync; } MessageInput.prototype.openFileDialog = function () { var thisMi = this; openFileDialog({ multiple: true }).then(function (files) { if (!thisMi.autoSend) thisMi.$preInput.focus(); thisMi.notifyAddFiles(files).then(function (files) { if (files && files.length > 0) thisMi.handleAddingFileByType(files); }); }); }; MessageInput.prototype.handleAddingFileByType = function (files) { if (files.length > 0) { var imageFiles = []; var otherFiles = []; var file; for (var i = 0; i < files.length; ++i) { file = files[i]; if (!!file.type && file.type.match && file.type.match(/^image\//)) { imageFiles.push(file); } else { otherFiles.push(file); } } this.addImageFiles(imageFiles); this.addFiles(otherFiles); this.notifyChange(); } }; MessageInput.prototype.notifySizeChange = function () { var bound = this.getBoundingClientRect(); if (this._latBound.width != bound.width || this._latBound.height != bound.height) { this._latBound.width = bound.width; this._latBound.height = bound.height; this.emit('sizechange', { name: 'sizechange', bound: bound, target: this }, this); } }; MessageInput.prototype.addPlugin = function (option) { var plugin; if (option.isMessagePlugin) { plugin = option; } else { plugin = new this.PluginConstructor(this, option); } plugin.idx = this._plugins.length + 1; this._plugins.push(plugin); this._plugins.sort(function (a, b) { var av = (typeof a.opt.order === "number") ? a.opt.order : a.idx * 1000; var bv = (typeof b.opt.order === "number") ? b.opt.order : b.idx * 1000; return av - bv; }); var plugins = this._plugins.slice(); plugins.forEach(pl => pl.getTriggerButton().remove()); this.$left.addChild(plugins.shift().getTriggerButton()); while (plugins.length > 0) { this.$right.addChildBefore(plugins.shift().getTriggerButton(), this.$right.firstChild); } return plugin; }; /*** * * @param {{name?:string, exec:function(_this:MessageInput):void, keyBiding?:string}} option */ MessageInput.prototype.addCommand = function (option) { option.name = option.name || randomIdent(20); this._cmdRunner.add(option.name, option.exec); if (option.keyBiding && option.keyBiding.trim) { var keyBindingIdent = normalizeKeyBindingIdent(option.keyBiding); this._keyMaps[keyBindingIdent] = option.name; } }; MessageInput.prototype.exeCmd = function (name) { var args = Array.prototype.slice.call(arguments); args[0] = this; args.unshift(name); this._cmdRunner.invoke.apply(this._cmdRunner, args); }; MessageInput.prototype._updateQuote = function () { this.$quote.data = this._quote; if (this._quote) this.addClass('as-has-quote'); else this.removeClass('as-has-quote'); this._updateSize(); this.notifySizeChange(); }; /** * @type {MessageInput} */ MessageInput.eventHandler = {}; MessageInput.eventHandler.preInputChange = function (event) { var text = this.$preInput.value; if (text.length > 0) { this.addClass('as-has-text'); } else { this.removeClass('as-has-text'); } if (text === this._editingText) { this.removeClass('as-text-changed'); } else { this.addClass('as-text-changed'); } this._updateSize(); this.notifySizeChange(); this.notifyChange(); }; MessageInput.eventHandler.preInputKeyDown = function (event) { if (!(event.shiftKey || event.ctrlKey || event.altKey) && event.key === 'Enter') { this.notifySend(); event.preventDefault(); } else if ((event.shiftKey || event.ctrlKey || event.altKey) && event.key === 'Enter') { event.preventDefault(); var text = this.$preInput.value; var selectedPos = this.$preInput.getSelectPosition(); var newText = text.substr(0, selectedPos.start) + '\n' + text.substr(selectedPos.end); this.$preInput.applyData(newText, selectedPos.start + 1); this.notifySizeChange(); this.$preInput.commitChange(newText, selectedPos.start + 1); } else if (event.key === "Escape" && this._mode === MODE_EDIT) { this.notifyCancel(); event.preventDefault(); } var keyBindingIdent = keyboardEventToKeyBindingIdent(event); if (this._keyMaps[keyBindingIdent]) { event.preventDefault(); this.exeCmd(this._keyMaps[keyBindingIdent]); } setTimeout(this.notifySizeChange.bind(this), 1); }; MessageInput.eventHandler.preInputKeyUp = function (event) { var value = this.$preInput.value; this._lastInputSelectPosion = this.$preInput.getSelectPosition() || { start: value.length, end: value.length }; this.notifySizeChange(); }; MessageInput.eventHandler.preInputPasteImg = function (event) { if (this._mode == 'edit') return; var files = Array.prototype.slice.call(event.imageFiles); var urls = event.urls && Array.prototype.slice.call(event.urls); this.notifyAddFiles(files).then(function (newFiles) { if (!newFiles || newFiles.length === 0) return; var newUrls = urls && newFiles.map(function (file) { return urls[files.indexOf(file)]; }); this.addImageFiles(newFiles, newUrls); this.notifyChange(); }.bind(this)); }; MessageInput.eventHandler.preInputFocus = function () { this.addClass('as-focus'); }; MessageInput.eventHandler.preInputBlur = function () { this.removeClass('as-focus'); }; MessageInput.eventHandler.clickEmojiBtn = function () { this.toggleEmoji(); }; MessageInput.eventHandler.mousedownOutEmoji = function (event) { if (EventEmitter["b" /* default */].hitElement(this.$emojiPicker, event) || EventEmitter["b" /* default */].hitElement(this.$emojiBtn, event)) return; this.closeEmoji(); }; MessageInput.eventHandler.pickEmoji = function (event) { var text = this.$preInput.value; var newText = text.substr(0, this._lastInputSelectPosion.start) + event.key + text.substr(this._lastInputSelectPosion.end); var selected = this._lastInputSelectPosion; var newOffset = selected.start + event.key.length; this._lastInputSelectPosion = { start: newOffset, end: newOffset }; this.$preInput.focus(); this.$preInput.applyData(newText, newOffset); this.$preInput.commitChange(newText, newOffset); this.notifySizeChange(); this.$preInput.focus();//older firefox version will be lost focus // this.notifyChange();//not need }; MessageInput.eventHandler.dragover = function (event) { event.preventDefault(); this.addClass('as-drag-hover'); this.notifySizeChange(); if (this._hoverTimeout > 0) clearTimeout(this._hoverTimeout); var thisMi = this; this._hoverTimeout = setTimeout(function () { thisMi._hoverTimeout = -1; thisMi.removeClass('as-drag-hover'); thisMi.notifySizeChange(); }, 200); //todo: this._updateSize(); }; MessageInput.eventHandler.drop = function (event) { event.preventDefault(); var files = []; var file; if (event.dataTransfer.items) { for (var i = 0; i < event.dataTransfer.items.length; i++) { if (event.dataTransfer.items[i].kind === 'file') { file = event.dataTransfer.items[i].getAsFile(); if (!file.type && file.size % 4096 == 0) { //todo: folder } else { files.push(file); } } } } else { for (var i = 0; i < event.dataTransfer.files.length; i++) { file = event.dataTransfer.files[i]; if (!file.type && file.size % 4096 == 0) { } else { files.push(file); } } } this.notifyAddFiles(files).then(function (files) { this.handleAddingFileByType(files); }.bind(this)); }; MessageInput.eventHandler.clickQuoteRemoveBtn = function () { this.quote = null; this.notifyChange(); } MessageInput.property = {}; MessageInput.property.files = { set: function (value) { MessageInput_$$('.as-file', this.$attachmentCtn).forEach(function (elt) { elt.remove(); }); value = value || []; this._files = []; this.addFiles(value); }, get: function () { return this._files; } }; MessageInput.property.images = { set: function (value) { MessageInput_$$('.as-image', this.$attachmentCtn).forEach(function (elt) { elt.remove(); }); value = value || []; this._imageFiles = []; this.addImageFiles(value); }, get: function () { return this._imageFiles; } }; MessageInput.property.text = { set: function (text) { this.$preInput.value = '' + text; if (text.length > 0) { this.addClass('as-has-text'); } else { this.removeClass('as-has-text'); } if (this._mode === MODE_EDIT) { this._editingText = text; } this.removeClass('as-text-changed'); this._updateSize(); }, get: function () { return this.$preInput.value; } }; /** * @type {MessageInput} */ MessageInput.property.mode = { set: function (value) { value = value || MODE_NEW; if (value === MODE_EDIT || (value.toLowerCase && value.toLowerCase() === 'edit')) { this.addClass('as-mode-edit'); value = MODE_EDIT; this._editingText = this.$preInput.value; } else { value = MODE_NEW; this._editingText = ''; this.removeClass('as-mode-edit'); } this.removeClass('as-text-changed'); this._mode = value; this._updateSize(); }, get: function () { return this._mode === MODE_EDIT ? 'edit' : 'new'; } }; MessageInput.property.autoSend = { set: function (value) { if (value) { this.addClass('as-auto-send'); } else { this.removeClass('as-auto-send'); } }, get: function () { return this.hasClass('as-auto-send'); } }; MessageInput.property.quote = { set: function (quote) { this._quote = quote; this._updateQuote(); }, get: function () { return this._quote; } }; MessageInput.property.tagMap = { set: function (value) { this.$preInput.tagMap = value || {}; this.$quote.tagMap = value || {}; }, get: function () { return this.$preInput.tagMap; } } ACore["d" /* default */].install(MessageInput); /* harmony default export */ var messageinput_MessageInput = (MessageInput); var urlRex = /^(firefox|opera|chrome|https|http|wss|ws):\/\/[^\s]+$/; /*** * * @param {string}text * @param {{emojiAssetRoot?:string, staticSize?:number, animSize?:number, tagMap?:{}, lengthLimit?:number, inline?:boolean}=} data * @returns {Array} */ function parseMessage(text, data) { data = data || {}; data.emojiAssetRoot = data.emojiAssetRoot || js_EmojiPicker.assetRoot; data.staticSize = data.staticSize || 20; data.animSize = data.animSize || 60; var tagMap = data.tagMap || {}; var tokens = tokenizeMessageText(text).reduce((ac, token) => { if (token.type !== 'TEXT') { ac.push(token); return ac; } var urls = token.value.match(/(firefox|opera|chrome|https|http|wss|ws):\/\/[^\s]+/g); var splitter = Math.random() + ''; var normals = token.value.replace(/(firefox|opera|chrome|https|http|wss|ws):\/\/[^\s]+/, splitter).split(splitter); for (var i = 0; i < normals.length; ++i) { if (i > 0) { ac.push({ type: 'URL', value: urls[i - 1] }); } ac.push({ type: 'TEXT', value: normals[i] }); } return ac; }, []); if (data.lengthLimit > 0) { tokens = tokens.reduce((ac, token) => { if (ac.l >= data.lengthLimit) { return ac; } switch (token.type) { case 'TAG': ac.l += ('@' + (tagMap[token.value] ? tagMap[token.value] : '[id:' + token.value + ']')).length; break; case 'EMOJI': ac.l += 1; break; case 'NEW_LINE': ac.l += 1; break; default: ac.l += token.value.length; } if (ac.l > data.lengthLimit) { if (token.type === 'TEXT') { token.value = token.value.substring(0, Math.max(0, token.value.length - (ac.l - data.lengthLimit) - 3)) + '...'; ac.tokens.push(token); } } else { ac.tokens.push(token); } return ac; }, { l: 0, tokens: [] }).tokens; } var res = tokens.reduce((ac, token) => { switch (token.type) { case 'TAG': ac.push({ tag: 'span', class: 'as-tag-token', child: { text: '@' + (tagMap[token.value] ? tagMap[token.value] : '[id:' + token.value + ']') } }); break; case 'EMOJI': ac.push({ tag: 'span', class: 'as-emoji-text', child: { text: token.value } }); ac.push({ tag: 'img', class: 'as-emoji', props: { src: data.emojiAssetRoot + '/static/x' + data.staticSize + '/' + EmojiAnimByIdent[token.value][1] } }) break; case 'NEW_LINE': ac.push({ tag: 'br' }); break; case 'URL': ac.push({ tag: 'a', class: 'as-protocal-' + token.value.split(':').shift(), child: { text: token.value }, props: { href: token.value, target: '_blank' } }) break; case 'TEXT': default: ac.push({ tag: 'span', child: { text: token.value } }) break; } return ac; }, []); if (!data.inline && res.length === 2 && res[1].class === 'as-emoji') { res[1].tag = 'iconsprite'; res[1].props.fps = 30; res[1].props.src = res[1].props.src.replace('/static/x' + data.staticSize, '/anim/x' + data.animSize); } return res; } MessageInput.parseMessage = parseMessage; function prepareIcon() { if (!MessageInput.iconSupportAsync) { MessageInput.iconSupportAsync = Promise.resolve(catalog) } return MessageInput.iconSupportAsync; } function MessageQuote() { prepareIcon(); this._tagMap = {}; /*** * * @type {null|MessageInputQuote} * @private */ this._data = null; this.$img = MessageInput_$('.as-message-quote-img', this); this.$text = MessageInput_$('.as-message-quote-text', this); this.$desc = MessageInput_$('.as-message-quote-desc', this); this.$removeBtn = MessageInput_$('.as-message-quote-remove-btn', this) .on('click', this.eventHandler.clickRemoveBtn); Object.defineProperty(this, '$text', { set: function () { console.trace(); }, get: function () { return MessageInput_$('.as-message-quote-text', this); } }) } MessageQuote.tag = 'MessageQuote'.toLowerCase(); MessageQuote.render = function () { return MessageInput_({ extendEvent: 'pressremove', class: 'as-message-quote-box', child: [ { class: 'as-message-quote-img' }, { class: 'as-message-quote-sym', child: 'span.mdi.mdi-format-quote-open-outline' }, { class: 'as-message-quote-content', child: [ { class: 'as-message-quote-text', child: { text: '' } }, { class: 'as-message-quote-desc', child: { text: '' } } ] }, { tag: 'button', class: 'as-message-quote-remove-btn', child: 'span.mdi.mdi-close' } ] }); }; MessageQuote.property = {}; MessageQuote.eventHandler = {}; MessageQuote.property.removable = { set: function (val) { if (val) { this.addClass('as-removable'); } else { this.removeClass('as-removable'); } }, get: function () { return this.hasClass('as-removable'); } }; MessageQuote.property.shortenText = { set: function (val) { if (val) { this.addClass('as-shorten-text'); } else { this.removeClass('as-shorten-text'); } }, get: function () { return this.hasClass('as-shorten-text'); } }; MessageQuote.property.data = { set: function (quote) { this._data = quote; var text, desc; var file, img; if (typeof quote === "string") { text = quote; desc = '' } else if (quote && (typeof quote === "object")) { text = quote.text; desc = quote.desc; file = quote.file; img = quote.img; } if (text === undefined) { this.$text.clearChild(); this.$desc.firstChild.data = ''; this.removeClass('as-has-file'); this.removeClass('as-has-img'); } else { if (file) { file = file.toLowerCase().split('.').pop(); MessageInput.iconSupportAsync.then(function (iconSupport) { if (iconSupport.indexOf(file) < 0) file = 'default'; this.$img.addStyle('background-image', 'url(' + MessageInput.iconAssetRoot + '/' + file + '.svg)'); }.bind(this)); this.addClass('as-has-file'); } else this.removeClass('as-has-file'); if (img) { this.$img.addStyle('background-image', 'url(' + img + ')'); this.addClass('as-has-img'); } else this.removeClass('as-has-img'); if (this.shortenText) text = text.split(/\r?\n/).shift(); var parsedText = parseMessage(text, { tagMap: this.tagMap }); var textEltChain = parsedText.map(function (c) { return MessageInput_(c); }); this.$text.clearChild().addChild(textEltChain); this.$desc.firstChild.data = desc; } }, get: function () { return this._data; } }; MessageQuote.property.tagMap = { set: function (value) { this._tagMap = value || {}; this.data = this['data']; }, get: function () { return this._tagMap; } }; MessageQuote.eventHandler.clickRemoveBtn = function () { this.emit('pressremove', { target: this, type: 'pressclose' }, this); }; ACore["d" /* default */].install(MessageQuote); MessageInput.prototype.PluginConstructor = messageinput_MessageInputPlugin; // EXTERNAL MODULE: ./node_modules/absol-acomp/css/numberinput.css var numberinput = __webpack_require__(152); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/numberinput/NITextController.js /*** * * @param {NumberInput} elt * @constructor */ function NITextController(elt) { this.elt = elt; /*** * * @type {HTMLInputElement|AElement} */ this.$input = this.elt.$input; Object.keys(NITextController.prototype).forEach(key => { if (key.startsWith('on')) this[key] = this[key].bind(this); }); this.elt.$input.on('keydown', this.onKeyDown) .on('paste', this.onKeyDown) .on('blur', this.onBlur); } NITextController.prototype.estimateWidthBy = function (text) { if (this.elt.hasClass('as-pressing')) return; var bound = this.elt.getBoundingClientRect(); var width = Text_measureText(text, this.$input.getComputedStyleValue('font')).width; this.elt.addStyle('--text-width', width + 'px'); var newBound = this.elt.getBoundingClientRect(); if (newBound.width !== bound.width) ResizeSystem["a" /* default */].requestUpdateUpSignal(this.elt, true); }; NITextController.prototype.flushTextToValue = function () { var thousandsSeparator = this.elt.thousandsSeparator || ''; var decimalSeparator = this.elt.decimalSeparator; var text = this.$input.value; var floatText = text.split(thousandsSeparator).join('').split(decimalSeparator).join('.'); this.elt._value = parseFloat(floatText); if (!isRealNumber(this.elt._value)) this.elt._value = null; }; NITextController.prototype.flushValueToText = function () { var formatter; var opt = Object.assign({}, this.elt._format); var value = this.elt.value; var text, parts; if (value === null) { text = ''; } else if (opt.locales === 'none') { if (opt.maximumFractionDigits === 20) { text = value + ''; } else if (opt.maximumFractionDigits === opt.minimumIntegerDigits) { text = value.toFixed(opt.maximumFractionDigits); } else { text = value + ''; parts = text.split('.'); parts[1] = parts[1] || ''; if (parts[1].length < opt.minimumIntegerDigits) { text = value.toFixed(opt.minimumIntegerDigits); } } } else { formatter = new Intl.NumberFormat(this.elt._format.locales, opt); text = formatter.format(value); } this.$input.value = text; this.estimateWidthBy(text); }; NITextController.prototype.reformat = function () { var thousandsSeparator = this.elt.thousandsSeparator || ''; var decimalSeparator = this.elt.decimalSeparator; var caretPos = this.$input.selectionEnd; var value = this.$input.value; var parts = value.split(decimalSeparator); var caretWTSPos = value.substring(0, caretPos).split(thousandsSeparator).join('').length; parts[0] = parts[0].split('').filter(x => x.match(/[0-9\-]/)).reduce((ac, c, i, arr) => { ac += c; if ((i + 1 < arr.length) && ((arr.length - i) % 3 === 1) && arr[i] !== '-') { ac += thousandsSeparator; } return ac; }, ''); if (parts[1]) parts[1] = parts[1].split('').filter(x => x.match(/[0-9]/)).join(''); var newValue = parts.join(decimalSeparator); var newCaretPos = 0; var counter = 0; for (newCaretPos = 0; newCaretPos < newValue.length && counter < caretWTSPos; ++newCaretPos) { if (newValue[newCaretPos].match(/[0-9\-]/) || newValue[newCaretPos] === decimalSeparator) { counter++; } } this.$input.value = newValue; this.$input.setSelectionRange(newCaretPos, newCaretPos); this.estimateWidthBy(newValue); }; NITextController.prototype.onBlur = function () { this.flushValueToText(); this.elt.notifyChanged({ by: 'blur' }); } /*** * @param {KeyboardEvent|ClipboardEvent|{}} event * @param {boolean=} event */ NITextController.prototype.onKeyDown = function (event, dontInsert) { var key = event.type === 'keydown' ? keyboardEventToKeyBindingIdent(event) : ''; if ((key.length === 1 && !key.match(/[0-9.,\-]/)) || key.match(/^shift-.$/)) { event.preventDefault(); return; } var thousandsSeparator = this.elt.thousandsSeparator; var decimalSeparator = this.elt.decimalSeparator; var value = this.$input.value; var sStart = this.$input.selectionStart; var sEnd = this.$input.selectionEnd; var sDir = this.$input.selectionDirection; var onKeys = {}; onKeys.unidentified = () => { var oldText = this.$input.value; setTimeout(() => { var newText = this.$input.value; if (oldText === newText) return; var key = newText[sStart]; var fakeEvent = { type: 'keydown', preventDefault: noop, key: key } if (key.match(/^[0-9.]$/)) { this.onKeyDown(fakeEvent, true); } else { this.$input.value = oldText; this.$input.setSelectionRange(sStart, sStart); this.onKeyDown(fakeEvent); } }, 10); }; onKeys.process = () => { setTimeout(() => { this.flushTextToValue(); }, 10); } onKeys.paste = () => { var clipboardData = event.clipboardData || window.clipboardData; var pastedData = clipboardData.getData('Text'); var hasSeparator = value.indexOf(decimalSeparator) >= 0; pastedData = pastedData.split('').filter(c => { if (c.match(/[0-9]/)) return true; if (!hasSeparator && c === hasSeparator) { hasSeparator = true; return true; } }).join(''); if (this.elt.readOnly) return; if (!dontInsert) { this.$input.value = value.substring(0, sStart) + pastedData + value.substring(sEnd); this.$input.setSelectionRange(sStart + pastedData.length, sStart + pastedData.length); } this.reformat(); this.flushTextToValue(); }; onKeys.arrowleft = () => { if (sStart === sEnd) { if (value[sStart - 2] === thousandsSeparator) { this.$input.setSelectionRange(sStart - 2, sStart - 2); } else if (sStart > 0) { this.$input.setSelectionRange(sStart - 1, sStart - 1); } } else { this.$input.setSelectionRange(sStart, sStart); } }; onKeys['shift-arrowleft'] = () => { var newSStart; var newSEnd; if (sDir === 'backward') { newSStart = sEnd; newSEnd = sStart - 1; } else { newSStart = sStart; newSEnd = sEnd - 1; } if (value[newSEnd - 1] === thousandsSeparator) newSEnd--; newSEnd = Math.max(0, newSEnd); if (newSStart <= newSEnd) { this.$input.setSelectionRange(newSStart, newSEnd, "forward"); } else { this.$input.setSelectionRange(newSEnd, newSStart, "backward"); } }; onKeys.arrowright = () => { if (sStart === sEnd) { if (value[sStart] === thousandsSeparator) { this.$input.setSelectionRange(sStart + 2, sStart + 2); } else if (sStart < value.length) { this.$input.setSelectionRange(sStart + 1, sStart + 1); } } else { this.$input.setSelectionRange(sStart, sStart); } }; onKeys['shift-arrowright'] = () => { var newSStart; var newSEnd; if (sDir === 'backward') { newSStart = sEnd; newSEnd = sStart + 1; } else { newSStart = sStart; newSEnd = sEnd + 1; } if (value[newSEnd - 1] === thousandsSeparator) newSEnd++; newSEnd = Math.min(value.length, newSEnd); if (newSStart <= newSEnd) { this.$input.setSelectionRange(newSStart, newSEnd, "forward"); } else { this.$input.setSelectionRange(newSEnd, newSStart, "backward"); } }; onKeys.number = () => { if (this.elt.readOnly) return; if (!dontInsert) { this.$input.value = value.substring(0, sStart) + key + value.substring(sEnd); this.$input.setSelectionRange(sStart + 1, sStart + 1); } this.reformat(); this.flushTextToValue(); }; onKeys['-'] = () => { if (this.elt.readOnly) return; if (value.indexOf('-') >= 0 || sStart > 0) return; this.$input.value = '-' + value.substring(sEnd); this.$input.setSelectionRange(1, 1); this.reformat(); this.flushTextToValue(); }; onKeys.backspace = () => { if (this.elt.readOnly) return; var delStart, delEnd; if (sStart === sEnd) { if (sStart > 0) { delStart = sStart - 1; delEnd = sStart; } } else { delStart = sStart; delEnd = sEnd; } if (delStart === undefined || delEnd === undefined) return; this.$input.value = value.substring(0, delStart) + value.substring(delEnd); this.$input.setSelectionRange(delStart, delStart); this.reformat(); this.flushTextToValue(); }; onKeys.enter = () => { if (this.elt.readOnly) return; this.flushValueToText(); this.$input.setSelectionRange(this.$input.value.length, this.$input.value.length); this.elt.notifyChanged({ by: 'enter' }); }; onKeys.delete = () => { if (this.elt.readOnly) return; var delStart, delEnd; if (sStart === sEnd) { if (sStart < value.length) { delStart = sStart; delEnd = sStart + 1; if (value[delStart] === thousandsSeparator) delEnd++; } } else { delStart = sStart; delEnd = sEnd; } if (isNaturalNumber(delStart) && isNaturalNumber(delEnd)) { this.$input.value = value.substring(0, delStart) + value.substring(delEnd); this.$input.setSelectionRange(delStart, delStart); this.reformat(); this.flushTextToValue(); } }; onKeys.decimalSeparator = () => { if (this.elt.readOnly) return; var idx = value.indexOf(decimalSeparator); if (idx >= 0) { if (idx < sStart) { this.$input.value = value.substring(0, sStart).replace(decimalSeparator, '') + decimalSeparator + value.substring(sEnd); this.$input.setSelectionRange(sStart, sStart); } else if (idx < sEnd) { this.$input.value = value.substring(0, sStart) + decimalSeparator + value.substring(sEnd); this.$input.setSelectionRange(sStart + 1, sStart + 1); } else { this.$input.value = value.substring(0, sStart) + decimalSeparator + value.substring(sEnd).replace(decimalSeparator, ''); this.$input.setSelectionRange(sStart + 1, sStart + 1); } } else { this.$input.value = value.substring(0, sStart) + decimalSeparator + value.substring(sEnd); this.$input.setSelectionRange(sStart + 1, sStart + 1); } this.reformat(); this.flushTextToValue(); }; if (key === 'arrowup') { if (sStart === 0 && sEnd === 0) { this.elt.nextStep(); event.preventDefault(); this.$input.setSelectionRange(0, 0); } } else if (key === 'arrowdown') { if (sStart === value.length && sEnd === value.length) { this.elt.prevStep(); event.preventDefault(); this.$input.setSelectionRange(this.$input.value.length, this.$input.value.length); } } else if (key === 'ctrl-x') { onKeys.delete(); } else if (onKeys[event.type]) { event.preventDefault(); onKeys[event.type](); } else if (onKeys[key]) { event.preventDefault(); onKeys[key](); } else if (key.match(/^[0-9.]$/)) { event.preventDefault(); onKeys.number(); } else if (key === decimalSeparator) { event.preventDefault(); onKeys.decimalSeparator(); } }; /* harmony default export */ var numberinput_NITextController = (NITextController); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/numberinput/NumberInput.js var NumberInput_ = ACore["d" /* default */]._; var NumberInput_$ = ACore["d" /* default */].$; /*** * @typedef NumberInputFormat * @property {string} locales * @property {string|null} decimalSeparator * @property {string|null} thousandSeparator */ /*** * @extends AElement * @constructor */ function NumberInput() { /*** * * @type {HTMLInputElement|AElement} */ this.$input = NumberInput_$('input', this); // .on('keyup', this.eventHandler.keyup) // .on('paste', this.eventHandler.paste) // .on('change', this.eventHandler.change); this.$input.value = '0'; this._prevValue = 0;//to know whenever the value changed this._value = 0; this._max = Infinity; this._min = -Infinity; this._step = 1; this._format = this._makeDefaultFormat(); this.$upBtn = NumberInput_$('.absol-number-input-button-up-container button', this) .on('mousedown', this.eventHandler.mouseDownBtn.bind(this, 1)); this.$downBtn = NumberInput_$('.absol-number-input-button-down-container button', this) .on('mousedown', this.eventHandler.mouseDownBtn.bind(this, -1)); this.textCtrl = new numberinput_NITextController(this); this.$domSignal = NumberInput_('attachhook').addTo(this); this.$domSignal.once('attached', () => { this.textCtrl.estimateWidthBy(this.$input.value); }); /**** * @name min * @type {number} * @memberOf NumberInput# */ /**** * @name max * @type {number} * @memberOf NumberInput# */ /**** * @name value * @type {number} * @memberOf NumberInput# */ /**** * @name format * @type {NumberInputFormat} * @memberOf NumberInput# */ /**** * @name thousandsSeparator * @type {string|null} * @memberOf NumberInput# */ /**** * @name decimalSeparator * @type {string|null} * @memberOf NumberInput# */ /**** * @name readOnly * @type {boolean} * @memberOf NumberInput# */ /**** * @name disabled * @type {boolean} * @memberOf NumberInput# */ } NumberInput.tag = 'NumberInput'.toLowerCase(); NumberInput.render = function () { return NumberInput_({ class: ['absol-number-input', 'as-must-not-null'], extendEvent: ['change'], child: [ { class: 'absol-number-input-text-container', child: 'input[type="text"]' }, { class: 'absol-number-input-button-up-container', child: { tag: 'button', child: 'span.mdi.mdi-menu-up' } }, { class: 'absol-number-input-button-down-container', child: { tag: 'button', child: 'span.mdi.mdi-menu-down' } } ] }); }; NumberInput.prototype._makeDefaultFormat = function () { var res = { locales: 'vi-VN', maximumFractionDigits: 20, minimumFractionDigits: 0 }; if (window['systemconfig'] && window['systemconfig']['numberFormatLocales']) { res.locales = window['systemconfig']['numberFormatLocales']; } return res; }; /*****17 number********/ NumberInput.prototype.nextStep = function () { var ofs = 0; if (isRealNumber(this.min)) { ofs = this.min; } var idx = nearFloor((this.value - ofs) / this._step, 0.01); this._value = Math.min(this._step * (idx + 1) + ofs, this.max); this.textCtrl.flushValueToText(); }; NumberInput.prototype.prevStep = function () { var ofs = 0; if (isRealNumber(this.min)) { ofs = this.min; } var idx = nearFloor((this.value - ofs) / this._step, 0.01); this._value = Math.max(this._step * (idx - 1) + ofs, this.min); this.textCtrl.flushValueToText(); }; NumberInput.eventHandler = {}; NumberInput.eventHandler.mouseDownBtn = function (dir, event) { if (EventEmitter["b" /* default */].isMouseRight(event)) return; var self = this; var pressing = true; var timeout = -1; var i = 0; this.addClass('as-pressing'); var tick = () => { if (pressing) { if (i === 0 || i >= 4) { if (dir > 0) this.nextStep(); else this.prevStep(); if (i === 0) { this.notifyChanged({ by: 'press_button' }); } else { this.notifyChanged({ by: 'long_press_button' }); } } ++i; self.__pressingUpTimeout__ = setTimeout(tick, 100); } } var finish = (event) => { pressing = false; this.removeClass('as-pressing'); if (timeout >= 0) { clearTimeout(timeout); timeout = -1; } document.removeEventListener('mouseup', finish); document.removeEventListener('mouseleave', finish); if (event.type === 'mouseup') { this.$input.focus(); } this.notifyChanged({ originEvent: event, by: 'press_button' }); this.textCtrl.estimateWidthBy(this.$input.value); } document.addEventListener('mouseup', finish); document.addEventListener('mouseleave', finish); tick(); }; NumberInput.prototype.notifyChanged = function (option) { option = option || {}; var value = this.value; if (this._prevValue !== value) { this.emit('change', Object.assign({ target: this, value: value, previousValue: this._prevValue }, option || {}), this); this._prevValue = value; this._prevBy = option.by; } }; NumberInput.property = {}; NumberInput.property.value = { set: function (value) { if (typeof value === "string") value = parseFloat(value); if (typeof (value) != 'number' || isNaN(value)) value = null; this._value = value; this._prevValue = this.value; this.textCtrl.flushValueToText(); }, get: function () { var value = this._value; if (value === null) { if (this.notNull) { value = 0; } else { return null; } } value = Math.min(this.max, Math.max(value, this.min)); if (this._format.maximumFractionDigits === 0) { return Math.round(value); } if (this._format.maximumFractionDigits < 20) return numberAutoFixed(value, this._format.maximumFractionDigits); return value; } }; NumberInput.property.step = { set: function (value) { if (!isRealNumber(value)) value = 1; if (value === 0) value = 1; value = Math.abs(value); this._step = value; }, get: function () { return this._step; } }; NumberInput.property.max = { set: function (value) { if (!isRealNumber(value)) { value = Infinity; } this._max = value; this._prevValue = this.value; this.textCtrl.flushValueToText(); }, get: function () { return Math.max(this._max, this._min); } }; NumberInput.property.min = { set: function (value) { if (!isRealNumber(value)) { value = -Infinity; } this._min = value; this._prevValue = this.value; this.textCtrl.flushValueToText(); }, get: function () { return Math.min(this._min, this._max); } }; NumberInput.prototype.locales2Format = { 'vi-VN': { decimalSeparator: ',', thousandsSeparator: '.' }, 'en-US': { decimalSeparator: '.', thousandsSeparator: ',' }, 'none': { decimalSeparator: '.', thousandsSeparator: '' } }; NumberInput.property.decimalSeparator = { get: function () { var lF = this.locales2Format[this._format.locales]; if (lF) return lF.decimalSeparator; return '.'; }, set: () => { } }; NumberInput.property.thousandsSeparator = { get: function () { var lF = this.locales2Format[this._format.locales]; if (lF) return lF.thousandsSeparator; return null; }, set: () => { } }; NumberInput.property.disabled = { set: function (value) { this.$input.disabled = !!value; this.$upBtn.disabled = !!value; this.$downBtn.disabled = !!value; if (value) this.addClass('absol-disabled'); else this.removeClass('absol-disabled'); }, get: function () { return this.$input.disabled; } }; NumberInput.property.readOnly = { set: function (value) { this.$input.readOnly = !!value; if (value) this.addClass('as-read-only'); else this.removeClass('as-read-only'); }, get: function () { return this.$input.readOnly; } }; NumberInput.property.format = { /*** * @this NumberInput * @param value * @this NumberInput */ set: function (value) { if (value in this.locales2Format) { this._format = { locales: value, maximumFractionDigits: this._format.maximumFractionDigits, minimumFractionDigits: this._format.minimumFractionDigits, }; } else if (!value) { this._format = this._makeDefaultFormat(); } else { this._format = Object.assign(this._makeDefaultFormat(), value); } // console.log(this._format) this.textCtrl.flushValueToText(); }, get: function () { return this._format; } }; NumberInput.property.floatFixed = { set: function (value) { if (isNaturalNumber(value) && value >= 0 && value < 20) { this._format.maximumFractionDigits = Math.floor(value); this._format.minimumFractionDigits = Math.floor(value); } else { this._format.maximumFractionDigits = 20; delete this._format.minimumFractionDigits; } this.textCtrl.flushValueToText(); }, get: function () { if (this._format.maximumFractionDigits === 20) return null; return this._format.maximumFractionDigits; } }; NumberInput.property.notNull = { set: function (value) { if (value) { this.addClass('as-must-not-null'); } else { this.removeClass('as-must-not-null'); } this._prevValue = this.value; this.textCtrl.flushValueToText(); }, get: function () { return this.hasClass('as-must-not-null'); } }; ACore["d" /* default */].install('NumberInput'.toLowerCase(), NumberInput); /* harmony default export */ var numberinput_NumberInput = (NumberInput); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/NumberSpanInput.js var NumberSpanInput_ = ACore["d" /* default */]._; var NumberSpanInput_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function NumberSpanInput() { this.ev_keydown = this.ev_keydown.bind(this); this.on('keydown', this.ev_keydown, true); this.readOnly = false; this.value = 0; this.on('paste', function (event) { event.preventDefault(); }) } NumberSpanInput.tag = 'NumberSpanInput'.toLowerCase(); NumberSpanInput.render = function () { return NumberSpanInput_({ tag: 'span', child: { text: '' } }); }; NumberSpanInput.prototype.selectAll = function(){ var sel; if (window.getSelection) { sel = window.getSelection(); sel.removeAllRanges(); var range = document.createRange(); range.selectNode(this.childNodes[this.childNodes.length - 1]); sel.addRange(range); } else { console.error("TimePicker: Not support!") } }; NumberSpanInput.prototype.selectEnd = function(){ var sel; if (window.getSelection) { sel = window.getSelection(); sel.removeAllRanges(); this._autoAddZero(); var length = this.firstChild.data.length; var range = document.createRange(); range.setStart(this.firstChild, length); range.setEnd(this.firstChild, length); sel.addRange(range); } else { console.error("TimePicker: Not support!") } }; NumberSpanInput.prototype.selectNone = function(){ var sel; if (document.activeElement === this){ sel = window.getSelection(); sel.removeAllRanges(); } } NumberSpanInput.prototype._autoAddZero = function (){ if (!this.firstChild){ this.addChild(NumberSpanInput_({text:'0'})); } } /*** * * @param {KeyboardEvent} event */ NumberSpanInput.prototype.ev_keydown = function (event) { if (event.key && event.key.length == 1 && !event.ctrlKey && !event.altKey) { if (event.key.match(/[0-9]/)) { } else { event.preventDefault(); } } else if (event.key == 'Enter'){ event.preventDefault(); } }; NumberSpanInput.property = {}; NumberSpanInput.property.readOnly = { set: function (value) { this.contentEditable = !value; }, get: function () { return this.contentEditable === false|| this.contentEditable === 'false'; } }; /*** * * @type {NumberSpanInput} */ NumberSpanInput.property.value = { set: function (value) { this._autoAddZero(); this.firstChild.data = value + ''; }, get: function () { return (this.firstChild && this.firstChild.data)||''; } } ACore["d" /* default */].install(NumberSpanInput); /* harmony default export */ var js_NumberSpanInput = (NumberSpanInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/onscreenwindow.css var onscreenwindow = __webpack_require__(154); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/WindowBox.js /** * @typedef WindowBoxAction * @property icon * @property name * */ /*** * @extends AElement * @constructor */ function WindowBox() { this.$header = Object(ACore["a" /* $ */])('.as-window-box-header', this); /*** * * @type {WindowBoxAction[]} * @private */ this._windowActions = []; this.$windowActionButtonCtn = Object(ACore["a" /* $ */])('.as-window-box-header-button-ctn', this); this._windowIcon = null; this.$windowIconCtn = Object(ACore["a" /* $ */])('.as-window-box-header-icon-ctn', this); /** * * @type {Text} */ this.$windowTitleText = Object(ACore["a" /* $ */])('.as-window-box-header-title', this).firstChild; this.$body = Object(ACore["a" /* $ */])('.as-window-box-body', this); /*** * @type {WindowBoxAction[]} * @name windowActions */ } WindowBox.tag = 'WindowBox'.toLowerCase(); WindowBox.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-window-box', extendEvent: ['action'], child: [ { class: 'as-window-box-header', child: [ { class: 'as-window-box-header-icon-ctn' }, { class: 'as-window-box-header-title', child: { text: '' } }, { class: "as-window-box-header-button-ctn" } ] }, { class: 'as-window-box-body' } ] }); }; ['addChild', 'addChildBefore', 'addChildAfter', 'clearChild', 'findChildBefore', 'findChildAfter'].forEach(function (key) { WindowBox.prototype[key] = function () { return this.$body[key].apply(this.$body, arguments); }; }); WindowBox.property = {}; WindowBox.property.windowTitle = { set: function (value) { this.$windowTitleText.data = (value || '') + ''; }, get: function () { return this.$windowTitleText.data; }, enumerable: true }; WindowBox.property.windowIcon = { /*** * @this WindowBox * @param value */ set: function (value) { value = value || null; this.$windowIconCtn.clearChild(); if (value) { this.$windowIconCtn.addChild(Object(ACore["c" /* _ */])(value)); } this._windowIcon = value; }, get: function () { return this._windowIcon; }, enumerable: true }; WindowBox.property.windowActions = { set: function (actions) { var self = this; this._windowActions = actions || []; this.$windowActionButtonCtn.clearChild(); var buttons = this._windowActions.map(function (action) { return Object(ACore["c" /* _ */])({ tag: 'button', class: action.class || [], child: action.icon, on: { click: function (event) { var eventData = { type: 'action', target: self, action: action, originalEvent: event }; OOP["a" /* default */].drillProperty(eventData, eventData, 'actionData', 'action'); self.emit('action', eventData, self); } } }); }); this.$windowActionButtonCtn.addChild(buttons); }, get: function () { return this._windowActions; } }; ACore["d" /* default */].install(WindowBox); /* harmony default export */ var js_WindowBox = (WindowBox); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/OnsScreenWindow.js var OnsScreenWindow_ = ACore["d" /* default */]._; var OnsScreenWindow_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function OnScreenWindow() { var self = this; this._lastSize = { width: 0, height: 0 } /*** * * @type {WindowBox} */ this.$windowBox = OnsScreenWindow_$(js_WindowBox.tag, this); OOP["a" /* default */].drillProperty(this, this.$windowBox, 'windowTitle'); OOP["a" /* default */].drillProperty(this, this.$windowBox, 'windowActions'); OOP["a" /* default */].drillProperty(this, this.$windowBox, 'windowIcon'); this.$windowBox.on('action', function (event){ self.emit('action', event, self); }); this.$header = OnsScreenWindow_({ tag: js_Hanger.tag, elt: this.$windowBox.$header }); this.$header.on('dragstart', this.eventHandler.dragStart.bind(this, this.$header, 'move')); // this.$bottomResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom', this); this.$bottomResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$bottomResizer, 'bottom')); // this.$rightResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-right', this); this.$rightResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$rightResizer, 'right')); // this.$topResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-top', this); this.$topResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$topResizer, 'top')); this.$leftResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-left', this); this.$leftResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$leftResizer, 'left')); this.$bottomRightResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-right', this); this.$bottomRightResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$bottomRightResizer, 'bottomRight')); // this.$bottomLeftResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-left', this); this.$bottomLeftResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$bottomLeftResizer, 'bottomLeft')); // this.$topLeftResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-left', this) this.$topLeftResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$topLeftResizer, 'topLeft')); this.$topRightResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-right', this); this.$topRightResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$topRightResizer, 'topRight')); this.$attachhook = OnsScreenWindow_('attachhook').addTo(this); this.$attachhook.requestUpdateSize = this.relocation.bind(this); this.$attachhook.on('error', function () { Dom["b" /* default */].addToResizeSystem(this); }); } OnScreenWindow.tag = 'OnScreenWindow'.toLowerCase(); OnScreenWindow.render = function () { return OnsScreenWindow_({ extendEvent: ['sizechange', 'drag', 'relocation', 'action'], class: 'absol-onscreen-window', child: [ { tag: js_WindowBox.tag, class: 'as-window-box', }, 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-top', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-left', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-right', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-right', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-left', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-left', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-right' ] }); }; OnScreenWindow.prototype.maybeSizeChange = function () { var bound = this.getBoundingClientRect(); if (this._lastSize.width !== bound.width || this._lastSize.height !== bound.height) { this._lastSize = bound; window.dispatchEvent(new Event('resize')); this.emit('sizechange', { size: bound, target: this, type: 'sizechange' }, this); } }; OnScreenWindow.prototype.moveFators = { move: { x: 1, y: 1, /*** * @this OnScreenWindow * @param event */ canMove: function (event) { return true; }, cursor: 'move' }, top: { y: 1, height: -1 }, bottom: { height: 1, cursor: 's-resize' }, bottomRight: { height: 1, width: 1, cursor: 'se-resize' }, bottomLeft: { height: 1, width: -1, x: 1, cursor: 'sw-resize' }, topLeft: { height: -1, width: -1, x: 1, y: 1, cursor: 'nw-resize' }, topRight: { height: -1, width: 1, y: 1, cursor: 'ne-resize' }, right: { width: 1, cursor: 'e-resize' }, left: { x: 1, width: -1, cursor: 'w-resize' } }; /*** * * @type {{}} * @memberOf OnScreenWindow# */ OnScreenWindow.eventHandler = {}; /*** * @this OnScreenWindow * @param {Hanger} elt * @param fN * @param event */ OnScreenWindow.eventHandler.dragStart = function (elt, fN, event) { var factor = this.moveFators[fN]; if (factor.canMove && !factor.canMove.call(this, event)) return; this.movingData = { factor: factor, screenSize: Object(Dom["d" /* getScreenSize */])(), modal: OnsScreenWindow_('.absol-onscreen-window-moving-modal') .addStyle('cursor', factor.cursor).addTo(document.body), elt: elt, bound: this.getBoundingClientRect() }; elt.on('drag', this.eventHandler.drag) .on('dragend', this.eventHandler.dragEnd); }; /*** * @this OnScreenWindow * @param event */ OnScreenWindow.eventHandler.drag = function (event) { var movingData = this.movingData; var factor = movingData.factor; var bound = movingData.bound; var screenSize = movingData.screenSize; var dv = event.currentPoint.sub(event.startingPoint); var x, y, width, height; if (factor.x) { x = dv.x * factor.x + bound.left; x = Math.min(x, screenSize.width - bound.width); x = Math.max(0, x); this.addStyle('left', x + 'px'); } if (factor.y) { y = dv.y * factor.y + bound.top; y = Math.min(y, screenSize.height - bound.height); y = Math.max(0, y); this.addStyle('top', y + 'px'); } if (factor.width) { width = dv.x * factor.width + bound.width; this.addStyle('width', width + 'px'); } if (factor.height) { height = dv.y * factor.height + bound.height; this.addStyle('height', height + 'px'); } this.emit('relocation', { type: 'relocation', target: this }, this); this.maybeSizeChange(); }; /*** * @this OnScreenWindow * @param event */ OnScreenWindow.eventHandler.dragEnd = function (event) { var movingData = this.movingData; var elt = movingData.elt; elt.off('drag', this.eventHandler.drag) .off('dragend', this.eventHandler.dragEnd); setTimeout(function () { movingData.modal.remove(); }, 50); this.movingData = null; }; ['addChild', 'addChildBefore', 'addChildAfter', 'clearChild', 'findChildBefore', 'findChildAfter'].forEach(function (key) { OnScreenWindow.prototype[key] = function () { return this.$windowBox[key].apply(this.$windowBox, arguments); }; }); OnScreenWindow.property = {}; OnScreenWindow.prototype.relocation = function () { var bound = this.getBoundingClientRect(); var screenSize = Dom["b" /* default */].getScreenSize(); var isRelocated = false; if (bound.bottom >= screenSize.height) { this.addStyle('top', Math.max(0, screenSize.height - bound.height) + 'px'); isRelocated = true; } if (bound.right >= screenSize.width) { this.addStyle('left', Math.max(0, screenSize.width - bound.width) + 'px'); isRelocated = true; } if (isRelocated) { this.emit('relocation', { type: 'relocation', target: this }, this) } }; ACore["d" /* default */].install(OnScreenWindow); /* harmony default export */ var OnsScreenWindow = (OnScreenWindow); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/pageselector.css var pageselector = __webpack_require__(156); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/PageSelector.js var PageSelector_ = ACore["d" /* default */]._; var PageSelector_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function PageSelector() { this.$pageCount = PageSelector_$('.absol-page-count', this); this.$pageInput = PageSelector_$('.absol-page-number-input input', this); this.$pageInput.on('keyup', this.eventHandler.pressEnterKey); this.$prevBtn = PageSelector_$('li.page-previous', this); this.$nextBtn = PageSelector_$('li.page-next', this); this.$firstBtn = PageSelector_$('li.page-first', this); this.$lastBtn = PageSelector_$('li.page-last', this); this.$nextBtn.on('click', this.eventHandler.clickNext); this.$prevBtn.on('click', this.eventHandler.clickPrev); this.$firstBtn.on('click', this.eventHandler.clickFirst); this.$lastBtn.on('click', this.eventHandler.clickLast); this.$buttonContainer = PageSelector_$('.absol-page-number-buttons', this); this._buttons = []; this._pageOffset = 1; this._selectedIndex = 1; this._pageCount = 1; this._pageRange = 1; this.$pageInput.value = this._selectedIndex; } PageSelector.tag = 'PageSelector'.toLowerCase(); PageSelector.render = function () { return PageSelector_({ class: ['absol-page-selector'], extendEvent: ['change'], child: [ { class: 'absol-page-number-input', child: [{ tag: 'label', child: { text: "Page" } }, { tag: 'input', attr: { type: 'text' } }, { tag: 'span', child: { text: '/ ' } }, { tag: 'span', class: 'absol-page-count', child: { text: '1' } } ] }, { tag: 'ul', class: 'absol-page-number-buttons', child: [ { tag: 'li', class: "page-first", attr: { title: 'First' }, child: 'a.mdi.mdi-chevron-double-left' }, { tag: 'li', attr: { title: 'Previous' }, class: 'page-previous', child: 'a.mdi.mdi-chevron-left' }, { tag: 'li', attr: { title: 'Next' }, class: 'page-next', child: 'a.mdi.mdi-chevron-right' }, { tag: 'li', attr: { title: 'Last' }, class: 'page-last', child: 'a.mdi.mdi-chevron-double-right' } ] } ] }); } PageSelector.eventHandler = {}; PageSelector.eventHandler.pressEnterKey = function (event) { if (event.keyCode != 13) return; var index = parseInt(this.$pageInput.value.trim(), 10); if ((index < 1) || (index > this._pageCount)) { this.$pageInput.value = this._selectedIndex; return; } this.selectPage(index, true); } PageSelector.eventHandler.clickLast = function (event) { this.selectPage(this._pageCount, true); }; PageSelector.eventHandler.clickFirst = function (event) { this.selectPage(1, true); }; PageSelector.eventHandler.clickNext = function (event) { if (this._selectedIndex == this._pageCount) return; this.selectPage(this._selectedIndex + 1, true); }; PageSelector.eventHandler.clickPrev = function (event) { if (this._selectedIndex == 1) return; this.selectPage(this._selectedIndex - 1, true); } PageSelector.eventHandler.clickIndex = function (index, event) { this.selectPage(index + this._pageOffset, true); }; PageSelector.prototype._createButton = function (index) { var button = PageSelector_({ tag: 'li', class: 'absol-page-number', child: { tag: 'a', attr: { 'data-index-text': index + 1 }, }, on: { click: PageSelector.eventHandler.clickIndex.bind(this, index) } }); this.$buttonContainer.addChildBefore(button, this.$nextBtn); return button; }; PageSelector.prototype.setPageRange = function (pageCount) { this._pageRange = pageCount; while (this._buttons.length < pageCount) { this._buttons.push(this._createButton(this._buttons.length )); } while (this._buttons.length > pageCount) { this._buttons.pop().remove(); } }; PageSelector.prototype.setStartPage = function (index) { this._buttons.forEach(function (e, i) { e.firstChild.attr('data-index-text', i + index + ''); }); this._pageOffset = index; }; PageSelector.prototype.selectPage = function (index, userActive) { if (index == this._selectedIndex) this.setStartPage(index - parseInt(this._pageRange / 2)); if (index >= this._pageOffset + this._pageRange) this.setStartPage(index - parseInt(this._pageRange / 2)); if (index > this._selectedIndex) { if (index == (this._pageOffset + this._pageRange - 1)) this.setStartPage(index - parseInt(this._pageRange / 2)); } if (index < this._selectedIndex) { if (index == this._pageOffset) this.setStartPage(index - parseInt(this._pageRange / 2)); } if (index > (this._pageCount - parseInt(this._pageRange / 2))) this.setStartPage(this._pageCount - this._pageRange + 1); if (index <= (parseInt(this._pageRange / 2))) this.setStartPage(1); var pageOffset = this._pageOffset; this._buttons.forEach(function (e, i) { if (i + pageOffset == index) { e.addClass('active'); } else { e.removeClass('active'); } }); if (this._selectedIndex != index) { this._selectedIndex = index; this.$pageInput.value = index; this.emit('change', { target: this, selectedIndex: index, userActive: !!userActive }, this); } }; PageSelector.prototype.getSelectedPage = function () { return this._selectedIndex; } PageSelector.prototype.setPageCount = function (count) { this._pageCount = count; this.$pageCount.firstChild.data = '' + count; this.attr('data-page-count', count); }; PageSelector.property = {}; PageSelector.property.selectedIndex = { set: function (value) { this.selectPage(value, false); }, get: function () { return this._selectedIndex; } }; PageSelector.property.pageCount = { set: function (value) { this.setPageCount(value); }, get: function () { return this._pageCount; } }; PageSelector.property.pageOffset = { set: function (value) { this.setStartPage(value); }, get: function () { return this._pageOffset; } }; PageSelector.property.pageRange = { set: function (value) { this.setPageRange(value); }, get: function () { return this._pageRange; } } PageSelector.prototype.init = function (props) { props = props || {}; props.pageOffset = props.pageOffset || 1; props.pageRange = props.pageRange || 5; props.pageCount = props.pageCount || 15; props.selectedIndex = typeof (props.selectedIndex) == "number" ? props.selectedIndex : props.pageOffset; if (props.pageCount < props.pageRange) props.pageRange = props.pageCount; this.setPageCount(props.pageCount); this.setPageRange(props.pageRange); this.setStartPage(props.pageOffset); this.selectPage(props.selectedIndex); props = Object.assign({}, props); delete props.pageOffset; delete props.pageRange; delete props.pageCount; delete props.selectedIndex; }; ACore["d" /* default */].install(PageSelector); /* harmony default export */ var js_PageSelector = (PageSelector); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/preinput.css var preinput = __webpack_require__(158); // CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/VarScope.js function VarScope(parent) { this.parent = parent; this.data = {}; } VarScope.prototype.revoke = function (name) { delete this.data[name]; return this; }; VarScope.prototype.isDeclared = function (name) { return (name in this.data); }; /*** * * @param name * @param initValue * @param {boolean=} force * @return {VarScope} */ VarScope.prototype.declare = function (name, initValue, force) { if ((name in this.data) && !force) throw new Error(name + ' is already delared in this scope!'); this.data[name] = initValue; return this; }; VarScope.prototype.get = function (name) { var scope = this.findScope(name); if (!scope) throw new Error(name + ' is not declared!'); return scope.data[name]; }; VarScope.prototype.set = function (name, value) { var scope = this.findScope(name); if (!scope) throw new Error(name + ' is not declared!'); scope.data[name] = value; }; VarScope.prototype.findScope = function (name) { var currentScope = this; while (currentScope) { if (name in currentScope.data) break; currentScope = currentScope.parent; } return currentScope; }; /* harmony default export */ var AppPattern_VarScope = (VarScope); // EXTERNAL MODULE: ./node_modules/absol/src/JSX/attribute.js var attribute = __webpack_require__(10); // CONCATENATED MODULE: ./node_modules/absol/src/Network/XLoader.js var XLoader = {}; function loadScript(url, onComplete, onError) { return new Promise(function (resolve, reject) { var script = document.createElement("script"); script.type = "text/javascript"; if (script.readyState) { //IE script.onreadystatechange = function () { if (script.readyState === "loaded" || script.readyState === "complete") { script.onreadystatechange = null; onComplete && onComplete(); resolve(); } }; } else { //Others script.onload = function () { script.onload = null; script.onerror = null; onComplete && onComplete(); resolve(); }; script.onerror = function () { script.onerror = null; script.onload = null; script.remove(); onError && onError(); reject(); } } script.src = url; document.getElementsByTagName("head")[0].appendChild(script); }); } XLoader.loadScript = loadScript; function isImageURLAllowCrossOrigin(url) { return new Promise((rs, rj) => { url = url ||''; if (url.startsWith('data:') || url.startsWith('blob:')) { rs(true); return; } var img = new Image(); // img.crossOrigin = "anonymous"; img.onload = function () { var canvas = document.createElement('canvas'); canvas.width = 10; canvas.height = 10; var ctx = canvas.getContext("2d"); ctx.drawImage(this, 0, 0); try { ctx.getImageData(0, 0, 10, 10); rs(true); } catch (err) { rs(false); } } img.onerror = function (event) { rj(event.error || event); } img.src = url; }); } var blobCache = {}; /*** * * @param {string} url * @param {boolean=}noCache * @return {*} */ function loadToBlobURL(url, noCache) { if (blobCache[url]) return blobCache[url]; blobCache[url] = fetch(url).then(res=> res.blob()).then(blob=> URL.createObjectURL(blob)); return blobCache[url]; } /* harmony default export */ var Network_XLoader = (XLoader); // CONCATENATED MODULE: ./node_modules/absol/src/Print/PrintSerialHandlers.js var PrintSerialHandlers_ = Dom["b" /* default */].ShareInstance._; var PrintSerialHandlers_$ = Dom["b" /* default */].ShareInstance.$; var PrintSerialHandlers_$$ = Dom["b" /* default */].ShareInstance.$$; /*** * * @param {AElement|HTMLElement} elt * @param {string=} ps * @return {*} */ function getComputedStyleCache(elt, ps) { ps = ps || ''; var key = '__computedStyleCache__' + ps; if (elt[key]) return elt[key]; elt[key] = ps ? getComputedStyle(elt, ps) : getComputedStyle(elt); return elt[key]; } /*** * * @param {AElement|HTMLElement} elt * @param {string} pName * @return {string} */ function getComputedStyleValueCache(elt, pName) { return getComputedStyleCache(elt).getPropertyValue(pName); } function computePrintAttr(elt) { var style = getComputedStyleCache(elt); var fontSize = elt.getFontSize(); var lineHeight = style.getPropertyValue('line-height'); if (lineHeight === 'normal') lineHeight = 1.2; else lineHeight = parseFloat(lineHeight.replace('px', '')) / fontSize; if (!isNaN(lineHeight)) lineHeight = 1.2; var fontWeight = style.getPropertyValue('font-weight'); var fontStyle = fontWeight === '400' ? 'normal' : 'bold'; var dirs = ['top', 'right', 'bottom', 'left']; var paddingStyle = dirs.map(dir => Object(attribute["b" /* parseMeasureValue */])(style.getPropertyValue('padding-' + dir))); var borderWidthStyle = dirs.map(dir => Object(attribute["b" /* parseMeasureValue */])(style.getPropertyValue('border-' + dir + '-width'))); var contentBound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); contentBound.x += paddingStyle[3].value + borderWidthStyle[3].value; contentBound.y += paddingStyle[0].value + borderWidthStyle[0].value; contentBound.width += paddingStyle[1].value + borderWidthStyle[1].value + paddingStyle[3].value + borderWidthStyle[3].value; contentBound.height += paddingStyle[2].value + borderWidthStyle[2].value + paddingStyle[0].value + borderWidthStyle[0].value; return { contentBound: contentBound, whiteSpace: style.getPropertyValue('white-space'), style: { color: style.getPropertyValue('color'), fontFamily: style.getPropertyValue('font-family'), fontStyle: fontStyle, lineHeight: lineHeight, fontSize: fontSize, align: style.getPropertyValue('text-align') } } } /*** * * @type {PSHandler[]} */ var PrintSerialHandlers = []; PrintSerialHandlers.push({ id: 'TextNode', match: (elt) => elt.nodeType === Node.TEXT_NODE, exec: (printer, text, scope, stack, accept) => { var O = printer.O; var elt = text.parentElement; var bound = Math_Rectangle.fromClientRect(Object(Dom["e" /* getTextNodeBound */])(text)); if (bound.width === 0) return; var printAttr = computePrintAttr(elt); var txt = text.data; var y = -Infinity; var c; var range; var parts = []; var cPart; var j; var delta = printAttr.style.lineHeight * printAttr.style.fontSize / 3; var rect; var i = 0; while (i < txt.length) { c = txt[i]; if (!c.match(/[\s\n]/)) { j = i + 1; while (j < txt.length) { c = txt[j]; if (c.match(/[\s\n]/)) { break; } else { ++j; } } range = document.createRange(); range.setStart(text, i); range.setEnd(text, j); rect = Math_Rectangle.fromClientRect(range.getBoundingClientRect()); if (Math.abs(rect.y - y) < delta) { cPart.end = j; cPart.rect = cPart.rect.merge(rect); } else { cPart = { start: i, end: j, rect: rect }; y = rect.y; parts.push(cPart); } i = j; } else { ++i; } } parts.forEach(part => { rect = part.rect; rect.x -= O.x; rect.y -= O.y; rect.width += printAttr.style.fontSize * 1000; var lineTxt = txt.substring(part.start, part.end); if (printAttr.whiteSpace === 'normal') { lineTxt = lineTxt.replace(/[\s\n]+/g, ' '); } delete printAttr.style.align;//text-node bound printer.text(lineTxt, rect, printAttr.style); }); } }); PrintSerialHandlers.push({ id: 'Border', match: (elt, scope, stack) => { if (scope.isDeclared('borderStyle')) return false; var style = getComputedStyleCache(elt); var borderColor = style.getPropertyValue('border-color'); var borderStyle = style.getPropertyValue('border-style'); var borderWidth = style.getPropertyValue('border-width'); var borderRadius = style.getPropertyValue('border-radius'); if (borderStyle === 'none' || borderWidth === '0px') return false; scope.declare('borderStyle', { width: parseFloat(borderWidth.replace('px', '')), radius: Object(attribute["b" /* parseMeasureValue */])(borderRadius), color: borderColor, }) return true; }, exec: (printer, elt, scope, stack, accept) => { var borderStyle = scope.get('borderStyle'); var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); var rect = bound.clone(); var strokeWidth = borderStyle.width; if (elt.tagName === 'TD' || elt.tagName === 'TH') { rect.x -= printer.O.x; rect.y -= printer.O.y; } else { rect.x -= printer.O.x - strokeWidth / 2; rect.y -= printer.O.y - strokeWidth / 2; rect.width -= strokeWidth; rect.height -= strokeWidth; } var radius = borderStyle.radius; var rounded; if (radius) { switch (radius.unit) { case '%': rounded = [radius.value * rect.width / 100, radius.value * rect.height / 100]; break; case 'px': rounded = radius.value; break; } } printer.rect(rect, { stroke: borderStyle.color, rounded: rounded, strokeWidth: strokeWidth }); return true; } }); PrintSerialHandlers.push({ id: 'BackgroundImage', match: (elt, scope, stack) => { return elt.getComputedStyleValue('background-image') !== 'none'; }, exec: (printer, elt, scope, stack, accept) => { var style = getComputedStyleCache(elt); var backgroundSize = style.getPropertyValue('background-size'); var url = style.getPropertyValue('background-image').trim() .replace('url("', '') .replace('")', ''); var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); rect.x -= printer.O.x; rect.y -= printer.O.y; var borderRadius = ['top-left', 'top-right', 'bottom-right', 'bottom-left'].map(key => Object(attribute["b" /* parseMeasureValue */])(style.getPropertyValue('border-' + key + '-radius'))); var image = isImageURLAllowCrossOrigin(url).then(result => { /*** * * @type {HTMLCanvasElement} */ var canvas = document.createElement('canvas'); var width = rect.width; var height = rect.height; canvas.width = width; canvas.height = height; var image = new Image(); image.crossOrigin = 'anonymous'; image.src = result ? url : 'https://absol.cf/crossdownload.php?file=' + encodeURIComponent(url); var ctx = canvas.getContext('2d'); var isRect = borderRadius.every(x => x.value === 0); var x, y, r; var eclipses = []; var points = []; if (!isRect) { r = borderRadius[0]; x = r.unit === '%' ? r.value / 100 * width : r.value; y = 0; points.push([x, y]); r = borderRadius[1]; x = r.unit === '%' ? (1 - r.value / 100) * width : width - r.value; points.push([x, y]); if (r.value > 0) { y = r.unit === '%' ? r.value / 100 * height : r.value; eclipses.push([x, y, width - x, y, 0, -Math.PI / 2, 0]) x = width; points.push([x, y]); } else { x = width; } r = borderRadius[2]; y = r.unit === '%' ? (1 - r.value / 100) * height : height - r.value; points.push([x, y]); if (r.value > 0) { x = r.unit === '%' ? (1 - r.value / 100) * width : width - r.value; eclipses.push([x, y, width - x, height - y, 0, 0, Math.PI / 2]); y = height; points.push([x, y]); } else { y = height; } r = borderRadius[3]; x = r.unit === '%' ? r.value / 100 * width : r.value; points.push([x, y]); if (r.value > 0) { y = r.unit === '%' ? (1 - r.value / 100) * height : height - r.value; eclipses.push([x, y, x, height - y, 0, Math.PI / 2, Math.PI]); x = 0; points.push([x, y]); } else { x = 0; } r = borderRadius[0]; y = r.unit === '%' ? r.value / 100 * height : r.value; points.push([x, y]); if (r.value > 0) { x = r.unit === '%' ? r.value / 100 * width : r.value; eclipses.push([x, y, x, y, 0, Math.PI, Math.PI * 3 / 2]); } ctx.beginPath(); points.forEach((p, i) => { if (i === 0) ctx.moveTo(p[0], p[1]); else ctx.lineTo(p[0], p[1]); }); ctx.closePath(); ctx.fillStyle = 'red'; ctx.fill(); eclipses.forEach(e => { ctx.beginPath(); ctx.ellipse(e[0], e[1], e[2], e[3], e[4], e[5], e[6]); ctx.fill(); }); ctx.globalCompositeOperation = 'source-in'; } return new Promise(rs => { image.onload = function () { var scale; var nW; var nH;//todo: handle more switch (backgroundSize) { case 'cover': scale = Math.max(width / image.naturalWidth, height / image.height); nW = image.naturalWidth * scale; nH = image.naturalHeight * scale ctx.drawImage(image, 0, 0, nW, nH); break; case 'auto': default: ctx.drawImage(image, 0, 0); } rs(canvas); }; image.onerror = function () { console.error('can not load ', image.src) rs(null); } }) }).catch(err => { console.error(err); }); printer.image(image, rect); return true; } }); PrintSerialHandlers.push({ id: 'BreakInside', match: (elt, scope, stack) => { return getComputedStyleValueCache(elt, 'break-inside') === 'avoid'; }, exec: (printer, elt, scope, stack, accept) => { var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); rect.x -= printer.O.x; rect.y -= printer.O.y; printer.rect(rect, {}); return true; } }); PrintSerialHandlers.push({ id: 'MDI_FA', match: (elt, scope, stack) => elt.classList && (elt.classList.contains('mdi') || elt.classList.contains('fab') || elt.classList.contains('far') || elt.classList.contains('fas') || elt.classList.contains('material-icons')), exec: (printer, elt, scope, stack, accept) => { var style = elt.classList.contains('material-icons') ? getComputedStyleCache(elt) : getComputedStyleCache(elt, '::before'); var content = elt.classList.contains('material-icons') ? elt.innerHTML : style.getPropertyValue('content'); content = content.replace('"', ''); var font = style.getPropertyValue('font'); var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); if (rect.width * rect.height === 0) return; var canvas = document.createElement('canvas'); canvas.width = rect.width; canvas.height = rect.height; var ctx = canvas.getContext('2d'); ctx.font = font; ctx.textBaseline = "top"; rect.x -= printer.O.x; rect.y -= printer.O.y; ctx.fillStyle = style.getPropertyValue('color'); ctx.fillText(content, 0, 0); printer.image(canvas, rect); } }); PrintSerialHandlers.push({ id: 'Img', match: elt => elt.tagName && elt.tagName.toLowerCase() === 'img' && elt.src && elt.naturalWidth, exec: (printer, elt, scope, stack, accept) => { var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); if (bound.width === 0) return; var rect = bound.clone(); rect.x -= printer.O.x; rect.y -= printer.O.y; printer.image(elt, rect); } }); PrintSerialHandlers.push({ id: 'Canvas', match: elt => elt.tagName && elt.tagName.toLowerCase() === 'canvas', exec: (printer, elt, scope, stack, accept) => { var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); if (bound.width === 0) return; var rect = bound.clone(); rect.x -= printer.O.x; rect.y -= printer.O.y; printer.image(elt, rect); } }); PrintSerialHandlers.push({ id: 'SVG', match: elt => elt.tagName && elt.tagName.toLowerCase() === 'svg', exec: (printer, elt, scope, stack, accept) => { var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); if (bound.width === 0) return; var rect = bound.clone(); rect.x -= printer.O.x; rect.y -= printer.O.y; var res = HTML5_Svg.svgToCanvas(elt.__origin__).catch(err => { console.error(err); }); res.elt = elt; printer.image(res, rect); } }); PrintSerialHandlers.push({ id: 'TextInput', match: (elt, scope, stack) => { return elt.tagName === 'INPUT' && (elt.attr('type') === 'text' || elt.attr('type') === 'number' || !elt.attr('type')); }, exec: (printer, elt, scope, stack, accept) => { var O = printer.O; var style = getComputedStyleCache(elt); var paddingLeft = Object(attribute["b" /* parseMeasureValue */])(style.getPropertyValue('padding-left')); var paddingTop = Object(attribute["b" /* parseMeasureValue */])(style.getPropertyValue('padding-top')); var paddingBottom = Object(attribute["b" /* parseMeasureValue */])(style.getPropertyValue('padding-bottom')); var borderLeftWidth = Object(attribute["b" /* parseMeasureValue */])(style.getPropertyValue('border-left-width')); var borderTopWidth = Object(attribute["b" /* parseMeasureValue */])(style.getPropertyValue('border-top-width')); var borderBottomWidth = Object(attribute["b" /* parseMeasureValue */])(style.getPropertyValue('border-top-width')); var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); var fontSize = elt.getFontSize(); var lineHeight = style.getPropertyValue('line-height'); if (lineHeight === 'normal') lineHeight = 1.2; else lineHeight = parseFloat(lineHeight.replace('px', '')) / fontSize; if (!isNaN(lineHeight)) lineHeight = 1.2; var fontWeight = style.getPropertyValue('font-weight'); var fontStyle = fontWeight === '400' ? 'normal' : 'bold'; rect.width = 700; rect.x += borderLeftWidth.value + paddingLeft.value - O.x; rect.height -= borderTopWidth.value + borderBottomWidth.value + paddingTop.value + paddingBottom.value; rect.y += borderTopWidth.value + paddingTop.value - O.y; var centerY = rect.centerPoint().y; rect.y = centerY - fontSize * lineHeight / 2; rect.height = fontSize * lineHeight; printer.text(elt.value, rect, { fontFamily: style.getPropertyValue('font-family'), fontStyle: fontStyle, fontSize: fontSize, lineHeight: lineHeight }); } }); PrintSerialHandlers.push({ id: 'BreakPage', match: elt => elt.hasClass && elt.hasClass('as-page-break'), exec: (printer, elt, scope, stack, accept) => { var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); rect.x -= printer.O.x; rect.y -= printer.O.y; printer.pageBreak(rect.A()); } }); PrintSerialHandlers.push({ id: '*', match: () => true, exec: (printer, elt, scope, stack, accept) => { if (elt.getComputedStyleValue('display') === 'none') return; if (elt.childNodes) { Array.prototype.forEach.call(elt.childNodes, child => accept(child)); } } }) /* harmony default export */ var Print_PrintSerialHandlers = (PrintSerialHandlers); // CONCATENATED MODULE: ./node_modules/absol/src/Print/PrintSerializer.js /*** * @typedef {Object} PSHandler * @property {string} id * @property {function(elt:AElement, scope: VarScope, stack:Array<AElement>):boolean} match * @property {function(printer: PaperPrinter,elt:AElement|Text, scope: VarScope, stack:Array<{elt: AElement|Text, scope:VarScope}>, accept: function():void):(boolean|void)} exec - return true if run other handle * */ /*** * * @constructor */ function PrintSerializer() { /*** * @type {Array<PSHandler>} */ this.handlers = this.handlers.slice(); } PrintSerializer.prototype.handlers = Print_PrintSerialHandlers; /*** * * @param {PaperPrinter} printer * @param {AElement|AElementNS|Text} elt * @param {VarScope} scope * @param {Array<{elt: AElement|Text, scope:VarScope}>} stack */ PrintSerializer.prototype.accept = function (printer, elt, scope, stack) { if (elt.nodeType === Node.ELEMENT_NODE) Dom["b" /* default */].ShareInstance.$(elt); var handler; var matched, cont; for (var i = 0; (!matched || cont) && i < this.handlers.length; ++i) { handler = this.handlers[i]; matched = handler.match(elt, scope, stack); if (matched) { cont = handler.exec(printer, elt, scope, stack, elt1 => { this.accept(printer, elt1, new AppPattern_VarScope(scope), stack.concat([{ elt: elt, scope: scope }])); }); } } }; /*** * * @param {Array<AElement> | AElement | Array<{elt: AElement, opt:Object}>} docList * @param printer * @param onProcess * @return {Promise<Awaited<unknown>[]>} */ PrintSerializer.prototype.serialize = function (docList, printer, onProcess) { var $ = Dom["b" /* default */].ShareInstance.$; if (!(docList instanceof Array)) docList = [docList]; docList = docList.map(doc => { if (typeof doc === "string") { return { elt: $(doc) } } else if (Object(Dom["f" /* isDomNode */])(doc)) { return { elt: $(doc) } } else if (typeof doc === "object" && doc) { if (typeof doc.elt === "string") doc.elt = $(doc.elt); if (doc.elt && Object(Dom["f" /* isDomNode */])(doc.elt)) return doc; } else return null; }).filter(it => !!it); var sync = []; var processInfo = { state: 'RENDER_DOM', total: { all: 0, text: 0, image: 0 }, dom: { text: 0, image: 0 }, onProcess: () => { onProcess && onProcess(processInfo); } }; printer.processInfo = processInfo; var contentChildList = docList.map(doc => { var elt = doc.elt; return Object(Dom["c" /* depthClone */])(elt, (originElt, copyElt) => { copyElt.__idx__ = processInfo.total.all; copyElt.__origin__ = originElt; processInfo.total.all++; var parent, fontWeight, style; var done = false; if (originElt.nodeType === Node.TEXT_NODE) { processInfo.total.text++; sync.push(new Promise(rs => { setTimeout(() => { parent = originElt.parentElement; if (!copyElt.__fontWeight__) { style = getComputedStyle(parent); fontWeight = parseInt(style.getPropertyValue('font-weight'));//not support other style copyElt.__fontWeight__ = fontWeight; if (fontWeight <= 400) { copyElt.parentElement.style.setProperty('font-weight', 'normal'); } else if (fontWeight > 400) { copyElt.parentElement.style.setProperty('font-weight', 'bold'); } processInfo.dom.text++; } processInfo.dom.text++; rs(); }, 0) })); } else if (originElt.tagName && originElt.tagName.toLowerCase() === 'canvas') { copyElt.getContext('2d').drawImage(originElt, 0, 0); } else if (originElt.tagName === 'IMG' && !originElt.classList.contains('absol-attachhook') && originElt.src) { processInfo.total.image++; sync.push(isImageURLAllowCrossOrigin(originElt.src).then(result => { var newElt; if (!result) { newElt = copyElt.cloneNode(); newElt.__idx__ = copyElt.__idx__; newElt.__origin__ = copyElt.__origin__; ; copyElt.parentElement.replaceChild(newElt, copyElt); return loadToBlobURL('https://absol.cf/crossdownload.php?file=' + encodeURIComponent(originElt.src)).then(url => newElt.src = url) .then(() => Object(Dom["h" /* waitImageLoaded */])(newElt, 10000)) .then(() => { if (!done) { processInfo.dom.image++; processInfo.onProcess(); done = true; } }); } else { return Object(Dom["h" /* waitImageLoaded */])(copyElt, 10000).then(() => { if (!done) { processInfo.dom.image++; processInfo.onProcess(); done = true; } }); } }, (err) => { console.error(err); if (!done) { processInfo.dom.image++; processInfo.onProcess(); done = true; } })); } else if (originElt.tagName === 'INPUT') { if (originElt.getAttribute('type') === 'text' || !originElt.getAttribute('type') || originElt.getAttribute('type') === 'number') { copyElt.value = originElt.value; } else if (originElt.getAttribute('type') === 'radio') { copyElt.setAttribute('name', (copyElt.getAttribute('name') || randomIdent()) + '_for_print'); copyElt.checked = originElt.checked; } } }); }); var content = Dom["b" /* default */].ShareInstance._({ style: { width: 794 - 57 * 2 + 'px', //WIDTH: 1123 - 57*2 display: 'inline-block', overflow: 'visible' }, class: 'as-printer-content', child: contentChildList }); var scroller = Dom["b" /* default */].ShareInstance._({ class: 'as-printer', style: { 'text-size-adjust': 'none', '-webkit-text-size-adjust': 'none', '-moz-text-size-adjust': 'none', '-ms-text-size-adjust': 'none', position: 'fixed', top: '10px', bottom: '10px', left: '10px', overflow: 'scroll', width: '794px', // maxWidth: '90vw', background: 'white', // zIndex: 1000, opacity: '0', zIndex: '-100', visibility: 'hidden', pointerEvents: 'none' }, child: content }).addTo(document.body); sync.push(new Promise(rs => { setTimeout(rs, 50); })); return Promise.all(sync).then(() => { processInfo.state = "SERIALIZE"; processInfo.onProcess(); docList.forEach((doc, i) => { printer.O = Math_Rectangle.fromClientRect(contentChildList[i].getBoundingClientRect()).A(); printer.addSubDocument(printer.O, doc.opt); this.accept(printer, contentChildList[i], new AppPattern_VarScope(), []); }); }) .then(() => { scroller.remove(); processInfo.onProcess = noop; return printer; }); }; /*** * * @param {PSHandler} handler * @returns {this} */ PrintSerializer.prototype.addHandler = function (handler) { this.handlers.unshift(handler); return this; }; /*** * * @param {PSHandler} handler * @param {string} bf * @returns {this} */ PrintSerializer.prototype.addHandlerBefore = function (handler, bf) { var idx = this.handlers.findIndex(value => value.id === bf); if (idx >= 0) { this.handlers.splice(idx, 0, handler); } return this; }; /*** * * @param {PSHandler} handler * @param {string} at * @returns {this} */ PrintSerializer.prototype.addHandlerAfter = function (handler, at) { var idx = this.handlers.findIndex(value => value.id === at); if (idx >= 0) { this.handlers.splice(idx + 1, 0, handler); } return this; }; /*** * * @param {Array<PSHandler>} handlers * @returns {this} */ PrintSerializer.prototype.addHandlers = function (handlers) { this.handlers.unshift.apply(this.handlers, handlers); return this; }; /*** * * @param {string} id * @returns {this} */ PrintSerializer.prototype.removeHandler = function (id) { var idx = this.handlers.findIndex(value => value.id === id); if (idx >= 0) { this.handlers.splice(idx, 1); } return this; }; /*** * * @param {string} id * @returns {PSHandler|null} */ PrintSerializer.prototype.getHandler = function (id) { var idx = this.handlers.findIndex(value => value.id === id); if (idx >= 0) { return this.handlers[idx]; } return null; }; /* harmony default export */ var Print_PrintSerializer = (PrintSerializer); // CONCATENATED MODULE: ./node_modules/absol/src/JSMaker/generator.js function generateJSVariable(obj, indent) { indent = indent || ''; var childIndent = indent + ' '; if (obj === null) { return 'null'; } else if (obj instanceof Date) { return 'new Date(' + obj.getTime() + ')'; } else if (obj instanceof Array) { if (obj.length === 0) return '[]'; return '[\n' + obj.map(function (it) { return childIndent + generateJSVariable(it, childIndent); }).join(',\n') + '\n' + indent + ']'; } else if (obj instanceof Error) { return generateJSVariable({message: obj.message, stack: obj.stack}); } else if (typeof obj === 'object') { var keys = Object.keys(obj); if (keys.length === 0) return '{}'; return '{\n' + keys.map(function (key) { var value = obj[key]; if (!key.match(/^[a-zA-Z_$]([a-zA-Z_0-9$]*)$/)) key = JSON.stringify(key); return childIndent + key + ': ' + generateJSVariable(value, childIndent) }).join(',\n') + '\n' + indent + '}'; } else if (obj === undefined) { return 'undefined'; } else { return JSON.stringify(obj); } } /*** * * @param o * @param {Array<{test, replace}>| null=} replacers * @returns {*} */ function copyJSVariable(o, replacers) { var replacer; if (replacers && replacers.length > 0) { replacer = replacers.find((rp) => { return rp.test.apply(rp, [o].concat(Array.prototype.slice.call(arguments, 2))); }); if (replacer) { return replacer.replace.apply(replacer, [o].concat(Array.prototype.slice.call(arguments, 2))); } } if (o === null) return null; if (o === undefined) return undefined; var type = typeof o; if (type === "boolean") return o; if (o instanceof Date || (typeof o.getTime === "function")) return new Date(o.getTime()); if (type === "number") return o; if (type === "string") return o + ''; if (typeof o.map === "function") { return o.map((it, i) => copyJSVariable(it, replacers, i, o)); } if (type === "object" && o.constructor === Object) { return Object.keys(o).reduce((ac, cr) => { ac[cr] = copyJSVariable(o[cr], replacers, cr, o); return ac; }, {}); } return o; } function replaceDateStringJSVariable(o) { return copyJSVariable(o, [{ test: (x) => { return (typeof x === "string") && x.match(/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s+([a-zA-Z]{3})\s+[\d\s:]+GMT[\d+]+\s*\([^)]+\)$/) && !isNaN(new Date(x).getTime()); }, replace: x => new Date(x) }]); } /*** * * @param a * @param b * @return {boolean} */ function isJSVariableEqual(a, b) { if (a === b) return true;//1 var tA = typeof a; var tB = typeof b; if (tA !== tB) return false; //2 if (!a !== !b) return false; if (tA === 'string') return false;//because 1 & 2 if (tA === "number"){ if (isNaN(a) && isNaN(b)) return true;//because 2 return false;//because 1 } var aIsDate = a instanceof Date; var bIsDate = b instanceof Date; if (aIsDate !== bIsDate) return false; if (aIsDate) return isJSVariableEqual(a.getTime(), b.getTime()); var aIsArray = a instanceof Array; var bIsArray = a instanceof Array; if (aIsArray !== bIsArray) return false; var i; if (aIsArray) { if (a.length !== b.length) return false; for (i = 0; i < a.length; ++i) { if (!isJSVariableEqual(a[i], b[i])) return false; } return true; } //object if (a.equals) return a.equals(b); var aKeys = Object.keys(a); var bKeys = Object.keys(b); aKeys.sort(); bKeys.sort(); if (!isJSVariableEqual(aKeys, bKeys)) return false; for (i = 0; i < aKeys.length; ++i) { if (!isJSVariableEqual(a[aKeys[i]], b[aKeys[i]])) return false; } return true; } // CONCATENATED MODULE: ./node_modules/absol/src/Print/PaperPrinter.js var fontIdOf = fontName => { if (fontName.toLowerCase().indexOf('arial') >= 0) return 'arial'; if (fontName.toLowerCase().indexOf('times') >= 0) return 'times'; if (fontName === "Material Design Icons") return 'MDI_6_7_96'; return fontName; } var P2D = 72 / 96; var color2RGB255 = color => { try { color = Color_Color.parse(color + ''); return color.rgba.slice(0, 3).map(x => x * 255 >> 0); } catch (e) { return null; } }; function PaperPrinter(opt) { this.opt = Object.assign(copyJSVariable(this.defaultOptions), opt); this.objects = []; this.processInfo = { state: "STAND_BY" }; this.subDocs = null; this.pdfDoc = null; this.pageFormat = null; this.computedPages = 0; this.sync = this.ready().then(() => { this.processInfo.state = 'READY'; }); } PaperPrinter.prototype.defaultOptions = { size: 'a4', margin: { top: 57, left: 57, bottom: 57, right: 57 }, footer: null, header: null, paddingEven: true, lastPagePaddingEven: false }; PaperPrinter.prototype.share = { jsPDFUrl: 'https://absol.cf/vendor/jspdf.umd.js', jsPDF: null, readySync: null, fonts: [ { url: 'https://absol.cf/vendor/fonts/arial.ttf', fileName: 'arial.ttf', name: 'arial', style: 'normal' }, { url: 'https://absol.cf/vendor/fonts/arialbd.ttf', fileName: 'arialbd.ttf', name: 'arial', style: 'bold' }, { url: 'https://absol.cf/vendor/fonts/ariali.ttf', fileName: 'ariali.ttf', name: 'arial', style: 'italic' }, { url: 'https://absol.cf/vendor/fonts/arialbi.ttf', fileName: 'arialbi.ttf', name: 'arial', style: 'bold_italic' }, { url: 'https://absol.cf/vendor/fonts/times.ttf', fileName: 'times.ttf', name: 'times', style: 'normal' }, { url: 'https://absol.cf/vendor/fonts/timesbd.ttf', fileName: 'timesbd.ttf', name: 'times', style: 'bold' }, { url: 'https://absol.cf/vendor/fonts/timesi.ttf', fileName: 'timesi.ttf', name: 'times', style: 'italic' }, { url: 'https://absol.cf/vendor/fonts/timesbi.ttf', fileName: 'timesbi.ttf', name: 'times', style: 'bold_italic' } ] }; PaperPrinter.prototype.ready = function () { var sync; if (!this.share.readySync) { sync = this.share.fonts.map((font) => { return fetch(font.url).then(res => res.blob()) .then(blob => { var reader = new window.FileReader(); return new Promise(rs => { reader.onload = function () { rs(this.result); } reader.readAsDataURL(blob); }) }) .then(b64Url => { var idx = b64Url.indexOf('base64,'); return b64Url.substring(idx + 'base64,'.length); }).then(b64 => { font.content = b64; }) }); if (window.jspdf) { this.share.jsPDF = window.jspdf.jsPDF; } else { sync.push(loadScript(this.share.jsPDFUrl).then(() => { this.share.jsPDF = window.jspdf.jsPDF; })) } this.share.readySync = Promise.all(sync); } return this.share.readySync; }; /*** * * @param at * @param opt */ PaperPrinter.prototype.addSubDocument = function (at, opt) { this.objects.push({ type: 'sub_document', at: at, opt: opt }); }; /*** * * @param {string} text * @param {Vec2 | Rectangle} pos * @param {Object=}style */ PaperPrinter.prototype.text = function (text, pos, style) { this.objects.push({ type: 'text', pos: pos, text: text, style: style || {} }); return this; }; /*** * * @param {string} text * @param {Vec2} start * @param {Vec2} end * @param {Object=}style */ PaperPrinter.prototype.line = function (start, end, style) { this.objects.push({ type: 'line', start: start, end: end, style: style || {} }); return this; }; /*** * * @param {Vec2} at * @param {boolean=} paddingEven */ PaperPrinter.prototype.pageBreak = function (at, paddingEven) { this.objects.push({ type: 'page_break', at: at, paddingEven: !!paddingEven }); return this; }; /*** * * @param {Rectangle}rect * @param {Object=}style */ PaperPrinter.prototype.rect = function (rect, style) { this.objects.push({ type: 'rect', rect: rect, style: style || {} }); }; /*** * * @param {HTMLCanvasElement|AElement |Image} image * @param {Rectangle}rect * @param {Object=}style */ PaperPrinter.prototype.image = function (image, rect, style) { this.objects.push({ type: 'image', rect: rect, style: style || {}, image: image }); return this; }; PaperPrinter.prototype.boundOf = function (objectData) { return this.measures[objectData.type](objectData); }; PaperPrinter.prototype.computeObjects = function () { var objects = this.objects.slice(); if (!objects[0] || objects[0].type !== 'sub_document') { objects.unshift({ type: 'sub_document', at: Math_Vec2.ZERO, }) } this.subDocs = objects.reduce((ac, obj) => { switch (obj.type) { case 'sub_document': ac.push({ objects: [obj] }); break; default: ac[ac.length - 1].objects.push(obj); break; } return ac; }, []); this.subDocs.forEach((doc, i) => { doc.objects.forEach((o, i) => { o.idx = i; o.bound = this.boundOf(o); }); var newDocCmd = doc.objects.shift(); doc.objects.sort((a, b) => { return a.bound.y - b.bound.y; }); doc.opt = Object.assign(copyJSVariable(this.opt), newDocCmd.opt || {}); doc.objects.unshift(newDocCmd); doc.startPage = i > 0 ? this.subDocs[i - 1].startPage + this.subDocs[i - 1].pages.length : this.computedPages; if (this.opt.paddingEven && doc.startPage % 2 > 0) doc.startPage++; var pageContentHeight = 1123 - doc.opt.margin.top - doc.opt.margin.bottom; doc.pages = doc.objects.reduce((ac, cr) => { var page = ac[ac.length - 1]; if (cr.bound.height > pageContentHeight) { page.object.push(cr); } else { if (cr.bound.y + cr.bound.height - page.y > pageContentHeight || cr.type === 'page_break') { page = { y: cr.bound.y, objects: [cr] }; ac.push(page); } else { page.objects.push(cr); } } return ac; }, [{ objects: [], y: 0 }]); doc.pages.forEach(page => page.objects.sort((a, b) => a.idx - b.idx)); this.computedPages = doc.startPage + doc.pages.length; }); }; PaperPrinter.prototype.getDoc = function () { if (this.docSync) return this.docSync; this.docSync = this.sync.then(() => { if (this.pdfDoc) return this.pdfDoc; var jsPDF = jspdf.jsPDF; this.pdfDoc = new jsPDF({ orientation: 'p', unit: 'px', format: 'a4', putOnlyUsedFonts: true, floatPrecision: 16, dpi: 300, hotfixes: ["px_scaling"] }); this.share.fonts.forEach(font => { this.pdfDoc.addFileToVFS(font.fileName, font.content); this.pdfDoc.addFont(font.fileName, font.name, font.style); }); return this.pdfDoc; }); this.sync = this.docSync; return this.docSync; }; PaperPrinter.prototype.flush = function () { this.sync = this.getDoc().then(pdfDoc => { this.computeObjects(); var subDocs = this.subDocs; this.subDocs = null;//reset var onProcess = this.opt.onProcess; var processInfo = this.processInfo; processInfo.pdf = { all: subDocs.reduce((ac, sD) => ac + sD.objects.length, 0), done: 0 }; processInfo.onProcess = () => { onProcess && onProcess(processInfo); }; processInfo.state = 'RENDER_PDF'; return subDocs.reduce((sync, doc, i) => { return sync.then(() => { var startPage = doc.startPage; while (pdfDoc.getNumberOfPages() <= startPage) { pdfDoc.addPage(); } return doc.pages.reduce((docSync, page, i) => { return docSync.then(() => { if (pdfDoc.getNumberOfPages() <= startPage + i) { pdfDoc.addPage(); } pdfDoc.setPage(startPage + i + 1); page.O = new Math_Vec2(this.opt.margin.left, this.opt.margin.top - page.y); return page.objects.reduce((pageSync, obj) => { return pageSync.then(() => { var type = obj.type; var res = this.pdfHandlers[type](page, pdfDoc, obj); processInfo.pdf.done++; if (res && res.then) { res.then(() => processInfo.onProcess()) } return res; }); }, Promise.resolve()).then(() => { pdfDoc.setTextColor(0, 0, 0); pdfDoc.setFontSize(14 * P2D); pdfDoc.setFont('arial', 'normal'); pdfDoc.text((i + 1) + '/' + doc.pages.length, 794 - 25, 1123 - 25, { align: 'right' }); if (typeof doc.opt.footer === 'string') { pdfDoc.text(doc.opt.footer, 25, 1123 - 25, { align: 'left' }); } }); }) }, Promise.resolve()) .then(() => { if (this.opt.lastPagePaddingEven) { while (pdfDoc.getNumberOfPages() % 2 > 0) { pdfDoc.addPage(); } } }) }) }, Promise.resolve()); }); return this.sync; }; PaperPrinter.prototype.exportAsPDF = function () { return this.flush().then(() => this.pdfDoc); }; PaperPrinter.prototype.pdfHandlers = { text: function (context, doc, data) { var fontFamily = data.style.fontFamily; var lineHeight = data.style.lineHeight || 1.2; var color = color2RGB255(data.style.color) || [0, 0, 0]; doc.setTextColor(color[0], color[1], color[2]); var fontSize = data.style.fontSize || 14; var textPos = data.pos.A().add(context.O); doc.setLineHeightFactor(lineHeight); doc.setFontSize(fontSize * P2D); doc.setFont(fontIdOf(fontFamily), data.style.fontStyle); var style = { baseline: 'top', maxWidth: data.pos.width }; if (data.style.align) { //todo: check align style.align = { start: 'left', end: 'right', center: 'center' }[data.style.align] || 'left'; } doc.text(data.text, textPos.x, textPos.y + fontSize * (lineHeight - 1) / 2, style); }, rect: function (context, doc, data) { var fillColor = null; var strokeColor = null; var strokeWidth = data.style.strokeWidth || 1; var rounded = data.style.rounded; if (typeof rounded === "number") rounded = [rounded, rounded]; if (data.style.fill) { fillColor = color2RGB255(data.style.fill); } if (data.style.stroke) { strokeColor = color2RGB255(data.style.stroke); } if (fillColor) doc.setFillColor(fillColor[0], fillColor[1], fillColor[2]); if (strokeColor) { doc.setLineWidth(strokeWidth); doc.setDrawColor(strokeColor[0], strokeColor[1], strokeColor[2]); } var flat = 'F'; if (strokeColor && fillColor) flat = 'FD'; else if (strokeColor) flat = 'S'; else if (fillColor) flat = 'F'; else return; var O = context.O; var A = data.rect.A().add(O); if (rounded) { doc.roundedRect(A.x, A.y, data.rect.width, data.rect.height, rounded[0], rounded[1], flat); } else { doc.rect(A.x, A.y, data.rect.width, data.rect.height, flat); } }, line: function (context, doc, data) { var fillColor = null; var strokeColor = null; var strokeWidth = data.style.strokeWidth || 1; if (data.style.stroke) { strokeColor = color2RGB255(data.style.stroke); } if (strokeColor) { doc.setLineWidth(strokeWidth); doc.setDrawColor(strokeColor[0], strokeColor[1], strokeColor[2]); } var flat = 'S'; var O = context.O; var A = data.start.add(O); var B = data.end.add(O); doc.line(A.x, A.y, B.x, B.y, flat); }, image: function (context, doc, data) { var handleImage = image => { if (!image) return; var rect = data.rect.clone(); rect.x += context.O.x; rect.y += context.O.y; doc.addImage(image, 'PNG', rect.x, rect.y, rect.width, rect.height) } if (data.image.then) { return data.image.then(handleImage).catch(err => { }); } else return handleImage(data.image); }, page_break: function (context, doc, data) { }, sub_document: function (context, doc, data) { } }; PaperPrinter.prototype.measures = { sub_document: data => { return new Math_Rectangle(0, 0, 0, 0); }, rect: data => { return data.rect; }, text: data => { return data.pos; }, image: data => { return data.rect; }, line: data => { return Math_Rectangle.boundingPoints([data.start, data.end]); }, page_break: data => { return new Math_Rectangle(0, data.at.y, 0, 0); } }; /* harmony default export */ var Print_PaperPrinter = (PaperPrinter); // CONCATENATED MODULE: ./node_modules/absol/src/Network/FileSaver.js /*** * @typedef {{revokeTimeout?: number, autoBom?:boolean }} FileSaverOpts * */ function fileExist(url) { var xhr = new XMLHttpRequest(); xhr.open('HEAD', url, true); return new Promise(function (resolve) { xhr.onreadystatechange = function () { if (this.readyState === 4) { resolve(xhr.status === 200); } }; xhr.onerror = function (err) {}; xhr.send(); }); } /*** * * @param url * @param name * @param {FileSaverOpts} opts */ function download(url, name, opts) { var xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.responseType = 'blob'; xhr.onload = function () { saveAs(xhr.response, name, opts); } xhr.onerror = function () { console.error('Could not download: ' + url); }; xhr.send(null); } function bom(blob, opts) { if (typeof opts === undefined) opts = { autoBom: false }; else if (typeof opts !== 'object') opts = { autoBom: !opts }; if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type }) } return blob; } function corsEnabled(url) { var xhr = new XMLHttpRequest(); return new Promise(function (resolve) { xhr.onload = function () { resolve(xhr.status >= 200 && xhr.status < 299); }; xhr.onerror = function () { resolve(xhr.status >= 200 && xhr.status < 299); } xhr.open('HEAD', url, true); xhr.send(); }); } function click(node) { try { node.dispatchEvent(new MouseEvent('click')); } catch (e) { var evt = document.createEvent('MouseEvents'); evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null); node.dispatchEvent(evt); } } function normalSaveAs(blob, name, opts) { var URL = window.URL || window.webkitURL; var a = document.createElement('a'); name = name || blob.name || 'download'; a.download = name; a.rel = 'noopener'; if (typeof blob === 'string') { a.href = blob; if (a.origin !== location.origin) { corsEnabled(a.href).then(function (result){ if (result) { download(blob, name, opts); } else { a.target = '_blank'; click(a); } }); } else { click(a); } } else { a.href = URL.createObjectURL(blob); setTimeout(function () { }, ((opts && opts.revokeTimeout) || 4E4)); setTimeout(function () { click(a); }, 0); } } function msSaveAs(blob, name, opts) { name = name || blob.name || 'download'; if (typeof blob === 'string') { corsEnabled(blob).then(function (result) { if (result) { download(blob, name, opts); } else { var a = document.createElement('a'); a.href = blob; a.target = '_blank'; setTimeout(function () { click(a); }); } }); } else { navigator.msSaveOrOpenBlob(bom(blob, opts), name); } } function popupSaveAs(blob, name, opts, popup) { if (typeof blob === 'string') { download(blob, name, opts); return; } popup = popup || open('', '_blank'); if (popup) { popup.document.title = name || 'download'; popup.document.body.innerText = "downloading..." } name = name || blob.name || 'download'; blob.name = name; var force = blob.type === 'application/octet-stream'; var isSafari = BrowserDetector["a" /* default */].isSafari; var isChromeIOS = BrowserDetector["a" /* default */].isChromeIOS; var isMacOSWebView = BrowserDetector["a" /* default */].isMacOSWebView; var isSafariUnder13 = (BrowserDetector["a" /* default */].browser.type === 'safari' && parseFloat(BrowserDetector["a" /* default */].browser.version) < 13); if ((!isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined' & !isSafariUnder13) { var reader = new FileReader(); reader.onloadend = function () { var url = reader.result; url = isChromeIOS ? url : url.replace(/^data:[^;]*/, 'data:attachment/file'); if (popup) popup.location.href = url; else location = url; popup = null; }; reader.readAsDataURL(blob); } else { var URL = window.URL || window.webkitURL; var url = URL.createObjectURL(blob); if (popup) popup.location.href = url; else location.href = url; popup = null; setTimeout(function () { URL.revokeObjectURL(blob); }, (opts && opts.revokeTimeout) || 4E4); } } /*** * * @param {string | File | Blob}blob * @param {string=} name * @param {Object=} opts * @param {Object=} popup */ function saveAs(blob, name, opts, popup) { if (typeof window !== "object" || window !== self) { console.error("FileSaver is not support!") } else if ('wkSaveAs' in navigator) { navigator.wkSaveAs(blob, name, opts); } else if ('download' in HTMLAnchorElement.prototype && !BrowserDetector["a" /* default */].isMacOSWebView) { normalSaveAs(blob, name, opts); } else if ('msSaveOrOpenBlob' in navigator) { msSaveAs(blob, name, opts); } else { setTimeout(function () { popupSaveAs(blob, name, opts, popup); }, 100) } } function saveTextAs(text, name, opts) { var blob = new Blob([text], { type: 'text/plain' }); saveAs(blob, name, opts); } // CONCATENATED MODULE: ./node_modules/absol/src/Print/pdf.js // var pdLibUrl = 'https://unpkg.com/pdf-lib/dist/pdf-lib.js'; var pdLibUrl = 'https://absol.cf/vendor/pdf-lib.js'; var libSync = null; function loadVendorLib() { if (libSync) return libSync; if ('PDFLib' in window) { libSync = Promise.resolve(window.PDFLib); } else { libSync = loadScript(pdLibUrl).then(() => window.PDFLib) } return libSync; } function loadPdf(data) { if (typeof data === "string") { return fetch(data).then(res => res.arrayBuffer()).then(buff => loadPdf(buff)); } else if (data instanceof ArrayBuffer) { return PDFLib.PDFDocument.load(data); } else return null; } function mergePdfs(pdfsToMerges, onProcess) { var processInfo = { all: pdfsToMerges.length, loaded: 0, merged: 0 } return loadVendorLib().then(() => { var pdfSync = pdfsToMerges.map(it => loadPdf(it).then(r => { processInfo.loaded++; onProcess && onProcess(processInfo); return r; })); pdfSync.push(PDFLib.PDFDocument.create()); return Promise.all(pdfSync); }).then(pdfs => { var mergedPdf = pdfs.pop(); return pdfs.reduce((sync, pdf) => { return mergedPdf.copyPages(pdf, pdf.getPageIndices()).then(copiedPages => sync.then(() => copiedPages)) .then(copiedPages => { copiedPages.forEach((page) => { mergedPdf.addPage(page); }); processInfo.merged++; onProcess && onProcess(processInfo); }); }, Promise.resolve()).then(() => mergedPdf); }).then(mergedPdf => mergedPdf) } // CONCATENATED MODULE: ./node_modules/absol/src/Print/printer.js var ShareSerializer = new Print_PrintSerializer(); /*** * * @param elt * @param fileName * @param {function(processInfo):void=} onProcess * @returns {Promise<*>} */ /** * @type {((elt:AElement, fileName: string, onProcess: function(processInfo):void) => Promise ) & ((elt:AElement, opt: object, onProcess: function(processInfo):void) => Promise) } */ function downloadAsPDF(docList, arg2, onProcess) { var opt = { fileName: 'exports.pdf.js' }; if (typeof arg2 === 'string') opt.fileName = arg2; else Object.assign(opt, arg2); var $ = Dom["b" /* default */].ShareInstance.$; if (!(docList instanceof Array)) docList = [docList]; docList = docList.map(doc => { if (typeof doc === "string") { return { elt: $(doc) } } else if (Object(Dom["f" /* isDomNode */])(doc)) { return { elt: $(doc) } } else if (typeof doc === "object" && doc) { if (typeof doc.elt === "string") doc.elt = $(doc.elt); if (doc.elt && Object(Dom["f" /* isDomNode */])(doc.elt)) return doc; } else return null; }).filter(it => !!it).map(doc => { var elt = docList[0]; if (elt.fmComponent) { if (!doc.opt) doc.opt = {}; if (!doc.opt.margin) { doc.opt.margin = { top: elt.fmComponent.style.paddingTop || 57, left: elt.fmComponent.style.paddingLeft || 57, bottom: elt.fmComponent.style.paddingBottom || 57, right: elt.fmComponent.style.paddingRight || 57 }; } } return doc; }); var serializer = ShareSerializer; opt.onProcess = (typeof onProcess === "function") ? onProcess : (function (){}); var printer = new Print_PaperPrinter(opt); return serializer.serialize(docList, printer, opt.onProcess) .then(printer => printer.exportAsPDF()) .then(doc => { saveAs(doc.output('blob'), opt.fileName); }); } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/PreInput.js var PreInput_ = ACore["d" /* default */]._; var PreInput_$ = ACore["d" /* default */].$; var textDelay = BrowserDetector["a" /* default */].isSafari ? 100 : 1; /*** * @extends AElement * @constructor */ function PreInput() { this.defineEvent(['pasteimg', 'pastetext', 'change']); this.on('paste', this.eventHandler.paste); this.on('keydown', this.eventHandler.keydown); this.history = []; this.value = ''; this.historyIndex = -1; this.changePendingEvent = null; this.commitChange('', 0); } PreInput.tag = 'preinput'; PreInput.render = function () { return PreInput_({ tag: 'pre', class: 'as-preinput', attr: { contenteditable: 'true' }, child: 'br' }); }; PreInput.prototype.notifyChange = function (data, originalEvent) { this.emit('change', Object.assign({ type: 'change', target: this, originalEvent: originalEvent || this.changePendingEvent }, data)); this.changePendingEvent = null; }; PreInput.prototype.applyData = function (text, offset) { var textNode = PreInput_({ text: text }); this.clearChild() .addChild(textNode).addChild(PreInput_('br')); if (document.activeElement === this && this.isDescendantOf(document.body)) { if (document.getSelection) { var sel = document.getSelection(); sel.removeAllRanges(); var range = document.createRange(); if (typeof offset == 'number') { range.setStart(textNode, Math.min(text.length, offset)); } else { range.setStart(textNode, Math.min(text.length, offset.start)); range.setEnd(textNode, Math.min(text.length, offset.end)); } sel.addRange(range); this.scrollIntoRange(range); } else { console.error("PreInput: Not support!"); } } }; PreInput.prototype.select = function (offset) { if (document.activeElement !== this) this.focus(); this.applyData(this.value, offset); }; PreInput.prototype.scrollIntoRange = function (range) { var elementBound = range.getBoundingClientRect(); var viewportBound = this.getBoundingClientRect(); var dBottom = 0; if (range.startContainer && range.startContainer.data && range.startContainer.data.charAt(range.startContainer.data.length - 1) == '\n') dBottom += this.getFontSize() * 1.5; var currentScrollTop = this.scrollTop; var newScrollTop = currentScrollTop; if (elementBound.bottom + dBottom > viewportBound.bottom) { newScrollTop = currentScrollTop + (elementBound.bottom + dBottom - viewportBound.bottom); } if (elementBound.top < viewportBound.top) { newScrollTop = currentScrollTop - (viewportBound.top - elementBound.top); } if (newScrollTop != currentScrollTop) { this.scrollTop = newScrollTop; } var currentScrollLeft = this.scrollLeft; var newScrollLeft = currentScrollLeft; if (elementBound.right > viewportBound.right) { newScrollLeft = currentScrollLeft + (elementBound.right - viewportBound.right); } if (elementBound.left < viewportBound.left) { newScrollLeft = currentScrollLeft - (viewportBound.left - elementBound.left); } if (newScrollLeft != currentScrollLeft) { this.scrollLeft = newScrollLeft; } }; PreInput.prototype.undo = function () { if (this.historyIndex <= 0) return; this.historyIndex--; var record = this.history[this.historyIndex]; this.applyData(record.text, record.offset); this.notifyChange({value: record.text, action: 'undo', record: record}); }; PreInput.prototype.redo = function () { if (this.historyIndex + 1 >= this.history.length) return; this.historyIndex++; var record = this.history[this.historyIndex]; this.applyData(record.text, record.offset); this.notifyChange({value: record.text, action: 'redo', record: record}); }; /** * * @param text * @param offset * @param {Event=} event */ PreInput.prototype.commitChange = function (text, offset) { while (this.historyIndex < this.history.length - 1) { this.history.pop(); } var lastText = this.history.length > 0 ? this.history[this.history.length - 1].text : null; if (text === lastText) { if (this.history[this.history.length - 1].offset != offset) this.history[this.history.length - 1].offset = offset; } else { this.historyIndex = this.history.length; var record = { text: text, offset: offset }; this.history.push(record); this.notifyChange({ value: record.text, action: 'commit', record: record }); } }; /** * * @param text * @param offset * @param {Event=} event */ PreInput.prototype.waitToCommit = function (text, offset, event) { var thisInput = this; if (this._commitTimeout > 0) clearTimeout(this._commitTimeout); this._commitTimeout = setTimeout(function () { thisInput.commitChange(text, offset); }, textDelay); }; PreInput.prototype.getPosition = function (node, offset) { if (!node) return NaN; if (node == this) return offset; var parent = node.parentElement; if (!parent) return NaN; var text = ''; var child; var lastBr = false; for (var i = 0; i < parent.childNodes.length; ++i) { child = parent.childNodes[i]; if (child == node) break; text += this.stringOf(child); } return this.getPosition(parent, text.length + offset); }; PreInput.prototype.getSelectPosition = function () { if (window.getSelection) { var sel = window.getSelection(); if (sel.getRangeAt && sel.rangeCount) { var range = sel.getRangeAt(0); var direction = 'forward'; var cmpPosition = sel.anchorNode.compareDocumentPosition(sel.focusNode); if (cmpPosition === 4) { direction = 'forward'; } else if (cmpPosition === 2) { direction = 'backward' } else if (!cmpPosition && sel.anchorOffset > sel.focusOffset || cmpPosition === Node.DOCUMENT_POSITION_PRECEDING) { direction = 'backward'; } var startOffset = this.getPosition(range.startContainer, range.startOffset); var endOffset = this.getPosition(range.endContainer, range.endOffset); if (isNaN(startOffset)) return null; return { start: startOffset, end: endOffset, direction: direction } } } else if (document.selection) { console.error('May not support!'); } }; PreInput.prototype.stringOf = function (node, parent) { if (!node) return ''; if (node.nodeType === 3) { return node.data; } var res = ''; if ((node.tagName === 'BR' || node.tagName === 'br') && parent && parent.lastChild !== node) { return '\n'; } else if ((node.tagName === 'DIV' || node.tagName === 'div') && parent && parent.firstChild !== node) { res += '\n'; } var thisInput = this; return res + Array.prototype.map.call(node.childNodes, function (cNode, index, arr) { return thisInput.stringOf(cNode, node); }).join(''); }; PreInput.prototype._pasteText = function (text) { var sel = window.getSelection(); var range; if (window.getSelection) { sel = window.getSelection(); if (sel.getRangeAt && sel.rangeCount) { try { range = sel.getRangeAt(0); range.deleteContents(); var textNode = PreInput_({ text: text }); range.insertNode(textNode); if (sel.removeRange) { sel.removeRange(range); } else { sel.removeAllRanges(); } range = document.createRange(); range.setStart(textNode, text.length); sel.addRange(range); this.scrollIntoRange(range); this.commitChange(this.stringOf(this), this.getPosition(textNode, text.length)); } catch (error) { alert(error.message) } } } else if (document.selection && document.selection.createRange) { document.selection.createRange().text = text; this.commitChange(this.stringOf(this), this.getPosition(textNode, text.length)); console.error('May not support!'); } }; /** * @type {PreInput} */ PreInput.eventHandler = {}; PreInput.eventHandler.paste = function (event) { this.changePendingEvent = event; var thisIp = this; var clipboardData = (event.clipboardData || window.clipboardData); /**Safari bug */ if (clipboardData) { if (clipboardData.items) { var items = Array.prototype.slice.call(clipboardData.items); var imgItems = items.filter(function (item) { return item.type.indexOf('image') >= 0; }); var plainTextItems = items.filter(function (item) { return item.type.indexOf('text/plain') >= 0; }); if (imgItems.length > 0) { var imgFiles = imgItems.map(function (it) { return it.getAsFile(); }); this.emit('pasteimg', { target: this, imageFile: imgFiles[0], imageFiles: imgFiles, orginEvent: event }, this); } else if (plainTextItems.length > 0) { var plainTextItem = plainTextItems[0];//only one item plainTextItem.getAsString(function (text) { thisIp._pasteText(text); }); } else { window.ABSOL_DEBUG && console.error("Can not handle clipboard data"); } event.preventDefault(); } else { var text = event.clipboardData.getData('text/plain'); if (text) { event.preventDefault(); this._pasteText(text); } else { var currentText = this.stringOf(this); var currentSelection = this.getSelectPosition(); setTimeout(function () { var images = []; PreInput_$('img', thisIp, function (elt) { images.push(elt); }); Promise.all(images.map(function (img) { return Dom["b" /* default */].imageToCanvas(img).then(function (canvas) { var dataURI = canvas.toDataURL(); var blob = dataURItoBlob(dataURI); var file = blobToFile(blob); return { file: file, blob: blob, url: dataURI } }, function (error) { console.error(error) }).catch(function (error) { console.error(error) }); })).then(function (results) { results = results.filter(function (it) { return !!it; }); if (results.length > 0) { var imgFiles = results.map(function (it) { return it.file }); var urls = results.map(function (it) { return it.url }); thisIp.emit('pasteimg', { target: this, imageFile: imgFiles[0], imageFiles: imgFiles, urls: urls, url: urls[0], orginEvent: event }, thisIp); } }); thisIp.applyData(currentText, currentSelection); }, textDelay); } } } else { setTimeout(function () { if (window.getSelection) { var sel = window.getSelection(); if (sel.getRangeAt && sel.rangeCount) { var range = sel.getRangeAt(0); var text = this.stringOf(this); var offset = this.getPosition(range.startContainer, range.startOffset); this.waitToCommit(text, offset); } } else if (document.selection) { console.error('May not support!'); } }.bind(this), textDelay); } }; PreInput.eventHandler.keydown = function (event) { this.changePendingEvent = event; if (event.ctrlKey) { switch (event.key) { case 'z': this.undo(); event.preventDefault(); break; case 'y': this.redo(); event.preventDefault(); break; default: break; } } if (!event.ctrlKey && !event.altKey) { setTimeout(function () { if (window.getSelection) { var sel = window.getSelection(); if (sel.getRangeAt && sel.rangeCount) { var range = sel.getRangeAt(0); var text = this.stringOf(this); var offset = this.getPosition(range.startContainer, range.startOffset); this.waitToCommit(text, offset); } } else if (document.selection) { console.error('May not support!'); } }.bind(this), textDelay); } }; PreInput.property = {}; PreInput.property.value = { set: function (value) { value = value || ''; this.applyData(value, value.length); this.commitChange(value, value.length); }, get: function () { return this.stringOf(this); } }; PreInput.property.disabled = { set: function (value) { value = !!value; if (value === this.hasClass('as-disabled')) return; if (value) { this.addClass('as-disabled'); this.attr({ contenteditable: undefined, oncut: 'return false', onpaste: 'return false', onkeydown: 'if(event.metaKey) return true; return false;' }); } else { this.removeClass('as-disabled'); this.attr({ contenteditable: true, oncut: undefined, onpaste: undefined, onkeydown: undefined }); } }, get: function () { return this.hasClass('as-disabled'); } }; PreInput.property.readOnly = { set: function (value) { value = !!value; if (value === this.hasClass('as-read-only')) return; if (value) { this.addClass('as-read-only'); this.attr({ contenteditable: undefined, oncut: 'return false', onpaste: 'return false', onkeydown: 'if(event.metaKey) return true; return false;' }); } else { this.removeClass('as-read-only'); this.attr({ contenteditable: true, oncut: undefined, onpaste: undefined, onkeydown: undefined }); } }, get: function () { return this.hasClass('as-read-only'); } }; ACore["d" /* default */].install(PreInput); /* harmony default export */ var js_PreInput = (PreInput); /* ShareSerializer.addHandlerBefore({ id: 'PreInput', match: (elt, scope, stack) => { if (elt.nodeType !== Node.ELEMENT_NODE) return false; return elt.hasClass('as-preinput') || elt.hasClass('as-tokenize-hyper-input'); }, exec: (printer, elt, scope, stack, accept) => { var O = printer.O; var printAttr = computePrintAttr(elt); var rect = printAttr.contentBound; rect.x -= O.x; rect.y -= O.y; printer.text(PreInput.prototype.stringOf(elt), rect, printAttr.style); return false; } }, '*'); */ // EXTERNAL MODULE: ./node_modules/absol-acomp/css/progressbar.css var progressbar = __webpack_require__(47); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ProgressBar.js var ProgressBar_ = ACore["d" /* default */]._; var ProgressBar_$ = ACore["d" /* default */].$; function ProgressBar() { this._value = 0; this._variant = null; this.$value = ProgressBar_$('.as-progress-bar-value', this); this._striped = false; this._animated = false; } ProgressBar.tag = 'ProgressBar'.toLowerCase(); ProgressBar.render = function () { return ProgressBar_({ class: 'as-progress-bar', child: { class: 'as-progress-bar-value' } }); }; ProgressBar.property = {}; /** * @type {ProgressBar} */ ProgressBar.property.variant = { set: function (value) { if (this._variant) { this.removeClass('as-variant-' + this._variant); } if (value) { this.addClass('as-variant-' + value) } else { value = null; } this._variant = value; }, get: function () { return this._variant; } }; /** * @type {ProgressBar} */ ProgressBar.property.value = { set: function (value) { value = Math.max(0, Math.min(1, value || 0)); this._value = value; this.$value.addStyle('width', value * 100 + '%'); }, get: function () { return this._value; } }; ProgressBar.property.animated = { set: function (value) { value = !!value; this._striped = value; if (value) { this.addClass('as-animated'); } else { this.removeClass('as-animated'); } }, get: function () { return this._animated; } } ProgressBar.property.striped = { set: function (value) { value = !!value; this._striped = value; if (value) { this.addClass('as-striped'); } else { this.removeClass('as-striped'); } }, get: function () { return this._striped; } } ACore["d" /* default */].install(ProgressBar); /* harmony default export */ var js_ProgressBar = (ProgressBar); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/quicklistbutton.css var quicklistbutton = __webpack_require__(161); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/FollowerToggler.js var FollowerToggler_ = ACore["d" /* default */]._; var FollowerToggler_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function FollowerToggler() { this.defineEvent(['close', 'open', 'preopen']); this.on('click', this.eventHandler.click); this.addClass('as-follower-trigger'); this.$follower = null; this._opened = false; } FollowerToggler.tag = 'FollowerToggler'.toLowerCase(); FollowerToggler.render = function () { return FollowerToggler_('div'); }; FollowerToggler.prototype.toggle = function () { if (this._opened) this.close(); else this.open(); }; FollowerToggler.prototype.open = function () { if (this._opened) return; this._opened = true; this.addClass('as-follower-trigger-open'); if (!this.$follower) return; this.emit('preopen', { name: 'preopen', target: this }, this); var thisTg = this; setTimeout(function () { thisTg.$follower.refollow(); thisTg.$follower.removeClass('absol-follower-hidden'); document.body.addEventListener('click', thisTg.eventHandler.clickBody); thisTg.emit('open', { name: 'open', target: this }, this); }, 1); }; FollowerToggler.prototype.close = function () { if (!this._opened) return; this._opened = false; this.removeClass('as-follower-trigger-open'); if (!this.$follower) return; this.$follower.unfollow(); this.$follower.addClass('absol-follower-hidden'); document.body.removeEventListener('click', this.eventHandler.clickBody); this.emit('close', { name: 'close', target: this }, this); }; FollowerToggler.prototype.bindFollower = function (elt) { if (this.$follower) { this.$follower.followTarget = null; } if (elt && elt.refollow) { if (this._opened) elt.removeClass('absol-follower-hidden'); else elt.addClass('absol-follower-hidden'); elt.followTarget = this; elt.sponsorElement = this; this.$follower = elt; } else { throw new Error("Must be a follower!"); } } FollowerToggler.eventHandler = {}; FollowerToggler.eventHandler.clickBody = function (event) { if (EventEmitter["b" /* default */].hitElement(this, event) || EventEmitter["b" /* default */].hitElement(this.$follower, event)) return; this.close(); }; FollowerToggler.eventHandler.click = function () { this.toggle(); }; ACore["d" /* default */].install(FollowerToggler); /* harmony default export */ var js_FollowerToggler = (FollowerToggler); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/QuickListButton.js var QuickListButton_ = ACore["d" /* default */]._; var QuickListButton_$ = ACore["d" /* default */].$; /**** * @extends FollowerToggler * @constructor */ function QuickListButton() { this.$shareFollower = QuickListButton.getFollower(); QuickListButton_({ tag: 'followertoggler', elt: this, on: { preopen: this.eventHandler.preopen, close: this.eventHandler.closeFollower } }); this.bindFollower(this.$shareFollower); this.$iconCtn.remove(); this.$content.addChild(this.$iconCtn); this._items = this._items; this._anchor = []; this.$list = null; this._listUpdated = true; this._opened = false; this.anchor = [12, 13, 15, 14];//todo: add property } QuickListButton.$follower = QuickListButton_('follower.as-quick-list-button-follower'); QuickListButton.getFollower = function () { if (!QuickListButton.$follower) QuickListButton.$follower = QuickListButton_('follower.as-quick-list-button-follower'); return QuickListButton.$follower; }; QuickListButton.tag = 'QuickListButton'.toLowerCase(); QuickListButton.render = function () { return QuickListButton_({ tag: 'flexiconbutton', class: 'as-quick-list-button', extendEvent: 'select', props: { text: "+ Thêm", icon: 'span.mdi.mdi-menu-down' } }); }; QuickListButton.property = {}; QuickListButton.property.items = { set: function (value) { value = value || []; this._items = value; this._listUpdated = false; }, get: function () { return this._items; } }; /** * @type {QuickListButton} */ QuickListButton.eventHandler = {}; QuickListButton.eventHandler.preopen = function () { this.$shareFollower.addTo(document.body); this.$shareFollower.anchor = this.anchor; if (this.$list == null) { this.$list = QuickListButton_('selectlist.absol-bscroller') .on('pressitem', this.eventHandler.pressitem); } if (!this._listUpdated) { this._listUpdated = true; this.$list.items = this._items; } this.$shareFollower.addChild(this.$list); this.$shareFollower.on({ preupdateposition: this.eventHandler.preUpdatePosition, }); }; QuickListButton.eventHandler.preUpdatePosition = function () { var bound = this.getBoundingClientRect(); var screenSize = Dom["b" /* default */].getScreenSize(); var maxHeight = Math.max(screenSize.height - bound.bottom, bound.top) - 10; this.$list.addStyle('max-height', maxHeight + 'px'); }; QuickListButton.eventHandler.closeFollower = function () { this.$shareFollower.off({ preupdateposition: this.eventHandler.preUpdatePosition }); }; QuickListButton.eventHandler.pressitem = function (event) { this.close(); this.emit('select', Object.assign({}, event, { type: 'select', target: this })); }; ACore["d" /* default */].install(QuickListButton); /* harmony default export */ var js_QuickListButton = (QuickListButton); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectlist.css var selectlist = __webpack_require__(48); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/checkboxbutton.css var checkboxbutton = __webpack_require__(164); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckboxButton.js ACore["d" /* default */].install('checkboxbutton', CheckBoxInput); /* harmony default export */ var CheckboxButton = (CheckBoxInput); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectListItem.js var SelectListItem_ = ACore["d" /* default */]._; var SelectListItem_$ = ACore["d" /* default */].$; /*** * * @extends AElement * @constructor */ function SelectListItem() { this.$text = SelectListItem_$('span.absol-selectlist-item-text', this); this.$textValue = this.$text.childNodes[0]; this.$descCtn = SelectListItem_$('.absol-selectlist-item-desc-container', this); this.$desc = SelectListItem_$('span.absol-selectlist-item-desc', this.$descCtn); this.$descValue = this.$desc.childNodes[0]; this.$icon = null; this._extendClasses = []; this._extendStyle = {}; this._data = ""; this._level = 0; this._icon = null; OOP["a" /* default */].drillProperty(this, this, 'noSelect', 'disabled'); /*** * @type {AbsolConstructDescriptor|null} * @name icon * @memberOf SelectListItem# */ } SelectListItem.tag = 'SelectListItem'.toLowerCase(); SelectListItem.render = function () { return SelectListItem_({ class: 'absol-selectlist-item', child: [ { tag: 'span', class: 'absol-selectlist-item-text', child: { text: '' } }, { class: 'absol-selectlist-item-desc-container', child: { tag: 'span', class: 'absol-selectlist-item-desc', child: { text: '' } } } ] }) }; SelectListItem.property = {}; SelectListItem.property.extendClasses = { set: function (value) { var i; for (i = 0; i < this._extendClasses.length; ++i) { this.removeClass(this._extendClasses[i]); } this._extendClasses = []; if (typeof value == 'string') value = value.trim().split(/\s+/); value = value || []; for (i = 0; i < value.length; ++i) { this._extendClasses.push(value[i]); this.addClass(value[i]); } }, get: function () { return this._extendClasses; } }; SelectListItem.property.extendStyle = { set: function (value) { this.removeStyle(this._extendStyle); this._extendStyle = Object.assign({}, value || {}); this.addStyle(this._extendStyle); }, get: function () { return this._extendClasses; } }; SelectListItem.property.icon = { /*** * @this SelectListItem * @param icon */ set: function (icon) { if (this.$icon) { this.$icon.remove(); this.$icon = null; } this._icon = icon || null; if (this._icon) { this.$icon = SelectListItem_(this._icon); this.$icon.addClass('as-select-list-icon'); this.addChildBefore(this.$icon, this.$text); } }, get: function () { return this._icon; } }; SelectListItem.property.data = { set: function (value) { this._data = value; if (typeof value == 'string') { this.$textValue.data = value; this.$descValue.data = ''; this.level = 0; this.extendClasses = ''; this.extendStyle = {}; this.lastInGroup = false; this.isLeaf = false; this.selected = false; this.disabled = false; this.icon = null; } else { this.$textValue.data = value.text || ''; this.$descValue.data = value.desc || ''; this.level = value.level || 0; this.extendClasses = value.extendClasses; this.extendStyle = value.extendStyle; this.lastInGroup = !!(value.lastInGroup); this.isLeaf = !!(value.isLeaf); this.selected = !!(value.selected); this.disabled = value.disabled || value.noSelect; this.icon = value.icon; } }, get: function () { return this._data; } }; SelectListItem.property.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } }, get: function () { return this.hasClass('as-disabled'); } }; SelectListItem.property.value = { get: function () { return getValueOfListItem(this._data); } }; SelectListItem.property.text = { get: function () { return getTextOfListItem(this._data); } }; SelectListItem.property.desc = { get: function () { return getDescriptionOfListItem(this._data); } }; SelectListItem.property.level = { set: function (value) { value = value || 0; this._level = value; this.addStyle('--level', value); }, get: function () { return this._level; } }; SelectListItem.property.lastInGroup = { set: function (value) { if (value) { this.addClass('as-last-in-group'); } else { this.removeClass('as-last-in-group'); } }, get: function () { return this.hasClass('as-last-in-group'); } }; SelectListItem.property.isLeaf = { set: function (value) { if (value) { this.addClass('as-is-leaf'); } else { this.removeClass('as-is-leaf'); } }, get: function () { return this.hasClass('as-is-leaf'); } }; SelectListItem.property.selected = { set: function (value) { if (value) { this.addClass('as-selected'); } else { this.removeClass('as-selected'); } }, get: function () { return this.hasClass('as-selected'); } }; ACore["d" /* default */].install(SelectListItem); /* harmony default export */ var js_SelectListItem = (SelectListItem); function getTextOfListItem(item) { if (item) { if (item.match) { } else if (item.text && item.text.match) { return item.text; } else return ''; } else return ''; } function getValueOfListItem(item) { if (item) { if (item.match) { return item; } else if (typeof item === "object") return item.value; else return item; } else return item; } function getDescriptionOfListItem(item) { return (item && (typeof item == "object")) ? item.desc : undefined; } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectList.js var SelectList_ = ACore["d" /* default */]._; var SelectList_$ = ACore["d" /* default */].$; var itemPool = []; function onMousedownItem(event) { if (EventEmitter["b" /* default */].isMouseRight(event)) return; var thisSL = this.$parent; if (thisSL) { thisSL.value = this.value; thisSL.emit('pressitem', { type: 'pressitem', target: thisSL, itemElt: this, value: this.value, data: this.data }); } } function makeItem() { return SelectList_({ tag: 'selectlistitem', on: { mousedown: onMousedownItem } }); } function requireItem($parent) { var item; if (itemPool.length > 0) { item = itemPool.pop(); } else { item = makeItem(); } item.$parent = $parent; return item; } function releaseItem(item) { item.$parent = null; item.removeClass('selected'); itemPool.push(item); }; function measureMaxDescriptionWidth(items) { var maxDescWidth = 0; var maxText = 0; var maxEst = 0; var est; for (var i = 0; i < items.length; ++i) { if (items[i].desc) { est = estimateWidth14(items[i].desc); if (est > maxEst) { maxEst = est; maxText = items[i].desc; } } } if (maxText) maxDescWidth = measureText(maxText, 'italic 14px sans-serif').width; return maxDescWidth; }; function measureMaxTextWidth(items) { var maxTextWidth = 0; var maxText = 0; var maxEst = 0; var maxLv = 0; var est; var text; var item; for (var i = 0; i < items.length; ++i) { item = items[i]; if (item.text) { text = item.text; est = estimateWidth14(text) + 14 * 0.9 * (item.level || 0); if (est > maxEst) { maxEst = est; maxText = text; maxLv = item.level || 0; } } } if (maxText) maxTextWidth = 14 * 0.9 * maxLv + measureText(maxText, '14px Arial, Helvetica, sans-serif').width + 14;//padding left, right 7px return maxTextWidth; } function measureListHeight(items) { var border = 0; var n = items.length - 1; return items.length * 20 + border; } function measureListSize(items) { var descWidth = measureMaxDescriptionWidth(items); var textWidth = measureMaxTextWidth(items); var width = textWidth; if (descWidth > 0) { width += descWidth + 14; } var height = measureListHeight(items); return { width: width, height: height, descWidth: descWidth, textWidth: textWidth }; } /*global absol*/ /*** * @extends AElement * @constructor */ function SelectList() { var thisSL = this; this.defineEvent(['pressitem', 'cancelasync', 'valuevisibilityasync', 'finishasync', 'sizechangeasync']); this.$attachhook = SelectList_('attachhook').addTo(this); this.sync = new Promise(function (rs) { thisSL.$attachhook.once('error', rs); }); this.$items = []; this.$itemByValue = {};//quick find element this.$selectedItem = undefined; this.measuredSize = { width: 0, height: 0, descWidth: 0, textWidth: 0 }; this._itemSession = 0; this._finished = true; }; SelectList.tag = "SelectList".toLowerCase(); SelectList.render = function () { return SelectList_('.absol-selectlist'); }; SelectList.prototype._updateSelectedItem = function () { var newSelectedItemElt = this.$itemByValue[this._selectValue]; if (newSelectedItemElt != this.$selectedItem) { if (this.$selectedItem) { this.$selectedItem.removeClass('selected'); } if (newSelectedItemElt) { newSelectedItemElt.addClass('selected'); this.$selectedItem = newSelectedItemElt; } } }; SelectList.prototype._requireItems = function (itemCout) { var item; while (this.$items.length < itemCout) { item = requireItem(this); this.$items.push(item); this.addChild(item); } while (this.$items.length > itemCout) { item = this.$items.pop(); item.remove(); releaseItem(item); } }; SelectList.prototype._assignItems = function (from, to) { var foundSelected = false; var itemElt; var item; for (var i = from; i < to; ++i) { itemElt = this.$items[i]; item = this._items[i]; itemElt.data = item; itemElt.__index__ = i; if (this.$itemByValue[item.value]) { console.warn('Value ' + this.$items[i].value + ' is duplicated!'); } else { this.$itemByValue[item.value] = itemElt; if (this._selectValue == item.value) { itemElt.addClass('selected'); this.$selectedItem = itemElt; foundSelected = true; } else { itemElt.removeClass('selected'); } } } return foundSelected; }; SelectList.prototype.setItemsAsync = function (items) { //start process this._finished = false; var session = Math.floor(Math.random() * 1000000); this._itemSession = session; this._items = items || []; this.$itemByValue = {}; this.measuredSize = measureListSize(items); this.style.setProperty('--select-list-desc-width', (this.measuredSize.descWidth/14) + 'em'); //addStyle notWork because of convert to cameCase var thisSL = this; var i = 0; var limit = 20; function tick() { if (thisSL._itemSession != session) { thisSL.emit('cancelasync', {session: session, type: 'cancelasync'}, this); return; } if (i >= items.length) { thisSL._updateSelectedItem(); thisSL._finished = false; thisSL.emit('finishasync', {session: session, type: 'finishasync'}, this); return; } var n = Math.min(items.length - i, limit); var itemCout = i + n; thisSL._requireItems(itemCout); i = itemCout; var foundSelected = thisSL._assignItems(itemCout - n, itemCout); if (foundSelected) { thisSL.emit('valuevisibilityasync', { session: session, type: 'valuevisibilityasync', itemElt: thisSL.$items[i] }, thisSL); } thisSL.emit('sizechangeasync', {session: session, type: 'sizechangeasync'}, this); setTimeout(tick, 2); } setTimeout(tick, 2); return Object.assign({session: session}, this.measuredSize); }; SelectList.prototype.setItems = function (items) { this._finished = false; var session = Math.floor(Math.random() * 1000000); this._itemSession = session; this._items = items || []; this.$itemByValue = {}; this.measuredSize = measureListSize(items); this.style.setProperty('--select-list-desc-width', (this.measuredSize.descWidth/14) + 'em'); //addStyle notWork because of convert to cameCase var itemCount = items.length; this._requireItems(itemCount); this._assignItems(0, itemCount); this._finished = true; return { session: this._itemSession, width: this._descWidth + this._textWidth + 14, height: this._height } }; SelectList.property = {}; /** * @type {SelectList} */ SelectList.property.items = { set: function (value) { value = value || []; this.setItems(value); }, get: function () { return this._items || []; } }; SelectList.property.value = { set: function (value) { this._selectValue = value; this._updateSelectedItem(); }, get: function () { return this._selectValue; } }; SelectList.property.item = { get: function () { if (this.$selectedItem) return this.$selectedItem.data; return undefined; } }; SelectList.property.selectedIndex = { get: function () { throw new Error("selectedIndex getter is deprecated"); } }; SelectList.prototype.init = function (props) { props = props || {}; var value = props.value; delete props.value; this.super(props); if (value !== undefined) this.value = value; }; SelectList.eventHandler = {}; ACore["d" /* default */].install(SelectList); /* harmony default export */ var js_SelectList = (SelectList); // EXTERNAL MODULE: ./node_modules/absol/src/Code/safeThrow.js var safeThrow = __webpack_require__(11); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/QuickMenu.js var QuickMenu_isMobile = BrowserDetector["a" /* default */].isMobile; var QuickMenu_ = ACore["d" /* default */]._; var QuickMenu_$ = ACore["d" /* default */].$; function QuickMenu() { //like context menu without right-click this._contextMenuSync = Promise.resolve(); } QuickMenu.tag = 'QuickMenu'.toLowerCase(); QuickMenu.render = function () { return QuickMenu_({ tag: 'vmenu', extendEvent: 'requestcontextmenu', class: [ 'as-quick-menu', 'as-bscroller' ], style: { 'overflow-y': 'auto', 'box-sizing': 'border-box' } }); }; ACore["d" /* default */].install(QuickMenu); /*** * * @param {AElement} elt * @param opt * @constructor */ function QuickMenuInstance(elt, opt) { this.id = (Math.random() * 10000 >> 0) + '' + new Date().getTime(); /*** * * @type {"OPEN"|"CLOSE"} */ this.state = 'CLOSE'; this._willAddClickOut = -1; this.elt = elt; this.opt = opt; for (var key in this) { if (key.startsWith('_on')) { this[key] = this[key].bind(this); } } this._init(); } QuickMenuInstance.prototype._init = function () { this.elt.classList.add('as-quick-menu-trigger'); if (this.opt.triggerEvent === 'mousedown') QuickMenu_$(this.elt).on('contextmenu', function (event) { event.preventDefault(); }).attr('oncontextmenu', "return false;"); if (this.opt.triggerEvent) { this.elt.addEventListener(this.opt.triggerEvent, this._onClick, true); } else this.elt.addEventListener('click', this._onClick, true); }; QuickMenuInstance.prototype._deinit = function () { if (this.state === "OPEN") this.close(); this.elt.classList.remove('as-quick-menu-trigger'); if (this.opt.triggerEvent) { this.elt.removeEventListener(this.opt.triggerEvent, this._onClick, true); } else { this.elt.removeEventListener('click', this._onClick, true); } }; QuickMenuInstance.prototype.getMenuProps = function () { var props; if (this.opt.getMenuProps) { props = this.opt.getMenuProps(); } else { props = this.opt.menuProps; } props = props || {}; return Object.assign({ extendClasses: [], extendStyle: {} }, props); }; QuickMenuInstance.prototype.remove = function () { this._deinit(); }; QuickMenuInstance.prototype._onClick = function (event) { if (this.opt.triggerEvent === 'mousedown') { event.preventDefault(); } var event = Object(EventEmitter["a" /* copyEvent */])(event, { canceled: false, cancel: function () { this.canceled = true; } }); if (this.opt.onClick) { this.opt.onClick.call(this, event); } if (!event.canceled) this.toggle(); }; QuickMenuInstance.prototype._onClickOut = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.elt, event) || Object(EventEmitter["d" /* hitElement */])(QuickMenu.$elt, event)) return; this.close(); }; QuickMenuInstance.prototype.onSelect = function (item) { item = item.__originalItem__ || item; if (item.items && item.items.length > 0) return; if (this.opt.onSelect) this.opt.onSelect(item); this.close(); } QuickMenuInstance.prototype.open = function () { if (QuickMenu.runningInstance === this) return; if (this.state !== "CLOSE") return; if (QuickMenu.runningInstance) QuickMenu.runningInstance.close(); QuickMenu.runningInstance = this; this.state = 'OPEN'; this.elt.classList.add('as-quick-menu-attached'); this._willAddClickOut = setTimeout(() => { this._willAddClickOut = -1; document.addEventListener('click', this._onClickOut, false); followerElt.updatePosition(); menuElt.addStyle('visibility', 'visible'); }, QuickMenu_isMobile ? 33 : 2); var anchor = this.getAnchor(); var followerElt = QuickMenu.$follower; var menuElt = QuickMenu.$elt; this.originProps = this.getMenuProps(); this.copyProps = Object.assign({}, this.originProps); this.copyProps.items = this.originProps.items || []; this.copyProps.items = this.copyProps.items.map(function visit(item) { var cpyItem = item; if (typeof item === "string") cpyItem = item; else if (item && (typeof item.text === "string")) { cpyItem = Object.assign({ __originalItem__: item }, item); if (cpyItem.items && cpyItem.items.map) cpyItem.items = cpyItem.items.map(visit); } return cpyItem; }); Object.assign(menuElt, this.copyProps); followerElt.addClass('absol-active'); if (anchor === 'modal') { followerElt.addClass('as-anchor-modal'); followerElt.anchor = []; } else { followerElt.removeClass('as-anchor-modal'); followerElt.anchor = anchor; } this._onSizeNeedUpdate(); QuickMenu.$follower.on('preupdateposition', this._onSizeNeedUpdate); followerElt.followTarget = this.elt; followerElt.sponsorElement = this.elt; menuElt.addStyle('visibility', 'hidden'); followerElt.addTo(document.body); followerElt.addClass('absol-active'); if (this.opt.onOpen) { try { this.opt.onOpen.call(this); } catch (err) { Object(safeThrow["a" /* default */])(err); } } }; QuickMenuInstance.prototype.close = function () { if (QuickMenu.runningInstance !== this) return; if (this.state !== "OPEN") return; if (this.opt.onClose) { try { this.opt.onClose.call(this); } catch (err) { Object(safeThrow["a" /* default */])(err); } } this.state = 'CLOSE'; this.elt.classList.remove('as-quick-menu-attached'); QuickMenu.$elt.removeStyle('--available-height'); var followerElt = QuickMenu.$follower; followerElt.addClass('absol-active'); followerElt.remove(); QuickMenu.$follower.off('preupdateposition', this._onSizeNeedUpdate); if (this._willAddClickOut >= 0) { clearTimeout(this._willAddClickOut); } else { document.removeEventListener('click', this._onClickOut, false); } QuickMenu.runningInstance = null; }; QuickMenuInstance.prototype._onSizeNeedUpdate = function () { Object(ACore["b" /* $$ */])('VMenuItem'.toLowerCase(), QuickMenu.$elt).forEach(e => { if (e.autoFixParentSize) e.autoFixParentSize(); }); var screenSize = Object(Dom["d" /* getScreenSize */])(); var eltBound = this.elt.getBoundingClientRect(); var outRect = Object(Dom["g" /* traceOutBoundingClientRect */])(this.elt); var isOut = false; if (eltBound.left > outRect.right || eltBound.right < outRect.left || eltBound.top > outRect.bottom || eltBound.bottom < outRect.top) isOut = true; if (isOut || (!eltBound.width && !eltBound.height)) { setTimeout(() => { this.close(); }, 0); } var aTop = eltBound.bottom; var aBottom = screenSize.height - eltBound.top; QuickMenu.$elt.addStyle('--available-height', (Math.max(aTop, aBottom) - 10) + 'px'); }; QuickMenuInstance.prototype.toggle = function () { if (this.state === "OPEN") { this.close(); } else if (this.state === 'CLOSE') { this.open(); } }; QuickMenuInstance.prototype.getAnchor = function () { var menuAnchors; var anchor = this.opt.getAnchor ? this.opt.getAnchor() : this.opt.anchor; if (typeof anchor == 'number') { menuAnchors = [anchor]; } else if (anchor instanceof Array) { menuAnchors = anchor; } else if (anchor === 'modal') { menuAnchors = 'modal'; } else { menuAnchors = QuickMenu.PRIORITY_ANCHORS; } return menuAnchors; }; QuickMenu.PRIORITY_ANCHORS = [0, 3, 7, 4, 1, 2, 6, 5]; QuickMenu.$elt = QuickMenu_('quickmenu'); /*** * * @type {Follower} */ QuickMenu.$follower = QuickMenu_({ tag: js_Follower.tag, class: 'absol-context-menu-anchor', child: QuickMenu.$elt, on: { preupdateposition: function () { var bound = this.getBoundingClientRect(); var outBound = Object(Dom["g" /* traceOutBoundingClientRect */])(this); if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) { QuickMenu.close(QuickMenu._session); } } } }); /*** * * @type {null|QuickMenuInstance} */ QuickMenu.runningInstance = null; QuickMenu._session = Math.random() * 10000000000 >> 0; QuickMenu._menuListener = undefined; QuickMenu.$elt.on('press', function (event) { if (QuickMenu.runningInstance) QuickMenu.runningInstance.onSelect(cleanMenuItemProperty(event.menuItem)); if (QuickMenu._menuListener) QuickMenu._menuListener(cleanMenuItemProperty(event.menuItem)); }); QuickMenu.show = function (element, menuProps, anchor, menuListener, darkTheme) { var instance = new QuickMenuInstance(element, { menuProps: menuProps, anchor: anchor, onSelect: menuListener, darkTheme: darkTheme }); instance.open(); }; QuickMenu.close = function (session) { if (QuickMenu.runningInstance && QuickMenu.runningInstance.id === session) QuickMenu.runningInstance.close(); }; QuickMenu.showWhenClick = function (element, menuProps, anchor, menuListener, darkTheme) { return new QuickMenuInstance(element, { menuProps: menuProps, anchor: anchor, onSelect: menuListener, darkTheme: darkTheme }); }; /** * @typedef {Object} QuickMenuAdaptor * @property {Function} getFlowedElement default is trigger * @property {Function} getMenuProps define menuProps if un-change * @property {Function} getAnchor default is 'auto', define anchor if un-change * @property {Function} onClose callback * @property {Function} onOpen callback * @property {Function} onSelect calback * @property {Function} isDarkTheme default is false, define darkThem if un-change * * * @typedef {Object} QuickMenuDataHolder * @property {Function} remove * * @param {Element} trigger * @param {QuickMenuAdaptor} adaptor * @returns {QuickMenuDataHolder} */ QuickMenu.toggleWhenClick = function (trigger, adaptor) { return new QuickMenuInstance(trigger, adaptor); }; /* harmony default export */ var js_QuickMenu = (QuickMenu); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/quickpath.css var quickpath = __webpack_require__(166); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/QuickPath.js var QuickPath_ = ACore["d" /* default */]._; var QuickPath_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function QuickPath() { this._holders = []; } /** * @type {QuickPath} */ QuickPath.eventHandler = {}; /*** * @this QuickPath * @param event */ QuickPath.eventHandler.click = function (event) { var button = this._fileButton(event.target) if (button) this.pressButton(button); }; QuickPath.tag = 'QuickPath'.toLowerCase(); /** * @returns {QuickPath} */ QuickPath.render = function () { return QuickPath_({ class: 'absol-quick-path', extendEvent: ['change', 'press'] }); }; QuickPath.prototype.updatePath = function () { this.clearChild(); var self = this; this._holders = this._path.map(function (data, index) { var holder = self._createButton(data, index); holder.buttom.addTo(self); return holder; }) }; QuickPath.prototype._createButton = function (pathItem, index) { var buttom = QuickPath_({ tag: 'expnode', class: 'absol-quick-path-btn', attr: { 'data-index': '' + index } }); buttom.status = 'close'; buttom.name = pathItem.name; if (pathItem.icon) { buttom.icon = pathItem.icon; } if (pathItem.iconSrc) { buttom.icon = { tag: 'img', props: { src: pathItem.iconSrc } }; } var thisQuickpath = this; if (pathItem.items) { js_QuickMenu.toggleWhenClick(buttom, { getAnchor: function () { return [1, 2, 6, 5]; }, getMenuProps: function () { return { extendStyle: { fontSize: buttom.getComputedStyleValue('font-size') }, items: pathItem.items.map(function (it, menuIndex) { var res = { text: it.name, menuIndex: menuIndex, icon: it.iconSrc ? { tag: 'img', props: { src: it.iconSrc } } : (it.icon || undefined), extendStyle: it.extendStyle || {}, extendClass: it.extendClass || [], } return res; }) } }, onOpen: function () { buttom.status = 'open'; thisQuickpath.emit('press', { target: thisQuickpath, pathItem: pathItem, index: index }, thisQuickpath); }, onClose: function () { buttom.status = 'close'; }, onSelect: function (item) { var dataItem = pathItem.items[item.menuIndex]; thisQuickpath.emit('change', { target: thisQuickpath, pathItem: pathItem, item: dataItem, index: index }, thisQuickpath); thisQuickpath.status = 'close'; } }) } else { buttom.on('click', function () { this.emit('press', { target: thisQuickpath, pathItem: pathItem, index: index }, thisQuickpath); }); } return { buttom: buttom }; } QuickPath.prototype.push = function (item) { this.path.push(item); var holder = this._createButton(item, this.path.length - 1); this.addChild(holder, buttom); this._holders.push(holder); }; QuickPath.prototype.clear = function () { this.path = []; this._holders = []; } QuickPath.prototype.pop = function () { //todo var res = this.path.pop(); var button = QuickPath_$('button[data-index="' + this.path.length + '"]'); if (button) button.remove(); return res; }; QuickPath.property = {}; /** * @typedef PathElement * @property {String} name * @property {String} icon * @property {Array<String>} items * */ QuickPath.property.path = { /** * @param {Array<PathElement>} value */ set: function (value) { this._path = value || []; this.updatePath(); }, get: function () { return this._path || []; } }; QuickPath.property.textPath = { get: function () { return this.path.join('/'); } }; ACore["d" /* default */].install('quickpath', QuickPath); /* harmony default export */ var js_QuickPath = (QuickPath); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/radiobutton.css var radiobutton = __webpack_require__(168); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/RadioButton.js var RadioButton_ = ACore["d" /* default */]._; var RadioButton_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function RadioButton() { var thisRB = this; this.defineEvent('change'); this.$input = RadioButton_$('input', this).on('change', this.notifyChange.bind(this)); OOP["a" /* default */].drillProperty(this, this.$input, ['value', 'checked']); } RadioButton.tag = 'radiobutton'; RadioButton.radioProto = RadioButton_( '<svg class="absol-radio-icon" width="20" height="20" version="1.1" viewBox="0 0 5.2917 5.2917"' + ' xmlns="http://www.w3.org/2000/svg">' + ' <g transform="translate(0 -291.71)">' + ' <circle class="bound" cx="2.6458" cy="294.35" r="2.4626" style="stroke-opacity:.99497;stroke-width:.26458;" />' + ' <circle class="dot" cx="2.6458" cy="294.35" r= "0.92604" style="fill-rule:evenodd;" />' + ' </g>' + '</svg>' ) RadioButton.render = function () { return RadioButton_({ tag:'label', class: 'absol-radio-button', child: [ { tag: 'input', attr: { type: 'radio' } }, RadioButton.radioProto.cloneNode(true) ] }); }; RadioButton.prototype.notifyChange = function () { this.emit('change', { type: 'change', checked: this.checked, target: this }, this); }; RadioButton.prototype.getAllFriend = function () { return Radio.getAllByName(this.name); }; RadioButton.attribute = { checked: { set: function (value) { if (value == 'false' || value == null) { this.checked = false; } else { this.checked = true; } }, get: function () { return this.checked ? 'true' : 'false' }, remove: function () { this.checked = false; } }, disabled: { set: function (value) { if (value == 'false' || value == null) { this.disabled = false; } else { this.disabled = true; } }, get: function () { return this.disabled ? 'true' : 'false' }, remove: function () { this.disabled = false; } }, name: { set: function (value) { this.name = value; }, get: function () { return this.name; }, remove: function () { this.name = null; } } } RadioButton.property = { name: { set: function (name) { if (name == null) this.$input.removeAttribute('name'); else this.$input.setAttribute('name', name); }, get: function () { return this.$input.getAttribute('name'); } }, disabled: { set: function (value) { this.$input.disabled = !!value; if (value) { this.addClass('disabled'); } else { this.removeClass('disabled'); } }, get: function () { return this.$input.disabled; } } }; RadioButton.getAllByName = function (name) { return (document.getElementsByTagName('input') || []).filter(function (elt) { return elt.getAttribute('type') == 'radio' && elt.getAttribute('name') == name; }); }; RadioButton.getValueByName = function (name) { var inputs = RadioButton.getAllByName(name); var res = null; var input; for (var i = 0; i < inputs.length; ++i) { input = inputs[i]; if (input.checked) { res = input.value; } } return res; }; RadioButton.autoReplace = function () { var placeHolders = Array.prototype.slice.call(document.getElementsByTagName(this.tag)); var ph; var attOfPH; var attrs; var style; var classList; var attNode; var attrName, attrValue; var props; for (var i = 0; i < placeHolders.length; ++i) { ph = placeHolders[i]; attOfPH = ph.attributes; classList = []; style = {}; attrs = {}; props = {}; for (var j = 0; j < attOfPH.length; ++j) { attNode = attOfPH[j]; attrName = attNode.nodeName; attrValue = attNode.nodeValue; if (attrName == 'style') { attrValue.trim().split(';').reduce(function (style, prop) { var p = prop.split(':'); if (p.length == 2) { style[p[0].trim()] = p[1].trim(); } return style; }, style); } else if (attrName == 'class') { classList = attrValue.trim().split(/\s+/); } else if (attrName == 'onchange') { props.onchange = new Function('event', 'sender', attrValue); } else { attrs[attrName] = attrValue; } } var newElt = RadioButton_({ tag: this.tag, attr: attrs, class: classList, style: style, props: props }); RadioButton_$(ph).selfReplace(newElt); } }; RadioButton.initAfterLoad = function (){ Dom["b" /* default */].documentReady.then(function (){ RadioButton.autoReplace(); }) }; ACore["d" /* default */].install('RadioButton'.toLowerCase(), RadioButton); /* harmony default export */ var js_RadioButton = (RadioButton); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/radio.css var css_radio = __webpack_require__(170); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Radio.js var Radio_ = ACore["d" /* default */]._; var Radio_$ = ACore["d" /* default */].$; var Radio_$$ = ACore["d" /* default */].$$; var _svg = HTML5_Svg.ShareInstance._; /*** * @extends AElement * @constructor */ function Radio_Radio() { var thisR = this; this.defineEvent('change'); this.$input = Radio_$('input', this) .on('change', this.notifyChange.bind(this)); this.$labels = Radio_$$('span', this); OOP["a" /* default */].drillProperty(this, this.$input, ['value', 'checked']); } Radio_Radio.tag = 'radio'; Radio_Radio.radioProto = Radio_( '<svg class="absol-radio-icon" width="20" height="20" version="1.1" viewBox="0 0 5.2917 5.2917"' + ' xmlns="http://www.w3.org/2000/svg">' + ' <g transform="translate(0 -291.71)">' + ' <circle class="bound" cx="2.6458" cy="294.35" r="2.4626" style="stroke-opacity:.99497;stroke-width:.26458;" />' + ' <circle class="dot" cx="2.6458" cy="294.35" r= "0.92604" style="fill-rule:evenodd;" />' + ' </g>' + '</svg>' ) Radio_Radio.render = function () { return Radio_({ tag: 'label', class: 'absol-radio', child: [ { tag: 'input', attr: { type: 'radio' } }, { tag: 'span', class: 'absol-radio-left-label' }, Radio_Radio.radioProto.cloneNode(true), { tag: 'span', class: 'absol-radio-right-label' } ] }); }; Radio_Radio.prototype.notifyChange = function () { this.emit('change', { type: 'change', checked: this.checked, target: this }, this); }; Radio_Radio.prototype.getAllFriend = function () { return Radio_Radio.getAllByName(this.name); }; Radio_Radio.attribute = js_RadioButton.attribute; Radio_Radio.property = { name: { set: function (name) { this.$input.setAttribute('name', name); }, get: function () { return this.$input.getAttribute('name'); } }, text: { set: function (value) { value = (value || '').trim(); this.$labels[0].clearChild(); this.$labels[1].clearChild(); if (value) { this.$labels[0].addChild(Radio_({ text: value })); this.$labels[1].addChild(Radio_({ text: value })); } }, get: function () { return this.$labels[0].firstChild.data; } }, disabled: { set: function (value) { this.$input.disabled = !!value; if (value) { this.addClass('disabled'); } else { this.removeClass('disabled'); } }, get: function () { return this.$input.disabled; } } }; Radio_Radio.getAllByName = function (name) { return (Array.apply(null, document.getElementsByTagName('input')) || []).filter(function (elt) { return elt.getAttribute('type') == 'radio' && elt.getAttribute('name') == name; }); }; Radio_Radio.getValueByName = function (name) { var inputs = Radio_Radio.getAllByName(name); var res = null; var input; for (var i = 0; i < inputs.length; ++i) { input = inputs[i]; if (input.checked) { res = input.value; } } return res; }; ACore["d" /* default */].install(Radio_Radio); /* harmony default export */ var js_Radio = (Radio_Radio); var radioImageCache = {}; ShareSerializer.addHandlerBefore({ match: (elt, scope, stack) => { if ((elt.hasClass('absol-radio-icon') || elt.hasClass('as-checkbox-input-check-icon')) && (elt.parentElement.hasClass('absol-radio') || elt.parentElement.hasClass('absol-radio-button') || elt.parentElement.hasClass('as-checkbox-input'))) { return true; } return false; }, exec: (printer, elt, scope, stack, accept) => { var type = elt.hasClass('absol-radio-icon') ? 'radio' : 'check'; var fontSize = elt.getFontSize(); var checked = !!elt.parentElement.__origin__.checked; var disabled = !!elt.parentElement.__origin__.disabled; var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); if (bound.width === 0) return; var rect = bound.clone(); rect.x -= printer.O.x; rect.y -= printer.O.y; var key = type + fontSize + checked + disabled; var res; if (radioImageCache[key]) { res = radioImageCache[key]; } else { res = HTML5_Svg.svgToCanvas(elt.__origin__).catch(err => { console.error(err); }); radioImageCache[key] = res; } res.elt = elt; printer.image(res, rect); }, id: 'Radio' }, 'SVG'); // CONCATENATED MODULE: ./node_modules/absol/src/Network/XHR.js var XHR = {}; XHR.makeHttpObject = function () { try { return new XMLHttpRequest(); } catch (error) { } try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (error) { } try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (error) { } throw new Error("Could not create HTTP request object."); }; /*** * * @param {String} url * @param {String} body * @param {String} responseType * @param {Function} success * @param {Function} failure * @returns {Promise} */ XHR.getRequest = function (url, props, success, failure) { return new Promise(function (rs, rj) { var request = XHR.makeHttpObject(); request.open("GET", url, true); if (typeof props == 'string') request.responseType = props || ''; else if (props && (typeof props == 'object')) { Object.assign(request, props); } request.send(null); request.onreadystatechange = function () { if (request.readyState == 4) { if (request.status == 200) { var response = request.response; success && success(response); rs(response); } else { failure && failure(request.status, request.statusText); rj(request.status); } } }; request.onerror = function () { failure && failure(request.status, request.statusText); rj(new Error(request.status + request.statusText)); }; }); }; XHR.postRepquest = function (url, payload, props, headers, success, failure) { return new Promise(function (rs, rj) { var method = "POST"; var shouldBeAsync = true; var request = XHR.makeHttpObject(); request.onreadystatechange = function () { if (request.readyState == 4) { if (request.status == 200) { success && success(request.response); rs(request.response); } else if (failure) { failure && failure(request.status, request.statusText); rj({ status: request.status, statusText: request.statusText }); } } }; request.onerror = function () { failure && failure(request.status, request.statusText); rj(new Error(request.status + request.statusText)); }; request.open(method, url, shouldBeAsync); if (typeof props == 'string') request.responseType = props || ''; else if (props && (typeof props == 'object')) { Object.assign(request, props); } headers = headers || {}; headers["Content-Type"] = headers["Content-Type"] || "application/json;charset=UTF-8"; Object.keys(headers).forEach(function (key) { request.setRequestHeader(key, headers[key]); }); request.send(payload); }); }; XHR.request = function (method, url, props, headers, body, successCallback, failureCallback) { return new Promise(function (rs, rj) { var shouldBeAsync = true; var request = new XMLHttpRequest(); request.onreadystatechange = function () { if (request.readyState == 4) { if (request.status == 200) { successCallback && successCallback(request.response); rs(request.response); } else { failureCallback && failureCallback(request.status, request.statusText); rj({ status: request.status, statusText: request.statusText }); } } }; request.onerror = function () { var error = new Error("Network Error!"); if (failureCallback) failureCallback(error); rj(error); }; request.open(method, url, shouldBeAsync); if (typeof props == 'string') request.responseType = props || ''; else if (props && (typeof props == 'object')) { Object.assign(request, props); } headers = headers || {}; headers["Content-Type"] = headers["Content-Type"] || "application/json;charset=UTF-8"; Object.keys(headers).forEach(function (key) { request.setRequestHeader(key, headers[key]); }); request.send(body); }); }; /* harmony default export */ var Network_XHR = (XHR); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/RemoteSvg.js var RemoteSvg_ = ACore["d" /* default */]._; var RemoteSvg_$ = ACore["d" /* default */].$; function RemoteSvg() { } RemoteSvg.tag = 'RemoteSvg'.toLowerCase(); RemoteSvg.render = function () { return RemoteSvg_('svg').defineEvent('load'); }; RemoteSvg.property = { src: { set: function (value) { this._src = value; var self = this; RemoteSvg.loadIcon(value).then(function (data) { self.emit('load', { target: self, src: value, data: data }, self); self.attr(data.attr); self.init(data.props); }); }, get: function () { return this._name; } } }; RemoteSvg.attribute = { src: { set: function (value) { }, get: function () { }, remove: function () { } } }; RemoteSvg.__cache__ = {}; RemoteSvg.__div_parser__ = document.createElement('div'); RemoteSvg.loadIcon = function (path) { if (RemoteSvg.__cache__[path]) { return RemoteSvg.__cache__[path]; } else { RemoteSvg.__cache__[path] = Network_XHR.getRequest(path, 'text').then(function (result) { RemoteSvg.__div_parser__.innerHTML = result; var svgElt = RemoteSvg_$('svg', RemoteSvg.__div_parser__); var res = { attr: {}, props: {} }; if (svgElt) { Array.prototype.forEach.call(svgElt.attributes, function (attribute) { res.attr[attribute.name] = attribute.value; }); res.props.innerHTML = svgElt.innerHTML; } return res; }, function () { return {}; }); return RemoteSvg.__cache__[path]; } }; ACore["d" /* default */].install(RemoteSvg); /* harmony default export */ var js_RemoteSvg = (RemoteSvg); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/resizebox.css var resizebox = __webpack_require__(172); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ResizeBox.js var ResizeBox_ = ACore["d" /* default */]._; var ResizeBox_$ = ACore["d" /* default */].$; /*** * @extends Hanger * @constructor */ function ResizeBox() { this.on({ draginit: this.eventHandler.rbDragInit, dragdeinit: this.eventHandler.rbDragDeinit }); this.hangon = 3; this._mousedownEventData = undefined; this._mousemoveEventData = undefined; this._lastClickTime = 0; } ResizeBox.tag = 'ResizeBox'.toLowerCase(); ResizeBox.render = function () { return ResizeBox_({ tag: js_Hanger.tag, class: 'as-resize-box', extendEvent: ['beginmove', 'endmove', 'moving', 'click', 'dblclick'],//override click event child: { class: 'as-resize-box-body', child: [ '.as-resize-box-dot.left-top', '.as-resize-box-dot.top', '.as-resize-box-dot.right-top', '.as-resize-box-dot.right', '.as-resize-box-dot.right-bottom', '.as-resize-box-dot.bottom', '.as-resize-box-dot.left-bottom', '.as-resize-box-dot.left' ] } }); }; ResizeBox.eventHandler = {}; ResizeBox.eventHandler.rbDragInit = function (event) { if (Object(EventEmitter["f" /* isMouseRight */])(event.originEvent)) { event.cancel(); return; } var target = event.target; if (!target.attr) return; if (!target.hasClass('as-resize-box-dot') && !target.hasClass('as-resize-box-body')) return; var optionNames = event.target.attr('class').match(/body|left|top|right|bottom/g); if (optionNames.length === 0) return; this._mouseOptionNames = optionNames; this._mouseOptionDict = this._mouseOptionNames.reduce((ac, cr) => { ac[cr] = true; return ac }, {}); this.on({ drag: this.eventHandler.rbDrag, dragend: this.eventHandler.rbDragEnd, dragstart: this.eventHandler.rbDragStart }); this._dragged = false; }; ResizeBox.eventHandler.rbDragDeinit = function (event) { this.off({ drag: this.eventHandler.rbDrag, dragend: this.eventHandler.rbDragEnd, dragstart: this.eventHandler.rbDragStart }); var now = new Date().getTime(); if (!this._dragged) { if (now - this._lastClickTime < 400) { this.emit('dblclick', Object.assign({}, event, { type: 'dblclick' }), this); this._lastClickTime = 0; } else { this.emit('click', Object.assign({}, event, { type: 'click' }), this); this._lastClickTime = now; } } }; ResizeBox.eventHandler.rbDrag = function (event) { if (this._mousedownEventData.option.body && !this.canMove) return; this._dragged = true; event.preventDefault(); this._mousemoveEventData = { clientX: event.clientX, clientY: event.clientY, clientX0: this._mousedownEventData.clientX, clientY0: this._mousedownEventData.clientY, clientDX: event.clientX - this._mousedownEventData.clientX, clientDY: event.clientY - this._mousedownEventData.clientY, target: this, originEvent: event, option: this._mousedownEventData.option, type: 'moving', begin: true }; this.emit('moving', this._mousemoveEventData, this); }; ResizeBox.eventHandler.rbDragStart = function (event) { event.preventDefault(); this._optionNames = event.target.attr('class').match(/body|left|top|right|bottom/g); this._dragged = true; ResizeBox_$(document.body) .addClass('as-resize-box-overiding') .addClass(this._optionNames.join('-')); var option = this._optionNames.reduce(function (ac, key) { ac[key] = true; return ac; }, {}); this._mousedownEventData = { clientX: event.clientX, clientY: event.clientY, target: this, originEvent: event, prevented: false, preventDefault: function () { this.prevented = true; }, option: option, begin: false, type: 'beginmove' }; this.emit('beginmove', this._mousedownEventData, this); }; ResizeBox.eventHandler.rbDragEnd = function (event) { document.body.classList.remove('as-resize-box-overiding') document.body.classList.remove(this._optionNames.join('-')); this._mousefinishEventData = { clientX: event.clientX, clientY: event.clientY, clientX0: this._mousedownEventData.clientX, clientY0: this._mousedownEventData.clientY, clientDX: event.clientX - this._mousedownEventData.clientX, clientDY: event.clientY - this._mousedownEventData.clientY, target: this, originEvent: event, option: this._mousedownEventData.option, type: 'endmove' }; this.emit('endmove', this._mousefinishEventData, this); }; ResizeBox.property = {}; ResizeBox.property.canMove = { set: function (value) { if (value) { this.addClass('as-can-move'); } else { this.removeClass('as-can-move'); } }, get: function () { return this.hasClass('as-can-move'); } }; ResizeBox.property.canResize = { set: function (value) { if (value) { this.addClass('as-can-resize'); } else { this.removeClass('as-can-resize'); } }, get: function () { return this.hasClass('as-can-resize'); } }; ResizeBox.property.canClick = { set: function (value) { if (value) { this.addClass('as-can-click'); } else { this.removeClass('as-can-click'); } }, get: function () { return this.hasClass('as-can-click'); } }; ACore["d" /* default */].install(ResizeBox); /* harmony default export */ var js_ResizeBox = (ResizeBox); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/searcher.css var searcher = __webpack_require__(174); // CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/spinner.tpl /* harmony default export */ var spinner = ("<svg class=\"as-spinner-ico\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"xMidYMid\">\n <g><circle cx=\"73.801\" cy=\"68.263\" fill=\"#e15b64\" r=\"4\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"0s\"></animateTransform>\n </circle><circle cx=\"68.263\" cy=\"73.801\" fill=\"#f47e60\" r=\"4\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.062s\"></animateTransform>\n </circle><circle cx=\"61.481\" cy=\"77.716\" fill=\"#f8b26a\" r=\"4\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.125s\"></animateTransform>\n </circle><circle cx=\"53.916\" cy=\"79.743\" fill=\"#abbd81\" r=\"4\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.187s\"></animateTransform>\n </circle><circle cx=\"46.084\" cy=\"79.743\" fill=\"#849b87\" r=\"4\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.25s\"></animateTransform>\n </circle><circle cx=\"38.519\" cy=\"77.716\" fill=\"#6492ac\" r=\"4\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.312s\"></animateTransform>\n </circle><circle cx=\"31.737\" cy=\"73.801\" fill=\"#637cb5\" r=\"4\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.375s\"></animateTransform>\n </circle><circle cx=\"26.199\" cy=\"68.263\" fill=\"#6a63b6\" r=\"4\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.437s\"></animateTransform>\n </circle><animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;0 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\"></animateTransform></g>\n</svg>"); // CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/mdi_store_marker_outline.tpl /* harmony default export */ var mdi_store_marker_outline = ("<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M20 6H4V4H20V6M14.3 12C13.5 12.96 13 14.18 13 15.5C13 16.64 13.43 17.86 14 19V20H4V14H3V12L4 7H20L20.7 10.5C20.04 10.18 19.32 10 18.56 10L18.36 9H5.64L5.04 12H14.3M12 14H6V18H12V14M22 15.5C22 18.1 18.5 22 18.5 22S15 18.1 15 15.5C15 13.6 16.6 12 18.5 12S22 13.6 22 15.5M19.7 15.6C19.7 15 19.1 14.4 18.5 14.4S17.3 14.9 17.3 15.6C17.3 16.2 17.8 16.8 18.5 16.8S19.8 16.2 19.7 15.6Z\" />\n</svg>"); // CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/font_color.tpl /* harmony default export */ var font_color = ("<svg height=\"100%\" width=\"100%\" viewBox=\"0,0,2048,2048\" focusable=\"false\">\n<path style=\"fill:currentColor\" shape-rendering=\"optimizeQuality\" type=\"path\" class=\"as-font-color-text\" d=\"M 1504 1408 l -156 -392 h -603 l -152 392 h -145 l 536 -1408 h 132 l 533 1408 m -602 -1236 h -4 l -254 725 h 515 m 744 639 v 512 h -2048 v -512 z\"></path>\n<path shape-rendering=\"optimizeQuality\" type=\"path\" class=\"as-font-color-contract\" d=\"M 2048 1536 v 512 h -2048 v -512 m 1920 128 h -1792 v 256 h 1792 z\"></path>\n<path shape-rendering=\"optimizeQuality\" type=\"path\" class=\"as-font-color-value\" d=\"M 1984 1984 h -1920 v -384 h 1920 z\"></path>\n</svg>"); // CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/insert_col_left.tpl /* harmony default export */ var insert_col_left = ("<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path style=\"fill:currentColor\" d=\"M20 3c.552 0 1 .448 1 1v16c0 .552-.448 1-1 1h-6c-.552 0-1-.448-1-1V4c0-.552.448-1 1-1h6zm-1 2h-4v14h4V5zM6 7c2.761 0 5 2.239 5 5s-2.239 5-5 5-5-2.239-5-5 2.239-5 5-5zm1 2H5v1.999L3 11v2l2-.001V15h2v-2.001L9 13v-2l-2-.001V9z\"/>\n</svg>"); // CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/insert_col_right.tpl /* harmony default export */ var insert_col_right = ("<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path style=\"fill:currentColor\" d=\"M10 3c.552 0 1 .448 1 1v16c0 .552-.448 1-1 1H4c-.552 0-1-.448-1-1V4c0-.552.448-1 1-1h6zM9 5H5v14h4V5zm9 2c2.761 0 5 2.239 5 5s-2.239 5-5 5-5-2.239-5-5 2.239-5 5-5zm1 2h-2v1.999L15 11v2l2-.001V15h2v-2.001L21 13v-2l-2-.001V9z\"/>\n</svg>"); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/icons.css var icons = __webpack_require__(176); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Icons.js function SpinnerIco() { return ACore["d" /* default */]._(spinner); } SpinnerIco.tag = 'SpinnerIco'.toLowerCase(); ACore["d" /* default */].install(SpinnerIco); function InsertColLeftIcon() { return ACore["d" /* default */]._(insert_col_left); } InsertColLeftIcon.tag = 'InsertColLeftIcon'.toLowerCase(); ACore["d" /* default */].install(InsertColLeftIcon); function InsertColRightIcon() { return ACore["d" /* default */]._(insert_col_right); } InsertColRightIcon.tag = 'InsertColRightIcon'.toLowerCase(); ACore["d" /* default */].install(InsertColRightIcon); function MdiStoreMarkerOutline() { return ACore["d" /* default */]._(mdi_store_marker_outline); } MdiStoreMarkerOutline.tag = 'mdi-store-marker-outline'; ACore["d" /* default */].install(MdiStoreMarkerOutline); function FontColorIcon() { this._value = '#000000'; this.$contract = Object(ACore["a" /* $ */])('.as-font-color-contract', this); this.$value = Object(ACore["a" /* $ */])('.as-font-color-value', this); this.value = 'cyan'; } FontColorIcon.tag = 'FontColorIcon'.toLowerCase(); FontColorIcon.render = function () { return Object(ACore["c" /* _ */])(font_color); }; FontColorIcon.property = {}; FontColorIcon.property.value = { set: function (value) { var cValue; if (typeof value === "string") { try { cValue = Color_Color.parse(value); value = cValue.toString('hex6'); } catch (err) { value = "#000000"; cValue = Color_Color.parse(value); } } else if (value instanceof Color_Color) { cValue = value; value = value.toString('hex6'); } else { value = "#000000"; cValue = Color_Color.parse(value); } this._value = value; var hColor = cValue.getContrastYIQ(); this.$contract.addStyle('fill', hColor.toString("hex6")); this.$value.addStyle('fill', this._value.toString('hex6')); }, get: function () { return this._value; } }; // CONCATENATED MODULE: ./node_modules/absol/src/HTML5/LanguageSystem.js /*** * @typedef LanguageSystemExtension * @property {function(key: string, code?: string): (string | null)} getText */ /**** * * @constructor */ function LanguageSystem() { this.data = {}; this.code = navigator.language || navigator.userLanguage; /*** * * @type {LanguageSystemExtension[]} * @private */ this._extensions = []; } LanguageSystem.prototype.notifyLanguageChange = function () { var sizeChange = false; function visit(elt) { if (elt.onlanguagechange) { try { elt.onlanguagechange(); sizeChange = true; } catch (err) { Object(safeThrow["a" /* default */])(err); } if (elt.childNodes && elt.childNodes.length > 0) { Array.prototype.forEach.call(elt.childNodes, visit); } } } visit(document.body); if (sizeChange) ResizeSystem["a" /* default */].update(); }; /*** * * @param {ChildNode | Text | HTMLElement | Element} node */ LanguageSystem.prototype.bind = function (node, key) { if (node.nodeType === 1) { this.bindTextNode(node, key); } else if (node.nodeType === 3) { this.bindElement(node, key); } }; /*** * * @param {Text | {__as_language_key: string}} node * @param {string} key */ LanguageSystem.prototype.bindTextNode = function (node, key) { node.__as_language_key = key; node.onlanguagechange = textNodeLanguageChangeHandler; }; /*** * * @param {ChildNode | HTMLElement | Element | {__as_language_key: string}} node * @param {string} key */ LanguageSystem.prototype.bindElement = function (node, key) { node.__as_language_key = key; node.onlanguagechange = elementLanguageChangeHandler; }; /*** * * @param {string} key * @param {string} [code] */ LanguageSystem.prototype.getText = function (key, code) { var code = code || this.code; var res; var ex; for (var i = this._extensions.length - 1; i >= 0; --i) { ex = this._extensions[i]; res = ex.getText && ex.getText.apply(ex, arguments); if (res) break; } if (!res) { res = this.data[code] && this.data[code][key]; } return res || null; }; /*** * * @param {LanguageSystemExtension} ex */ LanguageSystem.prototype.addExtension = function (ex){ this._extensions.push(ex); }; var LangSys = new LanguageSystem(); function textNodeLanguageChangeHandler() { if (this.__as_language_key) { var newText = LangSys.getText(this.__as_language_key); if (newText && newText.trim) { this.data = newText; } } } function elementLanguageChangeHandler() { if (this.__as_language_key) { var newText = LangSys.getText(this.__as_language_key); if (newText && newText.trim) { var textNode; for (var i = 0; i < this.childNodes.length; ++i) { if (this.childNodes[i].nodeType === 1) { textNode = this.childNodes[i]; break; } } if (!textNode) { textNode = document.createTextNode(''); } textNode.data = newText; } } } /* harmony default export */ var HTML5_LanguageSystem = (LangSys); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Searcher.js var Searcher_ = ACore["d" /* default */]._; var Searcher_$ = ACore["d" /* default */].$; ACore["d" /* default */].creator['find-ico'] = function () { var res = Searcher_( '<svg class="find" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' + ' <g transform="matrix(-1 0 0 1 99.478 -193.73)">' + ' <path d="m62.128 199.18c-18.859 0-34.148 15.289-34.148 34.148 0 5.4138 1.26 10.533 3.5026 15.081 0.6886 1.3965 1.4698 2.7392 2.3357 4.02-1.9962 2.1685-31.467 31.596-31.404 33.295 0.21757 5.8346 4.9404 8.7289 9.464 7.855 1.3264-0.25627 30.938-30.639 31.774-31.529 1.3906 0.89633 2.8508 1.6948 4.3702 2.3848 4.2995 1.9526 9.0756 3.04 14.105 3.04 18.859 0 34.147-15.288 34.147-34.147 3e-6 -18.859-15.288-34.148-34.147-34.148zm0.49444 8.2454a26.067 26.067 0 0 1 26.068 26.067 26.067 26.067 0 0 1-26.068 26.068 26.067 26.067 0 0 1-26.067-26.068 26.067 26.067 0 0 1 26.067-26.067z"/>' + ' </g>' + '</svg>' ); return res; }; ACore["d" /* default */].creator['times-circle-ico'] = function () { var res = Searcher_( '<svg class="times" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">\ <g transform="translate(0,-197)">\ <path d="m49.979 236.2-14.231-14.231-10.696 10.696 14.257 14.257-14.351 14.351 10.737 10.737 14.292-14.292 14.292 14.292 10.761-10.761-14.257-14.257 14.316-14.316-10.725-10.725zm50.021 10.804a50 50 0 0 1-50 50 50 50 0 0 1-50-50 50 50 0 0 1 50-50 50 50 0 0 1 50 50z" />\ </g>\ </svg>' ); return res; }; /** * @extends {AElement} * @constructor */ function SearchTextInput() { var thisSTI = this; this.defineEvent(['change', 'modify', 'stoptyping']); this.eventHandler = OOP["a" /* default */].bindFunctions(this, SearchTextInput.eventHandler); this.$button = Searcher_$('button', this); this.$input = Searcher_$('input', this); ['keyup', 'keydown', 'focus', 'blur'].forEach(function (evName) { thisSTI.defineEvent(evName); thisSTI.$input.on(evName, function (event) { thisSTI.emit(evName, event, thisSTI); }); }); this.$input.on('change', this.eventHandler.inputChange); this.$input.on('keyup', this.eventHandler.inputKeyUp); this.$button.on('click', function (event) { thisSTI.$input.value = ''; thisSTI.eventHandler.inputKeyUp(event); setTimeout(function () { thisSTI.focus(); }, 50); }); } SearchTextInput.tag = 'SearchTextInput'.toLowerCase(); SearchTextInput.render = function () { return Searcher_( { class: 'absol-search-text-input', child: [ { class: 'absol-search-text-input-container', child: { tag: 'input', attr: { type: 'search', placeholder: HTML5_LanguageSystem.getText('txt_search')|| 'Search...' } } }, { class: 'absol-search-text-button-container', child: { tag: 'button', child: ['find-ico', 'times-circle-ico', { tag:SpinnerIco.tag, style:{margin: 0} }] } } ] } ); }; SearchTextInput.property = { value: { set: function (value) { value = value || ''; this.$input.value = value; this._lastTextModified = value; if (this.value.length > 0) { this.addClass('searching'); } else { this.removeClass('searching'); } }, get: function () { return this.$input.value; } }, placeholder: { set: function (value) { this.$input.attr('placeholder', value); }, get: function () { return this.$placeholder.getAttribute('placeholder'); } } }; SearchTextInput.property.waiting = { set: function (value) { value = value || false; this._waiting = value; if (value) { this.addClass('as-waiting'); } else { this.removeClass('as-waiting'); } }, get: function () { return this._waiting || false; } } SearchTextInput.prototype.focus = function () { this.$input.focus(); }; SearchTextInput.prototype.blur = function () { this.$input.blur(); }; SearchTextInput.eventHandler = {}; SearchTextInput.eventHandler.inputChange = function (event) { event.value = this.value; if (typeof this.onchange == 'function') { this.onchange(event, this); } this.emit('change', event); }; SearchTextInput.eventHandler.inputKeyUp = function (event) { if (this._lastTextModified != this.value) { if (this.value.length > 0) { this.addClass('searching'); } else { this.removeClass('searching'); } event.value = this.value; if (typeof this.onchange == 'function') { this.onchange(event, this); } this.emit('modify', event); if (this._updateTimeOut !== undefined) { clearTimeout(this._updateTimeOut); this._updateTimeOut = undefined; } this._updateTimeOut = setTimeout(function () { this.emit('stoptyping', event); }.bind(this), 500); this._lastTextModified = this.value; } }; ACore["d" /* default */].creator.searchcrosstextinput = function () { var res = Searcher_('searchtextinput', true); return res; }; ACore["d" /* default */].creator.searchtextinput = SearchTextInput; /* harmony default export */ var Searcher = (SearchTextInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectbox.css var selectbox = __webpack_require__(178); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectmenu.css var selectmenu = __webpack_require__(30); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectMenu2.js ACore["d" /* default */].creator['dropdown-ico'] = function () { return Object(ACore["c" /* _ */])([ '<svg class="dropdown" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">', '<g transform="translate(0,-197)">', '<path d="m6.3152 218.09a4.5283 4.5283 0 0 0-3.5673 7.3141l43.361 55.641a4.5283 4.5283 0 0 0 7.1421 7e-3l43.496-55.641a4.5283 4.5283 0 0 0-3.5673-7.3216z" />', '</g>', '</svg>' ].join('')); }; /*** * @extends AElement * @constructor */ function SelectMenu() { this._value = null; this._lastValue = null; this.$holderItem = Object(ACore["a" /* $ */])('.absol-selectmenu-holder-item', this); this.$viewItem = Object(ACore["a" /* $ */])('.absol-selectmenu-holder-item selectlistitem', this); /*** * * @type {SelectListBox} */ this.$selectlistBox = Object(ACore["c" /* _ */])({ tag: 'selectlistbox', props: { anchor: [1, 6, 2, 5], strictValue: true }, on: { preupdateposition: this.eventHandler.preUpdateListPosition } }); this.widthLimit = this.$selectlistBox.widthLimit; this.addStyle('--as-width-limit', this.$selectlistBox.widthLimit + 'px'); var checkView = () => { if (this.isDescendantOf(document.body)) { setTimeout(checkView, 10000); } else { if (this.$selectlistBox.searchMaster) this.$selectlistBox.searchMaster.destroy(); } } setTimeout(checkView, 30000); this.$selectlistBox.on('pressitem', this.eventHandler.selectListBoxPressItem); this.$selectlistBox.followTarget = this; this.$selectlistBox.sponsorElement = this; OOP["a" /* default */].drillProperty(this, this.$selectlistBox, 'enableSearch'); OOP["a" /* default */].drillProperty(this, this, 'selectedvalue', 'value'); this.strictValue = true; this._lastValue = "NOTHING_VALUE"; this._isFocus = false; this.isFocus = false; this.on('mousedown', this.eventHandler.click, true); /*** * @name items * @type {[]} * @memberOf SelectMenu# */ } SelectMenu.tag = 'selectmenu'; SelectMenu.render = function () { return Object(ACore["c" /* _ */])({ class: ['absol-selectmenu', 'as-select-menu'], extendEvent: ['change'], attr: { tabindex: '1' }, child: [ { class: 'absol-selectmenu-holder-item', child: 'selectlistitem' }, { tag: 'button', class: 'absol-selectmenu-btn', child: ['dropdown-ico'] } ] }); }; SelectMenu.prototype.init = function (props) { props = props || {}; Object.keys(props).forEach(function (key) { if (props[key] === undefined) delete props[key]; }); if ('selectedvalue' in props) { props.value = props.selectedvalue; } if (!('value' in props)) { if (props.items && props.items.length > 0) props.value = typeof props.items[0] == 'string' ? props.items[0] : props.items[0].value; } var value = props.value; delete props.value; this.super(props); this.value = value; }; SelectMenu.prototype.updateItem = function () { var value = this._explicit(this._value); var selectedItems = this.$selectlistBox.findDisplayItemsByValue(value); var data; if (selectedItems.length >= 1) { data = selectedItems[0].item; this.$viewItem.data = data; if (data.text && measureText(data.text + '', '14px arial').width - 30 > this.widthLimit) { this.$viewItem.attr('title', data.text); } else this.$viewItem.attr('title', null); } else { this.$viewItem.data = { text: '', value: null }; this.$viewItem.attr('title', null); } }; SelectMenu.prototype.findItemsByValue = function (value) { return this.$selectlistBox.findItemsByValue(value); }; SelectMenu.prototype._explicit = function (value) { var items = this.$selectlistBox.findItemsByValue(value); if (items.length > 0 || !this.strictValue || this.items.length === 0) { return value; } else { return this.items[0].value; } }; SelectMenu.property = {}; SelectMenu.property.items = { set: function (items) { items = items || []; this.$selectlistBox.items = items; this.addStyle('--select-list-estimate-width', (this.$selectlistBox._estimateWidth) / 14 + 'em'); this.addStyle('--select-list-desc-width', (this.$selectlistBox._estimateDescWidth) / 14 + 'em'); this.updateItem(); }, get: function () { return this.$selectlistBox.items; } }; SelectMenu.property.value = { set: function (value) { this.$selectlistBox.values = [value]; this._lastValue = value; this._value = value; this.updateItem(); }, get: function () { return this._explicit(this._value); } }; /*** * * @type {SelectMenu|{}} */ SelectMenu.property.isFocus = { set: function (value) { if (value && (this.disabled || this.readOnly)) return; var thisSM = this; if (!this.items || this.items.length === 0) value = false;//prevent focus if (this._isFocus === value) return; this._isFocus = !!value; if (this._isFocus) { document.body.appendChild(this.$selectlistBox); this.$selectlistBox.domSignal.$attachhook.emit('attached'); var bound = this.getBoundingClientRect(); this.$selectlistBox.addStyle('min-width', bound.width + 'px'); this.$selectlistBox.refollow(); this.$selectlistBox.updatePosition(); setTimeout(function () { thisSM.$selectlistBox.focus(); document.addEventListener('click', thisSM.eventHandler.bodyClick); }, 100); this.$selectlistBox.viewListAtFirstSelected(); } else { document.removeEventListener('click', thisSM.eventHandler.bodyClick); this.$selectlistBox.selfRemove(); this.$selectlistBox.unfollow(); this.$selectlistBox.resetSearchState(); } }, get: function () { return this._isFocus; } }; SelectMenu.property.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } }, get: function () { return this.hasClass('as-disabled'); } }; SelectMenu.property.hidden = { set: function (value) { if (value) { this.addClass('as-hidden'); } else { this.removeClass('as-hidden'); } }, get: function () { return this.addClass('as-hidden'); } }; SelectMenu.property.selectedIndex = { get: function () { var selectedItems = this.$selectlistBox.findItemsByValue(this._value); if (selectedItems.length > 0) { return selectedItems[0].idx; } return -1; } }; SelectMenu.property.strictValue = { set: function (value) { if (value) { this.attr('data-strict-value', null); } else { this.attr('data-strict-value', 'false'); } this.updateItem(); }, get: function () { return !this.attr('data-strict-value') || (this.attr('data-strict-value') !== 'false' && this.attr('data-strict-value') !== '0'); } }; SelectMenu.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } }, get: function () { return this.hasClass('as-read-only'); } }; /** * @type {SelectMenu|{}} */ SelectMenu.eventHandler = {}; SelectMenu.eventHandler.click = function (event) { if (this.readOnly) return; if (EventEmitter["b" /* default */].isMouseRight(event)) return; if (EventEmitter["b" /* default */].hitElement(this.$selectlistBox, event)) return; this.isFocus = !this.isFocus; }; SelectMenu.eventHandler.bodyClick = function (event) { if (!EventEmitter["b" /* default */].hitElement(this, event) && !EventEmitter["b" /* default */].hitElement(this.$selectlistBox, event)) { setTimeout(function () { this.isFocus = false; }.bind(this), 5) } }; SelectMenu.eventHandler.selectListBoxPressItem = function (event) { this._value = event.data.value; this.$selectlistBox.values = [this._value]; this.updateItem(); if (this._lastValue !== this.value) { event.lastValue = this._lastValue; event.value = this.value; setTimeout(function () { this.emit('change', event, this); }.bind(this), 1) this._lastValue = this.value; } setTimeout(function () { this.isFocus = false; }.bind(this), 50) }; SelectMenu.eventHandler.preUpdateListPosition = function () { var bound = this.getBoundingClientRect(); var screenSize = Object(Dom["d" /* getScreenSize */])(); var availableTop = bound.top - 5; var availableBot = screenSize.height - 5 - bound.bottom; this.$selectlistBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px'); var outBound = Object(Dom["g" /* traceOutBoundingClientRect */])(this); if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) { this.isFocus = false; } }; ACore["d" /* default */].install(SelectMenu); /* harmony default export */ var SelectMenu2 = (SelectMenu); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectBoxItem.js var SelectBoxItem_ = ACore["d" /* default */]._; var SelectBoxItem_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function SelectBoxItem() { this._themeClassName = null; this.$text = SelectBoxItem_$('.absol-selectbox-item-text', this); this.$close = SelectBoxItem_$('.absol-selectbox-item-close', this); this.$close.on('click', this.eventHandler.clickClose); this.on('click', this.eventHandler.click); }; SelectBoxItem.tag = 'SelectBoxItem'.toLowerCase(); SelectBoxItem.render = function () { return SelectBoxItem_({ class: ['absol-selectbox-item'], extendEvent: ['close', 'press'], child: [ '.absol-selectbox-item-text', { class: 'absol-selectbox-item-close', child: '<span class="mdi mdi-close"></span>' } ] }); }; SelectBoxItem.eventHandler = {}; SelectBoxItem.eventHandler.clickClose = function (event) { this.emit('close', event); }; SelectBoxItem.eventHandler.click = function (event) { if (!EventEmitter["b" /* default */].hitElement(this.$close, event)) { this.emit('press', event, this); } }; SelectBoxItem.property = {}; SelectBoxItem.property.data = { set: function (value) { this._data = value; this.$text.clearChild(); this.$text.addChild(SelectBoxItem_('<span>' + this.text + '</span>')); if (value && value.desc) { this.attr('title', value.desc); } else { this.attr('title', undefined); } if (this._themeClassName) this.removeClass(this._themeClassName); this._themeClassName = null; if (this.theme) { this._themeClassName = 'as-theme-' + this.theme; this.addClass(this._themeClassName); } }, get: function () { return this._data; } }; SelectBoxItem.property.text = { get: function () { if (typeof this._data == 'string') return this._data; else return this._data.text; } }; SelectBoxItem.property.value = { get: function () { if (typeof this._data == 'string') return this._data; else return this._data.value; } }; SelectBoxItem.property.theme = { get: function () { return this._data.theme || null; } }; SelectBoxItem.property.active = { set: function (value) { if (value) { this.addClass('as-active'); } else { this.removeClass('as-active'); } }, get: function () { return this.hasClass('as-active'); } }; ACore["d" /* default */].install(SelectBoxItem); /* harmony default export */ var js_SelectBoxItem = (SelectBoxItem); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectlistbox.css var selectlistbox = __webpack_require__(181); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/listIndexing.js function depthIndexingByValue(items, context) { context = context || {idx: 0, dict: {}}; return items.reduce(function (ac, cr, idx) { var value = typeof cr === "string" ? cr : cr.value + ''; ac[value] = ac[value] || []; ac[value].push({ idx: context.idx++, item: cr }); if (cr && cr.items && cr.items.length > 0) { depthIndexingByValue(cr.items, context); } return ac; }, context.dict); } function indexingByValue(items, dict) { return items.reduce(function (ac, cr, idx) { var value = typeof cr === "string" ? cr : cr.value + ''; ac[value] = ac[value] || []; ac[value].push({ idx: idx, item: cr }); return ac; }, dict || {}); } // CONCATENATED MODULE: ./node_modules/absol/src/Network/IFrameBridge.js var TYPE_WORKER = 'WORKER'; var TYPE_IFRAME = 'IFRAME'; var TYPE_IFRAME_MASTER = 'IFRAME_MASTER'; var TYPE_WORKER_MASTER = 'WORKER_MASTER'; /** * * @param {Worker|HTMLIFrameElement|WorkerGlobalScope|Window=} host */ function IFrameBridge(host) { EventEmitter["b" /* default */].call(this); /*** * * @type {Worker|HTMLIFrameElement|WorkerGlobalScope|Window|WorkerGlobalScope|Window} */ this.host = host || self; this.sender = null; this.receiver = null; this.origin = null; this.type = 'NOT_DETECT'; this.id = "UNSET"; this.sync = this._detectHost().then(() => this._attach()); this.__azarResolveCallbacks = {}; this.__azarRejectCallbacks = {}; } IFrameBridge.TYPE_WORKER = TYPE_WORKER; IFrameBridge.TYPE_IFRAME = TYPE_IFRAME; IFrameBridge.TYPE_IFRAME_MASTER = TYPE_IFRAME_MASTER; IFrameBridge.TYPE_WORKER_MASTER = TYPE_WORKER_MASTER; IFrameBridge.prototype._detectHost = function () { return new Promise(rs => { var iframeLoaded = () => { if (this.host.removeEventListener) { this.host.removeEventListener("load", iframeLoaded); } else { this.host.detachEvent("onload", iframeLoaded); } this.sender = this.host.contentWindow; rs(); }; if (this.host instanceof Worker) { this.type = TYPE_WORKER_MASTER; this.sender = this.host; this.receiver = this.host; } else if (this.host.tagName === 'IFRAME') { this.type = TYPE_IFRAME_MASTER; this.receiver = self; this.id = this.host.src; this.origin = '*'; if (this.host.addEventListener) { this.host.addEventListener("load", iframeLoaded); } else { this.host.attachEvent("onload", iframeLoaded); } } else if (IFrameBridge.isInIFrame()) { this.type = TYPE_IFRAME; this.sender = window.parent; this.receiver = this.host; this.id = location.href; this.origin = '*'; } else if (IFrameBridge.isInWorker()) { this.type = TYPE_WORKER; this.sender = this.host; this.receiver = this.host; } if (this.sender) rs(); }); }; IFrameBridge.prototype._attach = function () { if (this.receiver.addEventListener) { this.receiver.addEventListener("message", this.__azarMessageListener.bind(this), false); } else if (this.receiver.attachEvent) { this.receiver.attachEvent("onmessage", this.__azarMessageListener.bind(this)); } else { this.receiver.onmessage = this.__azarMessageListener.bind(this); } }; IFrameBridge.fromIFrame = function (iframe) { return new IFrameBridge(iframe); var host = iframe.contentWindow || iframe.contentDocument; var src = iframe.src; var rootOrigin = location.origin; var iframeOrigin = src.match(/^(http|https):\/\/[^/]+/); if (iframeOrigin) { iframeOrigin = iframeOrigin[0]; } else { iframeOrigin = rootOrigin; } if (host) return new IFrameBridge(host, iframeOrigin); else { var result = new IFrameBridge(undefined, iframeOrigin); var attachedHost = function () { var host = iframe.contentWindow || iframe.contentDocument; result.attach(host); }; if (iframe.addEventListener) { iframe.addEventListener("load", attachedHost); } else { iframe.attachEvent("onload", attachedHost); } return result; } }; IFrameBridge.getInstance = function () { if (!IFrameBridge.shareInstance) { var origin = location.origin; var rootOrigin = IFrameBridge.fromIFrame() ? IFrameBridge.getParentUrl().match(/^(http|https):\/\/[^/]+/): null; if (rootOrigin) { rootOrigin = rootOrigin[0]; } else { rootOrigin = origin; } // IFrameBridge.shareInstance = new IFrameBridge(self, rootOrigin == origin? undefined: "*" || rootOrigin ); var host = self; IFrameBridge.shareInstance = new IFrameBridge(host, rootOrigin); } return IFrameBridge.shareInstance; }; Object.defineProperties(IFrameBridge.prototype, Object.getOwnPropertyDescriptors(EventEmitter["b" /* default */].prototype)); IFrameBridge.prototype.constructor = IFrameBridge; IFrameBridge.isInIFrame = function () { return !IFrameBridge.isInWorker() && (top !== self) ; }; IFrameBridge.isInWorker = function () { return (typeof WorkerGlobalScope !== 'undefined') && (self instanceof WorkerGlobalScope); } IFrameBridge.getParentUrl = function () { var parentUrl = (window.location != window.parent.location) ? document.referrer : document.location.href; return parentUrl; }; IFrameBridge.prototype.__azarMessageListener = function (event) { this.__azarHandleData(event.data); }; IFrameBridge.prototype.__azarHandleData = function (data) { if (data.bridgeId !== this.id) return; if (data.type) { if (data.type == "INVOKE") { try { var result = this.__azarSelfInvoke(data.name, data.params); if (result && typeof result.then == 'function') { result.then(function (result) { this.__azarResolve(data.taskId, result); }.bind(this)) .catch(function (err) { Object(safeThrow["a" /* default */])(err); this.__azarResolve(data.taskId, null, err); }.bind(this)); } else { this.__azarResolve(data.taskId, result); } } catch (err) { Object(safeThrow["a" /* default */])(err); this.__azarResolve(data.taskId, null, err); } } else if (data.type == "INVOKE_RESULT") { if (this.__azarResolveCallbacks[data.taskId]) { if (data.error) { this.__azarRejectCallbacks[data.taskId](data.error); } else { this.__azarResolveCallbacks[data.taskId](data.result); } delete this.__azarResolveCallbacks[data.taskId]; delete this.__azarRejectCallbacks[data.taskId]; } } else if (data.type == "EMIT") { this.fire.apply(this, data.params); } else this.fire('message', data, this); } }; IFrameBridge.prototype.__azarResolve = function (taskId, result, error) { var data = { type: "INVOKE_RESULT", taskId: taskId, result: result, error: error, bridgeId: this.id }; if (this.origin) { this.sender.postMessage(data, this.origin); } else { this.sender.postMessage(data); } }; IFrameBridge.prototype.__azarSelfInvoke = function (name, params) { if (typeof this[name] == 'function') { return this[name].apply(this, params); } else { return this[name]; } }; IFrameBridge.prototype.emit = function () { var params = []; params.push.apply(params, arguments); this.sync.then(function () { var data = { type: "EMIT", params: params, bridgeId: this.id }; if (this.origin) { this.sender.postMessage(data, this.origin); } else { this.sender.postMessage(data); } }.bind(this)); return this; }; IFrameBridge.prototype.invoke = function (name) { var params = []; params.push.apply(params, arguments); params.shift(); return this.sync.then(function () { var indent = randomIdent(32); var data = { type: 'INVOKE', params: params, taskId: indent, name: name, bridgeId: this.id }; if (this.origin) { this.host.postMessage(data, this.origin); } else { this.host.postMessage(data); } return new Promise(function (resolve, reject) { this.__azarResolveCallbacks[indent] = resolve; this.__azarRejectCallbacks[indent] = reject; }.bind(this)); }.bind(this)); }; IFrameBridge.prototype.importScriptURLs = function () { return this.invoke.apply(this, ['_receiveScriptURLs'].concat(Array.prototype.slice.call(arguments))); }; IFrameBridge.prototype.importScript = function (code) { var blob = new Blob([code], { type: 'application/javascript' }); var url = URL.createObjectURL(blob); return this.importScriptURLs(url); }; IFrameBridge.prototype.createMethod = function (name, fx) { this[name] = function () { return this.invoke.apply(this, [name].concat(Array.prototype.slice.call(arguments))); }; return this.invoke.apply(this, ['_receiveMethod', name, fx.toString()]); }; IFrameBridge.prototype._receiveScriptURLs = function () { if (self.importScripts) { self.importScripts.apply(self, arguments); } }; IFrameBridge.prototype._receiveMethod = function (name, code) { this[name] = (new Function('return ' + code))(); }; /* harmony default export */ var Network_IFrameBridge = (IFrameBridge); // CONCATENATED MODULE: ./node_modules/absol/src/Network/RemoteThread.tpl /* harmony default export */ var RemoteThread = ("function safeThrow(error) {\n setTimeout(function () {\n throw error;\n }, 0);\n}\n\nfunction EventEmitter() {\n if (!this._azar_extendEvents) {\n Object.defineProperty(this, '_azar_extendEvents', {\n enumerable: false,\n value: this._azar_extendEvents || { supported: {}, prioritize: {}, nonprioritize: {} }\n });\n Object.defineProperty(this, '__azar_force', {\n value: true,\n enumerable: false\n });\n }\n}\n\n\nEventEmitter.prototype.defineEvent = function (name) {\n if (name instanceof Array) {\n for (var i = 0; i < name.length; ++i)\n this._azar_extendEvents.supported[name[i]] = true;\n }\n else\n this._azar_extendEvents.supported[name] = true;\n return this;\n};\n\nEventEmitter.prototype.isSupportedEvent = function (name) {\n return true;\n};\n\n\nEventEmitter.prototype.emit = function (eventName, data) {\n this.fire.apply(this, arguments);\n};\n\nEventEmitter.prototype.fire = function (eventName, data) {\n var others = Array.prototype.slice.call(arguments, 1);\n if (this.isSupportedEvent(eventName)) {\n var listenerList;\n var i;\n if (this._azar_extendEvents.prioritize[eventName]) {\n listenerList = this._azar_extendEvents.prioritize[eventName].slice();\n for (i = 0; i < listenerList.length; ++i) {\n try {\n listenerList[i].wrappedCallback.apply(this, others);\n } catch (e) {\n safeThrow(e);\n }\n }\n }\n\n if (this._azar_extendEvents.nonprioritize[eventName]) {\n listenerList = this._azar_extendEvents.nonprioritize[eventName].slice();\n for (i = 0; i < listenerList.length; ++i) {\n try {\n listenerList[i].wrappedCallback.apply(this, others);\n } catch (e) {\n safeThrow(e);\n }\n }\n }\n }\n else {\n if (this.dispatchEvent) {\n var event = new Event(eventName);\n data && Object.assign(event, data);\n this.dispatchEvent(event);\n }\n else\n throw new Error(\"Not support event \" + eventName);\n }\n return this;\n};\n\n\nEventEmitter.prototype.eventEmittorOnWithTime = function (isOnce, arg0, arg1, arg2) {\n if (typeof arg0 == 'object') {\n for (var key in arg0) {\n this.eventEmittorOnWithTime(isOnce, key, arg0[key]);\n }\n return this;\n }\n else {\n if (typeof arg1 == 'object') {\n return this.eventEmittorOnWithTime(isOnce, arg0, arg1.callback, arg1.cap);\n }\n else {\n var eventArr = this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] || [];\n var eventIndex = -1;\n for (var i = 0; i < eventArr.length; ++i) {\n if (eventArr[i].wrappedCallback == arg1) {\n eventIndex = i;\n break;\n }\n }\n if (eventIndex < 0) {\n var event = { isOnce: isOnce, eventName: arg0, callback: arg1, cap: !!arg2 };\n //wrappedCallback will be call\n if (isOnce) {\n event.wrappedCallback = function () {\n event.callback.apply(this, arguments);\n this.off(event.eventName, event.wrappedCallback, event.cap);\n };\n }\n else {\n event.wrappedCallback = event.callback;\n }\n\n if (!this.isSupportedEvent(arg0)) {\n if (this.addEventListener) {\n this.addEventListener(arg0, event.wrappedCallback, !!arg2);\n }\n else {\n this.attachEvent('on' + arg0, arg1, !!arg2);\n }\n }\n\n eventArr.push(event);\n this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = eventArr;\n }\n else {\n console.warn(\"dupplicate event\");\n }\n\n }\n return this;\n }\n};\n\n\nEventEmitter.prototype.on = function (arg0, arg1, arg2) {\n this.eventEmittorOnWithTime(false, arg0, arg1, arg2);\n return this;\n};\n\n\nEventEmitter.prototype.once = function (arg0, arg1, arg2) {\n this.eventEmittorOnWithTime(true, arg0, arg1, arg2);\n return this;\n};\n\nEventEmitter.prototype.off = function (arg0, arg1, arg2) {\n if (typeof arg0 == 'object') {\n for (var key in arg0) {\n this.off(key, arg0[key]);\n }\n return this;\n }\n else {\n if (typeof arg1 == 'object') {\n return this.off(arg0, arg1.callback, arg1.cap);\n }\n else {\n var eventArr = this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] || [];\n var newEventArray = [];\n for (var i = 0; i < eventArr.length; ++i) {\n var event = eventArr[i];\n if (event.wrappedCallback == arg1) {\n //Dont add to newEventArray\n if (this.isSupportedEvent(arg0)) {\n }\n else {\n if (this.removeEventListener) {\n this.removeEventListener(event.eventName, event.wrappedCallback, !!event.cap);\n }\n else {\n this.detachEvent('on' + event.eventName, event.wrappedCallback, !!event.cap);\n }\n }\n }\n else {\n newEventArray.push(event);\n }\n }\n this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = newEventArray;\n return this;\n }\n }\n\n};\n\n\nvar TYPE_WORKER = 'WORKER';\n\n/**\n *\n * @param {Worker|HTMLIFrameElement|WorkerGlobalScope|Window=} host\n */\nfunction IFrameBridge(host) {\n EventEmitter.call(this);\n /***\n *\n * @type {Worker|HTMLIFrameElement|WorkerGlobalScope|Window|WorkerGlobalScope|Window}\n */\n this.host = host || self;\n this.sender = null;\n this.receiver = null;\n this.origin = null;\n this.type = 'NOT_DETECT';\n this.id = \"UNSET\";\n\n this.sync = this._detectHost().then(() => this._attach());\n\n this.__azarResolveCallbacks = {};\n this.__azarRejectCallbacks = {};\n}\n\nIFrameBridge.prototype._detectHost = function () {\n this.type = TYPE_WORKER;\n this.sender = this.host;\n this.receiver = this.host;\n return Promise.resolve();\n};\n\n\nIFrameBridge.prototype._attach = function () {\n if (this.receiver.addEventListener) {\n this.receiver.addEventListener(\"message\", this.__azarMessageListener.bind(this), false);\n }\n else if (this.receiver.attachEvent) {\n this.receiver.attachEvent(\"onmessage\", this.__azarMessageListener.bind(this));\n }\n else {\n this.receiver.onmessage = this.__azarMessageListener.bind(this);\n }\n};\n\n\nIFrameBridge.getInstance = function () {\n if (!IFrameBridge.shareInstance) {\n var origin = location.origin;\n var rootOrigin = IFrameBridge.getParentUrl().match(/^(http|https):\\/\\/[^/]+/);\n if (rootOrigin) {\n rootOrigin = rootOrigin[0];\n }\n else {\n rootOrigin = origin;\n }\n\n // IFrameBridge.shareInstance = new IFrameBridge(self, rootOrigin == origin? undefined: \"*\" || rootOrigin );\n var host = self;\n IFrameBridge.shareInstance = new IFrameBridge(host, rootOrigin);\n }\n return IFrameBridge.shareInstance;\n};\n\n\nObject.defineProperties(IFrameBridge.prototype, Object.getOwnPropertyDescriptors(EventEmitter.prototype));\nIFrameBridge.prototype.constructor = IFrameBridge;\n\n\nIFrameBridge.getParentUrl = function () {\n var parentUrl = (window.location != window.parent.location)\n ? document.referrer\n : document.location.href;\n return parentUrl;\n};\n\nIFrameBridge.prototype.__azarMessageListener = function (event) {\n this.__azarHandleData(event.data);\n};\n\n\nIFrameBridge.prototype.__azarHandleData = function (data) {\n if (data.bridgeId !== this.id) return;\n if (data.type) {\n if (data.type == \"INVOKE\") {\n try {\n var result = this.__azarSelfInvoke(data.name, data.params);\n if (result && typeof result.then == 'function') {\n result.then(function (result) {\n this.__azarResolve(data.taskId, result);\n }.bind(this))\n .catch(function (err) {\n safeThrow(err);\n this.__azarResolve(data.taskId, null, err);\n }.bind(this));\n }\n else {\n this.__azarResolve(data.taskId, result);\n }\n } catch (err) {\n safeThrow(err);\n this.__azarResolve(data.taskId, null, err);\n }\n }\n else if (data.type == \"INVOKE_RESULT\") {\n if (this.__azarResolveCallbacks[data.taskId]) {\n if (data.error) {\n this.__azarRejectCallbacks[data.taskId](data.error);\n }\n else {\n this.__azarResolveCallbacks[data.taskId](data.result);\n }\n delete this.__azarResolveCallbacks[data.taskId];\n delete this.__azarRejectCallbacks[data.taskId];\n }\n }\n else if (data.type == \"EMIT\") {\n this.fire.apply(this, data.params);\n }\n else this.fire('message', data, this);\n }\n};\n\n\nIFrameBridge.prototype.__azarResolve = function (taskId, result, error) {\n var data = {\n type: \"INVOKE_RESULT\",\n taskId: taskId,\n result: result,\n error: error,\n bridgeId: this.id\n };\n\n if (this.origin) {\n this.sender.postMessage(data, this.origin);\n }\n else {\n this.sender.postMessage(data);\n }\n};\n\n\nIFrameBridge.prototype.__azarSelfInvoke = function (name, params) {\n if (typeof this[name] == 'function') {\n return this[name].apply(this, params);\n }\n else {\n return this[name];\n }\n};\n\n\nIFrameBridge.prototype.emit = function () {\n var params = [];\n params.push.apply(params, arguments);\n this.sync.then(function () {\n var data = {\n type: \"EMIT\",\n params: params,\n bridgeId: this.id\n };\n if (this.origin) {\n this.sender.postMessage(data, this.origin);\n }\n else {\n this.sender.postMessage(data);\n }\n }.bind(this));\n return this;\n};\n\n\nIFrameBridge.prototype.invoke = function (name) {\n var params = [];\n params.push.apply(params, arguments);\n params.shift();\n return this.sync.then(function () {\n var indent = randomIdent(32);\n var data = {\n type: 'INVOKE',\n params: params,\n taskId: indent,\n name: name,\n bridgeId: this.id\n };\n if (this.origin) {\n this.host.postMessage(data, this.origin);\n }\n else {\n this.host.postMessage(data);\n }\n return new Promise(function (resolve, reject) {\n this.__azarResolveCallbacks[indent] = resolve;\n this.__azarRejectCallbacks[indent] = reject;\n }.bind(this));\n }.bind(this));\n};\n\nIFrameBridge.prototype.importScriptURLs = function () {\n return this.invoke.apply(this, ['_receiveScriptURLs'].concat(Array.prototype.slice.call(arguments)));\n};\n\nIFrameBridge.prototype.importScript = function (code) {\n var blob = new Blob([code], { type: 'application/javascript' });\n var url = URL.createObjectURL(blob);\n return this.importScriptURLs(url);\n};\n\n\nIFrameBridge.prototype.createMethod = function (name, fx) {\n this[name] = function () {\n return this.invoke.apply(this, [name].concat(Array.prototype.slice.call(arguments)));\n };\n return this.invoke.apply(this, ['_receiveMethod', name, fx.toString()]);\n};\n\n\nIFrameBridge.prototype._receiveScriptURLs = function () {\n if (self.importScripts) {\n self.importScripts.apply(self, arguments);\n }\n};\n\n\nIFrameBridge.prototype._receiveMethod = function (name, code) {\n this[name] = (new Function('return ' + code))();\n};\n\n\nvar IFrameBridge_prototype_descriptors = Object.getOwnPropertyDescriptors(IFrameBridge.prototype);\ndelete IFrameBridge_prototype_descriptors.constructor;\n\nObject.defineProperties(self, IFrameBridge_prototype_descriptors);\nIFrameBridge.call(self, self);"); // CONCATENATED MODULE: ./node_modules/absol/src/Network/Thread.js /*** * * @param {{methods?:Object, extendCode: string}} opt * @constructor */ function Thread(opt) { this.worker = new Worker(this._makeCodeUrl(opt)); Network_IFrameBridge.call(this, this.worker); this._attachClientMethods(opt.methods); } Thread.prototype._makeCodeUrl = function (opt) { var code = [ this._makeLibCode(opt.libs), RemoteThread, this._makeMethodCode(opt.methods), this._makePropCode(opt.props), opt.extendCode || '', ].join('\n\n'); var blob = new Blob([code], { type: 'application/javascript' }); var url = URL.createObjectURL(blob); return url; }; Thread.prototype._makePropCode = function (props) { if (!props) return ''; return 'Object.assign(self, ' + JSON.stringify(props) + ');'; }; Thread.prototype._makeLibCode = function (libs) { if (!libs) return ''; return libs.map(function (lib) { return 'self.importScripts(' + JSON.stringify(lib) + ');' }).join('\n'); } Thread.prototype._makeMethodCode = function (methods) { if (!methods) return ''; return Object.keys(methods).map(function (key) { var fx = methods[key]; if (typeof fx === "function") { fx = fx.toString(); return 'self[' + JSON.stringify(key) + '] = ' + fx; } }).join('\n\n'); }; Thread.prototype._attachClientMethods = function (methods) { if (!methods) return ''; Object.keys(methods).reduce(function (ac, name) { ac[name] = function () { return this.invoke.apply(this, [name].concat(Array.prototype.slice.call(arguments))) } return ac; }, this); }; OOP["a" /* default */].mixClass(Thread, Network_IFrameBridge); /* harmony default export */ var Network_Thread = (Thread); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/ListSearchFactor.js function ListSearchFactor(global) { /*** * @typedef SelectionItem2 * @property {String} text * @property {String} desc * @property {String} __text__ * @property {String} __nvnText__ * @property {Array<String>} __words__ * @property {Array<String>} __nvnWords__ * @property {object} __wordDict__ * @property {object} __nvnWordDict__ * @module SelectionItem2 */ function nonAccentVietnamese(s) { return s.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a") .replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, "A") .replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e") .replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, "E") .replace(/ì|í|ị|ỉ|ĩ/g, "i") .replace(/Ì|Í|Ị|Ỉ|Ĩ/g, "I") .replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o") .replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, "O") .replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u") .replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, "U") .replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y") .replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, "Y") .replace(/đ/g, "d") .replace(/Đ/g, "D") .replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, "") .replace(/\u02C6|\u0306|\u031B/g, ""); } function harmonicMean(a, b) { return 2 / (1 / a + 1 / b); } function wordLike(a, b) { var m = a.length; var n = b.length; function map(i, j) { return i * (n + 1) + j; } var Q = Array((m + 1) * (n + 1)).fill(0); for (var i = 0; i < m; ++i) for (var j = 0; j < n; ++j) if (a.charAt(i) == b.charAt(j)) { if (Q[map(i + 1, j + 1)]) { if (Q[map(i + 1, j + 1)] < Q[map(i, j)] + 1) Q[map(i + 1, j + 1)] = Q[map(i, j)] + 1; } else Q[map(i + 1, j + 1)] = Q[map(i, j)] + 1; } else Q[map(i + 1, j + 1)] = Math.max(Q[map(i + 1, j)], Q[map(i, j + 1)]); return Q[map(m, n)] / harmonicMean(m, n); } function wordsMatch(sq1, sq2, matchWordPow) { matchWordPow = matchWordPow === undefined ? 1 : matchWordPow; var m = sq1.length; var n = sq2.length; function map(i, j) { return i * (n + 1) + j; } var Q = Array((m + 1) * (n + 1)).fill(0); var e = 0.0; for (var i = 0; i < m; ++i) for (var j = 0; j < n; ++j) { e = Math.pow(wordLike(sq1[i], sq2[j]), matchWordPow); if (Q[map(i + 1, j + 1)]) { if (Q[map(i + 1, j + 1)] < Q[map(i, j)] + e) Q[map(i + 1, j + 1)] = Q[map(i, j)] + e; } else Q[map(i + 1, j + 1)] = Q[map(i, j)] + e; e = Math.max(Q[map(i + 1, j)], Q[map(i, j + 1)]); if (e > Q[map(i + 1, j + 1)]) Q[map(i + 1, j + 1)] = e; } return Q[map(m, n)]; } var EXTRA_MATCH_SCORE = 9; var NVN_EXTRA_MATCH_SCORE = 8; var EQUAL_MATCH_SCORE = 10; var WORD_MATCH_SCORE = 3; var HAS_WORD_SCORE = 30; var HAS_NVN_WORD_SCORE = 29; /*** * * @param {SelectionItem2} item * @returns {*} */ function prepareSearchForItem(item) { if (!item.text || !item.text.charAt) item.text = item.text + ''; var spliter = /[\s/]+/; var __text__ = item.text.replace(/([\s\b\-()\[\]"']| | | |\s")+/g, ' ').trim().toLowerCase(); var __nvnText__ = nonAccentVietnamese(__text__); item.__words__ = __text__.split(spliter); item.__text__ = item.__words__.join(' '); item.__words__.sort(); item.__wordDict__ = item.__words__.reduce((ac, cr, i) => { ac[cr] = i + 1; return ac; }, {}); item.__nvnWords__ = __nvnText__.split(spliter); item.__nvnText__ = item.__nvnWords__.join(' ') item.__nvnWords__.sort(); item.__nvnWordDict__ = item.__nvnWords__.reduce((ac, cr, i) => { ac[cr] = i + 1; return ac; }, {}); return item; } function isItemMustIncluded(queryItem, item) { if (!queryItem) return true; if (item.__nvnText__.indexOf(queryItem.__nvnText__) >= 0) { return true; } var dict1 = queryItem.__nvnWordDict__; var dict2 = item.__nvnWordDict__; for (var i in dict1) { for (var j in dict2) { if (j.indexOf(i) < 0) return false; } } return true; } function calcItemMatchScore(queryItem, item) { var score = 0; if (!item.__text__) return 0; var hwScore = 0; var i; for (i = 0; i < queryItem.__words__.length; ++i) { if (item.__wordDict__[queryItem.__words__[i]]) { hwScore += HAS_WORD_SCORE; } else if (item.__nvnWordDict__[queryItem.__nvnWords__[i]]) { hwScore += HAS_NVN_WORD_SCORE; } } score = hwScore; if (item.__text__ === queryItem.__text__) { score += EQUAL_MATCH_SCORE; } var extraIndex = item.__text__.indexOf(queryItem.__text__); if (extraIndex >= 0) { score += EXTRA_MATCH_SCORE; } extraIndex = item.__nvnText__.indexOf(queryItem.__nvnText__); if (extraIndex >= 0) { score += EXTRA_MATCH_SCORE; } var n = Math.max(queryItem.__words__.length + 1, 1); score = Math.max(score, wordsMatch(queryItem.__words__, item.__words__) / n * 2 * WORD_MATCH_SCORE, wordsMatch(queryItem.__nvnWords__, item.__nvnWords__) / n * 2 * WORD_MATCH_SCORE ); return score; } function scoreCmp(a, b) { if (b.score === a.score) { if (b.item.__nvnText__ > a.item.__nvnText__) return -1; return 1; } return b.score - a.score; } function keyStringOf(o) { var type = typeof o; var keys; if (o && type === "object") { if (o.getTime) { return 'd(' + o.getTime() + ')'; } else if (o.length && o.map) { return 'a(' + o.map(val => keyStringOf(val)).join(',') + ')'; } else { keys = Object.keys(o); keys.sort(); return 'o(' + keys.map(key => key + ':' + keyStringOf(o[key])).join(',') + ')'; } } else { return type[0] + '(' + o + ')'; } } function matchFilter(item, filter) { if (!filter) return true; var keys = item.keys; if (!keys) return false; for (var i in filter) { if (!keyCmp(keys[i], filter[i])) return false; } return true; } function toComparable(x) { if (!x) return x; var type = typeof x; if (type === 'string') return x; if (type === "number") return x; if (type === "boolean") return x; if (type.getTime) return type.getTime(); return x; } function keyCmp(itemKey, filterKey) { if (itemKey === filterKey) return true; if (!itemKey !== !filterKey) return false; if (!itemKey || !filterKey) return false; var filterKeyString = keyStringOf(filterKey) function withFilter(x) { var xString = keyStringOf(x) var res = xString === filterKeyString; if (!res && (typeof filterKey === "object")) { if (filterKey.some) { res = filterKey.some(function (y) { return keyStringOf(y) === x; }); } else if (('min' in filterKey) || ('max' in filterKey)) { res = true; if ('min' in filterKey) { res = res && toComparable(x) >= toComparable(filterKey.min); } if ('max' in filterKey) { res = res && toComparable(x) <= toComparable(filterKey.max); } } } return res; } if (itemKey.some) { return itemKey.some(withFilter); } else return withFilter(itemKey); } function Slave() { this.items = []; } Slave.prototype.processItems = function (items) { this.items = items; this.items.forEach(function visit(item) { prepareSearchForItem(item); if (item.items) item.items.forEach(visit); }) }; Slave.prototype.callQuery = function (query) { prepareSearchForItem(query); var minScore = Infinity; var maxScore = -Infinity; var scoreHolders = this.items.map(function visit(item) { var res = {}; res.score = calcItemMatchScore(query, item); res.mustIncluded = isItemMustIncluded(query, item); res.value = item.value; res.maxChildScore = -Infinity; if (item.items) { res.child = item.items.map(visit); res.maxChildScore = res.child.reduce((ac, cr) => Math.max(ac, cr.maxChildScore, cr.score), res.maxChildScore); } minScore = Math.min(minScore, res.score); maxScore = Math.max(maxScore, res.score); return res; }); var threshold = maxScore - (maxScore - minScore) / 4; if (maxScore < 3) threshold = maxScore - (maxScore - minScore) / 8; var resDict = scoreHolders.reduce(function rValue(ac, cr) { if (Math.max(cr.maxChildScore, cr.score) >= threshold || cr.mustIncluded) ac[cr.value] = [cr.score, cr.maxChildScore]; if (cr.child) cr.child.reduce(rValue, ac); return ac; }, {}); return resDict; }; var slaves = {}; global.transferSearchItems = function (id, items) { if (!slaves[id]) slaves[id] = new Slave(); slaves[id].processItems(items); }; global.callQuery = function (id, query) { if (slaves[id]) return slaves[id].callQuery(query); return null; }; global.destroySlave = function (id) { delete slaves[id]; }; } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/ListSearchMaster.js function ListSearchMaster() { this.prepare(); this.id = randomIdent(8); this.cache = {}; } ListSearchMaster.prototype.share = { worker: null }; ListSearchMaster.prototype.prepare = function () { if (this.share.worker) return; this.share.worker = new Network_Thread({ methods: { init: ListSearchFactor }, extendCode: 'init(this)' }); }; ListSearchMaster.prototype.transfer = function (items) { this.cache = {}; return this.share.worker.invoke('transferSearchItems', this.id, items); }; ListSearchMaster.prototype.query = function (query) { var key = calcDTQueryHash(query); if (!this.cache[key]) { this.cache[key] = this.share.worker.invoke('callQuery', this.id, query); } return this.cache[key]; }; ListSearchMaster.prototype.destroy = function () { this.share.worker.invoke('destroySlave', this.id); } /* harmony default export */ var list_ListSearchMaster = (ListSearchMaster); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectListBox.js var SelectListBox_ = ACore["d" /* default */]._; var SelectListBox_$ = ACore["d" /* default */].$; var SelectListBox_$$ = ACore["d" /* default */].$$; var VALUE_HIDDEN = -1; var VALUE_NORMAL = 1; var calcWidthLimit = () => { var width = Object(Dom["d" /* getScreenSize */])().width; if (BrowserDetector["a" /* default */].isMobile) { width -= 20; } else { width = width * 0.9 - 250; } return Math.min(width, 1280); } /*** * @extends Follower * @constructor */ function SelectListBox() { this._initDomHook(); this._initControl(); this._initScroller(); this._initProperty(); /*** * @name strictValue * @type {boolean} * @memberOf SelectListBox# */ /*** * @name enableSearch * @type {boolean} * @memberOf SelectListBox# */ } SelectListBox.tag = 'SelectListBox'.toLowerCase(); SelectListBox.render = function () { return SelectListBox_({ tag: 'follower', attr: { tabindex: 0 }, class: 'as-select-list-box', extendEvent: ['pressitem'], child: [ { class: 'as-select-list-box-search-ctn', child: 'searchtextinput' }, { class: ['as-bscroller', 'as-select-list-box-scroller'], child: [ { class: ['as-select-list-box-content'], child: Array(SelectListBox.prototype.preLoadN).fill('.as-select-list-box-page') } ] }, 'attachhook.as-dom-signal' ], props: { anchor: [1, 6, 2, 5] } }); }; SelectListBox.prototype.toLoadNextY = 200; SelectListBox.prototype.preLoadN = 3; SelectListBox.prototype.itemHeightMode = [20, 30]; SelectListBox.prototype.itemHeight = 20; SelectListBox.prototype._initDomHook = function () { this.$domSignal = SelectListBox_$('attachhook.as-dom-signal', this); this.domSignal = new DomSignal["a" /* default */](this.$domSignal); this.domSignal.on('viewListAt', this.viewListAt.bind(this)); this.domSignal.on('viewListAtFirstSelected', this.viewListAtFirstSelected.bind(this)); this.domSignal.on('viewListAtCurrentScrollTop', this.viewListAtCurrentScrollTop.bind(this)); this.searchMaster = new list_ListSearchMaster(); this.widthLimit = calcWidthLimit(); this.addStyle('--as-width-limit', this.widthLimit + 'px'); }; SelectListBox.prototype._initControl = function () { this._currentOffset = 0; this._startItemIdx = 0; this.$searchInput = SelectListBox_$('searchtextinput', this) .on('stoptyping', this.eventHandler.searchModify); }; SelectListBox.prototype._initScroller = function () { this.$content = SelectListBox_$('.as-select-list-box-content', this); this._estimateHeight = 0; this._pageOffsets = Array(this.preLoadN + 1).fill(0); this.$listPages = SelectListBox_$$('.as-select-list-box-page', this); this.$listScroller = SelectListBox_$('.as-select-list-box-scroller', this) .on('scroll', this.eventHandler.scroll); }; SelectListBox.prototype._initProperty = function () { /*** * items =(search, filler)=> filteredItems =(list to list, tree to list)=> preDisplayItems =(remove hidden item)=> displayItem * */ this._items = []; this._itemNodeList = [];// use for tree this._values = []; this._valueDict = {}; this._itemNodeHolderByValue = {}; // this._filteredItems = [];// not need , only use when search this._preDisplayItems = []; this._displayItems = []; this._searchCache = {}; this._displayValue = VALUE_NORMAL; this.displayValue = VALUE_NORMAL; this.items = []; }; SelectListBox.prototype._requireItem = function (pageElt, n) { var itemElt; while (pageElt.childNodes.length > n) { itemElt = pageElt.lastChild; itemElt.selfRemove(); releaseItem(itemElt); } while (pageElt.childNodes.length < n) { itemElt = requireItem(this); pageElt.addChild(itemElt); } }; SelectListBox.prototype._assignItems = function (pageElt, offset) { var n = Math.min(this._displayItems.length - offset, pageElt.childNodes.length); var itemElt, value; var data; for (var i = 0; i < n; ++i) { itemElt = pageElt.childNodes[i]; data = this._displayItems[offset + i]; if (data && data !== true && data.text) { if (!data.textLength) data.textLength = measureText(data.text + '', '14px arial').width; if (data.textLength > this.widthLimit - 5) { itemElt.attr('title', data.text); } else itemElt.attr('title', null); } else { itemElt.attr('title', null); } itemElt.data = data; value = itemElt.value + ''; } }; SelectListBox.prototype._itemsToNodeList = function (items) { return items; }; /*** * * @param {Array<{value:String|Number}>} items * @return {Array<{value:String|Number}>} */ SelectListBox.prototype._filterDisplayItems = function (items) { if (this._displayValue === VALUE_NORMAL) return items; var dict = this._valueDict; return items.filter(function (item) { return !dict[item.value + '']; }); }; SelectListBox.prototype._updateSelectedItem = function () { var valueDict = this._valueDict; this.$listPages.forEach(function (pageElt) { Array.prototype.forEach.call(pageElt.childNodes, function (itemElt) { var value = itemElt.value + ''; if (valueDict[value]) { itemElt.selected = true; } else { itemElt.selected = false; } }); }); }; /*** * * @param {number} offset */ SelectListBox.prototype.viewListAt = function (offset) { if (!this.isDescendantOf(document.body)) { this.domSignal.emit('viewListAt', offset); return; } var fontSize = this.$listScroller.getFontSize() || 14; offset = Math.max(0, Math.min(offset, this._displayItems.length - 1)); var screenSize = Object(Dom["d" /* getScreenSize */])(); var maxItem = Math.ceil(Math.max(window.screen.height, screenSize.height) / this.itemHeight); var contentBound = this.$content.getBoundingClientRect(); this._pageOffsets[0] = Math.max(offset - maxItem, 0); for (var i = 1; i <= this.preLoadN; ++i) { this._pageOffsets[i] = Math.min(this._pageOffsets[i - 1] + maxItem, this._displayItems.length); } var sIdx, nItem, pageBound; var pageElt; for (var pageIndex = 0; pageIndex < this.preLoadN; ++pageIndex) { sIdx = this._pageOffsets[pageIndex]; nItem = this._pageOffsets[pageIndex + 1] - sIdx; pageElt = this.$listPages[pageIndex]; pageElt.addStyle('top', this._pageOffsets[pageIndex] * this.itemHeight / 14 + 'em'); this._requireItem(pageElt, nItem); this._assignItems(pageElt, sIdx); pageBound = pageElt.getBoundingClientRect(); } this._updateSelectedItem(); }; SelectListBox.prototype.viewListAtFirstSelected = function () { if (!this.isDescendantOf(document.body)) { this.domSignal.emit('viewListAtFirstSelected'); return; } if (this._displayValue == VALUE_HIDDEN) { return false; } else if (this._values.length > 0) { var value = this._values[0]; var itemHolders = this._displayItemHolderByValue[value + '']; if (itemHolders) { this.domSignal.once('scrollIntoSelected', function () { var holder = itemHolders[0]; this.viewListAt(holder.idx); var itemElt = SelectListBox_$('.as-selected', this.$listScroller); if (itemElt) { var scrollBound = this.$listScroller.getBoundingClientRect(); var itemBound = itemElt.getBoundingClientRect(); this.$listScroller.scrollTop += itemBound.top - scrollBound.top; } }.bind(this)); this.domSignal.emit('scrollIntoSelected'); return true; } else return false; } else return false; }; SelectListBox.prototype.viewListAtCurrentScrollTop = function () { if (!this.isDescendantOf(document.body)) { this.emit('viewListAtCurrentScrollTop'); return; } this.viewListAt(Math.floor(this.$listScroller.scrollTop / this.itemHeight)); }; SelectListBox.prototype.searchItemByText = function (text) { text = text.trim().replace(/\s\s+/, ' '); if (text.length === 0) return Promise.resolve(this._items); this._searchCache[text] = this._searchCache[text] || this.searchMaster.query({ text: text }).then(searchResult => { if (!searchResult) return; var scoreOf = it => { var idx = this.key2idx [it.valueKey]; var sc = searchResult[idx]; if (!sc) return -Infinity; return Math.max(sc[0], sc[1]) * 1000000 - idx; } var makeList = originItems => { var items = originItems.filter(it => { var idx = this.key2idx [it.valueKey]; if (searchResult[idx]) return true; return false; }).map(it => { var cpItem = Object.assign({}, it); if (it.items) cpItem.items = makeList(it.items); return cpItem; }); items.sort((a, b) => scoreOf(b) - scoreOf(a)); return items; } return makeList(this._items); }); return this._searchCache[text]; }; SelectListBox.prototype.resetSearchState = function () { this.$searchInput.value = ''; this._preDisplayItems = this._itemsToNodeList(this._items); this._updateDisplayItem(); this.domSignal.emit('viewListAt', 0); this.$listScroller.scrollTop = 0; }; SelectListBox.prototype.notifyPressOut = function () { this.emit('pressout', { target: this, type: 'pressout' }, this); }; SelectListBox.prototype.notifyPressClose = function () { this.emit('pressclose', { target: this, type: 'pressclose' }, this); }; SelectListBox.prototype._findFirstPageIdx = function () { for (var i = 0; i < this.preLoadN; ++i) { if (this._pageOffsets[i + 1] - this._pageOffsets[i] > 0) { return i; } } return -1; }; SelectListBox.prototype._findLastPageIdx = function () { for (var i = this.preLoadN - 1; i >= 0; --i) { if (this._pageOffsets[i + 1] - this._pageOffsets[i] > 0) { return i; } } return -1; }; SelectListBox.prototype._updateDisplayItemIndex = function () { this._displayItemHolderByValue = indexingByValue(this._displayItems, {}); }; SelectListBox.prototype._updateItemNodeIndex = function () { this._itemNodeHolderByValue = depthIndexingByValue(this._items); }; SelectListBox.prototype._updateDisplayItem = function () { this._displayItems = this._filterDisplayItems(this._preDisplayItems); this._updateDisplayItemIndex(); this.$content.addStyle({ 'height': this._displayItems.length * this.itemHeight / 14 + 'em' }); }; SelectListBox.prototype.focus = function () { if (this.enableSearch) this.$searchInput.focus(); }; SelectListBox.prototype.footerMinWidth = 0; SelectListBox.prototype._updateItems = function () { this._hasIcon = this._items.some(function hasIcon(it) { var res = !!it.icon; if (!res && it.items) { res = it.items.some(hasIcon); } return res; }); if (this._hasIcon) { this.itemHeight = this.itemHeightMode[1]; } else { this.itemHeight = this.itemHeightMode[0]; } this._preDisplayItems = this._itemsToNodeList(this._items); this._searchCache = {}; var estimateSize = measureListSize(this._itemNodeList); estimateSize.width = Math.min(this.widthLimit || Infinity, estimateSize.width); this._estimateSize = estimateSize; this._estimateWidth = estimateSize.width; this._estimateDescWidth = estimateSize.descWidth; if (this._hasIcon) { this._estimateWidth += 32; this.addClass('as-has-icon'); } else { this.removeClass('as-has-icon'); } this.addStyle('--select-list-estimate-width', Math.max(this.footerMinWidth, this._estimateWidth) / 14 + 'em'); this.addStyle('--select-list-desc-width', (this._estimateDescWidth) / 14 + 'em'); this._updateDisplayItem(); this.idx2key = []; var makeSearchItem = it => { var res = { value: this.idx2key.length }; var valueKey; res.text = it.text + ''; if (it.desc) res.text += it.desc; valueKey = keyStringOf(it.value); it.valueKey = valueKey; this.idx2key.push(valueKey); if (it.items && it.items.length > 0 && it.items.map) { res.items = it.items.map(makeSearchItem); } return res; }; this.searchingItems = this._items.map(makeSearchItem); this.key2idx = this.idx2key.reduce((ac, cr, i) => { ac[cr] = i; return ac; }, {}); this.searchMaster.transfer(this.searchingItems); }; /*** * * @param value * @returns {{idx: number, item:{text:string, value:number|string}}[]} */ SelectListBox.prototype.findDisplayItemsByValue = function (value) { return (this._displayItemHolderByValue[value] || []).slice(); }; SelectListBox.prototype._implicit = function (values) { if (!(values instanceof Array)) { if (values === null || values === undefined) values = []; else values = [values]; } return values.reduce(function (ac, cr) { if (!ac.dict[cr]) { ac.dict[cr] = true; ac.result.push(cr); } return ac; }, { result: [], dict: {} }).result; }; SelectListBox.prototype._explicit = function (values) { if (this.strictValue) { return values.filter(function (value) { return !!this._itemNodeHolderByValue[value]; }.bind(this)); } else { return values.slice(); } }; /*** * * @param value * @returns {{idx: number, item:{text:string, value:number|string}}[]} */ SelectListBox.prototype.findItemsByValue = function (value) { return (this._itemNodeHolderByValue[value] || []).slice(); }; SelectListBox.property = {}; /*** * * @type {SelectListBox|{}} */ SelectListBox.property.items = { set: function (items) { items = items || []; if (!(items instanceof Array)) items = []; items = copySelectionItemArray(items, { removeNoView: true, removeNewLine: true }); this._items = items; this._itemNodeList = this._itemsToNodeList(this._items); this._updateItemNodeIndex(); this._updateItems(); this.viewListAt(0); }, get: function () { return this._items; } } SelectListBox.property.values = { set: function (values) { values = this._implicit(values); this._values = values; this._valueDict = values.reduce(function (ac, cr) { ac[cr + ''] = true; return ac; }, {}); this._updateDisplayItem(); this.viewListAtCurrentScrollTop(); if (this._pageOffsets[this.preLoadN] > this._pageOffsets[0]) this._updateSelectedItem(); }, get: function () { return this._explicit(this._values); } }; SelectListBox.property.strictValue = { set: function (value) { if (value) { this.addClass('as-strict-value'); } else { this.removeClass('as-strict-value'); } }, get: function () { return this.hasClass('as-strict-value'); } }; SelectListBox.property.displayValue = { set: function (value) { this._displayValue = value; this._displayItems = this._filterDisplayItems(this._preDisplayItems); this._updateItemNodeIndex(); if (value === VALUE_HIDDEN) { this.addClass('as-value-hidden'); } else { this.removeClass('as-value-hidden'); } }, get: function () { return this._displayValue; } } SelectListBox.property.enableSearch = { set: function (value) { if (value) this.addClass('as-enable-search'); else this.removeClass('as-enable-search'); }, get: function () { return this.hasClass('as-enable-search'); } }; /*** * * @type {SelectListBox|{}} */ SelectListBox.eventHandler = {}; /* * * @param {MouseEvent} event */ SelectListBox.eventHandler.click = function (event) { if (event.target === this) this.notifyPressOut(); }; /*** * @this SelectListBox */ SelectListBox.eventHandler.searchModify = function () { var text = this.$searchInput.value; var searchSession = Math.random() + ''; this._searchSession = searchSession; this.searchItemByText(text).then(searchedItems => { if (searchSession !== this._searchSession) return; this._preDisplayItems = this._itemsToNodeList(searchedItems); this._displayItems = this._filterDisplayItems(this._preDisplayItems); this.$content.addStyle({ 'height': this._displayItems.length * this.itemHeight / 14 + 'em' }); this._updateItemNodeIndex(); this.viewListAt(0); this.$listScroller.scrollTop = 0; this.updatePosition(); }); }; SelectListBox.eventHandler.scroll = function () { var itemHeight = this.itemHeight * SelectListBox_$(document.body).getFontSize() / 14; var scrollerBound = this.$listScroller.getBoundingClientRect(); var topIdx = this._findFirstPageIdx(); if (!this.$listPages[topIdx]) return; var screenSize = Object(Dom["d" /* getScreenSize */])(); var maxItem = Math.ceil(Math.max(window.screen.height, screenSize.height) / itemHeight); var topBound = this.$listPages[topIdx].getBoundingClientRect(); var botIdx = this._findLastPageIdx(); if (!this.$listPages[botIdx]) return; var botBound; botBound = this.$listPages[botIdx].getBoundingClientRect(); if (topBound.top > scrollerBound.top || topBound.bottom < scrollerBound.bottom) { this.viewListAt(Math.floor(this.$listScroller.scrollTop / itemHeight)) return; } if (this._pageOffsets[topIdx] > 0) { if (topBound.top + this.toLoadNextY > scrollerBound.top) { this._pageOffsets.unshift(this._pageOffsets.pop()); this.$listPages.unshift(this.$listPages.pop()); this._pageOffsets[topIdx] = Math.max(0, this._pageOffsets[topIdx + 1] - maxItem); this._requireItem(this.$listPages[topIdx], this._pageOffsets[topIdx + 1] - this._pageOffsets[topIdx]); this._assignItems(this.$listPages[topIdx], this._pageOffsets[topIdx]); this._updateSelectedItem(); this.$listPages[topIdx].addStyle('top', this._pageOffsets[topIdx] * itemHeight + 'px'); } } if (this._pageOffsets[botIdx + 1] < this._displayItems.length) { if (botBound.bottom - this.toLoadNextY < scrollerBound.bottom) { this._pageOffsets.push(this._pageOffsets.shift()); this.$listPages.push(this.$listPages.shift()); this._pageOffsets[botIdx + 1] = Math.min(this._displayItems.length, this._pageOffsets[botIdx] + maxItem); this.$listPages[botIdx].addStyle('top', this._pageOffsets[botIdx] * itemHeight + 'px'); this._requireItem(this.$listPages[botIdx], this._pageOffsets[botIdx + 1] - this._pageOffsets[botIdx]); this._assignItems(this.$listPages[botIdx], this._pageOffsets[botIdx]); this._updateSelectedItem(); } } }; ACore["d" /* default */].install(SelectListBox); /* harmony default export */ var js_SelectListBox = (SelectListBox); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectBox.js var SelectBox_ = ACore["d" /* default */]._; var SelectBox_$ = ACore["d" /* default */].$; function pressCloseEventHandler(event) { var parentElt = this.$parent; if (!parentElt) return; parentElt.eventHandler.pressCloseItem(this, event); } function pressHandler(event) { var parentElt = this.$parent; if (!parentElt) return; parentElt.eventHandler.pressItem(this, event); } /*** * * @returns {SelectBoxItem} */ function SelectBox_makeItem() { return SelectBox_({ tag: 'selectboxitem', on: { close: pressCloseEventHandler, press: pressHandler } }); } var SelectBox_itemPool = []; function SelectBox_requireItem($parent) { var item; if (SelectBox_itemPool.length > 0) { item = SelectBox_itemPool.pop(); } else { item = SelectBox_makeItem(); } item.$parent = $parent; return item; } function SelectBox_releaseItem(item) { item.$parent = null; SelectBox_itemPool.push(item); } /*** * @extends PositionTracker * @return {SelectBox} * @constructor */ function SelectBox() { this.on('click', this.eventHandler.click); this.$selectlistBox = SelectBox_({ tag: 'selectlistbox', props: { anchor: [1, 6, 2, 5], displayValue: VALUE_HIDDEN }, on: { preupdateposition: this.eventHandler.preUpdateListPosition, pressitem: this.eventHandler.selectListBoxPressItem } }); OOP["a" /* default */].drillProperty(this, this.$selectlistBox, 'enableSearch'); this.$items = []; this._values = []; this.items = []; this.values = []; this.$selectlistBox.followTarget = this; this.$selectlistBox.sponsorElement = this; this.disableClickToFocus = false; this.orderly = true; this.itemFocusable = false; this._activeValue = undefined; return this; } SelectBox.tag = 'selectbox'; SelectBox.render = function () { return SelectBox_({ tag: 'bscroller', class: ['absol-selectbox', 'absol-bscroller'], extendEvent: ['change', 'add', 'remove', 'activevaluechange'], attr: { tabindex: '1' } }, true); }; SelectBox.prototype._requireItem = function (n) { var itemElt; while (this.$items.length < n) { itemElt = SelectBox_requireItem(this); this.addChild(itemElt); this.$items.push(itemElt); } while (this.$items.length > n) { itemElt = this.$items.pop(); this.removeChild(itemElt); SelectBox_releaseItem(itemElt); } }; SelectBox.prototype._assignItems = function (items) { for (var i = 0; i < this.$items.length && i < items.length; ++i) { this.$items[i].data = items[i]; } }; /*** * * @param {string[] | number[]} values * @private */ SelectBox.prototype._getItemsByValues = function (values) { var selectListBoxElt = this.$selectlistBox; var itemHolders = values.reduce(function (ac, cr) { ac.push.apply(ac, selectListBoxElt.findItemsByValue(cr)); return ac; }, []); if (this.orderly) { itemHolders.sort(function (a, b) { return a.idx - b.idx; }); } return itemHolders.map(function (holder) { return holder.item; }) }; SelectBox.prototype._updateItems = function () { this.viewItemsByValues(this._values); }; SelectBox.prototype.viewItemsByValues = function (values) { var items = this._getItemsByValues(values); var cBound = this.getBoundingClientRect(); this._requireItem(items.length); this._assignItems(items); if (this.itemFocusable) { this._updateFocusItem(); } var nBound = this.getBoundingClientRect(); if (nBound.width != cBound.width || nBound.height != cBound.height) { ResizeSystem["a" /* default */].updateUp(this); } }; SelectBox.property = {}; SelectBox.property.disabled = SelectMenu2.property.disabled; SelectBox.property.hidden = SelectMenu2.property.hidden; SelectBox.property.isFocus = SelectMenu2.property.isFocus; SelectBox.prototype.init = function (props) { props = props || []; Object.keys(props).forEach(function (key) { if (props[key] === undefined) delete props[key]; }); this.super(props); }; SelectBox.prototype._updateFocusItem = function () { for (var i = 0; i < this.$items.length; ++i) { this.$items[i].active = this.$items[i].value == this._activeValue; } }; SelectBox.prototype.init = SelectMenu2.prototype.init; SelectBox.property.items = { set: function (items) { items = items || []; this.$selectlistBox.items = items; this.addStyle('--list-min-width', this.$selectlistBox._estimateWidth + 'px'); this._updateItems(); }, get: function () { return this.$selectlistBox.items } }; SelectBox.property.values = { set: function (values) { values = values || []; values = (values instanceof Array) ? values : [values]; this._values = values; this.$selectlistBox.values = values; this._updateItems(); }, get: function () { return this._values || []; } }; SelectBox.property.orderly = { set: function (value) { var needUpdate = this._orderly === this._orderly; if (typeof value === 'function') { this._orderly; } else this._orderly = !!value; if (needUpdate) { this.values = this.values; } }, get: function () { return !!this._orderly; } }; SelectBox.property.disableClickToFocus = { set: function (value) { if (value) { this.addClass('as-disable-click-to-focus'); } else { this.removeClass('as-disable-click-to-focus'); } }, get: function () { return this.hasClass('as-disable-click-to-focus'); } }; SelectBox.property.itemFocusable = { set: function (value) { if (value) { this.addClass('as-item-focusable'); } else { this.removeClass('as-item-focusable'); } this._updateFocusItem(); }, get: function () { return this.hasClass('as-item-focusable'); } }; SelectBox.property.activeValue = { set: function (value) { this._activeValue = value; if (this.itemFocusable) { this._updateFocusItem(); //todo } }, get: function () { return this._activeValue; } }; SelectBox.eventHandler = Object.assign({}, SelectMenu2.eventHandler); SelectBox.eventHandler.click = function (event) { if (event.target === this && !this.disableClickToFocus) { this.isFocus = !this.isFocus; } }; SelectBox.eventHandler.bodyClick = function (event) { if (!EventEmitter["b" /* default */].hitElement(this.$selectlistBox, event) && event.target !== this) { this.isFocus = false; } }; SelectBox.eventHandler.selectListBoxPressItem = function (event) { var data = event.data; var currentValues = this.$selectlistBox.values; currentValues.push(data.value); this.$selectlistBox.values = currentValues; this.$selectlistBox.updatePosition(); this._activeValue = data.value; this._updateItems(); this.isFocus = false; this.emit('add', Object.assign({}, event, { type: 'add', target: this, value: data.value, data: data, itemData: data }), this); this.emit('change', Object.assign({}, event, { type: 'change', action: 'add', target: this, value: data.value, data: data, values: this.values }), this); }; SelectBox.eventHandler.pressCloseItem = function (item, event) { var value = item.value; var data = item.data; var currentValues = this.$selectlistBox.values; var index = currentValues.indexOf(value); if (index >= 0) { currentValues.splice(index, 1); } this.$selectlistBox.values = currentValues; this.$selectlistBox.updatePosition(); this._values = currentValues; this._updateItems(); this.emit('remove', Object.assign({}, event, { type: 'change', target: this, data: data, value: value, itemData: data }), this); this.emit('change', Object.assign({}, event, { type: 'change', action: 'remove', target: this, data: data, value: value, itemData: data }), this); }; SelectBox.eventHandler.pressItem = function (item, event) { var value = item.value; if (this.itemFocusable) { var prevActiveValue = this.activeValue; if (value !== prevActiveValue) { this.activeValue = value; this.emit('activevaluechange', { target: this, originEvent: event, prevActiveValue: prevActiveValue, activeValue: value }, this); } } }; SelectBox.eventHandler.pressCloseItem = function (item, event) { var value = item.value; var data = item.data; var index; index = this._values.indexOf(value); if (index >= 0) { this._values.splice(index, 1); this._updateItems(); this.$selectlistBox.values = this._values; this.emit('remove', Object.assign({}, event, { type: 'change', target: this, data: data, value: value, itemData: data }), this); this.emit('change', Object.assign({}, event, { type: 'change', action: 'remove', target: this, data: data, value: value, itemData: data }), this); } }; ACore["d" /* default */].install(SelectBox); /* harmony default export */ var js_SelectBox = (SelectBox); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttable.css var selecttable = __webpack_require__(49); // CONCATENATED MODULE: ./node_modules/absol/src/String/stringMatching.js /** * * @param {String} a * @param {String} b */ function wordLike(a, b) { var m = a.length; var n = b.length; function map(i, j) { return i * (n + 1) + j; } var Q = Array((m + 1) * (n + 1)).fill(0); for (var i = 0; i < m; ++i) for (var j = 0; j < n; ++j) if (a.charAt(i) == b.charAt(j)) { if (Q[map(i + 1, j + 1)]) { if (Q[map(i + 1, j + 1)] < Q[map(i, j)] + 1) Q[map(i + 1, j + 1)] = Q[map(i, j)] + 1; } else Q[map(i + 1, j + 1)] = Q[map(i, j)] + 1; } else Q[map(i + 1, j + 1)] = Math.max(Q[map(i + 1, j)], Q[map(i, j + 1)]); return Q[map(m, n)] / harmonicMean(m, n); } /** * * @param {Array<String>} sq1 * @param {Array<String>} sq2 */ function wordsMatch(sq1, sq2, matchWordPow) { matchWordPow = matchWordPow === undefined ? 1 : matchWordPow; var m = sq1.length; var n = sq2.length; function map(i, j) { return i * (n + 1) + j; } var Q = Array((m + 1) * (n + 1)).fill(0); var e = 0.0; for (var i = 0; i < m; ++i) for (var j = 0; j < n; ++j) { e = Math.pow(wordLike(sq1[i], sq2[j]), matchWordPow); if (Q[map(i + 1, j + 1)]) { if (Q[map(i + 1, j + 1)] < Q[map(i, j)] + e) Q[map(i + 1, j + 1)] = Q[map(i, j)] + e; } else Q[map(i + 1, j + 1)] = Q[map(i, j)] + e; e = Math.max(Q[map(i + 1, j)], Q[map(i, j + 1)]); if (e > Q[map(i + 1, j + 1)]) Q[map(i + 1, j + 1)] = e; } return Q[map(m, n)]; } function phraseMatch(a, b, matchWordPow) { matchWordPow = matchWordPow || 1; var spliter = /[\s,-\.+?\_]+/; var notEmp = function (e) { return e.length > 0; }; var sq1 = a.toLowerCase().split(spliter).filter(notEmp); var sq2 = b.toLowerCase().split(spliter).filter(notEmp); var wordsMatchScore = wordsMatch(sq1, sq2); var m = sq1.length; var n = sq2.length; return wordsMatchScore / Math.max(harmonicMean(m, n), 1); }; function phraseLike(a, b, matchWordPow) { matchWordPow = matchWordPow || 1; var spliter = /[\s,-\.+?\_]+/; var notEmp = function (e) { return e.length > 0; }; var sq1 = a.toLowerCase().split(spliter).filter(notEmp); var sq2 = b.toLowerCase().split(spliter).filter(notEmp); var m = sq1.length; var n = sq2.length; var wordsMatchScore = wordsMatch(sq1, sq2); return wordsMatchScore / Math.max(harmonicMean(m, n), 1); } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTable.js var privateDom = new Dom["b" /* default */]().install(ACore["d" /* default */]); var SelectTable_$ = privateDom.$; var SelectTable_ = privateDom._; function SelectTable() { var thisST = this; this.$attachhook = SelectTable_('attachhook').addTo(this); this.sync = new Promise(function (rs) { thisST.$attachhook.on('error', rs); }); this.$buttonsContainer = SelectTable_$('.absol-select-table-buttons-container', this); this.$searchContainer = SelectTable_$('.absol-select-table-searchtextinput-container', this); this.$nonselectedItemsContainer = SelectTable_$('.absol-select-table-nonselected-items-container', this); this.$selectedItemsContainer = SelectTable_$('.absol-select-table-selected-items-container', this); this.$nonselectedSearchItemsContainer = SelectTable_$('.absol-select-table-nonselected-search-items-container', this); this.$selectedSearchItemsContainer = SelectTable_$('.absol-select-table-selected-search-items-container', this); this.$removeAllBtn = SelectTable_$('button.remove-all', this).on('click', this.eventHandler.removeAllBtnClick); this.$addAllBtn = SelectTable_$('button.add-all', this).on('click', this.eventHandler.addAllBtnClick); this.$vscrollerSelected = SelectTable_$('bscroller#selected', this) this.$vscrollerNonselected = SelectTable_$('bscroller#nonselected', this); this.$body = SelectTable_$('.absol-select-table-body', this); this.$header = SelectTable_$('.absol-select-table-header', this); /*** * * @type {SearchTextInput} */ this.$searchTextInput = SelectTable_$('searchtextinput', this).on('stoptyping', this.eventHandler.searchTextInputModify); this.$addAllBtn.updateSize = function () { thisST.updateScroller && thisST.updateScroller(); }; Dom["b" /* default */].addToResizeSystem(this.$addAllBtn); return this; } SelectTable.tag = 'SelectTable'.toLowerCase(); SelectTable.render = function () { return SelectTable_({ class: 'absol-select-table', extendEvent: ['change', 'addall', 'removeall', 'add', 'remove'], child: [ { class: 'absol-select-table-header', child: [ { class: 'absol-select-table-searchtextinput-container', child: 'searchtextinput' }, { class: 'absol-select-table-buttons-container', child: [ { tag: 'button', class: 'add-all', props: { innerHTML: 'Add All' } }, { tag: 'button', class: 'remove-all', props: { innerHTML: 'Remove All' } } ] } ] }, { class: 'absol-select-table-body', child: [ { tag: 'bscroller', attr: { id: 'nonselected' }, class: ['absol-select-table-items-scroller'], child: { child: ['.absol-select-table-nonselected-items-container', '.absol-select-table-nonselected-search-items-container'] } }, { tag: 'bscroller', attr: { id: 'selected' }, class: ['absol-select-table-items-scroller'], child: { child: ['.absol-select-table-selected-items-container', '.absol-select-table-selected-search-items-container'] } } ] } ] }); } SelectTable.prototype.updateButtonsContainerSize = function () { var rootBound = this.$buttonsContainer.getBoundingClientRect(); var containBound = this.$buttonsContainer.getBoundingRecursiveRect(); var fontSize = this.getFontSize(); this.$buttonsContainer.addStyle('width', (containBound.width + 1) / fontSize + 'em'); this.$searchContainer.addStyle('right', (containBound.width + 5) / fontSize + 'em'); }; SelectTable.prototype.addAll = function () { Array.apply(null, this.$nonselectedItemsContainer.childNodes).forEach(function (e) { e.addTo(this.$selectedItemsContainer); }.bind(this)); this.requestSort(); }; SelectTable.prototype.removeAll = function () { Array.apply(null, this.$selectedItemsContainer.childNodes).forEach(function (e) { e.addTo(this.$nonselectedItemsContainer); }.bind(this)) this.requestSort(); }; SelectTable.prototype.updateScroller = function () { var update = function () { if (this.style.height) { var height = parseFloat(this.getComputedStyleValue('height').replace('px', '')); var headerHeight = parseFloat(this.$header.getComputedStyleValue('height').replace('px', '')); var bodyMargin = parseFloat(this.$body.getComputedStyleValue('margin-top').replace('px', '')); var borderWidth = 1; var availableHeight = height - headerHeight - bodyMargin * 2 - borderWidth * 2; this.$vscrollerNonselected.addStyle('max-height', availableHeight + 'px'); this.$vscrollerSelected.addStyle('max-height', availableHeight + 'px'); } }.bind(this); setTimeout(update, 1); }; SelectTable.prototype.getAllItemElement = function () { var selectedItemElements = Array.apply(null, this.$selectedItemsContainer.childNodes); var nonselectedItemElements = Array.apply(null, this.$nonselectedItemsContainer.childNodes); return selectedItemElements.concat(nonselectedItemElements); }; SelectTable.prototype.init = function (props) { this.super(props); this.sync = this.sync.then(this.updateButtonsContainerSize.bind(this)); }; SelectTable.eventHandler = {}; SelectTable.eventHandler.addAllBtnClick = function (event) { this.addAll(); if (this.searching) { this.eventHandler.searchTextInputModify(event); } this.emit('addall', EventEmitter["b" /* default */].copyEvent(event, {}), this); this.updateScroller(); }; SelectTable.eventHandler.removeAllBtnClick = function (event) { this.removeAll(); if (this.searching) { this.eventHandler.searchTextInputModify(event); } this.emit('removeall', EventEmitter["b" /* default */].copyEvent(event, {}), this); this.updateScroller(); }; SelectTable.prototype._filter = function (items, filterText) { var result = []; if (filterText.length == 1) { result = items.map(function (item) { var res = { item: item, text: typeof item === 'string' ? item : item.text }; return res; }).map(function (it) { it.score = 0; var text = it.text.replace(/((\ )|(\s))+/g, ' ').trim(); it.score += text.toLowerCase().indexOf(filterText.toLowerCase()) >= 0 ? 100 : 0; text = nonAccentVietnamese(text); it.score += text.toLowerCase().indexOf(filterText.toLowerCase()) >= 0 ? 100 : 0; return it; }); result.sort(function (a, b) { if (b.score - a.score == 0) { if (nonAccentVietnamese(b.text) > nonAccentVietnamese(a.text)) return -1; return 1; } return b.score - a.score; }); result = result.filter(function (x) { return x.score > 0; }); } else { var its = items.map(function (item) { var res = { item: item, text: typeof item === 'string' ? item : item.text }; var text = res.text.replace(/((\ )|(\s))+/g, ' ').trim(); res.score = (phraseMatch(text, filterText) + phraseMatch(nonAccentVietnamese(text), nonAccentVietnamese(filterText))) / 2; if (nonAccentVietnamese(text).replace(/s/g, '').toLowerCase().indexOf(nonAccentVietnamese(filterText).toLowerCase().replace(/s/g, '')) > -1) res.score = 100; return res; }); if (its.length == 0) return; its.sort(function (a, b) { if (b.score - a.score == 0) { if (nonAccentVietnamese(b.text) > nonAccentVietnamese(a.text)) return -1; return 1; } return b.score - a.score; }); var result = its.filter(function (x) { return x.score > 0.5; }); if (result.length == 0) { var bestScore = its[0].score; result = its.filter(function (it) { return it.score + 0.001 >= bestScore; }); } if (result[0].score == 0) result = []; } result = result.map(function (e) { return e.item; }); return result; }; SelectTable.prototype._stringcmp = function (s0, s1) { if (s0 == s1) return 0; if (s0 > s1) return 1; return -1; }; SelectTable.prototype._getString = function (item) { if (typeof item == "string") return item; return item.text; }; SelectTable.prototype._equalArr = function (a, b) { if (a.length != b.length) return false; for (var i = 0; i < a.length; ++i) { if (a[i] != b[i] && a[i].text != b[i].text && a[i].value != b[i].value) return false; } return true; }; SelectTable.prototype._applySort = function (items, sortFlag) { var res = items.slice(); if (sortFlag == 1 || sortFlag === true) { res.sort(function (a, b) { return this._stringcmp(this._getString(a), this._getString(b)) }.bind(this)) } else if (sortFlag == -1) { res.sort(function (a, b) { return -this._stringcmp(this._getString(a), this._getString(b)) }.bind(this)) } else if (typeof sortFlag == 'function') { res.sort(function (a, b) { return sortFlag(a, b) }.bind(this)) } return res; }; SelectTable.prototype.requestSort = function () { if (!this.sorted || this.sorted == 0) return; var selectedItems = this.selectedItems; var selectedItemsNew = this._applySort(selectedItems, this.sorted); if (!this._equalArr(selectedItems, selectedItemsNew)) { this.selectedItems = selectedItemsNew; } var nonselectedItems = this.nonselectedItems; var nonselectedItemsNew = this._applySort(nonselectedItems, this.sorted); if (!this._equalArr(nonselectedItems, nonselectedItemsNew)) { this.nonselectedItems = nonselectedItemsNew; } }; SelectTable.eventHandler.searchTextInputModify = function (event) { var filterText = this.$searchTextInput.value.trim(); if (filterText.length > 0) { var selectedItems = this.selectedItems; var nonselectedItems = this.nonselectedItems; this.selectedSearchItems = selectedItems; this.nonselectedSearchItems = this._filter(nonselectedItems, filterText); this.selectedSearchItems = this._filter(selectedItems, filterText); } else { } this.searching = filterText.length > 0; }; SelectTable.property = {}; SelectTable.property.disableMoveAll = { set: function (value) { if (value) this.addClass('disable-move-all'); else this.removeClass('disable-move-all'); }, get: function () { return this.hasClass('disable-move-all'); } }; SelectTable.property.removeAllText = { set: function (text) { this._removeAllText = text; //todo: update remove all text if (!text) this.$removeAllBtn.addStyle('display', 'none'); else { this.$removeAllBtn.removeStyle('display'); this.$removeAllBtn.innerHTML = this.removeAllText; this.updateButtonsContainerSize(); } }, get: function () { return this._removeAllText || 'Remove All' } }; SelectTable.property.addAllText = { set: function (text) { this._addAllText = text; if (!text) this.$addAllBtn.addStyle('display', 'none'); else { this.$addAllBtn.removeStyle('display'); this.$addAllBtn.innerHTML = this.removeAllText; this.updateButtonsContainerSize(); } }, get: function () { return this._addAllText || 'Add All' } }; SelectTable.property.searching = { set: function (value) { if (value) { this.addClass('searching'); } else { this.removeClass('searching'); } this.updateScroller(); }, get: function () { return this.hasClass('searching'); } }; SelectTable.property.sorted = { set: function (value) { this._sort = value; this.requestSort(); }, get: function () { return this._sort; } }; SelectTable.property.selectedItems = { set: function (items) { this.$selectedItemsContainer.clearChild(); var $nonselectedItemsContainer = this.$nonselectedItemsContainer; var $selectedItemsContainer = this.$selectedItemsContainer; var self = this; if (items instanceof Array) { items.map(function (item) { return SelectTable_({ tag: 'item', props: { data: item }, on: { requestmove: function (event) { if (this.parentElement == $selectedItemsContainer) { this.addTo($nonselectedItemsContainer); self.emit('remove', EventEmitter["b" /* default */].copyEvent(event, { item: item }), self); } else { this.addTo($selectedItemsContainer); self.emit('add', EventEmitter["b" /* default */].copyEvent(event, { item: item }), self); } self.updateScroller(); self.requestSort(); } } }).addTo(this.$selectedItemsContainer); }.bind(this)) } else { // error } this.updateScroller(); this.requestSort(); }, get: function () { return Array.prototype.map.call(this.$selectedItemsContainer.childNodes, function (e) { return e.data; }); } } SelectTable.property.nonselectedItems = { set: function (items) { this.$nonselectedItemsContainer.clearChild(); var $nonselectedItemsContainer = this.$nonselectedItemsContainer; var $selectedItemsContainer = this.$selectedItemsContainer; var self = this; if (items instanceof Array) { items.map(function (item) { return SelectTable_({ tag: 'item', props: { data: item }, on: { requestmove: function (event) { if (this.parentElement == $selectedItemsContainer) { this.addTo($nonselectedItemsContainer); self.emit('remove', EventEmitter["b" /* default */].copyEvent(event, { item: item }), self); } else { this.addTo($selectedItemsContainer); self.emit('add', EventEmitter["b" /* default */].copyEvent(event, { item: item }), self); } self.updateScroller(); self.requestSort(); } } }).addTo(this.$nonselectedItemsContainer); }.bind(this)) } else { // error } this.updateScroller(); this.requestSort(); }, get: function () { return Array.prototype.map.call(this.$nonselectedItemsContainer.childNodes, function (e) { return e.data; }); } }; SelectTable.property.selectedSearchItems = { set: function (items) { this.$selectedSearchItemsContainer.clearChild(); var $nonselectedSearchItemsContainer = this.$nonselectedSearchItemsContainer; var $selectedSearchItemsContainer = this.$selectedSearchItemsContainer; var table = this; if (items instanceof Array) { items.map(function (item) { return SelectTable_({ tag: 'item', props: { data: item }, on: { requestmove: function (event) { if (this.parentElement == $selectedSearchItemsContainer) { this.addTo($nonselectedSearchItemsContainer); table.getAllItemElement().filter(function (itemElement) { if (itemElement.data == this.data) { itemElement.addTo(table.$nonselectedItemsContainer); return true; } return false; }.bind(this)); table.emit('remove', EventEmitter["b" /* default */].copyEvent(event, { item: item }), table); } else { this.addTo($selectedSearchItemsContainer); table.getAllItemElement().filter(function (itemElement) { if (itemElement.data == this.data) { itemElement.addTo(table.$selectedItemsContainer); return true; } return false; }.bind(this)); table.emit('add', EventEmitter["b" /* default */].copyEvent(event, { item: item }), table); } table.updateScroller(); table.requestSort(); } } }).addTo(this.$selectedSearchItemsContainer); }.bind(this)) } else { // error } this.updateScroller(); }, get: function () { return Array.prototype.map.call(this.$selectedSearchItemsContainer.childNodes, function (e) { return e.data; }); } } SelectTable.property.nonselectedSearchItems = { set: function (items) { this.$nonselectedSearchItemsContainer.clearChild(); var $nonselectedSearchItemsContainer = this.$nonselectedSearchItemsContainer; var $selectedSearchItemsContainer = this.$selectedSearchItemsContainer; var table = this; if (items instanceof Array) { items.map(function (item) { return SelectTable_({ tag: 'item', props: { data: item }, on: { requestmove: function (event) { if (this.parentElement == $selectedSearchItemsContainer) { this.addTo($nonselectedSearchItemsContainer); table.getAllItemElement().filter(function (itemElement) { if (itemElement.data == this.data) { itemElement.addTo(table.$nonselectedItemsContainer); return true; } return false; }.bind(this)); table.emit('remove', EventEmitter["b" /* default */].copyEvent(event, { item: item }), table); } else { this.addTo($selectedSearchItemsContainer); table.getAllItemElement().filter(function (itemElement) { if (itemElement.data == this.data) { itemElement.addTo(table.$selectedItemsContainer); return true; } return false; }.bind(this)); table.emit('add', EventEmitter["b" /* default */].copyEvent(event, { item: item }), table); } table.updateScroller(); table.requestSort(); } } }).addTo(this.$nonselectedSearchItemsContainer); }.bind(this)) } else { // error } this.updateScroller(); }, get: function () { return Array.prototype.map.call(this.$nonselectedSearchItemsContainer.childNodes, function (e) { return e.data; }); } }; /* namespace of selecttable */ function Item() { var res = SelectTable_({ extendEvent: ['requestmove'], class: 'absol-select-table-item', child: ['span.absol-select-table-item-text', { class: 'absol-select-table-item-right-container', child: { class: 'absol-select-table-item-right-container-table', child: { class: 'absol-select-table-item-right-container-cell', child: ['addicon', 'subicon'] } } } ] }); res.$text = SelectTable_$('span', res); res.eventHandler = OOP["a" /* default */].bindFunctions(res, Item.eventHandler); res.$rightBtn = SelectTable_$('.absol-select-table-item-right-container', res); res.on('dblclick', res.eventHandler.dblclick); res.$rightBtn.on('click', res.eventHandler.rightBtClick); return res; }; Item.eventHandler = {}; Item.eventHandler.dblclick = function (event) { event.preventDefault(); if (!EventEmitter["b" /* default */].hitElement(this.$rightBtn, event)) this.emit('requestmove', event, this); }; Item.eventHandler.rightBtClick = function (event) { this.emit('requestmove', event, this); }; Item.property = {}; Item.property.data = { set: function (value) { this._data = value; if (value) { var text; if (typeof value == "string") { text = value; } else { text = value.text; } this.$text.innerHTML = text; } }, get: function () { return this._data; } }; Item.property.text = { get: function () { return this._data ? (typeof this._data == 'string' ? this._data : this._data.text) : ''; } }; /** * * <svg width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(0,-197)"> <path d="m39.873 198.21v38.668h-38.668v20.252h38.668v38.668h20.253v-38.668h38.668v-20.252h-38.668v-38.668z" style="fill-rule:evenodd;fill:#5fbbc2;stroke-linejoin:round;stroke-width:2.4109;stroke:#002eea"/> </g> </svg> */ function AddIcon() { return HTML5_Svg.ShareInstance.buildSvg( '<svg class="add-icon" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' + '<g transform="translate(0,-197)">' + '<path d="m39.873 198.21v38.668h-38.668v20.252h38.668v38.668h20.253v-38.668h38.668v-20.252h-38.668v-38.668z" style="fill-rule:evenodd;stroke-linejoin:round;stroke-width:2.4109;" />' + '</g>' + '</svg>' ); }; function SubIcon() { return HTML5_Svg.ShareInstance.buildSvg( '<svg class="sub-icon" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' + ' <g transform="translate(0,-197)">' + ' <path d="m98.795 236.87v20.253h-97.589v-20.253z" style="fill-rule:evenodd;stroke-linejoin:round;stroke-width:2.411;"/>' + ' </g>' + '</svg>' ); }; privateDom.install({ subicon: SubIcon, addicon: AddIcon, item: Item }); SelectTable.privateDom = privateDom; ACore["d" /* default */].install(SelectTable); /* harmony default export */ var js_SelectTable = (SelectTable); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTable2.js var SelectTable2_privateDom = new Dom["b" /* default */]().install(ACore["d" /* default */]).install(js_SelectTable.privateDom); var SelectTable2_$ = SelectTable2_privateDom.$; var SelectTable2_ = SelectTable2_privateDom._; function SelectTable2() { var thisST = this; this.$attachhook = SelectTable2_('attachhook').addTo(this); this.sync = new Promise(function (rs) { thisST.$attachhook.on('error', rs); }); this.$buttonsContainer = SelectTable2_$('.absol-select-table-buttons-container', this); this.$searchContainer = SelectTable2_$('.absol-select-table-searchtextinput-container', this); this.$nonselectedItemsContainer = SelectTable2_$('.absol-select-table-nonselected-items-container', this); this.$selectedItemsContainer = SelectTable2_$('.absol-select-table-selected-items-container', this); this.$nonselectedSearchItemsContainer = SelectTable2_$('.absol-select-table-nonselected-search-items-container', this); this.$selectedSearchItemsContainer = SelectTable2_$('.absol-select-table-selected-search-items-container', this); this.$removeAllBtn = SelectTable2_$('button.remove-all', this).on('click', this.eventHandler.removeAllBtnClick); this.$addAllBtn = SelectTable2_$('button.add-all', this).on('click', this.eventHandler.addAllBtnClick); this.$vscrollerSelected = SelectTable2_$('vscroller#selected', this) this.$vscrollerNonselected = SelectTable2_$('vscroller#nonselected', this); this.$body = SelectTable2_$('.absol-select-table-body', this); this.$searchTextInput = SelectTable2_$('searchtextinput', this).on('stoptyping', this.eventHandler.searchTextInputModify); }; SelectTable2.tag = 'SelectTable2'.toLowerCase(); SelectTable2.render = function () { return SelectTable2_({ class: ['absol-select-table', 'exclude'], extendEvent: ['change', 'addall', 'removeall', 'add', 'remove'], child: [ { class: 'absol-select-table-header', child: [ { class: 'absol-select-table-searchtextinput-container', child: 'searchtextinput' }, { class: 'absol-select-table-buttons-container', child: [ { tag: 'button', class: 'add-all', props: { innerHTML: 'Add All' } }, { tag: 'button', class: 'remove-all', props: { innerHTML: 'Remove All' } } ] } ] }, { class: 'absol-select-table-body', child: [ { tag: 'vscroller', attr: { id: 'nonselected' }, class: 'absol-select-table-items-scroller', child: { child: ['.absol-select-table-nonselected-items-container', '.absol-select-table-nonselected-search-items-container'] } }, { tag: 'vscroller', attr: { id: 'selected' }, class: 'absol-select-table-items-scroller', child: { child: ['.absol-select-table-selected-items-container', '.absol-select-table-selected-search-items-container'] } } ] } ] }); }; SelectTable2.prototype.updateButtonsContainerSize = function () { var rootBound = this.$buttonsContainer.getBoundingClientRect(); var containBound = this.$buttonsContainer.getBoundingRecursiveRect(); var fontSize = this.getFontSize(); this.$buttonsContainer.addStyle('width', (containBound.width + 1) / fontSize + 'em'); this.$searchContainer.addStyle('right', (containBound.width + 5) / fontSize + 'em'); }; SelectTable2.prototype.addAll = function () { Array.apply(null, this.$nonselectedItemsContainer.childNodes).forEach(function (e) { e.addTo(this.$selectedItemsContainer); }.bind(this)); this.requestSort(); }; SelectTable2.prototype.removeAll = function () { Array.apply(null, this.$selectedItemsContainer.childNodes).forEach(function (e) { e.addTo(this.$nonselectedItemsContainer); }.bind(this)) this.requestSort(); }; SelectTable2.prototype.updateScroller = function () { var update = function () { if (this.style.height) { var bodyMargin = parseFloat(this.$body.getComputedStyleValue('margin-top').replace('px', '') || (0.14285714285 * 14 + '')); var bound = this.getBoundingClientRect(); var bodyBound = this.$body.getBoundingClientRect(); var bodyRBound = this.$body.getBoundingRecursiveRect(); var availableHeight = bound.bottom - bodyMargin - bodyBound.top; var isOverflowHeight = availableHeight < bodyRBound.height; if (isOverflowHeight) { this.$vscrollerNonselected.addStyle('max-height', availableHeight + 'px'); this.$vscrollerSelected.addStyle('max-height', availableHeight + 'px'); this.$vscrollerSelected.addClass('limited-height'); this.$vscrollerNonselected.addClass('limited-height'); } else { this.$vscrollerNonselected.removeStyle('max-height'); this.$vscrollerSelected.removeStyle('max-height'); this.$vscrollerSelected.removeClass('limited-height'); this.$vscrollerSelected.removeClass('limited-height'); this.$vscrollerNonselected.removeClass('limited-height'); } } requestAnimationFrame(this.$vscrollerNonselected.requestUpdateSize.bind(this.$vscrollerNonselected)); requestAnimationFrame(this.$vscrollerSelected.requestUpdateSize.bind(this.$vscrollerSelected)); }.bind(this); setTimeout(update, 1); }; SelectTable2.prototype.getAllItemElement = function () { var selectedItemElements = Array.apply(null, this.$selectedItemsContainer.childNodes); var nonselectedItemElements = Array.apply(null, this.$nonselectedItemsContainer.childNodes); return selectedItemElements.concat(nonselectedItemElements); }; SelectTable2.prototype.init = function (props) { this.super(props); this.sync = this.sync.then(this.updateButtonsContainerSize.bind(this)); }; SelectTable2.eventHandler = {}; SelectTable2.eventHandler.addAllBtnClick = function (event) { this.addAll(); if (this.searching) { this.eventHandler.searchTextInputModify(event); } this.emit('addall', EventEmitter["b" /* default */].copyEvent(event, {}), this); this.updateScroller(); }; SelectTable2.eventHandler.removeAllBtnClick = function (event) { this.removeAll(); if (this.searching) { this.eventHandler.searchTextInputModify(event); } this.emit('removeall', EventEmitter["b" /* default */].copyEvent(event, {}), this); this.updateScroller(); }; SelectTable2.prototype._filter = function (items, filterText) { var result = []; if (filterText.length == 1) { result = items.map(function (item) { var res = { item: item, text: typeof item === 'string' ? item : item.text }; return res; }).map(function (it) { it.score = 0; var text = it.text.replace(/((\ )|(\s))+/g, ' ').trim(); it.score += text.toLowerCase().indexOf(filterText.toLowerCase()) >= 0 ? 100 : 0; text = nonAccentVietnamese(text); it.score += text.toLowerCase().indexOf(filterText.toLowerCase()) >= 0 ? 100 : 0; return it; }); result.sort(function (a, b) { if (b.score - a.score == 0) { if (nonAccentVietnamese(b.text) > nonAccentVietnamese(a.text)) return -1; return 1; } return b.score - a.score; }); result = result.filter(function (x) { return x.score > 0; }); } else { var its = items.map(function (item) { var res = { item: item, text: typeof item === 'string' ? item : item.text }; var text = res.text.replace(/((\ )|(\s))+/g, ' ').trim(); res.score = (phraseMatch(text, filterText) + phraseMatch(nonAccentVietnamese(text), nonAccentVietnamese(filterText))) / 2; if (nonAccentVietnamese(text).replace(/s/g, '').toLowerCase().indexOf(nonAccentVietnamese(filterText).toLowerCase().replace(/s/g, '')) > -1) res.score = 100; return res; }); if (its.length == 0) return; its.sort(function (a, b) { if (b.score - a.score == 0) { if (nonAccentVietnamese(b.text) > nonAccentVietnamese(a.text)) return -1; return 1; } return b.score - a.score; }); var result = its.filter(function (x) { return x.score > 0.5; }); if (result.length == 0) { var bestScore = its[0].score; result = its.filter(function (it) { return it.score + 0.001 >= bestScore; }); } if (result[0].score == 0) result = []; } result = result.map(function (e) { return e.item; }); return result; }; SelectTable2.prototype._stringcmp = function (s0, s1) { if (s0 == s1) return 0; if (s0 > s1) return 1; return -1; }; SelectTable2.prototype._getString = function (item) { if (typeof item == "string") return item; return item.text; }; SelectTable2.prototype._equalArr = function (a, b) { if (a.length != b.length) return false; for (var i = 0; i < a.length; ++i) { if (a[i] != b[i]) return false; } return true; }; SelectTable2.prototype._applySort = function (items, sortFlag) { var res = items.slice(); if (sortFlag == 1 || sortFlag === true) { res.sort(function (a, b) { return this._stringcmp(this._getString(a), this._getString(b)) }.bind(this)) } else if (sortFlag == -1) { res.sort(function (a, b) { return -this._stringcmp(this._getString(a), this._getString(b)) }.bind(this)) } else if (typeof sortFlag == 'function') { res.sort(function (a, b) { return sortFlag(a, b) }.bind(this)) } return res; }; SelectTable2.prototype.requestSort = function () { if (!this.sorted || this.sorted == 0) return; var selectedItems = this.selectedItems; var selectedItemsNew = this._applySort(selectedItems, this.sorted); if (!this._equalArr(selectedItems, selectedItemsNew)) { this.selectedItems = selectedItemsNew; } var nonselectedItems = this.nonselectedItems; var nonselectedItemsNew = this._applySort(nonselectedItems, this.sorted); if (!this._equalArr(nonselectedItems, nonselectedItemsNew)) { this.nonselectedItems = nonselectedItemsNew; } }; SelectTable2.eventHandler.searchTextInputModify = function (event) { var filterText = this.$searchTextInput.value.trim(); if (filterText.length > 0) { var selectedItems = this.selectedItems; var nonselectedItems = this.nonselectedItems; this.selectedSearchItems = selectedItems; this.nonselectedSearchItems = this._filter(nonselectedItems, filterText); this.selectedSearchItems = this._filter(selectedItems, filterText); } else { } this.searching = filterText.length > 0; }; SelectTable2.property = {}; SelectTable2.property.disableMoveAll = { set: function (value) { if (value) this.addClass('disable-move-all'); else this.removeClass('disable-move-all'); }, get: function () { return this.hasClass('disable-move-all'); } }; SelectTable2.property.removeAllText = { set: function (text) { this._removeAllText = text; //todo: update remove all text if (!text) this.$removeAllBtn.addStyle('display', 'none'); else { this.$removeAllBtn.removeStyle('display'); this.$removeAllBtn.innerHTML = this.removeAllText; this.updateButtonsContainerSize(); } }, get: function () { return this._removeAllText || 'Remove All' } }; SelectTable2.property.addAllText = { set: function (text) { this._addAllText = text; if (!text) this.$addAllBtn.addStyle('display', 'none'); else { this.$addAllBtn.removeStyle('display'); this.$addAllBtn.innerHTML = this.removeAllText; this.updateButtonsContainerSize(); } }, get: function () { return this._addAllText || 'Add All' } }; SelectTable2.property.searching = { set: function (value) { if (value) { this.addClass('searching'); } else { this.removeClass('searching'); } this.updateScroller(); }, get: function () { return this.hasClass('searching'); } }; SelectTable2.property.sorted = { set: function (value) { this._sort = value; this.requestSort(); }, get: function () { return this._sort; } }; SelectTable2.property.selectedItems = { set: function (items) { this.$selectedItemsContainer.clearChild(); var $nonselectedItemsContainer = this.$nonselectedItemsContainer; var $selectedItemsContainer = this.$selectedItemsContainer; var self = this; if (items instanceof Array) { items.map(function (item) { return SelectTable2_({ tag: 'item', props: { data: item }, on: { requestmove: function (event) { if (this.parentElement == $selectedItemsContainer) { this.addTo($nonselectedItemsContainer); self.emit('remove', EventEmitter["b" /* default */].copyEvent(event, { item: item }), self); } else { this.addTo($selectedItemsContainer); self.emit('add', EventEmitter["b" /* default */].copyEvent(event, { item: item }), self); } self.updateScroller(); self.requestSort(); } } }).addTo(this.$selectedItemsContainer); }.bind(this)) } else { // error } this.updateScroller(); this.requestSort(); }, get: function () { return Array.prototype.map.call(this.$selectedItemsContainer.childNodes, function (e) { return e.data; }); } } SelectTable2.property.nonselectedItems = { set: function (items) { this.$nonselectedItemsContainer.clearChild(); var $nonselectedItemsContainer = this.$nonselectedItemsContainer; var $selectedItemsContainer = this.$selectedItemsContainer; var self = this; if (items instanceof Array) { items.map(function (item) { return SelectTable2_({ tag: 'item', props: { data: item }, on: { requestmove: function (event) { if (this.parentElement == $selectedItemsContainer) { this.addTo($nonselectedItemsContainer); self.emit('remove', EventEmitter["b" /* default */].copyEvent(event, { item: item }), self); } else { this.addTo($selectedItemsContainer); self.emit('add', EventEmitter["b" /* default */].copyEvent(event, { item: item }), self); } self.updateScroller(); self.requestSort(); } } }).addTo(this.$nonselectedItemsContainer); }.bind(this)) } else { // error } this.updateScroller(); this.requestSort(); }, get: function () { return Array.prototype.map.call(this.$nonselectedItemsContainer.childNodes, function (e) { return e.data; }); } }; SelectTable2.property.selectedSearchItems = { set: function (items) { this.$selectedSearchItemsContainer.clearChild(); var $nonselectedSearchItemsContainer = this.$nonselectedSearchItemsContainer; var $selectedSearchItemsContainer = this.$selectedSearchItemsContainer; var table = this; if (items instanceof Array) { items.map(function (item) { return SelectTable2_({ tag: 'item', props: { data: item }, on: { requestmove: function (event) { if (this.parentElement == $selectedSearchItemsContainer) { this.addTo($nonselectedSearchItemsContainer); table.getAllItemElement().filter(function (itemElement) { if (itemElement.data == this.data) { itemElement.addTo(table.$nonselectedItemsContainer); return true; } return false; }.bind(this)); table.emit('remove', EventEmitter["b" /* default */].copyEvent(event, { item: item }), table); } else { this.addTo($selectedSearchItemsContainer); table.getAllItemElement().filter(function (itemElement) { if (itemElement.data == this.data) { itemElement.addTo(table.$selectedItemsContainer); return true; } return false; }.bind(this)); table.emit('add', EventEmitter["b" /* default */].copyEvent(event, { item: item }), table); } table.updateScroller(); table.requestSort(); } } }).addTo(this.$selectedSearchItemsContainer); }.bind(this)) } else { // error } this.updateScroller(); }, get: function () { return Array.prototype.map.call(this.$selectedSearchItemsContainer.childNodes, function (e) { return e.data; }); } } SelectTable2.property.nonselectedSearchItems = { set: function (items) { this.$nonselectedSearchItemsContainer.clearChild(); var $nonselectedSearchItemsContainer = this.$nonselectedSearchItemsContainer; var $selectedSearchItemsContainer = this.$selectedSearchItemsContainer; var table = this; if (items instanceof Array) { items.map(function (item) { return SelectTable2_({ tag: 'item', props: { data: item }, on: { requestmove: function (event) { if (this.parentElement == $selectedSearchItemsContainer) { this.addTo($nonselectedSearchItemsContainer); table.getAllItemElement().filter(function (itemElement) { if (itemElement.data == this.data) { itemElement.addTo(table.$nonselectedItemsContainer); return true; } return false; }.bind(this)); table.emit('remove', EventEmitter["b" /* default */].copyEvent(event, { item: item }), table); } else { this.addTo($selectedSearchItemsContainer); table.getAllItemElement().filter(function (itemElement) { if (itemElement.data == this.data) { itemElement.addTo(table.$selectedItemsContainer); return true; } return false; }.bind(this)); table.emit('add', EventEmitter["b" /* default */].copyEvent(event, { item: item }), table); } table.updateScroller(); table.requestSort(); } } }).addTo(this.$nonselectedSearchItemsContainer); }.bind(this)) } else { // error } this.updateScroller(); }, get: function () { return Array.prototype.map.call(this.$nonselectedSearchItemsContainer.childNodes, function (e) { return e.data; }); } }; /* namespace of selecttable */ function SelectTable2_Item() { var res = SelectTable2_({ extendEvent: ['requestmove', 'clickadd', 'clickremove', 'clickexclude'], class: 'absol-select-table-item', child: ['span.absol-select-table-item-text', { class: 'absol-select-table-item-right-container', child: { class: 'absol-select-table-item-right-container-table', child: { class: 'absol-select-table-item-right-container-row', child: [ { attr: { title: 'Add' }, class: ['absol-select-table-item-right-container-cell', 'add'], child: 'addicon' }, { attr: { title: 'Remove' }, class: ['absol-select-table-item-right-container-cell', 'remove'], child: 'subicon' }, { attr: { title: 'Exclude' }, class: ['absol-select-table-item-right-container-cell', 'exclude'], child: 'excludeico' }, ] } } } ] }); res.$text = SelectTable2_$('span', res); res.eventHandler = OOP["a" /* default */].bindFunctions(res, SelectTable2_Item.eventHandler); res.$rightBtn = SelectTable2_$('.absol-select-table-item-right-container', res); res.on('dblclick', res.eventHandler.dblclick); res.$addBtn = SelectTable2_$('.absol-select-table-item-right-container-cell.add', res).on('click', res.eventHandler.addBtClick); res.$removeBtn = SelectTable2_$('.absol-select-table-item-right-container-cell.remove', res).on('click', res.eventHandler.removeBtClick); res.$excludeBtn = SelectTable2_$('.absol-select-table-item-right-container-cell.exclude', res).on('click', res.eventHandler.excludeBtClick); return res; }; SelectTable2_Item.eventHandler = {}; SelectTable2_Item.eventHandler.dblclick = function (event) { event.preventDefault(); if (!EventEmitter["b" /* default */].hitElement(this.$rightBtn, event)) this.emit('requestmove', event, this); }; SelectTable2_Item.eventHandler.rightBtClick = function (event) { this.emit('requestmove', event, this); }; SelectTable2_Item.eventHandler.removeBtClick = function (event) { this.emit('clickremove', event, this); }; SelectTable2_Item.eventHandler.addBtClick = function (event) { this.emit('clickadd', event, this); }; SelectTable2_Item.eventHandler.excludeBtClick = function (event) { this.emit('clickexclude', event, this); }; SelectTable2_Item.property = {}; SelectTable2_Item.property.data = { set: function (value) { this._data = value; if (value) { var text; if (typeof value == "string") { text = value; } else { text = value.text; } this.$text.innerHTML = text; } }, get: function () { return this._data; } }; SelectTable2_Item.property.text = { get: function () { return this._data ? (typeof this._data == 'string' ? this._data : this._data.text) : ''; } }; function ExcludeIco() { return SelectTable2_( '<svg class="exclude-icon" width="24" height="24" viewBox="0 0 24 24">\ <path d="M8.27,3L3,8.27V15.73L8.27,21H15.73C17.5,19.24 21,15.73 21,15.73V8.27L15.73,3M9.1,5H14.9L19,9.1V14.9L14.9,19H9.1L5,14.9V9.1M11,15H13V17H11V15M11,7H13V13H11V7" />\ </svg>'); } SelectTable2_privateDom.install({ item: SelectTable2_Item, excludeico: ExcludeIco }); // not completed yet ACore["d" /* default */].install('selecttable2', SelectTable2); /* harmony default export */ var js_SelectTable2 = (SelectTable2); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/spaninput.css var spaninput = __webpack_require__(184); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SpanInput.js var SpanInput_ = ACore["d" /* default */]._; var SpanInput_$ = ACore["d" /* default */].$; function SpanInput() { this.defineEvent(['change']); this._inputType = 0; this._lastValue = null; this.on('paste', this.eventHandler.paste) .on('keyup', this.eventHandler.keyup) .on('keydown', this.eventHandler.keydown) .on('blur', this.eventHandler.blur); } SpanInput.prototype.notifyValueChange = function (event) { var cValue = this.value; if (this._lastValue != cValue && (this._inputType != 1 || !isNaN(this._lastValue) || !isNaN(cValue))) { this._lastValue = cValue; this.emit('change', { type: 'change', value: cValue, originEvent: event }, this); } } SpanInput.eventHandler = {}; SpanInput.eventHandler.keyup = function (event) { if (this._inputType == 0) { this.notifyValueChange(event); } else if (this._inputType == 1) { this.eventHandler.numberKeyup(event) } }; SpanInput.eventHandler.keydown = function (event) { if (this._inputType == 0) { } else if (this._inputType == 1) { this.eventHandler.numberKeydown(event) } }; SpanInput.eventHandler.numberBlur = function (value) { this.notifyValueChange(event); }; SpanInput.eventHandler.textBlur = function (event) { this.notifyValueChange(event); }; SpanInput.eventHandler.blur = function (event) { if (this._inputType == 0) { this.eventHandler.textBlur(event); } else if (this._inputType == 1) { this.eventHandler.numberKeydown(event) } } SpanInput.eventHandler.numberKeyup = function (event) { this.notifyValueChange(); }; SpanInput.eventHandler.numberKeydown = function (event) { var key = event.key; if (key == 'Enter') { event.preventDefault(); this.blur(); this.notifyValueChange(); return; } if (key && key.length == 1 && !event.ctrlKey && !event.altKey) { if (key.match(/[0-9.\-\+]/)) { if (key == '.' && this.text.indexOf('.') >= 0) event.preventDefault(); if ((key == '+' || key == '-') && (this.text.indexOf('+') >= 0 || this.text.indexOf('-') >= 0 || getCaretPosition(this) > 0)) event.preventDefault(); } else event.preventDefault(); } }; SpanInput.eventHandler.paste = function (event) { event.preventDefault(); if (event.clipboardData && event.clipboardData.getData) { var text = event.clipboardData.getData("text/plain"); if (this._inputType == 1) text = text.replace(/[^0-9.\-+]/g, ''); document.execCommand("insertHTML", false, text); if (this._inputType == 1) { if (isNaN(this.value)) { this.value = NaN; } } } else if (window.clipboardData && window.clipboardData.getData) { var text = window.clipboardData.getData("Text"); if (this._inputType == 1) text = text.replace(/[^0-9.\-+]/g, ''); insertTextAtCursor(text); if (this._inputType == 1) { if (isNaN(this.value)) { this.value = NaN; } } } }; SpanInput.property = {}; SpanInput.property.value = { set: function (value) { if (this._inputType == 1 && isNaN(value)) value = null; this.clearChild(); if (value !== null) this.addChild(SpanInput_({ text: value + '' })); }, get: function () { if (this._inputType == 1) { return parseFloat(this.text); } else { return this.text; } } }; SpanInput.property.type = { set: function (value) { var index = ['text', 'number'].indexOf(value); if (index < 0) index = 0; this._inputType = index; if (index == 1) { this.addClass('absol-span-input-empty-minus'); } else { this.removeClass('absol-span-input-empty-minus'); } }, get: function () { return ['text', 'number'][this._inputType]; } }; SpanInput.property.text = { get: function () { return getTextIn(this); } } SpanInput.tag = 'spaninput'; SpanInput.render = function () { return SpanInput_('span.absol-span-input[contenteditable="true"]'); }; ACore["d" /* default */].install(SpanInput); /* harmony default export */ var js_SpanInput = (SpanInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/statictabbar.css var statictabbar = __webpack_require__(186); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/StaticTabbar.js var StaticTabbar_$ = ACore["d" /* default */].$; var StaticTabbar_ = ACore["d" /* default */]._; function StaticTabbar() { var thisST = this; this.$activeBox = StaticTabbar_$('.absol-static-tabbar-active-box', this) this.$hline = StaticTabbar_$('.absol-static-tabbar-hline', this); this.$buttons = []; this._btDict = {}; this._activedButton = undefined; this.sync = new Promise(function (resolve) { StaticTabbar_('attachhook').on('error', function () { this.remove(); resolve(); }).addTo(thisST); }); return this; } StaticTabbar.tag = 'StaticTabbar'.toLowerCase(); StaticTabbar.render = function () { return StaticTabbar_({ class: 'absol-static-tabbar', extendEvent: 'change', child: [ { class: 'absol-static-tabbar-active-box', child: '.absol-static-tabbar-hline' } ] }); }; StaticTabbar.prototype.fireChange = function (data) { this.emit('change', { target: this, data, value: this.value }, self); } StaticTabbar.property = {}; StaticTabbar.property.items = { set: function (value) { this.$buttons.forEach(function (e) { e.remove() }); this._items = value; var self = this; this.$buttons = this.items.map(function (tab) { var ident = (tab.value || randomIdent()); var button = StaticTabbar_({ tag: 'button', class: 'absol-static-tabbar-button', id: 'tab-' + ident, child: { tag: 'span', child: { text: tab.text } }, on: { click: function (event) { if (self.value != tab.value) { self.value = ident; self.fireChange(tab); } } } }).addTo(self); self._btDict[ident] = button; return button; }); if (this.value !== undefined) { this.sync.then(this.activeTab.bind(this, this.value)); } }, get: function () { return this._items || []; } }; StaticTabbar.property.value = { set: function (value) { this._value = value; if (this.$buttons.length > 0) { this.sync.then(this.activeTab.bind(this, value)); } }, get: function () { return this._value; } }; StaticTabbar.prototype.activeTab = function (ident) { if (this._activedButton) this._activedButton.removeClass('active'); var button = this._btDict[ident]; this._activedButton = button; if (button) { button.addClass('active'); var bound = this.getBoundingClientRect(); var buttonBound = button.getBoundingClientRect(); var dx = buttonBound.left - bound.left; var fontSize = this.getFontSize(); this.$activeBox.addStyle({ left: dx / fontSize + 'em', width: buttonBound.width / fontSize + 'em' }); } else { this.$activeBox.addStyle({ left: '0', width: '0' }); } }; ACore["d" /* default */].install('statictabbar', StaticTabbar); /* harmony default export */ var js_StaticTabbar = (StaticTabbar); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/switch.css var css_switch = __webpack_require__(188); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Switch.js var Switch_ = ACore["d" /* default */]._; var Switch_$ = ACore["d" /* default */].$; function Switch() { var thisS = this; this.$input = Switch_$('input', this); this.$input.on('click', function (event) { thisS.emit('change', event, thisS); }); OOP["a" /* default */].drillProperty(this, this.$input, 'checked'); OOP["a" /* default */].drillProperty(this, this.$input, 'isOn', 'checked'); this.on('click', function (event){ if (this.readOnly) event.preventDefault(); }, true); } Switch.tag = 'switch'; Switch.render = function () { return Switch_({ tag: 'label', class: 'absol-switch', extendEvent: 'change', child: [ 'input[type="checkbox"]', 'span.absol-switch-slider' ] }); }; Switch.attribute = { checked: { set: function (value) { if (value == 'false' || value == null) { this.checked = false; } else { this.checked = true; } }, get: function () { return this.checked ? 'true' : 'false' }, remove: function () { this.checked = false; } }, disabled: { set: function (value) { if (value == 'false' || value == null) { this.disabled = false; } else { this.disabled = true; } }, get: function () { return this.disabled ? 'true' : 'false' }, remove: function () { this.disabled = false; } } }; Switch.property = { disabled: { set: function (value) { this.$input.disabled = !!value; if (value) { this.addClass('disabled'); } else { this.removeClass('disabled'); } }, get: function () { return this.$input.disabled; } }, readOnly: CheckBoxInput.property.readOnly }; ACore["d" /* default */].install('switch', Switch); /* harmony default export */ var js_Switch = (Switch); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/tablescroller.css var tablescroller = __webpack_require__(190); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/tablescroller/TSLMoveTool.js /*** * * @param {TableScroller} elt * @constructor */ function TSLMoveTool(elt) { this.elt = elt; this.$table = null; Object.keys(TSLMoveTool.prototype).forEach((key) => { if (key.startsWith('ev_')) { this[key] = this[key].bind(this); } }); this.init(); } TSLMoveTool.prototype.init = function () { this.elt = Object(ACore["c" /* _ */])({ tag: js_Hanger, elt: this.elt, on: { predrag: this.ev_preDrag, dragstart: this.ev_dragStart, drag: this.ev_drag, dragend: this.ev_dragEnd } }); }; TSLMoveTool.prototype.onAttachTable = function () { }; TSLMoveTool.prototype.ev_preDrag = function (event) { var e = event.target; var isOK = false; while (e && e.tagName !== 'TABLE') { if (e.classList && e.classList.contains('as-drag-zone')) { isOK = true; break; } e = e.parentElement; } if (isOK) { event.preventDefault(); } else { event.cancel(); } }; TSLMoveTool.prototype._findRowIdx = function (y) { var newY = Math_Rectangle.fromClientRect(this.elt.$originTableBody.getBoundingClientRect()).y; var oldY = this.dragData.bodyBound.y; var dy = newY - oldY; var yArr = this.dragData.rowBounds.map((rect) => rect.y + dy + rect.height / 2); if (this.dragData.rowBounds.length === 0) yArr.push(0); var low = 0; var high = yArr.length - 1; var mid0, mid1; while (low < high) { mid0 = (low + high) >> 1; mid1 = mid0 + 1; if (Math.abs(y - yArr[mid0]) < Math.abs(y - yArr[mid1])) { high = mid0; } else { low = mid1; } } return low; }; TSLMoveTool.prototype.ev_dragStart = function (event) { var t = this.findRow(event.target); if (!t) return; this.elt.addClass('as-dragging'); this.dragData = Object.assign({}, t); this.dragData.copy.addClass('as-dragging'); this.dragData.original.addClass('as-dragging'); var rowBound = Math_Rectangle.fromClientRect(this.dragData.original.getBoundingClientRect()); var bodyBound = Math_Rectangle.fromClientRect(this.elt.$originTableBody.getBoundingClientRect()); this.dragData.mouseOffset = event.currentPoint .sub(rowBound.A()); this.dragData.rowIdx = Array.prototype.indexOf.call(this.elt.$originTableBody.childNodes, this.dragData.original); this.dragData.newRowIdx = this.dragData.rowIdx; this.dragData.rowBound = rowBound; this.dragData.bodyBound = bodyBound; this.dragData.rowOffset = rowBound.A().sub(bodyBound.A()); this.dragData.rowBounds = Array.prototype.map.call(this.elt.$originTableBody.childNodes, elt => Math_Rectangle.fromClientRect(elt.getBoundingClientRect())); }; TSLMoveTool.prototype.ev_drag = function (event) { if (!this.dragData) return; var bodyBound = Math_Rectangle.fromClientRect(this.elt.$originTableBody.getBoundingClientRect()); var rowA = bodyBound.A().add(this.dragData.rowOffset); var rowTransformed = event.currentPoint.sub(this.dragData.mouseOffset); var transform = rowTransformed.sub(rowA); var originalRow = this.dragData.original; originalRow.addStyle('transform', `translate(0, ${transform.y}px )`); this.dragData.copy.addStyle('transform', `translate(0, ${transform.y}px )`); this.dragData.hiddenCells = Array.prototype.filter.call(this.dragData.original.childNodes, e => e.tagName === 'TD') .slice(0, this.elt.fixedCol); this.dragData.hiddenCells.forEach(e => Object(ACore["a" /* $ */])(e).addClass('as-transparent-fix')); var newIdx = this._findRowIdx(rowTransformed.y + this.dragData.rowBound.height / 2); this.dragData.newRowIdx = newIdx; var rows = this.elt.$originTableBody.childNodes; var curIdx = this.dragData.rowIdx; // var copyRows = this.elt.$f var rowBound = this.dragData.rowBound; rows.forEach((elt, i) => { if (elt === originalRow) return; var copyElt = this.elt.leftCopyRows[elt.getAttribute('data-id')]; var dy = 0; if (i >= Math.min(newIdx, curIdx) && i <= Math.max(newIdx, curIdx)) { if (i > curIdx && i <= newIdx) { dy = -rowBound.height; } else if (i >= newIdx && i < curIdx) { dy = rowBound.height; } } elt.addStyle('transform', `translate(0, ${dy}px)`); copyElt.addStyle('transform', `translate(0, ${dy}px)`); }); }; TSLMoveTool.prototype.ev_dragEnd = function (event) { this.dragData.original.removeStyle('transform'); this.dragData.copy.removeStyle('transform'); this.dragData.copy.removeClass('as-dragging'); this.dragData.original.removeClass('as-dragging'); this.elt.removeClass('as-dragging'); this.elt.removeClass('as-has-new-pos'); this.dragData.hiddenCells.forEach(e => e.removeClass('as-transparent-fix')); var rows = this.elt.$originTableBody.childNodes; rows.forEach(elt => { var copyElt = this.elt.leftCopyRows[elt.getAttribute('data-id')]; elt.addStyle('transform', 'translate(0, 0)'); copyElt.addStyle('transform', 'translate(0, 0)'); }); var at, copyAt; if (this.dragData.newRowIdx !== this.dragData.rowIdx) { at = rows[this.dragData.newRowIdx]; copyAt = this.elt.leftCopyRows[at.attr('data-id')]; if (this.dragData.rowIdx < this.dragData.newRowIdx) { Object(ACore["a" /* $ */])(at.parentElement).addChildAfter(this.dragData.original, at); Object(ACore["a" /* $ */])(copyAt.parentElement).addChildAfter(this.dragData.copy, copyAt); } else { Object(ACore["a" /* $ */])(at.parentElement).addChildBefore(this.dragData.original, at); Object(ACore["a" /* $ */])(copyAt.parentElement).addChildBefore(this.dragData.copy, copyAt); } this.elt.reindexRows(); this.elt.emit('orderchange', { target: this.elt, from: this.dragData.rowIdx, to: this.dragData.newRowIdx }, this.elt); } }; TSLMoveTool.prototype.findRow = function (fromElt) { var e = fromElt; var rowElt; while (e) { if (e.tagName === 'TR') { rowElt = e; break; } e = e.parentElement; } if (!rowElt) return null; var id = rowElt.getAttribute('data-id'); return { original: Object(ACore["a" /* $ */])(this.elt.originalRows[id]), copy: Object(ACore["a" /* $ */])(this.elt.leftCopyRows[id]) } }; /* harmony default export */ var tablescroller_TSLMoveTool = (TSLMoveTool); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/tablescroller/TableScroller.js var TableScroller_$ = ACore["d" /* default */].$; var TableScroller_ = ACore["d" /* default */]._; var sliceCellArray = (cells, start, end) => { if (typeof start !== "number") start = 0; if (typeof end !== "number") end = Infinity; var res = []; cells = cells.slice(); var cell, colSpan; var n = 0; while (cells.length > 0) { cell = cells.shift(); colSpan = parseInt(cell.getAttribute('colspan') || '1') || 1; n += colSpan; if (n > start && n <= end) res.push(cell); } return res; } /*** * @extends {AElement} * @constructor */ function TableScroller() { this.$originCtn = TableScroller_$('.as-table-scroller-origin-table-ctn', this); this.$originTable = undefined; this.$originContent = undefined; this.$fixedYHeaderScroller = TableScroller_$('.as-table-scroller-fixed-y-header-scroller', this); this.$fixedYHeader = TableScroller_$('.as-table-scroller-fixed-y-header', this); this.$fixedXYHeader = TableScroller_$('.as-table-scroller-fixed-xy-header', this); this.$fixXCol = TableScroller_$('.as-table-scroller-fixed-x-col', this); this.$attachHook = TableScroller_$('attachhook', this); this.$attachHook.requestUpdateSize = this.updateContentSize.bind(this); this.requestUpdateSize = this.updateContentSize.bind(this); this.$attachHook.on('attached', function () { Dom["b" /* default */].addToResizeSystem(this); }); this.$domSignal = TableScroller_('attachhook'); this.appendChild(this.$domSignal); this.domSignal = new DomSignal["a" /* default */](this.$domSignal); this.domSignal.on('requestUpdateContent', this.updateContent.bind(this)); this.$vscrollbar = TableScroller_$('.absol-table-scroller-vscrollbar-container vscrollbar', this); this.$hscrollbar = TableScroller_$('.absol-table-scroller-hscrollbar-container hscrollbar', this); this.$vscroller = TableScroller_$('.as-table-scroller-vertical-scroller', this); this.$hscroller = TableScroller_$('.as-table-scroller-horizontal-scroller', this); this.$leftLine = TableScroller_$('.absol-table-scroller-left-line', this).addStyle('display', 'none'); this.$headLine = TableScroller_$('.absol-table-scroller-head-line', this); this.scrollCtr = new ScrollController(this); this.moveTool = new tablescroller_TSLMoveTool(this); this._swappedPairs = []; this.originalRows = {}; this.leftCopyRows = {}; /*** * @name fixedCol * @type {number} * @memberOf TableScroller# */ } TableScroller.tag = 'TableScroller'.toLowerCase(); TableScroller.render = function () { return TableScroller_({ class: 'absol-table-scroller', extendEvent: ['orderchange', 'preupdatesize', 'sizeupdated'], child: [ { class: 'absol-table-scroller-content', child: [ { class: 'as-table-scroller-vertical-scroller', child: [ { class: 'as-table-scroller-horizontal-scroller-viewport', child: [ { class: 'as-table-scroller-fixed-x-col-ctn', child: { tag: 'table', class: 'as-table-scroller-fixed-x-col', } }, { class: 'as-table-scroller-horizontal-scroller', child: [ { class: 'as-table-scroller-origin-table-ctn' } ] } ] } ] }, { class: 'as-table-scroller-fixed-y-header-ctn', child: { class: 'as-table-scroller-fixed-y-header-scroller', child: { tag: 'table', class: 'as-table-scroller-fixed-y-header', } } }, { class: 'as-table-scroller-fixed-xy-header-ctn', child: { tag: 'table', class: 'as-table-scroller-fixed-xy-header' } }, '.absol-table-scroller-viewport', '.absol-table-scroller-fixed-viewport',//place holder { class: 'absol-table-scroller-header-hscroller', child: '.absol-table-scroller-header-hscroller-viewport' }, { class: 'absol-table-scroller-left-vscroller', child: '.absol-table-scroller-left-vscroller-viewport' }, '.absol-table-scroller-head-line', '.absol-table-scroller-left-line' ] }, { class: 'absol-table-scroller-vscrollbar-container', child: { tag: 'vscrollbar' } }, { class: 'absol-table-scroller-hscrollbar-container', child: { tag: 'hscrollbar' } }, 'attachhook' ] }); }; TableScroller.scrollSize = 17;//default Dom["b" /* default */].getScrollSize().then(function (size) { TableScroller.scrollSize = size.width;//default scroller TableScroller.$style = TableScroller_('style[id="table-scroller-css"]').addTo(document.head); TableScroller.$style.innerHTML = [ 'body .absol-table-scroller {', ' --scrollbar-width: ' + (size.width + 0) + 'px', '}', ].join('\n'); Dom["b" /* default */].updateResizeSystem(); setTimeout(Dom["b" /* default */].updateResizeSystem.bind(Dom["b" /* default */]), 30);// css load delay }); TableScroller.eventHandler = {}; TableScroller.prototype.clearChild = function () { this.$fixXCol.clearChild(); this.$fixedYHeader.clearChild(); this.$fixedXYHeader.clearChild(); this.$originTable = null; return this; }; TableScroller.prototype.addChild = function (elt) { if (this.$originTable) { throw new Error('Only one table is accepted!'); } this.$originContent = elt; this.$originTable = TableScroller_$('table', this.$originContent); this.$originCtn.addChild(this.$originTable); this.requestUpdateContent(); }; TableScroller.prototype._revertWrapped = function () { var pair; while (this._swappedPairs.length > 0) { pair = this._swappedPairs.pop(); swapChildrenInElt(pair[0], pair[1]); } }; TableScroller.prototype._makeDataIdent = function () { this.originalRows = {}; Array.prototype.slice.call(this.$originTableBody.childNodes).forEach((elt, i) => { var id; if (elt.tagName === 'TR') { id = elt.getAttribute('data-id') || randomIdent(12) + '_' + i; elt.setAttribute('data-id', id); this.originalRows[id] = TableScroller_$(elt); } else { elt.remove(); } }); }; TableScroller.prototype._updateFixedYHeader = function () { var head = TableScroller_$(this.$originTableThead.cloneNode(false)); var headRows = Array.prototype.filter.call(this.$originTableThead.childNodes, elt => elt.tagName === 'TR') .map(tr => { var copyTr = TableScroller_$(tr.cloneNode(false)); copyTr.$origin = tr; var cells = Array.prototype.filter.call(tr.childNodes, elt => elt.tagName === 'TH' || elt.tagName === 'TD') .map(td => TableScroller_$(Object.assign(td.cloneNode(true), { $origin: td }))); copyTr.addChild(cells); sliceCellArray(cells, this.fixedCol).forEach(elt => { swapChildrenInElt(elt, elt.$origin); this._swappedPairs.push([elt, elt.$origin]); }); return copyTr; }); head.addChild(headRows); this.$fixedYHeader.clearChild().addChild(head); this.$fixedYHeader.attr('class', this.$originTable.attr('class')).addClass('as-table-scroller-fixed-y-header'); }; TableScroller.prototype._updateFixedYHeaderSize = function () { var bound = this.$originTable.getBoundingClientRect(); this.$fixedYHeader.addStyle('width', bound.width + 'px'); Array.prototype.forEach.call(this.$fixedYHeader.firstChild.firstChild.childNodes, elt => { var bound = elt.$origin.getBoundingClientRect(); elt.addStyle('width', bound.width + 'px'); if (bound.width + bound.height === 0) { elt.addStyle('display', 'none'); } else { elt.removeStyle('display'); } }); this.$headLine.addStyle('top', this.$fixedYHeader.getBoundingClientRect().height - 1 + 'px') .addStyle('max-width', bound.width + 'px'); }; TableScroller.prototype._updateFixedXCol = function () { this.$fixXCol.clearChild(); var head = TableScroller_$(this.$originTableThead.cloneNode(false)); var headRows = Array.prototype.filter.call(this.$originTableThead.childNodes, elt => elt.tagName === 'TR') .map(tr => { var copyTr = TableScroller_$(tr.cloneNode(false)); copyTr.$origin = tr; var cells = Array.prototype.filter.call(tr.childNodes, elt => elt.tagName === 'TH' || elt.tagName === 'TD'); cells = sliceCellArray(cells, 0, this.fixedCol) .map(td => TableScroller_$(Object.assign(td.cloneNode(true), { $origin: td }))); copyTr.addChild(cells); return copyTr; }); head.addChild(headRows); var body = TableScroller_$(this.$originTableBody.cloneNode()); var rows = Array.prototype.filter.call(this.$originTableBody.childNodes, elt => elt.tagName === 'TR') .map(tr => { var copyTr = TableScroller_$(tr.cloneNode(false)); copyTr.$origin = tr; var id = copyTr.attr('data-id'); this.leftCopyRows[id] = copyTr; var cells = Array.prototype.filter.call(tr.childNodes, elt => elt.tagName === 'TH' || elt.tagName === 'TD'); cells = sliceCellArray(cells, 0, this.fixedCol) .map(td => TableScroller_$(Object.assign(td.cloneNode(true), { $origin: td }))); cells.forEach(elt => { swapChildrenInElt(elt, elt.$origin); this._swappedPairs.push([elt, elt.$origin]); }); copyTr.addChild(cells); return copyTr; }); body.addChild(rows); this.$fixXCol.addChild(head) .addChild(body); this.$fixXCol.attr('class', this.$originTable.attr('class')).addClass('as-table-scroller-fixed-x-col'); }; TableScroller.prototype._updateFixedXColSize = function () { if (this.fixedCol === 0) return; var bound = this.$originTable.getBoundingClientRect(); this.$fixXCol.addStyle('height', bound.height + 'px'); Array.prototype.forEach.call(this.$fixXCol.firstChild.childNodes, elt => { elt.addStyle('height', elt.$origin.getBoundingClientRect().height + 'px'); }); Array.prototype.forEach.call(this.$fixXCol.firstChild.firstChild.childNodes, elt => { elt.addStyle('width', elt.$origin.getBoundingClientRect().width + 'px'); }); Array.prototype.forEach.call(this.$fixXCol.lastChild.childNodes, elt => { elt.addStyle('height', elt.$origin.getBoundingClientRect().height + 'px'); }); }; TableScroller.prototype._updateFixedXYHeader = function () { var head = TableScroller_$(this.$originTableThead.cloneNode(false)); var headRows = Array.prototype.filter.call(this.$originTableThead.childNodes, elt => elt.tagName === 'TR') .map(tr => { var copyTr = TableScroller_('tr'); copyTr.$origin = tr; var cells = Array.prototype.filter.call(tr.childNodes, elt => elt.tagName === 'TH' || elt.tagName === 'TD'); cells = sliceCellArray(cells, 0, this.fixedCol) .map(td => TableScroller_$(Object.assign(td.cloneNode(true), { $origin: td }))); copyTr.addChild(cells); cells.forEach(cell => { swapChildrenInElt(cell, cell.$origin); this._swappedPairs.push([cell, cell.$origin]); }) return copyTr; }); head.addChild(headRows); this.$fixedXYHeader.clearChild().addChild(head); this.$fixedXYHeader.attr('class', this.$originTable.attr('class')).addClass('as-table-scroller-fixed-xy-header'); }; TableScroller.prototype._updateFixedXYHeaderSize = function () { Array.prototype.forEach.call(this.$fixedXYHeader.firstChild.childNodes, elt => { elt.addStyle('height', elt.$origin.getBoundingClientRect().height + 'px'); }); Array.prototype.forEach.call(this.$fixedXYHeader.firstChild.firstChild.childNodes, elt => { elt.addStyle('width', elt.$origin.getBoundingClientRect().width + 'px'); }); this.$leftLine.addStyle('left', this.$fixedXYHeader.getBoundingClientRect().width - 1 + 'px'); }; TableScroller.prototype.updateContent = function () { if (!this.$originTable) return; this._revertWrapped(); this.$originTableThead = TableScroller_$('thead', this.$originTable); this.$originTableBody = TableScroller_$('tbody', this.$originTable); this._makeDataIdent(); this._updateFixedYHeader(); this._updateFixedXCol(); this._updateFixedXYHeader(); this.reindexRows(); this.updateContentSize(); requestAnimationFrame(()=> { this.updateContentSize(); }); }; TableScroller.prototype._updateScrollStatus = function () { var bound = this.getBoundingClientRect(); var tableBound = this.$originTable.getBoundingClientRect(); if (bound.width < tableBound.width) { this.addClass('as-scroll-horizontal'); this.$vscrollbar.outerHeight = bound.height - 17; } else { this.$vscrollbar.outerHeight = bound.height; this.removeClass('as-scroll-horizontal'); } if (bound.height < tableBound.height) { this.addClass('as-scroll-vertical'); this.$hscrollbar.outerWidth = bound.width - 17; } else { this.$hscrollbar.outerWidth = bound.width; this.removeClass('as-scroll-vertical'); } this.$vscrollbar.innerHeight = tableBound.height; this.$hscrollbar.innerWidth = tableBound.width; }; TableScroller.prototype.updateContentSize = function () { if (!this.$originTable) return; this._updateScrollStatus(); this._updateFixedYHeaderSize(); this._updateFixedXColSize(); this._updateFixedXYHeaderSize(); }; TableScroller.prototype.reindexRows = function () { if (!this.$originTableBody) return; Array.prototype.filter.call(this.$originTableBody.childNodes, elt => elt.tagName === 'TR') .forEach((elt, i) => { if (elt.$idx === null) return; elt.$idx = elt.$idx || TableScroller_$('.as-table-scroller-row-index', elt) || null; if (elt.$idx) elt.$idx.attr('data-idx', i + 1); }); Array.prototype.forEach.call(this.$fixXCol.lastChild.childNodes, (elt, i) => { if (elt.$idx === null) return; elt.$idx = elt.$idx || TableScroller_$('.as-table-scroller-row-index', elt) || null; if (elt.$idx) elt.$idx.attr('data-idx', i + 1); }); }; TableScroller.prototype.removeRow = function (row) { if (TableScroller_$(row).isDescendantOf(this)) { row.remove(); this.requestUpdateContent(); } return this; }; TableScroller.prototype.addRowBefore = function (row, bf) { if (!this.$originTableBody) return this; this.$originTableBody.addChildBefore(row, bf); this.requestUpdateContent(); return this; }; TableScroller.prototype.addRowAfter = function (row, at) { if (!this.$originTableBody) return this; this.$originTableBody.addChildAfter(row, at); this.requestUpdateContent(); return this; }; TableScroller.prototype.requestUpdateContent = function () { this.domSignal.emit('requestUpdateContent'); }; TableScroller.property = {}; TableScroller.property.fixedCol = { set: function (value) { value = value || 0; this._fixedCol = value; if (value === 0) this.$leftLine.addStyle('display', 'none'); else this.$leftLine.removeStyle('display'); this.requestUpdateContent(); // this.$domSignal.emit('requestUpdateContent'); }, get: function () { return this._fixedCol || 0; } }; ACore["d" /* default */].install(TableScroller); /* harmony default export */ var tablescroller_TableScroller = (TableScroller); /*** * * @param {TableScroller} elt * @constructor */ function ScrollController(elt) { this.elt = elt; Object.keys(this.constructor.prototype).filter(k => k.startsWith('ev_')) .forEach(k => this[k] = this[k].bind(this)); this.vscrollTarget = null; this.hscrollTarget = null; this.elt.$vscroller.on('scroll', this.ev_vScrollerScroll); this.elt.$vscrollbar.on('scroll', this.ev_vScrollbarScroll); this.elt.$hscroller.on('scroll', this.ev_hScrollerScroll); this.elt.$hscrollbar.on('scroll', this.ev_hScrollbarScroll); this.elt.$fixedYHeaderScroller.on('scroll', this.ev_fixedYHeaderScroll); } ScrollController.prototype.ev_vScrollerScroll = function (event) { var now = new Date().getTime(); if (this.vscrollTarget && now - this.vscrollTarget.time < 100 && this.vscrollTarget.elt !== this.elt.$vscroller) return; this.elt.$vscrollbar.innerOffset = this.elt.$vscroller.scrollTop; this.vscrollTarget = { time: now, elt: this.elt.$vscroller }; }; ScrollController.prototype.ev_vScrollbarScroll = function (event) { var now = new Date().getTime(); if (this.vscrollTarget && now - this.vscrollTarget.time < 100 && this.vscrollTarget.elt !== this.elt.$vscrollbar) return; this.elt.$vscroller.scrollTop = this.elt.$vscrollbar.innerOffset; this.vscrollTarget = { time: now, elt: this.elt.$vscrollbar }; }; ScrollController.prototype.ev_hScrollerScroll = function (event) { var now = new Date().getTime(); if (this.hscrollTarget && now - this.hscrollTarget.time < 100 && this.hscrollTarget.elt !== this.elt.$hscroller) return; this.elt.$hscrollbar.innerOffset = this.elt.$hscroller.scrollLeft; this.elt.$fixedYHeaderScroller.scrollLeft = this.elt.$hscroller.scrollLeft; this.hscrollTarget = { time: now, elt: this.elt.$hscroller }; }; ScrollController.prototype.ev_fixedYHeaderScroll = function (event) { var now = new Date().getTime(); if (this.hscrollTarget && now - this.hscrollTarget.time < 100 && this.hscrollTarget.elt !== this.elt.$fixedYHeaderScroller) return; this.elt.$hscrollbar.innerOffset = this.elt.$fixedYHeaderScroller.scrollLeft; this.elt.$hscroller.scrollLeft = this.elt.$fixedYHeaderScroller.scrollLeft; this.hscrollTarget = { time: now, elt: this.elt.$fixedYHeaderScroller }; }; ScrollController.prototype.ev_hScrollbarScroll = function (event) { var now = new Date().getTime(); if (this.hscrollTarget && now - this.hscrollTarget.time < 100 && this.hscrollTarget.elt !== this.elt.$hscrollbar) return; this.elt.$hscroller.scrollLeft = this.elt.$hscrollbar.innerOffset >> 0; this.vscrollTarget = { time: now, elt: this.elt.$hscrollbar }; }; // EXTERNAL MODULE: ./node_modules/absol-acomp/css/tablevscroller.css var tablevscroller = __webpack_require__(192); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TableVScroller.js var TableVScroller_ = ACore["d" /* default */]._; var TableVScroller_$ = ACore["d" /* default */].$; function TableVScroller() { var thisTS = this; this.$attachHook = TableVScroller_$('attachhook', this); this.$attachHook.updateSize = () => { this.updateStyle(); this.updateSize(); }; this.sync = new Promise(function (rs) { thisTS.$attachHook.on('attached', rs) }); this.$viewport = TableVScroller_$('.absol-table-vscroller-viewport', this); this.$attachHook.on('attached', function () { Dom["b" /* default */].addToResizeSystem(thisTS.$attachHook); this.updateSize(); }); this.$topTable = TableVScroller_$('.absol-table-vscroller-head', this); this.$headLine = TableVScroller_$('.absol-table-vscroller-head-line', this); this.swappedContentPairs = []; } TableVScroller.tag = 'TableVScroller'.toLowerCase(); TableVScroller.render = function () { return TableVScroller_( { class: 'absol-table-vscroller', child: [ '.absol-table-vscroller-viewport', 'table.absol-table-vscroller-head', '.absol-table-vscroller-head-line', 'attachhook' ] } ); }; TableVScroller.prototype.clearChild = function () { this.$viewport.clearChild(); this.$topTable.clearChild(); }; TableVScroller.prototype.addChild = function (elt) { if (this.$viewport.childNodes.length == 0) { this.$table = elt.$table || TableVScroller_$('table',elt); if (this.$table) { this.$viewport.addChild(elt); this.update(); } else { throw new Error('Element must be a table!'); } } else { throw new Error("Only 1 table accepted!"); } }; TableVScroller.prototype._trackBackgroundColor = function (element) { var current = this.$thead; var res; while (current && !res && res != 'rgba(0, 0, 0, 0)') { res = window.getComputedStyle(element).getPropertyValue('background-color'); current = current.parentNode; } if (res == 'rgba(0, 0, 0, 0)') return 'white'; return res; } TableVScroller.prototype.updateStyle = function () { if (!this.$thead) return; var clazz = this.$table.attr('class'); if (clazz) { clazz = clazz.trim().split(/\s+/); for (var i = 0; i < clazz.length; ++i) { this.$topTable.addClass(clazz[i]); } } var bgColor = this._trackBackgroundColor(this.$thead); this.$topTable.addStyle('background-color', bgColor); }; TableVScroller.prototype.updateSize = function () { if (!this.$thead) return; var theadBound = this.$thead.getBoundingClientRect(); var tableBound = this.$table.getBoundingClientRect(); this.$topTable.addStyle({ width: tableBound.width + 'px', height: theadBound.height + 'px' }); this.$headLine.addStyle({ top: theadBound.height + 'px', maxWidth: tableBound.width + 'px' }); if (this.$viewport.clientHeight < this.$viewport.scrollHeight) { this.addClass('scroll-v'); } else { this.removeClass('scroll-v'); } var realNodes = this.$tr.childNodes; var topNodes = this.$topTr.childNodes; var widthStyle; var displayStyle; for (var i = 0; i < realNodes.length; ++i) { if (!realNodes[i].tagName) continue; widthStyle = TableVScroller_$(realNodes[i]).getComputedStyleValue('width'); displayStyle = realNodes[i].getComputedStyleValue('display'); if (!widthStyle) { widthStyle = realNodes[i].getBoundingClientRect().width; if (!widthStyle) { displayStyle = 'none'; } widthStyle += 'px'; } // console.trace(getAncestorElementOf(realNodes[i]), widthStyle, displayStyle) TableVScroller_$(topNodes[i]).attr('style', realNodes[i].attr('style')).addStyle('width', widthStyle).addStyle('display', displayStyle); } this.$topTable.removeStyle('display'); }; TableVScroller.prototype.updateContent = function () { this.swappedContentPairs.forEach((originElt, copyElt) => { this.swappedContentPairs.push([originElt, copyElt]) }); this.swappedContentPairs = []; var elt = this.$table; this.$thead = TableVScroller_$('thead', elt); this.$tr = TableVScroller_$('tr', this.$thead); this.$topThead = Object(Dom["c" /* depthClone */])(this.$thead, (originElt, copyElt) => { if (originElt.tagName === 'TH') { swapChildrenInElt(originElt, copyElt); this.swappedContentPairs.push([originElt, copyElt]) } }); this.$topTr = TableVScroller_$('tr', this.$topThead); this.$topTable.clearChild().addChild(this.$topThead).addStyle('display', 'none'); }; TableVScroller.prototype.update = function () { if (!this.$table) return; this.updateContent(); this.updateStyle(); this.updateSize(); }; ACore["d" /* default */].install(TableVScroller); /* harmony default export */ var js_TableVScroller = (TableVScroller); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/textarea2.css var textarea2 = __webpack_require__(194); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/search.js var UNCASE_MATCH_SCORE = 4; var UVN_MATCH_SCORE = 3; var EXTRA_MATCH_SCORE = 9; var NVN_EXTRA_MATCH_SCORE = 8; var EQUAL_MATCH_SCORE = 10; var WORD_MATCH_SCORE = 3; var HAS_WORD_SCORE = 30; var HAS_NVN_WORD_SCORE = 29; /*** * * @param {SelectionItem} item * @returns {*} */ function prepareSearchForItem(item) { if (!item.text || !item.text.charAt) item.text = item.text + ''; var spliter = /\s+/; var __text__ = item.text.replace(/([\s\b\-()\[\]"']| | | |\s")+/g, ' ').trim().toLowerCase(); var __words__ = __text__.split(spliter); __text__ = __words__.join(' '); var __wordDict__ = __words__.reduce((ac, cr, i) => { ac[cr] = ac[cr] || i + 1; return ac; }, {}); var __textNoneCase__ = __text__; var __nvnText__ = nonAccentVietnamese(__text__); var __nvnTextNoneCase__ = __nvnText__; var __nvnWordDict__ = __words__.reduce((ac, cr, i) => { ac[cr] = ac[cr] || i + 1; return ac; }, {}); Object.defineProperties(item, { __text__: { configurable: true, enumerable: false, writable: true, value: __text__ }, __words__: { configurable: true, enumerable: false, writable: true, value: __text__.split(spliter) }, __wordDict__: { configurable: true, enumerable: false, writable: true, value: __wordDict__ }, __textNoneCase__: { configurable: true, enumerable: false, writable: true, value: __textNoneCase__ }, __wordsNoneCase__: { configurable: true, enumerable: false, writable: true, value: __textNoneCase__.split(spliter) }, __nvnText__: { configurable: true, enumerable: false, writable: true, value: __nvnText__ }, __nvnWords__: { configurable: true, enumerable: false, writable: true, value: __nvnText__.split(spliter) }, __nvnWordDict__: { configurable: true, enumerable: false, writable: true, value: __nvnWordDict__ }, __nvnTextNoneCase__: { configurable: true, enumerable: false, writable: true, value: __nvnTextNoneCase__ }, __nvnWordsNoneCase__: { configurable: true, enumerable: false, writable: true, value: __nvnTextNoneCase__.split(spliter) } }); return item; } function prepareSearchForList(items) { var item; for (var i = 0; i < items.length; ++i) { if (typeof items[i] == 'string') { items[i] = { text: items[i], value: items[i] }; } item = items[i]; prepareSearchForItem(item); if (item.items) prepareSearchForList(item.items); } return items; } function calcItemMatchScore(queryItem, item) { var score = 0; if (!item.__text__) return 0; var hwScore = 0; var i; for (i = 0; i < queryItem.__words__.length; ++i) { if (item.__wordDict__[queryItem.__words__[i]]) { hwScore += HAS_WORD_SCORE; } else if (item.__nvnWordDict__[queryItem.__nvnWords__[i]]) { hwScore += HAS_NVN_WORD_SCORE; } } score = hwScore; if (item.__text__ === queryItem.__text__) { score += EQUAL_MATCH_SCORE; } var extraIndex = item.__text__.indexOf(queryItem.__text__); if (extraIndex >= 0) { score += EXTRA_MATCH_SCORE; } extraIndex = item.__nvnText__.indexOf(queryItem.__nvnText__); if (extraIndex >= 0) { score += EXTRA_MATCH_SCORE; } var n = Math.max(queryItem.__words__.length + 1, 1); score = Math.max(score, wordsMatch(queryItem.__words__, item.__words__), wordsMatch(queryItem.__nvnWords__, item.__nvnWords__)) / n * 2 * WORD_MATCH_SCORE; return score; } function isItemMustIncluded(queryItem, item) { if (!queryItem) return true; if (item.__nvnText__.indexOf(queryItem.__nvnText__) >= 0) { return true; } var dict1 = queryItem.__nvnWordDict__; var dict2 = item.__nvnWordDict__; for (var i in dict1) { for (var j in dict2) { if (j.indexOf(i) < 0) return false; } } return true; } /*** * * @param {String} query * @param {Array<SelectionItem>} items */ function searchListByText(query, items) { query = (query || '').trim(); if (query.length === 0 || items.length === 0) return items; var queryItem = prepareSearchForItem({ text: query }); var its = items.map(function (item) { return { item: item, score: calcItemMatchScore(queryItem, item), mustIncluded: isItemMustIncluded(queryItem, item) } }); its.sort(function (a, b) { if (b.score - a.score == 0) { if (b.item.__nvnText__ > a.item.__nvnText__) return -1 return 1; } return b.score - a.score; }); var midValue = (its[0].score + its[its.length - 1].score) / 2; if (midValue === 0) midValue += 0.1; if (midValue < 1) midValue = 1; return its.filter(function (it) { return it.score >= midValue || it.mustIncluded; }).map(function (it) { return it.item; }); } /*** * * @param {String} query * @param {Array<SelectionItem>} items */ function searchTreeListByText(query, items) { query = (query || '').trim(); if (query.length == 0 || items.length == 0) return items; var queryItem = prepareSearchForItem({ text: query }); var gmaxScore = 0; var gminScore = 1000; function makeScoreRecursive(item) { var score = calcItemMatchScore(queryItem, item); var mustIncluded = isItemMustIncluded(queryItem, item); gmaxScore = Math.max(score, gmaxScore); gminScore = Math.min(score, gminScore); var children = (item.items || []).map(function (item) { return makeScoreRecursive(item); }); mustIncluded = mustIncluded || children.some(c => c.mustIncluded); var maxScore = children.reduce(function (ac, cr) { return Math.max(ac, cr.maxScore); }, score); return { score: score, maxScore: maxScore, item: item, children: children, mustIncluded: mustIncluded } } function sortcmp(a, b) { return b.maxScore - a.maxScore; } function filterItems(nodes, medScore) { nodes.sort(sortcmp); return nodes.filter(function (node) { return node.maxScore >= medScore || node.mustIncluded; }).map(function (node) { var res; if (typeof node.item == 'string') { res = node.item; } else { res = Object.assign({}, node.item); res.ref = node.item; if (node.children && node.children.length > 0) { res.items = filterItems(node.children, medScore); if (res.items.length == 0) delete res.items; } } return res; }); } var scoredItems = items.map(makeScoreRecursive); var medianScore = (gminScore + gmaxScore) / 2; var items = filterItems(scoredItems, medianScore); return items; } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectMenu.js /*global absol*/ var SelectMenu_ = ACore["d" /* default */]._; var SelectMenu_$ = ACore["d" /* default */].$; ACore["d" /* default */].creator['dropdown-ico'] = function () { return SelectMenu_([ '<svg class="dropdown" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">', '<g transform="translate(0,-197)">', '<path d="m6.3152 218.09a4.5283 4.5283 0 0 0-3.5673 7.3141l43.361 55.641a4.5283 4.5283 0 0 0 7.1421 7e-3l43.496-55.641a4.5283 4.5283 0 0 0-3.5673-7.3216z" />', '</g>', '</svg>' ].join('')); }; function SelectMenu_SelectMenu() { var thisSM = this; this._items = []; this._value = null; this._lastValue = null; this.$holderItem = SelectMenu_$('.absol-selectmenu-holder-item', this); this.$anchorCtn = SelectMenu_SelectMenu.getAnchorCtn(); this.$anchor = SelectMenu_('.absol-selectmenu-anchor.absol-disabled').addTo(this.$anchorCtn); this.$anchorContentCtn = SelectMenu_('.absol-selectmenu-anchor-content-container').addTo(this.$anchor); this.$dropdownBox = SelectMenu_('.absol-selectmenu-dropdown-box').addTo(this.$anchorContentCtn); this.$searchTextInput = SelectMenu_('searchtextinput').addStyle('display', 'none').addTo(this.$dropdownBox); this.$vscroller = SelectMenu_('bscroller').addTo(this.$dropdownBox); this.$selectlist = SelectMenu_('selectlist', this).addTo(this.$vscroller) .on('sizechangeasync', this.eventHandler.listSizeChangeAsync) .on('valuevisibilityasync', this.eventHandler.listValueVisibility); this.$scrollTrackElts = []; this.$removableTrackElts = []; this._itemsByValue = {}; this.$searchTextInput.on('stoptyping', this.eventHandler.searchModify); this._searchCache = {}; this.$selectlist.on('pressitem', this.eventHandler.selectlistPressItem, true); this.$selectlist.on('pressitem', function () { thisSM.isFocus = false; }, true); this._lastValue = "NOTHING_VALUE"; this._resourceReady = true; this.on('mousedown', this.eventHandler.click, true); this.on('blur', this.eventHandler.blur); this.selectListBound = { height: 0, width: 0 }; this.$attachhook = SelectMenu_$('attachhook', this) .on('error', this.eventHandler.attached); this.sync = new Promise(function (rs) { SelectMenu_$('attachhook', this).once('error', function () { rs(); }); }); this._selectListScrollSession = null; this._itemIdxByValue = null; return this; } SelectMenu_SelectMenu.tag = 'selectmenu-old'; SelectMenu_SelectMenu.render = function () { return SelectMenu_({ class: ['absol-selectmenu'], extendEvent: ['change', 'minwidthchange'], attr: { tabindex: '1' }, child: [ '.absol-selectmenu-holder-item', { tag: 'button', class: 'absol-selectmenu-btn', child: ['dropdown-ico'] }, 'attachhook', ] }); }; SelectMenu_SelectMenu.optimizeResource = true; // //will remove after SelectMenu completed SelectMenu_SelectMenu.getRenderSpace = function () { if (!SelectMenu_SelectMenu.getRenderSpace.warned) { console.warn('SelectMenu.getRenderSpace() will be removed in next version'); } SelectMenu_SelectMenu.getRenderSpace.warned = true; if (!SelectMenu_SelectMenu.$renderSpace) { SelectMenu_SelectMenu.$renderSpace = SelectMenu_('.absol-selectmenu-render-space') .addTo(document.body); } return SelectMenu_SelectMenu.$renderSpace; }; SelectMenu_SelectMenu.getAnchorCtn = function () { if (!SelectMenu_SelectMenu.$anchorCtn) { SelectMenu_SelectMenu.$anchorCtn = SelectMenu_('.absol-selectmenu-anchor-container') .addTo(document.body); } return SelectMenu_SelectMenu.$anchorCtn; }; SelectMenu_SelectMenu.prototype.updateItem = function () { this.$holderItem.clearChild(); if (this._itemsByValue[this.value]) { var elt = SelectMenu_({ tag: 'selectlistitem', props: { data: this._itemsByValue[this.value] } }).addTo(this.$holderItem); elt.$descCtn.addStyle('width', this.$selectlist._descWidth + 'px'); } }; SelectMenu_SelectMenu.prototype._dictByValue = function (items) { var dict = {}; var item; for (var i = 0; i < items.length; ++i) { item = items[i]; dict[item.value + ''] = item; } return dict; }; SelectMenu_SelectMenu.prototype.init = function (props) { props = props || {}; Object.keys(props).forEach(function (key) { if (props[key] === undefined) delete props[key]; }); if (!('value' in props)) { if (props.items && props.items.length > 0) props.value = typeof props.items[0] == 'string' ? props.items[0] : props.items[0].value; } var value = props.value; delete props.value; this.super(props); this.value = value; }; SelectMenu_SelectMenu.property = {}; SelectMenu_SelectMenu.property.items = { set: function (value) { this._searchCache = {}; this._itemIdxByValue = null; /** * verity data */ if (value) { value.forEach(function (it) { if (it && it.text) { it.text = it.text + ''; } }); } this._items = value; this._itemsByValue = this._dictByValue(value); if (!this._itemsByValue[this.value] && value.length > 0) { this.value = value[0].value; } else this.updateItem(); this.$dropdownBox.removeStyle('min-width'); this.selectListBound = this.$selectlist.setItemsAsync(value || []); this.style.setProperty('--select-list-desc-width', this.$selectlist.measuredSize.descWidth + 'px'); this._resourceReady = true; this.addStyle('min-width', this.selectListBound.width + 2 + 23 + 'px'); this.emit('minwidthchange', { target: this, value: this.selectListBound.width + 2 + 23, type: 'minwidthchange' }, this); }, get: function () { return this._items || []; } }; SelectMenu_SelectMenu.property.value = { set: function (value) { this.$selectlist.value = value; this._lastValue = value; this.updateItem(); }, get: function () { return this.$selectlist.value; } }; SelectMenu_SelectMenu.property.enableSearch = { set: function (value) { this._enableSearch = !!value; if (value) { this.$searchTextInput.removeStyle('display'); } else { this.$searchTextInput.addStyle('display', 'none'); } }, get: function () { return !!this._enableSearch; } }; SelectMenu_SelectMenu.prototype.updateDropdownPostion = function (updateAnchor) { if (!this.isFocus) { this.$anchorContentCtn .removeStyle('left') .removeStyle('top'); this.$dropdownBox.removeStyle('min-width'); return; } var bound = this.getBoundingClientRect(); if (!updateAnchor) { var outBound = Dom["b" /* default */].traceOutBoundingClientRect(this); if (!this.isFocus || bound.top > outBound.bottom || bound.bottom < outBound.top) { this.isFocus = false; return; } var anchorOutBound = Dom["b" /* default */].traceOutBoundingClientRect(this.$anchor); var searchBound = this.$searchTextInput.getBoundingClientRect(); var availableTop = bound.top - anchorOutBound.top - (this.enableSearch ? searchBound.height + 8 : 0) - 20; var availableBottom = anchorOutBound.bottom - bound.bottom - (this.enableSearch ? searchBound.height + 8 : 0) - 20; if (this.forceDown || availableBottom >= this.selectListBound.height || availableBottom > availableTop) { this.isDropdowUp = false; if (this.$dropdownBox.firstChild != this.$searchTextInput) { this.$searchTextInput.selfRemove(); this.$dropdownBox.addChildBefore(this.$searchTextInput, this.$vscroller); } this.$vscroller.addStyle('max-height', availableBottom + 'px'); } else { this.isDropdowUp = true; if (this.$dropdownBox.lastChild !== this.$searchTextInput) { this.$searchTextInput.selfRemove(); this.$dropdownBox.addChild(this.$searchTextInput); } this.$vscroller.addStyle('max-height', availableTop + 'px'); } this.$dropdownBox.addStyle('min-width', bound.width + 'px'); } var anchorBound = this.$anchor.getBoundingClientRect(); if (this.isDropdowUp) { this.$anchorContentCtn.addStyle({ left: bound.left - anchorBound.left + 'px', top: bound.top - anchorBound.top - this.$dropdownBox.clientHeight - 1 + 'px', }); } else { this.$anchorContentCtn.addStyle({ left: bound.left - anchorBound.left + 'px', top: bound.bottom - anchorBound.top + 'px', }); } }; SelectMenu_SelectMenu.prototype.scrollToSelectedItem = function () { var self = this; setTimeout(function () { if (self.$selectlist.$selectedItem) { var fistChildBound = self.$selectlist.childNodes[1].getBoundingClientRect(); var lastChildBound = self.$selectlist.lastChild.getBoundingClientRect(); var listBound = { top: fistChildBound.top, height: lastChildBound.bottom - fistChildBound.top, bottom: lastChildBound.bottom } var itemBound = self.$selectlist.$selectedItem.getBoundingClientRect(); if (self.isDropdowUp) { var scrollBound = self.$vscroller.getBoundingClientRect(); self.$vscroller.scrollTop = Math.max(itemBound.bottom - scrollBound.height - listBound.top, 0); } else { self.$vscroller.scrollTop = itemBound.top - listBound.top; } } }.bind(this), 3); }; SelectMenu_SelectMenu.prototype.startTrackScroll = function () { var trackElt = this.parentElement; while (trackElt) { if (trackElt.addEventListener) { trackElt.addEventListener('scroll', this.eventHandler.scrollParent, false); } else { trackElt.attachEvent('onscroll', this.eventHandler.scrollParent, false); } this.$scrollTrackElts.push(trackElt); trackElt = trackElt.parentElement; } if (document.addEventListener) { document.addEventListener('scroll', this.eventHandler.scrollParent, false); document.addEventListener('wheel', this.eventHandler.wheelDocument, true); } else { document.attachEvent('onscroll', this.eventHandler.scrollParent, false); } this.$scrollTrackElts.push(document); }; SelectMenu_SelectMenu.prototype.stopTrackScroll = function () { var trackElt; for (var i = 0; i < this.$scrollTrackElts.length; ++i) { trackElt = this.$scrollTrackElts[i]; if (trackElt.removeEventListener) { trackElt.removeEventListener('scroll', this.eventHandler.scrollParent, false); } else { trackElt.dettachEvent('onscroll', this.eventHandler.scrollParent, false); } } this.$scrollTrackElts = []; }; SelectMenu_SelectMenu.prototype.startListenRemovable = function () { var removableElt = this.parentElement; while (removableElt) { if (removableElt.isSupportedEvent && removableElt.isSupportedEvent('remove')) { removableElt.on('remove', this.eventHandler.removeParent); } removableElt = removableElt.parentElement; } }; SelectMenu_SelectMenu.prototype.stopListenRemovable = function () { var removableElt; while (this.$removableTrackElts.length > 0) { removableElt = this.$removableTrackElts.pop(); removableElt.off('remove', this.eventHandler.removeParent); } }; SelectMenu_SelectMenu.prototype._releaseResource = function () { this.$selectlist.items = []; }; SelectMenu_SelectMenu.prototype._requestResource = function () { this.$selectlist.items = this._items || []; }; SelectMenu_SelectMenu.property.isFocus = { set: function (value) { if (value && (this.disabled || this.readOnly)) return; var self = this; value = !!value; if (value == this.isFocus) return; this._isFocus = value; if (value) { this.startTrackScroll(); this.selectListScrollToken = null;//force scroll var isAttached = false; setTimeout(function () { if (isAttached) return; SelectMenu_$('body').on('mousedown', self.eventHandler.bodyClick); isAttached = true; }, 1000); SelectMenu_$('body').once('click', function () { setTimeout(function () { if (isAttached) return; SelectMenu_$('body').on('mousedown', self.eventHandler.bodyClick); isAttached = true; }, 10); }); if (this.enableSearch) { setTimeout(function () { self.$searchTextInput.focus(); }, 50); } this.updateDropdownPostion(); this.scrollToSelectedItem(); this.$anchor.removeClass('absol-disabled'); } else { this.$anchor.addClass('absol-disabled'); this.stopTrackScroll(); SelectMenu_$('body').off('mousedown', this.eventHandler.bodyClick); setTimeout(function () { if (self.$searchTextInput.value != 0) { self.$searchTextInput.value = ''; self.$selectlist.items = self.items; self._resourceReady = true; self.$selectlist.removeClass('as-searching'); } }, 100) this.updateItem(); } }, get: function () { return !!this._isFocus; } }; SelectMenu_SelectMenu.property.disabled = { set: function (value) { if (value) { this.addClass('disabled'); } else { this.removeClass('disabled'); } }, get: function () { return this.hasClass('disabled'); } }; SelectMenu_SelectMenu.property.hidden = { set: function (value) { if (value) { this.addClass('hidden'); } else { this.removeClass('hidden'); } }, get: function () { return this.addClass('hidden'); } }; SelectMenu_SelectMenu.property.selectedIndex = { get: function () { if (!this._itemIdxByValue) { this._itemIdxByValue = {}; for (var i = 0; i < this._items.length; ++i) { this._itemIdxByValue[this._items[i].value] = i; } } var idx = this._itemIdxByValue[this._value]; return idx >= 0 ? idx : -1; } }; /** * @type {SelectMenu} */ SelectMenu_SelectMenu.eventHandler = {}; SelectMenu_SelectMenu.eventHandler.attached = function () { if (this._updateInterval) return; if (!this.$anchor.parentNode) this.$anchor.addTo(this.$anchorCtn); this.$attachhook.updateSize = this.$attachhook.updateSize || this.updateDropdownPostion.bind(this); Dom["b" /* default */].addToResizeSystem(this.$attachhook); this.stopListenRemovable(); this.startListenRemovable(); if (!this._resourceReady) { this._requestResource(); this._resourceReady = true; } this._updateInterval = setInterval(function () { if (!this.isDescendantOf(document.body)) { clearInterval(this._updateInterval); this._updateInterval = undefined; this.$anchor.selfRemove(); this.stopTrackScroll(); this.stopListenRemovable(); this.eventHandler.removeParent(); } }.bind(this), 10000); }; SelectMenu_SelectMenu.eventHandler.scrollParent = function (event) { var self = this; if (this._scrollFrameout > 0) { this._scrollFrameout = 10; return; } this._scrollFrameout = this._scrollFrameout || 10; function update() { self.updateDropdownPostion(false); self.scrollToSelectedItem(); self._scrollFrameout--; if (self._scrollFrameout > 0) requestAnimationFrame(update); } update(); }; SelectMenu_SelectMenu.eventHandler.removeParent = function (event) { this._releaseResource(); this._resourceReady = false; }; SelectMenu_SelectMenu.eventHandler.click = function (event) { if (EventEmitter["b" /* default */].isMouseRight(event)) return; this.isFocus = !this.isFocus; }; SelectMenu_SelectMenu.eventHandler.bodyClick = function (event) { if (!EventEmitter["b" /* default */].hitElement(this, event) && !EventEmitter["b" /* default */].hitElement(this.$anchor, event)) { setTimeout(function () { this.isFocus = false; }.bind(this), 5) } }; SelectMenu_SelectMenu.eventHandler.selectlistPressItem = function (event) { this.updateItem(); if (this._lastValue != this.value) { event.lastValue = this._lastValue; event.value = this.value; setTimeout(function () { this.emit('change', event, this); }.bind(this), 1) this._lastValue = this.value; } }; SelectMenu_SelectMenu.eventHandler.searchModify = function (event) { var filterText = this.$searchTextInput.value.replace(/((\ )|(\s))+/g, ' ').trim(); if (filterText.length == 0) { this._resourceReady = true; this.$selectlist.items = this.items; this.scrollToSelectedItem(); this.$selectlist.removeClass('as-searching'); } else { this.$selectlist.addClass('as-searching'); var view = []; if (!this._searchCache[filterText]) { if (this._items.length > 0 && !this._items[0].__nvnText__) { prepareSearchForList(this._items); } view = searchListByText(filterText, this._items); this._searchCache[filterText] = view; } else { view = this._searchCache[filterText]; } this.$selectlist.items = view; this._resourceReady = true; this.$vscroller.scrollTop = 0; } this.selectListBound = this.$selectlist.getBoundingClientRect(); this.updateDropdownPostion(true); }; SelectMenu_SelectMenu.eventHandler.listSizeChangeAsync = function () { this.updateDropdownPostion(); }; SelectMenu_SelectMenu.eventHandler.listValueVisibility = function (event) { if (!this.isFocus) return; if (this._selectListScrollSession == event.session) return; this._selectListScrollSession = event.session; this.scrollToSelectedItem(); }; ACore["d" /* default */].install(SelectMenu_SelectMenu); /* harmony default export */ var js_SelectMenu = (SelectMenu_SelectMenu); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TextArea2.js var TextArea2_ = ACore["d" /* default */]._; var TextArea2_$ = ACore["d" /* default */].$; /*** * * @augments HTMLTextAreaElement * @augments AElement * * @constructor */ function TextArea2() { this.on('keydown', this.eventHandler.keydown); this.on('paste', this.eventHandler.paste); this.on('cut', this.eventHandler.paste); } TextArea2.tag = 'TextArea2'.toLowerCase(); TextArea2.render = function () { return TextArea2_('textarea.absol-textarea2'); }; TextArea2.getRenderPre = function () { if (!TextArea2.$preSpace) { TextArea2.$preSpace = TextArea2_('textarea').addStyle({ 'overflow': 'hidden', 'height': '12px', 'resize': 'none' }).addTo(js_SelectMenu.getRenderSpace()); } return TextArea2.$preSpace; }; TextArea2.prototype.updateSize = function () { var heightStyle = this._measureHeight(this.value); this.addStyle('--content-height', heightStyle); }; TextArea2.eventHandler = {}; TextArea2.eventHandler.keydown = function (event) { if (event.altKey || event.ctrlKey) return; var key = event.key; var selectPost = this.getInputSelection(); var leftText = this.value.substring(0, selectPost.start); var rightText = this.value.substring(selectPost.end); var middText = ''; if (key == 'Enter') { middText = '\n'; } else if (key == 'Backspace') { if (leftText.length > 0) { leftText = leftText.substring(0, leftText.length - 1); } } else if (key == 'Delete') { if (selectPost.start < selectPost.end) { middText = ''; } else if (rightText.length > 0) { rightText = rightText.substring(1); } } else if (key.length == 1) {//char middText = key; } else { return; } var newText = leftText + middText + rightText; var heightStyle = this._measureHeight(newText); this.addStyle('--content-height', heightStyle); }; TextArea2.eventHandler.paste = function (event) { // var text = var cl = event.clipboardData || window.clipboardData; var middText = cl.getData('Text') || ''; var selectPost = this.getInputSelection(); var leftText = this.value.substring(0, selectPost.start); var rightText = this.value.substring(selectPost.end); var newText = leftText + middText + rightText; var heightSyle = this._measureHeight(newText); this.addStyle('--content-height', heightSyle); }; TextArea2.eventHandler.cut = function (event) { // var text = var cl = event.clipboardData || window.clipboardData; var selectPost = this.getInputSelection(); var leftText = this.value.substring(0, selectPost.start); var rightText = this.value.substring(selectPost.end); var newText = leftText + rightText; var heightSyle = this._measureHeight(newText); this.addStyle('--content-height', heightSyle); }; TextArea2.prototype._measureHeight = function (text) { var pre = TextArea2.getRenderPre(); pre.addStyle('padding-left', this.getComputedStyleValue('padding-left')) pre.addStyle('padding-right', this.getComputedStyleValue('padding-right')) pre.addStyle('padding-top', this.getComputedStyleValue('padding-top')) pre.addStyle('padding-bottom', this.getComputedStyleValue('padding-bottom')); pre.addStyle('width', this.getComputedStyleValue('width')); pre.addStyle('height', this.getFontSize() + 'px'); pre.addStyle('boder', this.getComputedStyleValue('boder')); pre.addStyle('font-size', this.getComputedStyleValue('font-size')); pre.addStyle('font-family', this.getComputedStyleValue('font-family')); pre.value = text; var result = pre.scrollHeight + 'px'; return result; }; /** * Return an object with the selection range or cursor position (if both have the same value) * @param {DOMElement} el A dom element of a textarea or input text. * @return {Object} reference Object with 2 properties (start and end) with the identifier of the location of the cursor and selected text. **/ TextArea2.prototype.getInputSelection = function () { var start = 0, end = 0, normalizedValue, range, textInputRange, len, endRange; if (typeof this.selectionStart == "number" && typeof this.selectionEnd == "number") { start = this.selectionStart; end = this.selectionEnd; } else { range = document.selection.createRange(); if (range && range.parentElement() == this) { len = this.value.length; normalizedValue = this.value.replace(/\r\n/g, "\n"); // Create a working TextRange that lives only in the input textInputRange = this.createTextRange(); textInputRange.moveToBookmark(range.getBookmark()); // Check if the start and end of the selection are at the very end // of the input, since moveStart/moveEnd doesn't return what we want // in those cases endRange = this.createTextRange(); endRange.collapse(false); if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { start = end = len; } else { start = -textInputRange.moveStart("character", -len); start += normalizedValue.slice(0, start).split("\n").length - 1; if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) { end = len; } else { end = -textInputRange.moveEnd("character", -len); end += normalizedValue.slice(0, end).split("\n").length - 1; } } } } return { start: start, end: end }; } ACore["d" /* default */].install(TextArea2); /* harmony default export */ var js_TextArea2 = (TextArea2); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/textclipboard.css var textclipboard = __webpack_require__(196); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TextClipboard.js var TextClipboard_ = ACore["d" /* default */]._; var TextClipboard_$ = ACore["d" /* default */].$; function TextClipboard() { this.$textarea = TextClipboard_('<textarea class="absol-text-clipboard" wrap="off" autocorrect="off"' + ' autocapitalize="off" spellcheck="false"></textarea>').addTo(this); } TextClipboard.tag = 'TextClipboard'.toLowerCase(); TextClipboard.render = function () { return TextClipboard_({ style: { positon: 'fixed', opacity: 0, width: '1px', height: '1px', top: 0, left: 0 } }); }; TextClipboard.prototype.copy = function (text) { this.$textarea.value = text; this.$textarea.select(); document.execCommand('copy'); }; TextClipboard.prototype.paste = function () { this.$textarea.select(); document.execCommand('paste'); }; ACore["d" /* default */].install(TextClipboard); /* harmony default export */ var js_TextClipboard = (TextClipboard); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/timeinput.css var timeinput = __webpack_require__(198); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimeInput.js var TimeInput_STATE_NEW = 1; var TimeInput_STATE_EDITED = 2; var TimeInput_STATE_NONE = 0; var TimeInput_ = ACore["d" /* default */]._; var TimeInput_$ = ACore["d" /* default */].$; /*** * @extends {AElement} * @constructor */ function TimeInput() { this._editingData = {}; this._isOpenPicker = false; this._lastEmitValue = null; this._min = 0; this._hour = null; this._minute = null; this._format = 'HH:mm'; this.$clockBtn = TimeInput_$('.as-time-input-icon-btn', this) .on('click', this.eventHandler.clickClockBtn); this.$text = TimeInput_$('input', this) .on('mousedown', this.eventHandler.mouseDownInput) .on('mouseup', this.eventHandler.mouseUpInput) .on('dblclick', this.eventHandler.dblclickInput) .on('keydown', this.eventHandler.keydown) .on('blur', this.eventHandler.inputBlur) .on('contextmenu', function (event) { event.preventDefault(); }); this.$clearBtn = TimeInput_$('button.as-time-input-clear-btn', this) .on('click', this.clear.bind(this)); this.$domSignal = TimeInput_('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](this.$domSignal); this.domSignal.on('request_auto_select', this._autoSelect.bind(this)); OOP["a" /* default */].drillProperty(this, this, 'dayOffset', 'value'); this.dayOffset = null; this.hour = null; this.minute = null; this.disabled = false; this.notNull = true; /*** * @memberOf TimeInput# * @name min * @type {number} */ /*** * @memberOf TimeInput# * @name s24 * @type {boolean} * @readonly */ } TimeInput.tag = 'timeinput'; TimeInput.render = function () { return TimeInput_({ class: 'ac-time-input', extendEvent: ['change'], child: [ { tag: 'input', class: 'as-time-input-text', attr: { type: 'text' } }, { tag: 'button', class: 'as-time-input-clear-btn', child: 'span.mdi.mdi-close-circle' }, { tag: 'button', class: 'as-time-input-icon-btn', child: 'span.mdi.mdi-clock-outline' } ] }); }; TimeInput.prototype._autoSelect = js_DateTimeInput.prototype._autoSelect; TimeInput.prototype.tokenMap = { h: 'h', H: 'H', HH: 'H', hh: 'h', m: 'm', mm: 'm', a: 'a' }; TimeInput.prototype.tokenRegex = js_DateTimeInput.prototype.tokenRegex; TimeInput.prototype._tokenAt = js_DateTimeInput.prototype._tokenAt; TimeInput.prototype._editNextToken = js_DateTimeInput.prototype._editNextToken; TimeInput.prototype._editPrevToken = js_DateTimeInput.prototype._editPrevToken; TimeInput.prototype._makeTokenDict = js_DateTimeInput.prototype._makeTokenDict; TimeInput.prototype._makeValueDict = function (hour, minute) { var res = {}; if (typeof hour == 'number' && hour >= 0 && hour < 24) { res.h = { value: 1 + (hour - 1) % 12 }; res.H = { value: hour }; res.a = { value: hour >= 12 ? 'PM' : 'AM' }; } else { res.h = { value: NaN }; res.H = { value: NaN }; res.a = { value: 'a' }; } if (typeof minute === "number" && minute >= 0 && minute < 60) { res.m = { value: minute }; } else { res.m = { value: NaN }; } return res; }; TimeInput.prototype._applyValue = function (hour, minute) { this._hour = hour; this._minute = minute; this.$text.value = this._applyTokenDict(this._format, this._makeValueDict(hour, minute)); this._updateNullClass(); }; TimeInput.prototype._updateNullClass = function () { if (this._hour == null && this._minute == null) { this.addClass('as-value-null'); } else { this.removeClass('as-value-null'); } }; TimeInput.prototype._applyTokenDict = function (format, dict) { var rgx = new RegExp(this.tokenRegex.source, 'g'); var tokenMap = this.tokenMap; return format.replace(rgx, function (full, g1, g2, sourceText) { if (g1 && g1 === 'a') { return dict[g1].value; } else if (g1 && tokenMap[g1]) { var ident = tokenMap[g1]; if (dict[ident] && !isNaN(dict[ident].value)) { return zeroPadding(dict[ident].value, g1.length); } else { return full; } } else return full; }); }; TimeInput.prototype._correctingInput = function () { var tkDict = this._makeTokenDict(this.$text.value); // TODO: check min, max, }; TimeInput.prototype._correctingCurrentToken = function () { var token = this._tokenAt(this.$text.selectionStart); if (!token) return; var value; if (token.ident === 'a') { if (token.text !== 'a' && token.text !== 'AM' && token.text !== 'PM') { token.replace('a', false); } } else { value = parseInt(token.text); var rqMin = { h: 1, hh: 1, m: 0, mm: 0, H: 0, HH: 0 }[token.ident]; var rqMax = { H: 23, HH: 23, h: 12, hh: 12, m: 59, mm: 59 }[token.ident]; if (rqMin !== undefined) { if (!isNaN(value)) { if ((value < rqMin || value > rqMin)) { value = Math.max(rqMin, Math.min(rqMax, value)); token.replace(zeroPadding(value, token.ident.length), false); this._editingData[this.tokenMap[token.ident]] = value; } } else if (token.text !== token.ident) { token.replace(token.ident, false); } } } }; TimeInput.prototype._loadValueFromInput = function () { var tkDick = this._makeTokenDict(this.$text.value); var hour = NaN; var minute = NaN; if (tkDick.H) { hour = Math.min(23, Math.max(0, tkDick.H.value)); } else if (tkDick.h) { hour = Math.min(12, Math.max(1, tkDick.h.value)); if (tkDick.a && tkDick.a.value === 'PM') { hour += 12; } } if (tkDick.m) { minute = Math.min(59, Math.max(0, tkDick.m.value)); } this._hour = isNaN(hour) ? null : hour; this._minute = isNaN(minute) ? null : minute; this._updateNullClass(); }; TimeInput.prototype.clear = function (event) { this._applyValue(null, null); this._notifyIfChange(event); } TimeInput.prototype._notifyIfChange = function (event) { if (this._lastEmitValue === this.dayOffset) return; this.emit('change', { type: 'change', target: this, dayOffset: this.dayOffset, hour: this.hour, minute: this.minute, originEvent: event }, this); this._lastEmitValue = this.dayOffset; }; TimeInput.property = {}; TimeInput.property.hour = { set: function (value) { if (typeof value == "number") { value = (value % 24) || 0; } else { value = null; } this._applyValue(value, this._minute); this._lastEmitValue = this.dayOffset; }, get: function () { return this._hour; } }; TimeInput.property.minute = { set: function (value) { if (typeof value == "number") { value = (value % 60) || 0; } else { value = null; } this._applyValue(this._hour, value); this._lastEmitValue = this.dayOffset; }, get: function () { return this._minute; } }; TimeInput.property.value = { set: function (value) { if (typeof value == "number" || (value && value.getTime)) { value = value || 0; if (value.getTime) value = value.getTime() - beginOfDay(value).getTime(); else { value = value % MILLIS_PER_DAY; } this.hour = Math.floor(value / MILLIS_PER_HOUR); this.minute = Math.floor((value % MILLIS_PER_HOUR) / MILLIS_PER_MINUTE); } else { this.hour = null; this.minute = null; } }, get: function () { if (this._hour === null || this._minute === null) return null; return this._hour * MILLIS_PER_HOUR + this._minute * MILLIS_PER_MINUTE; } } TimeInput.property.disabled = { set: function (value) { value = !!value; this._disabled = value; if (value) this.addClass('as-disabled'); else this.removeClass('as-disabled'); this.$text.disabled = value; }, get: function () { return this._disabled; } }; TimeInput.property.format = { enumerable: true, configurable: true, set: function (value) { if (typeof value !== "string") value = "hh:mm a"; value = value || 'hh:mm a'; this._format = value; this.dayOffset = this['dayOffset']; }, get: function () { return this._format; } }; TimeInput.property.s24 = { get: function () { var t = this.format.match(new RegExp(this.tokenRegex.source, 'g')); return !t || t.indexOf('a') < 0; } }; TimeInput.property.notNull = { set: function (value) { if (value) { if (this.dayOffset === null) { this.dayOffset = 0; } this.addClass('as-must-not-null'); } else { this.removeClass('as-must-not-null'); } }, get: function () { return this.hasClass('as-must-not-null'); } }; TimeInput.property.readOnly = { set: function (value) { value = !!value; if (value) this.addClass('as-read-only'); else this.removeClass('as-read-only'); }, get: function () { return this.hasClass('as-read-only'); } }; TimeInput.property.min = { set: function (value) { if (!isRealNumber(value)) value = 0; value = Math.floor(value); value = Math.max(0, Math.min(MILLIS_PER_DAY, value)); this._min = value; }, get: function () { return this._min; } }; TimeInput.eventHandler = {}; TimeInput.eventHandler.clickClockBtn = function () { this._attachPicker(this); }; TimeInput.eventHandler.mouseUpInput = js_DateTimeInput.eventHandler.mouseUpInput; TimeInput.eventHandler.mouseDownInput = js_DateTimeInput.eventHandler.mouseDownInput; TimeInput.eventHandler.dblclickInput = js_DateTimeInput.eventHandler.dblclickInput; TimeInput.eventHandler.inputBlur = js_DateTimeInput.eventHandler.inputBlur; TimeInput.eventHandler.clickOut = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.share.$picker, event) && !Object(EventEmitter["d" /* hitElement */])(this.share.$closeBtn, event)) return; this._releasePicker(); }; TimeInput.eventHandler.pickerChange = function (event) { this._applyValue(event.hour, event.minute); this._notifyIfChange(event); ResizeSystem["a" /* default */].requestUpdateSignal(); }; /*** * * @param {KeyboardEvent} event */ TimeInput.eventHandler.keydown = function (event) { var token = this._tokenAt(this.$text.selectionStart); var endToken = this._tokenAt(this.$text.selectionEnd); if (!token) { if (event.key === 'Enter') { this._correctingInput(); this._loadValueFromInput(); this._notifyIfChange(event); } return; } var newTokenText; var value; if (event.key.startsWith('Arrow')) { event.preventDefault(); switch (event.key) { case 'ArrowLeft': this._editPrevToken(); break; case 'ArrowRight': this._editNextToken(); break; case 'ArrowUp': case 'ArrowDown': switch (token.ident) { case "H": case "HH": value = parseInt(token.text); if (isNaN(value)) { this._editingData.H = event.key === 'ArrowUp' ? 0 : 23; } else { this._editingData.H = (value + (event.key === 'ArrowUp' ? 1 : 23)) % 24; } newTokenText = zeroPadding(this._editingData.H, token.ident.length); token.replace(newTokenText, true); break; case "hh": case 'h': value = parseInt(token.text); if (isNaN(value)) { this._editingData.h = event.key === 'ArrowUp' ? 1 : 12; } else { this._editingData.h = 1 + (value + (event.key === 'ArrowUp' ? 0 : 10)) % 12; } newTokenText = this._editingData.h + ''; while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true); break; case "mm": case 'm': value = parseInt(token.text); if (isNaN(value)) { this._editingData.m = event.key === 'ArrowUp' ? 0 : 59; } else { this._editingData.m = (value + (event.key === 'ArrowUp' ? 1 : 59)) % 60; } newTokenText = this._editingData.m + ''; while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true); break; case 'a': value = token.text; this._editingData.a = value === 'PM' ? "AM" : "PM"; newTokenText = this._editingData.a; token.replace(newTokenText, true); break; } break; } } else if (event.key === "Delete" || event.key === 'Backspace') { event.preventDefault(); if (endToken.idx !== token.idx) { if (this.notNull) { this.$text.value = formatDateTime(beginOfDay(new Date()), this.format); } else { this.$text.value = this._format; } this.$text.select(); } else { if (this.notNull) { token.replace(token.ident === 'a' ? 'AM' : zeroPadding((token.ident === 'hh' || token.ident === 'h') ? 12 : 0, token.ident.length), true); } else { token.replace(token.ident, true); } if (event.key === "Delete") this._editNextToken(); else this._editPrevToken(); } } else if (event.key === "Enter" || event.key === 'Tab') { this._correctingInput(); this._loadValueFromInput(); this._notifyIfChange(event); } else if (event.ctrlKey) { switch (event.key) { case 'a': case 'A': break; case 'c': case 'C': break; case 'x': case 'X': this.domSignal.once('clear_value', function () { this.$text.value = this._format; this.$text.select(); }.bind(this)); this.domSignal.emit('clear_value'); break; default: event.preventDefault(); } } else if (event.key.match(/^[0-9]$/g)) { event.preventDefault(); var dVal = parseInt(event.key); if (this._editingData.state === TimeInput_STATE_NEW) { switch (token.ident) { case 'm': case 'mm': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = TimeInput_STATE_EDITED; if (dVal > 5) { this._editNextToken(); } break; case 'h': case 'hh': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = TimeInput_STATE_EDITED; if (dVal > 1) { this._editNextToken(); } break; case 'H': case 'HH': token.replace(zeroPadding(dVal, token.ident.length), true); this._editingData.state = TimeInput_STATE_EDITED; if (dVal > 2) { this._editNextToken(); } break; } } else { switch (token.ident) { case 'm': case 'mm': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(0, Math.min(59, dVal)); this._editingData.m = dVal; token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); break; case 'h': case 'hh': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(1, Math.min(12, dVal)); this._editingData.h = dVal; token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); break; case 'H': case 'HH': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(0, Math.min(23, dVal)); this._editingData.H = dVal; token.replace(zeroPadding(dVal, token.ident.length), true); this._editNextToken(); break; } } } else if (event.key.match(/^[aApPSCsc]$/) && token.ident === 'a') { event.preventDefault(); if (event.key.match(/^[aAsS]$/)) { token.replace('AM', true); this._editingData.a = "AM"; } else { token.replace('PM', true); this._editingData.a = "PM"; } this._editNextToken(); } else { event.preventDefault(); } }; TimeInput.prototype.share = { $picker: null, $holdingInput: null, $follower: null, $closeBtn: null }; TimeInput.prototype._preparePicker = function () { if (this.share.$picker) return; this.share.$picker = TimeInput_({ tag: js_ChromeTimePicker.tag, class: ['as-time-input-picker'] }); this.share.$follower = TimeInput_({ tag: 'follower', class: ['as-time-input-follower', 'as-dropdown-box-common-style'], child: [ this.share.$picker, { class: 'as-dropdown-box-footer', child: [ { class: 'as-dropdown-box-footer-right', child: ['<a data-ml-key="txt_close" class="as-select-list-box-close-btn"></a>'] } ] }] }); }; TimeInput.prototype._attachPicker = function () { this._preparePicker(); if (this.share.$holdingInput) this.share.$holdingInput._releasePicker(); this.share.$holdingInput = this; this.share.$follower.addTo(document.body); this.share.$follower.followTarget = this; this.share.$follower.sponsorElement = this; this.share.$follower.addStyle('visibility', 'hidden'); this.share.$picker.hour = this.hour || 0; this.share.$picker.minute = this.minute || 0; this.share.$picker.s24 = this.s24; this.share.$picker.min = this.min; this.share.$picker.domSignal.emit('request_scroll_into_selected') this.$clockBtn.off('click', this.eventHandler.clickClockBtn); this.share.$picker.on('change', this.eventHandler.pickerChange); setTimeout(function () { document.addEventListener('click', this.eventHandler.clickOut); this.share.$follower.removeStyle('visibility'); }.bind(this), 5); }; TimeInput.prototype._releasePicker = function () { if (this.share.$holdingInput !== this) return; // this.share.$calendar.off('pick', this.eventHandler.calendarPick); this.share.$follower.remove(); document.removeEventListener('click', this.eventHandler.clickOut); this.share.$picker.off('change', this.eventHandler.pickerChange); setTimeout(function () { this.$clockBtn.on('click', this.eventHandler.clickClockBtn); }.bind(this), 5) this.share.$holdingInput = null; }; ACore["d" /* default */].install(TimeInput); /* harmony default export */ var js_TimeInput = (TimeInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/timepicker.css var timepicker = __webpack_require__(200); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimePicker.js //todo: add this to absol var isTouchDevice = BrowserDetector["a" /* default */].hasTouch && !BrowserDetector["a" /* default */].os.type.match(/windows|X11|Ubuntu|Linux/); //todo: re select text after click var TimePicker_ = ACore["d" /* default */]._; var TimePicker_$ = ACore["d" /* default */].$; var TimePicker_$g = HTML5_Svg.ShareInstance.$; var TimePicker_g = HTML5_Svg.ShareInstance._; function TimePicker() { this._hour = 0; this._minute = 0; this._lastDayOffset = 0; this._state = 'none'; this._mode = 'CLOCK'; this._latBound = { width: 0, height: 0 }; var thisPicker = this; if (isTouchDevice) this.addClass('ac-time-picker-touch'); this.$attachook = TimePicker_('attachhook').addTo(this).on('error', function () { Dom["b" /* default */].addToResizeSystem(this); this.requestUpdateSize(); thisPicker.addStyle('font-size', thisPicker.getComputedStyleValue('font-size')); }); this.$attachook.requestUpdateSize = this.updateSize.bind(this); /*** * * @type {NumberSpanInput} */ this.$hour = TimePicker_$('.ac-time-picker-hour', this) .on({ focus: this.eventHandler.focusHour, keydown: this.eventHandler.keydownHour, blur: this.eventHandler.blurHour }); /*** * * @type {NumberSpanInput} */ this.$minute = TimePicker_$('.ac-time-picker-minute', this) .on({ keydown: this.eventHandler.keydownMinute, focus: this.eventHandler.focusMinute, blur: this.eventHandler.blurMinute, }); this.$hourInput = TimePicker_$('.ac-time-picker-hour-input', this) .on({ click: this.eventHandler.clickHourInput, keydown: this.eventHandler.keydownHourInput, blur: this.eventHandler.blurHourInput }); this.$minuteInput = TimePicker_$('.ac-time-picker-minute-input', this) .on({ click: this.eventHandler.clickMinuteInput, keydown: this.eventHandler.keydownMinuteInput, blur: this.eventHandler.blurMinuteInput }); //only support if is none touch device if (isTouchDevice) { this.$hour.readOnly = true; this.$hour.on('click', this._editHourState.bind(this)); this.$minute.readOnly = true; this.$minute.on('click', this._editMinuteState.bind(this)); } this.$clock = TimePicker_$g('.ac-time-picker-clock', this) .on(isTouchDevice ? 'touchstart' : 'mousedown', this.eventHandler.mousedownClock ); this._clockWidth = 400; this._clockHeight = 400; this._clockRadius = 150; this._clockRadiusInner = 100; this.$clockContent = TimePicker_$g('.ac-time-picker-clock-content', this); this.$clockHourCtn = TimePicker_$g('.ac-time-picker-clock-hour-ctn', this); this.$clockMinuteCtn = TimePicker_$g('.ac-time-picker-clock-minute-ctn', this); this.$hourNumbers = Array(24).fill(0).map(function (u, i) { var h = i; if (h == 0) h = 12; else if (h == 12) h = '00'; return TimePicker_g({ tag: 'text', attr: { 'text-anchor': 'middle' }, class: 'ac-time-picker-clock-hour-' + (i < 12 ? 'am' : 'pm'), child: { text: h + '' } }).addTo(thisPicker.$clockHourCtn); }); this.$minuteNumbers = Array(12).fill(0).map(function (u, i) { return TimePicker_g({ tag: 'text', attr: { 'text-anchor': 'middle' }, class: 'ac-time-picker-clock-minute', child: { text: i * 5 + '' } }).addTo(thisPicker.$clockMinuteCtn); }); this.$selectCtn = TimePicker_$g('.ac-time-picker-clock-select-ctn', this); this.$clockCenter = TimePicker_g({ tag: 'circle', class: 'ac-time-picker-clock-center', attr: { cx: "0", cy: '0' } }).addTo(this.$selectCtn); this.$clockSelectLine = TimePicker_g({ tag: 'path', class: 'ac-time-picker-clock-select-line' }).addTo(this.$selectCtn); this.$clockSelectCicle = TimePicker_g({ tag: 'circle', class: 'ac-time-picker-clock-select-circle', attr: { cx: 0, cy: 0 } }).addTo(this.$selectCtn); this.$clockSelectCenter = TimePicker_g({ tag: 'circle', class: 'ac-time-picker-clock-select-center' }).addTo(this.$selectCtn); this.$finishBtn = TimePicker_$('.ac-time-picker-finish-btn', this) .on('click', this.finishSelect.bind(this)); this.$cancelBtn = TimePicker_$('.ac-time-picker-cancel-btn', this) .on('click', this.cancelSelect.bind(this)); this.$keyboardBtn = TimePicker_$('.ac-time-picker-keyboard-btn', this) .on('click', this.timeMode.bind(this)); this.$clockBtn = TimePicker_$('.ac-time-picker-clock-btn', this) .on('click', this.clockMode.bind(this)); }; TimePicker.prototype.updateSize = function () { // var this._fontSize = this.getFontSize(); var cBound = this.$clock.getBoundingClientRect(); this._clockWidth = cBound.width; this._clockHeight = cBound.height; this.$clock.attr({ width: this._clockWidth, height: this._clockHeight, viewBox: '0 0 ' + this._clockWidth + ' ' + this._clockHeight }); this.$clockContent.attr('transform', 'translate(' + (this._clockWidth / 2) + ',' + (this._clockHeight / 2) + ')'); var clockRadius = this._clockWidth / 2 - this._fontSize; var clockRadiusInner = clockRadius - this._fontSize * 1.5; this._clockRadius = clockRadius; this._clockRadiusInner = clockRadiusInner; this.$clockCenter.attr('r', this._fontSize / 5); this.$clockSelectCicle.attr({ r: this._fontSize * 0.7, cx: clockRadius }); this.$clockSelectCenter.attr({ r: this._fontSize / 10, cx: clockRadius }); this.$hourNumbers.forEach(function (elt, i) { var angle = Math.PI * (i - 3) / 6; var r = i < 12 ? clockRadius : clockRadiusInner; var box = elt.getBBox(); var x = r * Math.cos(angle); var y = r * Math.sin(angle) + box.height / 2; elt.attr({ x: x, y: y }); }); this.$minuteNumbers.forEach(function (elt, i) { var angle = Math.PI * (i - 3) / 6; var box = elt.getBBox(); var x = clockRadius * Math.cos(angle); var y = clockRadius * Math.sin(angle) + box.height / 3; elt.attr({ x: x, y: y }); }); this.updateSelectPosition(); this.notifySizeChange(); }; TimePicker.prototype.updateSelectPosition = function () { var angle, radius; if (this._state == "EDIT_MINUTE") { angle = Math.PI * (this._minute - 15) / 30; radius = this._clockRadius } else if (this._state == "EDIT_HOUR") { angle = Math.PI * (this._hour - 3) / 6; if (this._hour > 0 && this._hour <= 12) { radius = this._clockRadius; } else { radius = this._clockRadiusInner; } } else { return; } this._drawSelect(radius, angle); }; TimePicker.prototype.editHour = function () { this.clockMode(); if (this.$hour.readOnly) { this._editHourState(); } else { this.$hour.focus(); } } TimePicker.prototype._drawSelect = function (radius, angle) { var x = radius * Math.cos(angle); var y = radius * Math.sin(angle); this.$clockSelectCicle.attr({ cx: x, cy: y }); this.$clockSelectCenter.attr({ cx: x, cy: y }); this.$clockSelectLine.attr('d', 'M0,0L' + x + ',' + y); }; TimePicker.prototype.notifyChange = function (force) { if (this._lastDayOffset != this.dayOffset || force) { this.emit('change', { target: this, hour: this.hour, minute: this.minute, dayOffset: this.dayOffset, name: 'change' }, this); this._lastDayOffset = this.dayOffset; } }; TimePicker.prototype.notifySizeChange = function () { var bound = this.getBoundingClientRect(); if (this._latBound.width != bound.width || this._latBound.height != bound.height) { this._latBound.width = bound.width; this._latBound.height = bound.height; this.emit('sizechange', { name: 'sizechange', bound: bound, target: this }, this); } }; TimePicker.tag = 'TimePicker'; TimePicker.render = function () { return TimePicker_({ extendEvent: ['change', 'finish', 'cancel', 'sizechange'], class: ['ac-time-picker', 'ac-time-picker-clock-mode'],//clock mode is default child: [ { class: 'ac-time-picker-set-clock', child: [{ class: 'ac-time-picker-set-clock-header', child: [ { tag: 'numberspaninput', class: 'ac-time-picker-hour', props: { value: 0, zeroInt: 2 } }, { tag: 'span', text: ':' }, { tag: 'numberspaninput', class: 'ac-time-picker-minute', props: { value: 0, zeroInt: 2 } } ] }, TimePicker_g( { tag: 'svg', class: 'ac-time-picker-clock', child: [ { class: 'ac-time-picker-clock-content', child: ['.ac-time-picker-clock-select-ctn', '.ac-time-picker-clock-hour-ctn', '.ac-time-picker-clock-minute-ctn'] } ] } )] }, { class: 'ac-time-picker-set-time', child: [ { class: 'ac-time-picker-set-time-header', child: { text: 'Set time' } }, { class: 'ac-time-picker-set-time-label', child: { text: 'Type in time' } }, { class: 'ac-time-picker-set-time-input-group', child: [ { class: 'ac-time-picker-set-time-input-hm', child: [ { tag: 'input', class: 'ac-time-picker-hour-input', attr: { type: 'number', placeHolder: '00', tabindex: '2', } }, { tag: 'span', child: { text: ':' } }, { tag: 'input', class: 'ac-time-picker-minute-input', attr: { type: 'number', placeHolder: '00', tabindex: '3' } } ] }, { class: 'ac-time-picker-set-time-input-label-hm', child: [ { tag: 'span', child: { text: 'hour' } }, { tag: 'span', style: { visibility: 'hidden' }, child: { text: ':' } }, { tag: 'span', child: { text: 'minute' } } ] } ] } ] }, { class: 'ac-time-picker-footer', child: [ { tag: 'button', class: 'ac-time-picker-keyboard-btn', child: 'span.mdi.mdi-keyboard-outline' }, { tag: 'button', class: 'ac-time-picker-clock-btn', child: 'span.mdi.mdi-clock-outline' }, { class: 'ac-time-picker-footer-right', child: [ { tag: 'button', class: 'ac-time-picker-cancel-btn', attr: { tabindex: '4' }, child: { text: 'CANCEL' } }, { tag: 'button', attr: { tabindex: '4' }, class: 'ac-time-picker-finish-btn', child: { text: 'OK' } } ] }] } ] }); }; TimePicker.prototype.clockMode = function () { if (this._mode == "CLOCK") return; this._mode = 'CLOCK'; this.removeClass('ac-time-picker-time-mode') .addClass('ac-time-picker-clock-mode'); this.$hour.value = this._hour < 10 ? '0' + this._hour : this._hour; this.$minute.value = this._minute < 10 ? '0' + this._minute : this._minute; this._editHourState(); this.updateSize(); this._showSelectHour(this._hour); }; TimePicker.prototype.timeMode = function () { if (this._mode == "TIME") return; this._mode = 'TIME'; this.addClass('ac-time-picker-time-mode') .removeClass('ac-time-picker-clock-mode'); this.$hourInput.value = this._hour < 10 ? '0' + this._hour : this._hour; this.$minuteInput.value = this._minute < 10 ? '0' + this._minute : this._minute; this.editHourInput(); this.updateSize(); }; TimePicker.prototype._editHourState = function () { this._state = "EDIT_HOUR"; this._preHour = this._hour; this.removeClass('ac-time-picker-edit-minute') .addClass('ac-time-picker-edit-hour') .removeClass('ac-time-picker-edit-hour-input') .removeClass('ac-time-picker-edit-minute-input'); this.updateSize(); }; TimePicker.prototype._editMinuteState = function () { this._state = "EDIT_MINUTE"; this._preMinute = this._minute; this.addClass('ac-time-picker-edit-minute') .removeClass('ac-time-picker-edit-hour') .removeClass('ac-time-picker-edit-hour-input') .removeClass('ac-time-picker-edit-minute-input'); this.updateSize(); }; TimePicker.prototype.editHourInput = function () { var thisPicker = this; this._state = "EDIT_HOUR_INPUT"; this._preHour = this._hour; this.removeClass('ac-time-picker-edit-minute') .removeClass('ac-time-picker-edit-hour') .addClass('ac-time-picker-edit-hour-input') .removeClass('ac-time-picker-edit-minute-input'); this.updateSize(); setTimeout(function () { thisPicker.$hourInput.focus(); thisPicker.$hourInput.select(); }, 10); }; TimePicker.prototype.editMinuteInput = function () { var thisPicker = this; this._state = "EDIT_MINUTE_INPUT"; this._preMinute = this._minute; this.removeClass('ac-time-picker-edit-minute') .removeClass('ac-time-picker-edit-hour') .removeClass('ac-time-picker-edit-hour-input') .addClass('ac-time-picker-edit-minute-input'); this.updateSize(); setTimeout(function () { thisPicker.$minuteInput.focus(); thisPicker.$minuteInput.select(); }, 1) }; TimePicker.prototype.finishSelect = function () { this.emit('finish', { target: this, hour: this.hour, minute: this.minute, dayOffset: this.dayOffset, name: 'finish' }, this); }; TimePicker.prototype.cancelSelect = function () { this.emit('cancel', { target: this, name: 'cancel' }, this); }; TimePicker.eventHandler = {}; TimePicker.eventHandler.focusHour = function () { this._editHourState(); this.$hour.selectAll(); }; TimePicker.eventHandler.blurHour = function () { var newText = this.$hour.value; var hour = parseFloat(newText) || 0; if (hour < 0 || hour >= 24) hour = this._preHour; this.$hour.value = hour < 10 ? '0' + hour : hour; this._hour = hour; this._showSelectHour(hour); this.notifyChange(); }; TimePicker.eventHandler.focusMinute = function () { this._editMinuteState(); this.$minute.selectAll(); }; TimePicker.eventHandler.blurMinute = function () { var newText = this.$minute.innerHTML; var minute = parseFloat(newText) || 0; if (minute < 0 || minute >= 60) minute = this._preMinute; this.$minute.value = minute < 10 ? '0' + minute : minute; this._minute = minute; this._showSelectByMinuteText(); this.notifyChange(); }; TimePicker.eventHandler.clickHourInput = function () { if (this._state != 'EDIT_HOUR') this.editHourInput(); else { this.$hourInput.focus(); this.$hourInput.select(); } }; TimePicker.eventHandler.clickMinuteInput = function () { if (this._state != 'EDIT_MINUTE_INPUT') this.editMinuteInput(); else { this.$minuteInput.focus(); this.$minuteInput.select(); } }; TimePicker.eventHandler.blurHourInput = function () { var hour = parseFloat(this.$hourInput.value) || 0; if (hour < 0 || hour >= 24) hour = this._preHour; this.hour = hour; }; TimePicker.eventHandler.blurMinuteInput = function () { var minute = parseFloat(this.$minuteInput.value) || 0; if (minute < 0 || minute >= 60) minute = this._preMinute; this.minute = minute; }; TimePicker.property = {}; TimePicker.property.hour = { set: function (value) { value = (value % 24) || 0; this._hour = value; var text = (value < 10 ? '0' : '') + value + ''; this.$hour.clearChild().addChild(TimePicker_({ text: text })); this.$hourInput.value = text; this.updateSelectPosition(); }, get: function () { return this._hour; } }; TimePicker.property.minute = { set: function (value) { value = (value % 60) || 0; this._minute = value; var text = (value < 10 ? '0' : '') + value + ''; this.$minute.value = text; this.$minuteInput.value = text; this.updateSelectPosition(); }, get: function () { return this._minute; } }; TimePicker.property.dayOffset = { set: function (value) { value = value || 0; if (value.getTime) value = value.getTime() - beginOfDay(value).getTime(); else { value = value % MILLIS_PER_DAY; } this.hour = Math.floor(value / MILLIS_PER_HOUR); this.minute = Math.floor((value % MILLIS_PER_HOUR) / MILLIS_PER_MINUTE); }, get: function () { return this._hour * MILLIS_PER_HOUR + this._minute * MILLIS_PER_MINUTE; } }; TimePicker.prototype._showSelectHour = function (hour) { var radius; var angle = Math.PI * (hour - 3) / 6; if ((hour < 24 && hour > 12) || hour == 0) { radius = this._clockRadiusInner; } else if (hour <= 12) { radius = this._clockRadius; } else { return; } this._drawSelect(radius, angle); }; TimePicker.prototype._showSelectByHourText = function () { var hour = parseFloat(this.$hour.innerHTML) || 0; if (hour < 0 || hour >= 24) return; this._showSelectHour(hour); }; TimePicker.prototype._showSelectMinute = function (minute) { var angle = Math.PI * (minute - 15) / 30; this._drawSelect(this._clockRadius, angle); } TimePicker.prototype._showSelectByMinuteText = function () { var minute = parseFloat(this.$minute.innerHTML) || 0; if (minute < 0 || minute >= 60) return; this._showSelectMinute(minute); }; /*** * * @param {KeyboardEvent} event */ TimePicker.eventHandler.keydownHour = function (event) { var thisPicker = this; if (event.key == 'Enter' || event.key == 'Tab') { event.preventDefault(); this.$hour.blur(); this._editMinuteState(); setTimeout(function () { thisPicker.$minute.focus(); thisPicker.$minute.selectAll(); }, 30); } else { setTimeout(function () { var newText = thisPicker.$hour.value; var hour = parseFloat(newText) || 0; if (hour < 0 || hour >= 24) hour = thisPicker._preHour; else { thisPicker._hour = hour; thisPicker._showSelectHour(hour); } }, 30); } }; TimePicker.eventHandler.keydownMinute = function (event) { var thisPicker = this; if (event.key == 'Enter') { this.$minute.blur(); event.preventDefault(); setTimeout(this.finishSelect.bind(this), 30); } else if (event.key == 'Tab') { this.$minute.selectNone(); this.$finishBtn.focus(); event.preventDefault(); } else { setTimeout(function () { var newText = thisPicker.$minute.value; var minute = parseFloat(newText) || 0; if (minute < 0 || minute >= 60) minute = thisPicker._preMinute; else { thisPicker._minute = minute; thisPicker._showSelectMinute(minute); } }, 30); } }; TimePicker.eventHandler.keydownHourInput = function (event) { var thisPicker = this; if ((isTouchDevice && event.key == "Unidentified") || (event.key && event.key.length == 1 && !event.ctrlKey && !event.altKey)) { if (event.key.match(/[0-9]/)) { setTimeout(this.notifyChange.bind(this), 2); } else { event.preventDefault(); } } else if (event.key == 'Enter') { event.preventDefault(); this.$hourInput.blur(); this.editMinuteInput(); } else if (!event.key && !event.key.toLowerCase().match(/arrow|back/)) { var cText = this.$hourInput.value; setTimeout(function () { var newText = thisPicker.$hourInput.value; if (cText != newText) { var hour = parseFloat(newText) || 0; if (hour < 0 || hour >= 24) hour = thisPicker._preHour; thisPicker.hour = hour; thisPicker.$hourInput.blur(); thisPicker.editMinuteInput(); thisPicker.notifyChange(); } }, 1); } }; TimePicker.eventHandler.keydownMinuteInput = function (event) { var thisPicker = this; if ((isTouchDevice && event.key == "Unidentified") || event.key.length == 1 && !event.ctrlKey && !event.altKey) { if ((isTouchDevice && event.key == "Unidentified") || event.key.match(/[0-9]/)) { setTimeout(this.notifyChange.bind(this), 2); } else { event.preventDefault(); } } else if (event.key == 'Enter') { this.$minute.blur(); this.eventHandler.blurMinuteInput(); event.preventDefault(); setTimeout(this.finishSelect.bind(this), 100); } else if (event.key == "Backspace") { } else if (event.key != 'Enter') { var cText = this.$minuteInput.value; setTimeout(function () { var newText = thisPicker.$minuteInput.value; if (cText != newText) { var minute = parseFloat(newText) || 0; if (minute < 0 || minute >= 60) minute = thisPicker._preMinute; thisPicker.minute = minute; thisPicker.$minuteInput.focus(); thisPicker.$minuteInput.select(); thisPicker.notifyChange(); } }, 1); } }; TimePicker.eventHandler.dragOnClock = function (event) { event = (event.changedTouches && event.changedTouches[0]) || event; var cBound = this.$clock.getBoundingClientRect(); var cx = (cBound.left + cBound.right) / 2; var cy = (cBound.top + cBound.bottom) / 2; var x = event.clientX - cx; var y = event.clientY - cy; var angle = Math.atan2(y, x); var radius = Math.sqrt(x * x + y * y); var index; if (this._state == "EDIT_HOUR") { angle += Math.PI * 2; index = Math.round(angle / (Math.PI / 6)); var hour = (index + (12 + 3)) % 12; if (radius < (this._clockRadiusInner + this._clockRadius) / 2) { if (hour != 0) hour += 12; } else { if (hour == 0) hour = 12; } this._hour = hour; this._showSelectHour(hour); this.$hour.value = hour < 10 ? '0' + hour : hour; this.$hour.selectEnd(); } else if (this._state == "EDIT_MINUTE") { radius = this._clockRadius; angle += Math.PI * 2; index = Math.round(angle / (Math.PI / 30)); angle = index * (Math.PI / 30); var minute = (index + (60 + 15)) % 60; this._minute = minute; this.$minute.value = minute < 10 ? '0' + minute : minute; this._showSelectMinute(minute); this.$minute.selectEnd(); this.notifyChange(); } else { return; } }; TimePicker.eventHandler.mousedownClock = function (event) { event.preventDefault(); this.eventHandler.dragOnClock(event); document.body.addEventListener(isTouchDevice ? 'touchmove' : 'mousemove', this.eventHandler.mousemoveClock); document.body.addEventListener(isTouchDevice ? 'touchend' : 'mouseup', this.eventHandler.mousefinishClock); if (!isTouchDevice) document.body.addEventListener('mouseleave', this.eventHandler.mousefinishClock); }; TimePicker.eventHandler.mousemoveClock = function (event) { event.preventDefault(); this.eventHandler.dragOnClock(event); }; TimePicker.eventHandler.mousefinishClock = function () { document.body.removeEventListener('mousemove', this.eventHandler.mousemoveClock); document.body.removeEventListener('mouseup', this.eventHandler.mousefinishClock); document.body.removeEventListener('mouseleave', this.eventHandler.mousefinishClock); if (this._state == 'EDIT_HOUR') { if (this.$minute.readOnly) { this._editMinuteState(); } else { this.$minute.focus(); } } else if (this._state == 'EDIT_MINUTE') { this.$minute.selectAll();// refocus } }; ACore["d" /* default */].install('timepicker', TimePicker); /* harmony default export */ var js_TimePicker = (TimePicker); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/tooltip.css var tooltip = __webpack_require__(202); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Tooltip.js var Tooltip_ = ACore["d" /* default */]._; var Tooltip_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function ToolTip() { this.$content = Tooltip_$('.absol-tooltip-content', this); this.$arrow = Tooltip_$('.absol-tooltip-arrow', this); } ToolTip.tag = 'ToolTip'.toLowerCase(); ToolTip.render = function () { return Tooltip_({ class: 'absol-tooltip', child: [ { class: 'absol-tooltip-content' }, '.absol-tooltip-arrow' ] }); }; ['addChild', 'addChildBefore', 'addChildAfter', 'clearChild'].forEach(function (key) { ToolTip.prototype[key] = function () { return this.$content[key].apply(this.$content, arguments); } }); ACore["d" /* default */].install(ToolTip); function updateTooltipPosition(toolTipClass) { var element = toolTipClass.$element; if (!element) return; var orientation = toolTipClass._orientation; var tBound = toolTipClass.$tooltip.$content.getBoundingClientRect(); var ebound = element.getBoundingClientRect(); var screenSize = Object(Dom["d" /* getScreenSize */])(); var sMargin = Math.round(Math.min(5, screenSize.width/100, screenSize.height)); screenSize.width = Math.min(screenSize.width, document.body.getBoundingClientRect().width); var fontSize = toolTipClass.$tooltip.getFontSize(); var dx = 0; var dy = 0; var arrowPos = null; var aHCenter = (ebound.left + ebound.width / 2 > tBound.width / 2) && (screenSize.width - ebound.left - ebound.width / 2 > tBound.width / 2); var aVCenter = (ebound.top + ebound.height / 2 > tBound.height / 2) && (screenSize.height - ebound.top - ebound.height / 2 > tBound.height / 2); var aTop = (tBound.height < ebound.top - sMargin); var aBottom = tBound.height < screenSize.height - sMargin - ebound.bottom; var aRight = tBound.width < screenSize.width - sMargin - ebound.right; var aLeft = tBound.width < ebound.left - sMargin; var aHLeft = (ebound.left + ebound.width / 2 - tBound.width / 2 < sMargin) && (ebound.left + ebound.width / 2 >= sMargin + fontSize / 2); var aHRight = (ebound.left + ebound.width / 2 + tBound.width / 2 > screenSize.width - sMargin) && (ebound.left + ebound.width / 2 < screenSize.width - sMargin - fontSize / 2); var aVTop = (ebound.top + ebound.width / 2 - tBound.height / 2 < sMargin) && (ebound.top + ebound.height / 2 >= sMargin + fontSize / 2); var aVBottom = (ebound.top + ebound.width / 2 + tBound.height / 2 <= screenSize.height - sMargin) && (ebound.top + ebound.height / 2 > screenSize.height - sMargin - fontSize / 2); if (orientation === 'auto' && aHCenter) { if (aTop) { orientation = 'top'; } else if (aBottom) { orientation = 'bottom'; } } if (orientation === 'auto' && aVCenter) { if (aRight) { orientation = 'right'; } else if (aLeft) { orientation = 'left'; } } if ((orientation === 'auto' || orientation === 'top' || orientation === 'bottom') && aHLeft) { if (aTop || orientation === 'auto') orientation = "top"; else if (aBottom || orientation === 'auto') orientation = 'bottom'; if (aTop || aBottom) { dx += tBound.width / 2 - (ebound.left + ebound.width / 2) + sMargin; arrowPos = tBound.width / 2 - dx + 'px'; } } if ((orientation === 'auto' || orientation === 'top' || orientation === 'bottom') && aHRight) { if (aTop || orientation === 'auto') orientation = "top"; else if (aBottom || orientation === 'auto') orientation = 'bottom'; if (aTop || aBottom) { dx -= tBound.width / 2 - (screenSize.width - (ebound.left + ebound.width / 2)) + sMargin; arrowPos = tBound.width / 2 - dx + 'px'; } } if ((orientation === 'auto'|| orientation === 'left' || orientation === 'right') && aVTop) { if (aLeft || orientation === 'auto') orientation = "left"; else if (aRight || orientation === 'auto') { orientation = 'right'; } if (aLeft || aRight) { dy += tBound.height / 2 - (ebound.top + ebound.height / 2) + sMargin; arrowPos = tBound.height / 2 - dy + 'px'; } } if ((orientation === 'auto'|| orientation === 'left' || orientation === 'right') && aVBottom) { if (aLeft || orientation === 'auto') orientation = "left"; else if (aRight || orientation === 'auto') { orientation = 'right'; } if (aLeft || aRight) { dy -= tBound.height / 2 - (screenSize.height - (ebound.top + ebound.height / 2)) + sMargin; arrowPos = tBound.height / 2 - dx + 'px' } } if (orientation === 'auto') { if (aRight) { if (aTop) { orientation = 'ne'; } else if (aBottom) { orientation = 'se'; } } else if (aLeft) { if (aTop) { orientation = 'nw'; } else if (aBottom) { orientation = 'sw'; } } } if (orientation === 'auto') orientation = "error"; toolTipClass.$tooltip.removeClass('top') .removeClass('left') .removeClass('right') .removeClass('bottom') .removeClass('ne') .removeClass('nw') .removeClass('se') .removeClass('sw') .addClass(orientation); tBound = toolTipClass.$tooltip.getBoundingClientRect(); if (orientation == 'top') { dy += ebound.top - tBound.height; dx += ebound.left + ebound.width / 2 - tBound.width / 2; } else if (orientation == 'left') { dy += ebound.top + ebound.height / 2 - tBound.height / 2; dx += ebound.left - tBound.width; } else if (orientation == 'right') { dy += ebound.top + ebound.height / 2 - tBound.height / 2; dx += ebound.right; } else if (orientation == 'bottom') { dy += ebound.bottom; dx += ebound.left + ebound.width / 2 - tBound.width / 2; } else if (orientation === 'ne') { dy += ebound.top - tBound.height; dx += ebound.right; } else if (orientation === 'nw') { dy += ebound.top - tBound.height; dx += ebound.left - tBound.width; } else if (orientation === 'se') { dy += ebound.bottom; dx += ebound.right; } else if (orientation === 'sw') { dy += ebound.bottom; dx += ebound.left - tBound.width; } else { throw new Error("Invalid orientation, orientation: ['left', 'right', 'top', 'bottom', 'auto', 'nw', 'ne', 'sw', 'se']"); } if (arrowPos) { toolTipClass.$tooltip.addStyle('--tool-tip-arrow-pos', arrowPos); } else { toolTipClass.$tooltip.removeStyle('--tool-tip-arrow-pos') } toolTipClass.$holder.addStyle({ top: dy + 'px', left: dx + 'px' }); } ToolTip.$holder = Tooltip_('.absol-tooltip-root-holder') ToolTip.$tooltip = Tooltip_('tooltip.top').addTo(ToolTip.$holder); ToolTip.$element = undefined; ToolTip.$content = undefined; ToolTip._orientation = 'top'; ToolTip._session = Math.random() * 10000000000 >> 0; ToolTip.updatePosition = function () { if (!ToolTip.$element) return; updateTooltipPosition(ToolTip); }; ToolTip.$tooltip.$arrow.updateSize = ToolTip.updatePosition.bind(ToolTip); ToolTip.show = function (element, content, orientation) { orientation = orientation || 'auto'; if (typeof content == 'string') { content = Tooltip_({ tag: 'span', style: { 'white-space': 'nowrap' }, props: { innerHTML: content } }); } Tooltip_$('', content, function (elt) { if (elt.tagName == "IMG" && elt.src) { Dom["b" /* default */].waitImageLoaded(elt).then(ToolTip.updatePosition.bind(ToolTip)); } else if (elt.sync) { elt.sync.then(ToolTip.updatePosition.bind(ToolTip)); } }); var currentSession = Math.random() * 10000000000 >> 0; ToolTip.$holder.addTo(document.body); Dom["b" /* default */].addToResizeSystem(ToolTip.$tooltip.$arrow); ToolTip.$element = element; ToolTip._session = currentSession; ToolTip.$content = content; ToolTip._orientation = orientation; ToolTip.$tooltip.clearChild().addChild(content); ToolTip.$holder.removeStyle('visibility'); ToolTip.$tooltip.removeClass('top') .removeClass('left') .removeClass('right') .removeClass('bottom') .removeClass('ne') .removeClass('nw') .removeClass('auto'); ToolTip.$tooltip.addClass(orientation); ToolTip.updatePosition(); return currentSession; }; ToolTip.close = function (session) { if (session === true || session === this._session) { ToolTip.$holder.addStyle('visibility', 'hidden'); ToolTip.$tooltip.clearChild(); ToolTip.$holder.addStyle({ top: false, left: false }); } }; ToolTip.closeTooltip = ToolTip.close; ToolTip.showWhenClick = function (element, content, orientation) { var mSession = undefined; element.addEventListener('click', function () { if (mSession !== undefined) return; mSession = ToolTip.show(element, content, orientation); var finish = function (event) { if (!EventEmitter["b" /* default */].hitElement(content, event)) { Tooltip_$(document.body).off('click', finish); ToolTip.closeTooltip(mSession); mSession = undefined; } }; setTimeout(function () { Tooltip_$(document.body).on('click', finish); }, 100) }); }; /* harmony default export */ var Tooltip = (ToolTip); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/treelist.css var treelist = __webpack_require__(50); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TreeListItem.js var TreeListItem_ = ACore["d" /* default */]._; var TreeListItem_$ = ACore["d" /* default */].$; function TreeListItem() { var thisTI = this; this.$list = TreeListItem_$('treelist', this).on('press', function (event, sender) { thisTI.emit('press', event, this); }); this.$parent = TreeListItem_$('.absol-tree-list-item-parent', this).on('mousedown', this.eventHandler.clickParent); this.$text = TreeListItem_$('span.absol-tree-list-item-text', this); this.$desc = TreeListItem_$('span.absol-tree-list-item-desc', this); this.$descCtn = TreeListItem_$('.absol-tree-list-item-desc-container', this); this.$list.level = 1; OOP["a" /* default */].drillProperty(this, this.$list, 'items'); } TreeListItem.tag = 'TreeListItem'.toLowerCase(); TreeListItem.render = function () { return TreeListItem_({ extendEvent: ['press', 'clickparent'], class: 'absol-tree-list-item', child: [ { class: 'absol-tree-list-item-parent', child: ['span.absol-tree-list-item-text', { class: 'absol-tree-list-item-desc-container', child: 'span.absol-tree-list-item-desc' } ] }, 'treelist' ] }); }; TreeListItem.eventHandler = {}; TreeListItem.eventHandler.clickParent = function (event) { event.preventDefault(); var prevented = false; var self = this; this.emit('press', { target: self, preventDefault: function () { prevented = true; }, isPrevented: function () { return prevented; }, data: this.data }, this); if (!prevented) { var top = self.getTopLevelElt(); TreeListItem_$('treelistitem', top, function (e) { if (e != self) e.active = false; }) self.active = true; } }; TreeListItem.prototype.getTopLevelElt = function () { var current = this; while (current) { var parent = current.parentNode; if (!parent || (!parent.classList.contains('absol-tree-list') && !parent.classList.contains('absol-tree-list-item'))) break; current = current.parentNode; } return current; }; TreeListItem.property = { text: { set: function (value) { value = value + ''; this.$text.innerHTML = value; }, get: function () { return this.$text.innerHTML; } }, desc: { set: function (value) { value = value + ''; this.$desc.innerHTML = value; }, get: function () { return this.$desc.innerHTML } }, level: { set: function (value) { value = value || 0; if (value == this.level) return; this._level = value; this.$parent.addStyle('padding-left', this._level * 0.4 * 3 + 'em'); this.$list.level = value + 1; }, get: function () { return this._level || 0; } }, active: { set: function (value) { if (value) { this.addClass('active'); } else { this.removeClass('active'); } }, get: function () { return this.hasClass('active'); } }, data: { set: function (value) { this._data = value; }, get: function () { return this._data; } }, value: { get: function () { var data = this.data; if (typeof data == 'string') return data; if (typeof data.value == "undefined") { return data.text; } else { return data.value; } } } }; TreeListItem.property.extendClasses = { set: function (value) { var self = this; this.extendClasses.forEach(function (className) { self.$parent.removeClass(className); }); this._extendClass = []; if (!value) return; if (typeof value == 'string') { value = value.split(/\s+/).filter(function (c) { return c.length > 0 }); } if (value instanceof Array) { this._extendClass = value; this._extendClass.forEach(function (className) { self.$parent.addClass(className); }); } else { throw new Error('Invalid extendClasses'); } }, get: function () { return this._extendClass || []; } }; TreeListItem.property.extendStyle = { set: function (value) { this.$parent.removeStyle(this._extendStyle || {}); this._extendStyle = value || {}; this.$parent.addStyle(this.extendStyle); }, get: function () { return this._extendStyle || {}; } }; ACore["d" /* default */].install(TreeListItem); /* harmony default export */ var js_TreeListItem = (TreeListItem); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TreeList.js var TreeList_ = ACore["d" /* default */]._; var TreeList_$ = ACore["d" /* default */].$; function TreeList() { } TreeList.tag = 'treelist'; TreeList.render = function () { return TreeList_({ class: 'absol-tree-list', extendEvent: 'press' }); }; TreeList.prototype.realignDescription = function (extMarginLeft) { extMarginLeft = extMarginLeft || 0; var maxWidth = 0; var ctns = []; TreeList_$('.absol-tree-list-item-desc-container', this, function (elt) { ctns.push(elt); var bound = elt.getBoundingClientRect(); maxWidth = Math.max(maxWidth, bound.width); }); var fontSize = this.getFontSize(); var cntWidth = maxWidth / fontSize + 'em'; var extMarginRight = maxWidth / fontSize + extMarginLeft + 'em'; ctns.forEach(function (e) { e.addStyle('width', cntWidth); }); TreeList_$('span.absol-tree-list-item-text', this, function (elt) { elt.addStyle('margin-right', extMarginRight); }); return this; }; TreeList.prototype.clearItems = function () { this._items = []; this.clearChild(); }; TreeList.prototype.getAllItem = function () { return this._items || []; }; TreeList.prototype.getAllItemElement = function () { return Array.apply(null, this.childNodes); } TreeList.prototype.addItem = function (item) { var self = this; var props = { level: this.level, data: item }; if (typeof item == 'string') { props.text = item; } else { props.text = item.text; if (item.items) { props.items = item.items; } if (item.desc) { props.desc = item.desc; } if (item.extendClasses) { props.extendClasses = item.extendClasses; } if (item.extendStyle) { props.extendStyle = item.extendStyle; } } var elt = TreeList_({ tag: 'treelistitem', props: props, on: { press: function (event) { self.emit('press', event, this); } } }); this.addChild(elt); this._items.push(item); return this; }; TreeList.property = {}; TreeList.property.items = { set: function (value) { this.clearItems(); (value || []).forEach(this.addItem.bind(this)); }, get: function () { return this.getAllItem(); } }; TreeList.property.level = { set: function (value) { value = value || 0; if (this.level == value) return; this._level = value; this.getAllItemElement().forEach(function (e) { e.level = value; }); }, get: function () { return this._level || 0; } }; ACore["d" /* default */].install(TreeList); /* harmony default export */ var js_TreeList = (TreeList); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttreemenu.css var selecttreemenu = __webpack_require__(51); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/treeListToList.js /*** * * @param {Array<SelectionItem>} items * @returns {Array<SelectionItem>} */ function treeListToList(items) { var arr = []; function visit(level, node) { Object.defineProperty(node, 'level', { configurable: true, writable: true, value: level }); arr.push(node); if (node.items && node.items.length > 0) node.items.forEach(visit.bind(null, level + 1)); } items.forEach(visit.bind(null, 0)); return arr; } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTreeBox.js var SelectTreeBox_ = ACore["d" /* default */]._; var SelectTreeBox_$ = ACore["d" /* default */].$; var SelectTreeBox_$$ = ACore["d" /* default */].$$; /*** * @extends SelectListBox * @constructor */ function SelectTreeBox() { js_SelectListBox.call(this); } SelectTreeBox.tag = 'SelectTreeBox'.toLowerCase(); SelectTreeBox.render = function () { return js_SelectListBox.render().addClass('as-select-tree-box'); }; Object.assign(SelectTreeBox.prototype, js_SelectListBox.prototype); SelectTreeBox.property = Object.assign({}, js_SelectListBox.property); SelectTreeBox.eventHandler = Object.assign({}, js_SelectListBox.eventHandler); SelectTreeBox.prototype._itemsToNodeList = function (items) { return treeListToList(items); }; ACore["d" /* default */].install(SelectTreeBox); /* harmony default export */ var js_SelectTreeBox = (SelectTreeBox); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTreeMenu.js var SelectTreeMenu_ = ACore["d" /* default */]._; var SelectTreeMenu_$ = ACore["d" /* default */].$; /*** * @extends SelectMenu * @constructor */ function SelectTreeMenu() { this._items = []; this._value = null; this._lastValue = null; this.$holderItem = SelectTreeMenu_$('.absol-selectmenu-holder-item', this); this.$viewItem = SelectTreeMenu_$('.absol-selectmenu-holder-item selectlistitem', this); /*** * * @type {SelectTreeBox} */ this.$selectlistBox = SelectTreeMenu_({ tag: 'selecttreebox', props: { anchor: [1, 6, 2, 5] }, on: { preupdateposition: this.eventHandler.preUpdateListPosition } }); this.$selectlistBox.on('pressitem', this.eventHandler.selectListBoxPressItem); this.$selectlistBox.followTarget = this; this.$selectlistBox.sponsorElement = this; OOP["a" /* default */].drillProperty(this, this.$selectlistBox, 'enableSearch'); this._lastValue = "NOTHING_VALUE"; this._isFocus = false; this.isFocus = false; this.on('mousedown', this.eventHandler.click, true); } SelectTreeMenu.tag = 'SelectTreeMenu'.toLowerCase(); SelectTreeMenu.render = function () { return SelectMenu2.render().addClass('as-select-tree-menu'); }; SelectTreeMenu.eventHandler = Object.assign({}, SelectMenu2.eventHandler); SelectTreeMenu.property = Object.assign({}, SelectMenu2.property); Object.assign(SelectTreeMenu.prototype, SelectMenu2.prototype); ACore["d" /* default */].install(SelectTreeMenu); /* harmony default export */ var js_SelectTreeMenu = (SelectTreeMenu); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/widthheightresizer.css var widthheightresizer = __webpack_require__(206); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/WidthHeightSizer.js //can replace with other module var WidthHeightSizer_ = ACore["d" /* default */]._; var WidthHeightSizer_$ = ACore["d" /* default */].$; function WidthHeightResizer() { var res = WidthHeightSizer_({ extendEvent: 'sizechange', class: 'absol-width-height-resizer', child: ['.absol-width-height-resizer-content', '.absol-width-height-resizer-anchor-bot-right', '.absol-width-height-resizer-anchor-bot-left', '.absol-width-height-resizer-anchor-top-right', '.absol-width-height-resizer-anchor-top-left' ] }); res.eventHandler = OOP["a" /* default */].bindFunctions(res, WidthHeightResizer.eventHandler); res.$anchorBotRight = WidthHeightSizer_$('.absol-width-height-resizer-anchor-bot-right', res); res.$anchorTopRight = WidthHeightSizer_$('.absol-width-height-resizer-anchor-top-right', res); res.$anchorBotLeft = WidthHeightSizer_$('.absol-width-height-resizer-anchor-bot-left', res); res.$anchorTopLeft = WidthHeightSizer_$('.absol-width-height-resizer-anchor-top-left', res); res.$content = WidthHeightSizer_$('.absol-width-height-resizer-content', res); js_Draggable(res.$anchorBotRight).on('drag', res.eventHandler.dragBotRight).on('predrag', res.eventHandler.preDrag); js_Draggable(res.$anchorTopRight).on('drag', res.eventHandler.dragTopRight).on('predrag', res.eventHandler.preDrag); js_Draggable(res.$anchorBotLeft).on('drag', res.eventHandler.dragBotLeft).on('predrag', res.eventHandler.preDrag); js_Draggable(res.$anchorTopLeft).on('drag', res.eventHandler.dragTopLeft).on('predrag', res.eventHandler.preDrag); return res; } ['addChild', 'addChildBefore', 'addChildAfter', 'clearChild'].forEach(function (key) { WidthHeightResizer.prototype[key] = function () { return this.$content[key].apply(this.$content, arguments); } }); WidthHeightResizer.tag = 'WidthHeightResizer'.toLowerCase(); WidthHeightResizer.eventHandler = {}; WidthHeightResizer.eventHandler.preDrag = function (event) { this._whrWidth = parseFloat(this.getComputedStyleValue('width').replace('px', '')); this._whrHeight = parseFloat(this.getComputedStyleValue('height').replace('px', '')); }; WidthHeightResizer.eventHandler.dragBotRight = function (event) { var newEvent = { target: this, data: {} }; if (event.moveDX != 0) { this.addStyle('width', this._whrWidth + event.moveDX + 'px'); newEvent.data.changeWidth = true; } if (event.moveDY != 0) { this.addStyle('height', this._whrHeight + event.moveDY + 'px'); newEvent.data.changeHeight = true; } newEvent.data.height = this.getComputedStyleValue('height'); newEvent.data.width = this.getComputedStyleValue('width'); this.emit('sizechange', newEvent); }; WidthHeightResizer.eventHandler.dragTopRight = function (event) { var newEvent = { target: this, data: {} }; if (event.moveDX != 0) { this.addStyle('width', this._whrWidth + event.moveDX + 'px'); newEvent.data.changeWidth = true; } if (event.moveDY != 0) { this.addStyle('height', this._whrHeight - event.moveDY + 'px'); newEvent.data.changeHeight = true; } newEvent.data.height = this.getComputedStyleValue('height'); newEvent.data.width = this.getComputedStyleValue('width'); this.emit('sizechange', newEvent); }; WidthHeightResizer.eventHandler.dragBotLeft = function (event) { var newEvent = { target: this, data: {} }; if (event.moveDX != 0) { this.addStyle('width', this._whrWidth - event.moveDX + 'px'); newEvent.data.changeWidth = true; } if (event.moveDY != 0) { this.addStyle('height', this._whrHeight + event.moveDY + 'px'); newEvent.data.changeHeight = true; } newEvent.data.height = this.getComputedStyleValue('height'); newEvent.data.width = this.getComputedStyleValue('width'); this.emit('sizechange', newEvent); }; WidthHeightResizer.eventHandler.dragTopLeft = function (event) { var newEvent = { target: this, data: {} }; if (event.moveDX != 0) { this.addStyle('width', this._whrWidth - event.moveDX + 'px'); newEvent.data.changeWidth = true; } if (event.moveDY != 0) { this.addStyle('height', this._whrHeight - event.moveDY + 'px'); newEvent.data.changeHeight = true; } newEvent.data.height = this.getComputedStyleValue('height'); newEvent.data.width = this.getComputedStyleValue('width'); this.emit('sizechange', newEvent); }; ACore["d" /* default */].creator.widthheightresizer = WidthHeightResizer; /* harmony default export */ var WidthHeightSizer = (WidthHeightResizer); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/trackbar.css var trackbar = __webpack_require__(208); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TrackBar.js var TrackBar_ = ACore["d" /* default */]._; var TrackBar_$ = ACore["d" /* default */].$; /*** * @extends Hanger * @constructor */ function TrackBar() { this.$bar = TrackBar_$('.absol-trackbar', this); this.$button = TrackBar_$('.absol-trackbar-button', this); this.$line = TrackBar_$('.absol-trackbar-line', this); this.on('predrag', this.eventHandler.predrag) .on('drag', this.eventHandler.drag); this.leftValue = 0; this.rightValue = 1; this._dragValue = 0; } TrackBar.tag = 'trackbar'; TrackBar.render = function () { return TrackBar_({ tag: 'hanger', extendEvent: 'change', class: 'absol-trackbar', child: [{ class: 'absol-trackbar-line', child: '.absol-trackbar-button' }, 'attachhook'], }); }; TrackBar.prototype._updateValue = function () { var left = int_map(this.value, this.leftValue, this.rightValue, 0, 100); this.$button.addStyle('left', left + '%'); } TrackBar.eventHandler = {}; TrackBar.eventHandler.predrag = function (event) { if (event.target === this || this.readOnly) { event.cancel(); } else { event.preventDefault(); var lineBound = this.$line.getBoundingClientRect(); var newValue = this.leftValue + (this.rightValue - this.leftValue) * (event.clientX - lineBound.left) / lineBound.width; newValue = Math.max(this.leftValue, Math.min(this.rightValue, newValue)); if (newValue !== this.value) { this.value = newValue; event.trackbarValue = this.value; this._dragValue = this.value; this.emit('change', event); } } }; TrackBar.eventHandler.drag = function (event) { var lineWidth = this.$line.getBoundingClientRect().width; var d = event.currentPoint.sub(event.startingPoint); var delta = d.x / lineWidth * (this.rightValue - this.leftValue); var newValue = Math.max(this.leftValue, Math.min(this.rightValue, this._dragValue + delta)); if (newValue != this.value) { this.value = newValue; event.trackbarValue = this.value; this.emit('change', event); } }; TrackBar.property = {}; TrackBar.property.value = { set: function (value) { value = parseFloat(value + ''); if (isNaN(value)) value = 0; this._value = value; this._updateValue(); }, get: function () { return Math.max(this.leftValue, Math.min(this.rightValue, this._value)); } }; TrackBar.property.leftValue = { set: function (value) { value = parseFloat(value + ''); if (isNaN(value)) value = 0; this._leftValue = value; this._updateValue(); }, get: function () { return this._leftValue || 0; } }; TrackBar.property.rightValue = { set: function (value) { value = parseFloat(value + ''); if (isNaN(value)) value = 1; this._rightValue = value; this._updateValue(); }, get: function () { return this._rightValue || 1; } }; TrackBar.property.disabled = { get: function () { return this.hasClass('as-disabled'); }, set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } } }; TrackBar.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } }, get: function () { return this.hasClass('as-read-only'); } }; ACore["d" /* default */].install(TrackBar); /* harmony default export */ var js_TrackBar = (TrackBar); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/trackbarinput.css var trackbarinput = __webpack_require__(210); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TrackBarInput.js var TrackBarInput_ = ACore["d" /* default */]._; var TrackBarInput_$ = ACore["d" /* default */].$; /*** * * @extends {AElement} * @constructor */ function TrackBarInput() { var thisTI = this; this.$trackbar = TrackBarInput_$('trackbar', this); this.$input = TrackBarInput_$('flexiconinput', this); absol.OOP.drillProperty(this, this.$input, ['unit', 'icon']); this.$trackbar.on('change', function () { thisTI.$input.value = thisTI.value + ''; thisTI.emit('change', thisTI.value); }); this.$input.on('keyup', this.eventHandler.inputChange); this.inputTextWidth = 2; this.valueFixed = undefined; return this; } TrackBarInput.tag = 'TrackBarInput'.toLowerCase(); TrackBarInput.render = function () { return TrackBarInput_({ class: 'absol-trackbar-input', extendEvent: 'change', child: [ 'trackbar', 'flexiconinput' ] }); }; TrackBarInput.prototype.init = function (props) { props = props || {}; props.leftValue = props.leftValue || 0; props.value = props.value || props.leftValue; Object.assign(this, props); this.value = props.value; }; TrackBarInput.prototype._calInputTextWidth = function () { var l = Math.max(this.leftValue.toFixed(this.valueFixed || 0).length, this.rightValue.toFixed(this.valueFixed || 0).length, 2); if (this.valueFixed > 0) { l -= 0.8; } this.inputTextWidth = l; }; // absol.OOP.drillProperty(this, this.$trackbar, ['leftValue', 'rightValue']); TrackBarInput.property = {}; TrackBarInput.property.leftValue = { set: function (value) { this.$trackbar.leftValue = value; this._calInputTextWidth(); }, get: function () { return this.$trackbar.leftValue; } }; TrackBarInput.property.rightValue = { set: function (value) { this.$trackbar.rightValue = value; this._calInputTextWidth(); }, get: function () { return this.$trackbar.rightValue; } }; TrackBarInput.property.value = { set: function (value) { this.$trackbar.value = value || 0; this.$input.value = this.value + ''; }, get: function () { return parseFloat((this.valueFixed === undefined ? this.$trackbar.value : this.$trackbar.value.toFixed(this.valueFixed)) + ''); } }; TrackBarInput.property.valueFixed = { set: function (value) { if (value === undefined || value === null) value = undefined; this._valueFixed = value; this.$input.value = this.value + ''; this._calInputTextWidth(); }, get: function () { return this._valueFixed; } }; TrackBarInput.property.inputTextWidth = { set: function (value) { if (typeof value == 'number') { this._inputTextWidth = value; this.addStyle('--input-width', 3 + (value - 2) * 0.42 + 0.3 + 'em'); } else { this._inputTextWidth = value; this.addStyle('--input-width', value); } }, get: function () { return this._inputTextWidth; } }; TrackBarInput.property.disabled = { get: function () { return this.hasClass('as-disabled'); }, set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } this.$input.disabled = !!value; this.$trackbar.disabled = !!value; } }; TrackBarInput.property.readOnly = { set: function (value){ value = !!value; if (value){ this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } this.$input.readOnly = value; this.$trackbar.readOnly = value; }, get: function (){ return this.hasClass('as-read-only'); } } TrackBarInput.eventHandler = {}; TrackBarInput.eventHandler.inputChange = function (event) { var newValue = parseFloat(this.$input.value); if (!isNaN(newValue)) { newValue = Math.max(this.leftValue, Math.min(this.rightValue, newValue)); this.$trackbar.value = newValue; this.emit('change', this.value); } }; /* harmony default export */ var js_TrackBarInput = (TrackBarInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/buttonrange.css var buttonrange = __webpack_require__(212); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ButtonRange.js var ButtonRange_ = ACore["d" /* default */]._; var ButtonRange_$ = ACore["d" /* default */].$; var ChevronLeft = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 410.258 410.258" style="enable-background:new 0 0 410.258 410.258;" xml:space="preserve">\n' + '<polygon points="298.052,24 266.052,0 112.206,205.129 266.052,410.258 298.052,386.258 162.206,205.129 "/>\n' + '</svg>'; var ChevronRight = '<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\n' + '\t viewBox="0 0 410.258 410.258" style="enable-background:new 0 0 410.258 410.258;" xml:space="preserve">\n' + '<polygon points="144.206,0 112.206,24 248.052,205.129 112.206,386.258 144.206,410.258 298.052,205.129 "/>\n' + '</svg>' /*** * @extends AElement * @constructor */ function ButtonRange() { this._dict = {}; this._pool = []; this._items = []; this.$lastActiveBtn = null; this._value = undefined; this._lastValue = this._value; this.$scroller = ButtonRange_$('.as-button-range-scroller', this) .on('wheel', this.eventHandler.wheel); this.$prevBtn = ButtonRange_$('.as-button-range-left-btn', this) .on('click', this.prevValue.bind(this)); this.$nextBtn = ButtonRange_$('.as-button-range-right-btn', this) .on('click', this.nextValue.bind(this)); this._scrollTimeout = -1; this._scrollToSelected = this._scrollToSelected.bind(this); this.$attachhook = ButtonRange_$('attachhook', this).on('error', this.eventHandler.attached); this.autoWidth = false; } ButtonRange.tag = 'buttonrange'; ButtonRange.render = function () { return ButtonRange_({ extendEvent: ['change'], class: 'as-button-range', child: [ { class: 'as-button-range-scroller', }, { class: 'as-button-range-left-ctn', child: { tag: 'button', class: 'as-button-range-left-btn', child: ChevronLeft } }, { class: 'as-button-range-right-ctn', child: { tag: 'button', class: 'as-button-range-right-btn', child: ChevronRight } }, 'attachhook' ] }); }; ButtonRange.prototype._updateUnderlinePosition = function () { if (!this.$lastActiveBtn) return; var scrollerFirstBound = this.$scroller.firstChild.getBoundingClientRect(); if (scrollerFirstBound.width === 0) return; var activeBound = this.$lastActiveBtn.getBoundingClientRect(); this.addStyle({ '--underline-left': activeBound.left - scrollerFirstBound.left + 'px', '--underline-width': activeBound.width + 'px' }); }; ButtonRange.prototype.updateSize = function () { if (this.autoWidth) { if (this.$scroller.childNodes.length > 0) { var left = this.$scroller.firstChild.getBoundingClientRect().left; var right = this.$scroller.lastChild.getBoundingClientRect().right; if (left < right) { var fontSize = this.getFontSize() || 14; this.addStyle('width', (right - left + 2) / fontSize + 2 + 'em') } } } this._updateUnderlinePosition(); this._scrollToSelected(); }; ButtonRange.prototype._newButton = function () { var button = ButtonRange_({ tag: 'button', class: 'as-button-range-item', child: { text: 'null' } }); button.on('click', this.eventHandler.clickItem.bind(this, button)); return button; }; ButtonRange.prototype._requestButton = function (items) { var button; if (this._pool.length > 0) { button = this._pool.pop(); } else { button = this._newButton(); } return button; }; ButtonRange.prototype._assignButton = function (button, data) { button._data = data; button.childNodes[0].data = data.text; }; ButtonRange.prototype._releaseButton = function (button) { this._pool.push(button); }; ButtonRange.prototype._requireButton = function (n) { var child; while (this.$scroller.childNodes.length > n) { child = this.$scroller.lastChild; this._releaseButton(child); this.$scroller.removeChild(child); } while (this.$scroller.childNodes.length < n) { this.$scroller.addChild(this._requestButton()); } }; ButtonRange.prototype._assignButtonList = function (items) { var item; for (var i = 0; i < items.length; ++i) { item = this._getFullFormat(items[i]); this._assignButton(this.$scroller.childNodes[i], item); this._dict[item.ident] = { elt: this.$scroller.childNodes[i], data: item } } }; ButtonRange.prototype._scrollToSelected = function () { if (this._scrollTimeout >= 0) return; if (!this.$lastActiveBtn) return; var scrollerBound = this.$scroller.getBoundingClientRect(); if (scrollerBound.width === 0) return; var activeBound = this.$lastActiveBtn.getBoundingClientRect(); var dx, speed; if (activeBound.left < scrollerBound.left - 1) { dx = activeBound.left - scrollerBound.left; if (dx < -500) dx = -500; speed = Math.sqrt(-dx * 2 + 4); this.$scroller.scrollLeft -= speed; } else if (activeBound.right - 1 > scrollerBound.right) { dx = activeBound.right - scrollerBound.right; if (dx > 500) dx = 500; speed = Math.sqrt(dx * 2 + 4); this.$scroller.scrollLeft += speed; } else { return; } var thisBR = this; this._scrollTimeout = setTimeout(function () { thisBR._scrollTimeout = -1; thisBR._scrollToSelected(); }, 20); }; ButtonRange.prototype.nextValue = function (userAction) { var currentIndex = this._findActiveIndex(); var nextIndex; var nextValue; if (currentIndex < 0) { nextIndex = 0; } else { nextIndex = Math.min(this._items.length - 1, currentIndex + 1); } if (nextIndex >= 0) { nextValue = this._getFullFormat(this._items[nextIndex]).value; this.value = nextValue; if (userAction) this.notifyChange(); } }; ButtonRange.prototype.prevValue = function (userAction) { var currentIndex = this._findActiveIndex(); var prevIndex; var prevValue; if (currentIndex < 0) { prevIndex = 0; } else { prevIndex = Math.max(0, currentIndex - 1); } if (prevIndex >= 0 && prevIndex < this._items.length && prevIndex != currentIndex) { prevValue = this._getFullFormat(this._items[prevIndex]).value; this.value = prevValue; if (userAction) this.notifyChange(); } }; ButtonRange.prototype._findActiveIndex = function () { var item; var value = this._value; for (var i = 0; i < this._items.length; ++i) { item = this._items[i]; if (item === value || (item && item.value === value)) return i; } return -1; } ButtonRange.prototype._getFullFormat = function (item) { var res = {}; if ((typeof item == 'string') || (typeof item == 'number') || (typeof item == 'boolean') || (item === null) || (item === undefined)) { res.ident = item + ''; res.value = item; res.text = item + ''; } else if (item && (typeof item == 'object')) { res.value = item.value; res.ident = res.value + ''; res.text = item.text; } return res; }; ButtonRange.prototype.notifyChange = function () { this.emit('change', { target: this, value: this.value, type: 'change' }, this); } ButtonRange.property = {}; /** * @type {ButtonRange} */ ButtonRange.property.items = { set: function (items) { items = items || []; this._items = items; this._requireButton(items.length); this._assignButtonList(items); if (items.length > 0) { if (!this._dict[this._value + '']) { this._value = this._getFullFormat(items[0]).value; } } this.value = this._value; this.updateSize(); }, get: function () { return this._items; } }; ButtonRange.property.value = { set: function (value) { this._value = value; this._lastValue = this._value; if (this.$lastActiveBtn) { this.$lastActiveBtn.removeClass('as-active'); this.$lastActiveBtn = null; } var hodler = this._dict[value + '']; if (hodler) { hodler.elt.addClass('as-active'); this.$lastActiveBtn = hodler.elt; } var activeIndex = this._findActiveIndex(); this.$prevBtn.disabled = activeIndex === 0; this.$nextBtn.disabled = activeIndex === this._items.length - 1; this._updateUnderlinePosition(); this._scrollToSelected(); }, get: function () { return this._value; } }; ButtonRange.eventHandler = {}; ButtonRange.eventHandler.clickItem = function (item, event) { if (this._lastValue != item._data.value) { this.value = item._data.value; this.notifyChange(); } }; ButtonRange.eventHandler.attached = function () { if (this.style.width === 'auto') this.autoWidth = true; Dom["b" /* default */].addToResizeSystem(this.$attachHook); this.updateSize(); }; ButtonRange.eventHandler.wheel = function (event) { var prevLeft = this.$scroller.scrollLeft; if (event.deltaY < 0) { this.$scroller.scrollLeft -= 100; } else if (event.deltaY > 0) { this.$scroller.scrollLeft += 100; } if (prevLeft !== this.$scroller.scrollLeft) event.preventDefault(); }; ACore["d" /* default */].install(ButtonRange); /* harmony default export */ var js_ButtonRange = (ButtonRange); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/dropzone.css var dropzone = __webpack_require__(214); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DropZone.js var DropZone_ = ACore["d" /* default */]._; var DropZone_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function DropZone() { this.defineEvent(['fileenter', 'fileleave', 'filedrop']); this.addClass('as-drop-zone'); this.on('dragover', this.eventHandler.dragZoneFileOver) .on('drop', this.eventHandler.dropZoneFileDrop); this._fileOverTimeout = -1; } DropZone.tag = 'dropzone'; DropZone.render = function () { return DropZone_('div'); }; DropZone.eventHandler = {}; DropZone.eventHandler.dragZoneFileOver = function (event) { event.preventDefault(); if (this._fileOverTimeout > 0) { clearTimeout(this._fileOverTimeout); } else { this.addClass('as-drag-over'); this.emit('fileenter', event, this); } this._fileOverTimeout = setTimeout(this.eventHandler.dragZoneFileOverEnd, 200); }; /*** * * @param {DragEvent} event */ DropZone.eventHandler.dropZoneFileDrop = function (event) { if (this._fileOverTimeout > 0) { clearTimeout(this._fileOverTimeout); this._fileOverTimeout = -1; } event.preventDefault(); this.removeClass('as-drag-over'); event._files = null; if (!event.hasOwnProperty('files')) Object.defineProperty(event, 'files', { get: function () { if (this._files) return this._files; var files = []; var file; if (event.dataTransfer.items) { for (var i = 0; i < event.dataTransfer.items.length; i++) { if (event.dataTransfer.items[i].kind === 'file') { file = event.dataTransfer.items[i].getAsFile(); files.push(file); } } } else { // Use DataTransfer interface to access the file(s) for (var i = 0; i < event.dataTransfer.files.length; i++) { files.push(event.dataTransfer.files[i]); } } this._files = files; return this._files; } }); this.emit('filedrop', event, this); }; DropZone.eventHandler.dragZoneFileOverEnd = function () { this._fileOverTimeout = -1; this.removeClass('as-drag-over'); this.emit('fileleave', {type: 'fileleave'}, this); }; ACore["d" /* default */].install(DropZone); /* harmony default export */ var js_DropZone = (DropZone); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/radioinput.css var radioinput = __webpack_require__(216); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/RadioInput.js //new tech, not working version var RadioInput_ = ACore["d" /* default */]._; var RadioInput_$ = ACore["d" /* default */].$; /*** * @extends Element * @constructor */ function RadioInput() { this.$input = RadioInput_$('input', this) .on('change', this.notifyChange.bind(this)); this.checked = false; this.disabled = false; this.on('click', this.eventHandler.click); this.onchange = null; } RadioInput.tag = "RadioInput".toLowerCase(); RadioInput.render = function (data) { return RadioInput_({ tag: 'label', extendEvent: 'change', class: 'as-radio-input', child: [ { elt: data && data.$input, tag: 'input', class: 'as-radio-input-value', attr: { type: 'radio' } }, { class: ['as-radio-input-check-mark'] } ] } ) }; /*** * as normal, change event will be fired when radio change by system */ RadioInput.prototype.notifyChange = function () { var event = { checked: this.checked }; this.emit('change', event, this); }; RadioInput.prototype._updateCheckedClass = function () { if (this.checked) { this.addClass('as-checked'); } else { this.removeClass('as-checked'); } }; RadioInput.property = {}; RadioInput.property.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } this.$input.disabled = !!value; }, get: function () { this.$input.disabled; } }; /*** * * @type {RadioInput} */ RadioInput.property.checked = { set: function (value) { this.$input.checked = !!value; this._updateCheckedClass(); }, get: function () { return this.$input.checked; } } RadioInput.attribute = { checked: { set: function (value) { if (value === 'false' || value === null) { this.checked = false; } else { this.checked = true; } }, get: function () { return this.checked ? 'true' : 'false' }, remove: function () { this.checked = false; } }, disabled: { set: function (value) { if (value === 'false' || value === null) { this.disabled = false; } else { this.disabled = true; } }, get: function () { return this.disabled ? 'true' : 'false' }, remove: function () { this.disabled = false; } } }; /*** * * @type {RadioInput} */ RadioInput.eventHandler = {}; RadioInput.eventHandler.click = function () { this._updateCheckedClass(); }; ACore["d" /* default */].install(RadioInput); RadioInput.autoReplace = function () { var placeHolders = Array.prototype.slice.call(document.getElementsByTagName(this.tag)); var ph; var attOfPH; var attrs; var style; var classList; var attNode; var attrName, attrValue; var props; for (var i = 0; i < placeHolders.length; ++i) { ph = placeHolders[i]; attOfPH = ph.attributes; classList = []; style = {}; attrs = {}; props = {}; for (var j = 0; j < attOfPH.length; ++j) { attNode = attOfPH[j]; attrName = attNode.nodeName; attrValue = attNode.nodeValue; if (attrName == 'style') { attrValue.trim().split(';').reduce(function (style, prop) { var p = prop.split(':'); if (p.length == 2) { style[p[0].trim()] = p[1].trim(); } return style; }, style); } else if (attrName == 'class') { classList = attrValue.trim().split(/\s+/); } else if (attrName == 'onchange') { props.onchange = new Function('event', 'sender', attrValue); } else { attrs[attrName] = attrValue; } } var newElt = RadioInput_({ tag: this.tag, attr: attrs, class: classList, style: style, props: props }); RadioInput_$(ph).selfReplace(newElt); } }; RadioInput.initAfterLoad = function (){ Dom["b" /* default */].documentReady.then(function (){ RadioInput.autoReplace(); }) }; /* harmony default export */ var js_RadioInput = (RadioInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/onscreenwidget.css var onscreenwidget = __webpack_require__(218); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/OnScreenWidget.js var OnScreenWidget_ = ACore["d" /* default */]._; var OnScreenWidget_$ = ACore["d" /* default */].$; var OnScreenWidget_$$ = ACore["d" /* default */].$$; /*** * @extends Hanger * @constructor */ function OnScreenWidget() { this.id = 'unset-id-' + randomIdent(); this.on({ dragstart: this.eventHandler.widgetStartDrag, drag: this.eventHandler.widgetDrag, dragend: this.eventHandler.widgetDragEnd }); this.addEventListener('click', function (event) { if (!this._preventClick) this.emit('click', event, this); }); this.$attachhook = OnScreenWidget_('attachhook').addTo(this); this.$attachhook.on('attached', this.eventHandler.attached); this.config = null; } OnScreenWidget.tag = 'OnScreenWidget'.toLowerCase(); OnScreenWidget.render = function () { return OnScreenWidget_({ tag: 'hanger', extendEvent: 'click', class: ['as-onscreen-widget', 'as-size-loading'], props: { hangOn: 3 } }); }; OnScreenWidget.prototype.configPrefix = 'on-screen-widget-'; OnScreenWidget.prototype._genConfig = function () { this._widgetBound = this.getBoundingClientRect(); var screenSize = Object(Dom["d" /* getScreenSize */])(); return { cx: (this._widgetBound.left + this._widgetBound.width / 2) * 100 / screenSize.width, cy: (this._widgetBound.top + this._widgetBound.height / 2) * 100 / screenSize.height }; }; OnScreenWidget.prototype._saveConfig = function () { var id = this.id || ''; if (id.startsWith('unset-id-') || !this.config) return; localStorage.setItem(this.configPrefix + id, JSON.stringify(this.config)); }; OnScreenWidget.prototype._loadConfig = function () { var id = this.id || ''; if (id.startsWith('unset-id-')) return; var config = null; try { config = JSON.parse(localStorage.getItem(this.configPrefix + id)); if ((typeof config !== "object") || (typeof config.cx !== "number") || (typeof config.cy !== 'number')) { config = this.config || this._genConfig(); } } catch (error) { config = this.config || this._genConfig(); } var cx = config.cx || 0; var cy = config.cy || 0; this.addStyle({ '--cx': cx / 100, '--cy': cy / 100 }); this.config = config; }; OnScreenWidget.prototype._updateCSSSize = function () { var bound = this.getBoundingClientRect(); this.addStyle({ '--client-height': bound.height + 'px', '--client-width': bound.width + 'px' }); this.removeClass('as-size-loading'); }; /*** * * @type {OnScreenWidget|{}} */ OnScreenWidget.eventHandler = {}; OnScreenWidget.eventHandler.attached = function () { var images = OnScreenWidget_$$('img', this); var syncs = images.map(function (img) { if (img.classList.contains('absol-attachhook')) return Promise.resolve(); return Object(Dom["h" /* waitImageLoaded */])(img, 100); }); var thisW = this; Promise.all(syncs).then(function () { thisW._updateCSSSize(); thisW._loadConfig(); }); }; OnScreenWidget.eventHandler.widgetStartDrag = function (event) { this._widgetBound = this.getBoundingClientRect(); this._preventClick = true; }; OnScreenWidget.eventHandler.widgetDrag = function (event) { event.preventDefault(); var screenSize = Object(Dom["d" /* getScreenSize */])(); var p0 = new Math_Vec2(this._widgetBound.left, this._widgetBound.top); var dv = event.currentPoint.sub(event.startingPoint); var p1 = p0.add(dv); var cx = (p1.x - 2) * 100 / (screenSize.width - this._widgetBound.width - 4); var cy = (p1.y - 2) * 100 / (screenSize.height - this._widgetBound.height - 4); cx = Math.max(0, Math.min(100, cx)); cy = Math.max(0, Math.min(100, cy)); this.addStyle({ '--cx': cx / 100, '--cy': cy / 100 }); if (this.config) { this.config.cx = cx; this.config.cy = cy; } }; OnScreenWidget.eventHandler.widgetDragEnd = function () { var thisWG = this; setTimeout(function () { thisWG._preventClick = false; }, 100); this._saveConfig(); }; ACore["d" /* default */].install(OnScreenWidget); /* harmony default export */ var js_OnScreenWidget = (OnScreenWidget); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/ribbonsplitbutton.css var ribbonsplitbutton = __webpack_require__(220); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/RibbonSplitButton.js var RibbonSplitButton_ = ACore["d" /* default */]._; var RibbonSplitButton_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function RibbonSplitButton() { this.$icon = null; this._icon = null; this.$text = RibbonSplitButton_$('.as-ribbon-split-button-text', this); this.$primaryBtn = RibbonSplitButton_$('.as-ribbon-split-button-primary', this) .on('click', this.eventHandler.clickPrimaryBtn); this.$extendBtn = RibbonSplitButton_$('.as-ribbon-split-button-extend', this); this.$extendText = RibbonSplitButton_$('.as-ribbon-split-button-text', this.$extendBtn); this._menuHolder = null; } RibbonSplitButton.tag = 'RibbonSplitButton'.toLowerCase(); RibbonSplitButton.render = function () { return RibbonSplitButton_({ extendEvent: ['press', 'select'], attr: { 'tabindex': '0' }, class: ['as-ribbon-split-button', 'as-no-dropdown'], child: { class: 'as-ribbon-split-button-content', child: [ { tag: 'button', attr: { 'tabindex': '-1' }, class: 'as-ribbon-split-button-primary', child: { tag: 'span', class: 'as-ribbon-split-button-text' } }, { tag: 'button', attr: { 'tabindex': '-1' }, class: 'as-ribbon-split-button-extend', child: ['span.as-ribbon-split-button-text', 'span.mdi.mdi-chevron-down'] } ] } }); }; RibbonSplitButton.property = {}; RibbonSplitButton.property.items = { set: function (items) { var thisB = this; this._items = items || []; if (this._items && this._items.length > 0) { if (!this._menuHolder) { this.removeClass('as-no-dropdown'); this._menuHolder = js_QuickMenu.toggleWhenClick(this.$extendBtn || this, { getMenuProps: function () { return { extendStyle: { 'min-width': thisB.getBoundingClientRect().width + 'px' }, items: thisB._items } }, getFlowedElement: function () { return thisB; }, anchor: [1, 2, 6, 5], onSelect: function (item) { thisB.emit('select', { item: cleanMenuItemProperty(item), type: 'select', target: thisB }); } }); } } else { if (this._menuHolder) { this.addClass('as-no-dropdown'); this._menuHolder.remove(); this._menuHolder = null; } } }, get: function () { return this._items; } }; RibbonSplitButton.property.text = { set: function (value) { value = value || ''; this.$text.attr('data-text', value); if (this.$extendText) this.$extendText.attr('data-text', value); }, get: function () { return this.$text.attr('data-text') | ''; } }; RibbonSplitButton.property.icon = { set: function (icon) { icon = icon || null; this._icon = icon; if (this.$icon) this.$primaryBtn.removeChild(this.$icon); if (icon) { this.$icon = RibbonSplitButton_(icon); this.$primaryBtn.addChildBefore(this.$icon, this.$text); if (this.$icon.addClass) this.$icon.addClass('as-ribbon-split-button-icon'); } else { this.$icon = null; } }, get: function () { return this._icon; } }; RibbonSplitButton.eventHandler = {}; RibbonSplitButton.eventHandler.clickPrimaryBtn = function () { this.emit('press', { type: 'press', target: this, item: cleanMenuItemProperty(this) }) } ACore["d" /* default */].install(RibbonSplitButton); /* harmony default export */ var js_RibbonSplitButton = (RibbonSplitButton); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/ribbonbutton.css var ribbonbutton = __webpack_require__(222); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/RibbonButton.js var RibbonButton_ = ACore["d" /* default */]._; var RibbonButton_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function RibbonButton() { this.$icon = null; this._icon = null; this.$text = RibbonButton_$('.as-ribbon-button-text', this); this.$textNode = this.$text.firstChild; this._menuHolder = null; } RibbonButton.tag = 'RibbonButton'.toLowerCase(); RibbonButton.render = function () { return RibbonButton_({ tag: 'button', extendEvent: ['select'], attr: { 'tabindex': '0' }, class: ['as-ribbon-button', 'as-no-dropdown'], child: [ { tag: 'span', class: 'as-ribbon-button-text', child: { text: '' } }, 'span.mdi.mdi-chevron-down' ] }); }; RibbonButton.property = Object.assign({}, js_RibbonSplitButton.property); RibbonButton.property.icon = { set: function (icon) { icon = icon || null; this._icon = icon; if (this.$icon) this.removeChild(this.$icon); if (icon) { this.$icon = RibbonButton_(icon); this.addChildBefore(this.$icon, this.$text); if (this.$icon.addClass) this.$icon.addClass('as-ribbon-button-icon'); } else { this.$icon = null; } }, get: function () { return this._icon; } }; RibbonButton.eventHandler = {}; ACore["d" /* default */].install(RibbonButton); /* harmony default export */ var js_RibbonButton = (RibbonButton); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/timeselectinput.css var timeselectinput = __webpack_require__(224); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimeSelectInput.js var TimeSelectInput_ = ACore["d" /* default */]._; var TimeSelectInput_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function TimeSelectInput() { /*** * * @type {SelectListBox} */ this.$selectlistBox = TimeSelectInput_({ tag: 'selectlistbox', props: { anchor: [1, 6, 2, 5] }, on: { preupdateposition: this.eventHandler.preUpdateListPosition } }); this.$text = TimeSelectInput_$('.as-time-select-input-text', this) .on('change', this.eventHandler.textChange) .on('keyup', this.eventHandler.textKeyUp) .on('keydown', this.eventHandler.textKeyDown); this.$toggleBtn = TimeSelectInput_$('absol-selectmenu-btn', this); this.$selectlistBox.on('pressitem', this.eventHandler.selectListBoxPressItem); this.$selectlistBox.followTarget = this; this.$selectlistBox.sponsorElement = this; this._makeTimeList(0, MILLIS_PER_DAY, MILLIS_PER_MINUTE * 15); this._hour = 0; this._minute = 0; this._lastDayOffset = 0; this.dayOffset = 0; this.on('click', this.eventHandler.click); } TimeSelectInput.tag = 'TimeSelectInput'.toLowerCase(); TimeSelectInput.render = function () { return TimeSelectInput_({ class: 'as-time-select-input', extendEvent: 'change', attr: { tabindex: 0 }, child: [ { tag: 'input', class: 'as-time-select-input-text', attr: { type: 'text' } }, { tag: 'button', class: 'absol-selectmenu-btn', child: ['dropdown-ico'] } ] }); }; TimeSelectInput.prototype._makeTimeList = function (start, end, step) { var items = []; for (var t = 0; t < end; t += step) { items.push({ text: this._mil2Text(t), value: t }); } this.$selectlistBox.items = items; this.addStyle('--list-min-width', this.$selectlistBox._estimateWidth/14 + 'em'); }; TimeSelectInput.prototype.textRegx = /^((1[0-2])|[1-9]):([0-5][0-9]) (AM|PM)$/; TimeSelectInput.prototype._mil2Text = function (mil) { if (mil < 0) { mil = mil + Math.ceil(-mil / MILLIS_PER_DAY) * MILLIS_PER_DAY; } var min = Math.floor(mil / (MILLIS_PER_MINUTE)); var hour = Math.floor(min / 60) % 24; min = min % 60; return (hour % 12 == 0 ? 12 : (hour % 12)) + ':' + (min < 10 ? '0' : '') + min + ' ' + (hour < 12 ? 'AM' : 'PM'); }; /*** * * @param {string} s * @private */ TimeSelectInput.prototype._text2mil = function (s) { s = s.toLowerCase(); var nums = s.match(/[0-9]+/g) || [0, 0]; while (nums.length < 2) { nums.push(0); } var h = positiveIntMod(parseInt(nums[0]), 24); var m = positiveIntMod(parseInt(nums[1]), 60); var pm = s.indexOf('pm') > 0 || h > 12; if (pm) { if (h < 12) h += 12; } else { if (h == 12) h = 0; } return h * MILLIS_PER_HOUR + m * MILLIS_PER_MINUTE; }; TimeSelectInput.prototype.isActive = function () { return document.activeElement == this || AElement["a" /* default */].prototype.isDescendantOf.call(document.activeElement, this) || AElement["a" /* default */].prototype.isDescendantOf.call(document.activeElement, this.$selectlistBox); }; TimeSelectInput.prototype._updateValueText = function () { this.$text.value = this._mil2Text(this.dayOffset); }; TimeSelectInput.prototype.notifyCanBeChange = function () { var dayOffset = this.dayOffset; if (this._lastDayOffset !== dayOffset) { this.emit('change', { type: 'change', lastDayOffset: this._lastDayOffset, dayOffset: dayOffset, target: this }, this); this._lastDayOffset = dayOffset; } }; TimeSelectInput.property = {}; TimeSelectInput.property.isFocus = { get: function () { return this.hasClass('as-focus'); }, set: function (value) { value = !!value; if (value && (this.disabled || this.readOnly)) return; if (this.isFocus == value) return; if (value) { this.addClass('as-focus'); } else { this.removeClass('as-focus'); } var thisI = this; if (value) { document.body.appendChild(this.$selectlistBox); this.$selectlistBox.domSignal.$attachhook.emit('attached'); var bound = this.getBoundingClientRect(); this.$selectlistBox.addStyle('min-width', bound.width + 'px'); this.$selectlistBox.refollow(); this.$selectlistBox.updatePosition(); setTimeout(function () { if (thisI.enableSearch) { thisI.$selectlistBox.$searchInput.focus(); } TimeSelectInput_$(document.body).on('click', thisI.eventHandler.bodyClick); }, 1); this.$selectlistBox.viewListAtFirstSelected(); } else { TimeSelectInput_$(document.body).off('click', thisI.eventHandler.bodyClick); this.$selectlistBox.selfRemove(); this.$selectlistBox.unfollow(); this.$selectlistBox.resetSearchState(); } } }; TimeSelectInput.property.hour = { set: function (value) { this._hour = positiveIntMod(value, 24); this._lastDayOffset = this.dayOffset; this._updateValueText(); }, get: function () { return this._hour; } }; TimeSelectInput.property.minute = { set: function (value) { this._minute = positiveIntMod(value, 60); this._lastDayOffset = this.dayOffset; this._updateValueText(); }, get: function () { return this._minute; } }; TimeSelectInput.property.dayOffset = js_TimeInput.property.dayOffset; TimeSelectInput.property.disabled = { set: function (value) { this.$text.disabled = !!value; if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } } , get: function () { return this.hasClass('as-disabled'); } }; /*** * * @type {{}|TimeSelectInput} */ TimeSelectInput.eventHandler = {}; TimeSelectInput.eventHandler.selectListBoxPressItem = function (event) { var lastValue = this._lastDayOffset; var value = event.value; var text = this._mil2Text(value); this.dayOffset = value; this.$selectlistBox.values = [value]; this.focus(); setTimeout(function () { this.isFocus = false; }.bind(this), 100); this._lastDayOffset = lastValue;// restore last value after set dayOffset this.notifyCanBeChange(); }; TimeSelectInput.eventHandler.preUpdateListPosition = function () { var bound = this.getBoundingClientRect(); var screenSize = Object(Dom["d" /* getScreenSize */])(); var availableTop = bound.top - 5; var availableBot = screenSize.height - 5 - bound.bottom; this.$selectlistBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px'); var outBound = Object(Dom["g" /* traceOutBoundingClientRect */])(this); if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) { this.isFocus = false; } }; TimeSelectInput.eventHandler.textChange = function () { setTimeout(function () { if (!this.textRegx.test(this.$text.value)) { this.$text.value = this._mil2Text(this.dayOffset); } }.bind(this), 10); }; /*** * * @param {KeyboardEvent} event */ TimeSelectInput.eventHandler.textKeyDown = function (event) { if (event.key == 'Enter') { this.isFocus = false; this.$text.blur(); this.notifyCanBeChange(); } }; TimeSelectInput.eventHandler.textKeyUp = function (event) { var s = this.$text.value; var mil = this._text2mil(s); this._hour = Math.floor(mil / MILLIS_PER_HOUR); this._minute = Math.floor(mil / MILLIS_PER_MINUTE) % 60; this.$selectlistBox.values = [mil]; this.$selectlistBox.viewListAtFirstSelected(); }; TimeSelectInput.eventHandler.click = function (event) { if (!EventEmitter["b" /* default */].hitElement(this.$text, event)) { this.isFocus = !this.isFocus; setTimeout(function () { if (this.isFocus && this.$text != document.activeElement) { this.$text.select(); } }.bind(this), 1) } else { if (!this.isFocus) this.isFocus = true; } }; TimeSelectInput.eventHandler.bodyClick = function (event) { if (EventEmitter["b" /* default */].hitElement(this, event) || EventEmitter["b" /* default */].hitElement(this.$selectlistBox, event)) return; this.isFocus = false; }; ACore["d" /* default */].install(TimeSelectInput); /* harmony default export */ var js_TimeSelectInput = (TimeSelectInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/snackbar.css var snackbar = __webpack_require__(226); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Snackbar.js var Snackbar_ = ACore["d" /* default */]._; var Snackbar_$ = ACore["d" /* default */].$; var Snackbar_t = document.createElement; /*** * @extends AElement * @constructor */ function SnackBar() { // OOP.drillProperty(this, this.firstChild, 'message', 'data'); /*** * * @type {*} */ this._message = null; this.message = null; } SnackBar.tag = 'SnackBar'.toLowerCase(); SnackBar.render = function () { return Snackbar_({ class: 'as-snackbar' }) }; SnackBar.property = {}; SnackBar.property.message = { set: function (value) { this._message = value; if (value instanceof Array) { this.clearChild(); this.addChild(value.map(function (item) { return Snackbar_(item); })); } else if (typeof value === 'string') { this.innerHTML = value; } else if (Object(Dom["f" /* isDomNode */])(value)) { this.clearChild() .addChild(value); } else if (value && typeof value === 'object' && (value.text || value.props || value.tag || value.attr || value.style || value.child || (value.child && value.child instanceof Array))) { this.clearChild() .addChild(Snackbar_(value)); } else { this.clearChild(); this._message = null; } }, get: function () { return this._message; } } ACore["d" /* default */].install(SnackBar); SnackBar.$instance = Snackbar_('snackbar'); SnackBar._removeTimeout = -1; SnackBar.show = function (message) { if (SnackBar._removeTimeout > 0) { clearTimeout(SnackBar._removeTimeout); } if (!SnackBar.$instance.parentElement) document.body.appendChild(SnackBar.$instance); SnackBar.$instance.removeClass('as-hiding'); SnackBar._removeTimeout = setTimeout(function () { SnackBar.$instance.addClass('as-show'); SnackBar.$instance.message = message; SnackBar._removeTimeout = setTimeout(function () { SnackBar.$instance.removeClass('as-show').addClass('as-hiding'); SnackBar._removeTimeout = setTimeout(function () { SnackBar.$instance.remove(); SnackBar._removeTimeout = -1; SnackBar.$instance.removeClass('as-hiding'); }, 500); }, 3000); }, 1); } /* harmony default export */ var Snackbar = (SnackBar); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/multiselectmenu.css var multiselectmenu = __webpack_require__(228); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiSelectMenu.js var MultiSelectMenu_ = ACore["d" /* default */]._; var MultiSelectMenu_$ = ACore["d" /* default */].$; /*** * @augments SelectBox * @augments PositionTracker * @constructor */ function MultiSelectMenu() { this.on('click', this.eventHandler.click); /*** * * @type {SelectListBox} */ this.$selectlistBox = MultiSelectMenu_({ tag: 'selectlistbox', props: { anchor: [1, 6, 2, 5], displayValue: VALUE_HIDDEN }, on: { preupdateposition: this.eventHandler.preUpdateListPosition, pressitem: this.eventHandler.selectListBoxPressItem } }); this.$itemCtn = MultiSelectMenu_$('.as-multi-select-menu-item-ctn', this); this.$attachhook = MultiSelectMenu_$('attachhook', this) .on('attached', this.eventHandler.attached); OOP["a" /* default */].drillProperty(this, this.$selectlistBox, 'enableSearch'); this.$items = []; this._values = []; this.items = []; this.values = []; this.$selectlistBox.followTarget = this; this.$selectlistBox.sponsorElement = this; this.disableClickToFocus = false; this.orderly = true; this.itemFocusable = false; this._activeValue = undefined; this.strictValue = true; } MultiSelectMenu.tag = 'MultiSelectMenu'.toLowerCase(); MultiSelectMenu.render = function () { return MultiSelectMenu_({ class: ['as-multi-select-menu'], extendEvent: ['change', 'add', 'remove', 'activevaluechange'], attr: { tabindex: '1' }, child: [ { class: ['as-multi-select-menu-item-ctn', 'as-bscroller'] }, { tag: 'button', class: 'as-multi-select-menu-toggle-btn', child: 'dropdown-ico' }, 'attachhook' ] }); }; MultiSelectMenu.prototype._requireItem = function (n) { var itemElt; while (this.$items.length < n) { itemElt = SelectBox_requireItem(this); this.$itemCtn.addChild(itemElt); this.$items.push(itemElt); } while (this.$items.length > n) { itemElt = this.$items.pop(); this.$itemCtn.removeChild(itemElt); SelectBox_releaseItem(itemElt); } }; MultiSelectMenu.prototype._assignItems = function (items) { for (var i = 0; i < this.$items.length && i < items.length; ++i) { this.$items[i].data = items[i]; } }; /*** * * @param {string[] | number[]} values * @private */ MultiSelectMenu.prototype._getItemsByValues = function (values) { var selectListBoxElt = this.$selectlistBox; var itemHolders = values.reduce(function (ac, cr) { ac.push.apply(ac, selectListBoxElt.findItemsByValue(cr)); return ac; }, []); if (this.orderly) { if (typeof this.orderly === 'function') { itemHolders.sort(this.orderly); } else { itemHolders.sort(function (a, b) { return a.idx - b.idx; }); } } return itemHolders.map(function (holder) { return holder.item; }) }; MultiSelectMenu.prototype._updateItems = function () { this.viewItemsByValues(this._values); }; MultiSelectMenu.prototype.viewItemsByValues = function (values) { var cBound = this.getBoundingClientRect(); var items = this._getItemsByValues(values); this._requireItem(items.length); this._assignItems(items); if (this.itemFocusable) { this._updateFocusItem(); } var nBound = this.getBoundingClientRect(); if (nBound.width != cBound.width || nBound.height != cBound.height) { ResizeSystem["a" /* default */].updateUp(this); } }; MultiSelectMenu.property = {}; MultiSelectMenu.property.disabled = SelectMenu2.property.disabled; MultiSelectMenu.property.hidden = SelectMenu2.property.hidden; MultiSelectMenu.property.isFocus = SelectMenu2.property.isFocus; MultiSelectMenu.property.readOnly = SelectMenu2.property.readOnly; MultiSelectMenu.prototype.init = function (props) { props = props || []; Object.keys(props).forEach(function (key) { if (props[key] === undefined) delete props[key]; }); this.super(props); }; MultiSelectMenu.prototype._updateFocusItem = function () { for (var i = 0; i < this.$items.length; ++i) { this.$items[i].active = this.$items[i].value == this._activeValue; } }; MultiSelectMenu.prototype.init = SelectMenu2.prototype.init; MultiSelectMenu.prototype._implicit = function (values) { if (values === null || values === undefined) values = []; if (!(values instanceof Array)) { values = [values]; } values = values.filter(function (value) { var type = typeof value; return type === 'string' || type === 'number' || type === "boolean" || value === null || value === undefined; }).reduce(function (ac, cr) { if (!ac.dict[cr]) { ac.dict[cr] = true; ac.result.push(cr); } return ac; }, { result: [], dict: {} }).result; return values; }; MultiSelectMenu.prototype._explicit = function (values) { var selectListBoxElt = this.$selectlistBox; var strictValue = this.strictValue; values = values.filter(function (value) { if (!strictValue) return true; var cts = selectListBoxElt.findItemsByValue(value); if (cts && cts.length > 0) return true; return false; }) return values; }; MultiSelectMenu.property.items = { set: function (items) { items = items || []; this.$selectlistBox.items = items; this.addStyle('--list-min-width', this.$selectlistBox._estimateWidth + 'px'); this._updateItems(); }, get: function () { return this.$selectlistBox.items } }; MultiSelectMenu.property.values = { set: function (values) { values = this._implicit(values); this._values = values; this.$selectlistBox.values = values; this._updateItems(); }, get: function () { return this._explicit(this._values); } }; MultiSelectMenu.property.orderly = { set: function (value) { var needUpdate = this._orderly === this._orderly; if (typeof value === 'function') { this._orderly; } else this._orderly = !!value; if (needUpdate) { this.values = this.values; } }, get: function () { return !!this._orderly; } }; MultiSelectMenu.property.disableClickToFocus = { set: function (value) { if (value) { this.addClass('as-disable-click-to-focus'); } else { this.removeClass('as-disable-click-to-focus'); } }, get: function () { return this.hasClass('as-disable-click-to-focus'); } }; MultiSelectMenu.property.itemFocusable = { set: function (value) { if (value) { this.addClass('as-item-focusable'); } else { this.removeClass('as-item-focusable'); } this._updateFocusItem(); }, get: function () { return this.hasClass('as-item-focusable'); } }; MultiSelectMenu.property.activeValue = { set: function (value) { this._activeValue = value; if (this.itemFocusable) { this._updateFocusItem(); //todo } }, get: function () { return this._activeValue; } }; MultiSelectMenu.property.strictValue = { set: function (value) { if (value){ this.attr('data-strict-value', null); } else { this.attr('data-strict-value', 'false'); } }, get: function () { var data = this.attr('data-strict-value'); return !data || (data != 'false' && data !== '0'); } }; MultiSelectMenu.eventHandler = Object.assign({}, SelectMenu2.eventHandler); MultiSelectMenu.eventHandler.attached = function () { var maxHeightStyle = this.getComputedStyleValue('max-height') || 'none'; if (maxHeightStyle.match(/[0-9-]+px/)) { this.addStyle('--multi-select-menu-max-height', maxHeightStyle); this.addStyle('max-height', 'unset'); } else if (maxHeightStyle !== 'none') { console.warn('Can not adapt max-height:', maxHeightStyle); } }; MultiSelectMenu.eventHandler.click = function (event) { if (this.disabled) return; if ((event.target === this || event.target === this.$itemCtn) && !this.disableClickToFocus && !this.readOnly) { this.isFocus = !this.isFocus; } }; MultiSelectMenu.eventHandler.bodyClick = function (event) { if (!EventEmitter["b" /* default */].hitElement(this.$selectlistBox, event) && event.target !== this && event.target !== this.$itemCtn) { this.isFocus = false; } }; MultiSelectMenu.eventHandler.selectListBoxPressItem = function (event) { var data = event.data; var currentValues = this.$selectlistBox.values; currentValues.push(data.value); this.$selectlistBox.values = currentValues; this.$selectlistBox.updatePosition(); this._values = currentValues.slice(); this._activeValue = data.value; this._updateItems(); this.isFocus = false; this.emit('add', Object.assign({}, event, { type: 'add', target: this, value: data.value, data: data, itemData: data }), this); this.emit('change', Object.assign({}, event, { type: 'change', action: 'add', target: this, value: data.value, data: data, values: this.values }), this); }; MultiSelectMenu.eventHandler.pressItem = function (item, event) { var value = item.value; if (this.itemFocusable) { var prevActiveValue = this.activeValue; if (value !== prevActiveValue) { this.activeValue = value; this.emit('activevaluechange', { target: this, originEvent: event, prevActiveValue: prevActiveValue, activeValue: value }, this); } } }; MultiSelectMenu.eventHandler.pressCloseItem = function (item, event) { var value = item.value; var data = item.data; var index; index = this._values.indexOf(value); if (index >= 0) { this._values.splice(index, 1); this._updateItems(); this.$selectlistBox.values = this._values; this.emit('remove', Object.assign({}, event, { type: 'change', target: this, data: data, value: value, itemData: data }), this); this.emit('change', Object.assign({}, event, { type: 'change', action: 'remove', target: this, data: data, value: value, itemData: data }), this); } }; ACore["d" /* default */].install(MultiSelectMenu); /* harmony default export */ var js_MultiSelectMenu = (MultiSelectMenu); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/countdownclock.css var countdownclock = __webpack_require__(52); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CountdownClock.js var CountdownClock_ = ACore["d" /* default */]._; var CountdownClock_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function CountdownClock() { var thisC = this; this.$attachhook = CountdownClock_('attachhook').addTo(this) .on('attached', function () { ResizeSystem["a" /* default */].add(this); this.requestUpdateSize(); if (thisC.autoStart) { thisC.start(); } }); this.$attachhook.requestUpdateSize = this._updateBorder.bind(this); this._tick = this._tick.bind(this); this.$border = CountdownClock_$(".as-countdown-clock-border", this); this.$min = CountdownClock_$(".as-countdown-clock-min", this); this.$sec = CountdownClock_$(".as-countdown-clock-sec", this); this._prevText = -1; this._startTime = new Date().getTime(); this._totalSecond = 60; this._remainSecond = 0; this.totalSecond = 60; this.remainSecond = 0; this._intvId = -1; } CountdownClock.tag = 'CountdownClock'.toLowerCase(); CountdownClock.render = function () { return CountdownClock_({ extendEvent: ['finish', 'update'], class: 'as-countdown-clock', child: [ { class: 'as-countdown-clock-text', child: [ { tag: 'span', class: 'as-countdown-clock-min', child: { text: 0 } }, { text: ':' }, { tag: 'span', class: 'as-countdown-clock-sec', child: { text: '60' } } ] }, { class: 'as-countdown-clock-border-wrapper', child: { class: 'as-countdown-clock-border' } } ] }); }; CountdownClock.prototype._makePolygon = function (end) { var n = Math.ceil(Math.max(end / 0.2, 2)); var fan = Array(n).fill(0).map(function (u, i) { var angle = -Math.PI / 2 + end * i / n; return [numberAutoFixed(50 + 60 * Math.cos(angle), 5) + '%', numberAutoFixed(50 + 60 * Math.sin(angle), 5) + '%'].join(' ') }); fan.push('50% 50%'); return 'polygon('+fan.join(', ')+')'; }; CountdownClock.prototype._setBorderValue = function (val) { if (val >= 1 || !isFinite(val)) { this.$border.removeStyle("clip-path"); return; } var bound = this.$border.getBoundingClientRect(); var angle = val * Math.PI * 2; this.$border.addStyle("-webkit-clip-path", this._makePolygon(angle)); this.$border.addStyle("clip-path", this._makePolygon(angle)); }; CountdownClock.prototype._updateBorder = function () { this._setBorderValue(this._remainSecond / Math.max(0.001, this._totalSecond)); }; CountdownClock.prototype._updateText = function () { if (this._prevText === this.remainSecond) return; var remainSecond = this.remainSecond; var min = Math.floor(remainSecond / 60); var sec = remainSecond % 60; this.$sec.innerHTML = (sec < 10 ? "0" : "") + sec; this.$min.innerHTML = min; } CountdownClock.prototype._tick = function () { var now = new Date().getTime(); var prevSec = this.remainSecond; this.remainSecond = Math.max(0, Math.ceil(this.totalSecond - (now - this._startTime) / 1000)); if (prevSec !== this.remainSecond) { this._updateText(); this.emit('update', { target: this, type: 'update' }, this); if (this.remainSecond === 0) { clearInterval(this._intvId); this._intvId = -1; this.emit('finish', { target: this, type: 'finish' }, this); } } }; CountdownClock.prototype.start = function () { if (this.remainSecond == 0) this.remainSecond = this.totalSecond; this._startTime = new Date().getTime() - (this.totalSecond - this.remainSecond) * 1000; this.resume(); }; CountdownClock.prototype.resume = function () { if (this._intvId > 0) return; this._intvId = setInterval(this._tick, 200); }; CountdownClock.prototype.pause = function () { if (this._intvId > 0) { clearInterval(this._intvId); this._intvId = -1; } }; CountdownClock.prototype.stop = function () { this.pause(); this.remainSecond = 0; }; CountdownClock.prototype.reset = function () { this.remainSecond = this.totalSecond; this._startTime = new Date().getTime(); } CountdownClock.property = {}; CountdownClock.property.totalSecond = { set: function (value) { if (!(value >= 0)) { value = 0; } this._totalSecond = value; this._updateBorder(); }, get: function () { return this._totalSecond; } }; CountdownClock.property.remainSecond = { set: function (value) { if (!(value >= 0)) { value = 0; } this._remainSecond = value; this._updateBorder(); this._updateText(); }, get: function () { return this._remainSecond; } } ACore["d" /* default */].install(CountdownClock); /* harmony default export */ var js_CountdownClock = (CountdownClock); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/toast.css var toast = __webpack_require__(231); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/variantcolors.css var variantcolors = __webpack_require__(233); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/VariantColors.js function VariantColor() { this.keys = ['primary', 'secondary', 'success', 'info', 'warning', 'error', 'danger', 'light', 'dark', 'link', 'note']; this.base = { primary: "#007bff", secondary: "#6c757d", success: "#28a745", info: "#17a2b8", warning: "#ffc107", error: "#ff4052", danger: "#dc3545", light: "#f8f9fa", dark: "#343a40", link: "#007bff", note: '#ffff88' }; this.mediumContract = { primary: '#e2edd5', secondary: '#fca75b', success: '#fce8e8', info: '#fcf5e8', warning: '#5e5a75', error: '#e0dfce', danger: "#e5e8d5", light: '#7a5b3c', dark: "#bf7d3b", link: "#dde8c9", note: '#1e1ec8' } Dom["b" /* default */].documentReady.then(this.loadFromCss.bind(this)); } VariantColor.prototype.has = function (name) { return this.keys.indexOf(name) >= 0; }; VariantColor.prototype.loadFromCss = function () { this.base = this.keys.reduce(function (ac, name) { var style = window.getComputedStyle(document.body); ac[name] = style.getPropertyValue('--variant-color-' + name); return ac; }, {}); this.mediumContract = this.keys.reduce(function (ac, name) { var style = window.getComputedStyle(document.body); ac[name] = style.getPropertyValue('--variant-medium-contract-color-' + name); return ac; }, {}); }; /* harmony default export */ var VariantColors = (new VariantColor()); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Toast.js var Toast_$ = ACore["d" /* default */].$; var Toast_ = ACore["d" /* default */]._; var toastBg = { success: "#a4f3b6", info: "#67d5e7" } var toastTextColor = { success: '#454040', info: '#48433b' } buildCss(VariantColors.keys.reduce(function (ac, cr) { var color = Color_Color.parse(toastBg[cr] || VariantColors.base[cr]); var textColor = color.getContrastYIQ(); var headerColor = toastTextColor[cr] || VariantColors.mediumContract[cr] || color.getHightContrastColor(); ac['.as-toast.as-variant-' + cr + ' .as-toast-variant-color'] = { 'background-color': color.toString('hex6') } ac['.as-toast.as-variant-background.as-variant-' + cr] = { 'background-color': color.toString('hex6'), color: textColor.toString('hex6') } ac['.as-toast.as-variant-background.as-variant-' + cr + ' .as-toast-header'] = { color: headerColor.toString('hex6') } return ac; }, {})); /*** * @extends {AElement} * @constructor */ function Toast() { this._state = 0; this.$closeBtn = Toast_$('.as-toast-close-btn', this) .on('click', this.disappear.bind(this)); this.$title = Toast_$('.as-toast-title', this); this.$timeText = Toast_$('.as-toast-time-text', this); this.$body = Toast_$('.toast-body', this); this.$attachhook = Toast_$('attachhook', this) .on('attached', this.appear.bind(this)); OOP["a" /* default */].drillProperty(this, this.$title.firstChild, 'htitle', 'data'); this._message = null; this.$message = null; this.disappearTimeout = 0; this.htitle = 'Toast.htitle'; this.timeText = new Date(); this.message = null; this.variant = null; } Toast.tag = 'toast'; ['addChild', 'removeChild', 'clearChild', 'addChildBefore', 'addChildAfter'].forEach(function (key) { Toast.prototype[key] = function () { this.$body[key].apply(this.$body, arguments); }; }); Toast.render = function () { return Toast_({ extendEvent: ['appeared', 'disappeared'], class: ['as-toast', 'as-not-appeared'], child: [ { class: 'as-toast-header', child: [ '.as-toast-variant-color', { tag: 'strong', class: 'as-toast-title', child: { text: "Absol Js" } }, { tag: 'smal', class: 'as-toast-time-text', child: { text: '20 mis ago' } }, { tag: 'button', class: 'as-toast-close-btn', child: { tag: 'span', child: { text: '×' } } } ] }, { class: 'toast-body' }, 'attachhook' ] }); }; Toast.prototype.disappear = function () { if (this._state !== 2) return; this._state = 3; this.addClass('as-disappearing'); setTimeout(function () { this.removeClass('as-disappeared') .removeClass('as-disappearing') .addClass('as-not-appeared'); this.remove(); this.emit('disappeared', { target: this, type: 'disappeared' }, this); }.bind(this), 500); }; Toast.prototype.appear = function () { if (this._state !== 0) return; this._state = 1; this.addClass('as-appearing'); setTimeout(function () { this.removeClass('as-not-appeared') .addClass('as-appeared') .removeClass('as-appearing'); this._state = 2; this.emit('appeared', { target: this, type: 'appeared' }, this); if (this.disappearTimeout > 0 && this.disappearTimeout < Infinity) { setTimeout(this.disappear.bind(this), this.disappearTimeout); } }.bind(this), 100); }; Toast.property = {}; Toast.property.variant = { set: function (value) { if (this._variant && this._variant !== value) { this.removeClass('as-variant-' + this._variant); } if (VariantColors.has(value) || (['sticky-note'].indexOf(value) >= 0)) { this._variant = value; this.addClass('as-variant-' + this._variant); } }, get: function () { return this._variant; } }; Toast.property.message = { set: function (value) { if (typeof value !== "string" || value.length === 0) { value = null; } if (value) { if (!this.$message) { this.$message = Toast_({ class: 'as-toast-message', child: { text: '' } }); } if (!this.$message.parentElement) this.$body.addChild(this.$message); this.$message.firstChild.data = value; } else { if (this.$message && this.$message.parentElement) { this.$message.remove(); } } this._message = value; }, get: function () { return this._message; } }; Toast.property.timeText = { set: function (value) { if (value instanceof Date) { value = value.toLocaleTimeString(); } else { value = value + ''; } this.$timeText.firstChild.data = value; }, get: function () { return this.$timeText.firstChild.data; } }; Toast.$toastList = Toast_('.as-toast-list.as-se.as-bscroller'); Toast.$toastList4Pos = { se: Toast.$toastList, sw: Toast_('.as-toast-list.as-sw.as-bscroller'), nw: Toast_('.as-toast-list.as-nw.as-bscroller'), ne: Toast_('.as-toast-list.as-ne.as-bscroller'), sc: Toast_('.as-toast-list.as-sc.as-bscroller'), }; Dom["b" /* default */].documentReady.then(function () { Toast.$toastList.addTo(document.body); Toast.$toastList4Pos.sw.addTo(document.body); Toast.$toastList4Pos.nw.addTo(document.body); Toast.$toastList4Pos.ne.addTo(document.body); Toast.$toastList4Pos.sc.addTo(document.body); }); /*** * * @param {AbsolConstructDescriptor|{}} aObject, * @param {"se"|"sw"|"ne"|"nw"|"sc" } [pos="se"] * @return {AElementNS|AElement|Text} */ Toast.make = function (aObject, pos) { if (!Toast.$toastList4Pos[pos]) pos = "se"; aObject = aObject || {}; if (typeof aObject !== "object") throw new Error("param must be AbsolConstructDescriptor object!"); if (Object(Dom["f" /* isDomNode */])(aObject)) { } else { aObject.tag = aObject.tag || 'toast'; } var toastElt = Toast_(aObject); var toastListElt = Toast.$toastList4Pos[pos] || Toast.$toastList; toastListElt.addChild(toastElt); return toastElt; }; ACore["d" /* default */].install(Toast); /* harmony default export */ var js_Toast = (Toast); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/emojipickertooltip.css var emojipickertooltip = __webpack_require__(235); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/pageindicator.css var pageindicator = __webpack_require__(237); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/PageIndicator.js var PageIndicator_ = ACore["d" /* default */]._; var PageIndicator_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function PageIndicator() { this._idx = -1; this.length = 0; this.idx = -1; } PageIndicator.tag = 'PageIndicator'.toLowerCase(); PageIndicator.render = function () { return PageIndicator_({ class: 'as-page-indicator', child: [] }); }; PageIndicator.property = {}; PageIndicator.property.length = { set: function (value) { value = value || 0; value = Math.max(0, value); while (this.childNodes.length < value) { this.addChild(PageIndicator_('button.as-page-indicator-item')); } while (this.childNodes.length > value) { this.removeChild(this.childNodes[this.childNodes.length - 1]); } this.idx = this._idx;//update }, get: function () { return this.childNodes.length; } }; PageIndicator.property.idx = { set: function (value) { var activeElt = this.childNodes[this._idx]; if (activeElt) activeElt.removeClass('as-active'); this._idx = value; activeElt = this.childNodes[this._idx]; if (activeElt) activeElt.addClass('as-active'); }, get: function () { return this._idx; } }; ACore["d" /* default */].install(PageIndicator); /* harmony default export */ var js_PageIndicator = (PageIndicator); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiPickerTooltip.js var EmojiPickerTooltip_ = ACore["d" /* default */]._; var EmojiPickerTooltip_$ = ACore["d" /* default */].$; var EmojiPickerTooltip_isMobile = BrowserDetector["a" /* default */].isMobile; /*** * @augments Tooltip * @augments AElement * @augments Hanger * @constructor */ function EmojiPickerTooltip() { if (EmojiPickerTooltip_isMobile) { EmojiPickerTooltip_({ tag: js_Hanger.tag, elt: this, on: { predrag: this.eventHandler.preDragTT, dragstart: this.eventHandler.dragStartTT, drag: this.eventHandler.dragTT, dragend: this.eventHandler.dragEndTT } }) } this.$iconList = EmojiPickerTooltip_$('.as-emoji-picker-tooltip-icon-list', this); this.$leftBtn = EmojiPickerTooltip_$('.as-emoji-picker-tooltip-left-btn', this) .on('click', this.eventHandler.clickLeft); this.$scroller = EmojiPickerTooltip_$('.as-emoji-picker-tooltip-scroller', this); this.$rightBtn = EmojiPickerTooltip_$('.as-emoji-picker-tooltip-right-btn', this) .on('click', this.eventHandler.clickRight); this.$removeBtn = EmojiPickerTooltip_$('.as-emoji-picker-tooltip-remove-btn', this) .on('click', this.eventHandler.clickRemove); this.$pageIndicatior = EmojiPickerTooltip_$('pageindicator', this); this._iconButtonCache = {}; this._icons = []; this.icons = EmojiPickerTooltip.defaultIcons; } EmojiPickerTooltip.tag = 'EmojiPickerTooltip'.toLowerCase(); EmojiPickerTooltip.defaultIcons = [';(', '(sarcastic)', ':O', '(cwl)', '(heart)', '(y)', '(n)', '(rock)', '(facepalm)', '(xd)', ':$', '(waiting)', '(headbang)', '(ghost)', '(clap)', '(punch)', '(ok)', '(angry)']; EmojiPickerTooltip.emojiDict = js_EmojiAnims.reduce(function (ac, cr) { ac[cr[0]] = { imageFileName: cr[1], text: cr[0], desc: cr[2] }; return ac; }, {}); EmojiPickerTooltip.render = function () { return EmojiPickerTooltip_({ tag: 'tooltip', extendEvent: ['pick'], class: ['as-emoji-picker-tooltip'].concat(EmojiPickerTooltip_isMobile ? ['as-mobile'] : []), child: [ { tag: 'button', class: 'as-emoji-picker-tooltip-left-btn', child: 'span.mdi.mdi-chevron-left' }, { class: 'as-emoji-picker-tooltip-scroller', child: { class: 'as-emoji-picker-tooltip-icon-list', } }, { tag: 'button', class: 'as-emoji-picker-tooltip-right-btn', child: 'span.mdi.mdi-chevron-right' }, { tag: 'button', attr: { title: 'Remove Emoji' }, class: 'as-emoji-picker-tooltip-remove-btn', child: 'span.mdi.mdi-close' }, { tag: 'pageindicator', class: 'as-emoji-picker-tooltip-page-indicator', props: { length: 3, idx: 0 } } ] }, true); }; /*var */ EmojiPickerTooltip.prototype._makeIconBtn = function (iconText) { var icon = EmojiPickerTooltip.emojiDict[iconText]; var url = js_EmojiPicker.assetRoot + '/anim/x40/' + icon.imageFileName; var spriteElt = EmojiPickerTooltip_({ tag: 'sprite', class: 'as-emoji-picker-tooltip-icon', attr: { title: icon.desc }, props: { src: url, loop: true, fps: 30, debug: true }, on: { ready: function () { this.frames = { type: 'grid', col: 1, row: this.texture.naturalHeight / this.texture.naturalWidth }; this.frameIndex = 0; } } }); var buttonElt = EmojiPickerTooltip_({ tag: 'button', class: 'as-emoji-picker-tooltip-icon-btn', child: spriteElt, on: { click: this.eventHandler.clickIconBtn.bind(null, icon) } }); buttonElt.on('mouseenter', function () { spriteElt.play(); }).on('mouseleave', function () { spriteElt.stop(); spriteElt.frameIndex = 0; }); return buttonElt; }; EmojiPickerTooltip.prototype._updateIconList = function () { this.$iconList.clearChild(); var iconText; for (var i = 0; i < this._icons.length; ++i) { iconText = this._icons[i]; this._iconButtonCache[iconText] = this._iconButtonCache[iconText] || this._makeIconBtn(iconText); this.$iconList.addChild(this._iconButtonCache[iconText]) } }; EmojiPickerTooltip.property = {}; EmojiPickerTooltip.property.icons = { set: function (icons) { this._icons = icons || []; this._updateIconList(); this.viewOffset = 0; this.$pageIndicatior.length = Math.ceil(this._icons.length / 6); }, get: function () { return this._icons; } }; EmojiPickerTooltip.property.viewOffset = { set: function (value) { this._viewOffset = Math.max(0, Math.min(value, this._icons.length - 6)); this.$iconList.addStyle('left', -(100 * this._viewOffset / 6) + '%'); this.$leftBtn.disabled = this._viewOffset === 0; this.$rightBtn.disabled = this._viewOffset === this._icons.length - 6; this.$pageIndicatior.idx = Math.floor(this._viewOffset / 6); }, get: function () { return this._viewOffset; } }; EmojiPickerTooltip.eventHandler = {}; EmojiPickerTooltip.eventHandler.clickLeft = function () { this.viewOffset -= 6; }; EmojiPickerTooltip.eventHandler.clickRight = function () { this.viewOffset += 6; }; EmojiPickerTooltip.eventHandler.clickIconBtn = function (icon) { if (this._preventClick) return; this.emit('pick', Object.assign({ type: 'pick', icon: icon, target: this }, icon), this); }; EmojiPickerTooltip.eventHandler.clickRemove = function () { this.emit('pick', Object.assign({ type: 'pressremove', icon: "REMOVE", target: this }), this); }; EmojiPickerTooltip.eventHandler.preDragTT = function (event) { var scrollerBound = this.$scroller.getBoundingClientRect(); var listBound = this.$iconList.getBoundingClientRect(); this._scrollData = { left: listBound.left - scrollerBound.left, scrollerWidth: scrollerBound.width, newLeft: listBound.left - scrollerBound.left }; }; EmojiPickerTooltip.eventHandler.dragStartTT = function () { this.addClass('as-scrolling'); this._preventClick = true; }; EmojiPickerTooltip.eventHandler.dragTT = function (event) { event.preventDefault(); var dx = event.currentPoint.sub(event.startingPoint).x; var newLeft = Math.min(0, Math.max(-this._scrollData.scrollerWidth * 2, this._scrollData.left + dx)); this._scrollData.newLeft = newLeft; this.$iconList.addStyle('left', newLeft + 'px'); }; EmojiPickerTooltip.eventHandler.dragEndTT = function (event) { event.preventDefault(); this.removeClass('as-scrolling'); var dOffset = (this._scrollData.left - this._scrollData.newLeft) / this._scrollData.scrollerWidth; if (dOffset > 0.25) { dOffset = 1; } else if (dOffset < -0.25) { dOffset = -1; } else { dOffset = 0; } this.viewOffset += dOffset * 6; setTimeout(function () { this._preventClick = false; }.bind(this), 5) }; ACore["d" /* default */].install(EmojiPickerTooltip); EmojiPickerTooltip._session = Math.random() * 10000000000 >> 0; function prepare() { if (EmojiPickerTooltip.$holder) return; EmojiPickerTooltip.$holder = EmojiPickerTooltip_('.absol-tooltip-root-holder') EmojiPickerTooltip.$tooltip = EmojiPickerTooltip_('emojipickertooltip.top').addTo(EmojiPickerTooltip.$holder) .on('pick', function (event) { EmojiPickerTooltip._listener && EmojiPickerTooltip._listener(event.icon); }); /*** * * @type {PositionTracker|undefined} */ EmojiPickerTooltip.$element = undefined; EmojiPickerTooltip.$content = undefined; EmojiPickerTooltip._orientation = 'auto'; EmojiPickerTooltip._session = Math.random() * 10000000000 >> 0; EmojiPickerTooltip._listener = undefined; EmojiPickerTooltip._scrollOutListener = undefined; EmojiPickerTooltip.$tooltip.$arrow.updateSize = EmojiPickerTooltip.updatePosition; } EmojiPickerTooltip.updatePosition = function () { if (!EmojiPickerTooltip.$element) return; var outBound = Math_Rectangle.fromClientRect(Object(Dom["g" /* traceOutBoundingClientRect */])(EmojiPickerTooltip.$element)); var eBound = Math_Rectangle.fromClientRect(EmojiPickerTooltip.$element.getBoundingClientRect()); if (!outBound.isCollapse(eBound, 0)) { EmojiPickerTooltip._scrollOutListener && EmojiPickerTooltip._scrollOutListener(); } updateTooltipPosition(EmojiPickerTooltip); }; EmojiPickerTooltip.updatePosition = EmojiPickerTooltip.updatePosition.bind(EmojiPickerTooltip); EmojiPickerTooltip.show = function (element, menuListener, orientation) { prepare(); if (EmojiPickerTooltip.$element) { EmojiPickerTooltip.$element.stopTrackPosition(); EmojiPickerTooltip.$element.off('positionchange', EmojiPickerTooltip.updatePosition); } if (!element.startTrackPosition) { EmojiPickerTooltip_({ tag: js_PositionTracker.tag, elt: element }) } element.startTrackPosition(); EmojiPickerTooltip.$element = element; EmojiPickerTooltip.$element.on('positionchange', EmojiPickerTooltip.updatePosition); EmojiPickerTooltip._listener = menuListener; EmojiPickerTooltip._session = Math.random() * 10000000000 >> 0; EmojiPickerTooltip._orientation = orientation || 'auto'; EmojiPickerTooltip.$holder.addTo(document.body); ResizeSystem["a" /* default */].add(EmojiPickerTooltip.$tooltip.$arrow); EmojiPickerTooltip.$tooltip.viewOffset = 0; EmojiPickerTooltip.$tooltip.addClass('top') .removeClass('left') .removeClass('right') .removeClass('bottom') .removeClass('ne') .removeClass('nw') .removeClass('auto'); EmojiPickerTooltip.updatePosition(); return EmojiPickerTooltip._session; }; EmojiPickerTooltip.close = function (token) { if (EmojiPickerTooltip._session !== token) return; if (EmojiPickerTooltip.$element) { EmojiPickerTooltip.$element.stopTrackPosition(); EmojiPickerTooltip.$element.off('positionchange', EmojiPickerTooltip.updatePosition); } EmojiPickerTooltip.$element = undefined; EmojiPickerTooltip._listener = undefined; EmojiPickerTooltip._session = Math.random() * 10000000000 >> 0; EmojiPickerTooltip.$holder.remove(); }; EmojiPickerTooltip.toggleWhenClick = function (trigger, adaptor) { var res = { trigger: trigger, adaptor: adaptor, currentSession: undefined, }; function clickHandler(event) { if (res.currentSession === EmojiPickerTooltip._session) return; res.currentSession = EmojiPickerTooltip.show(res.adaptor.getFlowedElement ? res.adaptor.getFlowedElement() : trigger, res.adaptor.onSelect, res.adaptor.orientation || 'auto' ); if (res.adaptor.onOpen) res.adaptor.onOpen(); var finish = function (event) { if (event && (Object(EventEmitter["d" /* hitElement */])(EmojiPickerTooltip.$tooltip.$leftBtn, event) || Object(EventEmitter["d" /* hitElement */])(EmojiPickerTooltip.$tooltip.$rightBtn, event)) || (event && event.target && event.target.classList.contains('absol-tooltip-content'))) return; document.body.removeEventListener('click', finish, false); EmojiPickerTooltip.close(res.currentSession); if (adaptor.onClose) adaptor.onClose(); res.currentSession = undefined; if (EmojiPickerTooltip._scrollOutListener === EmojiPickerTooltip) EmojiPickerTooltip._scrollOutListener = undefined; }; EmojiPickerTooltip._scrollOutListener = finish; setTimeout(function () { document.body.addEventListener('click', finish, false); }, 10); } res.remove = function () { trigger.removeEventListener('click', clickHandler, false); trigger.classList.remove('as-emoji-picker-tooltip-trigger'); }; trigger.addEventListener('click', clickHandler, false); trigger.classList.add('as-emoji-picker-tooltip-trigger'); return res; }; /* harmony default export */ var js_EmojiPickerTooltip = (EmojiPickerTooltip); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/emojicounter.css var emojicounter = __webpack_require__(239); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/emojiuserlisttooltip.css var emojiuserlisttooltip = __webpack_require__(241); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiUserListTooltip.js var EmojiUserListTooltip_ = ACore["d" /* default */]._; var EmojiUserListTooltip_$ = ACore["d" /* default */].$; /*** * @augments ToolTip * @augments AElement * @constructor */ function EmojiUserListTooltip() { this._text = null; this._users = []; this.$sprite = EmojiUserListTooltip_({ tag: 'sprite', class: 'as-emoji-user-list-tooltip-emoji', props: { fps: 30, loop: true }, on: { ready: function () { this.frames = { type: 'grid', col: 1, row: this.texture.naturalHeight / this.texture.naturalWidth }; } } }); this.appendChild(this.$sprite); this.text = '(heart)' this.user = []; } EmojiUserListTooltip.tag = 'EmojiUserListTooltip'.toLowerCase(); EmojiUserListTooltip.render = function () { return EmojiUserListTooltip_({ tag: 'tooltip', class: 'as-emoji-user-list-tooltip' }, true); }; EmojiUserListTooltip.prototype._updateUsers = function () { var thisT = this; this.$content.clearChild(); this._users.forEach(function (user) { var elt = EmojiUserListTooltip_({ class: 'as-emoji-user-list-tooltip-user', child: [ { class: 'as-emoji-user-list-tooltip-avatar', style: { backgroundImage: 'url(' + user.avatar + ')' } }, { class: 'as-emoji-user-list-tooltip-name', child: { text: user.name } } ] }); if (user.onclick) { elt.addClass('as-clickable'); elt.on('click', user.onclick.bind(user)); } thisT.$content.addChild(elt); }) }; EmojiUserListTooltip.prototype.playEmoji = function () { this.$sprite.afterReady().then(this.$sprite.play.bind(this.$sprite)); }; EmojiUserListTooltip.prototype.stopEmoji = function () { this.$sprite.stop(); }; EmojiUserListTooltip.property = {}; EmojiUserListTooltip.property.users = { set: function (users) { this._users = users || []; this._updateUsers(); }, get: function () { return this._users; } }; EmojiUserListTooltip.property.text = { set: function (value) { if (value === this._text) return; var icon = js_EmojiPickerTooltip.emojiDict[value]; if (!value) return; var url = js_EmojiPicker.assetRoot + '/anim/x60/' + icon.imageFileName; this._text = value; this.$sprite.src = url; }, get: function () { return this._text; } }; ACore["d" /* default */].install(EmojiUserListTooltip); /* harmony default export */ var js_EmojiUserListTooltip = (EmojiUserListTooltip); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiCounter.js var EmojiCounter_$ = ACore["d" /* default */].$; var EmojiCounter_ = ACore["d" /* default */]._; var EmojiCounter_isMobile = BrowserDetector["a" /* default */].isMobile; /*** * @extends AElement * @constructor */ function EmojiCounter() { /*** * * @type {Sprite} */ this.$sprite = EmojiCounter_$('sprite', this); this.$num = EmojiCounter_$('.as-emoji-counter-num', this); this.$numText = this.$num.firstChild; this._text = '(heart)'; this.text = this._text; this._count = 0; this.count = 0; this._checkInterval = -1; if (EmojiCounter_isMobile) { this.attr('tabindex', '1'); this.on('focus', this.eventHandler.mouseEnter); } else { this.on('mouseenter', this.eventHandler.mouseEnter); } this._tooltipSession = null; this._tooltipFinishTimeout = -1; } EmojiCounter.tag = 'EmojiCounter'.toLowerCase(); EmojiCounter.render = function () { var icon = js_EmojiPickerTooltip.emojiDict['(heart)']; var url = js_EmojiPicker.assetRoot + '/anim/x40/' + icon.imageFileName; return EmojiCounter_({ class: 'as-emoji-counter', child: [ { tag: 'sprite', class: 'as-emoji-counter-sprite', props: { src: url, loop: true, fps: 30, debug: true }, on: { ready: function () { this.frames = { type: 'grid', col: 1, row: this.texture.naturalHeight / this.texture.naturalWidth }; this.frameIndex = 0; } } }, { tag: 'span', class: 'as-emoji-counter-num', child: { text: '0' } } ] } ); }; EmojiCounter.property = {}; EmojiCounter.property.text = { set: function (value) { var icon = js_EmojiPickerTooltip.emojiDict[value]; if (!icon) return; if (this._text === value) return; this.$sprite.src = js_EmojiPicker.assetRoot + '/anim/x40/' + icon.imageFileName; this._text = value; }, get: function () { return this._text; } }; EmojiCounter.property.count = { set: function (value) { this.$numText.data = value + ''; if (value === 1 && this._count != 1) { this.$numText.remove(); } else if (value != 1 && this._count == 1) { this.$num.addChild(this.$numText); } if (value == 0) this.addClass('as-zero'); else this.removeClass('as-zero'); this._count = value; }, get: function () { return this._count; } } ACore["d" /* default */].install(EmojiCounter); EmojiCounter.eventHandler = {}; EmojiCounter.eventHandler.loop = function () { if (!this.isDescendantOf(document.body)) this.eventHandler.finishHover(); if (this.getBoundingClientRect().width === 0) this.eventHandler.finishHover(); }; EmojiCounter.eventHandler.mouseEnter = function () { if (this._tooltipFinishTimeout > 0) { clearTimeout(this._tooltipFinishTimeout); } if (this._checkInterval > 0) return; this.$sprite.play(); this._checkInterval = setInterval(this.eventHandler.loop, 1000); this.on('mouseleave', this.eventHandler.finishHover); if (this.users && this.users.length > 0) { EmojiCounter_prepare(); EmojiCounter._session = Math.random() * 10000000000 >> 0; this._tooltipSession = EmojiCounter._session; EmojiCounter.$element = this; EmojiCounter.$holder.addTo(this); EmojiCounter.$tooltip.text = this.text; EmojiCounter.$tooltip.users = this.users; EmojiCounter.$tooltip.playEmoji(); updateTooltipPosition(EmojiCounter); } }; EmojiCounter.eventHandler.finishHover = function () { if (this._tooltipFinishTimeout > 0) { clearTimeout(this._tooltipFinishTimeout); } this._tooltipFinishTimeout = setTimeout(function () { this._tooltipFinishTimeout = -1; this.$sprite.stop(); this.off('mouseleave', this.eventHandler.finishHover); if (this._checkInterval > 0) { clearInterval(this._checkInterval); this._checkInterval = -1; } if (this._tooltipSession === EmojiCounter._session) { EmojiCounter._session = Math.random() * 10000000000 >> 0; EmojiCounter.$holder.remove(); EmojiCounter.$tooltip.stopEmoji(); } }.bind(this), 500); }; function EmojiCounter_prepare() { if (EmojiCounter.$holder) return; EmojiCounter.$holder = EmojiCounter_('.absol-tooltip-root-holder'); EmojiCounter.$tooltip = EmojiCounter_('EmojiUserListTooltip.top'.toLowerCase()).addTo(EmojiCounter.$holder); EmojiCounter._scrollOutListener = undefined; EmojiCounter._orientation = 'top'; EmojiCounter._session = Math.random() * 10000000000 >> 0; js_EmojiPickerTooltip._listener = undefined; EmojiCounter.$element = null; EmojiCounter.$tooltip.$arrow.updateSize = EmojiCounter.updatePosition; } EmojiCounter.updatePosition = function () { if (!EmojiCounter.$element) return; var outBound = Math_Rectangle.fromClientRect(Object(Dom["g" /* traceOutBoundingClientRect */])(EmojiCounter.$element)); var eBound = Math_Rectangle.fromClientRect(EmojiCounter.$element.getBoundingClientRect()); if (!outBound.isCollapse(eBound, 0)) { js_EmojiPickerTooltip._scrollOutListener && EmojiCounter._scrollOutListener(); } updateTooltipPosition(EmojiCounter); }; EmojiCounter.updatePosition = EmojiCounter.updatePosition.bind(EmojiCounter); /* harmony default export */ var js_EmojiCounter = (EmojiCounter); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiCounterList.js var EmojiCounterList_ = ACore["d" /* default */]._; var EmojiCounterList_$ = ACore["d" /* default */].$; /*** * @extends AElement * @constructor */ function EmojiCounterList() { this._counters = []; this.counters = []; } EmojiCounterList.tag = 'EmojiCounterList'.toLowerCase(); EmojiCounterList.render = function () { return EmojiCounterList_({ class: 'as-emoji-counter-list' }); }; EmojiCounterList.iconOrdering = js_EmojiPickerTooltip.defaultIcons.reduce(function (ac, cr, idx) { ac[cr] = idx + 1; return ac; }, {}); EmojiCounterList.prototype._updateCounters = function () { var newCounters = this._counters; var newCounterNameArr = Object.keys(newCounters); newCounterNameArr.sort(function (a, b) { return (EmojiCounterList.iconOrdering[a] || 1000) - (EmojiCounterList.iconOrdering[b] || 1000); }) var counterElements = Array.prototype.filter.call(this.childNodes, function (e) { return e.hasClass && e.hasClass('as-emoji-counter'); }); var newCounterElements = []; var elt, name; var oe, on; while (counterElements.length > 0 || newCounterNameArr.length > 0) { elt = counterElements[0]; name = newCounterNameArr[0]; if (elt && name) { if (elt.text === name) { newCounterElements.push(elt); counterElements.shift(); newCounterNameArr.shift(); } else { oe = EmojiCounterList.iconOrdering[elt.text]; on = EmojiCounterList.iconOrdering[name]; if (oe < on) { newCounterElements.push(elt); counterElements.shift(); } else { newCounterElements.push(name); newCounterNameArr.shift(); } } } else if (elt) { newCounterElements.push(elt); counterElements.shift(); } else { newCounterElements.push(name); newCounterNameArr.shift(); } } var cElt, prevElt; while (newCounterElements.length > 0) { cElt = newCounterElements.pop(); if (typeof cElt === "string") { cElt = EmojiCounterList_({ tag: 'emojicounter', props: { text: cElt, users: newCounters[cElt].users || [], count: newCounters[cElt].count } }); if (!prevElt) { this.addChild(cElt); } else { this.addChildBefore(cElt, prevElt); } prevElt = cElt; } else { if (newCounters[cElt.text]) { cElt.count = newCounters[cElt.text].count; cElt.users = newCounters[cElt.text].users || []; prevElt = cElt; } else { cElt.remove(); } } } }; EmojiCounterList.property = {}; EmojiCounterList.property.counters = { set: function (counters) { this._counters = Object.keys(counters || {}).reduce(function (ac, key) { var counter = counters[key]; if (typeof counter === "object") { if (counter.count > 0 && js_EmojiPickerTooltip.emojiDict[key]) { ac[key] = counter; } } return ac; }, {}) this._updateCounters(); }, get: function () { return this._counters; } } ACore["d" /* default */].install(EmojiCounterList); /* harmony default export */ var js_EmojiCounterList = (EmojiCounterList); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/rotatedtext.css var rotatedtext = __webpack_require__(243); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/RotatedText.js /*** * @extends AElement * @constructor */ function RotatedText() { this.$attachHook = Object(ACore["a" /* $ */])('attachhook', this); this.$attachHook.requestUpdateSize = this.eventHandler.positionChange; this.$attachHook.on('attached', this.eventHandler.attached); this.$anchor = Object(ACore["a" /* $ */])('.as-rotated-text-anchor', this); this.$content = Object(ACore["a" /* $ */])('.as-rotated-text-content', this); this.$contentText = this.$content.firstChild; this.$trackElts = []; this._angle = 0; this.angle = 0; this.text = ''; this._trackInterval = -1; } RotatedText.tag = 'RotatedText'; RotatedText.render = function () { return Object(ACore["c" /* _ */])({ tag: 'span', class: 'as-rotated-text', child: [ 'attachhook', { class:'as-rotated-text-anchor', child: { tag: 'span', class: 'as-rotated-text-content', child: { text: '' } } } ] }); }; RotatedText.prototype._trackPosition = function () { this._cancelTrackPosition(); var parent = this.parentElement; while (parent) { parent.addEventListener('scroll', this.eventHandler.positionChange); this.$trackElts.push(parent); parent = parent.parentElement; } document.addEventListener('scroll', this.eventHandler.positionChange); this.$trackElts.push(document); this._trackInterval = setInterval(this.eventHandler.intervalCheck, 3000); }; RotatedText.prototype._cancelTrackPosition = function () { if (this._trackInterval >= 0) { clearInterval(this._trackInterval); this._trackInterval = -1; } while (this.$trackElts.length > 0) { this.$trackElts.pop().removeEventListener('scroll', this.eventHandler.positionChange); } }; RotatedText.property = {}; RotatedText.property.text = { get: function () { return this.$contentText.data; }, set: function (value) { value = value || ''; value = value + ''; this.$contentText.data = value; } }; RotatedText.property.angle = { set: function (value) { value = value || 0; var matched; if (typeof value === 'number') { this._angle = value; this.$content.addStyle('transform', 'rotate(' + value + 'deg)'); } else if (value.match) { matched = value.match(/([0-9.+\-e]+)deg/); if (matched) { value = parseFloat(matched[1]); if (isFinite(value)) { this._angle = value; this.$content.addStyle('transform', 'rotate(' + this._angle + 'deg)'); } return; } matched = value.match(/([0-9.+\-e]+)rad/); if (matched) { value = parseFloat(matched[1]); if (isFinite(value)) { this._angle = value * 180 / Math.PI; this.$content.addStyle('transform', 'rotate(' + this._angle + 'deg)'); } } } }, get: function () { return this._angle; } }; RotatedText.eventHandler = {}; RotatedText.eventHandler.attached = function () { ResizeSystem["a" /* default */].add(this); this.eventHandler.positionChange(); this.$content.addStyle('transform-origin',Math.round(0.3 * this.$content.getFontSize()) + 'px 50%'); this._trackPosition(); }; RotatedText.eventHandler.detached = function () { this._cancelTrackPosition(); }; RotatedText.eventHandler.intervalCheck = function () { if (!this.isDescendantOf(document.body)) { this.eventHandler.detached(); } } RotatedText.eventHandler.positionChange = function () { var bound = this.getBoundingClientRect(); this.$anchor.addStyle({ top: Math.round(bound.top) + 'px', left: Math.round(bound.left) + 'px' }); }; ACore["d" /* default */].install(RotatedText); /* harmony default export */ var js_RotatedText = (RotatedText); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/verticaltreediagram.css var verticaltreediagram = __webpack_require__(245); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/VerticalTreeDiagram.js function VerticalTreeDiagramNode() { this.$childCtn = Object(ACore["a" /* $ */])('.as-vertical-tree-diagram-child-ctn', this); this.$name = Object(ACore["a" /* $ */])('.as-vertical-tree-diagram-node-name', this); OOP["a" /* default */].drillProperty(this, this.$name.firstChild, 'name', 'data'); this.name = "UndefinedNodeName"; } VerticalTreeDiagramNode.tag = 'VerticalTreeDiagramNode'.toLowerCase(); VerticalTreeDiagramNode.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-vertical-tree-diagram-node', child: [ { class: 'as-vertical-tree-diagram-node-name-ctn', child: { class: 'as-vertical-tree-diagram-node-name', child: { text: "" } } }, { class: 'as-vertical-tree-diagram-child-ctn' } ] }); }; ['addChild', 'removeChild', 'clearChild', 'addChildBefore', 'addChildAfter', 'findChildBefore', 'findChildAfter' ].forEach(function (name) { VerticalTreeDiagramNode.prototype[name] = function () { this.$childCtn[name].apply(this.$childCtn, arguments); if (this.$childCtn.childNodes.length > 0) { this.addClass('as-has-child'); if (this.$childCtn.childNodes.length === 1) { this.addClass('as-has-1-child'); } else { this.removeClass('as-has-1-child'); } } else { this.removeClass('as-has-child'); this.removeClass('as-has-1-child'); } }; }); function VerticalTreeDiagram(data) { this.data = data || {}; } VerticalTreeDiagram.tag = 'VerticalTreeDiagram'.toLowerCase(); VerticalTreeDiagram.render = function () { return Object(ACore["c" /* _ */])(VerticalTreeDiagramNode.tag, true); } VerticalTreeDiagram.property = {}; VerticalTreeDiagram.property.data = { set: function (data) { data = data || {}; this._data = data; function makeNode(nodeData) { return Object(ACore["c" /* _ */])({ tag: VerticalTreeDiagramNode.tag, props: { name: nodeData.name }, child: (nodeData.child && nodeData.child.length > 0 && nodeData.child.map(makeNode)) || [] }); } this.name = data.name + ''; this.clearChild(); if (data.child) this.addChild(data.child.map(makeNode)); }, get: function () { return this._data; } }; ACore["d" /* default */].install(VerticalTreeDiagramNode); ACore["d" /* default */].install(VerticalTreeDiagram); /* harmony default export */ var js_VerticalTreeDiagram = (VerticalTreeDiagram); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/tokenfield.css var tokenfield = __webpack_require__(247); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TokenField.js /*** * @extends AElement * @constructor */ function TokenField() { this.on('click', this.eventHandler.click); this.$input = Object(ACore["a" /* $ */])('input', this) .on('keydown', this.eventHandler.inputKeyDown) .on('focus', this.eventHandler.inputInteract) .on('click', this.eventHandler.inputInteract) .on('keydown', this.eventHandler.inputInteract); this.$attachhook = Object(ACore["a" /* $ */])('attachhook', this) .on('attached', function () { ResizeSystem["a" /* default */].add(this); this.requestUpdateSize(); }); this.$attachhook.requestUpdateSize = this.updateSize.bind(this); /*** * * @type {SelectListBox} */ this.$selectlistBox = Object(ACore["c" /* _ */])({ tag: 'selectlistbox', props: { anchor: [1, 6, 2, 5] }, on: { preupdateposition: this.eventHandler.preUpdateListPosition } }); this.$selectlistBox.on('pressitem', this.eventHandler.selectListBoxPressItem); this.$selectlistBox.followTarget = this; this.$selectlistBox.sponsorElement = this; this.autocomplete = null; this.separator = ' '; this.placeHolder = ''; } TokenField.tag = 'TokenField'.toLowerCase(); TokenField.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-token-field', extendEvent: ['change'], child: [ { tag: 'input', class: 'as-token-field-input-text', attr: { type: 'text', tabindex: '1' } }, 'attachhook' ] }); }; TokenField.prototype._makeItem = function (text) { var itemElt = Object(ACore["c" /* _ */])({ tag: js_SelectBoxItem.tag, class: 'as-token-field-item', attr: { tabindex: 1 }, props: { data: { text: text, value: text } } }); itemElt.on({ keydown: this.eventHandler.itemKeyDown.bind(this, itemElt), close: this.eventHandler.itemClose.bind(this, itemElt), focus: this.eventHandler.itemFocus.bind(this, itemElt) }); return itemElt; }; TokenField.prototype._appendItem = function (itemElt) { this.addChildBefore(itemElt, this.$input); }; TokenField.prototype._updateInputWidth = function () { var lastItem = this.findChildBefore(this.$input); if (lastItem) { var lastItemBound = lastItem.getBoundingClientRect(); var bound = this.getBoundingClientRect(); var aRight = bound.right - 4 - lastItemBound.right; if (aRight > 60) { this.$input.addStyle('width', aRight + 'px'); } else { this.$input.addStyle('width', '100%'); } } else { this.$input.addStyle('width', '100%'); } }; TokenField.prototype._isSeparatorKey = function (key) { if (key === 'Enter') return true; if (this.separator === ' ') return key === ' '; if (this.separator === '\n') return key === 'Enter'; if (this.separator === '\t') return key === 'Tab'; return key === this.separator; }; TokenField.prototype.updateSize = function () { this._updateInputWidth(); }; TokenField.prototype._notifyChange = function (data) { this.emit('change', Object.assign({ type: 'change', target: this }, data), this); }; TokenField.prototype._searchInList = function () { if (this._searchTimeout > 0) { clearTimeout(this._searchTimeout); } this._searchTimeout = setTimeout(function () { var text = this.$input.value; if (this.$selectlistBox.isDescendantOf(document.body)) { this.$selectlistBox.$searchInput.value = text; this.$selectlistBox.eventHandler.searchModify(); if (this.$selectlistBox._displayItems.length === 0) { this.$selectlistBox.addStyle('visibility', 'hidden'); } else { this.$selectlistBox.removeStyle('visibility'); } } }.bind(this), 100); } TokenField.eventHandler = {}; TokenField.property = {}; TokenField.property.separator = { set: function (value) { if (typeof value !== "string") value = ' '; this._separator = value; }, get: function () { return this._separator; } }; TokenField.property.placeHolder = { set: function (value) { this.$input.attr('placeholder', value || ''); }, get: function () { return this.$input.attr('placeholder'); } }; TokenField.property.items = { set: function (items) { items = items || []; while (this.firstChild && this.firstChild && this.firstChild.hasClass('as-token-field-item')) { this.firstChild.remove(); } for (var i = 0; i < items.length; ++i) { this._appendItem(this._makeItem(items[i])); } }, get: function () { return Array.prototype.slice.call(this.childNodes).filter(function (elt) { return elt.hasClass && elt.hasClass('as-token-field-item'); }).map(function (elt) { return elt.data.value; }); } }; TokenField.property.autocomplete = { set: function (value) { this._autocomplete = value || null; if (this._autocomplete) { this.$selectlistBox.items = this._autocomplete.map(function (it) { return { value: it + '', text: it + '' }; }); } else { this.$selectlistBox.items = []; } }, get: function () { return this._autocomplete; } } TokenField.eventHandler.inputKeyDown = function (event) { if (this._isSeparatorKey(event.key)) { var text = this.$input.value; if (text.length > 0) { this.$input.value = ''; var newItem = this._makeItem(text); this._appendItem(newItem); this.updateSize(); this._notifyChange({ action: 'add', item: text, itemElt: newItem }); this.eventHandler.inputOut(); } event.preventDefault(); } else if (event.key.startsWith('Arrow') || event.key === 'Backspace') { if (this.$input.selectionStart === 0 && this.$input.selectionEnd === 0) { if (event.key === 'ArrowLeft' || event.key === 'Backspace') { event.preventDefault(); var prevChild = this.findChildBefore(this.$input); if (prevChild) prevChild.focus(); } else if (event.key === 'ArrowUp') { var item, itemBound; var inputBound = this.$input.getBoundingClientRect(); var anchorPos = new Math_Vec2(inputBound.left + 5, inputBound.top + inputBound.height / 2); var minDis = Infinity; var dis; var aboveItem; for (var i = 0; i < this.childNodes.length; ++i) { item = this.childNodes[i]; if (item.hasClass && item.hasClass('as-token-field-item')) { itemBound = item.getBoundingClientRect(); if (itemBound.bottom < inputBound.top) { dis = new Math_Vec2(itemBound.left + itemBound.width / 2, itemBound.top + itemBound.height / 2) .sub(anchorPos) .abs(); if (dis < minDis) { minDis = dis aboveItem = item; } } } } if (aboveItem) { aboveItem.focus(); event.preventDefault(); } } } else { this._searchInList(); } } else { this._searchInList(); } }; TokenField.eventHandler.inputInteract = function (event) { var lt = this._lastInteractTime; this._lastInteractTime = new Date().getTime(); if (lt && (this._lastInteractTime - lt < 100)) { return; } if (this.$selectlistBox.isDescendantOf(document.body)) return; this.$selectlistBox.addTo(document.body); this.$selectlistBox.domSignal.$attachhook.emit('attached'); this._searchInList(); var bound = this.getBoundingClientRect(); this.$selectlistBox.addStyle('min-width', bound.width + 'px'); this.$selectlistBox.refollow(); this.$selectlistBox.updatePosition(); setTimeout(document.addEventListener.bind(document, 'click', this.eventHandler.inputOut), 100) }; TokenField.eventHandler.inputOut = function (event) { if (event && (Object(EventEmitter["d" /* hitElement */])(this.$selectlistBox, event) || Object(EventEmitter["d" /* hitElement */])(this.$input, event))) return; document.removeEventListener('click', this.eventHandler.inputOut); this.$selectlistBox.remove(); this._lastInteractTime = new Date().getTime(); }; TokenField.eventHandler.itemKeyDown = function (itemElt, event) { var nextElt; if (event.key === 'Delete' || event.key === 'Backspace') { if (event.key === 'Delete') { nextElt = this.findChildAfter(itemElt); } else { nextElt = this.findChildBefore(itemElt) || this.$input; } itemElt.remove(); this._notifyChange({ item: itemElt.data.value, action: 'remove', itemElt: itemElt }); if (nextElt === this.$input) { this.$input.focus(); setCaretPosition(this.$input, 0); } else { nextElt.focus(); } } else if (event.key === 'ArrowLeft') { nextElt = this.findChildBefore(itemElt); if (nextElt) nextElt.focus(); } else if (event.key === 'ArrowRight') { nextElt = this.findChildAfter(itemElt); if (nextElt === this.$input) { this.$input.focus(); setCaretPosition(this.$input, 0); } else { nextElt.focus(); } } else if (event.key === 'ArrowUp' || event.key === 'ArrowDown') { var currentItemBound = itemElt.getBoundingClientRect(); var center = new Math_Vec2(currentItemBound.left + currentItemBound.width / 2, currentItemBound.top + currentItemBound.height / 2); var childElt, itemBound, dis; var minDis = Infinity; var i; if (event.key === 'ArrowUp') { for (i = 0; i < this.childNodes.length; ++i) { childElt = this.childNodes[i]; if (childElt.hasClass && childElt.hasClass('as-token-field-item') || childElt === this.$input) { itemBound = childElt.getBoundingClientRect(); if (itemBound.bottom < currentItemBound.top) { dis = new Math_Vec2(itemBound.left + itemBound.width / 2, itemBound.top + itemBound.height / 2) .sub(center) .abs(); if (dis < minDis) { minDis = dis nextElt = childElt; } } } } } else { for (i = 0; i < this.childNodes.length; ++i) { childElt = this.childNodes[i]; if (childElt.hasClass && childElt.hasClass('as-token-field-item') || childElt === this.$input) { itemBound = childElt.getBoundingClientRect(); if (itemBound.top > currentItemBound.bottom) { dis = new Math_Vec2(itemBound.left + itemBound.width / 2, itemBound.top + itemBound.height / 2) .sub(center) .abs(); if (dis < minDis) { minDis = dis nextElt = childElt; } } } } } if (nextElt) { nextElt.focus(); } } }; TokenField.eventHandler.itemFocus = function (itemElt) { this.eventHandler.inputOut(); }; TokenField.eventHandler.itemClose = function (itemElt) { itemElt.remove(); this._notifyChange({ action: 'remove', item: itemElt.data.value, itemElt: itemElt }); this.$input.focus(); }; TokenField.eventHandler.click = function (event) { if (event.target === this) this.$input.focus(); }; TokenField.eventHandler.preUpdateListPosition = function () { var bound = this.getBoundingClientRect(); var screenSize = Object(Dom["d" /* getScreenSize */])(); var availableTop = bound.top - 5; var availableBot = screenSize.height - 5 - bound.bottom; this.$selectlistBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px'); var outBound = Object(Dom["g" /* traceOutBoundingClientRect */])(this); if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) { // this.isFocus = false; // } }; TokenField.eventHandler.selectListBoxPressItem = function (event) { var text = event.data.value; var newItem = this._makeItem(text); this._appendItem(newItem); this.updateSize(); this._notifyChange({ action: 'add', item: text, itemElt: newItem }); this.eventHandler.inputOut(); this.$input.focus(); this.$input.value = ''; } ACore["d" /* default */].install(TokenField); /* harmony default export */ var js_TokenField = (TokenField); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/dvexptree.css var dvexptree = __webpack_require__(249); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DVExpTree.js /*** * @extends ExpTree * @constructor */ function DVExpTree() { this.injectInput(); } DVExpTree.tag = 'DVExpTree'.toLowerCase(); DVExpTree.render = function () { return Object(ACore["c" /* _ */])({ tag: js_ExpTree.tag, extendEvent: ['radiochange', 'indexclick'], class: 'as-dv-exp-tree' }, true); }; DVExpTree.prototype.injectInput = function () { this.$radio = Object(ACore["c" /* _ */])({ tag: 'radiobutton', on: { change: this.eventHandler.radioChange } }); this.$node.insertBefore(this.$radio, this.$node.$extIcon); this.$index = Object(ACore["c" /* _ */])({ tag: 'span', class: 'as-dv-exp-tree-index', on: { click: this.eventHandler.indexClick } }); this.$node.insertBefore(this.$index, this.$node.$desc); this.$node.on('click', this.eventHandler.clickInNode); }; DVExpTree.property = {}; DVExpTree.property.radioName = { enumerable: true, set: function (value) { if (!value) { this.removeClass('as-has-radio'); this.$radio.name = undefined; } else { this.addClass('as-has-radio'); this.$radio.name = value + ''; } }, get: function () { return this.$radio.name; } }; DVExpTree.property.radioValue = { enumerable: true, set: function (value) { this.$radio.value = value; }, get: function () { return this.$radio.value; } }; DVExpTree.property.radioChecked = { enumerable: true, set: function (value) { this.$radio.checked = value; }, get: function () { return this.$radio.checked; } }; DVExpTree.property.hasIndex = { enumerable: true, set: function (value) { if (value) this.addClass('as-has-index-input'); else this.removeClass('as-has-index-input'); }, get: function () { return this.hasClass('as-has-index-input'); } }; DVExpTree.property.indexValue = { enumerable: true, set: function (value) { this.$index.innerHTML = value; }, get: function () { return this.$index.innerHTML; } }; DVExpTree.eventHandler = {}; DVExpTree.eventHandler.radioChange = function (event) { this.emit('radiochange', Object.assign({}, event, { target: this, radioElt: this.$radio }), this); }; DVExpTree.eventHandler.indexClick = function (event) { this.emit('indexclick', Object.assign({}, event, { target: this, indexInput: this.$index }), this); }; DVExpTree.eventHandler.clickInNode = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.$index, event) || Object(EventEmitter["d" /* hitElement */])(this.$radio, event) || Object(EventEmitter["d" /* hitElement */])(this.$node.$toggleIcon, event)) return; if (Object(EventEmitter["d" /* hitElement */])(this.$node, event) && this.radioName) this.$radio.click(); }; ACore["d" /* default */].install(DVExpTree); /* harmony default export */ var js_DVExpTree = (DVExpTree); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/checklistitem.css var checklistitem = __webpack_require__(251); // CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Ref.js /*** * * @param {T} value * @param {*=} type * @constructor * @template T */ function Ref(value, type) { this.type = type; this.value = value; } Ref.prototype.toString = function () { return this.value + ''; }; /*** * * @return {T} */ Ref.prototype.valueOf = function () { return this.value; }; /*** * * @param {T}value */ Ref.prototype.set = function (value) { this.value = value; }; /** * * @return {T} */ Ref.prototype.get = function () { return this.value; } /* harmony default export */ var AppPattern_Ref = (Ref); // CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Attributes.js /*** * * @param {Object} node * @constructor */ /*** * @typedef {{defined?:function,revoked?:function,get?:function, set?: function, descriptor?: Object|function, export?: function}} AttributeHandler */ /*** * * @param {Object} node * @constructor */ function Attributes(node) { Object.defineProperty(this, '$$node', { enumerable: false, configurable: true, writable: false, value: node }) Object.defineProperty(this, '_definedProperties', { enumerable: false, writable: false, value: {} }); Object.defineProperty(this, '_definedComputedHandlers', { enumerable: false, writable: false, value: {} }); } Object.defineProperty(Attributes.prototype, 'loadAttributeHandlers', { enumerable: false, configurable: true, writable: false, value: function (newHandlers) { var self = this; var definedHandlers = this._definedProperties; var definedComputedHandlers = this._definedComputedHandlers; Object.keys(this._definedProperties).forEach(function (key) { if (!newHandlers[key]) { delete definedHandlers[key]; delete definedComputedHandlers[key]; delete self[key]; } }); Object.keys(newHandlers).forEach(function (key) { if (definedHandlers[key] !== newHandlers[key]) { self.defineProperty(key, newHandlers[key]); } }); } }); Object.defineProperty(Attributes.prototype, 'unloadAttributeHandlers', { enumerable: false, configurable: true, writable: false, value: function (oldHandlers) { var self = this; Object.keys(oldHandlers).forEach(function (key) { self.revokeProperty(key, oldHandlers[key]); }); } }); Object.defineProperty(Attributes.prototype, 'revokeProperty', { enumerable: false, configurable: true, writable: false, value: function (name, handler) { if (!this._definedProperties[name]) return; if (handler && this._definedProperties[name] !== handler) return;//verify if (handler.revoked) { handler.revoked.call(this, this._definedComputedHandlers[name].ref); } var value = this[name]; delete this[name]; this[name] = value; delete this._definedProperties[name]; } }); Object.defineProperty(Attributes.prototype, 'defineProperty', { enumerable: false, configurable: true, writable: false, value: function (name, handler) { var self = this; this._definedProperties[name] = handler; var hadValue = !!(name in this); var privateValueRef = new AppPattern_Ref(this[name]); var objectDescriptor = { enumerable: true, configurable: true, set: function (value) { if (handler.set) privateValueRef.set(handler.set.apply(self.$$node, Array.prototype.slice.call(arguments).concat([privateValueRef]))); else privateValueRef.set(value); }, get: function () { if (handler.get) return handler.get.apply(self.$$node, Array.prototype.slice.call(arguments).concat([privateValueRef])); else return privateValueRef.get(); } }; Object.defineProperty(this, name, objectDescriptor); this._definedComputedHandlers[name] = objectDescriptor; objectDescriptor.ref = privateValueRef; if (handler.defined) { handler.defined.call(this, privateValueRef); } if (hadValue) this[name] = privateValueRef.get(); } }); Object.defineProperty(Attributes.prototype, 'getProperty', { enumerable: false, configurable: true, writable: false, value: function (name) { var args = Array.prototype.slice.call(arguments, 1); var handler = this._definedComputedHandlers[name]; if (handler) { return handler.get.apply(this, args); } else return this[name]; } }); Object.defineProperty(Attributes.prototype, 'setProperty', { enumerable: false, configurable: true, writable: false, value: function (name, value) { var args = Array.prototype.slice.call(arguments, 1); var handler = this._definedComputedHandlers[name]; if (handler) { return handler.set.apply(this, args); } else this[name] = value; } }); Object.defineProperty(Attributes.prototype, 'export', { enumerable: false, configurable: true, value: function () { var self = this; return Object.keys(this).reduce(function (ac, key) { var value; var handler = self._definedProperties[key]; var computedHandler = self._definedComputedHandlers[key]; var exporter = handler && handler.export; if (exporter) { value = exporter.call(self.$$node, computedHandler.ref); } else { value = self[key] } if (value !== undefined) ac[key] = value; return ac; }, {}); } }); Object.defineProperty(Attributes.prototype, 'getPropertyDescriptor', { enumerable: false, configurable: true, writable: false, value: function (name) { var handler = this._definedProperties[name]; if (handler && (typeof handler.descriptor === 'function')) return handler.descriptor.call(this.$$node); var value = this[name]; return (handler && handler.descriptor) || { type: typeof value } } }); /* harmony default export */ var AppPattern_Attributes = (Attributes); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckListItem.js function measureMaxCheckboxTextWidth(items) { var maxTextWidth = 0; var maxText = 0; var maxEst = 0; var maxLv = 0; var est; var text; var item; for (var i = 0; i < items.length; ++i) { item = items[i]; if (item.text) { text = item.text; est = estimateWidth14(text) + 14 * 1.25 * (item.level || 0); if (est > maxEst) { maxEst = est; maxText = text; maxLv = item.level || 0; } } } if (maxText) maxTextWidth = 18 + 14 * (1.25 + 0.35) * maxLv + measureText(maxText, '14px Arial, Helvetica, sans-serif').width + 14;//padding left, right 7px, checkbox 18px return maxTextWidth; } function measureCheckListHeight(items) { var border = 0; var n = items.length - 1; return items.length * 25 + border; } function measureCheckListSize(items) { var descWidth = measureMaxDescriptionWidth(items); var textWidth = measureMaxCheckboxTextWidth(items); var width = textWidth; if (descWidth > 0) { width += descWidth + 14; } var height = measureCheckListHeight(items); return { width: width, height: height, descWidth: descWidth, textWidth: textWidth }; } /*** * @extends SelectListItem * @constructor */ function CheckListItem() { this.$text = Object(ACore["a" /* $ */])('span.absol-selectlist-item-text', this); this.$textValue = this.$text.childNodes[0]; this.$descCtn = Object(ACore["a" /* $ */])('.absol-selectlist-item-desc-container', this); this.$desc = Object(ACore["a" /* $ */])('span.absol-selectlist-item-desc', this.$descCtn); this.$descValue = this.$desc.childNodes[0]; this.$checkbox = Object(ACore["a" /* $ */])(CheckboxButton.tag, this) .on('change', this.eventHandler.checkboxChange); this.$icon = null; this._icon = null; this._viewData = new AppPattern_Attributes(this); this._viewData.loadAttributeHandlers(this.viewHandlers); OOP["a" /* default */].drillProperty(this, this._viewData, 'extendClasses'); OOP["a" /* default */].drillProperty(this, this._viewData, 'extendStyle'); this.level = 0; this.selected = false; this.on('click', this.eventHandler.clickText); } CheckListItem.tag = 'CheckListItem'.toLowerCase(); CheckListItem.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['select'], class: ['as-check-list-item', "absol-selectlist-item"], child: [ { tag: CheckboxButton.tag, class: 'as-check-list-item-checkbox' }, { tag: 'span', class: 'absol-selectlist-item-text', child: {text: ''} }, { class: 'absol-selectlist-item-desc-container', child: { tag: 'span', class: 'absol-selectlist-item-desc', child: {text: ''} } } ] }); }; CheckListItem.property = { text: js_SelectListItem.property.text, value: js_SelectListItem.property.value, icon: js_SelectListItem.property.icon, }; CheckListItem.property.data = { set: function (value) { this._data = value; var viewData = { text:'', desc: '', noSelect: false, extendStyle: null, extendClasses: null, icon: null, }; if (typeof value === 'string') { viewData.text = value } else { Object.assign(viewData, value); } Object.assign(this._viewData, viewData); }, get: function () { return this._data; } }; CheckListItem.property.selected = { set: function (value) { this.$checkbox.checked = !!value; }, get: function () { return this.$checkbox.checked; } }; CheckListItem.property.level = { set: function (value) { value = value || 0; this._level = value; this.$checkbox.addStyle('margin-left', value * 1.75 + 'em'); }, get: function () { return this._level; } }; CheckListItem.prototype.viewHandlers = {}; CheckListItem.prototype.viewHandlers.text = { set: function (value) { this.$textValue.data = value; }, get: function () { return this.$textValue.data; } }; CheckListItem.prototype.viewHandlers.desc = { set: function (value) { this.$descValue.data = value; }, get: function () { return this.$descValue.data; } }; CheckListItem.prototype.viewHandlers.extendClasses = { set: function (value, ref) { var prevVal = ref.get() || []; var i; for (i = 0; i < prevVal.length; ++i) { this.removeClass(prevVal[i]); } var newVal = []; if (typeof value == 'string') value = value.trim().split(/\s+/); value = value || []; for (i = 0; i < value.length; ++i) { newVal.push(value[i]); this.addClass(value[i]); } return newVal; } }; CheckListItem.prototype.viewHandlers.extendStyle = { /*** * * @param value * @param {Ref} ref */ set: function (value, ref) { this.removeStyle(ref.get() || {}); this._extendStyle = Object.assign({}, value || {}); this.addStyle(this._extendStyle); }, get: function () { return this._extendClasses; } }; CheckListItem.prototype.viewHandlers.noSelect = { set: function (value){ if (value) this.addClass('as-no-select'); else this.removeClass('as-no-select'); return value; } }; CheckListItem.prototype.viewHandlers.icon = { set: function (icon){ this.icon = icon; }, get: function (){ return this.icon; } } CheckListItem.eventHandler = {}; CheckListItem.eventHandler.clickText = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.$checkbox, event)) return; this.$checkbox.checked = !this.$checkbox.checked; this.emit('select', { target: this, type: 'select', originalEvent: event.originalEvent || event.originEvent || event, selected: this.selected }); }; CheckListItem.eventHandler.checkboxChange = function (event) { this.emit('select', { target: this, type: 'select', originalEvent: event.originalEvent || event.originEvent || event, selected: this.selected }); }; ACore["d" /* default */].install(CheckListItem); /* harmony default export */ var js_CheckListItem = (CheckListItem); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/checklistbox.css var checklistbox = __webpack_require__(253); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckListBox.js var CheckListBox_itemPool = []; function CheckListBox_makeItem() { return Object(ACore["c" /* _ */])({ tag: js_CheckListItem, on: { select: function (event) { this.$parent.eventHandler.itemSelect(this, event) } } }); } function CheckListBox_requireItem($parent) { var item; if (CheckListBox_itemPool.length > 0) { item = CheckListBox_itemPool.pop(); } else { item = CheckListBox_makeItem(); } item.$parent = $parent; return item; } function CheckListBox_releaseItem(item) { item.$parent = null; item.selected = false; CheckListBox_itemPool.push(item); } function fillItemToPage($parent, $page, n) { while ($page.childNodes.length > n) { CheckListBox_releaseItem($page.lastChild); $page.removeChild($page.lastChild); } while ($page.childNodes.length < n) { $page.addChild(CheckListBox_requireItem($parent)); } } var mTextMeasurement = null; var measureArial14TextWidth = text => { if (!mTextMeasurement) { mTextMeasurement = new tool_TextMeasurement(); mTextMeasurement.compute('14px arial'); } return mTextMeasurement.measureTextWidth(text, '14px arial'); } /*** * @extends SelectListBox * @constructor */ function CheckListBox() { this._items = []; this._valueDict = {}; this.itemHolders = []; this._holderDict = {}; this._estimateWidth = 100; this.widthLimit = calcWidthLimit(); this.addStyle('--as-width-limit', this.widthLimit + 'px'); this.$scroller = Object(ACore["a" /* $ */])('.as-select-list-box-scroller', this); this.$content = Object(ACore["a" /* $ */])('.as-select-list-box-content', this); this.$pages = Object(ACore["b" /* $$ */])('.as-select-list-box-page', this); this.$searchInput = Object(ACore["a" /* $ */])('searchtextinput', this).on('stoptyping', this.eventHandler.searchModify); this.pagingCtrl = new CLPagingController(this); this.searchMaster = new list_ListSearchMaster(); this._initDomHook(); this._initFooter(); this.domSignal.on('viewListAtValue', this.viewListAtValue.bind(this)); /*** * @name selectedAll * @type {boolean} * @memberOf CheckListBox# */ } CheckListBox.tag = 'CheckListBox'.toLowerCase(); CheckListBox.render = function () { return Object(ACore["c" /* _ */])({ tag: js_Follower.tag, extendEvent: ['change', 'cancel', 'close'], attr: { tabindex: 0 }, class: ['as-select-list-box', 'as-check-list-box'], child: [ { class: 'as-select-list-box-search-ctn', child: 'searchtextinput' }, { class: ['as-bscroller', 'as-select-list-box-scroller'], child: [ { class: 'as-select-list-box-content', child: Array(3).fill('.as-select-list-box-page') } ] }, { class: 'as-dropdown-box-footer', child: [ { tag: 'checkbox', class: 'as-select-list-box-check-all', props: { checked: false, text: HTML5_LanguageSystem.getText('txt_check_all') || HTML5_LanguageSystem.getText('txt_all') || 'Check All' } }, { class: 'as-dropdown-box-footer-right', child: [ { tag: 'a', class: 'as-select-list-box-cancel-btn', attr: { 'data-ml-key': 'txt_cancel' } }, { tag: 'a', class: 'as-select-list-box-close-btn', attr: { 'data-ml-key': 'txt_close' } }] } ] }, 'attachhook.as-dom-signal' ], props: { anchor: [1, 6, 2, 5] } }); }; Object.assign(CheckListBox.prototype, js_SelectListBox.prototype); CheckListBox.property = {}; CheckListBox.eventHandler = {}; CheckListBox.prototype.footerMinWidth = 110; CheckListBox.prototype._initDomHook = function () { this.$domSignal = Object(ACore["a" /* $ */])('attachhook.as-dom-signal', this); this.domSignal = new DomSignal["a" /* default */](this.$domSignal); this.domSignal.on('viewListAt', this.viewListAt.bind(this)); this.domSignal.on('viewListAtFirstSelected', this.viewListAtFirstSelected.bind(this)); this.domSignal.on('viewListAtCurrentScrollTop', this.viewListAtCurrentScrollTop.bind(this)); this.domSignal.on('updateCheckedAll', () => { this.$checkAll.checked = this.selectedAll; }); }; CheckListBox.prototype._initFooter = function () { this.$checkAll = Object(ACore["a" /* $ */])('.as-select-list-box-check-all', this) .on('change', this.eventHandler.checkAllChange); this.$cancelBtn = Object(ACore["a" /* $ */])('.as-select-list-box-cancel-btn', this) .on('click', this.eventHandler.clickCancelBtn); this.$closeBtn = Object(ACore["a" /* $ */])('.as-select-list-box-close-btn', this); if (this.$closeBtn)//mobile ref this.$closeBtn.on('click', this.eventHandler.clickCloseBtn); }; CheckListBox.prototype.viewListAtFirstSelected = noop; CheckListBox.prototype.viewListAtValue = function (value) { if (!this.isDescendantOf(document.body)) { this.domSignal.emit('viewListAtValue', value); } this.pagingCtrl.viewListAtValue(value); }; CheckListBox.prototype.findItemsByValue = function (value) { return this._holderDict[keyStringOf(value)]; } CheckListBox.prototype.notifyChange = function (data) { this.emit('change', Object.assign({ target: this, type: 'change' }, data), this); } CheckListBox.prototype.focus = js_SelectListBox.prototype.focus; CheckListBox.property.values = { set: function (values) { values = values || []; var dict = values.reduce((ac, cr) => { var key = keyStringOf(cr); ac[key] = cr; return ac; }, {}); this._valueDict = dict; this.itemHolders.forEach(function visit(holder) { holder.selected = (holder.valueKey in dict); if (holder.children) holder.children.forEach(visit); }); this.pagingCtrl.updateSelected(); this.domSignal.emit('updateCheckedAll'); }, get: function () { return this.itemHolders.reduce(function visit(ac, holder) { if (holder.selected && !holder.data.noSelect) ac.push(holder.data.value); if (holder.children) holder.children.reduce(visit, ac); return ac; }, []); } }; CheckListBox.prototype.resetSearchState = function () { this.$searchInput.value = ''; this.pagingCtrl.viewArr(this.itemHolders); }; CheckListBox.property.enableSearch = js_SelectListBox.property.enableSearch; CheckListBox.property.items = { set: function (items) { items = items || []; items = copySelectionItemArray(items, { removeNoView: true, removeNewLine: true }); this._items = items; this.itemHolders = items.map(it => new CLHolder(this, it)); var res = this.itemHolders.reduce(function visit(ac, cr) { var textWidth = 3.5 * 14 + 1.75 * 14 * cr.level + 14 + measureArial14TextWidth(cr.data.text + '') + 7 + 17 if (cr.data.icon) textWidth += 32; ac.textWidth = Math.max(ac.textWidth, textWidth); if (cr.data.desc) { ac.descWidth = Math.max(ac.descWidth, measureArial14TextWidth(cr.data.desc + '')); } ac.dict[cr.valueKey] = ac.dict[cr.valueKey] || []; ac.dict[cr.valueKey].push({ idx: ac.idx++, item: cr.data, holder: cr }); if (cr.children) cr.children.reduce(visit, ac); return ac; }, { idx: 0, dict: {}, textWidth: 50, descWidth: 0 }); this._holderDict = res.dict; this._estimateWidth = Math.min(this.widthLimit || Infinity, res.textWidth + (res.descWidth ? res.descWidth + 30 : 0)); this.$scroller.scrollTop = 0; this.pagingCtrl.viewArr(this.itemHolders); this.searchMaster.transfer(this.itemHolders.map(it => it.getSearchItem())); this.domSignal.emit('updateCheckedAll'); }, get: function () { return copySelectionItemArray(this._items); } }; CheckListBox.property.selectedAll = { get: function () { return this.itemHolders.length > 0 && this.itemHolders.every(function visit(holder) { var res = holder.selected || holder.data.noSelect; if (res && holder.children) { res = holder.children.every(visit); } return res; }); } }; /*** * @this CheckListBox * @param event */ CheckListBox.eventHandler.checkAllChange = function (event) { var checked = this.$checkAll.checked; var changed = false; var visit = (holder) => { var canCheck = checked && !holder.data.noSelect; if (holder.selected !== canCheck) { changed = true; holder.selected = canCheck; } if (canCheck) { this._valueDict[holder.valueKey] = holder.data.value; } else { delete this._valueDict[holder.valueKey]; } if (holder.children) holder.children.forEach(visit); } this.itemHolders.forEach(visit); this.pagingCtrl.updateSelected(); if (changed) { this.notifyChange({ originalEvent: event.originalEvent || event.originEvent || event, action: checked ? 'check_all' : "uncheck_all" }, this); } }; /*** * @this CheckListBox * @param itemElt * @param event */ CheckListBox.eventHandler.itemSelect = function (itemElt, event) { var selected = itemElt.selected; var holder = itemElt.clHolder; holder.selected = selected; if (selected) { this._valueDict[holder.valueKey] = holder.data.value; } else { delete this._valueDict[holder.valueKey]; } this.notifyChange({ originalEvent: event.originalEvent || event.originEvent || event, action: selected ? 'check' : 'uncheck', value: holder.data.value, itemData: holder.data }); this.domSignal.emit('updateCheckedAll'); }; /*** * @this CheckListBox * @param event */ CheckListBox.eventHandler.clickCancelBtn = function (event) { this.emit('cancel', { type: 'cancel', target: this, originalEvent: event }, this); }; /*** * @this CheckListBox * @param event */ CheckListBox.eventHandler.clickCloseBtn = function (event) { this.emit('close', { type: 'close', target: this, originalEvent: event }, this); }; /** * @this {CheckListBox} */ CheckListBox.eventHandler.searchModify = function () { var text = this.$searchInput.value; if (text) { this.searchMaster.query({ text: text }).then(result => { if (text !== this.$searchInput.value) return; var arr = this.itemHolders.filter(it => !!result[it.id]); arr.sort((a, b) => result[b.id][1] - result[a.id][1]); var searchHolders = arr.map(holder => new CLHolderRef(this, holder, null, result)); this.$scroller.scrollTop = 0; this.pagingCtrl.viewArr(searchHolders); ResizeSystem["a" /* default */].update(); }); } else { this.pagingCtrl.viewArr(this.itemHolders.reduce((ac, holder) => holder.toArray(ac), [])); ResizeSystem["a" /* default */].update(); } }; ACore["d" /* default */].install(CheckListBox); function CLHolder(boxElt, data, parent) { this.id = randomIdent(8); this.parent = parent; this.level = parent ? parent.level + 1 : 0; this.boxElt = boxElt; this.data = data; this.valueKey = keyStringOf(data.value); this.itemElt = null; this.children = null; this.selected = this.valueKey in boxElt._valueDict; if (data.items && data.items.length > 0) { this.children = data.items.map(it => new CLHolder(boxElt, it, this)); } } CLHolder.prototype.toArray = function (ac) { ac = ac || []; ac.push(this); if (this.children) this.children.reduce((ac, holder) => holder.toArray(ac), ac); return ac; } CLHolder.prototype.attachView = function (itemElt) { if (itemElt.clHolder) itemElt.clHolder.detachView(); if (!this.textLength) this.textLength = measureText(this.data.text + '', '14px arial').width; if (this.textLength > this.boxElt.widthLimit - (0.7 + 2.5) * 14) { itemElt.attr('title', this.data.text); } itemElt.clHolder = this; this.itemElt = itemElt; itemElt.data = this.data; itemElt.level = this.level; itemElt.selected = this.selected; }; CLHolder.prototype.detachView = function () { if (this.itemElt) { this.itemElt.attr('title', null); this.itemElt.clHolder = null; this.itemElt = null; } }; CLHolder.prototype.getSearchItem = function () { var res = { value: this.id }; res.text = this.data.text + ''; if (this.data.desc) res.text += '/' + this.data.desc; if (this.children) res.items = this.children.map(c => c.getSearchItem()) return res; }; function CLHolderRef(boxElt, origin, parent, result) { this.boxElt = boxElt; this.origin = origin; this.data = origin.data; this.parent = parent; this.level = origin.level; OOP["a" /* default */].drillProperty(this, origin, 'selected'); var arr, children; if (origin.children) { arr = origin.children.filter(it => !!result[it.id]); arr.sort((a, b) => result[b.id][1] - result[a.id][1]); children = arr.map(holder => new CLHolderRef(boxElt, holder, this, result)); if (children.length > 0) this.children = children; } } OOP["a" /* default */].mixClass(CLHolderRef, CLHolder); /*** * * @param {CheckListBox} boxElt * @constructor */ function CLPagingController(boxElt) { this.boxElt = boxElt; this.$pages = boxElt.$pages; this.$content = boxElt.$content; this.$scroller = boxElt.$scroller.on('scroll', this.ev_scroll.bind(this)); this.itemPerPage = Math.ceil(Object(Dom["d" /* getScreenSize */])().height / this.itemHeight * 2); this.holderArr = []; this.holderDict = {}; } CLPagingController.prototype.itemHeight = 30; CLPagingController.prototype.ev_scroll = function (event) { if (this.pageN <= 2) return; var top = this.$scroller.scrollTop; var pageIdx = Math.min(this.pageN - 1, Math.max(0, Math.floor(top / this.itemHeight / this.itemPerPage))); if (pageIdx === this.pageIdx) return; if (pageIdx === this.pageIdx - 1) { this.pageIdx = pageIdx; this.$pages.unshift(this.$pages.pop()); if (pageIdx > 0) { this.$pages[0].removeStyle('display').addStyle('top', (pageIdx - 1) * this.itemPerPage * this.itemHeight + 'px'); fillItemToPage(this.boxElt, this.$pages[0], this.itemPerPage); Array.prototype.forEach.call(this.$pages[0].childNodes, (elt, i) => this.holderArr[(pageIdx - 1) * this.itemPerPage + i].attachView(elt)); } else { this.$pages[0].addStyle('display', 'none'); } } else if (pageIdx === this.pageIdx + 1) { this.pageIdx = pageIdx; this.$pages.push(this.$pages.shift()); if (pageIdx + 1 < this.pageN) { this.$pages[2].removeStyle('display').addStyle('top', (pageIdx + 1) * this.itemPerPage * this.itemHeight + 'px'); fillItemToPage(this.boxElt, this.$pages[2], Math.min(this.itemPerPage, this.holderArr.length - this.itemPerPage * (pageIdx + 1))); Array.prototype.forEach.call(this.$pages[2].childNodes, (elt, i) => this.holderArr[(pageIdx + 1) * this.itemPerPage + i].attachView(elt)); } else { this.$pages[2].addStyle('display', 'none'); } } else { this.update(); } }; CLPagingController.prototype.update = function () { var top = this.$content.scrollTop; var pageIdx = Math.floor(top / this.itemHeight / this.itemPerPage); this.pageIdx = pageIdx; var ii = (pageIdx - 1) * this.itemPerPage; var pageElt; var itemInPage; for (var pi = 0; pi < 3; ++pi) { pageElt = this.$pages[pi]; if (ii < 0 || ii >= this.holderArr.length) { ii += this.itemPerPage; pageElt.addStyle('display', 'none'); } else { itemInPage = Math.min(this.itemPerPage, this.holderArr.length - ii); fillItemToPage(this.boxElt, pageElt, itemInPage); pageElt.removeStyle('display').addStyle('top', this.itemHeight * ii + 'px'); Array.prototype.forEach.call(pageElt.childNodes, (child, i) => { this.holderArr[ii].attachView(child); ii++; }); } } }; CLPagingController.prototype.viewListAtValue = function (value) { var idx = this.holderDict[keyStringOf(value)]; if (idx === undefined) return; var bound = this.$scroller.getBoundingClientRect(); var y = idx * this.itemHeight; var maxY = this.holderArr.length * this.itemHeight - bound.height; this.$scroller.scrollTop = Math.min(maxY, y); }; CLPagingController.prototype.viewArr = function (itemHolders) { this.holderArr = itemHolders.reduce((ac, holder) => holder.toArray(ac), []); this.holderDict = this.holderArr.reduce((ac, cr, idx) => { ac[cr.valueKey] = idx; return ac; }, {}); this.pageN = Math.ceil(this.holderArr.length / this.itemPerPage); this.$content.addStyle('height', this.holderArr.length * this.itemHeight + 'px'); this.update(); }; CLPagingController.prototype.updateSelected = function () { this.$pages.forEach(pageElt => { Array.prototype.forEach.call(pageElt.childNodes, itemElt => { if (itemElt.clHolder) itemElt.selected = itemElt.clHolder.selected; }); }); }; /**********************************************************************************************************************/ /*** * @extends SelectListBox * @constructor */ function CheckListBoxV1() { this._initDomHook(); this._initControl(); this._initScroller(); this._initFooter(); this._initProperty(); this.domSignal.on('viewListAtValue', this.viewListAtValue.bind(this)); } CheckListBoxV1.tag = 'CheckListBox'.toLowerCase(); CheckListBoxV1.render = function () { return Object(ACore["c" /* _ */])({ tag: js_Follower.tag, extendEvent: ['change', 'cancel', 'close'], attr: { tabindex: 0 }, class: ['as-select-list-box', 'as-check-list-box'], child: [ { class: 'as-select-list-box-search-ctn', child: 'searchtextinput' }, { class: ['as-bscroller', 'as-select-list-box-scroller'], child: [ { class: 'as-select-list-box-content', child: Array(this.prototype.preLoadN).fill('.as-select-list-box-page') } ] }, { class: 'as-dropdown-box-footer', child: [ { tag: 'checkbox', class: 'as-select-list-box-check-all', props: { checked: false, text: HTML5_LanguageSystem.getText('txt_check_all') || HTML5_LanguageSystem.getText('txt_all') || 'Check All' } }, { class: 'as-dropdown-box-footer-right', child: [ { tag: 'a', class: 'as-select-list-box-cancel-btn', attr: { 'data-ml-key': 'txt_cancel' } }, { tag: 'a', class: 'as-select-list-box-close-btn', attr: { 'data-ml-key': 'txt_close' } }] } ] }, 'attachhook.as-dom-signal' ], props: { anchor: [1, 6, 2, 5] } }); }; Object.assign(CheckListBoxV1.prototype, js_SelectListBox.prototype); CheckListBoxV1.property = Object.assign({}, js_SelectListBox.property); CheckListBoxV1.eventHandler = Object.assign({}, js_SelectListBox.eventHandler); CheckListBoxV1.prototype.itemHeightMode = [25, 30]; CheckListBoxV1.prototype.itemHeight = 25; CheckListBoxV1.prototype.footerMinWidth = 110; CheckListBoxV1.prototype._initFooter = function () { this.$checkAll = Object(ACore["a" /* $ */])('.as-select-list-box-check-all', this) .on('change', this.eventHandler.checkAllChange); this.$cancelBtn = Object(ACore["a" /* $ */])('.as-select-list-box-cancel-btn', this) .on('click', this.eventHandler.clickCancelBtn); this.$closeBtn = Object(ACore["a" /* $ */])('.as-select-list-box-close-btn', this); if (this.$closeBtn)//mobile ref this.$closeBtn.on('click', this.eventHandler.clickCloseBtn); }; CheckListBoxV1.prototype._requireItem = function (pageElt, n) { var itemElt; while (pageElt.childNodes.length > n) { itemElt = pageElt.lastChild; itemElt.selfRemove(); CheckListBox_releaseItem(itemElt); } while (pageElt.childNodes.length < n) { itemElt = CheckListBox_requireItem(this); pageElt.addChild(itemElt); } }; CheckListBoxV1.prototype.viewListAtFirstSelected = noop; CheckListBoxV1.prototype.viewListAtValue = function (value) { if (!this.isDescendantOf(document.body)) { this.domSignal.emit('viewListAtValue', value); return; } if (this._displayValue == VALUE_HIDDEN) { return false; } var itemHolders = this._displayItemHolderByValue[value + '']; if (itemHolders) { this.domSignal.once('scrollIntoValue', function () { var holder = itemHolders[0]; this.viewListAt(holder.idx); var itemElt = Object(ACore["a" /* $ */])('.as-check-list-item', this.$listScroller, function (elt) { return elt.value === value; }); if (itemElt) { var scrollBound = this.$listScroller.getBoundingClientRect(); var itemBound = itemElt.getBoundingClientRect(); this.$listScroller.scrollTop += itemBound.top - scrollBound.top; } }.bind(this)); this.domSignal.emit('scrollIntoValue'); return true; } else return false; }; CheckListBoxV1.prototype.focus = js_SelectListBox.prototype.focus; CheckListBoxV1.property.values = { set: function (value) { js_SelectListBox.property.values.set.apply(this, arguments); this.$checkAll.checked = this._values.length === this.items.length; }, get: js_SelectListBox.property.values.get }; /*** * @this CheckListBoxV1 * @param event */ CheckListBoxV1.eventHandler.checkAllChange = function (event) { var checked = this.$checkAll.checked; if (checked) { this._values = this.items.map(function (cr) { return typeof cr === "object" ? cr.value : cr; }); this._valueDict = this._values.reduce(function (ac, value) { ac[value + ''] = true; return ac; }, {}); } else { this._values = []; this._valueDict = {}; } this._updateSelectedItem(); this.emit('change', { target: this, type: 'change', originalEvent: event.originalEvent || event.originEvent || event, action: checked ? 'check_all' : "uncheck_all" }, this); }; /*** * @this CheckListBoxV1 * @param itemElt * @param event */ CheckListBoxV1.eventHandler.itemSelect = function (itemElt, event) { var selected = itemElt.selected; var value = itemElt.value; var itemData = itemElt.data; var idx; if (selected) { this._values.push(value); this._valueDict[value + ''] = true; } else { idx = this._values.indexOf(value); delete this._valueDict[value + '']; if (idx >= 0) { this._values.splice(idx, 1); } else { console.error("Violation data"); } } this.emit('change', { target: this, type: 'change', originalEvent: event.originalEvent || event.originEvent || event, action: selected ? 'check' : 'uncheck', value: value, itemData: itemData }, this); }; /*** * @this CheckListBoxV1 * @param event */ CheckListBoxV1.eventHandler.clickCancelBtn = function (event) { this.emit('cancel', { type: 'cancel', target: this, originalEvent: event }, this); }; /*** * @this CheckListBoxV1 * @param event */ CheckListBoxV1.eventHandler.clickCloseBtn = function (event) { this.emit('close', { type: 'close', target: this, originalEvent: event }, this); }; ACore["d" /* default */].install(CheckListBoxV1); /* harmony default export */ var js_CheckListBox = (CheckListBoxV1); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiCheckMenu.js /*** * @extends MultiSelectMenu * @constructor */ function MultiCheckMenu() { this.addClass('as-multi-check-menu'); this.on('click', this.eventHandler.click); /*** * @type {CheckListBox} */ this.$selectlistBox = Object(ACore["c" /* _ */])({ tag: CheckListBox,//use new version props: { anchor: [1, 6, 2, 5] }, on: { preupdateposition: this.eventHandler.preUpdateListPosition, change: this.eventHandler.selectListBoxChange, cancel: this.eventHandler.selectListBoxCancel, close: this.eventHandler.selectListBoxClose } }); this.addStyle('--as-width-limit', this.$selectlistBox.widthLimit + 'px'); this.$itemCtn = Object(ACore["a" /* $ */])('.as-multi-select-menu-item-ctn', this); this.$attachhook = Object(ACore["a" /* $ */])('attachhook', this) .on('attached', this.eventHandler.attached); this.$attachhook.requestUpdateSize = this.updateSize.bind(this); OOP["a" /* default */].drillProperty(this, this.$selectlistBox, 'enableSearch'); this._isFocus = false; this.$items = []; this._tempValues = []; this._values = []; this.items = []; this.values = []; this.$selectlistBox.followTarget = this; this.$selectlistBox.sponsorElement = this; this.disableClickToFocus = false; this.orderly = true; this.itemFocusable = false; this._activeValue = undefined; } MultiCheckMenu.tag = 'MultiCheckMenu'.toLowerCase(); MultiCheckMenu.render = js_MultiSelectMenu.render; Object.assign(MultiCheckMenu.prototype, js_MultiSelectMenu.prototype); MultiCheckMenu.property = Object.assign({}, js_MultiSelectMenu.property); MultiCheckMenu.eventHandler = Object.assign({}, js_MultiSelectMenu.eventHandler); MultiCheckMenu.prototype.updateSize = function () { var bound; if (this._isFocus) { bound = this.getBoundingClientRect(); this.$selectlistBox.addStyle('min-width', Math.max(bound.width, this.$selectlistBox.getFontSize() * 15.5) + 'px'); this.$selectlistBox.refollow(); this.$selectlistBox.updatePosition(); } }; MultiCheckMenu.prototype.findItemsByValue = function (value) { return this.$selectlistBox.findItemsByValue(value); }; MultiCheckMenu.eventHandler.click = function (event) { if (this.disabled) return; if ((event.target === this || event.target === this.$itemCtn) && !this.isFocus && !this.readOnly) { this.isFocus = true; } }; MultiCheckMenu.eventHandler.bodyClick = function (event) { var isRemovedItem = !AElement["a" /* default */].prototype.isDescendantOf.call(event.target, document.body) && (event.target.classList.contains('absol-selectbox-item-close') || (event.target.parentElement && event.target.parentElement.classList.contains('absol-selectbox-item-close'))); if (this.isFocus && !EventEmitter["b" /* default */].hitElement(this.$selectlistBox, event) && (!isRemovedItem) && (!Object(EventEmitter["d" /* hitElement */])(this.$itemCtn, event) || event.target === this.$itemCtn) ) { this.eventHandler.selectListBoxPressItem(event);//to notify something remove, add this.isFocus = false; } }; MultiCheckMenu.eventHandler.selectListBoxChange = function (event) { var idx; switch (event.action) { case 'check': idx = this._tempValues.indexOf(event.value); if (idx < 0) { this._tempValues.push(event.value); } break; case 'uncheck': idx = this._tempValues.indexOf(event.value); if (idx >= 0) { this._tempValues.splice(idx, 1); } break; case 'check_all': this._tempValues = this.$selectlistBox.values; break; case 'uncheck_all': this._tempValues = []; break; } setTimeout(function () { this.viewItemsByValues(this._tempValues); var bound = this.getBoundingClientRect(); this.$selectlistBox.addStyle('min-width', Math.max(bound.width, this.$selectlistBox.getFontSize() * 15.5) + 'px'); this.$selectlistBox.refollow(); this.$selectlistBox.updatePosition(); ResizeSystem["a" /* default */].requestUpdateSignal(); }.bind(this), 1); }; MultiCheckMenu.eventHandler.selectListBoxCancel = function (event) { this.viewItemsByValues(this._values); this.isFocus = false; this.$selectlistBox.values = this._values; }; MultiCheckMenu.eventHandler.selectListBoxClose = function (event) { this.eventHandler.selectListBoxPressItem(event);//to notify something remove, add this.isFocus = false; }; MultiCheckMenu.property.isFocus = { set: function (value) { if (value && (this.disabled || this.readOnly)) return; if (!this._isFocus && value) { this._tempValues = this._values.slice(); this.$selectlistBox.values = this._values; this.activeValue = null; } var thisSM = this; if (!this.items || this.items.length === 0) value = false;//prevent focus if (this._isFocus === value) return; this._isFocus = !!value; if (this._isFocus) { thisSM.off('click', this.eventHandler.click); document.body.appendChild(this.$selectlistBox); this.$selectlistBox.domSignal.$attachhook.emit('attached'); var bound = this.getBoundingClientRect(); this.$selectlistBox.addStyle('min-width', Math.max(bound.width, this.$selectlistBox.getFontSize() * 15.5) + 'px'); this.$selectlistBox.refollow(); this.$selectlistBox.updatePosition(); setTimeout(function () { thisSM.$selectlistBox.focus(); document.addEventListener('mousedown', thisSM.eventHandler.bodyClick); }, 100); this.$selectlistBox.viewListAtFirstSelected(); } else { document.removeEventListener('mousedown', thisSM.eventHandler.bodyClick); document.addEventListener('mouseup', function mup() { setTimeout(function () { thisSM.on('click', thisSM.eventHandler.click); document.removeEventListener('mouseup', mup); }, 5); }); this.$selectlistBox.selfRemove(); this.$selectlistBox.unfollow(); this.$selectlistBox.resetSearchState(); } }, get: js_MultiSelectMenu.property.isFocus.get }; MultiCheckMenu.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } }, get: function () { return this.hasClass('as-read-only'); } } /*** * call after close checklistbox * @param event */ MultiCheckMenu.eventHandler.selectListBoxPressItem = function (event) { var prevValues = this._values; var prevDict = prevValues.reduce(function (ac, cr) { ac[cr + ''] = cr; return ac; }, {}); this.$selectlistBox.updatePosition(); var curValues = this.$selectlistBox.values; var changed = false; var curDict = curValues.reduce(function (ac, cr) { ac[cr + ''] = cr; return ac; }, {}); this._values = curValues.slice(); prevValues.forEach(function (value) { if ((value + '') in curDict) return; var holders = this.$selectlistBox.findItemsByValue(value); if (!holders || holders.length === 0) return; var item = holders[0].item; this.emit('remove', Object.assign({}, event, { type: 'remove', target: this, value: item.value, data: item, itemData: item }), this); changed = true; }.bind(this)); curValues.forEach(function (value) { if ((value + '') in prevDict) return; var holders = this.$selectlistBox.findItemsByValue(value); if (!holders || holders.length === 0) return; var item = holders[0].item; this.emit('add', Object.assign({}, event, { type: 'add', target: this, value: item.value, data: item, itemData: item }), this); changed = true; }.bind(this)); this._updateItems(); this.isFocus = false; if (changed) this.emit('change', Object.assign({}, event, { type: 'change', action: 'submit', target: this, values: this.values }), this); }; MultiCheckMenu.eventHandler.pressCloseItem = function (item, event) { var value = item.value; var data = item.data; var currentValues; var index; if (this.isFocus) { currentValues = this.$selectlistBox.values; index = currentValues.indexOf(value); if (index >= 0) { currentValues.splice(index, 1); } this.$selectlistBox.values = currentValues; this.$selectlistBox.updatePosition(); this.viewItemsByValues(this.$selectlistBox.values); ResizeSystem["a" /* default */].requestUpdateSignal(); } else { index = this._values.indexOf(value); if (index >= 0) { this._values.splice(index, 1); this._updateItems(); this.emit('remove', Object.assign({}, event, { type: 'change', target: this, data: data, value: value, itemData: data }), this); this.emit('change', Object.assign({}, event, { type: 'change', action: 'remove', target: this, data: data, value: value, itemData: data }), this); } } }; MultiCheckMenu.eventHandler.pressItem = function (item, event) { var value = item.value; if (this.itemFocusable && !this.isFocus) { var prevActiveValue = this.activeValue; if (value !== prevActiveValue) { this.activeValue = value; this.emit('activevaluechange', { target: this, originEvent: event, prevActiveValue: prevActiveValue, activeValue: value }, this); } } else if (this.isFocus) { this.$selectlistBox.viewListAtValue(value); } }; ACore["d" /* default */].install(MultiCheckMenu); /* harmony default export */ var js_MultiCheckMenu = (MultiCheckMenu); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/chrometime24picker.css var chrometime24picker = __webpack_require__(255); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ChromeTime24Picker.js /** * * @param {number} leftOffset */ function calcMinHMTime(leftOffset) { var h = Math.floor(leftOffset / MILLIS_PER_HOUR); var m = Math.floor(leftOffset / MILLIS_PER_MINUTE) % 60; if (leftOffset % MILLIS_PER_MINUTE > 0) { if (m === 59) { h++; m = 0; } else { m++; } } var offset = h * MILLIS_PER_HOUR + m * MILLIS_PER_MINUTE; return { m: m, h: h, offset: offset }; } /*** * @extends AElement * @constructor */ function ChromeTime24Picker() { this.$lists = Object(ACore["b" /* $$ */])('.as-chrome-time-picker-list', this); Object(ACore["b" /* $$ */])('.as-chrome-time-picker-scroller', this).forEach(js_ChromeTimePicker.prototype._makeScroller.bind(this)); this.$hours = Object(ACore["b" /* $$ */])('.as-chrome-time-picker-h24 .as-chrome-time-picker-btn', this); this.$minutes = Object(ACore["b" /* $$ */])('.as-chrome-time-picker-m60 .as-chrome-time-picker-btn', this); this.$lists[0].on('click', this.eventHandler.clickHour24List); this.$lists[1].on('click', this.eventHandler.clickMinList); this.$domSignal = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](this.$attachhook); this.domSignal.on('scrollToSelectedMinute', this._scrollToSelectedMinute.bind(this)) .on('scrollToSelectedHour', this._scrollToSelectedHour.bind(this)); this._dayOffset = 0; this._value = 0; this.dayOffset = new Date(); this.value = 2 * MILLIS_PER_MINUTE; } ChromeTime24Picker.tag = 'ChromeTime24Picker'.toLowerCase(); ChromeTime24Picker.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: 'change', class: ['as-chrome-time-24-picker', 'as-chrome-time-picker'], child: [ { class: ['as-chrome-time-picker-scroller', 'as-chrome-time-24-picker-hour'], child: [ { tag: 'button', class: 'as-chrome-time-picker-scroller-up', child: 'span.mdi.mdi-chevron-up' }, { tag: 'button', class: 'as-chrome-time-picker-scroller-down', child: 'span.mdi.mdi-chevron-down' }, { class: ['as-chrome-time-picker-viewport', 'as-chrome-time-picker-h24'], child: { class: 'as-chrome-time-picker-list', child: Array(24).fill(0).map(function (u, i) { return { tag: 'button', class: 'as-chrome-time-picker-btn', child: [ { tag: 'span', child: { text: i + '' } }, { tag: 'span', class: 'as-chrome-time-24-picker-tomorrow-text', child: { text: ' (Hôm sau)' } } ], props: { __hour__: i } } }) } } ] }, { class: 'as-chrome-time-picker-scroller', child: [ { tag: 'button', class: 'as-chrome-time-picker-scroller-up', child: 'span.mdi.mdi-chevron-up' }, { tag: 'button', class: 'as-chrome-time-picker-scroller-down', child: 'span.mdi.mdi-chevron-down' }, { class: ['as-chrome-time-picker-viewport', 'as-chrome-time-picker-m60'], child: { class: 'as-chrome-time-picker-list', child: Array(60).fill(0).map(function (u, i) { return { tag: 'button', class: 'as-chrome-time-picker-btn', child: { tag: 'span', child: { text: i + '' } }, props: { __min__: i } } }) } } ] } ] }); }; ChromeTime24Picker.prototype._updateHourNumbers = function () { var mH = calcMinHMTime(this.dayOffset).h; for (var i = 0; i < this.$hours.length; ++i) { this.$hours[i].firstChild.firstChild.data = (mH + i) % 24; if (mH + i >= 24) { this.$hours[i].addClass('as-in-tomorrow'); } else { this.$hours[i].removeClass('as-in-tomorrow'); } } }; ChromeTime24Picker.prototype._updateMinuteNumbers = function () { var minHM = calcMinHMTime(this.dayOffset); var h = minHM.h; var m = minHM.m; var vH = Math.floor((this.dayOffset + this.value) / MILLIS_PER_HOUR); for (var i = 0; i < this.$minutes.length; ++i) { if (vH === h && i < m) { this.$minutes[i].disabled = true; } else { this.$minutes[i].disabled = false; } } }; ChromeTime24Picker.prototype._updateSelectedHour = function () { var h = Math.floor(this.dayOffset / MILLIS_PER_HOUR); var vH = Math.floor((this.dayOffset + this.value) / MILLIS_PER_HOUR); var d = vH - h; for (var i = 0; i < this.$hours.length; ++i) { if (i === d) { this.$hours[i].addClass('as-selected'); this.$selectedHour = this.$hours[i]; } else { this.$hours[i].removeClass('as-selected'); } } this._scrollToSelectedHour(); }; ChromeTime24Picker.prototype._updateSelectedMinute = function () { var vM = Math.floor((this.dayOffset + this.value) / MILLIS_PER_MINUTE) % 60; for (var i = 0; i < this.$minutes.length; ++i) { if (vM === i) { this.$minutes[i].addClass('as-selected'); this.$selectedMinute = this.$minutes[i]; } else { this.$minutes[i].removeClass('as-selected'); } } this._scrollToSelectedMinute(); }; ChromeTime24Picker.prototype._update = function () { this._updateHourNumbers(); this._updateMinuteNumbers(); this._updateSelectedHour(); this._updateSelectedMinute(); }; ChromeTime24Picker.prototype._scrollToSelectedHour = function () { if (this.isDescendantOf(document.body)) { if (this.$selectedHour) { vScrollIntoView(this.$selectedHour); } } else { this.domSignal.emit('scrollToSelectedHour'); } }; ChromeTime24Picker.prototype._scrollToSelectedMinute = function () { if (this.isDescendantOf(document.body)) { if (this.$selectedMinute) { vScrollIntoView(this.$selectedMinute); } } else { this.domSignal.emit('scrollToSelectedMinute'); } }; ChromeTime24Picker.prototype.notifyChange = function () { this.emit('change', { type: 'change' }, this); }; ChromeTime24Picker.property = {}; ChromeTime24Picker.property.dayOffset = { /*** * * @param {number|Date} value */ set: function (value) { if (typeof value === "number") { value = Math.max(0, value % MILLIS_PER_DAY);//10p } else if (value instanceof Date) { value = Math.max(0, (value.getTime() - beginOfDay(value).getTime()) % MILLIS_PER_DAY); } else value = 0; this._dayOffset = value; this._update(); }, get: function () { return this._dayOffset; } }; ChromeTime24Picker.property.value = { /*** * @this ChromeTime24Picker * @param value */ set: function (value) { this._value = value; this._update(); }, get: function () { return this._value; } }; ChromeTime24Picker.property.hour = { get: function () { return Math.floor((this.dayOffset + this.value) / MILLIS_PER_HOUR); } }; ChromeTime24Picker.property.minute = { get: function () { return Math.floor((this.dayOffset + this.value) / MILLIS_PER_MINUTE) % 60; } }; ChromeTime24Picker.eventHandler = {}; ChromeTime24Picker.eventHandler.clickHour24List = function (event) { var minHM = calcMinHMTime(this.dayOffset); var h = minHM.h; var vM = Math.floor((this.dayOffset + this.value) / MILLIS_PER_MINUTE) % 60; var hour; var minChanged = false; var prevValue = this._value; if ('__hour__' in event.target) hour = event.target.__hour__; if ('__hour__' in event.target.parentElement) hour = event.target.parentElement.__hour__; if (hour !== undefined) { if (hour === 0 && minHM.m > vM) { vM = minHM.m; minChanged = true; } this._value = (h + hour) * MILLIS_PER_HOUR + vM * MILLIS_PER_MINUTE - this.dayOffset; this._updateSelectedHour(); this._updateMinuteNumbers(); if (minChanged) this._updateSelectedMinute(); if (prevValue !== this._value) this.notifyChange(event); } }; ChromeTime24Picker.eventHandler.clickMinList = function (event) { var vH = Math.floor((this.dayOffset + this.value) / MILLIS_PER_HOUR); var min; var prevValue = this._value; if ('__min__' in event.target) min = event.target.__min__; if ('__min__' in event.target.parentElement) min = event.target.parentElement.__min__; if (min !== undefined) { this._value = vH * MILLIS_PER_HOUR + min * MILLIS_PER_MINUTE - this.dayOffset; this._updateSelectedMinute(); this.notifyChange(event); if (prevValue !== this._value) this.notifyChange(event); } }; ACore["d" /* default */].install(ChromeTime24Picker); /* harmony default export */ var js_ChromeTime24Picker = (ChromeTime24Picker); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/Time24Input.js /** * @extends AElement * @constructor */ function Time24Input() { this.$attachook = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](this.$attachook); this.$clockBtn = Object(ACore["a" /* $ */])('.as-time-input-icon-btn', this) this.$text = Object(ACore["a" /* $ */])('.as-time-input-text', this); this.$clearBtn = Object(ACore["a" /* $ */])('button.as-time-input-clear-btn', this) .on('click', this.clear.bind(this)); this._hour = 0; this._minute = 0; this._dayOffset = 0; this._format = 'HH:mm'; this._firedValue = 'NOT_FIRED'; this.textCtrl = new T24ITextController(this); this.notNull = true; this.dropdownCtn = new T24DropdownController(this); /** * @type {string} * @name format * @memberof Time24Input# */ /** * @type {number|null} * @name hour * @memberof Time24Input# */ /** * @type {number|null} * @name minute * @memberof Time24Input# */ /** * @type {number} always is a number, set dayOffset, keep value * @name dayOffset * @memberof Time24Input# */ /** * computed from other * @type {number|null} * @name value * @memberof Time24Input# */ } Time24Input.tag = 'Time24Input'.toLowerCase(); Time24Input.prototype.nextDateText = ' (Hôm sau)'; Time24Input.render = function () { return Object(ACore["c" /* _ */])({ class: ['ac-time-input', 'as-time-24-input'], extendEvent: ['change'], child: [ { tag: 'input', class: 'as-time-input-text', attr: { type: 'text', spellcheck: "false" } }, { tag: 'button', class: 'as-time-input-clear-btn', child: 'span.mdi.mdi-close-circle' }, { tag: 'button', class: 'as-time-input-icon-btn', child: 'span.mdi.mdi-clock-outline' } ] }); }; Time24Input.prototype._notifyChange = function (event) { this._firedValue = this.value; this.emit('change', { type: 'change', originalEvent: (event && (event.originalEvent || event.originEvent)) || event }, this); }; Time24Input.prototype.notifyIfChange = function () { if (this._firedValue !== this.value) { this._notifyChange(); } }; Time24Input.prototype.clear = function (event) { if (this.value !== null && !this.notNull) { this.value = null; this._notifyChange(event); } }; Time24Input.prototype.share = { $picker: null, /*** * @type Time24Input */ $holdingInput: null, $follower: null, $closeBtn: null }; Time24Input.property = {}; Time24Input.property.hour = { set: function (value) { if (isRealNumber(value)) { value = Math.round(value); if (value < 0) { value = Math.ceil(-value / 24) * 24 + value } value = value % 24; } else { value = null; } this._hour = value; this.textCtrl.updateTextFromValue(); }, get: function () { return this._hour; } }; Time24Input.property.minute = { set: function (value) { if (isRealNumber(value)) { value = Math.round(value); if (value < 0) { value = Math.ceil(-value / 60) * 60 + value } value = value % 60; } else { value = null; } this._minute = value; this.textCtrl.updateTextFromValue(); }, get: function () { return this._minute; } } Time24Input.property.dayOffset = { set: function (dayOffset) { var value = this.value; this._dayOffset = isRealNumber(dayOffset) ? normalizeMinuteOfMillis(dayOffset) : 0; this.value = value; }, get: function () { if (this.notNull) { return this._dayOffset || 0; } else { return this._dayOffset; } } }; Time24Input.property.value = { set: function (value) { value = isRealNumber(value) ? normalizeMinuteOfMillis(Math.min(Math.max(value, 0), MILLIS_PER_DAY)) : null; var clockTime; if (value !== null) { clockTime = millisToClock(value + this.dayOffset); this._hour = clockTime.hour; this._minute = clockTime.minute; } else { this._hour = null; this._minute = null; } this.textCtrl.updateTextFromValue(); this._firedValue = this.value; }, get: function () { if (!isRealNumber(this._hour) || !isRealNumber(this._minute)) return null; var mil = clockToMillis(this._hour, this._minute); if (mil < this.dayOffset) mil += MILLIS_PER_DAY; mil -= this.dayOffset; return mil; } }; Time24Input.property.displayTime = { get: function () { var value = this.value; if (isRealNumber(value)) { return value + this.dayOffset; } else { return null; } } }; Time24Input.property.notNull = { set: function (value) { if (value) { if (this.value === null) { this.value = 0; } this.addClass('as-must-not-null'); } else { this.removeClass('as-must-not-null'); } this._firedValue = this.value; }, get: function () { return this.hasClass('as-must-not-null'); } }; Time24Input.property.disabled = { set: function (value) { value = !!value; this._disabled = value; if (value) this.addClass('as-disabled'); else this.removeClass('as-disabled'); this.$text.disabled = value; }, get: function () { return this._disabled; } }; Time24Input.property.readOnly = js_TimeInput.property.readOnly; Time24Input.property.format = { set: function (value) { this._format = value || 'HH:mm'; this.textCtrl.updateTextFromValue(); }, get: function () { return this._format; } }; Time24Input.eventHandler = {}; Time24Input.eventHandler.pickerChange = function (event) { if (this.dayOffset === null) this.dayOffset = 0; }; Time24Input.eventHandler.clickClockBtn = function () { this._attachPicker(); }; ACore["d" /* default */].install(Time24Input); /* harmony default export */ var js_Time24Input = (Time24Input); /** * * @param {Time24Input} elt * @constructor */ function T24DropdownController(elt) { this.elt = elt; this.$clockBtn = elt.$clockBtn.on('click', this.ev_clickClockBtn.bind(this)); this.disabledButtton = false; this.ev_clickOut = this.ev_clickOut.bind(this); } T24DropdownController.prototype.share = { $picker: null, $holdingInput: null, $follower: null, /** * @type {T24DropdownController|null} */ holder: null }; T24DropdownController.prototype.prepare = function () { var share = this.share; if (share.$picker) return; share.$picker = Object(ACore["c" /* _ */])({ tag: js_ChromeTime24Picker.tag, on: { change: (event) => { if (share.holder) { share.holder.onPickerChange(event); } } } }); share.$follower = Object(ACore["c" /* _ */])({ tag: 'follower', class: ['as-chrome-time-24-picker-follower', 'as-dropdown-box-common-style'], child: [ this.share.$picker, { class: 'as-dropdown-box-footer', child: [ { class: 'as-dropdown-box-footer-right', child: ['<a data-ml-key="txt_close" class="as-select-list-box-close-btn"></a>'] } ] } ] }); this.share.$closeBtn = Object(ACore["a" /* $ */])('.as-select-list-box-close-btn', this.share.$follower); }; T24DropdownController.prototype.attach = function () { this.prepare(); var share = this.share; if (share.holder) { share.holder.release(); } share.holder = this; this.disabledButtton = true; share.$follower.addTo(document.body); share.$follower.followTarget = this.elt; share.$follower.addStyle('visibility', 'hidden'); var hour = this.elt.hour; var min = this.elt.minute; var dayOffset = this.elt.dayOffset share.$picker.dayOffset = dayOffset; var offsetClock = millisToClock(dayOffset); var value = 0; if (isRealNumber(hour)) { if (!isRealNumber(min)) { if (hour === offsetClock.hour) { min = offsetClock.hour; } else { min = 0; } } value = clockToMillis(hour, min) - dayOffset; if (value < 0) value += MILLIS_PER_DAY; } else if (isRealNumber(min)) { if (min >= offsetClock.minute) { hour = offsetClock.hour; } else { hour = (offsetClock.hour + 1) % 24; } value = clockToMillis(hour, min) - dayOffset; if (value < 0) value += MILLIS_PER_DAY; } share.$picker.value = value; setTimeout(() => { document.addEventListener('click', this.ev_clickOut); share.$follower.removeStyle('visibility'); }, 10); }; T24DropdownController.prototype.release = function () { var share = this.share; if (share.holder !== this) return; share.$follower.remove(); share.$follower.followTarget = null; share.holder = null; setTimeout(() => { this.disabledButtton = false; document.removeEventListener('click', this.ev_clickOut); }, 100); }; T24DropdownController.prototype.onPickerChange = function (event) { this.elt.value = this.share.$picker.value; this.elt._notifyChange(event); ResizeSystem["a" /* default */].requestUpdateSignal(); }; T24DropdownController.prototype.ev_clickClockBtn = function () { if (this.disabledButtton) return; this.attach(); }; T24DropdownController.prototype.ev_clickOut = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.share.$follower, event) && !Object(EventEmitter["d" /* hitElement */])(this.share.$closeBtn, event)) return; this.release(); }; var Time24Input_STATE_NEW = 1; var Time24Input_STATE_EDITED = 2; var Time24Input_STATE_NONE = 0; /** * * @param {Time24Input} elt * @constructor */ function T24ITextController(elt) { this.elt = elt; this.domSignal = elt.domSignal; this.$text = this.elt.$text; this.$text.on('keydown', this.ev_keydown.bind(this)).on('pointerup', this.autoSelect.bind(this)) .on('blur', () => { this.loadValueFromInput(); this.elt.notifyIfChange(); }); this.editingData = {}; } T24ITextController.prototype.tokenRegex = /(\([^)]*\))|([^.\/:\-,\\\s]+)|([.\/:\-,\\]+)/i; T24ITextController.prototype.tokenMap = { h: 'h', H: 'H', HH: 'H', hh: 'h', m: 'm', mm: 'm', a: 'a' }; T24ITextController.prototype.makeTokenDict = function (s) { var rgx = new RegExp(this.tokenRegex.source, 'g'); var rgxFormat = new RegExp(this.tokenRegex.source, 'g'); var format = this.elt.format; var tokenMap = this.tokenMap; var tokenMatched = rgx.exec(s); var formatToken = rgxFormat.exec(format); var text, ident; var idx; var res = {}; while (tokenMatched && formatToken) { text = tokenMatched[2]; ident = formatToken[2]; if (text) { if (tokenMap[ident]) { idx = tokenMatched.index; res[tokenMap[ident]] = { text: text, idx: idx, length: text.length, sourceText: s, value: ident === 'a' ? text : parseInt(text) } } } tokenMatched = rgx.exec(s); formatToken = rgxFormat.exec(format); } Object.defineProperty(res, 'minute', { enumerable: false, get: function () { var token = this['m'] || this['mm']; if (token) { return token.value; } else return null; } }); Object.defineProperty(res, 'hour24', { enumerable: false, get: function () { var token = this['H']; if (token && isNaturalNumber(token.value)) { return token.value; } token = this['h']; var tokenA = this['A']; if (token && isNaturalNumber(token.value)) { if (tokenA.value === 'PM') { return 12 + (token.value % 12); } else return token.value % 12; } return null; } }); return res; }; T24ITextController.prototype.formatText = function (h, m) { var text = this.elt.format; text = text.replace(new RegExp(this.tokenRegex.source, 'g'), (all) => { switch (all) { case 'm': case 'mm': return isRealNumber(m) ? zeroPadding(m, all.length) : all; case 'hh': case 'h': return isRealNumber(h) ? zeroPadding(h % 12 ? h : 12, all.length) : all; case 'HH': case 'H': return isRealNumber(h) ? zeroPadding(h, all.length) : all; case 'a': return isRealNumber(h) ? (h > 12 ? 'PM' : 'AM') : 'all'; default: return all; } }); return text; }; T24ITextController.prototype.updateTextFromValue = function () { var value = this.elt.value; var hour = this.elt.hour; var minute = this.elt.minute; console.log(this.elt._hour, this.elt._minute, value) var isNextDate = this.isNextDate(hour, minute); var text = this.formatText(hour, minute); if (isNextDate) { text += this.elt.nextDateText; } if (isRealNumber(value)) { this.elt.removeClass('as-value-null'); } else { this.elt.addClass('as-value-null'); } this.$text.value = text; }; T24ITextController.prototype.loadValueFromInput = function () { var tkDick = this.makeTokenDict(this.$text.value); var hour = NaN; var minute = NaN; if (tkDick.H) { hour = Math.min(23, Math.max(0, tkDick.H.value)); } else if (tkDick.h) { hour = Math.min(12, Math.max(1, tkDick.h.value)); if (tkDick.a && tkDick.a.value === 'PM') { hour += 12; } } if (tkDick.m) { minute = Math.min(59, Math.max(0, tkDick.m.value)); } var end = hour * 36e5 + minute * 6e4; this.elt._value = end >= this.elt.dayOffset ? end - this.elt.dayOffset : end + MILLIS_PER_DAY - this.elt.dayOffset; if (!isNaturalNumber(this.elt._value)) this.elt._value = null; }; T24ITextController.prototype.autoSelect = function () { var token = this.tokenAt(this.$text.selectionStart); var tokenEnd = this.tokenAt(this.$text.selectionEnd); if (token) { if (tokenEnd.idx === token.idx) { this.$text.setSelectionRange(token.idx, token.idx + token.length); this.editingData.state = Time24Input_STATE_NEW; } else { this.$text.select(); this.editingData.state = Time24Input_STATE_NONE; } } }; T24ITextController.prototype.editPrevToken = function () { var token = this.tokenAt(this.$text.selectionStart); if (!token) return false; var cIdx = token.idx; var l = this.$text.value.length; for (var i = token.idx - 1; i >= 0; --i) { token = this.tokenAt(i); if (token && token.idx !== cIdx) { this.$text.setSelectionRange(token.idx, token.idx + token.length); this.editingData.state = Time24Input_STATE_NEW; break; } } }; T24ITextController.prototype.editNextToken = function () { var token = this.tokenAt(this.$text.selectionStart); if (!token) return false; var cIdx = token.idx; var l = this.$text.value.length; for (var i = token.idx + token.length; i < l; ++i) { token = this.tokenAt(i); if (token && token.idx !== cIdx) { this.$text.setSelectionRange(token.idx, token.idx + token.length); this.editingData.state = Time24Input_STATE_NEW; break; } } }; T24ITextController.prototype.tokenAt = function (start) { var rgx = new RegExp(this.tokenRegex.source, 'g'); var rgxFormat = new RegExp(this.tokenRegex.source, 'g'); var s = this.$text.value; var format = this.elt.format; var tokenMatched = rgx.exec(s); var formatToken = rgxFormat.exec(format); var tokenMatchedList = []; var formatTokenList = []; var text, ident; var idx; while (tokenMatched && formatToken) { text = tokenMatched[2]; ident = formatToken[2]; if (text && isDateTimeFormatToken(ident)) { tokenMatchedList.push(tokenMatched); formatTokenList.push(formatToken); } tokenMatched = rgx.exec(s); formatToken = rgxFormat.exec(format); } var bestI = -1; var bestD = Infinity; var d; for (var i = 0; i < tokenMatchedList.length; ++i) { tokenMatched = tokenMatchedList[i]; formatToken = formatTokenList[i]; text = tokenMatched[2]; idx = tokenMatched.index; d = Math.min(Math.abs(start - idx), Math.abs(start - (idx + text.length))); if (d < bestD) { bestD = d; bestI = i; } } if (bestI >= 0) { tokenMatched = tokenMatchedList[bestI]; formatToken = formatTokenList[bestI]; text = tokenMatched[2]; ident = formatToken[2]; idx = tokenMatched.index; return { idx: idx, text: text, length: text.length, ident: ident, elt: this.$text, sourceText: s, replace: function (newText, selecting, forceInText) { forceInText = forceInText || this.sourceText; var left = forceInText.substr(0, this.idx); var right = forceInText.substr(this.idx + this.length); this.text = newText; this.length = newText.length; this.sourceText = left + this.text + right; this.elt.value = this.sourceText; if (selecting) { this.elt.setSelectionRange(this.idx, this.idx + this.length); } } } } return null; }; T24ITextController.prototype.isNextDate = function (h, m) { var dayOffset = this.elt.dayOffset; if (!isNaturalNumber(dayOffset)) return false; var oH = Math.floor(dayOffset / 36e5); var oM = Math.floor(dayOffset / 6e4) % 60; if (!isNaturalNumber(h)) return false; if (h < oH) return true; if (!isNaturalNumber(m)) return false; return h === oH && m < oM; }; T24ITextController.prototype.putNextDateTextInto = function (text, flag) { var ndTxt = this.elt.nextDateText; if (text.endsWith(ndTxt)) { if (!flag) text = text.substring(0, text.length - ndTxt.length); } else if (flag) { text += ndTxt; } return text; }; T24ITextController.prototype.correctingInput = function () { //nothing todo now }; T24ITextController.prototype.ev_keydown = function (event) { var token = this.tokenAt(this.$text.selectionStart); var endToken = this.tokenAt(this.$text.selectionEnd); var tokenDict = this.makeTokenDict(this.$text.value); var format = this.elt.format; if (!token) { if (event.key === 'Enter') { this.correctingInput(); this.loadValueFromInput(); this.elt.notifyIfChange(event); } return; } var newTokenText; var value; if (event.key.startsWith('Arrow')) { event.preventDefault(); switch (event.key) { case 'ArrowLeft': this.editPrevToken(); break; case 'ArrowRight': this.editNextToken(); break; case 'ArrowUp': case 'ArrowDown': switch (token.ident) { case "H": case "HH": value = parseInt(token.text); if (isNaN(value)) { this.editingData.H = event.key === 'ArrowUp' ? 0 : 23; } else { this.editingData.H = (value + (event.key === 'ArrowUp' ? 1 : 23)) % 24; } newTokenText = zeroPadding(this.editingData.H, token.ident.length); token.replace(newTokenText, true, this.putNextDateTextInto(token.sourceText, this.isNextDate(this.editingData.H, tokenDict.minute))); break; case "hh": case 'h': value = parseInt(token.text); if (isNaN(value)) { this.editingData.h = event.key === 'ArrowUp' ? 1 : 12; } else { this.editingData.h = 1 + (value + (event.key === 'ArrowUp' ? 0 : 10)) % 12; } newTokenText = this.editingData.h + ''; while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true, this.putNextDateTextInto(token.sourceText, this.isNextDate((tokenDict.a && tokenDict.a.value === 'PM' ? 0 : 24) + (this.editingData.h % 12), tokenDict.minute))); break; case "mm": case 'm': value = parseInt(token.text); if (isNaN(value)) { this.editingData.m = event.key === 'ArrowUp' ? 0 : 59; } else { this.editingData.m = (value + (event.key === 'ArrowUp' ? 1 : 59)) % 60; } newTokenText = this.editingData.m + ''; while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText; token.replace(newTokenText, true, this.putNextDateTextInto(token.sourceText, this.isNextDate(tokenDict.hour24, this.editingData.m)) ); break; case 'a': value = token.text; this.editingData.a = value === 'PM' ? "AM" : "PM"; newTokenText = this.editingData.a; token.replace(newTokenText, true, this.putNextDateTextInto(token.sourceText, this.isNextDate(tokenDict.hour24, tokenDict.minute)) ); break; } break; } } else if (event.key === "Delete" || event.key === 'Backspace') { event.preventDefault(); if (endToken.idx !== token.idx) { if (this.elt.notNull) { this.$text.value = formatDateTime(beginOfDay(new Date()), format); } else { this.$text.value = format; } this.$text.select(); } else { if (this.elt.notNull) { token.replace(token.ident === 'a' ? 'AM' : zeroPadding((token.ident === 'hh' || token.ident === 'h') ? 12 : 0, token.ident.length), true); } else { token.replace(token.ident, true); } if (event.key === "Delete") this.editNextToken(); else this.editPrevToken(); } } else if (event.key === "Enter" || event.key === 'Tab') { this.correctingInput(); this.loadValueFromInput(); this.elt.notifyIfChange(event); } else if (event.ctrlKey) { switch (event.key) { case 'a': case 'A': break; case 'c': case 'C': break; case 'x': case 'X': this.domSignal.once('clear_value', function () { this.$text.value = format; this.$text.select(); }.bind(this)); this.domSignal.emit('clear_value'); break; default: event.preventDefault(); } } else if (event.key.match(/^[0-9]$/g)) { event.preventDefault(); var dVal = parseInt(event.key); if (this.editingData.state === Time24Input_STATE_NEW) { switch (token.ident) { case 'm': case 'mm': token.replace(zeroPadding(dVal, token.ident.length), true, this.putNextDateTextInto(token.sourceText, this.isNextDate(tokenDict.hour24, dVal))); this.editingData.state = Time24Input_STATE_EDITED; if (dVal > 5) { this.editNextToken(); } break; case 'h': case 'hh': token.replace(zeroPadding(dVal, token.ident.length), true, this.putNextDateTextInto(token.sourceText, this.isNextDate((tokenDict.a && tokenDict.a.value === 'PM' ? 0 : 24) + (dVal % 12), tokenDict.minute))); this.editingData.state = Time24Input_STATE_EDITED; if (dVal > 1) { this.editNextToken(); } break; case 'H': case 'HH': token.replace(zeroPadding(dVal, token.ident.length), true, this.putNextDateTextInto(token.sourceText, this.isNextDate(dVal, tokenDict.minute))); this.editingData.state = Time24Input_STATE_EDITED; if (dVal > 2) { this.editNextToken(); } break; } } else { switch (token.ident) { case 'm': case 'mm': dVal = (parseInt(token.text.split('').pop(), 10) || 0) * 10 + dVal; dVal = Math.max(0, Math.min(59, dVal)); this.editingData.m = dVal; token.replace(zeroPadding(dVal, token.ident.length), true, this.putNextDateTextInto(token.sourceText, this.isNextDate(tokenDict.hour24, dVal))); this.editNextToken(); break; case 'h': case 'hh': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(1, Math.min(12, dVal)); this.editingData.h = dVal; token.replace(zeroPadding(dVal, token.ident.length), true, this.putNextDateTextInto(token.sourceText, this.isNextDate((tokenDict.a && tokenDict.a.value === 'PM' ? 0 : 24) + (dVal % 12), tokenDict.minute))); this.editNextToken(); break; case 'H': case 'HH': dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal; dVal = Math.max(0, Math.min(23, dVal)); this.editingData.H = dVal; token.replace(zeroPadding(dVal, token.ident.length), true, this.putNextDateTextInto(token.sourceText, this.isNextDate(dVal, tokenDict.minute))); this.editNextToken(); break; } } } else if (event.key.match(/^[aApPSCsc]$/) && token.ident === 'a') { event.preventDefault(); if (event.key.match(/^[aAsS]$/)) { token.replace('AM', true, this.putNextDateTextInto(token.sourceText, this.isNextDate((tokenDict.h && tokenDict.h.value) % 12, tokenDict.minute))); this.editingData.a = "AM"; } else { token.replace('PM', true, this.putNextDateTextInto(token.sourceText, this.isNextDate((tokenDict.h && tokenDict.h.value) % 12 + 12, tokenDict.minute))); this.editingData.a = "PM"; } this.editNextToken(); } else { event.preventDefault(); } }; // EXTERNAL MODULE: ./node_modules/absol-acomp/css/timerange24input.css var timerange24input = __webpack_require__(257); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimeRange24Input.js /*** * @extends AElement * @constructor */ function TimeRange24Input() { /*** * * @type {TimeInput} */ this.$offset = Object(ACore["a" /* $ */])(js_TimeInput.tag, this); this.$offset.on('change', this.eventHandler.offsetChange); /*** * * @type {Time24Input} */ this.$duration = Object(ACore["a" /* $ */])(js_Time24Input.tag, this); this.$duration.on('change', this.eventHandler.durationChange); /*** * @type {number} * @name dayOffset * @memberOf TimeRange24Input# */ /*** * @type {number} * @name duration * @memberOf TimeRange24Input# */ /*** * @type {string} * @name format * @memberOf TimeRange24Input# */ } TimeRange24Input.tag = 'TimeRange24Input'.toLowerCase(); TimeRange24Input.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['change'], class: 'as-time-range-24-input', child: [{ tag: js_TimeInput.tag, props: { format: 'HH:mm' } }, js_Time24Input.tag ] }); }; TimeRange24Input.prototype.init = function (props) { props = props || {}; var cpProps = Object.assign(props); if ('notNull' in props) { this.notNull = props.notNull; delete cpProps.notNull; } if ('dayOffset' in props) { this.dayOffset = props.dayOffset; delete cpProps.dayOffset; } Object.assign(this, cpProps); }; TimeRange24Input.prototype._updateTextData = function () { var dayOffset = this.dayOffset; var duration = this.duration; var format = this.format; var bD = beginOfDay(new Date()).getTime(); var text = formatDateTime(new Date(bD + dayOffset), format || 'HH:mm'); text += ' - ' + formatDateTime(new Date(bD + dayOffset + duration), format || 'HH:mm'); this.attr('data-text', text); }; TimeRange24Input.property = {}; TimeRange24Input.property.notNull = { /*** * @this TimeRange24Input * @param value */ set: function (value) { value = !!value; this.$offset.notNull = value; this.$duration.notNull = value; this._updateTextData(); }, get: function () { return this.$offset.notNull; } }; TimeRange24Input.property.disabled = { set: function (value) { value = !!value; if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } this.$offset.disabled = value; this.$duration.disabled = value; }, get: function () { return this.hasClass('as-disabled'); } }; TimeRange24Input.property.dayOffset = { set: function (value) { var notNull = this.notNull; if (isRealNumber(value)) { value = normalizeMinuteOfMillis(value); } else { value = notNull ? 0 : null; } this.$offset.dayOffset = value; this.$duration.dayOffset = value; this._updateTextData(); }, get: function () { return this.$offset.dayOffset; } }; TimeRange24Input.property.duration = { /*** * @this TimeRange24Input * @param value */ set: function (value) { var notNull = this.notNull; if (isRealNumber(value)) { value = Math.floor(Math.min(MILLIS_PER_DAY, Math.max(0, value))); value = Math.floor(value / MILLIS_PER_MINUTE) * MILLIS_PER_MINUTE; } else { value = notNull ? 0 : null; } this.$duration.value = value; this._updateTextData(); }, get: function () { return this.$duration.value; } }; TimeRange24Input.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); this.$offset.readOnly = true; this.$duration.readOnly = true; } else { this.removeClass('as-read-only'); this.$offset.readOnly = false; this.$duration.readOnly = false; } }, get: function () { return this.containsClass('as-read-only'); } }; TimeRange24Input.property.value = { set: function (value) { var rangeValue = null; if (isRealNumber(value)) rangeValue = { dayOffset: value, duration: 0 }; else if (!value) { } else if (typeof rangeValue === "object") { if (isRealNumber(value.dayOffset)) { rangeValue = { dayOffset: value.dayOffset, duration: 0 }; } else { rangeValue = { dayOffset: 0, duration: 0 }; } if (isRealNumber(value.duration)) { rangeValue.duration = value.duration; } } if (rangeValue) { this.dayOffset = rangeValue.dayOffset; this.duration = rangeValue.duration; } else { this.dayOffset = null; this.duration = null; } return rangeValue; }, get: function () { if (!isRealNumber(this.dayOffset) && !isRealNumber(this.duration)) return null; return { dayOffset: this.dayOffset || 0, duration: this.duration || 0 }; } }; TimeRange24Input.eventHandler = {}; TimeRange24Input.eventHandler.offsetChange = function (event) { var prevOffset = this.$duration.dayOffset; var preDuration = this.$duration.value; var prevEnd = prevOffset + preDuration; var newEnd; var newStart = this.$offset.dayOffset; if (isRealNumber(newStart)) { if (isRealNumber(prevEnd)) { newEnd = Math.max(newStart, Math.min(newStart + MILLIS_PER_DAY - MILLIS_PER_MINUTE, prevEnd)); } else { newEnd = newStart; } this.$duration.dayOffset = newStart; this.$duration.value = newEnd - newStart; } else { this.$duration.dayOffset = 0; this.$duration.value = isRealNumber(prevEnd) ? Math.min(prevEnd, MILLIS_PER_DAY - MILLIS_PER_MINUTE) : null; } this._updateTextData(); this.emit('change', { type: 'change', property: 'dayOffset', originalEvent: event.originalEvent || event.originEvent || event }); }; TimeRange24Input.eventHandler.durationChange = function (event) { if (!isRealNumber(this.$offset.dayOffset) ) { this.$offset.dayOffset = this.$duration.dayOffset; } this._updateTextData(); this.emit('change', { type: 'change', property: 'duration', originalEvent: event.originalEvent || event.originEvent || event }); }; ACore["d" /* default */].install(TimeRange24Input); /* harmony default export */ var js_TimeRange24Input = (TimeRange24Input); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/checktreeitem.css var checktreeitem = __webpack_require__(259); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckTreeItem.js /*** * @extends ExpNode * @constructor */ function CheckTreeItem() { this._itemData = null; this.$name = Object(ACore["a" /* $ */])('span.absol-exp-node-name', this); this.$desc = Object(ACore["a" /* $ */])('span.absol-exp-node-desc', this); this.$iconCtn = Object(ACore["a" /* $ */])('div.absol-exp-node-ext-icon', this); this.$level = Object(ACore["a" /* $ */])('.absol-exp-node-level', this); this.$checkbox = Object(ACore["a" /* $ */])('checkboxbutton', this) .on('change', this.eventHandler.checkboxChange); this.$toggleIcon = Object(ACore["a" /* $ */])('toggler-ico', this); this.on('click', this.eventHandler.click); } CheckTreeItem.tag = 'CheckTreeItem'.toLowerCase(); CheckTreeItem.render = function () { return Object(ACore["c" /* _ */])({ tag: 'button', extendEvent: ['select', 'presstoggle'], class: ['as-check-tree-item', 'absol-exp-node'], child: [ '.absol-exp-node-level', 'toggler-ico', 'checkboxbutton', 'img.absol-exp-node-ext-icon', 'div.absol-exp-node-ext-icon', 'span.absol-exp-node-name', 'span.absol-exp-node-desc' ] }); }; CheckTreeItem.property = {}; CheckTreeItem.property.icon = ExpNode.property.icon; CheckTreeItem.property.text = ExpNode.property.name; CheckTreeItem.property.level = ExpNode.property.level; CheckTreeItem.property.desc = ExpNode.property.desc; CheckTreeItem.property.status = ExpNode.property.status; CheckTreeItem.property.data = { set: function (itemData) { this._itemData = itemData; var text = getTextOfListItem(itemData); this.text = text; this.attr('title', itemData.value + '') var desc = getDescriptionOfListItem(itemData); this.desc = desc; if (itemData && itemData.icon) { this.icon = itemData.icon; } else { this.icon = null; } this.noSelect = itemData.noSelect; }, get: function () { return this._itemData; } }; CheckTreeItem.property.selected = { set: function (value) { this._selected = value; this.$checkbox.disabled = value === 'empty'; if (value === 'all') { this.$checkbox.minus = false; this.$checkbox.checked = true; } else if (value === 'child') { this.$checkbox.checked = false; this.$checkbox.minus = true; } else if (value === 'empty') { this.$checkbox.minus = false; this.$checkbox.checked = false; } else { this.$checkbox.minus = false; this.$checkbox.checked = false; } }, get: function () { if ( this.$checkbox.disabled) return 'empty'; if (this.$checkbox.checked) return 'all'; else if (this.$checkbox.minus) return 'child'; return 'none'; } }; CheckTreeItem.property.noSelect = { set: function (value) { if (value) { this.addClass('as-no-select'); } else { this.removeClass('as-no-select'); } }, get: function () { return this.hasClass('as-no-select'); } }; CheckTreeItem.eventHandler = {}; CheckTreeItem.eventHandler.checkboxChange = function (event) { this.emit('select', { type: 'select', target: this, originalEvent: event.originalEvent || event.originEvent || event }); }; CheckTreeItem.eventHandler.click = function (event) { var tBound; if (this.status === 'open' || this.status === 'close') { tBound = this.$toggleIcon.getBoundingClientRect(); if (event.clientX <= tBound.right || this.noSelect) { this.emit('presstoggle', { type: 'presstoggle', target: this, originalEvent: event }, this); } else if (!Object(EventEmitter["d" /* hitElement */])(this.$checkbox, event) && !this.$checkbox.disabled) { this.$checkbox.checked = !this.$checkbox.checked; this.eventHandler.checkboxChange(event); } } else { if (!Object(EventEmitter["d" /* hitElement */])(this.$checkbox, event) && !this.noSelect && !this.$checkbox.disabled) { this.$checkbox.checked = !this.$checkbox.checked; this.eventHandler.checkboxChange(event); } } }; ACore["d" /* default */].install(CheckTreeItem); /* harmony default export */ var js_CheckTreeItem = (CheckTreeItem); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/checktreebox.css var checktreebox = __webpack_require__(261); // CONCATENATED MODULE: ./node_modules/absol/src/DataStructure/Array.js /*** * * @param {(string|number|boolean|null)[]} arr * @returns {(string|number|boolean|null)[]} */ function arrayUnique(arr) { var dict = {}; return arr.reduce(function (ac, cr) { var key = (typeof cr) + '//' + cr; if (key in dict) return ac; ac.push(cr); dict[key] = true; return ac; }, []); } /*** * * @param {[]}arr * @return {[]} */ function arrayRemoveNone(arr) { return arr.filter(function (c) { return c !== null && c !== undefined; }); } function arrayIntersection(a1, a2) { var dict1 = a1.reduce((ac, cr) => { ac[(typeof cr) + cr] = true; return ac; }, {}); var dict2 = a2.reduce((ac, cr) => { ac[(typeof cr) + cr] = true; return ac; }, {}); var dictAdded = {}; var res = []; var i, k, x; for (i = 0; i < a1.length; ++i) { x = a1[i]; k = (typeof x) + x; if (dict1[k] && dict2[k] && !dictAdded[k]) { res.push(x); dictAdded[k] = true; } } for (i = 0; i < a2.length; ++i) { x = a2[i]; k = (typeof x) + x; if (dict1[k] && dict2[k] && !dictAdded[k]) { res.push(x); dictAdded[k] = true; } } return res; } function arrayIsSubset(childArr, parentArr) { if (!(childArr instanceof Array) || !(parentArr instanceof Array)) return false; var dict2 = parentArr.reduce((ac, cr) => { ac[(typeof cr) + cr] = true; return ac; }, {}); var res = true; var n = childArr.length; var k; for (var i = 0; i < n; ++i) { k = (typeof childArr[i]) + childArr[i]; if (!dict2[k]) { res = false; break; } } return res; } /*** * * @param {[]}a1 * @param {[]}a2 * @param {boolean=} order * @returns {boolean} */ function arrayCompare(a1, a2, order) { if (a1 === a2) return true; if (!a1 || !a2) return false; if (a1.length !== a2.length) return false; if (!a1.sort || !a2.sort) return false; if (!order) { a1.sort(); a2.sort(); } var n = a1.length; for (var i = 0; i < n; ++i) { if (a1[i] !== a2[i]) return false; } return true; } /*** * * @param {Array} arr */ function arrayShuffle(arr) { var temp; var j; for (var i = 0; i < arr.length; ++i) { j = Math.floor(Math.random() * arr.length); if (i !== j) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckTreeBox.js /*** * @extends Follower * @constructor */ function CheckTreeBox() { this.listCtrl = new CTBItemListController(this); OOP["a" /* default */].drillProperty(this, this.listCtrl, ['viewHolders', '$checkAll', 'estimateSize']); this.dropdownCtrl = new CTBDropdownController(this); this.actionCtrl = new CTBActionController(this); this.searchCtrl = new CTBSearchController(this); OOP["a" /* default */].drillProperty(this, this.searchCtrl, ['$searchInput']); this._initDomHook(); this._initProperty(); if (!this.updatePosition) { this.updatePosition = noop; } /** * @name mobile * @type {boolean} * @memberof CheckTreeBox# */ /*** * @name strictValue * @memberof CheckTreeBox# * @type {boolean} */ /** * @name values * @memberof CheckTreeBox# * @type {Array} */ /** * @name viewValues * @memberof CheckTreeBox# * @type {Array} */ } CheckTreeBox.tag = 'CheckTreeBox'.toLowerCase(); CheckTreeBox.prototype.preLoadN = 3; CheckTreeBox.prototype.itemHeight = 28; CheckTreeBox.prototype.itemInPage = 36; CheckTreeBox.prototype._initDomHook = function () { this.$domSignal = Object(ACore["c" /* _ */])('attachhook'); this.appendChild(this.$domSignal); this.domSignal = new DomSignal["a" /* default */](this.$domSignal); this.domSignal.on('viewListAt', this.listCtrl.viewListAt.bind(this.listCtrl)); }; CheckTreeBox.prototype._initProperty = function () { this.scale14 = Object(ACore["a" /* $ */])(document.body).getFontSize() / 14; this.initOpened = 0; this.enableSearch = true; }; CheckTreeBox.prototype.focus = js_SelectListBox.prototype.focus; CheckTreeBox.prototype.addStyle = function (name, value) { var ms; if (name === 'minWidth' || name === 'min-width'){ ms = Object(attribute["b" /* parseMeasureValue */])(value); if (ms.unit === 'px') { value = Math.max(240, ms.value)+'px'; } return AElement["a" /* default */].prototype.addStyle.call(this, name, value); } return AElement["a" /* default */].prototype.addStyle.apply(this, arguments); } CheckTreeBox.render = function () { var mobile = (arguments[1] && arguments[1].forceMobile) || BrowserDetector["a" /* default */].isMobile; var footer = { class: 'as-dropdown-box-footer', child: [ { tag: 'checkbox', class: 'as-select-list-box-check-all', props: { checked: false, text: HTML5_LanguageSystem.getText('txt_check_all') || HTML5_LanguageSystem.getText('txt_all') || 'Check All' } }, { class: 'as-dropdown-box-footer-right', child: [ { tag: 'a', class: 'as-select-list-box-cancel-btn', attr: { "data-ml-key": 'txt_cancel' } }, { tag: 'a', class: 'as-select-list-box-close-btn', attr: { "data-ml-key": 'txt_close' } }] } ] }; var content = { class: ['as-check-tree-box-scroller', 'as-bscroller', 'as-select-list-box-scroller'], child: { class: ['as-check-tree-box-content', 'as-select-list-box-content'], child: Array(this.prototype.preLoadN).fill('.as-select-list-box-page') } }; if (mobile) { return Object(ACore["c" /* _ */])({ props: { mobile: true }, extendEvent: ['change', 'close', 'toggleitem', 'cancel'], class: ['am-check-tree-box-modal', 'am-modal', 'am-dropdown-box-modal'], child: { class: ['am-check-tree-box', 'am-dropdown-box', 'as-dropdown-box-common-style'], child: [ { class: 'am-dropdown-box-header', child: [ { tag: Searcher.tag }, { tag: 'button', class: 'am-dropdown-box-close-btn', child: 'span.mdi.mdi-close' } ] }, content, footer ] } }) } return Object(ACore["c" /* _ */])({ tag: 'follower', extendEvent: ['change', 'toggleitem', 'cancel', 'close'], class: ['as-check-tree-box', 'as-select-list-box', 'as-anchor-1'], child: [ { class: 'as-select-list-box-search-ctn', child: 'searchtextinput' }, content, footer ], props: { anchor: [1, 6, 2, 5], mobile: false } }); }; CheckTreeBox.prototype.HolderClass = TreeNodeHolder; CheckTreeBox.prototype.findItemHoldersByValue = function (value) { return this.listCtrl.findItemHoldersByValue(value); }; CheckTreeBox.prototype.viewListAt = function (offset) { this.listCtrl.viewListAt(offset); }; CheckTreeBox.prototype.noTransition = function () { if (this.hasClass('as-no-transition')) return; this.addClass('as-no-transition'); setTimeout(function () { this.removeClass('as-no-transition'); }.bind(this), 100); }; CheckTreeBox.prototype.resetSearchState = function () { this.listCtrl.resetView(); }; CheckTreeBox.prototype.updateContentSize = function () { this.listCtrl.updateContentSize(); }; CheckTreeBox.prototype._implicit = function (values) { return values || []; }; CheckTreeBox.property = {}; CheckTreeBox.property.items = { /*** * @this CheckTreeBox * @param items */ set: function (items) { items = items || []; this._items = items; this.listCtrl.setItems(items); }, get: function () { return this._items; } }; CheckTreeBox.property.values = { /*** * @this CheckTreeBox * @param values */ set: function (values) { this.listCtrl.setValues(values); }, get: function () { return this.listCtrl.getValues(); } }; CheckTreeBox.property.viewValues = { get: function () { return this.listCtrl.getViewValues(); } }; CheckTreeBox.property.enableSearch = { set: function (value) { if (value) this.addClass('as-enable-search'); else this.removeClass('as-enable-search'); }, get: function () { return this.hasClass('as-enable-search'); } }; CheckTreeBox.eventHandler = {}; CheckTreeBox.eventHandler.toggleItem = function (item, event) { this.noTransition(); var nodeHolder = item.nodeHolder; if (!nodeHolder) { console.error("Load error, item was not assigned TreeNodeHolder!") } else nodeHolder.toggle(); }; CheckTreeBox.eventHandler.selectItem = function (item, event) { var nodeHolder = item.nodeHolder; if (!nodeHolder) { console.error("Load error, item was not assigned TreeNodeHolder!"); return; } this.noTransition(); var ref = nodeHolder.findReferenceNode(); var targetNode = ref || nodeHolder; var selected = item.selected; if (selected === 'all' && (targetNode.canSelectAll || targetNode.selected === 'none')) { targetNode.selectAll(); } else { targetNode.unselectAll(); } if (ref) { nodeHolder.getRoot().updateSelectedFromRef(); } this.emit('change', { type: 'change', target: this }, this); }; /*** * @this CheckTreeBox */ CheckTreeBox.eventHandler.searchModify = function () { }; CheckTreeBox.prototype.updateSelectedInViewIfNeed = function () { if (this.rootViewHolder !== this.rootHolder) { this.rootViewHolder.updateSelectedFromRef(); } }; CheckTreeBox.eventHandler.clickCancelBtn = function (event) { this.emit('cancel', { type: 'cancel', target: this, originalEvent: event }, this); }; CheckTreeBox.eventHandler.clickCloseBtn = function (event) { this.emit('close', { type: 'close', target: this, originalEvent: event }, this); }; ACore["d" /* default */].install(CheckTreeBox); /* harmony default export */ var js_CheckTreeBox = (CheckTreeBox); /*** * * @param {CheckTreeBox} boxElt * @param items * @constructor */ function TreeRootHolder(boxElt, items) { this.boxElt = boxElt; this.items = items; this.selected = 'none'; var Clazz = this.SubHolderClass; this.child = []; this.idx = -1;//root this.tailIdx = this.idx; if (items && items.length > 0) { items.reduce((ac, it) => { var child = new Clazz(boxElt, it, ac.idx + 1, this); ac.idx = child.tailIdx; ac.arr.push(child); return ac; }, { idx: this.idx, arr: this.child }); this.tailIdx = this.child[this.child.length - 1].tailIdx; } this.canSelectAll = this.child.every(c => c.canSelectAll); this.canSelect = (this.child.length === 0 || this.child.some(c => c.canSelect)); } CheckTreeBox.prototype.RootHolderClass = TreeRootHolder; TreeRootHolder.prototype.level = -1; TreeRootHolder.prototype.reset = function () { this.child.forEach(c => c.reset()); this.selected = "none"; }; /*** * * @param {Array=} ac */ TreeRootHolder.prototype.toArray = function (ac) { ac = ac || []; this.child.forEach(c => c.toArray(ac)); return ac; }; TreeRootHolder.prototype.updateFromChild = function () { var childSelectAll = 0; var childSelectChild = 0; var isCheckAll = true; this.traverse(hd => { if (hd.selected === 'none' && !hd.item.noSelect) { isCheckAll = false; } }); if (this.canSelectAll) { this.boxElt.$checkAll.checked = isCheckAll; this.boxElt.$checkAll.minus = false; this.selected = isCheckAll ? 'all' : 'none'; } else { this.boxElt.$checkAll.checked = false; this.boxElt.$checkAll.minus = isCheckAll; this.selected = isCheckAll ? 'child' : 'none'; } }; TreeRootHolder.prototype.updateUp = function () { this.updateFromChild(); }; /*** * * @param {Array=} ac */ TreeRootHolder.prototype.getValues = function (ac) { ac = ac || []; this.child.forEach(c => c.getValues(ac)); return ac; }; TreeRootHolder.prototype.getViewValues = function (ac) { ac = ac || []; this.child.forEach(c => c.getViewValues(ac)); return ac; }; /*** * * @param {Array} values */ TreeRootHolder.prototype.setValues = function (values) { this.reset(); values = values.reduce((ac, cr) => { ac[keyStringOf(cr)] = true; return ac; }, values.slice()); this.child.forEach(c => c.setValues(values)); }; TreeRootHolder.prototype.calcEstimateSize = function () { var res = { width: 0, height: this.boxElt.itemHeight + (this.tailIdx + 1) }; var holders = this.child; var n = holders.length; var holder; var longestHolder = null; var longest = 0; var w; for (var i = 0; i < n; ++i) { holder = holders[i]; holder.traverse((hd) => { w = hd.calcEstimateWidth(); if (w > longest) { longest = w; longestHolder = hd; } }) } if (longestHolder) { res.width = longestHolder.calcWidth() * this.boxElt.scale14; } return res; }; TreeRootHolder.prototype.selectAll = function () { this.child.forEach(c => c.selectAll()); }; TreeRootHolder.prototype.unselectAll = function () { this.child.forEach(c => c.unselectAll()); }; TreeRootHolder.prototype.findReferenceNode = function () { if (this.boxElt.listCtrl.rootHolder === this) return null; return this.boxElt.listCtrl.rootHolder; } TreeRootHolder.prototype.updateSelectedFromRef = function () { if (this.boxElt.listCtrl.rootHolder === this) return; this.child.forEach(c => c.updateSelectedFromRef()); }; TreeRootHolder.prototype.traverse = function (cb) { this.child.forEach(c => c.traverse(cb)); }; TreeRootHolder.prototype.getRoot = function () { return this; }; /*** * * @param {Object<string, TreeNodeHolder>|{}=}ac * @returns {Object<string, TreeNodeHolder>|{}} */ TreeRootHolder.prototype.depthIndexing = function (ac) { ac = ac || {}; this.child.forEach(c => c.depthIndexing(ac)); return ac; }; /*** * * @param {CheckTreeBox} boxElt * @param {SelectionItem} item * @param {number} idx * @param {TreeNodeHolder | TreeRootHolder} parent * @constructor */ function TreeNodeHolder(boxElt, item, idx, parent) { this.boxElt = boxElt; this.item = item; this.idx = idx; this.tailIdx = idx;//last child index this.parent = parent; this.status = (item.items && item.items.length > 0) ? 'close' : 'none'; this.selected = 'none'; this.level = parent ? parent.level + 1 : 0; if (this.status === 'close' && this.level < this.boxElt.initOpened) { this.status = 'open'; } this._elt = null; var Clazz = this.constructor; /*** * * @type {this[]} */ this.child = []; if (item.items && item.items.length > 0) { item.items.reduce((ac, it) => { var child = new Clazz(boxElt, it, ac.idx + 1, this); ac.idx = child.tailIdx; ac.arr.push(child); return ac; }, { idx: this.idx, arr: this.child }); this.tailIdx = this.child[this.child.length - 1].tailIdx; } this.canSelectAll = !this.item.noSelect && this.child.every(c => c.canSelectAll); this.canSelect = !this.item.noSelect && (this.child.length === 0 || this.child.some(c => c.canSelect)); } TreeRootHolder.prototype.SubHolderClass = TreeNodeHolder; /*** * * @param {Object<string, TreeNodeHolder>|{}}ac * @returns {Object<string, TreeNodeHolder>|{}} */ TreeNodeHolder.prototype.depthIndexing = function (ac) { ac = ac || {}; var key = keyStringOf(this.item.value); if (!ac[key]) ac[key] = []; ac[key].push(this); if (ac[key].length === 2) { console.warn("Duplicate value", ac[key]); } this.child.forEach(c => c.depthIndexing(ac)); return ac; }; TreeNodeHolder.prototype.findIdxInView = function () { var holders = this.boxElt.listCtrl.viewHolders; var start = 0; var end = holders.length - 1; var mid; var idx = this.idx; var holderIdx; while (start < end) { mid = (start + end) >> 1; holderIdx = holders[mid].idx; if (holderIdx < idx) { start = mid + 1; } else if (holderIdx > idx) { end = mid - 1; } else { return mid; } } holderIdx = holders[start].idx; if (holderIdx === idx) return start; return -1; }; TreeNodeHolder.prototype.getValues = function (ac) { ac = ac || []; if (this.selected === 'all') { ac.push(this.item.value); } else if (this.selected === 'child') { this.child.forEach(c => c.getValues(ac)); } return ac; }; TreeNodeHolder.prototype.getViewValues = function (ac) { return this.getValues(ac); }; TreeNodeHolder.prototype.setValues = function (values) { if (values[keyStringOf(this.item.value)]) { this.selectAll(true); } else { this.child.forEach(c => c.setValues(values)); } this.updateFromChild(); }; TreeNodeHolder.prototype.toggle = function () { var idx = this.findIdxInView(); var status = this.status; if (status === 'close') { this.itemElt.status = 'open'; this.status = 'open'; var arr = this.toArray(); arr.shift(); this.boxElt.listCtrl.viewHolders.splice.apply(this.boxElt.listCtrl.viewHolders, [idx + 1, 0].concat(arr)); this.boxElt.listCtrl.updateContentSize(); this.boxElt.listCtrl.viewListAt(idx); this.boxElt.emit('toggleitem', { type: 'toggleitem', target: this.boxElt, nodeHolder: this, status: 'open' }, this.boxElt); } else if (status === 'open') { this.itemElt.status = 'close'; this.status = 'close'; var l = 0; while (this.boxElt.viewHolders[idx + 1 + l] && this.boxElt.listCtrl.viewHolders[idx + 1 + l].isDescendantOf(this)) ++l; this.boxElt.listCtrl.viewHolders.splice(idx + 1, l); this.boxElt.listCtrl.updateContentSize(); this.boxElt.listCtrl.viewListAt(idx); this.boxElt.emit('toggleitem', { type: 'toggleitem', target: this.boxElt, nodeHolder: this, status: 'close' }, this.boxElt); } }; /*** * * @param {boolean=} isDownUpdate */ TreeNodeHolder.prototype.selectAll = function (isDownUpdate) { if (this.selected === 'all') return; if (!this.canSelect) return; if (this.canSelectAll) this.selected = 'all'; else this.selected = 'child'; if (this.itemElt) this.itemElt.selected = this.selected; this.child.forEach(function (child) { child.selectAll(true); }); if (!isDownUpdate) { if (this.parent) this.parent.updateUp(); } }; /*** * * @param {boolean=} isDownUpdate */ TreeNodeHolder.prototype.unselectAll = function (isDownUpdate) { if (this.selected === 'none') return; this.selected = 'none'; if (this.itemElt) this.itemElt.selected = this.selected; this.child.forEach(function (child) { child.unselectAll(true); }); if (!isDownUpdate) { if (this.parent) this.parent.updateUp(); } }; TreeNodeHolder.prototype.reset = function () { if (this.selected !== "empty") this.selected = 'none'; if (this.itemElt) this.itemElt.selected = this.selected; this.child.forEach(function (child) { child.reset(true); }); } TreeNodeHolder.prototype.updateFromChild = function () { if (this.child.length === 0) return; var childSelectAll = 0; var childSelectChild = 0; for (var i = 0; i < this.child.length; ++i) { if (this.child[i].selected === 'all') { childSelectAll++; } else if (this.child[i].selected === 'child') { childSelectChild++; } } if (childSelectAll === this.child.length) { this.selected = 'all'; } else if (childSelectChild + childSelectAll > 0) { this.selected = 'child'; } else { this.selected = 'none'; } if (this.itemElt) { this.itemElt.selected = this.selected; } }; TreeNodeHolder.prototype.updateUp = function () { this.updateFromChild(); if (this.parent) this.parent.updateUp(); }; TreeNodeHolder.prototype.calcEstimateWidth = function () { var width = 12;//padding width += 23 * this.level; width += 14.7 + 5;//toggle icon width += 16;//checkbox if (this.item.icon) width += 21;//icon width += 7 + estimateWidth14(this.item.text);//margin-text if (this.item.desc) width += 6 + estimateWidth14(this.item.desc) * 0.85; return width; }; TreeNodeHolder.prototype.calcWidth = function () { var width = 12;//padding width += 43; //cheat for some size with checklistbox width += 1.75 * 14 * this.level; width += 14.7 + 5;//toggle icon width += 16;//checkbox if (this.item.icon) width += 21;//icon width += 7 + measureArial14TextWidth(this.item.text);//margin-text if (this.item.desc) width += 6 + measureArial14TextWidth(this.item.desc/*, '11.9px arial'*/).width * 0.85; return width; }; TreeNodeHolder.prototype.isDescendantOf = function (parent) { var cr = this.parent; while (cr) { if (parent === cr) return true; cr = cr.parent; } return false; }; /*** * * @param {TreeNodeHolder[]=} ac * @return {TreeNodeHolder[]} */ TreeNodeHolder.prototype.toArray = function (ac) { ac = ac || []; ac.push(this); if (this.status === 'open') { for (var i = 0; i < this.child.length; ++i) { this.child[i].toArray(ac); } } return ac; }; TreeNodeHolder.prototype.traverse = function (cb) { cb(this); this.child.forEach(c => c.traverse(cb)); }; Object.defineProperty(TreeNodeHolder.prototype, 'itemElt', { set: function (elt) { if (this._elt === elt) return; if (this._elt) { if (this._elt.nodeHolder === this) { this._elt.nodeHolder = null; } } if (elt) { if (elt.nodeHolder) { elt.nodeHolder.itemElt = null; } elt.nodeHolder = this; this._elt = elt; elt.data = this.item; elt.level = this.level; elt.status = this.status; elt.selected = this.selected; if (this.item.noSelect || !this.canSelect) { elt.noSelect = true; } else { elt.noSelect = false; } } else { this._elt = null; } }, get: function () { return this._elt; } }); TreeNodeHolder.prototype.findReferenceNode = function () { var value = this.item.value; var holders = this.boxElt.findItemHoldersByValue(value); var holder; for (var i = 0; i < holders.length; ++i) { holder = holders[i]; if ((holder.item === this.item.ref || holder.item === this.item) && holder !== this) return holder; } return null; }; TreeNodeHolder.prototype.getRoot = function () { if (!this.parent) return this; return this.parent.getRoot(); }; TreeNodeHolder.prototype.updateSelectedFromRef = function () { var ref = this.findReferenceNode(); if (!ref) return; var selected = ref.selected; this.selected = selected; if (this.itemElt) this.itemElt.selected = selected; this.child.forEach(function (c) { c.updateSelectedFromRef(); }); }; /** * * @param {CheckTreeBox} elt * @constructor */ function CTBItemListController(elt) { this.elt = elt; var RootHolderClass = this.elt.RootHolderClass; this._items = []; this._values = []; this.itemHolderByValue = {}; this.rootHolder = new RootHolderClass(this.elt, []);; /*** * * @type {TreeNodeHolder[]} */ // this.rootHolders = []; /*** * * @type {TreeRootHolder} */ this.rootViewHolder =this.rootHolder; /*** * * @type {TreeNodeHolder[]} */ this.viewHolders = [];//toArray this.$checkAll = Object(ACore["a" /* $ */])('.as-select-list-box-check-all', this.elt) .on('change', this.ev_checkAllChange.bind(this)); this.$scroller = Object(ACore["a" /* $ */])('.as-check-tree-box-scroller', elt) .on('scroll', this.ev_scroll.bind(this)); this.itemInPage = Math.max(36, Math.ceil(Object(Dom["d" /* getScreenSize */])().height / this.itemHeight)); this.$content = Object(ACore["a" /* $ */])('.as-check-tree-box-content', elt); this.$pages = Object(ACore["b" /* $$ */])('.as-select-list-box-page', elt); this.$pages.forEach(function (p) { p.__viewOffset__ = -1; }); } CTBItemListController.prototype.preLoadN = 3; CTBItemListController.prototype.itemHeight = 28; CTBItemListController.prototype.itemInPage = 36; CTBItemListController.prototype.resetView = function () { this.elt.$searchInput.value = ''; this.viewHolders = this.rootHolder.toArray(); this.rootViewHolder = this.rootHolder; this.updateContentSize(); this.viewListAt(0); } CTBItemListController.prototype.setItems = function (items) { if (!(items instanceof Array)) items = []; prepareSearchForList(items); this._items = items; var RootHolderClass = this.elt.RootHolderClass; this.rootHolder = new RootHolderClass(this.elt, items); this.itemHolderByValue = this.rootHolder.depthIndexing(); this.estimateSize = this.rootHolder.calcEstimateSize(); this.elt.addStyle('--select-list-estimate-width', this.estimateSize.width + 'px'); this.resetView(); this.rootHolder.setValues(this._values); }; CTBItemListController.prototype.setValues = function (values) { if (values instanceof Array) { values = values.slice(); } else if (values === undefined || values === null) { values = []; } else values = [values]; this._values = values; this.rootHolder.setValues(values); }; CTBItemListController.prototype.getValues = function () { return this.rootHolder.getValues(); }; CTBItemListController.prototype.getViewValues = function () { return this.getValues(); }; CTBItemListController.prototype.updateContentSize = function () { this.$content.addStyle('height', this.viewHolders.length * this.itemHeight / 14 + 'em'); }; CTBItemListController.prototype.viewListAt = function (offset) { offset = offset || 0; if (!this.elt.isDescendantOf(document.body)) { this.elt.domSignal.emit('viewListAt', offset); return; } this.elt.noTransition(); var midPage = this.$pages.length >> 1; var startOffset = Math.max(0, offset - midPage * this.itemInPage); var cOffset; var itemN = this.viewHolders.length; for (var i = 0; i < this.$pages.length; ++i) { cOffset = startOffset + i * this.itemInPage; if (cOffset < itemN) { this.$pages[i].__viewOffset__ = cOffset; this.$pages[i].removeStyle('display') .addStyle('top', cOffset * this.itemHeight / 14 + 'em'); this._fillPage(this.$pages[i], Math.min(this.itemInPage, itemN - cOffset)); this._assignItems(this.$pages[i], cOffset); } else { this.$pages[i].__viewOffset__ = -1; this.$pages[i].addStyle('display', 'none'); } } }; CTBItemListController.prototype._fillPage = function (pageElt, n) { while (pageElt.childNodes.length > n) { this._releaseItem(pageElt.lastChild); pageElt.removeChild(pageElt.lastChild); } while (pageElt.childNodes.length < n) { pageElt.addChild(this._requestItem()); } }; CTBItemListController.prototype._assignItems = function (pageElt, offset) { for (var i = 0; i < pageElt.childNodes.length; ++i) { this.viewHolders[offset + i].itemElt = pageElt.childNodes[i]; } }; CTBItemListController.prototype._requestItem = function () { var res = this._pool.pop() || Object(ACore["c" /* _ */])({ tag: js_CheckTreeItem.tag, props: { menuElt: this }, on: { presstoggle: function (event) { this.menuElt.eventHandler.toggleItem(this, event); }, select: function (event) { this.menuElt.eventHandler.selectItem(this, event); } } }); res.menuElt = this.elt; return res; }; CTBItemListController.prototype._pool = []; CTBItemListController.prototype._releaseItem = function (item) { if (item.nodeHolder && item.nodeHolder.itemElt === item) { item.nodeHolder.itemElt = null; } this._pool.push(item); }; CTBItemListController.prototype.findItemHoldersByValue = function (value) { return (this.itemHolderByValue[keyStringOf(value)] || []).slice(); }; CTBItemListController.prototype.isSelectedAll = function () { return this.rootHolder.selected; }; /* CTBItemListController.prototype.selectAll = function (selected){ var preValues = this.getValues(); switch (selected) { case 'all': this.rootHolder.unselectAll(); break; case 'child': if (this.rootHolder.canSelectAll) { this.rootHolder.selectAll(); } else { this.rootHolder.unselectAll(); } break; case 'none': this.rootHolder.selectAll(); break; } if (this.rootViewHolder !== this.rootHolder) { this.rootViewHolder.updateSelectedFromRef(); } var newValues = this.getValues(); if (!arrayCompare(preValues, newValues)) { this.elt.emit('change', { type: 'change', target: this }, this); } };*/ CTBItemListController.prototype.ev_scroll = function (event) { var itemHeight = this.itemHeight * this.elt.getFontSize() / 14; var scrollTop = this.$scroller.scrollTop; var scrollBottom = scrollTop + this.$scroller.clientHeight; var startOffset = this.$pages[0].__viewOffset__; var endOffset = this.$pages[this.$pages.length - 1].__viewOffset__; if (endOffset === -1) { endOffset = this.viewHolders.length; } else { endOffset += this.$pages[this.$pages.length - 1].childNodes.length; } var needLoad = 0; if (startOffset > 0 && startOffset * itemHeight + 200 > scrollTop) needLoad = -1; if (needLoad === 0 && this.viewHolders.length > endOffset && endOffset * itemHeight - 200 < scrollBottom) { needLoad = 1; } var page2Load; if (needLoad < 0) { page2Load = this.$pages.pop(); this.$pages.unshift(page2Load); page2Load.__viewOffset__ = Math.max(0, startOffset - this.itemInPage); this._fillPage(page2Load, startOffset - page2Load.__viewOffset__); this._assignItems(page2Load, page2Load.__viewOffset__); page2Load.removeStyle('display'); page2Load.addStyle('top', page2Load.__viewOffset__ * itemHeight + 'px'); } else if (needLoad > 0) { for (var i = 0; i < this.$pages.length; ++i) { if (this.$pages[i].__viewOffset__ === -1) { page2Load = this.$pages[i]; break; } } if (!page2Load) { page2Load = this.$pages.shift(); this.$pages.push(page2Load); } page2Load.__viewOffset__ = endOffset; this._fillPage(page2Load, Math.min(this.itemInPage, this.viewHolders.length - endOffset)); this._assignItems(page2Load, page2Load.__viewOffset__); page2Load.removeStyle('display'); page2Load.addStyle('top', page2Load.__viewOffset__ * itemHeight + 'px'); } }; CTBItemListController.prototype.ev_checkAllChange = function (event) { var selected = this.rootHolder.selected; var preValues = this.getValues(); switch (selected) { case 'all': this.rootHolder.unselectAll(); break; case 'child': if (this.rootHolder.canSelectAll) { this.rootHolder.selectAll(); } else { this.rootHolder.unselectAll(); } break; case 'none': this.rootHolder.selectAll(); break; } if (this.rootViewHolder !== this.rootHolder) { this.rootViewHolder.updateSelectedFromRef(); } var newValues = this.getValues(); if (!arrayCompare(preValues, newValues)) { this.elt.emit('change', { type: 'change', target: this }, this); } }; /** * * @param {CheckTreeBox} elt * @constructor */ function CTBActionController(elt) { this.elt = elt; this.$cancelBtn = Object(ACore["a" /* $ */])('.as-select-list-box-cancel-btn', this.elt) .on('click', this.ev_clickCancelBtn.bind(this)); this.$closeBtn = Object(ACore["a" /* $ */])('.as-select-list-box-close-btn', this.elt) .on('click', this.ev_clickCloseBtn.bind(this)); } CTBActionController.prototype.ev_clickCancelBtn = function (event) { this.elt.emit('cancel', { type: 'cancel', target: this, originalEvent: event }, this); }; CTBActionController.prototype.ev_clickCloseBtn = function (event) { this.elt.emit('close', { type: 'close', target: this, originalEvent: event }, this); }; function CTBSearchController(elt) { this.elt = elt; this.cache = {}; this.$searchInput = Object(ACore["a" /* $ */])('searchtextinput', this.elt) .on('stoptyping', this.ev_searchModify.bind(this)); } CTBSearchController.prototype.ev_searchModify = function () { var text = this.$searchInput.value.trim(); if (text.length === 0) { this.elt.listCtrl.resetView(); return; } var searchData; if (this.cache[text]) { searchData = this.cache[text]; } else { searchData = {}; searchData.items = searchTreeListByText(text, this.elt.listCtrl._items); searchData.rootViewHolder = new TreeRootHolder(this.elt, searchData.items); searchData.items.forEach(function visit(it) { if (it.ref.items && it.ref.items.length > 0 && (!it.items || it.items.length === 0)) { it.items = it.ref.items; it.doNotInitOpen = true; } else if (it.items && it.items.length > 0) { it.items.forEach(visit); } }); console.log(searchData.items) } searchData.rootViewHolder.traverse(hd => { if (hd.status === 'close') { if (!hd.item.doNotInitOpen) hd.status = 'open'; } }); //todo: short command this.elt.listCtrl.rootViewHolder = searchData.rootViewHolder; this.elt.listCtrl.viewHolders = this.elt.listCtrl.rootViewHolder.toArray(); this.elt.listCtrl.rootViewHolder.updateSelectedFromRef(); this.elt.listCtrl.updateContentSize(); this.elt.listCtrl.viewListAt(0); this.elt.dropdownCtrl.updatePosition(); }; /** * * @param {CheckTreeBox} elt * @constructor */ function CTBDropdownController(elt) { this.elt = elt; } CTBDropdownController.prototype.updatePosition = function () { if (this.elt.updatePosition) { this.elt.updatePosition(); } }; // EXTERNAL MODULE: ./node_modules/absol-acomp/css/cpuviewer.css var cpuviewer = __webpack_require__(263); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CPUViewer.js /*** * @extends AElement * @constructor */ function CPUViewer() { /*** * * @type {HTMLCanvasElement} */ this.$canvas = Object(ACore["a" /* $ */])('canvas', this); this.ctx = this.$canvas.getContext('2d'); this.offsetTime = 0; this.inv = -1; this.usage = Array(120).fill(0); this.holdStart = 0; this.holdTime = 0; this.logOffset = 0; this.counter = 0; this['tick'] = this.tick.bind(this); } CPUViewer.tag = 'CPUViewer'.toLowerCase(); CPUViewer.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-cpu-viewer', child: { tag: 'canvas', attr: { width: '120px', height: '50px' } } }); }; CPUViewer.prototype.start = function () { if (this.inv < 0) { this.offsetTime = new Date().getTime(); setInterval(this.tick, 250) } }; CPUViewer.prototype.stop = function () { if (this.inv > 0) { clearInterval(this.inv); this.inv = -1; } }; CPUViewer.prototype.tick = function () { while (this.holdTime > 250) { this.holdTime -= 250; this.usage.push(100); } this.usage.push(this.holdTime * 100 / 250); while (this.usage.length > 120) { this.usage.shift(); } this.ctx.fillStyle = 'black'; this.ctx.fillRect(0, 0, 120, 50); var y; this.ctx.fillStyle = 'yellow'; for (var x = 0; x < this.usage.length; ++x) { y = this.usage[x] / 2; this.ctx.fillRect(x, 50 - y, 1, y); } var now = new Date().getTime(); this.logOffset = now; this.holdStart = now; this.holdTime = 0; }; CPUViewer.prototype.hold = function () { if (this.counter === 0) { this.holdStart = new Date().getTime(); } this.counter++; }; CPUViewer.prototype.release = function () { if (this.counter <= 0) return; this.counter--; if (this.counter === 0) { this.holdTime += new Date().getTime() - this.holdStart; } }; /*** * * @type {CPUViewer} */ CPUViewer.instance = null; CPUViewer.state = 'NOT_INIT'; CPUViewer.start = function () { if (!this.instance) { this.instance = Object(ACore["c" /* _ */])('cpuviewer'); this.state = "NOT_ATTACHED"; } if (this.state === "NOT_ATTACHED") { this.state = "RUNNING"; Dom["b" /* default */].documentReady.then(function () { document.body.appendChild(this.instance); }.bind(this)); } this.instance.start(); CPUViewer.hold = function () { this.instance.hold(); }; CPUViewer.release = function () { this.instance.release(); }; }; CPUViewer.stop = function () { if (!this.instance) return; if (this.state !== "RUNNING") return; this.instance.stop(); this.instance.remove(); this.state = 'NOT_ATTACHED'; }; CPUViewer.hold = function () { }; CPUViewer.release = function () { }; ACore["d" /* default */].install(CPUViewer); /* harmony default export */ var js_CPUViewer = (CPUViewer); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckTreeLeafOnlyBox.js var normalizeItem = item => { var nItem = Object.assign({}, item); if (!nItem.isLeaf && nItem.noSelect) { delete nItem.noSelect; } if (nItem.items && nItem.items.map) nItem.items = normalizeItems(nItem.items); return nItem; } var normalizeItems = (items) => { return items.map(it => normalizeItem(it)); }; /*** * Only tree has leaf can be selected * @extends CheckTreeBox * @constructor */ function CheckTreeLeafOnlyBox() { js_CheckTreeBox.apply(this, arguments); } CheckTreeLeafOnlyBox.tag = 'CheckTreeLeafOnlyBox'.toLowerCase(); CheckTreeLeafOnlyBox.render = function () { var mobile = (arguments[1] && arguments[1].forceMobile) || BrowserDetector["a" /* default */].isMobile; var footer = { class: 'as-dropdown-box-footer', child: [ { tag: 'checkbox', class: 'as-select-list-box-check-all', props: { checked: false, text: HTML5_LanguageSystem.getText('txt_check_all') || HTML5_LanguageSystem.getText('txt_all') || 'Check All' } }, { class: 'as-dropdown-box-footer-right', child: [ { tag: 'a', class: 'as-select-list-box-cancel-btn', attr: { "data-ml-key": 'txt_cancel' } }, { tag: 'a', class: 'as-select-list-box-close-btn', attr: { "data-ml-key": 'txt_close' } } ] } ] }; var content = { class: ['as-check-tree-box-scroller', 'as-bscroller', 'as-select-list-box-scroller'], child: { class: ['as-check-tree-box-content', 'as-select-list-box-content'], child: Array(this.prototype.preLoadN).fill('.as-select-list-box-page') } }; if (mobile) { return Object(ACore["c" /* _ */])({ props: { mobile: true }, extendEvent: ['change', 'close', 'toggleitem', 'cancel'], class: ['am-check-tree-box-modal', 'am-modal', 'am-dropdown-box-modal'], child: { class: ['am-check-tree-box', 'am-dropdown-box', 'as-dropdown-box-common-style'], child: [ { class: 'am-dropdown-box-header', child: [ { tag: Searcher.tag }, { tag: 'button', class: 'am-dropdown-box-close-btn', child: 'span.mdi.mdi-close' } ] }, content, footer ] } }) } return Object(ACore["c" /* _ */])({ tag: 'follower', extendEvent: ['change', 'toggleitem', 'cancel', 'close'], class: ['as-check-tree-leaf-only-box', 'as-check-tree-box', 'as-select-list-box', 'as-anchor-1'], child: [ { class: 'as-select-list-box-search-ctn', child: 'searchtextinput' }, content, footer ], props: { anchor: [1, 6, 2, 5] } }); }; Object.assign(CheckTreeLeafOnlyBox.prototype, js_CheckTreeBox.prototype); CheckTreeLeafOnlyBox.property = Object.assign({}, js_CheckTreeBox.property); CheckTreeLeafOnlyBox.eventHandler = Object.assign({}, js_CheckTreeBox.eventHandler); CheckTreeLeafOnlyBox.prototype._pool = []; CheckTreeLeafOnlyBox.property.items = { get: js_CheckTreeBox.property.items.get, set: function (items) { items = normalizeItems(items || []); js_CheckTreeBox.property.items.set.call(this, items); } }; CheckTreeLeafOnlyBox.prototype._requestItem = function () { var res = this._pool.pop() || Object(ACore["c" /* _ */])({ tag: js_CheckTreeItem.tag, class: 'as-check-tree-leaf-only-item', props: { menuElt: this }, on: { presstoggle: function (event) { this.menuElt.eventHandler.toggleItem(this, event); }, select: function (event) { this.menuElt.eventHandler.selectItem(this, event); } } }); res.menuElt = this; return res; }; CheckTreeLeafOnlyBox.prototype.HolderClass = TreeLeafOnlyNodeHolder; ACore["d" /* default */].install(CheckTreeLeafOnlyBox); /* harmony default export */ var js_CheckTreeLeafOnlyBox = (CheckTreeLeafOnlyBox); /*** * @extends TreeRootHolder * @param {CheckTreeLeafOnlyBox} boxElt * @param items * @constructor */ function TreeLeafOnlyRootHolder(boxElt, items) { TreeRootHolder.apply(this, arguments); } CheckTreeLeafOnlyBox.prototype.RootHolderClass = TreeLeafOnlyRootHolder; OOP["a" /* default */].mixClass(TreeLeafOnlyRootHolder, TreeRootHolder); /*** * @extends TreeNodeHolder * @constructor */ function TreeLeafOnlyNodeHolder() { TreeNodeHolder.apply(this, arguments); /*** * @memberOf TreeLeafOnlyNodeHolder# * @type {number} */ this.leafCount = 0; if (this.item.isLeaf) { this.leafCount = 1; } else { this.leafCount = this.child.reduce((ac, c) => ac + c.leafCount, 0); } if (this.child.length > 0) { this.item.noSelect = this.child.every(c => c.item.noSelect);//all child is noSelect=> noSelect } this.canSelect = this.canSelect && this.leafCount > 0; this.canSelectAll = this.canSelect && !this.item.noSelect && this.child.every(c => c.canSelectAll || c.leafCount === 0); if (this.leafCount === 0) this.selected = 'empty'; } OOP["a" /* default */].mixClass(TreeLeafOnlyNodeHolder, TreeNodeHolder); TreeLeafOnlyRootHolder.prototype.SubHolderClass = TreeLeafOnlyNodeHolder; TreeLeafOnlyNodeHolder.prototype.setValues = function (values) { if (values[keyStringOf(this.item.value)]) { this.selectAll(true); } else { this.child.forEach(c => c.setValues(values)); } this.updateFromChild(); }; /*** * * @param {boolean=} isDownUpdate */ TreeLeafOnlyNodeHolder.prototype.selectAll = function (isDownUpdate) { if (this.selected === 'empty') return; return TreeNodeHolder.prototype.selectAll.apply(this, arguments); }; TreeLeafOnlyNodeHolder.prototype.unselectAll = function (isDownUpdate) { if (this.selected === 'empty') return; return TreeNodeHolder.prototype.unselectAll.apply(this, arguments); }; TreeLeafOnlyNodeHolder.prototype.updateFromChild = function () { if (this.child.length === 0) return; var count = this.child.reduce((ac, cr) => { ac[cr.selected]++; return ac; }, { all: 0, child: 0, none: 0, empty: 0 }); // if (this.boxElt.debug) // console.log( this.item, count.empty , count.all, this.child.length);//0, 9, 10 if (count.empty === this.child.length) { this.selected = 'empty'; } else if (count.empty + count.all === this.child.length) { this.selected = 'all'; } else if (count.all + count.child > 0) { this.selected = 'child'; } else if (this.selected !== "empty") { this.selected = 'none'; } if (this.itemElt) { this.itemElt.selected = this.selected; } }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiCheckTreeMenu.js /*** * @extends AElement * @constructor */ function MultiCheckTreeMenu() { this._items = []; this._values = []; this._viewValues = []; /*** * @type {CheckTreeBox|CheckTreeLeafOnlyBox} */ this.$checkTreeBox = Object(ACore["c" /* _ */])({ tag: this.renderProps.leafOnly ? js_CheckTreeLeafOnlyBox.tag : js_CheckTreeBox.tag, // forceMobile: true, on: { change: this.eventHandler.boxChange, preupdateposition: this.eventHandler.preUpdateListPosition, toggleitem: this.eventHandler.boxToggleItem, cancel: this.eventHandler.boxCancel, close: this.eventHandler.boxClose }, props: { initOpened: this.renderProps.initOpened, enableSearch: this.renderProps.enableSearch } }); this.$itemCtn = Object(ACore["a" /* $ */])('.as-multi-select-menu-item-ctn', this); this.$checkTreeBox.followTarget = this; this.$checkTreeBox.sponsorElement = this; this.on('click', this.eventHandler.click); /** * parent will be selected if all off leaf selected, sub tree can not select if had no leaf * @name leafOnly * @type {boolean} * @memberOf MultiCheckTreeMenu# */ /** * parent will be selected if all off leaf selected, sub tree can not select if had no leaf * @name initOpened * @type {number} * @memberOf MultiCheckTreeMenu# */ /*** * todo: TREE has noSelect */ } MultiCheckTreeMenu.tag = 'MultiCheckTreeMenu'.toLowerCase(); MultiCheckTreeMenu.render = function (data, domDesc) { var leafOnly = domDesc.props && domDesc.props.leafOnly; var props = domDesc.props || {}; /** * @name renderProps * @memberof MultiCheckTreeMenu# */ var res = Object(ACore["c" /* _ */])({ class: ['as-multi-select-menu', 'as-multi-check-tree-menu'], extendEvent: ['change'], attr: { tabindex: '1' }, child: [ { class: ['as-multi-select-menu-item-ctn', 'as-bscroller'] }, { tag: 'button', class: 'as-multi-select-menu-toggle-btn', child: 'dropdown-ico' }, 'attachhook' ], props: { renderProps: props } }); if (leafOnly) res.addClass('as-leaf-only'); if (BrowserDetector["a" /* default */].isMobile) res.addClass('am-multi-select-menu'); return res; }; MultiCheckTreeMenu.prototype.tokenPool = []; MultiCheckTreeMenu.prototype._requestToken = function () { var token = this.tokenPool.pop(); if (!token) { token = Object(ACore["c" /* _ */])({ tag: js_SelectBoxItem.tag, props: { menu: this }, on: { close: function (event) { setTimeout(function () { if (this.menu) this.menu.eventHandler.pressCloseToken(this, event); }.bind(this), 1) } } }); } return token; }; MultiCheckTreeMenu.prototype._releaseToken = function (token) { token.menu = null; this.tokenPool.push(token); }; MultiCheckTreeMenu.prototype._filToken = function (n) { while (this.$itemCtn.childNodes.length > n) { this.$itemCtn.removeChild(this.$itemCtn.lastChild); } while (this.$itemCtn.childNodes.length < n) { this.$itemCtn.addChild(this._requestToken()); } }; MultiCheckTreeMenu.prototype._assignTokens = function (items) { for (var i = 0; i < items.length; ++i) { this.$itemCtn.childNodes[i].data = items[i]; } }; MultiCheckTreeMenu.prototype.findItemsByValues = function (values) { return values.map(function (value) { var holders = this.$checkTreeBox.findItemHoldersByValue(value); if (holders.length > 0) return holders[0].item; return null; }.bind(this)).filter(function (it) { return !!it; }); }; MultiCheckTreeMenu.prototype.viewValues = function (values) { var items = this.findItemsByValues(values); this._filToken(items.length); this._assignTokens(items); this._viewValues = values; if (this.isFocus) { var bound = this.getBoundingClientRect(); this.$checkTreeBox.addStyle('min-width', bound.width + 'px'); ResizeSystem["a" /* default */].update(); } }; MultiCheckTreeMenu.prototype.commitView = function () { var values = this._values; var views = this._viewValues; var changed = values.length !== views.length; var viewDict; if (!changed) { viewDict = views.reduce(function (ac, cr) { ac[cr] = true; return ac; }, {}); changed = values.some(function (value) { return !viewDict[value]; }); } if (changed) { this._values = views.slice(); this.emit('change', { type: 'change', target: this }, this); } }; MultiCheckTreeMenu.prototype.cancelView = function () { this.$checkTreeBox.values = this._values; this.viewValues(this.$checkTreeBox.viewValues); }; MultiCheckTreeMenu.prototype.init = function (props) { props = props || {}; var cProps = Object.assign({}, props); if ('initOpened' in props) { this.initOpened = props.initOpened; delete cProps.initOpened; } if ('leafOnly' in props) { this.leafOnly = props.leafOnly; delete cProps.leafOnly; } if ('items' in props) { this.items = props.items; delete cProps.items; } if ('values' in props) { this.values = props.values; delete cProps.values; } Object.assign(this, cProps); } MultiCheckTreeMenu.property = {}; MultiCheckTreeMenu.property.initOpened = { set: function (value) { if (isNaturalNumber(value)) { this._initOpened = value; } else { this._initOpened = 0; } this.$checkTreeBox.initOpened = this._initOpened; }, get: function () { return this._initOpened; } } MultiCheckTreeMenu.property.isFocus = { /*** * @this MultiCheckTreeMenu * @param value */ set: function (value) { if (value && (this.disabled || this.readOnly)) return; var self = this; value = !!value; var c = this.hasClass('as-focus'); if (value === c) return; js_CPUViewer.hold(); if (value) { self.off('click', self.eventHandler.click); var bound = this.getBoundingClientRect(); this.$checkTreeBox.addStyle('min-width', bound.width + 'px'); this.addClass('as-focus'); document.body.appendChild(this.$checkTreeBox); this.$checkTreeBox.updatePosition(); if (this._focusTimeout > 0) { clearTimeout(this._focusTimeout); } this._focusTimeout = setTimeout(function () { document.addEventListener('mousedown', this.eventHandler.clickOut); this._focusTimeout = -1; this.$checkTreeBox.focus(); }.bind(this), 5); } else { this.removeClass('as-focus'); this.$checkTreeBox.selfRemove(); this.$checkTreeBox.resetSearchState(); document.removeEventListener('mousedown', this.eventHandler.clickOut); function waitMouseUp() { document.removeEventListener('mouseup', waitMouseUp); setTimeout(function () { self.on('click', self.eventHandler.click); }, 5) } // document.addEventListener('mouseup', waitMouseUp);why? setTimeout(waitMouseUp, 100); } js_CPUViewer.release(); }, get: function () { return this.hasClass('as-focus'); } }; MultiCheckTreeMenu.property.items = { set: function (items) { this._items = copySelectionItemArray(items || [], { removeNoView: true }); this.$checkTreeBox.items = this._items; this.addStyle('--list-min-width', Math.max(145 + 20, this.$checkTreeBox.estimateSize.width) + 'px'); this.viewValues(this.$checkTreeBox.viewValues); }, get: function () { return this.$checkTreeBox.items; } }; MultiCheckTreeMenu.property.values = { /*** * @this MultiCheckTreeMenu * @param values */ set: function (values) { this.$checkTreeBox.values = values; this.viewValues(this.$checkTreeBox.viewValues); }, /*** * @this MultiCheckTreeMenu */ get: function () { return this.$checkTreeBox.values; } }; MultiCheckTreeMenu.property.checkedValues = { get: function () { return this.$checkTreeBox.viewValues; } }; MultiCheckTreeMenu.property.leafOnly = { set: function (value) { if (!!value === this.hasClass('as-leaf-only')) return; throw Error("Can not change leafOnly value!"); }, get: function () { return this.hasClass('as-leaf-only'); } }; MultiCheckTreeMenu.property.disabled = js_MultiSelectMenu.property.disabled; MultiCheckTreeMenu.property.readOnly = js_MultiSelectMenu.property.readOnly; MultiCheckTreeMenu.eventHandler = {}; /*** * @this MultiCheckTreeMenu * @param event */ MultiCheckTreeMenu.eventHandler.clickOut = function (event) { if ((event.target.hasClass && event.target.hasClass('am-modal')) || event.target === this || event.target === this.$itemCtn || (!Object(EventEmitter["d" /* hitElement */])(this, event) && !Object(EventEmitter["d" /* hitElement */])(this.$checkTreeBox, event))) { this.commitView(); this.isFocus = false; } }; /*** * @this MultiCheckTreeMenu * @param event */ MultiCheckTreeMenu.eventHandler.boxClose = function (event) { this.commitView(); this.isFocus = false; }; /*** * @this MultiCheckTreeMenu * @param event */ MultiCheckTreeMenu.eventHandler.click = function (event) { if (!this.readOnly && (event.target === this || event.target === this.$itemCtn)) { this.isFocus = true; } }; /*** * @this MultiCheckTreeMenu * @param event */ MultiCheckTreeMenu.eventHandler.boxChange = function (event) { this.viewValues(this.$checkTreeBox.viewValues); ResizeSystem["a" /* default */].update(); }; MultiCheckTreeMenu.eventHandler.boxCancel = function (event) { this.cancelView(); this.isFocus = false; }; /*** * @this MultiCheckTreeMenu * @param {SelectBoxItem} tokenElt * @param event */ MultiCheckTreeMenu.eventHandler.pressCloseToken = function (tokenElt, event) { var value = tokenElt.value; var holders = this.$checkTreeBox.findItemHoldersByValue(value); holders.forEach(function (holder) { holder.unselectAll(); }); this.$checkTreeBox.updateSelectedInViewIfNeed(); var newValues = this.$checkTreeBox.viewValues; this.viewValues(newValues); this.emit('change', { type: 'change', target: this }, this); }; MultiCheckTreeMenu.eventHandler.preUpdateListPosition = function () { var bound = this.getBoundingClientRect(); var screenSize = Object(Dom["d" /* getScreenSize */])(); var availableTop = bound.top - 5; var availableBot = screenSize.height - 5 - bound.bottom; this.$checkTreeBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px'); var outBound = Object(Dom["g" /* traceOutBoundingClientRect */])(this); if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) { this.isFocus = false; } }; MultiCheckTreeMenu.eventHandler.boxToggleItem = function (event) { var bound = this.getBoundingClientRect(); var screenSize = Object(Dom["d" /* getScreenSize */])(); var availableTop = bound.top - 5; var availableBot = screenSize.height - 5 - bound.bottom; this.$checkTreeBox.addStyle('--max-height', (this.$checkTreeBox._lastAnchor < 4 ? availableBot : availableTop) + 'px'); this.$checkTreeBox.updatePosition(); }; MultiCheckTreeMenu.property.enableSearch = { set: function (value) { this.$checkTreeBox.enableSearch = !!value; }, get: function () { return this.$checkTreeBox.enableSearch; } }; ACore["d" /* default */].install(MultiCheckTreeMenu); /* harmony default export */ var js_MultiCheckTreeMenu = (MultiCheckTreeMenu); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/fileinputbox.css var fileinputbox = __webpack_require__(265); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/FileInputBox.js /*** * @extends AElement * @constructor */ function FileInputBox() { this.$fileSize = Object(ACore["a" /* $ */])('.as-file-input-box-file-size', this); this.$fileName = Object(ACore["a" /* $ */])('.as-file-input-box-file-name', this); this.$bg = Object(ACore["a" /* $ */])('.as-file-input-box-background', this); this.$input = Object(ACore["a" /* $ */])('input', this) .on('change', this.eventHandler.input_fileChange); this.$trigger = Object(ACore["c" /* _ */])({ elt: Object(ACore["a" /* $ */])('.as-file-input-box-trigger', this), tag: js_DropZone.tag, on: { fileenter: this.eventHandler.input_fileEnter, fileleave: this.eventHandler.input_fileLeave, filedrop: this.eventHandler.input_fileDrop, } }); this.$downloadBtn = Object(ACore["a" /* $ */])('.as-file-input-box-download-btn', this) .on('click', this.download.bind(this)); this.$removeBtn = Object(ACore["a" /* $ */])('.as-file-input-box-remove-btn', this) .on('click', this.clearValue.bind(this, true)); this._value = null; this._fileSize = null; this._fileName = null; this._fileType = null; this._valueInfo = null; this._thumbnail = null; /*** * default true * @name allowUpload * @type {boolean} * @memberOf FileInputBox# */ this.allowUpload = true; /*** * @name value * @type {null|any} * @memberOf FileInputBox# */ /*** * @name thumbnail * @type {null|any} * @memberOf FileInputBox# */ /*** * @name fileSize * @type {null|number} * @memberOf FileInputBox# */ /*** * @name fileType * @type {null|string} * @memberOf FileInputBox# */ /*** * @name fileName * @type {null|string} * @memberOf FileInputBox# */ /*** * default: false * @name downloadable * @type {boolean} * @memberOf FileInputBox# */ } FileInputBox.tag = 'FileInputBox'.toLowerCase(); FileInputBox.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['change'], class: 'as-file-input-box', child: [ '.as-file-input-box-background', { tag: 'label', class: 'as-file-input-box-trigger', child: { tag: 'input', attr: { type: 'file', accept: '*', title: null } } }, { class: 'as-file-input-box-upload-overlay', child: 'span.mdi.mdi-upload' }, { class: 'as-file-input-box-info', child: [ { tag: 'span', class: 'as-file-input-box-file-name', child: { text: '' } }, 'br', { tag: 'span', class: 'as-file-input-box-file-size', child: { text: '' } }, ] }, { class: 'as-file-input-box-action-left', child: { tag: 'button', class: 'as-file-input-box-remove-btn', child: 'span.mdi.mdi-close' } }, { class: 'as-file-input-box-action-right', child: { tag: 'button', class: 'as-file-input-box-download-btn', child: 'span.mdi.mdi-download' } }, { class: 'as-file-input-box-checked', child: 'span.mdi.mdi-check-bold' }, ] }); }; FileInputBox.prototype.download = function () { var value = this.value; if (value) { if (value && value.name && value.url) { saveAs(value.url, value.name); } else { saveAs(value, this.fileName); } } }; FileInputBox.prototype.clearValue = function (userAction, event) { if (this.value) { this.value = null; if (userAction) { this.emit('change', { type: 'change', originalEvent: event, action: 'clear', target: this }, this); } } }; FileInputBox.prototype._updateThumbnail = function () { var previewUrl; var thumbnail = this.thumbnail; var fileType = this.fileType; if (thumbnail) { if (typeof thumbnail === "string") { previewUrl = thumbnail; } else if (thumbnail instanceof Blob || thumbnail instanceof File) { thumbnail.url = thumbnail.url || URL.createObjectURL(thumbnail); previewUrl = thumbnail.url; } } if (!previewUrl) { if (catalog.indexOf(fileType) >= 0) { previewUrl = messageinput_MessageInput.iconAssetRoot + '/' + fileType + '.svg'; } else { previewUrl = messageinput_MessageInput.iconAssetRoot + '/' + 'blank' + '.svg'; } } if (previewUrl) { this.$bg.addStyle('backgroundImage', 'url("' + encodeURI(previewUrl) + '")'); } else { this.$bg.removeStyle('backgroundImage') } }; FileInputBox.prototype._updateFileName = function () { var fileName = this.fileName; if (fileName) { this.$fileName.firstChild.data = fileName; this.addClass('as-has-file-name'); } else { this.$fileName.firstChild.data = ''; this.removeClass('as-has-file-name'); } }; FileInputBox.prototype._updateFileSize = function () { var fileSize = this.fileName; if (fileSize === null) { this.$fileSize.firstChild.data = ''; this.removeClass('as-has-file-size'); } else { this.$fileSize.firstChild.data = fileSize2Text(fileSize); this.addClass('as-has-file-size'); } }; FileInputBox.property = {}; FileInputBox.property.value = { set: function (value) { value = value || null; this._value = value; this._valueInfo = fileInfoOf(value); this._updateThumbnail(); this._updateFileName(); this._updateFileSize(); if (value) { this.addClass('as-has-value'); } else { this.removeClass('as-has-value'); } }, get: function () { return this._value; } }; FileInputBox.property.fileType = { set: function (value) { this._fileType = value; this._updateThumbnail(); }, /*** * @this FileInputBox * @return {*} */ get: function () { return this._fileType || (this._valueInfo && this._valueInfo.type) || null; } }; FileInputBox.property.fileName = { set: function (value) { value = typeof value === 'string' ? value : null; this._fileName = value; this._updateFileName(); }, get: function () { return this._fileName || (this._valueInfo && this._valueInfo.name) || null; } }; FileInputBox.property.fileSize = { set: function (value) { if (isRealNumber(value)) value = Math.max(0, value); else value = null; this._fileSize = value; this._updateFileSize(); }, get: function () { if (typeof this._fileSize === "number") return this._fileSize; if (this._valueInfo && typeof this._valueInfo.size === "number") return this._valueInfo.size; return null; } }; FileInputBox.property.thumbnail = { set: function (value) { this._thumbnail = value || null; this._updateThumbnail(); }, get: function () { return this._thumbnail; } }; FileInputBox.property.allowUpload = { set: function (value) { if (value) { this.addClass('as-allow-upload'); } else { this.removeClass('as-allow-upload'); } }, get: function () { return this.hasClass('as-allow-upload'); } }; FileInputBox.property.downloadable = { set: function (value) { if (value) { this.addClass('as-downloadable'); } else { this.removeClass('as-downloadable'); } }, get: function () { return this.hasClass('as-downloadable'); } }; FileInputBox.property.removable = { set: function (value) { if (value) { this.addClass('as-removable'); } else { this.removeClass('as-removable'); } }, get: function () { return this.hasClass('as-removable'); } }; FileInputBox.property.accept = { set: function (value) { if (!value) value = null; this.$input.attr('accept', value + ''); }, get: function () { return this.$input.attr('accept') || null; } }; FileInputBox.property.checked = { set: function (value) { if (value) { this.addClass('as-checked'); } else { this.removeClass('as-checked'); } }, get: function () { return this.hasClass('as-checked'); } }; FileInputBox.eventHandler = {}; FileInputBox.eventHandler.input_fileChange = function (event) { var files = Array.prototype.slice.call(this.$input.files); if (files.length > 0) { this.value = files[0]; this.emit('change', { type: 'change', originalEvent: event, file: files[0], action: 'file_dialog', target: this }, this); } }; FileInputBox.eventHandler.input_fileEnter = function (event) { }; FileInputBox.eventHandler.input_fileLeave = function (event) { }; FileInputBox.eventHandler.input_fileDrop = function (event) { var files = Array.prototype.slice.call(event.files); var accept = this.accept; var file; if (files.length > 0) { file = files[0]; if (!fileAccept(accept, file.type) && !fileAccept(accept, file.name)) file = null; } if (file) { this.value = file; this.emit('change', { type: 'change', originalEvent: event, file: file, action: 'drop', target: this }, this); } }; ACore["d" /* default */].install(FileInputBox); /* harmony default export */ var js_FileInputBox = (FileInputBox); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/countdowntext.css var countdowntext = __webpack_require__(267); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CountdownText.js var CountdownText_ = ACore["d" /* default */]._; var CountdownText_$ = ACore["d" /* default */].$; var tokenCache = {}; function remainSecondToText(remainSecond, format) { var tokens = tokenCache[format]; if (!tokens) { tokens = (format.match(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g')) || []).reduce(function (ac, cr) { ac[cr] = true; return ac; }, {}); tokenCache[format] = tokens; } var newText; var sec, min, hour; sec = Math[(tokens['ms'] || tokens['mss']) ? 'floor' : 'ceil'](remainSecond); min = Math.floor(remainSecond / 60); hour = Math.floor(remainSecond / 60 / 60); newText = format.replace(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (all) { switch (all) { case 'D': return Math.floor(remainSecond / 60 / 60 / 24) + ''; case 'HH': case 'H': case 'hh': if (tokens['D']) { return zeroPadding(hour % 24, all.length); } else { return zeroPadding(hour, all.length); } case 'mm': case 'M': case 'MM': if (tokens['HH'] || tokens['hh']) { return zeroPadding(min % 60, all.length); } else { return zeroPadding(min, all.length); } case 'ss': case 'S': case 'SS': if (tokens['m'] || tokens['mm']) { return zeroPadding(sec % 60, all.length); } else { return zeroPadding(sec, all.length); } case 'cs': return zeroPadding(Math.ceil(remainSecond * 100) % 100, 2); case 'ms': return zeroPadding(Math.ceil(remainSecond * 1000) % 1000, 3); default: return all; } }); return newText; } /*** * @extends AElement * @constructor */ function CountdownText() { this.addClass('as-countdown-text'); this.defineEvent('update'); this.defineEvent('finish'); this.text = ''; this._format = 'HH:mm'; this.format = 'HH:mm'; this.fps = 5; this._finishTime = null; this.finishTime = null; this['_tick'] = this._tick.bind(this); setTimeout(this.start.bind(this), 0);//auto start /*** * @type {number} * @name remainSecond * @memberOf CountdownText# */ /*** * @type {Date} * @name finishTime * @memberOf CountdownText# */ /*** * @type {string} * @name format * @memberOf CountdownText# */ } CountdownText.tag = 'CountdownText'.toLowerCase(); CountdownText.render = function () { return CountdownText_('span'); }; CountdownText.prototype.buildinFormat = { 'standard': function (remainSecond) { if (remainSecond >= 24 * 3600) { return remainSecondToText(remainSecond, 'D ngày HH:mm:ss'); } else { return remainSecondToText(remainSecond, 'HH:mm:ss'); } } }; CountdownText.prototype._tick = function () { var remainSecond = this.remainSecond; var prevText = this.text; var newText; var format = this._format; if (this.buildinFormat[format]) format = this.buildinFormat[format]; if (typeof format === "function") { newText = format.call(this, remainSecond); } else if (typeof format === "string") { newText = remainSecondToText(remainSecond, format); } if (prevText !== newText) { this.text = newText; this.innerHTML = newText; this.emit('update', { target: this, type: 'update' }, this); } if (remainSecond <= 0) { this.stop(); this.emit('finish', { target: this, type: 'update' }, this); } }; CountdownText.prototype.start = function () { this.resume(); }; CountdownText.prototype.resume = function () { if (this._intvId > 0) return; this._intvId = setInterval(this._tick, 1000 / this.fps); }; CountdownText.prototype.pause = function () { if (this._intvId > 0) { clearInterval(this._intvId); this._intvId = -1; } }; CountdownText.prototype.stop = function () { this.pause(); }; CountdownText.property = {}; CountdownText.property.format = { set: function (value) { if (typeof value === "string" || typeof value === 'function') { this._format = value || 'HH:mm'; } else { this._format = 'HH:mm'; } }, get: function () { return this._format; } }; CountdownText.property.remainSecond = { set: function (value) { if (!(value >= 0)) { value = 0; } this.finishTime = new Date(new Date().getTime() + value) }, get: function () { if (this.finishTime !== null) { return Math.max(0, (this.finishTime.getTime() - new Date().getTime()) / 1000); } else return null; } }; CountdownText.property.finishTime = { set: function (value) { if (typeof value === "number" || typeof value === 'string') { value = new Date(value); } if (!value || !value.getTime) value = null; if (value && value.getTime && isNaN(value.getTime())) value = null; this._finishTime = value; }, get: function () { return this._finishTime; } }; CountdownText.property.fps = { set: function (value) { this._fps = isRealNumber(value) ? value : 200; if (this._intvId > 0) { clearInterval(this._intvId); this._intvId = setInterval(this._tick, 1000 / this._fps); } }, get: function () { return this._fps; } }; ACore["d" /* default */].install(CountdownText); /* harmony default export */ var js_CountdownText = (CountdownText); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/LoadingCubeModal.js /*** * @extends Modal * @constructor */ function LoadingCubeModal() { } LoadingCubeModal.tag = 'LoadingCubeModal'.toLowerCase(); LoadingCubeModal.render = function () { return Object(ACore["c" /* _ */])({ tag:'modal', class: 'as-loading-cube-modal', child: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: rgb(241, 242, 243); display: block; shape-rendering: auto;" width="200px" height="200px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">\n' + '<g transform="translate(26.666666666666668,26.666666666666668)">\n' + ' <rect x="-20" y="-20" width="40" height="40" fill="#13a9df">\n' + ' <animateTransform attributeName="transform" type="scale" repeatCount="indefinite" dur="1s" keyTimes="0;1" values="1.1500000000000001;1" begin="-0.3s"></animateTransform>\n' + ' </rect>\n' + '</g>\n' + '<g transform="translate(73.33333333333333,26.666666666666668)">\n' + ' <rect x="-20" y="-20" width="40" height="40" fill="#4be44c">\n' + ' <animateTransform attributeName="transform" type="scale" repeatCount="indefinite" dur="1s" keyTimes="0;1" values="1.1500000000000001;1" begin="-0.2s"></animateTransform>\n' + ' </rect>\n' + '</g>\n' + '<g transform="translate(26.666666666666668,73.33333333333333)">\n' + ' <rect x="-20" y="-20" width="40" height="40" fill="#e2d58b">\n' + ' <animateTransform attributeName="transform" type="scale" repeatCount="indefinite" dur="1s" keyTimes="0;1" values="1.1500000000000001;1" begin="0s"></animateTransform>\n' + ' </rect>\n' + '</g>\n' + '<g transform="translate(73.33333333333333,73.33333333333333)">\n' + ' <rect x="-20" y="-20" width="40" height="40" fill="#e1e7e7">\n' + ' <animateTransform attributeName="transform" type="scale" repeatCount="indefinite" dur="1s" keyTimes="0;1" values="1.1500000000000001;1" begin="-0.1s"></animateTransform>\n' + ' </rect>\n' + '</g>\n' + '</svg>' }); }; LoadingCubeModal.share = { token: null, $elt: null }; /*** * * @return {String} */ LoadingCubeModal.show = function (){ if (!LoadingCubeModal.share.$elt) LoadingCubeModal.share.$elt = Object(ACore["c" /* _ */])(LoadingCubeModal.tag); if (!LoadingCubeModal.share.$elt.isDescendantOf(document.body)){ document.body.appendChild(LoadingCubeModal.share.$elt); } LoadingCubeModal.share.token = randomIdent(9); return LoadingCubeModal.share.token; }; /*** * * @param {String} token * @return {Boolean} */ LoadingCubeModal.close = function (token){ if (LoadingCubeModal.share.$elt &&LoadingCubeModal.share.$elt.isDescendantOf(document.body) && (!token || token ===LoadingCubeModal.share.token)){ this.share.$elt.remove(); LoadingCubeModal.share.token = null; return true; } return false; }; ACore["d" /* default */].install(LoadingCubeModal); /* harmony default export */ var js_LoadingCubeModal = (LoadingCubeModal); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttreeleafmenu.css var selecttreeleafmenu = __webpack_require__(53); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTreeLeafBox.js function isBranchStatus(status) { return status === 'open' || status === 'close'; } function invertStatus(status) { return { open: 'close', close: 'open' }[status] || 'none'; } /*** * @extends Follower * @constructor */ function SelectTreeLeafBox() { this._initControl(); this._searchCache = {}; this._value = null; this._items = []; this.strictValue = true; this.$items = []; this.$itemByValue = {}; this.$selectedItem = null; this.$dislayItems = this.$items; this.$dislayItemByValue = this.$itemByValue; this.$content = Object(ACore["a" /* $ */])('.as-select-tree-leaf-box-content', this); this._savedStatus = {}; this.estimateSize = { width: 0, height: 0 }; /** * @name items * @memberof MSelectTreeLeafBox# * @type {Array} */ /** * @name value * @memberof MSelectTreeLeafBox# */ /** * @name strictMode * @type {boolean} * @memberof MSelectTreeLeafBox# */ /** * @name selectedItem * @memberof MSelectTreeLeafBox# */ } SelectTreeLeafBox.tag = 'SelectTreeLeafBox'.toLowerCase(); SelectTreeLeafBox.render = function () { return Object(ACore["c" /* _ */])({ tag: js_Follower, attr: { tabindex: 0 }, class: ['as-select-tree-leaf-box', 'as-select-list-box'], extendEvent: ['pressitem'], child: [{ class: 'as-select-list-box-search-ctn', child: 'searchtextinput' }, { class: ['as-bscroller', 'as-select-list-box-scroller', 'as-select-tree-leaf-box-content'], child: [] }, 'attachhook.as-dom-signal'], props: { anchor: [1, 6, 2, 5] } }); }; SelectTreeLeafBox.prototype._initControl = function () { this.$searchInput = Object(ACore["a" /* $ */])('searchtextinput', this) .on('stoptyping', this.eventHandler.searchModify); }; SelectTreeLeafBox.prototype.resetSearchState = function () { var value = this.$searchInput.value; if (value.length > 0) { this.$searchInput.value = ''; if (value.trim().length) { this.$content.clearChild(); this.$content.addChild(this.$items); this.$dislayItems = this.$items; this.$dislayItemByValue = this.$itemByValue; this._updateSelectedItem(); } } }; SelectTreeLeafBox.prototype._findFirstLeaf = function () { var found = false; function visit(item) { if (item.isLeaf) { found = item; return true; } if (item.items && item.items.length > 0) { item.items.some(visit); } return !!found; } this._items.some(visit); return found; }; SelectTreeLeafBox.prototype._makeTree = function (item, dict, savedStatus) { var self = this; var status = 'none'; var isLeaf = item.isLeaf; if (item.items && item.items.length > 0) { status = 'close'; } if (isBranchStatus(status) && isBranchStatus(savedStatus[keyStringOf(item.value)])) { status = savedStatus[item.value]; } var nodeElt = Object(ACore["c" /* _ */])({ tag: js_ExpTree.tag, class: 'as-select-tree-leaf-item', props: { name: item.text, desc: item.desc, icon: item.icon, status: status, itemData: item }, on: { 'statuschange': this.updatePosition.bind(this) } }); if (item.noSelect) { nodeElt.addClass('as-no-select'); } nodeElt.getNode().on({ press: function (event) { if (isBranchStatus(nodeElt.status)) { nodeElt.status = invertStatus(nodeElt.status) savedStatus[item.value] = nodeElt.status; self.updatePosition(); } else if (isLeaf && !item.noSelect) { self.emit('pressitem', { item: item, target: self, itemElt: nodeElt, originalEvent: event }, self); } } }); if (dict) { if (dict[keyStringOf(item.value)] && !this.warned) { this.warned = true; console.warn(this, 'has duplicated value, element will not work correctly!', item); } dict[keyStringOf(item.value)] = nodeElt; } if (item.isLeaf) { nodeElt.addClass('as-is-leaf'); } if (item.items && item.items.length > 0) { item.items.forEach(function (item1) { nodeElt.addChild(self._makeTree(item1, dict, savedStatus)); }); } return nodeElt; }; SelectTreeLeafBox.prototype._estimateItemWidth = function (item, level) { var width = 12;//padding width += 12 * level; width += 14.7 + 5;//toggle icon if (item.icon) width += 21;//icon width += 7 + estimateWidth14(item.text) + 5 + 7;//margin-text if (item.desc) width += 6 + estimateWidth14(item.desc) * 0.85; return width; }; SelectTreeLeafBox.prototype.viewToSelected = function () { var selectedNode = this.$selectedItem; if (!selectedNode) return; selectedNode.scrollIntoView(); var parent = selectedNode.getParent(); while (parent && parent.getParent) { if (parent.status === 'close') { parent.getNode().emit('press'); } parent = parent.getParent(); } }; SelectTreeLeafBox.prototype._calcEstimateSize = function (items) { var self = this; var width = 0; var height = 0; function visit(item, level) { var itemWidth = self._estimateItemWidth(item, level); width = Math.max(width, itemWidth); height += 28; if (item.items && item.items.length) { item.items.forEach(function (item) { visit(item, level + 1); }); } } items.forEach(function (item) { visit(item, 0); }); return { width: width, height: height }; }; SelectTreeLeafBox.prototype._updateSelectedItem = function () { if (this.$selectedItem) { this.$selectedItem.removeClass('as-selected'); this.$selectedItem = null; } this.$selectedItem = this.$dislayItemByValue[keyStringOf(this.value)]; if (this.$selectedItem) { this.$selectedItem.addClass('as-selected'); } }; SelectTreeLeafBox.prototype.focus = js_SelectListBox.prototype.focus; SelectTreeLeafBox.property = {}; SelectTreeLeafBox.eventHandler = {}; SelectTreeLeafBox.property.items = { /*** * @this SelectTreeLeafBox * @param items */ set: function (items) { var self = this; this._savedStatus = {}; this._searchCache = {}; items = items || []; this._items = items; prepareSearchForList(items); this.$content.clearChild(); this.$itemByValue = {}; this.$dislayItemByValue = this.$itemByValue; this.$items = items.map(function (item) { return self._makeTree(item, self.$itemByValue, self._savedStatus); }); this.$dislayItems = this.$items; this.$content.addChild(this.$items); this.estimateSize = this._calcEstimateSize(items); this.addStyle('--select-list-estimate-width', this.estimateSize.width + 'px'); this._updateSelectedItem(); self.updatePosition(); }, get: function () { return this._items; } }; SelectTreeLeafBox.property.value = { set: function (value) { this._value = value; this._updateSelectedItem(); }, get: function () { var firstLeaf; if (!this.strictValue || this.$itemByValue[keyStringOf(this._value)]) { return this._value; } else { firstLeaf = this._findFirstLeaf(); if (firstLeaf) return firstLeaf.value; else return this._value; } } }; SelectTreeLeafBox.property.selectedItem = { get: function () { var key = keyStringOf(this._value); var firstLeaf; if (this.$itemByValue[key]) { return this.$itemByValue[key].data; } else if (!this.strictValue) { return null; } else { firstLeaf = this._findFirstLeaf(); if (firstLeaf) return firstLeaf; else return null; } } }; SelectTreeLeafBox.property.enableSearch = js_SelectListBox.property.enableSearch; SelectTreeLeafBox.prototype._search = function (query) { var self = this; var queryItem = prepareSearchForItem({ text: query }); var minScore = Infinity; var maxScore = -Infinity; function makeScoreTree(item) { var holder = { item: item, score: calcItemMatchScore(queryItem, item), childrenScore: 0, children: [] }; minScore = Math.min(minScore, holder.score); maxScore = Math.max(maxScore, holder.score); var children; if (item.items && item.items.length > 0) { children = item.items.map(makeScoreTree); holder.children = children; holder.childrenScore = holder.children.reduce(function (ac, cr) { return Math.max(ac, cr.score, cr.childrenScore); }, 0); } return holder; } var treeScores = this._items.map(makeScoreTree); var midScore = (maxScore + minScore) / 2; var savedStatus = {}; function filterTree(scoredTrees, ignore) { return scoredTrees.filter(function (holder) { return ignore || holder.score >= midScore || holder.childrenScore >= midScore; }).map(function makeTree(holder) { var item = Object.assign({}, holder.item); if (!ignore && holder.children && holder.children.length > 0) { if (holder.childrenScore >= midScore) { savedStatus[item.value] = 'open'; item.items = filterTree(holder.children, false); } else { savedStatus[item.value] = 'close'; item.items = filterTree(holder.children, true); } } return item; }); } var resultItems = filterTree(treeScores, false); var dict = {}; var $items = resultItems.map(function (item) { return self._makeTree(item, dict, savedStatus); }); return { $items: $items, items: resultItems, savedStatus: Object.assign({}, savedStatus), originSavedStatus: savedStatus, dict: dict }; } /*** * @this SelectTreeLeafBox */ SelectTreeLeafBox.eventHandler.searchModify = function () { var query = this.$searchInput.value.trim(); if (query.length === 0) { this.$content.clearChild().addChild(this.$items); this.$dislayItemByValue = this.$itemByValue; this.$dislayItems = this.$items; this._updateSelectedItem(); this.updatePosition(); return; } if (!this._searchCache[query]) { this._searchCache[query] = this._search(query); } var searchData = this._searchCache[query]; searchData.savedStatus = Object.assign(searchData.savedStatus, searchData.originSavedStatus); for (var val in searchData.dict) { if (isBranchStatus(searchData.dict[val].status)) { if (searchData.savedStatus[val]) { searchData.dict[val].status = searchData.savedStatus[val] } } } this.$content.clearChild() .addChild(searchData.$items); this.$dislayItemByValue = searchData.dict; this.$dislayItems = searchData.$items; this._updateSelectedItem(); this.updatePosition(); }; ACore["d" /* default */].install(SelectTreeLeafBox); /* harmony default export */ var js_SelectTreeLeafBox = (SelectTreeLeafBox); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttreeeleafbox.css var selecttreeeleafbox = __webpack_require__(54); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreebox/CTIPropHandlers.js var CTIPropHandlers = {}; CTIPropHandlers.data = { /*** * @this MCheckTreeItem|CheckTreeItem * @param data */ set: function (data) { this._data = data; this._updateData(); }, get: function () { return this._data; } }; CTIPropHandlers.text = { get: function () { if (!this._data) return ''; if (this._data.charAt) return this._data; var text = this._data.text; if (text === undefined || text === null) return ''; return this._data.text + ''; } }; CTIPropHandlers.value = { get: function () { if (!this._data) return null; if (this._data.charAt) return this._data; return this._data.value; } }; CTIPropHandlers.desc = { get: function () { if (!this._data) return ''; var desc = this._data.desc; if (desc === undefined || desc === null) return ''; return desc + ''; } }; CTIPropHandlers.level = { set: function (value) { if (!isNaturalNumber(value)) value = 0; this._level = value; this.addStyle('--level', value + ''); }, get: function () { return this._level; } }; CTIPropHandlers.status = { set: function (value) { value = value === 'open' || value === 'close' ? value : 'none'; this._status = value; this.removeClass('as-status-open') .removeClass('as-status-close'); if (value !== "none") { this.addClass('as-status-' + value); } }, get: function () { return this._status || 'none'; } }; CTIPropHandlers.selected = { set: function (value) { if (value === 'all') { this.$checkbox.checked = true; this.$checkbox.removeClass('as-has-minus'); } else if (value === 'child') { this.$checkbox.checked = false; this.$checkbox.addClass('as-has-minus'); } else { this.$checkbox.checked = false; this.$checkbox.removeClass('as-has-minus'); } }, get: function () { if (this.$checkbox.checked) { return 'all'; } else { if (this.$checkbox.hasClass('as-has-minus')) { return 'child'; } else { return 'none'; } } } }; CTIPropHandlers.hasLeaf = { set: function (value) { if (value) { this.addClass('as-has-leaf'); } else { this.removeClass('as-has-leaf'); } }, get: function () { return this.hasClass('as-has-leaf'); } }; CTIPropHandlers.noSelect = { set: function (value) { if (value) { this.addClass('as-no-select'); } else { this.removeClass('as-no-select'); } this.$checkbox.disabled = !!value; }, get: function () { return this.hasClass('as-no-select'); } }; /* harmony default export */ var checktreebox_CTIPropHandlers = (CTIPropHandlers); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/STLIPropHandlers.js var STLIPropHandlers = {}; STLIPropHandlers.data = { set: function (data) { this._data = data; this._updateData(); }, get: function () { return this._data; } }; STLIPropHandlers.text = { get: function () { var data = this._data; if (data === undefined || data === null) return ''; if (typeof data === 'string') return data; if (data && data.text) return data.text + ''; return data + ''; } }; STLIPropHandlers.value = { get: function () { var data = this._data; if (data === undefined || data === null) return data; if (data && ('value' in data)) return data.value; return data; } }; STLIPropHandlers.level = checktreebox_CTIPropHandlers.level; STLIPropHandlers.status = checktreebox_CTIPropHandlers.status; STLIPropHandlers.selected = { set: function (value) { if (value) { this.addClass('as-selected'); } else { this.removeClass('as-selected'); } }, get: function () { return this.hasClass('as-selected'); } }; /**** * @name text * @type {string} * @memberOf SelectTreeLeafItem# */ /**** * @name value * @type {string|number} * @memberOf SelectTreeLeafItem# */ /**** * @name data * @type {*} * @memberOf SelectTreeLeafItem# */ /**** * @name selected * @type {boolean} * @memberOf SelectTreeLeafItem# */ /* harmony default export */ var selecttreeleafbox_STLIPropHandlers = (STLIPropHandlers); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/SelectTreeLeafItem.js /*** * @extends AElement * @constructor */ function SelectTreeLeafItem() { this.$text = Object(ACore["a" /* $ */])('.am-select-tree-leaf-item-text', this); this.$desc = Object(ACore["a" /* $ */])('.am-select-tree-leaf-item-desc', this); this.$iconCtn = Object(ACore["a" /* $ */])('.am-select-tree-leaf-item-icon-ctn', this); this.addEventListener('click', this.eventHandler.click); } SelectTreeLeafItem.tag = 'SelectTreeLeafItem'.toLowerCase(); SelectTreeLeafItem.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['click', 'statuschange'], class: ['am-select-tree-leaf-item', 'am-dropdown-box-item'], child: [ { class: 'am-select-tree-leaf-item-toggle-ctn', child: 'toggler-ico' }, { class: 'am-select-tree-leaf-item-icon-ctn' }, { class: 'am-select-tree-leaf-item-text', child: { text: '' } }, { class: 'am-select-tree-leaf-item-desc', child: { text: '' } } ] }); }; SelectTreeLeafItem.prototype._updateData = function () { this.$text.firstChild.data = this.text; this.attr('data-key', keyStringOf(this.value)); this.$iconCtn.clearChild(); var icon = this.data && this.data.icon; if (icon) { icon = Object(ACore["c" /* _ */])(icon); if (icon.parentElement) icon = Object(ACore["a" /* $ */])(icon.cloneNode(true)); this.$iconCtn.addChild(icon); this.addClass('as-has-icon'); } else { this.removeClass('as-has-icon'); } if (this.data && this.data.isLeaf) { this.addClass('as-is-leaf'); } else { this.removeClass('as-is-leaf'); } }; SelectTreeLeafItem.property = selecttreeleafbox_STLIPropHandlers; SelectTreeLeafItem.eventHandler = {}; SelectTreeLeafItem.eventHandler.click = function (event) { if (this._data && this._data.isLeaf) { this.emit('click', { type: 'click', target: this, originalEvent: event }, this); } else { if (this.status !== 'none') { this.status = this.status === 'open' ? 'close' : 'open'; this.emit('statuschange', { type: 'statuschange', target: this, originalEvent: event }, this); } } }; /* harmony default export */ var selecttreeleafbox_SelectTreeLeafItem = (SelectTreeLeafItem); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/dropdownbox.css var dropdownbox = __webpack_require__(271); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreebox/CTBPropHandlers.js var CTBPropHandlers = {}; CTBPropHandlers.items = { /*** * @this MCheckTreeBox * @param items */ set: function (items) { this.itemListCtrl.setItems(items); var values = this.pendingValues || this.values; this.modes.normal.setValues(values); if (this.mode !== this.modes.normal) { this.mode.updateSelectedFromRef(); } }, get: function () { return this.itemListCtrl.getItems(); } }; CTBPropHandlers.values = { /*** * @this CheckTreeBox|MCheckTreeBox * @param values */ set: function (values) { this.pendingValues = values || []; this.modes.normal.setValues(values); if (this.mode !== this.modes.normal) { this.mode.updateSelectedFromRef(); } }, get: function () { return this.modes.normal.getValues(); } }; CTBPropHandlers.viewValues = { get: function (){ return this.modes.normal.getViewValues(); } }; CTBPropHandlers.enableSearch = { /*** * @this CheckTreeBox|MCheckTreeBox * @param value */ set: function (value) { if (value) { this.$box.addClass('as-enable-search'); } else { this.$box.removeClass('as-enable-search'); } }, get: function () { return this.$box.hasClass('as-enable-search'); } }; CTBPropHandlers.leafOnly = { /*** * @this CheckTreeBox|MCheckTreeBox * @param value */ set: function (value) { if (value) { this.$box.addClass('as-leaf-only'); } else { this.$box.removeClass('as-leaf-only'); } var values = this.pendingValues || this.values; this.modes.normal.setValues(values); }, get: function () { return this.$box.hasClass('as-leaf-only'); } }; /* harmony default export */ var checktreebox_CTBPropHandlers = (CTBPropHandlers); /*** * * @type {boolean} * @name enableSearch * @memberOf MCheckTreeBox# */ // CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreebox/CTBModes.js /*** * * @param {MCheckTreeBox} elt * @param {[]} items * @constructor */ function CTBModeNormal(elt, items) { this.level = -1; this.selected = 'none'; this.elt = elt; this.$list = this.elt.$list; /*** * * @type {MCTBItemHolder[]} */ this.children = items.map(item => new this.elt.classes.ItemHolder(elt, this, item)); this.hasLeaf = this.children.some(holder => holder.hasLeaf); this.hasNoSelect = this.children.some(holder => holder.hasNoSelect); this.hasDesc = this.children.some(holder => holder.hasDesc); this.hasIcon = this.children.some(holder => holder.hasIcon); if (this.hasLeaf) { this.elt.addClass('as-has-leaf'); } else { this.elt.removeClass('as-has-leaf'); } if (this.hasNoSelect) { this.elt.addClass('as-has-no-select'); this.elt.$chekAll.disabled = true; } else { this.elt.removeClass('as-has-no-select'); this.elt.$chekAll.disabled = false; } this.dict = this.children.reduce(function visit(ac, child) { var key = keyStringOf(child.data.value); if (ac[key]) { console.error('Duplicate value:', ac[key].data, child.data) } ac[key] = child; if (child.children) { child.children.reduce(visit, ac); } return ac; }, {}); } CTBModeNormal.prototype.onStart = function () { this.$list.clearChild(); var rootHolders = this.children; var viewElements = []; rootHolders.forEach(holder => { holder.getViewElements(viewElements) }, []); this.$list.addChild(viewElements); }; CTBModeNormal.prototype.onStop = function () { }; CTBModeNormal.prototype.updateUp = function () { var selected = { child: 0, all: 0, none: 0, /*dont: 0*/ }; var childN = this.children.length; this.children.reduce((ac, child) => { ac[child.selected]++; return ac; }, selected); if (childN === selected.all) { this.selected = 'all'; } else if (childN === selected.none) { this.selected = "none"; } else { this.selected = 'child'; } this.elt.$chekAll.checked = this.selected === 'all'; }; CTBModeNormal.prototype.select = function (flag) { this.children.forEach(child => child.select(flag, true)); this.updateUp(); }; CTBModeNormal.prototype.getHolderByValue = function (value) { return this.dict[keyStringOf(value)] || null; }; CTBModeNormal.prototype.setValues = function (values) { this.children.forEach(node => node.select(false)); values.forEach((value) => { var holder = this.getHolderByValue(value); if (holder) holder.select(true); }); }; CTBModeNormal.prototype.getValues = function () { var values = []; var leafOnly = this.elt.leafOnly; this.children.forEach(function visit(node) { if (node.selected === 'all' && !node.hasNoSelect) { if (leafOnly) { if (node.data.isLeaf) { values.push(node.data.value); } else if (node.data.items) { node.data.items.forEach(function visitLeaf(item) { if (item.isLeaf) { values.push(item.value); } else if (item.items) { item.items.forEach(visitLeaf); } }); } } else { values.push(node.data.value); } } else if (node.children) { node.children.forEach(visit); } }); return values; }; CTBModeNormal.prototype.getViewValues = function () { var values = []; this.children.forEach(function visit(node) { if (node.selected === 'all' && !node.hasNoSelect) { values.push(node.data.value); } else if (node.children) { node.children.forEach(visit); } }); return values; }; /*** * * @param {MCheckTreeBox} elt * @param {[]} items * @constructor */ function CTBModeSearch(elt, items) { this.level = -1; this.selected = 'none'; this.elt = elt; this.$list = this.elt.$list; this.children = items.map(item => new this.elt.classes.ItemHolder(elt, this, item)); } CTBModeSearch.prototype.onStart = function () { CTBModeNormal.prototype.onStart.call(this); this.updateSelectedFromRef(); }; CTBModeSearch.prototype.onStop = function () { }; CTBModeSearch.prototype.updateSelectedFromRef = function () { var normalMode = this.elt.modes.normal; this.children.forEach(function visit(holder) { holder.selected = holder.ref.selected; if (holder._elt) { holder._elt.selected = holder.selected; } if (holder.children) holder.children.forEach(visit); }); }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/ListDictionary.js /*** * * @param {SelectionItem[]} arr * @constructor */ function ItemDictionary(arr, opt) { this.opt = Object.assign({ depth: true }, opt || {}); this.arr = arr; this.dict = {}; this.dupKeys = []; this.update(); } ItemDictionary.prototype.update = function () { this.dict = {}; var dict = this.dict; var depth = this.opt.depth; var dupKeyDict = {}; function scan(arr) { var item; var key; for (var i = 0; i < arr.length; ++i) { item = arr[i]; key = keyStringOf(item.value); if (dict[key]) { dict[key].dupItems = dict[key].dupItems || []; dict[key].dupItems.push(item); dupKeyDict[key] = 1; } else { dict[key] = { idx: i, item: item }; } if (depth && item.items && item.items.length > 0) { scan(item.items); } } } scan(this.arr); this.dupKeys = Object.keys(dupKeyDict); }; /*** * * @param {String | Number} value * @returns {SelectionItem | null} */ ItemDictionary.prototype.getItemByValue = function (value) { var iDict = this.dict[keyStringOf(value)]; if (iDict) return iDict.item; return null; }; /*** * * @param {String | Number} value * @returns {Array<SelectionItem> } */ ItemDictionary.prototype.getAllItemByValue = function (value) { var key = keyStringOf(value); var iDict = this.dict[key]; if (iDict) return [iDict.item].concat(iDict.dupItems[key] || []); return []; }; ItemDictionary.prototype.getDuplicateKeys = function () { return this.dupKeys; }; /* harmony default export */ var ListDictionary = (ItemDictionary); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreebox/MCheckTreeBox.js /*** * not optimize * @param {MCheckTreeBox} elt * @constructor */ function MCTBItemListController(elt) { this.elt = elt; } OOP["a" /* default */].mixClass(MCTBItemListController, ListDictionary); MCTBItemListController.prototype.setItems = function (items) { items = items || []; if (!items.forEach || !items.map) items = []; this.items = copySelectionItemArray(items, { removeNoView: true }); this.update(); }; MCTBItemListController.prototype.update = function () { var mode = new this.elt.classes.ModeNormal(this.elt, this.items); this.elt.modes.normal = mode; if (mode.hasDesc) { this.elt.$list.addClass('as-has-desc'); } else { this.elt.$list.removeClass('as-has-desc'); } if (mode.hasIcon) { this.elt.$list.addClass('as-has-icon'); } else { this.elt.$list.removeClass('as-has-icon'); } this.elt.mode = mode; mode.onStart(); this._searchItems = prepareSearchForList(copySelectionItemArray(this.items)); this._searchCache = {}; }; MCTBItemListController.prototype.getItems = function () { return copySelectionItemArray(this.items); }; MCTBItemListController.prototype.makeSearch = function (query) { if (this._searchCache[query]) return this._searchCache[query].resetAndGet(); var searchItem = prepareSearchForItem({ text: query }); var minScore = Infinity; var maxScore = -Infinity; var scoredHolders = this._searchItems.map(function visit(item) { var holder = { item: item, score: calcItemMatchScore(searchItem, item), childMaxScore: -Infinity }; minScore = Math.min(minScore, holder.score); maxScore = Math.max(maxScore, holder.score); if (item.items && item.items.length > 0) { holder.children = item.items.map(visit); holder.childMaxScore = holder.children.reduce((ac, cr) => { return Math.max(ac, cr.score, cr.childMaxScore); }, 0) } return holder; }); var threshHold = maxScore - (maxScore - minScore) / 3; var result = scoredHolders.reduce(function filterVisit(ac, cr) { var subItems; if (Math.max(cr.score, cr.childMaxScore) >= threshHold) { ac.items.push(cr.item); if (cr.children && cr.childMaxScore >= cr.score) { ac.status[keyStringOf(cr.item.value)] = 'open'; subItems = cr.children.reduce(filterVisit, { items: [], status: ac.status }).items; cr.item.items = subItems; } else { if (cr.children && cr.children.length > 0) { ac.status[keyStringOf(cr.item.value)] = 'open'; } } } return ac; }, { items: [], status: {} }); var normalMode = this.elt.modes.normal; result.mode = new this.elt.classes.ModeSearch(this.elt, result.items); result.resetAndGet = function () { this.mode.children && this.mode.children.forEach(function resetVisit(holder) { var key = keyStringOf(holder.data.value); holder.ref = normalMode.getHolderByValue(holder.data.value); if (holder.status === 'open' && result.status[key] !== 'open') { holder.status = 'close'; if (holder._elt) { holder._elt.status = 'close'; } } else if (holder.status === 'close' && result.status[key] === 'open') { holder.status = 'open'; if (holder._elt) { holder._elt.status = 'open'; } } if (holder.children) holder.children.forEach(resetVisit); }); return this.mode; }; this._searchCache[query] = result; return result.resetAndGet(); }; /*** * @extends AElement * @constructor */ function MCheckTreeItem() { this._data = null; this._status = 'none'; this.$text = Object(ACore["a" /* $ */])('.am-check-tree-item-text', this).firstChild; this.$desc = Object(ACore["a" /* $ */])('.am-check-tree-item-desc', this).firstChild; this.$iconCtn = Object(ACore["a" /* $ */])('.am-check-tree-item-icon-ctn', this); this.$checkbox = Object(ACore["a" /* $ */])('checkboxinput', this) .on('change', this.eventHandler.checkboxChange); this.addEventListener('click', this.eventHandler.click); } MCheckTreeItem.tag = 'MCheckTreeItem'.toLowerCase(); MCheckTreeItem.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['checkedchange', 'click', 'statuschange'], class: ['am-check-tree-item', 'am-dropdown-box-item'], child: [ { class: 'am-check-tree-item-toggle-ctn', child: 'toggler-ico' }, { class: 'am-check-tree-item-icon-ctn' }, { class: 'am-check-tree-item-checkbox-ctn', child: 'checkboxinput' }, { class: 'am-check-tree-item-text', child: { text: '' } }, { class: 'am-check-tree-item-desc', child: { text: '' } } ] }); }; MCheckTreeItem.prototype._updateData = function () { this.$text.data = this.text; this.$desc.data = this.desc; this.$iconCtn.clearChild(); this.$icon = null; this.attr('data-key', keyStringOf(this.value)) if (this._data && this._data.icon) { this.$icon = Object(ACore["c" /* _ */])(this._data.icon); if (this.$icon.parentElement) { this.$icon = this.$icon.cloneNode(true); } this.$iconCtn.addChild(this.$icon); this.addClass('as-has-icon'); } else { this.removeClass('as-has-icon'); } if (this._data && this._data.isLeaf) { this.addClass('as-is-leaf'); } else { this.removeClass('as-is-leaf'); } }; MCheckTreeItem.eventHandler = {}; MCheckTreeItem.eventHandler.click = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.$checkbox, event)) return; var checkboxBound = this.$checkbox.getBoundingClientRect(); var canCheck = this.$checkbox.getComputedStyleValue('pointer-events') !== 'none' && !this.$checkbox.disabled && checkboxBound.width > 0; if (this.status === 'none' && canCheck) { this.$checkbox.checked = !this.$checkbox.checked; this.$checkbox.notifyChange(); } else if (this.status !== 'none') { if (!checkboxBound.width) { checkboxBound = this.$iconCtn.getBoundingClientRect(); } if (!checkboxBound.width) { checkboxBound = { left: this.getBoundingClientRect().left + parseFloat(this.$text.parentElement.getComputedStyleValue('padding-left').replace('px')) }; } if (event.clientX < checkboxBound.left || !canCheck) { this.status = this.status === 'open' ? 'close' : 'open'; this.emit('statuschange', { type: 'statuschange', target: this }, this); } else if (canCheck) { this.$checkbox.checked = !this.$checkbox.checked; this.$checkbox.notifyChange(); } } }; MCheckTreeItem.eventHandler.checkboxChange = function () { this.emit('checkedchange', { type: 'checkedchange' }, this); }; MCheckTreeItem.property = checktreebox_CTIPropHandlers; /*** * @name data * @memberOf MCheckTreeItem# */ /*** * @name text * @type {string} * @memberOf MCheckTreeItem# */ /*** * @name desc * @type {string} * @memberOf MCheckTreeItem# */ /*** * @name value * @memberOf MCheckTreeItem# */ /*** * @extends AElement * @constructor */ function MCheckTreeBox() { this.$box = Object(ACore["a" /* $ */])('.am-check-tree-box', this); this.$body = Object(ACore["a" /* $ */])('.am-check-tree-box-body', this); this.$list = Object(ACore["a" /* $ */])('.am-check-tree-box-list', this); this.$chekAll = Object(ACore["a" /* $ */])('.as-select-list-box-check-all', this) .on('change', function () { this.modes.normal.select(this.$chekAll.checked); if (this.mode.updateSelectedFromRef) this.mode.updateSelectedFromRef(); this.notifyChange(); }.bind(this)); this.$searchInput = Object(ACore["a" /* $ */])(Searcher.tag, this).on('stoptyping', this.eventHandler.searchTextInputModify); this.$cancelBtn = Object(ACore["a" /* $ */])('.as-select-list-box-cancel-btn', this) .on('click', function () { this.emit('cancel', { type: 'cancel', target: this }, this); }.bind(this)); this.$closeBtn = Object(ACore["a" /* $ */])('.as-select-list-box-close-btn', this); this.$boxCloseBtn = Object(ACore["a" /* $ */])('.am-dropdown-box-close-btn', this); this.on('click', function (event) { if (event.target === this || Object(EventEmitter["d" /* hitElement */])(this.$closeBtn, event) || Object(EventEmitter["d" /* hitElement */])(this.$boxCloseBtn, event)) { this.emit('close', { type: 'close', target: this }, this); } }.bind(this)); this.pendingValues = null; this.modes = { normal: new this.classes.ModeNormal(this, []) }; /*** * * @type {CTBModeNormal | CTBModeSearch} */ this.mode = this.modes.normal; this.itemListCtrl = new this.classes.ListController(this); } MCheckTreeBox.prototype.classes = { ListController: MCTBItemListController, ModeSearch: CTBModeSearch, ModeNormal: CTBModeNormal, ItemHolder: MCTBItemHolder, ItemElement: MCheckTreeItem }; MCheckTreeBox.tag = 'MCheckTreeBox'.toLowerCase(); MCheckTreeBox.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['change', 'close', 'cancel'], class: ['am-modal', 'am-dropdown-box-modal'], child: { class: ['am-check-tree-box', 'am-dropdown-box', 'as-dropdown-box-common-style'], child: [ { class: 'am-dropdown-box-header', child: [ { tag: Searcher.tag }, { tag: 'button', class: 'am-dropdown-box-close-btn', child: 'span.mdi.mdi-close' } ] }, { class: ['am-dropdown-box-body', 'am-check-tree-box-body'], child: { class: 'am-check-tree-box-list', } }, { class: 'as-dropdown-box-footer', child: [ { tag: 'checkbox', class: 'as-select-list-box-check-all', props: { checked: false, text: HTML5_LanguageSystem.getText('txt_check_all') || HTML5_LanguageSystem.getText('txt_all') || 'Check All' } }, { class: 'as-dropdown-box-footer-right', child: [ { tag: 'a', class: 'as-select-list-box-cancel-btn', attr: { "data-ml-key": 'txt_cancel' } }, { tag: 'a', class: 'as-select-list-box-close-btn', attr: { "data-ml-key": 'txt_close' } }] } ] } ] } }); }; MCheckTreeBox.prototype.getHolderByValue = function (value) { return this.modes.normal.getHolderByValue(value); }; MCheckTreeBox.prototype.select = function (value, flag) { var holder = this.modes.normal.getHolderByValue(value); if (holder) { holder.select(flag); if (this.mode !== this.modes.normal) { this.mode.updateSelectedFromRef(); } return true; } return false; }; MCheckTreeBox.prototype.getItemByValue = function (value) { var holder = this.modes.normal.getHolderByValue(value); if (holder) return holder.data; return null; }; MCheckTreeBox.prototype.focus = function () { if (this.enableSearch) { this.$searchInput.focus(); } }; MCheckTreeBox.prototype.resetSearchState = function () { this.$searchInput.value = ''; this.eventHandler.searchTextInputModify(); }; MCheckTreeBox.prototype.notifyChange = function () { this.pendingValues = null; this.emit('change', { type: 'change', target: this }, this); }; /*** * @name eventHandler * @type {{}} * @memberOf MCheckTreeBox# */ MCheckTreeBox.eventHandler = {}; MCheckTreeBox.eventHandler.searchTextInputModify = function () { var query = this.$searchInput.value.trim().replace(/\s+/g, ' '); if (query.length > 0) { if (this.mode === this.modes.normal) { this.mode.onStop(); } this.mode.search = this.itemListCtrl.makeSearch(query); this.mode = this.mode.search; this.mode.onStart(); } else { if (this.mode !== this.modes.normal) { this.mode.onStop(); this.mode = this.modes.normal; this.mode.onStart(); } } }; MCheckTreeBox.property = checktreebox_CTBPropHandlers; /* harmony default export */ var checktreebox_MCheckTreeBox = (MCheckTreeBox); /*********************************** ADAPT OLD VERSION ***************************************************************/ MCheckTreeBox.prototype.findItemHoldersByValue = function (value) { var holder = this.getHolderByValue(value); if (holder) { return [holder]; } else { return []; } }; /*** * * @param {MCheckTreeBox} boxElt * @param {MCTBItemHolder|CTBModeNormal|CTBModeSearch}parent * @param data * @constructor */ function MCTBItemHolder(boxElt, parent, data) { this.ref = null; this.boxElt = boxElt; this.$list = this.boxElt.$list; this.data = data; this.parent = parent; this.level = parent ? parent.level + 1 : 0; this._elt = null; this.children = null; this.hasIcon = !!data.icon; this.hasDesc = !!data.desc; this.status = 'none'; this.selected = 'none'; this.hasLeaf = data.isLeaf; this.noSelect = data.noSelect; this.hasNoSelect = this.noSelect; if (data.items && data.items.map && data.items.length > 0) { this.children = data.items.map(it => new MCTBItemHolder(boxElt, this, it)); this.hasIcon = this.hasIcon || this.children.some(child => child.hasIcon); this.hasDesc = this.hasDesc || this.children.some(child => child.hasDesc); this.hasLeaf = this.hasLeaf || this.children.some(child => child.hasLeaf); this.hasNoSelect = this.hasNoSelect || this.children.some(child => child.hasNoSelect); this.status = 'close'; } } MCTBItemHolder.prototype.getViewElements = function (ac) { ac = ac || []; ac.push(this.elt); if (this.status === 'open' && this.children) { this.children.forEach(child => child.getViewElements(ac)); } return ac; }; Object.defineProperty(MCTBItemHolder.prototype, 'elt', { get: function () { if (!this._elt) { this._elt = Object(ACore["c" /* _ */])({ tag: this.boxElt.classes.ItemElement, props: { data: this.data, level: this.level, status: this.status, selected: this.selected, hasLeaf: this.hasLeaf, noSelect: this.hasNoSelect }, on: { checkedchange: this.ev_checkedChange.bind(this), statuschange: this.ev_statusChange.bind(this), } }); } return this._elt; } }); MCTBItemHolder.prototype.ev_checkedChange = function () { var selected = this._elt.selected; if (this.ref) { if (selected === 'all') { this.ref.select(true); } else { this.ref.select(false); } this.getRoot().updateSelectedFromRef(); } else { if (selected === 'all') { this.select(true); } else { this.select(false); } } this.boxElt.notifyChange(); }; MCTBItemHolder.prototype.ev_statusChange = function () { if (this._elt.status === this.status) return; var viewElements; if (this.status === 'open') { viewElements = this.getViewElements(); viewElements.shift(); viewElements.forEach((elt) => { elt.remove(); }); this.status = this._elt.status; } else if (this.status === 'close') { this.status = this._elt.status; viewElements = this.getViewElements(); viewElements.shift(); addElementAfter(this.$list, viewElements, this._elt); } }; MCTBItemHolder.prototype.updateUp = function () { var selected = { child: 0, all: 0, none: 0, /*dont: 0*/ }; var childN = this.children.length; this.children.reduce((ac, child) => { ac[child.selected]++; return ac; }, selected); if (childN === selected.all) { this.selected = 'all'; } else if (childN === selected.none) { this.selected = "none"; } else { this.selected = 'child'; } if (this._elt) { this._elt.selected = this.selected; } if (this.parent) this.parent.updateUp(); } MCTBItemHolder.prototype.select = function (flag, isDownUpdate) { var leafOnly = this.boxElt.leafOnly; if (flag && ((leafOnly && !this.hasLeaf))) return; var selected = { child: 0, all: 0, none: 0, exclude: 0/*dont: 0*/ }; var childN = 0; if (this.children && this.children.length > 0) { childN = this.children.length; this.children.reduce((ac, child) => { child.select(flag, true); if (leafOnly && !child.hasLeaf) { ac.exclude++; } else { ac[child.selected]++; } return ac; }, selected); if (leafOnly) { if (this.hasLeaf) { if (childN === selected.all + selected.exclude) { this.selected = 'all'; } else if (selected.all + selected.child > 0) { this.selected = 'child'; } else { this.selected = 'none'; } } else { this.selected = "none"; } } else { if (childN === selected.all) { this.selected = 'all'; } else if (childN === selected.none) { this.selected = "none"; } else { this.selected = 'child'; } } } else { if (flag && (!leafOnly ||this.hasLeaf)) { this.selected = 'all'; } else { this.selected = 'none'; } } if (this._elt) { this._elt.selected = this.selected; } if (!isDownUpdate && this.parent) { this.parent.updateUp(); } }; MCTBItemHolder.prototype.getRoot = function () { var c = this; while (c.parent) { c = c.parent; } return c; } /*********************************** ADAPT OLD VERSION ***************************************************************/ Object.defineProperty(MCTBItemHolder.prototype, 'item', { get: function (){ return this.data; } }); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/MSTBItemHolder.js function MSTBItemHolder(boxElt, parent, data) { this.ref = null; this.$list = boxElt.$list; this.level = parent.level + 1; this.status = 'none'; this.boxElt = boxElt; this.parent = parent; this.data = data; this._elt = null; this.hasDesc = !!data.desc; this.hasIcon = !!data.icon; this.selected = false; if (data.items && data.items.length > 0) { this.children = data.items.map(item => new MSTBItemHolder(boxElt, this, item)); this.hasDesc = this.hasDesc || this.children.some(child => child.hasDesc); this.hasIcon = this.hasIcon || this.children.some(child => child.hasIcon); this.status = 'close'; } } MSTBItemHolder.prototype.ev_statusChange = MCTBItemHolder.prototype.ev_statusChange; MSTBItemHolder.prototype.getViewElements = MCTBItemHolder.prototype.getViewElements; MSTBItemHolder.prototype.select = function (flag) { this.selected = flag; if (this._elt) { this._elt.selected = flag; } }; MSTBItemHolder.prototype.ev_click = function (event) { if (this.ref) { this.ref.ev_click(event); } else { this.boxElt.modes.normal.setValue(this.data.value); if (this.boxElt.mode !== this.boxElt.modes.normal) { this.boxElt.mode.updateSelectedFromRef(); } this.boxElt.notifyPressItem({ item: this.data }); } }; Object.defineProperty(MSTBItemHolder.prototype, 'elt', { get: function () { if (!this._elt) { this._elt = Object(ACore["c" /* _ */])({ tag: selecttreeleafbox_SelectTreeLeafItem, props: { data: this.data, level: this.level, status: this.status, selected: this.selected }, on: { statuschange: this.ev_statusChange.bind(this), click: this.ev_click.bind(this) } }); } return this._elt; } }); /* harmony default export */ var selecttreeleafbox_MSTBItemHolder = (MSTBItemHolder); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/STLBModes.js function STLBModeNormal(elt, items) { this.level = -1; this.elt = elt; this.$list = elt.$list; this.children = items.map(item => new selecttreeleafbox_MSTBItemHolder(elt, this, item)); this.hasDesc = this.hasDesc || this.children.some(child => child.hasDesc); this.hasIcon = this.hasIcon || this.children.some(child => child.hasIcon); this.dict = this.children.reduce(function visit(ac, child) { var key = keyStringOf(child.data.value); if (ac[key]) { console.error('Duplicate value:', ac[key].data, child.data) } ac[key] = child; if (child.children) { child.children.reduce(visit, ac); } return ac; }, {}); this.selectedHolder = null; } STLBModeNormal.prototype.getHolderByValue = CTBModeNormal.prototype.getHolderByValue; STLBModeNormal.prototype.getItemByValue = function (value) { var holder = this.getHolderByValue(value); if (holder) return holder.data; return null; }; STLBModeNormal.prototype.getFirstLeafHolder = function () { var res = null; if (this.children) { this.children.some(function visit(node) { if (node.data.isLeaf) { res = node; return true; } if (node.children) { return node.children.some(visit) } return false; }); } return res; }; STLBModeNormal.prototype.onStart = function () { this.$list.clearChild(); var rootHolders = this.children; var viewElements = []; rootHolders.forEach(holder => { holder.getViewElements(viewElements) }, []); this.$list.addChild(viewElements); }; STLBModeNormal.prototype.setValue = function (value, strict) { var holder = this.selectedHolder; if (holder) { holder.select(false); } holder = this.getHolderByValue(value); if (holder && !holder.data.isLeaf) holder = null; if (!holder && strict) { holder = this.getFirstLeafHolder(); } if (holder && holder.data.isLeaf) { holder.select(true); } this.selectedHolder = holder; }; STLBModeNormal.prototype.getValue = function (strict) { var holder = this.selectedHolder; if (strict && !holder) holder = this.getFirstLeafHolder(); if (holder) { return holder.data.value; } else { throw new Error('Not selected!'); } }; STLBModeNormal.prototype.viewToSelected = function () { if (!this.selectedHolder) return; var visitUp = (node) => { var parent = node.parent; if (parent !== this) { visitUp(parent); } if (node.status === 'close') { node.elt.status = 'open'; node.ev_statusChange(); } } visitUp(this.selectedHolder); vScrollIntoView(this.selectedHolder.elt); }; STLBModeNormal.prototype.onStop = function () { }; function STLBModeSearch(elt, items) { this.level = -1; this.elt = elt; this.$list = this.elt.$list; this.children = items.map(item => new selecttreeleafbox_MSTBItemHolder(elt, this, item)); this.dict = this.children.reduce(function visit(ac, child) { var key = keyStringOf(child.data.value); if (ac[key]) { console.error('Duplicate value:', ac[key].data, child.data) } ac[key] = child; if (child.children) { child.children.reduce(visit, ac); } return ac; }, {}); this.selectedHolder = null; } STLBModeSearch.prototype.updateSelectedFromRef = function () { if (this.selectedHolder) this.selectedHolder.select(false); this.selectedHolder = null; var value = this.elt.value; var holder = this.dict[keyStringOf(value)]; if (holder) { holder.select(true); this.selectedHolder = holder; } }; STLBModeSearch.prototype.onStart = function () { STLBModeNormal.prototype.onStart.call(this); this.updateSelectedFromRef(); }; STLBModeSearch.prototype.onStop = function () { }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/MSTLBItemListController.js function MSTLBItemListController(elt) { this.elt = elt; this.items = []; this._searchCache = {}; } MSTLBItemListController.prototype.setItems = function (items) { if (!items || !items.forEach || !items.map) items = []; this.items = copySelectionItemArray(items, { removeNoView: true }); this.update(); }; MSTLBItemListController.prototype.update = function () { var mode = new STLBModeNormal(this.elt, this.items); this.elt.modes.normal = mode; this.elt.mode = mode; if (mode.hasDesc) { this.elt.$list.addClass('as-has-desc'); } else { this.elt.$list.removeClass('as-has-list'); } if (mode.hasIcon) { this.elt.$list.addClass('as-has-icon'); } else { this.elt.$list.removeClass('as-has-icon'); } this.elt.mode = mode; mode.onStart(); this._searchItems = prepareSearchForList(copySelectionItemArray(this.items)); this._searchCache = {}; }; MSTLBItemListController.prototype.getItems = function () { return copySelectionItemArray(this.items); }; MSTLBItemListController.prototype.makeSearch = function (query) { if (this._searchCache[query]) return this._searchCache[query].resetAndGet(); var searchItem = prepareSearchForItem({ text: query }); var minScore = Infinity; var maxScore = -Infinity; var scoredHolders = this._searchItems.map(function visit(item) { var holder = { item: item, score: calcItemMatchScore(searchItem, item), childMaxScore: -Infinity }; minScore = Math.min(minScore, holder.score); maxScore = Math.max(maxScore, holder.score); if (item.items && item.items.length > 0) { holder.children = item.items.map(visit); holder.childMaxScore = holder.children.reduce((ac, cr) => { return Math.max(ac, cr.score, cr.childMaxScore); }, 0) } return holder; }); var threshHold = maxScore - (maxScore - minScore) / 3; var result = scoredHolders.reduce(function filterVisit(ac, cr) { var subItems; if (Math.max(cr.score, cr.childMaxScore) >= threshHold) { ac.items.push(cr.item); if (cr.children && cr.childMaxScore >= cr.score) { ac.status[keyStringOf(cr.item.value)] = 'open'; subItems = cr.children.reduce(filterVisit, { items: [], status: ac.status }).items; cr.item.items = subItems; } else { if (cr.children && cr.children.length > 0) { ac.status[keyStringOf(cr.item.value)] = 'open'; } } } return ac; }, { items: [], status: {} }); var normalMode = this.elt.modes.normal; result.mode = new STLBModeSearch(this.elt, result.items); result.resetAndGet = function () { this.mode.children && this.mode.children.forEach(function resetVisit(holder) { var key = keyStringOf(holder.data.value); holder.ref = normalMode.getHolderByValue(holder.data.value); if (holder.status === 'open' && result.status[key] !== 'open') { holder.status = 'close'; if (holder._elt) { holder._elt.status = 'close'; } } else if (holder.status === 'close' && result.status[key] === 'open') { holder.status = 'open'; if (holder._elt) { holder._elt.status = 'open'; } } if (holder.children) holder.children.forEach(resetVisit); }); return this.mode; }; this._searchCache[query] = result; return result.resetAndGet(); }; /* harmony default export */ var selecttreeleafbox_MSTLBItemListController = (MSTLBItemListController); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/STLBPropsHandlers.js var STLBPropsHandlers = {}; STLBPropsHandlers.enableSearch = { set: function (value) { if (value) { this.$box.addClass('as-enable-search'); } else { this.$box.removeClass('as-enable-search'); } }, get: function () { return this.$box.hasClass('as-enable-search'); } }; /* harmony default export */ var selecttreeleafbox_STLBPropsHandlers = (STLBPropsHandlers); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/MSelectTreeLeafBox.js /**** * @extends AElement * @constructor */ function MSelectTreeLeafBox() { this.estimateSize = { width: 0, height: 0 }; this.$box = Object(ACore["a" /* $ */])('.am-dropdown-box', this); this.$list = Object(ACore["a" /* $ */])('.am-select-tree-leaf-box-list', this); this.itemListCtrl = new selecttreeleafbox_MSTLBItemListController(this); this.$searchInput = Object(ACore["a" /* $ */])(Searcher.tag, this).on('stoptyping', this.eventHandler.searchTextInputModify); this.$boxCloseBtn = Object(ACore["a" /* $ */])('.am-dropdown-box-close-btn', this); this.on('click', function (event) { if (event.target === this || Object(EventEmitter["d" /* hitElement */])(this.$boxCloseBtn, event)) { this.emit('close', { type: 'close', target: this }, this); } }.bind(this)); this.modes = { normal: new STLBModeNormal(this, []), search: null }; this.mode = this.modes.normal; this.strictValue = true; /** * @name items * @memberof MSelectTreeLeafBox# * @type {Array} */ /** * @name value * @memberof MSelectTreeLeafBox# */ /** * @name strictMode * @type {boolean} * @memberof MSelectTreeLeafBox# */ /** * @name selectedItem * @memberof MSelectTreeLeafBox# */ } MSelectTreeLeafBox.tag = 'MSelectTreeLeafBox'.toString(); MSelectTreeLeafBox.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['pressitem', 'close'], class: ['am-modal', 'am-dropdown-box-modal'], child: { class: ['am-select-tree-leaf-box', 'am-dropdown-box', 'as-dropdown-box-common-style'], child: [ { class: 'am-dropdown-box-header', child: [ { tag: Searcher.tag }, { tag: 'button', class: 'am-dropdown-box-close-btn', child: 'span.mdi.mdi-close' } ] }, { class: ['am-dropdown-box-body', 'am-select-tree-leaf-box-body'], child: { class: 'am-select-tree-leaf-box-list' } } ] } }); }; MSelectTreeLeafBox.prototype._calcEstimateSize = js_SelectTreeLeafBox.prototype._calcEstimateSize; MSelectTreeLeafBox.prototype._estimateItemWidth = function (item, level) { var width = 12;//padding width += 12 * level; width += 14.7 + 5;//toggle icon // if (item.icon) width += 21;//icon width += 7 + estimateWidth14(item.text) + 5 + 7;//margin-text if (item.desc) width += 6 + estimateWidth14(item.desc) * 0.85; return width; }; MSelectTreeLeafBox.prototype._findFirstLeaf = js_SelectTreeLeafBox.prototype._findFirstLeaf; MSelectTreeLeafBox.prototype.viewToSelected = function () { this.modes.normal.viewToSelected(); }; MSelectTreeLeafBox.prototype.notifyPressItem = function (eventData) { delete this.pendingValue; this.emit('pressitem', Object.assign({ type: 'pressitem', target: this }, eventData), this); }; MSelectTreeLeafBox.prototype.getItemByValue = function (value) { return this.modes.normal.getItemByValue(value); }; MSelectTreeLeafBox.prototype.resetSearchState = checktreebox_MCheckTreeBox.prototype.resetSearchState; MSelectTreeLeafBox.property = selecttreeleafbox_STLBPropsHandlers; MSelectTreeLeafBox.property.items = { set: function (items) { var curValue; var selected = true; if ('pendingValue' in this) { curValue = this.pendingValue; } else { try { curValue = this.modes.normal.getValue(this.strictValue); } catch (err) { selected = false; } } this.estimateSize = this._calcEstimateSize(items); this._items = items; this.itemListCtrl.setItems(items); if (selected || this.strictValue) this.modes.normal.setValue(curValue, this.strictValue); if (this.mode !== this.modes.normal) { this.mode.updateSelectedFromRef(); } }, get: function () { this.itemListCtrl.getItems(); } }; MSelectTreeLeafBox.property.value = { /*** * @this MSelectTreeLeafBox * @param value */ set: function (value) { this.pendingValue = value; this._value = value; this.modes.normal.setValue(this.pendingValue, this.strictValue); }, get: function () { console.log(this.pendingValue, this.strictValue) if ('pendingValue' in this) { return this.pendingValue; } else { try { return this.modes.normal.getValue(this.strictValue); } catch (err) { return undefined; } } } }; MSelectTreeLeafBox.property.selectedItem = { get: function () { return this.modes.normal.getItemByValue(this.value); } }; MSelectTreeLeafBox.property.strictValue = { set: function (value) { if (value) { this.$box.addClass('as-strict-value'); } else { this.$box.removeClass('as-strict-value'); } this.modes.normal.setValue(this.pendingValue, this.strictValue); if (this.mode !== this.modes.normal) { this.mode.updateSelectedFromRef(); } }, get: function () { return this.$box.hasClass('as-strict-value'); } }; MSelectTreeLeafBox.eventHandler = {}; MSelectTreeLeafBox.eventHandler.searchTextInputModify = checktreebox_MCheckTreeBox.eventHandler.searchTextInputModify; ACore["d" /* default */].install(MSelectTreeLeafBox); /* harmony default export */ var selecttreeleafbox_MSelectTreeLeafBox = (MSelectTreeLeafBox); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTreeLeafMenu.js /*** * @extends AElement * @constructor */ function SelectTreeLeafMenu() { this.$selectBox = Object(ACore["c" /* _ */])({ tag: this.mobile ? selecttreeleafbox_MSelectTreeLeafBox : js_SelectTreeLeafBox.tag, on: { pressitem: this.eventHandler.pressItem, preupdateposition: this.eventHandler.preUpdateListPosition } }); this.$selectBox.sponsorElement = this; OOP["a" /* default */].drillProperty(this, this.$selectBox, 'enableSearch'); this.$holderItem = Object(ACore["a" /* $ */])('selectlistitem', this); // this.on('click', this.eventHandler.click.bind(this)); this.boxCtrl = new STLBoxController(this); OOP["a" /* default */].drillProperty(this, this.boxCtrl, 'isFocus'); /** * @name items * @type {Array} * @memberof SelectTreeLeafMenu# */ /** * @name value * @memberof SelectTreeLeafMenu# */ /** * @name mobile * @type {boolean} * @memberof SelectTreeLeafMenu# */ /** * @name disabled * @type {boolean} * @memberof SelectTreeLeafMenu# */ /** * @name readOnly * @type {boolean} * @memberof SelectTreeLeafMenu# */ } SelectTreeLeafMenu.tag = 'SelectTreeLeafMenu'.toLowerCase(); SelectTreeLeafMenu.render = function () { var mobile = BrowserDetector["a" /* default */].isMobile; return Object(ACore["c" /* _ */])({ class: ['absol-selectmenu', 'as-select-menu', 'as-select-tree-leaf-menu', 'as-strict-value'], extendEvent: ['change'], props: { mobile: mobile }, attr: { tabindex: '1' }, child: [ { class: 'absol-selectmenu-holder-item', child: 'selectlistitem' }, { tag: 'button', class: 'absol-selectmenu-btn', child: ['dropdown-ico'] } ] }); }; SelectTreeLeafMenu.prototype.init = function (props) { props = props || {}; Object.keys(props).forEach(function (key) { if (props[key] === undefined) delete props[key]; }); if (props.strictValue) { this.strictValue = props.strictValue; delete props.strictValue; } var hasValue = 'value' in props; var value = props.value; delete props.value; this.super(props); if (hasValue) this.value = value; }; SelectTreeLeafMenu.property = {}; SelectTreeLeafMenu.property.items = { set: function (items) { items = copySelectionItemArray(items || [], { removeNoView: true }); this.$selectBox.items = items; this.addStyle('--select-list-estimate-width', this.$selectBox.estimateSize.width + 'px'); if (this.$selectBox.selectedItem) { this.$holderItem.data = this.$selectBox.selectedItem; } else { this.$holderItem.data = { text: '' }; } }, get: function () { return this.$selectBox.items; } }; SelectTreeLeafMenu.property.value = { set: function (value) { this.$selectBox.value = value; if (this.$selectBox.selectedItem) { this.$holderItem.data = this.$selectBox.selectedItem; } else { this.$holderItem.data = { text: '' }; } }, get: function () { return this.$selectBox.value; } }; SelectTreeLeafMenu.property.strictValue = { set: function (value) { this.$selectBox.strictValue = !!value; if (value) this.addClass('as-strict-value'); else this.removeClass('as-strict-value'); }, get: function () { return this.hasClass('as-strict-value'); } }; SelectTreeLeafMenu.property.disabled = SelectMenu2.property.disabled; SelectTreeLeafMenu.eventHandler = {}; SelectTreeLeafMenu.eventHandler.clickOut = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.$selectBox, event)) return; this.isFocus = false; }; SelectTreeLeafMenu.eventHandler.click = function (event) { if (!this.disabled) this.isFocus = true; }; SelectTreeLeafMenu.eventHandler.pressItem = function (event) { this.$selectBox.value = event.item.value; this.$holderItem.data = event.item; var prevValue = this._value; this._value = event.item.value; this.isFocus = false; if (prevValue !== this._value) { this.emit('change', { item: event, type: 'change', target: this, originalEvent: event.originalEvent || event.originalEvent || event }, this); } }; SelectTreeLeafMenu.eventHandler.preUpdateListPosition = function () { var bound = this.getBoundingClientRect(); var screenSize = Object(Dom["d" /* getScreenSize */])(); var availableTop = bound.top - 5; var availableBot = screenSize.height - 5 - bound.bottom; this.$selectBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px'); var outBound = Object(Dom["g" /* traceOutBoundingClientRect */])(this); if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) { this.isFocus = false; } }; ACore["d" /* default */].install(SelectTreeLeafMenu); /* harmony default export */ var js_SelectTreeLeafMenu = (SelectTreeLeafMenu); /** * * @param {SelectTreeLeafMenu} elt * @constructor */ function STLBoxController(elt) { this.elt = elt; this.ev_click = this.ev_click.bind(this); this.ev_clickOut = this.ev_clickOut.bind(this); this.elt.on('click', this.ev_click); } Object.defineProperty(STLBoxController.prototype, 'isFocus', { set: function (value) { value = !!value; if (this.elt.hasClass('as-focus') === value) return; if (value && (this.elt.disabled || this.elt.readOnly)) return; var bound; if (value) { this.elt.$selectBox.addTo(document.body); this.elt.addClass('as-focus'); this.elt.$selectBox.addStyle('visible', 'hidden'); this.elt.off('click', this.ev_click); if (this.elt.mobile) { } else { bound = this.elt.getBoundingClientRect(); this.elt.$selectBox.addStyle('min-width', bound.width + 'px'); this.elt.$selectBox.followTarget = this.elt; this.elt.$selectBox.updatePosition(); } setTimeout(function () { document.addEventListener('click', this.ev_clickOut); this.elt.$selectBox.removeStyle('visibility'); this.elt.$selectBox.focus(); }.bind(this), 5); this.elt.$selectBox.viewToSelected(); } else { this.elt.removeClass('as-focus'); this.elt.$selectBox.remove(); document.removeEventListener('click', this.ev_clickOut); if (this.elt.mobile) { } else { this.elt.$selectBox.followTarget = null; } setTimeout(() => { this.elt.on('click', this.ev_click); }, 100); this.elt.$selectBox.resetSearchState(); } }, get: function () { return this.elt.hasClass('as-focus'); } }); STLBoxController.prototype.ev_click = function (event) { if (!this.elt.disabled && !this.elt.readOnly) this.isFocus = true; }; STLBoxController.prototype.ev_clickOut = function (event) { if (!Object(EventEmitter["d" /* hitElement */])(this.elt.$selectBox, event) || (event.target.attr && event.target.attr('class') && event.target.attr('class').indexOf('modal') >= 0)) { this.isFocus = false; } }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiCheckTreeLeafBox.js function MultiCheckTreeLeafBox_isBranchStatus(status) { return status === 'open' || status === 'close'; } function MultiCheckTreeLeafBox_invertStatus(status) { return { open: 'close', close: 'open' }[status] || 'none'; } /*** * @extends Follower * @constructor */ function MultiCheckTreeLeafBox() { this._initControl(); this._searchCache = {}; this._items = []; this._values = []; this.strictValue = true; this.$items = []; this.$itemByValue = {}; this.$dislayItems = this.$items; this.$dislayItemByValue = this.$itemByValue; this.$content = Object(ACore["a" /* $ */])('.as-select-tree-leaf-box-content', this); this._savedStatus = {}; this.estimateSize = { width: 0, height: 0 }; } MultiCheckTreeLeafBox.tag = 'MultiCheckTreeLeafBox'.toLowerCase(); MultiCheckTreeLeafBox.render = function () { return Object(ACore["c" /* _ */])({ tag: js_Follower, attr: { tabindex: 0 }, class: ['as-select-tree-leaf-box', 'as-select-list-box'], extendEvent: ['change'], child: [ { class: 'as-select-list-box-search-ctn', child: 'searchtextinput' }, { class: ['as-bscroller', 'as-select-list-box-scroller', 'as-select-tree-leaf-box-content'], child: [] }, 'attachhook.as-dom-signal' ], props: { anchor: [1, 6, 2, 5] } }); }; MultiCheckTreeLeafBox.prototype.focus = js_SelectListBox.prototype.focus; MultiCheckTreeLeafBox.prototype._initControl = function () { this.$searchInput = Object(ACore["a" /* $ */])('searchtextinput', this) .on('stoptyping', this.eventHandler.searchModify); }; MultiCheckTreeLeafBox.prototype.resetSearchState = function () { var value = this.$searchInput.value; if (value.length > 0) { this.$searchInput.value = ''; if (value.trim().length) { this.$content.clearChild(); this.$content.addChild(this.$items); this.$dislayItems = this.$items; this.$dislayItemByValue = this.$itemByValue; this._updateSelectedItems(); } } this.updatePosition(); }; MultiCheckTreeLeafBox.prototype._findFirstLeaf = function () { var found = false; function visit(item) { if (item.isLeaf) { found = item; return true; } if (item.items && item.items.length > 0) { item.items.some(visit); } return !!found; } this._items.some(visit); return found; }; MultiCheckTreeLeafBox.prototype._makeTree = function (item, dict, savedStatus) { var self = this; var status = 'none'; var isLeaf = item.isLeaf; if (item.items && item.items.length > 0) { status = 'close'; } if (MultiCheckTreeLeafBox_isBranchStatus(status) && MultiCheckTreeLeafBox_isBranchStatus(savedStatus[item.value])) { status = savedStatus[item.value]; } var treeElt = Object(ACore["c" /* _ */])({ tag: js_ExpTree.tag, class: 'as-select-tree-leaf-item', props: { name: item.text, desc: item.desc, icon: item.icon, status: status, itemData: item }, on: { 'statuschange': this.updatePosition.bind(this) } }); var nodeElt = treeElt.getNode().on({ press: function (event) { if (MultiCheckTreeLeafBox_isBranchStatus(treeElt.status)) { treeElt.status = MultiCheckTreeLeafBox_invertStatus(treeElt.status) savedStatus[item.value] = treeElt.status; self.updatePosition(); } else if (isLeaf) { if (!Object(EventEmitter["d" /* hitElement */])(checkboxElt, event)) { var checked = !checkboxElt.checked; checkboxElt.checked = checked; var idx = self._values.indexOf(item.value); var changed = false; if (checked && idx < 0) { changed = true; self._values.push(item.value); } else if (!checked && idx >= 0) { changed = true; self._values.splice(idx, 1); } if (changed) self.emit('change', { item: item, target: self, itemElt: treeElt, originalEvent: event }, self); } } } }); var checkboxElt = null; if (isLeaf) { checkboxElt = Object(ACore["c" /* _ */])({ tag: CheckBoxInput.tag, on: { change: function (event) { var checked = checkboxElt.checked; var idx = self._values.indexOf(item.value); var changed = false; if (checked && idx < 0) { changed = true; self._values.push(item.value); } else if (!checked && idx >= 0) { changed = true; self._values.splice(idx, 1); } if (changed) self.emit('change', { item: item, target: self, itemElt: treeElt, originalEvent: event }, self); } } }); nodeElt.addChildAfter(checkboxElt, nodeElt.$toggleIcon); treeElt.$checkbox = checkboxElt; } if (dict) { if (dict[item.value] && !this.warned) { this.warned = true; console.warn(this, 'has duplicated value, element will not work correctly!', item); } dict[item.value] = treeElt; } if (isLeaf) { treeElt.addClass('as-is-leaf'); } if (item.items && item.items.length > 0) { item.items.forEach(function (item1) { treeElt.addChild(self._makeTree(item1, dict, savedStatus)); }); } return treeElt; }; MultiCheckTreeLeafBox.prototype._estimateItemWidth = function (item, level) { var width = 12;//padding width += 12 * level; width += 14.7 + 5;//toggle icon if (item.icon) width += 21;//icon width += 7 + estimateWidth14(item.text) + 5 + 7;//margin-text if (item.desc) width += 6 + estimateWidth14(item.desc) * 0.85; if (item.isLeaf) width += 16; return width; }; MultiCheckTreeLeafBox.prototype.viewToSelected = function () { var selectedNode = this.$selectedItem; if (!selectedNode) return; selectedNode.scrollIntoView(); var parent = selectedNode.getParent(); while (parent && parent.getParent) { if (parent.status === 'close') { parent.getNode().emit('press'); } parent = parent.getParent(); } }; MultiCheckTreeLeafBox.prototype._calcEstimateSize = function (items) { var self = this; var width = 0; var height = 0; function visit(item, level) { var itemWidth = self._estimateItemWidth(item, level); width = Math.max(width, itemWidth); height += 28; if (item.items && item.items.length) { item.items.forEach(function (item) { visit(item, level + 1); }); } } items.forEach(function (item) { visit(item, 0); }); return { width: width, height: height }; }; MultiCheckTreeLeafBox.prototype._updateSelectedItems = function () { var dict = this._values.reduce(function (ac, cr) { ac[cr] = true; return ac; }, {}); var itemElt; for (var val in this.$dislayItemByValue) { itemElt = this.$dislayItemByValue[val]; if (itemElt.$checkbox) { itemElt.$checkbox.checked = !!dict[itemElt.itemData.value]; } } }; MultiCheckTreeLeafBox.property = {}; MultiCheckTreeLeafBox.eventHandler = {}; MultiCheckTreeLeafBox.property.items = { /*** * @this MultiCheckTreeLeafBox * @param items */ set: function (items) { var self = this; this._savedStatus = {}; this._searchCache = {}; items = copySelectionItemArray(items ||[], { removeNoView: true }); this._items = items; prepareSearchForList(items); this.$content.clearChild(); this.$itemByValue = {}; this.$dislayItemByValue = this.$itemByValue; this.$items = items.map(function (item) { return self._makeTree(item, self.$itemByValue, self._savedStatus); }); this.$dislayItems = this.$items; this.$content.addChild(this.$items); this.estimateSize = this._calcEstimateSize(items); this.addStyle('--select-list-estimate-width', this.estimateSize.width + 'px'); this._updateSelectedItems(); this.updatePosition(); }, get: function () { return this._items; } }; MultiCheckTreeLeafBox.property.values = { set: function (values) { this._values.splice(0, this._values.length); values = values || []; var arr = this._values; values.reduce(function (ac, cr) { if (!ac[cr]) { ac[cr] = true; arr.push(cr); } return ac; }, {}); this._updateSelectedItems(); }, get: function () { return this._values; } }; MultiCheckTreeLeafBox.property.enableSearch = js_SelectListBox.property.enableSearch; MultiCheckTreeLeafBox.prototype._search = function (query) { var self = this; var queryItem = prepareSearchForItem({ text: query }); var minScore = Infinity; var maxScore = -Infinity; function makeScoreTree(item) { var holder = { item: item, score: calcItemMatchScore(queryItem, item), childrenScore: 0, children: [] }; minScore = Math.min(minScore, holder.score); maxScore = Math.max(maxScore, holder.score); var children; if (item.items && item.items.length > 0) { children = item.items.map(makeScoreTree); holder.children = children; holder.childrenScore = holder.children.reduce(function (ac, cr) { return Math.max(ac, cr.score, cr.childrenScore); }, 0); } return holder; } var treeScores = this._items.map(makeScoreTree); var midScore = (maxScore + minScore) / 2; var savedStatus = {}; function filterTree(scoredTrees, ignore) { return scoredTrees.filter(function (holder) { return ignore || holder.score >= midScore || holder.childrenScore >= midScore; }).map(function makeTree(holder) { var item = Object.assign({}, holder.item); if (!ignore && holder.children && holder.children.length > 0) { if (holder.childrenScore >= midScore) { savedStatus[item.value] = 'open'; item.items = filterTree(holder.children, false); } else { savedStatus[item.value] = 'close'; item.items = filterTree(holder.children, true); } } return item; }); } var resultItems = filterTree(treeScores, false); var dict = {}; var $items = resultItems.map(function (item) { return self._makeTree(item, dict, savedStatus); }); return { $items: $items, items: resultItems, savedStatus: Object.assign({}, savedStatus), originSavedStatus: savedStatus, dict: dict }; } /*** * @this MultiCheckTreeLeafBox */ MultiCheckTreeLeafBox.eventHandler.searchModify = function () { var query = this.$searchInput.value.trim(); if (query.length === 0) { this.$content.clearChild().addChild(this.$items); this.$dislayItemByValue = this.$itemByValue; this.$dislayItems = this.$items; this._updateSelectedItems(); this.updatePosition(); return; } if (!this._searchCache[query]) { this._searchCache[query] = this._search(query); } var searchData = this._searchCache[query]; searchData.savedStatus = Object.assign(searchData.savedStatus, searchData.originSavedStatus); for (var val in searchData.dict) { if (MultiCheckTreeLeafBox_isBranchStatus(searchData.dict[val].status)) { if (searchData.savedStatus[val]) { searchData.dict[val].status = searchData.savedStatus[val] } } } this.$content.clearChild() .addChild(searchData.$items); this.$dislayItemByValue = searchData.dict; this.$dislayItems = searchData.$items; this._updateSelectedItems(); this.updatePosition(); }; ACore["d" /* default */].install(MultiCheckTreeLeafBox); /* harmony default export */ var js_MultiCheckTreeLeafBox = (MultiCheckTreeLeafBox); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiCheckTreeLeafMenu.js /**** * Only leafs have checkbox * @extends AElement * @constructor */ function MultiCheckTreeLeafMenu() { this.$selectBox = Object(ACore["c" /* _ */])({ tag: js_MultiCheckTreeLeafBox.tag, on: { change: this.eventHandler.selectBoxChange, preupdateposition: this.eventHandler.preUpdateListPosition } }); this.$selectlistBox = this.$selectBox; OOP["a" /* default */].drillProperty(this, this.$selectBox, 'enableSearch'); this.on('click', this.eventHandler.click); this.$itemCtn = Object(ACore["a" /* $ */])('.as-multi-select-menu-item-ctn', this); } MultiCheckTreeLeafMenu.tag = 'MultiCheckTreeLeafMenu'.toLowerCase(); MultiCheckTreeLeafMenu.render = function () { return Object(ACore["c" /* _ */])({ class: ['as-multi-select-menu', 'as-multi-check-tree-leaf-menu'], extendEvent: ['change'], attr: { tabindex: '1' }, child: [ { class: ['as-multi-select-menu-item-ctn', 'as-bscroller'] }, { tag: 'button', class: 'as-multi-select-menu-toggle-btn', child: 'dropdown-ico' }, 'attachhook' ] }); }; MultiCheckTreeLeafMenu.prototype._updateSelectedItems = function () { var values = this.$selectBox.values; while (this.$itemCtn.childNodes.length > values.length) { this.$itemCtn.removeChild(this.$itemCtn.lastChild); } while (this.$itemCtn.childNodes.length < values.length) { this.$itemCtn.addChild(this._makeItem()); } var item; for (var i = 0; i < values.length; ++i) { item = this.$selectBox.$itemByValue[values[i]] && this.$selectBox.$itemByValue[values[i]].itemData; if (item) { this.$itemCtn.childNodes[i].data = item; this.$itemCtn.childNodes[i].removeStyle('display', 'none'); } else { this.$itemCtn.childNodes[i].addStyle('display', 'none'); } } }; MultiCheckTreeLeafMenu.prototype._makeItem = function () { var itemElt = Object(ACore["c" /* _ */])({ tag: js_SelectBoxItem.tag, }); itemElt.on('close', this.eventHandler.itemPressClose.bind(null, itemElt)); return itemElt; }; MultiCheckTreeLeafMenu.prototype.init = function (props) { props = props || {}; var cProps = Object.assign({}, props); if ('items' in props) { this.items = props.items; delete cProps.items; } if ('values' in props) { this.values = props.values; delete cProps.values; } Object.assign(this, cProps); }; MultiCheckTreeLeafMenu.property = {}; MultiCheckTreeLeafMenu.property.items = { set: function (items) { this.$selectBox.items = items; this.addStyle('--select-list-estimate-width', Math.max(145 + 20, this.$selectBox.estimateSize.width) + 'px'); this._updateSelectedItems(); }, get: function () { return this.$selectBox.items; } }; MultiCheckTreeLeafMenu.property.values = { set: function (values) { values = values ||[]; this.pendingValues = values ; this.$selectBox.values = values ; this._updateSelectedItems(); }, get: function () { if ('pendingValues' in this) return this.pendingValues; return this.$selectBox.values.slice().filter(value=>{ return !!this.$selectBox.$itemByValue[value]; }); } }; MultiCheckTreeLeafMenu.property.isFocus = js_SelectTreeLeafMenu.property.isFocus; MultiCheckTreeLeafMenu.property.disabled = js_MultiSelectMenu.property.disabled; MultiCheckTreeLeafMenu.property.readOnly = js_MultiSelectMenu.property.readOnly; MultiCheckTreeLeafMenu.eventHandler = {}; MultiCheckTreeLeafMenu.eventHandler.clickOut = js_SelectTreeLeafMenu.eventHandler.clickOut; MultiCheckTreeLeafMenu.eventHandler.preUpdateListPosition = SelectMenu2.eventHandler.preUpdateListPosition; MultiCheckTreeLeafMenu.eventHandler.click = function (event) { if (!this.readOnly&&(event.target === this || event.target === this.$itemCtn)) { this.isFocus = true; } }; MultiCheckTreeLeafMenu.eventHandler.selectBoxChange = function () { delete this.pendingValues; this._updateSelectedItems(); this.emit('change', { type: 'change', target: this }, this); }; MultiCheckTreeLeafMenu.eventHandler.itemPressClose = function (itemElt, event) { delete this.pendingValues; var item = itemElt.data; this.$selectBox.values = this.$selectBox.values.filter(function (value) { return value !== item.value; }); this._updateSelectedItems(); this.emit('change', { type: 'change', target: this }, this); }; ACore["d" /* default */].install(MultiCheckTreeLeafMenu); /* harmony default export */ var js_MultiCheckTreeLeafMenu = (MultiCheckTreeLeafMenu); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/filelistinput.css var filelistinput = __webpack_require__(273); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/FileListItem.js /*** * @extends AElement * @constructor */ function FileListItem() { this.$parent = null; this.$icon = Object(ACore["a" /* $ */])('.as-file-list-item-icon', this); this.$name = Object(ACore["a" /* $ */])('.as-file-list-item-name', this); this.$quickMenuBtn = Object(ACore["a" /* $ */])('.as-file-list-item-quick-btn', this); this.$check = Object(ACore["a" /* $ */])('.as-file-list-item-check', this); this.value = null; this.fileType = null; this.fileName = ''; OOP["a" /* default */].drillProperty(this, this.$check, 'checked'); this.on('click', this.eventHandler.click); js_QuickMenu.toggleWhenClick(this.$quickMenuBtn, { getMenuProps: () => { var list = this.parentElement; if (list.disabled) return; var self = this; var itemElt = this var menuItems = []; menuItems.push({ text: HTML5_LanguageSystem.getText('txt_download') || "Download", icon: 'span.mdi.mdi-download', cmd: 'download' }); if (!list.readOnly) { if (itemElt) menuItems.push({ text: HTML5_LanguageSystem.getText('txt_delete') || "Delete", icon: 'span.mdi.mdi-delete', cmd: 'delete' }); menuItems.push( { text: HTML5_LanguageSystem.getText('txt_delete_all') || "Delete All", icon: 'span.mdi.mdi-delete-empty', cmd: 'delete_all' }); } return { items: menuItems }; }, onSelect: function (menuItem) { var itemElt = this; var self = this.parentElement; var files; switch (menuItem.cmd) { case 'download': self.downloadFileItemElt(itemElt); break; case 'delete': self.deleteFileItemElt(itemElt); self.emit('change', { type: 'change', item: itemElt.fileData, target: this, action: 'delete' }, this); break; case 'delete_all': files = self.files; self.files = []; self.emit('change', { type: 'change', items: files, target: this, action: 'delete_all' }, this); break; } }.bind(this) }); this.$check.on('change', function (event) { if (this.$parent) { this.$parent.emit('check', { target: this.$parent, elt: this, type: 'check' }, this.$parent); } }.bind(this)); /*** * @name checked * @type {boolean} * @memberOf FileListItem# */ } FileListItem.tag = 'FileListItem'.toLowerCase(); FileListItem.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-file-list-item', child: [ { tag: CheckBoxInput, class: 'as-file-list-item-check' }, { tag: 'img', class: 'as-file-list-item-icon', props: { src: messageinput_MessageInput.iconAssetRoot + '/' + 'blank' + '.svg' } }, { class: 'as-file-list-item-name', child: { text: '..' } }, { tag: 'button', class: 'as-file-list-item-quick-btn', child: 'span.mdi.mdi-dots-vertical' } ] }); }; FileListItem.property = {}; FileListItem.property.fileType = { set: function (value) { this._fileType = value; if (value) { if (catalog.indexOf(value) >= 0) this.$icon.src = messageinput_MessageInput.iconAssetRoot + '/' + value + '.svg'; else this.$icon.src = messageinput_MessageInput.iconAssetRoot + '/' + 'blank' + '.svg'; } else { this.$icon.src = messageinput_MessageInput.iconAssetRoot + '/' + 'blank' + '.svg'; } }, get: function () { return this._fileType; } }; FileListItem.property.fileName = { set: function (value) { this.$name.firstChild.data = value + ''; }, get: function () { return this.$name.firstChild.data; } }; FileListItem.property.value = { set: function (value) { value = value || null; var info = fileInfoOf(value); var type = info.type || null; var size = info.size || null; var name = info.name || null; this._value = value; this.fileSize = size; this.fileName = name; this.fileType = type; if (value) { this.addClass('as-has-value'); } else { this.removeClass('as-has-value'); } }, get: function () { return this._value; } }; FileListItem.eventHandler = {}; /*** * @this FileListItem * @param event */ FileListItem.eventHandler.click = function (event) { if (!Object(EventEmitter["e" /* isMouseLeft */])(event)) return; if (Object(EventEmitter["d" /* hitElement */])(this.$check, event) || Object(EventEmitter["d" /* hitElement */])(this.$quickMenuBtn, event)) return; if (this.$parent && this.$parent.showCheck) { this.$check.checked = !this.$check.checked; this.$check.notifyChange(); } }; ACore["d" /* default */].install(FileListItem); /* harmony default export */ var js_FileListItem = (FileListItem); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/FileListInput.js /*** * @extends AElement * @constructor */ function FileListInput() { ContextMenu.auto(); this.$add = Object(ACore["a" /* $ */])('.as-file-list-input-add', this); this.$attachhook = Object(ACore["a" /* $ */])('attachhook', this); this.$attachhook.requestUpdateSize = this.updateSize.bind(this); this.$attachhook.on('attached', function () { ResizeSystem["a" /* default */].add(this); this.requestUpdateSize(); }); this.on('filedrop', this.eventHandler.input_fileDrop); this.on('contextmenu', this.eventHandler.itemContext); this.$addedFile = Object(ACore["a" /* $ */])('input', this.$add) .on('change', this.eventHandler.clickAdd); /*** * * @type {FileInputBox[]} */ this.$fileItems = []; this.$activeItem = null; this._files = []; /*** * @name files * @memberOf FileListInput# * @type {*} * */ /*** * @name readOnly * @memberOf FileListInput# * @type {boolean} */ /*** * @name disabled * @memberOf FileListInput# * @type {boolean} */ /*** * @name multiple * @memberOf FileListInput# * @type {boolean} */ /*** * @name droppable * @memberOf FileListInput# * @type {boolean} */ } FileListInput.tag = 'FileListInput'.toLowerCase(); FileListInput.render = function () { return Object(ACore["c" /* _ */])({ tag: js_DropZone.tag, class: ['as-file-list-input', 'as-bscroller', 'as-empty', 'as-droppable'], extendEvent: ['change', 'contextmenu', 'check'], child: [ { tag: 'label', class: 'as-file-list-input-add', child: [ { tag: 'input', attr: { type: 'file', accept: '*', title: null } }, { class: 'as-file-list-input-add-icon-ctn', child: 'span.mdi.mdi-upload-outline' }, 'attachhook' ] }, { tag: 'span', class: 'as-file-list-drag-file-text', child: { text: '(Kéo thả file vào đây để tải lên)' } }, { class: 'as-file-list-input-upload-overlay', child: 'span.mdi.mdi-upload' } ] }); }; FileListInput.prototype.defaultChecked = false; FileListInput.prototype.updateSize = function () { var bound, px, n; var requireWidth = this.getComputedStyleValue('--item-require-width') || '300px'; if (requireWidth.match(/%$/)) { this.addStyle('--item-width', requireWidth); } else if (requireWidth.match(/px$/)) { bound = this.getBoundingClientRect(); px = parseFloat(requireWidth.replace('px', '')); if (!isNaN(px) && px > 0) { n = Math.max(1, Math.floor((bound.width - 10 - 2) / px)); this.addStyle('--item-width', Math.floor(100 / n) + '%'); } else { this.removeStyle('--item-width'); } } else { this.removeStyle('--item-width'); } }; FileListInput.prototype._makeFileItem = function (file) { var fileElt = Object(ACore["c" /* _ */])({ tag: js_FileListItem.tag, props: { $parent: this, allowUpload: false, fileData: file, checked: this.defaultChecked } }); fileElt.on('mousedown', this.eventHandler.mouseDownItem.bind(this, fileElt)); fileElt.value = file; return fileElt; }; FileListInput.prototype.add = function (file, idx) { if (!isNaturalNumber(idx)) idx = Infinity; idx = Math.min(this.$fileItems.length, idx); var fileElt = this._makeFileItem(file); var bf = this.$fileItems[idx]; if (bf) { this.$fileItems.splice(idx, 0, fileElt); this._files.splice(idx, 0, file); this.addChildBefore(fileElt, bf); } else { this.$fileItems.push(fileElt); this._files.push(file); this.addChildBefore(fileElt, this.$add); } this._updateCountClass(); }; FileListInput.prototype._updateCountClass = function () { if (this._files.length > 0) { this.removeClass('as-empty'); } else { this.addClass('as-empty'); } }; FileListInput.prototype.activeFileItemElt = function (itemElt) { if (this.$activeItem !== itemElt) { if (this.$activeItem) { this.$activeItem.removeClass('as-active'); } this.$activeItem = itemElt; if (this.$activeItem) { this.$activeItem.addClass('as-active'); } } }; FileListInput.prototype.downloadFileItemElt = function (fileElt) { var fileData = fileElt.fileData; var name = fileData.name || fileElt.fileName; var file; if (fileData instanceof File || fileData instanceof Blob) { file = fileData; } else if (typeof fileData === 'object') { if (fileData.url) file = fileData.url; } else if (typeof fileData === "string") { file = fileData; } if (file) { saveAs(file, name); } }; FileListInput.prototype.deleteFileItemElt = function (fileElt) { var fileData = fileElt.fileData; var idx = this._files.indexOf(fileData); if (idx >= 0) { this._files.splice(idx, 1); } fileElt.remove(); }; FileListInput.prototype._findFileItemElt = function (target) { while (target && target !== this) { if (target.hasClass && target.hasClass('as-file-list-item')) { return target; } target = target.parentElement; } return null; }; FileListInput.prototype.getChildren = function () { return this.$fileItems.slice(); }; FileListInput.property = {}; FileListInput.property.files = { /*** * @this FileListInput * @param files */ set: function (files) { files = files || []; files = files.slice(); var self = this; this.$fileItems.forEach(function (fileElt) { fileElt.remove(); }); files = files || []; this._files = files; this.$fileItems = files.map(function (file) { var elt = self._makeFileItem(file); self.addChildBefore(elt, self.$add); return elt; }); this._updateCountClass(); }, /*** * @this FileListInput */ get: function () { return (this._files ||[]).slice(); } }; FileListInput.property.readOnly = { set: function (value) { value = !!value; if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } this.$fileItems.forEach(function (fileElt) { fileElt.removable = !value; }); }, get: function () { return this.hasClass('as-read-only'); } }; FileListInput.property.droppable = { set: function (value) { value = !!value; if (value) { this.addClass('as-droppable'); } else { this.removeClass('as-droppable'); } this.$fileItems.forEach(function (fileElt) { fileElt.removable = !value; }); }, get: function () { return this.hasClass('as-droppable'); } }; FileListInput.property.multiple = { set: function (value) { this.$addedFile.multiple = !!value; }, get: function () { return this.$addedFile.multiple; } }; FileListInput.property.accept = { set: function (value) { if (!value) value = null; this.$addedFile.attr('accept', value + ''); }, get: function () { return this.$addedFile.attr('accept') || null; } }; FileListInput.property.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } }, get: function () { return this.hasClass('as-disabled'); } }; FileListInput.property.showCheck = { set: function (value) { if (value) { this.addClass('as-show-check'); } else { this.removeClass('as-show-check'); } }, get: function () { return this.hasClass('as-show-check'); } }; ACore["d" /* default */].install(FileListInput); /*** * @memberOf FileListInput# * @type {{}} */ FileListInput.eventHandler = {}; FileListInput.eventHandler.clickAdd = function (event) { var files = Array.prototype.slice.call(this.$addedFile.files); this.$addedFile.files = null; if (files.length === 0) return; for (var i = 0; i < files.length; ++i) { this.add(files[i]); } this.emit('change', { files: files, type: 'change', target: this, originalEvent: event, action: 'add' }, this); }; /*** * @this FileListInput * @param itemElt * @param event */ FileListInput.eventHandler.mouseDownItem = function (itemElt, event) { this.activeFileItemElt(itemElt); }; FileListInput.eventHandler.input_fileDrop = function (event) { if (this.readOnly || this.disabled) return; var self = this; var files = Array.prototype.slice.call(event.files); if (files.length === 0) return; if (!this.multiple) files = files.slice(0, 1); var accept = this.accept; files = files.filter(function (file) { return fileAccept(accept, file.type) || fileAccept(accept, file.name); }); if (files.length > 0) { files.forEach(function (file) { self.add(file); }); this.emit('change', { type: 'change', files: files, target: this, action: 'drop' }, this); } }; /*** * @this FileListInput * @param itemElt * @param event */ FileListInput.eventHandler.itemContext = function (event) { if (this.disabled) return; var self = this; var itemElt = this._findFileItemElt(event.target); var menuItems = []; if (itemElt) { menuItems.push({ text: HTML5_LanguageSystem.getText('txt_download') || "Download", icon: 'span.mdi.mdi-download', cmd: 'download' }); } if (!this.readOnly) { if (itemElt) menuItems.push({ text: HTML5_LanguageSystem.getText('txt_delete') || "Delete", icon: 'span.mdi.mdi-delete', cmd: 'delete' }); menuItems.push( { text: HTML5_LanguageSystem.getText('txt_delete_all') || "Delete All", icon: 'span.mdi.mdi-delete-empty', cmd: 'delete_all' }); } if (menuItems.length > 0) { event.showContextMenu({ items: menuItems }, function (event) { var files; switch (event.menuItem.cmd) { case 'download': self.downloadFileItemElt(itemElt); break; case 'delete': self.deleteFileItemElt(itemElt); self.emit('change', { type: 'change', item: itemElt.fileData, target: this, action: 'delete' }, this); break; case 'delete_all': files = self.files; self.files = []; self.emit('change', { type: 'change', items: files, target: this, action: 'delete_all' }, this); break; } }); } }; /* harmony default export */ var js_FileListInput = (FileListInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/dateinyearinput.css var dateinyearinput = __webpack_require__(275); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateInYearPicker.js /*** * @extends AElement * @constructor */ function DateInYearPicker() { this._month = null; this._date = null; this.$domSignal = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](this.$domSignal); this._setupMonth(); this._setupDate(); } DateInYearPicker.tag = 'DateInYearPicker'.toLowerCase(); DateInYearPicker.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['change'], class: 'as-date-in-year-picker', child: [ { class: 'as-date-in-year-picker-table', child: [ { class: 'as-date-in-year-picker-row', child: [ { class: 'as-date-in-year-picker-cell', child: {tag: 'span', child: {text: 'Month'}} }, { class: 'as-date-in-year-picker-cell', child: {tag: 'span', child: {text: 'Date'}} } ] }, { class: 'as-date-in-year-picker-row', child: [ { class: 'as-date-in-year-picker-cell', child: { class: 'as-date-in-year-picker-month-col', child: [ { class: 'as-date-in-year-picker-month-viewport', child: [ { class: 'as-date-in-year-picker-month-scroller', child: Array(36).fill(null).map(function (u, i) { return { tag: 'button', class: 'as-date-in-year-picker-month', child: { tag: 'span', child: {text: 1 + i % 12 + ''} }, props: { monthL: i % 12 } } }) } ] }, { tag: 'button', class: ['as-date-in-year-picker-month-btn', 'as-up'], child: 'span.mdi.mdi-chevron-up' }, { tag: 'button', class: ['as-date-in-year-picker-month-btn', 'as-down'], child: 'span.mdi.mdi-chevron-down' } ] } }, { class: 'as-date-in-year-picker-cell', child: { class: 'as-date-in-year-picker-days', child: Array(5).fill(null).map(function (u, i) { return { class: 'as-date-in-year-picker-week', child: Array(7).fill(null).map(function (u1, j) { return { class: 'as-date-in-year-picker-day', child: { tag: 'span', child: {text: i * 7 + j + 1 + ''} } }; }) }; }) } } ] } ] } ] }); }; DateInYearPicker.prototype._setupMonth = function () { this._monthScrollDy = 0; this.$monthScroller = Object(ACore["a" /* $ */])('.as-date-in-year-picker-month-scroller', this) .on('scroll', this.eventHandler.monthScroll) .once('wheel', this.eventHandler.monthScroll); this.$monthUpBtn = Object(ACore["a" /* $ */])('.as-date-in-year-picker-month-btn.as-up', this) .on('pointerdown', this.eventHandler.monthPressDown); this.$monthDownBtn = Object(ACore["a" /* $ */])('.as-date-in-year-picker-month-btn.as-down', this) .on('pointerdown', this.eventHandler.monthPressUp); this.$months = Object(ACore["b" /* $$ */])('.as-date-in-year-picker-month', this); for (var i = 0; i < 36; ++i) this.$months[i].on('click', this.eventHandler.clickMonth.bind(this, i % 12)); }; DateInYearPicker.prototype._setupDate = function () { this.$days = Object(ACore["b" /* $$ */])('.as-date-in-year-picker-day', this); var i; for (i = 31; i < 35; ++i) { this.$days[i].addStyle('visibility', 'hidden'); } for (i = 0; i < 31; ++i) { this.$days[i].on('click', this.eventHandler.clickDate.bind(this, i + 1)); } }; DateInYearPicker.prototype.scrollIntoSelected = function () { if (!this.isDescendantOf(document.body)) { this.domSignal.emit('scrollIntoSelected'); return; } var d = Infinity; var dy; var y; var ly, hy; var lineHeight = this.getFontSize() * 2; if (this._month !== null) { for (var k = 0; k < 3; ++k) { y = this._month * lineHeight + lineHeight * 12 * k; ly = this.$monthScroller.scrollTop; hy = ly + lineHeight * 4 - lineHeight; if (ly <= y && hy >= y) { dy = 0; break; } if (y < ly && ly - y < d) { d = ly - y; dy = y - ly; } if (y > hy && y - hy < d) { d = y - hy; dy = y - hy; } } this.$monthScroller.scrollTop += dy; } }; /*** * @memberOf DateInYearPicker# * @type {{}} */ DateInYearPicker.eventHandler = {}; /*** * @this DateInYearPicker */ DateInYearPicker.eventHandler.monthPressDown = function () { document.addEventListener('pointerup', this.eventHandler.monthRelease); this._monthScrollDy = -8; this.eventHandler.monthTick(); }; /** * @this DateInYearPicker */ DateInYearPicker.eventHandler.monthPressUp = function () { document.addEventListener('pointerup', this.eventHandler.monthRelease); this._monthScrollDy = 8; this.eventHandler.monthTick(); }; /** * @this DateInYearPicker */ DateInYearPicker.eventHandler.monthTick = function () { if (!this._monthScrollDy) return; var d = this._monthScrollDy; var fontSize = this.getFontSize(); if (this.$monthScroller.scrollTop + d < 0) d += fontSize * 2 * 12; this.$monthScroller.scrollTop += d; setTimeout(this.eventHandler.monthTick, 30); }; DateInYearPicker.eventHandler.monthRelease = function () { document.removeEventListener('pointerup', this.eventHandler.monthRelease); this._monthScrollDy = 0; }; /** * @this DateInYearPicker */ DateInYearPicker.eventHandler.monthScroll = function () { var scrollTop = this.$monthScroller.scrollTop; var fontSize = this.getFontSize(); if (scrollTop < fontSize * 2 * 12) { this.$monthScroller.scrollTop += fontSize * 2 * 12; } else if (scrollTop > fontSize * 2 * 12 * 2) { this.$monthScroller.scrollTop -= fontSize * 2 * 12; } }; /** * @this DateInYearPicker */ DateInYearPicker.eventHandler.clickMonth = function (month, event) { var pDate = this.date; if (this.month === month) return; this.month = month; this.emit('change', {type: 'change', originalEvent: event, target: this}, this); }; /** * @this DateInYearPicker */ DateInYearPicker.eventHandler.clickDate = function (date, event) { if (this.date === date) return this.date = date; this.emit('change', {type: 'change', originalEvent: event, target: this}, this); }; DateInYearPicker.property = {}; DateInYearPicker.property.date = { set: function (value) { if (typeof value !== 'number') value = null; var cM, dim; if (this._month === null) { dim = 31; } else { cM = new Date(2000, this._month, 1); dim = compareDate(nextMonth(cM), cM); } if (typeof value === "number") value = Math.max(1, Math.min(dim, Math.floor(value))); if (isNaN(value)) value = null; if (this._date === value) return; if (this._date !== null) { this.$days[this._date - 1].removeClass('as-selected'); } this._date = value; if (this._date !== null) { this.$days[this._date - 1].addClass('as-selected'); } }, get: function () { return this._date; } }; DateInYearPicker.property.month = { /*** * @this DateInYearPicker * @param value */ set: function (value) { if (typeof value == 'number') { value = Math.max(0, Math.min(11, Math.floor(value))); } else value = null; if (isNaN(value)) value = null; if (this._month === value) return; if (this._month !== null) { this.$months[this._month].removeClass('as-selected'); this.$months[this._month + 12].removeClass('as-selected'); this.$months[this._month + 24].removeClass('as-selected'); } this._month = value; var cM, dim; if (this._month !== null) { this.$months[this._month].addClass('as-selected'); this.$months[this._month + 12].addClass('as-selected'); this.$months[this._month + 24].addClass('as-selected'); this.scrollIntoSelected(); cM = new Date(2000, this._month, 1); dim = compareDate(nextMonth(cM), cM); } else { dim = 31; } for (var i = 29; i < 31; ++i) { if (i < dim) { this.$days[i].removeStyle('visibility'); } else { this.$days[i].addStyle('visibility', 'hidden'); } } this.date = Math.min(this.date, dim); }, get: function () { return this._month; } }; DateInYearPicker.property.value = { set: function (value) { value = value || {month: null, date: null}; this.month = value.month; this.date = value.date; }, get: function () { return {month: this.month, date: this.date}; } }; ACore["d" /* default */].install(DateInYearPicker); /* harmony default export */ var js_DateInYearPicker = (DateInYearPicker); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateInYearInput.js /*** * @extends AElement * @constructor */ function DateInYearInput() { this._format = 'dd/MM'; this._value = null; this.$clearBtn = Object(ACore["a" /* $ */])('.as-time-input-clear-btn', this) .on('click', this.clear.bind(this, true)); this.$input = Object(ACore["a" /* $ */])('input', this); this.on('click', this.eventHandler.click); } DateInYearInput.tag = 'DateInYearInput'.toLowerCase(); DateInYearInput.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['change'], class: ['as-date-time-input', 'as-date-in-year-input', 'as-empty'], child: [ { tag: 'input', class: 'as-date-time-input-text', attr: { ondrop: "return false;", readOnly: true }, props: { value: 'dd/MM' } }, { tag: 'button', class: 'as-time-input-clear-btn', child: 'span.mdi.mdi-close-circle' }, { tag: 'button', class: 'as-date-time-input-icon-btn', child: 'span.mdi.mdi-calendar-today' } ] }); }; DateInYearInput.prototype.share = { $follower: null, $picker: null, $input: null }; DateInYearInput.prototype._preparePicker = function () { if (this.share.$picker) return; this.share.$picker = Object(ACore["c" /* _ */])({ tag: js_DateInYearPicker.tag, class:'as-dropdown-box-common-style' }); this.share.$follower = Object(ACore["c" /* _ */])({ tag: js_Follower.tag, class: 'as-date-in-year-follower', child: this.share.$picker }); }; DateInYearInput.prototype.clear = function (userAction, event) { var pValue = this.value; this.value = null; if (pValue) { this.emit('change', { type: 'change', action: 'clear', target: this, originalEvent: event }, this) } }; DateInYearInput.prototype._attachPicker = function () { this._preparePicker(); if (this.share.$input === this) return; if (this.share.$input) this.share.$input._releasePicker(); this.share.$input = this; this.share.$follower.addTo(document.body); this.share.$follower.followTarget = this; this.share.$follower.sponsorElement = this; this.share.$picker.value = this._value; this.share.$picker.on('change', this.eventHandler.pickerChange); setTimeout(function () { document.addEventListener('click', this.eventHandler.clickOut); }.bind(this), 0); }; DateInYearInput.prototype._releasePicker = function () { if (this.share.$input !== this) return; var cValue = this._value; var value = this.share.$picker.value; var nValue = this._normalizeValue(value); this.share.$input = null; this.share.$picker.followTarget = null; this.share.$follower.remove(); this.share.$picker.off('change', this.eventHandler.pickerChange); document.removeEventListener('click', this.eventHandler.clickOut); var changed = !cValue !== !nValue; if (nValue && !changed) { changed = cValue.date === nValue.date && cValue.month === nValue.month; } if (changed) { this._value = value; this.emit('change', { type: 'change', value: nValue, target: this }, this); } }; DateInYearInput.prototype._normalizeValue = function (value) { if (!value) return null; var m = Math.min(11, Math.max(0, Math.floor(value.month))); if (isNaN(m)) return null; var dim = compareDate(nextMonth(new Date(2000, m, 1)), new Date(2000, m, 1)); var d = Math.min(dim, Math.max(1, Math.floor(value.date))); if (isNaN(d)) return null; return { date: d, month: m }; }; DateInYearInput.prototype._updateValueText = function () { var value = this._value; if (value) { this.$input.value = this._format.replace(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (full) { switch (full) { case 'dd': case 'd': if (isRealNumber(value.date)) { return zeroPadding(value.date, full.length); } return full; case 'M': case 'MM': if (isRealNumber(value.month)) { return zeroPadding(value.month + 1, full.length); } return full; default: return full; } }); } else { this.$input.value = this._format; } if (this.$input.value === this._format) { this.addClass('as-empty'); } else { this.removeClass('as-empty'); } }; DateInYearInput.property = {}; DateInYearInput.property.value = { set: function (value) { value = this._normalizeValue(value); this._value = value; this._updateValueText(); }, get: function () { return this._normalizeValue(this._value); } }; DateInYearInput.property.notNull = { set: function (value) { if (value) { this.addClass('as-must-not-null'); } else { this.removeClass('as-must-not-null'); } }, get: function () { return this.hasClass('as-must-not-null'); } }; DateInYearInput.property.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); this.$input.disabled = true; } else { this.removeClass('as-disabled'); this.$input.disabled = false; } }, get: function () { return this.hasClass('as-disabled'); } }; DateInYearInput.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); this.$input.readOnly = true; } else { this.removeClass('as-read-only'); this.$input.readOnly = false; } }, get: function () { return this.hasClass('as-read-only'); } }; /*** * @memberOf DateInYearInput# * @type {{}} */ DateInYearInput.eventHandler = {}; /*** * @this DateInYearInput * @param event */ DateInYearInput.eventHandler.click = function (event) { if (this.readOnly || Object(EventEmitter["d" /* hitElement */])(this.$clearBtn, event)) return; this._attachPicker(); }; /*** * @this DateInYearInput * @param event */ DateInYearInput.eventHandler.clickOut = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.share.$follower, event)) return; this._releasePicker(); }; DateInYearInput.eventHandler.pickerChange = function () { this._value = this.share.$picker.value; this._updateValueText(); }; ACore["d" /* default */].install(DateInYearInput); /* harmony default export */ var js_DateInYearInput = (DateInYearInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/dualselectmenu.css var dualselectmenu = __webpack_require__(277); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DualSelectBox.js /*** * @extends Follower * @constructor */ function DualSelectBox() { this.$domSignal = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](this.$domSignal); this.domSignal.on('scrollIntoSelected', this.scrollIntoSelected.bind(this)); this._items = []; this._value = [null, null]; this.holderByValue = {}; this.$lists = Object(ACore["b" /* $$ */])('.as-dual-select-box-list', this); this.$searcTextInput = Object(ACore["a" /* $ */])('searchtextinput', this) .on('stoptyping', this.eventHandler.searchTextInputModify); this.$closeBtn = Object(ACore["a" /* $ */])('.as-select-list-box-close-btn', this) .on('click', this.eventHandler.clickCloseBtn); this.cView = new DualSelectView(this, this._items); this.searchedView = { '*': this.cView }; this.estimateSize = { width: 0, height: 0 }; this._emittedValue = [null, null]; /*** * @name strictValue * @type {boolean} * @memberOf DualSelectBox# */ /*** * @name enableSearch * @type {boolean} * @memberOf DualSelectBox# */ /*** * @name value * @type {Array} * @memberOf DualSelectBox# */ /*** * @name items * @type {Array} * @memberOf DualSelectBox# */ } DualSelectBox.tag = 'DualSelectBox'.toLowerCase(); DualSelectBox.render = function () { return Object(ACore["c" /* _ */])({ tag: js_Follower.tag, class: 'as-dual-select-box', extendEvent: ['change', 'close'], child: [ { class: 'as-dual-select-box-search-ctn', child: { tag: 'searchtextinput' } }, { class: 'as-dual-select-box-list-ctn', child: [ { class: ['as-dual-select-box-list', 'absol-selectlist', 'as-bscroller'], }, { class: 'as-dual-select-box-arrow-ctn', child: 'span.mdi.mdi-menu-right' }, { class: ['as-dual-select-box-list', 'absol-selectlist', 'as-bscroller'] } ] }, { class: 'as-dropdown-box-footer', child: [ { class: 'as-dropdown-box-footer-right', child: [ { tag: 'a', class: 'as-select-list-box-close-btn', child: { text: 'Close' } } ] } ] } ] }); }; DualSelectBox.prototype._implicit = function (value) { if (value instanceof Array) { if (value.length > 2) value = value.slice(0, 2); else { value.push.apply(value, Array(2 - value.length).fill(null)); } } else { value = [null, null]; } return value; }; DualSelectBox.prototype._explicit = function (value) { value = value.slice(); var strictValue = this.strictValue; if (!this.holderByValue[value[0]]) { if (this._items.length > 0 && strictValue) { value[0] = this._items[0].value; } else { return null; } } if (!this.holderByValue[value[0]].child[value[1]]) { if (strictValue && this.holderByValue[value[0]].item.items && this.holderByValue[value[0]].item.items.length > 0) { value[1] = this.holderByValue[value[0]].item.items[0].value; } else { return null; } } if (value[0] === null || value[1] === null) { return null; } return value; }; DualSelectBox.prototype._notifyIfChange = function (event) { var value = this._explicit(this._value); if (value === this._emittedValue) return; if (!value !== !this._emittedValue || (value[0] !== this._emittedValue[0] || value[1] !== this._emittedValue[1])) { this.emit('change', { type: 'change', target: this, originalEvent: event }, this); } }; DualSelectBox.prototype._makeLeftItem = function (item) { var itemElt = Object(ACore["c" /* _ */])({ class: 'absol-selectlist-item', child: { tag: 'span', class:'absol-selectlist-item-text', child: { text: item.text } } }); itemElt.itemData = item; itemElt.on('click', this.eventHandler.clickLeftItem.bind(this, itemElt)); return itemElt; }; DualSelectBox.prototype.makeRightItem = function (item) { var itemElt = Object(ACore["c" /* _ */])({ class: 'absol-selectlist-item', child: { tag: 'span', class:'absol-selectlist-item-text', child: { text: item.text } } }); itemElt.itemData = item; itemElt.on('click', this.eventHandler.clickRightItem.bind(this, itemElt)); return itemElt; }; DualSelectBox.prototype._calcEstimateSize = function (items) { var fontSize = Object(ACore["a" /* $ */])(document.body).getFontSize(); var longestItem = null; var longestE14 = 0; var e14, i, j; var item, subItem; for (i = 0; i < items.length; ++i) { item = items[i]; e14 = estimateWidth14(item.text); if (e14 > longestE14) { longestItem = item; longestE14 = e14; } } var leftTextWidth = longestItem ? measureText(longestItem.text, '14px arial').width : 0; var maxN = items.length; for (i = 0; i < items.length; ++i) { item = items[i]; if (!item.items || item.items.length === 0) continue; maxN = Math.max(maxN, item.items.length); for (j = 0; j < item.items.length; ++j) { subItem = item.items[j]; e14 = estimateWidth14(subItem.text); if (e14 > longestE14) { longestItem = subItem; longestE14 = e14; } } } var rightTextWidth = longestItem ? measureText(longestItem.text, '14px arial').width : 0; return { width: (7 + leftTextWidth + 7 + 5 + 7 + 1 + 17 + 1 + 7 + rightTextWidth + 7 + 5 + 7 + 20) * fontSize / 14, height: maxN * 20 * fontSize / 14, textWidth: (leftTextWidth + rightTextWidth + 12) * fontSize / 14 } }; DualSelectBox.prototype.scrollIntoSelected = function () { if (!this.isDescendantOf(document.body)) { this.domSignal.emit('scrollIntoSelected'); return; } if (this.cView && this.cView.$leftSelectedItem && this.cView.$leftSelectedItem.isDescendantOf(this.$lists[0])) { this.cView.$leftSelectedItem.scrollIntoView(); } if (this.cView && this.cView.$rightSelectedItem && this.cView.$rightSelectedItem.isDescendantOf(this.$lists[1])) { this.cView.$rightSelectedItem.scrollIntoView(); } }; DualSelectBox.prototype.focus = js_SelectListBox.prototype.focus; DualSelectBox.property = {}; DualSelectBox.property.items = { /*** * @this DualSelectBox * @param items */ set: function (items) { var self = this; items = items || []; prepareSearchForList(items); this._items = items; this.holderByValue = items.reduce(function (ac, cr) { ac[cr.value] = { item: cr, child: (cr.items || []).reduce(function (ac1, cr1) { ac1[cr1.value] = { item: cr1 } return ac1; }, {}) } return ac; }, {}); this.estimateSize = this._calcEstimateSize(items); this.addStyle('--dual-list-estimate-width', this.estimateSize.width + 'px'); this.searchedView = {}; this.cView = new DualSelectView(this, items); this.searchedView['*'] = this.cView; this.cView.toView(); }, get: function () { return this._items; } }; DualSelectBox.property.enableSearch = { set: function (value) { if (value) { this.addClass('as-enable-search'); } else { this.removeClass('as-enable-search'); } }, get: function () { return this.hasClass('as-enable-search'); } }; DualSelectBox.property.strictValue = { set: function (value) { if (value) { this.addClass('as-strict-value'); } else { this.removeClass('as-strict-value'); } if (this.cView) this.cView.updateViewByValue(); }, get: function () { return this.hasClass('as-strict-value'); } }; DualSelectBox.property.value = { /*** * @this DualSelectBox * @param value */ set: function (value) { this._value = this._implicit(value); if (this.cView) { this.cView.updateViewByValue(); this.cView.toRightList(); } this.scrollIntoSelected(); }, get: function () { return this._explicit(this._value); } }; /*** * @memberOf DualSelectBox# * @type {{}} */ DualSelectBox.eventHandler = {}; /*** * @this DualSelectBox * @param itemElt * @param event */ DualSelectBox.eventHandler.clickLeftItem = function (itemElt, event) { var item = itemElt.itemData; this._value[0] = item.value; this.cView.updateLeftSelectedItem(); this.cView.updateRightList(); this.cView.toRightList(); if (this.cView.$leftItemByValue[item.value] && this.cView.$leftItemByValue[item.value].itemData && this.cView.$leftItemByValue[item.value].itemData.items && this.cView.$leftItemByValue[item.value].itemData.items.length > 0) { this._value[1] = this.cView.$leftItemByValue[item.value].itemData.items[0].value; this.cView.updateRightSelectedItem(); } if (this.cView.$rightSelectedItem) { this.cView.$rightSelectedItem.scrollIntoView(); } this._notifyIfChange(event); }; /*** * @this DualSelectBox * @param itemElt * @param event */ DualSelectBox.eventHandler.clickRightItem = function (itemElt, event) { var item = itemElt.itemData; this._value[1] = item.value; this.cView.updateRightSelectedItem(); this._notifyIfChange(event); }; DualSelectBox.prototype.searchItemByText = function (text) { var items = this._items; var queryItem = prepareSearchForItem({ text: text }); var maxScore = 0; var holders = items.map(function (item) { var h = { item: item, itemScore: calcItemMatchScore(queryItem, item), }; maxScore = Math.max(maxScore, h.itemScore); var childMaxScore = 0; if (item.items && item.items.length > 0) { h.child = item.items.map(function (cItem) { var cItemScore = calcItemMatchScore(queryItem, cItem); maxScore = Math.max(maxScore, cItemScore); childMaxScore = Math.max(childMaxScore, cItemScore); return { item: cItem, itemScore: cItemScore }; }); h.childScore = childMaxScore; } return h; }); holders.sort(function (a, b) { return -Math.max(a.itemScore, a.childScore) + Math.max(b.itemScore, b.childScore) }); var midScore = maxScore / 2; holders = holders.filter(function (holder) { return Math.max(holder.itemScore, holder.childScore) >= midScore; }); return holders.map(function (holder) { var oldItem = holder.item; var item = { text: oldItem.text, value: oldItem.value }; var childHolders; if (holder.child) { childHolders = holder.child.slice(); childHolders.sort(function (a, b) { return -a.itemScore + b.itemScore; }); item.items = childHolders.map(function (cHolder) { return cHolder.item; }); item.isSearchItem = true; } return item; }); }; DualSelectBox.prototype.focus = function () { if (this.enableSearch) { this.$searcTextInput.focus(); } }; DualSelectBox.prototype.resetSearchState = function () { if (this.$searcTextInput.value.length === 0) return; this.$searcTextInput.value = ''; this.eventHandler.searchTextInputModify(); }; /*** * @this DualSelectBox */ DualSelectBox.eventHandler.searchTextInputModify = function () { var query = this.$searcTextInput.value.trim().replace(/\s+/, ' '); if (query.length === 0) query = '*'; var view = this.searchedView[query]; if (!view) { view = new DualSelectView(this, this.searchItemByText(query)); this.searchedView[query] = view; } this.cView = view; this.cView.updateLeftSelectedItem(); this.cView.updateRightSelectedItem(); view.toView(); this.$lists[0].scrollTop = 0; this.$lists[1].scrollTop = 0; if (query === '*') this.scrollIntoSelected(); }; DualSelectBox.eventHandler.clickCloseBtn = function (event) { this.emit('close', { type: 'close', target: this, originalEvent: event }, this); }; ACore["d" /* default */].install(DualSelectBox); /* harmony default export */ var js_DualSelectBox = (DualSelectBox); /*** * * @param {DualSelectBox} box * @param items * @constructor */ function DualSelectView(box, items) { var self = this; this.box = box; this.items = items; this.$leftItems = items.map(function (item) { return self.box._makeLeftItem(item); }); this.$leftItemByValue = this.$leftItems.reduce(function (ac, cr) { ac[cr.itemData.value] = cr; return ac; }, {}); this.$rightItems = []; this.$rightItemByValue = {}; this.$leftSelectedItem = null; this.$rightSelectedItem = null; this.updateViewByValue(); } DualSelectView.prototype.toView = function () { this.box.$lists[0].clearChild(); this.box.$lists[0].addChild(this.$leftItems); this.updateLeftSelectedItem(); this.toRightList(); }; DualSelectView.prototype.toRightList = function () { this.box.$lists[1].clearChild(); this.box.$lists[1].addChild(this.$rightItems); this.updateLeftSelectedItem(); }; DualSelectView.prototype.updateViewByValue = function () { this.updateLeftSelectedItem(); this.updateRightList(); }; DualSelectView.prototype.updateRightList = function () { var self = this; var leftValue = this.box._value[0]; var items = this.$leftItemByValue[leftValue] && this.$leftItemByValue[leftValue].itemData.items; if (items && items.length > 0) { this.$rightItems = items.map(function (item) { return self.box.makeRightItem(item); }); } else { this.$rightItems = []; } this.$rightItemByValue = this.$rightItems.reduce(function (ac, cr) { ac[cr.itemData.value] = cr; return ac; }, {}); this.updateRightSelectedItem(); }; DualSelectView.prototype.updateLeftSelectedItem = function () { if (this.$leftSelectedItem) { this.$leftSelectedItem.removeClass('as-selected'); } this.$leftSelectedItem = this.$leftItemByValue[this.box._value[0]] || null; if (this.$leftSelectedItem) { this.$leftSelectedItem.addClass('as-selected'); } }; DualSelectView.prototype.updateRightSelectedItem = function () { if (this.$rightSelectedItem) { this.$rightSelectedItem.removeClass('as-selected'); } this.$rightSelectedItem = this.$rightItemByValue[this.box._value[1]] || null; if (this.$rightSelectedItem) { this.$rightSelectedItem.addClass('as-selected'); } }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DualSelectMenu.js /*** * @extends AElement * @constructor */ function DualSelectMenu() { this._format = '$0, $1'; /*** * @type {DualSelectBox} */ this.$box = Object(ACore["c" /* _ */])({ tag: js_DualSelectBox.tag, props: { anchor: [1, 6, 2, 5] }, on: { preupdateposition: this.eventHandler.preUpdatePosition, change: this.eventHandler.boxChange, close: this.eventHandler.boxClose } }); this.$item = Object(ACore["a" /* $ */])('.absol-selectlist-item', this); this.on('click', this.eventHandler.click); OOP["a" /* default */].drillProperty(this, this.$box, 'enableSearch'); /*** * @name strictValue * @type {boolean} * @memberOf DualSelectMenu# */ /*** * @name readOnly * @type {boolean} * @memberOf DualSelectMenu# */ /*** * @name disabled * @type {boolean} * @memberOf DualSelectMenu# */ } DualSelectMenu.tag = 'DualSelectMenu'.toLowerCase(); DualSelectMenu.render = function () { return Object(ACore["c" /* _ */])({ class: ['absol-selectmenu', 'as-dual-select-menu'], extendEvent: ['change'], attr: { tabindex: '1' }, child: [ { class: 'absol-selectmenu-holder-item', child: '.absol-selectlist-item' }, { tag: 'button', class: 'absol-selectmenu-btn', child: ['dropdown-ico'] }, 'attachhook', ] }); }; DualSelectMenu.prototype._updateViewValue = function () { var format = this._format; var value = this.$box.value || [null, null]; var strictValue = this.strictValue; var hbv = this.$box.holderByValue; var firstToken = '__'; var secToken = '__'; var firstHolder = hbv[value[0]]; var sectHolder; if (firstHolder) { firstToken = firstHolder.item.text; sectHolder = firstHolder.child[value[1]]; if (sectHolder) secToken = sectHolder.item.text } var text = format.replace('$0', firstToken) .replace('$1', secToken); this.$item.clearChild().addChild(Object(ACore["c" /* _ */])({ tag: 'span', class:['as-selectlist-item-text', 'absol-selectlist-item-text'], child: { text: text } })); }; DualSelectMenu.property = {}; DualSelectMenu.property.selectedItems = { get: function () { var value = this.$box.value || [null, null]; var hbv = this.$box.holderByValue; var firstHolder = hbv[value[0]]; var sectHolder; var res = [null, null]; if (firstHolder) { res[0] = firstHolder.item; sectHolder = firstHolder.child[value[1]]; if (sectHolder) res[1] = sectHolder.item; } return res; } }; DualSelectMenu.property.isFocus = { /*** * @this DualSelectMenu * @param value */ set: function (value) { var self = this; value = !!value; if (value && (this.disabled || this.readOnly)) return; if (this.hasClass('as-focus') === value) return; if (value) { this._prevValue = (this.$box.value || [null, null]).join('//'); this.addClass('as-focus'); this.off('click', this.eventHandler.click); this.$box.followTarget = this; this.$box.sponsorElement = this; this.$box.addTo(document.body); this.$box.updatePosition(); this.$box.scrollIntoSelected(); setTimeout(function () { self.$box.focus(); document.addEventListener('click', self.eventHandler.clickOut); }, 10); } else { this.removeClass('as-focus'); this.$box.remove(); this.$box.resetSearchState(); document.removeEventListener('click', self.eventHandler.clickOut); setTimeout(function () { self.on('click', self.eventHandler.click); }, 10); if ((this.$box.value || [null, null]).join('//') !== this._prevValue) { this._updateViewValue(); this.emit('change', { type: 'change', target: this }, this); } } }, get: function () { return this.hasClass('as-focus'); } } /**** * @memberOf DualSelectMenu# * @type {{}} */ DualSelectMenu.eventHandler = {}; DualSelectMenu.property.items = { /*** * @this DualSelectMenu * @param items */ set: function (items) { this.$box.items = items; this.addStyle('--dual-list-estimate-text-width', this.$box.estimateSize.textWidth + 'px'); this._updateViewValue(); }, get: function () { return this.$box.items; } }; DualSelectMenu.property.value = { set: function (value) { this.$box.value = value; this._updateViewValue(); }, get: function () { return this.$box.value; } }; DualSelectMenu.property.strictValue = { set: function (value) { this.$box.strictValue = value; this._updateViewValue(); }, get: function () { return this.$box.strictValue; } }; DualSelectMenu.property.format = { set: function (value) { this._format = value || '$0, $1'; this._updateViewValue(); }, get: function () { return this._format; } }; DualSelectMenu.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } }, get: function () { return this.hasClass('as-read-only'); } }; DualSelectMenu.property.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } }, get: function () { return this.hasClass('as-disabled'); } } /** * @this DualSelectMenu */ DualSelectMenu.eventHandler.click = function () { if (this.readOnly) return; this.isFocus = true; }; /** * @this DualSelectMenu */ DualSelectMenu.eventHandler.clickOut = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.$box, event)) return; this.isFocus = false; }; /*** * @this DualSelectMenu */ DualSelectMenu.eventHandler.preUpdatePosition = function () { var bound = this.getBoundingClientRect(); var screenSize = Object(Dom["d" /* getScreenSize */])(); var availableTop = bound.top - 5; var availableBot = screenSize.height - 5 - bound.bottom; this.$box.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px'); var outBound = Object(Dom["g" /* traceOutBoundingClientRect */])(this); if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) { this.isFocus = false; } }; DualSelectMenu.eventHandler.boxChange = function () { this._updateViewValue(); }; DualSelectMenu.eventHandler.boxClose = function () { this.isFocus = false; }; ACore["d" /* default */].install(DualSelectMenu); /* harmony default export */ var js_DualSelectMenu = (DualSelectMenu); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/toclist.css var toclist = __webpack_require__(279); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TOCItem.js /*** * @extends AElement * @constructor */ function TOCItem() { this.$iconP = null; this.$iconCtn = Object(ACore["a" /* $ */])('.as-toc-item-ext-icon-ctn', this); this._status = 'none'; this.$name = Object(ACore["a" /* $ */])('.as-toc-item-name', this); this.$nameInput = Object(ACore["a" /* $ */])('.as-toc-item-name-input', this) .on('keydown', this.eventHandler.keyDownNameInput) .on('paste', this.eventHandler.keyDownNameInput); this.$toggleCtn = Object(ACore["a" /* $ */])('.as-toc-item-toggle-ico-ctn', this); this._level = 0; this.$checkbox = Object(ACore["a" /* $ */])(CheckBoxInput.tag, this) .on('change', this.eventHandler.checkedChange); this.$checkbox.disabled = true; this.$checkbox.addStyle('display', 'none'); this.$checkIco = Object(ACore["a" /* $ */])('.as-toc-item-check-ctn .mdi-check', this) .addStyle('display', 'none') .addStyle('font-size', '18px'); this.$quickMenuBtn = Object(ACore["a" /* $ */])('.as-toc-item-quick-menu-ctn button', this) .on('click', this.eventHandler.clickQuickMenuBtn); this.on('click', this.eventHandler.click); this._lastClickTime = 0; /*** * @name hasQuickMenu * @type {boolean} * @memberOf TOCItem# */ /*** * @name name * @type {string} * @memberOf TOCItem# */ /*** * @name status * @type {"none"|"open"|"close"} * @memberOf TOCItem# */ /*** * @name level * @type {number} * @memberOf TOCItem# */ /*** * @name checked * @type {boolean} * @memberOf TOCItem# */ /*** * @name nodeData * @type {{}} * @memberOf TOCItem# */ } TOCItem.tag = 'TOCItem'.toLowerCase(); TOCItem.render = function () { return Object(ACore["c" /* _ */])({ class: ['as-toc-item', 'as-has-quick-menu'], extendEvent: ['presstoggle', 'checkedchange', 'pressquickmenu', 'press', 'renamefinish'], child: [ { class: 'as-toc-item-toggle-ico-ctn', child: 'toggler-ico' }, '.as-toc-item-ext-icon-ctn', { class: 'as-toc-item-name-ctn', child: [ { tag: 'span', class: 'as-toc-item-name', child: { text: 'đây là cái tên' } }, { tag: 'input', class: 'as-toc-item-name-input', attr: { type: 'text' } } ] }, { class: 'as-toc-item-check-ctn', child: [{ tag: CheckBoxInput.tag }, 'span.mdi.mdi-check'] }, { class: 'as-toc-item-quick-menu-ctn', child: { tag: 'button', child: 'span.mdi.mdi-dots-vertical' } } ] }); }; TOCItem.property = {}; TOCItem.property.icon = { set: function (value) { if (this.$iconP) { this.$iconP.remove(); this.$iconP = undefined; } if (value) { var newE; if (!Dom["b" /* default */].isDomNode(value)) { newE = Object(ACore["c" /* _ */])(value); } this.$iconP = newE; this.$iconCtn.addChild(newE); this._icon = value; } else { this._icon = undefined; } }, get: function () { return this._icon; } }; TOCItem.property.status = { set: function (value) { if (['none', 'open', 'close'].indexOf(value) < 0) value = 'none'; this.removeClass('as-status-' + this._status); this._status = value; this.addClass('as-status-' + value); }, get: function () { return this._status; } }; TOCItem.property.name = { set: function (value) { this.$name.firstChild.data = value || ''; }, get: function () { return this.$name.firstChild.data; } }; TOCItem.property.level = { set: function (value) { this._level = value; this.addStyle('--level', value + ''); }, get: function () { return this._level; } }; TOCItem.property.checked = { set: function (value) { this.$checkbox.checked = value; if (value) { this.$checkIco.removeStyle('display'); } else { this.$checkIco.addStyle('display', 'none'); } }, get: function () { return this.$checkbox.checked; } }; TOCItem.property.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } }, get: function () { return this.hasClass('as-disabled'); } }; TOCItem.property.hasQuickMenu = { set: function (value) { if (value) { this.addClass('as-has-quick-menu'); } else { this.removeClass('as-has-quick-menu'); } }, get: function () { return this.hasClass('as-has-quick-menu'); } }; TOCItem.property.extendClasses = { set: function (value) { value = value || []; if (typeof value === 'string') value = value.trim().split(/\s/).filter(x => !!x); if (this._extendClasses) { this._extendClasses.forEach(c => this.removeClass(c)); } this._extendClasses = value; this._extendClasses.forEach(c => this.addClass(c)); }, get: function () { return this._extendClasses || []; } }; TOCItem.prototype.rename = function () { this.addClass('as-renaming'); var name = this.name; var textWidth = measureText(name, '14px Arial, Helvetica, sans-serif').width; this.$nameInput.addStyle('width', textWidth + 2 + 'px'); this.$nameInput.value = name; this.$nameInput.focus(); this.$nameInput.select(); this.$nameInput.once('blur', function (event) { var event1; if (this.$nameInput.value !== name) { event1 = Object(EventEmitter["a" /* copyEvent */])(event, { originalEvent: event, type: 'renamefinish', newName: this.$nameInput.value, __promise__: Promise.resolve(true), waitFor: function (promise) { if (promise && promise.then) { this.__promise__ = promise; } else { this.__promise__ = Promise.resolve(promise); } } }); this.emit('renamefinish', event1, this); event1.__promise__.then(function (result) { if (result === true) { this.name = event1.newName; } else if (typeof result === 'string') { this.name = result; } }.bind(this)); } this.removeClass('as-renaming'); }.bind(this)); }; /*** * @memberOf TOCItem# * @type {{}} */ TOCItem.eventHandler = {}; TOCItem.eventHandler.keyDownNameInput = function (event) { var extendText = ''; if (event.type === 'paste') { extendText = (event.clipboardData || window.clipboardData).getData('text') || ''; } else if (event.key.length === 1 && !(event.ctrl && event.key === 'C')) { extendText = event.key; } else if (event.key === 'Enter') { this.$nameInput.blur(); } if (extendText.length > 0) { this.$nameInput.addStyle('width', measureText(this.$nameInput.value + extendText, '14px Arial, Helvetica, sans-serif').width + 2 + 'px'); } setTimeout(function () { var name = this.$nameInput.value; this.$nameInput.addStyle('width', measureText(name, '14px Arial, Helvetica, sans-serif').width + 2 + 'px'); }.bind(this), 0); }; TOCItem.eventHandler.checkedChange = function (event) { this.emit('checkedchange', { type: 'checkedchange', target: this, originalEvent: event }, this); }; TOCItem.eventHandler.clickQuickMenuBtn = function (event) { this.emit('pressquickmenu', { type: 'pressquickmenu', originalEvent: event }, this); }; TOCItem.eventHandler.click = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.$checkbox, event) || Object(EventEmitter["d" /* hitElement */])(this.$quickMenuBtn, event)) return; var now= Date.now(); if (Object(EventEmitter["d" /* hitElement */])(this.$toggleCtn, event)) { this.emit('presstoggle', { originalEvent: event, type: 'presstoggle' }, this); } else { if (now - this._lastClickTime > 500) { this.emit('press', { type: 'press', originalEvent: event }, this); } else if (this.status === "close" || this.status === 'open'){ this.emit('presstoggle', { originalEvent: event, type: 'presstoggle' }, this); } this._lastClickTime = now; } }; ACore["d" /* default */].install(TOCItem); /* harmony default export */ var js_TOCItem = (TOCItem); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TOCList.js /*** * @extends AElement * @constructor */ function TOCList() { this.$searchInput = null; this.$body = Object(ACore["a" /* $ */])('.as-toc-list-body', this); this.$searching = Object(ACore["a" /* $ */])('.as-toc-list-searching', this); this.rootController = new TOCVirtualRootController(this, [], this.$body); this.searchCache = {}; this.savedState = { active: [], status: {} }; /*** * @name nodes * @type {{}[]} * @memberOf TOCList# */ } TOCList.tag = 'TOCList'.toLowerCase(); TOCList.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['pressnode', 'checkednodechange', 'pressnodequickmmenu', 'statechange'], class: 'as-toc-list', child: [ '.as-toc-list-body', '.as-toc-list-searching' ] }); }; TOCList.prototype.applySavedState = function () { var savedStatus = this.savedState.status; function visitArr(arr) { arr.forEach(function (ct) { var status = savedStatus[ct.ident]; if (status) { ct.status = status; } savedStatus[ct.ident] = ct.status; visitArr(ct.children); }); } visitArr(this.rootController.children); if (this.savedState.active) { this.savedState.active.forEach(function (ident) { var activeCt = this.findControllerByIdent(ident); if (activeCt) activeCt.active(); }.bind(this)); } }; TOCList.prototype.resetSavedState = function () { this.savedState = { active: null, status: {} }; }; TOCList.prototype.saveState = function () { var oldState = this.savedState; var savedState = { active: [], status: {} }; var changed = false; function visitArr(arr) { arr.forEach(function (ct) { savedState.status[ct.ident] = ct.status; changed = changed || savedState.status[ct.ident] !== oldState.status[ct.ident]; if (ct.nodeElt.hasClass('as-active')) { savedState.active.push(ct.ident); } visitArr(ct.children); }); } var oldActive = (oldState.active || []).slice(); oldActive.sort(); var newActive = (savedState.active || []).slice(); newActive.sort(); changed = changed || (oldActive.join('/') !== newActive.join('/')); visitArr(this.rootController.children); this.savedState = savedState; if (changed) this.notifySavedStateChange(); }; TOCList.prototype.notifySavedStateChange = function () { this.emit('statechange', { target: this, type: 'statechange' }, this); }; TOCList.prototype.loadSavedState = function (savedState) { savedState = savedState || {}; if (typeof savedState.active === 'string') savedState.active = [savedState.active]; this.savedState = { active: savedState.active || [], status: savedState.status || {} }; this.applySavedState(); }; /*** * @param {number=} n */ TOCList.prototype.openAllNodeRecursive = function (n) { this.rootController.openRecursive(n); this.saveState(); }; TOCList.prototype.closeAllNodeRecursive = function () { this.rootController.closeRecursive(); this.saveState(); }; TOCList.prototype.deactivateAllNode = function () { this.rootController.deactivateRecursive(); }; /*** * * @param ident * @returns {TOCNodeController|null} */ TOCList.prototype.activeNode = function (ident) { var nodeCt = this.findControllerByIdent(ident); var parent; if (nodeCt) { nodeCt.active(); parent = nodeCt.parent; while (parent) { if (parent.open && parent.status === 'close') parent.open(); parent = parent.parent; } setTimeout(() => { vScrollIntoView(nodeCt.nodeElt); }, 100); } return nodeCt; }; TOCList.prototype.getActivatedNodes = function () { var res = []; this.rootController.traverse(function (node) { if (node.activated) { res.push(node); } }); return res; }; /*** * * @param {string} ident * @param {TOCNodeController|TOCVirtualRootController=} rootController * @returns {TOCNodeController} */ TOCList.prototype.findControllerByIdent = function (ident, rootController) { var res = null; rootController = rootController || this.rootController; function visitArr(arr) { arr.some(function (ct) { if (ct.ident + '' === ident + '') { res = ct; return true; } visitArr(ct.children); }); } visitArr(rootController.children); return res; }; TOCList.prototype.makeNodeController = function (nodeData) { return new TOCNodeController(this, nodeData, null); }; /** * * @param query * @private * @returns {TOCVirtualRootController} */ TOCList.prototype._calcSearch = function (query) { var searchRootController = this.searchCache[query]; if (searchRootController) return searchRootController; var itemTree = this.searchCache.__itemTree__; if (!itemTree) { itemTree = this.nodes.map(function visit(node) { var item = prepareSearchForItem({ text: node.name, value: Object.assign({}, node) }); if (node.children && node.children.length > 0) { item.items = node.children.map(visit); } return item; }); this.searchCache.__itemTree__ = itemTree; } var resultItemTree = searchTreeListByText(query, itemTree); var resultNodes = resultItemTree.map(function visit2(item) { var node = Object.assign({}, item.value); delete node.children; if (item.items && item.items.length > 0) { node.children = item.items.map(visit2); } return node; }); this.searchCache[query] = new TOCVirtualRootController(this, resultNodes) return this.searchCache[query]; }; TOCList.prototype.search = function (query) { query = query || ''; query = query.trim().replace('\s(\s+)', ' '); var searchRoot = this._calcSearch(query); var activeNodeCt; if (query.length === 0) { this.removeClass('as-searching'); this.$searching.clearChild(); } else { this.addClass('as-searching'); this.$searching.clearChild(); searchRoot.openRecursive(); activeNodeCt = this.findControllerByIdent(this.savedState.active, searchRoot); if (activeNodeCt) activeNodeCt.active(); searchRoot.view = this.$searching; } }; TOCList.property = {}; TOCList.property.nodes = { /*** * @this TOCList * @param nodes */ set: function (nodes) { this.searchCache = {}; nodes = nodes || []; this.rootController = new TOCVirtualRootController(this, nodes); this.rootController.view = this.$body; this.applySavedState(); }, get: function () { return this.rootController.nodes; } }; TOCList.property.searchInput = { /*** * @this TOCList */ set: function (elt) { if (this.$searchInput) { this.$searchInput.off('stoptyping', this.eventHandler.searchTextInputModify); } this.$searchInput = elt; if (this.$searchInput) { this.$searchInput.on('stoptyping', this.eventHandler.searchTextInputModify); } }, /*** * @this TOCList */ get: function () { return this.$searchInput; } } /*** * @memberOf TOCList# * @type {{}} */ TOCList.eventHandler = {}; TOCList.eventHandler.pressNode = function (nodeController, event) { var newEvent = Object(EventEmitter["a" /* copyEvent */])(event.originalEvent || event, { type: 'pressnode', target: this, originalEvent: event.originalEvent || event, controller: nodeController, nodeData: nodeController.nodeElt.nodeData, nodeElt: nodeController.nodeElt, }); this.emit('pressnode', newEvent, this); }; TOCList.eventHandler.checkedNodeChange = function (nodeController, event) { var newEvent = { type: 'checkednodechange', target: this, originalEvent: event.originalEvent || event, controller: nodeController, nodeData: nodeController.nodeElt.nodeData, nodeElt: nodeController.nodeElt }; this.emit('checkednodechange', newEvent, this); }; TOCList.eventHandler.pressNodeQuickMenu = function (nodeController, event) { var newEvent = { type: 'pressnodequickmmenu', target: this, originalEvent: event.originalEvent || event, controller: nodeController, nodeData: nodeController.nodeElt.nodeData, nodeElt: nodeController.nodeElt }; newEvent.showMenu = function (menuProps, onSelect) { var token = js_QuickMenu.show(nodeController.nodeElt.$quickMenuBtn, menuProps, [3, 4], onSelect, false); var blurTrigger = new tool_BlurTrigger([], 'click', function () { js_QuickMenu.close(token); }, 10, 30); }; this.emit('pressnodequickmmenu', newEvent, this); }; /*** * @this TOCList */ TOCList.eventHandler.searchTextInputModify = function () { this.search(this.$searchInput.value); }; ACore["d" /* default */].install(TOCList); /*** * * @param {TOCList} listElt * @param {{}[]} nodes * @constructor */ function TOCVirtualRootController(listElt, nodes) { Object.defineProperties(this, { root: { value: this } }); this.listElt = listElt; this.level = -1; this.nodes = nodes; /*** * * @type {TOCNodeController[]} */ this.children = nodes.map(function (nodeData) { return new TOCNodeController(listElt, nodeData, this); }.bind(this)); this._view = null; /**** * @type {AElement} * @name view * @memberOf TOCVirtualRootController# */ } TOCVirtualRootController.prototype.deactivateRecursive = function () { this.children.forEach(function (ct) { }); }; TOCVirtualRootController.prototype.openRecursive = function (n) { this.children.forEach(function (ct) { ct.openRecursive(n); }); }; TOCVirtualRootController.prototype.closeRecursive = function () { this.children.forEach(function (ct) { ct.closeRecursive(); }); }; TOCVirtualRootController.prototype.getViewElements = function () { var ac = []; this.children.forEach(function (ct) { ct.getViewElements(ac); }); return ac; }; TOCVirtualRootController.prototype.indexOfChild = function (child) { for (var i = 0; i < this.children.length; ++i) { if (child === this.children[i] || this.children[i].ident === child) return i; } return -1; }; /*** * * @param {TOCNodeController} controller * @param {TOCNodeController} at * @returns {TOCVirtualRootController} */ TOCVirtualRootController.prototype.addChildBefore = function (controller, at) { var atIdx; if (at) { atIdx = this.indexOfChild(at); if (atIdx >= 0) { if (controller.parent) controller.remove(); this.children.splice(atIdx, 0, controller); controller.__parent__ = this; if (at.nodeElt.parentElement) { addElementsBefore(at.nodeElt.parentElement, controller.getViewElements(), at.nodeElt); } this.updateStatus(); } else { throw new Error("The node before which the new node is to be inserted is not a child of this node."); } } else { if (controller.parent) controller.remove(); this.children.push(controller); if (this.view) this.addChild(controller.getViewElements()); this.updateStatus(); } controller.setLevelRecursive(this.level + 1); return this; }; TOCVirtualRootController.prototype.addChild = function (controller) { this.addChildBefore(controller, null); return this; }; /*** * * @param {TOCNodeController} controller * @param at */ TOCVirtualRootController.prototype.addChildAfter = function (controller, at) { var atIdx; var lastElement; if (at) { atIdx = this.indexOfChild(at); if (atIdx === this.children.length) { if (controller.parent) controller.remove(); controller.__parent__ = this; this.children.push(controller); if (this.view) this.view.addChild(controller.getViewElements()); } else if (atIdx >= 0) { if (controller.parent) controller.remove(); controller.__parent__ = this; this.children.splice(atIdx, 0, controller); if (at.nodeElt.parentElement) { lastElement = at.getViewElements().pop(); addElementAfter(at.nodeElt.parentElement, controller.getViewElements(), lastElement); } } else { throw new Error("The node before which the new node is to be inserted is not a child of this node."); } } else { if (controller.parent) controller.remove(); controller.__parent__ = this; this.children.unshift(controller); addElementAfter(this.view, controller.getViewElements(), this.view.firstChild); } return this; }; TOCVirtualRootController.prototype.updateStatus = noop; /*** * @param {TOCNodeController} child * @returns {TOCVirtualRootController|TOCNodeController} */ TOCVirtualRootController.prototype.removeChild = function (child) { var idx = this.children.indexOf(child); if (idx >= 0) { this.children.splice(idx, 1); child.getViewElements().forEach(function (elt) { elt.remove(); }); this.updateStatus(); } return this; }; /*** * * @param {function(nodeCt:TOCNodeController):(void|boolean)} callback return true to stop */ TOCVirtualRootController.prototype.traverse = function (callback) { this.children.some(function visit(ct) { return callback(ct) || ct.children.some(visit); }); }; Object.defineProperties(TOCVirtualRootController.prototype, { firstChild: { get: function () { return this.children[0] || null; } }, lastChild: { get: function () { return this.children[this.children.length - 1] || null; } }, view: { /*** * @this TOCVirtualRootController * @param view */ set: function (view) { view = view || null; if (view === this._view) return; if (this._view) { this._view.clearChild(); this._view.rootController = null; this._view = null; } if (view) { if (view.rootController) { view.rootController.view = null; } view.rootController = this; this._view = view; this._view.addChild(this.getViewElements()); } }, get: function () { return this._view; } } }); /*** * * @param {TOCList} listElt * @param {{}} nodeData * @param {TOCNodeController|TOCVirtualRootController} parent * @constructor */ function TOCNodeController(listElt, nodeData, parent) { Object.defineProperties(this, { listElt: { value: listElt }, __parent__: { value: parent, enumerable: false, writable: true } }); this.level = parent ? parent.level + 1 : 0; /*** * @type {TOCItem} */ this.nodeElt = Object(ACore["c" /* _ */])({ tag: js_TOCItem.tag, props: { nodeData: nodeData, checked: !!nodeData.checked, name: nodeData.name, icon: nodeData.icon, level: this.level, controller: this, status: 'none', extendClasses: nodeData.extendClasses }, on: { presstoggle: this.toggle.bind(this), press: this.ev_press.bind(this), checkedchange: this.ev_checkedChange.bind(this), pressquickmenu: this.ev_pressQuickMenu.bind(this) } }); if (nodeData.hasQuickMenu === false) this.nodeElt.hasQuickMenu = false; this.nodeElt.on('presstoggle', this.listElt.saveState.bind(this.listElt)); /*** * @name children * @type {TOCNodeController[]} * @memberOf TOCNodeController# */ if (nodeData.children && nodeData.children.length > 0) { this.nodeElt.status = 'close'; this.children = nodeData.children.map(function (c) { return new TOCNodeController(listElt, c, this); }.bind(this)); } else { this.children = []; } } TOCNodeController.prototype.indexOfChild = TOCVirtualRootController.prototype.indexOfChild; TOCNodeController.prototype.traverse = TOCVirtualRootController.prototype.traverse; TOCNodeController.prototype.updateStatus = function () { if (this.children.length === 0 && this.nodeElt.status !== 'none') { this.nodeElt.status = 'none'; } else if (this.children.length > 0 && this.nodeElt.status === 'none') { this.nodeElt.status = 'close'; } }; TOCNodeController.prototype.deactivateRecursive = function () { this.nodeElt.removeClass('as-active'); this.children.forEach(function (ct) { ct.deactivateRecursive(); }); }; TOCNodeController.prototype.removeChild = TOCVirtualRootController.prototype.removeChild; TOCNodeController.prototype.remove = function () { this.parent.removeChild(this); }; /*** * * @param {TOCNodeController} controller * @param {TOCNodeController} at * @returns {TOCNodeController} */ TOCNodeController.prototype.addChildBefore = function (controller, at) { var atIdx; if (at) { atIdx = this.indexOfChild(at); if (atIdx >= 0) { if (controller.parent) controller.remove(); this.children.splice(atIdx, 0, controller); controller.__parent__ = this; if (this.status === 'open') { addElementsBefore(this.nodeElt.parentElement, controller.getViewElements(), at.nodeElt); } controller.setLevelRecursive(this.level + 1); this.updateStatus(); } else { throw new Error("The node before which the new node is to be inserted is not a child of this node."); } } else { if (controller.parent) controller.remove(); this.children.push(controller); this.updateStatus(); if (this.status === "open") { addElementsBefore(this.nodeElt.parentElement, controller.getViewElements(), at.nodeElt); } } return this; }; TOCNodeController.prototype.addChild = TOCVirtualRootController.prototype.addChild; TOCNodeController.prototype.addChildAfter = function (controller, at) { throw new Error("Not implement!"); }; TOCNodeController.prototype.toggle = function () { if (this.status === 'close') this.open(); else if (this.status === 'open') this.close(); }; TOCNodeController.prototype.open = function () { if (this.status !== 'close') return; this.nodeElt.status = 'open'; var pE = this.nodeElt.parentElement; if (!pE) return; var veArr = this.getViewElements(); veArr.shift(); var at = pE.findChildAfter(this.nodeElt); if (at) { while (veArr.length > 0) { pE.addChildBefore(veArr.shift(), at); } } else { pE.addChild(veArr); } }; TOCNodeController.prototype.close = function () { if (this.status !== 'open') return; var veArr = this.getViewElements(); veArr.shift(); while (veArr.length > 0) { veArr.pop().remove() } this.nodeElt.status = 'close'; }; TOCNodeController.prototype.getViewElements = function (ac) { if (ac === undefined) ac = []; ac.push(this.nodeElt); if (this.status === 'open' && this.children.length > 0) { this.children.forEach(function (ct) { ct.getViewElements(ac); }); } return ac; }; TOCNodeController.prototype.setLevelRecursive = function (value) { this.level = value; this.nodeElt.level = value; this.children.forEach(function (ct) { ct.setLevelRecursive(value + 1); }); }; /** * * @param {number=} level */ TOCNodeController.prototype.openRecursive = function (level) { if ((typeof level === "number") && this.level >= level) return; if (this.status === 'close') { this.open(); } this.children.forEach(function (ct) { ct.openRecursive(level); }); }; TOCNodeController.prototype.ev_press = function (event) { this.listElt.eventHandler.pressNode(this, event); }; TOCNodeController.prototype.ev_checkedChange = function (event) { this.nodeElt.nodeData.checked = this.nodeElt.checked; this.listElt.eventHandler.checkedNodeChange(this, event); }; TOCNodeController.prototype.ev_pressQuickMenu = function (event) { this.listElt.eventHandler.pressNodeQuickMenu(this, event); }; TOCNodeController.prototype.ev_renameFinish = function (event) { }; TOCNodeController.prototype.closeRecursive = function () { if (this.status === 'open') { this.close(); } this.children.forEach(function (ct) { ct.closeRecursive(); }); }; TOCNodeController.prototype.rename = function () { }; /*** * * @param {boolean=true} isActive default: true * @param {boolean=false} append default: false */ TOCNodeController.prototype.active = function (isActive, append) { var self = this; if (arguments.length === 0) isActive = true; append = !!append; var idx = this.listElt.savedState.active ? this.listElt.savedState.active.indexOf(this.ident) : -1; if (isActive) { this.root.traverse(function (ct) { if (ct === self) { ct.nodeElt.addClass('as-active'); } else if (!append) ct.nodeElt.removeClass('as-active'); }); if (idx < 0) { this.listElt.savedState.active = this.listElt.savedState.active || []; if (append) { this.listElt.savedState.active.push(this.ident); } else { this.listElt.savedState.active = [this.ident]; } this.listElt.notifySavedStateChange(); } } else { if (idx >= 0) { if (append) { this.listElt.savedState.active.splice(idx, 1); this.nodeElt.removeClass('as-active'); } else { this.listElt.savedState.active = []; this.root.traverse(function (ct) { ct.nodeElt.removeClass('as-active'); }); } } } }; Object.defineProperties(TOCNodeController.prototype, { /*** * @memberOf TOCNodeController# * @name status * @type {"open"|"close"|"none"} */ status: { get: function () { return this.nodeElt.status; }, set: function (value) { if (value === 'open' && this.nodeElt.status === 'close') this.open(); else if (value === 'close' && this.nodeElt.status === 'open') this.close(); } }, root: { get: function () { return this.parent ? this.parent.root : this; } }, checked: { get: function () { return !!this.nodeElt.nodeData.checked; }, set: function (value) { this.nodeElt.checked = !!value; this.nodeElt.nodeData.checked = !!value; } }, name: { set: function (value) { value = value || ''; this.nodeElt.name = value; this.nodeElt.nodeData.name = value; }, get: function () { return this.nodeElt.nodeData.name; } }, ident: { get: function () { return this.nodeElt.nodeData.ident; }, set: function (value) { this.nodeElt.nodeData.ident = value; } }, nodeData: { get: function () { return this.nodeElt.nodeData; }, set: function (value) { this.nodeElt.nodeData = value; } }, parent: { get: function () { return this.__parent__; } }, firstChild: { get: function () { return this.children[0] || null; } }, lastChild: { get: function () { return this.children[this.children.length - 1] || null; } }, activated: { get: function () { return this.nodeElt.hasClass('as-active'); } } }); /* harmony default export */ var js_TOCList = (TOCList); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/ckplaceholder.css var ckplaceholder = __webpack_require__(281); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/ckcontentstyle.css.tpl /* harmony default export */ var ckcontentstyle_css = ("\n.as-ck-alert {\n padding: .75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: .188rem;\n}\n\n.as-ck-alert.as-variant-notice {\n color: #7b5700;\n background-color: #fbedcc;\n border-color: #fae6b8;\n}\n\n.as-ck-alert.as-variant-warning {\n color: #852d19;\n background-color: #ffddd6;\n border-color: #ffd0c5;\n}\n\n.as-ck-alert.as-variant-info {\n color: #352c64;\n background-color: #e0ddf2;\n border-color: #d4cfed;\n}\n\n.as-ck-alert.as-variant-success {\n color: #2a601f;\n background-color: #dcf1d8;\n border-color: #ceebc8;\n}\n\n\n.cke_contents_ltr ul {\n list-style: none;\n}\n\n.cke_contents_ltr ul li {\n position: relative;\n}\n\n.cke_contents_ltr ul li::before {\n color: #007bff;\n content: '●';\n position: absolute;\n left: -1.2em;\n top: -0.1em;\n display: inline-block;\n}\n\n.cke_contents_ltr thead {\n background-color: #d6d6d6;\n\n}\n\n.cke_contents_ltr table {\n border-collapse: collapse;\n}\n\n.cke_contents_ltr table[align=\"center\"] {\n margin-left: auto;\n margin-right: auto;\n}\n\n.cke_contents_ltr table[align=\"right\"] {\n margin-left: auto;\n}\n\n\n.cke_contents_ltr thead td {\n padding: 10px;\n border: 1px solid #efefef;\n font-weight: bold;\n}\n\n.cke_contents_ltr thead td:last-child {\n border-right-color: #dddddd;\n}\n\n\n.cke_contents_ltr thead td:first-child {\n border-left-color: #dddddd;\n}\n\n\n.cke_contents_ltr tbody td {\n\n}\n\n.cke_contents_ltr tbody tr:nth-child(odd) {\n background-color: rgb(245, 245, 245);\n}\n\n.cke_contents_ltr tbody tr:nth-child(even) {\n background-color: white;\n}\n\n.cke_contents_ltr tbody td {\n padding: 5px 10px;\n border: 1px solid #ddd;\n}\n\n\n.cke_button_icon.cke_button__insert_expression_icon {\n background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik01LDNIN1Y1SDVWMTBBMiwyIDAgMCwxIDMsMTJBMiwyIDAgMCwxIDUsMTRWMTlIN1YyMUg1QzMuOTMsMjAuNzMgMywyMC4xIDMsMTlWMTVBMiwyIDAgMCwwIDEsMTNIMFYxMUgxQTIsMiAwIDAsMCAzLDlWNUEyLDIgMCAwLDEgNSwzTTE5LDNBMiwyIDAgMCwxIDIxLDVWOUEyLDIgMCAwLDAgMjMsMTFIMjRWMTNIMjNBMiwyIDAgMCwwIDIxLDE1VjE5QTIsMiAwIDAsMSAxOSwyMUgxN1YxOUgxOVYxNEEyLDIgMCAwLDEgMjEsMTJBMiwyIDAgMCwxIDE5LDEwVjVIMTdWM0gxOU0xMiwxNUExLDEgMCAwLDEgMTMsMTZBMSwxIDAgMCwxIDEyLDE3QTEsMSAwIDAsMSAxMSwxNkExLDEgMCAwLDEgMTIsMTVNOCwxNUExLDEgMCAwLDEgOSwxNkExLDEgMCAwLDEgOCwxN0ExLDEgMCAwLDEgNywxNkExLDEgMCAwLDEgOCwxNU0xNiwxNUExLDEgMCAwLDEgMTcsMTZBMSwxIDAgMCwxIDE2LDE3QTEsMSAwIDAsMSAxNSwxNkExLDEgMCAwLDEgMTYsMTVaIiAvPgo8L3N2Zz4=');\n background-position: 0 0px;\n background-size: 16px;\n}\n\n.cke_button_icon.cke_button__insert_variable_icon {\n background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik0yMC40MSwzQzIxLjgsNS43MSAyMi4zNSw4Ljg0IDIyLDEyQzIxLjgsMTUuMTYgMjAuNywxOC4yOSAxOC44MywyMUwxNy4zLDIwQzE4LjkxLDE3LjU3IDE5Ljg1LDE0LjggMjAsMTJDMjAuMzQsOS4yIDE5Ljg5LDYuNDMgMTguNyw0TDIwLjQxLDNNNS4xNywzTDYuNyw0QzUuMDksNi40MyA0LjE1LDkuMiA0LDEyQzMuNjYsMTQuOCA0LjEyLDE3LjU3IDUuMywyMEwzLjYxLDIxQzIuMjEsMTguMjkgMS42NSwxNS4xNyAyLDEyQzIuMiw4Ljg0IDMuMyw1LjcxIDUuMTcsM00xMi4wOCwxMC42OEwxNC40LDcuNDVIMTYuOTNMMTMuMTUsMTIuNDVMMTUuMzUsMTcuMzdIMTMuMDlMMTEuNzEsMTRMOS4yOCwxNy4zM0g2Ljc2TDEwLjY2LDEyLjIxTDguNTMsNy40NUgxMC44TDEyLjA4LDEwLjY4WiIgLz4KPC9zdmc+');\n background-position: 0 0px;\n background-size: 16px;\n}\n\n.cke_button_icon.cke_button__insert_dynamic_link_icon {\n background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik0zIDFDMS44OSAxIDEgMS44OSAxIDNWMTRDMSAxNS4xMSAxLjg5IDE2IDMgMTZIMTRDMTUuMTEgMTYgMTYgMTUuMTEgMTYgMTRWMTFIMTRWMTRIM1YzSDE0VjVIMTZWM0MxNiAxLjg5IDE1LjExIDEgMTQgMU05IDdDNy44OSA3IDcgNy44OSA3IDlWMTJIOVY5SDIwVjIwSDlWMThIN1YyMEM3IDIxLjExIDcuODkgMjIgOSAyMkgyMEMyMS4xMSAyMiAyMiAyMS4xMSAyMiAyMFY5QzIyIDcuODkgMjEuMTEgNyAyMCA3SDkiIC8+Cjwvc3ZnPg==');\n background-position: 0 0px;\n background-size: 16px;\n}\n\n\n.as-ck-widget-expression {\n color: #1da1ff;\n}\n\n.as-ck-widget-variable {\n color: #144f25;\n}\n\n\n.cke_button__image_mgn_dialog_icon {\n background: url($basePath/plugins/icons.png) no-repeat 0 -960px !important;\n}\n\n\nbody .cke_contents_ltr h1,\nbody .cke_contents_ltr h2,\nbody .cke_contents_ltr h3,\nbody .cke_contents_ltr h4,\nbody .cke_contents_ltr h5,\nbody .cke_contents_ltr h6 {\n font-weight: normal;\n line-height: 1.2;\n}\n\nbody .cke_contents_ltr {\n line-height: 1.6;\n font-size: inherit;\n font-family: sans-serif, Arial, Verdana, \"Trebuchet MS\", \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n background-color: #fff;\n word-wrap: break-word;\n text-align: left;\n}\n\n.cke_contents_ltr blockquote {\n font-style: italic;\n font-family: inherit;\n border-style: solid;\n border-color: #ccc;\n border-width: 0;\n padding-left: 20px;\n padding-right: 8px;\n border-left-width: 5px;\n}\n\nbody .cke_contents_ltr a {\n color: #0782C1;\n}\n\nbody .cke_contents_ltr ol,\nbody .cke_contents_ltr ul,\nbody .cke_contents_ltr dl {\n /* IE7: reset rtl list margin. (#7334) */\n *margin-right: 0px;\n /* Preserved spaces for list items with text direction different than the list. (#6249,#8049)*/\n padding: 0 40px;\n}\n\n\nbody.cke_contents_ltr { /*editor*/\n font-size: 14px;\n}\n\n\nbody .cke_contents_ltr hr\n{\n border: 0px;\n border-top: 1px solid #ccc;\n}\n\nbody .cke_contents_ltr img.right\n{\n border: 1px solid #ccc;\n float: right;\n margin-left: 15px;\n padding: 5px;\n}\n\nbody .cke_contents_ltr img.left\n{\n border: 1px solid #ccc;\n float: left;\n margin-right: 15px;\n padding: 5px;\n}\n\nbody .cke_contents_ltr pre\n{\n white-space: pre-wrap; /* CSS 2.1 */\n word-wrap: break-word; /* IE7 */\n -moz-tab-size: 4;\n tab-size: 4;\n}\n\nbody .cke_contents_ltr .marker\n{\n background-color: Yellow;\n}\n\nbody .cke_contents_ltr span[lang]\n{\n font-style: italic;\n}\n\nbody .cke_contents_ltr figure\n{\n text-align: center;\n outline: solid 1px #ccc;\n background: rgba(0,0,0,0.05);\n padding: 10px;\n margin: 10px 20px;\n display: inline-block;\n}\n\nbody .cke_contents_ltr figure > figcaption\n{\n text-align: center;\n display: block; /* For IE8 */\n}\n\nbody .cke_contents_ltr a > img {\n padding: 1px;\n margin: 1px;\n border: none;\n outline: 1px solid #0782C1;\n}\n\n/* Widget Styles */\nbody .cke_contents_ltr .code-featured\n{\n border: 5px solid red;\n}\n\nbody .cke_contents_ltr .math-featured\n{\n padding: 20px;\n box-shadow: 0 0 2px rgba(200, 0, 0, 1);\n background-color: rgba(255, 0, 0, 0.05);\n margin: 10px;\n}\n\nbody .cke_contents_ltr .image-clean\n{\n border: 0;\n background: none;\n padding: 0;\n}\n\nbody .cke_contents_ltr .image-clean > figcaption\n{\n font-size: .9em;\n text-align: right;\n}\n\nbody .cke_contents_ltr .image-grayscale\n{\n background-color: white;\n color: #666;\n}\n\nbody .cke_contents_ltr .image-grayscale img, img.image-grayscale\n{\n filter: grayscale(100%);\n}\n\nbody .cke_contents_ltr .embed-240p\n{\n max-width: 426px;\n max-height: 240px;\n margin:0 auto;\n}\n\nbody .cke_contents_ltr .embed-360p\n{\n max-width: 640px;\n max-height: 360px;\n margin:0 auto;\n}\n\nbody .cke_contents_ltr .embed-480p\n{\n max-width: 854px;\n max-height: 480px;\n margin:0 auto;\n}\n\nbody .cke_contents_ltr .embed-720p\n{\n max-width: 1280px;\n max-height: 720px;\n margin:0 auto;\n}\n\nbody .cke_contents_ltr .embed-1080p\n{\n max-width: 1920px;\n max-height: 1080px;\n margin:0 auto;\n}\n"); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/ExpressionExtension.js var ExpressionExtension_name = 'expression'; var ExpressionExtension_command = 'insert_expression'; function init(editor) { editor.widgets.add(ExpressionExtension_name, { button: 'Create Expression', template: '<span class="as-ck-widget-expression">{{ expression }}</span>', allowedContent: 'span(!as-ck-widget-expression)', requiredContent: 'span(as-ck-widget-expression)', upcast: function (element) { return element.name === 'span' && element.hasClass('as-ck-widget-expression'); } }); editor.ui.addButton(ExpressionExtension_command, { label: 'Insert expression', command: ExpressionExtension_command, }); editor.addCommand(ExpressionExtension_command, { exec: function (editor) { if (editor.placeHolderElt) { editor.placeHolderElt.emit('command', { command: ExpressionExtension_command, target: editor, type: 'command' }); } } }); } var parserDiv = Object(ACore["c" /* _ */])('div'); function explicit(data, placeHolderElt) { parserDiv.innerHTML = data; Object(ACore["b" /* $$ */])('.as-ck-widget-expression', parserDiv).forEach(function (elt) { var text = elt.innerHTML; text.replace(/{/g, '{').replace(/}/g, '}'); elt.parentElement.replaceChild(Object(ACore["c" /* _ */])({ text: text }), elt) }); return parserDiv.innerHTML; } function implicit(data, placeHolderElt) { var template = JSMaker_TemplateString.parse(data); return template.parts.slice().map(function (part) { if (part.type === 1) { return '<span class="as-ck-widget-expression">{{ ' + part.data.trim() + ' }}</span>' } else return part.data; }).join(''); } /* harmony default export */ var ExpressionExtension = ({ name: ExpressionExtension_name, command: ExpressionExtension_command, implicit: implicit, explicit: explicit, plugin: { requires: 'widget', init: init }, extendMethods: { /*** * @this CKPlaceholder * @memberOf CKPlaceholder# * @param expression * */ insertExpression: function (expression) { this.editor.insertHtml('<span class="as-ck-widget-expression">{{ ' + expression.trim() + ' }}</span>') }, getSelectedExpression: function () { var sel = this.editor.getSelection(); if (!sel) return null; var elt = sel.getSelectedElement(); if (!elt) return null; if (!elt.hasClass('cke_widget_wrapper_as-ck-widget-expression')) return null; var exp = elt.getText(); exp = exp.replace(/{|}|\{|\}/g, '').trim(); return exp; } } }); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/SimpleTextExtension.js var SimpleTextExtension_name = 'simple_text'; var SimpleTextExtension_parserDiv = Object(ACore["c" /* _ */])('div'); function SimpleTextExtension_explicit(data, placeHolderElt) { SimpleTextExtension_parserDiv.innerHTML = data.replace(/ /g, ' '); return SimpleTextExtension_parserDiv.innerText; } function SimpleTextExtension_implicit(data, placeHolderElt) { return data //.replace(/</g, '<').replace(/</g, '>').replace(/"/g, '"').replace(/&/g, '&') .replace(/[\r\n]/g, ''); } /* harmony default export */ var SimpleTextExtension = ({ name: SimpleTextExtension_name, implicit: SimpleTextExtension_implicit, explicit: SimpleTextExtension_explicit, }); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/VariableExtension.js var VariableExtension_name = 'variable'; var VariableExtension_command = 'insert_variable'; function VariableExtension_init(editor) { editor.widgets.add(VariableExtension_name, { button: 'Create Variable', template: '<span class="as-ck-widget-variable" title="variable">variable</span>', allowedContent: 'span(!as-ck-widget-variable)', requiredContent: 'span(as-ck-widget-variable)', upcast: function (element) { return element.name === 'span' && element.hasClass('as-ck-widget-variable'); } }); editor.ui.addButton(VariableExtension_command, { label: 'Insert Variable', command: VariableExtension_command, }); editor.addCommand(VariableExtension_command, { exec: function (editor) { if (editor.placeHolderElt) { editor.placeHolderElt.emit('command', { command: VariableExtension_command, target: editor, type: 'command' }); } } }); } var VariableExtension_parserDiv = Object(ACore["c" /* _ */])('div'); function VariableExtension_explicit(data, placeHolderElt) { VariableExtension_parserDiv.innerHTML = data; Object(ACore["b" /* $$ */])('.as-ck-widget-variable', VariableExtension_parserDiv).forEach(function (elt) { var text = elt.innerHTML; elt.parentElement.replaceChild(Object(ACore["c" /* _ */])({ text: text }), elt) }); return VariableExtension_parserDiv.innerHTML; } var tokenRgx = /("([^\\"]|(\\.))*")|([a-zA-Z_$A-Z]([a-zA-Z_$A-Z0-9]*))/g; function VariableExtension_implicit(data, placeHolderElt) { data = (data || '') + ''; data = data.replace(tokenRgx, function (full, isString, u1, u2, isIdent) { if (isIdent && placeHolderElt.variables && placeHolderElt.variables[isIdent]) { return placeHolderElt.makeVariableHtml(isIdent); } else return full; }); return data; } /* harmony default export */ var VariableExtension = ({ name: VariableExtension_name, command: VariableExtension_command, implicit: VariableExtension_implicit, explicit: VariableExtension_explicit, plugin: { requires: 'widget', init: VariableExtension_init }, extendMethods: { makeVariableHtml: function (variable, text) { variable = variable.trim(); if (this.variables && this.variables[variable]) { text = this.variables[variable].text; } text = text || variable; return '<span class="as-ck-widget-variable" title="' + text + '">' + variable.trim() + '</span>'; }, /*** * @this CKPlaceholder * @memberOf CKPlaceholder# * @param variable * */ insertVariable: function (variable, text) { this.editor.insertHtml(this.makeVariableHtml(variable, text)); }, getSelectedVariable: function () { var sel = this.editor.getSelection(); if (!sel) return null; var elt = sel.getSelectedElement(); if (!elt) return null; if (!elt.hasClass('cke_widget_wrapper_as-ck-widget-variable')) return null; var exp = elt.getText(); exp = exp.trim(); return exp; } } }); /*** * @name variables * @type {{}} * @memberOf CKPlaceholder# */ // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/DynamicLinkExtension.js var DynamicLinkExtension_name = 'dynamic_link'; var DynamicLinkExtension_command = 'insert_dynamic_link'; function DynamicLinkExtension_init(editor) { editor.widgets.add(DynamicLinkExtension_name, { button: 'Create Dynamic Link', template: '<a class="as-ck-widget-dynamic-link" data-link-id="1234" href="https://absol.cf">absol.cf</a>', allowedContent: 'a(!as-ck-widget-dynamic-link)', requiredContent: 'a(as-ck-widget-dynamic-link)', upcast: function (element) { return element.name === 'a' && element.hasClass('as-ck-widget-dynamic-link'); } }); editor.ui.addButton(DynamicLinkExtension_command, { label: 'Insert Dynamic Link', command: DynamicLinkExtension_command, }); editor.addCommand(DynamicLinkExtension_command, { exec: function (editor) { if (editor.placeHolderElt) { editor.placeHolderElt.emit('command', { command: DynamicLinkExtension_command, target: editor, type: 'command' }); } } }); } var DynamicLinkExtension_parserDiv = Object(ACore["c" /* _ */])('div'); function DynamicLinkExtension_explicit(data, placeHolderElt) { DynamicLinkExtension_parserDiv.innerHTML = data; Object(ACore["b" /* $$ */])('.as-ck-widget-dynamic-link', DynamicLinkExtension_parserDiv).forEach(function (elt) { }); return DynamicLinkExtension_parserDiv.innerHTML; } function DynamicLinkExtension_implicit(data, placeHolderElt) { DynamicLinkExtension_parserDiv.innerHTML = data; Object(ACore["b" /* $$ */])('.as-ck-widget-dynamic-link', DynamicLinkExtension_parserDiv).forEach(function (elt) { var id = elt.getAttribute('data-link-id'); var info = placeHolderElt.dynamicLinks && placeHolderElt.dynamicLinks[id]; if (info){ elt.setAttribute('href', info.href); elt.innerHTML = info.text || info.href; } }); return DynamicLinkExtension_parserDiv.innerHTML; } /* harmony default export */ var DynamicLinkExtension = ({ name: DynamicLinkExtension_name, command: DynamicLinkExtension_command, implicit: DynamicLinkExtension_implicit, explicit: DynamicLinkExtension_explicit, plugin: { requires: 'widget', init: DynamicLinkExtension_init }, extendMethods: { /*** * @this CKPlaceholder * @memberOf CKPlaceholder# * @param {string} id * @param {string=} href * @param {string=} text * */ insertDynamicLink: function (id, href, text) { var info = (this.dynamicLinks && this.dynamicLinks[id]) || {href:'.', text: 'undefined'}; if (!href){ href = info.href; } if (!text){ text = info.text; } this.editor.insertHtml('<a class="as-ck-widget-dynamic-link" data-link-id="'+id+'" href="'+href+'">' + text + '</a>') }, getSelectedDynamicLink: function () { var sel = this.editor.getSelection(); if (!sel) return null; var elt = sel.getSelectedElement(); if (!elt) return null; if (!elt.hasClass('cke_widget_wrapper_as-ck-widget-dynamic-link')) return null; return (elt.$.firstChild && elt.$.firstChild.getAttribute('data-link-id')) || null; } } }); /*** * @name dynamicLinks * @type {{}} * @memberOf CKPlaceholder# */ // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/ImageFileExtension.js var ImageFileExtension_name = 'image_mgn'; var ImageFileExtension_command = 'image_mgn_dialog'; function ImageFileExtension_init(editor) { editor.ui.addButton(ImageFileExtension_command, { label: 'Insert Image', command: ImageFileExtension_command, }); editor.addCommand(ImageFileExtension_command, { exec: function (editor) { if (window.contentModule && window.contentModule.chooseFile) { window.contentModule.chooseFile({ type: "image_file" }).then(function (result) { if (result instanceof Array) result = result[0]; if (result) { editor.insertHtml('<img alt="'+(result.title|| result.name)+'" src="'+result.url+'" style="max-width: 100%; border-width: 1px; border-style: solid;"/>') } }.bind(this)); } } }); } function ImageFileExtension_explicit(data, placeHolderElt) { return data; } var ImageFileExtension_tokenRgx = /("([^\\"]|(\\.))*")|([a-zA-Z_$A-Z]([a-zA-Z_$A-Z0-9]*))/g; function ImageFileExtension_implicit(data, placeHolderElt) { return data; } /* harmony default export */ var ImageFileExtension = ({ name: ImageFileExtension_name, command: ImageFileExtension_command, // implicit: implicit, // explicit: explicit, plugin: { init: ImageFileExtension_init } }); /*** * @name variables * @type {{}} * @memberOf CKPlaceholder# */ // EXTERNAL MODULE: ./node_modules/absol-acomp/css/videourldialog.css var videourldialog = __webpack_require__(283); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/videourldialog/videoUtils.js var videoUrlRules = [ [ 'youtube', /^https:\/\/www.youtube.com\//, /[^a-zAZ]v=([^&]+)/, o => 'https://www.youtube.com/embed/' + o.videoId ], [ 'youtube', /^https:\/\/www.youtube.com\/embed\//, /^https:\/\/www.youtube.com\/embed\/([^&\/]+)/, o => o.url, o => 'https://www.youtube.com/watch?v=' + o.videoId ], [ 'vimeo', /^https:\/\/vimeo.com\//, /vimeo.com\/([0-9A-Za-z_]+)/, o => 'https://player.vimeo.com/video/' + o.videoId ], [ 'dailymotion', /^https:\/\/www.dailymotion.com\/video\//, /dailymotion\.com\/video\/([0-9A-Za-z_]+)/, o => 'https://www.dailymotion.com/embed/video/' + o.videoId ], [ 'facebook', /^https:\/\/www.facebook.com\/watch/, /[^a-zAZ]v=([^&]+)/, o => 'https://www.facebook.com/plugins/video.php?height=315&width=560&show_text=false&t=0&href=' + encodeURIComponent(o.url), o => o.embedUrl ], /* INVAID VIDEO ID */ [ 'youtube', /^https:\/\/www.youtube.com(\/|$)/, 'INVALID_URL' ], [ 'vimeo', /^https:\/\/vimeo.com(\/|$)/, /vimeo.com\/([0-9A-Za-z_]+)/, 'INVALID_URL' ], [ 'dailymotion', /^https:\/\/www.dailymotion.com(\/|$)/, null ], [ 'facebook', /^https:\/\/www.facebook.com/, 'INVALID_URL' ], /********************/ [ '*', /./, /\/([^\/]+)$/, o => o.url ] ]; function parseVideoUrl(url) { url = (url || "").trim(); var res = { url: url }; videoUrlRules.some((rule) => { var matched = url.match(rule[1]); if (!matched) return false; res.hostType = rule[0]; if (rule[2] instanceof RegExp) { matched = url.match(rule[2]); if (!matched) return false; res.videoId = matched[1]; } else if (rule[2] === 'INVALID_URL') { res.videoId = "INVALID_URL"; } if (res.videoId !== 'INVALID_URL') { res.embedUrl = rule[3](res); } if (typeof rule[4] === "function") { res.originalUrl = rule[4](res); } else { res.originalUrl = res.url; } return true; }); return res; } var embedVideoSizeCache = {}; var metaRules = [ ['width', 'og:video:width', /content\s*=\s*"([0-9]+)/, 'number'], ['height', 'og:video:height', /content\s*=\s*"([0-9]+)/, 'number'], ['title', 'og:title', /content\s*=\s*"([^"]+)/, s => s.replace(/\s*-\s*Video Dailymotion$/, '')], ['image', 'og:image', /content\s*=\s*"([^"]+)/], ['width', /^video\s/, /width\s*=\s*"([0-9]+)/, 'number', true], ['height', /^video\s/, /height\s*=\s*"([0-9]+)/, 'number', true], ['image', /^img/, /src\s*=\s*"([^"]+)/, x => x.replace(/&/g, '&')], ['title', "a href=\"https://www.facebook.com/watch", />([^<]+)/], ] function getEmbedVideoInfo(url, fullPage) { // fullPage = false; var xUrl = fullPage ? 'https://absol.cf/getpage.php?url=' : 'https://absol.cf/getpagemeta.php?url='; embedVideoSizeCache[url] = embedVideoSizeCache[url] || fetch(xUrl + encodeURIComponent(url)).then(res => res.text()) .then(metaText => { if (metaText === 'DOWNLOAD_ERROR') return { error: metaText }; var lines = metaText.replace(/\n|(>\s*<)/g, '__spliter__').split('__spliter__'); var res = {}; lines.forEach(line => { metaRules.some(rule => { var key = rule[0]; if (key in res) return false; var matched; if (rule[1] instanceof RegExp) { matched = line.match(rule[1]); if (!matched) return false; } else if (typeof rule[1] === "string") { if (line.indexOf(rule[1]) < 0) return false; } matched = line.match(rule[2]); if (!matched) return false; var value = matched[1]; if (rule[3] === 'number') { value = parseFloat(value); if (isNaN(value)) return false; } else if (typeof rule[3] === "function") { value = rule[3](value); } res[key] = value; if (rule[4]) return false; return true; }); }); return res; }); return embedVideoSizeCache[url]; } var videoFileHeaderInfoCache = {}; function getVideoFileHeader(url) { videoFileHeaderInfoCache[url] = videoFileHeaderInfoCache[url] || new Promise(resolve => { var xhr = new XMLHttpRequest(); xhr.open('HEAD', url, true); xhr.onreadystatechange = function () { if (this.readyState === 4) { if (this.status === 200) { var res = { type: xhr.getResponseHeader('Content-Type') }; var title; var header = xhr.getAllResponseHeaders(); if (header && (header.indexOf('inline') !== -1 || header.indexOf('attachment') !== -1)) { var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/; var matches = filenameRegex.exec(header); if (matches != null && matches[1]) { title = matches[1].replace(/['"]/g, ''); } } else { title = url.split('/').filter(x => !!x).pop() || ''; title = title.split('?').shift(); title = decodeURIComponent(title); } if (title) res.title = title; resolve(res); } else { resolve({ error: "STATUS_" + this.status }) } } }; xhr.send(); }); return videoFileHeaderInfoCache[url]; } function getVideoPreview(url) { return new Promise((resolve, reject) => { var renderDiv = Object(ACore["c" /* _ */])({ style: { position: 'fixed', left: 0, top: 0, overflow: 'hidden', 'z-index': -1000, pointerEvents: 'none', visibility: 'hidden' } }).addTo(document.body); var videoElt = Object(ACore["c" /* _ */])({ tag: 'video', attr: { crossorigin: "anonymous", crossOrigin: "anonymous", preload: 'metadata', src: url }, on: { loadeddata: function () { clearTimeout(timeout); var scale = Math.min(200, videoElt.videoWidth, videoElt.videoHeight) / videoElt.videoWidth; var cWidth = Math.ceil(videoElt.videoWidth * scale); var cHeight = Math.ceil(videoElt.videoHeight * scale); var canvas = Object(ACore["c" /* _ */])({ tag: 'canvas', attr: { width: cWidth + 'px', height: cHeight + 'px' } }).addTo(renderDiv); var ctx = canvas.getContext('2d'); ctx.drawImage(videoElt, 0, 0, cWidth, cHeight); var image = canvas.toDataURL('image/jpeg', 0.1) renderDiv.remove(); resolve({ width: videoElt.videoWidth, height: videoElt.videoHeight, image: image }); }, error: function () { clearTimeout(timeout); renderDiv.remove(); reject(); } } }); renderDiv.addChild(videoElt); videoElt.currentTime = 0.1; var timeout = setTimeout(() => { renderDiv.remove(); reject(); }, 5000); }); } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/videourldialog/VideoUrlDialog.js /*** * @extends Fragment * @constructor */ function VideoUrlDialog() { AppPattern_Fragment.call(this); this.task = null; this.pendingResult = null; Object.keys(VideoUrlDialog.prototype).filter(key => key.startsWith('ev_')).forEach(key => { this[key] = this[key].bind(this); }); } OOP["a" /* default */].mixClass(VideoUrlDialog, AppPattern_Fragment); VideoUrlDialog.prototype.cache = {}; VideoUrlDialog.prototype.createView = function () { this.$view = Object(ACore["c" /* _ */])({ tag: js_Modal.tag, class: 'as-video-url-dialog-modal', child: { tag: js_MessageDialog.tag, class: 'as-video-url-dialog', props: { dialogTitle: 'Video', dialogActions: [ { text: 'OK', name: 'ok' }, { text: 'Cancel', name: 'cancel' } ] }, child: [ { class: 'as-video-url-dialog-row', child: [ { tag: 'label', child: { text: 'URL*' } }, { tag: 'input', attr: { type: 'text' }, class: ['as-video-url-dialog-url', 'as-text-input'], } ] }, { class: 'as-video-url-dialog-row', child: [ { tag: 'label', child: { text: 'Video Info' } }, { tag: 'span', class: ['as-video-url-dialog-video-info'], } ] }, { class: 'as-video-url-dialog-row', child: [ { tag: 'label', child: { text: 'Display Size' } }, { tag: 'input', class: ['as-text-input', 'as-video-url-dialog-width'], attr: { type: 'number', min: '4' } }, { tag: 'span', child: { text: ' x ' } }, { tag: 'input', class: ['as-text-input', 'as-video-url-dialog-height'], attr: { type: 'number', min: '3' } }, { tag: 'checkbox', style: { marginLeft: '1em' }, props: { text: 'keep ratio' } } ] }, { class: 'as-video-url-dialog-row', child: [ { tag: 'label', child: { text: 'Preview' } }, { tag: 'img', class: 'as-video-url-dialog-video-image' }] } ] } }); var keyTimeout = -1; this.$urlInput = Object(ACore["a" /* $ */])('.as-video-url-dialog-url', this.$view) .on('paste', (event) => { setTimeout(this.ev_urlChange.bind(this, event), 100); }) .on('change', this.ev_urlChange) .on('keyup', (event) => { if (keyTimeout > 0) { clearTimeout(keyTimeout); } keyTimeout = setTimeout(() => { keyTimeout = -1; this.ev_urlChange(event); }, 300); }); this.$dialog = Object(ACore["a" /* $ */])('.as-video-url-dialog', this.$view) .on('action', this.ev_action); this.$info = Object(ACore["a" /* $ */])('.as-video-url-dialog-video-info', this.$view); this.$image = Object(ACore["a" /* $ */])('.as-video-url-dialog-video-image', this.$view); this.$width = Object(ACore["a" /* $ */])('.as-video-url-dialog-width', this.$view) .on('change', this.ev_widthChange); this.$height = Object(ACore["a" /* $ */])('.as-video-url-dialog-height', this.$view) .on('change', this.ev_heightChange); this.$ratio = Object(ACore["a" /* $ */])('checkbox', this.$view) .on('change', this.ev_widthChange); this.$actionBtns = Object(ACore["b" /* $$ */])('.as-message-dialog-footer button', this.$view); this.$okBtn = this.$actionBtns[0]; }; VideoUrlDialog.prototype.onStart = function () { if (this.$view) { this.$urlInput.value = ''; this.$width.value = ''; this.$height.value = ''; this.$info.innerHTML = ''; this.$image.attr('src', undefined); this.$okBtn.disabled = true; } this._prevUrl = null; }; VideoUrlDialog.prototype.onResume = function () { document.body.appendChild(this.getView()); /*var testcase = [ 'https://www.facebook.com/watch?v=794088524953444', 'https://www.youtube.com/watch?v=_YzngEllRgM&list=RDGMEMQ1dJ7wXfLlqCjwV0xfSNbAVMX8mhF6HgzVA&index=14', 'https://vimeo.com/735513454', 'https://www.dailymotion.com/video/x8d2trt', 'https://www.youtube.com/embed/AoN__ZtGenc', 'https://www.youtube.com', 'https://absol.cf/share/10h.mp4(1).mp4', 'https://absol.cf/share', 'https://www.facebook.com/watch?v=386823333524397' ] this.$urlInput.value = testcase[0]; this.ev_urlChange();*/ }; VideoUrlDialog.prototype.onPause = function () { this.getView().remove(); }; VideoUrlDialog.prototype.resolveCurrentTask = function (result) { if (this.task) { this.task.resolve(result || this.pendingResult); this.task = null; } }; VideoUrlDialog.prototype.cancelCurrentTask = function () { if (this.task) { this.task.cancel(); this.task = null; } }; VideoUrlDialog.prototype.assignTask = function (task) { this.cancelCurrentTask(); this._prevUrl = null; this.task = task; if (task.initInfo) this.onInfo(task.initInfo); }; VideoUrlDialog.prototype.onInfo = function (info){ this.getView(); this._prevUrl = info.url; if (info.error) { this.pendingResult = null; this.$image.attr('src', undefined); this.$info.innerHTML = '<span style="color:#ff2c2c">Can not load video!</span>'; return; } this.pendingResult = info; if (info.image) this.$image.attr('src', info.image); else { this.$image.attr('src', undefined); } var infoText = []; if (isRealNumber(info.width) && isRealNumber(info.height)) { infoText.push([info.width, ' x ', info.height].join('')); } if ('displayWidth' in info){ this.$width.value = info.displayWidth; this.$height.value = info.displayHeight; this.$urlInput.value = info.url; } else if (isRealNumber(info.width) && isRealNumber(info.height)) { infoText.push([info.width, ' x ', info.height].join('')); this.$width.value = info.width; this.$height.value = info.height; this.$ratio.checked = true; } else { this.$width.value = 560; this.$height.value = 315; } if ('keepRatio' in info){ this.$ratio.checked = true; } if (info.type.startsWith('video/')) { infoText.push(info.type.substring(6).toUpperCase()); } if (info.title) { infoText.push('<strong>' + info.title + '</strong>'); } this.$info.innerHTML = infoText.join(', '); this.$okBtn.disabled = false; } /*** * @param event */ VideoUrlDialog.prototype.ev_urlChange = function (event) { var newUrl = this.$urlInput.value; if (this._prevUrl === newUrl) return; this.$okBtn.disabled = true; this._prevUrl = newUrl; var info = parseVideoUrl(newUrl); var sync; if (info.videoId === 'INVALID_URL') { info.error = 'INVALID_URL'; sync = Promise.resolve(); } else if (info.hostType !== '*') { info.type = 'text/html'; sync = getEmbedVideoInfo(info.originalUrl, info.hostType === 'facebook').then((result) => { if (newUrl !== this._prevUrl) return; Object.assign(info, result); if (!isNaturalNumber(result.width)) { info.error = "INVALID_VIDEO"; } }); } else { sync = getVideoFileHeader(info.url).then(result => { if (newUrl !== this._prevUrl) return; Object.assign(info, result); if (result.error) { this.$info.innerHTML = '<span style="color:#ff2c2c">Can not load video!</span>'; } }).then(() => { if (newUrl !== this._prevUrl) return; if (info.error) return; if (info.type.startsWith('video/')) return getVideoPreview(info.url) .then(result1 => { if (newUrl !== this._prevUrl) return; Object.assign(info, result1); }, error1 => { info.error = "CAN_NOT_LOAD"; }); }); } sync.then(() => { if (newUrl !== this._prevUrl) return; this.onInfo(info); }); }; /*** * @param event */ VideoUrlDialog.prototype.ev_action = function (event) { setTimeout(() => { var action = event.action; if (action.name === 'cancel') { this.cancelCurrentTask() } var width = parseInt(this.$width.value); var height = parseInt(this.$height.value); var result = Object.assign({}, this.pendingResult); if (!isNaN(width) && !isNaN(height)) { result.displayWidth = width; result.displayHeight = height; } else { result.displayWidth = 560; result.displayHeight = 315; } result.keepRatio = this.$ratio.checked; if (action.name === 'ok') { this.resolveCurrentTask(result); } this.stop(); }, 100) }; VideoUrlDialog.prototype.ev_widthChange = function () { if (!this.$ratio.checked || !this.pendingResult || !isRealNumber(this.pendingResult.width) || !isRealNumber(this.pendingResult.height)) return; var ratio = this.pendingResult.width / this.pendingResult.height; var width = parseFloat(this.$width.value); this.$height.value = Math.round(width / ratio); }; VideoUrlDialog.prototype.ev_heightChange = function () { if (!this.$ratio.checked || !this.pendingResult || !isRealNumber(this.pendingResult.width) || !isRealNumber(this.pendingResult.height)) return; var ratio = this.pendingResult.width / this.pendingResult.height; var height = parseFloat(this.$height.value); this.$width.value = Math.round(height * ratio); }; /*** * @type {VideoUrlDialog} */ var shareInstance; function openVideUrlDialog(initInfo) { shareInstance = shareInstance || new VideoUrlDialog(); return new Promise((rs) => { var task = { resolved: false, canceled: false, resolve: function (info) { if (this.resolved) return; this.resolved = true; rs(info); }, cancel: function () { if (this.resolved || this.canceled) return; if (shareInstance.task !== this) return; this.canceled = true; rs(null); }, initInfo: initInfo } shareInstance.start(); shareInstance.assignTask(task); }); } /* harmony default export */ var videourldialog_VideoUrlDialog = (VideoUrlDialog); // CONCATENATED MODULE: ./node_modules/absol/src/Converter/base64.js function base64EncodeUnicode(str) { return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function toSolidBytes(match, p1) { return String.fromCharCode('0x' + p1); })); }; function base64DecodeUnicode(str) { return decodeURIComponent(atob(str).split('').map(function (c) { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); }).join('')); } var UnicodeBase64Converter = { encode: base64EncodeUnicode, decode: base64DecodeUnicode }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/VideoExtension.js var VideoExtension_name = 'video'; var VideoExtension_command = 'insert_video'; function getInfoFromCKImage(elt) { var initInfo = null; if (elt.getAttribute('data-node-type') === 'video') { initInfo = JSON.parse(base64DecodeUnicode(elt.getAttribute('data-info'))); initInfo.embedUrl = elt.getAttribute('data-embed-url'); initInfo.image = elt.getAttribute('src'); initInfo.image = elt.getAttribute('src'); } return initInfo; } function VideoExtension_init(editor) { editor.ui.addButton(VideoExtension_command, { label: 'Insert Video', command: VideoExtension_command, }); editor.on('doubleclick', (event) => { var info; if (event.data && event.data.element) { info = getInfoFromCKImage(event.data.element); if (info) { event.cancel(); editor.execCommand(VideoExtension_command); } } }); editor.addCommand(VideoExtension_command, { exec: function (editor) { var initInfo; var sel = editor.getSelection(); var elt; if (sel) { elt = sel.getSelectedElement(); } if (elt) { initInfo = getInfoFromCKImage(elt); } openVideUrlDialog(initInfo).then((result) => { var savedInfo = Object.assign({}, result); delete savedInfo.image; delete savedInfo.embedUrl; if (result) { var html = `<img src="${result.image}" data-type="${result.type}" \ onload="window.ckeditorVideoInit && window.ckeditorVideoInit(this)"\ data-embed-url="${result.embedUrl}"\ width="${result.displayWidth}px" height="${result.displayHeight}px"\ data-node-type="video" \ data-info="${base64EncodeUnicode(JSON.stringify(savedInfo))}" >`; editor.insertHtml(html); } }); } }); } window.ckeditorVideoInit = function (elt) { Object(ACore["a" /* $ */])(elt); if (!elt.isDescendantOf(document.body)) return; var newElt; var type = elt.attr('data-type'); if (type.startsWith('video/')) { newElt = Object(ACore["c" /* _ */])({ tag: 'video', attr: { crossorigin: "anonymous", crossOrigin: "anonymous", preload: 'auto', src: elt.attr('data-embed-url'), width: elt.attr('width'), height: elt.attr('height'), controls: true }, }); } else { newElt = Object(ACore["c" /* _ */])({ tag: 'iframe', attr: { src: elt.attr('data-embed-url'), width: elt.attr('width'), height: elt.attr('height'), } }) } elt.selfReplace(newElt); } /* harmony default export */ var VideoExtension = ({ name: VideoExtension_name, command: VideoExtension_command, plugin: { init: VideoExtension_init }, extendMethods: {} }); /*** * @name variables * @type {{}} * @memberOf CKPlaceholder# */ // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/plugins.js var ckContentStyleUrl; var ckPluginInitialized = false; var CKExtensions = [ExpressionExtension, SimpleTextExtension, VariableExtension, DynamicLinkExtension, ImageFileExtension, VideoExtension]; var CKExtensionDict = CKExtensions.reduce(function (ac, cr) { ac[cr.name] = cr; return ac; }, {}); var CKStylesSetDefault = [ { name: 'Notice', element: 'p', attributes: { class: 'as-ck-alert as-variant-notice' } }, { name: 'Warning', element: 'p', attributes: { class: 'as-ck-alert as-variant-warning' } }, { name: 'Tip', element: 'p', attributes: { class: 'as-ck-alert as-variant-info' } }, { name: 'Success', element: 'p', attributes: { class: 'as-ck-alert as-variant-success' } } ]; function ckInit() { if (!window.CKEDITOR) return; if (ckPluginInitialized) return; var styleCode = ckcontentstyle_css .replace(/\$basePath/g, CKEDITOR.basePath); ckContentStyleUrl = URL.createObjectURL(stringToBlob(styleCode, 'css')); ckPluginInitialized = true; document.head.appendChild(Object(ACore["c" /* _ */])('<link rel="stylesheet" href="' + ckContentStyleUrl + '">')); CKEDITOR.stylesSet.add('as_styles_set_default', CKStylesSetDefault); CKExtensions.forEach(function (e) { if (e.plugin) { CKEDITOR.plugins.add(e.name, e.plugin) } }) } function ckMakeDefaultConfig(config, extensions, holderElt) { ckInit(); var userImageFileDialog = !!(window.contentModule && window.contentModule.chooseFile); /* * if (!this.attributes.directUpload && window.contentModule && window.contentModule.chooseFile) { window.contentModule.chooseFile({ type: "image_file" }).then(function (result) { if (result) { this.attributes.value = result; } }.bind(this)); } * */ config = config || {}; //disable special chars encode config.entities = false; config.stylesSet = ['as_styles_set_default'].concat(arrayUnique((config.stylesSet || '').trim().split(/\s*,\s*/))) .filter(function (c) { return !!c; }).join(','); if (extensions) extensions.push('video'); if (extensions && extensions.indexOf(VariableExtension.name) >= 0) { config.title = false; } if (config.toolbar === 'SIMPLE') { config.toolbar = [ { name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'TextColor', 'BGColor', 'NumberedList', 'BulletedList', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', userImageFileDialog ? 'image_mgn_dialog' : 'Image'] }, // { name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize'] }, { name: "extensions", items: extensions.map(function (eName) { if (CKExtensionDict[eName] && CKExtensionDict[eName].command) { return CKExtensionDict[eName].command; } }).filter(function (u) { return !!u; }) }, { name: 'tools', items: ['Maximize'] } ]; } else if (!config.toolbar || config.toolbar === "ADVANCED") { config.toolbar = [ { name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript'] }, { name: 'colors', items: ['TextColor', 'BGColor'] }, { name: "format", items: ['CopyFormatting', 'RemoveFormat'] }, { name: 'paragraph', items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'] }, { name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize'] }, { name: 'links', items: ['Link', 'Unlink', 'Anchor'] }, { name: 'insert', items: [userImageFileDialog ? 'image_mgn_dialog' : 'Image', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe'] }, { name: 'tools', items: ['Maximize', 'ShowBlocks'] }, { name: 'editing', items: ['Find', 'Replace'] }, { name: "extensions", items: extensions.map(function (eName) { if (CKExtensionDict[eName] && CKExtensionDict[eName].command) { return CKExtensionDict[eName].command; } }).filter(function (u) { return !!u; }) }, { name: 'document', items: ['Source'] } ]; } config.toolbar = config.toolbar.filter(function (i) { return i.items && i.items.length > 0; }); config.toolbar = [config.toolbar.reduce(function (ac, cr) { // if (ac.items.length > 0) // ac.items.push('-'); var items = cr.items.filter(function (it) { return it !== '-'; }); ac.items.push.apply(ac.items, items); return ac; }, { name: 'nogroup', items: [] })]; if (!config.height) { config.height = '500px'; } var contentsCss = [ckContentStyleUrl]; if (typeof config.contentsCss === "string") { contentsCss.push(config.contentsCss); } else if (config.contentsCss instanceof Array) { contentsCss.push.apply(contentsCss, config.contentsCss); } var has = contentsCss.some(function (url) { return url.indexOf('family=Material+Icons') >= 0; }); if (!has) { contentsCss.push('https://fonts.googleapis.com/icon?family=Material+Icons'); } has = contentsCss.some(function (url) { return url.indexOf(CKEDITOR.basePath + 'contents.css') >= 0; }); if (!has) { contentsCss.push(CKEDITOR.basePath + 'contents.css?time=' + Math.random()); } config.contentsCss = contentsCss; var extraPlugins = ['image_mgn']; if (holderElt.stickyToolbar){ extraPlugins.push('autogrow'); config.autoGrow_minHeight = 400; } if (typeof config.extraPlugins === 'string') { extraPlugins.push.apply(extraPlugins, config.extraPlugins.trim().split(/\s*,\s*/)); } else if (extraPlugins instanceof Array) { extraPlugins.push.apply(extraPlugins, config.extraPlugins) } extraPlugins = extraPlugins.filter(function (c) { return typeof c === 'string' && !!c; }); CKExtensions.forEach(function (e) { if (extensions.indexOf(e.name) >= 0 && e.plugin) extraPlugins.push(e.name); }); extraPlugins = arrayUnique(extraPlugins); config.extraPlugins = extraPlugins.join(','); config.allowedContent = true;//false: you must add button ui => bug Object.assign(config, { //style // htmlEncodeOutput: false, // entities: false, // basicEntities: false, // // config.cloudServices_uploadUrl: 'DDFFE2739B83A73DDF16AB641ECA2', // // config.cloudServices_tokenUrl: 'https://lab.daithangminh.vn/hr_system_settings/php/uploadMedia.php', // extraPlugins: 'LinkDB, Note', // filebrowserBrowseUrl: 'js/ckfinder/ckfinder.html', // filebrowserImageBrowseUrl: 'js/ckfinder/ckfinder.html?type=Images', // filebrowserFlashBrowseUrl: 'js/ckfinder/ckfinder.html?type=Flash', // filebrowserUploadUrl: 'js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files', // filebrowserImageUploadUrl: 'js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images', // filebrowserFlashUploadUrl: 'js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash' }); return config; } function ckAddDefaultStyleSet(ckEditor) { } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/CKStickyToolbarController.js function CKStickyToolbarController(holderElt) { this.editor = holderElt.editor; this.$elt = this.editor.container.$; this.activated = false; this['onScroll'] = this.onScroll.bind(this); this.trackedScroller = []; } CKStickyToolbarController.prototype.start = function () { if (this.activated) return; var c = this.$elt.parentElement; while (c) { c.addEventListener('scroll', this.onScroll); c = c.parentElement; } }; CKStickyToolbarController.prototype.stop = function () { if (!this.activated) return; while (this.trackedScroller.length > 0) { this.trackedScroller.pop().removeEventListener('scroll', this.onScroll); } }; CKStickyToolbarController.prototype.onScroll = function (event) { if (!AElement["a" /* default */].prototype.isDescendantOf.call(this.$elt, document.body)) { this.stop(); return; } this.$toolbar = this.$toolbar || Object(ACore["a" /* $ */])('.cke_top', this.$elt); if (!this.$toolbar) return; var oBound = Object(Dom["g" /* traceOutBoundingClientRect */])(this.$elt.parentElement); var bound = this.$elt.getBoundingClientRect(); var tBound = this.$toolbar.getBoundingClientRect(); if (bound.top < oBound.top && oBound.top + tBound.height + 30 < bound.bottom) { this.$toolbar.addStyle('transform', 'translate(0, ' + ((oBound.top - bound.top)) + 'px)'); } else { this.$toolbar.removeStyle('transform'); } }; /* harmony default export */ var ckeditor_CKStickyToolbarController = (CKStickyToolbarController); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/CKPlaceholder.js Dom["b" /* default */].documentReady.then(function () { setTimeout(ckInit, 100); }); /*** * @extends AElement * @constructor */ function CKPlaceholder() { ckInit(); this.$attachhook = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.$attachhook.once('attached', this.eventHandler.attached); this._pendingData = ''; this.isReady = false; this.editor = null; this._extensions = []; this._config = this._makeInitConfig(); this.afterReady = new Promise(rs => { this.on('editorready', rs); }); this.stickyToolbarCtrl = null; /*** * @type {{}} * @name config * @memberOf CKPlaceholder# */ /*** * @type {string[]} * @name extensions * @memberOf CKPlaceholder# */ /*** * * @type {boolean} */ this.stickyToolbar = true; } CKPlaceholder.tag = 'CKPlaceholder'.toLowerCase(); CKPlaceholder.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['editorcreated', 'editorready', 'change', 'command', 'focus'], class: 'as-ck-placeholder' }); }; CKPlaceholder.prototype.mode = 'replace'; /** * * @param {string}data * @private * @returns {string} */ CKPlaceholder.prototype._implicit = function (data) { if (typeof data !== "string") data = ''; var self = this; return this._extensions.reverse().reduce(function (ac, cr) { var extension = CKExtensionDict[cr]; if (extension.implicit) { ac = extension.implicit(ac, self); } return ac; }, data); }; /** * * @param {string}data * @private * @returns {string} */ CKPlaceholder.prototype._explicit = function (data) { var self = this; return this._extensions.reduce(function (ac, cr) { var extension = CKExtensionDict[cr]; if (extension && extension.explicit) { ac = extension.explicit(ac, self); } return ac; }, data); }; /*** * @returns {{}} * @protected */ CKPlaceholder.prototype._makeInitConfig = function () { return {}; }; CKPlaceholder.prototype.selectNext = function () { var editor = this.editor; if (!editor) return; var ranges = editor.getSelection().getRanges(); // var startIndex = editor.element.getHtml().indexOf(findString); // if (startIndex != -1) { // ranges[0].setStart(element.getFirst(), startIndex); // ranges[0].setEnd(element.getFirst(), startIndex + findString.length); // sel.selectRanges([ranges[0]]); // } }; /*** * @memberOf CKPlaceholder# * @type {{}} */ CKPlaceholder.eventHandler = {}; /*** * @this CKPlaceholder */ CKPlaceholder.eventHandler.attached = function () { this.$attachhook.remove(); this.editor = this.mode === 'replace' ? CKEDITOR.replace(this, ckMakeDefaultConfig(this.config, this.extensions, this)) : CKEDITOR.inline(this, ckMakeDefaultConfig(this.config, this.extensions, this)); this.editor.placeHolderElt = this; this.editor.on('instanceReady', this.eventHandler.instanceReady); this.editor.on('change', this.eventHandler.change); if (this.mode === 'replace') { this.editor.on('focus', function (event) { this.emit('focus', { target: this, type: 'focus', originalEvent: event }); }.bind(this)); } this._extensions.forEach(function (name) { var e = CKExtensionDict[name]; if (e && e.extendMethods) { Object.assign(this, e.extendMethods); } }.bind(this)); this.emit('editorcreated', { type: 'editorcreated', target: this, editor: this.editor }, this); }; CKPlaceholder.eventHandler.instanceReady = function () { this.isReady = true; if (this._pendingData && this._pendingData.length > 0) { this.editor.setData(this._implicit(this._pendingData)); this._pendingData = null; } this.emit('editorready', { type: 'editorready', target: this, editor: this.editor }, this); }; CKPlaceholder.eventHandler.change = function () { this.emit('change', { type: 'change', target: this, editor: this.editor }, this); }; CKPlaceholder.property = {}; CKPlaceholder.property.data = { /*** * @this CKPlaceholder * @param data */ set: function (data) { if (typeof data !== "string") data = ''; if (this.isReady) { this.editor.setData(this._implicit(data)); } else { this._pendingData = data; } }, /*** * @this CKPlaceholder * @returns {string} */ get: function () { if (this.isReady) return this._explicit(this.editor.getData()); return this._pendingData; } }; CKPlaceholder.property.rawData = { get: function () { if (this.editor) this.editor.getData(); else return this._implicit(this._pendingData); } }; CKPlaceholder.property.config = { set: function (value) { if (this.editor) { throw new Error("Can not set config after the CKEditor created"); } this._config = Object.assign(this._makeInitConfig(), value); }, get: function () { return this._config; } }; CKPlaceholder.property.extensions = { set: function (value) { if (this.editor) { throw new Error("Can not set extensions after the CKEditor created"); } value = value || []; if (typeof value === "string") value = [value]; if (!(value instanceof Array)) value = []; this._extensions = value.filter(function (c) { return typeof c === "string" && c.length > 0 && CKExtensionDict[c]; }); this._extensions = value; }, get: function () { return this._extensions; } }; CKPlaceholder.property.stickyToolbar = { set: function (value) { if (value) { this.addClass('as-has-sticky-toolbar'); } else { return this.removeClass('as-has-sticky-toolbar'); } this.afterReady.then(() => { if (this.mode !== 'replace') return; if (this.stickyToolbar) { if (!this.stickyToolbarCtrl) { this.stickyToolbarCtrl = new ckeditor_CKStickyToolbarController(this); } this.stickyToolbarCtrl.start(); } else { this.editor.container.$.classList.remove('as-has-sticky-toolbar'); if (this.stickyToolbarCtrl) this.stickyToolbarCtrl.stop(); } }); }, get: function () { return this.hasClass('as-has-sticky-toolbar'); } }; ACore["d" /* default */].install(CKPlaceholder); /* harmony default export */ var ckeditor_CKPlaceholder = (CKPlaceholder); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/CKInlineShortText.js /*** * @extends CKPlaceholder * @constructor */ function CKInlineShortText() { ckeditor_CKPlaceholder.call(this); this.once('editorcreated', this.eventHandler.afterEditorCreated) .on('paste', this.eventHandler.paste, true) .once('editorready', this.eventHandler.afterEditorReady); } OOP["a" /* default */].mixClass(CKInlineShortText, ckeditor_CKPlaceholder); CKInlineShortText.tag = 'CKInlineShortText'.toLowerCase(); CKInlineShortText.property = Object.assign({}, ckeditor_CKPlaceholder.property); CKInlineShortText.eventHandler = Object.assign({}, ckeditor_CKPlaceholder.eventHandler); CKInlineShortText.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-ck-inline-short-text', extendEvent: ['editorcreated', 'editorready', 'change', 'command'], id: randomIdent(8), attr: { contenteditable: 'true' } }); }; CKInlineShortText.prototype.mode = 'inline'; CKInlineShortText.prototype._makeInitConfig = function () { var config = { toolbar: [ { name: 'extension', items: arrayRemoveNone(this._extensions.map(function (eName) { if (CKExtensionDict[eName] && CKExtensionDict[eName].command) { return CKExtensionDict[eName].command; } })) } ], keystrokes: [ [13 /* Enter */, 'blur'], [CKEDITOR.SHIFT + 13 /* Shift + Enter */, 'blur'] ] }; return config; }; CKInlineShortText.property.extensions = Object.assign({}, ckeditor_CKPlaceholder.property.extensions, { set: function (value) { value = value || []; value.push('simple_text') value = arrayUnique(value); ckeditor_CKPlaceholder.property.extensions.set.call(this, value); this._config = this._makeInitConfig(); } }); CKInlineShortText.prototype._hookScroll = function () { this.$scrollers = []; var c = this.parentElement; while (c) { this.$scrollers.push(c); c = c.parentElement; } this.$scrollers.push(document); this.$scrollers.forEach(function (elt) { elt.addEventListener('scroll', this.eventHandler.scroll); }.bind(this)) }; CKInlineShortText.prototype._unhookScroll = function () { this.$scrollers.forEach(function (elt) { elt.removeEventListener('scroll', this.eventHandler.scroll); }.bind(this)) }; CKInlineShortText.eventHandler.afterEditorCreated = function () { this.editor.on('paste', function (evt) { evt.cancel(); }); }; CKInlineShortText.eventHandler.afterEditorReady = function (){ this.$toolbarElt = this.$toolbarElt || Object(ACore["a" /* $ */])('#cke_' + this.attr('id')); this['removeToolbar'] = this.removeToolbar; this._hookScroll(); setTimeout(this.eventHandler.tick, 5000); } CKInlineShortText.eventHandler.paste = function (event) { var self = this; var clipboardData = (event.clipboardData || window.clipboardData); /**Safari bug */ event.preventDefault(); if (clipboardData) { if (clipboardData.items) { var items = Array.prototype.slice.call(clipboardData.items); var plainTextItems = items.filter(function (item) { return item.type.indexOf('text/plain') >= 0; }); if (plainTextItems.length > 0) { var plainTextItem = plainTextItems[0];//only one item plainTextItem.getAsString(function (text) { self.editor.insertHtml(self._implicit(text)) }); } } else { var text = event.clipboardData.getData('text/plain'); if (text) { self.editor.insertHtml(self._implicit(text)) } } } }; CKInlineShortText.eventHandler.tick = function () { if (!this.isDescendantOf(document.body)) { this._unhookScroll(); return; } setTimeout(this.eventHandler.tick, 5000); } /*** * @this CKInlineShortText */ CKInlineShortText.eventHandler.scroll = function () { // If we don't have any active instance of CKEDITOR - return if (!CKEDITOR.currentInstance) { return; } if (CKEDITOR.currentInstance.element.$ !== this) return; // Save the elements we need to work with if (!this.isDescendantOf(document.body)) { this._unhookScroll(); return; } this.$toolbarElt = this.$toolbarElt || Object(ACore["a" /* $ */])('#cke_' + this.attr('id')); var toolbarElt = this.$toolbarElt; if (!toolbarElt) return; var bound = this.getBoundingClientRect(); var toolBound = toolbarElt.getBoundingClientRect(); var outbound = Object(Dom["g" /* traceOutBoundingClientRect */])(this); var left = Math.max(0, bound.left); var top = bound.top - toolBound.height; if (outbound.top > bound.bottom || outbound.bottom < bound.top) { top = -1000; } else if (bound.top < toolBound.height) { top = bound.bottom; } toolbarElt.addStyle({ top: top + 'px', left: left + 'px' }); }; CKInlineShortText.property.removeToolbar = { set: function (value) { this._removeToolbar = !!value; if (this.$toolbarElt) { if (this._removeToolbar) { this.$toolbarElt.addClass('as-hidden'); } else { this.$toolbarElt.removeClass('as-hidden'); } } }, get: function () { return this._removeToolbar; } }; ACore["d" /* default */].install(CKInlineShortText); /* harmony default export */ var ckeditor_CKInlineShortText = (CKInlineShortText); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/verticaltimeline.css var verticaltimeline = __webpack_require__(285); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/VerticalTimeline.js /*** * @extends AElement * @constructor */ function VerticalTimeline() { this._current = 0; this._items = []; this.$items = []; this.current = 0; } VerticalTimeline.tag = 'VerticalTimeline'.toLowerCase(); VerticalTimeline.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-vertical-timeline', child: [] }); }; VerticalTimeline.prototype._makeItem = function (item, i) { var iconElt = Object(ACore["c" /* _ */])('span.mdi.mdi-circle'); return Object(ACore["c" /* _ */])({ class: 'as-vertical-timeline-item', props: { $icon: iconElt }, child: [ { class: 'as-vertical-timeline-icon-ctn', child: iconElt }, { class: 'as-vertical-timeline-tile', child: { tag: 'span', child: { text: item.text } } } ] }); }; VerticalTimeline.property = {}; VerticalTimeline.property.items = { /*** * @this VerticalTimeline * @param items */ set: function (items) { items = items || []; this._items = items; this.clearChild(); this.$items = items.map(function (item, i) { return this._makeItem(item, i); }.bind(this)); this.addChild(this.$items); this.current = this._current;//update }, get: function () { } }; VerticalTimeline.property.current = { set: function (value) { value = isRealNumber(value) ? (value >> 0) : -1; this._current = value; var itemElt; for (var i = 0; i < this.$items.length; ++i) { itemElt = this.$items[i];//.$icon.removeClass(''); if (i < value) { itemElt.$icon.removeClass('mdi-numeric-' + (i + 1) + '-circle') .removeClass('mdi-circle') .addClass('mdi-check-circle'); itemElt.removeClass('as-inactive').removeClass('as-active'); } else if (i === value) { itemElt.$icon.addClass('mdi-numeric-' + (i + 1) + '-circle') .removeClass('mdi-circle') .removeClass('mdi-check-circle'); itemElt.removeClass('as-inactive').addClass('as-active'); } else { itemElt.addClass('as-inactive').removeClass('as-active'); itemElt.$icon.removeClass('mdi-numeric-' + (i + 1) + '-circle') .addClass('mdi-circle') .removeClass('mdi-check-circle'); } } }, get: function () { return Math.max(-1, Math.min(this._current, this._items.length)); } }; ACore["d" /* default */].install(VerticalTimeline); /* harmony default export */ var js_VerticalTimeline = (VerticalTimeline); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MarkerClusterer.js /** * @name MarkerClustererPlus for Google Maps V3 * @version 2.1.1 [November 4, 2013] * @author Gary Little * @fileoverview * The library creates and manages per-zoom-level clusters for large amounts of markers. * <p> * This is an enhanced V3 implementation of the * <a href="http://gmaps-utility-library-dev.googlecode.com/svn/tags/markerclusterer/" * >V2 MarkerClusterer</a> by Xiaoxi Wu. It is based on the * <a href="http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerclusterer/" * >V3 MarkerClusterer</a> port by Luke Mahe. MarkerClustererPlus was created by Gary Little. * <p> * v2.0 release: MarkerClustererPlus v2.0 is backward compatible with MarkerClusterer v1.0. It * adds support for the <code>ignoreHidden</code>, <code>title</code>, <code>batchSizeIE</code>, * and <code>calculator</code> properties as well as support for four more events. It also allows * greater control over the styling of the text that appears on the cluster marker. The * documentation has been significantly improved and the overall code has been simplified and * polished. Very large numbers of markers can now be managed without causing Javascript timeout * errors on Internet Explorer. Note that the name of the <code>clusterclick</code> event has been * deprecated. The new name is <code>click</code>, so please change your application code now. */ /** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @name ClusterIconStyle * @class This class represents the object for values in the <code>styles</code> array passed * to the {@link MarkerClusterer} constructor. The element in this array that is used to * style the cluster icon is determined by calling the <code>calculator</code> function. * * @property {string} url The URL of the cluster icon image file. Required. * @property {number} height The display height (in pixels) of the cluster icon. Required. * @property {number} width The display width (in pixels) of the cluster icon. Required. * @property {Array} [anchorText] The position (in pixels) from the center of the cluster icon to * where the text label is to be centered and drawn. The format is <code>[yoffset, xoffset]</code> * where <code>yoffset</code> increases as you go down from center and <code>xoffset</code> * increases to the right of center. The default is <code>[0, 0]</code>. * @property {Array} [anchorIcon] The anchor position (in pixels) of the cluster icon. This is the * spot on the cluster icon that is to be aligned with the cluster position. The format is * <code>[yoffset, xoffset]</code> where <code>yoffset</code> increases as you go down and * <code>xoffset</code> increases to the right of the top-left corner of the icon. The default * anchor position is the center of the cluster icon. * @property {string} [textColor="black"] The color of the label text shown on the * cluster icon. * @property {number} [textSize=11] The size (in pixels) of the label text shown on the * cluster icon. * @property {string} [textDecoration="none"] The value of the CSS <code>text-decoration</code> * property for the label text shown on the cluster icon. * @property {string} [fontWeight="bold"] The value of the CSS <code>font-weight</code> * property for the label text shown on the cluster icon. * @property {string} [fontStyle="normal"] The value of the CSS <code>font-style</code> * property for the label text shown on the cluster icon. * @property {string} [fontFamily="Arial,sans-serif"] The value of the CSS <code>font-family</code> * property for the label text shown on the cluster icon. * @property {string} [backgroundPosition="0 0"] The position of the cluster icon image * within the image defined by <code>url</code>. The format is <code>"xpos ypos"</code> * (the same format as for the CSS <code>background-position</code> property). You must set * this property appropriately when the image defined by <code>url</code> represents a sprite * containing multiple images. Note that the position <i>must</i> be specified in px units. */ /** * @name ClusterIconInfo * @class This class is an object containing general information about a cluster icon. This is * the object that a <code>calculator</code> function returns. * * @property {string} text The text of the label to be shown on the cluster icon. * @property {number} index The index plus 1 of the element in the <code>styles</code> * array to be used to style the cluster icon. * @property {string} title The tooltip to display when the mouse moves over the cluster icon. * If this value is <code>undefined</code> or <code>""</code>, <code>title</code> is set to the * value of the <code>title</code> property passed to the MarkerClusterer. */ /** * A cluster icon. * * @constructor * @extends google.maps.OverlayView * @param {Cluster} cluster The cluster with which the icon is to be associated. * @param {Array} [styles] An array of {@link ClusterIconStyle} defining the cluster icons * to use for various cluster sizes. * @private */ function ClusterIcon(cluster, styles) { cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView); this.cluster_ = cluster; this.className_ = cluster.getMarkerClusterer().getClusterClass(); this.styles_ = styles; this.center_ = null; this.div_ = null; this.sums_ = null; this.visible_ = false; this.setMap(cluster.getMap()); // Note: this causes onAdd to be called } /** * Adds the icon to the DOM. */ ClusterIcon.prototype.onAdd = function() { var cClusterIcon = this; var cMouseDownInCluster; var cDraggingMapByCluster; this.div_ = document.createElement("div"); this.div_.className = this.className_; if (this.visible_) { this.show(); } this.getPanes().overlayMouseTarget.appendChild(this.div_); // Fix for Issue 157 this.boundsChangedListener_ = google.maps.event.addListener(this.getMap(), "bounds_changed", function() { cDraggingMapByCluster = cMouseDownInCluster; }); this.div_.addEventListener("mousedown", function() { cMouseDownInCluster = true; cDraggingMapByCluster = false; }); this.div_.addEventListener("click", function(e) { cMouseDownInCluster = false; if (!cDraggingMapByCluster) { var theBounds; var mz; var mc = cClusterIcon.cluster_.getMarkerClusterer(); /** * This event is fired when a cluster marker is clicked. * @name MarkerClusterer#click * @param {Cluster} c The cluster that was clicked. * @event */ google.maps.event.trigger(mc, "click", cClusterIcon.cluster_); google.maps.event.trigger(mc, "clusterclick", cClusterIcon.cluster_); // deprecated name // The default click handler follows. Disable it by setting // the zoomOnClick property to false. if (mc.getZoomOnClick()) { // Zoom into the cluster. mz = mc.getMaxZoom(); theBounds = cClusterIcon.cluster_.getBounds(); mc.getMap().fitBounds(theBounds); // There is a fix for Issue 170 here: setTimeout(function() { mc.getMap().fitBounds(theBounds); // Don't zoom beyond the max zoom level if (mz !== null && (mc.getMap().getZoom() > mz)) { mc.getMap().setZoom(mz + 1); } }, 100); } // Prevent event propagation to the map: e.cancelBubble = true; if (e.stopPropagation) { e.stopPropagation(); } } }); this.div_.addEventListener("mouseover", function() { var mc = cClusterIcon.cluster_.getMarkerClusterer(); /** * This event is fired when the mouse moves over a cluster marker. * @name MarkerClusterer#mouseover * @param {Cluster} c The cluster that the mouse moved over. * @event */ google.maps.event.trigger(mc, "mouseover", cClusterIcon.cluster_); google.maps.event.trigger(cClusterIcon.cluster_, "mouseover"); }); this.div_.addEventListener( "mouseout", function() { var mc = cClusterIcon.cluster_.getMarkerClusterer(); /** * This event is fired when the mouse moves out of a cluster marker. * @name MarkerClusterer#mouseout * @param {Cluster} c The cluster that the mouse moved out of. * @event */ google.maps.event.trigger(mc, "mouseout", cClusterIcon.cluster_); google.maps.event.trigger(cClusterIcon.cluster_, "mouseout"); }); var mc = this.cluster_.getMarkerClusterer(); if (mc.markers_.caculateSum !== undefined) { var infowindow = new google.maps.InfoWindow({ maxWidth: 350 }); google.maps.event.addListener(this.cluster_, 'mouseover', function(event) { var tooltip = mc.markers_.caculateSum(this.cluster_.markers_); var content, style; if (typeof tooltip == "object") { if (tooltip.style) style = tooltip.style; if (tooltip.element) content = tooltip.element; } else content = tooltip; if (style !== undefined) infowindow.setOptions(style); infowindow.setContent(content); var info = new google.maps.MVCObject; info.set('position', this.center_); info.set('anchorPoint', new google.maps.Point(0, -12)); infowindow.open(mc.map, info); }.bind(this)); google.maps.event.addListener(this.cluster_, 'mouseout', function(event) { infowindow.close(); }.bind(this)); google.maps.event.addListener(mc.map, "zoom_changed", function() { infowindow.close(); }) } }; /** * Removes the icon from the DOM. */ ClusterIcon.prototype.onRemove = function() { if (this.div_ && this.div_.parentNode) { this.hide(); google.maps.event.removeListener(this.boundsChangedListener_); google.maps.event.clearInstanceListeners(this.div_); this.div_.parentNode.removeChild(this.div_); this.div_ = null; } }; /** * Draws the icon. */ ClusterIcon.prototype.draw = function() { if (this.visible_) { var pos = this.getPosFromLatLng_(this.center_); this.div_.style.top = pos.y + "px"; this.div_.style.left = pos.x + "px"; } }; /** * Hides the icon. */ ClusterIcon.prototype.hide = function() { if (this.div_) { this.div_.style.display = "none"; } this.visible_ = false; }; /** * Positions and shows the icon. */ ClusterIcon.prototype.show = function() { if (this.div_) { var img = ""; // NOTE: values must be specified in px units var bp = this.backgroundPosition_.split(" "); var spriteH = parseInt(bp[0].trim(), 10); var spriteV = parseInt(bp[1].trim(), 10); var pos = this.getPosFromLatLng_(this.center_); this.div_.style.cssText = this.createCss(pos); img = "<img src='" + this.url_ + "' style='position: absolute; top: " + spriteV + "px; left: " + spriteH + "px; "; if (!this.cluster_.getMarkerClusterer().enableRetinaIcons_) { img += "clip: rect(" + (-1 * spriteV) + "px, " + ((-1 * spriteH) + this.width_) + "px, " + ((-1 * spriteV) + this.height_) + "px, " + (-1 * spriteH) + "px);"; } else { img += "width: " + this.width_ + "px;" + "height: " + this.height_ + "px;"; } img += "'>"; this.div_.innerHTML = img + "<div style='" + "position: absolute;" + "top: " + this.anchorText_[0] + "px;" + "left: " + this.anchorText_[1] + "px;" + "color: " + this.textColor_ + ";" + "font-size: " + this.textSize_ + "px;" + "font-family: " + this.fontFamily_ + ";" + "font-weight: " + this.fontWeight_ + ";" + "font-style: " + this.fontStyle_ + ";" + "text-decoration: " + this.textDecoration_ + ";" + "text-align: center;" + "width: " + this.width_ + "px;" + "line-height:" + this.height_ + "px;" + "'>" + (this.cluster_.hideLabel_ ? ' ' : this.sums_.text) + "</div>"; if (typeof this.sums_.title === "undefined" || this.sums_.title === "") { this.div_.title = this.cluster_.getMarkerClusterer().getTitle(); } else { this.div_.title = this.sums_.title; } this.div_.style.display = ""; } this.visible_ = true; }; /** * Sets the icon styles to the appropriate element in the styles array. * * @param {ClusterIconInfo} sums The icon label text and styles index. */ ClusterIcon.prototype.useStyle = function(sums) { this.sums_ = sums; var index = Math.max(0, sums.index - 1); index = Math.min(this.styles_.length - 1, index); var style = this.styles_[index]; this.url_ = style.url; this.height_ = style.height; this.width_ = style.width; this.anchorText_ = style.anchorText || [0, 0]; this.anchorIcon_ = style.anchorIcon || [parseInt(this.height_ / 2, 10), parseInt(this.width_ / 2, 10)]; this.textColor_ = style.textColor || "black"; this.textSize_ = style.textSize || 11; this.textDecoration_ = style.textDecoration || "none"; this.fontWeight_ = style.fontWeight || "bold"; this.fontStyle_ = style.fontStyle || "normal"; this.fontFamily_ = style.fontFamily || "Arial,sans-serif"; this.backgroundPosition_ = style.backgroundPosition || "0 0"; }; /** * Sets the position at which to center the icon. * * @param {google.maps.LatLng} center The latlng to set as the center. */ ClusterIcon.prototype.setCenter = function(center) { this.center_ = center; }; /** * Creates the cssText style parameter based on the position of the icon. * * @param {google.maps.Point} pos The position of the icon. * @return {string} The CSS style text. */ ClusterIcon.prototype.createCss = function(pos) { var style = []; style.push("cursor: pointer;"); style.push("position: absolute; top: " + pos.y + "px; left: " + pos.x + "px;"); style.push("width: " + this.width_ + "px; height: " + this.height_ + "px;"); return style.join(""); }; /** * Returns the position at which to place the DIV depending on the latlng. * * @param {google.maps.LatLng} latlng The position in latlng. * @return {google.maps.Point} The position in pixels. */ ClusterIcon.prototype.getPosFromLatLng_ = function(latlng) { var pos = this.getProjection().fromLatLngToDivPixel(latlng); pos.x -= this.anchorIcon_[1]; pos.y -= this.anchorIcon_[0]; pos.x = parseInt(pos.x, 10); pos.y = parseInt(pos.y, 10); return pos; }; /** * Creates a single cluster that manages a group of proximate markers. * Used internally, do not call this constructor directly. * @constructor * @param {MarkerClusterer} mc The <code>MarkerClusterer</code> object with which this * cluster is associated. */ function Cluster(mc) { this.markerClusterer_ = mc; this.map_ = mc.getMap(); this.gridSize_ = mc.getGridSize(); this.minClusterSize_ = mc.getMinimumClusterSize(); this.averageCenter_ = mc.getAverageCenter(); this.hideLabel_ = mc.getHideLabel(); this.markers_ = []; this.center_ = null; this.bounds_ = null; this.clusterIcon_ = new ClusterIcon(this, mc.getStyles()); } /** * Returns the number of markers managed by the cluster. You can call this from * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler * for the <code>MarkerClusterer</code> object. * * @return {number} The number of markers in the cluster. */ Cluster.prototype.getSize = function() { return this.markers_.length; }; /** * Returns the array of markers managed by the cluster. You can call this from * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler * for the <code>MarkerClusterer</code> object. * * @return {Array} The array of markers in the cluster. */ Cluster.prototype.getMarkers = function() { return this.markers_; }; /** * Returns the center of the cluster. You can call this from * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler * for the <code>MarkerClusterer</code> object. * * @return {google.maps.LatLng} The center of the cluster. */ Cluster.prototype.getCenter = function() { return this.center_; }; /** * Returns the map with which the cluster is associated. * * @return {google.maps.Map} The map. * @ignore */ Cluster.prototype.getMap = function() { return this.map_; }; /** * Returns the <code>MarkerClusterer</code> object with which the cluster is associated. * * @return {MarkerClusterer} The associated marker clusterer. * @ignore */ Cluster.prototype.getMarkerClusterer = function() { return this.markerClusterer_; }; /** * Returns the bounds of the cluster. * * @return {google.maps.LatLngBounds} the cluster bounds. * @ignore */ Cluster.prototype.getBounds = function() { var i; var bounds = new google.maps.LatLngBounds(this.center_, this.center_); var markers = this.getMarkers(); for (i = 0; i < markers.length; i++) { bounds.extend(markers[i].getPosition()); } return bounds; }; /** * Removes the cluster from the map. * * @ignore */ Cluster.prototype.remove = function() { this.clusterIcon_.setMap(null); this.markers_ = []; delete this.markers_; }; /** * Adds a marker to the cluster. * * @param {google.maps.Marker} marker The marker to be added. * @return {boolean} True if the marker was added. * @ignore */ Cluster.prototype.addMarker = function(marker) { var i; var mCount; var mz; if (this.isMarkerAlreadyAdded_(marker)) { return false; } if (!this.center_) { this.center_ = marker.getPosition(); this.calculateBounds_(); } else { if (this.averageCenter_) { var l = this.markers_.length + 1; var lat = (this.center_.lat() * (l - 1) + marker.getPosition().lat()) / l; var lng = (this.center_.lng() * (l - 1) + marker.getPosition().lng()) / l; this.center_ = new google.maps.LatLng(lat, lng); this.calculateBounds_(); } } marker.isAdded = true; this.markers_.push(marker); mCount = this.markers_.length; mz = this.markerClusterer_.getMaxZoom(); if (mz !== null && this.map_.getZoom() > mz) { // Zoomed in past max zoom, so show the marker. if (marker.getMap() !== this.map_) { marker.setMap(this.map_); } } else if (mCount < this.minClusterSize_) { // Min cluster size not reached so show the marker. if (marker.getMap() !== this.map_) { marker.setMap(this.map_); } } else if (mCount === this.minClusterSize_) { // Hide the markers that were showing. for (i = 0; i < mCount; i++) { this.markers_[i].setMap(null); } } else { marker.setMap(null); } return true; }; /** * Determines if a marker lies within the cluster's bounds. * * @param {google.maps.Marker} marker The marker to check. * @return {boolean} True if the marker lies in the bounds. * @ignore */ Cluster.prototype.isMarkerInClusterBounds = function(marker) { return this.bounds_.contains(marker.getPosition()); }; /** * Calculates the extended bounds of the cluster with the grid. */ Cluster.prototype.calculateBounds_ = function() { var bounds = new google.maps.LatLngBounds(this.center_, this.center_); this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds); }; /** * Updates the cluster icon. */ Cluster.prototype.updateIcon_ = function() { var mCount = this.markers_.length; var mz = this.markerClusterer_.getMaxZoom(); if (mz !== null && this.map_.getZoom() > mz) { this.clusterIcon_.hide(); return; } if (mCount < this.minClusterSize_) { // Min cluster size not yet reached. this.clusterIcon_.hide(); return; } var numStyles = this.markerClusterer_.getStyles().length; var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles); this.clusterIcon_.setCenter(this.center_); this.clusterIcon_.useStyle(sums); this.clusterIcon_.show(); }; /** * Determines if a marker has already been added to the cluster. * * @param {google.maps.Marker} marker The marker to check. * @return {boolean} True if the marker has already been added. */ Cluster.prototype.isMarkerAlreadyAdded_ = function(marker) { for (var i = 0, n = this.markers_.length; i < n; i++) { if (marker === this.markers_[i]) { return true; } } return false; }; /** * @name MarkerClustererOptions * @class This class represents the optional parameter passed to * the {@link MarkerClusterer} constructor. * @property {number} [gridSize=60] The grid size of a cluster in pixels. The grid is a square. * @property {number} [maxZoom=null] The maximum zoom level at which clustering is enabled or * <code>null</code> if clustering is to be enabled at all zoom levels. * @property {boolean} [zoomOnClick=true] Whether to zoom the map when a cluster marker is * clicked. You may want to set this to <code>false</code> if you have installed a handler * for the <code>click</code> event and it deals with zooming on its own. * @property {boolean} [averageCenter=false] Whether the position of a cluster marker should be * the average position of all markers in the cluster. If set to <code>false</code>, the * cluster marker is positioned at the location of the first marker added to the cluster. * @property {number} [minimumClusterSize=2] The minimum number of markers needed in a cluster * before the markers are hidden and a cluster marker appears. * @property {boolean} [ignoreHidden=false] Whether to ignore hidden markers in clusters. You * may want to set this to <code>true</code> to ensure that hidden markers are not included * in the marker count that appears on a cluster marker (this count is the value of the * <code>text</code> property of the result returned by the default <code>calculator</code>). * If set to <code>true</code> and you change the visibility of a marker being clustered, be * sure to also call <code>MarkerClusterer.repaint()</code>. * @property {string} [title=""] The tooltip to display when the mouse moves over a cluster * marker. (Alternatively, you can use a custom <code>calculator</code> function to specify a * different tooltip for each cluster marker.) * @property {function} [calculator=MarkerClusterer.CALCULATOR] The function used to determine * the text to be displayed on a cluster marker and the index indicating which style to use * for the cluster marker. The input parameters for the function are (1) the array of markers * represented by a cluster marker and (2) the number of cluster icon styles. It returns a * {@link ClusterIconInfo} object. The default <code>calculator</code> returns a * <code>text</code> property which is the number of markers in the cluster and an * <code>index</code> property which is one higher than the lowest integer such that * <code>10^i</code> exceeds the number of markers in the cluster, or the size of the styles * array, whichever is less. The <code>styles</code> array element used has an index of * <code>index</code> minus 1. For example, the default <code>calculator</code> returns a * <code>text</code> value of <code>"125"</code> and an <code>index</code> of <code>3</code> * for a cluster icon representing 125 markers so the element used in the <code>styles</code> * array is <code>2</code>. A <code>calculator</code> may also return a <code>title</code> * property that contains the text of the tooltip to be used for the cluster marker. If * <code>title</code> is not defined, the tooltip is set to the value of the <code>title</code> * property for the MarkerClusterer. * @property {string} [clusterClass="cluster"] The name of the CSS class defining general styles * for the cluster markers. Use this class to define CSS styles that are not set up by the code * that processes the <code>styles</code> array. * @property {Array} [styles] An array of {@link ClusterIconStyle} elements defining the styles * of the cluster markers to be used. The element to be used to style a given cluster marker * is determined by the function defined by the <code>calculator</code> property. * The default is an array of {@link ClusterIconStyle} elements whose properties are derived * from the values for <code>imagePath</code>, <code>imageExtension</code>, and * <code>imageSizes</code>. * @property {boolean} [enableRetinaIcons=false] Whether to allow the use of cluster icons that * have sizes that are some multiple (typically double) of their actual display size. Icons such * as these look better when viewed on high-resolution monitors such as Apple's Retina displays. * Note: if this property is <code>true</code>, sprites cannot be used as cluster icons. * @property {number} [batchSize=MarkerClusterer.BATCH_SIZE] Set this property to the * number of markers to be processed in a single batch when using a browser other than * Internet Explorer (for Internet Explorer, use the batchSizeIE property instead). * @property {number} [batchSizeIE=MarkerClusterer.BATCH_SIZE_IE] When Internet Explorer is * being used, markers are processed in several batches with a small delay inserted between * each batch in an attempt to avoid Javascript timeout errors. Set this property to the * number of markers to be processed in a single batch; select as high a number as you can * without causing a timeout error in the browser. This number might need to be as low as 100 * if 15,000 markers are being managed, for example. * @property {string} [imagePath=MarkerClusterer.IMAGE_PATH] * The full URL of the root name of the group of image files to use for cluster icons. * The complete file name is of the form <code>imagePath</code>n.<code>imageExtension</code> * where n is the image file number (1, 2, etc.). * @property {string} [imageExtension=MarkerClusterer.IMAGE_EXTENSION] * The extension name for the cluster icon image files (e.g., <code>"png"</code> or * <code>"jpg"</code>). * @property {Array} [imageSizes=MarkerClusterer.IMAGE_SIZES] * An array of numbers containing the widths of the group of * <code>imagePath</code>n.<code>imageExtension</code> image files. * (The images are assumed to be square.) */ /** * Creates a MarkerClusterer object with the options specified in {@link MarkerClustererOptions}. * @constructor * @extends google.maps.OverlayView * @param {google.maps.Map} map The Google map to attach to. * @param {Array.<google.maps.Marker>} [opt_markers] The markers to be added to the cluster. * @param {MarkerClustererOptions} [opt_options] The optional parameters. */ function MarkerClusterer(map, opt_markers, opt_options) { // MarkerClusterer implements google.maps.OverlayView interface. We use the // extend function to extend MarkerClusterer with google.maps.OverlayView // because it might not always be available when the code is defined so we // look for it at the last possible moment. If it doesn't exist now then // there is no point going ahead :) this.extend(MarkerClusterer, google.maps.OverlayView); opt_markers = opt_markers || []; opt_options = opt_options || {}; this.markers_ = []; this.clusters_ = []; this.listeners_ = []; this.activeMap_ = null; this.ready_ = false; this.gridSize_ = opt_options.gridSize || 60; this.minClusterSize_ = opt_options.minimumClusterSize || 2; this.maxZoom_ = opt_options.maxZoom || null; this.styles_ = opt_options.styles || []; this.title_ = opt_options.title || ""; this.zoomOnClick_ = true; if (opt_options.zoomOnClick !== undefined) { this.zoomOnClick_ = opt_options.zoomOnClick; } this.averageCenter_ = false; if (opt_options.averageCenter !== undefined) { this.averageCenter_ = opt_options.averageCenter; } this.ignoreHidden_ = false; if (opt_options.ignoreHidden !== undefined) { this.ignoreHidden_ = opt_options.ignoreHidden; } this.enableRetinaIcons_ = false; if (opt_options.enableRetinaIcons !== undefined) { this.enableRetinaIcons_ = opt_options.enableRetinaIcons; } this.hideLabel_ = false; if (opt_options.hideLabel !== undefined) { this.hideLabel_ = opt_options.hideLabel; } this.imagePath_ = opt_options.imagePath || MarkerClusterer.IMAGE_PATH; this.imageExtension_ = opt_options.imageExtension || MarkerClusterer.IMAGE_EXTENSION; this.imageSizes_ = opt_options.imageSizes || MarkerClusterer.IMAGE_SIZES; this.calculator_ = opt_options.calculator || MarkerClusterer.CALCULATOR; this.batchSize_ = opt_options.batchSize || MarkerClusterer.BATCH_SIZE; this.batchSizeIE_ = opt_options.batchSizeIE || MarkerClusterer.BATCH_SIZE_IE; this.clusterClass_ = opt_options.clusterClass || "cluster"; if (navigator.userAgent.toLowerCase().indexOf("msie") !== -1) { // Try to avoid IE timeout when processing a huge number of markers: this.batchSize_ = this.batchSizeIE_; } this.setupStyles_(); this.addMarkers(opt_markers, true); this.setMap(map); // Note: this causes onAdd to be called } /** * Implementation of the onAdd interface method. * @ignore */ MarkerClusterer.prototype.onAdd = function() { var cMarkerClusterer = this; this.activeMap_ = this.getMap(); this.ready_ = true; this.repaint(); // Add the map event listeners this.listeners_ = [ google.maps.event.addListener(this.getMap(), "zoom_changed", function() { cMarkerClusterer.resetViewport_(false); // Workaround for this Google bug: when map is at level 0 and "-" of // zoom slider is clicked, a "zoom_changed" event is fired even though // the map doesn't zoom out any further. In this situation, no "idle" // event is triggered so the cluster markers that have been removed // do not get redrawn. Same goes for a zoom in at maxZoom. if (this.getZoom() === (this.get("minZoom") || 0) || this.getZoom() === this.get("maxZoom")) { google.maps.event.trigger(this, "idle"); } }), google.maps.event.addListener(this.getMap(), "idle", function() { cMarkerClusterer.redraw_(); }) ]; }; /** * Implementation of the onRemove interface method. * Removes map event listeners and all cluster icons from the DOM. * All managed markers are also put back on the map. * @ignore */ MarkerClusterer.prototype.onRemove = function() { var i; // Put all the managed markers back on the map: for (i = 0; i < this.markers_.length; i++) { if (this.markers_[i].getMap() !== this.activeMap_) { this.markers_[i].setMap(this.activeMap_); } } // Remove all clusters: for (i = 0; i < this.clusters_.length; i++) { this.clusters_[i].remove(); } this.clusters_ = []; // Remove map event listeners: for (i = 0; i < this.listeners_.length; i++) { google.maps.event.removeListener(this.listeners_[i]); } this.listeners_ = []; this.activeMap_ = null; this.ready_ = false; }; /** * Implementation of the draw interface method. * @ignore */ MarkerClusterer.prototype.draw = function() {}; /** * Sets up the styles object. */ MarkerClusterer.prototype.setupStyles_ = function() { var i, size; if (this.styles_.length > 0) { return; } for (i = 0; i < this.imageSizes_.length; i++) { size = this.imageSizes_[i]; this.styles_.push({ url: this.imagePath_ + (i + 1) + "." + this.imageExtension_, height: size, width: size }); } }; /** * Fits the map to the bounds of the markers managed by the clusterer. */ MarkerClusterer.prototype.fitMapToMarkers = function() { var i; var markers = this.getMarkers(); var bounds = new google.maps.LatLngBounds(); for (i = 0; i < markers.length; i++) { bounds.extend(markers[i].getPosition()); } this.getMap().fitBounds(bounds); }; /** * Returns the value of the <code>gridSize</code> property. * * @return {number} The grid size. */ MarkerClusterer.prototype.getGridSize = function() { return this.gridSize_; }; /** * Sets the value of the <code>gridSize</code> property. * * @param {number} gridSize The grid size. */ MarkerClusterer.prototype.setGridSize = function(gridSize) { this.gridSize_ = gridSize; }; /** * Returns the value of the <code>minimumClusterSize</code> property. * * @return {number} The minimum cluster size. */ MarkerClusterer.prototype.getMinimumClusterSize = function() { return this.minClusterSize_; }; /** * Sets the value of the <code>minimumClusterSize</code> property. * * @param {number} minimumClusterSize The minimum cluster size. */ MarkerClusterer.prototype.setMinimumClusterSize = function(minimumClusterSize) { this.minClusterSize_ = minimumClusterSize; }; /** * Returns the value of the <code>maxZoom</code> property. * * @return {number} The maximum zoom level. */ MarkerClusterer.prototype.getMaxZoom = function() { return this.maxZoom_; }; /** * Sets the value of the <code>maxZoom</code> property. * * @param {number} maxZoom The maximum zoom level. */ MarkerClusterer.prototype.setMaxZoom = function(maxZoom) { this.maxZoom_ = maxZoom; }; /** * Returns the value of the <code>styles</code> property. * * @return {Array} The array of styles defining the cluster markers to be used. */ MarkerClusterer.prototype.getStyles = function() { return this.styles_; }; /** * Sets the value of the <code>styles</code> property. * * @param {Array.<ClusterIconStyle>} styles The array of styles to use. */ MarkerClusterer.prototype.setStyles = function(styles) { this.styles_ = styles; }; /** * Returns the value of the <code>title</code> property. * * @return {string} The content of the title text. */ MarkerClusterer.prototype.getTitle = function() { return this.title_; }; /** * Sets the value of the <code>title</code> property. * * @param {string} title The value of the title property. */ MarkerClusterer.prototype.setTitle = function(title) { this.title_ = title; }; /** * Returns the value of the <code>zoomOnClick</code> property. * * @return {boolean} True if zoomOnClick property is set. */ MarkerClusterer.prototype.getZoomOnClick = function() { return this.zoomOnClick_; }; /** * Sets the value of the <code>zoomOnClick</code> property. * * @param {boolean} zoomOnClick The value of the zoomOnClick property. */ MarkerClusterer.prototype.setZoomOnClick = function(zoomOnClick) { this.zoomOnClick_ = zoomOnClick; }; /** * Returns the value of the <code>averageCenter</code> property. * * @return {boolean} True if averageCenter property is set. */ MarkerClusterer.prototype.getAverageCenter = function() { return this.averageCenter_; }; /** * Sets the value of the <code>averageCenter</code> property. * * @param {boolean} averageCenter The value of the averageCenter property. */ MarkerClusterer.prototype.setAverageCenter = function(averageCenter) { this.averageCenter_ = averageCenter; }; /** * Returns the value of the <code>ignoreHidden</code> property. * * @return {boolean} True if ignoreHidden property is set. */ MarkerClusterer.prototype.getIgnoreHidden = function() { return this.ignoreHidden_; }; /** * Sets the value of the <code>ignoreHidden</code> property. * * @param {boolean} ignoreHidden The value of the ignoreHidden property. */ MarkerClusterer.prototype.setIgnoreHidden = function(ignoreHidden) { this.ignoreHidden_ = ignoreHidden; }; /** * Returns the value of the <code>enableRetinaIcons</code> property. * * @return {boolean} True if enableRetinaIcons property is set. */ MarkerClusterer.prototype.getEnableRetinaIcons = function() { return this.enableRetinaIcons_; }; /** * Sets the value of the <code>enableRetinaIcons</code> property. * * @param {boolean} enableRetinaIcons The value of the enableRetinaIcons property. */ MarkerClusterer.prototype.setEnableRetinaIcons = function(enableRetinaIcons) { this.enableRetinaIcons_ = enableRetinaIcons; }; /** * Returns the value of the <code>imageExtension</code> property. * * @return {string} The value of the imageExtension property. */ MarkerClusterer.prototype.getImageExtension = function() { return this.imageExtension_; }; /** * Sets the value of the <code>imageExtension</code> property. * * @param {string} imageExtension The value of the imageExtension property. */ MarkerClusterer.prototype.setImageExtension = function(imageExtension) { this.imageExtension_ = imageExtension; }; /** * Returns the value of the <code>imagePath</code> property. * * @return {string} The value of the imagePath property. */ MarkerClusterer.prototype.getImagePath = function() { return this.imagePath_; }; /** * Sets the value of the <code>imagePath</code> property. * * @param {string} imagePath The value of the imagePath property. */ MarkerClusterer.prototype.setImagePath = function(imagePath) { this.imagePath_ = imagePath; }; /** * Returns the value of the <code>imageSizes</code> property. * * @return {Array} The value of the imageSizes property. */ MarkerClusterer.prototype.getImageSizes = function() { return this.imageSizes_; }; /** * Sets the value of the <code>imageSizes</code> property. * * @param {Array} imageSizes The value of the imageSizes property. */ MarkerClusterer.prototype.setImageSizes = function(imageSizes) { this.imageSizes_ = imageSizes; }; /** * Returns the value of the <code>calculator</code> property. * * @return {function} the value of the calculator property. */ MarkerClusterer.prototype.getCalculator = function() { return this.calculator_; }; /** * Sets the value of the <code>calculator</code> property. * * @param {function(Array.<google.maps.Marker>, number)} calculator The value * of the calculator property. */ MarkerClusterer.prototype.setCalculator = function(calculator) { this.calculator_ = calculator; }; /** * Sets the value of the <code>hideLabel</code> property. * * @param {boolean} printable The value of the hideLabel property. */ MarkerClusterer.prototype.setHideLabel = function(hideLabel) { this.hideLabel_ = hideLabel; }; /** * Returns the value of the <code>hideLabel</code> property. * * @return {boolean} the value of the hideLabel property. */ MarkerClusterer.prototype.getHideLabel = function() { return this.hideLabel_; }; /** * Returns the value of the <code>batchSizeIE</code> property. * * @return {number} the value of the batchSizeIE property. */ MarkerClusterer.prototype.getBatchSizeIE = function() { return this.batchSizeIE_; }; /** * Sets the value of the <code>batchSizeIE</code> property. * * @param {number} batchSizeIE The value of the batchSizeIE property. */ MarkerClusterer.prototype.setBatchSizeIE = function(batchSizeIE) { this.batchSizeIE_ = batchSizeIE; }; /** * Returns the value of the <code>clusterClass</code> property. * * @return {string} the value of the clusterClass property. */ MarkerClusterer.prototype.getClusterClass = function() { return this.clusterClass_; }; /** * Sets the value of the <code>clusterClass</code> property. * * @param {string} clusterClass The value of the clusterClass property. */ MarkerClusterer.prototype.setClusterClass = function(clusterClass) { this.clusterClass_ = clusterClass; }; /** * Returns the array of markers managed by the clusterer. * * @return {Array} The array of markers managed by the clusterer. */ MarkerClusterer.prototype.getMarkers = function() { return this.markers_; }; /** * Returns the number of markers managed by the clusterer. * * @return {number} The number of markers. */ MarkerClusterer.prototype.getTotalMarkers = function() { return this.markers_.length; }; /** * Returns the current array of clusters formed by the clusterer. * * @return {Array} The array of clusters formed by the clusterer. */ MarkerClusterer.prototype.getClusters = function() { return this.clusters_; }; /** * Returns the number of clusters formed by the clusterer. * * @return {number} The number of clusters formed by the clusterer. */ MarkerClusterer.prototype.getTotalClusters = function() { return this.clusters_.length; }; /** * Adds a marker to the clusterer. The clusters are redrawn unless * <code>opt_nodraw</code> is set to <code>true</code>. * * @param {google.maps.Marker} marker The marker to add. * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing. */ MarkerClusterer.prototype.addMarker = function(marker, opt_nodraw) { this.pushMarkerTo_(marker); if (!opt_nodraw) { this.redraw_(); } }; /** * Adds an array of markers to the clusterer. The clusters are redrawn unless * <code>opt_nodraw</code> is set to <code>true</code>. * * @param {Array.<google.maps.Marker>} markers The markers to add. * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing. */ MarkerClusterer.prototype.addMarkers = function(markers, opt_nodraw) { var key; for (key in markers) { if (markers.hasOwnProperty(key)) { this.pushMarkerTo_(markers[key]); } } if (!opt_nodraw) { this.redraw_(); } }; /** * Pushes a marker to the clusterer. * * @param {google.maps.Marker} marker The marker to add. */ MarkerClusterer.prototype.pushMarkerTo_ = function(marker) { // If the marker is draggable add a listener so we can update the clusters on the dragend: // if (marker.getDraggable()) { // var cMarkerClusterer = this; // google.maps.event.addListener(marker, "dragend", function() { // if (cMarkerClusterer.ready_) { // this.isAdded = false; // cMarkerClusterer.repaint(); // } // }); // } marker.isAdded = false; this.markers_.push(marker); }; /** * Removes a marker from the cluster and map. The clusters are redrawn unless * <code>opt_nodraw</code> is set to <code>true</code>. Returns <code>true</code> if the * marker was removed from the clusterer. * * @param {google.maps.Marker} marker The marker to remove. * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing. * @param {boolean} [opt_noMapRemove] Set to <code>true</code> to prevent removal from map but still removing from cluster management * @return {boolean} True if the marker was removed from the clusterer. */ MarkerClusterer.prototype.removeMarker = function(marker, opt_nodraw, opt_noMapRemove) { var removeFromMap = true && !opt_noMapRemove; var removed = this.removeMarker_(marker, removeFromMap); if (!opt_nodraw && removed) { this.repaint(); } return removed; }; /** * Removes an array of markers from the cluster and map. The clusters are redrawn unless * <code>opt_nodraw</code> is set to <code>true</code>. Returns <code>true</code> if markers * were removed from the clusterer. * * @param {Array.<google.maps.Marker>} markers The markers to remove. * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing. * @param {boolean} [opt_noMapRemove] Set to <code>true</code> to prevent removal from map but still removing from cluster management * @return {boolean} True if markers were removed from the clusterer. */ MarkerClusterer.prototype.removeMarkers = function(markers, opt_nodraw, opt_noMapRemove) { var i, r; var removed = false; var removeFromMap = true && !opt_noMapRemove; for (i = 0; i < markers.length; i++) { r = this.removeMarker_(markers[i], removeFromMap); removed = removed || r; } if (!opt_nodraw && removed) { this.repaint(); } return removed; }; /** * Removes a marker and returns true if removed, false if not. * * @param {google.maps.Marker} marker The marker to remove * @param {boolean} removeFromMap set to <code>true</code> to explicitly remove from map as well as cluster manangement * @return {boolean} Whether the marker was removed or not */ MarkerClusterer.prototype.removeMarker_ = function(marker, removeFromMap) { var i; var index = -1; if (this.markers_.indexOf) { index = this.markers_.indexOf(marker); } else { for (i = 0; i < this.markers_.length; i++) { if (marker === this.markers_[i]) { index = i; break; } } } if (index === -1) { // Marker is not in our list of markers, so do nothing: return false; } if (removeFromMap) { marker.setMap(null); } this.markers_.splice(index, 1); // Remove the marker from the list of managed markers return true; }; /** * Removes all clusters and markers from the map and also removes all markers * managed by the clusterer. */ MarkerClusterer.prototype.clearMarkers = function() { this.resetViewport_(true); this.markers_ = []; }; /** * Recalculates and redraws all the marker clusters from scratch. * Call this after changing any properties. */ MarkerClusterer.prototype.repaint = function() { var oldClusters = this.clusters_.slice(); this.clusters_ = []; this.resetViewport_(false); this.redraw_(); // Remove the old clusters. // Do it in a timeout to prevent blinking effect. setTimeout(function() { var i; for (i = 0; i < oldClusters.length; i++) { oldClusters[i].remove(); } }, 0); }; /** * Returns the current bounds extended by the grid size. * * @param {google.maps.LatLngBounds} bounds The bounds to extend. * @return {google.maps.LatLngBounds} The extended bounds. * @ignore */ MarkerClusterer.prototype.getExtendedBounds = function(bounds) { var projection = this.getProjection(); // Turn the bounds into latlng. var tr = new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng()); var bl = new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng()); // Convert the points to pixels and the extend out by the grid size. var trPix = projection.fromLatLngToDivPixel(tr); trPix.x += this.gridSize_; trPix.y -= this.gridSize_; var blPix = projection.fromLatLngToDivPixel(bl); blPix.x -= this.gridSize_; blPix.y += this.gridSize_; // Convert the pixel points back to LatLng var ne = projection.fromDivPixelToLatLng(trPix); var sw = projection.fromDivPixelToLatLng(blPix); // Extend the bounds to contain the new bounds. bounds.extend(ne); bounds.extend(sw); return bounds; }; /** * Redraws all the clusters. */ MarkerClusterer.prototype.redraw_ = function() { this.createClusters_(0); }; /** * Removes all clusters from the map. The markers are also removed from the map * if <code>opt_hide</code> is set to <code>true</code>. * * @param {boolean} [opt_hide] Set to <code>true</code> to also remove the markers * from the map. */ MarkerClusterer.prototype.resetViewport_ = function(opt_hide) { var i, marker; // Remove all the clusters for (i = 0; i < this.clusters_.length; i++) { this.clusters_[i].remove(); } this.clusters_ = []; // Reset the markers to not be added and to be removed from the map. for (i = 0; i < this.markers_.length; i++) { marker = this.markers_[i]; marker.isAdded = false; if (opt_hide) { marker.setMap(null); } } }; /** * Calculates the distance between two latlng locations in km. * * @param {google.maps.LatLng} p1 The first lat lng point. * @param {google.maps.LatLng} p2 The second lat lng point. * @return {number} The distance between the two points in km. * @see http://www.movable-type.co.uk/scripts/latlong.html */ MarkerClusterer.prototype.distanceBetweenPoints_ = function(p1, p2) { var R = 6371; // Radius of the Earth in km var dLat = (p2.lat() - p1.lat()) * Math.PI / 180; var dLon = (p2.lng() - p1.lng()) * Math.PI / 180; var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); var d = R * c; return d; }; /** * Determines if a marker is contained in a bounds. * * @param {google.maps.Marker} marker The marker to check. * @param {google.maps.LatLngBounds} bounds The bounds to check against. * @return {boolean} True if the marker is in the bounds. */ MarkerClusterer.prototype.isMarkerInBounds_ = function(marker, bounds) { var northEast = bounds.getNorthEast(); var southWest = bounds.getSouthWest(); var position = marker.getPosition(); var minX, maxX, minY, maxY; minX = southWest.lat(); maxX = northEast.lat(); minY = southWest.lng(); maxY = northEast.lng(); while (0 > maxY) maxY += 180; maxY += 180; // bounds[this.a].g = maxY;? what for if (minX < position.lat() && position.lat() < maxX && minY < position.lng() && position.lng() < maxY) { return true; } return false; }; /** * Adds a marker to a cluster, or creates a new cluster. * * @param {google.maps.Marker} marker The marker to add. */ MarkerClusterer.prototype.addToClosestCluster_ = function(marker) { var i, d, cluster, center; var distance = 40000; // Some large number var clusterToAddTo = null; for (i = 0; i < this.clusters_.length; i++) { cluster = this.clusters_[i]; center = cluster.getCenter(); if (center) { d = this.distanceBetweenPoints_(center, marker.getPosition()); if (d < distance) { distance = d; clusterToAddTo = cluster; } } } if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) { clusterToAddTo.addMarker(marker); } else { cluster = new Cluster(this); cluster.addMarker(marker); this.clusters_.push(cluster); } }; /** * Creates the clusters. This is done in batches to avoid timeout errors * in some browsers when there is a huge number of markers. * * @param {number} iFirst The index of the first marker in the batch of * markers to be added to clusters. */ MarkerClusterer.prototype.createClusters_ = function(iFirst) { var i, marker; var mapBounds; var cMarkerClusterer = this; if (!this.ready_) { return; } // Cancel previous batch processing if we're working on the first batch: if (iFirst === 0) { /** * This event is fired when the <code>MarkerClusterer</code> begins * clustering markers. * @name MarkerClusterer#clusteringbegin * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered. * @event */ google.maps.event.trigger(this, "clusteringbegin", this); if (typeof this.timerRefStatic !== "undefined") { clearTimeout(this.timerRefStatic); delete this.timerRefStatic; } } // Get our current map view bounds. // Create a new bounds object so we don't affect the map. // // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug: if (this.getMap().getZoom() > 3) { mapBounds = new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(), this.getMap().getBounds().getNorthEast()); } else { mapBounds = new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472, -178.48388434375), new google.maps.LatLng(-85.08136444384544, 178.00048865625)); } var bounds = this.getExtendedBounds(mapBounds); // console.log(bounds); var iLast = Math.min(iFirst + this.batchSize_, this.markers_.length); for (i = iFirst; i < iLast; i++) { this.markers_[i]; if (this.markers_.isFilter === true) { if (this.markers_[i].isFilter === undefined) { if (this.markers_[i].setMap !== undefined) this.markers_[i].setMap(null); continue; } } if (!this.markers_[i].isAdded && this.isMarkerInBounds_(this.markers_[i], bounds)) { if (!this.ignoreHidden_ || (this.ignoreHidden_ && this.markers_[i].getVisible())) { if (this.markers_[i].getMap === undefined) this.markers_[i] = this.addOrtherMarker(this.markers_[i]); this.addToClosestCluster_(this.markers_[i]); } } } if (iLast < this.markers_.length) { this.timerRefStatic = setTimeout(function() { cMarkerClusterer.createClusters_(iLast); }, 0); } else { delete this.timerRefStatic; /** * This event is fired when the <code>MarkerClusterer</code> stops * clustering markers. * @name MarkerClusterer#clusteringend * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered. * @event */ google.maps.event.trigger(this, "clusteringend", this); for (i = 0; i < this.clusters_.length; i++) { this.clusters_[i].updateIcon_(); } } }; MarkerClusterer.prototype.addOrtherMarker = function(data) { var self = this; var position = [data.lat, data.lng]; var color, tooltip; if (typeof testVariable !== "undefined") color = systemconfig.markerColor; if (data.color) color = data.color; if (data.tooltip) tooltip = data.tooltip; var image = { path: "M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z", // This marker is 20 pixels wide by 32 pixels high. scaledSize: new google.maps.Size(24, 24), // The origin for this image is (0, 0). origin: new google.maps.Point(0, 0), // The anchor for this image is the base of the flagpole at (0, 32). anchor: new google.maps.Point(12, 12), fillColor: color, fillOpacity: 1, strokeColor: "white", strokeWeight: 4 }; var marker = new google.maps.Marker({ position: new google.maps.LatLng(position[0], position[1]), draggable: false, icon: image, zIndex: 2 }); if (tooltip) { var style = { maxWidth: 350 } var content = ""; if (typeof tooltip == "object") { if (tooltip.style) style = tooltip.style; if (tooltip.element) content = tooltip.element; } else content = tooltip; var infowindow = new google.maps.InfoWindow(style); google.maps.event.addListener(marker, 'mouseover', function() { infowindow.setContent(content); infowindow.open(self.map_, marker); }); google.maps.event.addListener(marker, 'mouseout', function(event) { infowindow.close(); }); } marker.dataMarker = data; marker.isFilter = data.isFilter; return marker; } /** * Extends an object's prototype by another's. * * @param {Object} obj1 The object to be extended. * @param {Object} obj2 The object to extend with. * @return {Object} The new extended object. * @ignore */ MarkerClusterer.prototype.extend = function(obj1, obj2) { return (function(object) { var property; for (property in object.prototype) { this.prototype[property] = object.prototype[property]; } return this; }).apply(obj1, [obj2]); }; /** * The default function for determining the label text and style * for a cluster icon. * * @param {Array.<google.maps.Marker>} markers The array of markers represented by the cluster. * @param {number} numStyles The number of marker styles available. * @return {ClusterIconInfo} The information resource for the cluster. * @constant * @ignore */ MarkerClusterer.CALCULATOR = function(markers, numStyles) { var index = 0; var title = ""; var count = markers.length.toString(); var dv = count; while (dv !== 0) { dv = parseInt(dv / 10, 10); index++; } index = Math.min(index, numStyles); return { text: count, index: index, title: title }; }; /** * The number of markers to process in one batch. * * @type {number} * @constant */ MarkerClusterer.BATCH_SIZE = 2000; /** * The number of markers to process in one batch (IE only). * * @type {number} * @constant */ MarkerClusterer.BATCH_SIZE_IE = 500; /** * The default root name for the marker cluster images. * * @type {string} * @constant */ MarkerClusterer.IMAGE_PATH = "//cdn.rawgit.com/mahnunchik/markerclustererplus/master/images/m"; /** * The default extension name for the marker cluster images. * * @type {string} * @constant */ MarkerClusterer.IMAGE_EXTENSION = "png"; /** * The default array of sizes for the marker cluster images. * * @type {Array.<number>} * @constant */ MarkerClusterer.IMAGE_SIZES = [53, 56, 66, 78, 90]; if (typeof String.prototype.trim !== 'function') { /** * IE hack since trim() doesn't exist in all browsers * @return {string} The string with removed whitespace */ String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }; } window.MarkerClusterer = MarkerClusterer; /* harmony default export */ var js_MarkerClusterer = (MarkerClusterer); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/LocationView.js var MARKER_RADIUS = 10; var MARKER_BORDER_COLOR = '#4945C8'; function generateColor(id) { id = id + ''; var rgb = [0, 0, 0]; var res; var white = Color_Color.parse('white'); var c = 100; while (c--) { for (var i = 0; i < id.length; ++i) { rgb[i % 3] = (rgb[i % 3] * 31 + id.charCodeAt(i) * 173) % 255; } res = new Color_Color([rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, 1]); if (res.getContrastWith(white) > 2 && rgb[0] + rgb[1] + rgb[2] > 50) { break; } } return res; } // https://lab.daithangminh.vn/home_co/carddone/markerclusterer.js var loadMarkerClustererSync = null; var lastOpenInfo = null; /*** * * @param {LocationView} viewerElt * @param {Object} data * @constructor */ function LVPolyline(viewerElt, data) { this.viewerElt = viewerElt; this.map = viewerElt.map; this._polylines = []; this.id = data.id || randomIdent(12); this.polylineData = { geodesic: true, strokeColor: data.color || generateColor(this.id).toString('hex6'), strokeOpacity: 1.0, strokeWeight: 2, }; this.polylineData.path = data.path.map(function (crd) { return implicitLatLng(crd); }); this.polylineHL = new google.maps.Polyline(Object.assign({}, this.polylineData, { strokeColor: 'white', strokeWeight: 5 })); this.polyline = new google.maps.Polyline(this.polylineData); this.markers = this.polylineData.path.map(function (crd, i) { var mkr = new google.maps.Marker({ position: crd, // sName: data.name || data.id || this.id, map: this.map, icon: { path: google.maps.SymbolPath.CIRCLE, scale: MARKER_RADIUS, fillColor: this.polylineData.strokeColor, fillOpacity: 1, strokeWeight: 2, strokeColor: MARKER_BORDER_COLOR }, }); mkr.setMap(this.map); var infoWindow; if (data.path[i] && data.path[i].info) { infoWindow = new google.maps.InfoWindow(data.path[i].info); mkr.addListener('mouseover', function () { if (lastOpenInfo === infoWindow) return; try { if (lastOpenInfo) lastOpenInfo.close(); } catch (e) { } lastOpenInfo = infoWindow; infoWindow.open({ anchor: mkr, map: this.map, shouldFocus: true }); }.bind(this)) } return mkr; }.bind(this)); this.showRoute = viewerElt.showPolylineRoute; } LVPolyline.prototype.remove = function () { this.polyline.setMap(null); this.polylineHL.setMap(null); this.markers.forEach(function (mk) { mk.setMap(null); }) }; Object.defineProperty(LVPolyline.prototype, 'showRoute', { set: function (value) { this._showRoute = !!value; if (value) { this.polylineHL.setMap(this.map); this.polyline.setMap(this.map); } else { this.polylineHL.setMap(null); this.polyline.setMap(null); } }, get: function () { return this._showRoute; } }); Object.defineProperty(LVPolyline.prototype, 'color', { get: function () { return this.polylineData.strokeColor; } }); Object.defineProperty(LVPolyline.prototype, 'sumDistance', { get: function () { var res = 0; var path = this.polylineData.path; for (var i = 1; i < path.length; ++i) { res += latLngDistance(path[i - 1], path[i]); } return res; } }); function LVPoints(viewerElt, data) { this.data = data; this.refData = [data]; this.id = data.id || randomIdent(12); this.latLng = implicitLatLng(data); if (!this.latLng) { console.error('Invalid data', data); return; } this.map = viewerElt.map; this.marker = new google.maps.Marker({ position: this.latLng, // sName: data.name || data.id || this.id, // map: this.map, icon: { path: google.maps.SymbolPath.CIRCLE, scale: MARKER_RADIUS, fillColor: data.color || generateColor(this.id).toString(), fillOpacity: 1, strokeWeight: 2, strokeColor: MARKER_BORDER_COLOR }, }); // this.marker.setMap(this.map); if (!data.info) return; var infoWindow = new google.maps.InfoWindow(data.info); this.marker.addListener('mouseover', function () { if (lastOpenInfo === infoWindow) return; try { if (lastOpenInfo) lastOpenInfo.close(); } catch (e) { } lastOpenInfo = infoWindow; infoWindow.open({ anchor: this.marker, map: this.map, shouldFocus: true }); }.bind(this)) } LVPoints.prototype.remove = function () { if (this.marker) this.marker.setMap(null); } /*** * @extends AElement * @constructor */ function LocationView() { this.map = new google.maps.Map(this, { zoom: 8, center: new google.maps.LatLng(21.018755, 105.839729), scaleControl: true }); this.marker = null; this._value = null; this.$domSignal = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](this.$domSignal); /*** * @type {LatLng} * @name value * @memberOf LocationView# */ /**** * * @type {LVPolyline[]} */ this.$polylines = []; this._showPolylineRoute = true; /**** * * @type {LVPoints[]} */ this.$points = []; } LocationView.tag = 'LocationView'.toLowerCase(); LocationView.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-location-view' }); }; LocationView.prototype.getPolylineById = function (id) { return this.$polylines.find(function (pll) { return pll.id === id; }) || null; }; LocationView.prototype.getPolylines = function () { return this.$polylines.slice(); }; LocationView.property = {}; LocationView.property.zoom = { set: function (value) { if (!isRealNumber(value)) { value = 1; } this.map.setZoom(value); }, get: function () { return this.map.getZoom(); } }; LocationView.property.value = { set: function (value) { value = value || null; var latlng = implicitLatLng(value); latlng = latlng || new google.maps.LatLng(21.018755, 105.839729); this.map.setCenter(latlng || new google.maps.LatLng(21.018755, 105.839729)); this._value = value; if (this.marker) { this.marker.setMap(null); this.marker = null; } if (latlng && value) { this.marker = new google.maps.Marker({ map: this.map, position: latlng, }); } }, get: function () { return this._value; } }; LocationView.property.polylines = { set: function (polylines) { this._polylines = polylines || []; this.$polylines.forEach(function (pll) { pll.remove(); }); this.$polylines = polylines.map(function (pll) { return new LVPolyline(this, pll); }.bind(this)); var zoom; var center; var points = this.$polylines.reduce(function (ac, $polyline) { return ac.concat($polyline.polylineData.path); }, []); var bounds = points.reduce(function (ac, cr) { ac.extend(cr); return ac; }, new google.maps.LatLngBounds()); this.domSignal.once('update_view', function () { if (points.length > 1) { zoom = getMapZoomLevel(this.getBoundingClientRect(), bounds); center = bounds.getCenter(); } else { zoom = 17; center = points[0] || new google.maps.LatLng(21.018755, 105.839729); } zoom = Math.min(zoom, 17); this.map.setZoom(zoom); this.map.setCenter(center); }.bind(this), 100); this.domSignal.emit('update_view'); }, get: function () { return this._polylines; } }; LocationView.property.showPolylineRoute = { set: function (value) { this._showPolylineRoute = !!value; this.$polylines.forEach(function (pll) { pll.showRoute = value; }) }, get: function () { return this._showPolylineRoute; } }; LocationView.property.points = { set: function (points) { this.$points.forEach(function (point) { point.remove(); }); this._points = points || []; var rp = this._points.reduce(function (ac, pointData) { var id = pointData.id; var point; if (id && ac.dict[id]) { ac.dict[id].refData.push(pointData); } else { point = new LVPoints(this, pointData); ac.dict[point.id] = point; ac.arr.push(point); } return ac; }.bind(this), { arr: [], dict: {} }); this.$points = rp.arr; var zoom; var center; var latLngs = this.$points.map(function (p) { return p.latLng; }, []).filter(function (x) { return !!x; }); var bounds = latLngs.reduce(function (ac, cr) { ac.extend(cr); return ac; }, new google.maps.LatLngBounds()); var markers = this.$points.map(function (p) { return p.marker; }, []).filter(function (x) { return !!x; }); this.pointsCluster = new js_MarkerClusterer(this.map, markers, { imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m' }); this.domSignal.once('update_view', function () { if (points.length > 1) { zoom = getMapZoomLevel(this.getBoundingClientRect(), bounds); center = bounds.getCenter(); } else { zoom = 17; center = points[0] || new google.maps.LatLng(21.018755, 105.839729); } zoom = Math.min(zoom, 17); this.map.setZoom(zoom); this.map.setCenter(center); }.bind(this), 100); this.domSignal.emit('update_view'); }, get: function () { return this._points; } } ACore["d" /* default */].install(LocationView); /* harmony default export */ var js_LocationView = (LocationView); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/adapter/PlaceSearchAutoCompleteAdapter.js /*** * * @param {PlaceSearchAutoCompleteInput} inputElt * @constructor */ function PlaceSearchAutoCompleteAdapter(inputElt) { this.inputElt = inputElt; this.service = new google.maps.places.AutocompleteService(this.inputElt.$service); } PlaceSearchAutoCompleteAdapter.prototype.queryItems = function (query, mInput) { var request = { input: query, }; return new Promise(function (resolve) { this.service.getPlacePredictions(request, function (results, status) { if (status === google.maps.places.PlacesServiceStatus.OK) { resolve(results); } else resolve([]); }); }.bind(this)); }; PlaceSearchAutoCompleteAdapter.prototype.getItemText = function (item, mInput) { return item.description; }; PlaceSearchAutoCompleteAdapter.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent, mInput) { return _({ class: 'as-place-search-auto-complete-item', child: [ { class: 'as-place-search-auto-complete-item-desc', child: { text: item.description } } ] }) }; /* harmony default export */ var adapter_PlaceSearchAutoCompleteAdapter = (PlaceSearchAutoCompleteAdapter); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/placesearchautocomplete.css var placesearchautocomplete = __webpack_require__(287); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/PlaceSearchAutoCompleteInput.js /*** * @extends AutoCompleteInput * @constructor */ function PlaceSearchAutoCompleteInput() { this.$service = Object(ACore["c" /* _ */])('.as-place-search-auto-complete-input-service'); this.insertBefore(this.$service, null); this.adapter = new adapter_PlaceSearchAutoCompleteAdapter(this); } PlaceSearchAutoCompleteInput.tag = 'PlaceSearchAutoCompleteInput'.toLowerCase(); PlaceSearchAutoCompleteInput.render = function () { return Object(ACore["c" /* _ */])({ tag: js_AutoCompleteInput.tag }, true); } ACore["d" /* default */].install(PlaceSearchAutoCompleteInput); /* harmony default export */ var js_PlaceSearchAutoCompleteInput = (PlaceSearchAutoCompleteInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/locationinput.css var locationinput = __webpack_require__(55); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/LocationPicker.js ///https://developers.google.com/maps/documentation/javascript/examples/geocoding-place-id /*** * @extends AElement * @constructor */ function LocationPicker() { if (BrowserDetector["a" /* default */].isMobile) { this.addClass('as-mobile'); } this.map = new google.maps.Map(this, { zoom: 8, scaleControl: true, center: new google.maps.LatLng(21.018755, 105.839729), streetViewControl: false, fullscreenControl: false, mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.TOP_RIGHT, } }); this.map.setOptions({ draggableCursor: 'default' }); this.map.addListener('click', this.eventHandler.clickMap); this.geocoder = new google.maps.Geocoder(); this.infoWindow = new google.maps.InfoWindow(); window.map = this.map; this.$myLocationBtn = Object(ACore["c" /* _ */])({ tag: 'button', class: 'as-location-picker-control-btn', child: 'span.mdi.mdi-crosshairs-gps', on: { click: this.selectMyLocation.bind(this) } }); this.$rightBottomCtn = Object(ACore["c" /* _ */])({ class: 'as-location-picker-control-ctn', child: [this.$myLocationBtn], style: { overflow: 'hidden' } }); this.$searchInput = Object(ACore["c" /* _ */])({ tag: js_AutoCompleteInput.tag, class: 'as-location-picker-search-input', props: { adapter: this }, child: { class: 'as-location-picker-search-input-search-icon-ctn', child: 'span.mdi.mdi-magnify', on: { click: this.eventHandler.search } }, on: { change: this.eventHandler.searchChange } }); this.$searchInput.$input.on('keydown', this.eventHandler.searchKeypress) this.$topLeftCtn = Object(ACore["c" /* _ */])({ class: ['as-location-picker-control-ctn', 'as-top'], child: [ this.$searchInput ] }); this.$okBtn = Object(ACore["c" /* _ */])({ tag: js_FlexiconButton.tag, class: 'primary', props: { text: 'OK', disabled: true }, on: { click: this.eventHandler.clickAction.bind(this, 'OK') } } ); this.$cancelBtn = Object(ACore["c" /* _ */])({ tag: js_FlexiconButton.tag, class: ['as-location-picker-cancel-btn', 'secondary'], props: { text: 'CANCEL' }, on: { click: this.eventHandler.clickAction.bind(this, 'CANCEL') } } ); this.$bottomLeftCtn = Object(ACore["c" /* _ */])({ class: ['as-location-picker-control-ctn', 'as-transparent', 'as-bottom'], style: { paddingBottom: '5px' }, child: [this.$okBtn, this.$cancelBtn] }); this.map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(this.$rightBottomCtn); this.map.controls[google.maps.ControlPosition.TOP_LEFT].push(this.$topLeftCtn); this.map.controls[google.maps.ControlPosition.BOTTOM_LEFT].push(this.$bottomLeftCtn); this.autoCompleteService = new google.maps.places.AutocompleteService(this.map, { fields: ["place_id", "geometry", "name", "formatted_address"] }); this.placeService = new google.maps.places.PlacesService(this.map); this.selectedMarker = null; this.searchingMarkers = []; this.myLocationMarker = null; /*** * @type {LatLng} * @name value * @memberOf LocationPicker# */ /*** * @type {boolean} * @name readOnly * @memberOf LocationPicker# */ } LocationPicker.tag = 'LocationPicker'.toLowerCase(); LocationPicker.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-location-picker', extendEvent: ['action', 'location', 'requestlocation', 'error'] }); }; LocationPicker.prototype.queryItems = function (query) { var request = { input: query, bounds: this.map.getBounds() }; return new Promise(function (resolve) { this.autoCompleteService.getPlacePredictions(request, function (results, status) { if (status === google.maps.places.PlacesServiceStatus.OK) { resolve(results); } else resolve([]); }); }.bind(this)); }; LocationPicker.prototype.getItemText = function (item, mInput) { return item.description; }; LocationPicker.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent, mInput) { return _({ class: 'as-place-search-auto-complete-item', child: [ { class: 'as-place-search-auto-complete-item-desc', child: { text: item.description } } ] }); }; LocationPicker.prototype.getBoundsZoomLevel = function (bounds) { var mapDim = this.getBoundingClientRect(); return getMapZoomLevel(mapDim, bounds); } LocationPicker.prototype.clearSearchingMarkers = function () { while (this.searchingMarkers.length > 0) { this.searchingMarkers.pop().setMap(null); } }; /** * * @param place * @param {boolean=} panTo */ LocationPicker.prototype.selectPlace = function (place, panTo) { if (arguments.length === 1) panTo = true; this.selectedPlace = place || null; if (this.selectedMarker) { this.selectedMarker.setMap(null); } this.$okBtn.disabled = !this.selectedPlace; if (!place) return; var latLng = place.geometry && place.geometry.location; if (!latLng) return; var zoom = panTo && (place.geometry.bounds || place.geometry.viewport) ? this.getBoundsZoomLevel(place.geometry.bounds || place.geometry.viewport) : 18; if (panTo) { this.map.setZoom(zoom); setTimeout(() => { this.map.panTo(latLng); }, 100) } this.selectedMarker = new google.maps.Marker({ map: this.map, position: latLng }); this.infoWindow.setContent((place.name ? place.name + ' - ' : '') + place.formatted_address); this.infoWindow.open(this.map, this.selectedMarker); }; LocationPicker.prototype.showSearchPlaces = function (places) { this.clearSearchingMarkers(); if (!places || places.length === 0) return; if (places.length === 1) { this.selectPlace(places[0]); return; } var bounds = places.reduce(function (ac, place) { if (place.geometry && place.geometry.location) ac.extend(place.geometry.location); return ac; }, new google.maps.LatLngBounds()); var zoom = places.length === 1 ? ((places[0].geometry.bounds || places[0].geometry.viewport) ? this.getBoundsZoomLevel((places[0].geometry.bounds || places[0].geometry.viewport)) : 18) : this.getBoundsZoomLevel(bounds); var center = places.length === 1 ? places[0].geometry.location : bounds.getCenter(); this.map.setCenter(center); this.map.setZoom(zoom); places.reduce(function (ac, place, i) { var marker; if (place.geometry && place.geometry.location) { marker = new google.maps.Marker({ map: this.map, position: place.geometry.location, icon: 'https://raw.githubusercontent.com/Concept211/Google-Maps-Markers/master/images/marker_black.png' }); ac.push(marker); marker.addListener('click', this.eventHandler.clickMarker.bind(null, marker, place)); } return ac; }.bind(this), this.searchingMarkers); }; /*** * * @param {string} placeId * @param {boolean=} panTo */ LocationPicker.prototype.selectPlaceId = function (placeId, panTo) { if (arguments.length === 1) panTo = true; return new Promise(function (resolve) { this.placeService.getDetails({ placeId: placeId, fields: ["name", "formatted_address", "place_id", "geometry"] }, function (place, status) { if ( status === google.maps.places.PlacesServiceStatus.OK && place && place.geometry && place.geometry.location ) { this.selectPlace(place, panTo); resolve(true); } else { resolve(false); } }.bind(this)); }.bind(this)) }; /*** * * @param latLng * @param {boolean=} panTo */ LocationPicker.prototype.selectLocation = function (latLng, panTo) { if (arguments.length === 1) panTo = true; if (arguments.length === 1) panTo = true; if (this.selectedMarker) { this.selectedMarker.setMap(null); } this.$okBtn.disabled = !latLng; this.selectedPlace = null; if (!latLng) return; this.selectedPlace = { geometry: { location: latLng } }; var zoom = 18; if (panTo) { this.map.setZoom(zoom); setTimeout(() => { this.map.panTo(latLng); }, 100) } this.selectedMarker = new google.maps.Marker({ map: this.map, position: latLng }); // this.infoWindow.open(this.map, this.selectedMarker); /* return this.geocoder .geocode({ location: latLng }) .then(function (response) { if (response.results[0]) { return this.selectPlaceId(response.results[0].place_id, panTo); } else { return false; } }.bind(this)) .catch(function (e) { safeThrow(e); return false; }); */ }; LocationPicker.prototype.watchMyLocation = function (location, position) { if (this.myLocationMarker) return; this.accuracyCircle = new google.maps.Circle({ strokeColor: "#1988c3", strokeOpacity: 0.4, strokeWeight: 2, fillColor: "#1988c3", fillOpacity: 0.2, radius: 100, map: this.map }); this.myLocationMarker = new google.maps.Marker({ position: location, sName: "My Location", map: this.map, icon: { path: google.maps.SymbolPath.CIRCLE, scale: 10, fillColor: "rgb(22, 118, 230)", fillOpacity: 1, strokeWeight: 3, strokeColor: 'white' }, }); if (position && position.coords) { this.accuracyCircle.setRadius(position.coords.accuracy); // Snackbar.show('Accuracy: ' + position.coords.accuracy.toFixed(1) + '(m)'); } var id; if (navigator.geolocation.watchPosition && navigator.geolocation.watchPosition) { id = navigator.geolocation.watchPosition(function (props) { if (!this.isDescendantOf(document.body)) { navigator.geolocation.clearWatch(id); } this.emit('location_now', { location: props.coords }); this.myLocationMarker.setPosition(new google.maps.LatLng(props.coords.latitude, props.coords.longitude)); this.accuracyCircle.setCenter(new google.maps.LatLng(props.coords.latitude, props.coords.longitude)); this.accuracyCircle.setRadius(props.coords.accuracy); // Snackbar.show('Sai số tọa độ: ' + props.coords.accuracy.toFixed(1) + ' mét'); }.bind(this), function () { }, { enableHighAccuracy: false, timeout: 5000, maximumAge: 0 }); } } LocationPicker.prototype.selectMyLocation = function () { var id = randomIdent(); this.emit('requestlocation', { id: id }); if (navigator.geolocation) { var to = setTimeout(() => { this.emit('error', Object.assign(new Error("GPS không phản hồi!"), { id: id })); }, 10000); navigator.geolocation.getCurrentPosition((position) => { clearTimeout(to); var location = null; if (position && position.coords) { this.emit('location', { location: position.coords, id: id }); location = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); } if (location) { this.watchMyLocation(location, position); if (!this.readOnly) this.selectLocation(location); else { this.map.setCenter(location) } } }, (err) => { clearTimeout(to); if (err && err.message.indexOf('denied') >=0) err = Object.assign(new Error("Yêu cầu lấy tọa độ bị từ chối!"), { id: id }); this.emit('error', err); }, { maximumAge: Infinity}); } }; LocationPicker.property = {}; LocationPicker.property.zoom = { set: function (value) { if (!isRealNumber(value)) { value = 1; } this.map.setZoom(value); }, get: function () { return this.map.getZoom(); } }; LocationPicker.property.center = { set: function (value) { value = value || null; var latlng = null; if (value instanceof google.maps.LatLng) { latlng = value; } else if (value && isRealNumber(value.latitude) && isRealNumber(value.longitude)) { latlng = new google.maps.LatLng(value.latitude, value.longitude); } else if ((value instanceof Array) && isRealNumber(value[0]) && isRealNumber(value[1])) { latlng = new google.maps.LatLng(value[0], value[1]); } latlng = latlng || new google.maps.LatLng(21.018755, 105.839729); this.map.setCenter(latlng || new google.maps.LatLng(21.018755, 105.839729)); }, get: function () { return this.map.getCenter(); } }; LocationPicker.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } }, get: function () { return this.hasClass('as-read-only'); } }; /*** * * @type {{}} * @memberOf LocationPicker# */ LocationPicker.eventHandler = {}; /*** * @this LocationPicker */ LocationPicker.eventHandler.searchKeypress = function (event) { if (event.key === 'Enter') setTimeout(function () { if (!this.$searchInput.selectedItem) { this.eventHandler.search(); } }.bind(this), 100); }; LocationPicker.eventHandler.searchChange = function () { var item = this.$searchInput.selectedItem; if (!item) return; this.placeService.getDetails({ placeId: item.place_id, fields: ["name", "formatted_address", "place_id", "geometry"] }, function (place, status) { if ( status === google.maps.places.PlacesServiceStatus.OK && place && place.geometry && place.geometry.location ) { this.selectPlace(place); } }.bind(this)); }; /*** * @this LocationPicker */ LocationPicker.eventHandler.search = function () { var request = { bounds: this.map.getBounds(), query: this.$searchInput.value }; this.placeService.textSearch(request, function callback(results, status) { if (status === google.maps.places.PlacesServiceStatus.OK) { this.showSearchPlaces(results); } }.bind((this))); }; LocationPicker.eventHandler.clickMarker = function (marker, place) { if (this.readOnly) return; this.selectPlace(place, false); }; LocationPicker.eventHandler.clickMap = function (event) { if (this.readOnly) return; if (event.placeId) { this.selectPlaceId(event.placeId); } else if (event.latLng) { this.selectLocation(event.latLng, false); } } ; LocationPicker.eventHandler.clickAction = function (action, event) { this.emit('action', { type: 'action', action: action, originalEvent: event, target: this }, this); }; ACore["d" /* default */].install(LocationPicker); /* harmony default export */ var js_LocationPicker = (LocationPicker); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/LocationInput.js function LocationInput() { this.$text = Object(ACore["a" /* $ */])('input', this) .on('change', this.eventHandler.textChange); this.$iconCtn = Object(ACore["a" /* $ */])('.as-location-input-icon-ctn', this) .on('click', this.eventHandler.clickIcon); /*** * @type {{latitude: number, longitude: number}} * @name latLng * @memberOf LocationInput# */ /*** * @type {string} * @name value * @memberOf LocationInput# */ /*** * @type {boolean} * @name readOnly * @memberOf LocationInput# */ } LocationInput.tag = 'LocationInput'.toLowerCase(); LocationInput.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-location-input', extendEvent: ['change'], child: [ { tag: 'input', attr: { type: 'text' }, class: 'as-location-input-text' }, { class: 'as-location-input-icon-ctn', child: 'span.mdi.mdi-google-maps' } ] }); }; LocationInput.prototype.share = { $modal: null, $picker: null, $holder: null }; LocationInput.prototype._preparePicker = function () { if (this.share.$picker) return; this.share.$picker = Object(ACore["c" /* _ */])({ tag: js_LocationPicker.tag }); this.share.$modal = Object(ACore["c" /* _ */])({ tag: 'modal', class: 'as-location-input-modal', child: { class: 'as-location-input-modal-window', child: this.share.$picker } }); if (BrowserDetector["a" /* default */].isMobile) { this.share.$modal.addClass('as-mobile'); } }; /*** * @this LocationInput * @private */ LocationInput.prototype._attachPicker = function () { if (this.share.$holder) { this.share.$holder._releasePicker(); } this._preparePicker(); this.share.$holder = this; this.$iconCtn.off('click', this.eventHandler.clickIcon); document.body.appendChild(this.share.$modal); this.share.$picker.on('action', this.eventHandler.pickerAction); this.share.$picker.$searchInput.value = ''; this.share.$picker.readOnly = this.readOnly; setTimeout(function () { document.addEventListener('click', this.eventHandler.clickOut); }.bind(this), 100); var value = this.latLng; if (value) { value = new google.maps.LatLng(value.latitude, value.longitude); } if (value) this.share.$picker.selectLocation(value, true); else this.share.$picker.selectPlace(null); }; LocationInput.prototype._releasePicker = function () { if (this.share.$holder !== this) return; this.share.$picker.off('action', this.eventHandler.pickerAction); this.$iconCtn.on('click', this.eventHandler.clickIcon); document.removeEventListener('click', this.eventHandler.clickOut) this.share.$modal.remove(); this.share.$holder = null; }; /** * * @type {{}} * @memberOf LocationInput# */ LocationInput.eventHandler = {}; LocationInput.eventHandler.pickerAction = function (event) { if (!this.readOnly && event.action === 'OK' && this.share.$picker.selectedPlace && this.share.$picker.selectedPlace.geometry && this.share.$picker.selectedPlace.geometry.location) { this.$text.value = [this.share.$picker.selectedPlace.geometry.location.lat(), this.share.$picker.selectedPlace.geometry.location.lng()].join(', '); this.emit('change', { type: 'change', originalEvent: event.originalEvent || event, target: this }, this); } this._releasePicker(); }; /*** * @this LocationInput */ LocationInput.eventHandler.clickIcon = function () { this._attachPicker(); }; /*** * @this LocationInput * @param event */ LocationInput.eventHandler.clickOut = function (event) { if (event.target === this.share.$modal) this._releasePicker(); }; LocationInput.eventHandler.textChange = function (event) { this.emit('change', { type: 'change', originalEvent: event.originalEvent || event, target: this }, this); }; LocationInput.property = {}; LocationInput.property.value = { set: function (value) { value = value || null; var lat, lng; if (typeof value === "string") { this.$text.value = value; return; } if (value instanceof Array) { lat = value[0]; lng = value[1]; } else if (value && typeof value === 'object') { if (('latitude' in value) && ('longitude' in value)) { lat = value.latitude; lng = value.longitude; } else if (value instanceof google.maps.LatLng) { lat = value.lat(); lng = value.lng(); } } if (isRealNumber(lat) && isRealNumber(lng)) { this.$text.value = [lat, lng].join(', '); } else { this.$text.value = ''; } }, get: function () { var nums = this.$text.value.split(/\s*,\s*/); var lat = parseFloat(nums[0]); var lng = parseFloat(nums[1]); if (isRealNumber(lat) && isRealNumber(lng)) { lat = Math.max(-90, Math.min(90, lat)); if (lng < 180 && lng > 180) lng = (lng + 180 + 360 * Math.ceil(Math.abs(lng) / 360 + 2)) % 360 - 180; return [lat, lng].join(', '); } else { return ''; } } }; LocationInput.property.latLng = { get: function () { var nums = this.$text.value.split(/\s*,\s*/); var lat = parseFloat(nums[0]); var lng = parseFloat(nums[1]); if (isRealNumber(lat) && isRealNumber(lng)) { lat = Math.max(-90, Math.min(90, lat)); if (lng < 180 && lng > 180) lng = (lng + 180 + 360 * Math.ceil(Math.abs(lng) / 360 + 2)) % 360 - 180; return { latitude: lat, longitude: lng }; } else { return null; } } }; LocationInput.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } this.$text.readOnly = !!value; }, get: function () { return this.hasClass('as-read-only'); } }; LocationInput.property.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } this.$text.disabled = !!value; }, get: function () { return this.hasClass('as-disabled'); } }; ACore["d" /* default */].install(LocationInput); /* harmony default export */ var js_LocationInput = (LocationInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/mknavigator.css var mknavigator = __webpack_require__(56); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MKNavigatorItem.js /*** * @extends AElement * @constructor */ function MKNavigatorItem() { this._data = []; this.$text = Object(ACore["a" /* $ */])('.mk-nav-item-text', this); this.$switchCtn = Object(ACore["a" /* $ */])('.mk-nav-item-switch-ctn', this); this.$switch = Object(ACore["a" /* $ */])('switch', this) .on('change', this.eventHandler.switchChange); this.$dragzone = Object(ACore["a" /* $ */])('.mk-nav-item-drag-zone', this); this.on('click', this.eventHandler.click); } MKNavigatorItem.tag = 'MKNavigatorItem'.toLowerCase(); MKNavigatorItem.render = function () { return Object(ACore["c" /* _ */])({ tag: js_Board.tag, class: 'mk-nav-item', extendEvent: ['checkedchange', 'press'], child: [ { class: ['mk-nav-item-drag-zone', js_BoardTable.DRAG_ZONE_CLASS_NAME], child: '<i class="material-icons">drag_indicator</i>' }, { class: 'mk-nav-item-text-ctn', child: { tag: 'span', class: 'mk-nav-item-text', child: { text: '' } } }, { class: 'mk-nav-item-switch-ctn', child: { tag: js_Switch.tag } } ] }); }; MKNavigatorItem.prototype.updateText = function () { this.$text.firstChild.data = this._data.text; }; MKNavigatorItem.prototype.updateChecked = function () { if (typeof this._data.checked === "boolean") { this.$switchCtn.removeStyle('display'); this.$switch.checked = this._data.checked; } else { this.$switchCtn.addStyle('display', 'none'); } }; MKNavigatorItem.prototype.updateDraggable = function () { if (this._data.draggable) { this.$dragzone.removeStyle('display'); } else { this.$dragzone.addStyle('display', 'none'); } }; MKNavigatorItem.property = {}; MKNavigatorItem.property.data = { /** * @this MKNavigatorItem * @param data */ set: function (data) { data = data || {}; this._data = data; this.updateText(); this.updateChecked(); this.updateDraggable(); }, get: function () { return this._data; } }; /*** * @memberOf MKNavigatorItem# * @type {{}} */ MKNavigatorItem.eventHandler = {}; MKNavigatorItem.eventHandler.switchChange = function (event) { this._data.checked = this.$switch.checked; this.emit('checkedchange', { type: 'checkedchange' }, this); }; MKNavigatorItem.eventHandler.click = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.$switch, event) || Object(EventEmitter["d" /* hitElement */])(this.$dragzone, event)) return; this.emit('press', { type: 'press', target: this, originalEvent: event }, this); } ACore["d" /* default */].install(MKNavigatorItem); /* harmony default export */ var js_MKNavigatorItem = (MKNavigatorItem); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MKNavigator.js /*** * @typedef MKNavigatorItemData * @property {string} text * @property {string|number} value * @property {boolean|number=} checked */ /*** * @extends AElement * @constructor */ function MKNavigator() { this._items = []; this._value = 0; this._hiddenValues = []; this.$itemByValue = {}; this.$header = Object(ACore["a" /* $ */])('.mk-nav-header', this); this.$body = Object(ACore["a" /* $ */])('.mk-nav-body', this) .on('orderchange', this.eventHandler.bodyOrderChange) .on('dragitemstart', this.eventHandler.dragItemStart); this.$footer = Object(ACore["a" /* $ */])('.mk-nav-footer', this); /*** * @type {MKNavigatorItemData[]} * @name item * @memberOf MKNavigator# */ /*** * @type {number[]} * @name order * @memberOf MKNavigator# */ } MKNavigator.tag = 'MKNavigator'.toLowerCase(); MKNavigator.render = function () { return Object(ACore["c" /* _ */])({ class: 'mk-nav', extendEvent: ['orderchange', 'checkedchange', 'press'], child: [ { class: 'mk-nav-header' }, { tag: js_BoardTable.tag, class: 'mk-nav-body' }, { class: 'mk-nav-footer' } ] }); }; MKNavigator.prototype.updateValue = function () { var value = this._value; for (var iValue in this.$itemByValue) { if (iValue + '' !== value + '') { this.$itemByValue[iValue].removeClass('mk-current'); } } var order = this.order; if (this.$itemByValue[value]) { this.$itemByValue[value].addClass('mk-current'); } else if (order.length > 0) { this.$itemByValue[order[0]].addClass('mk-current'); } var idx = order.filter(value => !this.$itemByValue[value].hasClass('as-hidden')).indexOf(value); if (idx >= 0) { this.addStyle('--mk-nav-line-top', `calc(${2 * idx}em + ${12 * idx}px)`); } else { this.removeStyle('--mk-nav-line-top'); } }; MKNavigator.prototype.setTextOfItem = function (value, text) { var itemElt = this.$itemByValue[value]; if (!itemElt) return; itemElt.data.text = text; itemElt.updateText(); }; MKNavigator.prototype.mkItem = function (data) { var self = this; return Object(ACore["c" /* _ */])({ tag: js_MKNavigatorItem.tag, attr: { "data-value": data && data.value }, props: { data: data }, on: { checkedchange: function (event) { self.emit('checkedchange', { type: 'checkedchange', target: this, originalEvent: event.originalEvent, itemData: data, checked: data.checked }, self); }, press: function (event) { self.value = data.value; self.emit('press', { type: 'press', itemElt: this, itemData: data, value: data.value, target: this, originalEvent: event.originalEvent }, self) } } }); }; MKNavigator.prototype._updateHiddenValues = function () { var hiddenDict = this._hiddenValues.reduce((ac, x) => { ac[x] = true; return ac; }, {}) Object.keys(this.$itemByValue).forEach(value => { if (hiddenDict[value]) { this.$itemByValue[value].addClass('as-hidden'); } else { this.$itemByValue[value].removeClass('as-hidden'); } }); }; MKNavigator.property = {}; MKNavigator.property.items = { /*** * @this MKNavigator * @param items */ set: function (items) { items = items || []; this._items = items; this.$itemByValue = {}; var i = 0; var item; var itemElt; this.$header.clearChild(); this.$body.clearChild(); this.$footer.clearChild(); var draggable = false; while (i < items.length) { if (items[i].draggable) break; item = items[i]; itemElt = this.mkItem(item); this.$itemByValue[item.value] = itemElt; this.$header.addChild(itemElt); ++i; } while (i < items.length) { if (!items[i].draggable) break; draggable = true; item = items[i]; itemElt = this.mkItem(item); this.$itemByValue[item.value] = itemElt; this.$body.addChild(itemElt); ++i; } while (i < items.length) { item = items[i]; itemElt = this.mkItem(item) this.$itemByValue[item.value] = itemElt; this.$footer.addChild(itemElt); ++i; } if (draggable) { this.addClass('mk-has-draggable'); } else { this.removeClass('mk-has-draggable'); } this._updateHiddenValues(); }, get: function () { return this._items; } }; MKNavigator.property.order = { get: function () { return Object(ACore["b" /* $$ */])(js_MKNavigatorItem.tag, this).map(function (e) { return e.data.value; }); } }; MKNavigator.property.value = { set: function (value) { this._value = value; this.updateValue(); }, get: function () { if (this.$itemByValue[this._value]) return this._value; if (this._items.length > 0) return this._items[0]; return this._value; } }; MKNavigator.property.hiddenValues = { set: function (values) { values = values || []; if (!(values instanceof Array)) values = []; this._hiddenValues = values; this._updateHiddenValues(); this.updateValue(); }, get: function () { return this._hiddenValues; } } /*** * @memberOf MKNavigator# * @type {{}} */ MKNavigator.eventHandler = {}; MKNavigator.eventHandler.bodyOrderChange = function (event) { this.updateValue(); this._items.splice(0, this._items.length); Object(ACore["b" /* $$ */])(js_MKNavigatorItem.tag, this).reduce(function (ac, cr) { ac.push(cr.data); return ac; }, this._items); this.emit('orderchange', { type: 'orderchange', target: this }, this); }; /*** * @memberOf MKNavigator# * @type {{}} */ MKNavigator.eventHandler.dragItemStart = function (event) { var bound = this.getBoundingClientRect(); this.addStyle('--mk-navigator-bound-left', bound.left + 'px'); } ACore["d" /* default */].install(MKNavigator); /* harmony default export */ var js_MKNavigator = (MKNavigator); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/processlbar.css var processlbar = __webpack_require__(291); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ProcessLBar.js /*** * @extends AElement * @constructor */ function ProcessLBar() { this.$stepCtn = Object(ACore["a" /* $ */])('.as-process-l-bar-step-ctn', this); this.$stepName = Object(ACore["a" /* $ */])('.as-process-l-bar-step-name', this); this.$items = []; this._items = []; this._lHeight = 3; this._value = null; } ProcessLBar.tag = 'ProcessLBar'.toLowerCase(); ProcessLBar.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-process-l-bar', extendEvent: 'change', child: [ { class: 'as-process-l-bar-step-ctn' }, { class: 'as-process-l-bar-step-name' } ] }); }; ProcessLBar.prototype._updateCol = function () { var colN = Math.max(this.$items.length - this._lHeight + 1, 0); while (this.$stepCtn.childNodes.length > colN) { this.$stepCtn.lastChild.remove(); } while (this.$stepCtn.childNodes.length < colN) { this.$stepCtn.addChild(Object(ACore["c" /* _ */])('.as-process-l-bar-col')); } var i; for (i = 0; i < colN; ++i) { this.$stepCtn.childNodes[i].clearChild() .addChild(this.$items[i]) } for (i = colN; i < this.$items.length; ++i) { this.$stepCtn.lastChild.addChild(this.$items[i]); } this.nameWidth = this._items.reduce(function (ac, cr) { return Math.max(ac, measureText(cr.name, 'bold 14px Arial, Helvetica, sans-serif').width); }, 0); if (colN <= 1) { this.addClass('as-col-layout'); } else { this.removeClass('as-col-layout'); } if (colN <= 2) { this.addStyle('--as-process-l-bar-item-min-width', this.nameWidth + 'px'); } else { this.addStyle('--as-process-l-bar-item-min-width', ((this.nameWidth + 10) / (colN - 1) - 10) + 'px'); } }; ProcessLBar.prototype._updateValue = function () { var value = this._value; this.$items.forEach(function (elt) { if (elt.itemData.value === value) { elt.addClass('as-active'); this.$stepName.clearChild().addChild(Object(ACore["c" /* _ */])({ tag: 'span', child: { text: elt.itemData.name } })); } else { elt.removeClass('as-active'); } }.bind(this)); }; ProcessLBar.prototype.notifyChange = function (originalEvent) { this.emit('change', { type: 'change', target: this, originalEvent: originalEvent || null }, this); }; ProcessLBar.prototype._makeItem = function (item) { var self = this; var stepElt = Object(ACore["c" /* _ */])({ class: 'as-process-l-bar-step', attr: { title: item.name }, props: { itemData: item }, on: { click: function (event) { if (self.disabled) return; var value = this._value; if (item.value === value) return; self.value = item.value; self.notifyChange(event); } } }); if (item.color) { stepElt.addStyle('--as-process-l-bar-active-color', item.color); } return stepElt; }; ProcessLBar.property = {}; ProcessLBar.property.items = { set: function (items) { items = items || []; this._items = items; this.$itemByValue = {}; this.$items = this._items.map(function (item) { return this._makeItem(item); }.bind(this)); this._updateCol(); this._updateValue(); }, get: function () { return this._items; } }; ProcessLBar.property.value = { set: function (value) { this._value = value; this._updateValue(); }, get: function () { return this._value; } }; ProcessLBar.property.lHeight = { set: function (value) { this._lHeight = value; if (value === 1){ this.addClass('as-single-line'); } else { this.removeClass('as-single-line'); } this._updateCol(); }, get: function () { return this._lHeight; } }; ProcessLBar.property.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } }, get: function () { return this.hasClass('as-disabled'); } }; /* harmony default export */ var js_ProcessLBar = (ProcessLBar); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/kvcommentitem.css var kvcommentitem = __webpack_require__(293); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/KVCommentItem.js /*** * @extends AElement * @constructor */ function KVCommentItem() { this._time = new Date(); this._text = ''; this.$text = Object(ACore["a" /* $ */])('.kv-comment-item-text', this); this.$time = Object(ACore["a" /* $ */])('.kv-comment-item-time', this); this.$avatar = Object(ACore["a" /* $ */])('.kv-comment-avatar', this); this.quickmenu = null; this.on('contextmenu', this.eventHandler.kv_contextmenu) ContextMenu.auto(); } KVCommentItem.tag = 'KVCommentItem'.toLowerCase(); KVCommentItem.render = function () { return Object(ACore["c" /* _ */])({ extendEvent:'contextmenu', class: "kv-comment-item", child: [ { class: "kv-comment-avatar-ctn", child: { class: 'kv-comment-avatar', style: { backgroundImage: 'url(https://raw.githubusercontent.com/duthienkt/absol/master/logo.svg?sanitize=true)' } } }, { class: "kv-comment-item-content", child: [ { class: 'kv-comment-item-text', child: { text: '' } }, { class: 'kv-comment-item-time', child: { text: formatDateTime(new Date(), 'dd/MM/yyyy HH:mm') } } ] }, { class: "kv-comment-item-flag-ctn", child: ['.kv-comment-item-flag-unread'] } ] }); } KVCommentItem.property = {}; KVCommentItem.property.text = { set: function (value) { value = value || ''; if (typeof value === 'string') this.$text.innerHTML = value; else if (absol.Dom.isDomNode(value)) { this.$text.clearChild().addChild(value); } else { this.$text.clearChild().addChild(Object(ACore["c" /* _ */])(value)); } this._text = value; }, get: function () { return this._text; } } KVCommentItem.property.unread = { set: function (value) { if (value) { this.addClass('as-unread'); } else { this.removeClass('as-unread'); } }, get: function () { return this.hasClass('as-unread'); } }; KVCommentItem.property.time = { set: function (value) { this._time = value; var text = ''; if (typeof value === 'string') text = value; else if (value instanceof Date){ text = formatDateTime(value, 'dd/MM/yyyy HH:mm') } this.$time.firstChild.data = text; }, get: function () { return this._time; } }; KVCommentItem.property.avatar = { set: function (value){ value = value ||'https://raw.githubusercontent.com/duthienkt/absol/master/logo.svg?sanitize=true'; this._avatar = value; this.$avatar.addStyle('backgroundImage','url('+value+')') }, get: function (){ return this._avatar; } }; /*** * @memberOf KVCommentItem# * @type {{}} */ KVCommentItem.eventHandler = {}; /*** * @this KVCommentItem * @param event */ KVCommentItem.eventHandler.kv_contextmenu = function (event){ if (this.quickmenu){ event.showContextMenu(this.quickmenu.props, function (event){ var menuItem = cleanMenuItemProperty(event.menuItem); if (this.quickmenu.onSelect){ this.quickmenu.onSelect.call(this, menuItem); } }.bind(this)) } }; ACore["d" /* default */].install(KVCommentItem); /* harmony default export */ var js_KVCommentItem = (KVCommentItem); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTHeadCell.js var implicitSortKeyArr = key => { var res; if (typeof key === 'string') { res = key.split(/[\s,;]+/); } else if (key instanceof Array) { res = key.slice(); } else res = []; res = res.filter(k => !!k).map(k => k + ''); return res; } /*** * * @param {DTHeadRow} row * @param data * @constructor */ function DTHeadCell(row, data) { this.row = row; this._elt = null; this._copyElt = null; this._copyElt1 = null; this._copyElt2 = null; this.data = data; this._idx = null; } Object.defineProperty(DTHeadCell.prototype, 'idx', { set: function (value) { this._idx = value; this.elt.attr('data-col-idx', value + ''); }, get: function () { return this._idx; } }); DTHeadCell.prototype.nextSortState = function (event) { if (!this.elt.attr('data-sort-key')) return; var c = this.elt.attr('data-sort-order'); var n = { none: 'ascending', ascending: 'descending', descending: 'none' }[c] || 'none'; var sortKeyArr = implicitSortKeyArr(this.data.sortKey); var sortBtn = this.$sortBtn; var followerElt, menuElt, items; if (sortKeyArr.length === 1) { Object(ACore["b" /* $$ */])('th', this.row.elt).forEach(elt => { if (elt === this.elt) return; if (elt.attr('data-sort-key')) { elt.attr('data-sort-order', 'none'); } }) this.elt.attr('data-sort-order', n); this.row.head.table.wrapper.requestQuery(); } else { items = [{ text: 'Không sắp xếp', value: { key: sortKeyArr.join(';'), order: 'none' }, icon: 'span.mdi.mdi-sort-variant-off' }]; if (c === 'none') { items[0].extendStyle = { color: '#007bff' }; } sortKeyArr.forEach(key => { items.push('-------'); var text = this.data.sortMenu && this.data.sortMenu[key] && this.data.sortMenu[key][0]; text = text || ("Tăng theo " + key); var item = { icon: 'span.mdi.mdi-sort-ascending', text: text, value: { key: key, order: 'ascending' } }; if (key === this.elt.attr('data-sort-key') && c === 'ascending') { item.extendStyle = { color: '#007bff' } } items.push(item); text = this.data.sortMenu && this.data.sortMenu[key] && this.data.sortMenu[key][1]; text = text || ("Tăng theo " + key); item = { icon: 'span.mdi.mdi-sort-descending', text: text, value: { key: key, order: 'descending' } }; if (key === this.elt.attr('data-sort-key') && c === 'descending') { item.extendStyle = { color: '#007bff' } } items.push(item); }); menuElt = Object(ACore["c" /* _ */])({ tag: 'vmenu', props: { items: items }, on: { press: event => { var value = event.menuItem.value; Object(ACore["b" /* $$ */])('th', this.row.elt).forEach(elt => { if (elt === this.elt) return; if (elt.attr('data-sort-key')) { elt.attr('data-sort-order', 'none'); } }) this.elt.attr('data-sort-order', value.order); this.elt.attr('data-sort-key', value.key); this.row.head.table.wrapper.requestQuery(); finish(); } } }); followerElt = Object(ACore["c" /* _ */])({ tag: js_Follower, class: 'absol-context-menu-anchor', style: { zIndex: findMaxZIndex(sortBtn) + 22 }, child: [ menuElt ], props: { followTarget: sortBtn } }).addTo(document.body); var finish = () => { document.removeEventListener('click', finish); followerElt.remove(); } setTimeout(() => { followerElt.addStyle('visibility', 'visible').addStyle('opacity', 1); }, 5) } }; DTHeadCell.prototype.updateCopyEltSize = function () { if (!this._copyElt && !this._copyElt1 && !this._copyElt2) return; // copyElt is in space var bound = this._copyElt.getBoundingClientRect(); this._elt.addStyle('width', bound.width + 'px'); if (this._copyElt1) { this._copyElt1.addStyle('width', bound.width + 'px'); } if (this._copyElt2) { this._copyElt2.addStyle('width', bound.width + 'px'); } }; Object.defineProperty(DTHeadCell.prototype, 'elt', { get: function () { if (this._elt) return this._elt; var eventAdded = false; var onPointerDown = (event) => { if (event.target.hasClass && event.target.hasClass('as-dt-header-cell-resizer')) return; if (!eventAdded) { document.addEventListener('pointerup', onPointerUp); eventAdded = true; } } var onPointerUp = () => { document.removeEventListener('pointerup', onPointerUp); eventAdded = false; this.nextSortState(); }; this._elt = Object(ACore["c" /* _ */])({ tag: 'th', class: 'as-dt-header-cell' }) .on('pointerdown', onPointerDown); if (this.data.attr) { this._elt.attr(this.data.attr); } if (this.data.style) { this._elt.addStyle(this.data.style); } if (this.data.id !== null && this.data.id !== undefined) { this._elt.attr('data-col-id', this.data.id + ''); } this.row.head.table.adapter.renderHeadCell(this._elt, this.data, this); var sortKeyArr = implicitSortKeyArr(this.data.sortKey) if (sortKeyArr.length > 0) { this._elt.attr('data-sort-key', sortKeyArr.join(';')); this._elt.attr('data-sort-order', 'none'); } this.$sortBtn = Object(ACore["c" /* _ */])({ tag: 'span', class: 'as-dt-sort-btn', child: [ { tag: 'span', class: ['mdi', 'mdi-menu-up'] // child: { text: '🡑' } }, { tag: 'span', class: ['mdi', 'mdi-menu-down'] } ] }); this.$resizer = Object(ACore["c" /* _ */])({ class: 'as-dt-header-cell-resizer' }); this._elt.addChild(this.$sortBtn); this._elt.addChild(this.$resizer); return this._elt; } }); Object.defineProperty(DTHeadCell.prototype, 'copyElt', { get: function () { if (this._copyElt) return this._copyElt; this._copyElt = Object(ACore["a" /* $ */])(this.elt.cloneNode(true)).addClass('as-copy-elt'); if (this.data.style && this.data.style.width) { var self = this; setTimeout(function wait() { if (self._copyElt.isDescendantOf(document.body)) { self._copyElt.addStyle('width', self._copyElt.getBoundingClientRect().width + 'px'); } else { setTimeout(wait, 10); } }, 10); } return this._copyElt; } }); Object.defineProperty(DTHeadCell.prototype, 'copyElt1', { get: function () { if (this._copyElt1) return this._copyElt1; this._copyElt1 = Object(ACore["a" /* $ */])(this.elt.cloneNode(true)).addClass('as-copy-elt-1'); return this._copyElt1; } }); Object.defineProperty(DTHeadCell.prototype, 'copyElt2', { get: function () { if (this._copyElt2) return this._copyElt2; this._copyElt2 = Object(ACore["a" /* $ */])(this.elt.cloneNode(true)).addClass('as-copy-elt-2'); return this._copyElt2; } }); Object.defineProperty(DTHeadCell.prototype, 'colspan', { get: function () { var value = this.data.attr && this.data.attr.colspan; if (typeof value === "string") value = parseInt(value); if (typeof value === "number") return value; else return 1; } }); /* harmony default export */ var dynamictable_DTHeadCell = (DTHeadCell); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTHeadRow.js /**** * table layer: copyElt * fixY layer : copyElt1 - elt * fixXY layer: elt * */ /*** * * @param {DTHead} head * @param data * @constructor */ function DTHeadRow(head, data) { this.head = head; this.data = data; this.cells = this.data.cells.map((cellData) => new dynamictable_DTHeadCell(this, cellData)); this.cells.reduce((ac, cell) => { cell.idx = ac; return ac + cell.colspan; }, 0); this._elt = null; this._copyElt = null; this._fixedXYElt = null; this._fixedXElt = null; } DTHeadRow.prototype.updateCopyEltSize = function () { if (!this._fixedXElt) return; var bound = this._copyElt.getBoundingClientRect(); if (this._fixedXElt) this._fixedXElt.addStyle('height', bound.height + 'px'); if (this._fixedXYElt) this._fixedXYElt.addStyle('height', bound.height + 'px'); this._elt.addStyle('height', bound.height + 'px'); this.cells.forEach(c => c.updateCopyEltSize()); }; Object.defineProperty(DTHeadRow.prototype, 'elt', { get: function () { if (this._elt) return this._elt; var fixedCol = this.adapter.fixedCol || 0; var child = this.cells.slice(0, fixedCol).map(c => c.copyElt1); var child1 = this.cells.slice(fixedCol).map(c => c.elt); this._elt = Object(ACore["c" /* _ */])({ tag: 'tr', class: 'as-dt-head-row', child: child.concat(child1) }); if (this.data.attr) { this.elt.attr(this.data.attr); } if (this.data.style) { this.elt.addStyle(this.data.style); } return this._elt; } }); Object.defineProperty(DTHeadRow.prototype, 'fixedXYElt', { get: function () { if (this._fixedXYElt) return this._fixedXYElt; var fixedCol = this.adapter.fixedCol || 0; this._fixedXYElt = Object(ACore["c" /* _ */])({ elt: this.elt.cloneNode(false), class: 'as-dt-fixed-xy', child: this.cells.slice(0, fixedCol).map(c => c.elt) }); return this._fixedXYElt; } }); Object.defineProperty(DTHeadRow.prototype, 'fixedXElt', { get: function () { if (this._fixedXElt) return this._fixedXElt; var fixedCol = this.adapter.fixedCol || 0; this._fixedXElt = Object(ACore["c" /* _ */])({ elt: this.elt.cloneNode(false), class: 'as-dt-fixed-x', child: this.cells.slice(0, fixedCol).map(c => c.copyElt2) }); return this._fixedXElt; } }); Object.defineProperty(DTHeadRow.prototype, 'copyElt', { get: function () { if (this._copyElt) return this.copyElt; var adapter = this.adapter; this._copyElt = Object(ACore["c" /* _ */])({ elt: this.elt.cloneNode(false), child: this.cells.map(c => c.copyElt) }); return this._copyElt; } }); Object.defineProperty(DTHeadRow.prototype, 'adapter', { get: function () { return this.head.adapter; } }) /* harmony default export */ var dynamictable_DTHeadRow = (DTHeadRow); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTHead.js /*** * * @param {DTTable} table * @param {} data * @constructor */ function DTHead(table, data) { if (!data) data = {}; if (!data.rows) data.rows = []; this.table = table; this._elt = null; this._copyElt = null; this._fixedXYElt = null; this._fixedXElt = null; this.data = data; this.rows = this.data.rows.map((rowData) => new dynamictable_DTHeadRow(this, rowData)); } DTHead.prototype.lockWidth = function () { this.rows.forEach(r => r.lockWidth()); }; DTHead.prototype.updateCopyEltSize = function () { if (!this._copyElt) return; this.rows.forEach(r => r.updateCopyEltSize()); }; Object.defineProperty(DTHead.prototype, 'elt', { get: function () { if (this._elt) return this._elt; this._elt = Object(ACore["c" /* _ */])({ tag: 'thead', class: 'as-dt-header', child: this.rows.map(r => r.elt) }); if (this.data.style) this._elt.addStyle(this.data.style); return this._elt; } }); Object.defineProperty(DTHead.prototype, 'copyElt', { get: function () { if (this._copyElt) return this._copyElt; this._copyElt = Object(ACore["c" /* _ */])({ elt: this.elt.cloneNode(false), child: this.rows.map(r => r.copyElt) }); return this._copyElt; } }); Object.defineProperty(DTHead.prototype, 'fixedXYElt', { get: function () { if (this._fixedXYElt) return this._fixedXYElt; this._fixedXYElt = Object(ACore["c" /* _ */])({ elt: this.elt.cloneNode(false), class: 'as-dt-fixed-xy', child: this.rows.map(r => r.fixedXYElt) }); return this._fixedXYElt; } }); Object.defineProperty(DTHead.prototype, 'fixedXElt', { get: function () { if (this._fixedXElt) return this._fixedXElt; this._fixedXElt = Object(ACore["c" /* _ */])({ elt: this.elt.cloneNode(false), class: 'as-dt-fixed-x', child: this.rows.map(r => r.fixedXElt) }); return this._fixedXElt; } }); Object.defineProperty(DTHead.prototype, 'adapter', { get: function () { return this.table.wrapper.adapter; } }); /* harmony default export */ var dynamictable_DTHead = (DTHead); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTBodyCell.js /*** * * @param {DTBodyRow} row * @param data * @constructor */ function DTBodyCell(row, data) { this.row = row; this._elt = null; this._copyElt = null; this._idx = null; this.data = data; } Object.defineProperty(DTBodyCell.prototype, 'elt', { get: function () { if (this._elt) return this._elt; this._elt = Object(ACore["c" /* _ */])({ tag: 'td', class: 'as-dt-body-cell' }); this._elt.holder = this; if (this.data.attr) this._elt.attr(this.data.attr); if (typeof this.data.class === "string") addElementClassName(this._elt, this.data.class); if (this.data.style) this._elt.addStyle(this.data.style); if (this.data.on) { Object.keys(this.data.on).forEach(key => { var cb = this.data.on[key]; if (typeof cb !== "function") return; this._elt.on(key, event => { cb.call(this._elt, event, this); }); }); } if (this._idx !== null) this._elt.attr('data-col-idx', this._idx + ''); this.row.body.table.adapter.renderBodyCell(this.elt, this.data, this); return this._elt; } }); Object.defineProperty(DTBodyCell.prototype, 'copyElt', { get: function () { if (this._copyElt) return this._copyElt; this._copyElt = Object(ACore["a" /* $ */])(this.elt.cloneNode(true)).addClass('as-copy-elt'); return this._copyElt; } }); Object.defineProperty(DTBodyCell.prototype, 'innerText', { get: function () { var text = this.data.innerText; if (text === undefined || text === null) text = ''; else if (!text) { text = text + ''; } else if (text.substring) { } else if (typeof text === "number") { text = text + '' } else if (typeof text === "object") { if (text instanceof Date) { return formatDateTime(text, 'dd/MM/yyyy hh:mm a'); } else { return jsStringOf(text); } } else if (typeof text === "function") { text = text.call(this.data, this); } return text; if (this.data.innerText) return this.data.innerText; if (this.data.getInnerText) return this.data.getInnerText(); // if ('innerText' in this.data) return this.data.innerText || ''; var res = []; function visit(node) { if (node.nodeType === 3 && node.data) { res.push(node.data); } else if (node.childNodes && node.childNodes.length > 0) { Array.prototype.forEach.call(node.childNodes, visit); } } visit(this.elt); return res.join(' '); } }); Object.defineProperty(DTBodyCell.prototype, 'idx', { set: function (value) { this._idx = value; if (this._elt) this._elt.attr('data-col-idx', value + ''); }, get: function () { return this._idx; } }); Object.defineProperty(DTBodyCell.prototype, 'colspan', { get: function () { var value = this.data.attr && this.data.attr.colspan; if (typeof value === "string") value = parseInt(value); if (typeof value === "number") return value; else return 1; } }); /* harmony default export */ var dynamictable_DTBodyCell = (DTBodyCell); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTBodyRow.js /*** * * @param {DTBody} body * @param data * @constructor */ function DTBodyRow(body, data) { this.body = body; this.data = data; this.data.cells = this.data.cells || []; this._elt = null; this._fixedXElt = null; if ('id' in data) { this.id = data.id; } else { this.id = randomIdent(8); } this._idx = null; /*** * @type {DTBodyCell[]} */ this.cells = this.data.cells.map((cellData) => new dynamictable_DTBodyCell(this, cellData)); this.cells.reduce((ac, cell) => { cell.idx = ac; return ac + cell.colspan; }, 0); } DTBodyRow.prototype.remove = function () { this.body.removeRow(this); }; DTBodyRow.prototype.viewInto = function () { return this.body.viewIntoRow(this); }; DTBodyRow.prototype.updateCopyEltSize = function () { if (!this._fixedXElt) return; if (!this._elt.parentElement) return; if (this._fixedXElt.childNodes.length === 0) return;//has no fixed column var bound = this._elt.getBoundingClientRect(); this._fixedXElt.addStyle('height', bound.height + 'px'); }; DTBodyRow.prototype.updateData = function (data) { var rowIdx = this.body.rowIndexOf(this.data); this.body.data.rows[rowIdx] = data; this.data = data; if ('id' in data) { this.id = data.id; } else { this.id = randomIdent(8); } this.cells = this.data.cells.map((cellData) => new dynamictable_DTBodyCell(this, cellData)); this.cells.reduce((ac, cell) => { cell.idx = ac; return ac + cell.colspan; }, 0); if (this._elt) { this._elt.attr('data-id', this.id + ''); this._elt.clearChild().addChild(this.cells.map(function (cell) { return cell.elt; })); this.$idx = Object(ACore["a" /* $ */])('.as-dt-row-index', this._elt); this.draggable = !!Object(ACore["a" /* $ */])('.as-drag-zone', this._elt); if (this.$idx) this.$idx.attr('data-idx', this._idx + 1 + ''); } this.body.onRowSplice(rowIdx); }; Object.defineProperty(DTBodyRow.prototype, 'elt', { get: function () { if (this._elt) return this._elt; var fixedCol = this.adapter.fixedCol || 0; var child = this.cells.slice(0, fixedCol).map(c => c.copyElt); var child1 = this.cells.slice(fixedCol).map(c => c.elt); this._elt = Object(ACore["c" /* _ */])({ tag: 'tr', class: 'as-dt-body-row', props: { dtBodyRow: this }, child: child.concat(child1) }); this._elt.attr('data-id', this.id + ''); if (this.data.class) { addElementClassName(this._elt, this.data.class); } if (this.data.attr) { this._elt.attr(this.data.attr); } if (this.data.style) { this._elt.addStyle(this.data.style); } if (this.data.on) { Object.keys(this.data.on).forEach(key => { var cb = this.data.on[key]; if (typeof cb !== "function") return; this._elt.on(key, event => { cb.call(this._elt, event, this); }); }); } this.$idx = this.cells.reduce((ac, c) => { return ac || Object(ACore["a" /* $ */])('.as-dt-row-index', c.elt); }, null); this.draggable = !!Object(ACore["a" /* $ */])('.as-drag-zone', this._elt); if (this.$idx) this.$idx.attr('data-idx', this._idx + 1 + ''); return this._elt; } }); Object.defineProperty(DTBodyRow.prototype, 'fixedXElt', { get: function () { if (this._fixedXElt) return this._fixedXElt; var fixedCol = this.adapter.fixedCol || 0; this._fixedXElt = Object(ACore["c" /* _ */])({ elt: this.elt.cloneNode(false), class: 'as-dt-fixed-x', child: this.cells.slice(0, fixedCol).map(cell => cell.elt) }); return this._fixedXElt; } }); Object.defineProperty(DTBodyRow.prototype, 'innerText', { get: function () { if (this.data.innerText) return this.data.innerText; if (this.data.getInnerText) return this.data.getInnerText(); if ('innerText' in this.data) return this.data.innerText || ''; return this.cells.map(function (cell) { return cell.innerText.trim(); }).filter(text => !!text).join(' / '); } }); Object.defineProperty(DTBodyRow.prototype, 'idx', { set: function (value) { if (this.$idx) this.$idx.attr('data-idx', value + 1 + ''); this._idx = value; }, get: function () { return this._idx; } }); Object.defineProperty(DTBodyRow.prototype, 'adapter', { get: function () { return this.body.adapter; } }); /* harmony default export */ var dynamictable_DTBodyRow = (DTBodyRow); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTSearchFactor.js function DTSearchFactor(global) { /*** * @typedef SelectionItem2 * @property {String} text * @property {String} desc * @property {String} __text__ * @property {String} __nvnText__ * @property {Array<String>} __words__ * @property {Array<String>} __nvnWords__ * @property {object} __wordDict__ * @property {object} __nvnWordDict__ * @module SelectionItem2 */ function nonAccentVietnamese(s) { return s.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a") .replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, "A") .replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e") .replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, "E") .replace(/ì|í|ị|ỉ|ĩ/g, "i") .replace(/Ì|Í|Ị|Ỉ|Ĩ/g, "I") .replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o") .replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, "O") .replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u") .replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, "U") .replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y") .replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, "Y") .replace(/đ/g, "d") .replace(/Đ/g, "D") .replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, "") .replace(/\u02C6|\u0306|\u031B/g, ""); } function harmonicMean(a, b) { return 2 / (1 / a + 1 / b); } function wordLike(a, b) { var m = a.length; var n = b.length; function map(i, j) { return i * (n + 1) + j; } var Q = Array((m + 1) * (n + 1)).fill(0); for (var i = 0; i < m; ++i) for (var j = 0; j < n; ++j) if (a.charAt(i) == b.charAt(j)) { if (Q[map(i + 1, j + 1)]) { if (Q[map(i + 1, j + 1)] < Q[map(i, j)] + 1) Q[map(i + 1, j + 1)] = Q[map(i, j)] + 1; } else Q[map(i + 1, j + 1)] = Q[map(i, j)] + 1; } else Q[map(i + 1, j + 1)] = Math.max(Q[map(i + 1, j)], Q[map(i, j + 1)]); return Q[map(m, n)] / harmonicMean(m, n); } function wordsMatch(sq1, sq2, matchWordPow) { matchWordPow = matchWordPow === undefined ? 1 : matchWordPow; var m = sq1.length; var n = sq2.length; function map(i, j) { return i * (n + 1) + j; } var Q = Array((m + 1) * (n + 1)).fill(0); var e = 0.0; for (var i = 0; i < m; ++i) for (var j = 0; j < n; ++j) { e = Math.pow(wordLike(sq1[i], sq2[j]), matchWordPow); if (Q[map(i + 1, j + 1)]) { if (Q[map(i + 1, j + 1)] < Q[map(i, j)] + e) Q[map(i + 1, j + 1)] = Q[map(i, j)] + e; } else Q[map(i + 1, j + 1)] = Q[map(i, j)] + e; e = Math.max(Q[map(i + 1, j)], Q[map(i, j + 1)]); if (e > Q[map(i + 1, j + 1)]) Q[map(i + 1, j + 1)] = e; } return Q[map(m, n)]; } var EXTRA_MATCH_SCORE = 9; var NVN_EXTRA_MATCH_SCORE = 8; var EQUAL_MATCH_SCORE = 10; var WORD_MATCH_SCORE = 3; var HAS_WORD_SCORE = 30; var HAS_NVN_WORD_SCORE = 29; /*** * * @param {SelectionItem2} item * @returns {*} */ function prepareSearchForItem(item) { if (!item.text || !item.text.charAt) item.text = item.text + ''; var spliter = /[\s/]+/; var __text__ = item.text.replace(/([\s\b\-()\[\]"']| | | |\s")+/g, ' ').trim().toLowerCase(); var __nvnText__ = nonAccentVietnamese(__text__); item.__words__ = __text__.split(spliter); item.__text__ = item.__words__.join(' '); item.__words__.sort(); item.__wordDict__ = item.__words__.reduce((ac, cr, i) => { ac[cr] = i + 1; return ac; }, {}); item.__nvnWords__ = __nvnText__.split(spliter); item.__nvnText__ = item.__nvnWords__.join(' ') item.__nvnWords__.sort(); item.__nvnWordDict__ = item.__nvnWords__.reduce((ac, cr, i) => { ac[cr] = i + 1; return ac; }, {}); return item; } function isItemMustIncluded(queryItem, item) { if (!queryItem) return true; if (item.__nvnText__.indexOf(queryItem.__nvnText__) >= 0) { return true; } var dict1 = queryItem.__nvnWordDict__; var dict2 = item.__nvnWordDict__; for (var i in dict1) { for (var j in dict2) { if (j.indexOf(i) < 0) return false; } } return true; } function calcItemMatchScore(queryItem, item) { var score = 0; if (!item.__text__) return 0; var hwScore = 0; var i; for (i = 0; i < queryItem.__words__.length; ++i) { if (item.__wordDict__[queryItem.__words__[i]]) { hwScore += HAS_WORD_SCORE; } else if (item.__nvnWordDict__[queryItem.__nvnWords__[i]]) { hwScore += HAS_NVN_WORD_SCORE; } } score = hwScore; if (item.__text__ === queryItem.__text__) { score += EQUAL_MATCH_SCORE; } var extraIndex = item.__text__.indexOf(queryItem.__text__); if (extraIndex >= 0) { score += EXTRA_MATCH_SCORE + 200 - extraIndex - (item.__text__.length - queryItem.__text__.length); } extraIndex = item.__nvnText__.indexOf(queryItem.__nvnText__); if (extraIndex >= 0) { score += EXTRA_MATCH_SCORE + 200 - extraIndex - (item.__text__.length - queryItem.__text__.length); } var n = Math.max(queryItem.__words__.length + 1, 1); score = Math.max(score, wordsMatch(queryItem.__words__, item.__words__), wordsMatch(queryItem.__nvnWords__, item.__nvnWords__)) / n * 2 * WORD_MATCH_SCORE; return score; } function scoreCmp(a, b) { if (b.score === a.score) { if (b.item.__nvnText__ > a.item.__nvnText__) return -1; return 1; } return b.score - a.score; } function keyStringOf(o) { var type = typeof o; var keys; if (o && type === "object") { if (o.getTime) { return 'd(' + o.getTime() + ')'; } else if (o.length && o.map) { return 'a(' + o.map(val => keyStringOf(val)).join(',') + ')'; } else { keys = Object.keys(o); keys.sort(); return 'o(' + keys.map(key => key + ':' + keyStringOf(o[key])).join(',') + ')'; } } else { return type[0] + '(' + o + ')'; } } function matchFilter(item, filter) { if (!filter) return true; var keys = item.keys; if (!keys) return false; for (var i in filter) { if (!keyCmp(keys[i], filter[i])) return false; } return true; } function toComparable(x) { if (!x) return x; var type = typeof x; if (type === 'string') return x; if (type === "number") return x; if (type === "boolean") return x; if (type.getTime) return type.getTime(); return x; } function keyCmp(itemKey, filterKey) { if (itemKey === filterKey) return true; if (!itemKey !== !filterKey) return false; if (!itemKey || !filterKey) return false; var filterKeyString = keyStringOf(filterKey) function withFilter(x) { var xString = keyStringOf(x) var res = xString === filterKeyString; if (!res && (typeof filterKey === "object")) { if (filterKey.some) { res = filterKey.some(function (y) { return keyStringOf(y) === x; }); } else if (('min' in filterKey) || ('max' in filterKey)) { res = true; if ('min' in filterKey) { res = res && toComparable(x) >= toComparable(filterKey.min); } if ('max' in filterKey) { res = res && toComparable(x) <= toComparable(filterKey.max); } } } return res; } if (itemKey.some) { return itemKey.some(withFilter); } else return withFilter(itemKey); } var benchmark = global.calcBenchmark(); /******************************************************************************************************************/ var slaves = {}; function SearchingSlave(id) { this.id = id; this.items = []; this.itemVersion = -1; this.tranferFinished = true; this.pendingTask = null; this.taskSession = Math.random() + ''; this.scoredHolders = []; this.searchingSession = Math.random() + ''; } SearchingSlave.prototype.onReceiveItems = function (n, start, end, items, version) { if (this.scoredHolders.length > start) { this.scoredHolders.splice(start); } var cItems = this.items; if (cItems.length < n) { // sessionItems cItems.push(null); } if (cItems.length > n) { cItems.splice(n); } this.itemVersion = version; for (var i = start; i < end; ++i) { cItems[i] = items[i - start]; } if (end === n) { this.tranferFinished = true; this.doTask(); } else { this.tranferFinished = false; } }; SearchingSlave.prototype.doTask = function () { if (!this.pendingTask) return; if (this.searchingSession === this.taskSession) return; var self = this; this.searchingSession = this.taskSession; var session = this.searchingSession; var items = this.items; var its = this.scoredHolders; var taskData = this.pendingTask; var itemVersion = this.itemVersion; var queryText = taskData.query.text; var filter = taskData.query.filter; var sort = taskData.query.sort; var queryTextItem = null; if (queryText) queryTextItem = prepareSearchForItem({ text: queryText }); var sortCmp = (a, b) => { var aKeys = a.item.keys; var bKeys = b.item.keys; var key; var av, bv; var d = 0; if (aKeys && !bKeys) { d = 1; } else if (!aKeys && bKeys) { d = -1; } else if (aKeys && bKeys) { for (var i = 0; i < sort.length; ++i) { key = sort[i].key; d = aKeys[key] - bKeys[key]; if (isNaN(d)) { if (aKeys[key] < bKeys[key]) { d = -1; } else if (aKeys[key] === bKeys[key]) { d = 0; } else { d = 1; } } if (sort[i].order === 'descending') d = -d; if (d !== 0) break; } } if (d === 0) { d = a.i - b.i; } return d; }; function likeSort(items) { var minValue = Infinity; var maxValue = -Infinity; var i; var n = items.length; var item; for (i = 0; i < n; ++i) { item = items[i]; if (item.score < minValue) minValue = item.score; if (item.score > maxValue) maxValue = item.score; } var segments = [[], [], [], [], [], [], [], []]; var threshold = maxValue - (maxValue - minValue) / 4; if (maxValue < 3) threshold = maxValue - (maxValue - minValue) / 8; var d = (maxValue - threshold) / (segments.length - 1); var v; var k; for (i = 0; i < n; ++i) { item = items[i]; v = item.score; if (item.mustIncluded) v = Math.max(threshold + 0.1, v); if (v < threshold || v < 0.8) continue; if (v >= maxValue) segments[segments.length - 1].push(item) else { k = ((v - threshold) / d) >> 0; segments[k].push(item); } } var res = []; var segment; while (segments.length > 0) { segment = segments.pop(); if (segment.length > 0) { if (sort) { segment.sort(sortCmp); } else { if (segment.length + res.length < 1000) segment.sort(scoreCmp); } res = res.concat(segment); } } return res; } function sortScore() { var result = its; if (filter) { result = result.filter(function (x) { return !!x; }) } // var now = new Date().getTime(); if (queryTextItem) { result = likeSort(result); } else if (sort) { result.sort(sortCmp); } // console.log("SortTime:", new Date().getTime() - now) result = result.map(function (it) { return it.i; }); self.searchingSession = 'done'; global.emit('searchEnd', self.id, Object({ hash: taskData.hash, idx: taskData.idx, result: result, itemVersion: self.itemVersion })); } function tick() { if (self.taskSession !== session) return; if (self.itemVersion !== itemVersion) { return; } if (its.length >= items.length) { sortScore(); return; } var k = benchmark * 5; if (!queryTextItem) k *= 30; var i = its.length; var n = items.length while (k-- && i < n) { if (!filter || matchFilter(items[i], filter)) { if (!items[i].prepare && queryTextItem) { items[i].prepare = true; prepareSearchForItem(items[i]); } its.push({ i: i, item: items[i], score: queryTextItem ? calcItemMatchScore(queryTextItem, items[i]) : 0, mustIncluded: isItemMustIncluded(queryTextItem, items[i]) }); } else { its.push(null); } ++i; } setTimeout(tick, 5); } tick(); }; SearchingSlave.prototype.receiveTask = function (taskData) { this.pendingTask = taskData && taskData.query && taskData; this.taskSession = taskData && taskData.idx; this.scoredHolders = []; if (this.tranferFinished && this.pendingTask) this.doTask(); } SearchingSlave.prototype.destroy = function () { this.items = null; delete slaves[this.id]; }; global.destroySlave = function (id) { slaves[id] && slaves[id].destroy(); }; /******************************************************************************************************************/ var data = {}; global.transferTask = function (id, taskData) { slaves[id] = slaves[id] || new SearchingSlave(id); slaves[id] && slaves[id].receiveTask(taskData); }; global.transferSearchItems = function (id, n, start, end, items, version) { slaves[id] = slaves[id] || new SearchingSlave(id); slaves[id].onReceiveItems(n, start, end, items, version); }; global.search = function (session, query) { var holder = data[session]; if (!holder) return false; var searchingSession = Math.random() + ''; holder.searchingSession = searchingSession; var now = new Date().getTime(); var items = data[session] && data[session].items; var its = Array(items.length); var queryItem = prepareSearchForItem({ text: query }); var resolve; var sync = new Promise(function (rs) { resolve = rs; }); function calcValue() { var i = 0; var n = items.length; function tick() { if (searchingSession !== holder.searchingSession) { resolve(false); return; } var c = benchmark * 5; while (c-- && i < n) { its[i] = { i: i, item: items[i], score: calcItemMatchScore(queryItem, items[i]) }; ++i; } if (i < n) { setTimeout(tick, 3); } else { setTimeout(sortScore, 3); } } tick(); } function sortScore() { if (searchingSession !== holder.searchingSession) { resolve(false); return; } now = new Date().getTime(); var result = likeSort(its).map(function (it) { return it.i; }); resolve(result); } setTimeout(calcValue, 3); return sync; }; } /* harmony default export */ var dynamictable_DTSearchFactor = (DTSearchFactor); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTBody.js /*** * * @param {DTBody} body * @constructor */ function SearchingMaster(body) { this.body = body; this.mode = body.modes.searching; this.waitingCtrl = body.table.wrapper.waitingCtl; this.initWorker(); this.id = randomIdent(10); this.transferSession = Math.random() + ''; this.transferred = 0; this.isTranferring = false; this.share.instances[this.id] = this; this.itemVersion = 0; this.outputCache = {}; this.lastTaskIdx = 0; } SearchingMaster.prototype.destroy = function () { this.share.thread.invoke('destroySlave', this.id); this.share.instances[this.id] = null; this.transferSession = "DIE"; delete this.share.instances[this.id]; }; SearchingMaster.prototype.transferFrom = function (offset) { if (this.transferSession === "DIE") { return; } this.outputCache = {}; if (offset < this.transferred) { this.transferred = offset; this.itemVersion++; } if (this.isTranferring) return; var waitingCtrl = this.waitingCtrl; var wTkn = waitingCtrl.begin(); var self = this; var transferSession = Math.random() + ''; self.transferSession = transferSession; self.isTranferring = true; setTimeout(function tick() { if (self.transferSession !== transferSession) { waitingCtrl.end(wTkn); return; } var i = self.transferred; var rows = self.body.rows; var n = self.body.rows.length; if (i >= n) { if (n === 0) { self.share.thread.invoke('transferSearchItems', self.id, n, 0, 0, [], self.itemVersion); } self.isTranferring = false; self.onFinishTransfer(); waitingCtrl.end(wTkn); return; } self.share.benchmark = self.share.benchmark || BrowserDetector["a" /* default */].calcBenchmark(); var k = self.share.benchmark >> 2; var items = []; var item; var start = i; while (i < n && k--) { item = { text: rows[i].innerText, value: i, keys: rows[i].data.keys }; items.push(item); ++i; } var sync = self.share.thread.invoke('transferSearchItems', self.id, n, start, i, items, self.itemVersion); self.transferred = i; Promise.all([sync, new Promise(function (rs) { setTimeout(rs, 5); })]).then(tick); }, 5); }; SearchingMaster.prototype.onFinishTransfer = function () { // console.log('finish'); }; SearchingMaster.prototype.sendTask = function (query) { if (this.transferSession === "DIE") { return; } this.lastTaskIdx++; var taskData = { idx: this.lastTaskIdx, query: query, hash: calcDTQueryHash(query) }; if (this.outputCache[taskData.hash]) { setTimeout(this.onResult.bind(this, this.outputCache[taskData.hash], true), 5); } else { this.share.thread.invoke('transferTask', this.id, taskData); } return taskData; }; SearchingMaster.prototype.onResult = function (response, dontCache) { if (this.itemVersion !== response.itemVersion) return; if (!dontCache) { this.outputCache[response.hash] = response; } this.body.modes.searching.onResult(response); }; SearchingMaster.prototype.share = { thread: null, benchmark: 0, instances: {} }; SearchingMaster.prototype.initWorker = function () { if (!this.share.thread) { this.share.thread = new Network_Thread({ methods: { init: dynamictable_DTSearchFactor, calcBenchmark: BrowserDetector["a" /* default */].calcBenchmark }, extendCode: 'init(this);' }); this.share.thread.on('alert', function (mess) { alert(mess); }); this.share.thread.on('searchEnd', function (id, response) { this.share.instances[id] && this.share.instances[id].onResult(response); }.bind(this)); setTimeout(function () { this.share.benchmark = this.share.benchmark || BrowserDetector["a" /* default */].calcBenchmark(); }.bind(this)); } }; /*** * * @param {DTBody} body * @constructor */ function BaseMode(body) { this.body = body; this.offset = 0; this.rowOffset = -1000; this.boundCache = null; this.viewedRows = null; } BaseMode.prototype.name = 'base'; BaseMode.prototype.resetViewParam = function () { this.offset = 0; this.rowOffset = -1000; this.boundCache = null; this.viewedRows = null; }; BaseMode.prototype.getBoundOfRows = function () { if (this.boundCache) return this.boundCache; if (!this.body.table.wrapper.isDescendantOf(document.body)) return null; var bodyBound = this.body.elt.getBoundingClientRect(); var elt = this.body.elt; var childNodes = elt.childNodes; this.boundCache = Array.prototype.map.call(childNodes, elt => { var eBound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); eBound.y -= bodyBound.top; return eBound; }); this.boundCache.body = Math_Rectangle.fromClientRect(bodyBound); this.boundCache.header = Math_Rectangle.fromClientRect(this.body.table.header.elt.getBoundingClientRect()); return this.boundCache; }; BaseMode.prototype.updateRowsIfNeed = function () { throw Error("Not implement!"); }; BaseMode.prototype.render = function () { this.updateRowsIfNeed(); var bounds = this.getBoundOfRows(); if (!bounds) { setTimeout(() => { if (this.body.elt.isDescendantOf(document.body)) { this.render(); } }, 0); return; } var dy = 0, rowIdx; if (bounds.length > 0) { rowIdx = Math.floor(this.offset - this.rowOffset); dy = bounds[rowIdx].y + (this.offset - this.rowOffset - rowIdx) * bounds[rowIdx].height; } var availableHeight; if (bounds.length > 0) { availableHeight = this.body.table.wrapper.$viewport.getBoundingClientRect().height - bounds.header.height; if (bounds[bounds.length - 1].y + bounds[bounds.length - 1].height - dy < availableHeight - 1) { dy = -availableHeight + bounds[bounds.length - 1].y + bounds[bounds.length - 1].height + 1;//1: last border } } dy = Math.max(0, dy); this.body.table.wrapper.$space.addStyle('top', -dy + 'px'); this.body.table.wrapper.$fixedXCtn.addStyle('top', -dy + 'px'); }; /*** * @extends BaseMode * @param {DTBody} body * @constructor */ function SearchingMode(body) { BaseMode.call(this, body); this.status = 'STANDBY'; this.waitingToken = 'none'; this.waitingCtrl = body.table.wrapper.waitingCtl; this.taskHash = 0; this.renderingHash = -1; this.resultItems = []; this.viewedRows = []; } OOP["a" /* default */].mixClass(SearchingMode, BaseMode); SearchingMode.prototype.name = 'search'; SearchingMode.prototype.start = function () { this.status = "RUNNING"; this.searchingCache = {}; this.body.table.wrapper.addClass('as-searching'); this.renderingHash = -1; }; SearchingMode.prototype.end = function () { this.body.table.wrapper.removeClass('as-searching'); this.searchingItems = null; this.status = "STOP"; this.waitingCtrl.end(this.waitingToken); this.body.master.sendTask(null); }; SearchingMode.prototype.updateRowsIfNeed = function () { var screenSize = Object(Dom["d" /* getScreenSize */])(); var rowPerPage = Math.ceil(Math.ceil(screenSize.height / 40) / 25) * 25; if (this.body.table.wrapper.hasClass('as-adapt-infinity-grow')) rowPerPage = 1e7; var newRowOffset = Math.floor(this.offset / rowPerPage) * rowPerPage; if (this.resultItems.length - newRowOffset < rowPerPage) { newRowOffset = Math.max(0, newRowOffset - rowPerPage); } if (newRowOffset === this.rowOffset) return; this.rowOffset = newRowOffset; var start = this.rowOffset; var end = Math.min(start + rowPerPage * 2, this.resultItems.length); var elt = this.body.elt; var fixedXElt = this.body.fixedXElt; var rows = this.body.rows; var nRows = []; for (var i = start; i < end; ++i) { nRows.push(rows[this.resultItems[i]]); } var nChildren = nRows.map(r => r.elt); var nFixedXChildren = nRows.map(r => r.fixedXElt); replaceChildrenInElt(elt, nChildren); replaceChildrenInElt(fixedXElt, nFixedXChildren); this.boundCache = null; var bounds = this.getBoundOfRows(); if (bounds) { for (var i = 0; i < nRows.length; ++i) { nRows[i].updateCopyEltSize(); } this.body.table.wrapper.layoutCtrl.onResize(); this.body.table.updateCopyEltSize(); } if (!bounds) { setTimeout(() => { if (this.body.elt.isDescendantOf(document.body)) { var bounds = this.getBoundOfRows(); if (bounds) { for (var i = 0; i < nRows.length; ++i) { nRows[i].updateCopyEltSize(); } this.body.table.wrapper.layoutCtrl.onResize(); this.body.table.updateCopyEltSize(); } } }, 0); } }; SearchingMode.prototype.onRowSplice = function (idx) { this.rowOffset = -1000; this.render(); } SearchingMode.prototype.onRowRemoved = function (idx, n) { n = n || 1; this.resultItems = this.resultItems.reduce(function (ac, cr) { if (cr >= idx + n) { ac.push(cr - n); } else if (cr < idx) { ac.push(cr); } return ac; }, []); }; SearchingMode.prototype.onRowAdded = function (idx, n) { n = n || 1; this.resultItems = this.resultItems.reduce(function (ac, cr) { if (cr >= idx) { ac.push(cr + n); } else { ac.push(cr); } return ac; }, []); }; SearchingMode.prototype.viewIntoRow = function (row) { console.log(row); }; SearchingMode.prototype.query = function (query) { this.waitingCtrl.end(this.waitingToken); this.waitingToken = this.waitingCtrl.begin(); var taskHolder = this.body.master.sendTask(query); this.taskHash = taskHolder.hash; }; SearchingMode.prototype.onResult = function (response) { if (this.status !== 'RUNNING' || response.hash !== this.taskHash) return; this.waitingCtrl.end(this.waitingToken); if (this.renderingHash !== response.hash) { this.renderingHash = response.hash; this.offset = 0; this.rowOffset = -1000; } this.resultItems = response.result; this.viewedRows = this.resultItems.map(rIdx => this.body.rows[rIdx]); this.render(); }; SearchingMode.prototype.share = { thread: null }; /*** * @extends BaseMode * @param {DTBody} body * @constructor */ function NormalMode(body) { BaseMode.call(this, body); } OOP["a" /* default */].mixClass(NormalMode, BaseMode); NormalMode.prototype.name = 'normal'; NormalMode.prototype.start = function () { this.resetViewParam(); this.viewedRows = this.body.rows; this.render(); }; NormalMode.prototype.end = function () { }; NormalMode.prototype.updateRowsIfNeed = function () { var screenSize = Object(Dom["d" /* getScreenSize */])(); var rowPerPage = Math.ceil(Math.ceil(screenSize.height / 40) / 25) * 25; if (this.body.table.wrapper.hasClass('as-adapt-infinity-grow')) rowPerPage = 1e7; var newRowOffset = Math.floor(this.offset / rowPerPage) * rowPerPage; var data = this.body.data; if (data.rows.length - newRowOffset < rowPerPage) { newRowOffset = Math.max(0, newRowOffset - rowPerPage); } if (newRowOffset === this.rowOffset) return; this.rowOffset = newRowOffset; var start = this.rowOffset; var elt = this.body.elt; var fixedXElt = this.body.fixedXElt; var end = Math.min(start + rowPerPage * 2, data.rows.length); var rows = this.body.rows; elt.clearChild(); fixedXElt.clearChild(); for (var i = start; i < end; ++i) { elt.addChild(rows[i].elt); fixedXElt.addChild(rows[i].fixedXElt); } this.boundCache = null; var bounds = this.getBoundOfRows(); if (bounds) { for (var i = start; i < end; ++i) { rows[i].updateCopyEltSize(); } this.body.table.wrapper.layoutCtrl.onResize(); this.body.table.updateCopyEltSize(); } if (!bounds) { setTimeout(() => { if (this.body.elt.isDescendantOf(document.body)) { var bounds = this.getBoundOfRows(); if (bounds) { for (var i = start; i < end; ++i) { rows[i].updateCopyEltSize(); } this.body.table.wrapper.layoutCtrl.onResize(); this.body.table.updateCopyEltSize(); } } }, 0); } this.body.table.wrapper.rowDragCtrl.ev_rowRenderChange(); } NormalMode.prototype.onRowSplice = function (idx) { this.rowOffset = -1; this.render(); }; NormalMode.prototype.viewIntoRow = function (o) { var idx = this.viewedRows.findIndex(row => { if (o === row._elt) return true; if (o === row) return true; if (o === row.data) return true; if (o === row.id || row.data.id === o) return true; return false; }); if (idx <= 0) return; var scrollbar = this.body.table.wrapper.$vscrollbar; scrollbar.innerOffset = Math.max(0,Math.min(idx - scrollbar.outerHeight / 3,scrollbar.innerHeight - scrollbar.outerHeight)); scrollbar.emit('scroll'); }; /*** * * @param {DTTable} table * @param data * @constructor */ function DTBody(table, data) { this.table = table; this.data = data; this._elt = null; this._fixedXElt = null; this.rows = this.data.rows.map(function (rowData, i) { var row = new dynamictable_DTBodyRow(this, rowData); row.idx = i; return row; }.bind(this)); this.modes = { normal: new NormalMode(this), searching: new SearchingMode(this) }; // // this.curentMode = this.modes.normal; this.curentMode.start(); this.curentMode.render(); // this.master = new SearchingMaster(this); this.master.transferFrom(0); /*** * @name offset * @type {number} * @memberOf DTBody# */ } DTBody.prototype.revokeResource = function () { this.master.destroy(); }; DTBody.prototype.requireRows = function (start, end) { if (typeof start !== "number") start = 0; if (typeof end !== "number") end = Infinity; end = Math.min(end, this.data.rows.length); return this.rows.slice(start, end); }; DTBody.prototype.reindexRows = function (start, end) { if (typeof start !== "number") start = 0; if (typeof end !== "number") end = Infinity; end = Math.min(end, this.data.rows.length); for (var i = start; i < end; ++i) { if (this.rows[i]) this.rows[i].idx = i; } }; DTBody.prototype.onRowSplice = function (idx) { this.curentMode.onRowSplice(idx); this.master.transferFrom(idx); ResizeSystem["a" /* default */].requestUpdateSignal(); } DTBody.prototype.rowIndexOf = function (o) { var n = this.rows.length; for (var i = 0; i < n; ++i) { if (o === this.rows[i]._elt) return i; if (o === this.rows[i]) return i; if (o === this.data.rows[i]) return i; if (o === this.data.rows[i].id) return i; } return -1; }; DTBody.prototype.addRowBefore = function (rowData, bf) { var idx; if (bf === null || bf === undefined) { return this.addRow(rowData); } else { idx = this.rowIndexOf(bf); if (idx < 0) throw new Error("$bf not is a row in table"); return this.addRow(rowData, idx); } }; DTBody.prototype.addRowAfter = function (rowData, at) { var idx; if (at === null || at === undefined) { return this.addRow(rowData, 0); } else { idx = this.rowIndexOf(at); if (idx < 0) throw new Error("$bf not is a row in table"); return this.addRow(rowData, idx + 1); } }; DTBody.prototype.addRow = function (rowData, idx) { if (!isNaturalNumber(idx) || idx >= this.rows.length) { idx = this.rows.length; } var row; if (idx >= this.rows.length) { idx = this.rows.length; this.data.rows.push(rowData); row = new dynamictable_DTBodyRow(this, rowData) row.idx = idx; this.rows.push(row); if (this.curentMode.onRowAdded) this.curentMode.onRowAdded(idx, 1); this.onRowSplice(this.rows.length - 1); } else { row = new dynamictable_DTBodyRow(this, rowData); row.idx = idx; this.rows.splice(idx, 0, row); this.data.rows.splice(idx, 0, rowData); this.reindexRows(idx + 1); this.onRowSplice(idx); } return row; }; DTBody.prototype.addRows = function (rowsData, idx) { if (!isNaturalNumber(idx) || idx >= this.rows.length) { idx = this.rows.length; } var res = []; var row, i, rowData; if (idx >= this.rows.length) { idx = this.rows.length; for (i = 0; i < rowsData.length; ++i) { rowData = rowsData[i]; row = new dynamictable_DTBodyRow(this, rowData); row.idx = i + idx; this.data.rows.push(rowData); res.push(row); this.rows.push(row); } } else { for (i = 0; i < rowsData.length; ++i) { rowData = rowsData[i]; row = new dynamictable_DTBodyRow(this, rowData); row.idx = i + idx; res.push(row); this.data.rows.splice(idx + i, 0, rowData); this.rows.splice(idx + i, 0, row); } this.reindexRows(idx + rowsData.length); } if (this.curentMode.onRowAdded) this.curentMode.onRowAdded(idx, rowsData.length); this.onRowSplice(idx); return res; }; DTBody.prototype.removeRow = function (row) { var idx = this.rowIndexOf(row); if (idx < 0) return; this.rows.splice(idx, 1); this.data.rows.splice(idx, 1); this.reindexRows(idx); if (this.curentMode.onRowRemoved) this.curentMode.onRowRemoved(idx); this.onRowSplice(idx); }; DTBody.prototype.moveRowAt = function (idx, newIdx) { var row = this.rows.splice(idx, 1)[0]; var rowData = this.data.rows.splice(idx, 1)[0]; this.rows.splice(newIdx, 0, row); this.data.rows.splice(newIdx, 0, rowData); this.reindexRows(Math.min(idx, newIdx)); this.onRowSplice(Math.min(idx, newIdx)); }; DTBody.prototype.clearRows = function () { var n = this.rows.length; this.rows.splice(0); this.data.rows.splice(0); if (this.curentMode.onRowRemoved) this.curentMode.onRowRemoved(0, n); this.onRowSplice(0); }; DTBody.prototype.rowAt = function (idx) { if (this.rows[idx]) return this.rows[idx]; var rowData = this.data.rows[idx]; if (rowData) { this.rows[idx] = new dynamictable_DTBodyRow(this, rowData); this.rows[idx].idx = idx; } else return null; }; DTBody.prototype.rowOf = function (o) { var idx = this.rowIndexOf(o); return this.rowAt(idx); }; DTBody.prototype.viewIntoRow = function (row) { return this.curentMode.viewIntoRow(row); }; DTBody.prototype.startSearchingIfNeed = function () { if (this.curentMode !== this.modes.searching) { this.curentMode.end(); this.curentMode = this.modes.searching; this.curentMode.start(); } }; DTBody.prototype.stopSearchIfNeed = function () { if (this.curentMode === this.modes.searching) { this.curentMode.end(); this.curentMode = this.modes.normal; this.curentMode.start(); } }; DTBody.prototype.query = function (query) { var now = new Date().getTime(); if (query) { this.startSearchingIfNeed(); } else if (!query) { this.stopSearchIfNeed(); this.curentMode.render(); } if (this.curentMode.query && query) { this.curentMode.query(query); } }; DTBody.prototype.updateCopyEltSize = function () { this.rows.forEach(row => row.updateCopyEltSize()); }; Object.defineProperties(DTBody.prototype, { offset: { set: function (value) { this._offset = value; this.curentMode.offset = value; this.curentMode.render(); }, get: function () { return this._offset; } }, searching: { get: function () { return this.elt.hasClass('as-searching'); } } }); Object.defineProperty(DTBody.prototype, 'elt', { get: function () { if (this._elt) return this._elt; this._elt = Object(ACore["c" /* _ */])({ tag: 'tbody', class: 'as-dt-body', }); if (this.data.on) { Object.keys(this.data.on).forEach(key => { var cb = this.data.on[key]; if (typeof cb !== "function") return; this._elt.on(key, event => { cb.call(this._elt, event, this); }); }); } return this._elt; } }); Object.defineProperty(DTBody.prototype, 'fixedXElt', { get: function () { if (this._fixedXElt) return this._fixedXElt; this._fixedXElt = Object(ACore["c" /* _ */])({ elt: this.elt.cloneNode(false), class: 'as-fixed-x', }); return this._fixedXElt; } }); Object.defineProperty(DTBody.prototype, 'adapter', { get: function () { return this.table.adapter; } }); /* harmony default export */ var dynamictable_DTBody = (DTBody); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTTable.js /*** * * @param {DynamicTable} elt * @param {} data * @constructor */ function DTTable(wrapper, data) { this.wrapper = wrapper; this._elt = null; this._fixedXElt = null; this._fixedXYElt = null; this._fixedYElt = null; /*** * * @type {DTDataTable|null|*|string} */ this.adapter = this.wrapper._adapter; this.data = data; this.header = new dynamictable_DTHead(this, this.data.head); this.body = new dynamictable_DTBody(this, this.data.body); } DTTable.prototype.updateCopyEltSize = function () { if (!this._fixedYElt) return; var bound = this._elt.getBoundingClientRect(); if (this._fixedYElt) this._fixedYElt.addStyle('width', bound.width + 'px'); this.header.updateCopyEltSize(); this.body.updateCopyEltSize(); } DTTable.prototype.revokeResource = function () { this.body.revokeResource(); }; Object.defineProperty(DTTable.prototype, 'elt', { get: function () { if (this._elt) return this._elt; this._elt = Object(ACore["c" /* _ */])({ tag: 'table', class: 'as-dynamic-table', child: [ this.header.copyElt, this.body.elt ] }); return this._elt; } }); Object.defineProperty(DTTable.prototype, 'fixedXElt', { get: function () { if (this._fixedXElt) return this._fixedXElt; this._fixedXElt = Object(ACore["c" /* _ */])({ elt: this.elt.cloneNode(false), class: 'as-fixed-x', child: [this.header.fixedXElt, this.body.fixedXElt] }); return this._fixedXElt; } }); Object.defineProperty(DTTable.prototype, 'fixedYElt', { get: function () { if (this._fixedYElt) return this._fixedYElt; this._fixedYElt = Object(ACore["c" /* _ */])({ elt: this.elt.cloneNode(false), class: 'as-dt-fixed-y', child: [this.header.elt] }); return this._fixedYElt; } }); Object.defineProperty(DTTable.prototype, 'fixedXYElt', { get: function () { if (this._fixedXYElt) return this._fixedXYElt; this._fixedXYElt = Object(ACore["c" /* _ */])({ elt: this.elt.cloneNode(false), class: 'as-dt-fixed-y', child: [this.header.fixedXYElt] }); return this._fixedXYElt; } }); /* harmony default export */ var dynamictable_DTTable = (DTTable); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTDataAdapter.js /*** * @typedef DTDataRow * @property */ /*** * @typedef DTDataBody * @property {DTDataRow[]} row */ /*** * @typedef DTDataHead * @property {DTDataHRow[]} row */ /*** * @typedef DTDataTable * @property head * @property body * @property {number} rowsPerPage * @property {number} fixedCol */ /*** * * @param {DynamicTable} tableElt * @param {DTDataAdapter} opt * @constructor */ function DTDataAdapter(tableElt, opt) { this.tableElt = tableElt; /*** * * @type {null|DTDataTable} */ this.data = null; this.rowsPerPage = 20; this.fixedCol = 0; Object.assign(this, opt); if (this.fixedCol === 0) { this.tableElt.removeClass('as-has-fixed-col'); } else { this.tableElt.addClass('as-has-fixed-col'); } } DTDataAdapter.prototype.render = function () { if (this.tableElt.table) this.tableElt.table.revokeResource(); this.tableElt.table = new dynamictable_DTTable(this.tableElt, this.data); }; DTDataAdapter.prototype.renderHeadCell = function (elt, data, controller) { if (data.child) { if (data.child.map) { elt.addChild(data.child.map(function (it) { return Object(ACore["c" /* _ */])(it); })); } else { elt.addChild(Object(ACore["c" /* _ */])(data.child)); } } if (data.render) { data.render.call(null, elt, data, controller); } }; DTDataAdapter.prototype.renderBodyCell = function (elt, data, controller) { if (data.child) { if (data.child.map) { elt.addChild(data.child.map(function (it) { return Object(ACore["c" /* _ */])(it); })) } else { elt.addChild(Object(ACore["c" /* _ */])(data.child)); } } if (data.render) { data.render.call(null, elt, data, controller); } if (data.style) { elt.addStyle(data.style); } }; /* harmony default export */ var dynamictable_DTDataAdapter = (DTDataAdapter); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/dynamictable.css var dynamictable = __webpack_require__(295); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTWaitingViewController.js /*** * * @param {DynamicTable} tableElt * @constructor */ function DTWaitingViewController(tableElt) { this.tableElt = tableElt; this.tokens = {}; this.traceToken = {}; this.timeoutIdx = -1; } DTWaitingViewController.prototype.begin = function () { var token = Math.random() + ''; if (this.tableElt.$searchInput) this.tableElt.$searchInput.waiting = true; this.tokens[token] = true; this.traceToken[token] = new Error(token); if (this.timeoutIdx > 0) { clearTimeout(this.timeoutIdx); this.timeoutIdx = -1; } return token; }; DTWaitingViewController.prototype.end = function (token) { delete this.tokens[token]; delete this.traceToken[token]; if (this.timeoutIdx > 0) { clearTimeout(this.timeoutIdx); } this.timeoutIdx = setTimeout(function () { this.timeoutIdx = -1; for (var i in this.tokens) return; if (this.tableElt.$searchInput) this.tableElt.$searchInput.waiting = false; }.bind(this), 100); }; /* harmony default export */ var dynamictable_DTWaitingViewController = (DTWaitingViewController); // CONCATENATED MODULE: ./node_modules/absol/src/HTML5/DynamicCSS.js function DynamicCSS() { this.elt = document.createElement('style'); this.data = {}; this.state = 'STANDBY'; this.start(); } /** * * @returns {this} */ DynamicCSS.prototype.commit = function () { this.elt.innerHTML = Object.keys(this.data).map(ruleQuery => { var rule = this.data[ruleQuery]; return [ ruleQuery + ' {', ' ' + Object.keys(rule).map(name => name + ': ' + rule[name] + ';').join('\n'), '}' ].join('\n'); } ).join('\n\n'); return this; }; DynamicCSS.prototype.start = function () { if (this.state !== 'STANDBY' && this.state !== 'STOP') return; this.state = 'RUNNING'; document.head.appendChild(this.elt); return this; }; DynamicCSS.prototype.stop = function () { if (this.state !== 'RUNNING') return; this.elt.remove(); return this; }; DynamicCSS.prototype.destroy = function () { this.stop(); if (this.state !== 'STOP') return; this.elt = null; return this; }; /*** * * @param {string} ruleQuery * @param {string} name * @param {string} value * @returns {this} */ DynamicCSS.prototype.setProperty = function (ruleQuery, name, value) { this.data[ruleQuery] = this.data[ruleQuery] || {}; this.data[ruleQuery][name] = value; return this; }; /** * * @param ruleQuery * @param name * @returns {*|undefined} */ DynamicCSS.prototype.getProperty = function (ruleQuery, name) { var rule = this.data[ruleQuery]; return rule ? rule[name] : undefined; }; /*** * * @param ruleQuery * @param property * @returns {DynamicCSS} */ DynamicCSS.prototype.removeProperty = function (ruleQuery, property) { var rule = this.data[ruleQuery]; if (rule) delete rule[property]; return this; }; /*** * * @param ruleQuery * @param {object} properties * @returns {this} */ DynamicCSS.prototype.setRule = function (ruleQuery, properties) { this.data[ruleQuery] = Object.assign({}, properties); return this; }; /*** * * @param ruleQuery * @param {object} properties * @returns {this} */ DynamicCSS.prototype.modifyRule = function (ruleQuery, properties) { this.data[ruleQuery] = Object.assign(this.data[ruleQuery] || {}, properties); return this; }; /*** * * @param {string} ruleQuery * @returns {object} */ DynamicCSS.prototype.getRule = function (ruleQuery) { return this.data[ruleQuery]; }; /** * * @param {string} ruleQuery * @returns {this} */ DynamicCSS.prototype.removeRule = function (ruleQuery) { delete this.data[ruleQuery]; return this; }; /*** * * @param {object} rules * @returns {this} */ DynamicCSS.prototype.setRules = function (rules) { Object.keys(rules).forEach(key => this.setRule(key, rules[key])); return this; }; DynamicCSS.prototype.getRules = function () { return this.data; }; DynamicCSS.prototype.modifyRules = function (rules) { Object.keys(rules).forEach(key => this.modifyRule(key, rules[key])); return this; }; /* harmony default export */ var HTML5_DynamicCSS = (DynamicCSS); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DynamicTable.js var loadStyleSheet = function () { var dynamicStyleSheet = {}; var key = Array(20).fill(0).map((u, i) => [ '.as-dynamic-table-wrapper.as-hide-col-' + i + ' td[data-col-idx="' + i + '"]', '.as-dynamic-table-wrapper.as-hide-col-' + i + ' th[data-col-idx="' + i + '"]' ].join(', ')).join(',\n'); dynamicStyleSheet[key] = { display: 'none' }; buildCss(dynamicStyleSheet); loadStyleSheet = noop; } function DynamicTableManager() { this.tables = []; this.storageChanged = false; } DynamicTableManager.prototype.STORE_KEY = 'DynamicTableSetting'; DynamicTableManager.prototype.VER = 2; DynamicTableManager.prototype.initIfNeed = function () { if (this.css) return; this.css = new HTML5_DynamicCSS(); this.tables = []; try { var json = localStorage.getItem(this.STORE_KEY); if (json) { this.data = JSON.parse(json); if (!this.data || this.data.ver !== this.VER) this.data = null; } } catch (er) { } this.data = this.data || { ver: this.VER, colWidth: {} }; this.initCss(); }; DynamicTableManager.prototype.initCss = function () { Object.keys(this.data.colWidth).forEach(tableId => { Object.keys(this.data.colWidth[tableId]).forEach(colId => { var value = this.data.colWidth[tableId][colId]; this.css.setProperty(`#${tableId} th[data-col-id="${colId}"]`, 'width', value + 'px') }); }); this.css.commit(); }; DynamicTableManager.prototype.add = function (table) { this.tables.push(table); }; DynamicTableManager.prototype.removeTrash = function () { this.tables = this.tables.filter(table => table.isDescendantOf(document.body)); }; DynamicTableManager.prototype.commitColWidth = function (sender, tableId, colId, value, storage) { this.setColWidth(tableId, colId, value, storage); this.removeTrash(); this.commit(); this.tables.forEach(table => { if (table.id === table && table !== sender) { table.requestUpdateSize(); } }); }; DynamicTableManager.prototype.hasColSize = function (tableId, colId) { return this.data.colWidth[tableId] && this.data.colWidth[tableId][colId]; }; DynamicTableManager.prototype.setColWidth = function (tableId, colId, value, storage) { if (storage) { this.data.colWidth[tableId] = this.data.colWidth[tableId] || {}; this.data.colWidth[tableId][colId] = value; this.storageChanged = true; } this.css.setProperty(`#${tableId} th[data-col-id="${colId}"]`, 'width', value + 'px'); }; DynamicTableManager.prototype.commit = function () { if (this.storageChanged) { localStorage.setItem(this.STORE_KEY, JSON.stringify(this.data)); this.storageChanged = false; } this.css.commit(); } var DynamicTable_manager = new DynamicTableManager(); /*** * @extends AElement * @constructor */ function DynamicTable() { DynamicTable_manager.initIfNeed(); loadStyleSheet(); this.css = new HTML5_DynamicCSS(); this._hiddenColumns = []; /*** * * @type {SearchTextInput|null} */ this.$searchInput = null; /*** * * @type {AElement} */ this.$table = Object(ACore["a" /* $ */])('.as-dynamic-table', this); /*** * * @type {AElement} */ this.$thead = Object(ACore["a" /* $ */])('.as-dynamic-table>thead', this.$table); /*** * * @type {AElement} */ this.$tbody = Object(ACore["a" /* $ */])('.as-dynamic-table>tbody', this.$table); this.$filterInputs = []; this.$attachhook = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](Object(ACore["c" /* _ */])('attachhook').addTo(this)); //controller this.table = null; this.$space = Object(ACore["a" /* $ */])('.as-dynamic-table-space', this); this.$fixedYCtn = Object(ACore["a" /* $ */])('.as-dynamic-table-fixed-y-ctn', this); this.$fixedXCtn = Object(ACore["a" /* $ */])('.as-dynamic-table-fixed-x-ctn', this); this.$fixedXYCtn = Object(ACore["a" /* $ */])('.as-dynamic-table-fixed-xy-ctn', this); this.$viewport = Object(ACore["a" /* $ */])('.as-dynamic-table-viewport', this); this.$hscrollbar = Object(ACore["a" /* $ */])('.as-dynamic-table-hb', this); this.$vscrollbar = Object(ACore["a" /* $ */])('.as-dynamic-table-vb', this); this.$pageSelector = new VirtualPageSelector(this); this.extendStyle = {}; // this.$attachhook.requestUpdateSize = this.fixedContentCtrl.updateSize.bind(this.fixedContentCtrl); this.$attachhook.requestUpdateSize = this.requestUpdateSize.bind(this); this.$attachhook.on('attached', () => { ResizeSystem["a" /* default */].add(this.$attachhook); this.layoutCtrl.onAttached(); this.colSizeCtrl.onAttached(); DynamicTable_manager.add(this); setTimeout(() => { this.requestUpdateSize(); }, 10); }) /*** * * @type {{data: DTDataTable}||null} */ this.adapter = null; this.waitingCtl = new dynamictable_DTWaitingViewController(this); this.layoutCtrl = new LayoutController(this); this.pointerCtrl = new PointerController(this); this.colSizeCtrl = new ColSizeController(this); this.rowDragCtrl = new RowDragController(this); var checkAlive = () => { if (this.isDescendantOf(document.body)) { setTimeout(checkAlive, 5000); } else { this.revokeResource(); } }; setTimeout(checkAlive, 30000); } DynamicTable.tag = 'DynamicTable'.toLowerCase(); DynamicTable.render = function () { return Object(ACore["c" /* _ */])({ id: 'no-id-' + randomIdent(10), extendEvent: ['orderchange', 'colresize'], class: 'as-dynamic-table-wrapper', child: [ { tag: js_Hanger.tag, class: 'as-dynamic-table-viewport', child: [ { class: 'as-dynamic-table-space', }, { class: 'as-dynamic-table-fixed-y-ctn' }, { class: 'as-dynamic-table-fixed-x-ctn' }, { class: 'as-dynamic-table-fixed-xy-ctn' } ] }, { tag: VScrollbar, class: 'as-dynamic-table-vb' }, { tag: HScrollbar, class: 'as-dynamic-table-hb' }, ] }); }; DynamicTable.prototype.styleHandlers = {}; /*** * @this {DynamicTable} * @param value */ DynamicTable.prototype.styleHandlers.minWidth = function (value) { this.extendStyle.minWidth = value; //todo }; DynamicTable.prototype.styleHandlers['min-width'] = DynamicTable.prototype.styleHandlers.minWidth; /*** * @this {DynamicTable} * @param value */ DynamicTable.prototype.styleHandlers.tableLayout = function (value) { if (value === 'fixed') { this.addClass('as-table-layout-fixed'); } else { this.removeClass('as-table-layout-fixed'); } //todo }; DynamicTable.prototype.styleHandlers['table-layout'] = DynamicTable.prototype.styleHandlers.tableLayout; DynamicTable.prototype.addStyle = function (arg0, arg1) { if (this.styleHandlers[arg0]) { this.styleHandlers[arg0].call(this, arg1); } else { AElement["a" /* default */].prototype.addStyle.apply(this, arguments); } }; DynamicTable.prototype.requestUpdateSize = function () { this.layoutCtrl.onResize(); }; DynamicTable.prototype.revokeResource = function () { this.css.stop(); this.table && this.table.revokeResource(); this.attachSearchInput(null); this.filterInputs = []; }; DynamicTable.prototype.addRowBefore = function (rowData, bf) { return this.table.body.addRowBefore(rowData, bf); }; DynamicTable.prototype.addRowAfter = function (rowData, at) { return this.table.body.addRowAfter(rowData, at); }; DynamicTable.prototype.replaceRow = function (rowData, rp) { var row = this.rowOf(rp); if (row) { row.updateData(rowData); } ResizeSystem["a" /* default */].requestUpdateSignal(); }; DynamicTable.prototype.addRow = function (rowData, idx) { return this.table.body.addRow(rowData, idx); }; DynamicTable.prototype.addRows = function (rowsData, idx) { return this.table.body.addRows(rowsData, idx); }; DynamicTable.prototype.removeRow = function (row) { return this.table.body.removeRow(row); }; DynamicTable.prototype.rowAt = function (idx) { return this.table.body.rowAt(idx); }; DynamicTable.prototype.rowOf = function (o) { return this.table.body.rowOf(o); }; DynamicTable.prototype.rowIndexOf = function (o) { return this.table.body.rowIndexOf(o); }; DynamicTable.prototype.getRows = function () { return this.table.body.rows; }; DynamicTable.prototype.requireRows = function (start, end) { return this.table.body.requireRows(start, end); }; DynamicTable.prototype.clearRows = function () { return this.table.body.clearRows(); }; DynamicTable.prototype.viewIntoRow = function (row) { var counter = 300; var wait = () => { counter--; if (this.isDescendantOf(document.body)) { if (this.hasClass('as-adapt-infinity-grow')) { row = this.rowOf(row); if (row) { vScrollIntoView(row.elt); } } else { this.table.body.viewIntoRow(row); } } else if (counter > 0) { setTimeout(wait, 30); } } setTimeout(wait, 10); }; DynamicTable.prototype.attachSearchInput = function (inputElt) { if (this.$searchInput) { this.$searchInput.off('stoptyping', this.eventHandler.searchModify); this.$searchInput.off('keyup', this.eventHandler.searchKeyUp); } this.$searchInput = inputElt; if (this.$searchInput) { if (this.$searchInput.$table) { this.$searchInput.off('stoptyping', this.$searchInput.$table.eventHandler.searchModify); this.$searchInput.off('keyup', this.$searchInput.$table.eventHandler.searchKeyUp); } this.$searchInput.$table = this; this.$searchInput.on('stoptyping', this.eventHandler.searchModify); this.$searchInput.on('keyup', this.eventHandler.searchKeyUp); } }; DynamicTable.prototype.filter = function (filter) { var query = {}; var queryText = (this.$searchInput && this.$searchInput.value) || ''; queryText = queryText.trim().replace(/\s\s+/g, ' '); var i; if (filter) { for (i in filter) { query.filter = filter; break; } } if (queryText && queryText.length > 0) query.text = queryText; for (i in query) { this.query(query); return; } this.query(null); }; DynamicTable.prototype.makeQuery = function () { var query = {}; var textQuery = this.$searchInput && this.$searchInput.value.trim().replace(/\s\s+/, ' '); if (textQuery && textQuery.length > 0) query.text = textQuery; var i; var filter = this.$filterInputs.reduce(function (ac, elt) { if (elt.exportFilter) { elt.exportFilter(ac); } else if (elt.name) { ac[elt.name] = elt.value; } return ac; }, {}); var sort = Object(ACore["b" /* $$ */])('th', this.table.header.elt).reduce((ac, cr) => { var key = cr.attr('data-sort-key'); var order = cr.attr('data-sort-order'); if (key && order && order !== 'none') { ac.push({ key: key, order: order }); } return ac; }, []); for (i in filter) { query.filter = filter; break; } if (sort.length > 0) { query.sort = sort; } for (i in query) { return query; } return null; }; DynamicTable.prototype.requestQuery = function () { var query = this.makeQuery(); this.query(query); }; DynamicTable.prototype.query = function (query) { this.table.body.query(query); }; DynamicTable.prototype.addFilter = function (inputElt) { if (inputElt.$dynamicTable) { inputElt.$dynamicTable.removeFilter(inputElt); } inputElt.$dynamicTable = this; inputElt.on('change', this.eventHandler.searchModify); this.$filterInputs.push(inputElt); }; DynamicTable.prototype.removeFilter = function (inputElt) { if (inputElt.$dynamicTable !== this) return; inputElt.$dynamicTable = null; inputElt.off('change', this.eventHandler.searchModify); var idx = this.$filterInputs.indexOf(inputElt); if (idx >= 0) this.$filterInputs.splice(idx, 1); }; DynamicTable.prototype.notifyRowChange = function (row) { var idx = this.table.body.rowIndexOf(row); if (idx >= 0) this.table.body.onRowSplice(idx) }; DynamicTable.prototype.notifyRowsChange = noop; DynamicTable.property = {}; DynamicTable.property.adapter = { /*** * @this DynamicTable * @param data */ set: function (data) { if (!data) return this._adapterData = data; this._adapter = new dynamictable_DTDataAdapter(this, data); this.layoutCtrl.onAdapter(); this.table = new dynamictable_DTTable(this, this._adapterData.data); this.$space.clearChild().addChild(this.table.elt); this.$fixedYCtn.clearChild().addChild(this.table.fixedYElt); this.$fixedXCtn.clearChild().addChild(this.table.fixedXElt); this.$fixedXYCtn.clearChild().addChild(this.table.fixedXYElt); if (this.extendStyle) this.addStyle(this.extendStyle); setTimeout(() => { this.requestUpdateSize(); }, 10); setTimeout(() => { this.requestUpdateSize(); }, 30); setTimeout(() => { this.requestUpdateSize(); }, 100); }, get: function () { return this._adapterData; } }; DynamicTable.property.filterInputs = { set: function (inputs) { inputs = inputs || []; this.$filterInputs.slice().forEach(input => { this.removeFilter(input); }); inputs.forEach(input => this.addFilter(input)); }, get: function () { return this.$filterInputs; } }; DynamicTable.property.hiddenColumns = { set: function (value) { value = value || []; this._hiddenColumns.forEach(function (idxV) { this.removeClass('as-hide-col-' + idxV); }.bind(this)); this._hiddenColumns = value; this._hiddenColumns.forEach(function (idxV) { this.addClass('as-hide-col-' + idxV); }.bind(this)); var c = this.parentElement; while (c) { if (c.hasClass && c.hasClass('absol-table-vscroller') && c.update) { c.update(); break; } c = c.parentElement; } ResizeSystem["a" /* default */].update(); ResizeSystem["a" /* default */].requestUpdateSignal(); }, get: function () { return this._hiddenColumns; } } /*** * @memberOf {DynamicTable#} * @type {{}} */ DynamicTable.eventHandler = {}; /*** * @this DynamicTable# * @param event */ DynamicTable.eventHandler.searchModify = function (event) { this.requestQuery(); }; /*** * @this DynamicTable# * @param event */ DynamicTable.eventHandler.searchKeyUp = function (event) { setTimeout(function () { var query = this.$searchInput.value; query = query.trim().replace(/\s+/, ' '); if (query.length) this.table.body.startSearchingIfNeed(); }.bind(this), 30); }; DynamicTable.prototype.getColWidth = function () { return this.colSizeCtrl.getColWidth(); }; DynamicTable.prototype.setColWidth = function (colId, value) { return this.colSizeCtrl.setColWidth(colId, value); }; ACore["d" /* default */].install(DynamicTable); /* harmony default export */ var dynamictable_DynamicTable = (DynamicTable); /*** * * @param {DynamicTable} elt * @constructor */ function LayoutController(elt) { /*** * * @type {DynamicTable} */ this.elt = elt; this.maxRows = Math.ceil(Math.max(Object(Dom["d" /* getScreenSize */])().height / 40, 1080 / 40)); this.offset = Math_Vec2.ZERO; Object.keys(this.constructor.prototype).forEach(key => { if (key.startsWith('ev_')) this[key] = this[key].bind(this); }); this.elt.$hscrollbar.on('scroll', this.ev_hScrollbarScroll); this.elt.$vscrollbar.on('scroll', this.ev_vScrollbarScroll); this.elt.$viewport.on('scroll', this.ev_viewportScroll); this.elt.on('wheel', this.ev_wheel); this.scrollingDir = Math_Vec2.ZERO; this.scrollingStartOffset = Math_Vec2.ZERO; } /*** * * @param {WheelEvent} event */ LayoutController.prototype.ev_wheel = function (event) { var isOverflowY = this.elt.hasClass('as-overflow-y'); var isOverflowX = this.elt.hasClass('as-overflow-x'); var dy = event.deltaY; var prevOffset; if (isOverflowY && (!event.shiftKey || !isOverflowX)) { prevOffset = this.elt.$vscrollbar.innerOffset; if (dy > 0) { this.elt.$vscrollbar.innerOffset = Math.max( Math.min(prevOffset + 100 / 40, this.elt.$vscrollbar.innerHeight - this.elt.$vscrollbar.outerHeight), 0); if (prevOffset !== this.elt.$vscrollbar.innerOffset) { event.preventDefault(); this.elt.$vscrollbar.emit('scroll'); } } else if (dy < 0) { this.elt.$vscrollbar.innerOffset = Math.max( Math.min(prevOffset - 100 / 40, this.elt.$vscrollbar.innerHeight - this.elt.$vscrollbar.outerHeight), 0); if (prevOffset !== this.elt.$vscrollbar.innerOffset) { event.preventDefault(); this.elt.$vscrollbar.emit('scroll'); } } } else if (isOverflowX && (event.shiftKey || !isOverflowY)) { prevOffset = this.elt.$hscrollbar.innerOffset; if (dy > 0) { this.elt.$hscrollbar.innerOffset = Math.max( Math.min(prevOffset + 100, this.elt.$hscrollbar.innerWidth - this.elt.$hscrollbar.outerWidth), 0); if (prevOffset !== this.elt.$hscrollbar.innerOffset) { event.preventDefault(); this.elt.$hscrollbar.emit('scroll'); } } else if (dy < 0) { this.elt.$hscrollbar.innerOffset = Math.max( Math.min(prevOffset - 100, this.elt.$hscrollbar.innerWidth - this.elt.$hscrollbar.outerWidth), 0); if (prevOffset !== this.elt.$hscrollbar.innerOffset) { event.preventDefault(); this.elt.$hscrollbar.emit('scroll'); } } } }; LayoutController.prototype.onAdapter = function () { var adapter = this.elt.adapter; if (this.elt.style.height === 'auto') { this.elt.removeStyle('height'); this.elt.addClass('as-adapt-infinity-grow'); } if (adapter.fixedCol > 0) { this.elt.addClass('as-has-fixed-col'); } else { this.elt.removeClass('as-has-fixed-col'); } if (adapter.rowsPerPage === Infinity) { this.elt.addClass('as-adapt-infinity-grow'); } if (!adapter.data.head || !adapter.data.head.rows || !adapter.data.head.rows[0] || !adapter.data.head.rows[0].cells || !adapter.data.head.rows[0].cells[0]) { this.elt.addClass('as-headless'); } else { this.elt.removeClass('as-headless'); } }; LayoutController.prototype.handleMinWidth = function () { var minWidth = this.elt.extendStyle.minWidth || this.elt.table.elt.getComputedStyleValue('min-width'); var mv = Object(attribute["b" /* parseMeasureValue */])(minWidth); if (!mv) return; if (mv.unit !== 'px') return; if (!this.elt.table.elt.firstChild || !this.elt.table.elt.firstChild.firstChild) return; var bound = this.elt.table.elt.firstChild.firstChild.getBoundingClientRect(); if (bound.width >= mv.value) return; //copyElt var cells = this.elt.table.header.rows[0].cells; var freeCells = cells.filter(cell => { return !cell.data.style || !cell.data.style.width; }); if (freeCells.length === 0) return; var cellWidths = freeCells.map(cell => cell.copyElt.getBoundingClientRect().width); var sumWidth = cellWidths.reduce((ac, w) => ac + w, 0); var needGrowUp = mv.value - bound.width; freeCells.forEach((cell, i) => { var width = cellWidths[i]; var newWidth = width + width / sumWidth * needGrowUp; var paddingLeft = cell.copyElt.getComputedStyleValue('padding-left') || '0px'; var paddingRight = cell.copyElt.getComputedStyleValue('padding-right') || '0px'; paddingLeft = parseFloat(paddingLeft.replace('px', '')); paddingRight = parseFloat(paddingRight.replace('px', '')); cell.copyElt.addStyle('width', newWidth + 'px'); cell.copyElt.addStyle('--as-force-min-width', newWidth - paddingLeft - paddingRight - 1 + 'px'); cell.elt.addClass('as-col-width-auto'); cell.copyElt.addClass('as-col-width-auto'); cell.elt.addStyle('--as-force-min-width', newWidth - paddingLeft - paddingRight - 1 + 'px'); if (cell._copyElt1) { cell._copyElt1.addStyle('--as-force-min-width', newWidth - paddingLeft - paddingRight - 1 + 'px'); cell._copyElt1.addClass('as-col-width-auto'); } if (cell._copyElt2) { cell._copyElt2.addClass('as-col-width-auto'); cell._copyElt2.addStyle('--as-force-min-width', newWidth - paddingLeft - paddingRight - 1 + 'px'); } }); }; LayoutController.prototype.handleDisplay = function () { // return; var display = this.elt.getComputedStyleValue('display'); if (display !== 'block') return; var tableWidth = this.elt.table.elt.getBoundingClientRect().width; var viewportWidth = this.elt.$viewport.getBoundingClientRect().width; if (tableWidth < viewportWidth - 17 && !this.elt.hasClass('as-table-layout-fixed')) { this.elt.table.elt.addStyle('width', viewportWidth - 17 + 'px'); } }; LayoutController.prototype.onAttached = function () { var c = this.elt.parentElement; while (c) { if (c.isSupportedEvent && c.isSupportedEvent('sizechange')) { c.on('sizechange', () => { this.onResize(); }); } c = c.parentElement; } if (this.elt.table) { this.handleDisplay(); this.handleMinWidth(); this.elt.table.updateCopyEltSize(); this.updateOverflowStatus(); this.elt.$vscrollbar.once('scroll', () => { setTimeout(() => { if (this.elt.table.body.rows.length === 0) return; var tableId = this.elt.id; var cells = this.elt.table.header.rows[0] && this.elt.table.header.rows[0].cells; if (!cells) return; var changed = false; cells.forEach(cell => { var colId = cell.data.id; var bound; if (!colId) {//local style bound = cell.copyElt.getBoundingClientRect(); if (bound.width > 0) { this.elt.css.setProperty(`#${this.elt.id} th[data-col-idx="${cell.idx}"]`, 'width', bound.width + 'px') .commit(); } return; } if (!DynamicTable_manager.hasColSize(tableId, colId)) { bound = cell.copyElt.getBoundingClientRect(); if (bound.width) { DynamicTable_manager.setColWidth(tableId, colId, bound.width); changed = true; } } }); if (changed) DynamicTable_manager.commit(); }, 100); }); } }; LayoutController.prototype.onResize = function () { this.updateOverflowStatus(); this.updateScrollbarStatus(); if (this.elt.table) { this.elt.table.updateCopyEltSize(); this.updateLines(); } }; LayoutController.prototype.updateOverflowStatus = function () { var contentBound = this.elt.table ? this.elt.table.elt.getBoundingClientRect() : { width: 0, height: 0 }; this.elt.addStyle('--dt-content-height', contentBound.height + 'px'); this.elt.addStyle('--dt-content-width', contentBound.width + 'px'); var bound = this.elt.getBoundingClientRect(); if (bound.width < contentBound.width) { this.elt.addClass('as-overflow-x'); } else { this.elt.removeClass('as-overflow-x'); this.elt.$space.removeStyle('left'); } if (bound.height < contentBound.height) { this.elt.addClass('as-overflow-y'); } else { this.elt.removeClass('as-overflow-y'); this.elt.$space.removeStyle('top'); } }; LayoutController.prototype.updateScrollbarStatus = function () { //todo: not overflow y if (!this.elt.table) return; var childNodes = this.elt.table.body.elt.childNodes; var vBound = this.elt.$viewport.getBoundingClientRect(); var headBound = this.elt.table.header.elt.getBoundingClientRect(); var availableHeight = vBound.height - headBound.height; var rBound; var outer = 0; var sHeight = 1;//border of last row for (var i = 0; i < childNodes.length; ++i) { rBound = childNodes[childNodes.length - 1 - i].getBoundingClientRect(); sHeight += rBound.height; if (sHeight >= availableHeight) { outer = i + (1 - (sHeight - availableHeight) / rBound.height); break; } } this.elt.$vscrollbar.outerHeight = outer; this.elt.$vscrollbar.innerHeight = this.elt.table.body.curentMode.viewedRows.length; this.elt.$vscrollbar.innerOffset = this.elt.table.body.curentMode.offset; var viewportBound = this.elt.$viewport.getBoundingClientRect(); var tableBound = this.elt.table.elt.getBoundingClientRect(); this.elt.$hscrollbar.innerWidth = tableBound.width; this.elt.$hscrollbar.outerWidth = viewportBound.width; if (this.elt.$hscrollbar.innerOffset + this.elt.$hscrollbar.outerWidth > this.elt.$hscrollbar.innerWidth) { this.elt.$hscrollbar.innerOffset = Math.max(0, this.elt.$hscrollbar.innerWidth - this.elt.$hscrollbar.outerWidth); this.elt.$hscrollbar.emit('scroll'); } }; LayoutController.prototype.updateLines = function () { var fixXBound, headerBound; if (this.elt.hasClass('as-overflow-x') && this.elt.hasClass('as-has-fixed-col')) { fixXBound = this.elt.$fixedXCtn.getBoundingClientRect(); this.elt.addStyle('--dt-fixed-x-width', fixXBound.width + 'px'); } if (this.elt.hasClass('as-overflow-y')) { headerBound = this.elt.$fixedYCtn.firstChild.getBoundingClientRect(); this.elt.addStyle('--dt-header-height', headerBound.height + 'px'); } }; LayoutController.prototype.ev_hScrollbarScroll = function (event) { this.elt.$space.addStyle('left', -this.elt.$hscrollbar.innerOffset + 'px'); this.elt.$fixedYCtn.addStyle('left', -this.elt.$hscrollbar.innerOffset + 'px'); this.elt.$viewport.emit('scroll'); }; LayoutController.prototype.ev_vScrollbarScroll = function () { this.elt.table.body.offset = this.elt.$vscrollbar.innerOffset; this.elt.$viewport.emit('scroll'); }; LayoutController.prototype.ev_dragStart = function (event) { var isOverflowY = this.elt.hasClass('as-overflow-y'); var isOverflowX = this.elt.hasClass('as-overflow-x'); var dir = event.currentPoint.sub(event.startingPoint); if (isOverflowY && Math.abs(dir.y) > Math.abs(dir.x)) { this.scrollingDir = new Math_Vec2(0, 1); event.preventDefault(); } else if (isOverflowX && Math.abs(dir.y) < Math.abs(dir.x)) { this.scrollingDir = new Math_Vec2(1, 0); event.preventDefault(); } else { this.scrollingDir = Math_Vec2.ZERO; } this.scrollingStartOffset = new Math_Vec2(this.elt.$hscrollbar.innerOffset, this.elt.$vscrollbar.innerOffset); }; LayoutController.prototype.ev_drag = function (event) { var changed = false; var dir = event.currentPoint.sub(event.startingPoint); var newOffset = new Math_Vec2(0, 0); if (this.scrollingDir.x !== 0) { newOffset.x = Math.max(0, Math.min(this.elt.$hscrollbar.innerWidth - this.elt.$hscrollbar.outerWidth, this.scrollingStartOffset.x - dir.x)); if (this.elt.$hscrollbar.innerOffset !== newOffset.x) { changed = true; this.elt.$hscrollbar.innerOffset = newOffset.x; this.elt.$hscrollbar.emit('scroll'); } } else if (this.scrollingDir.y !== 0) { newOffset.y = Math.max(0, Math.min(this.elt.$vscrollbar.innerHeight - this.elt.$vscrollbar.outerHeight, this.scrollingStartOffset.y - dir.y / 40)); if (this.elt.$vscrollbar.innerOffset !== newOffset.y) { changed = true; this.elt.$vscrollbar.innerOffset = newOffset.y; this.elt.$vscrollbar.emit('scroll'); } } if (changed) event.preventDefault(); }; LayoutController.prototype.ev_dragEnd = function (event) { }; LayoutController.prototype.ev_viewportScroll = function (event) { if (this.elt.$viewport.scrollLeft !== 0) { this.elt.$hscrollbar.innerOffset += this.elt.$viewport.scrollLeft; this.elt.$viewport.scrollLeft = 0; this.elt.$hscrollbar.emit('scroll'); } if (this.elt.$viewport.scrollTop !== 0) { this.elt.$vscrollbar.innerOffset += this.elt.$viewport.scrollTop / 30;//todo: better solution this.elt.$viewport.scrollTop = 0; this.elt.$vscrollbar.emit('scroll'); } }; /*** * * @param {DynamicTable} elt * @constructor */ function PointerController(elt) { Object.keys(this.constructor.prototype).forEach(key => { if (key.startsWith('ev_')) this[key] = this[key].bind(this); }); /*** * * @type {DynamicTable} */ this.elt = elt; this.elt.$viewport.hangon = 5; this.elt.$viewport.on('draginit', this.ev_dragInit); this.elt.$viewport.on('dragstart', this.ev_dragStart); this.elt.$viewport.on('drag', this.ev_drag); this.elt.$viewport.on('dragend', this.ev_dragEnd); this.destHandler = null; } PointerController.prototype.isInDragZone = function (elt) { while (elt && elt !== this.elt) { if (elt.classList.contains('as-drag-zone')) return true; elt = elt.parentElement; } return false; }; PointerController.prototype.isInInput = function (elt) { while (elt) { if (elt.tagName === 'INPUT') return true; if (elt.tagName === 'TD') return false; var clazz = elt.getAttribute('class') || ''; if (clazz.indexOf('input') >= 0) return true; if (clazz.indexOf('input') >= 0) return true; if (clazz.indexOf('menu') >= 0) return true; elt = elt.parentElement; } return false; }; PointerController.prototype.isInColResizer = function (elt) { return !!(elt.hasClass && elt.hasClass('as-dt-header-cell-resizer')); }; PointerController.prototype.ev_dragInit = function (event) { if (this.isInDragZone(event.target)) { event.preventDefault(); this.destHandler = this.elt.rowDragCtrl; } if (this.isInColResizer(event.target)) { event.preventDefault(); this.destHandler = this.elt.colSizeCtrl; } else if (this.isInInput(event.target)) { event.cancel(); return; } else if (event.isTouch) { // event.preventDefault();//todo: check } } PointerController.prototype.ev_dragStart = function (event) { var dir = event.currentPoint.sub(event.startingPoint).normalized(); var ox = new Math_Vec2(1, 0); var oy = new Math_Vec2(0, 1); if (this.destHandler) { event.preventDefault && event.preventDefault(); this.destHandler.ev_dragStart(event); } else if (event.isTouch && (Math.abs(dir.dot(ox)) < 0.3 || Math.abs(dir.dot(oy)) < 0.3)) { event.preventDefault && event.preventDefault(); this.destHandler = this.elt.layoutCtrl; this.destHandler.ev_dragStart(event); } else { this.destHandler = null; } }; PointerController.prototype.ev_drag = function (event) { if (this.destHandler) { event.preventDefault && event.preventDefault(); this.destHandler.ev_drag(event); } } PointerController.prototype.ev_dragEnd = function (event) { if (this.destHandler) { event.preventDefault && event.preventDefault(); this.destHandler.ev_dragEnd(event); } this.destHandler = null; }; PointerController.prototype.ev_dragDeinit = function (event) { }; /*** * * @param {DynamicTable} elt * @constructor */ function ColSizeController(elt) { this.elt = elt; this.colId = null;//number: col index, string: ident this.startingBound = null; this.cellElt = null; this.cell = null; } ColSizeController.prototype.onAttached = function () { }; ColSizeController.prototype.onAdapter = function () { }; ColSizeController.prototype.ev_dragStart = function (event) { this.colId = event.target.parentElement.attr('data-col-id') || parseInt(event.target.parentElement.attr('data-col-idx')); this.cell = this.elt.table.header.rows[0].cells.find(cell => cell.data.id === this.colId || cell.idx === this.colId); this.cellElt = this.cell.copyElt; this.startingBound = Math_Rectangle.fromClientRect(this.cellElt.getBoundingClientRect()); }; ColSizeController.prototype.ev_drag = function (event) { var newWidth = this.startingBound.width + event.currentPoint.sub(event.startingPoint).x; this.cellElt.addStyle('width', newWidth + 'px'); this.elt.table.updateCopyEltSize(); }; ColSizeController.prototype.ev_dragEnd = function (event) { if (typeof this.colId === "string") { DynamicTable_manager.commitColWidth(this.elt, this.elt.id, this.cell.data.id, this.cellElt.getBoundingClientRect().width, true); this.notifyColResize(event); } else { this.elt.css.setProperty(`#${this.elt.id} th[data-col-idx="${this.colId}"]`, 'width', this.cellElt.getBoundingClientRect().width + 'px').commit(); } this.elt.requestUpdateSize(); setTimeout(() => { this.cellElt.removeStyle('width'); this.elt.requestUpdateSize(); }, 150); }; ColSizeController.prototype.getColWidth = function () { var res = {}; this.elt.table.header.rows[0].cells.forEach(cell => { var id = cell.data.id; if (typeof id === "string" || typeof id === "number") id = '' + id; if (!id) return; Object.defineProperty(res, id, { enumerable: true, get: () => { return cell.copyElt.getBoundingClientRect().width; } }) }); return res; }; ColSizeController.prototype.setColWidth = function (colId, value) { var cell = this.elt.table.header.rows[0].cells.find(cell => cell.data.id === colId || cell.idx === colId); cell.copyElt.removeStyle('width'); if (typeof colId === "string") { DynamicTable_manager.commitColWidth(this.elt, this.elt.id, colId, value, true); } else { this.elt.css.setProperty(`#${this.elt.id} th[data-col-idx="${colId}"]`, 'width', value + 'px').commit(); } this.elt.requestUpdateSize(); }; ColSizeController.prototype.notifyColResize = function (originalEvent) { var event = { type: 'colresize', target: this, colId: this.colId, width: this.cellElt.getBoundingClientRect().width, originalEvent: originalEvent.originalEvent || event }; var colWidth; Object.defineProperty(event, 'colWidth', { get: () => { if (colWidth) return colWidth; colWidth = this.getColWidth(); return colWidth; } }); this.elt.emit('colresize', event, this); }; /** * new version * @param {DynamicTable} elt * @constructor */ function RowDragController(elt) { this.elt = elt; this._isDragging = false; } RowDragController.prototype._findRow = function (cElt) { while (cElt && cElt !== this.elt) { if (cElt.dtBodyRow) { return cElt.dtBodyRow; } cElt = cElt.parentElement; } return null; } RowDragController.prototype._getZIndex = function () { var e = this.elt.$fixedXYCtn; return findMaxZIndex(e); }; RowDragController.prototype._updateClass = function () { this.row.body.rows.forEach((row, i) => { if (!row._elt) return; if (this.newIdx < this.rowIdx) { if (i < this.newIdx || i >= this.rowIdx) { row._elt.addStyle('transform', `translate(0, 0)`); } else if (i < this.rowIdx) { row._elt.addStyle('transform', `translate(0, ${this.rowRect.height}px)`); } } else if (this.newIdx > this.rowIdx) { if (i <= this.rowIdx || i > this.newIdx) { row._elt.addStyle('transform', `translate(0, 0)`); row._elt._transformY = this.rowRect.height; } else if (i <= this.newIdx) { row._elt.addStyle('transform', `translate(0, ${-this.rowRect.height}px)`); row._elt._transformY = -this.rowRect.height; } } else { row._elt.addStyle('transform', `translate(0, 0)`); row._elt._transformY = 0; } }) }; RowDragController.prototype._computeRowBound = function () { this.firstBoundIdx = this.elt.rowIndexOf(this.row.body.elt.firstChild); this.bounds = Array.prototype.map.call(this.row.body.elt.childNodes, (elt, i) => { var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); rect.y -= elt._transformY || 0; return rect; }); }; RowDragController.prototype._computeNewIdx = function () { var firstBound = Math_Rectangle.fromClientRect(this.row.body.elt.firstChild.getBoundingClientRect()); var delta = firstBound.A().sub(this.bounds[0].A()); var cBound = Math_Rectangle.fromClientRect(this.ctn.getBoundingClientRect()); var y0 = this.bounds[0].y + delta.y; var nearest = Infinity; this.newIdx = this.firstBoundIdx; var cur; var S = []; S['-1'] = 0; var i, y; for (i = 0; i < this.bounds.length; ++i) { S.push(S[i - 1] + this.bounds[i].height); } for (i = 0; i < this.bounds.length; ++i) { cur = this.firstBoundIdx + i; if (cur <= this.rowIdx) { y = y0 + S[i - 1]; } else { y = y0 + S[i] - cBound.height; } if (nearest > Math.abs(cBound.y - y) + 0.1 && this.row.body.rows[cur].draggable) { nearest = Math.abs(cBound.y - y); this.newIdx = cur; } } }; RowDragController.prototype.ev_dragStart = function (event) { if (this.elt.table.body.curentMode.name !== 'normal') return; this.elt.addClass('as-row-dragging'); this.row = this._findRow(event.target); this.body = this.row.body; this.rowIdx = this.elt.rowIndexOf(this.row); this.newIdx = this.rowIdx; this.clonedTable = this._cloneTableRow(this.row); this.ctn = Object(ACore["c" /* _ */])({ class: 'as-dt-body-row-cloned-ctn', style: { zIndex: this._getZIndex() + 20, cursor: 'move', opacity: 0.9 }, child: Object(ACore["a" /* $ */])(this._cloneTableRow(this.row)).removeStyle('transform') }).addTo(document.body); this.row.elt.addClass('as-dragging'); this.rowRect = Math_Rectangle.fromClientRect(this.row.elt.getBoundingClientRect()); this.elt.addStyle('--dt-dragging-row-height', this.rowRect.height); this.viewportRect = Math_Rectangle.fromClientRect(this.elt.$viewport.getBoundingClientRect()); this.headerRect = Math_Rectangle.fromClientRect(this.elt.$fixedYCtn.getBoundingClientRect()); this.pointeroffset = event.startingPoint.sub(this.rowRect.A()); this.ctn.addStyle({ top: this.rowRect.y + 'px', left: this.rowRect.x + 'px' }); this._computeRowBound(); this._computeNewIdx(); this._updateClass(); this._isDragging = true; }; RowDragController.prototype.ev_rowRenderChange = function () { if (!this._isDragging) return; this._computeRowBound(); this._computeNewIdx(); this._computeNewIdx(); this._updateClass(); }; /** * * @param {DTBodyRow}row * @private */ RowDragController.prototype._cloneTableRow = function (row) { var tableElt = Object(ACore["a" /* $ */])(row.body.table.elt.cloneNode(false)) .addStyle({ tableLayout: 'fixed', width: row.body.table.elt.getBoundingClientRect().width + 'px' }); var tBodyElt = Object(ACore["a" /* $ */])(row.body.elt.cloneNode(false)); tableElt.addChild(tBodyElt); var rowElt = Object(ACore["a" /* $ */])(this.row.elt.cloneNode(false)).addStyle({ height: this.row.elt.getBoundingClientRect().height + 'px', backgroundColor: this.row.elt.getComputedStyleValue('background-color') }); tBodyElt.addChild(rowElt); this.row.cells.forEach(cell => { var width = cell.elt.getBoundingClientRect().width; Object(ACore["a" /* $ */])(cell.elt.cloneNode(true)).addStyle({ width: width + 'px' }).addTo(rowElt); }); return tableElt; }; RowDragController.prototype.ev_drag = function (event) { var newY = event.currentPoint.sub(this.pointeroffset).y; this.ctn.addStyle('top', newY + 'px'); clearTimeout(this._dragOutTO); var ctnBound = Math_Rectangle.fromClientRect(this.ctn.getBoundingClientRect()); var onDragOutPositive = () => { var dy = ctnBound.D().y - this.viewportRect.D().y; dy /= 1000 / 60 / 4 * this.rowRect.height; dy = Math.min(dy, this.elt.$vscrollbar.innerHeight - this.elt.$vscrollbar.outerHeight - this.elt.$vscrollbar.innerOffset); if (dy > 0) { this.elt.$vscrollbar.innerOffset += dy; this.elt.$vscrollbar.emit('scroll'); } this._computeNewIdx(); this._updateClass(); clearTimeout(this._dragOutTO); this._dragOutTO = setTimeout(onDragOutPositive, 33); }; var onDragOutNegative = () => { var dy = ctnBound.y - this.headerRect.D().y; dy /= 1000 / 60 / 4 * this.rowRect.height; dy = Math.max(dy, -this.elt.$vscrollbar.innerOffset); if (dy < 0) { this.elt.$vscrollbar.innerOffset += dy; this.elt.$vscrollbar.emit('scroll'); } this._computeNewIdx(); this._updateClass(); clearTimeout(this._dragOutTO); this._dragOutTO = setTimeout(onDragOutNegative, 33); }; if (this.viewportRect.D().y < ctnBound.D().y) { this._dragOutTO = setTimeout(onDragOutPositive, 1000 / 60); } else if (this.headerRect.D().y > ctnBound.y) { this._dragOutTO = setTimeout(onDragOutNegative, 100 / 60); } else { this._computeNewIdx(); this._updateClass(); } }; RowDragController.prototype.ev_dragEnd = function (event) { this.elt.addClass('as-row-dragging'); this.elt.removeClass('as-row-dragging'); this.elt.removeStyle('--dragging-row-height'); this.row.elt.removeClass('as-dragging'); this._isDragging = false; clearTimeout(this._dragOutTO); this.ctn.remove(); this.row.body.rows.forEach(row => { if (row._elt) { row._elt.removeStyle('transform'); row._elt._transformY = 0; } }); if (this.newIdx !== this.rowIdx) { this.row.body.moveRowAt(this.rowIdx, this.newIdx); var eventData = { type: 'orderchange', target: this.row, from: this.rowIdx, to: this.newIdx, originalEvent: event, row: this.row, data: this.row.data } if (this.row.data.on && this.row.data.on.orderchange) { this.row.data.on.orderchange.call(this.row, eventData, this.row) } this.elt.emit('orderchange', eventData, this.body.table.wrapper); } }; function VirtualPageSelector(elt) { this.elt = elt; } VirtualPageSelector.prototype.getSelectedPage = function () { return this.elt.$vscrollbar.innerOffset / 25; }; VirtualPageSelector.prototype.selectPage = function (value) { this.elt.$vscrollbar.innerOffset = value * 25; this.elt.$vscrollbar.emit('scroll'); }; // EXTERNAL MODULE: ./node_modules/absol-acomp/css/objectmergetool.css var objectmergetool = __webpack_require__(297); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/dialog/OMTSelectOptionsDialog.js /*** * @extends Fragment * @param {OMTBaseType} node * @constructor */ function OMTSelectOptionsDialog(node) { AppPattern_Fragment.call(this); this.node = node; this.calc(); this.getView(); this.start(); } OOP["a" /* default */].mixClass(OMTSelectOptionsDialog, AppPattern_Fragment); OMTSelectOptionsDialog.prototype.calc = function () { this.options = this.node.getSelectOptions(); this.curHash = this.node.getHash(); this.selectedHash = this.curHash; this.selectedOption = null; this.ident = randomIdent(5); }; OMTSelectOptionsDialog.prototype.onStart = function () { this.$modal.addTo(document.body); }; OMTSelectOptionsDialog.prototype.onStop = function () { this.$modal.remove(); }; OMTSelectOptionsDialog.prototype.assignResult = function () { if (this.curHash !== this.selectedHash) { this.node.assign(this.selectedOption); this.node.updateRaw(); this.node.notifyChange(); } }; OMTSelectOptionsDialog.prototype._makeOptionRow = function (opt, i, dict) { var descriptor = Object.assign({}, this.node.descriptor); if (i < 0) { descriptor.desc = '(current-mixed)'; } var clazz = this.node.constructor; var node = new clazz(this.node.tool, this.node.parent, descriptor); node.assign(opt); var nodeHash = node.getHash(); if (dict[nodeHash]) return null; dict[nodeHash] = node; var self = this; var radio = Object(ACore["c" /* _ */])({ tag: js_RadioButton.tag, style: { marginRight: '10px' }, props: { name: this.ident, checked: nodeHash === this.curHash }, on: { change: function () { if (radio.checked) { self.selectedHash = nodeHash; self.selectedOption = opt; } } } }); return Object(ACore["c" /* _ */])({ class: 'as-omt-option-row', child: [ radio, node.elt ] }); }; OMTSelectOptionsDialog.prototype.createView = function () { var self = this; this.$view = Object(ACore["c" /* _ */])({ tag: js_MessageDialog.tag, class: 'as-omt-dialog', props: { dialogTitle: {mlKey:'txt_option'}, dialogActions: [ { text: {mlKey:'txt_ok'}, name: 'ok' }, { text: {mlKey:'txt_cancel'}, name: 'cancel' } ] }, on: { action: function (event) { self.stop() var action = event.action; if (action.name === 'cancel') return; if (action.name === 'ok') { self.assignResult(); } } } }); var dict = {}; var rows = this.options.map((opt, i) => this._makeOptionRow(opt, i, dict)).filter(x => !!x); if (!dict[this.curHash]) { rows.unshift(this._makeOptionRow(this.node.export(), -1, dict)); } this.$view.addChild(rows); this.$modal = Object(ACore["c" /* _ */])({ tag: js_Modal.tag, style:{ zIndex: 1000000, }, child: this.$view }); }; /* harmony default export */ var dialog_OMTSelectOptionsDialog = (OMTSelectOptionsDialog); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTBaseType.js /** * * @constructor */ function OMTBaseType(tool, parent, descriptor) { this.tool = tool; this.parent = parent; this.level = parent ? parent.level + 1 : 0; this.descriptor = descriptor; this.render(); this.elt.omtNode = this; } OMTBaseType.prototype.type = 'base'; OMTBaseType.prototype.commands = [ { name: 'select_other', icon: 'span.mdi.mdi-menu-down', title: 'Select' } ]; OMTBaseType.prototype.render = function () { var self = this; var displayName = 'ROOT'; if (this.descriptor.displayName !== undefined) displayName = this.descriptor.displayName + ''; else if (this.descriptor.name !== undefined) displayName = this.descriptor.name + ''; if (this.descriptor.desc) displayName += this.descriptor.desc; this.elt = Object(ACore["c" /* _ */])({ class: ['as-omt-field', 'as-type-' + this.type], style: { '--level': this.level }, child: [ { class: 'as-omt-field-header', child: [ { class: 'as-omt-field-name', child: { text: displayName } } ] }, { class: 'as-omt-field-body' }, { class: 'as-omt-field-raw-ctn' }, { class: 'as-omt-field-command-ctn', child: this.commands.map(command => ({ tag: js_FlexiconButton.tag, attr: { 'data-command': command.name }, props: { icon: command.icon, title: command.title }, on: { click: this.execCmd.bind(this, command.name, command) } })) } ], on: { dblclick: function (event) { var target = event.target; while (target) { if (target === this) break; if (target.tagName === 'BUTTON') return; target = target.parentElement; } this.execCmd('select_other'); }.bind(this) } }); this.$commandCtn = Object(ACore["a" /* $ */])('.as-omt-field-command-ctn', this.elt); this.$rawCtn = Object(ACore["a" /* $ */])('.as-omt-field-raw-ctn', this.elt); this.$viewModeBtn = Object(ACore["c" /* _ */])({ tag: js_FlexiconButton.tag, attr: { 'data-command': 'view_mode' }, props: { icon: 'span.mdi.mdi.mdi-code-braces',//code-braces title: 'View Raw' }, on: { click: function () { if (self.elt.hasClass('as-mode-raw')) { self.elt.removeClass('as-mode-raw'); this.icon = 'span.mdi.mdi-code-braces'; this.title = 'View Raw'; } else { self.elt.addClass('as-mode-raw'); this.icon = 'span.mdi.mdi-view-dashboard-edit-outline'; this.title = 'View Guide'; self.updateRaw(); } } } }); this.$commandCtn.addChild(this.$viewModeBtn); this.$body = Object(ACore["a" /* $ */])('.as-omt-field-body', this.elt); }; OMTBaseType.prototype.updateRaw = function () { var rawElt = Object(ACore["c" /* _ */])(this.getRaw()); this.$rawCtn.clearChild().addChild(rawElt); }; OMTBaseType.prototype.notifyChange = function () { this.descriptor.onchange && this.descriptor.onchange.call(this, { type: 'change', target: this, descriptor: this.descriptor }, this); this.tool.notifyChange(); }; OMTBaseType.prototype.getRaw = function () { return { child: [ { tag: 'span', class: 'as-omt-field-name', child: {text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '} }, { tag: 'code', child: {text: generateJSVariable(this.export())} } ] }; }; OMTBaseType.prototype.assign = function (o) { this.value = o; this.$body.clearChild().addChild(Object(ACore["c" /* _ */])({ tag: 'code', child: { text: generateJSVariable(o) } })); }; OMTBaseType.prototype.getHash = function () { return stringHashCode(generateJSVariable(this.export())); }; OMTBaseType.prototype.export = function () { return this.value; }; OMTBaseType.prototype.execCmd = function (commandName, command) { if (commandName === 'select_other') { this.userSelect(); } }; OMTBaseType.prototype.getSelectOptions = function () { if (!this.parent) return this.tool.objects; var parentOptions = this.parent.getSelectOptions().filter(x => !!x); var name = this.descriptor.name; return parentOptions.map(ot => ot[name]).filter(ot => ot !== undefined); }; OMTBaseType.prototype.userSelect = function () { new dialog_OMTSelectOptionsDialog(this); }; OMTBaseType.classes = {}; /*** * * @param tool * @param parent * @param descriptor * @returns {OMTBaseType} */ OMTBaseType.make = function (tool, parent, descriptor) { var clazz = OMTBaseType.classes[descriptor.type] || OMTBaseType; return new clazz(tool, parent, descriptor); }; /* harmony default export */ var type_OMTBaseType = (OMTBaseType); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTStruct.js /*** * @extends OMTBaseType * @constructor */ function OMTStruct() { type_OMTBaseType.apply(this, arguments); this.children = (this.descriptor.fields || []).map(field => type_OMTBaseType.make(this.tool, this, field)); this.$body.addChild(this.children.map(child => child.elt)); this.data = null; } OOP["a" /* default */].mixClass(OMTStruct, type_OMTBaseType); OMTStruct.prototype.type = 'struct'; OMTStruct.prototype.assign = function (o) { if (o !== null && typeof o === "object") { this.elt.removeClass('as-null'); this.children.forEach(child => { var name = child.descriptor.name; child.assign(o[name]); }); } else { this.elt.addClass('as-null'); } }; OMTStruct.prototype.export = function () { return this.children.reduce((ac, cr) => { ac[cr.descriptor.name] = cr.export(); return ac; }, {}); }; OMTStruct.prototype.getHash = function () { var hash = this.children.map(c => c.getHash()).join('_'); return stringHashCode(hash); }; OMTStruct.prototype.getRaw = function () { return { child: [ { tag: 'span', class: 'as-omt-field-name', child: { text: (this.descriptor.displayName || this.descriptor.name || "ROOT")+': ' } }, { style:{paddingLeft: '25px'}, child: this.children.map((child=> child.getRaw())) } ] }; }; type_OMTBaseType.classes.struct = OMTStruct; /* harmony default export */ var type_OMTStruct = (OMTStruct); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTString.js /*** * @extends OMTBaseType * @constructor */ function OMTString() { type_OMTBaseType.apply(this, arguments); this.value = null; } OOP["a" /* default */].mixClass(OMTString, type_OMTBaseType); type_OMTBaseType.classes.string = OMTString; OMTString.prototype.assign = function (o) { this.value = o; this.$body.clearChild(); this.$value = Object(ACore["c" /* _ */])({ tag: 'span', child: { text: (o || '') + '' } }); this.$body.addChild(this.$value); }; OMTString.prototype.getRaw = function () { return { child: [ { tag: 'span', class: 'as-omt-field-name', child: { text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': ' } }, { tag: 'span', child: { text: this.export() } } ] }; }; /* harmony default export */ var type_OMTString = (OMTString); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTFile.js /*** * @extends OMTBaseType * @constructor */ function OMTFile() { type_OMTBaseType.apply(this, arguments); } OOP["a" /* default */].mixClass(OMTFile, type_OMTBaseType); type_OMTBaseType.classes.file = OMTFile; type_OMTBaseType.prototype.type = 'file'; OMTFile.prototype.render = function () { type_OMTBaseType.prototype.render.call(this); this.$value = Object(ACore["c" /* _ */])({ tag: js_FileListItem.tag, class: 'as-omt-field-value' }); this.$body.addChild(this.$value); }; OMTFile.prototype.assign = function (o) { this.value = o; if (o) { this.$value.value = o; this.$value.removeStyle('display'); } else { this.$value.addStyle('display', 'none'); } }; OMTFile.prototype.getRaw = function () { var info = fileInfoOf(this.value); var href = info.url; return { child: [ { tag: 'span', class: 'as-omt-field-name', child: { text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': ' } }, { tag: 'a', props: { href: href, target:'_blank' }, child: { text: info.name } } ] }; }; /* harmony default export */ var type_OMTFile = (OMTFile); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTImage.js /*** * @extends OMTBaseType * @constructor */ function OMTImage() { type_OMTBaseType.apply(this, arguments); } OOP["a" /* default */].mixClass(OMTImage, type_OMTBaseType); type_OMTBaseType.classes.image = OMTImage; type_OMTBaseType.prototype.type = 'image'; OMTImage.prototype.assign = function (o) { this.value = o; var title = ''; this.$body.clearChild(); var handle = (val) => { if (!val) return; if (val && val.then) { val.then(handle); return; } if (val && val.url) { handle(val.url); return; } if ((val instanceof File) || (val instanceof Blob)) { val.url = val.url || URL.createObjectURL(val); if (!title && val.filename) title = val.filename; handle(val); return; } if (!title) title = val.split('/').pop().split('?').shift(); this.$value = Object(ACore["c" /* _ */])({ tag: 'img', class: 'as-omt-field-value', props: { src: val, title: title } }); this.$body.addChild(this.$value); } handle(o); }; OMTImage.prototype.getRaw = type_OMTFile.prototype.getRaw; /* harmony default export */ var type_OMTImage = (OMTImage); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTEnum.js /*** * @extends OMTBaseType * @constructor */ function OMTEnum() { type_OMTBaseType.apply(this, arguments); this.value = null; } OOP["a" /* default */].mixClass(OMTEnum, type_OMTBaseType); type_OMTBaseType.classes.enum = OMTEnum; OMTEnum.prototype.render = function () { type_OMTBaseType.prototype.render.call(this); this.$value = Object(ACore["c" /* _ */])({ tag: js_SelectTreeMenu.tag, class: 'as-border-none', style: { height: '18px' }, props: { readOnly: true, } }); this.$body.addChild(this.$value); if (this.descriptor.items && this.descriptor.items.then) { this.descriptor.items.then(items => { this.$value.items = items; }); } else { this.$value.items = this.descriptor.items; } } OMTEnum.prototype.assign = function (o) { this.value = o; this.$value.value = o; }; OMTEnum.prototype.getRaw = function () { var text = ''; var holders = this.$value.findItemsByValue(this.export()); if (holders && holders.length > 0) { text = holders[0].item.text; if (holders[0].item.desc) text += ' - ' + holders[0].item.desc; } return { child: [ { tag: 'span', class: 'as-omt-field-name', child: { text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': ' } }, { tag: 'span', child: { text: text } } ] }; }; /* harmony default export */ var type_OMTEnum = (OMTEnum); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/dialog/OMTArrayMergeDialog.js function hashArrayOf(node) { var res = (node.children || []).map(child => child.getHash()); res.sort((a, b) => a - b); return arrayUnique(res); } /*** * @extends Fragment * @param {OMTArray} node * @constructor */ function OMTArrayMergeDialog(node) { AppPattern_Fragment.call(this); this.node = node; this.calc(); this.getView(); this.start(); } OOP["a" /* default */].mixClass(OMTArrayMergeDialog, AppPattern_Fragment); OMTArrayMergeDialog.prototype.calc = function () { this.options = this.node.getSelectOptions(); this.curHash = hashArrayOf(this.node); this.selectedNodes = {}; }; OMTArrayMergeDialog.prototype.onStart = function () { this.$modal.addTo(document.body); }; OMTArrayMergeDialog.prototype.onStop = function () { this.$modal.remove(); }; OMTArrayMergeDialog.prototype.assignResult = function () { var dict = {}; var itemArr = []; var hashArr = []; var node for (var key in this.selectedNodes) { node = this.selectedNodes[key]; if (node.children) { node.children.forEach(cr => { var hash = cr.getHash(); if (dict[hash]) return; dict[hash] = true; itemArr.push(cr.export()); hashArr.push(hash); }); } } if (this.curHash === hashArr && arrayUnique(this.curHash.concat(hashArr)).length === this.curHash.length) return; this.node.assign(itemArr); this.node.updateRaw(); this.node.notifyChange(); }; OMTArrayMergeDialog.prototype._makeOptionRow = function (opt, i, dict) { var self = this; var descriptor = Object.assign({}, this.node.descriptor); var clazz = this.node.constructor; var node = new clazz(this.node.tool, this.node.parent, descriptor); node.assign(opt); var nodeHash = stringHashCode(hashArrayOf(node).join(',')); if (dict[nodeHash]) return null; dict[nodeHash] = node; var checked = arrayUnique(this.curHash.concat(hashArrayOf(node))).length === this.curHash.length; if (checked) this.selectedNodes[nodeHash] = node; var radio = Object(ACore["c" /* _ */])({ tag: CheckBoxInput.tag, style: { marginRight: '10px' }, props: { checked: checked }, on: { change: function () { if (radio.checked) { self.selectedNodes[nodeHash] = node; } else { delete self.selectedNodes[nodeHash]; } self.$view.$actionBtns[1].disabled = Object.keys(self.selectedNodes).length === 0; } } }); return Object(ACore["c" /* _ */])({ class: 'as-omt-option-row', child: [ radio, node.elt ] }); }; OMTArrayMergeDialog.prototype.createView = function () { var self = this; /*** * @type MessageDialog */ this.$view = Object(ACore["c" /* _ */])({ tag: js_MessageDialog.tag, class: 'as-omt-dialog', props: { dialogTitle: {mlKey:'txt_option'}, dialogActions: [ { text: 'OK', name: 'ok' }, { text: 'Cancel', name: 'cancel' } ] }, on: { action: function (event) { self.stop() var action = event.action; if (action.name === 'cancel') return; if (action.name === 'ok') { self.assignResult(); } } } }); var dict = {}; var rows = this.options.map((opt, i) => this._makeOptionRow(opt, i, dict)).filter(x => !!x); this.$view.addChild(rows); this.$modal = Object(ACore["c" /* _ */])({ tag: js_Modal.tag, style:{ zIndex: 1000000, }, child: this.$view }); }; /* harmony default export */ var dialog_OMTArrayMergeDialog = (OMTArrayMergeDialog); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTArray.js /*** * @extends OMTBaseType * @constructor */ function OMTArray() { type_OMTBaseType.apply(this, arguments); this.value = null; } OOP["a" /* default */].mixClass(OMTArray, type_OMTBaseType); type_OMTBaseType.classes.array = OMTArray; OMTArray.prototype.commands = OMTArray.prototype.commands.concat([ { name: 'merge', icon: 'span.mdi.mdi-set-merge', title: 'Merge' } ]); OMTArray.prototype.execCmd = function (commandName) { type_OMTBaseType.prototype.execCmd.call(this, commandName); if (commandName === 'merge') { new dialog_OMTArrayMergeDialog(this); } }; OMTArray.prototype.assign = function (o) { this.$body.clearChild(); this.children = (o || []).map((it, i) => { var desc = Object.assign({ name: i, displayName: i + 1 + '' }, this.descriptor.of); if (!desc.displayName) desc.displayName = i + 1 + ''; var res = type_OMTBaseType.make(this.tool, this.parent, desc); res.assign(it); return res; }); this.$body.addChild(this.children.map(c => c.elt)); }; OMTArray.prototype.export = function () { return this.children.map(c => c.export()); }; OMTArray.prototype.getRaw = function () { return { child: [ { tag: 'span', class: 'as-omt-field-name', child: {text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '} }, { style: {paddingLeft: '25px'}, child: this.children.map((child => child.getRaw())) } ] }; }; /* harmony default export */ var type_OMTArray = (OMTArray); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/dialog/OMTEnumSetMergeDialog.js /*** * @extends Fragment * @param {OMTEnumSet} node * @constructor */ function OMTEnumSetMergeDialog(node) { AppPattern_Fragment.call(this); this.node = node; this.calc(); this.getView(); this.start(); } OOP["a" /* default */].mixClass(OMTEnumSetMergeDialog, AppPattern_Fragment); OMTEnumSetMergeDialog.prototype.calc = function () { this.currentValues = this.node.export(); this.descriptor = this.node.descriptor; this.selectOptions = this.node.getSelectOptions(); this.selected = {}; }; OMTEnumSetMergeDialog.prototype.onStart = function () { this.$modal.addTo(document.body); }; OMTEnumSetMergeDialog.prototype.onStop = function () { this.$modal.remove(); }; OMTEnumSetMergeDialog.prototype.assignResult = function () { var selectedValues = this._getCurrent(); if (selectedValues.length > 0) { this.node.assign(arrayUnique(this.currentValues.concat(selectedValues))); this.node.notifyChange(); } }; OMTEnumSetMergeDialog.prototype._getCurrent = function () { var selectedValues = this.selectOptions.reduce((ac, cr, i) => { if (this.selected[i]) ac = ac.concat(cr); return ac; }, []); selectedValues = arrayUnique(selectedValues); return selectedValues; } OMTEnumSetMergeDialog.prototype._makeOptionRow = function (opt, i) { var self = this; var checked = arrayUnique(this.currentValues.concat(opt)).length === arrayUnique(this.currentValues).length; this.selected[i] = checked; var checkbox = Object(ACore["c" /* _ */])({ tag: CheckBoxInput.tag, style: { marginRight: '10px', }, props: { checked: checked }, on: { change: function () { self.selected[i] = checkbox.checked; var currentValues = self._getCurrent(); self.previewNode.assign(currentValues); self.$view.$actionBtns[1].disabled = currentValues.length === 0; } } }); var mSelect = Object(ACore["c" /* _ */])({ tag: js_MultiCheckTreeMenu.tag, class: 'as-border-none', props: { pendingValues: opt, readOnly: true } }); return Object(ACore["c" /* _ */])({ class: 'as-omt-option-row', child: [ checkbox, mSelect ] }); }; OMTEnumSetMergeDialog.prototype.createView = function () { var self = this; this.$optionRows = this.selectOptions.map((opt, i) => this._makeOptionRow(opt, i)); this.previewNode = new this.node.constructor(this.node.tool, this.node.parent, this.node.descriptor); this.previewNode.assign(this.currentValues); this.$view = Object(ACore["c" /* _ */])({ tag: js_MessageDialog.tag, class: ['as-omt-dialog'], props: { dialogTitle: 'Merge', dialogActions: [ { text: 'OK', name: 'ok' }, { text: 'Cancel', name: 'cancel' } ], }, on: { action: function (event) { self.stop(); if (event.action.name === 'ok') { self.assignResult(); } } }, child: [ this.previewNode, { child: [ { class: 'as-omt-field-name', child: { text: 'Merge From' } } ].concat(this.$optionRows) } ] }); Promise.resolve(this.descriptor.items).then(items => { Object(ACore["b" /* $$ */])(js_MultiCheckTreeMenu.tag, this.$view).forEach(elt => { elt.items = items; elt.values = elt.pendingValues; }); }); this.$modal = Object(ACore["c" /* _ */])({ tag: js_Modal.tag, style:{ zIndex: 1000000, }, child: this.$view }); }; /* harmony default export */ var dialog_OMTEnumSetMergeDialog = (OMTEnumSetMergeDialog); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTEnumSet.js /*** * @extends OMTBaseType * @constructor */ function OMTEnumSet() { type_OMTBaseType.apply(this, arguments); this.value = null; this._flatTreeItems(); } OOP["a" /* default */].mixClass(OMTEnumSet, type_OMTBaseType); type_OMTBaseType.classes['{enum}'] = OMTEnumSet; OMTEnumSet.prototype.commands = type_OMTArray.prototype.commands.slice(); OMTEnumSet.prototype._flatTreeItems = function () { if (!this.descriptor.flat) { this.descriptor.flat = true; this.descriptor.items = this.descriptor.items.reduce(function visit(ac, cr) { var item = Object.assign({}, cr); ac.push(item); if (item.items && item.items.length > 0) { item.items.reduce(visit, ac); } delete item.items; return ac; }, []); } }; OMTEnumSet.prototype.render = function () { type_OMTBaseType.prototype.render.call(this); this.$value = Object(ACore["c" /* _ */])({ tag: js_MultiCheckMenu.tag, class: 'as-border-none', style: { height: '18px' }, props: { readOnly: true, strictValue: false } }); this.$body.addChild(this.$value); this.$value.items = this.descriptor.items; this.$value.values = this.value; } OMTEnumSet.prototype.assign = function (o) { this.value = o; this.$value.values = o; }; OMTEnumSet.prototype.execCmd = function (commandName) { type_OMTBaseType.prototype.execCmd.call(this, commandName); if (commandName === 'merge') { this.userMerge(); } }; OMTEnumSet.prototype.userMerge = function () { //as-omt-option-row new dialog_OMTEnumSetMergeDialog(this); }; OMTEnumSet.prototype.getRaw = function () { var textItems = this.export().map(value => { var text = ''; var holders = this.$value.findItemsByValue(value); if (holders && holders.length > 0) { text = holders[0].item.text; if (holders[0].item.desc) text += ' - ' + holders[0].item.desc; } return text; }) return { child: [ { tag: 'span', class: 'as-omt-field-name', child: { text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': ' } }, { style: { paddingLeft: '25px' }, child: textItems.map(text => ({ tag: 'li', child: { text: text } })) } ] }; }; /* harmony default export */ var type_OMTEnumSet = (OMTEnumSet); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTFileArray.js /*** * @extends OMTBaseType * @constructor */ function OMTFileArray() { type_OMTBaseType.apply(this, arguments); } OOP["a" /* default */].mixClass(OMTFileArray, type_OMTBaseType); type_OMTBaseType.classes['file[]'] = OMTFileArray; OMTFileArray.prototype.type = 'file[]'; OMTFileArray.prototype.commands = type_OMTArray.prototype.commands.slice(); OMTFileArray.prototype.render = function () { type_OMTBaseType.prototype.render.call(this); this.$value = Object(ACore["c" /* _ */])({ tag: js_FileListInput.tag, class: ['as-omt-field-value', 'as-border-none'], props: { readOnly: true } }); this.$body.addChild(this.$value); }; OMTFileArray.prototype.assign = function (o) { this.value = o; if (o instanceof Array) { this.$value.files = o; this.$value.removeStyle('display'); } else { this.$value.addStyle('display', 'none'); } }; OMTFileArray.prototype.getHash = function () { return calcDTQueryHash(this.value); }; OMTFileArray.prototype.getRaw = function () { var infoArr = (this.value || []).map(it => fileInfoOf(it)); return { child: [ { tag: 'span', class: 'as-omt-field-name', child: { text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': ' } }, { style: { paddingLeft: '25px' }, child: infoArr.map(info => ({ tag: 'a', props: info.url ? { href: info.url, target: '_blank' } : {}, child: { text: info.name } })) } ] }; }; /* harmony default export */ var type_OMTFileArray = (OMTFileArray); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTColor.js /*** * @extends OMTBaseType * @constructor */ function OMTColor() { type_OMTBaseType.apply(this, arguments); } OOP["a" /* default */].mixClass(OMTColor, type_OMTBaseType); type_OMTBaseType.classes.color = OMTColor; OMTColor.prototype.type = 'color'; OMTColor.prototype.render = function () { type_OMTBaseType.prototype.render.call(this); this.$value = Object(ACore["c" /* _ */])({ class: "as-omt-field-color-value-bg", child: '.as-omt-field-color-value' }); this.$body.addChild(this.$value); }; OMTColor.prototype.assign = function (o) { this.value = o; var color = 'transparent'; try { if (o instanceof Color_Color) { color = o.toString("hex8"); } else if (typeof o === "string") { color = Color_Color.parse(o).toString("hex8"); } } catch (err) { } this.color = color; this.$value.addStyle('--omt-color-value', color); }; OMTColor.prototype.getHash = function () { return stringHashCode(this.color+''); }; OMTColor.prototype.getRaw = function () { var color = Color_Color.parse(this.color); return { child: [ { tag: 'span', class: 'as-omt-field-name', child: { text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': ' } }, { tag: 'span', style: {color: color.toString('hex6')}, child: { text: this.color } } ] } }; /* harmony default export */ var type_OMTColor = (OMTColor); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTBool.js /*** * @extends OMTBaseType * @constructor */ function OMTBool() { type_OMTBaseType.apply(this, arguments); } OOP["a" /* default */].mixClass(OMTBool, type_OMTBaseType); type_OMTBaseType.classes.bool = OMTBool; OMTBool.prototype.type = 'bool'; OMTBool.prototype.render = function () { type_OMTBaseType.prototype.render.call(this); this.$value = Object(ACore["c" /* _ */])({ tag: CheckBoxInput, props: { readOnly: true } }); this.$body.addChild(this.$value); }; OMTBool.prototype.assign = function (o) { this.value = o; this.$value.checked = !!o; }; /* harmony default export */ var type_OMTBool = (OMTBool); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTHtml.js /*** * @extends OMTBaseType * @constructor */ function OMTHtml() { type_OMTBaseType.apply(this, arguments); this.value = null; } OOP["a" /* default */].mixClass(OMTHtml, type_OMTBaseType); type_OMTBaseType.classes.html = OMTHtml; OMTHtml.prototype.type = 'html'; OMTHtml.prototype.assign = function (o) { this.value = o; this.$body.clearChild(); this.$value = Object(ACore["c" /* _ */])({ tag: 'div', props:{ innerHTML: o } }); this.$body.addChild(this.$value); }; OMTHtml.prototype.getRaw = function () { return { child: [ { tag: 'span', class: 'as-omt-field-name', child: { text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': ' } }, { tag: 'span', child: { text: this.export() } } ] }; }; /* harmony default export */ var type_OMTHtml = (OMTHtml); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMDateTime.js /*** * @extends OMTBaseType * @constructor */ function OMTDateTime() { type_OMTBaseType.apply(this, arguments); } OOP["a" /* default */].mixClass(OMTDateTime, type_OMTBaseType); type_OMTBaseType.classes.datetime = OMTDateTime; OMTDateTime.prototype.type = 'datetime'; OMTDateTime.prototype.render = function () { type_OMTBaseType.prototype.render.call(this); this.$value = Object(ACore["c" /* _ */])({ tag: js_DateTimeInput.tag, class: 'as-border-none', props: { readOnly: true } }); if (this.descriptor.format) this.$value.format = this.descriptor.format; this.$body.addChild(this.$value); }; OMTDateTime.prototype.assign = function (o) { this.value = o; this.$value.value = o; }; OMTDateTime.prototype.getRaw = function () { return { child: [ { tag: 'span', class: 'as-omt-field-name', child: {text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '} }, { tag: 'span', child: { text: this.$value.text } } ] } }; /* harmony default export */ var OMDateTime = (OMTDateTime); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMDate.js /*** * @extends OMTBaseType * @constructor */ function OMTDate() { type_OMTBaseType.apply(this, arguments); } OOP["a" /* default */].mixClass(OMTDate, type_OMTBaseType); type_OMTBaseType.classes.date = OMTDate; OMTDate.prototype.type = 'date'; OMTDate.prototype.render = function () { type_OMTBaseType.prototype.render.call(this); this.$value = Object(ACore["c" /* _ */])({ tag: js_DateInput2.tag, class: 'as-border-none', props: { readOnly: true } }); if (this.descriptor.format) this.$value.format = this.descriptor.format; this.$body.addChild(this.$value); }; OMTDate.prototype.assign = function (o) { this.value = o; this.$value.value = o; }; OMTDate.prototype.getRaw = function () { return { child: [ { tag: 'span', class: 'as-omt-field-name', child: {text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '} }, { tag: 'span', child: { text: this.$value.text } } ] } }; /* harmony default export */ var OMDate = (OMTDate); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTEnumOfPair.js /*** * @extends OMTBaseType * @constructor */ function OMTEnumOfPair() { type_OMTBaseType.apply(this, arguments); this.value = null; } OOP["a" /* default */].mixClass(OMTEnumOfPair, type_OMTBaseType); type_OMTBaseType.classes['enum<pair>'] = OMTEnumOfPair; OMTEnumOfPair.prototype.type = 'enum<pair>'; OMTEnumOfPair.prototype.render = function () { type_OMTBaseType.prototype.render.call(this); this.$value = Object(ACore["c" /* _ */])({ tag: js_DualSelectMenu.tag, class: 'as-border-none', style: {height: '18px'}, props: { readOnly: true, } }); this.$body.addChild(this.$value); if (this.descriptor.items && this.descriptor.items.then) { this.descriptor.items.then(items => { this.$value.items = items; }); } else { this.$value.items = this.descriptor.items; } } OMTEnumOfPair.prototype.assign = function (o) { this.value = o; this.$value.value = o; }; OMTEnumOfPair.prototype.getRaw = function () { var text = this.$value.$item && this.$value.$item.innerText; return { child: [ { tag: 'span', class: 'as-omt-field-name', child: {text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '} }, { tag: 'span', child: {text: text} } ] }; }; /* harmony default export */ var type_OMTEnumOfPair = (OMTEnumOfPair); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/ObjectMergeTool.js /*** * @extends AElement * @constructor */ function ObjectMergeTool() { this._descriptors = null; this._objects = null; this.root = null; this.$body = Object(ACore["a" /* $ */])('.as-omt-body', this) .on('mouseover', this.eventHandler.mouseOverNode); this.hoveringNode = null; /** * @type {Object[]} * @memberOf ObjectMergeTool# * @name objects */ /** * @type {Object} * @memberOf ObjectMergeTool# * @name descriptors */ } ObjectMergeTool.tag = 'ObjectMergeTool'.toLowerCase(); ObjectMergeTool.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-omt', extendEvent: ['change'], child: [ { class: 'as-omt-body' } ] }); }; ObjectMergeTool.prototype._tryFlushData = function () { if (this.root && this.objects && this.objects.length > 0) { this.root.assign(this.objects[0]); } }; ObjectMergeTool.prototype._findNode = function (targetElt) { while (targetElt && targetElt !== this) { if (targetElt.omtNode) return targetElt.omtNode; targetElt = targetElt.parentElement; } return null; }; ObjectMergeTool.prototype.notifyChange = function () { this.emit('change', { type: 'change', target: this }, this); }; ObjectMergeTool.property = {}; ObjectMergeTool.property.descriptor = { set: function (value) { this._descriptor = value || {}; this.$body.clearChild(); this.root = type_OMTBaseType.make(this, null, this._descriptor); this.$body.addChild(this.root.elt); this._tryFlushData(); }, get: function () { return this._descriptor; } }; ObjectMergeTool.property.objects = { set: function (value) { this._objects = value || []; this._tryFlushData(); }, get: function () { return this._objects; } }; ObjectMergeTool.property.data = { get: function () { if (this.root) { return this.root.export(); } if (this._objects && this.objects.length > 0) return this._objects[0]; return null; } }; /*** * @type {{}} * @memberOf ObjectMergeTool# */ ObjectMergeTool.eventHandler = {}; /*** * @this ObjectMergeTool * @param {MouseEvent} event */ ObjectMergeTool.eventHandler.mouseOverNode = function (event) { var node = this._findNode(event.target); if (this.hoveringNode === node) return; if (this.hoveringNode) { this.hoveringNode.elt.removeClass('as-hover'); } this.hoveringNode = node; if (this.hoveringNode) { this.hoveringNode.elt.addClass('as-hover'); } }; ACore["d" /* default */].install(ObjectMergeTool); /* harmony default export */ var objectmergetool_ObjectMergeTool = (ObjectMergeTool); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/tokenizeinput.css var tokenizeinput = __webpack_require__(299); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/tokenizeiput/TIHistory.js /*** * @param {TokenizeInput} elt * @constructor */ function TIHistory(elt){ this.elt = elt; this.stack = []; this.topIdx = -1; } TIHistory.prototype.commit = function (text, offset){ while (this.topIdx < this.stack.length - 1) { this.stack.pop(); } var lastText = this.stack.length > 0 ? this.stack[this.stack.length - 1].text : null; if (text === lastText) { if (this.stack[this.stack.length - 1].offset !== offset) this.stack[this.stack.length - 1].offset = offset; } else { this.topIdx = this.stack.length; var record = { text: text, offset: offset }; this.stack.push(record); this.elt.emit('change', { target: this, value: record.text, action: 'commit', record: record, type: 'change' }, this); } }; TIHistory.prototype.undo = function (){ if (this.topIdx <= 0) return; this.topIdx--; var record = this.stack[this.topIdx]; this.elt.applyData(record.text, record.offset); this.elt.emit('change', { target: this, value: record.text, action: 'undo', record: record, type: 'change' }, this); }; TIHistory.prototype.redo = function (){ if (this.topIdx + 1 >= this.stack.length) return; this.topIdx++; var record = this.stack[this.topIdx]; this.elt.applyData(record.text, record.offset); this.elt.emit('change', { target: this, value: record.text, action: 'redo', record: record, type: 'change' }, this); }; /* harmony default export */ var tokenizeiput_TIHistory = (TIHistory); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/tokenizeiput/TISelectionController.js /**** * * @param {TokenizeInput} elt * @constructor */ function TISelectionController(elt) { this.elt = elt; this.prevRange = null; } TISelectionController.prototype.onSelect = function () { var key = (this.elt.prevKey && (new Date().getTime() - this.elt.prevKey.time < 100)) ? this.elt.prevKey.value : ''; var sel = document.getSelection(); var range = sel.getRangeAt(0); var direction = getSelectionRangeDirection(range); var newRange; var handleEmojiToken = () => { var startCtn = range.startContainer; var startOffset = range.startOffset; var startToken; var endCtn = range.endContainer; var endOffset = range.endOffset; var endToken; var changed = 0; var textData; var nextTextNode; var prevTextNode; var displayText; var newText; if (isTokenText(startCtn)) { startToken = startCtn.parentElement; displayText = startToken.getAttribute('data-display'); textData = startCtn.data; if (range.collapsed) { if (textData.length < displayText.length) { prevTextNode = this.getPrevTextNode(startCtn); if (!isText(prevTextNode)) { prevTextNode = document.createTextNode(''); startToken.parentElement.insertBefore(prevTextNode, startToken); } startToken.remove(); startCtn = prevTextNode; startOffset = prevTextNode.data.length; changed = 1; } else if (textData === displayText && startOffset < displayText.length && startOffset > 0) { if (key === 'arrowright' || !key) { startOffset = displayText.length; changed = 1; } else if (key === 'arrowleft') { startOffset = 0; changed = 1; } else if (key === 'mouseup') { startOffset = 0; endOffset = displayText.length; changed = 2; } } else if (textData.length > displayText.length) { if (startOffset === textData.length) { nextTextNode = startToken.nextSibling; if (!isText(nextTextNode)) { newText = document.createTextNode(''); nextTextNode.parentElement.insertBefore(newText, nextTextNode); nextTextNode = newText; } nextTextNode.data = textData.substring(displayText.length) + nextTextNode.data; startCtn.data = displayText; startCtn = nextTextNode; startOffset = textData.length - displayText.length; changed = 1; } else { prevTextNode = startToken.previousSibling; if (!isText(prevTextNode)) { newText = document.createTextNode(''); startToken.parentElement.insertBefore(newText, startToken); prevTextNode = newText; } prevTextNode.data += textData.substring(0, textData.length - displayText.length); startCtn.data = displayText; startCtn = prevTextNode; startOffset = startCtn.data.length; } } } else { if (startOffset > 0 && startOffset < displayText.length) { startOffset = 0; changed = 2; } } } if (isTokenText(endCtn)) { endToken = endCtn.parentElement; displayText = endToken.getAttribute('data-display'); if (!range.collapsed) { if (endOffset < displayText.length) { endOffset = displayText.length changed = 2; } } } if (changed > 0) { newRange = document.createRange(); newRange.setStart(startCtn, startOffset); if (changed > 1) { newRange.setEnd(endCtn, endOffset); } else { //for saving endOffset = startOffset; endCtn = startCtn; } setSelectionRange(newRange, direction === 'backward'); } var nextToken, nextText; if (isToken(endCtn.nextSibling)) { nextToken = endCtn.nextSibling; displayText = nextToken.getAttribute('data-display'); nextText = getFirstTextNode(nextToken); if (!nextText || nextText.data !== displayText) nextToken.remove(); } this.prevRange = { startOffset: startOffset, startContainer: startCtn, endOffset: endOffset, endContainer: endCtn }; } handleEmojiToken(); }; TISelectionController.prototype.getNextTextNode = function (current) { return findNextTextNode(this.elt, current); }; TISelectionController.prototype.getPrevTextNode = function (current) { return findPrevTextNode(this.elt, current); }; TISelectionController.prototype.setRangeByOffset = function (offset) { var start, end, direction; if (typeof offset === "number") { start = offset; end = offset; direction = 'forward'; } else { start = offset.start; end = offset.end; direction = offset.direction || 'forward'; } var startCtn = null; var startOffset = 0; var endCtn = null; var endOffset = 0; var st = ''; var nodes = Array.prototype.slice.call(this.elt.childNodes); if (isNewLine(nodes[nodes.length - 1])) nodes.pop(); var node; for (var i = 0; i < nodes.length; ++i) { node = nodes[i]; if (isText(node)) { st += node.data; if (!startCtn && st.length >= start) { startCtn = node; startOffset = node.data.length - (st.length - start); } if (!endCtn && st.length >= end) { endCtn = node; endOffset = node.data.length - (st.length - end); } } else if (isToken(node)) { st += node.getAttribute('data-text'); if (!startCtn && st.length >= start) { startCtn = getFirstTextNode(node); startOffset = startCtn.data.length; } if (!endCtn && st.length >= end) { endCtn = getFirstTextNode(node); endOffset = endCtn.data.length; } } else if (isNewLine(node)) { st += '\n'; if (!startCtn && st >= start) { startCtn = this.elt; startOffset = i + 1; } if (!endCtn && st.length >= end) { endCtn = this.elt; endOffset = i + 1; } } } if (!startCtn) { if (nodes.length > 0) { node = nodes[nodes.length - 1] if (isNewLine(node)) { startCtn = this.elt; startOffset = nodes.length; } else if (isText(node)) { startCtn = node; startOffset = node.length; } else { startCtn = getLastTextNode(node); startOffset = node.length; } } else { startCtn = this.elt; startOffset = 0; } } if (!endCtn) { endCtn = startCtn; endOffset = startOffset; } this.prevRange = { startContainer: startCtn, startOffset: startOffset, endContainer: endCtn, endOffset: endOffset } var range = document.createRange(); range.setStart(startCtn, startOffset); range.setEnd(endCtn, endOffset); setSelectionRange(range, direction === 'backward'); }; TISelectionController.prototype.getOffset = function (range) { range = range || this.elt.selectionCtrl.prevRange; if (!range) return null; var nodes = Array.prototype.slice.call(this.elt.childNodes); if (isNewLine(nodes[nodes.length - 1])) nodes.pop(); var startCtn = range.startContainer; var startOffset = range.startOffset; var endCtn = range.endContainer; var endOffset = range.endOffset; if (startCtn === this.elt) { startCtn = this.elt.childNodes[startOffset - 1]; startOffset = 1; } else if (isTokenText(startCtn)) { startCtn = startCtn.parentElement; if (startOffset > 0) startOffset = startCtn.getAttribute('data-text').length; } if (endCtn === this.elt) { endCtn = this.elt.childNodes[endOffset]; endOffset = 1; } else if (isTokenText(endCtn)) { endCtn = endCtn.parentElement; if (endOffset > 0) endOffset = endCtn.getAttribute('data-text').length; } var start = undefined; var end = undefined; var direction = getSelectionRangeDirection(range); var st = ''; var node; for (var i = 0; i < nodes.length; ++i) { node = nodes[i]; if (isText(node)) { if (start === undefined && node === startCtn) { start = st.length + startOffset; } if (end === undefined && node === endCtn) { end = st.length + endOffset; } st += node.data; } else if (isToken(node)) { if (start === undefined && node === startCtn) { start = st.length + startOffset; } if (end === undefined && node === endCtn) { end = st.length + endOffset; } st += node.getAttribute('data-text'); } else if (isNewLine(node)) { st += '\n'; if (start === undefined && node === startCtn) { start = st.length; } if (end === undefined && node === endCtn) { end = st.length; } } } if (start === undefined) start = 0; if (end === undefined) { end = start; } return { start: start, end: end, direction: direction } } /* harmony default export */ var tokenizeiput_TISelectionController = (TISelectionController); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/tokenizeiput/TokenizeHyperInput.js var TokenizeHyperInput_textDelay = BrowserDetector["a" /* default */].isSafari ? 100 : 1; /*** * @extends AElement * @constructor */ function TokenizeHyperInput() { this._tagMap = {}; this.$br = Object(ACore["a" /* $ */])('br', this); this.historyCtrl = new tokenizeiput_TIHistory(this); this.textCtrl = new tokenizeiput_TITextController(this); this.selectionCtrl = new tokenizeiput_TISelectionController(this); this.prevKey = null; this.defineEvent(['pasteimg', 'pastefile', 'pastetext', 'change']); this.on('paste', this.eventHandler.paste); this.on('keydown', this.eventHandler.keydown); this.on('mouseup', this.eventHandler.mouseup); this.value = ''; this.historyCtrl.commit('', 0); /*** * @type {{}} * @name tagMap *@memberOf TokenizeHyperInput# * */ } TokenizeHyperInput.tag = 'TokenizeHyperInput'.toLowerCase(); TokenizeHyperInput.render = function () { return Object(ACore["c" /* _ */])({ tag: 'pre', class: 'as-tokenize-hyper-input', attr: { contenteditable: 'true', spellcheck: "false" }, child: 'br' }); }; TokenizeHyperInput.prototype.applyData = function (text, offset) { this.textCtrl.applyData(text, offset); }; TokenizeHyperInput.prototype.select = function (offset) { if (document.activeElement !== this) this.focus(); this.applyData(this.value, offset); }; TokenizeHyperInput.prototype.scrollIntoRange = function (range) { var elementBound = range.getBoundingClientRect(); var viewportBound = this.getBoundingClientRect(); var dBottom = 0; if (range.startContainer && range.startContainer.data && range.startContainer.data.charAt(range.startContainer.data.length - 1) == '\n') dBottom += this.getFontSize() * 1.5; var currentScrollTop = this.scrollTop; var newScrollTop = currentScrollTop; if (elementBound.bottom + dBottom > viewportBound.bottom) { newScrollTop = currentScrollTop + (elementBound.bottom + dBottom - viewportBound.bottom); } if (elementBound.top < viewportBound.top) { newScrollTop = currentScrollTop - (viewportBound.top - elementBound.top); } if (newScrollTop != currentScrollTop) { this.scrollTop = newScrollTop; } var currentScrollLeft = this.scrollLeft; var newScrollLeft = currentScrollLeft; if (elementBound.right > viewportBound.right) { newScrollLeft = currentScrollLeft + (elementBound.right - viewportBound.right); } if (elementBound.left < viewportBound.left) { newScrollLeft = currentScrollLeft - (viewportBound.left - elementBound.left); } if (newScrollLeft != currentScrollLeft) { this.scrollLeft = newScrollLeft; } }; TokenizeHyperInput.prototype.undo = function () { this.historyCtrl.undo(); }; TokenizeHyperInput.prototype.redo = function () { this.historyCtrl.redo(); }; TokenizeHyperInput.prototype.commitChange = function (text, offset) { this.historyCtrl.commit(text, offset); this.emit('change', {}, this); }; TokenizeHyperInput.prototype.waitToCommit = function (text, offset) { var thisInput = this; if (this._commitTimeout > 0) clearTimeout(this._commitTimeout); this._commitTimeout = setTimeout(function () { thisInput.commitChange(text, offset); }, TokenizeHyperInput_textDelay); }; TokenizeHyperInput.prototype.getPosition = function (node, offset) { if (!node) return NaN; if (node === this) return offset; var parent = node.parentElement; if (!parent) return NaN; var text = ''; var child; var lastBr = false; for (var i = 0; i < parent.childNodes.length; ++i) { child = parent.childNodes[i]; if (child == node) break; text += this.stringOf(child); } return this.getPosition(parent, text.length + offset); }; TokenizeHyperInput.prototype.getSelectPosition = function () { return this.selectionCtrl.getOffset(); }; /** * @type {TokenizeHyperInput} */ TokenizeHyperInput.eventHandler = {}; TokenizeHyperInput.eventHandler.paste = function (event) { var clipboardData = (event.clipboardData || window.clipboardData); if (!clipboardData) { alert('Input not support browser without clipboard API!'); return; } if (clipboardData.items) { var items = Array.prototype.slice.call(clipboardData.items); var imgItems = items.filter(item => item.type.indexOf('image') >= 0); var fileItems = items.filter(item => item.type !== 'text/plain' && item.type.indexOf('image') < 0); var plainTextItems = items.filter((item) => item.type.indexOf('text/plain') >= 0); if (imgItems.length > 0) { var imgFiles = imgItems.map(function (it) { return it.getAsFile(); }); this.emit('pasteimg', { target: this, imageFile: imgFiles[0], imageFiles: imgFiles, originalEvent: event }, this); } if (fileItems.length > 0) { var files = fileItems.map(item => item.getAsFile()); this.emit('pastefile', { target: this, file: files[0], files: files, originalEvent: event }, this); } if (plainTextItems.length > 0) { var plainTextItem = plainTextItems[0];//only one item plainTextItem.getAsString(text => { this.textCtrl.insertText(text); }); } event.preventDefault(); } else { var text = event.clipboardData.getData('text/plain'); if (text) { event.preventDefault(); this.textCtrl.insertText(text); } } this.waitToCommit(); }; TokenizeHyperInput.eventHandler.keydown = function (event) { this.prevKey = { time: new Date().getTime(), value: keyboardEventToKeyBindingIdent(event) }; setTimeout(() => { this.selectionCtrl.onSelect(); this.waitToCommit(); }, TokenizeHyperInput_textDelay); }; /*** * @this TokenizeHyperInput * @param event */ TokenizeHyperInput.eventHandler.mouseup = function (event) { this.prevKey = { time: new Date().getTime(), value: 'mouseup' }; this.selectionCtrl.onSelect(); } TokenizeHyperInput.property = {}; TokenizeHyperInput.property.value = { set: function (value) { value = value || ''; this.textCtrl.setText(value); // this.applyData(value, value.length); this.commitChange(value, value.length); }, get: function () { return this.textCtrl.getText(); } }; TokenizeHyperInput.property.disabled = { set: function (value) { value = !!value; if (value === this.hasClass('as-disabled')) return; if (value) { this.addClass('as-disabled'); this.attr({ contenteditable: undefined, oncut: 'return false', onpaste: 'return false', onkeydown: 'if(event.metaKey) return true; return false;' }); } else { this.removeClass('as-disabled'); this.attr({ contenteditable: true, oncut: undefined, onpaste: undefined, onkeydown: undefined }); } }, get: function () { return this.hasClass('as-disabled'); } }; TokenizeHyperInput.property.tagList = { get: function () { return getTagListInTextMessage(this.value); } }; TokenizeHyperInput.property.tagMap = { set: function (o) { o = o || {}; this._tagMap = o; Array.prototype.forEach.call(this.childNodes, child => { var id, text; if (child.classList && child.classList.contains('as-tag-token')) { id = (child.getAttribute('data-text') || ''); id = id.substring(5, id.length - 1); text = this._tagMap[id]; if (text) { child.getAttribute('data-display', '@' + text); child.firstChild.data = '@' + text; } } }) }, get: function () { return this._tagMap; } } ACore["d" /* default */].install(TokenizeHyperInput); /* harmony default export */ var tokenizeiput_TokenizeHyperInput = (TokenizeHyperInput); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/SelectListBoxPropHandlers.js var SelectListBoxPropHandlers = {}; SelectListBoxPropHandlers.enableSearch = { /*** * @this SelectListBox * @param {boolean} value */ set: function (value) { if (value) this.addClass('as-enable-search'); else this.removeClass('as-enable-search'); }, /*** * @this SelectListBox */ get: function () { return this.hasClass('as-enable-search'); } }; SelectListBoxPropHandlers.items = { /*** * @this SelectListBox * @param {{}} items */ set: function (items) { this.itemListCtrl.setItems(items); }, get: function () { return this.itemListCtrl.getItems(); } }; /* harmony default export */ var selectlistbox_SelectListBoxPropHandlers = (SelectListBoxPropHandlers); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/SLBItemHolder.js function SLBItemHolder(parent, data) { this.data = data; this.parent = parent; this._elt = null; } Object.defineProperty(SLBItemHolder.prototype, 'elt', { get: function () { if (!this._elt) { this._elt = Object(ACore["c" /* _ */])({ tag: js_SelectListItem.tag, props: { data: this.data } }); } return this._elt; } }); /* harmony default export */ var selectlistbox_SLBItemHolder = (SLBItemHolder); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/SLBModes.js function SLBModeNormal(elt, items) { this.elt = elt; this.$scroller = this.elt.$scroller; this.$content = this.elt.$content; this.items = items; this.children = items.map(item => new selectlistbox_SLBItemHolder(this, item)); this.children.forEach((child, i) => { child.idx = i; // child.elt; }); this.$pages = []; } SLBModeNormal.prototype._getPageElt = function (idx) { if (this.$pages[idx]) return this.$pages[idx]; while (this.$pages.length <= idx) this.$pages.push(undefined); var children = this.children.slice(idx * 50, idx * 50 + 50); var pageElt = Object(ACore["c" /* _ */])({ class: 'as-select-list-box-page', style: { top: 20 * idx * 50 + 'px' }, child: children.map(child => child.elt) }); this.$pages[idx] = pageElt; return pageElt; }; SLBModeNormal.prototype._getPageCount = function () { return Math.ceil(this.items.length / 50); } SLBModeNormal.prototype.onStart = function () { this.elt.$content.addStyle('height', this.items.length * 20 + 'px'); // var n = this._getPageCount(); // for (var i =0; i < n; ++i){ // this.$content.addChild(this._getPageElt(i)); // } this.updateListView(); }; SLBModeNormal.prototype.onStop = function () { }; SLBModeNormal.prototype.updateListView = function () { var maxHeight = Math.max(4096, Object(Dom["d" /* getScreenSize */])().height); var startIdx = Math.floor(this.$scroller.scrollTop / 1000) - 1; var endIdx = startIdx + Math.ceil(maxHeight / 1000) + 1; startIdx = Math.max(0, startIdx); endIdx = Math.min(this._getPageCount(), endIdx); var needViewPages = Array(endIdx - startIdx).fill(null).map((u, i) => this._getPageElt(startIdx + i)); Array.prototype.forEach.call(this.$content.childNodes, elt => { if (needViewPages.indexOf(elt) < 0) { elt.remove(); } }); needViewPages.forEach(elt=>{ if (!elt.parentElement){ this.$content.addChild(elt); } }); } function SLBModeSearch(elt, items) { this.items = items; } OOP["a" /* default */].mixClass(SLBModeSearch, SLBModeNormal); // SLBModeSearch.prototype.onStart // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/SLBItemListController.js /*** * @extends ListDictionary * @param {SelectListBox} elt * @constructor */ function SLBItemListController(elt) { this.elt = elt; this.items = []; this.elt.$scroller.on('scroll', this.updateListView.bind(this)); } OOP["a" /* default */].mixClass(SLBItemListController, ListDictionary) SLBItemListController.itemHeight = 20; SLBItemListController.preLoadN = 3; SLBItemListController.prototype.toLoadNextY = 200; SLBItemListController.prototype.getItems = function () { return copySelectionItemArray(this.items); }; SLBItemListController.prototype.setItems = function (items) { this.items = copySelectionItemArray(items ||[]); var mode = new SLBModeNormal(this.elt, this.items); this.elt.modes.normal = mode; this.elt.mode = mode; mode.onStart(); }; SLBItemListController.prototype.updateListView = function (){ this.elt.mode.updateListView(); } /* harmony default export */ var selectlistbox_SLBItemListController = (SLBItemListController); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/SelectListBox.js /*** * @extends AElement * @constructor */ function SelectListBox_SelectListBox() { this.$box = this; this.$content = $('.as-select-list-box-content', this); this.$scroller = $('.as-select-list-box-scroller', this); this.itemListCtrl = new selectlistbox_SLBItemListController(this); this.modes = { normal: new SLBModeNormal(this, []), search: null }; this.mode = this.modes.normal; } SelectListBox_SelectListBox.tag = 'selectlistbox_v2'.toLowerCase(); SelectListBox_SelectListBox.render = function () { return Object(ACore["c" /* _ */])({ tag: 'follower', attr: { tabindex: 0 }, class: 'as-select-list-box', extendEvent: ['pressitem'], child: [ { class: 'as-select-list-box-search-ctn', child: 'searchtextinput' }, { class: ['as-bscroller', 'as-select-list-box-scroller'], child: [ { class: ['as-select-list-box-content'], child: Array(SelectListBox_SelectListBox.prototype.preLoadN).fill('.as-select-list-box-page') } ] }, 'attachhook.as-dom-signal' ], props: { anchor: [1, 6, 2, 5] } }); } SelectListBox_SelectListBox.property = selectlistbox_SelectListBoxPropHandlers; ACore["d" /* default */].install('selectlistbox_v2', SelectListBox_SelectListBox); /* harmony default export */ var selectlistbox_SelectListBox = (SelectListBox_SelectListBox); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/pathmenu.css var pathmenu = __webpack_require__(301); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/PathMenu.js /*** * @extends AElement * @constructor */ function PathMenu() { this._path = []; this.$items = []; } PathMenu.tag = 'PathMenu'.toLowerCase(); PathMenu.render = function () { return Object(ACore["c" /* _ */])({ attr: { tabindex: '1' }, extendEvent: ['press', 'change'], class: 'as-path-menu' }); }; PathMenu.prototype._makeItem = function (data, idx) { var self = this; var button = Object(ACore["c" /* _ */])({ class: ['as-ribbon-split-button', 'as-path-menu-item'], child: { class: 'as-ribbon-split-button-content', child: [{ tag: 'button', attr: { 'tabindex': '-1' }, class: 'as-ribbon-split-button-primary', child: { tag: 'span', class: 'as-ribbon-split-button-text', child: { text: (data.name || data.text || '') + '' } } }, { tag: 'button', attr: { 'tabindex': '-1' }, class: 'as-ribbon-split-button-extend', child: ['span.mdi.mdi-chevron-right'] } ] } }); button.on('mouseenter', function () { if (document.activeElement && AElement["a" /* default */].prototype.isDescendantOf.call(document.activeElement, self) && self.hasClass('as-opening-item')) { if (button.quickMenu) button.quickMenu.open(); } }); var extendIconElt = Object(ACore["a" /* $ */])('.as-ribbon-split-button-extend .mdi', button); var primaryBtn = Object(ACore["a" /* $ */])('.as-ribbon-split-button-primary', button) .on('click', function () { self.emit('press', { target: self, pathItem: data, index: idx }, self); }); //as-ribbon-split-button-icon var icon = null; if (data.icon) { icon = Object(ACore["c" /* _ */])(data.icon); } else if (data.iconSrc) { icon = Object(ACore["c" /* _ */])({ tag: 'img', props: { src: data.iconSrc } }) } if (icon) { if (icon.parentElement) icon = Object(ACore["a" /* $ */])(icon.cloneNode(true)); icon.addClass('as-ribbon-split-button-icon'); primaryBtn.addChildBefore(icon, primaryBtn.firstChild); } var quickTrigger = Object(ACore["a" /* $ */])('.as-ribbon-split-button-extend', button); if (data.items && data.items.length > 0) { button.quickMenu = js_QuickMenu.toggleWhenClick(quickTrigger, { getMenuProps: function () { return { items: data.items.map(function (it, menuIndex) { if (typeof it === "string") return it; if (typeof it === "object") { if (it.icon || it.iconSrc || it.name || it.text) { return { text: it.name || it.text, menuIndex: menuIndex, icon: it.iconSrc ? { tag: 'img', props: { src: it.iconSrc } } : (it.icon || undefined), extendStyle: it.extendStyle || {}, extendClass: it.extendClass || [], } } } return it; }) } }, anchor: [1, 6, 0, 7], onOpen: function () { self.addClass('as-opening-item'); extendIconElt.addClass('mdi-rotate-90'); }, onClose: function () { self.removeClass('as-opening-item'); extendIconElt.removeClass('mdi-rotate-90'); }, onSelect: function (item) { var dataItem = data.items[item.menuIndex]; self.emit('change', { target: self, pathItem: data, item: dataItem, index: idx }, self); button.removeClass('as-open'); } }); } else { button.addClass('as-has-no-item'); } return button; }; PathMenu.property = {}; PathMenu.property.path = { set: function (path) { this._path = path || []; this.$items.forEach(elt => elt.remove()); this.$items = this._path.map((it, i) => this._makeItem(it, i)); this.addChild(this.$items); }, get: function () { return this._path; } }; ACore["d" /* default */].install(PathMenu); /* harmony default export */ var js_PathMenu = (PathMenu); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreemenu/MCTMPropHandlers.js var MCTMPropHandlers = {}; MCTMPropHandlers.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } }, get: function () { return this.hasClass('as-read-only'); } }; MCTMPropHandlers.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } }, get: function () { return this.hasClass('as-disabled'); } }; MCTMPropHandlers.items = { set: function (items) { this.$box.items = items; this.tokenCtrl.updateFromViewValues(); }, get: function () { return this.$box.items; } }; MCTMPropHandlers.values = { set: function (values) { this.$box.values = values || []; this.tokenCtrl.updateFromViewValues(); }, get: function () { if (this.isFocus) { return this.savedValues; } else { return this.$box.values; } } }; MCTMPropHandlers.leafOnly = { set: function (value) { if (!!value === this.hasClass('as-leaf-only')) return; if (value) { this.addClass('as-leaf-only'); this.$box.leafOnly = true; } else { this.removeClass('as-leaf-only'); this.$box.leafOnly = false; } this.tokenCtrl.updateFromViewValues(); }, get: function () { return this.hasClass('as-leaf-only'); } }; MCTMPropHandlers.isFocus = { /*** * @this MultiCheckTreeMenu * @param value */ set: function (value) { if (value && (this.disabled || this.readOnly)) return; if (!!value === this.hasClass('as-focus')) return; if (value) { this.savedValues = this.$box.values; this.addClass('as-focus'); this.boxCtrl.onFocus(); } else { this.removeClass('as-focus'); this.boxCtrl.onBlur(); var newValues = this.values; if (!arrayCompare(this.savedValues, newValues)) { this.notifyChange(); } else { this.tokenCtrl.updateFromViewValues(); } this.savedValues = this.values; } }, get: function () { return this.hasClass('as-focus'); } }; MCTMPropHandlers.enableSearch = { set: function (value){ this.$box.enableSearch = value; }, get: function (){ return this.$box.enableSearch ; } }; /* harmony default export */ var multichecktreemenu_MCTMPropHandlers = (MCTMPropHandlers); /**************************** ADAPT OLD VERSION **********************************************************************/ MCTMPropHandlers.$checkTreeBox = { get: function () { return this.$box; } }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreeleafmenu/MCTLMPropHandler.js var MCTLMPropHandler = Object.assign({}, multichecktreemenu_MCTMPropHandlers); MCTLMPropHandler.leafOnly = { value: true, enumerable: true }; /* harmony default export */ var multichecktreeleafmenu_MCTLMPropHandler = (MCTLMPropHandler); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreemenu/MMCTMBoxController.js /*** * * @param elt * @constructor */ function MMCTMBoxController(elt) { this.elt = elt; this.$box = elt.$box; for (var key in this) { if (key.startsWith('ev_')) this[key] = this[key].bind(this); } this.elt.on('click', this.ev_click); this.$box.on('close', this.ev_close); this.$box.on('cancel', this.ev_cancel); this.$box.on('change', this.ev_boxValuesChange); } MMCTMBoxController.prototype.onFocus = function () { this.$box.addTo(document.body); this.elt.off('click', this.ev_click); }; MMCTMBoxController.prototype.onBlur = function () { this.$box.remove(); setTimeout(() => { this.elt.on('click', this.ev_click); }, 50) }; MMCTMBoxController.prototype.ev_click = function (event) { if (!this.elt.disabled && !this.elt.readOnly && (event.target === this.elt || event.target === this.elt.$itemCtn)) { this.elt.isFocus = true; } }; MMCTMBoxController.prototype.ev_close = function (event) { this.elt.isFocus = false; }; MMCTMBoxController.prototype.ev_cancel = function (event) { this.$box.values = this.elt.savedValues; this.elt.isFocus = false; }; MMCTMBoxController.prototype.ev_boxValuesChange = function () { this.elt.tokenCtrl.updateFromViewValues(); }; /* harmony default export */ var multichecktreemenu_MMCTMBoxController = (MMCTMBoxController); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreemenu/MCTMTokenController.js /**** * * @param {MultiCheckTreeMenu} elt * @constructor */ function MCTMTokenController(elt) { this.elt = elt; this.$box = elt.$box; this.$itemCtn = elt.$itemCtn; } MCTMTokenController.prototype.updateFromViewValues = function () { var values = this.$box.viewValues; this.requireItems(values.length); var holder; for (var i = 0; i < values.length; ++i) { holder = this.$box.getHolderByValue(values[i]); this.$itemCtn.childNodes[i].data = holder.data; } }; MCTMTokenController.prototype.requireItems = function (count) { while (this.$itemCtn.childNodes.length < count) { this.$itemCtn.addChild(this.makeToken()); } while (this.$itemCtn.childNodes.length > count) { this.$itemCtn.lastChild.remove(); } }; MCTMTokenController.prototype.removeValue = function (targetValue) { this.$box.select(targetValue, false); this.updateFromViewValues(); if (!this.elt.isFocus) { this.elt.notifyChange(); } }; MCTMTokenController.prototype.makeToken = function () { var ctrl = this; return Object(ACore["c" /* _ */])({ tag: js_SelectBoxItem, on: { close: function () { ctrl.removeValue(this.value); } } }); }; /* harmony default export */ var multichecktreemenu_MCTMTokenController = (MCTMTokenController); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreemenu/MultiCheckTreeMenu.js /*** * @extends AElement * @constructor */ function MultiCheckTreeMenu_MultiCheckTreeMenu() { this.$box = Object(ACore["c" /* _ */])({ tag: this.classes.Box }); this.$itemCtn = Object(ACore["a" /* $ */])('.as-multi-select-menu-item-ctn', this); this.boxCtrl = new multichecktreemenu_MMCTMBoxController(this); this.tokenCtrl = new multichecktreemenu_MCTMTokenController(this);//mobile only } MultiCheckTreeMenu_MultiCheckTreeMenu.tag = 'MultiCheckTreeMenu'.toLowerCase(); MultiCheckTreeMenu_MultiCheckTreeMenu.prototype.classes = { Box: checktreebox_MCheckTreeBox }; MultiCheckTreeMenu_MultiCheckTreeMenu.render = function () { return Object(ACore["c" /* _ */])({ class: ['as-multi-select-menu', 'as-multi-check-tree-menu'], extendEvent: ['change'], attr: { tabindex: '1' }, child: [ { class: ['as-multi-select-menu-item-ctn', 'as-bscroller'] }, { tag: 'button', class: 'as-multi-select-menu-toggle-btn', child: 'dropdown-ico' }, 'attachhook' ] }); }; MultiCheckTreeMenu_MultiCheckTreeMenu.prototype.notifyChange = function () { this.emit('change', { type: 'change', target: this }, this); }; MultiCheckTreeMenu_MultiCheckTreeMenu.property = multichecktreemenu_MCTMPropHandlers; ACore["d" /* default */].install(MultiCheckTreeMenu_MultiCheckTreeMenu); /* harmony default export */ var multichecktreemenu_MultiCheckTreeMenu = (MultiCheckTreeMenu_MultiCheckTreeMenu); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreeleafbox/CTLBPropHandlers.js var CTLBPropHandlers = Object.keys(checktreebox_CTBPropHandlers).reduce((ac, key) => { ac[key] = Object.assign({}, checktreebox_CTBPropHandlers[key]); return ac; }, {}); CTLBPropHandlers.leafOnly = { enumerable: true, value: true }; /* harmony default export */ var checktreeleafbox_CTLBPropHandlers = (CTLBPropHandlers); /*** * * @type {boolean} * @name enableSearch * @memberOf MCheckTreeBox# */ // CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreeleafbox/CTLIPropHandlers.js var CTLIPropHandlers = Object.keys(checktreebox_CTIPropHandlers).reduce((ac, key) => { ac[key] = Object.assign({}, checktreebox_CTIPropHandlers[key]); return ac; }, {}); /* harmony default export */ var checktreeleafbox_CTLIPropHandlers = (CTLIPropHandlers); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreeleafbox/CheckTreeLeafItem.js /*** * @extends AElement * @constructor */ function CheckTreeLeafItem() { this._data = null; this._status = 'none'; this.$text = Object(ACore["a" /* $ */])('.am-check-tree-item-text', this).firstChild; this.$desc = Object(ACore["a" /* $ */])('.am-check-tree-item-desc', this).firstChild; this.$iconCtn = Object(ACore["a" /* $ */])('.am-check-tree-item-icon-ctn', this); this.$checkbox = Object(ACore["a" /* $ */])('checkboxinput', this) .on('change', this.eventHandler.checkboxChange); this.addEventListener('click', this.eventHandler.click); } OOP["a" /* default */].mixClass(CheckTreeLeafItem, MCheckTreeItem); CheckTreeLeafItem.tag = 'CheckTreeLeafItem'.toLowerCase(); CheckTreeLeafItem.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['checkedchange', 'click', 'statuschange'], class: ['am-check-tree-leaf-item', 'am-check-tree-item', 'am-dropdown-box-item'], child: [ { class: 'am-check-tree-item-toggle-ctn', child: 'toggler-ico' }, { class: 'am-check-tree-item-icon-ctn' }, { class: 'am-check-tree-item-checkbox-ctn', child: 'checkboxinput' }, { class: 'am-check-tree-item-text', child: { text: '' } }, { class: 'am-check-tree-item-desc', child: { text: '' } } ] }); }; CheckTreeLeafItem.eventHandler = Object.assign({}, MCheckTreeItem.eventHandler); CheckTreeLeafItem.property = checktreeleafbox_CTLIPropHandlers; /*** * @name data * @memberOf CheckTreeLeafItem# */ /***. * @name text * @type {string} * @memberOf CheckTreeLeafItem# */ /*** * @name desc * @type {string} * @memberOf CheckTreeLeafItem# */ /*** * @name value * @memberOf CheckTreeLeafItem# */ /* harmony default export */ var checktreeleafbox_CheckTreeLeafItem = (CheckTreeLeafItem); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreeleafbox/CTLBModes.js /*** * @extends CTBModeNormal * @param {MCheckTreeBox} elt * @param {[]} items * @constructor */ function CTLBModeNormal(elt, items) { CTBModeNormal.apply(this, arguments); } OOP["a" /* default */].mixClass(CTLBModeNormal, CTBModeNormal); CTLBModeNormal.prototype.getViewValues = function () { var values = []; this.children.forEach(function visit(node) { if (node.selected === 'all' && node.data.isLeaf) { values.push(node.data.value); } else if (node.children) { node.children.forEach(visit); } }); return values; }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreeleafbox/MCheckTreeLeafBox.js /*** * @extends MCheckTreeBox * @constructor */ function MCheckTreeLeafBox() { checktreebox_MCheckTreeBox.apply(this, arguments); this.$box.addClass('as-check-tree-leaf-box'); } OOP["a" /* default */].mixClass(MCheckTreeLeafBox, checktreebox_MCheckTreeBox); MCheckTreeLeafBox.tag = 'MCheckTreeLeafBox'.toLowerCase(); MCheckTreeLeafBox.prototype.classes = Object.assign({}, checktreebox_MCheckTreeBox.prototype.classes, { ItemElement: checktreeleafbox_CheckTreeLeafItem, ModeNormal: CTLBModeNormal }); MCheckTreeLeafBox.render = function () { return checktreebox_MCheckTreeBox.render(); }; MCheckTreeLeafBox.property = checktreeleafbox_CTLBPropHandlers; MCheckTreeLeafBox.eventHandler = Object.assign({}, checktreebox_MCheckTreeBox.eventHandler); ACore["d" /* default */].install(MCheckTreeLeafBox); /* harmony default export */ var checktreeleafbox_MCheckTreeLeafBox = (MCheckTreeLeafBox); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreeleafmenu/MultiCheckTreeLeafMenu.js function MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu() { multichecktreemenu_MultiCheckTreeMenu.apply(this, arguments) } OOP["a" /* default */].mixClass(MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu, multichecktreemenu_MultiCheckTreeMenu); MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu.tag = 'MultiCheckTreeLeafMenu'.toLowerCase(); MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu.prototype.classes = { Box: checktreeleafbox_MCheckTreeLeafBox } MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu.render = function () { return multichecktreemenu_MultiCheckTreeMenu.render().addClass('as-multi-check-tree-leaf-menu'); }; MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu.property = multichecktreeleafmenu_MCTLMPropHandler; ACore["d" /* default */].install(MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu); /* harmony default export */ var multichecktreeleafmenu_MultiCheckTreeLeafMenu = (MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafmenu/SelectTreeLeafMenu.js /* harmony default export */ var selecttreeleafmenu_SelectTreeLeafMenu = (js_SelectTreeLeafMenu); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectbox/DSBPropHandlers.js var DSBPropHandlers = {}; DSBPropHandlers.items = { set: function (items) { this.itemListCtrl.setItems(items); if ('savedValue' in this) { this.modes.normal.setValue(this.savedValue, this.strictValue); } }, get: function () { return this.itemListCtrl.getItems(); } }; DSBPropHandlers.value = { set: function (value) { this.savedValue = value; this.modes.normal.setValue(value, this.strictValue); }, get: function () { return this.modes.normal.getValue(this.strictValue); } }; DSBPropHandlers.selectedItem = { get: function (){ return this.modes.normal.getSelectedItem(); } }; DSBPropHandlers.strictValue = { set: function (value) { if (value) { this.$box.addClass('as-strict-value'); } else { this.$box.removeClass('as-strict-value'); } }, get: function () { return this.$box.hasClass('as-strict-value'); } }; DSBPropHandlers.enableSearch = { set: function (value) { if (value) { this.$box.addClass('as-enable-search'); } else { this.$box.removeClass('as-enable-search'); } }, get: function () { return this.$box.hasClass('as-enable-search'); } }; /* harmony default export */ var dualselectbox_DSBPropHandlers = (DSBPropHandlers); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectbox/DSBModes.js function DSBModeNormal(elt, items) { this.items = items; this.value = [undefined, undefined]; this.elt = elt; this.$lists = this.elt.$lists; this.$leftItems = items.map((item) => this._makeLeftItem(item)); this.$leftItemDict = this.$leftItems.reduce((ac, cr) => { ac[keyStringOf(cr.itemData.value)] = cr; return ac; }, {}); this.$rightItemDict = {}; this.$rightItems = []; this.rightListDict = {}; if (items.length > 0) { this.viewRight(items[0].value) } this.$selectedLeft = null; this.$selectedRight = null; } DSBModeNormal.prototype._makeLeftItem = function (item) { var self = this; var itemElt = Object(ACore["c" /* _ */])({ class: 'absol-selectlist-item', attr: { 'data-key': keyStringOf(item.value) }, child: { tag: 'span', class:'absol-selectlist-item-text', child: { text: item.text } }, on: { click: function () { self.selectLeft(item.value); self.viewToSelected(); self.elt.notifyChange(); } } }); itemElt.itemData = item; return itemElt; }; DSBModeNormal.prototype._makeRightItem = function (leftItem, item) { var self = this; var itemElt = Object(ACore["c" /* _ */])({ class: 'absol-selectlist-item', attr: { 'data-key': keyStringOf(item.value) }, child: { tag: 'span', class:'absol-selectlist-item-text', child: { text: item.text } }, on: { click: function () { self.selectLeft(leftItem.value); self.selectRight(item.value); self.elt.notifyChange(); } } }); itemElt.itemData = item; return itemElt; } DSBModeNormal.prototype.selectLeft = function (leftValue) { var itemElt = this.$leftItemDict[keyStringOf(leftValue)]; if (!itemElt) return false; if (this.$selectedLeft === itemElt) return true; if (this.$selectedLeft) { this.$selectedLeft.removeClass('as-selected'); this.$selectedLeft = null; } itemElt.addClass('as-selected'); this.$selectedLeft = itemElt; this.value[0] = leftValue; this.viewRight(leftValue); var ok = this.selectRight(this.value[1]); var sItems; if (!ok) { sItems = itemElt.itemData.items; if (sItems && sItems.length > 0) this.selectRight(sItems[0].value); } return true; }; DSBModeNormal.prototype.viewRight = function (leftValue) { var key = keyStringOf(leftValue); var holder = this.rightListDict[key]; var items; var leftItem; if (!holder) { leftItem = this.$leftItemDict[key] && this.$leftItemDict[key].itemData; items = leftItem && leftItem.items; if (items) { holder = {}; holder.list = items.map(sItem => this._makeRightItem(leftItem, sItem)); holder.dict = holder.list.reduce((ac, cr) => { ac[keyStringOf(cr.itemData.value)] = cr; return ac; }, {}); this.rightListDict[key] = holder; } } if (holder) { if (this.$rightItems !== holder.list) { this.$rightItems = holder.list; this.$rightItemDict = holder.dict; this.$lists[1].clearChild().addChild(this.$rightItems); } } else { this.$lists[1].clearChild(); this.$rightItems = null; this.$rightItemDict = {}; } } DSBModeNormal.prototype.selectRight = function (value) { var itemElt = this.$rightItemDict[keyStringOf(value)]; if (!itemElt) return false; if (this.$selectedRight === itemElt) return true; if (this.$selectedRight) { this.$selectedRight.removeClass('as-selected'); this.$selectedRight = null; } itemElt.addClass('as-selected'); this.$selectedRight = itemElt; this.value[1] = value; return true; }; DSBModeNormal.prototype.onStart = function () { this.$lists[0].clearChild().addChild(this.$leftItems); this.$lists[1].clearChild().addChild(this.$rightItems); this.viewToSelected(); }; DSBModeNormal.prototype.onStop = noop; DSBModeNormal.prototype.setValue = function (value, strictValue) { if (!(value instanceof Array)) { value = [undefined, undefined]; } while (value.length < 2) { value.push(undefined); } while (value.length > 2) value.pop(); var leftOK = this.selectLeft(value[0]); if (!leftOK && strictValue) { if (this.items.length > 0) { leftOK = this.selectLeft(this.items[0].value); } } if (leftOK) this.viewRight(this.value[0]); var rightOK = this.selectRight(value[1]); if (!rightOK && strictValue) { if (this.$selectedLeft && this.$selectedLeft.itemData.items && this.$selectedLeft.itemData.items.length > 0) { rightOK = this.selectRight(this.$selectedLeft.itemData.items[0].value); } } this.viewToSelected(); }; DSBModeNormal.prototype.getValue = function (strictValue) { var value = this.value.slice(); if (!strictValue) return value; if (!this.$leftItemDict[keyStringOf(value[0])]) { value[0] = this.items[0] && this.items[0].value; } var rightHolder = this.rightListDict[keyStringOf(value[0])]; if (rightHolder) { if (!rightHolder.dict[keyStringOf(value[1])]) { if (rightHolder.list.length > 0) { value[1] = rightHolder.list[0].itemData.value; } } } return value; }; DSBModeNormal.prototype.getSelectedItem = function () { var value = this.value.slice(); var item = [null, null]; if (this.$leftItemDict[keyStringOf(value[0])]) { item[0] = this.$leftItemDict[keyStringOf(value[0])].itemData; } var rightHolder = this.rightListDict[keyStringOf(value[0])]; if (rightHolder) { if (rightHolder.dict[keyStringOf(value[1])]) { item[1] = rightHolder.dict[keyStringOf(value[1])].itemData; } } return item; } DSBModeNormal.prototype.viewToSelected = function () { setTimeout(() => { if (this.$selectedLeft) { vScrollIntoView(this.$selectedLeft); } if (this.$selectedRight) { vScrollIntoView(this.$selectedRight); } }, 50); }; /*** * @extends DSBModeNormal * @param elt * @param items * @constructor */ function DSBModeSearch(elt, items) { DSBModeNormal.apply(this, arguments); } OOP["a" /* default */].mixClass(DSBModeSearch, DSBModeNormal); delete DSBModeSearch.prototype.getValue; delete DSBModeSearch.prototype.setValue; DSBModeSearch.prototype.onStart = function () { DSBModeNormal.prototype.onStart.call(this); this.$lists[0].scrollTop = 0; this.$lists[1].scrollTop = 0; if (this.$selectedLeft) { this.$selectedLeft.removeClass('as-selected'); this.$selectedLeft = null; } if (this.$selectedRight) { this.$selectedRight.removeClass('as-selected'); this.$selectedRight = null; } } DSBModeSearch.prototype.updateSelectedFromRef = function () { var normalMode = this.elt.modes.normal; if (normalMode.$selectedLeft) { this.selectLeft(normalMode.$selectedLeft.itemData.value, true); } if (normalMode.$selectedRight) { this.selectRight(normalMode.$selectedRight.itemData.value, true); } }; DSBModeSearch.prototype.selectLeft = function (leftValue, viewOnly) { if (!viewOnly) this.elt.modes.normal.selectLeft(leftValue); var itemElt = this.$leftItemDict[keyStringOf(leftValue)]; if (this.$selectedLeft === itemElt) return true; if (this.$selectedLeft) { this.$selectedLeft.removeClass('as-selected'); this.$selectedLeft = null; } if (!itemElt) return false; itemElt.addClass('as-selected'); this.$selectedLeft = itemElt; this.viewRight(leftValue); var sItems = itemElt.itemData.items; if (sItems && sItems.length > 0 && !viewOnly) this.selectRight(sItems[0].value); return true; }; DSBModeSearch.prototype.selectRight = function (value, viewOnly) { if (!viewOnly) this.elt.modes.normal.selectRight(value); var itemElt = this.$rightItemDict[keyStringOf(value)]; if (this.$selectedRight === itemElt) return true; if (this.$selectedRight) { this.$selectedRight.removeClass('as-selected'); this.$selectedRight = null; } if (!itemElt) return false; itemElt.addClass('as-selected'); this.$selectedRight = itemElt; return true; }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectbox/MDSBItemListController.js function MDSBItemListController(elt) { this.elt = elt; this.items = []; this._searchItems = []; this._searchCache = {}; } MDSBItemListController.prototype.setItems = function (items) { this.items = copySelectionItemArray(items); this._searchItems = prepareSearchForList(copySelectionItemArray(this.items)); this._searchCache = {}; var mode = new DSBModeNormal(this.elt, this.items); this.elt.modes.normal = mode; this.elt.mode = mode; mode.onStart(); }; MDSBItemListController.prototype.getItems = function () { return copySelectionItemArray(this.items); }; MDSBItemListController.prototype.makeSearch = function (query) { if (this._searchCache[query]) return this._searchCache[query].resetAndGet(); var items = this._searchItems; var queryItem = prepareSearchForItem({ text: query }); var maxScore = 0; var holders = items.map(function (item) { var h = { item: item, itemScore: calcItemMatchScore(queryItem, item), }; maxScore = Math.max(maxScore, h.itemScore); var childMaxScore = 0; if (item.items && item.items.length > 0) { h.child = item.items.map(function (cItem) { var cItemScore = calcItemMatchScore(queryItem, cItem); maxScore = Math.max(maxScore, cItemScore); childMaxScore = Math.max(childMaxScore, cItemScore); return { item: cItem, itemScore: cItemScore }; }); h.childScore = childMaxScore; } return h; }); holders.sort(function (a, b) { return -Math.max(a.itemScore, a.childScore) + Math.max(b.itemScore, b.childScore) }); var midScore = maxScore / 2; holders = holders.filter(function (holder) { return Math.max(holder.itemScore, holder.childScore) >= midScore; }); var searchingResultItems = holders.map(function (holder) { var oldItem = holder.item; var item = { text: oldItem.text, value: oldItem.value }; var childHolders; if (holder.child) { childHolders = holder.child.slice(); childHolders.sort(function (a, b) { return -a.itemScore + b.itemScore; }); item.items = childHolders.map(function (cHolder) { return cHolder.item; }); item.isSearchItem = true; } return item; }); var mode = new DSBModeSearch(this.elt, searchingResultItems); this._searchCache[query] = { mode: mode, resetAndGet: function (){ return this.mode } }; return mode; }; /* harmony default export */ var dualselectbox_MDSBItemListController = (MDSBItemListController); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/dualselectbox.css var dualselectbox = __webpack_require__(303); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectbox/MDualSelectBox.js /*** * @extends {AElement} * @constructor */ function MDualSelectBox() { this.$box = Object(ACore["a" /* $ */])('.am-dropdown-box', this); this.$lists = Object(ACore["b" /* $$ */])('.as-dual-select-box-list', this); this.itemListCtrl = new dualselectbox_MDSBItemListController(this); this.$searchInput = Object(ACore["a" /* $ */])(Searcher.tag, this) .on('stoptyping', this.eventHandler.searchModify); this.$closeBtn = Object(ACore["a" /* $ */])('.am-dropdown-box-close-btn', this); this.modes = { normal: new DSBModeNormal(this, []) } this.mode = this.modes.normal; this.strictValue = true; this.on('click', this.eventHandler.click); } MDualSelectBox.tag = 'MDualSelectBox'.toLowerCase(); MDualSelectBox.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['change', 'close'], class: ['am-modal', 'am-dropdown-box-modal'], child: { class: ['am-dual-select-box', 'am-dropdown-box', 'as-dropdown-box-common-style'], child: [ { class: 'am-dropdown-box-header', child: [ { tag: Searcher.tag }, { tag: 'button', class: 'am-dropdown-box-close-btn', child: 'span.mdi.mdi-close' } ] }, { class: ['am-dropdown-box-body', 'am-check-tree-box-body', 'as-dual-select-box-list-ctn'], child: [ { class: ['as-dual-select-box-list', 'absol-selectlist'], }, { class: 'as-dual-select-box-arrow-ctn', child: 'span.mdi.mdi-menu-right' }, { class: ['as-dual-select-box-list', 'absol-selectlist'] } ] } ] } }); }; MDualSelectBox.prototype.viewToSelected = function () { this.modes.normal.viewToSelected(); }; MDualSelectBox.prototype.notifyChange = function () { var newValue = this.value; if (keyStringOf(newValue) !== keyStringOf(this['savedValue'])) { this.savedValue = newValue; this.emit('change', { type: 'change', target: this }, this); } }; MDualSelectBox.prototype.resetSearchState = function () { this.$searchInput.value = ''; this.eventHandler.searchModify(); } MDualSelectBox.property = dualselectbox_DSBPropHandlers; MDualSelectBox.eventHandler = {}; MDualSelectBox.eventHandler.searchModify = function () { var query = this.$searchInput.value.trim().replace(/\s+/g, ' '); if (query.length > 0) { if (this.mode === this.modes.normal) { this.mode.onStop(); this.$box.addClass('as-searching'); } this.mode.search = this.itemListCtrl.makeSearch(query); this.mode = this.mode.search; this.mode.onStart(); } else { if (this.mode !== this.modes.normal) { this.mode.onStop(); this.mode = this.modes.normal; this.mode.onStart(); this.$box.removeClass('as-searching'); } } }; MDualSelectBox.eventHandler.click = function (event) { if (event.target === this || Object(EventEmitter["d" /* hitElement */])(this.$closeBtn, event)) { this.emit('close', { type: 'close', target: this, originalEvent: event }, this); } }; /* harmony default export */ var dualselectbox_MDualSelectBox = (MDualSelectBox); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectmenu/MDSMBoxController.js function MDSMBoxController(elt) { this.elt = elt; this.$box = elt.$box; for (var key in this) { if (key.startsWith('ev_')) { this[key] = this[key].bind(this); } } this.elt.on('click', this.ev_click); this.$box.on('close', this.ev_close); } MDSMBoxController.prototype.ev_click = function () { this.elt.isFocus = true; }; MDSMBoxController.prototype.ev_close = function () { this.elt.isFocus = false; }; MDSMBoxController.prototype.onFocus = function (){ this.$box.addTo(document.body); this.$box.viewToSelected(); this.elt.off('click', this.ev_click); }; MDSMBoxController.prototype.onBlur = function (){ this.$box.remove(); setTimeout(()=>{ this.elt.on('click', this.ev_click); }, 50); }; /* harmony default export */ var dualselectmenu_MDSMBoxController = (MDSMBoxController); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectmenu/DSMPropsHandlers.js var DSMPropsHandlers = {}; DSMPropsHandlers.isFocus = { set: function (value) { if (this.disabled || this.readOnly) value = false; value = !!value; if (value === this.hasClass('as-focus')) return; if (value) { this.savedValue = this.$box.value; this.addClass('as-focus'); this.boxCtrl.onFocus(); } else { this.removeClass('as-focus'); this.boxCtrl.onBlur(); this.updateText(); if (keyStringOf(this.savedValue) !== keyStringOf(this.$box.value)) { delete this.savedValue; this.notifyChange(); } } }, get: function () { return this.hasClass('as-focus'); } }; DSMPropsHandlers.items = { set: function (items) { this.$box.items = items; if ('pendingValue' in this) { this.$box.value = this.pendingValue; } this.updateText(); }, get: function () { return this.$box.items; } }; DSMPropsHandlers.value = { set: function (value) { this.pendingValue = value; this.$box.value = value; this.updateText(); }, get: function () { if (!this.strictValue && ('pendingValue' in this)) { return this.pendingValue; } var value = this.$box.value; var selectedItem = this.$box.selectedItem; if (!selectedItem || !selectedItem[0] || !selectedItem[1]) return null; return value; } }; DSMPropsHandlers.format = { set: function (value) { this.attr('data-format', value); this.updateText(); }, get: function () { return this.attr('data-format') || '$0, $1'; } }; DSMPropsHandlers.strictValue = { set: function (value) { this.$box.strictValue = value; if (value) { this.addClass('as-strict-value'); } else { this.removeClass('as-strict-value'); } }, get: function () { return this.$box.strictValue; } }; DSMPropsHandlers.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } }, get: function () { return this.hasClass('as-disabled'); } }; DSMPropsHandlers.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } }, get: function () { return this.hasClass('as-read-only'); } }; /* harmony default export */ var dualselectmenu_DSMPropsHandlers = (DSMPropsHandlers); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectmenu/DualSelectMenu.js function DualSelectMenu_DualSelectMenu() { this.$box = Object(ACore["c" /* _ */])({ tag: dualselectbox_MDualSelectBox, }); this.$item = Object(ACore["a" /* $ */])('.absol-selectlist-item', this); OOP["a" /* default */].drillProperty(this, this.$box, 'enableSearch'); this.boxCtrl = new dualselectmenu_MDSMBoxController(this); this.strictValue = true; } DualSelectMenu_DualSelectMenu.tag = 'DualSelectMenu'.toLowerCase(); DualSelectMenu_DualSelectMenu.render = function () { return Object(ACore["c" /* _ */])({ class: ['am-dual-select-menu', 'absol-selectmenu', 'as-dual-select-menu'], extendEvent: ['change'], attr: { tabindex: '1' }, child: [ { class: 'absol-selectmenu-holder-item', child: '.absol-selectlist-item' }, { tag: 'button', class: 'absol-selectmenu-btn', child: ['dropdown-ico'] }, 'attachhook', ] }); }; DualSelectMenu_DualSelectMenu.prototype.notifyChange = function () { // console.log('change') delete this['pendingValue']; this.emit('change', { type: 'change', target: this }, this); }; DualSelectMenu_DualSelectMenu.prototype.updateText = function () { var selectedItem = this.$box.selectedItem; var format = this.format; var firstToken = '__'; var secToken = '__'; if (selectedItem[0]) { firstToken = selectedItem[0].text + '' } if (selectedItem[1]) { secToken = selectedItem[1].text + '' } var text = format.replace('$0', firstToken) .replace('$1', secToken); this.$item.clearChild().addChild(Object(ACore["c" /* _ */])({ tag: 'span', class:'absol-selectlist-item-text', child: { text: text } })); }; DualSelectMenu_DualSelectMenu.property = dualselectmenu_DSMPropsHandlers; DualSelectMenu_DualSelectMenu.eventHandler = {}; /* harmony default export */ var dualselectmenu_DualSelectMenu = (DualSelectMenu_DualSelectMenu); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTHeadCell.js /*** * * @param {TTHeadRow} row * @param {TTDHeadCell} data * @constructor */ function TTHeadCell(row, data){ this.row = row; this.data = data; this.elt = Object(ACore["c" /* _ */])({ tag:'th', class: 'as-tree-table-head-cell' }); if (data.attr) this.elt.attr(data.attr); if (data.style) this.elt.addStyle(data.style); this.row.head.table.elt.mAdapter.renderHeadCell(this.elt, this.data, this); } TTHeadCell.prototype.render = function (){ }; /* harmony default export */ var treetable_TTHeadCell = (TTHeadCell); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTHeadRow.js /** * * @param {TTHead} head * @param {TTDHeadRow} data * @constructor */ function TTHeadRow(head, data) { this.head = head; this.data = data; this.cells = this.data.cells.map(cellData => new treetable_TTHeadCell(this, cellData)); this.elt = Object(ACore["c" /* _ */])({ tag:'tr', class:'as-tree-table-head-row' }); this.elt.addChild(this.cells.map((cell, i)=> cell.elt.attr('data-col-idx', ''+i))); } /* harmony default export */ var treetable_TTHeadRow = (TTHeadRow); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTHead.js /*** * * @param {TTTable} table * @param {TTDHead} data * @constructor */ function TTHead(table, data) { this.data = data; this.table = table; this.elt = this.table.elt.$head; this.rows = (this.data.rows || []).map(rowData => new treetable_TTHeadRow(this, rowData)); this.elt.clearChild().addChild(this.rows.map(r=> r.elt)); } /* harmony default export */ var treetable_TTHead = (TTHead); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTCell.js /*** * * @param {TTRow} row * @param {TTDCell} data * @constructor */ function TTCell(row, data) { this.row = row; this.data = data; } Object.defineProperty(TTCell.prototype, 'elt', { get: function () { if (!this._elt) { this._elt = Object(ACore["c" /* _ */])({ tag: 'td', class: 'as-tree-table-cell', props: { ttCell: this }, on: { click: (event) => { if (this.data && this.data.on && this.data.on.click) { this.data.on.click.call(this._elt, event, this); } } } }); if (typeof this.data.class === "string") { addElementClassName(this._elt, this.data.class); } if (this.data.attr) this._elt.attr(this.data.attr); if (this.data.class) this._elt.addClass(this.data.class); if (this.data.style) this._elt.addStyle(this.data.style); this.row.body.table.elt.mAdapter.renderBodyCell(this.elt, this.data, this); } return this._elt; } }); Object.defineProperty(TTCell.prototype, 'innerText', Object.getOwnPropertyDescriptor(dynamictable_DTBodyCell.prototype, 'innerText')); /* harmony default export */ var treetable_TTCell = (TTCell); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTRow.js /*** * * @param {TTBody} body * @param {TTDRow}data * @param parentRow * @constructor */ function TTRow(body, data, parentRow) { this.id = randomIdent(8); this.level = parentRow ? parentRow.level + 1 : 0; this.body = body; this.data = data; this.parentRow = parentRow; this.clonedRow = null; this.cells = (this.data.cells || []).map(cellData => new treetable_TTCell(this, cellData)); this.subRows = (this.data.subRows || []).map(rowData => new TTRow(body, rowData, this)); if (!isNone(data.id) && data.subRows && data.subRows.length > 0 && (data.id in this.body.table.elt.savedState)) { this.isOpened = !!this.body.table.elt.savedState[data.id]; } else if (typeof data.initOpened === 'boolean') { this.isOpened = data.initOpened; } else if (typeof body.table.data.initOpened === "boolean") { this.isOpened = body.table.data.initOpened; } else if (typeof body.table.elt.initOpen === 'boolean') { this.isOpened = body.table.elt.initOpen; } } TTRow.prototype.isOpened = false; /*** * * @param {Array<AElement>=} ac */ TTRow.prototype.getRowElements = function (ac) { ac = ac || []; ac.push(this.elt); if (this.isOpened) { this.subRows.forEach(row => row.getRowElements(ac)); } return ac; }; TTRow.prototype.toggle = function () { if (this.isOpened) this.close(); else this.open(); }; TTRow.prototype.open = function () { if (this.isOpened) return; if (this.subRows.length === 0) return; this.isOpened = true; if (!isNone(this.data.id) && this.cells)//real node this.body.table.elt.savedState[this.data.id] = this.isOpened; this.elt.addClass('as-is-opened'); var rowElements = this.getRowElements(); rowElements.shift(); var bodyElt = this.body.elt; var bf = this.body.elt.findChildAfter(this.elt); if (bf) { rowElements.forEach(elt => bodyElt.addChildBefore(elt, bf)); } else { bodyElt.addChild(rowElements); } this.updateSizeUp(); }; TTRow.prototype.close = function () { if (!this.isOpened) return; var rowElements = this.getRowElements(); rowElements.shift(); rowElements.forEach(elt => elt.remove()); this.isOpened = false; if (!isNone(this.data.id) && this.cells) this.body.table.elt.savedState[this.data.id] = this.isOpened; this._elt.removeClass('as-is-opened'); this.updateSizeUp(); }; TTRow.prototype.updateSizeUp = function () { this.body.table.elt.notifySizeChange(); }; TTRow.prototype.remove = function () { var idx = -1; var rowElements; var removeRow = (idx, rows, dataRows) => { rows.splice(idx, 1); dataRows.splice(idx, 1); if (this.clonedRow) this.clonedRow.remove(); if (this.elt.parentElement) { rowElements = this.clonedRow ? this.clonedRow.getRowElements() : this.getRowElements(); rowElements.forEach(elt => elt.selfRemove()); ResizeSystem["a" /* default */].requestUpdateSignal(); } this.body.table.elt.queryCtrl.requestTransferSearchItems(); } if (this.parentRow) { idx = this.parentRow.subRows.indexOf(this); if (idx >= 0) { removeRow(idx, this.parentRow.subRows, this.parentRow.data.subRows); if (this.parentRow.subRows.length === 0) this.parentRow.elt.removeClass('as-has-sub-row'); } } else { idx = this.body.rows.indexOf(this); if (idx >= 0) { removeRow(idx, this.body.rows, this.body.data.rows); } } }; /*** * @param {TTDRow} rowData */ TTRow.prototype.addSubRow = function (rowData) { var row = new TTRow(this.body, rowData, this); var clonedRow; if (this.clonedRow) clonedRow = new TTClonedRow(row, null, this.subRows.length);//idx is not important var rowElements; var bf; if (this.elt.parentElement && this.isOpened) { rowElements = this.clonedRow ? this.clonedRow.getRowElements() : this.getRowElements(); bf = this.body.elt.findChildAfter(rowElements[rowElements.length - 1]); rowElements = clonedRow ? clonedRow.getRowElements() : row.getRowElements(); if (bf) { rowElements.forEach(elt => this.body.elt.addChildBefore(elt, bf)); } else { rowElements.forEach(elt => this.body.elt.addChild(elt)); } ResizeSystem["a" /* default */].requestUpdateSignal(); } this.subRows.push(row); if (this.data.subRows) { this.data.subRows.push(rowData); } else { this.data.subRows = [rowData]; } if (this.clonedRow) this.clonedRow.addSubRow(clonedRow); if (this._elt) this.elt.addClass('as-has-sub-row'); this.body.table.elt.queryCtrl.requestTransferSearchItems(); }; /*** * @param {TTDRow} newRowData */ TTRow.prototype.replace = function (newRowData) { var idx = -1; var rowElements; var bf; var newRow; var newClonedRow; var needView; var makeReplaceRow = (idx, rows, dataRows) => { newRow = new TTRow(this.body, newRowData, this.parentRow); rows.splice(idx, 1, newRow); dataRows.splice(idx, 1, newRowData); if (this.clonedRow) { newClonedRow = new TTClonedRow(newRow, null, idx); this.clonedRow.replace(newClonedRow) } if (this.elt.parentElement) { rowElements = this.clonedRow ? this.clonedRow.getRowElements() : this.getRowElements(); bf = this.body.elt.findChildAfter(rowElements[rowElements.length - 1]); rowElements.forEach(elt => elt.selfRemove()); rowElements = newClonedRow ? newClonedRow.getRowElements() : newRow.getRowElements(); if (bf) { rowElements.forEach(elt => this.body.elt.addChildBefore(elt, bf)); } else { rowElements.forEach(elt => this.body.elt.addChild(elt)); } ResizeSystem["a" /* default */].requestUpdateSignal(); } this.body.table.elt.queryCtrl.requestTransferSearchItems(); } if (this.parentRow) { idx = this.parentRow.subRows.indexOf(this); if (idx >= 0) { makeReplaceRow(idx, this.parentRow.subRows, this.parentRow.data.subRows); } } else { idx = this.body.rows.indexOf(this); if (idx >= 0) { makeReplaceRow(idx, this.body.rows, this.body.data.rows); } } }; /*** * @param {TTDRow} newRowData */ TTRow.prototype.addRowBefore = function (newRowData) { var idx = -1; var makeNewRowBefore = (idx, rows, dataRows) => { var row, clonedRow; var rowElements; row = new TTRow(this.body, newRowData, this.parentRow); if (this.clonedRow) { clonedRow = new TTClonedRow(row, null, idx); } if (this.elt.parentElement) { rowElements = clonedRow ? clonedRow.getRowElements() : row.getRowElements(); rowElements.forEach(elt => this.body.elt.addChildBefore(elt, this.elt)); ResizeSystem["a" /* default */].requestUpdateSignal(); } rows.splice(idx, 0, row); dataRows.splice(idx, 0, newRowData); if (this.clonedRow) { this.clonedRow.addRowBefore(clonedRow); } this.body.table.elt.queryCtrl.requestTransferSearchItems(); } if (this.parentRow) { idx = this.parentRow.subRows.indexOf(this); if (idx >= 0) { makeNewRowBefore(idx, this.parentRow.subRows, this.parentRow.data.subRows) } } else { idx = this.body.rows.indexOf(this); if (idx >= 0) { makeNewRowBefore(idx, this.body.rows, this.body.data.rows); } } }; /*** * @param {TTDRow} newRowData */ TTRow.prototype.addRowAfter = function (newRowData) { var idx = -1; var rowElements; var bf; var makeNewRowAfter = (idx, rows, dataRows) => { var row = new TTRow(this.body, newRowData, this.parentRow); var clonedRow; if (this.clonedRow) clonedRow = new TTClonedRow(row, null, idx); if (this.elt.parentElement) { rowElements = this.clonedRow ? this.clonedRow.getRowElements() : this.getRowElements(); bf = this.body.elt.findChildAfter(rowElements[rowElements.length - 1]); rowElements = clonedRow ? clonedRow.getRowElements() : row.getRowElements(); if (bf) { rowElements.forEach(elt => this.body.elt.addChildBefore(elt, bf)); } else { rowElements.forEach(elt => this.body.elt.addChild(elt)); } ResizeSystem["a" /* default */].requestUpdateSignal(); } rows.splice(idx + 1, 0, row); dataRows.splice(idx + 1, 0, newRowData); if (this.clonedRow) this.clonedRow.addRowBefore(clonedRow); this.body.table.elt.queryCtrl.requestTransferSearchItems(); } if (this.parentRow) { idx = this.parentRow.subRows.indexOf(this); if (idx >= 0) { makeNewRowAfter(idx, this.parentRow.subRows, this.parentRow.data.subRows); } } else { idx = this.body.rows.indexOf(this); if (idx >= 0) { makeNewRowAfter(idx, this.body.rows, this.body.data.rows); } } }; Object.defineProperty(TTRow.prototype, 'elt', { get: function () { if (!this._elt) { this._elt = Object(ACore["c" /* _ */])({ tag: 'tr', class: 'as-tree-table-row', attr: { 'data-level': this.level + '' }, props: { ttRow: this } }); if (this.data.id) this._elt.attr('data-id', this.data.id); if (this.isOpened) this._elt.addClass('as-is-opened'); if (this.subRows.length > 0) this._elt.addClass('as-has-sub-row'); this._elt.addChild(this.cells.map((cell, i) => (cell.elt).attr('data-col-idx', i + ''))); this.$toggle = Object(ACore["a" /* $ */])('.as-tree-table-toggle', this._elt); if (this.$toggle) { this.$toggleCell = this.$toggle.parentElement; this.$toggleCell.addClass('as-has-toggle'); this.$toggle = Object(ACore["c" /* _ */])({ elt: this.$toggle, child: 'toggler-ico', on: { click: () => { if (this.clonedRow) { this.clonedRow.toggle(); } else { this.toggle(); } } } }); } } return this._elt; } }); Object.defineProperty(TTRow.prototype, 'innerText', Object.getOwnPropertyDescriptor(dynamictable_DTBodyRow.prototype, 'innerText')); /* harmony default export */ var treetable_TTRow = (TTRow); /*** * * @param {TTRow} origin * @param queryResult * @param idx * @constructor */ function TTClonedRow(origin, queryResult, idx) { this.body = origin.body; this.idx = idx; this.id = origin.id; this._elt = origin.elt; this.elt = origin.elt; this.data = origin.data; this.origin = origin; this.score = queryResult && queryResult[this.id]; if (!queryResult) this.score = 1e6; this.isOpened = this.score && this.score[0] <= this.score[1]; this.attach(); if (this.isOpened) { this.subRows = this.origin.subRows.filter(row => queryResult[row.id]) .map((row, i) => new TTClonedRow(row, queryResult, i)); this.subRows.sort((a, b) => { var sa = a.score[1]; var sb = b.score[1]; if (sa !== sb) return sb - sa; return a.idx - b.idx; }); } else { this.subRows = this.origin.subRows.map((row, i) => new TTClonedRow(row, queryResult, i)); } } ['toggle', 'open', 'close', 'getRowElements', 'updateSizeUp'].forEach(key => { TTClonedRow.prototype[key] = TTRow.prototype[key]; }); TTClonedRow.prototype.remove = function () { var parentRow = this.origin.parentRow && this.origin.parentRow.clonedRow; var idx; if (parentRow) { idx = parentRow.subRows.indexOf(this); if (idx >= 0) { parentRow.subRows.splice(idx, 1); } } else { idx = this.origin.body.clonedRows.indexOf(this); if (idx >= 0) { this.origin.body.clonedRows.splice(idx, 1); } } }; TTClonedRow.prototype.replace = function (newClonedRow) { var parentRow = this.origin.parentRow && this.origin.parentRow.clonedRow; var idx; if (parentRow) { idx = parentRow.subRows.indexOf(this); if (idx >= 0) { parentRow.subRows.splice(idx, 1, newClonedRow); } } else { idx = this.origin.body.clonedRows.indexOf(this); if (idx >= 0) { this.origin.body.clonedRows.splice(idx, 1, newClonedRow); } } }; TTClonedRow.prototype.addRowBefore = function (newClonedRow) { var parentRow = this.origin.parentRow && this.origin.parentRow.clonedRow; var idx; if (parentRow) { idx = parentRow.subRows.indexOf(this); if (idx >= 0) { parentRow.subRows.splice(idx, 0, newClonedRow); } } else { idx = this.origin.body.clonedRows.indexOf(this); if (idx >= 0) { this.origin.body.clonedRows.splice(idx, 0, newClonedRow); } } }; TTClonedRow.prototype.addRowAfter = function (newClonedRow) { var parentRow = this.origin.parentRow && this.origin.parentRow.clonedRow; var idx; if (parentRow) { idx = parentRow.subRows.indexOf(this); if (idx >= 0) { parentRow.subRows.splice(idx + 1, 0, newClonedRow); } } else { idx = this.origin.body.clonedRows.indexOf(this); if (idx >= 0) { this.origin.body.clonedRows.splice(idx + 1, 0, newClonedRow); } } }; TTClonedRow.prototype.addSubRow = function (newClonedRow) { this.subRows.push(newClonedRow); }; TTClonedRow.prototype.attach = function () { if (this.isOpened) { this.origin.elt.addClass('as-is-opened'); } else { this.origin.elt.removeClass('as-is-opened'); } this.origin.clonedRow = this; }; TTClonedRow.prototype.detach = function () { if (this.origin.isOpened) { this.origin.elt.addClass('as-is-opened'); } else { this.origin.elt.removeClass('as-is-opened'); } this.origin.clonedRow = null; this.subRows.forEach(row => row.detach()); }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTBody.js /*** * * @param {TTTable}table * @param {TTDBody} data * @constructor */ function TTBody(table, data) { this.table = table; this.data = data; this.elt = this.table.elt.$body; /*** * * @type {TTRow[]} */ this.rows = (this.data.rows || []).map(rowData => new treetable_TTRow(this, rowData, null)); this.clonedRows = null; this.renderRows(); } TTBody.prototype.applyQueryResult = function (queryResult) { this.clearClonedRows(); if (queryResult) { this.table.elt.addClass('as-searching'); this.clonedRows = this.rows.filter(row => queryResult[row.id]) .map((row, i) => new TTClonedRow(row, queryResult, i)); this.clonedRows.sort((a, b) => { var sa = a.score[1]; var sb = b.score[1]; if (sa !== sb) return sb - sa; return a.idx - b.idx; }); this.renderRows(this.clonedRows); this.table.elt.notifySizeChange(); } else { this.table.elt.removeClass('as-searching'); this.renderRows(); } }; TTBody.prototype.clearClonedRows = function () { if (this.clonedRows) this.clonedRows.forEach(row => row.detach()); this.clonedRows = null; }; /*** * */ TTBody.prototype.renderRows = function (rows) { rows = rows || this.rows; this.elt.clearChild().addChild(rows.reduce((ac, row) => { row.getRowElements(ac); return ac; }, [])); }; /*** * * @param data */ TTBody.prototype.rowOf = function (data) { if (data instanceof treetable_TTRow) { data = data.data; } var result = null; var queue = this.rows.slice(); var cr; while (queue.length > 0 && !result) { cr = queue.shift(); if (cr.data === data || cr.data.id === data || (data.id && cr.data.id === data.id)) { result = cr; } else { queue.push.apply(queue, cr.subRows); } } return result; }; /*** * * @param {TTDRow} rowData */ TTBody.prototype.addRow = function (rowData) { var row = new treetable_TTRow(this, rowData, null); this.data.rows.push(rowData); this.rows.push(row); var elements = row.getRowElements(); elements.forEach(elt => this.elt.addChild(elt)); ResizeSystem["a" /* default */].requestUpdateSignal(); }; /* harmony default export */ var treetable_TTBody = (TTBody); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTTable.js /*** * * @param {TreeTable} elt * @param data * @constructor */ function TTTable(elt, data) { this.data = data; this.elt = elt; this.head = new treetable_TTHead(this, this.data.head); this.body = new treetable_TTBody(this, this.data.body); } /* harmony default export */ var treetable_TTTable = (TTTable); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTDataAdapter.js /*** * * @param {TreeTable} tableElt * @param opt * @constructor */ function TTDataAdapter(tableElt, opt) { this.tableElt = tableElt; this.data = null; Object.assign(this, opt || {}); } TTDataAdapter.prototype.render = function () { if (this.tableElt.table) { } this.tableElt.table = new treetable_TTTable(this.tableElt, this.data); }; /*** * * @param {AElement} elt * @param {TTDHeadCell} data * @param {TTHeadCell} controller */ TTDataAdapter.prototype.renderHeadCell = function (elt, data, controller) { if (data.child) { if (data.child.map) { elt.addChild(data.child.map(function (it) { return Object(ACore["c" /* _ */])(it); })); } else { elt.addChild(Object(ACore["c" /* _ */])(data.child)); } } if (data.render) { data.render.call(null, elt, data, controller); } if (data.style) { elt.addStyle(data.style); } }; /*** * * @param {AElement} elt * @param {TTDCell} data * @param {TTCell} controller */ TTDataAdapter.prototype.renderBodyCell = function (elt, data, controller) { if (data.child) { if (data.child.map) { elt.addChild(data.child.map(function (it) { return Object(ACore["c" /* _ */])(it); })) } else { elt.addChild(Object(ACore["c" /* _ */])(data.child)); } } if (data.render) { data.render.call(null, elt, data, controller); } if (data.style) { elt.addStyle(data.style); } if (data.class) { elt.addClass(data.class); } if (data.attr) { elt.attr(data.attr); } }; /* harmony default export */ var treetable_TTDataAdapter = (TTDataAdapter); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/treetable.css var treetable = __webpack_require__(305); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTQueryController.js /*** * * @param {TreeTable} elt * @constructor */ function TTQueryController(elt) { this.searchMaster = new list_ListSearchMaster(); this.elt = elt; this.$filterInputs = []; this.$searchInput = null; this['request'] = this['request'].bind(this); this._waitDestroy(); this._rtsiIdx = -1; } TTQueryController.prototype._waitDestroy = function (){ setTimeout(()=>{ if (this.elt.isDescendantOf(document.body)) { this._waitDestroy(); } else { this.searchMaster.destroy(); } }, 10000) } TTQueryController.prototype.attachFilterInput = function (input) { if (this.$filterInputs.indexOf(input) >= 0) return; if (input.detachTreeTable) input.detachTreeTable(); input.$treeTable = this; if (Object(ACore["a" /* $ */])(input).isSupportedEvent('stoptyping')) { input.on('stoptyping', this.request); } else { input.on('change', this.request); } input.detachTreeTable = this.detachFilterInput.bind(this, input); this.$filterInputs.push(input); }; TTQueryController.prototype.detachFilterInput = function (input) { var idx = this.$filterInputs.indexOf(input); if (idx < 0) return; this.$filterInputs.splice(idx, 1); input.off(this.$searchInput.isSupportedEvent('stoptyping') ? 'stoptyping' : 'change', this.request); input.detachTreeTable = null; }; TTQueryController.prototype.attachSearchInput = function (input) { if (this.$searchInput === input) return; if (input.detachTreeTable) input.detachTreeTable(); this.$searchInput = input; if (Object(ACore["a" /* $ */])(input).isSupportedEvent('stoptyping')) { input.on('stoptyping', this.request); } else { input.on('change', this.request); } input.detachTreeTable = this.detachSearchInput.bind(this, input) }; TTQueryController.prototype.detachSearchInput = function (input) { input = input || this.$searchInput; if (input !== this.$searchInput) return; input.off(this.$searchInput.isSupportedEvent('stoptyping') ? 'stoptyping' : 'change', this.request); input.detachTreeTable = null; this.$searchInput = null; }; TTQueryController.prototype.makeQuery = function () { var res = {}; if (this.$searchInput && this.$searchInput.value.trim().length > 0) { res.text = this.$searchInput.value.trim(); } for (var key in res) { return res; } return null; } TTQueryController.prototype.request = function () { var query = this.makeQuery(); if (query) this.searchMaster.query(query).then(searchResult => { this.elt.table.body.applyQueryResult(searchResult); }); else this.elt.table.body.applyQueryResult(null); }; TTQueryController.prototype.getSearchItems = function () { var getSearchItemOf = row => { var res = {}; res.text = row.innerText; res.value = row.id; if (row.subRows && row.subRows.length > 0) { res.items = row.subRows.map(getSearchItemOf) } return res; } return this.elt.table.body.rows.map(getSearchItemOf); }; TTQueryController.prototype.transferSearchItems = function () { this.searchMaster.transfer(this.getSearchItems()); }; TTQueryController.prototype.requestTransferSearchItems = function (){ if (this._rtsiIdx > 0) return; this._rtsiIdx = setTimeout(()=>{ this._rtsiIdx = -1; this.transferSearchItems(); }, 0); }; /* harmony default export */ var treetable_TTQueryController = (TTQueryController); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/LinearColorTinyBar.js /*** * @extends {AElement} * @constructor */ function LinearColorTinyBar() { this._value = 0; this._colorMapping = 0; this._colorMapping = this.BUILDIN_COLORS_RANGE.rainbow; /*** * * @type {Text} */ this.$text = Object(ACore["a" /* $ */])('.as-linear-color-tiny-text', this).firstChild; /*** * @type {string} valueText * @memberOf LinearColorTinyBar# * @name valueText */ /*** * @type {number} from 0..1..Inf * @memberOf LinearColorTinyBar# * @name value */ /*** * @type {Array} - from 0..1..Inf * @memberOf LinearColorTinyBar# * @name colorMapping# */ } LinearColorTinyBar.tag = 'LinearColorTinyBar'.toLowerCase(); LinearColorTinyBar.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-linear-color-tiny-bar', child: [ { tag: 'span', class: 'as-linear-color-tiny-text', child: { text: '0.00%' } }, '.as-linear-color-tiny-bar-rect', ] }); } LinearColorTinyBar.prototype.BUILDIN_COLORS_RANGE = js_LinearColorBar.prototype.BUILDIN_COLORS_RANGE; LinearColorTinyBar.prototype._updateColor = function () { var value = this._value; var colorMapping = this.colorMapping; var i = 0; while (i < colorMapping.length) { if (i + 1 == colorMapping.length || colorMapping[i + 1].value > value) break; ++i; } this.addStyle('--color', colorMapping[i].color + ''); }; LinearColorTinyBar.property = {}; LinearColorTinyBar.property.value = { set: function (value) { if (typeof value === "string") value = parseFloat(value); if (typeof value !== "number") value = 0; if (isNaN(value)) value = 0; this._value = Math.max(value, 0); this.addStyle('--value', this._value + ''); this._updateColor(); }, get: function () { return this._value; } }; LinearColorTinyBar.property.valueText = { set: function (value) { this.$text.data = value; }, get: function () { return this.$text.data; } }; LinearColorTinyBar.property.colorMapping = { set: function (value) { var ok = true; if (typeof value === 'string') { if (!(value in this.BUILDIN_COLORS_RANGE)) { value = 'rainbow' } value = this.BUILDIN_COLORS_RANGE[value]; } else if (value instanceof Array) { ok = value.length > 1; if (!ok) { console.warn("colorMapping.length must > 1", value); } } else { console.warn("Invalid colorMapping", value); } if (!ok) value = this.BUILDIN_COLORS_RANGE.rainbow; this._colorMapping = value; this._updateColor(); }, get: function () { return this._colorMapping; } }; ACore["d" /* default */].install(LinearColorTinyBar); /* harmony default export */ var js_LinearColorTinyBar = (LinearColorTinyBar); ShareSerializer.addHandlerBefore({ match: (elt, scope, stack) => { return elt.hasClass && elt.hasClass('as-linear-color-tiny-bar-rect'); }, exec: (printer, elt, scope, stack, accept) => { var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); bound.x -= printer.O.x; bound.y -= printer.O.y; printer.rect(bound, { fill: elt.getComputedStyleValue('background-color') }); } }, '*') // CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TreeTable.js /*** * @typedef {Object} TTDHeadCell * @property {AbsolConstructDescriptor|Array<AbsolConstructDescriptor>|AElement} [child] * @property {function(elt:AElement, data:TTDHeadCell, controller:TTCell): void} render * @property {CSSStyleDeclaration} style */ /*** * @typedef {Object} TTDHeadRow * @property {Array<TTDHeadCell>} cells * @property {Array<TTDHeadRow>} subRows */ /*** * @typedef {Object} TTDHead * @property {Array<TTDHeadRow>} rows */ /*** * @typedef {Object} TTDCell * @property {AbsolConstructDescriptor|Array<AbsolConstructDescriptor>|AElement} [child] * @property {function(elt:AElement, data:TTDCell, controller:TTCell): void} render * @property {CSSStyleDeclaration} [style] * @property {string|Array<string>} class * @property {Object} attr */ /*** * @typedef {Object} TTDRow * @property {Array<TTDCell>} cells * @property {Array<TTDRow>} subRows * @property {string} [id] * */ /*** * @typedef {Object} TTDHead * @property {Array<TTDHeadRow>} rows */ /*** * @typedef {Object} TTDBody * @property {Array<TTDRow>} rows */ /*** * @typedef {Object} TTData * @property {TTDHead} head * @property {TTDBody} body * @property {boolean} [initOpened] */ /*** * @typedef {Object} TTDAdapter * @property {TTData} data */ var loadCss = () => { var dynamicCss = new HTML5_DynamicCSS(); dynamicCss.setRules(Array(20).fill(null).reduce((ac, cr, i) => { ac[`.as-tree-table-row[data-level="${i}"] .as-tree-table-toggle::before`] = { width: 2 * i + 'em' } ac[['.as-tree-table.as-hide-col-' + i + ' td[data-col-idx="' + i + '"]', '.as-tree-table.as-hide-col-' + i + ' th[data-col-idx="' + i + '"]'].join(',')] = { display: 'none' } ac[`.as-tree-table-row[data-level="${i}"] .as-tree-table-cell.as-has-toggle`] = { 'padding-left': `calc(5px + ${2 * i + 1.5}em)` } ac[`.as-printer-content .as-tree-table-row[data-level="${i}"] .as-tree-table-cell.as-has-toggle`] = { 'padding-left': `calc(5px + ${2 * i}em)` } return ac; }, {})).commit(); loadCss = noop; } /*** * @extends AElement * @constructor */ function TreeTable() { loadCss(); this._hiddenColumns = []; this.$head = Object(ACore["a" /* $ */])('thead', this); this.$body = Object(ACore["a" /* $ */])('tbody', this); this.savedState = {}; /** * * @type {null|TTTable} */ this.table = null; /*** * * @type {null|TTDataAdapter} */ this.mAdapter = null; this.queryCtrl = new treetable_TTQueryController(this); this.rowMoveTool = new TTRowMoveTool(this); /*** * @name adapter * @type TTDAdapter * @memberOf TreeTable# */ /*** * @name searchInput * @type SearchTextInput * @memberOf TreeTable# */ } TreeTable.tag = 'TreeTable'.toLowerCase(); TreeTable.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['orderchange'], tag: 'table', class: 'as-tree-table', child: [ { tag: 'thead', class: 'as-tree-table-head' }, { tag: 'tbody' } ] }); }; TreeTable.prototype.removeRow = function (rowData) { if (!this.table) return; var row = this.table.body.rowOf(rowData); if (row) row.remove(); }; TreeTable.prototype.replaceRow = function (rowData, oldRowData) { if (!this.table) return; var row = this.table.body.rowOf(oldRowData); if (row) row.replace(rowData); }; /*** * * @param rowData * @param {any|null} parentRow */ TreeTable.prototype.addRowIn = function (rowData, parentRow) { if (!this.table) return; var row; if (parentRow) { row = this.table.body.rowOf(parentRow); if (row) row.addSubRow(rowData); else { console.error('Can not find row', parentRow) } } else { this.table.body.addRow(rowData); } }; TreeTable.prototype.addRow = function (rowData) { if (!this.table) return; this.table.body.addRow(rowData); }; TreeTable.prototype.addRows = function (rowDataArr) { if (!this.table) return; rowDataArr.forEach(rowData => { this.table.body.addRow(rowData); }); }; /*** * * @param rowData * @param {any|null} bfRow */ TreeTable.prototype.addRowBefore = function (rowData, bfRow) { if (!this.table) return; var row; if (bfRow) { row = this.table.body.rowOf(bfRow); if (row) row.addRowBefore(rowData); else { console.error('Can not find row', bfRow) } } else { this.table.body.addRow(rowData); } }; /*** * * @param rowData * @param {any|null} atRow */ TreeTable.prototype.addRowAfter = function (rowData, atRow) { if (!this.table) return; var row; if (atRow) { row = this.table.body.rowOf(atRow); if (row) row.addRowAfter(rowData); else { console.error('Can not find row', atRow) } } else { if (this.table.body.rows.length === 0) { this.table.body.addRow(rowData); } else { this.table.body.rows[0].addRowBefore(rowData); } } }; TreeTable.prototype.rowOf = function (rowData) { return this.table.body.rowOf(rowData); }; TreeTable.prototype.viewIntoRow = function (row) { var counter = 300; var wait = () => { counter--; if (this.isDescendantOf(document.body)) { row = this.rowOf(row); if (row) { vScrollIntoView(row.elt); } } else if (counter > 0) { setTimeout(wait, 30); } } setTimeout(wait, 10); }; TreeTable.prototype.notifySizeChange = function () { var c = this.parentElement; while (c) { if (typeof c.updateSize === 'function') c.updateSize(); else if (typeof c.requestUpdateSize === 'function') c.requestUpdateSize(); c = c.parentElement; } }; TreeTable.prototype.attachSearchInput = function (input) { this.searchInput = input; }; TreeTable.property = {}; TreeTable.property.adapter = { set: function (adapter) { if (adapter.type === 'struct') { adapter = ttStructAdapter2TTDAdapter(adapter); } this._adapterData = adapter; if (adapter && adapter.data) { adapter.data.initOpened = adapter.data.initOpened || adapter.initOpened;//adapt param } this.mAdapter = new treetable_TTDataAdapter(this, adapter); this.mAdapter.render(); this.queryCtrl.transferSearchItems(); var c = this.parentElement; while (c) { if (c.hasClass && c.hasClass('absol-table-vscroller') && c.update) { c.update(); break; } c = c.parentElement; } }, get: function () { return this._adapterData; } }; TreeTable.property.filterInputs = { set: function (inputs) { }, get: function () { } }; TreeTable.property.searchInput = { set: function (input) { if (input) this.queryCtrl.attachSearchInput(input); else this.queryCtrl.detachSearchInput(); }, get: function () { return this.queryCtrl.$searchInput; } }; TreeTable.property.hiddenColumns = { set: function (value) { value = value || []; this._hiddenColumns.forEach(function (idxV) { this.removeClass('as-hide-col-' + idxV); }.bind(this)); this._hiddenColumns = value; this._hiddenColumns.forEach(function (idxV) { this.addClass('as-hide-col-' + idxV); }.bind(this)); var c = this.parentElement; while (c) { if (c.hasClass && (c.hasClass('absol-table-vscroller') || c.hasClass('absol-table-scroller')) && (c.update || c.updateContent)) { (c.update ||c.updateContent).call(c); break; } c = c.parentElement; } if (this.isDescendantOf(document.body)) ResizeSystem["a" /* default */].update(); }, get: function () { return this._hiddenColumns; } }; ACore["d" /* default */].install(TreeTable); /* harmony default export */ var treetable_TreeTable = (TreeTable); /** * * @param {TreeTable} elt * @constructor */ function TTRowMoveTool(elt) { this.elt = elt; this.dragListenners = { dragstart: this.ev_dragStart.bind(this), drag: this.ev_drag.bind(this), dragend: this.ev_dragEnd.bind(this), dragdeinit: this.ev_dragDeinit.bind(this) }; this.$body = Object(ACore["c" /* _ */])({ tag: js_Hanger, elt: this.elt.$body, props: { hangOn: 3 } }).on('draginit', this.ev_dragInit.bind(this)); /** * * @type {null|TTRow} */ this.inParent = null; /** * * @type {null|TTRow} */ this.row = null; this.siblingRows = []; this.siblingBounds = []; } TTRowMoveTool.prototype._getZIndex = function () { var res = 0; var c = this.elt; while (c) { res = Math.max(res, parseInt(getComputedStyle(c).getPropertyValue('z-index'), 10) || 0); c = c.parentElement; } return res; }; TTRowMoveTool.prototype.ev_dragInit = function (event) { var row = this._findRow(event.target, true); if (!row) return; if (this.elt.table.body.clonedRows) return;// searching this.inParent = row.parentRow; this.row = row; this.$body.on(this.dragListenners); }; TTRowMoveTool.prototype.ev_dragDeinit = function () { this.$body.off(this.dragListenners); }; TTRowMoveTool.prototype.ev_dragStart = function (event) { event.preventDefault(); var row = this.row; var originTableElt = this.elt.table.elt; var originBody = originTableElt.lastChild; var tableBound = originTableElt.getBoundingClientRect(); var zIndex = this._getZIndex(); this.$clonedTable = Object(ACore["a" /* $ */])(originTableElt.cloneNode(false)) .addClass('as-dt-body-row-cloned-ctn')//reuse class this.$clonedTable.addStyle({ tableLayout: 'fixed', width: tableBound.width + 'px', zIndex: zIndex + 200 }).addTo(document.body); this.$modal = this.$modal || Object(ACore["c" /* _ */])({ tag: js_Modal, style: { zIndex: zIndex + 201, userSelect: 'none' } }); this.$modal.addTo(document.body); this.$clonedBody = Object(ACore["a" /* $ */])(originBody.cloneNode()); this.$clonedTable.addChild(this.$clonedBody); var originRowElt = row.elt; this.$clonedRow = Object(ACore["a" /* $ */])(originRowElt.cloneNode(true)).addStyle({ backgroundColor: originRowElt.getComputedStyleValue('background-color') }); this.$clonedBody.addChild(this.$clonedRow); var rowBound = originRowElt.getBoundingClientRect(); this.$clonedTable.addStyle({ top: rowBound.top + 'px', left: rowBound.left + 'px' }); this.$newPostLine = this.$newPostLine || Object(ACore["c" /* _ */])('.as-dt-insert-line'); this.$newPostLine.addStyle({ left: rowBound.left + 'px', width: rowBound.width + 'px' }); this.$newPostLine.addTo(document.body); this.rowBond = Math_Rectangle.fromClientRect(rowBound); this.mouseOffset = event.currentPoint.sub(this.rowBond.A()); Array.prototype.forEach.call(this.$clonedRow.childNodes, (td, i) => { var originTd = originRowElt.childNodes[i]; var bound = originTd.getBoundingClientRect(); Object(ACore["a" /* $ */])(td).addStyle({ 'width': bound.width + 'px', boxSizing: 'border-box' }); }); this.siblingRows = this.inParent ? this.inParent.subRows.slice() : this.elt.table.body.rows.slice(); this.firstSiblingRow = this.inParent ? this.inParent.subRows[0] : this.elt.table.body.rows[0]; this.siblingBounds = (this.inParent ? this.inParent.subRows : this.elt.table.body.rows).map(row => this._boundOfRow(row)); this.idx = this.siblingRows.indexOf(this.row); this.newIdx = this.idx; this.$scroller = findVScrollContainer(this.elt); if (this.$scroller === document.body.parentElement) this.$scroller = null; this.overflowCheckITV = setInterval(() => { if (!this.$scroller) return; var scrollerBound = this.$scroller.getBoundingClientRect(); var cloneBound = this.$clonedTable.getBoundingClientRect(); if (cloneBound.height >= scrollerBound.height) return; var newScrollTop = this.$scroller.scrollTop; if (cloneBound.top < scrollerBound.top) { newScrollTop = newScrollTop - Math.min(100, (scrollerBound.top - cloneBound.top) / 6); } else if (cloneBound.bottom > scrollerBound.bottom) { newScrollTop = newScrollTop - Math.min(100, (scrollerBound.bottom - cloneBound.bottom) / 6); newScrollTop = Math.min(this.$scroller.scrollHeight - this.$scroller.clientHeight, newScrollTop); } newScrollTop = Math.max(0, newScrollTop); if (newScrollTop !== this.$scroller.scrollTop) { this.$scroller.scrollTop = newScrollTop; } }, 33); }; TTRowMoveTool.prototype._boundOfRow = function (row) { var rowElements = row.getRowElements(); var bound = Math_Rectangle.fromClientRect(rowElements[0].getBoundingClientRect()); if (rowElements.length > 1) { bound = bound.merge( Math_Rectangle.fromClientRect(rowElements[rowElements.length - 1].getBoundingClientRect()) ); } return bound; }; TTRowMoveTool.prototype.ev_drag = function (event) { event.preventDefault(); var newPos = event.currentPoint.sub(this.mouseOffset); this.$clonedTable.addStyle('top', newPos.y + 'px'); var firstSiblingRowBound = Math_Rectangle.fromClientRect(this.firstSiblingRow.elt.getBoundingClientRect()); var viewDelta = firstSiblingRowBound.A().sub(this.siblingBounds[0].A()).y; var y = newPos.y + this.rowBond.height / 2 - viewDelta; var beforeIdx = this.siblingBounds.length; var rBound; for (var i = 0; i < this.siblingBounds.length; ++i) { rBound = this.siblingBounds[i]; if (rBound.centerPoint().y > y) { beforeIdx = i; break; } } if ((beforeIdx === this.idx + 1 || beforeIdx === this.idx)) { this.$newPostLine.addStyle('display', 'none'); this.newIdx = this.idx; } else { this.$newPostLine.removeStyle('display'); if (beforeIdx < this.siblingBounds.length) { this.$newPostLine.addStyle('top', this.siblingBounds[beforeIdx].y + viewDelta + 'px'); if (beforeIdx < this.idx) { this.newIdx = beforeIdx; } else { this.newIdx = beforeIdx - 1; } } else { this.newIdx = this.siblingBounds.length - 1; this.$newPostLine.addStyle('top', this.siblingBounds[this.siblingBounds.length - 1].C().y + viewDelta + 'px'); } } }; TTRowMoveTool.prototype.ev_dragEnd = function (event) { clearInterval(this.overflowCheckITV); this.$modal.remove(); this.$newPostLine.remove(); this.$clonedTable.remove(); if (this.newIdx !== this.idx) { if (this.inParent) { this.inParent.subRows.splice(this.idx, 1); this.inParent.subRows.splice(this.newIdx, 0, this.row); this.inParent.data.subRows.splice(this.idx, 1); this.inParent.data.subRows.splice(this.newIdx, 0, this.row.data); } else { this.elt.table.body.rows.splice(this.idx, 1); this.elt.table.body.rows.splice(this.newIdx, 0, this.row); this.elt.table.body.data.rows.splice(this.idx, 1); this.elt.table.body.data.rows.splice(this.newIdx, 0, this.row.data); } this.elt.table.body.renderRows(); this.elt.emit('orderchange', { type: 'orderchange', target: this.row, inParent: this.inParent || this.elt.table.body, inParentData: this.inParent ? this.inParent.data : this.elt.table.body.data, from: this.idx, to: this.newIdx, originalEvent: event, row: this.row, data: this.row.data, devMessage: this.inParent ? 'order change in array event.inParent.subRows' : 'order change in array event.inParent.rows' }); } }; TTRowMoveTool.prototype._findRow = function (elt, inDraZone) { var hitDragZone = false; while (elt) { if (elt.classList.contains('as-drag-zone')) hitDragZone = true; if (elt.ttRow) { if (hitDragZone || !inDraZone) return elt.ttRow; return null; } elt = elt.parentElement; } return null; }; /*** * * @param adapterData * @returns {TTDAdapter} */ function ttStructAdapter2TTDAdapter(adapterData) { var toString = { 'Date': x => x ? formatDateTime(x, 'dd/MM/yyyy') : '', 'DateTime': x => x ? formatDateTime(x, 'dd/MM/yyyy HH:mm') : '', text: x => (x || '') + '' }; var getItemDict = desc => { var dict = desc.__dict__; if (!dict) { Object.defineProperty(desc, '__dict__', { enumerable: false, writable: true, configurable: true, value: (desc.items || []).reduce(function makeDict(ac, cr) { var key = keyStringOf(cr.value); ac[key] = cr; if (cr.items && cr.items.reduce) { cr.items.reduce(makeDict, ac); } return ac; }, {}) }); dict = desc.__dict__; } return dict; } var handlers = { 'Date': x => [{ tag: 'span', child: { text: x ? formatDateTime(x, 'dd/MM/yyyy') : '' } }], 'DateTime': x => [{ tag: 'span', child: { text: x ? formatDateTime(x, 'dd/MM/yyyy HH:mm') : '' } }], text: x => [{ tag: 'span', child: { text: (x || '') + '' } }], performance: (x, desc) => { return [{ tag: js_LinearColorTinyBar.tag, props: { colorMapping: desc.colorMapping || 'performance', value: x, extend: (typeof desc.extend === "number") && (desc.extend > 0) ? desc.extend : 0.5, valueText: typeof x === 'number' ? (x * 100).toFixed(2) + '%' : x + '' } }] }, enum: (x, desc) => { var dict = getItemDict(desc); var item = dict[keyStringOf(x)]; if (item) return [{ tag: 'span', child: { text: item.text } }]; else return [{ tag: 'span', child: { text: '' } }]; }, '{enum}': (x, desc) => { var dict = getItemDict(desc); if (!(x instanceof Array)) return [{ tag: 'span', child: { text: '' } }]; var items = x.map(it => dict[keyStringOf(it)]).filter(it => !!it); var text = items.map(it => it.text).join(', '); return [{ tag: 'span', child: { text: text } }]; } } /** * * @type {TTDAdapter} */ var res = { data: { initOpened: true, head: { rows: [ { cells: adapterData.propertyNames.map(name => { var cellData = { child: { text: name } }; var descriptor = adapterData.propertyDescriptors[name]; if (descriptor && descriptor.text) cellData.child.text = descriptor.text; return cellData; }) } ] }, body: { rows: adapterData.records.map(function visit(it) { var row = {}; row.cells = adapterData.propertyNames.map(name => { var descriptor = adapterData.propertyDescriptors[name]; var type = (descriptor && descriptor.type) || 'text' var value = it[name]; var f = toString[type] || toString.text; var text = f(value); var handler = handlers[type] || handlers.text; var cell = { innerText: text, attr: { 'data-type': type }, child: handler(value, descriptor) }; if (name === adapterData.treeBy) { cell.child.unshift('.as-tree-table-toggle'); } return cell; }); if (it.__children__) { row.subRows = it.__children__.map(visit); } return row; }) } } }; return res; } ShareSerializer.addHandlerBefore({ id: 'TreeTableCellBorder', match: (elt, scope, stack) => { if (!elt.hasClass) return false; if (!elt.hasClass('as-tree-table-head-cell') && !elt.hasClass('as-tree-table-cell')) return false; var style = getComputedStyle(elt); var borderColor = style.getPropertyValue('border-color'); var borderStyle = style.getPropertyValue('border-style'); var borderWidth = style.getPropertyValue('border-width'); var borderRadius = style.getPropertyValue('border-radius'); if (borderStyle === 'none' || borderWidth === '0px') return false; scope.declare('borderStyle', { width: parseFloat(borderWidth.replace('px', '')), radius: Object(attribute["b" /* parseMeasureValue */])(borderRadius), color: borderColor, }); return true; }, exec: (printer, elt, scope, stack, accept) => { var borderStyle = scope.get('borderStyle'); var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); var rect = bound.clone(); var strokeWidth = borderStyle.width; rect.x -= printer.O.x; rect.y -= printer.O.y; var radius = borderStyle.radius; var rounded; if (radius) { switch (radius.unit) { case '%': rounded = [radius.value * rect.width / 100, radius.value * rect.height / 100]; break; case 'px': rounded = radius.value; break; } } printer.rect(rect, { stroke: borderStyle.color, rounded: rounded, strokeWidth: strokeWidth }); return true; } }, 'Border'); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/finder.css var finder = __webpack_require__(307); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/mobileapp.css var mobileapp = __webpack_require__(31); // CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/TaskManager.js /*** * * @param {TaskManager} manager * @param {function(finishTask: function, bundle: any): (void|Promise)=} func * @param {any=} bundle * @constructor */ function Task(manager, func, bundle) { this.manager = manager; this.id = randomIdent(12); this.func = func; this.bundle = bundle; this.state = 0; } Task.prototype.begin = function () { if (this.state !== 0) return; this.state = 1; var sync; if (this.func) { try { sync = this.func(this.end.bind(this), this.bundle); } catch (error) { console.error(error); } } if (sync && sync.then) sync.catch(error => console.error(error)).then(this.end.bind(this)); }; Task.prototype.end = function () { if (this.state !== 1) return; this.state = 2; this.manager.onFinishTask(this); }; function TaskManager(opt) { EventEmitter["b" /* default */].call(this); opt = opt || {}; this.limit = ((typeof opt.limit === "number") && opt.limit >= 1) ? opt.limit : Infinity; this.pendingTasks = []; this.runningTasks = []; } OOP["a" /* default */].mixClass(TaskManager, EventEmitter["b" /* default */]); /*** * * @param {function(finishTask: function, bundle: any): (void|Promise)} func * @param {any} bundle */ TaskManager.prototype.requestTask = function (func, bundle) { var task = new Task(this, func, bundle); if (this.runningTasks.length < this.limit) { this.runningTasks.push(task); this.emit('task_begin', { type: 'task_begin', task }, this); task.begin(); } else { this.pendingTasks.push(task); } } TaskManager.prototype.onFinishTask = function (task) { var idx = this.runningTasks.indexOf(task); if (idx < 0) return; this.runningTasks.splice(idx, 1); this.emit('task_end', { type: 'task_end', task }, this); while (this.pendingTasks.length > 0 && this.runningTasks.length < this.limit) { task = this.pendingTasks.shift(); this.runningTasks.push(task); this.emit('task_begin', { type: 'task_begin', task }, this); task.begin(); } } TaskManager.prototype.newTask = function () { var task = new Task(this, null, null); this.runningTasks.push(task); this.emit('task_begin', { type: 'task_begin', task }, this); task.begin(); return task; }; /* harmony default export */ var AppPattern_TaskManager = (TaskManager); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/finder/FileThumbnail.js var thumbnailCache = {}; var dbSync; var getDb = () => { dbSync = dbSync || new Promise((resolve) => { var request = window.indexedDB.open('FileThumbnailDB', 1); request.onupgradeneeded = (event) => { var db = event.target.result db.createObjectStore("files", {}); }; request.onsuccess = (event) => { var db = event.target.result; var request1; if (localStorage.getItem('FileThumbnail_clear_cache') === '1') { localStorage.removeItem('FileThumbnail_clear_cache'); request1 = db.transaction('files', 'readwrite').objectStore('files').clear(); request1.onsuccess = () => { resolve(db); } request1.onerror = () => { resolve(null); } } else resolve(db); } request.onerror = () => { resolve(null); } }); return dbSync; } var dbGetItem = (key) => { return getDb().then(db => { if (!db) return null; var request = db.transaction('files').objectStore('files').get(key); return new Promise(resolve => { request.onsuccess = (event) => { var data = event.target.result; resolve(data); }; request.onerror = () => { resolve(null); } }) }); }; var dbSetItem = (key, value) => { return getDb().then(db => { if (!db) return null; var objectStore = db.transaction('files', 'readwrite').objectStore('files'); var request = objectStore.put(value, key); return new Promise(resolve => { request.onsuccess = (event) => { var data = event.target.result; resolve(data); }; request.onerror = () => { resolve(null); } }); }); }; document.addEventListener('keydown', (event) => { if (event.ctrlKey && event.key === 'F5') { localStorage.setItem('FileThumbnail_clear_cache', '1'); } }); var url2small = url => { return new Promise(resolve => { var image = new Image(); image.crossOrigin = 'anonymous'; image.crossorigin = 'anonymous'; image.src = url; image.onload = function () { var now = new Date(); if (image.naturalWidth <= 200 && image.naturalHeight < 200) { resolve(url); return; } var scale = Math.min(200 / image.naturalWidth, 200 / image.naturalHeight); var width = Math.round(image.naturalWidth * scale); var height = Math.round(image.naturalHeight * scale); var canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; var ctx = canvas.getContext('2d'); for (var i = 0; i < 20; ++i) for (var j = 0; j < 20; ++j) { ctx.fillStyle = (i ^ j) & 1 ? '#BBBBBB' : '#FFFFFF'; ctx.fillRect(i * 10, j * 10, 10, 10); } ctx.drawImage(image, 0, 0, width, height); resolve(canvas.toDataURL('image/jpeg', 0.5)); }; }); }; var getThumbnailUrl = url => { if (!thumbnailCache[url]) { thumbnailCache[url] = dbGetItem(url).then(result => { if (!result) { result = url2small(url).then(canvasResult => { if (canvasResult) dbSetItem(url, canvasResult); return canvasResult; }); } return result; }); } return thumbnailCache[url]; }; function FileThumbnail() { this._value = null; this.$fileName = Object(ACore["a" /* $ */])('.as-file-thumbnail-file-name', this); this.$bg = Object(ACore["a" /* $ */])('.as-file-thumbnail-background', this); /*** * @type {string} * @name fileName * @memberOf FileThumbnail# */ /*** * @type {string|null} * @name fileType * @memberOf FileThumbnail# */ /*** * @type {string|null} * @name thumbnail * @memberOf FileThumbnail# */ /*** * @type {boolean} * @name isDirectory * @memberOf FileThumbnail# */ } FileThumbnail.tag = 'FileThumbnail'.toLowerCase(); FileThumbnail.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-file-thumbnail', child: [ { class: 'as-file-thumbnail-background' }, { class: 'as-file-thumbnail-file-name', child: [] }, { class: 'as-file-thumbnail-check', child: 'span.mdi.mdi-check-bold' } ] }); }; FileThumbnail.prototype._updateFileName = function () { var fileName = this.fileName; if (!fileName) { return; } var parts; var matched; matched = fileName.match(/([^_+\-.]+)|([_+\-.]+)/g); parts = matched || []; if (parts.length > 2 && parts[parts.length - 2] === '.') { parts[parts.length - 2] += parts[parts.length - 1]; parts.pop(); } parts = parts.map(txt => { return Object(ACore["c" /* _ */])({ tag: 'span', child: { text: txt } }); }); this.$fileName.clearChild().addChild(parts); }; FileThumbnail.prototype._updateThumbnail = function () { var previewUrl; var thumbnail = this.thumbnail; var fileType = this.isDirectory ? 'folder' : this.fileType; if (thumbnail) { if (typeof thumbnail === "string") { this._previewUrl = thumbnail; getThumbnailUrl(thumbnail).then(smallerUrl => { if (thumbnail !== this._previewUrl) return; this.$bg.addStyle('backgroundImage', 'url("' + smallerUrl + '")'); }) } else if (thumbnail instanceof Blob || thumbnail instanceof File) { thumbnail.url = thumbnail.url || URL.createObjectURL(thumbnail); this._previewUrl = thumbnail.url; } } if (catalog.indexOf(fileType) >= 0) { previewUrl = messageinput_MessageInput.iconAssetRoot + '/' + fileType + '.svg'; } else { previewUrl = messageinput_MessageInput.iconAssetRoot + '/' + 'blank' + '.svg'; } if (previewUrl) { this.$bg.addStyle('backgroundImage', 'url("' + encodeURI(previewUrl) + '")'); } else { this.$bg.removeStyle('backgroundImage'); } } FileThumbnail.property = {}; FileThumbnail.property.value = { set: function (value) { value = value || null; this._value = value; this._valueInfo = fileInfoOf(value); this._updateFileName(); this._updateThumbnail(); }, get: function () { return this._value; } }; FileThumbnail.property.fileName = { set: function (value) { this._fileName = value; this._updateFileName(); }, get: function () { return this._fileName || (this._valueInfo && this._valueInfo.name) || null; } }; FileThumbnail.property.fileType = { set: function (value) { this._fileType = value; this._updateThumbnail(); }, /*** * @this FileInputBox * @return {*} */ get: function () { if (this.isDirectory) return null; return this._fileType || (this._valueInfo && this._valueInfo.type) || null; } }; FileThumbnail.property.checked = { set: function (value) { if (value) { this.addClass('as-checked'); } else { this.removeClass('as-checked'); } }, get: function () { return this.hasClass('as-checked'); } }; FileThumbnail.property.thumbnail = { set: function (value) { this._thumbnail = value || null; this._updateThumbnail(); }, get: function () { return this._thumbnail; } }; FileThumbnail.property.isDirectory = { set: function (value) { if (value) { this.addClass('as-is-directory'); } else { this.removeClass('as-is-directory'); } }, get: function () { return this.hasClass('as-is-directory'); } } ACore["d" /* default */].install(FileThumbnail); /* harmony default export */ var finder_FileThumbnail = (FileThumbnail); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/finder/Finder.js var Finder_isMobile = BrowserDetector["a" /* default */].isMobile; /*** * @extends AElement * @constructor */ function Finder() { if (Finder_isMobile) this.addClass('as-mobile'); // if (BrowserDetector.isMobile) alert("Chưa hỗ trợ điện thoại!"); this.$attachhook = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.$attachhook.requestUpdateSize = () => { this.layoutCtn.update(); this.navCtrl.notifyVisibleContentItems(); }; this.$attachhook.once('attached', () => { ResizeSystem["a" /* default */].add(this.$attachhook); this.layoutCtn.update(); this.navCtrl.onStart(); this.navCtrl.notifyVisibleContentItems(); ContextMenu.auto(); }); this.domSignal = new DomSignal["a" /* default */](Object(ACore["c" /* _ */])('attachhook').addTo(this)); this.$header = Object(ACore["a" /* $ */])('.as-finder-header', this); this.$nomalActionCtn = Object(ACore["a" /* $ */])('.as-finder-normal-action-button-ctn', this); this.$tinyActionCtn = Object(ACore["a" /* $ */])('.as-finder-tiny-action-button-ctn', this); this.$contentHeader = Object(ACore["a" /* $ */])('.as-finder-content-header', this); this.$navCtn = Object(ACore["a" /* $ */])('.as-finder-nav-ctn', this); this.$nav = Object(ACore["a" /* $ */])(ExpGroup.tag, this.$navCtn); this.$searchCtn = Object(ACore["a" /* $ */])('.as-finder-search-ctn', this); this.$contentCtn = Object(ACore["a" /* $ */])('.as-finder-content-ctn', this); this.$content = Object(ACore["a" /* $ */])('.as-finder-content', this); this.$body = Object(ACore["a" /* $ */])('.as-finder-body', this); this.$commandButtons = Object(ACore["b" /* $$ */])('.as-finder-nav-header button', this) .concat(Object(ACore["b" /* $$ */])('.as-finder-content-header button', this)) .concat(Object(ACore["b" /* $$ */])('.as-finder-search-footer button', this)) .concat(Object(ACore["b" /* $$ */])('.as-finder-search-header button', this)) .reduce((ac, cr) => { var name = cr.attr('name'); ac[name] = cr; if (cr.items) {//ribbon button cr.on('select', (event) => { this.execCommand(name, event.item.value, event.item); }); } else { cr.on('click', () => { this.execCommand(name); }); } return ac; }, {}); this.$searchTypeSelect = Object(ACore["a" /* $ */])('.as-finder-search-type-select', this); this.$searchText = Object(ACore["a" /* $ */])('.as-finder-search-text', this); this.fileSystem = new AbsolFileSystem(); this.layoutCtn = new Finder_LayoutController(this); this.navCtrl = new NavigatorController(this); this.selectCtrl = Finder_isMobile ? new MobileSelectController(this) : new SelectController(this); this.uploadCtrl = new UploadController(this); this.commandCtrl = new CommandController(this); this.folderDialog = new FolderDialog(this); this.searchCtrl = new SearchController(this); /*** * @type {string} * @name displayPath * @memberOf Finder# */ /*** * @type {string} * @name path * @memberOf Finder# */ /*** * @type {string} * @name rootPath * @memberOf Finder# */ /*** * @type {string} * @name accept * @memberOf Finder# */ } Finder.tag = 'Finder'.toLowerCase(); Finder.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-finder', extendEvent: ['selectedchange', 'dblclickfile'], attr: { 'data-selected-file-count': '0', 'data-selected-folder-count': '0' }, child: [ { class: 'as-finder-header', child: [ { class: 'as-finder-normal-action-button-ctn', /* child: Finder.prototype.actions.map(act => ({ tag: FlexiconButton.tag, attr: { name: act.name }, props: { text: act.text, // icon: act.icon } }))*/ }, { class: 'as-finder-tiny-action-button-ctn', /*child: Finder.prototype.actions.map(act => ({ tag: 'button', attr: { name: act.name, title: act.text }, child: act.icon }))*/ } ] }, { class: ['as-finder-nav-ctn'], child: [ { class: 'as-finder-nav-header', child: [ { class: 'as-finder-nav-header-left', child: [{ tag: 'button', class: 'as-transparent-button', attr: { title: "Close Navigator", name: 'nav_toggle' }, child: 'span.mdi.mdi-menu-open' }] }, { class: 'as-finder-nav-header-right', child: [ { tag: 'button', class: 'as-transparent-button', attr: { title: "Search", name: 'switch_to_search' }, child: 'span.mdi.mdi-magnify', }, { tag: 'button', class: 'as-transparent-button', attr: { title: "Expand All", name: 'nav_expand_all' }, child: 'span.mdi.mdi-arrow-expand-vertical', }, { tag: 'button', class: 'as-transparent-button', attr: { title: "Collapse All", name: 'nav_collapse_all' }, child: 'span.mdi.mdi-arrow-collapse-vertical' }, { tag: 'button', class: 'as-transparent-button', attr: { title: "Reload", name: 'reload' }, child: 'span.mdi.mdi-reload' } ] } ] }, { tag: ExpGroup.tag, class: 'as-bscroller' } ] }, { class: 'as-finder-search-ctn', child: [ { class: 'as-finder-search-header', child: [{ tag: 'button', class: 'as-transparent-button', attr: { title: "Close Navigator", name: 'nav_toggle' }, child: 'span.mdi.mdi-menu-open' }] }, { class: 'as-finder-search-body', child: [ { tag: Searcher.tag, class: 'as-finder-search-text', }, { class: 'as-finder-search-field', child: [ { child: { text: 'Kiểu' } }, { child: { tag: 'selectmenu', class: 'as-finder-search-type-select', props: { items: [ { text: 'Tất cả', value: 'all', icon: 'span.mdi.mdi-asterisk' }, { text: 'Hình ảnh', value: 'image', icon: 'span.mdi.mdi-image-outline' }, { text: 'Tài liệu', value: 'document', icon: 'span.mdi.mdi-file-document' } ] } } } ] }, { class: 'as-finder-search-footer', child: [ { tag: js_FlexiconButton.tag, attr: { name: 'start_search' }, props: { text: 'OK' } }, { tag: js_FlexiconButton.tag, attr: { name: 'cancel_search' }, props: { text: 'Hủy' } } ] } ] } ] }, { tag: js_DropZone.tag, attr: { 'data-view-as': 'list' }, class: ['as-finder-body'], child: [ { class: 'as-finder-content-header', child: [ { class: 'as-finder-content-header-left', child: [ { tag: 'button', attr: { title: 'Open Navigator', name: 'nav_toggle' }, class: 'as-transparent-button', child: ['span.mdi.mdi-menu'] }, { tag: js_RibbonButton, attr: { title: 'View As', name: 'content_view_as' }, class: 'as-transparent-button', props: { text: 'List', icon: 'span.mdi.mdi-format-list-bulleted-square', items: [ { icon: 'span.mdi.mdi-format-list-bulleted-square', text: 'List', value: 'list', }, { text: 'Medium Icons', icon: 'span.mdi.mdi-grid', value: 'content' }, { text: 'Lage Icons', icon: 'span.mdi.mdi-image-outline', value: 'lage_icons' } ] }, // child: ['span.mdi.mdi-format-list-bulleted-square'] } ] }, { class: 'as-finder-content-header-right', } ] }, { tag: js_Hanger.tag, class: 'as-finder-content-ctn', props: { hangOn: 5 }, child: { class: ['as-finder-content',] } }, { class: 'as-finder-upload-overlay', child: [ { class: 'as-finder-upload-overlay-icon-ctn', child: 'span.mdi.mdi-cloud-upload-outline' }, { child: { text: 'Thả file vào đây để tải lên' } } ] } ] } ] }); }; Finder.property = {}; Finder.property.fileSystem = { set: function (fs) { this._fileSystem = fs; }, get: function () { return this._fileSystem; } }; Finder.property.path = { set: function (path) { this.navCtrl.path = path; }, get: function () { return this.navCtrl.path; } }; Finder.property.displayPath = { // set: function (path) { // this.navCtrl.path = path; // }, get: function () { return this.navCtrl.displayPath; } }; Finder.property.rootPath = { set: function (path) { this.navCtrl.rootPath = path; }, get: function () { return this.navCtrl.rootPath; } }; Finder.property.selectedFiles = { get: function () { return this.selectCtrl.$selectedItems.filter(elt => elt.stat && !elt.stat.isDirectory).map(elt => elt.stat); } } Finder.prototype.execCommand = function (name) { return this.commandCtrl.execCommand.apply(this.commandCtrl, arguments); }; Finder.prototype.addCommand = function (name, descriptor) { this.commandCtrl.addCommand(name, descriptor); }; Finder.prototype.addButton = function (name, bf) { this.commandCtrl.addButton(name, bf); }; /**** * * @param {string} name * @param {string=} bf */ Finder.prototype.addFolderMenuItem = function (name, bf) { this.commandCtrl.addFolderMenuItem(name, bf); }; Finder.prototype.findZIndex = function () { var c = this; var res = 0; var zIndex; while (c) { zIndex = parseInt(getComputedStyle(c).getPropertyValue('z-index')); if (!isNaN(zIndex)) res = Math.max(zIndex, res); c = c.parentElement; } return res; }; ACore["d" /* default */].install(Finder); /* harmony default export */ var finder_Finder = (Finder); var FinderCommands = {}; Finder.prototype.commands = FinderCommands; FinderCommands.upload = { text: 'Tải lên', icon: 'span.mdi.mdi-upload-outline', match: function (fileElt) { return !fileElt && this.searchCtrl.state !== 'RUNNING' && this.dirStat && this.dirStat.writable; }, /*** * @this Finder */ exec: function () { openFileDialog({ multiple: true }).then(files => { if (files && files.length > 0) { this.uploadCtrl.upload(files); } }) } }; FinderCommands.upload_to_folder = { text: 'Tải lên', icon: 'span.mdi.mdi-upload-outline', match: function (treElt) { return treElt && treElt.stat && treElt.stat.writable; }, /*** * @this Finder */ exec: function () { //todo: selected folder openFileDialog({ multiple: true }).then(files => { if (files && files.length > 0) { this.uploadCtrl.upload(files); } }) } }; FinderCommands.delete = { icon: 'span.mdi.mdi-delete-outline', text: 'Xóa', /*** * @this Finder */ match: function (fileElt) { return fileElt && this.selectCtrl.$selectedItems.length > 0 && this.selectCtrl.$selectedItems.every(elt => elt.stat && !elt.stat.isDirectory && elt.stat.writable); }, /*** * @this Finder */ exec: function () { var paths = this.selectCtrl.$selectedItems.map(elt => elt.stat.path); var names = this.selectCtrl.$selectedItems.map(elt => elt.fileName); if (names.length === 0) return; var contentElt = Object(ACore["c" /* _ */])({ style: { maxHeight: '50vh', overflow: 'auto' }, child: { style: { display: 'table' }, child: names.map(name => ({ style: { display: 'table-row' }, child: [ { style: { display: 'table-cell', padding: '5px 20px 5px 10px' }, child: { style: { 'min-width': '30em', }, child: { text: name } } }, { style: { display: 'table-cell', padding: '5px 10px' }, child: { class: 'as-finder-task-check', style: { 'min-width': '3em', textAlign: 'right', }, child: 'span' } } ] })) } }); var modal = Object(ACore["c" /* _ */])({ tag: js_Modal.tag, style: { zIndex: this.findZIndex() + 9000 }, child: { tag: js_MessageDialog.tag, props: { dialogTitle: 'Xóa file', dialogActions: [ { name: "ok", text: "OK" }, { name: 'cancel', text: 'Hủy' } ] }, child: [{ child: { tag: 'span', child: { text: "Xác nhận xóa những file dưới đây: " } } }, contentElt], on: { action: (event, sender) => { var promises; var errors = []; if (event.action.name === 'ok') { sender.$actionBtns[0].disabled = true; sender.$actionBtns[0].text = "Đang tiến hành xóa.."; sender.$actionBtns[1].disabled = true; promises = paths.map((path, i) => { return this.fileSystem.unlink(path).then(() => { Object(ACore["a" /* $ */])('.as-finder-task-check', contentElt.firstChild.childNodes[i]).addChild(Object(ACore["c" /* _ */])('span.mdi.mdi-check')) }).catch(err => { errors.push(err); Object(ACore["a" /* $ */])('.as-finder-task-check', contentElt.firstChild.childNodes[i]) .addChild(Object(ACore["c" /* _ */])('span.mdi.mdi-alert-decagram-outline')) .addChild(Object(ACore["c" /* _ */])({ tag: 'span', class: '.as-finder-task-error-message', child: { text: err.message } })) }); }); Promise.all(promises).then(() => { var commands = {}; if (errors.length > 0) { errors.forEach(err => { if (err.command) { commands[err.command] = true; } }); if (commands.reload) this.execCommand('reload'); sender.$actionBtns[1].disabled = false; sender.$actionBtns[0].text = "Hoàn thành"; } else { this.navCtrl.reload(this.path, true).then(() => modal.remove()); } }); } else { modal.remove(); } } } } }).addTo(document.body); } }; FinderCommands.view = { icon: 'span.mdi.mdi-eye-outline', text: 'Xem', match: function (fileElt) { return !!fileElt; }, /*** * @this Finder */ exec: function () { var elt = this.selectCtrl.$selectedItems[0]; if (!elt) return; if (elt.stat.isDirectory) { this.navCtrl.viewDir(elt.stat.path); return; } var url = elt.stat.url; if (!url) return; var type = elt.fileType; if (type === 'xlsx' || type === 'docx' || type === 'xls' || type === 'doc' || type === 'ppt' || type === 'pptx') { url = 'https://view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(url); } else { url = encodeURI(url); } var mineType = Converter_ext2MineType[type] || 'none'; var content; if (mineType.startsWith('video')) { content = Object(ACore["c" /* _ */])({ tag: 'video', style: { maxWidth: 'calc(90vw - 20px)', maxHeight: 'calc(90vh - 80px)', width: '900px', height: 'auto' }, attr: { autoplay: 'true', controls: 'true' }, props: { src: url } }); } else if (mineType.startsWith('audio')) { content = Object(ACore["c" /* _ */])({ tag: 'audio', style: { margin: '5px' }, attr: { autoplay: 'true', controls: 'true' }, props: { src: url } }); } else if (mineType.startsWith('image')) { content = Object(ACore["c" /* _ */])({ tag: 'img', style: { maxWidth: 'calc(90vw - 20px)', maxHeight: 'calc(90vh - 80px)', width: 'auto', height: 'auto' }, attr: {}, props: { src: url } }); } else { content = Object(ACore["c" /* _ */])({ tag: 'iframe', style: { maxWidth: 'calc(90vw - 20px)', maxHeight: 'calc(90vh - 80px)', width: '900px', height: '600px' }, props: { src: url, onload: function () { // console.log(this.contentWindow.document.body.offsetHeight, this.contentWindow.document.body.offsetWidth) } } }); } var modal = Object(ACore["c" /* _ */])({ tag: js_Modal.tag, style: { zIndex: this.findZIndex() + 9000 }, child: { tag: js_WindowBox.tag, child: content, props: { windowTitle: elt.stat.displayName || elt.stat.name, windowActions: [ { name: 'close', icon: 'span.mdi.mdi-close' } ] }, on: { action: () => { modal.remove(); } } } }).addTo(document.body); } }; FinderCommands.download = { icon: 'span.mdi.mdi-download-outline', text: 'Tải về', match: function (elt) { return elt && this.selectCtrl.$selectedItems.length > 0 && this.selectCtrl.$selectedItems.every(elt => elt.stat && !elt.stat.isDirectory); }, /*** * @this Finder */ exec: function () { var taskMng = new AppPattern_TaskManager({ limit: 4 }); this.selectCtrl.$selectedItems.forEach(elt => { if (elt.isDirectory) return; var url = elt.stat.url; if (!url) return; taskMng.requestTask(function (onFinish, bundle) { saveAs(bundle.url, bundle.name) setTimeout(onFinish, 100); }, { url: url, name: elt.fileName }); }); } }; FinderCommands.rename = { icon: 'span.mdi.mdi-rename', text: 'Đổi tên', /*** * @this Finder */ match: function (elt) { return elt && this.selectCtrl.$selectedItems.length === 1 && elt.stat && !elt.stat.isDirectory && elt.stat.writable;//todo: rename folder }, /*** * @this Finder */ exec: function () { var elt = this.selectCtrl.$selectedItems[0]; if (!elt) return; var path = elt.stat.path; var value = elt.fileName; var input = Object(ACore["c" /* _ */])({ tag: js_TextArea2.tag, style: { outline: 'none', position: 'absolute', zIndex: 100, left: 0, bottom: 0, width: '100%' }, props: { value: elt.fileName }, on: { blur: () => { var newValue = input.value.replace(/<>:\\\/\|\?\*\^/g, '').trim(); input.remove(); if (!value) return; if (value === newValue) return; this.fileSystem.rename(path, newValue).then(newStat => { elt.stat = newStat; elt.value = newStat.url; elt.fileName = newStat.displayName || newStat.name; }); } } }); elt.addChild(input); input.on('keydown', function (event) { if (event.key.match(/<>:\\\/\|\?\*\^/)) { event.preventDefault(); setTimeout(() => input.updateSize(), 30) } else if (event.key === 'Enter') { input.blur(); } else if (event.key === 'Escape') { input.value = value; input.updateSize(); input.blur(); } }, true); input.updateSize(); input.focus(); var ext = value.match(/\.[a-zA-Z0-9]+$/); if (ext) { ext = ext[0]; } else { ext = ''; } input.setSelectionRange(0, value.length - ext.length); } }; FinderCommands.copy = { icon: 'span.mdi.mdi-content-copy', text: 'Sao chép', exec: function () { } }; FinderCommands.move = { text: 'Di chuyển', icon: 'span.mdi.mdi-file-move-outline', match: function (fileElt) { if (arguments.length === 0) { return this.selectCtrl.$selectedItems.every(elt => elt.stat.writable); } return fileElt && fileElt.stat && fileElt.stat.writable; }, /*** * @this Finder */ exec: function () { var itemElements = this.selectCtrl.$selectedItems.slice(); var paths = itemElements.map(elt => elt.stat.path); var names = itemElements.map(elt => elt.fileName); if (names.length === 0) return; var currentFolderPath = this.path; this.folderDialog.open(currentFolderPath, false, (newFolderPath, stat) => newFolderPath !== currentFolderPath && stat.writable, 'Di chuyển file').then(newFolderPath => { if (!newFolderPath) return; if (newFolderPath === currentFolderPath) return; var contentElt = Object(ACore["c" /* _ */])({ style: { maxHeight: '50vh', overflow: 'auto' }, child: { style: { display: 'table' }, child: names.map(name => ({ style: { display: 'table-row' }, child: [ { style: { display: 'table-cell', padding: '5px 20px 5px 10px' }, child: { style: { 'min-width': '30em', }, child: { text: name } } }, { style: { display: 'table-cell', padding: '5px 10px' }, child: { class: 'as-finder-task-check', style: { 'min-width': '3em', textAlign: 'right', }, child: 'span' } } ] })) } }); var modal = Object(ACore["c" /* _ */])({ tag: js_Modal.tag, style: { zIndex: this.findZIndex() + 9000 }, child: { tag: js_MessageDialog.tag, props: { dialogTitle: 'Di chuyển file', dialogActions: [{ name: 'close', text: 'Đóng' }] }, child: [{ child: { tag: 'span', child: { text: "Danh sách đang di chuyển: " } } }, contentElt], on: { action: (event, sender) => { modal.remove(); } } } }).addTo(document.body); var errors = []; var promises = paths.map((path, i) => { var newPath = newFolderPath + '/' + path.split('/').pop(); return this.fileSystem.move(path, newPath).then(() => { Object(ACore["a" /* $ */])('.as-finder-task-check', contentElt.firstChild.childNodes[i]).addChild(Object(ACore["c" /* _ */])('span.mdi.mdi-check')) }).catch(err => { errors.push(err); Object(ACore["a" /* $ */])('.as-finder-task-check', contentElt.firstChild.childNodes[i]) .addChild(Object(ACore["c" /* _ */])('span.mdi.mdi-alert-decagram-outline')).addChild(Object(ACore["c" /* _ */])({ tag: 'span', class: '.as-finder-task-error-message', child: { text: err.message } })); }); }); Promise.all(promises).then(() => { var commands = {}; if (errors.length > 0) { errors.forEach(err => { if (err.command) { commands[err.command] = true; } }); if (commands.reload) this.execCommand('reload'); } else { this.navCtrl.reload(this.path, true).then(() => modal.remove()); } }); }); } }; FinderCommands.move_dir = { text: 'Di chuyển', icon: 'span.mdi.mdi-folder-arrow-right-outline', match: function (expElt) { return expElt && expElt.stat && expElt.stat.writable && !expElt.stat.isVirtual; }, /*** * @this Finder */ exec: function (expElt) { var path = expElt.stat.path; var currentFolderPath = path.split('/'); var name = currentFolderPath.pop(); currentFolderPath = currentFolderPath.join('/'); this.folderDialog.open(currentFolderPath, true, newPath => !newPath.startsWith(path), 'Di chuyển thư mục').then(newFolderPath => { if (!newFolderPath) return; return this.fileSystem.move(path, newFolderPath + '/' + name).then(() => { this.path = newFolderPath + '/' + name; this.navCtrl.reload(this.rootPath).then(() => { this.navCtrl.viewDir(this.path) }); }); }) } }; FinderCommands.rmdir = { text: 'Xóa', icon: 'span.mdi.mdi-delete-outline', /*** * @this Finder * @param elt */ match: function (elt) { if (elt.stat && elt.stat.isVirtual) return false; if (elt) return elt.stat && elt.stat.writable; return false; }, exec: function (elt) { } }; FinderCommands.select_all = { text: 'Chọn tất cả', icon: 'span.mdi.mdi-select-all', match: function (fileElt) { return !fileElt; }, /*** * @this Finder */ exec: function () { this.selectCtrl.selectAll(); } }; FinderCommands.nav_expand_all = { /*** * @this Finder */ exec: function () { this.navCtrl.expandAll(); } }; FinderCommands.nav_collapse_all = { /*** * @this Finder */ exec: function () { this.navCtrl.collapseAll(); } }; FinderCommands.reload = { /*** * @this Finder */ exec: function () { this.fileSystem.clearCache(); this.navCtrl.reload().then(() => { this.navCtrl.viewDir(this.path); }); } }; FinderCommands.content_view_as = { /*** * @this Finder */ exec: function (value, item) { this.$commandButtons['content_view_as'].text = item.text; this.$commandButtons['content_view_as'].icon = item.icon; this.$body.attr('data-view-as', value); } }; FinderCommands.switch_to_search = { /*** * @this Finder */ exec: function () { this.searchCtrl.start(); } }; FinderCommands.cancel_search = { /*** * @this Finder */ exec: function () { this.searchCtrl.stop(); this.navCtrl.viewDir(this.path); } }; FinderCommands.start_search = { /*** * @this Finder */ exec: function () { this.searchCtrl.search(); } }; FinderCommands.nav_toggle = { icon: 'span.mdi.mdi-menu', exec: function () { if (this.hasClass('as-nav-open')) { this.removeClass('as-nav-open'); } else { this.addClass('as-nav-open'); } } }; /*** * * @param {Finder} elt * @constructor */ function Finder_LayoutController(elt) { this.elt = elt; this.actionButtonWidth = 0; this.elt.domSignal.on('requestUpdateActionButtonSize', this.updateActionButtonSize.bind(this)); this.elt.on('click', this.ev_click.bind(this)) } Finder_LayoutController.prototype.requestUpdateActionButtonSize = function () { this.elt.domSignal.emit('requestUpdateActionButtonSize'); }; Finder_LayoutController.prototype.updateActionButtonSize = function () { var font = this.elt.$nomalActionCtn.getComputedStyleValue('font'); var fontSize = this.elt.$nomalActionCtn.getFontSize(); this.actionButtonWidth = Array.prototype.reduce.call(this.elt.$nomalActionCtn.childNodes, (ac, cr) => { return ac + Math.max(110, 0.715 * fontSize * 2 + measureText(cr.text, font).width) + 10; }, 60); this.update(); }; Finder_LayoutController.prototype.update = function () { var bound = this.elt.getBoundingClientRect(); if (bound.width < 500) { if (!this.elt.hasClass('as-mini-layout')) this.elt.addClass('as-mini-layout'); } else { if (this.elt.hasClass('as-mini-layout')) { this.elt.removeClass('as-mini-layout'); this.elt.removeClass('as-nav-open'); } } if (this.elt.hasClass('as-action-button-minimized')) { if (this.actionButtonWidth <= bound.width) { this.elt.removeClass('as-action-button-minimized'); } } else { if (this.actionButtonWidth > bound.width) { this.elt.addClass('as-action-button-minimized'); } } var bodyBound = this.elt.$body.getBoundingClientRect(); var col = Math.floor(bodyBound.width / 300) || 1; this.elt.$body.addStyle('--col', col + ''); }; Finder_LayoutController.prototype.ev_click = function (event) { if (event.target === this.elt) { this.elt.removeClass('as-nav-open'); } }; /*** * * @param {Finder} elt * @constructor */ function CommandController(elt) { Object.keys(this.constructor.prototype).forEach(key => { if (key.startsWith('ev_')) { this[key] = this[key].bind(this); } }); this.elt = elt; this.$normalActionCtn = this.elt.$nomalActionCtn; this.$tinyActionCtn = this.elt.$tinyActionCtn; this.commands = Object.assign({}, this.elt.commands); this.buttonNames = ['upload', 'view', 'download', 'move', 'rename', 'delete']; this.folderMenuItemNames = ['upload_to_folder', 'move_dir']; this.contentMenuItemNames = ['view', 'download', 'upload', 'select_all', 'move', 'delete', 'rename']; this.$navCtn = this.elt.$navCtn; this.$navCtn.defineEvent('contextmenu').on('contextmenu', this.ev_navContextMenu); this.$contentCtn = this.elt.$contentCtn; this.$contentCtn.defineEvent('contextmenu').on('contextmenu', this.ev_contentContextMenu); this.updateButtons(); } CommandController.prototype.updateButtons = function () { this.$normalActionCtn.clearChild(); var buttons = this.buttonNames.map(name => { var desc = this.commands[name] || {}; return Object(ACore["c" /* _ */])({ tag: js_FlexiconButton.tag, attr: { name: name }, props: { text: desc.text || name }, on: { click: () => { this.execCommand(name); } } }); }); this.$normalActionCtn.addChild(buttons); buttons = this.buttonNames.map(name => { var desc = this.commands[name] || {}; return Object(ACore["c" /* _ */])({ tag: 'button', class: 'as-transparent-button', attr: { name: name }, child: desc.icon, on: { click: () => { this.execCommand(name); } } }); }); this.$tinyActionCtn.addChild(buttons); this.elt.layoutCtn.requestUpdateActionButtonSize(); }; CommandController.prototype.execCommand = function (name) { var args = Array.prototype.slice.call(arguments, 1); var desc = this.commands[name]; if (desc && typeof desc.exec === 'function') { return desc.exec.apply(this.elt, args); } return null; }; CommandController.prototype.addCommand = function (name, desc) { this.commands[name] = Object.assign({}, this.commands[name], desc); }; /**** * * @param {string} name * @param {string=} bf */ CommandController.prototype.addButton = function (name, bf) { var idx = this.buttonNames.indexOf(bf); var bfElt, smallBfElt; if (idx >= 0) { this.buttonNames.splice(idx, 0, name); bfElt = Object(ACore["a" /* $ */])(`button[name="${name}"]`, this.$normalActionCtn); smallBfElt = Object(ACore["a" /* $ */])(`button[name="${name}"]`, this.$tinyActionCtn); } else { this.buttonNames.push(name); } var desc = this.commands[name] || {}; this.$normalActionCtn.addChildBefore(Object(ACore["c" /* _ */])({ tag: js_FlexiconButton.tag, attr: { name: name }, props: { text: desc.text || name }, on: { click: () => { this.execCommand(name); } } }), bfElt); this.$tinyActionCtn.addChild(Object(ACore["c" /* _ */])({ tag: 'button', class: 'as-transparent-button', attr: { name: name }, child: desc.icon, on: { click: () => { this.execCommand(name); } } }), smallBfElt); this.elt.layoutCtn.requestUpdateActionButtonSize(); }; /**** * * @param {string} name * @param {string=} bf */ CommandController.prototype.addFolderMenuItem = function (name, bf) { idx = this.folderMenuItemNames.indexOf(name); if (idx >= 0) return; var idx = this.folderMenuItemNames.indexOf(bf); if (idx >= 0) this.folderMenuItemNames.splice(idx, 0, name); else this.folderMenuItemNames.push(name); }; /**** * * @param {string} name * @param {string=} bf */ CommandController.prototype.addContentMenuItem = function (name, bf) { idx = this.folderMenuItemNames.indexOf(name); if (idx >= 0) return;//todo var idx = this.folderMenuItemNames.indexOf(bf); if (idx >= 0) this.folderMenuItemNames.splice(idx, 0, name); else this.folderMenuItemNames.push(name); }; CommandController.prototype.ev_navContextMenu = function (event) { var expTree; var c = event.target; while (c && !expTree) { if (c.stat) expTree = c; c = c.parentElement; } if (expTree) this.elt.navCtrl.viewDir(expTree.stat.path, [this.elt.rootPath].concat(expTree.getPath()).join('/')); var items = this.folderMenuItemNames.map(name => { var desc = this.commands[name]; if (!desc) return null; if (typeof desc.match === "function") { if (!desc.match.call(this.elt, expTree)) return null; } return { text: desc.text, icon: desc.icon, cmd: name } }).filter(x => !!x); if (items.length > 0) { event.showContextMenu({ items: items }, (event) => { var cmd = event.menuItem.cmd; this.execCommand(cmd, expTree); }); } }; CommandController.prototype.ev_contentContextMenu = function (event) { var fileElt; var c = event.target; while (c && !fileElt) { if (c.stat) fileElt = c; c = c.parentElement; } var selectedElements = this.elt.selectCtrl.$selectedItems; if (fileElt && selectedElements.indexOf(fileElt) < 0) { this.elt.selectCtrl.deselectAll(); this.elt.selectCtrl.select(fileElt); } // if (expTree) this.elt.navCtrl.viewDir(expTree.stat.path, [this.elt.rootPath].concat(expTree.getPath()).join('/')); var items = this.contentMenuItemNames.map(name => { var desc = this.commands[name]; if (!desc) return null; if (typeof desc.match === "function") { if (!desc.match.call(this.elt, fileElt)) return null; } return { text: desc.text, icon: desc.icon, cmd: name } }).filter(x => !!x); if (items.length > 0) { event.showContextMenu({ items: items }, (event) => { var cmd = event.menuItem.cmd; this.execCommand(cmd, fileElt); }); } }; /*** * for desktop * @param {Finder} elt * @constructor */ function SelectController(elt) { this.elt = elt; this.$selectedItems = [];// first element is focus this.$content = this.elt.$content; this.$contentCtn = this.elt.$contentCtn; Object.keys(this.constructor.prototype).forEach(key => { if (key.startsWith('ev_')) { this[key] = this[key].bind(this); } }); this._setupSelectTool(); } /*** * * @protected */ SelectController.prototype._setupSelectTool = function () { this._draged = false; this._dragOffset = new Math_Vec2(0, 0); this.$selectArea = Object(ACore["c" /* _ */])('.as-finder-select-area'); this.$contentCtn.on('draginit', this.ev_dragInit) .on('dragdeinit', this.ev_dragDeinit) .on('dragstart', this.ev_dragStart) .on('drag', this.ev_drag) .on('dragend', this.ev_dragEnd); }; SelectController.prototype.deselectAll = function () { while (this.$selectedItems.length > 0) { this.$selectedItems.pop().checked = false; } this._updateCount(); this.elt.emit('selectedchange'); }; SelectController.prototype.select = function (elt) {//todo: more option this.deselectAll(); this.$selectedItems.push(elt); elt.checked = true; this._updateCount(); this.elt.emit('selectedchange'); }; SelectController.prototype.selectAll = function () {//todo: more option this.deselectAll(); var fileElements = Array.prototype.slice.call(this.$content.childNodes); this.$selectedItems.push.apply(this.$selectedItems, fileElements); fileElements.forEach(elt => { elt.checked = true; }); this._updateCount(); this.elt.emit('selectedchange'); }; SelectController.prototype.ev_dragInit = function (event) { if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') { event.cancel(); return; } // event.preventDefault(); this._draged = false; }; SelectController.prototype.ev_dragDeinit = function (event) { if (!this._draged) this.ev_click(event); }; SelectController.prototype.ev_dragStart = function (event) { this._draged = true; this.elt.addClass('as-dragging'); this.$selectArea.addStyle('z-index', this.elt.findZIndex() + 100 + '').addTo(document.body); var bound = Math_Rectangle.fromClientRect(this.$content.getBoundingClientRect()); this._dragOffset = event.currentPoint.sub(bound.A()); var pos = bound.A().add(this._dragOffset); this.$selectArea.addStyle({ left: pos.x + 'px', top: pos.y + 'px', }); }; SelectController.prototype.ev_drag = function (event) { this._draged = true; var bound = Math_Rectangle.fromClientRect(this.$content.getBoundingClientRect()); var A = bound.A().add(this._dragOffset); var C = event.currentPoint; var sRect = Math_Rectangle.boundingPoints([A, C]); this.$selectArea.addStyle({ left: sRect.x + 'px', top: sRect.y + 'px', width: sRect.width + 'px', height: sRect.height + 'px', }); }; SelectController.prototype.ev_dragEnd = function () { while (this.$selectedItems.length > 0) { this.$selectedItems.pop().checked = false; } var selectBound = Math_Rectangle.fromClientRect(this.$selectArea.getBoundingClientRect()); Array.prototype.forEach.call(this.$content.childNodes, elt => { var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect()); if (selectBound.isCollapse(bound, 0)) { this.$selectedItems.push(elt); elt.checked = true; } }); this._draged = true; this.$selectArea.remove(); this.elt.removeClass('as-dragging'); this._updateCount(); this.elt.layoutCtn.update(); this.elt.emit('selectedchange'); }; SelectController.prototype._updateCount = function () { var folderCount = this.$selectedItems.filter(elt => elt.stat.isDirectory).length; this.elt.attr('data-selected-file-count', this.$selectedItems.length - folderCount + ''); this.elt.attr('data-selected-folder-count', folderCount + ''); } SelectController.prototype.ev_click = function (event) { event = event.originalEvent || event.originEvent || event; var c = event.target; var itemElt; while (c && !itemElt) { if (c.hasClass && c.hasClass('as-file-thumbnail')) { itemElt = c; break; } c = c.parentElement; } var focusIdx; var currentIdx; if (this.$selectedItems.length === 0 && itemElt) { this.$selectedItems.push(itemElt); itemElt.checked = true; } else if (Object(EventEmitter["f" /* isMouseRight */])(event)) { } else if (!event.ctrlKey && !event.shiftKey) { while (this.$selectedItems.length > 0) { this.$selectedItems.pop().checked = false; } if (itemElt) { this.$selectedItems.push(itemElt); itemElt.checked = true; } } else if (event.shiftKey) { if (itemElt) { focusIdx = Array.prototype.indexOf.call(this.$content.childNodes, this.$selectedItems[0]); currentIdx = Array.prototype.indexOf.call(this.$content.childNodes, itemElt); while (this.$selectedItems.length > 1) { this.$selectedItems.pop().checked = false; } while (currentIdx !== focusIdx) { itemElt = this.$content.childNodes[currentIdx]; this.$selectedItems.push(itemElt); itemElt.checked = true; if (currentIdx < focusIdx) currentIdx++; else currentIdx--; } } } else if (event.ctrlKey) { if (itemElt) { currentIdx = this.$selectedItems.indexOf(itemElt); if (currentIdx >= 0) { this.$selectedItems.splice(currentIdx, 1); itemElt.checked = false; } else { this.$selectedItems.unshift(itemElt); itemElt.checked = true; } } } this._updateCount(); this.elt.layoutCtn.update(); this.elt.emit('selectedchange'); }; /*** * @extends SelectController * @param elt * @constructor */ function MobileSelectController(elt) { SelectController.apply(this, arguments); } OOP["a" /* default */].mixClass(MobileSelectController, SelectController); MobileSelectController.prototype._setupSelectTool = function () { this.$content.on('click', this.ev_click); }; /*** * * @param {Finder} elt * @constructor */ function UploadController(elt) { /*** * * @type {Finder} */ this.elt = elt; this.$body = this.elt.$body; Object.keys(this.constructor.prototype).forEach(key => { if (key.startsWith('ev_')) { this[key] = this[key].bind(this); } }); this.$body.on({ fileenter: this.ev_fileEnter, filedrop: this.ev_fileDrop }) } UploadController.prototype.upload = function (files) { var screenSize = Object(Dom["d" /* getScreenSize */])(); var contentElt = Object(ACore["c" /* _ */])({ style: { maxHeight: '50vh', overflow: 'auto' }, child: { style: { display: 'table' }, child: files.map(file => ({ style: { display: 'table-row' }, child: [ { style: { display: 'table-cell', padding: '5px 20px 5px 10px' }, child: { style: { 'width': Math.min(screenSize.width - 180, 800) / 14 + 'em', textOverflow: 'ellipsis', overflow: 'hidden' }, child: { text: file.name } } }, { style: { display: 'table-cell', padding: '5px 10px' }, child: { class: 'as-upload-percent', style: { 'min-width': '3em', textAlign: 'right', color: 'rgb(30,237,219)' }, child: { text: '' } } } ] })) } }); var modal = Object(ACore["c" /* _ */])({ tag: js_Modal.tag, style: { zIndex: this.elt.findZIndex() + 9000 }, child: { tag: js_MessageDialog.tag, props: { dialogTitle: 'Tải lên', }, child: contentElt } }).addTo(document.body); var syncs = files.map((file, i) => { var percentText = Object(ACore["a" /* $ */])('.as-upload-percent', contentElt.firstChild.childNodes[i]); return this.elt.fileSystem.writeFile(this.elt.path + '/' + file.name, file, done => { var textBound = percentText.getBoundingClientRect(); var ctnBound = contentElt.getBoundingClientRect(); if (textBound.bottom > ctnBound.bottom) { contentElt.scrollTop += textBound.bottom - ctnBound.bottom; } percentText.firstChild.data = Math.round(done * 100) + '%'; }); }); Promise.all(syncs).then(() => { this.elt.navCtrl.reload(this.elt.path, true).then(() => modal.remove()); }); } UploadController.prototype.ev_fileEnter = function (event) { var files = Array.prototype.slice.call(event.dataTransfer.files); if (files.length === 0) return; }; UploadController.prototype.ev_fileDrop = function (event) { if (this.elt.searchCtrl.state === "RUNNING") return; var files = event.files; if (files.length > 0) this.upload(files); }; /*** * @extends EventEmitter * @param {Finder} elt * @constructor */ function FolderDialog(elt) { EventEmitter["b" /* default */].call(this); this.elt = elt; } OOP["a" /* default */].mixClass(FolderDialog, EventEmitter["b" /* default */]); FolderDialog.prototype._init = function () { if (this.$modal) return; this.$modal = Object(ACore["c" /* _ */])({ tag: 'modal', class: 'as-finder-folder-dialog-modal', child: { tag: js_MessageDialog.tag, props: { dialogTitle: 'Duyệt thư mục', dialogActions: [ { name: 'ok', text: 'OK' }, { name: 'cancel', text: 'Hủy' } ] }, child: [ { class: 'as-finder-folder-dialog-content', child: [ { class: 'as-finder-folder-dialog-selected-ctn', child: [ { tag: 'span', child: { text: 'Đã chọn thư mục: ' } }, { tag: 'span', child: { text: ' ... ' } } ] }, { class: 'as-finder-folder-dialog-tree-ctn', child: [ { tag: ExpGroup.tag }, { tag: ExpTree.tag, class: 'as-finder-folder-dialog-tree-root', props: { name: 'root', icon: 'span.mdi.mdi-harddisk' } } ] } ] } ] } }); this.$dialog = Object(ACore["a" /* $ */])(js_MessageDialog.tag, this.$modal); this.$treeCtn = Object(ACore["a" /* $ */])('.as-finder-folder-dialog-tree-ctn', this.$modal); this.$rootTree = Object(ACore["a" /* $ */])('.as-finder-folder-dialog-tree-root', this.$modal); this.$content = Object(ACore["a" /* $ */])('.as-finder-folder-dialog-content', this.$modal); this.$expGroup = Object(ACore["a" /* $ */])(ExpGroup.tag, this.$content); this.$selectedCtn = Object(ACore["a" /* $ */])('.as-finder-folder-dialog-selected-ctn', this.$content); this.$selectedPath = this.$selectedCtn.childNodes[1]; this.$activeNode = null; } FolderDialog.prototype.open = function (initPath, showRoot, checkFunc, title) { var cPath = initPath; this._init(); var fileSystem = this.elt.fileSystem; var zIndex = this.elt.findZIndex() + 9000; this.$modal.addStyle('z-index', zIndex + ''); this.$modal.addTo(document.body); if (this.$activeNode) { this.$activeNode.active = false; this.$activeNode = null; } this.$dialog.$actionBtns[0].disabled = true; this.$dialog.dialogTitle = title || 'Duyệt'; var makeTree = (path, ctnElt, level) => { level = level || 0; return fileSystem.readDir(path).then(dirs => Promise.all(dirs.map(dir => fileSystem.stat(path + '/' + dir)))) .then(stats => stats.filter(stat => { return stat.isDirectory })) .then(stats => { var syncs = []; ctnElt.clearChild(); var children = stats.map(stat => { var nodePath = path + '/' + stat.name; var node = Object(ACore["c" /* _ */])({ tag: ExpTree.tag, props: { stat: stat, name: stat.displayName || stat.name, icon: { tag: 'img', props: { src: messageinput_MessageInput.iconAssetRoot + '/folder.svg' } }, path: nodePath }, on: { statuschage: () => { }, press: () => { if (this.$activeNode) this.$activeNode.active = false; this.$activeNode = node; this.$activeNode.active = true; this.$selectedPath.firstChild.data = node.getPath().join('/'); cPath = nodePath; if (checkFunc && !checkFunc(cPath, stat)) { this.$dialog.$actionBtns[0].disabled = true; } else { this.$dialog.$actionBtns[0].disabled = false; } } } }); if (nodePath === cPath) { node.active = true; this.$activeNode = node; } if (checkFunc && !checkFunc(nodePath, stat)) { node.getNode().addStyle('opacity', 0.3 + ''); } node.getNode().on({ dblclick: () => { if (node.status === 'close') { node.status = 'open'; } else if (node.status === 'open') { node.status = 'close'; } } }); if (stat.name !== 'node_modules') syncs.push(makeTree(nodePath, node, level + 1)); return node; }); children.forEach(c => { ctnElt.addChild(c); }); if (children.length) { ctnElt.status = level > 1 ? 'close' : 'open'; } else { ctnElt.status = 'none'; } return Promise.all(syncs); }); } var onRootPress; if (showRoot) { this.$expGroup.addStyle('display', 'none'); this.$rootTree.removeStyle('display'); if (cPath === this.elt.rootPath) { this.$activeNode = this.$rootTree; this.$activeNode.active = true; } onRootPress = () => { var node = this.$rootTree; var nodePath = this.elt.rootPath; if (this.$activeNode) this.$activeNode.active = false; this.$activeNode = node; this.$activeNode.active = true; this.$selectedPath.firstChild.data = node.getPath().join('/'); cPath = nodePath; if (cPath === initPath || (checkFunc && !checkFunc(cPath, { writable: true }))) { this.$dialog.$actionBtns[0].disabled = true; } else { this.$dialog.$actionBtns[0].disabled = false; } }; this.$rootTree.on('press', onRootPress); } else { this.$expGroup.removeStyle('display'); this.$rootTree.addStyle('display', 'none'); } makeTree(this.elt.rootPath, showRoot ? this.$rootTree : this.$expGroup).then(() => { var p; if (this.$activeNode) { this.$selectedPath.firstChild.data = this.$activeNode.getPath().join('/'); p = this.$activeNode.getParent(); while (p) { if (p.status === 'close') { p.status = 'open'; } p = p.getParent && p.getParent(); } setTimeout(() => { vScrollIntoView(this.$activeNode.firstChild); }, 10) } }); return new Promise((resolve) => { var finish = (event) => { this.$dialog.off('action', finish); this.$modal.remove(); if (event.action.name === 'cancel') resolve(null); else resolve(cPath); if (onRootPress) { this.$rootTree.off('press', onRootPress); } } this.$dialog.on('action', finish); }); }; var isMatchAccept = (accept, statInfo) => { if (accept && (typeof accept === "object") && accept.accept) accept = accept.accept; if (typeof accept !== "string") return true; if (!accept) return true; if (statInfo.isDirectory) return true; var fileInfo = fileInfoOf(statInfo); if (accept.startsWith('image')) { return fileInfo.mimeType && fileInfo.mimeType.startsWith('image'); } return true;// not handle other case } /*** * * @param {Finder} elt * @constructor */ function NavigatorController(elt) { this.elt = elt; this.path = ''; this.rootPath = ''; this._states = {}; this._notifiedVisibleIdx = 0; this.$navCtn = this.elt.$navCtn; this.$nav = this.elt.$nav; this.$contentCtn = this.elt.$contentCtn; this.$content = this.elt.$content; Object.keys(this.constructor.prototype).forEach(key => { if (key.startsWith('ev_')) { this[key] = this[key].bind(this); } }); this.$contentCtn.on('scroll', this.ev_contentScroll); } NavigatorController.prototype.onStart = function () { /** * * @type {AbsolFileSystem} */ this.fileSystem = this.elt.fileSystem; this.$treeByPath = {}; this.$treeByPath[this.rootPath || '..'] = this.$nav; this.reload(this.rootPath, true); }; NavigatorController.prototype.reload = function (fromPath, autoOpen) { var opened = !autoOpen; var makeTree = (path, ctnElt) => { if (!opened && ctnElt.path) { this.viewDir(ctnElt.path, [this.elt.rootPath].concat(ctnElt.getPath()).join('/')); opened = true; } return this.fileSystem.readDir(path).then(dirs => Promise.all(dirs.map(dir => this.fileSystem.stat(path + '/' + dir)))) .then(stats => stats.filter(stat => { return stat.isDirectory })) .then(stats => { var syncs = []; ctnElt.clearChild(); var children = stats.map(stat => { var nodePath = path + '/' + stat.name; var node = Object(ACore["c" /* _ */])({ tag: ExpTree.tag, props: { stat: stat, name: stat.displayName || stat.name, icon: { tag: 'img', props: { src: messageinput_MessageInput.iconAssetRoot + '/folder.svg' } }, path: nodePath, }, on: { statuschage: () => { this._states[path + '/' + stat.name] = node.status; }, press: () => { if (this.path !== nodePath) this.viewDir(nodePath, [this.elt.rootPath].concat(node.getPath()).join('/')); } } }); node.getNode().on({ dblclick: () => { if (node.status === 'close') { node.status = 'open'; } else if (node.status === 'open') { node.status = 'close'; } this._states[nodePath] = node.status; } }); this.$treeByPath[nodePath] = node; if (stat.name !== 'node_modules') syncs.push(makeTree(nodePath, node)); if (!opened) { this.viewDir(nodePath, [this.elt.rootPath].concat(node.getPath()).join('/')); opened = true; } return node; }); children.forEach(c => { ctnElt.addChild(c); }); if (children.length) { if (this._states[ctnElt.path] === 'close' || this._states[ctnElt.path] === 'open') { ctnElt.status = this._states[ctnElt.path]; } else { ctnElt.status = 'close'; } } else { ctnElt.status = 'none'; } return Promise.all(syncs); }); } if (this.$treeByPath[fromPath || '..']) return makeTree(fromPath, this.$treeByPath[fromPath || '..']); return Promise.resolve(); }; NavigatorController.prototype.viewDir = function (path) { this.elt.selectCtrl.deselectAll(); if (this.$treeByPath[this.path]) { this.$treeByPath[this.path].active = false; this.$treeByPath[this.path].active = false; } this.path = path; this.$treeByPath[this.path].active = true; var c = this.$treeByPath[this.path].getParent(); while (c) { if (c.status === 'close') c.status = 'open'; c = c.getParent && c.getParent(); } vScrollIntoView(this.$treeByPath[this.path].firstChild); this.fileSystem.stat(path).then(stat => { this.elt.dirStat = stat; if (this.path !== path) return; if (stat.writable) this.elt.addClass('as-writable-folder'); else this.elt.removeClass('as-writable-folder'); if (stat.isVirtual) { this.elt.addClass('as-virtual-folder'); } else { this.elt.removeClass('as-virtual-folder'); } }) this.fileSystem.readDir(path).then(dirs => Promise.all(dirs.map(dir => this.fileSystem.stat(path + '/' + dir)))) .then(stats => { if (this.path !== path) return; stats.sort((a, b) => { var aName, bName; if (a.isDirectory === b.isDirectory) { aName = a.displayName || a.name; bName = b.displayName || b.name; if (aName < bName) return -1; return 1; } else { if (a.isDirectory) return -1; return 1; } }); stats = stats.filter(x => isMatchAccept(this.elt.accept, x)); this.viewContent(stats); }); }; NavigatorController.prototype.viewContent = function (stats) { this.clearContent(); stats.forEach(stat => { this.pushContentItem(stat); }); this.notifyVisibleContentItems(); }; NavigatorController.prototype.clearContent = function () { this._notifiedVisibleIdx = 0; this.$content.clearChild(); }; NavigatorController.prototype.pushContentItem = function (stat) { var elt = Object(ACore["c" /* _ */])({ tag: finder_FileThumbnail.tag, extendEvent: ['visible'], attr: { title: stat.displayName || stat.name }, props: { isDirectory: stat.isDirectory, value: stat.url, fileName: stat.displayName || stat.name, stat: stat }, on: { visible: () => { var mineType = Converter_ext2MineType[elt.fileType]; if (mineType && mineType.startsWith('image/')) { elt.thumbnail = stat.url; } }, dblclick: () => { var prevented = false; var event; if (!stat.isDirectory) { event = { fileElt: elt, stat: stat, preventDefault: () => { prevented = true; } }; this.elt.emit('dblclickfile', event); } if (!prevented) this.elt.execCommand('view'); } } }); this.$content.addChild(elt); }; NavigatorController.prototype.notifyVisibleContentItems = function () { var elt; var bound = this.$contentCtn.getBoundingClientRect(); var eBound; while (this._notifiedVisibleIdx < this.$content.childNodes.length) { elt = this.$content.childNodes[this._notifiedVisibleIdx]; eBound = elt.getBoundingClientRect(); if (eBound.top < bound.bottom) { elt.emit('visible'); } else { break; } this._notifiedVisibleIdx++; } }; NavigatorController.prototype.expandAll = function () { var visit = nodeElt => { if (nodeElt.status === 'close') { nodeElt.status = 'open'; this._states[nodeElt.path] = 'open'; } if (nodeElt.status === 'open') { nodeElt.getChildren().forEach(visit); } }; Array.prototype.forEach.call(this.$nav.childNodes, visit); }; NavigatorController.prototype.collapseAll = function () { var visit = nodeElt => { if (nodeElt.status === 'open') { nodeElt.status = 'close'; this._states[nodeElt.path] = 'close'; } if (nodeElt.status === 'close') { nodeElt.getChildren().forEach(visit); } }; Array.prototype.forEach.call(this.$nav.childNodes, visit); }; NavigatorController.prototype.ev_contentScroll = function (event) { this.notifyVisibleContentItems(); }; var fileTextQuery2Regex = text => { var code = nonAccentVietnamese(text.toLowerCase()) .replace(/[.,+^$()\[\]{}|\\]/g, x => '\\' + x) .replace(/\*+/g, '(.*)') .replace(/\?/g, '.'); return new RegExp(code, 'i'); } /*** * @extends Context * @param {Finder} elt * @constructor */ function SearchController(elt) { AppPattern_Context.apply(this); this.elt = elt; this.$searchText = this.elt.$searchText.on('keydown', event => { if (event.key === 'Enter') { this.$searchText.blur(); this.search(); } }); } OOP["a" /* default */].mixClass(SearchController, AppPattern_Context); SearchController.prototype.onStart = function () { // console.log('start') this.elt.addClass('as-searching'); this.$searchText.value = ''; this.$searchText.focus(); }; SearchController.prototype.onStop = function () { this.elt.removeClass('as-searching'); this.session = randomIdent(10); this.$searchText.waiting = false; }; SearchController.prototype.search = function () { var session = randomIdent(10); this.session = session; this.elt.navCtrl.clearContent(); this.$searchText.waiting = true; var fileSystem = this.elt.fileSystem; var rootPath = this.elt.rootPath; var result = []; var type = this.elt.$searchTypeSelect.value; var text = this.$searchText.value.trim(); var regex = fileTextQuery2Regex(text); var isMatched = stat => { var fileInfo = fileInfoOf(stat.displayName || stat.name); var mineType = fileInfo.mimeType || ''; var fileType = fileInfo.type || ''; fileType = fileType.toLowerCase(); if (mineType && type !== 'all') { if (type === 'image' && !mineType.startsWith('image') && type !== 'svg') { return false; } else if (type === 'document' && ['doc', 'docx', 'pdf', 'xlsx'].indexOf(fileType) < 0 && !mineType.startsWith('text')) { return false; } } if (text.length === 0) return true; if (stat.displayName && stat.displayName.match(regex)) return true; if (stat.name && nonAccentVietnamese(stat.name.toLowerCase()).match(regex)) return true; return false; } var handleStat = stat => { if (session !== this.session) return; if (stat.isDirectory) return new Promise(rs => { setTimeout(() => { rs(visitDir(stat.path)); }, 5); }); if (isMatched(stat)) { this.elt.navCtrl.pushContentItem(stat); this.elt.navCtrl.notifyVisibleContentItems(); } }; var handleDirResult = (dir, names) => { var syncs = names.map(name => { return fileSystem.stat(dir + '/' + name).then(stat => { if (session !== this.session) return; if (stat) return handleStat(stat); }); }); return Promise.all(syncs); } var visitDir = path => { return fileSystem.readDir(path).then((names => handleDirResult(path, names))); } visitDir(rootPath).then(() => { if (session !== this.session) return; this.$searchText.waiting = false; }); }; /*** * * @constructor */ function FinderFileSystem() { } FinderFileSystem.prototype.supporteDisplayName = false; FinderFileSystem.prototype.readDir = function (path) { }; FinderFileSystem.prototype.unlink = function (path) { console.log(path); }; FinderFileSystem.prototype.stat = function (path) { }; FinderFileSystem.prototype.rmdir = function (path) { }; FinderFileSystem.prototype.mkdir = function (path) { }; FinderFileSystem.prototype.writeFile = function (file, data) { }; FinderFileSystem.prototype.copy = function () { }; FinderFileSystem.prototype.rename = function (path, name) { }; FinderFileSystem.prototype.move = function (oldPath, newPath) { }; FinderFileSystem.prototype.clearCache = function () { }; /*** * @extends FinderFileSystem * @constructor */ function AbsolFileSystem() { FinderFileSystem.apply(this, arguments); this.sync = Promise.resolve(); this.cache = { readDir: {}, stats: {} }; this.taskMng = new AppPattern_TaskManager({ limit: 4 }); } OOP["a" /* default */].mixClass(AbsolFileSystem, FinderFileSystem); AbsolFileSystem.prototype.API_PREFIX = location.href.indexOf('localhost') >= 0 ? 'https://absol.cf' : ''; AbsolFileSystem.prototype.clearCache = function () { this.cache = { readDir: {}, stats: {} }; }; AbsolFileSystem.prototype.readDir = function (path) { this.sync = this.sync.then(() => { if (this.cache.readDir[path || '..']) return this.cache.readDir[path || '..']; return fetch(this.API_PREFIX + '/filesystem/ls.php', { method: 'POST', cache: "no-cache", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ path: path }) }).then(res => res.json()).then(res => { res = res.filter(c => c.path.startsWith('/html')); res.forEach(c => { c.name = c.path.split('/').pop(); c.url = c.path.replace('/html', this.API_PREFIX ||location.origin) }); this.cache.readDir[path || '..'] = res.map(c => c.name); res.forEach(c => { this.cache.stats[c.path] = c; }); }).then(() => { return this.cache.readDir[path || '..']; }); }); return this.sync; }; AbsolFileSystem.prototype.stat = function (path) { return this.sync.then(() => { path = path || ''; if (this.cache.stats[path || '..']) return this.cache.stats[path || '..']; var dir = path.split('/'); dir.pop(); dir = dir.join('/'); return this.readDir(dir).then(() => { return this.cache.stats[path || '..']; }) }); } /*** * * @param file * @param {File|Blob}data * @param {function(done: number):void=}onProcess */ AbsolFileSystem.prototype.writeFile = function (file, data, onProcess) { if (file.toLowerCase().endsWith('.php')) file += '.txt'; var folderPath = file.split('/'); folderPath.pop(); folderPath = folderPath.join('/'); delete this.cache.readDir[folderPath]; var prefix = ['file', new Date().getTime(), randomArbitrary(0, 1000000) >> 0].join('_'); var parts = []; var chuck_limit = 2 << 20; var partName; var fileSize = data.size; var fileStartOffset = 0; var fileEndOffset = 0; var idx = 0; var syncs = []; var syncDone = 0; var bundle; var began = false; var handle = bundle => { return new Promise(rs => { this.taskMng.requestTask((finishTask, bundle) => { if (typeof onProcess === "function" && !began) { began = true; onProcess(syncDone / (syncs.length || 1)); } var form = new FormData(); form.append('action', 'upload_part'); form.append('fileUpload', bundle.file, bundle.name); fetch(this.API_PREFIX + '/filesystem/writefile.php', { method: 'POST', body: form }).then(res => res.text()).then(text => { if (text !== 'OK') throw new Error(text); syncDone++; if (typeof onProcess === "function") { onProcess(syncDone / (syncs.length || 1)); } rs(location.origin); finishTask(); }); }, bundle); }) } while (fileStartOffset < fileSize) { fileEndOffset = Math.min(fileStartOffset + chuck_limit, fileSize); partName = prefix + '.p' + idx; parts.push(partName); bundle = { file: data.slice(fileStartOffset, fileEndOffset), idx: idx, name: partName }; idx++; fileStartOffset = fileEndOffset; syncs.push(handle(bundle)); } return Promise.all(syncs).then(() => { var form = new FormData(); form.append('action', 'join_parts'); form.append('parts', parts.join(';')); form.append('path', file); fetch(this.API_PREFIX + '/filesystem/writefile.php', { method: 'POST', body: form }).then(res => res.text()).then(text => { if (text !== 'OK') throw new Error(text); }); }); }; AbsolFileSystem.prototype.unlink = function (path) { var folderPath = path.split('/'); folderPath.pop(); folderPath = folderPath.join('/'); delete this.cache.readDir[folderPath]; var form = new FormData(); form.append('action', 'delete_files'); form.append('paths', path); return fetch(this.API_PREFIX + '/filesystem/writefile.php', { method: 'POST', body: form }).then(res => res.text()).then(text => { if (text !== 'OK') throw new Error(text); }); }; AbsolFileSystem.prototype.rename = function (path, name) { var folderPath = path.split('/'); folderPath.pop(); folderPath = folderPath.join('/'); var form = new FormData(); form.append('action', 'rename'); form.append('path', path); form.append('new_name', name); return fetch(this.API_PREFIX + '/filesystem/writefile.php', { method: 'POST', body: form }).then(res => res.text()).then(text => { if (text !== 'OK') throw new Error(text); var newPath = folderPath + '/' + name; delete this.cache.readDir[folderPath]; delete this.cache.stats[path]; return { url: newPath.replace('/html', this.API_PREFIX || location.origin), path: newPath, name: name } }); }; AbsolFileSystem.prototype.move = function (oldPath, newPath) { var oldFolderPath = oldPath.split('/'); oldFolderPath.pop(); oldFolderPath = oldFolderPath.join('/'); var newFolderPath = newPath.split('/'); newFolderPath.pop(); newFolderPath = newFolderPath.join('/'); var form = new FormData(); form.append('action', 'move'); form.append('old_path', oldPath); form.append('new_path', newPath); return fetch(this.API_PREFIX + '/filesystem/writefile.php', { method: 'POST', body: form }).then(res => res.text()).then(text => { if (text !== 'OK') throw new Error(text); delete this.cache.readDir[oldFolderPath]; delete this.cache.readDir[newFolderPath]; delete this.cache.stats[oldPath]; }); }; // EXTERNAL MODULE: ./node_modules/absol-acomp/css/treechart.css var treechart = __webpack_require__(310); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TreeChart.js function autoThemeVariable(viewElt) { var cp = getComputedStyle(document.body); var color = cp.getPropertyValue('--menu-background-color') || cp.getPropertyValue('--variant-color-primary') || 'blue'; color = Color_Color.parse(color.trim()); var hsla = color.toHSLA(); hsla[2] = (hsla[2] + 1) / 2; hsla[1] = (hsla[1] + 0.2) / 2; var nColor = Color_Color.fromHSLA(hsla[0], hsla[1], hsla[2], hsla[3]); viewElt.addStyle('--vert-node-background-color', nColor.toString('rgba')); nColor = nColor.getContrastYIQ(); viewElt.addStyle('--vert-node-text-color', nColor.toString('rgba')); hsla[0] += 0.1; if (hsla[0] > 1) hsla[0] -= 1; nColor = Color_Color.fromHSLA(hsla[0], hsla[1], hsla[2], hsla[3]); viewElt.addStyle('--horz-node-background-color', nColor.toString('rgba')); nColor = nColor.getContrastYIQ(); viewElt.addStyle('--horz-node-text-color', nColor.toString('rgba')); hsla[0] -= 0.2; if (hsla[0] < 0) hsla[0] += 1; nColor = Color_Color.fromHSLA(hsla[0], hsla[1], hsla[2], hsla[3]); viewElt.addStyle('--root-background-color', nColor.toString('rgba')); nColor = nColor.getContrastYIQ(); viewElt.addStyle('--root-text-color', nColor.toString('rgba')); } /*** * @extends AElement * @constructor */ function TreeChart() { // autoThemeVariable(this); this.$domSignal = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](this.$domSignal); this.domSignal.on('formatSize', this._formatSize.bind(this)); this.domSignal.on('fixWidth', this._fixWidth.bind(this)); this.$root = null; this._maxHorizonLevel = 2; /*** * @name data * @type {any} * @memberOf TreeChart# */ /*** * @name maxHorizonLevel * @type {number} * @memberOf TreeChart# */ } TreeChart.tag = 'TreeChart'; TreeChart.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-tree-chart' }); }; TreeChart.prototype._updateContent = function () { if (this.$root) { this.$root.remove(); this.$root = null; } var data = this.data; if (!data) return; var makeTree = (nodeData, level) => { var textChildren = []; if (nodeData.icon) { textChildren.push(Object(ACore["c" /* _ */])(nodeData.icon).addClass('as-tree-chart-icon')); } textChildren.push({ tag: 'span', class: 'as-tree-chart-text', child: { text: nodeData.text || nodeData.name } }); var elt = Object(ACore["c" /* _ */])({ class: 'as-tree-chart-node', attr: { "data-level": level + '' }, child: [ { class: 'as-tree-chart-content-ctn', child: { class: 'as-tree-chart-content', child: textChildren } }, { class: 'as-tree-chart-child-ctn' } ] }); elt.$content = Object(ACore["a" /* $ */])('.as-tree-chart-content', elt); elt.$childCtn = Object(ACore["a" /* $ */])('.as-tree-chart-child-ctn', elt); var fillColor, textColor; if (typeof nodeData.fill === "string") { fillColor = Color_Color.parse(nodeData.fill); } else if (nodeData.fill instanceof Color_Color) { fillColor = nodeData.fill; } if (fillColor) { textColor = fillColor.getContrastYIQ(); elt.$content.addStyle({ color: textColor.toString('hex8'), backgroundColor: fillColor.toString('hex8'), }); } if (level === this.maxHorizonLevel) elt.addClass('as-horizontal'); if (nodeData.isLeaf) elt.addClass('as-is-leaf'); if (nodeData.items && nodeData.items.length > 0) { elt.addClass('as-has-children'); /*** * @type {AElement[]} */ elt.$children = nodeData.items.map((it) => makeTree(it, level + 1)); elt.$childCtn.addChild(elt.$children); } return elt; }; this.$root = makeTree(data, 0).addTo(this); this.domSignal.emit('formatSize'); }; TreeChart.prototype._formatSize = function () { if (!this.$root) return; var cBound = this.getBoundingClientRect(); var maxHorizonLevel = this.maxHorizonLevel; var visit = (elt, level) => { if (!elt.$children) return; var sArr, maxS; if (level < maxHorizonLevel) { sArr = elt.$children.map(e => e.$content.getBoundingClientRect().height); maxS = Math.max.apply(Math, sArr); elt.$children.forEach((elt, i) => { if (sArr[i] < maxS) { elt.$content.addStyle('height', maxS + 'px'); } }); } else { sArr = elt.$children.map(e => e.$content.getBoundingClientRect().width); maxS = Math.max.apply(Math, sArr); elt.$children.forEach((elt, i) => { if (sArr[i] < maxS) { elt.$content.addStyle('width', maxS + 'px'); } }); } elt.$children.forEach(c => visit(c, level + 1)); }; visit(this.$root, 0); var newBound = this.getBoundingClientRect(); if (cBound.width !== newBound.width || cBound.height !== newBound.height) { ResizeSystem["a" /* default */].update(); } this.domSignal.emit('fixWidth'); }; TreeChart.prototype._fixWidth = function () { if (!this.$root) return; var cBound = this.getBoundingClientRect(); var maxHorizonLevel = this.maxHorizonLevel; var visit = (elt) => { if (!elt.$children) return; elt.$children.forEach(c => visit(c)); var bound, cBound; bound = elt.$childCtn.getBoundingClientRect(); cBound = elt.$childCtn.getBoundingRecursiveRect(100); if (cBound.width > bound.width) { console.log(elt.$childCtn) elt.$childCtn.addStyle('width', cBound.width + 'px'); } }; visit(this.$root); var newBound = this.getBoundingClientRect(); if (cBound.width !== newBound.width || cBound.height !== newBound.height) { ResizeSystem["a" /* default */].update(); } }; TreeChart.property = {}; TreeChart.property.data = { set: function (data) { data = copyJSVariable(data || null); this._data = data; this._updateContent(); }, get: function () { return this._data; } }; TreeChart.property.maxHorizonLevel = { set: function (value) { if (!isNaturalNumber(value)) value = 2;//default this._maxHorizonLevel = value; this._updateContent(); }, get: function () { return this._maxHorizonLevel; } } ACore["d" /* default */].install(TreeChart); /* harmony default export */ var js_TreeChart = (TreeChart); // CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Clipboard.js function copyImage(src) { var ranges, sel; if (window.getSelection) { sel = window.getSelection(); //backup ranges = []; for (var i = 0; i < sel.rangeCount; ++i) { ranges.push(sel.getRangeAt(i)); } //copy var contentdiv = document.createElement('div'); var image = document.createElement('img'); contentdiv.appendChild(image); image.src = src; contentdiv.contentEditable = true; // contentdiv.style.display = 'none'; document.body.appendChild(contentdiv); var range = document.createRange(); range.selectNodeContents(image); sel.removeAllRanges(); sel.addRange(range); document.execCommand('copy'); // contentdiv.remove(); //recover sel.removeAllRanges(); for (var i = 0; i < sel.rangeCount; ++i) { sel.addRange(ranges[i]); } } else { console.error("Not support copy!") //not support IE } } function fallbackCopyTextToClipboard(text) { return new Promise(function (resolve, reject) { var textArea = document.createElement("textarea"); textArea.value = text; // Avoid scrolling to bottom textArea.style.top = "0"; textArea.style.left = "0"; textArea.style.position = "fixed"; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { var successful = document.execCommand('copy'); if (successful) { resolve(); } else { reject(); } } catch (err) { reject(err); } document.body.removeChild(textArea); }); } function copyText(text) { if (!navigator.clipboard) { return fallbackCopyTextToClipboard(text); } return navigator.clipboard.writeText(text); } function fallbackReadTextFromClipboard() { return new Promise(function (resolve, reject) { var textArea = document.createElement("textarea"); // Avoid scrolling to bottom textArea.style.top = "0"; textArea.style.left = "0"; textArea.style.position = "fixed"; document.body.appendChild(textArea); textArea.focus(); try { var successful = document.execCommand('paste'); if (successful) { resolve(textArea.value); } else { reject(); } } catch (err) { reject(err); } document.body.removeChild(textArea); }); } function pasteText() { if (navigator.clipboard) { return navigator.clipboard.readText(); } else { return fallbackReadTextFromClipboard(); } } // CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiLanguageText.js /*** * @extends AElement * @constructor */ function MultiLanguageText() { this._v = Array(5).fill(null); this._key = null; this.$text = document.createTextNode(''); this.addChild(this.$text); } MultiLanguageText.tag = 'mlt'; MultiLanguageText.render = function () { return Object(ACore["c" /* _ */])('span'); }; MultiLanguageText.prototype._updateText = function () { var text = ''; if (this._key && window.LanguageModule && window.LanguageModule.text2) { text = window.LanguageModule.text2(this._key, this._v); } text = text.replace(/<br>/g, '\n'); this.$text.data = text; }; MultiLanguageText.attribute = Array(5).fill(0).reduce((ac, u, i) => { ac['v' + i] = { set: function (value) { this._v[i] = value; this._updateText(); }, get: function () { return this._v[i]; }, remove: function () { this._v[i] = null; } } return ac; }, {}); MultiLanguageText.attribute.key = { set: function (value) { this._key = value; this._updateText(); }, get: function () { return this._key; }, remove: function () { this._key = null; } }; MultiLanguageText.replaceAll = function (root) { Object(ACore["b" /* $$ */])('mlt', root).forEach(elt=>{ if (elt.tagName !== 'MLT') return; var attr = Array.prototype.reduce.call(elt.attributes,(ac, at)=>{ ac[at.name] = at.value; return ac; },{}); elt.selfReplace(Object(ACore["c" /* _ */])({ tag: MultiLanguageText, attr: attr })); }); }; /* harmony default export */ var js_MultiLanguageText = (MultiLanguageText); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/CopyableIconTooltip.js /*** * @extends {AElement} * @constructor */ function CopyableIconTooltip() { this._content = ''; this.$content = null; this._value = ''; this._icon = 'span.mdi.mdi-information-outline'; this.$icon = Object(ACore["a" /* $ */])('.as-cit-icon', this); this.tooltip = new TooltipController(this); } CopyableIconTooltip.tag = 'CopyableIconTooltip'.toLowerCase(); CopyableIconTooltip.render = function () { return Object(ACore["c" /* _ */])({ tag: 'button', class: 'as-copyable-icon-tooltip', child: 'span.mdi.mdi-information-outline.as-cit-icon' }); }; CopyableIconTooltip.property = {}; CopyableIconTooltip.property.content = { set: function (value) { this._content = value || ''; if (typeof this._content === "object") { this.$content = Object(ACore["c" /* _ */])(this._content); } else if (typeof this._content === "string") { this.$content = Object(ACore["c" /* _ */])({ tag: 'span', style:{'white-space':'pre-wrap'}, props:{ innerHTML: this._content } }); js_MultiLanguageText.replaceAll(this.$content); } }, get: function () { return this._content; } }; CopyableIconTooltip.property.icon = { set: function (value) { value = value || ''; this._icon = value; this.clearChild(); this.$icon = null; if (value) { if (Object(Dom["f" /* isDomNode */])(value)) { if (value.parentElement) value = value.cloneNode(true); } else value = Object(ACore["c" /* _ */])(value); this.$icon = Object(ACore["a" /* $ */])(value).addClass('as-cit-icon'); this.addChild(this.$icon); } }, get: function () { return this._icon; } }; CopyableIconTooltip.property.value = { set: function (value) { this._value = value; }, get: function () { return this._value; } }; /*** * * @param {CopyableIconTooltip} elt * @constructor */ function TooltipController(elt) { /*** * * @type {CopyableIconTooltip} */ this.elt = elt; this.elt.on('mouseenter', this.ev_mouseEnter.bind(this)); this.elt.on('mouseleave', this.ev_mouseLeave.bind(this)); this.elt.on('click', this.ev_click.bind(this)); this.session = -2; this.timeout = -1; } TooltipController.prototype.ev_mouseEnter = function () { clearTimeout(this.timeout); if (this.elt.$content) this.session = Tooltip.show(this.elt, this.elt.$content, 'auto'); }; TooltipController.prototype.ev_mouseLeave = function () { this.timeout = setTimeout(() => { Tooltip.close(this.session); }, 500) }; TooltipController.prototype.ev_click = function () { var text; if (this.elt._value !== null && this.elt._value !== undefined) { text = this.elt._value + ''; } else if (typeof this.elt._content === "string") { text = this.elt._content; } else { text = this.elt.$content.innerText; } copyText(text); Snackbar.show('Copied: ' + text); }; /* harmony default export */ var js_CopyableIconTooltip = (CopyableIconTooltip); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateNLevelInput.js /** * @extends {AElement} * @constructor */ function DateNLevelInput() { this.$level = Object(ACore["a" /* $ */])('.as-date-n-level-input-select-level', this); this.$date = Object(ACore["a" /* $ */])('dateinput', this); this.ctrl = new DateNLevelInputCtrl(this); this._allowLevels = this.defaultAllowLevels.slice(); } DateNLevelInput.tag = 'DateNLevelInput'.toLowerCase(); DateNLevelInput.prototype.leve2format = { date: 'dd/MM/yyyy', week: 'Tuần ww, yyyy', month: 'MM/yyyy', quarter: 'Quý QQ, yyyy', year: 'yyyy' }; DateNLevelInput.prototype.leve2Name = { date: 'Ngày', week: 'Tuần', month: 'Tháng', quarter: 'Quý', year: 'Năm' } DateNLevelInput.prototype.defaultAllowLevels = ['date', 'month', 'year']; DateNLevelInput.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-date-n-level-input', extendEvent: ['change'], child: [ { tag: 'dateinput', props: { format: 'dd/MM/yyyy' } }, { tag: 'button', class: ['as-transparent-button', 'as-date-n-level-input-select-level'], child: 'span.mdi.mdi-cog' } ] }); }; DateNLevelInput.property = {}; DateNLevelInput.property.allowLevels = { set: function (value) { if (typeof value === "string") { value = value.split(/\s*,\s*/); } if (!(value instanceof Array)) { value = this.defaultAllowLevels.slice(); } value = value.filter(x => !!this.leve2format[x]); if (!value || value.length === 0) value = this.defaultAllowLevels.slice(); var prevLevel = this.level; this._allowLevels = value; var newLevel = this.level; if (prevLevel !== newLevel) { this.level = newLevel;//update } }, get: function () { return this._allowLevels.slice(); } }; DateNLevelInput.property.level = { set: function (value) { if (!this.leve2format[value]) value = 'date'; this.attr('data-level', value); this.$date.format = this.leve2format[value]; this.ctrl.prevVal = this.$date.value; this.ctrl.level = value; }, get: function () { var level = this.ctrl.level; if (this._allowLevels.indexOf(level) < 0) level = this._allowLevels[0]; return level; } }; DateNLevelInput.property.format = { get: function () { return this.$date.format; } }; DateNLevelInput.property.value = { set: function (value) { this.$date.value = value; this.ctrl.prevVal = this.$date.value; }, get: function () { return this.$date.value; } }; DateNLevelInput.property.readOnly = { set: function (value) { this.$date.readOnly = value; if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } }, get: function () { return this.$date.readOnly; } }; DateNLevelInput.property.disabled = { set: function (value) { this.$date.disabled = value; this.$level.disabled = value; if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } }, get: function () { return this.$date.disabled; } }; function DateNLevelInputCtrl(elt) { this.elt = elt; this.prevVal = this.elt.value; this.elt.$date.on('change', this.ev_dateChange.bind(this)); this.level = 'date'; js_QuickMenu.toggleWhenClick(this.elt.$level, { getMenuProps: () => { var props = {}; props.items = this.elt._allowLevels.map(name => { return { text: `${this.elt.leve2Name[name]} (${this.elt.leve2format[name]})`, level: name, icon: name === this.level ? 'span.mdi.mdi-check' : null } }); return props; }, onSelect: item => { if (this.level !== item.level) { this.level = item.level; this.ev_levelChange(); } } }) } DateNLevelInputCtrl.prototype.ev_dateChange = function (event) { this.notifyCanBeChanged(); }; DateNLevelInputCtrl.prototype.ev_levelChange = function (event) { var value = this.level; this.elt.attr('data-level', value); this.elt.$date.format = this.elt.leve2format[value]; this.elt.$date.value = null; this.notifyCanBeChanged(); }; DateNLevelInputCtrl.prototype.notifyCanBeChanged = function (force) { var value = this.elt.$date.value; if (force || !value !== !this.prevVal || (value && compareDate(value, this.prevVal) !== 0)) { this.elt.emit('change', Object.assign({}, { value: value, prevValue: this.prevVal, target: this.elt }), this.elt); this.prevVal = value; } }; /* harmony default export */ var js_DateNLevelInput = (DateNLevelInput); ACore["d" /* default */].install(DateNLevelInput); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/tableoftextinput.css var tableoftextinput = __webpack_require__(312); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/swatchestable.css var swatchestable = __webpack_require__(314); // CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/red_cross.tpl /* harmony default export */ var red_cross = ("<svg width=\"$width\" height=\"$height\" version=\"1.1\" viewBox=\"0 0 $width $height\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"none\" stroke=\"#f00\">\n <path d=\"m0 0 $width $height\"/>\n <path d=\"m$width 0-$width $heightz\" stroke-width=\"1px\"/>\n </g>\n</svg>\n"); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/SwatchesTable.js /** * @extends AElement * @constructor */ function ColorCell() { this.$value = this.firstChild; if (!ColorCell.css) { ColorCell.css = new HTML5_DynamicCSS() .setProperty('.as-color-cell.as-null .as-color-cell-value', 'background-image', `url("data:image/svg+xml;base64,${base64EncodeUnicode(red_cross.replace(/\$width/g, '24').replace(/\$height/g, '24'))}")`) .commit(); } } ColorCell.tag = 'ColorCell'.toString(); ColorCell.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-color-cell', child: [ '.as-color-cell-value' ] }); }; ColorCell.property = {}; ColorCell.property.value = { set: function (value) { if (value === null || value === undefined) { this.addClass('as-null'); } else if (value) { this.removeClass('as-null'); this.$value.addStyle('background-color', value + ''); } this._value = value; }, get: function () { return this._value; } }; function SwatchesTable() { this._data = []; this._poolCells = []; this._poolRows = []; this._dict = {}; } SwatchesTable.tag = 'SwatchesTable'.toLowerCase(); SwatchesTable.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: 'presscell', class: 'as-swatches-table' }); }; SwatchesTable.prototype.getCell = function () { if (arguments.length === 1) { var key = arguments[0]; if (key.toHex8) { key = key.toHex8(); } else if (typeof key == 'string') { key = Color_Color.parse(key); if (key) key = key.toHex8(); } key = key + ''; return this._dict[key]; } else if (arguments.length === 2) { return this.childNodes[arguments[0]] && this.childNodes[arguments[0]].childNodes[arguments[1]]; } }; SwatchesTable.eventHandler = {}; SwatchesTable.eventHandler.clickCell = function (cell, event) { this.emit('presscell', { target: this, cellElt: cell, value: cell.__swatchescell_value, rowIdx: cell.__swatchescell_row_idx, colIdx: cell.__swatchescell_col_idx }); } SwatchesTable.property = {}; SwatchesTable.property.data = { set: function (value) { this._dict = {}; value = value || [[null]]; if (typeof value == 'string') { value = { classic: MoqupsClassicSwathes, material: MaterialSwatches, bootstrap: BootstrapSwatches, ios: iOsSwatches, moqupsclassic: MoqupsClassicSwathes }[value] || [[null]]; } this._data = value; var child; while (this.childNodes.length > value.length) { child = this.firstChild; this._poolRows.push(child); this.removeChild(child); } while (this.childNodes.length < value.length) { if (this._poolRows.length > 0) child = this._poolRows.pop(); else child = Object(ACore["c" /* _ */])('.as-swatches-table-row'); this.addChild(child); } var rowElt; var row; for (var i = 0; i < value.length; ++i) { rowElt = this.childNodes[i]; row = value[i]; while (rowElt.childNodes.length > row.length) { child = rowElt.firstChild; this._poolCells.push(child); rowElt.removeChild(child); } while (rowElt.childNodes.length < row.length) { if (this._poolCells.length > 0) child = this._poolCells.pop(); else { child = Object(ACore["c" /* _ */])({ tag: ColorCell, class:'as-swatches-table-cell' }); child.on('click', this.eventHandler.clickCell.bind(this, child)); } rowElt.addChild(child); } for (var j = 0; j < row.length; ++j) { rowElt.childNodes[j].__swatchescell_row_idx = i; rowElt.childNodes[j].__swatchescell_col_idx = j; if (!row[j]) { rowElt.childNodes[j] .attr('title', null) // rowElt.childNodes[j].firstChild.removeStyle('background-color'); rowElt.childNodes[j].__swatchescell_value = row[j]; this._dict['null'] = rowElt.childNodes[j]; } else if (row[j].toHex8) { rowElt.childNodes[j].value = row[j]; rowElt.childNodes[j].attr('title', null); rowElt.childNodes[j].__swatchescell_value = row[j]; this._dict[row[j].toHex8()] = rowElt.childNodes[j]; } else if (typeof row[j] == 'object') { if (row[j].value) { rowElt.childNodes[j].value = row[j].value; // rowElt.childNodes[j].firstChild.addStyle('background-color', row[j].value); rowElt.childNodes[j].__swatchescell_value = row[j].value; this._dict[Color_Color.parse(row[j].value + '').toHex8()] = rowElt.childNodes[j]; } else { rowElt.childNodes[j].firstChild.removeStyle('background-color'); this._dict[Color_Color.parse('transparent').toHex8()] = rowElt.childNodes[j]; } rowElt.childNodes[j].attr('title', row[j].name || null) } else if (typeof row[j] == 'string') { rowElt.childNodes[j].value = row[j]; rowElt.childNodes[j].attr('title', null); rowElt.childNodes[j].__swatchescell_value = row[j]; this._dict[Color_Color.parse(row[j]).toHex8()] = rowElt.childNodes[j]; } } } }, get: function () { return this._data; } }; var MoqupsClassicSwathes = [ [ { "name": "White", "value": "#ffffff" }, { "name": "± Wild Sand", "value": "#f7f6f6" }, { "name": "± Gallery", "value": "#ebebeb" }, { "name": "± Alto", "value": "#d6d6d6" }, { "name": "Silver", "value": "#c0c0c0" }, { "name": "± Silver Chalice", "value": "#aaaaaa" }, { "name": "± Gray", "value": "#929292" }, { "name": "Boulder", "value": "#7a7a7a" }, { "name": "± Scorpion", "value": "#606060" }, { "name": "± Tundora", "value": "#444444" }, { "name": "± Mine Shaft", "value": "#232323" }, { "name": "Black", "value": "#000000" } ], [ { "name": "± Prussian Blue", "value": "#003748" }, { "name": "± Green Vogue", "value": "#021f54" }, { "name": "± Black Rock", "value": "#120639" }, { "name": "± Violet", "value": "#2f073b" }, { "name": "± Bulgarian Rose", "value": "#3d051b" }, { "name": "± Lonestar", "value": "#5e0202" }, { "name": "± Brown Bramble", "value": "#5b1a04" }, { "name": "± Cioccolato", "value": "#58330a" }, { "name": "± Bronze Olive", "value": "#553d0d" }, { "name": "± Himalaya", "value": "#656119" }, { "name": "± West Coast", "value": "#4e5516" }, { "name": "± Seaweed", "value": "#243e16" } ], [ { "name": "± Astronaut Blue", "value": "#004e63" }, { "name": "± Catalina Blue", "value": "#033076" }, { "name": "± Violet", "value": "#1c0c4f" }, { "name": "± Jagger", "value": "#460e56" }, { "name": "± Maroon Oak", "value": "#570e28" }, { "name": "± Dark Burgundy", "value": "#840705" }, { "name": "± Kenyan Copper", "value": "#7d2709" }, { "name": "± Raw Umber", "value": "#7b4812" }, { "name": "± Raw Umber", "value": "#785616" }, { "name": "± Wasabi", "value": "#8c8525" }, { "name": "± Fern Frond", "value": "#6e7623" }, { "name": "± Woodland", "value": "#355723" } ], [ { "name": "± Blue Lagoon", "value": "#006e8c" }, { "name": "± Cobalt", "value": "#0844a4" }, { "name": "± Persian Indigo", "value": "#2e1572" }, { "name": "± Honey Flower", "value": "#631878" }, { "name": "± Claret", "value": "#7a163c" }, { "name": "± Milano Red", "value": "#b70f0a" }, { "name": "± Rust", "value": "#af3a11" }, { "name": "± Desert", "value": "#aa671d" }, { "name": "± Reef Gold", "value": "#a77a23" }, { "name": "± Earls Green", "value": "#c3bb38" }, { "name": "± Sushi", "value": "#99a534" }, { "name": "± Fern Green", "value": "#4c7a34" } ], [ { "name": "± Bondi Blue", "value": "#008db1" }, { "name": "± Denim", "value": "#0c59cf" }, { "name": "± Daisy Bush", "value": "#3b1d8f" }, { "name": "± Seance", "value": "#7e2199" }, { "name": "± Disco", "value": "#9c1f4d" }, { "name": "± Crimson", "value": "#e61610" }, { "name": "± Orange Roughy", "value": "#dc4c18" }, { "name": "± Brandy Punch", "value": "#d68227" }, { "name": "± Hokey Pokey", "value": "#d39c2f" }, { "name": "± Starship", "value": "#f4eb49" }, { "name": "± Turmeric", "value": "#c1d045" }, { "name": "± Apple", "value": "#629c44" } ], [ { "name": "± Cerulean", "value": "#00a4d3" }, { "name": "± Blue Ribbon", "value": "#1464f6" }, { "name": "± Daisy Bush", "value": "#5125ad" }, { "name": "± Purple Heart", "value": "#9c29b7" }, { "name": "± Maroon Flush", "value": "#bb285c" }, { "name": "± Red Orange", "value": "#ff3823" }, { "name": "± Orange", "value": "#ff6624" }, { "name": "± Sunshade", "value": "#ffa834" }, { "name": "± Bright Sun", "value": "#fec63d" }, { "name": "± Laser Lemon", "value": "#fefb64" }, { "name": "± Confetti", "value": "#d7eb5a" }, { "name": "± Mantis", "value": "#72bb53" } ], [ { "name": "± Bright Turquoise", "value": "#00c8f8" }, { "name": "± Dodger Blue", "value": "#3d8af7" }, { "name": "± Purple Heart", "value": "#6334e3" }, { "name": "± Electric Violet", "value": "#c238eb" }, { "name": "± Cerise Red", "value": "#e93578" }, { "name": "± Persimmon", "value": "#ff5d55" }, { "name": "± Coral", "value": "#ff8351" }, { "name": "± Texas Rose", "value": "#ffb253" }, { "name": "± Golden Tainoi", "value": "#ffc957" }, { "name": "± Dolly", "value": "#fef67f" }, { "name": "± Manz", "value": "#e2ee79" }, { "name": "± Feijoa", "value": "#92d36e" } ], [ { "name": "± Malibu", "value": "#4dd7fa" }, { "name": "± Malibu", "value": "#75a9f9" }, { "name": "± Cornflower Blue", "value": "#8b51f5" }, { "name": "± Heliotrope", "value": "#d757f6" }, { "name": "± Froly", "value": "#f06e9c" }, { "name": "± Vivid Tangerine", "value": "#ff8a84" }, { "name": "± Hit Pink", "value": "#ffa382" }, { "name": "± Macaroni and Cheese", "value": "#ffc581" }, { "name": "± Grandis", "value": "#ffd783" }, { "name": "± Picasso", "value": "#fef8a0" }, { "name": "± Khaki", "value": "#e9f29b" }, { "name": "± Feijoa", "value": "#aedd94" } ], [ { "name": "± Anakiwa", "value": "#91e4fb" }, { "name": "± Sail", "value": "#a8c6fa" }, { "name": "± Perfume", "value": "#b38df7" }, { "name": "± Heliotrope", "value": "#e692f8" }, { "name": "± Illusion", "value": "#f6a2bf" }, { "name": "± Sundown", "value": "#ffb4b0" }, { "name": "± Wax Flower", "value": "#ffc3ae" }, { "name": "± Caramel", "value": "#ffd8ad" }, { "name": "± Navajo White", "value": "#ffe3ae" }, { "name": "± Pale Prim", "value": "#fefac0" }, { "name": "± Corn Field", "value": "#f1f6be" }, { "name": "± Tea Green", "value": "#cbe8ba" } ], [ { "name": "± French Pass", "value": "#c9f1fd" }, { "name": "± Hawkes Blue", "value": "#d4e3fc" }, { "name": "± Perfume", "value": "#dacafb" }, { "name": "± Perfume", "value": "#f2c9fb" }, { "name": "± Chantilly", "value": "#fad2e0" }, { "name": "± Cosmos", "value": "#ffdad8" }, { "name": "± Peach Schnapps", "value": "#ffe2d8" }, { "name": "± Derby", "value": "#ffecd7" }, { "name": "± Pink Lady", "value": "#fff1d7" }, { "name": "± Off Yellow", "value": "#fefce0" }, { "name": "± Citrine White", "value": "#f7fade" }, { "name": "± Zanah", "value": "#dfedd6" } ] ]; var MaterialSwatches = [ [ { "name": "Red 50", "value": "#ffebee" }, { "name": "Red 100", "value": "#ffcdd2" }, { "name": "Red 200", "value": "#ef9a9a" }, { "name": "Red 300", "value": "#e57373" }, { "name": "Red 400", "value": "#ef5350" }, { "name": "Red 500", "value": "#f44336" }, { "name": "Red 600", "value": "#e53935" }, { "name": "Red 700", "value": "#d32f2f" }, { "name": "Red 800", "value": "#c62828" }, { "name": "Red 900", "value": "#b71c1c" } ], [ { "name": "Pink 50", "value": "#fce4ec" }, { "name": "Pink 100", "value": "#f8bbd0" }, { "name": "Pink 200", "value": "#f48fb1" }, { "name": "Pink 300", "value": "#f06292" }, { "name": "Pink 400", "value": "#ec407a" }, { "name": "Pink 500", "value": "#e91e63" }, { "name": "Pink 600", "value": "#d81b60" }, { "name": "Pink 700", "value": "#c2185b" }, { "name": "Pink 800", "value": "#ad1457" }, { "name": "Pink 900", "value": "#880e4f" } ], [ { "name": "Purple 50", "value": "#f3e5f5" }, { "name": "Purple 100", "value": "#e1bee7" }, { "name": "Purple 200", "value": "#ce93d8" }, { "name": "Purple 300", "value": "#ba68c8" }, { "name": "Purple 400", "value": "#ab47bc" }, { "name": "Purple 500", "value": "#9c27b0" }, { "name": "Purple 600", "value": "#8e24aa" }, { "name": "Purple 700", "value": "#7b1fa2" }, { "name": "Purple 800", "value": "#6a1b9a" }, { "name": "Purple 900", "value": "#4a148c" } ], [ { "name": "Deep Purple 50", "value": "#ede7f6" }, { "name": "Deep Purple 100", "value": "#d1c4e9" }, { "name": "Deep Purple 200", "value": "#b39ddb" }, { "name": "Deep Purple 300", "value": "#9575cd" }, { "name": "Deep Purple 400", "value": "#7e57c2" }, { "name": "Deep Purple 500", "value": "#673ab7" }, { "name": "Deep Purple 600", "value": "#5e35b1" }, { "name": "Deep Purple 700", "value": "#512da8" }, { "name": "Deep Purple 800", "value": "#4527a0" }, { "name": "Deep Purple 900", "value": "#311b92" } ], [ { "name": "Indigo 50", "value": "#e8eaf6" }, { "name": "Indigo 100", "value": "#c5cae9" }, { "name": "Indigo 200", "value": "#9fa8da" }, { "name": "Indigo 300", "value": "#7986cb" }, { "name": "Indigo 400", "value": "#5c6bc0" }, { "name": "Indigo 500", "value": "#3f51b5" }, { "name": "Indigo 600", "value": "#3949ab" }, { "name": "Indigo 700", "value": "#303f9f" }, { "name": "Indigo 800", "value": "#283593" }, { "name": "Indigo 900", "value": "#1a237e" } ], [ { "name": "Blue 50", "value": "#e3f2fd" }, { "name": "Blue 100", "value": "#bbdefb" }, { "name": "Blue 200", "value": "#90caf9" }, { "name": "Blue 300", "value": "#64b5f6" }, { "name": "Blue 400", "value": "#42a5f5" }, { "name": "Blue 500", "value": "#2196f3" }, { "name": "Blue 600", "value": "#1e88e5" }, { "name": "Blue 700", "value": "#1976d2" }, { "name": "Blue 800", "value": "#1565c0" }, { "name": "Blue 900", "value": "#0d47a1" } ], [ { "name": "Light Blue 50", "value": "#e1f5fe" }, { "name": "Light Blue 100", "value": "#b3e5fc" }, { "name": "Light Blue 200", "value": "#81d4fa" }, { "name": "Light Blue 300", "value": "#4fc3f7" }, { "name": "Light Blue 400", "value": "#29b6f6" }, { "name": "Light Blue 500", "value": "#03a9f4" }, { "name": "Light Blue 600", "value": "#039be5" }, { "name": "Light Blue 700", "value": "#0288d1" }, { "name": "Light Blue 800", "value": "#0277bd" }, { "name": "Light Blue 900", "value": "#01579b" } ], [ { "name": "Cyan 50", "value": "#e0f7fa" }, { "name": "Cyan 100", "value": "#b2ebf2" }, { "name": "Cyan 200", "value": "#80deea" }, { "name": "Cyan 300", "value": "#4dd0e1" }, { "name": "Cyan 400", "value": "#26c6da" }, { "name": "Cyan 500", "value": "#00bcd4" }, { "name": "Cyan 600", "value": "#00acc1" }, { "name": "Cyan 700", "value": "#0097a7" }, { "name": "Cyan 800", "value": "#00838f" }, { "name": "Cyan 900", "value": "#006064" } ], [ { "name": "Teal 50", "value": "#e0f2f1" }, { "name": "Teal 100", "value": "#b2dfdb" }, { "name": "Teal 200", "value": "#80cbc4" }, { "name": "Teal 300", "value": "#4db6ac" }, { "name": "Teal 400", "value": "#26a69a" }, { "name": "Teal 500", "value": "#009688" }, { "name": "Teal 600", "value": "#00897b" }, { "name": "Teal 700", "value": "#00796b" }, { "name": "Teal 800", "value": "#00695c" }, { "name": "Teal 900", "value": "#004d40" } ], [ { "name": "Green 50", "value": "#e8f5e9" }, { "name": "Green 100", "value": "#c8e6c9" }, { "name": "Green 200", "value": "#a5d6a7" }, { "name": "Green 300", "value": "#81c784" }, { "name": "Green 400", "value": "#66bb6a" }, { "name": "Green 500", "value": "#4caf50" }, { "name": "Green 600", "value": "#43a047" }, { "name": "Green 700", "value": "#388e3c" }, { "name": "Green 800", "value": "#2e7d32" }, { "name": "Green 900", "value": "#1b5e20" } ], [ { "name": "Light Green 50", "value": "#f1f8e9" }, { "name": "Light Green 100", "value": "#dcedc8" }, { "name": "Light Green 200", "value": "#c5e1a5" }, { "name": "Light Green 300", "value": "#aed581" }, { "name": "Light Green 400", "value": "#9ccc65" }, { "name": "Light Green 500", "value": "#8bc34a" }, { "name": "Light Green 600", "value": "#7cb342" }, { "name": "Light Green 700", "value": "#689f38" }, { "name": "Light Green 800", "value": "#558b2f" }, { "name": "Light Green 900", "value": "#33691e" } ], [ { "name": "Lime 50", "value": "#f9fbe7" }, { "name": "Lime 100", "value": "#f0f4c3" }, { "name": "Lime 200", "value": "#e6ee9c" }, { "name": "Lime 300", "value": "#dce775" }, { "name": "Lime 400", "value": "#d4e157" }, { "name": "Lime 500", "value": "#cddc39" }, { "name": "Lime 600", "value": "#c0ca33" }, { "name": "Lime 700", "value": "#afb42b" }, { "name": "Lime 800", "value": "#9e9d24" }, { "name": "Lime 900", "value": "#827717" } ], [ { "name": "Yellow 50", "value": "#fffde7" }, { "name": "Yellow 100", "value": "#fff9c4" }, { "name": "Yellow 200", "value": "#fff59d" }, { "name": "Yellow 300", "value": "#fff176" }, { "name": "Yellow 400", "value": "#ffee58" }, { "name": "Yellow 500", "value": "#ffeb3b" }, { "name": "Yellow 600", "value": "#fdd835" }, { "name": "Yellow 700", "value": "#fbc02d" }, { "name": "Yellow 800", "value": "#f9a825" }, { "name": "Yellow 900", "value": "#f57f17" } ], [ { "name": "Amber 50", "value": "#fff8e1" }, { "name": "Amber 100", "value": "#ffecb3" }, { "name": "Amber 200", "value": "#ffe082" }, { "name": "Amber 300", "value": "#ffd54f" }, { "name": "Amber 400", "value": "#ffca28" }, { "name": "Amber 500", "value": "#ffc107" }, { "name": "Amber 600", "value": "#ffb300" }, { "name": "Amber 700", "value": "#ffa000" }, { "name": "Amber 800", "value": "#ff8f00" }, { "name": "Amber 900", "value": "#ff6f00" } ], [ { "name": "Orange 50", "value": "#fff3e0" }, { "name": "Orange 100", "value": "#ffe0b2" }, { "name": "Orange 200", "value": "#ffcc80" }, { "name": "Orange 300", "value": "#ffb74d" }, { "name": "Orange 400", "value": "#ffa726" }, { "name": "Orange 500", "value": "#ff9800" }, { "name": "Orange 600", "value": "#fb8c00" }, { "name": "Orange 700", "value": "#f57c00" }, { "name": "Orange 800", "value": "#ef6c00" }, { "name": "Orange 900", "value": "#e65100" } ], [ { "name": "Deep Orange 50", "value": "#fbe9e7" }, { "name": "Deep Orange 100", "value": "#ffccbc" }, { "name": "Deep Orange 200", "value": "#ffab91" }, { "name": "Deep Orange 300", "value": "#ff8a65" }, { "name": "Deep Orange 400", "value": "#ff7043" }, { "name": "Deep Orange 500", "value": "#ff5722" }, { "name": "Deep Orange 600", "value": "#f4511e" }, { "name": "Deep Orange 700", "value": "#e64a19" }, { "name": "Deep Orange 800", "value": "#d84315" }, { "name": "Deep Orange 900", "value": "#bf360c" } ], [ { "name": "Brown 50", "value": "#efebe9" }, { "name": "Brown 100", "value": "#d7ccc8" }, { "name": "Brown 200", "value": "#bcaaa4" }, { "name": "Brown 300", "value": "#a1887f" }, { "name": "Brown 400", "value": "#8d6e63" }, { "name": "Brown 500", "value": "#795548" }, { "name": "Brown 600", "value": "#6d4c41" }, { "name": "Brown 700", "value": "#5d4037" }, { "name": "Brown 800", "value": "#4e342e" }, { "name": "Brown 900", "value": "#3e2723" } ], [ { "name": "Grey 50", "value": "#fafafa" }, { "name": "Grey 100", "value": "#f5f5f5" }, { "name": "Grey 200", "value": "#eeeeee" }, { "name": "Grey 300", "value": "#e0e0e0" }, { "name": "Grey 400", "value": "#bdbdbd" }, { "name": "Grey 500", "value": "#9e9e9e" }, { "name": "Grey 600", "value": "#757575" }, { "name": "Grey 700", "value": "#616161" }, { "name": "Grey 800", "value": "#424242" }, { "name": "Grey 900", "value": "#212121" } ], [ { "name": "Blue Grey 50", "value": "#eceff1" }, { "name": "Blue Grey 100", "value": "#cfd8dc" }, { "name": "Blue Grey 200", "value": "#b0bec5" }, { "name": "Blue Grey 300", "value": "#90a4ae" }, { "name": "Blue Grey 400", "value": "#78909c" }, { "name": "Blue Grey 500", "value": "#607d8b" }, { "name": "Blue Grey 600", "value": "#546e7a" }, { "name": "Blue Grey 700", "value": "#455a64" }, { "name": "Blue Grey 800", "value": "#37474f" }, { "name": "Blue Grey 900", "value": "#263238" } ], [ { "name": "White", "value": "#ffffff" }, { "name": "Black", "value": "#000000" } ] ]; var BootstrapSwatches = [ [ { "name": "Gray Light", "value": "#777777" }, { "name": "Base", "value": "#000000" }, { "name": "Highlight Blue", "value": "#0055cc" }, { "name": "Dark Blue", "value": "#005580" }, { "name": "Success Text Green", "value": "#468847" }, { "name": "Orange", "value": "#f89406" }, { "name": "Red", "value": "#9d261d" }, { "name": "Purple", "value": "#7a43b6" } ], [ { "name": "Border Gray", "value": "#cccccc" }, { "name": "Gray Darker", "value": "#222222" }, { "name": "Primary Blue", "value": "#337ab7" }, { "name": "Info Blue", "value": "#2f96b4" }, { "name": "Green", "value": "#46a546" }, { "name": "Light Orange", "value": "#fbb450" }, { "name": "Danger Button Red", "value": "#bd362f" }, { "name": "Pink", "value": "#c3325f" } ], [ { "name": "Gray Lighter", "value": "#eeeeee" }, { "name": "Gray Dark", "value": "#333333" }, { "name": "Link Blue", "value": "#0088cc" }, { "name": "Info Light Blue", "value": "#5bc0de" }, { "name": "Success Button Green", "value": "#62c462" }, { "name": "Yellow", "value": "#ffc40d" }, { "name": "Error Text Red", "value": "#b94a48" }, { "name": "Danger Highlight Red", "value": "#ee5f5b" } ], [ { "name": "White", "value": "#ffffff" }, { "name": "Gray", "value": "#555555" }, { "name": "Accent Blue", "value": "#049cdb" }, { "name": "Info Lighter Blue", "value": "#d9edf7" }, { "name": "Success Background Green", "value": "#dff0d8" }, { "name": "Warning Background Brown", "value": "#f3edd2" }, { "name": "Warning Text Brown", "value": "#c09853" }, { "name": "Danger Background Red", "value": "#f2dede" } ] ]; var iOsSwatches = [ [ { "name": "Red", "value": "#ff3b30" }, { "name": "Orange", "value": "#ff9500" }, { "name": "Yellow", "value": "#ffcc00" }, { "name": "Green", "value": "#4cd964" }, { "name": "Teal Blue", "value": "#5ac8fa" }, { "name": "Blue", "value": "#007aff" }, { "name": "Purple", "value": "#5856d6" }, { "name": "Pink", "value": "#ff2d55" } ], [ { "name": "White", "value": "#ffffff" }, { "name": "Custom Gray", "value": "#efeff4" }, { "name": "Light Gray", "value": "#e5e5ea" }, { "name": "Light Gray 2", "value": "#d1d1d6" }, { "name": "Mid Gray", "value": "#c7c7cc" }, { "name": "Gray", "value": "#8e8e93" }, { "name": "Black", "value": "#000000" } ] ]; ACore["d" /* default */].install('swatchestable', SwatchesTable); /* harmony default export */ var colorpicker_SwatchesTable = (SwatchesTable); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/solidcolorpicker.css var solidcolorpicker = __webpack_require__(316); // EXTERNAL MODULE: ./node_modules/absol-acomp/css/spectrumcolor.css var spectrumcolor = __webpack_require__(318); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/SpectrumColor.js function SpectrumColor() { } SpectrumColor.tag = 'SpectrumColor'.toLowerCase(); SpectrumColor.render = function () { return Object(ACore["c" /* _ */])({ class:'as-spectrum-color', child: { class:'as-spectrum-color-sat', child:'.as-spectrum-color-val' } }); }; ACore["d" /* default */].install('spectrumcolor', SpectrumColor); /* harmony default export */ var colorpicker_SpectrumColor = (SpectrumColor); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/SolidColorPicker.js /** * @extends AElement * @constructor */ function SolidColorPicker() { if (!SolidColorPicker.css) { SolidColorPicker.css = new HTML5_DynamicCSS() .setProperty('.as-color-cell.as-solid-color-picker-selected.as-null .as-color-cell-value', 'background-image', `url("data:image/svg+xml;base64,${base64EncodeUnicode(red_cross.replace(/\$width/g, '58').replace(/\$height/g, '22'))}")`) .commit(); } this.swatchMode = new SCPSWatchMode(this); this.pickerMode = new SCPPickerMode(this); this.modes = [this.swatchMode, this.pickerMode]; this.modeCtrl = new SCPSWatchModeController(this); OOP["a" /* default */].drillProperty(this, this.modeCtrl, 'mode'); this.footerCtrl = new SCPFooterController(this); this.$opacity = this.footerCtrl.$opacity; this.$hex = this.footerCtrl.$hex; this.$selected = this.footerCtrl.$selected; this.historyCtrl = new SCPHistoryController(this); this.$swatchesName = this.modeCtrl.$swatchesName; this.on('keydown', this.eventHandler.keydown); this._lastEmitHex8 = ''; this.rawValue = new Color_Color([1, 0, 0, 1]); this._swatchesNames = ['Material Design', 'Moqups Classic', 'Bootstrap', 'iOS']; this._swatchesShortName = ['material', 'moqups', 'bootstrap', 'ios']; this._swatchesIcons = ['span.mdi.mdi-palette', 'span.mdi.mdi-material-design', 'span.mdi.mdi-bootstrap', 'span.mdi.mdi-apple-ios']; this._swatchesData = [MaterialSwatches, MoqupsClassicSwathes, BootstrapSwatches, iOsSwatches]; /** * @type {import('absol-acomp/js/BScroller').default} */ this.$swatchesTableCtn = this.swatchMode.$swatchesTableCtn; this.$selectedDot = Object(ACore["c" /* _ */])('.as-solid-color-picker-selected-dot');//share /** * @type {import('./SwatchesTable').default} */ this.$swatchesTable = this.swatchMode.$swatchesTable; this.$recentSwatchesTable = this.historyCtrl.$recentSwatchesTable; this.$attachhook = Object(ACore["c" /* _ */])('attachhook') .on('attached', this.eventHandler.attached).addTo(this); this.$spectrum = this.pickerMode.$spectrum; this.$spectrumDot = this.pickerMode.$spectrumDot; this.$alpha = this.pickerMode.$alpha; this.$submitBtn = Object(ACore["a" /* $ */])('.as-solid-color-picker-submit-btn', this) .on('click', this.notifySubmit.bind(this)); /** * @name hasOpacity * @type {boolean} * @memberof SolidColorPicker# */ /** * @name nullable * @type {boolean} * @memberof SolidColorPicker# */ /** * @name value * @type {Color|null} * @memberof SolidColorPicker# */ } SolidColorPicker.tag = 'SolidColorPicker'.toLowerCase(); SolidColorPicker.render = function () { return Object(ACore["c" /* _ */])({ attr: { tabindex: '1' }, extendEvent: ['change', 'sizechange', 'submit'], class: ['as-solid-color-picker', 'as-has-opacity'], child: [ { class: 'as-solid-color-picker-header', child: [ { class: 'as-solid-color-picker-mode-ctn', child: { tag: 'buttonarray', class: 'as-solid-color-picker-mode', props: { items: [ { text: 'SWATCHES', value: 'swatches' }, { text: 'PICKER', value: 'picker' }, ] } } }, ] }, { class: 'as-solid-color-picker-body', child: [ { class: ['as-solid-color-picker-swatches-select-ctn'], child: [ { tag: 'span', child: { text: 'Color Scheme: ' } }, { class: 'as-solid-color-picker-swatches-name', tag: 'a', child: { text: 'Material Design' } }, 'span.mdi.mdi-menu-down' ] }, { tag: 'bscroller', class: ['as-solid-color-picker-swatches-ctn'], child: { tag: 'swatchestable', props: { data: MaterialSwatches } } }, { tag: colorpicker_SpectrumColor, class: 'as-solid-color-picker-spectrum', child: '.as-solid-color-picker-spectrum-dot' }, { class: 'as-solid-color-picker-hue', child: '.as-solid-color-picker-hue-dot' }, { class: 'as-solid-color-picker-alpha', child: [ '.as-solid-color-picker-alpha-color', '.as-solid-color-picker-alpha-dot', ] }, { tag: 'swatchestable', class: 'as-solid-color-picker-near' }, { class: 'as-solid-color-picker-none-ctn', child: [ { tag: ColorCell, class: 'as-solid-color-picker-none-cell', props: { value: null } }, { child: { text: 'None' } } ] }, { class: 'as-solid-color-picker-recent-title', child: { text: 'RECENT COLOR' } }, { class: ['as-solid-color-picker-recent-swatches-ctn'], child: { tag: 'swatchestable', props: { data: MoqupsClassicSwathes.slice(0, 2) } } } ] }, { class: 'as-solid-color-picker-footer', child: [ { tag: ColorCell, class: 'as-solid-color-picker-selected' }, { tag: 'flexiconinput', class: 'as-solid-color-picker-color-hex', props: { value: 'ffffff', icon: '<svg viewBox="0 0 64 64" id="mq-icon-hex"><path d="M60 24v-6H46V4h-6v14H24V4h-6v14H4v6h14v16H4v6h14v14h6V46h16v14h6V46h14v-6H46V24h14zM40 40H24V24h16v16z"></path></svg>' } }, { tag: 'flexiconinput', class: 'as-solid-color-picker-color-opacity', props: { icon: 'span.mdi.mdi-opacity', unit: '%', value: 100 } }, { tag: 'flexiconbutton', class: 'as-solid-color-picker-submit-btn', props: { icon: 'span.mdi.mdi-check-bold' } } ] } ] }); }; SolidColorPicker._settingKey = "absol_solid_color_setting"; //only Hex6 SolidColorPicker.setting = { recentColors: ['#ffffff', '#00ffff', '#0000ff', '#ffffff', '#000000'] }; SolidColorPicker._loadSetting = function () { var setting = localStorage.getItem(SolidColorPicker._settingKey); try { setting = JSON.parse(setting); } catch (e) { setting = {}; } if (setting) { Object.assign(SolidColorPicker.setting, setting); } }; SolidColorPicker._loadSetting(); SolidColorPicker._writeSetting = function () { localStorage.setItem(SolidColorPicker._settingKey, JSON.stringify(SolidColorPicker.setting)); SolidColorPicker.updateInstancesSetting(); }; SolidColorPicker.pushInstances = function (elt) { var instances = SolidColorPicker.$instances; var aliveInstance = []; var instance; var found = false; while (instances.length > 0) { instance = instances.pop(); if (instance.isDescendantOf(document.body)) { aliveInstance.push(instance); } if (instance === elt) found = true; } while (aliveInstance.length > 0) { instances.push(aliveInstance.pop()); } if (!found) { instances.push(elt); } }; SolidColorPicker.updateInstancesSetting = function () { var instances = SolidColorPicker.$instances; var aliveInstance = []; var instance; while (instances.length > 0) { instance = instances.pop(); if (instance.isDescendantOf(document.body)) { aliveInstance.push(instance); } } while (aliveInstance.length > 0) { instance = aliveInstance.pop(); instances.push(instance); instance.reloadSetting(); } }; SolidColorPicker.$instances = []; SolidColorPicker.css = null; /** * @param {Color} color */ SolidColorPicker.pushColorHistory = function (color) { if (!color) return; var hex6Color = color.toString('hex6'); var recentColors = SolidColorPicker.setting.recentColors; var index = recentColors.indexOf(hex6Color); if (index >= 0) { recentColors.splice(index, 1); } recentColors.unshift(hex6Color); while (recentColors.length > 24) recentColors.pop(); setTimeout(SolidColorPicker._writeSetting.bind(SolidColorPicker), 1) }; SolidColorPicker.prototype.reloadSetting = function () { var recentColors = SolidColorPicker.setting.recentColors.slice(); var swatches = []; while (recentColors.length > 0) { swatches.push(recentColors.splice(0, 12)); } this.$recentSwatchesTable.data = swatches; this.swatchMode.viewValue(); }; SolidColorPicker.prototype.notifyCanBeChanged = function () { var value = this.value; var cHex8 = value ? this.rawValue.toHex8() : "null"; if (cHex8 !== this._lastEmitHex8) { this._lastEmitHex8 = cHex8; this.notifyChange(); } }; SolidColorPicker.prototype.notifyChange = function () { this.emit('change', { target: this, value: this.value, type: 'change' }, this); }; SolidColorPicker.prototype.notifySizeCanBeChanged = function () { var bound = this.getBoundingClientRect(); if (!this._lastSize || this._lastSize.width !== bound.width || this._lastSize.height !== bound.height) { this._lastSize = { width: bound.width, height: bound.height }; this.notifySizeChange(); } }; SolidColorPicker.prototype.notifySizeChange = function () { this.emit('sizechange', { target: this, size: this._lastSize, type: 'sizechange' }, this); }; SolidColorPicker.prototype.notifySubmit = function () { SolidColorPicker.pushColorHistory(this.rawValue); this.emit('submit', { target: this, value: this.rawValue, type: 'submit' }, this); }; SolidColorPicker.property = {}; /** * @type {SolidColorPicker} */ SolidColorPicker.property.value = { /** * * @param {Color} value */ set: function (value) { value = value || null; if (value && !value.toHex8) {//is try { value = Color_Color.parse(value + ''); } catch (e) { value = new Color_Color([0, 0, 0, 0]); } } this.rawValue = value; this.footerCtrl.viewValue(); this.pickerMode.viewValue(); this.swatchMode.viewValue(); // // this._lastEmitHex8 = value.toHex8(); // this._setValue(value); // this._setRGB(value.toHex6()); // this._setOpacityPercent(Math.round(value.rgba[3] * 100)); // // var hsba = Color.rgbaToHSBA(value.rgba); // this._setHue(hsba[0] * 360); // this._setSatBrightness(hsba[1] * 100, hsba[2] * 100); // this._updateNear(); }, get: function () { var nullable = this.nullable; var hasOpacity = this.hasOpacity; var value = this.rawValue || null;// if (!nullable && !value) value = new Color_Color([0, 0, 0, 0]); if (!hasOpacity && value) value.rgba[3] = 1; return value; } }; /** * @type {SolidColorPicker} */ SolidColorPicker.property.swatches = { set: function (value) { var index = this._swatchesShortName.indexOf(value); index = Math.max(index, 0); value = this._swatchesShortName[index]; if (this._swatches != value) { this._swatches = value; this.$swatchesTable.data = this._swatchesData[index]; this.$swatchesName.childNodes[0].data = this._swatchesNames[index]; } this.swatchMode.viewValue(); }, get: function () { return this._swatches; } }; SolidColorPicker.property.nullable = { set: function (value) { if (value) { this.addClass('as-nullable'); } else { this.removeClass('as-nullable'); } this.footerCtrl.viewValue(); this.pickerMode.viewValue(); this.swatchMode.viewValue(); }, get: function () { return this.hasClass('as-nullable'); } }; SolidColorPicker.property.hasOpacity = { /** * @this SolidColorPicker# * @param value */ set: function (value) { if (value) { this.addClass('as-has-opacity'); } else { this.removeClass('as-has-opacity'); } this.footerCtrl.viewValue(); this.swatchMode.viewValue(); this.pickerMode.viewValue(); }, get: function () { return this.hasClass('as-has-opacity'); } }; /** * @type {SolidColorPicker} */ SolidColorPicker.eventHandler = {}; SolidColorPicker.eventHandler.attached = function () { SolidColorPicker.pushInstances(this); this.reloadSetting(); }; SolidColorPicker.eventHandler.keydown = function (event) { if (event.key === 'Enter') { event.preventDefault(); event.target.blur(); this.notifySubmit(); } }; ACore["d" /* default */].install('solidcolorpicker', SolidColorPicker); /** * * @param {SolidColorPicker} elt * * @constructor */ function SCPHistoryController(elt) { this.elt = elt; this.$recentSwatchesTable = Object(ACore["a" /* $ */])('.as-solid-color-picker-recent-swatches-ctn swatchestable', this.elt) .on('presscell', this.elt.swatchMode.ev_pressCell.bind(this)); } /** * * @param {SolidColorPicker} elt * @constructor */ function SCPSWatchModeController(elt) { this.elt = elt; this.$swatchesName = Object(ACore["a" /* $ */])('.as-solid-color-picker-swatches-name', this.elt); js_QuickMenu.toggleWhenClick(this.$swatchesName, { anchor: [1, 6], getMenuProps: () => { return { extendClasses: 'as-solid-color-picker-swatches-name-menu', extendStyle: { 'font-size': this.elt.getComputedStyleValue('font-size') }, items: this.elt._swatchesNames.map((name, i) => { return { text: name, value: this.elt._swatchesShortName[i], icon: this.elt._swatchesIcons[i] }; }) } }, onSelect: (item) => { this.elt.swatches = item.value; } }); this.$mode = Object(ACore["a" /* $ */])('.as-solid-color-picker-mode', this.elt) .on('change', this.updateMode.bind(this)); this.viewingMode = null; this.updateMode(); } SCPSWatchModeController.prototype.updateMode = function () { var value = this.$mode.value; if (value === this.viewingMode) return; this.elt.removeClass('as-solid-color-picker-mode-' + this.viewingMode); this.viewingMode = value + ''; this.elt.addClass('as-solid-color-picker-mode-' + this.viewingMode); this.$mode.value = this.viewingMode; this.elt.notifySizeCanBeChanged(); }; Object.defineProperty(SCPSWatchModeController.prototype, 'mode', { set: function (value) { this.$mode.value = value; this.updateMode(); }, get: function () { return this.$mode.value; } }); /** * * @param {SolidColorPicker} elt * @constructor */ function SCPSWatchMode(elt) { this.elt = elt; /** * * @type {BScroller} */ this.$swatchesTableCtn = Object(ACore["a" /* $ */])('.as-solid-color-picker-swatches-ctn', this.elt); /** * @type {SwatchesTable} */ this.$swatchesTable = Object(ACore["a" /* $ */])('.as-solid-color-picker-swatches-ctn swatchestable', this.elt) .on('presscell', this.ev_pressCell.bind(this)); this.$noneCtn = Object(ACore["a" /* $ */])('.as-solid-color-picker-none-ctn', this.elt).on('click', this.ev_clickNone.bind(this)); } SCPPickerMode.prototype.name = "swatches"; SCPPickerMode.prototype.displayName = "SWATCHES"; SCPSWatchMode.prototype.ev_pressCell = function (event) { try { var value = Color_Color.parse(event.value + ''); var hC = value.getContrastYIQ(); hC.rgba[3] = 0.7; value.rgba[3] = this.elt.footerCtrl.opacity; this.elt.rawValue = value; this.elt.footerCtrl.viewValue(); this.elt.$selectedDot.addStyle('box-shadow', `inset 0px 0px 0.3em 0.125em ${hC.toString('rgba')}`); event.cellElt.addChild(this.elt.$selectedDot); this.$noneCtn.removeClass('as-selected'); this.elt.pickerMode.viewValue(); // } catch (e) { // this.$selectedDot.removeStyle('box-shadow'); // this.$hex.value = 'ffffff'; } this.elt.notifyCanBeChanged(); }; SCPSWatchMode.prototype.ev_clickNone = function (event) { this.elt.rawValue = null; this.viewValue(); this.elt.footerCtrl.viewValue(); this.elt.swatchMode.viewValue(); this.elt.pickerMode.viewValue(); this.elt.notifyCanBeChanged(); }; SCPSWatchMode.prototype.viewValue = function () { this.elt.$selectedDot.remove(); var cell, hC; /** * * @type {Color|null} */ var value = this.elt.value; if (!value) this.$noneCtn.addClass('as-selected'); else this.$noneCtn.removeClass('as-selected'); if (this.elt.modeCtrl.mode === 'swatches' && value) { cell = this.$swatchesTable.getCell(value.toString('hex6')); if (cell) this.$swatchesTableCtn.scrollInto(cell); } if (!cell && value) { cell = this.elt.$recentSwatchesTable.getCell(value.toString('hex6')); } if (cell) { hC = value.getContrastYIQ(); hC.rgba[3] = 0.7; this.elt.$selectedDot.addStyle('box-shadow', `inset 0px 0px 0.3em 0.125em ${hC.toString('rgba')}`); cell.addChild(this.elt.$selectedDot); } }; /** * * @param {SolidColorPicker} elt * @constructor */ function SCPPickerMode(elt) { this.elt = elt; this.$spectrum = Object(ACore["c" /* _ */])({ tag: 'hanger', elt: Object(ACore["a" /* $ */])('.as-solid-color-picker-spectrum', this.elt) }) .on('predrag', this.ev_spectrumDrag.bind(this)) .on('drag', this.ev_spectrumDrag.bind(this)); this.$hueDot = Object(ACore["a" /* $ */])('.as-solid-color-picker-hue-dot', this.elt); this.$spectrumDot = Object(ACore["a" /* $ */])('.as-solid-color-picker-spectrum-dot', this.elt); this.$alpha = Object(ACore["c" /* _ */])({ tag: 'hanger', elt: Object(ACore["a" /* $ */])('.as-solid-color-picker-alpha', this.elt) }) .on('predrag', this.ev_alphaDrag.bind(this)) .on('drag', this.ev_alphaDrag.bind(this)); this.$alphaDot = Object(ACore["a" /* $ */])('.as-solid-color-picker-alpha-dot', this.elt); this.$hue = Object(ACore["c" /* _ */])({ tag: 'hanger', elt: Object(ACore["a" /* $ */])('.as-solid-color-picker-hue', this.elt) }) .on('predrag', this.ev_hueDrag.bind(this)) .on('drag', this.ev_hueDrag.bind(this)); this.$near = Object(ACore["a" /* $ */])('.as-solid-color-picker-near', this.elt) .on('presscell', this.ev_nearPressCell.bind(this)); this._hue = 0; this._sat = 1; this._brightness = 1; } SCPPickerMode.prototype.name = 'picker'; SCPPickerMode.prototype.displayName = 'PICKER'; SCPPickerMode.prototype.viewValue = function () { var value = this.elt.value || new Color_Color([0, 0, 0, 1]); var hsba = Color_Color.rgbaToHSBA(value.rgba); this._setHue(hsba[0] * 360); this._setSatBrightness(hsba[1] * 100, hsba[2] * 100); this._updateOpacity(); this._updateNear(); }; SCPPickerMode.prototype._updateSpectrumDot = function () { var value = this.elt.value || new Color_Color([0, 0, 0, 1]); var dotColor = value.getContrastYIQ(); dotColor.rgba[3] = 0.7; this.$spectrumDot.addStyle({ bottom: 'calc(' + this._brightness + '% - 0.5em)', left: 'calc(' + this._sat + '% - 0.5em)', 'box-shadow': 'inset 0px 0px 0.3em 0.125em ' + dotColor.toString() }); }; SCPPickerMode.prototype._updateNear = function () { var value = this.elt.value || new Color_Color([0, 0, 0, 1]); var hsba = Color_Color.rgbaToHSBA(value.rgba); var sat = hsba[1]; var hue = hsba[0]; var brightness = hsba[2]; var whiterColors = Array(7).fill(null).map(function (u, i) { return Color_Color.fromHSB(hue, sat * (7 - i) / 8, brightness); }); var darkerColors = Array(7).fill(null).map(function (u, i) { return Color_Color.fromHSB(hue, sat, brightness * (7 - i) / 8); }); var hueNearColors = [-5, -3, -2, 1, 2, 3, 5].map(function (u) { var nHue = hue + u / 40; if (nHue > 1) nHue -= 1; else if (nHue < 0) nHue += 1; return Color_Color.fromHSB(nHue, sat, brightness); }); this.$near.data = [whiterColors, darkerColors, hueNearColors]; }; SCPPickerMode.prototype._setHue = function (hue) { this._hue = hue; var spectrumColor = Color_Color.fromHSB(hue / 360, 1, 1); var hueDotColor = spectrumColor.getContrastYIQ(); hueDotColor.rgba[3] = 0.7; this.$hueDot.addStyle({ 'box-shadow': 'inset 0px 0px 0.3em 0.125em ' + hueDotColor.toString(), left: 'calc(' + (hue / 3.6) + '% - 0.5em)' }) this.$spectrum.addStyle('background-color', spectrumColor.toString()); this._updateSpectrumDot(); }; SCPPickerMode.prototype._setSatBrightness = function (sat, brightness) { this._sat = sat; this._brightness = brightness; this._updateSpectrumDot(); }; SCPPickerMode.prototype._updateOpacity = function () { this.$alphaDot.addStyle('left', 'calc(' + (this.elt.footerCtrl.opacity * 100) + '% - 0.5em)'); }; SCPPickerMode.prototype.ev_spectrumDrag = function (event) { event.preventDefault(); var sBound = this.$spectrum.getBoundingClientRect(); var brightness = (sBound.bottom - event.clientY) * 100 / sBound.height; brightness = Math.max(0, Math.min(100, Math.round(brightness))); var sat = (event.clientX - sBound.left) * 100 / sBound.width; sat = Math.max(0, Math.min(100, Math.round(sat))); this.elt.rawValue = Color_Color.fromHSBA(this._hue / 360, sat / 100, brightness / 100, this.elt.footerCtrl.opacity); this._setSatBrightness(sat, brightness); this._updateNear(); this.elt.footerCtrl.viewValue(); this.elt.swatchMode.viewValue(); this.elt.notifyCanBeChanged(); }; SCPPickerMode.prototype.ev_alphaDrag = function (event) { event.preventDefault(); var aBound = this.$alpha.getBoundingClientRect(); var opacity = (event.clientX - aBound.left) * 100 / aBound.width; opacity = Math.max(0, Math.min(100, Math.round(opacity))); var color = this.elt.value || new Color_Color([0, 0, 0, 0]); color.rgba[3] = opacity / 100; this.elt.rawValue = color; this.elt.footerCtrl.viewValue(); this._updateOpacity(); // this._setOpacityPercent(opacity); this.elt.notifyCanBeChanged(); }; SCPPickerMode.prototype.ev_hueDrag = function (event) { event.preventDefault(); var hBound = this.$hue.getBoundingClientRect(); var hue = (event.clientX - hBound.left) * 360 / hBound.width; hue = Math.max(0, Math.min(360, Math.round(hue))); this.elt.rawValue = Color_Color.fromHSBA(hue / 360, this._sat / 100, this._brightness / 100, this.elt.footerCtrl.opacity); this._setHue(hue); this.elt.footerCtrl.viewValue(); this.elt.swatchMode.viewValue(); this._updateNear(); this.elt.notifyCanBeChanged(); }; SCPPickerMode.prototype.ev_nearPressCell = function (event) { var value = event.value.clone(); value.rgba[3] = this.elt.footerCtrl.opacity; this.elt.rawValue = value; this.viewValue(); this.elt.footerCtrl.viewValue(); this.elt.pickerMode.viewValue(); }; /** * * @param {SolidColorPicker} elt * @constructor */ function SCPFooterController(elt) { this.elt = elt; this.$selected = Object(ACore["a" /* $ */])('.as-solid-color-picker-selected', this.elt); this.$opacity = Object(ACore["a" /* $ */])('.as-solid-color-picker-color-opacity', this.elt) .on('change', this.ev_opacityChange.bind(this)) .on('keyup', this.ev_opacityKeyUp.bind(this)); this.$hex = Object(ACore["a" /* $ */])('.as-solid-color-picker-color-hex', this.elt) .on('keyup', this.ev_hexKeyUp.bind(this)) .on('change', this.ev_hexChange.bind(this)); } SCPFooterController.prototype.ev_opacityChange = function (event) { var color = this.elt.value; var opacityTxt = color ? Math.round(color.rgba[3] * 100) : '100'; if (color && this.$opacity.value !== opacityTxt) { this.$opacity.value = opacityTxt; } }; SCPFooterController.prototype.ev_opacityKeyUp = function (event) { var opacity = parseFloat(this.$opacity.value); if (!isNaN(opacity)) { opacity = Math.round(Math.max(0, Math.min(opacity, 100))); var color = this.elt.value || new Color_Color(0, 0, 0, 1); color.rgba[3] = opacity / 100; this.elt.rawValue = color; this.elt.pickerMode.viewValue(); this.$selected.value = color; this.elt.notifyCanBeChanged(); } }; SCPFooterController.prototype.ev_hexKeyUp = function (event) { // var prevValue = this.elt.value; var value; var nullable = this.elt.nullable; var hex = this.$hex.value.trim(); try { if (nullable && hex.length === 0) { value = null; } else { value = Color_Color.parse('#' + hex); } } catch (e) { // console.error(e); } if (!value && !nullable) return; if (value) value.rgba[3] = this.opacity; this.elt.rawValue = value; this.$selected.value = value; this.elt.pickerMode.viewValue(); this.elt.swatchMode.viewValue(); this.elt.notifyCanBeChanged(); }; SCPFooterController.prototype.ev_hexChange = function (event) { var value = this.elt.value; if (value) this.$hex.value = value.toHex6(); }; SCPFooterController.prototype.viewValue = function () { var value = this.elt.value; var hasOpacity = this.elt.hasOpacity; this.$selected.value = value; this.$hex.value = value ? (value.toHex6()) : ''; if (hasOpacity && value) { this.$opacity.value = Math.round(value.rgba[3] * 100) + ''; } else this.$opacity.value = '100'; }; Object.defineProperty(SCPFooterController.prototype, 'opacity', { get: function () { if (!this.elt.hasOpacity) return 1; var opFromText = parseFloat(this.$opacity.value) / 100; if (isRealNumber(opFromText)) { opFromText = Math.max(0, Math.min(opFromText, 1)); return opFromText; } var value = this.elt.value; if (!value) return 1; return value.rgba[3]; } }); /* harmony default export */ var colorpicker_SolidColorPicker = (SolidColorPicker); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/FontColorButton.js /** * @extends AElement * @constructor */ function FontColorButton() { this.$value = Object(ACore["a" /* $ */])('.as-font-color-button-value', this); this.$primary = Object(ACore["a" /* $ */])('.as-ribbon-split-button-primary', this).on('click', () => { this.emit('submit', { type: 'submit', target: this }, this); }); this.$extend = Object(ACore["a" /* $ */])('.as-ribbon-split-button-extend', this); new FCBPickerController(this); /** * @type {string} * @name value * @memberof FontColorButton# */ } FontColorButton.tag = 'FontColorButton'.toLowerCase(); FontColorButton.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['submit', 'change'], attr: { 'tabindex': '0' }, class: ['as-ribbon-split-button'], child: { class: 'as-ribbon-split-button-content', child: [ { tag: 'button', attr: { 'tabindex': '-1' }, class: 'as-ribbon-split-button-primary', child: { tag: FontColorIcon, class: 'as-font-color-button-value', style: { width: '18px', height: '18px' } } }, { tag: 'button', attr: { 'tabindex': '-1' }, class: 'as-ribbon-split-button-extend', child: ['span.as-ribbon-split-button-text', 'span.mdi.mdi-chevron-down'] } ] } }); }; FontColorButton.property = {}; FontColorButton.property.value = { set: function (value) { this.$value.value = value; }, get: function () { return this.$value.value; } }; /* harmony default export */ var colorpicker_FontColorButton = (FontColorButton); /** * * @param {FontColorButton} elt * @constructor */ function FCBPickerController(elt) { this.elt = elt; this['ev_clickExtend'] = this['ev_clickExtend'].bind(this); this['ev_clickOut'] = this['ev_clickOut'].bind(this); this['ev_submit'] = this['ev_submit'].bind(this); this['ev_change'] = this['ev_change'].bind(this); this.elt.$extend.on('click', this.ev_clickExtend); } FCBPickerController.prototype.ev_clickExtend = function () { this.openPicker(); }; FCBPickerController.prototype.ev_clickOut = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.share.$picker, event)) return; this.closePicker(); }; FCBPickerController.prototype.ev_submit = function () { var prevValue = this.elt.value; this.elt.value = this.share.$picker.value; this.closePicker(); if (prevValue !== this.elt.value) { this.elt.emit('change', { type: 'change', target: this.elt }, this.elt); } this.elt.emit('submit', { type: 'submit', target: this.elt }, this.elt); }; FCBPickerController.prototype.ev_change = function () { var prevValue = this.elt.value; this.elt.value = this.share.$picker.value; if (prevValue !== this.elt.value) { this.elt.emit('change', { type: 'change', target: this.elt }, this.elt); } }; FCBPickerController.prototype.share = { $picker: null, $follower: null, holder: null }; FCBPickerController.prototype.prepare = function () { if (this.share.$follower) return; this.share.$picker = Object(ACore["c" /* _ */])({ tag: colorpicker_SolidColorPicker, props: { hasOpacity: false } }); this.share.$follower = Object(ACore["c" /* _ */])({ tag: js_Follower, child: this.share.$picker, props: { anchor: [2, 1, 6, 5, 9, 11] } }); }; FCBPickerController.prototype.openPicker = function () { this.prepare(); if (this.share.holder) this.share.holder.closePicker(); this.share.holder = this; this.share.$follower.addStyle('visibility', 'hidden'); this.share.$follower.addTo(document.body); this.share.$follower.followTarget = this.elt.$extend; this.share.$follower.sponsorElement = this.elt.$extend; this.share.$follower.addStyle('z-index', findMaxZIndex(this.elt.$extend) + 70); this.share.$follower.removeStyle('visibility'); this.elt.$extend.off('click', this.ev_clickExtend); this.share.$picker.on('submit', this.ev_submit); this.share.$picker.on('change', this.ev_change); this.share.$picker.value = this.elt.value; setTimeout(() => { document.addEventListener('click', this.ev_clickOut); }, 5); }; FCBPickerController.prototype.closePicker = function () { if (this.share.holder !== this) return; this.share.holder = null; document.removeEventListener('click', this.ev_clickOut); this.share.$picker.off('submit', this.ev_submit); this.share.$picker.off('change', this.ev_change); setTimeout(() => { this.elt.$extend.on('click', this.ev_clickExtend); }, 5) this.share.$follower.followTarget = null; this.share.$follower.remove(); }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/TableOfTextInput.js /** * @typedef TEIDataRow */ /** * @typedef TEIDataBody * @property {TEIDataRow[]} rows */ /** * @typedef TEIData * @property {TEIDataBody} body */ /** * @typedef TEIDataCell * @property {{color?:string, fontSize?: number, fontWeight?: ("bool"|"normal")}} [style] * @property {string} value */ /** * @extends AElement * @constructor */ function TableOfTextInput() { /** * * @type {TEITable} */ this.teiTable = new TEITable(this); /** * @name data * @type {TEICell[]} */ OOP["a" /* default */].drillProperty(this, this.teiTable, ['minCol', 'maxCol', 'data', 'excelRichTextRows']); } /** * * @param name * @param value * @returns {this} */ TableOfTextInput.prototype.addStyle = function (name, value) { if (name === 'display') { if ((typeof value === "string") && value.indexOf('inline')) { this.addClass('as-inline'); } else { this.removeClass('as-inline'); } return this; } else return AElement["a" /* default */].prototype.addStyle.apply(this, arguments); }; TableOfTextInput.tag = 'TableOfTextInput'.toLowerCase(); TableOfTextInput.render = function () { return Object(ACore["c" /* _ */])({ class: 'as-table-of-text-input-wrapper', child: [ { class: 'as-table-of-text-input-content-ctn', child: { tag: 'table', extendEvent: ['change'], class: 'as-table-of-text-input', child: [ { tag: 'tbody', child: [] } ] } } ] }); }; /* harmony default export */ var js_TableOfTextInput = (TableOfTextInput); ACore["d" /* default */].install(TableOfTextInput); /** * * @param {TableOfTextInput} wrapper * @constructor */ function TEITable(wrapper) { this._minCol = 3; this._maxCol = 3; this._minRow = 1; this._maxRow = 9; this.wrapper = wrapper; this.elt = Object(ACore["a" /* $ */])('table', wrapper); this.$body = Object(ACore["a" /* $ */])('tbody', this.elt); /** * * @type {TEIRow[]} */ this.rows = []; this.formatTool = new TEIFormatTool(this); } TEITable.prototype.defaultData = { rows: [ { cells: [ { value: '' }, { value: '' }, { value: '' } ] } ] } TEITable.prototype.notifyChange = function (data) { this.elt.emit('change', Object.assign({ type: 'change', target: this }, data), this.elt); }; TEITable.prototype.calcCellPos = function () { var n = this.rows[0].cells.reduce((ac, cell) => ac + cell.colspan, 0); var m = this.rows.length; var heights = Array(n).fill(0); var row, i, j, k; var cell, colspan, rowspan, colIdx; for (i = 0; i < m; ++i) { row = this.rows[i]; colIdx = 0; for (j = 0; j < row.cells.length; ++j) { cell = row.cells[j]; while (heights[colIdx] > i) colIdx++; colspan = cell.colspan; rowspan = cell.rowspan; cell.td.attr('data-col-idx', colIdx); for (k = 0; k < colspan; ++k) { heights[colIdx] = i + rowspan; } } } }; Object.defineProperties(TEITable.prototype, { minCol: { /** * @this TableOfTextInput * @param value */ set: function (value) { if (!isNaturalNumber(value)) value = 1; value = Math.max(1, Math.floor(value)); this._minCol = value; }, get: function () { return this._minCol; } }, maxCol: { /** * @this TableOfTextInput * @param value */ set: function (value) { if (!isNaturalNumber(value)) value = 20; value = Math.min(20, Math.max(1, Math.floor(value))); this._maxCol = value; }, get: function () { return Math.max(this._minCol, this._maxCol); } }, minRow: { /** * @this TableOfTextInput * @param value */ set: function (value) { if (!isNaturalNumber(value)) value = 1; value = Math.max(1, Math.floor(value)); this._minRow = value; }, get: function () { return this._minRow; } }, maxRow: { /** * @this TableOfTextInput * @param value */ set: function (value) { if (!isNaturalNumber(value)) value = 20; value = Math.min(20, Math.max(1, Math.floor(value))); this._maxRow = value; }, get: function () { return Math.max(this._minRow, this._maxRow); } }, data: { set: function (value) { if (typeof value === "string") { value = { rows: [ { cells: [{ value: value }] } ] }; } value = copyJSVariable(value || this.defaultData); if (!(value.rows instanceof Array)) value.rows = copyJSVariable(this.defaultData.rows); value.rows.forEach(row => { if (!(row.cells instanceof Array)) { row.cells = [] } if (row.cells.length === 0) { row.cells.push({ value: '' }); } }); this.rows.forEach(row => row.tr.remove()); this.rows = value.rows.map(rowData => new TEIRow(this, rowData)); this.$body.addChild(this.rows.map(row => row.tr)); this.calcCellPos(); }, get: function () { return { rows: this.rows.map(row => row.data) } } }, excelRichTextRows: { get: function () { var cBound = this.elt.getBoundingClientRect(); var placeHolderElt; var renderSpace; if (!cBound.width || !cBound.height) { if (this.parentElement) { placeHolderElt = Object(ACore["c" /* _ */])({ style: { display: 'none' } }); this.selfReplace(placeHolderElt); } renderSpace = Object(ACore["c" /* _ */])({ style: { position: 'fixed', zIndex: -1000, visibility: 'hidden', opacity: 0 } }).addTo(document.body); } var textNodes = getTextNodesIn(this.elt).filter(t => !!t.data); var lineHeight = 25.662879943847656; cBound = this.elt.getBoundingClientRect(); var y0 = cBound.top + 4 + 3.2348480224609375; var textInfos = textNodes.reduce((ac, txt) => { var cell = cellOf(txt); var style = cell.style.export(); var bounds = getTextNodeBounds(txt); bounds.forEach(bound => { var excelData = { text: bound.text.replace(/\n+$/, ''), }; if (excelData.text.trim().length === 0) return; excelData.font = { 'name': 'Calibri' }; if (style.color) { excelData.font.color = { argb: 'ff' + Color_Color.parse(style.color).toString('hex6').substring(1).toLowerCase() }; } if (style.fontWeight === 'bold') { excelData.font.bold = true; } if (style.fontStyle === 'italic') { excelData.font.italic = true; } if (style.fontSize) { excelData.font.size = style.fontSize; } ac.push({ rowIdx: Math.round((bound.rect.y - y0) / lineHeight), bound: bound.rect, text: excelData.text, excelData: excelData }); }); return ac; }, []); textInfos.sort((a, b) => { if (a.rowIdx === b.rowIdx) { return a.bound.x - b.bound.x; } else { return a.bound.y - b.bound.y; } }); var richTextRows = textInfos.reduce((ac, cr, i) => { var rowIdx = cr.rowIdx; while (ac.richTextRows.length <= rowIdx) { ac.x = ac.x0; ac.richTextRows.push([]); } var marginTextL = Math.floor((cr.bound.x - ac.x) / 3.314239501953125); if (marginTextL > 0) { ac.richTextRows[ac.richTextRows.length - 1].push({ text: ' '.repeat(marginTextL), font: { 'name': 'Calibri' } }); } ac.richTextRows[ac.richTextRows.length - 1].push(cr.excelData); ac.x = cr.bound.x + cr.bound.width; ac.y = cr.bound.y; return ac; }, { richTextRows: [], x: cBound.left + 5, x0: cBound.left + 5, }).richTextRows; if (placeHolderElt) { placeHolderElt.selfReplace(this); } if (renderSpace) renderSpace.remove(); return richTextRows; } } }); /** * * @param {TEITable} table * @param data * @constructor */ function TEIRow(table, data) { data = data || {}; if (!(data.cells instanceof Array)) data.cells = []; this.table = table; this.tr = Object(ACore["c" /* _ */])('tr'); /** * * @type {TEICell[]} */ this.cells = []; this.data = data; } Object.defineProperty(TEIRow.prototype, 'data', { set: function (data) { this.cells = data.cells.map(cellData => new TEICell(this, cellData)); this.tr.clearChild().addChild(this.cells.map(cell => cell.td)); }, get: function () { return { cells: this.cells.map(cell => cell.data) } } }); var cellOf = node => { while (node) { if (node.teiCell) return node.teiCell; node = node.parentElement; } return null; } /** * * @param {TEIRow} row * @param {TEIDataCell} data * @constructor */ function TEICell(row, data) { this.row = row; this.table = row.table; this.td = Object(ACore["c" /* _ */])({ tag: 'td', class: 'as-table-of-text-input-cell', on: { click: (event) => { if (event.target === this.td) this.focus(); }, }, child: { tag: js_PreInput, attr: { spellcheck: 'false' }, props: { teiCell: this }, on: { focus: () => { this.table.formatTool.onFocus(this); }, blur: () => { this.table.formatTool.onBlur(this); }, change: (event) => { if (event.originalEvent) this.table.elt.emit('change', { type: 'change', target: this.table, cell: this }, this.table.elt); } } } }); this.$input = Object(ACore["a" /* $ */])('preinput', this.td); this.data = data; this.style = new AppPattern_Attributes(this); Object.assign(this.style, data.style); this.style.loadAttributeHandlers(this.styleHandlers); } TEICell.prototype.focus = function () { this.$input.focus(); var textNode = getTextNodesIn(this.$input).pop(); if (!textNode) return; var range = document.createRange(); range.setStart(textNode, textNode.data.length); range.setEnd(textNode, textNode.data.length); var sel = getSelection(); sel.removeAllRanges(); sel.addRange(range); }; TEICell.prototype.remove = function () { this.td.remove(); var idx = this.table.cells.indexOf(this); if (idx >= 0) this.table.cells.splice(idx, 1); }; TEICell.prototype.styleHandlers = { fontWeight: { set: function (value) { if (value === 'bold') { this.td.addClass('as-bold'); } else { this.td.removeClass('as-bold'); } }, get: function () { if (this.td.hasClass('as-bold')) return 'bold'; return 'normal'; }, export: function () { if (this.td.hasClass('as-bold')) return 'bold'; return undefined; } }, fontStyle: { set: function (value) { if (value === 'italic') { this.td.addClass('as-italic'); } else { this.td.removeClass('as-italic'); } }, get: function () { if (this.td.hasClass('as-italic')) return 'italic'; return 'normal'; }, export: function () { if (this.td.hasClass('as-italic')) return 'italic'; return undefined; } }, fontSize: { set: function (value) { if (typeof value === "string") value = parseInt(value.replace(/[^0-9.]/g, ''), 10); if (!isRealNumber(value)) value = 11; value = Math.abs(value); value = value || 11; this.td.addStyle('font-size', value + 'pt'); return value; }, get: function (ref) { var value = ref.get(); return value || 11; }, export: function (ref) { var value = ref.get(); if (value === 11) value = undefined; return value || undefined; } }, color: { set: function (value) { try { var cValue = Color_Color.parse(value); value = cValue.toString('hex6'); } catch (err) { value = '#000000'; } this.td.addStyle('color', value); return value; }, get: function (ref) { return ref.get() || '#000000'; }, export: function (ref) { var value = ref.get(); if (value === '#000000') value = undefined; return value || undefined; } }, textAlign: { set: function (value) { if (!['left', 'right', 'center'].includes(value)) value = 'left'; this.td.addStyle('text-align', value); return value; }, get: function (ref) { var value = ref.get(); return value || 'left'; }, export: function (ref) { var value = ref.get(); if (value === 'left') value = undefined; return value; } } }; Object.defineProperty(TEICell.prototype, "data", { set: function (value) { value = value || {}; if (typeof value === "string") value = { value: value }; if (typeof value.value === "string") { this.$input.value = value.value; } else { this.$input.value = ""; } }, get: function () { var res = {}; res.value = this.$input.value; res.style = this.style.export(); Object.keys(res.style).forEach(key => { if (res.style[key] === undefined) delete res.style[key]; }); return res; } }); Object.defineProperties(TEICell.prototype, { colspan: { set: function (value) { }, get: function () { var value = this.td.attr('colspan') || '1'; value = parseInt(value); if (isNaturalNumber(value)) return value; return 1; } }, rowspan: { set: function (value) { }, get: function () { var value = this.td.attr('rowspan') || '1'; value = parseInt(value); if (isNaturalNumber(value)) return value; return 1; } }, colpos: { get: function () { } }, rowpos: { get: function () { } } }); function TEIFormatTool(table) { Object.keys(TEIFormatTool.prototype).filter(k => k.startsWith('ev_')).forEach(k => this[k] = this[k].bind(this)); this.table = table; this.table.elt.on('keydown', this.ev_keydown) this.$tool = Object(ACore["c" /* _ */])({ class: 'as-table-of-text-input-tool', child: [ { tag: 'numberinput', class: 'as-table-of-text-input-tool-font-size', props: { value: 14 }, attr: { title: 'Ctrl+< | Ctrl+>' } }, { tag: 'button', attr: { title: 'Ctrl+B' }, class: ['as-transparent-button', 'as-table-of-text-input-tool-bold'/*, 'as-checked'*/], child: 'span.mdi.mdi-format-bold' }, { tag: 'button', attr: { title: 'Ctrl+I' }, class: ['as-transparent-button', 'as-table-of-text-input-tool-italic'], child: 'span.mdi.mdi-format-italic' }, { tag: colorpicker_FontColorButton }, { tag: 'button', class: ['as-transparent-button', 'as-table-of-text-input-tool-text-align'], child: 'span.mdi.mdi-format-align-left', attr: { 'data-align': 'left', title: 'Ctrl+L' } }, { tag: 'button', class: ['as-transparent-button', 'as-table-of-text-input-tool-text-align'], child: 'span.mdi.mdi-format-align-center', attr: { 'data-align': 'center', title: 'Ctrl+E' } }, { tag: 'button', class: ['as-transparent-button', 'as-table-of-text-input-tool-text-align'], child: 'span.mdi.mdi-format-align-right', attr: { 'data-align': 'right', title: 'Ctrl+R' } }, { tag: 'button', class: ['as-transparent-button', 'as-table-of-text-input-tool-command'], child: 'span.mdi.mdi-table-column-plus-before', attr: { 'data-command': 'left' } }, { tag: 'button', class: ['as-transparent-button', 'as-table-of-text-input-tool-command'], child: 'span.mdi.mdi-table-column-plus-after', attr: { 'data-command': 'right' } }, { tag: 'button', class: ['as-transparent-button', 'as-table-of-text-input-tool-command'], child: 'span.mdi.mdi-table-row-plus-before', attr: { 'data-command': 'above' } }, { tag: 'button', class: ['as-transparent-button', 'as-table-of-text-input-tool-command'], child: 'span.mdi.mdi-table-row-plus-after', attr: { 'data-command': 'bellow' } }, { tag: 'button', class: ['as-transparent-button', 'as-table-of-text-input-tool-command', 'as-variant-danger'], attr: { 'data-command': 'removeCol' }, child: { tag: 'span', class: ['mdi', 'mdi-table-column-remove'], }, }, { tag: 'button', class: ['as-transparent-button', 'as-table-of-text-input-tool-command', 'as-variant-danger'], attr: { 'data-command': 'removeRow' }, child: { tag: 'span', class: ['mdi', 'mdi-table-row-remove'], }, }, ] }); this.table.wrapper.addChildBefore(this.$tool, this.table.wrapper.firstChild); this.$fontSize = Object(ACore["a" /* $ */])('.as-table-of-text-input-tool-font-size', this.$tool).on('change', this.ev_fontSizeChange); this.$bold = Object(ACore["a" /* $ */])('.as-table-of-text-input-tool-bold', this.$tool).on('click', this.ev_clickBold); this.$italic = Object(ACore["a" /* $ */])('.as-table-of-text-input-tool-italic', this.$tool).on('click', this.ev_clickItalic); this.$fontColor = Object(ACore["a" /* $ */])(colorpicker_FontColorButton.tag, this.$tool).on('submit', this.ev_fontColorSubmit); this.$alignBtns = Object(ACore["b" /* $$ */])('.as-table-of-text-input-tool-text-align', this.$tool) .reduce((ac, btn) => { var value = btn.attr('data-align'); btn.on('click', ev => { this.ev_clickAlign(value, ev); }); ac[value] = btn; return ac; }, {}); this.$commandBtns = Object(ACore["b" /* $$ */])('.as-table-of-text-input-tool-command', this.$tool) .reduce((ac, btn) => { var value = btn.attr('data-command'); btn.on('click', ev => { this.commands[value].exec.call(this); // this.ev_clickInsert(value, ev); }); ac[value] = btn; return ac; }, {}); // this.$removeBtn = $('.as-table-of-text-input-tool-remove-col', this.$tool) // .on('click', this.ev_clickRemove); this.focusCell = null; this.table.elt.on('change', () => this.updateAvailableCommands()); } TEIFormatTool.prototype.commands = { left: { /** * @this TEIFormatTool */ available: function () { return this.focusCell.row.cells.length < this.table.maxCol; }, /** * @this TEIFormatTool */ exec: function () { var idx = this.focusCell.row.cells.indexOf(this.focusCell); this.table.rows.forEach(row => { var newCell = new TEICell(row, { value: '' }); row.tr.addChildBefore(newCell.td, row.cells[idx].td); row.cells.splice(idx, 0, newCell); }); this.table.elt.emit('change', { type: 'change', target: this.table }, this.table.elt); } }, right: { /** * @this TEIFormatTool */ exec: function () { var idx = this.focusCell.row.cells.indexOf(this.focusCell); this.table.rows.forEach(row => { var newCell = new TEICell(row, { value: '' }); row.tr.addChildAfter(newCell.td, row.cells[idx].td); row.cells.splice(idx + 1, 0, newCell); }); this.table.elt.emit('change', { type: 'change', target: this.table }, this.table.elt); } }, above: { /** * @this TEIFormatTool */ available: function () { return this.table.rows.length < this.table.maxRow; }, /** * @this TEIFormatTool */ exec: function () { var colN = this.table.rows[0].cells.length; var focusRow = this.focusCell.row; var idx = this.table.rows.indexOf(focusRow); var newRow = new TEIRow(this.table, { cells: Array(colN).fill().map(() => ({ value: '' })) }); this.table.rows.splice(idx, 0, newRow); this.table.$body.addChildBefore(newRow.tr, focusRow.tr); this.table.notifyChange({ newRow: newRow }); } }, bellow: { /** * @this TEIFormatTool */ exec: function () { var colN = this.table.rows[0].cells.length; var focusRow = this.focusCell.row; var idx = this.table.rows.indexOf(focusRow); var newRow = new TEIRow(this.table, { cells: Array(colN).fill().map(() => ({ value: '' })) }); this.table.rows.splice(idx + 1, 0, newRow); this.table.$body.addChildAfter(newRow.tr, focusRow.tr); this.table.notifyChange({ newRow: newRow }); } }, removeCol: { /** * @this TEIFormatTool */ available: function () { return this.table.minCol < this.focusCell.row.cells.length; }, /** * @this TEIFormatTool */ exec: function () { var focusRow = this.focusCell.row; var idx = focusRow.cells.indexOf(this.focusCell); this.table.rows.forEach(row => { var cell = row.cells[idx]; cell.td.remove(); row.cells.splice(idx, 1); }); this.table.elt.emit('change', { type: 'change', target: this.table }, this.table.elt); var cellNext = focusRow.cells[idx - 1] || focusRow.cells[idx]; if (cellNext) cellNext.focus(); } }, removeRow: { /** * @this TEIFormatTool */ available: function () { return this.table.minRow < this.table.rows.length; }, /** * @this TEIFormatTool */ exec: function () { var focusRow = this.focusCell.row; var idx = this.table.rows.indexOf(focusRow); var colIdx = focusRow.cells.indexOf(this.focusCell); focusRow.tr.remove(); this.table.rows.splice(idx, 1); this.table.elt.emit('change', { type: 'change', target: this.table }, this.table.elt); var nextRow = this.table.rows[idx] || this.table.rows[idx - 1]; var nexCell; if (nextRow) { nexCell = nextRow.cells[colIdx]; if (nexCell) nexCell.focus(); } } } }; TEIFormatTool.prototype.commands.right.available = TEIFormatTool.prototype.commands.left.available; TEIFormatTool.prototype.commands.bellow.available = TEIFormatTool.prototype.commands.above.available; TEIFormatTool.prototype.onFocus = function (cell) { if (this.focusCell !== cell && this.focusCell) { this.focusCell.td.removeClass('as-focus'); } if (!this.focusCell) { setTimeout(() => { document.addEventListener('click', this.ev_clickOut); }, 30); } this.focusCell = cell; this.focusCell.td.addClass('as-focus'); this.$fontSize.value = this.focusCell.style.fontSize; if (this.focusCell.style.fontWeight === 'bold') this.$bold.addClass('as-checked'); else this.$bold.removeClass('as-checked'); if (this.focusCell.style.fontStyle === 'italic') this.$italic.addClass('as-checked'); else this.$italic.removeClass('as-checked'); this.$fontColor.value = this.focusCell.style.color; var textAlign = this.focusCell.style.textAlign; for (var align in this.$alignBtns) { if (align === textAlign) { this.$alignBtns[align].addClass('as-checked'); } else { this.$alignBtns[align].removeClass('as-checked'); } } this.updateAvailableCommands(); }; TEIFormatTool.prototype.updateAvailableCommands = function () { Object.keys(this.$commandBtns).forEach(key => { var available = this.focusCell && this.commands[key].available.call(this); this.$commandBtns[key].disabled = !available; }); }; TEIFormatTool.prototype.onBlur = function (cell) { }; TEIFormatTool.prototype.ev_clickOut = function (event) { if (Object(EventEmitter["d" /* hitElement */])(this.table.wrapper, event)) return; if (this.focusCell) { this.focusCell.td.removeClass('as-focus'); this.focusCell = null; } document.removeEventListener('click', this.ev_clickOut); }; TEIFormatTool.prototype.ev_fontSizeChange = function () { if (!this.focusCell) return; var prevValue = this.focusCell.style.fontSize; var newValue = this.$fontSize.value; if (newValue !== prevValue) { this.focusCell.style.fontSize = newValue; this.table.elt.emit('change', { type: 'change', target: this.table, cell: this }, this); } }; TEIFormatTool.prototype.ev_clickBold = function () { if (this.$bold.hasClass('as-checked')) { this.$bold.removeClass('as-checked'); this.focusCell.style.fontWeight = 'normal'; } else { this.$bold.addClass('as-checked'); this.focusCell.style.fontWeight = 'bold'; } this.table.elt.emit('change', { type: 'change', target: this.table, cell: this }, this); }; TEIFormatTool.prototype.ev_clickItalic = function () { if (!this.focusCell) return; if (this.$italic.hasClass('as-checked')) { this.$italic.removeClass('as-checked'); this.focusCell.style.fontStyle = 'normal'; } else { this.$italic.addClass('as-checked'); this.focusCell.style.fontStyle = 'italic'; } this.table.elt.emit('change', { type: 'change', target: this.table, cell: this }, this); }; TEIFormatTool.prototype.ev_fontColorSubmit = function () { if (!this.focusCell) return; var prevColor = this.focusCell.style.color; var newColor = this.$fontColor.value; if (prevColor !== newColor) { this.focusCell.style.color = newColor; this.table.elt.emit('change', { type: 'change', target: this.table, cell: this }, this); } }; TEIFormatTool.prototype.ev_clickAlign = function (newValue, event) { if (!this.focusCell) return; var prevValue = this.focusCell.style.textAlign; if (prevValue !== newValue) { this.$alignBtns[prevValue].removeClass('as-checked'); this.$alignBtns[newValue].addClass('as-checked'); this.focusCell.style.textAlign = newValue; this.table.elt.emit('change', { type: 'change', target: this.table, cell: this }, this); } }; TEIFormatTool.prototype.ev_clickInsert = function (at, event) { if (!this.focusCell) return; var idx = this.table.cells.indexOf(this.focusCell); var bfIdx = at === 'left' ? idx : idx + 1; var newCell = new TEICell(this.table, { value: '' }); if (bfIdx >= this.table.cells.length) { this.table.$row.addChild(newCell.td); this.table.cells.push(newCell); } else { this.table.$row.addChildBefore(newCell.td, this.table.cells[bfIdx].td); this.table.cells.splice(bfIdx, 0, newCell); } this.table.elt.emit('change', { type: 'change', target: this.table, cell: this }, this); }; TEIFormatTool.prototype.ev_clickRemove = function () { if (!this.focusCell) return; this.focusCell.remove(); this.table.elt.emit('change', { type: 'change', target: this.table, cell: this.focusCell }, this.table); this.focusCell = null; }; TEIFormatTool.prototype.ev_keydown = function (event) { var key = keyboardEventToKeyBindingIdent(event); switch (key) { case 'ctrl-b': this.ev_clickBold(event); event.preventDefault(); break; case 'ctrl-i': this.ev_clickItalic(); event.preventDefault(); break; case 'ctrl-l': this.ev_clickAlign('left', event); event.preventDefault(); break; case 'ctrl-e': this.ev_clickAlign('center', event); event.preventDefault(); break; case 'ctrl-r': this.ev_clickAlign('right', event); event.preventDefault(); break; } }; // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/MSelectListItem.js /*** * * @extends {AElement} * @constructor */ function MSelectListItem() { this.$textCtn = Object(ACore["a" /* $ */])('.am-selectlist-item-text-ctn', this); this.$text = Object(ACore["a" /* $ */])('span.am-selectlist-item-text', this); this.$textValue = this.$text.childNodes[0]; this.$descCtn = Object(ACore["a" /* $ */])('.am-selectlist-item-desc-ctn', this); this.$desc = Object(ACore["a" /* $ */])('span.am-selectlist-item-desc', this.$descCtn); this.$descValue = this.$desc.childNodes[0]; this._extendClasses = []; this._extendStyle = {}; this._data = ""; this._level = 0; } MSelectListItem.tag = 'MSelectListItem'.toLowerCase(); MSelectListItem.render = function () { return Object(ACore["c" /* _ */])({ class: 'am-selectlist-item', child: [ { class: 'am-selectlist-item-text-ctn', child: { tag: 'span', class: 'am-selectlist-item-text', child: { text: '' } } }, { class: 'am-selectlist-item-desc-ctn', child: { tag: 'span', class: 'am-selectlist-item-desc', child: { text: '' } } } ] }); } MSelectListItem.property = Object.assign({}, js_SelectListItem.property); MSelectListItem.property.icon = { set: function (icon) { if (this.$icon) { this.$icon.remove(); this.$icon = null; } this._icon = icon || null; if (this._icon) { this.$icon = Object(ACore["c" /* _ */])(this._icon).addClass('am-selectlist-item-icon'); this.$textCtn.addChildAfter(this.$icon, null); } }, get: function () { return this._icon; } }; /* harmony default export */ var selectlistbox_MSelectListItem = (MSelectListItem); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/MSelectList.js function MSelectList_measureListSize(items) { var descWidth = measureMaxDescriptionWidth(items); var textWidth = measureMaxTextWidth(items); var width = descWidth + 20 + textWidth + 12 + 15;//padding, margin return { width: width, descWidth: descWidth, textWidth: textWidth }; } var MSelectList_itemPool = []; function onClickItem(event) { var thisSL = this.$parent; if (thisSL) { thisSL.value = this.value; thisSL.emit('pressitem', { type: 'pressitem', target: thisSL, itemElt: this, value: this.value, data: this.data }); } } /** * @returns {MSelectListItem} */ function MSelectList_makeItem() { return Object(ACore["c" /* _ */])({ tag: selectlistbox_MSelectListItem, on: { click: onClickItem } }); } function MSelectList_requireItem($parent) { var item; if (MSelectList_itemPool.length > 0) { item = MSelectList_itemPool.pop(); } else { item = MSelectList_makeItem(); } item.$parent = $parent; return item; } function MSelectList_releaseItem(item) { item.$parent = null; item.attr('class', 'am-selectlist-item'); item.selected = false; MSelectList_itemPool.push(item); } /*global absol*/ /*** * @extends AElement * @constructor */ function MSelectList() { var res = this; this.defineEvent(['pressitem', 'cancelasync', 'valuevisibilityasync', 'finishasync', 'sizechangeasync']); this.$attachhook = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.sync = new Promise(function (rs) { res.$attachhook.once('error', rs); }); this.$items = []; this.$itemByValue = {};//quick find element this.$selectedItem = undefined; this._itemSession = 0; this._finished = true; this._resourceReady = true; }; MSelectList.tag = "MSelectList".toLowerCase(); MSelectList.render = function () { return Object(ACore["c" /* _ */])('.am-selectlist'); }; //todo: update this feature to SelectList /*** * * @param value * @return {MSelectListItem|null} */ MSelectList.prototype.getItemElementByValue = function (value) { return this.$itemByValue[value + ''] || null; }; MSelectList.prototype._updateSelectedItem = function () { var newSelectedItemElt = this.$itemByValue[this._selectValue + '']; if (newSelectedItemElt !== this.$selectedItem) { if (this.$selectedItem) { this.$selectedItem.removeClass('selected'); } if (newSelectedItemElt) { newSelectedItemElt.addClass('selected'); this.$selectedItem = newSelectedItemElt; } } }; MSelectList.prototype._requireItems = function (itemCout) { var item; while (this.$items.length < itemCout) { item = MSelectList_requireItem(this); this.$items.push(item); this.addChild(item); } while (this.$items.length > itemCout) { item = this.$items.pop(); item.remove(); MSelectList_releaseItem(item); } }; MSelectList.prototype._assignItems = function (from, to) { var foundSelected = false; var itemElt; var item; for (var i = from; i < to; ++i) { itemElt = this.$items[i]; item = this._items[i]; itemElt.data = item; itemElt.__index__ = i; if (this.$itemByValue[item.value + '']) { console.warn('Value ' + this.$items[i].value + ' is duplicated!'); } else { this.$itemByValue[item.value + ''] = itemElt; if (this._selectValue == item.value) { itemElt.selected = true; this.$selectedItem = itemElt; foundSelected = true; } else { itemElt.selected = false; } } } return foundSelected; }; MSelectList.prototype.setItemsAsync = function (items) { //start process this._finished = false; var session = Math.floor(Math.random() * 1000000); this._itemSession = session; this._items = items || []; this.$itemByValue = {}; this.measuredSize = MSelectList_measureListSize(items); var thisSL = this; var i = 0; var limit = 20; function tick() { if (thisSL._itemSession != session) { thisSL.emit('cancelasync', { session: session, type: 'cancelasync' }, this); return; } if (i >= items.length) { thisSL._updateSelectedItem(); thisSL._finished = false; thisSL.emit('finishasync', { session: session, type: 'finishasync' }, this); return; } var n = Math.min(items.length - i, limit); var itemCout = i + n; thisSL._requireItems(itemCout); i = itemCout; var foundSelected = thisSL._assignItems(itemCout - n, itemCout); if (foundSelected) { thisSL.emit('valuevisibilityasync', { session: session, type: 'valuevisibilityasync', itemElt: thisSL.$items[i] }, thisSL); } thisSL.emit('sizechangeasync', { session: session, type: 'sizechangeasync' }, this); setTimeout(tick, 2); } setTimeout(tick, 2); return Object.assign({ session: session }, this.measuredSize); }; MSelectList.prototype.setItems = function (items) { this._finished = false; var session = Math.floor(Math.random() * 1000000); this._itemSession = session; this._items = items || []; this.$itemByValue = {}; this.measuredSize = MSelectList_measureListSize(items); var itemCount = items.length; this._requireItems(itemCount); this._assignItems(0, itemCount); this._finished = true; return Object.assign({ session: this._itemSession }, this.measuredSize); }; MSelectList.property = Object.assign({}, js_SelectList.property); MSelectList.prototype.init = js_SelectList.prototype.init; MSelectList.eventHandler = {}; /* harmony default export */ var selectlistbox_MSelectList = (MSelectList); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/MListModal.js var MListModal_VALUE_HIDDEN = -1; var MListModal_VALUE_NORMAL = 1; /*** * @extends AElement * @constructor */ function MListModal() { this._initDomHook(); this._initControl(); this._initScroller(); this._initProperty(); } MListModal.tag = "MListModal".toLowerCase(); MListModal.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['pressitem', 'pressclose', 'pressout'], class: 'am-list-modal', child: [ { class: ['am-list-popup-box'], child: [ { class: 'am-list-popup-header', child: [ { tag: 'searchtextinput' }, { tag: 'button', class: 'am-list-popup-close-btn', child: 'span.mdi.mdi-close' } ] }, { class: 'am-list-popup-list-scroller', child: { class: 'am-list-popup-content', child: Array(MListModal.prototype.preLoadN).fill('.am-list-popup-list-page.am-selectlist') } } ] } ] }); }; MListModal.prototype.toLoadNextY = 200; MListModal.prototype.preLoadN = 5; MListModal.prototype._initDomHook = function () { this.estimateSize = { width: 0 }; this.$attachhook = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.$attachhook._isAttached = false; this.$attachhook.requestUpdateSize = this.updateSize.bind(this); this.$attachhook.on('attached', function () { Dom["b" /* default */].addToResizeSystem(this); this.requestUpdateSize(); this._isAttached = true; }); this.$domSignal = Object(ACore["c" /* _ */])('attachhook').addTo(this); this.domSignal = new DomSignal["a" /* default */](this.$domSignal); this.domSignal.on('viewListAt', this.viewListAt.bind(this)); this.domSignal.on('viewListAtFirstSelected', this.viewListAtFirstSelected.bind(this)); this.searchMaster = new list_ListSearchMaster(); }; MListModal.prototype._initControl = function () { this._currentOffset = 0; this._startItemIdx = 0; this.$closeBtn = Object(ACore["a" /* $ */])('.am-list-popup-close-btn', this) .on('click', this.notifyPressClose.bind(this)); this.on('click', this.eventHandler.click); this.$box = Object(ACore["a" /* $ */])('.am-list-popup-box', this); this.$searchInput = Object(ACore["a" /* $ */])('searchtextinput', this) .on('stoptyping', this.eventHandler.searchModify); }; MListModal.prototype._initScroller = function () { this._estimateHeight = 0; this._pageOffsets = Array(this.preLoadN + 1).fill(0); this._pageYs = Array(this.preLoadN + 1).fill(0); this.$listScroller = Object(ACore["a" /* $ */])('.am-list-popup-list-scroller', this) .on('scroll', this.eventHandler.scroll); this.$content = Object(ACore["a" /* $ */])('.am-list-popup-content', this); this.$listPages = Object(ACore["b" /* $$ */])('.am-list-popup-list-page', this); }; MListModal.prototype._initProperty = function () { this._items = []; this._values = []; this._valueDict = {}; this._itemsByValue = {}; this._preDisplayItems = []; this._displayItems = []; this._searchCache = {}; this._displayValue = MListModal_VALUE_NORMAL; this.displayValue = MListModal_VALUE_NORMAL; this.items = []; }; MListModal.prototype.findItemsByValue = function (value) { return this._itemsByValue[keyStringOf(value)]; }; MListModal.prototype.updateSize = function () { var bound = this.getBoundingClientRect(); var boxBound = this.$box.getBoundingClientRect(); var listScrollerBound = this.$listScroller.getBoundingClientRect(); this.$listScroller.addStyle('max-height', 'calc(' + (bound.height - listScrollerBound.top + boxBound.top) + 'px - var(--modal-margin-bottom) - var(--modal-margin-top))'); }; MListModal.prototype._requireItem = function (pageElt, n) { var itemElt; while (pageElt.childNodes.length > n) { itemElt = pageElt.lastChild; itemElt.selfRemove(); MSelectList_releaseItem(itemElt); } while (pageElt.childNodes.length < n) { itemElt = MSelectList_requireItem(this); pageElt.addChild(itemElt); } }; MListModal.prototype._listToDisplay = function (items) { return items; }; /*** * * @param {Array<{value:String|Number}>} items * @return {Array<{value:String|Number}>} */ MListModal.prototype._filterValue = function (items) { if (this._displayValue === MListModal_VALUE_NORMAL) return items; var dict = this._valueDict; return items.filter(function (item) { return !dict[item.value + '']; }); }; MListModal.prototype._assignItems = function (pageElt, offset) { var n = Math.min(this._displayItems.length - offset, pageElt.childNodes.length); var itemElt, value; for (var i = 0; i < n; ++i) { itemElt = pageElt.childNodes[i]; itemElt.data = this._displayItems[offset + i]; value = itemElt.value + ''; } }; MListModal.prototype._alignPage = function () { var pageElt; var pageBound; for (var i = 0; i < this.$listPages.length; ++i) { pageElt = this.$listPages[i]; pageBound = pageElt.getBoundingClientRect(); if (i > 0) this.$listPages[i].addStyle('top', this._pageYs[i] + 'px'); this._pageYs[i + 1] = this._pageYs[i] + pageBound.height; } this.$content.addStyle('height', this._pageYs[this.preLoadN] + 'px'); }; MListModal.prototype._updateSelectedItem = function () { var valueDict = this._valueDict; this.$listPages.forEach(function (pageElt) { Array.prototype.forEach.call(pageElt.childNodes, function (itemElt) { var value = itemElt.value + ''; if (valueDict[value]) { itemElt.selected = true; } else { itemElt.selected = false; } }); }); if (this._displayValue === MListModal_VALUE_HIDDEN) this._alignPage(); }; MListModal.prototype.viewListAt = function (offset) { if (!this.isDescendantOf(document.body)) { this.domSignal.emit('viewListAt', offset); return; } var fontSize = this.$listScroller.getFontSize() || 14; offset = Math.max(0, Math.min(offset, this._displayItems.length - 1)); var screenSize = Dom["b" /* default */].getScreenSize(); var maxItem = Math.ceil(screenSize.height / (fontSize * 2.25)); var contentBound = this.$content.getBoundingClientRect(); this._pageOffsets[0] = Math.max(offset - maxItem, 0); for (var i = 1; i <= this.preLoadN; ++i) { this._pageOffsets[i] = Math.min(this._pageOffsets[i - 1] + maxItem, this._displayItems.length); } var sIdx, nItem, pageBound; var pageElt; for (var pageIndex = 0; pageIndex < this.preLoadN; ++pageIndex) { sIdx = this._pageOffsets[pageIndex]; nItem = this._pageOffsets[pageIndex + 1] - sIdx; pageElt = this.$listPages[pageIndex]; if (pageIndex === 0) { this._pageYs[pageIndex] = sIdx / this._displayItems.length * contentBound.height; } pageElt.addStyle('top', this._pageYs[pageIndex] + 'px'); this._requireItem(pageElt, nItem); this._assignItems(pageElt, sIdx); pageBound = pageElt.getBoundingClientRect(); this._pageYs[pageIndex + 1] = this._pageYs[pageIndex] + pageBound.height; } if (this._pageOffsets[this.preLoadN] === this._displayItems.length) { this.$content.addStyle('height', this._pageYs[this.preLoadN] + 'px'); } else { this.$content.addStyle('height', this._estimateHeight + 'px'); } this._updateSelectedItem(); }; MListModal.prototype.viewListAtFirstSelected = function () { if (!this.isDescendantOf(document.body)) { this.domSignal.emit('viewListAtFirstSelected'); return; } if (this._displayValue == MListModal_VALUE_HIDDEN) { return false; } else if (this._values.length > 0) { var value = this._values[0]; var itemHolders = this._itemHolderByValue[value + '']; if (itemHolders) { this.domSignal.once('scrollIntoSelected', function () { var holder = itemHolders[0]; this.viewListAt(holder.idx); var itemElt = Object(ACore["a" /* $ */])('.as-selected', this.$listScroller); if (itemElt) { var scrollBound = this.$listScroller.getBoundingClientRect(); var itemBound = itemElt.getBoundingClientRect(); this.$listScroller.scrollTop += itemBound.top - scrollBound.top; } }.bind(this)); this.domSignal.emit('scrollIntoSelected'); return true; } else return false; } else return false; }; MListModal.prototype.searchItemByText = js_SelectListBox.prototype.searchItemByText; MListModal.prototype.resetSearchState = function () { this.$searchInput.value = ''; this._preDisplayItems = this._listToDisplay(this._items); this._displayItems = this._filterValue(this._preDisplayItems); this._updateItemIndex(); this.domSignal.emit('viewListAt', 0); this.$listScroller.scrollTop = 0; }; MListModal.prototype.notifyPressOut = function () { this.emit('pressout', { target: this, type: 'pressout' }, this); }; MListModal.prototype.notifyPressClose = function () { this.emit('pressclose', { target: this, type: 'pressclose' }, this); }; MListModal.prototype._findFirstPageIdx = function () { for (var i = 0; i < this.preLoadN; ++i) { if (this._pageOffsets[i + 1] - this._pageOffsets[i] > 0) { return i; } } return -1; }; MListModal.prototype._findLastPageIdx = function () { for (var i = this.preLoadN - 1; i >= 0; --i) { if (this._pageOffsets[i + 1] - this._pageOffsets[i] > 0) { return i; } } return -1; }; MListModal.prototype._updateItemIndex = function () { this._itemHolderByValue = this._displayItems.reduce(function (ac, cr, idx) { var value = typeof cr === "string" ? cr : cr.value + ''; ac[value] = ac[value] || []; ac[value].push({ idx: idx, item: cr }); return ac; }, {}); }; MListModal.property = {}; /*** * * @type {MListModal} */ MListModal.property.items = { get: function () { return this._items; }, set: function (items) { items = items || []; items = copySelectionItemArray(items) this._items = items; this._preDisplayItems = this._listToDisplay(this._items); this._displayItems = this._filterValue(this._preDisplayItems); this._itemsByValue = items.reduce(function reducer(ac, cr) { var key = keyStringOf(cr.value); if (!ac[key]) ac[key] = []; else console.error("Duplicate value", cr); ac[key].push(cr); if (cr.items && cr.items.reduce) cr.items.reduce(reducer, ac); return ac; }, {}); this._updateItemIndex(); /*****************/ this.idx2key = []; var makeSearchItem = it => { var res = { value: this.idx2key.length }; var valueKey; res.text = it.text + ''; if (it.desc) res.text += it.desc; valueKey = keyStringOf(it.value); it.valueKey = valueKey; this.idx2key.push(valueKey); if (it.items && it.items.length > 0 && it.items.map) { res.items = it.items.map(makeSearchItem); } return res; }; this.searchingItems = this._items.map(makeSearchItem); this.key2idx = this.idx2key.reduce((ac, cr, i) => { ac[cr] = i; return ac; }, {}); this.searchMaster.transfer(this.searchingItems); /*****************/ this._searchCache = {}; var estimateSize = MSelectList_measureListSize(this._preDisplayItems); if (estimateSize.descWidth > 0) { this.$listScroller.addStyle('--desc-width', 100 * (estimateSize.descWidth + 15) / (estimateSize.width) + '%'); } else { this.$listScroller.removeStyle('--desc-width'); } var estimateHeight = this._displayItems.length * 30 * Math.ceil(estimateSize.width * 1.2 / Math.min(Dom["b" /* default */].getScreenSize().width - 80, 500)); this._estimateHeight = estimateHeight; this.$content.addStyle('height', estimateHeight + 'px'); this.estimateSize = estimateSize; this.domSignal.emit('viewListAt', 0); } }; MListModal.property.values = { set: function (values) { values = values || []; values = values.slice(); this._values = values; this._valueDict = values.reduce(function (ac, cr) { ac[cr + ''] = true; ac[keyStringOf(cr)] = cr; return ac; }, {}); this._displayItems = this._filterValue(this._preDisplayItems); this._updateItemIndex(); //todo if (this._pageOffsets[this.preLoadN] > this._pageOffsets[0]) this._updateSelectedItem(); }, get: function () { return this._values; } }; MListModal.property.displayValue = { set: function (value) { this._displayValue = value; this._displayItems = this._filterValue(this._preDisplayItems); this._updateItemIndex(); if (value === MListModal_VALUE_HIDDEN) { this.addClass('am-value-hidden'); } else { this.removeClass('am-value-hidden'); } }, get: function () { return this._displayValue; } } MListModal.property.enableSearch = { set: function (value) { if (value) this.$box.addClass('am-enable-search'); }, get: function () { return this.$box.removeClass('am-enable-search'); } }; /*** * * @type {MListModal} */ MListModal.eventHandler = {}; /*** * * @param {MouseEvent} event */ MListModal.eventHandler.click = function (event) { if (event.target === this) this.notifyPressOut(); }; MListModal.eventHandler.searchModify = function () { var text = this.$searchInput.value; var searchSession = Math.random() + ''; this._seachSession = searchSession; this.searchItemByText(text).then(searchedItems => { if (this._seachSession !== searchSession) return; this._preDisplayItems = this._listToDisplay(searchedItems); this._displayItems = this._filterValue(this._preDisplayItems); this._updateItemIndex(); this.viewListAt(0); this.$listScroller.scrollTop = 0; }); }; MListModal.eventHandler.scroll = function () { var scrollerBound = this.$listScroller.getBoundingClientRect(); var topIdx = this._findFirstPageIdx(); var fontSize = this.$listScroller.getFontSize() || 14; var screenSize = Dom["b" /* default */].getScreenSize(); var maxItem = Math.ceil(screenSize.height / (fontSize * 2.25)); var pageBound; var topBound = this.$listPages[topIdx].getBoundingClientRect(); if (this._pageOffsets[topIdx] > 0) { if (topBound.top + this.toLoadNextY > scrollerBound.top) { this._pageOffsets.unshift(this._pageOffsets.pop()); this._pageYs.unshift(this._pageYs.pop()); this.$listPages.unshift(this.$listPages.pop()); this._pageOffsets[topIdx] = Math.max(0, this._pageOffsets[topIdx + 1] - maxItem); this._requireItem(this.$listPages[topIdx], this._pageOffsets[topIdx + 1] - this._pageOffsets[topIdx]); this._assignItems(this.$listPages[topIdx], this._pageOffsets[topIdx]); pageBound = this.$listPages[topIdx].getBoundingClientRect(); this._pageYs[topIdx] = this._pageYs[topIdx + 1] - pageBound.height; this.$listPages[topIdx].addStyle('top', this._pageYs[topIdx] + 'px'); this._updateSelectedItem(); if (this._pageOffsets[topIdx] === 0) { this.$listPages[0].addStyle('top', '0'); this._pageYs[0] = 0; this._alignPage(); this.$listScroller.scrollTop = 0; } } } else { if (topBound.top > scrollerBound.top) { this.$listScroller.scrollTop += topBound.top - scrollerBound.top; } } var botIdx = this._findLastPageIdx(); var botBound; botBound = this.$listPages[botIdx].getBoundingClientRect(); if (this._pageOffsets[botIdx + 1] < this._displayItems.length) { if (botBound.bottom - this.toLoadNextY < scrollerBound.bottom) { this._pageOffsets.push(this._pageOffsets.shift()); this._pageYs.push(this._pageYs.shift()); this.$listPages.push(this.$listPages.shift()); this._pageOffsets[botIdx + 1] = Math.min(this._displayItems.length, this._pageOffsets[botIdx] + maxItem); this.$listPages[botIdx].addStyle('top', this._pageYs[botIdx] + 'px'); this._requireItem(this.$listPages[botIdx], this._pageOffsets[botIdx + 1] - this._pageOffsets[botIdx]); this._assignItems(this.$listPages[botIdx], this._pageOffsets[botIdx]); pageBound = this.$listPages[botIdx].getBoundingClientRect(); this._pageYs[botIdx + 1] = this._pageYs[botIdx] + pageBound.height; this._updateSelectedItem(); if (this._pageOffsets[botIdx + 1] < this._displayItems.length) { this.$content.addStyle('height', this._estimateHeight + 'px'); } else { this.$content.addStyle('height', this._pageYs[botIdx + 1] + 'px'); } } } }; /* harmony default export */ var selectlistbox_MListModal = (MListModal); ACore["d" /* default */].install('mlistmodal', MListModal); Dom["b" /* default */].ShareInstance.install('mlistmodal', MListModal); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectmenu/MSelectMenu.js /*** * @extends AElement * @constructor */ function MSelectMenu() { this._value = undefined; this._isFocus = false; this._itemsByValue = {}; this.$holderItem = Object(ACore["a" /* $ */])('.am-selectmenu-holder-item', this); /*** * @type {MListModal} */ this.$selectlist = Object(ACore["c" /* _ */])({ tag: selectlistbox_MListModal }); var checkView = () => { if (this.isDescendantOf(document.body)) { setTimeout(checkView, 10000); } else { if (this.$selectlist.searchMaster) this.$selectlist.searchMaster.destroy(); } } setTimeout(checkView, 30000); this.$selectlist.on('pressitem', this.eventHandler.pressItem, true) .on('pressout', this.eventHandler.pressOut) .on('pressclose', this.eventHandler.pressOut); this.on('click', this.eventHandler.click, true); this.$attachhook = Object(ACore["a" /* $ */])('attachhook', this).on('error', this.eventHandler.attached); /** * @name value * @memberof MSelectMenu# */ /** * @name items * @memberof MSelectMenu# */ } MSelectMenu.tag = 'mselectmenu'; MSelectMenu.render = function () { return Object(ACore["c" /* _ */])({ class: ['absol-selectmenu', 'am-selectmenu', 'as-strict-value'], extendEvent: ['change', 'minwidthchange'], attr: { tabindex: '1' }, child: [ '.am-selectmenu-holder-item', { tag: 'button', class: 'absol-selectmenu-btn', child: ['dropdown-ico'] }, 'attachhook', ] }); }; MSelectMenu.prototype.findItemsByValue = function (value) { return this.$selectlist.findItemsByValue(value); }; MSelectMenu.prototype.updateItem = function () { this.$holderItem.clearChild(); var selected = this.findItemsByValue(this.value); if (selected) { var elt = Object(ACore["c" /* _ */])({ tag: selectlistbox_MSelectListItem, props: { data: selected[0] } }).addTo(this.$holderItem); } }; MSelectMenu.prototype.notifyChange = function (data) { this.emit('change', Object.assign({}, data, { type: 'chage', target: this }), this); }; MSelectMenu.prototype._dictByValue = js_SelectMenu.prototype._dictByValue; MSelectMenu.prototype.getRecommendWith = function () { return this.$selectlist.estimateSize.width + 36; }; MSelectMenu.prototype.init = js_SelectMenu.prototype.init; MSelectMenu.property = {}; MSelectMenu.property.items = { set: function (value) { this._itemIdxByValue = null; /** * verity data */ if (value) { value.forEach(function (it) { if (it && it.text) { it.text = it.text + ''; } }); } this._items = value; this._itemsByValue = this._dictByValue(value); this.$selectlist.items = value; if (!this._itemsByValue[this.value] && value.length > 0 && false) {//todo this.value = value[0].value; } else this.updateItem(); }, get: function () { return this._items || []; } }; MSelectMenu.property.value = { set: function (value) { this._value = value; this.$selectlist.values = [value]; this.updateItem(); }, get: function () { if (!this.strictValue) return this._value; var selected = this.findItemsByValue(this._value); if (selected) { return selected[0].value; } else { if (this._items && this._items.length > 0) { return this._items[0].value; } } return this._value; } }; MSelectMenu.property.strictValue = { set: function (value) { if (value) { this.addClass('as-strict-value'); } else { this.removeClass('as-strict-value'); } }, get: function () { return this.hasClass('as-strict-value'); } }; MSelectMenu.property.enableSearch = { set: function (value) { this.$selectlist.enableSearch = !!value; }, get: function () { return this.$selectlist.enableSearch; } }; MSelectMenu.property.isFocus = { set: function (value) { var thisSM = this; value = !!value; if (value === this._isFocus) return; this._isFocus = value; if (value) { thisSM.$selectlist.viewListAt(0); thisSM.$selectlist.viewListAtFirstSelected(); this.$selectlist.addTo(document.body); } else { this.$selectlist.selfRemove(); setTimeout(function () { thisSM.$selectlist.resetSearchState(); }, 100); } }, get: function () { return this._isFocus; } }; MSelectMenu.property.selectedIndex = js_SelectMenu.property.selectedIndex; MSelectMenu.property.disabled = js_SelectMenu.property.disabled; MSelectMenu.property.hidden = js_SelectMenu.property.hidden; /** * @type {MSelectMenu} */ MSelectMenu.eventHandler = {}; MSelectMenu.eventHandler.attached = function () { if (this.style.width === 'auto' || !this.style.width) { this.addStyle('width', this.getRecommendWith() / 14 + 'em'); } }; MSelectMenu.eventHandler.click = function (event) { this.isFocus = !this.isFocus; }; MSelectMenu.eventHandler.pressOut = function (event) { this.isFocus = false; }; MSelectMenu.eventHandler.pressItem = function (event) { var newValue = event.value; if (newValue !== this._value) { var lastValue = this._value; this._value = newValue; this.$selectlist.values = [newValue]; this.updateItem(); var changeEvent = Object.assign({}, event, { lastValue: lastValue }); setTimeout(function () { this.notifyChange(changeEvent); }.bind(this), 1); } setTimeout(function () { this.isFocus = false; }.bind(this), 100); }; ACore["d" /* default */].install(MSelectMenu); /* harmony default export */ var selectmenu_MSelectMenu = (MSelectMenu); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreemenu/MSelectTreeMenu.js /*** * @extends MListModal * @constructor */ function MTreeModal() { selectlistbox_MListModal.call(this); } MTreeModal.tag = 'MTreeModal'.toLowerCase(); MTreeModal.render = function () { return selectlistbox_MListModal.render().addClass('am-tree-modal'); }; Object.assign(MTreeModal.prototype, selectlistbox_MListModal.prototype); MTreeModal.prototype._listToDisplay = function (items) { return treeListToList(items); }; MTreeModal.property = Object.assign({}, selectlistbox_MListModal.property); MTreeModal.eventHandler = Object.assign({}, selectlistbox_MListModal.eventHandler); /** * @extends {AElement} * @constructor */ function MSelectTreeMenu() { this._isFocus = false; this._itemsByValue = {}; this.$holderItem = Object(ACore["a" /* $ */])('.am-selectmenu-holder-item', this); /*** * @type {MTreeModal} */ this.$selectlist = Object(ACore["c" /* _ */])({ tag: MTreeModal }); this.$selectlist.on('pressitem', this.eventHandler.pressItem, true) .on('pressout', this.eventHandler.pressOut) .on('pressclose', this.eventHandler.pressOut); this.on('click', this.eventHandler.click, true); this.$attachhook = Object(ACore["a" /* $ */])('attachhook', this).on('error', this.eventHandler.attached); this.addStyle('--as-width-limit', calcWidthLimit() + 'px'); } MSelectTreeMenu.tag = 'MSelectTreeMenu'.toLowerCase(); MSelectTreeMenu.render = function () { return selectmenu_MSelectMenu.render().addClass('am-select-tree-menu'); }; Object.assign(MSelectTreeMenu.prototype, selectmenu_MSelectMenu.prototype); MSelectTreeMenu.property = Object.assign({}, selectmenu_MSelectMenu.property); MSelectTreeMenu.eventHandler = Object.assign({}, selectmenu_MSelectMenu.eventHandler); MSelectTreeMenu.prototype._dictByValue = function (items) { return items.reduce(function visitor(ac, cr) { if (cr.items && cr.items.reduce) { cr.items.reduce(visitor, ac); } var value = cr.value + ''; ac[value] = cr; return ac; }, {}) }; ACore["d" /* default */].install(MSelectTreeMenu); /* harmony default export */ var selecttreemenu_MSelectTreeMenu = (MSelectTreeMenu); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/mobile/MHeaderBar.js /** * @exatends AElement * @constructor */ function MHeaderBar() { this._title = null; this._titleDesc = null; this._actionIcon = null; this._commands = []; this._quickmenuHolder = null; this._quickmenu = null; this.$right = Object(ACore["a" /* $ */])('.am-header-bar-right', this); this.$leftBtn = null; this.$titleCtn = null; this.$title = null; this.$titleDesc = null; this.$commands = []; } MHeaderBar.tag = 'MHeaderBar'.toLowerCase(); MHeaderBar.render = function () { return Object(ACore["c" /* _ */])({ extendEvent: ['action', 'command'], class: 'am-header-bar', child: [ { class: 'am-header-bar-right' } ] }); }; MHeaderBar.prototype.notifyAction = function () { this.emit('action', { type: 'action', target: this }, this); }; MHeaderBar.prototype.notifyCommand = function (commandItem) { this.emit('command', { type: 'command', target: this, commandName: commandItem.name, commandItem }, this); }; MHeaderBar.prototype.showTitle = function (flag) { if (!this.$titleCtn && flag) { this.$titleCtn = Object(ACore["c" /* _ */])({ class: 'am-header-bar-title-ctn', child: [ { class: 'am-header-bar-no-size-wrapper', child: { class: 'am-header-bar-title-wrapper', child: [ { class: 'am-header-bar-title', }, { class: 'am-header-bar-title-desc' } ] } } ] }); this.$title = Object(ACore["a" /* $ */])('.am-header-bar-title', this.$titleCtn); this.$titleDesc = Object(ACore["a" /* $ */])('.am-header-bar-title-desc', this.$titleCtn); } if (flag) { this.insertBefore(this.$titleCtn, this.$right); } else { if (this.$titleCtn) this.$titleCtn.remove(); } }; MHeaderBar.prototype.showActionBtn = function (flag) { if (!this.$leftBtn && flag) { this.$leftBtn = Object(ACore["c" /* _ */])({ tag: 'button', class: 'am-header-bar-left-btn', child: 'span.mdi.mdi-chevron-left', on: { click: this.notifyAction.bind(this) } }); } if (flag) { this.insertBefore(this.$leftBtn, this.firstChild); } else { if (this.$leftBtn) this.$leftBtn.remove(); } }; MHeaderBar.prototype.showQuickMenu = function (flag) { if (!this.$quickmenuBtn && flag) { this.$quickmenuBtn = Object(ACore["c" /* _ */])({ tag: 'button', class: ['am-header-bar-action', 'am-header-bar-quickmenu-btn'], child: { class: 'am-header-bar-quickmenu-btn-circle', child: ['span.mdi.mdi-dots-horizontal-circle-outline', 'span.mdi.mdi-dots-horizontal-circle'] }, }); } if (flag) { this.$right.addChild(this.$quickmenuBtn); } else { if (this.$quickmenuBtn) this.$quickmenuBtn.remove(); } }; MHeaderBar.prototype._makeCommandBtn = function (item) { return Object(ACore["c" /* _ */])({ tag: 'button', class: 'am-header-bar-command', child: item.icon || [], on: { click: this.notifyCommand.bind(this, item) } }); }; MHeaderBar.property = {}; /** * @type {MHeaderBar} */ MHeaderBar.property.quickmenu = { set: function (value) { if (this._quickmenuHolder) { this._quickmenuHolder.remove(); this._quickmenu = null; } if (value) { this.showQuickMenu(true); var button = this.$quickmenuBtn; var onClose = value.onClose; var onOpen = value.onOpen; value.onOpen = function () { button.addClass('am-status-active'); onOpen && onOpen.apply(this, arguments); }; value.onClose = function () { button.removeClass('am-status-active'); onClose && onClose.apply(this, arguments); }; if (!value.getAnchor) { value.getAnchor = function () { return [2]; } } if (!value.getMenuProps && value.props) { value.getMenuProps = function () { var res = Object.assign({}, value.props); if (typeof res.items === "function") { res.items = res.items(); } return res; } } this._quickmenuHolder = js_QuickMenu.toggleWhenClick(this.$quickmenuBtn, value); } else { this.showQuickMenu(false); value = null; } this._quickmenu = value; }, get: function () { return this._quickmenu; } }; /** * @type {MHeaderBar} */ MHeaderBar.property.title = { set: function (value) { if (value) { this.showTitle(true); if (typeof value === 'string') { this.$title.innerHTML = value; } else { this.$title.clearChild().addChild(Object(ACore["c" /* _ */])(value)); } } else { this.showTitle(false); value = null; } this._title = value; }, get: function () { return this._title; } }; /** * @type {MHeaderBar} */ MHeaderBar.property.titleDesc = { set: function (value) { if (value) { value = value + ''; this.showTitle(true); this.$titleDesc.clearChild().addChild(Object(ACore["c" /* _ */])({ text: value })); } else { this.showTitle(false); if (this.$titleDesc) this.$titleDesc.clearChild(); value = null; } this._titleDesc = value; }, get: function () { return this._titleDesc; } }; /** * @type {MHeaderBar} */ MHeaderBar.property.actionIcon = { set: function (value) { if (value) { this.showActionBtn(true); this.$leftBtn.clearChild() .addChild(Object(ACore["c" /* _ */])(value)); } else { this.showActionBtn(false); value = null; } this._actionIcon = value; }, get: function () { return this._actionIcon; } }; /** * @type {MHeaderBar} */ MHeaderBar.property.commands = { set: function (value) { this.$commands.forEach(function (e) { e.selftRemove(); }); this.$commands = []; var commandBtn; if (value) { var firstChild = this.$right.firstChild; if (firstChild) { for (var i = 0; i < value.length; ++i) { commandBtn = this._makeCommandBtn(value[i]); this.$right.addChildBefore(commandBtn, firstChild) } } else { for (var i = 0; i < value.length; ++i) { commandBtn = this._makeCommandBtn(value[i]); this.$right.addChild(commandBtn); } } } else { this._commands = []; } this._commands = value; }, get: function () { return this._commands; } }; ACore["d" /* default */].install(MHeaderBar); /* harmony default export */ var mobile_MHeaderBar = (MHeaderBar); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/mobile/MExplore.js var makeTextToNode = (data, pElt) => { var node; if (typeof data === "string") { node = Object(ACore["c" /* _ */])({ text: data }); } else if (data instanceof Array) { data.forEach(it => makeTextToNode(it, pElt)); } if (node) pElt.addChild(node); } var makeIconToNode = (data, pElt) => { var node; if (data) node = Object(ACore["c" /* _ */])(data); if (node) pElt.addChild(node); } function MExploreSectionBreak() { this._name = ''; this.$name = Object(ACore["a" /* $ */])('.am-explore-section-break-name', this); } MExploreSectionBreak.tag = 'MExploreSectionBreak'.toLowerCase(); MExploreSectionBreak.render = function () { return Object(ACore["c" /* _ */])({ class: 'am-explore-section-break', child: [ { class: 'am-explore-section-break-name', }, '.am-explore-section-break-line' ] }); }; MExploreSectionBreak.property = {}; MExploreSectionBreak.property.name = { set: function (value) { if (value === null || value === undefined) value = ''; this._name = value; this.$name.clearChild(); makeTextToNode(value, this.$name); }, get: function () { return this._name; } }; function MExploreItemBlock() { this.$name = Object(ACore["a" /* $ */])('.am-explore-item-block-name', this); this._name = ''; this._icon = null; this.$icon = Object(ACore["a" /* $ */])('.am-explore-item-block-icon', this); this.$name = Object(ACore["a" /* $ */])('.am-explore-item-block-name', this); /** * @name name * @type {string} * @memberof MExploreItemBlock# */ /** * @name icon * @memberof MExploreItemBlock# */ } MExploreItemBlock.tag = 'MExploreItemBlock'.toLowerCase(); MExploreItemBlock.render = function () { return Object(ACore["c" /* _ */])({ class: 'am-explore-item-block', child: [ { class: 'am-explore-item-block-icon' }, { class: 'am-explore-item-block-name' } ] }); }; MExploreItemBlock.property = {}; MExploreItemBlock.property.icon = { set: function (value) { value = value || null; makeIconToNode(value, this.$icon) }, get: function () { return this._icon; } }; MExploreItemBlock.property.name = { set: function (value) { if (value === null || value === undefined) value = ''; makeTextToNode(value, this.$name); }, get: function () { return this._name; } }; function MExploreItemList() { } MExploreItemList.tag = 'MExploreItemList'.toLowerCase(); MExploreItemList.render = function () { } /** * @extends AElement * @constructor */ function MExploreGroup() { this.$br = Object(ACore["a" /* $ */])(MExploreSectionBreak.tag, this); this._items = []; this.$items = []; /** * @name items * @type {[]} * @memberof MExploreGroup# */ } MExploreGroup.tag = 'MExploreGroup'.toLowerCase(); MExploreGroup.render = function () { return Object(ACore["c" /* _ */])({ class: 'am-explore-group', extendEvent: ['press'], child: [ { tag: MExploreSectionBreak } ] }); }; MExploreGroup.property = {}; MExploreGroup.property.name = { set: function (value) { this.$br.name = value; }, get: function () { return this.$br.name; } }; MExploreGroup.property.items = { set: function (items) { if (!items || !items.slice || !items.map) items = []; items = items.slice(); this._items = items; while (this.$items.length) { this.$items.pop().selfRemove(); } this.$items = items.map(it => { var elt = Object(ACore["c" /* _ */])({ tag: MExploreItemBlock, props: { data: it, name: it.name, icon: it.icon }, on: { click: event => { this.emit('press', { type: 'press', target: elt, itemData: it, originalEvent: event, itemElt: elt }, this); } } }); return elt; }); this.addChild(this.$items); }, get: function () { return this._items; } } function MSpringboardMenu() { this.$groups = []; } MSpringboardMenu.tag = 'MSpringboardMenu'.toLowerCase(); MSpringboardMenu.render = function () { return Object(ACore["c" /* _ */])({ class: 'am-springboard-menu', extendEvent: ['press'] }); }; MSpringboardMenu.property = {}; MSpringboardMenu.property.groups = { set: function (groups) { if (!(groups instanceof Array)) groups = []; this.$groups.forEach(elt => elt.selfRemove()); this.$groups = groups.map(group => { var elt = Object(ACore["c" /* _ */])({ tag: MExploreGroup, props: { data: group, name: group.name, items: group.items || [] }, on: { press: (event) => { this.emit('press', Object.assign({ groupElt: elt, groupData: group }, event), this); } } }); return elt; }); this.addChild(this.$groups); }, get: function () { return this.$groups.map(gr => gr.data); } }; // EXTERNAL MODULE: ./node_modules/absol-acomp/css/colorpickerbutton.css var colorpickerbutton = __webpack_require__(320); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/ColorPicker.js function ColorPicker() { var res = Object(ACore["c" /* _ */])(['<div class="absol-color-picker">', ' <div class="absol-color-picker-color">', ' <div class="absol-color-picker-sat">', ' <div class="absol-color-picker-val">', ' <div class="absol-color-dragger"></div>', ' </div>', ' </div>', ' </div>', ' <div class="absol-color-picker-hue-range">', ' <div class="absol-color-picker-hue">', ' <div class="absol-color-dragger"></div>', ' </div>', ' </div>', ' <div class="absol-color-picker-alpha-range">', ' <div class="absol-color-picker-alpha">', ' <div class="absol-color-dragger"></div>', ' </div>', ' </div>', ' <div class="absol-color-picker-input">', ` <div class="absol-color-picker-text-container"> <span class="f-mode">hsba(</span> <span class="absol-editabe-text num0">0</span><span class="separator0">deg, </span> <span class="absol-editabe-text num1">0</span><span class="separator1">%, </span> <span class="absol-editabe-text num2">0</span><span class="separator2">%, </span> <span class="absol-editabe-text num3">0</span><span>)</span> </div>`, ' </div>', ' <button class="absol-color-picker-mode">HSB</button>', '</div>'].join('') ); res.$fMode = Object(ACore["a" /* $ */])('.f-mode', res); res.$sep0 = Object(ACore["a" /* $ */])('.separator0', res); res.$sep1 = Object(ACore["a" /* $ */])('.separator1', res); res.$sep2 = Object(ACore["a" /* $ */])('.separator2', res); res.$num0 = Object(ACore["c" /* _ */])('editabletext.num0'); res.$num1 = Object(ACore["c" /* _ */])('editabletext.num1'); res.$num2 = Object(ACore["c" /* _ */])('editabletext.num2'); res.$num3 = Object(ACore["c" /* _ */])('editabletext.num3'); ColorPicker.defaultNumberInputHandle(res.$num0); ColorPicker.defaultNumberInputHandle(res.$num1); ColorPicker.defaultNumberInputHandle(res.$num2); ColorPicker.defaultNumberInputHandle(res.$num3); res._num0LimitOption = ColorPicker.numberInputHandleLimit(res.$num0, 0, 360); res._num1LimitOption = ColorPicker.numberInputHandleLimit(res.$num1, 0, 100, 0); res._num2LimitOption = ColorPicker.numberInputHandleLimit(res.$num2, 0, 100, 0); res._num3LimitOption = ColorPicker.numberInputHandleLimit(res.$num3, 0, 1, 3); Object(ACore["a" /* $ */])(".absol-editabe-text.num0", res).selfReplace(res.$num0); Object(ACore["a" /* $ */])(".absol-editabe-text.num1", res).selfReplace(res.$num1); Object(ACore["a" /* $ */])(".absol-editabe-text.num2", res).selfReplace(res.$num2); Object(ACore["a" /* $ */])(".absol-editabe-text.num3", res).selfReplace(res.$num3); res.$num0.text = '0'; res.$num1.text = '0'; res.$num2.text = '0'; res.$num3.text = '0'; res.switchMode = { RGBA: 'HSBA', HSBA: 'HSLA', HSLA: 'RGBA', RGB: 'HSB', HSB: 'HSL', HSL: 'RGB' }; res.toggleAlpha = { RGBA: 'RGB', HSBA: 'HSB', HSLA: 'HSL', RGB: 'RGBA', HSB: 'HSBA', HSL: 'HSLA' }; res.defineEvent(['change']); res._saturation = 0; res._brightness = 0; res._hue = 0; res._alpha = 1; res.$color = Object(ACore["a" /* $ */])('.absol-color-picker-color', res); res.$colorVal = Object(ACore["a" /* $ */])('.absol-color-picker-val', res); res.$draggerVal = Object(ACore["a" /* $ */])('.absol-color-dragger', res.$colorVal); res.eventHandler = OOP["a" /* default */].bindFunctions(res, ColorPicker.eventHandler); res.$colorVal.on('pointerdown', res.eventHandler.colorPointerDown, true); res.$hue = Object(ACore["a" /* $ */])('.absol-color-picker-hue', res); res.$draggerHue = Object(ACore["a" /* $ */])('.absol-color-dragger', res.$hue); res.$hue.on('pointerdown', res.eventHandler.huePointerDown); res.$alpha = Object(ACore["a" /* $ */])('.absol-color-picker-alpha', res); res.$alpha.on('pointerdown', res.eventHandler.alphaPointerDown); res.$draggerAlpha = Object(ACore["a" /* $ */])('.absol-color-dragger', res.$alpha); res.$textContainer = Object(ACore["a" /* $ */])('.absol-color-picker-text-container', res); res.$mode = Object(ACore["a" /* $ */])('.absol-color-picker-mode', res); res.$mode.on('click', res.eventHandler.modeClick); //todo res.$num0.on('blur', res.eventHandler.inputBlur); res.$num1.on('blur', res.eventHandler.inputBlur); res.$num2.on('blur', res.eventHandler.inputBlur); res.$num3.on('blur', res.eventHandler.inputBlur); return res; } ColorPicker.defaultNumberInputHandle = function (element) { element .on('keydown', function (event) { if (!event.key.match(/^[0-9\.]$/) && event.key.length == 1) { event.preventDefault(); } if (event.key == 'Tab') { event.preventDefault(); } if (event.key == 'Enter') { this.edit(false); } if (event.key == '.' && this.text.indexOf('.') >= 0) { event.preventDefault(); } if (this.text.length >= 6 && event.key.length == 1) event.preventDefault(); }) .on('click', function (event) { element.edit(true, true); }) .on('keydown', function (event) { if (event.key == 'Tab') { var parent = element.parentNode; var firstFriend; var found = false; var nextFriend = Object(ACore["a" /* $ */])('editabletext', parent, function (elt) { if (elt.getComputedStyleValue('display') == "none") return; if (!firstFriend) { firstFriend = elt; } if (elt == element) { found = true; } else if (found) { return true; } }); nextFriend = nextFriend || firstFriend; if (nextFriend) { nextFriend.edit(true, true); } } }); }; ColorPicker.numberInputHandleLimit = function (element, min, max, fixed) { var option = { min: min, max: max, fixed: fixed || 0, enable: true } element.on('blur', function (event) { if (!option.enable) return; var number = parseFloat(element.text); if (isNaN(number)) { number = min; } if (option.fixed == 0) { number = Math.round(number); } number = Math.max(min, Math.min(option.max, number)); element.text = number.toFixed(option.fixed) + ''; }); return option; }; ColorPicker.property = {}; ColorPicker.property.withAlpha = { set: function (value) { if (value) { this.addClass('with-alpha'); } else { this.removeClass('with-alpha'); } }, get: function () { return this.containClass('with-alpha'); } }; ColorPicker.property.saturation = { set: function (value) { value = value || 0; value = Math.max(0, Math.min(1, value)); this._saturation = value; this.$draggerVal.addStyle('left', value * 100 + '%'); this._update(); }, get: function () { return this._saturation; } }; ColorPicker.property.brightness = { set: function (value) { value = value || 0; value = Math.max(0, Math.min(1, value)); this._brightness = value; this.$draggerVal.addStyle('bottom', value * 100 + '%'); this._update(); }, get: function () { return this._brightness; } }; ColorPicker.property.mode = { set: function (value) { value = (value + '').toUpperCase(); if (value.indexOf('A') >= 0) { this.addClass('with-alpha'); } else { this.removeClass('with-alpha'); this.alpha = 1; } if (value.match(/^H/)) { this._num0LimitOption.max = 360; this._num1LimitOption.max = 100; this._num2LimitOption.max = 100; } else if (value.match(/^RGB/)) { this._num0LimitOption.max = 255; this._num1LimitOption.max = 255; this._num2LimitOption.max = 255; } if (value.match(/^(HSB|HSL|RGB|RGBA|HSBA|HSLA)$/)) { this.$mode.innerHTML = value; this._updateColorText(); } }, get: function () { return this.$mode.innerHTML; } }; ColorPicker.property.hue = { set: function (value) { value = value || 0; value = Math.max(0, Math.min(1, value)); this._hue = value; this.$draggerHue.addStyle('top', value * 100 + '%'); this._update(); }, get: function () { return this._hue; } }; ColorPicker.property.alpha = { set: function (value) { value = value || 0; value = Math.max(0, Math.min(1, value)); this._alpha = value; this.$draggerAlpha.addStyle('top', (1 - value) * 100 + '%'); this._update(); }, get: function () { return this._alpha; } }; ColorPicker.property.value = { set: function (value) { if (typeof value == 'string') { value = Color_Color.parse(value) } if (!value || !value.toHSBA) throw new Error('Invalid color type'); var hsba = value.toHSBA(); this.hue = hsba[0]; this.saturation = hsba[1]; this.brightness = hsba[2]; this.alpha = hsba[3]; }, get: function () { return Color_Color.fromHSBA(this.hue, this.saturation, this.brightness, this.alpha); } } ColorPicker.property.RGBA = { set: function (value) { var hsba = Color_Color.rgbaToHSBA(value || [0, 0, 0, 0]); this.hue = hsba[0]; this.saturation = hsba[1]; this.brightness = hsba[2]; this.alpha = hsba[3]; }, get: function () { var rgba = Color_Color.hsbaToRGBA([this.hue, this.saturation, this.brightness, this.alpha]); return rgba; }, } ColorPicker.prototype._getSVOfEvent = function (event) { var valBound = this.$colorVal.getBoundingClientRect(); var dx = event.clientX - valBound.left; var dy = event.clientY - valBound.top; var s = Math.max(0, Math.min(1, dx / valBound.width)); var b = Math.max(0, Math.min(1, 1 - dy / valBound.height)); return { s, b }; }; ColorPicker.prototype._getHOfEvent = function (event) { var hueBound = this.$hue.getBoundingClientRect(); var h = event.clientY - hueBound.top; h = h / hueBound.height; h = Math.max(0, Math.min(1, h)); return h; }; ColorPicker.prototype._getAOfEvent = function (event) { var alphaBound = this.$alpha.getBoundingClientRect(); var a = alphaBound.bottom - event.clientY; a = a / alphaBound.height; a = Math.max(0, Math.min(1, a)); return a; }; ColorPicker.prototype._getTextColorCode = function () { var h = this.hue + 0.5; if (h > 1) h -= 1; var s = this.saturation > 0.5 ? 0 : 1; var b = this.brightness > 0.5 ? 0 : 1; var rgba = Color_Color.hsbaToRGBA([h, s, b, 1]); return 'rgba(' + rgba.map((x, i) => i < 3 ? x * 255 : x).join(',') + ')'; }; ColorPicker.prototype.init = function (props) { this.RGBA = [1, 1, 1, 1]; this.super(props); }; ColorPicker.prototype._update = function () { //update vs var rgba = Color_Color.hsbaToRGBA([this.hue, 1, 1, 1]); this.$color.addStyle('background', 'rgba(' + rgba.map((x, i) => i < 3 ? x * 255 : x).join(',') + ')'); rgba = Color_Color.hsbaToRGBA([this.hue, this.saturation, this.brightness, this.alpha]); this.$textContainer.addStyle('background', 'rgba(' + rgba.map((x, i) => i < 3 ? x * 255 : x).join(',') + ')'); this.$textContainer.addStyle('color', this._getTextColorCode()); this._updateColorText(); }; ColorPicker.prototype._updateColorText = function () { var hsba = [this.hue, this.saturation, this.brightness, this.alpha]; var mode = this.mode; this.$fMode.innerHTML = mode.toLocaleLowerCase() + '('; if (mode.match(/^H/)) { this.$sep0.innerHTML = 'deg, '; this.$sep1.innerHTML = '%, '; if (mode.match(/A$/)) { this.$sep2.innerHTML = "%, "; this.$num3.removeStyle('display'); } else { this.$sep2.innerHTML = "%"; this.$num3.addStyle('display', 'none'); } } else { this.$sep0.innerHTML = ', '; this.$sep1.innerHTML = ', '; if (mode.match(/A$/)) { this.$sep2.innerHTML = ", "; this.$num3.removeStyle('display'); } else { this.$num3.addStyle('display', 'none'); this.$sep2.innerHTML = ""; } } if (mode.match(/HSB/)) { this.$num0.text = '' + Math.round(hsba[0] * 360); this.$num1.text = '' + Math.round(hsba[1] * 100); this.$num2.text = '' + Math.round(hsba[2] * 100); this.$num3.text = hsba[3].toFixed(3); } else { var cBytes = Color_Color['hsbaTo' + (mode.match(/A$/) ? mode : mode + 'A')](hsba); if (mode.match(/^H/)) { this.$num0.text = '' + Math.round(cBytes[0] * 360); this.$num1.text = '' + Math.round(cBytes[1] * 100); this.$num2.text = '' + Math.round(cBytes[2] * 100); this.$num3.text = hsba[3].toFixed(3); } else { this.$num0.text = '' + Math.round(cBytes[0] * 255); this.$num1.text = '' + Math.round(cBytes[1] * 255); this.$num2.text = '' + Math.round(cBytes[2] * 255); this.$num3.text = hsba[3].toFixed(3); } // var tempMode = mode.indexOf('A') < 0 ? mode + 'A' : mode; // var tempColor = Color['hsbaTo' + tempMode](hsba); // this.$textContainer.value = Color[mode.toLocaleLowerCase() + 'ToText'](tempColor); } }; ColorPicker.eventHandler = {}; ColorPicker.eventHandler.colorPointerDown = function (event) { var newSV = this._getSVOfEvent(event); this.saturation = newSV.s; this.brightness = newSV.b; absol.$(document.body) .on('pointermove', this.eventHandler.colorPointerMove) .on('pointerup', this.eventHandler.colorPointerFinish) .on('pointerleave', this.eventHandler.colorPointerFinish); this.emit('change', { target: this, originEvent: event, value: this.value }); }; ColorPicker.eventHandler.colorPointerFinish = function (event) { absol.$(document.body) .off('pointermove', this.eventHandler.colorPointerMove) .off('pointerup', this.eventHandler.colorPointerFinish) .off('pointerleave', this.eventHandler.colorPointerFinish); }; ColorPicker.eventHandler.colorPointerMove = function (event) { var newSV = this._getSVOfEvent(event); this.saturation = newSV.s; this.brightness = newSV.b; event.preventDefault(); this.emit('change', { target: this, originEvent: event, value: this.value }); }; ColorPicker.eventHandler.huePointerDown = function (event) { var newH = this._getHOfEvent(event); this.hue = newH; event.preventDefault(); absol.$(document.body) .on('pointermove', this.eventHandler.huePointerMove) .on('pointerup', this.eventHandler.huePointerFinish) .on('pointerleave', this.eventHandler.huePointerFinish); this.emit('change', { target: this, originEvent: event, value: this.value }); }; ColorPicker.eventHandler.huePointerFinish = function (event) { absol.$(document.body) .off('pointermove', this.eventHandler.huePointerMove) .off('pointerup', this.eventHandler.huePointerFinish) .off('pointerleave', this.eventHandler.huePointerFinish); event.preventDefault(); }; ColorPicker.eventHandler.huePointerMove = function (event) { var newH = this._getHOfEvent(event); this.hue = newH; event.preventDefault(); this.emit('change', { target: this, originEvent: event, value: this.value }); }; ColorPicker.eventHandler.alphaPointerDown = function (event) { var newA = this._getAOfEvent(event); this.alpha = newA; absol.$(document.body) .on('pointermove', this.eventHandler.alphaPointerMove) .on('pointerup', this.eventHandler.alphaPointerFinish) .on('pointerleave', this.eventHandler.alphaPointerFinish); event.preventDefault(); this.emit('change', { target: this, originEvent: event, value: this.value }); }; ColorPicker.eventHandler.alphaPointerFinish = function (event) { absol.$(document.body) .off('pointermove', this.eventHandler.alphaPointerMove) .off('pointerup', this.eventHandler.alphaPointerFinish) .off('pointerleave', this.eventHandler.alphaPointerFinish); event.preventDefault(); }; ColorPicker.eventHandler.alphaPointerMove = function (event) { var newA = this._getAOfEvent(event); this.alpha = newA; event.preventDefault(); this.emit('change', { target: this, originEvent: event, value: this.value }); }; ColorPicker.eventHandler.modeClick = function (event) { this.mode = this.switchMode[this.mode]; event.preventDefault(); }; ColorPicker.eventHandler.inputBlur = function () { var mode = this.mode; var alpha = 1; if (mode.match(/A$/)) { alpha = parseFloat(this.$num3.text); } var bytes; if (mode.match(/^H/)) { bytes = [parseFloat(this.$num0.text) / 360, parseFloat(this.$num1.text) / 100, parseFloat(this.$num2.text) / 100, alpha]; } else if (mode.match(/^RGB/)) { bytes = [parseFloat(this.$num0.text) / 255, parseFloat(this.$num1.text) / 255, parseFloat(this.$num2.text) / 255, alpha]; } var hsba = mode.match(/^HSB/) ? bytes : Color_Color[(mode.match(/A$/) ? mode.toLocaleLowerCase() : mode.toLocaleLowerCase() + 'a') + 'ToHSBA'](bytes); this.hue = hsba[0]; this.saturation = hsba[1]; this.brightness = hsba[2]; this.alpha = hsba[3]; }; ACore["d" /* default */].install('ColorPicker'.toLowerCase(),ColorPicker); /* harmony default export */ var colorpicker_ColorPicker = (ColorPicker); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/ColorPickerButton.js var ColorPickerButton_isMobile = BrowserDetector["a" /* default */].isMobile; /*** * @extends AElement * @constructor */ function ColorPickerButton() { if (!ColorPickerButton.css) { ColorPickerButton.css = new HTML5_DynamicCSS() .setProperty('.as-color-cell.as-color-picker-button-inner.as-null .as-color-cell-value', 'background-image', `url("data:image/svg+xml;base64,${base64EncodeUnicode(red_cross.replace(/\$width/g, '33').replace(/\$height/g, '18'))}")`) .commit(); } this.mode = 'OBJECT'; this.$innerValue = Object(ACore["a" /* $ */])('.as-color-picker-button-inner', this); this.prepare(); this.on('click', this.eventHandler.click); /*** * @name value * @type {string|Color} * @memberOf ColorPickerButton# */ /*** * @name hasOpacity * @type {boolean} * @memberOf ColorPickerButton# */ /*** * @name nullable * @type {boolean} * @memberOf ColorPickerButton# */ } ColorPickerButton.tag = 'ColorPickerButton'.toLowerCase(); ColorPickerButton.prototype.supportedModes = ['OBJECT', 'RGBA', 'RGB', 'HEX8', 'HEX6', 'HEX4', 'HEX3']; ColorPickerButton.prototype.hasOpacityModes = ['OBJECT', 'RGBA', 'HEX8', 'HEX4']; ColorPickerButton.eventHandler = {}; ColorPickerButton.eventHandler.click = function (event) { this.togglePicker(); }; ColorPickerButton.eventHandler.changeColor = function (event) { this._value = event.value; this.$innerValue.value = event.value; this.emit('change', event, this); }; ColorPickerButton.eventHandler.clickBody = function (event) { if (EventEmitter["b" /* default */].hitElement(this, event) || EventEmitter["b" /* default */].hitElement(this.$ColorPicker, event)) return; this.closePicker(); }; ColorPickerButton.eventHandler.submit = function (event) { this.closePicker(); }; ColorPickerButton.prototype.togglePicker = function () { if (this.hasClass('as-color-picker-selecting')) { this.closePicker(); } else { this.openPicker(); } }; ColorPickerButton.prototype.openPicker = function () { if (this.hasClass('as-color-picker-selecting')) return; if (ColorPickerButton.lastOpen) { ColorPickerButton.lastOpen.closePicker(); } ColorPickerButton.lastOpen = this; var thisBt = this; this.addClass('as-color-picker-selecting'); this.$ColorPicker.on('change', this.eventHandler.changeColor) .on('submit', this.eventHandler.submit); this.$ColorPicker.reloadSetting(); this.$follower.addStyle('visibility', 'hidden'); this.$follower.addTo(document.body); this.$follower.followTarget = this; this.$follower.sponsorElement = this; setTimeout(function () { document.addEventListener('click', this.eventHandler.clickBody); }.bind(this), 100); this._lastValue = this.value; this.$ColorPicker.nullable = this.nullable; this.$ColorPicker.hasOpacity = this.hasOpacity; ColorPickerButton.$ColorPicker.value = this.value; setTimeout(function () { thisBt.$follower.removeStyle('visibility'); }, 1); //10p }; ColorPickerButton.prototype.closePicker = function () { if (!this.hasClass('as-color-picker-selecting')) return; this.removeClass('as-color-picker-selecting'); if (ColorPickerButton.lastOpen === this) { ColorPickerButton.lastOpen = null; this.$follower.remove(); } this.$ColorPicker.off('change', this.eventHandler.changeColor) .off('submit', this.eventHandler.submit); document.removeEventListener('click', this.eventHandler.clickBody); if (this.value !== this._lastValue) { this.emit('stopchange', { target: this, value: this.value }, this); } }; ColorPickerButton.prototype.prepare = function () { if (!ColorPickerButton.$ColorPicker) { if (ColorPickerButton_isMobile) { ColorPickerButton.$follower = Object(ACore["c" /* _ */])('modal').on('click', function (event) { if (event.tagert === this) { if (ColorPickerButton.lastOpen) ColorPickerButton.lastOpen.closePicker(); } }); } else { ColorPickerButton.$follower = Object(ACore["c" /* _ */])('follower.as-color-picker-button-follower'); } ColorPickerButton.$ColorPicker = Object(ACore["c" /* _ */])({ tag: 'solidcolorpicker' }).addTo(ColorPickerButton.$follower); ColorPickerButton.lastOpen = null; } this.$follower = ColorPickerButton.$follower; this.$ColorPicker = ColorPickerButton.$ColorPicker; }; ColorPickerButton.render = function () { return Object(ACore["c" /* _ */])({ tag: 'button', extendEvent: ['change', 'stopchange'], class: 'as-color-picker-button', child: [ { tag: ColorCell, class: "as-color-picker-button-inner", } ] }); }; ColorPickerButton.property = {}; ColorPickerButton.property.value = { set: function (value) { this._value = value; this.$innerValue.value = value || null; }, get: function () { var nullable = this.nullable; var value = this._value; if (!this._value && nullable) return value;//null, "" if (!this._value && !nullable) { value = new Color_Color([0, 0, 0, 1]); } if (this.mode.match(/HEX4|HEX6|HEX8|RGB|RGBA/) && value && value.toHex3) { value = this._value.toString(this.mode); } return value; } }; ColorPickerButton.property.mode = { set: function (value) { value = value || 'OBJECT'; value = value.toUpperCase(); if (this.supportedModes.indexOf(value) < 0) value = 'OBJECT'; this.attr('data-mode', value); this._mode = value; }, get: function () { return this._mode; } }; ColorPickerButton.property.hasOpacity = { get: function () { return this.hasOpacityModes.indexOf(this._mode) >= 0; } }; ColorPickerButton.property.nullable = { set: function (value) { if (value) { this.addClass('as-nullable'); } else { this.removeClass('as-null-nullable'); } }, get: function () { return this.hasClass('as-nullable'); } } ACore["d" /* default */].install(ColorPickerButton); /* harmony default export */ var colorpicker_ColorPickerButton = (ColorPickerButton); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/SelectColorSchemeMenu.js var DEFAULT_CHART_COLOR_SCHEMES = [ ['#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252'],//gray scale ['#a50026', '#f46d43', '#fee08b', '#d9ef8b', '#66bd63', '#006837'], ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f'], ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02'], ['#a6cee3', '#b2df8a', '#fb9a99', '#fdbf6f', '#cab2d6', '#ffff99'], ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae'], ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33'], ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f'], ['#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02'], ['#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3'], ['#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5'], ['#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45'], ['#7f3b08', '#e08214', '#fee0b6', '#d8daeb', '#8073ac', '#2d004b'], ['#543005', '#bf812d', '#f6e8c3', '#c7eae5', '#35978f', '#003c30'], ['#40004b', '#9970ab', '#e7d4e8', '#d9f0d3', '#5aae61', '#00441b'], ['#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443'], ['#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45'], ['#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0'], ['#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e'], ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a'] ]; var DEFAULT_CHART_COLOR_SCHEMES_OBJS = DEFAULT_CHART_COLOR_SCHEMES.map(scm => scm.map(c => Color_Color.parse(c))); Color_Color.DEFAULT_CHART_COLOR_SCHEMES = DEFAULT_CHART_COLOR_SCHEMES; var ColorSchemeGenerators = {}; var scaleArray = (arr, newN) => Array(newN).fill(0).map((u, i) => { var k = i * (arr.length - 1) / (newN - 1); var l = Math.floor(k); var h = Math.ceil(k); if (l === h) return arr[l]; return int_map(k, l, h, arr[l], arr[h]); }) var generatorColorScheme = (id, n) => { var hsl6 = DEFAULT_CHART_COLOR_SCHEMES_OBJS[id].map(c => c.toHSLA()); var h6 = hsl6.map(c => c[0]); var s6 = hsl6.map(c => c[1]); var l, h, s; if ((id >= 1 && id <= 7)|| id === 12 || id ===13) { if (n > 6) { s = s6.concat(Array(n - 6).fill(0).map((u, i) => 0.6 + (3 * i * 0.3) % 0.35)); } } if (id === 1) { h6[0] -= 1; } else if (id === 2) { if (n > 6) { s = s6.concat(Array(n - 6).fill(0).map((u, i) => 0.5 + (3 * i * 0.3) % 0.45)); } } else if (id === 18 && n !== 6) { h6[0] = 1; h6[1] = 1; } s = s || scaleArray(s6, n); l = l || scaleArray(hsl6.map(c => c[2]), n); h = h || scaleArray(h6, n).map(h => h < 0 ? h + 1 : h); return Array(n).fill(0).map((u, i) => Color_Color.fromHSL(h[i], s[i], l[i])); }; // DEFAULT_CHART_COLOR_SCHEMES = Array(20).fill(0).map((u, id) => colorSchemeGenerator(id, 20).map(c => c.toString('hex6'))) // console.log(DEFAULT_CHART_COLOR_SCHEMES) /** * @extends AElement * @constructor */ function SelectColorSchemeMenu() { this.dropdown = new SCSMDropdown(this); this.comboboxCtrl = new SCSMComboBoxController(this); OOP["a" /* default */].drillProperty(this, this.dropdown, ['value', 'items', 'selectedItem']); this.dropdown.items = DEFAULT_CHART_COLOR_SCHEMES.map((it, i) => ({ colors: it, value: i })); } SelectColorSchemeMenu.tag = 'SelectColorSchemeMenu'.toLowerCase(); SelectColorSchemeMenu.render = function () { return Object(ACore["c" /* _ */])({ class: ['as-select-color-scheme-menu', 'absol-selectmenu'], extendEvent: ['change'], child: [ '.as-select-color-scheme-menu-selected-item', { tag: 'button', class: 'absol-selectmenu-btn', child: ['dropdown-ico'] }, ] }); }; /* harmony default export */ var colorpicker_SelectColorSchemeMenu = (SelectColorSchemeMenu); /** * * @param {SelectColorSchemeMenu} elt * @constructor */ function SCSMDropdown(elt) { this.elt = elt; this._items = []; this.itemDict = {}; this.$itemDict = {}; this.$follower = Object(ACore["c" /* _ */])({ tag: js_Follower, class: ['as-select-color-scheme-menu-dropdown', 'as-dropdown-box-common-style'], child: {} }); } SCSMDropdown.prototype.updateItems = function () { var items = this._items; var maxColorLength = items.reduce((ac, cr) => Math.max(ac, cr.colors.length), 0); var itRow = Math.max(1, Math.floor(Math.sqrt(maxColorLength))); while (itRow > 1 && (maxColorLength % itRow)) itRow--; var itCol = maxColorLength / itRow; var gridRow = Math.max(1, Math.ceil(Math.sqrt(items.length))); while (gridRow < items.length && (items.length % gridRow)) gridRow++; var gridCol = Math.ceil(items.length / gridRow); this.$follower.clearChild(); this.$selected = null; this.$itemDict = {}; items.forEach((item, i) => { if (i % gridCol === 0) { this.$follower.addChild(Object(ACore["c" /* _ */])('.as-scsm-item-list-row')); } var itemElt = Object(ACore["c" /* _ */])({ class: ['as-scsm-item'] }); var wrapper = Object(ACore["c" /* _ */])({ class: 'as-scsm-item-wrapper', child: itemElt, on: { click: (event) => { var cValue = this.value; if (cValue !== item.value) { this.value = item.value; this.elt.emit('change', { type: 'change', target: this.elt }, this.elt) } } } }) this.$itemDict[keyStringOf(item.value)] = itemElt; this.$follower.lastChild.addChild(wrapper); item.colors.forEach((color, j) => { if (j % itCol === 0) { itemElt.addChild(Object(ACore["c" /* _ */])('.as-scsm-item-row')); } itemElt.lastChild.addChild(Object(ACore["c" /* _ */])({ class: 'as-scsm-item-cell', style: { backgroundColor: color } })); }); }); }; SCSMDropdown.prototype.updateSelected = function () { var value = this.value; if (this.$selected) this.$selected.removeClass('as-selected'); this.$selected = this.$itemDict[keyStringOf(value)]; if (this.$selected) this.$selected.addClass('as-selected'); this.elt.comboboxCtrl.update(); }; Object.defineProperty(SCSMDropdown.prototype, 'items', { set: function (items) { if (!(items instanceof Array)) items = []; this._items = items; this.itemDict = items.reduce((ac, cr) => { ac[keyStringOf(cr.value)] = cr; return ac; }, {}); this.updateItems(); this.updateSelected(); }, get: function () { return this._items; } }); Object.defineProperty(SCSMDropdown.prototype, 'value', { set: function (value) { this._value = value; this.updateSelected(); }, get: function () { if (this.itemDict[keyStringOf(this._value)] || this._items.length === 0) return this._value; return this._items[0].value; } }); Object.defineProperty(SCSMDropdown.prototype, 'selectedItem', { get: function () { return this.itemDict[keyStringOf(this.value)]; } }); /** * * @param {SelectColorSchemeMenu} elt * @constructor */ function SCSMComboBoxController(elt) { this.elt = elt; this.$selected = Object(ACore["a" /* $ */])('.as-select-color-scheme-menu-selected-item', this.elt); this.ev_click = this.ev_click.bind(this); this.ev_clickOut = this.ev_clickOut.bind(this); this.elt.on('click', this.ev_click) } SCSMComboBoxController.prototype.ev_click = function (event) { this.isFocus = true; }; SCSMComboBoxController.prototype.ev_clickOut = function (event) { this.isFocus = false; }; SCSMComboBoxController.prototype.update = function () { var selectedItem = this.elt.dropdown.selectedItem; this.$selected.clearChild(); if (!selectedItem) return; this.$selected.addChild(selectedItem.colors.map(color => Object(ACore["c" /* _ */])({ class: 'as-scsm-item-cell', style: { backgroundColor: color } }))) }; Object.defineProperty(SCSMComboBoxController.prototype, 'isFocus', { set: function (value) { if (!!value === this.elt.hasClass('as-focus')) return; if (value) { this.elt.addClass('as-focus'); } else { this.elt.removeClass('as-focus'); } if (value) { this.elt.off('click', this.ev_click); setTimeout(() => { document.addEventListener('click', this.ev_clickOut); }, 10); this.elt.dropdown.$follower.addTo(document.body); this.elt.dropdown.$follower.followTarget = this.elt; } else { this.elt.on('click', this.ev_click); document.removeEventListener('click', this.ev_clickOut); this.elt.dropdown.$follower.remove(); this.elt.dropdown.$follower.followTarget = null; } }, get: function () { return this.elt.hasClass('as-focus'); } }); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/ProgressCircle.js var ProgressCircle_ = ACore["d" /* default */]._; var ProgressCircle_$ = ACore["d" /* default */].$; function ProgressCircle() { this._text = 'Loading\n$value'; this._value = 0; this._variant = null; this._viewValue = 0; this.$pie = ProgressCircle_$('.as-progress-circle-pie', this); this.$inner = ProgressCircle_$('.as-progress-circle-inner', this); this.$end = ProgressCircle_$('.as-progress-circle-end', this); this.$text = ProgressCircle_$('.as-progress-circle-text', this); this._animated = true; } ProgressCircle.tag = 'ProgressCircle'.toLowerCase(); ProgressCircle.render = function () { return ProgressCircle_({ class: 'as-progress-circle', child: [ '.as-progress-circle-start', '.as-progress-circle-pie', '.as-progress-circle-end', { class: 'as-progress-circle-inner', child: { class: 'as-progress-circle-text', child: { text: '' } } } ] // child: { // class: 'as-progress-bar-value' // } }); }; ProgressCircle.property = {}; ProgressCircle.prototype._updateValue = function () { if (Math.abs(this._value - this._viewValue) < 0.05 || !this._animated) this._viewValue = this._value; else { if (this._value > this._viewValue) this._viewValue += 0.05; else this._viewValue -= 0.05; } var value = this._viewValue; var angle = Math.PI * (-0.5 + value * 2); var cosAngle = Math.cos(angle); var sinAngle = Math.sin(angle); var pl = 'polygon(50% 0%, 100% 0%, '; if (value >= 0.25) pl += '100% 100%, '; if (value >= 0.5) pl += '0% 100%, '; if (value >= 0.75) pl += '0% 0%, '; pl += `${50 + 50 * cosAngle}% ${50 + 50 * sinAngle}%`; pl += ', 50% 50%)'; this.$pie.addStyle('clipPath', pl); this.$end.addStyle({ left: `calc(${50 + 50 * cosAngle}% - ${(cosAngle + 1) * 0.8/2}em)`, top: `calc(${50 + 50 * sinAngle}% - ${(sinAngle + 1) * 0.8/2}em)` }); if (this._value !== this._viewValue) { requestAnimationFrame(() => this._updateValue()); } } ProgressCircle.prototype._updateText = function () { var value = this._value; var text = this._text; text = text.replace('$value', Math.round(value * 100) + '%'); this.$text.firstChild.data = text; }; /** * @type {ProgressCircle} */ ProgressCircle.property.variant = { set: function (value) { if (this._variant) { this.removeClass('as-variant-' + this._variant); } if (value) { this.addClass('as-variant-' + value) } else { value = null; } this._variant = value; }, get: function () { return this._variant; } }; ProgressCircle.property.value = { /** * @this ProgressCircle * @param value */ set: function (value) { value = Math.max(0, Math.min(1, value || 0)); this._value = value; this._updateValue(); this._updateText(); }, get: function () { return this._value; } }; ProgressCircle.property.text = { set: function (value) { value = value || ''; if (typeof value !== "string") value = ''; this._text = value; this._updateText(); }, get: function () { return this._text; } } ProgressCircle.property.animated = { set: function (value) { value = !!value; this._animated = value; if (value) { this.addClass('as-animated'); } else { this.removeClass('as-animated'); } }, get: function () { return this._animated; } } ACore["d" /* default */].install(ProgressCircle); /* harmony default export */ var js_ProgressCircle = (ProgressCircle); // CONCATENATED MODULE: ./node_modules/absol-acomp/js/dom/install.js var publicCreators = [ MdiStoreMarkerOutline, js_AutoCompleteInput, js_BoardTable, js_Board, js_BScroller, js_ButtonArray, js_ButtonRange, js_CalendarInput, OldCalendarInput, CheckBoxInput, js_CheckBox, CheckboxButton, js_CheckListItem, js_CheckListBox, js_CheckTreeLeafOnlyBox, js_ChromeCalendar, js_ChromeTimePicker, js_ChromeTime24Picker, js_CircleSectionLabel, js_CountdownClock, js_CountdownText, js_DateInYearPicker, js_DateInYearInput, js_DateTimeInput, js_DropZone, js_EmojiPickerTooltip, js_FileInputBox, js_FileListItem, js_FileListInput, finder_Finder, Scrollbar, VScrollbar, HScrollbar, VScroller, HScroller, ContextMenu, HMenu, VMenuItem, VMenu, Dropright, VMenuLine, Dropdown, HMenuItem, VMenu, VRootMenu, MenuButton, js_DateInput2, js_DateNLevelInput, js_Hanger, js_DraggableHStack, js_DraggableVStack, js_DropPanel, js_DropPanelStack, js_EditableText, js_EmojiPicker, js_EmojiCounter, js_EmojiCounterList, js_Sprite, ExpNode, js_ExpTree, ExpGroup, js_DVExpTree, js_FlexiconButton, js_FlexiconInput, js_Follower, js_FollowerToggler, js_Frame, js_FrameView, js_TabFrame, js_TabView, js_SinglePage, js_HexaSectionLabel, js_VRuler, js_HRuler, js_IconSprite, js_LinearColorBar, js_LinearColorTinyBar, js_MediaInput, messageinput_MessageInput, MessageQuote, js_Modal, js_LoadingCubeModal, numberinput_NumberInput, js_NumberSpanInput, OnsScreenWindow, js_OnScreenWidget, js_PageIndicator, js_PageSelector, js_PreInput, js_ProgressBar, js_ProgressCircle, js_QuickListButton, js_QuickMenu, js_QuickPath, js_PathMenu, js_Radio, js_RadioButton, js_RadioInput, js_RibbonSplitButton, js_RibbonButton, js_RotatedText, js_SelectList, js_RemoteSvg, js_ResizeBox, Searcher, js_SelectListBox, js_SelectTreeBox, SelectMenu2, js_SelectBox, js_MultiSelectMenu, js_MultiCheckTreeLeafBox, BrowserDetector["a" /* default */].isMobile ? multichecktreeleafmenu_MultiCheckTreeLeafMenu : js_MultiCheckTreeLeafMenu, js_SelectBoxItem, js_DualSelectBox, BrowserDetector["a" /* default */].isMobile ? dualselectmenu_DualSelectMenu : js_DualSelectMenu, js_SelectTable, js_SelectTable2, js_SelectTreeMenu, js_SelectTreeLeafBox, /*BrowserDetector.isMobile ? SelectTreeLeafMenuV2 :*/ js_SelectTreeLeafMenu, js_SpanInput, Snackbar, js_StaticTabbar, js_Switch, tablescroller_TableScroller, js_TableVScroller, treetable_TreeTable, js_TextArea2, js_TextClipboard, js_TimeInput, js_Time24Input, js_TimeRange24Input, js_TimeSelectInput, js_TimePicker, js_DateTimeInput, Tooltip, js_CopyableIconTooltip, js_Toast, js_TreeList, js_TreeListItem, js_TokenField, WidthHeightSizer, js_TrackBar, js_TrackBarInput, SpinnerIco, VerticalTreeDiagramNode, js_VerticalTreeDiagram, js_MultiCheckMenu, js_CheckTreeItem, js_CheckTreeBox, js_MultiCheckTreeMenu, js_MessageDialog, js_YesNoQuestionDialog, js_TOCItem, js_TOCList, ckeditor_CKPlaceholder, ckeditor_CKInlineShortText, js_VerticalTimeline, js_WindowBox, js_LocationView, js_LocationPicker, js_LocationInput, js_PlaceSearchAutoCompleteInput, js_MKNavigator, js_ProcessLBar, js_KVCommentItem, dynamictable_DynamicTable, objectmergetool_ObjectMergeTool, tokenizeiput_TokenizeHyperInput, selectlistbox_SelectListBox, // MCheckTreeBox, checktreeleafbox_MCheckTreeLeafBox, selecttreeleafbox_MSelectTreeLeafBox, dualselectbox_MDualSelectBox, js_TreeChart, js_TableOfTextInput, mobile_MHeaderBar, MExploreSectionBreak, MExploreItemBlock, MExploreGroup, MSpringboardMenu, colorpicker_SolidColorPicker, colorpicker_ColorPickerButton, ColorCell, colorpicker_SelectColorSchemeMenu ]; /*** * * @param {Dom} core */ function install(core) { core.install(publicCreators); core.install('checkboxbutton', CheckBoxInput); core.install('selectbox', js_MultiSelectMenu); if (BrowserDetector["a" /* default */].isMobile) { core.install('selectmenu', selectmenu_MSelectMenu); core.install('selecttreemenu', selecttreemenu_MSelectTreeMenu) } core.install('MSelectTreeLeafMenu'.toLowerCase(), js_SelectTreeLeafMenu); core.install('MMultiCheckTreeMenu'.toLowerCase(), js_MultiCheckTreeMenu); core.install('MMultiCheckTreeLeafMenu'.toLowerCase(), js_MultiCheckTreeLeafMenu); } /* harmony default export */ var dom_install = (install); // CONCATENATED MODULE: ./node_modules/absol-acomp/AComp.js var AComp = { core: ACore["d" /* default */], $: ACore["d" /* default */].$, _: ACore["d" /* default */]._, creator: ACore["d" /* default */].creator, buildDom: ACore["d" /* default */].buildDom, runDebugTask: DebugTask["a" /* default */].start.bind(DebugTask["a" /* default */]), Draggable: js_Draggable, EmojiChars: js_EmojiChars, EmojiAnims: js_EmojiAnims, install: dom_install, BlurTrigger: tool_BlurTrigger }; window.runDebugTask = DebugTask["a" /* default */].start.bind(DebugTask["a" /* default */]); /* harmony default export */ var absol_acomp_AComp = (AComp); // CONCATENATED MODULE: ./node_modules/absol-mobile/js/dom/Core.js var Core = new Dom["b" /* default */](); Core.install(absol_acomp_AComp.core); var Core_ = Core._; var Core_$ = Core.$; /* harmony default export */ var dom_Core = (Core); // CONCATENATED MODULE: ./node_modules/absol-mobile/js/dom/MNavigatorMenu.js var MNavigatorMenu_ = dom_Core._; var MNavigatorMenu_$ = dom_Core.$; function MNavigatorMenu() { this.$header = MNavigatorMenu_$('.am-navigator-menu-body', this); this.$body = MNavigatorMenu_$('.am-navigator-menu-body', this); var data = [ { items: [ { text: 'Trang chủ', icon: 'span.mdi.mdi-home' } ] }, { gname: 'Danh mục', items: [ { text: 'Kiểu dữ liệu', icon: 'span.mdi.mdi-alpha-t-box-outline' }, { text: 'Bảng', icon: 'span.mdi.mdi-file-table-outline' }, { text: 'Trạng thái', icon: 'span.mdi.mdi-check' }, { text: 'Nhóm đối tượng', icon: 'span.mdi.mdi-google-circles-communities' }, { text: 'Đối tượng', icon: 'span.mdi.mdi-cube-outline' }, { text: 'Chat', icon: 'span.mdi.mdi-chat-outline' }, { text: 'Quốc gia', icon: 'span.mdi.mdi-earth' }, { text: 'Công ty', icon: 'span.mdi.mdi-warehouse' }, { text: 'Liên hệ', icon: 'span.mdi.mdi-contact-mail' }, { text: 'Loại', icon: 'span.mdi.mdi-grain' }, ] }, { gname: 'Báo cáo', items: [ { text: 'Báo cáo của tôi', icon: 'span.mdi.mdi-note-text' }, { text: 'Báo cáo công khai', icon: 'span.mdi.mdi-note-text-outline' }, ] }, { gname: 'Hệ thống', items: [ { text: 'Người dùng', icon: 'span.mdi.mdi-account-outline' }, { text: 'Hồ sơ cá nhân', icon: 'span.mdi.mdi-file-account' }, { text: 'Đăng xuất', icon: 'span.mdi.mdi-logout' }, ] } ]; var thismn = this; data.forEach(function (gr) { thismn.$body.addChild(thismn._makeGroup(gr.gname, gr.items)); }); } MNavigatorMenu.tag = 'MNavigatorMenu'.toLowerCase(); MNavigatorMenu.render = function () { return MNavigatorMenu_({ tag: 'mleftnavigator', class: 'am-navigator-menu', child: [ { class: 'am-navigator-menu-header', child: [ { class: 'am-navigator-menu-avatar-ctn', child: '.am-navigator-menu-avatar' }, { class: 'am-navigator-menu-full-name', child: { text: 'Phạm Quốc Du Thiên' } }, { class: 'am-navigator-menu-email', child: { text: 'blueskythien2010@live.com' } } ] }, { class: 'am-navigator-menu-body', child: [ ] } ] }, true); }; /** * { class: 'am-navigator-menu-group', child: [ { class: 'am-navigator-menu-item', child: [ { class: 'am-navigator-menu-item-icon-ctn', child: 'span.mdi.mdi-home' }, { tag: 'span', class: 'am-navigator-menu-item-text', child: { text: 'Trang chủ' } } ] } ] }, { class: 'am-navigator-menu-group', child: [ { class: 'am-navigator-menu-group-name', child: { text: 'Danh mục' } }, { class: 'am-navigator-menu-item', child: [ { class: 'am-navigator-menu-item-icon-ctn', child: 'span.mdi.mdi-alpha-t-box-outline' }, { tag: 'span', class: 'am-navigator-menu-item-text', child: { text: 'Kiểu dữ liệu' } } ] } ] } */ MNavigatorMenu.prototype._makeItem = function (icon, text) { return MNavigatorMenu_({ class: 'am-navigator-menu-item', child: [ { class: 'am-navigator-menu-item-icon-ctn', child: icon ? icon : [] }, { tag: 'span', class: 'am-navigator-menu-item-text', child: { text: text } } ] }); }; MNavigatorMenu.prototype._makeGroup = function (groupName, items) { var aobj = { class: 'am-navigator-menu-group', child: [] };//absol object if (groupName) { aobj.child.push({ class: 'am-navigator-menu-group-name', child: { text: groupName + '' } }) }; var thismn = this; aobj.child = aobj.child.concat(items.map(function (item) { return thismn._makeItem(item.icon, item.text); })); return MNavigatorMenu_(aobj); }; MNavigatorMenu.property = {}; /** * @type {MNavigatorMenu} */ MNavigatorMenu.property.headerBackgroundSrc = { set: function () { }, get: function () { } }; /** * @type {MNavigatorMenu} */ MNavigatorMenu.property.avatarSrc = { set: function () { }, get: function () { } } dom_Core.install(MNavigatorMenu); /* harmony default export */ var dom_MNavigatorMenu = (MNavigatorMenu); // EXTERNAL MODULE: ./node_modules/absol-mobile/css/mleftnavigator.css var mleftnavigator = __webpack_require__(322); // CONCATENATED MODULE: ./node_modules/absol-mobile/js/dom/MLeftNavigator.js var MLeftNavigator_ = dom_Core._; var MLeftNavigator_$ = dom_Core.$; function MLeftNavigator() { this.on('dragstart', this.eventHandler.modalDragStart) .on('drag', this.eventHandler.modalDrag) .on('dragend', this.eventHandler.modalDragEnd); this.$content = MLeftNavigator_$('.am-navigator-content', this); this.$modal = MLeftNavigator_$('.am-navigator-modal', this); this._contentWidth = 0; this._speedTimeout = -1; this._dragSpeed = 0; this._preDragTime = 0; this._state = -1; this._preventDrag = false; } MLeftNavigator.tag = 'MLeftNavigator'.toLowerCase(); MLeftNavigator.render = function () { return MLeftNavigator_({ tag: 'hanger', class: 'am-navigator', child: [ '.am-navigator-modal', '.am-navigator-content' ], props: { hangOn: 9 } }); }; ['addChild', 'addChildBefore', 'addChildAfter', 'clearChild', 'findChildBefore', 'findChildAfter', 'removeChild'].forEach(function (key) { MLeftNavigator.prototype[key] = function () { return this.$content[key].apply(this.$content, arguments); }; }); MLeftNavigator.prototype.getChildNodes = function () { return this.$modal.childNodes; }; MLeftNavigator.prototype.open = function (v0) { if (this._state == 1) return; v0 = v0 || 1000; v0 = Math.max(400, Math.min(4000, v0)); var ctBound = this.$content.getBoundingClientRect(); var dx = - ctBound.left; var dt = Math.sqrt(2 * dx / v0) / 2; this.$content.addStyle('transition', 'right ease-out ' + dt + 's'); this.$modal.addStyle('transition', 'opacity ease-out ' + dt + 's'); this.$content.addStyle('right', 'calc(100% - ' + ctBound.width + 'px)'); this.$modal.addStyle('opacity', '0.5'); this.addClass('am-open'); var thisnm = this; this._state = -1; thisnm.$modal.on('click', thisnm.eventHandler.clickModal); setTimeout(function () { thisnm._state = 1; thisnm.$content.removeStyle('transition'); thisnm.$modal.removeStyle('transition'); }, dt * 1000 + 1); }; MLeftNavigator.prototype.close = function (v0) { if (this._state == -1) return; this.$modal.off('click', this.eventHandler.clickModal); v0 = v0 || 0; v0 = v0 || 1000; v0 = Math.max(400, Math.min(4000, v0)); var ctBound = this.$content.getBoundingClientRect(); var dx = ctBound.right; var dt = Math.sqrt(2 * dx / v0) / 2; this.$content.addStyle('transition', 'right ease-out ' + dt + 's'); this.$modal.addStyle('transition', 'opacity ease-out ' + dt + 's'); this.$content.addStyle('right', '100%'); setTimeout(this.$modal.addStyle.bind(this.$modal, 'opacity', '0.001'), 4); // this.$modal.addStyle('opacity', '0.001'); var thisnm = this; this._state = 0; setTimeout(function () { thisnm._state = -1; thisnm.$content.removeStyle('transition'); thisnm.$modal.removeStyle('transition'); thisnm.removeClass('am-open'); }, dt * 1000 + 1); }; /** * @type {MLeftNavigator} */ MLeftNavigator.eventHandler = {}; MLeftNavigator.eventHandler.modalDragStart = function (event) { this.$modal.off('click', this.eventHandler.clickModal); this._contentWidth = this.$content.getBoundingClientRect().width; this._prevState = this._state; this._preDragTime = new Date().getTime(); this._preMoveDistance = 0; this._dragSpeed = 0; this._preX = event.clientX; var moveVec = event.currentPoint.sub(event.startingPoint); if (Math.abs(moveVec.x) > Math.abs(moveVec.y)) { this.addClass('am-dragging'); event.preventDefault(); this._preventDrag = false; } else { this._preventDrag = true; } }; MLeftNavigator.eventHandler.modalDrag = function (event) { if (this._preventDrag) return; var thisnm = this; var now = new Date().getTime(); if (now - this._preDragTime > 10) { var dt = now - this._preDragTime; this._dragSpeed = (event.clientX - this._preX) * 1000 / dt; this._preDragTime = now; this._preX = event.clientX; } if (this._speedTimeout > 0) { this._speedTimeout = -1; } this._speedTimeout = setTimeout(function () { thisnm._dragSpeed = 0; }, 200); var moveVec = event.currentPoint.sub(event.startingPoint); var dx; if (this._state != 0) { event.preventDefault(); if (this._state == -1) { dx = Math.max(0, Math.min(moveVec.x, this._contentWidth)); } else if (this._state == 1) { dx = Math.max(0, Math.min(this._contentWidth + moveVec.x, this._contentWidth)); } this.$content.addStyle({ right: 'calc(100% - ' + (dx) + 'px)' }); this.$modal.addStyle('opacity', (dx / this._contentWidth / 2) + ''); } // this.$modal.addStyle('opacity', dx / this._contentWidth / 2 +'') }; MLeftNavigator.eventHandler.clickModal = function (event) { if (event.target == this.$modal) this.close(); }; /** * throwing_speed 400px/s * */ MLeftNavigator.eventHandler.modalDragEnd = function () { if (this._preventDrag) { this._preventDrag = false; } else { this.removeClass('am-dragging'); this._state = 0;//animating state var ctBound = this.$content.getBoundingClientRect(); if (this._dragSpeed > -200 || (ctBound.right > ctBound.width / 2 && this._dragSpeed >= 0)) { this.open(this._dragSpeed); } else if (this._dragSpeed < -200 || (ctBound.right < ctBound.width / 2 && this._dragSpeed <= 0)) { this.close(-this._dragSpeed); } else { if (this._prevState == 1) this.open(); else if (this._prevState == -1) this.close(); } } }; dom_Core.install(MLeftNavigator); /* harmony default export */ var dom_MLeftNavigator = (MLeftNavigator); // CONCATENATED MODULE: ./app/Core.js var Core_Core = new Dom["b" /* default */](); Core_Core.install([dom_MNavigatorMenu, dom_MLeftNavigator]); var app_Core_ = Core_Core._; var app_Core_$ = Core_Core.$; /* harmony default export */ var app_Core = (Core_Core); // EXTERNAL MODULE: ./node_modules/mqtt/lib/connect/index.js var connect = __webpack_require__(76); var connect_default = /*#__PURE__*/__webpack_require__.n(connect); // CONCATENATED MODULE: ./app/connfig.js var MQTT_SERVER = 'wss://mqtt.absol.cf:9884'; var PRIVATE_CHANNEL = 'duthienkt/home'; // EXTERNAL MODULE: ./app/style/espsmartplug.css var espsmartplug = __webpack_require__(385); // CONCATENATED MODULE: ./app/device/EspSmartPlug.js /*** * @extends Context * @param deviceId * @constructor */ function EspSmartPlug(deviceId) { AppPattern_Fragment.call(this); this.deviceId = deviceId; this._offlineTimeoutIdx = -1; } OOP["a" /* default */].mixClass(EspSmartPlug, AppPattern_Fragment); EspSmartPlug.prototype.id2Name = { ESP_SMART_PLUG_DO_HOME: 'Đèn ngoài sân', ESP_SMART_PLUG_DO_HOME_2: 'Máy bơm tưới hoa' }; EspSmartPlug.prototype.id2order = { ESP_SMART_PLUG_DO_HOME: 1, ESP_SMART_PLUG_DO_HOME_2: 2 }; // ESP_SMART_PLUG_DO_HOME EspSmartPlug.prototype.createView = function () { this.$view = app_Core_({ attr: { 'datai-id': this.deviceId }, style: { order: this.id2order[this.deviceId] || 100 }, class: ['emh-esp-smart-plug', "emh-online"], child: [{ class: 'emh-esp-smart-plug-type-img-ctn', child: { tag: 'svg', props: { innerHTML: '<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\n' + '\t viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">\n' + '<style type="text/css">\n' + '\t.st0{fill:#333333;}\n' + '</style>\n' + '<g id="XMLID_2_">\n' + '\t<path id="XMLID_8_" class="st0" d="M504.7,0H7.3v512h497.5V0z M262.9,75.8v37.5h-28.3V75.8v-5.4h28.3V75.8z M234.6,451.5v-39h28.3\n' + '\t\tv39.8v2.3h-28.3V451.5z M277.4,450v-52.8h-56.6v14.5v37.5C132,433.9,64.7,356.6,64.7,264c0-93.4,67.3-169.9,156.1-185.2v49h42.9\n' + '\t\th14.5V77.3C370,89.5,442,168.4,442,264C440.4,358.9,369.3,437.8,277.4,450z"/>\n' + '\t<circle id="XMLID_9_" class="st0" cx="149.6" cy="268.6" r="28.3"/>\n' + '\t\n' + '\t\t<ellipse id="XMLID_10_" transform="matrix(0.1602 -0.9871 0.9871 0.1602 39.1737 583.2988)" class="st0" cx="362.4" cy="268.6" rx="28.3" ry="28.3"/>\n' + '\t<path id="XMLID_13_" class="st0" d="M253.7,238.8c-14.5,0-26,11.5-26,26c0,14.5,11.5,26,26,26c14.5,0,26-11.5,26-26\n' + '\t\tC279.7,250.3,267.5,238.8,253.7,238.8z M253.7,276.3c-6.1,0-11.5-5.4-11.5-11.5s5.4-11.5,11.5-11.5s11.5,5.4,11.5,11.5\n' + '\t\tS259.8,276.3,253.7,276.3z"/>\n' + '</g>\n' + '</svg>\n' } } }, { class: 'emh-esp-smart-plug-device-id', child: { text: this.id2Name[this.deviceId] || this.deviceId } }, { class: 'emh-esp-smart-plug-switch-ctn', child: { tag: js_Switch, props: { checked: false }, on: { change: this.ev_switchChange.bind(this) } } }] }); this.$switch = app_Core_$('switch', this.$view); }; EspSmartPlug.prototype.onAttached = function () { this.mqttClient = this.getContext("MQTT_CLIENT"); this.mqttClient.subscribe(PRIVATE_CHANNEL + '/' + this.deviceId + '/status'); this.mqttClient.on('message', this.ev_mqttMessage.bind(this)); }; EspSmartPlug.prototype.onResume = function () { this.mqttClient.publish(PRIVATE_CHANNEL + '/' + this.deviceId + '/what_status'); }; EspSmartPlug.prototype.online = function () { if (this._offlineTimeoutIdx > 0) { clearTimeout(this._offlineTimeoutIdx); } this._offlineTimeoutIdx = setTimeout(function () { this._offlineTimeoutIdx = -1; this.offline(); }.bind(this), 20000); this.$view.addClass("emh-online"); }; EspSmartPlug.prototype.offline = function () { if (this._offlineTimeoutIdx > 0) { clearTimeout(this._offlineTimeoutIdx); } this.$view.removeClass("emh-online"); }; EspSmartPlug.prototype.ev_status = function (statusText) { this.$switch.checked = statusText === "ON"; }; EspSmartPlug.prototype.ev_mqttMessage = function (channel, payload) { if (channel === PRIVATE_CHANNEL + '/' + this.deviceId + '/status') { this.ev_status(payload + ''); } }; EspSmartPlug.prototype.ev_switchChange = function (event) { this.mqttClient.publish(PRIVATE_CHANNEL + '/' + this.deviceId + '/command', this.$switch.checked ? '1' : '0'); }; /* harmony default export */ var device_EspSmartPlug = (EspSmartPlug); // CONCATENATED MODULE: ./app/ESPMiniHomeApp.js // import MLeftNavigator from "absol-mobile/js/dom/MLeftNavigator"; // import MNavigatorMenu from "absol-mobile/js/dom/MNavigatorMenu"; function ESPMiniHomeApp() { AppPattern_Fragment.call(this); this.devices = {}; this.mqttClient = connect_default.a.connect(MQTT_SERVER); this.mqttClient.on('message', this.ev_mqttMessage.bind(this)); this.mqttClient.publish(PRIVATE_CHANNEL + '/who_online', ""); this.mqttClient.subscribe([PRIVATE_CHANNEL + '/online']); this.setContext("MQTT_CLIENT", this.mqttClient); } OOP["a" /* default */].mixClass(ESPMiniHomeApp, AppPattern_Fragment); ESPMiniHomeApp.prototype.createView = function () { this.$view = app_Core_({ class: 'emh-app', child: [ // { // tag: MLeftNavigator, // child: { // tag: MNavigatorMenu // } // }, { class: ['emh-app-devices-ctn', 'as-bscroller'] }] }); this.$devicesCtn = app_Core_$('.emh-app-devices-ctn', this.$view); }; ESPMiniHomeApp.prototype.ev_mqttMessage = function (channel, payload) { if (channel === PRIVATE_CHANNEL + '/online') { this.ev_onlineDevice(payload + ''); } }; ESPMiniHomeApp.prototype.ev_onlineDevice = function (deviceId) { if (!this.devices[deviceId]) { this.devices[deviceId] = new device_EspSmartPlug(deviceId); this.devices[deviceId].attach(this); this.$devicesCtn.addChild(this.devices[deviceId].getView()); this.devices[deviceId].start(); } this.devices[deviceId].online(); }; /* harmony default export */ var app_ESPMiniHomeApp = (ESPMiniHomeApp); // CONCATENATED MODULE: ./app/index.js var app_app = new app_ESPMiniHomeApp(); app_app.getView().addTo(document.body); app_app.start(); /***/ }), /* 388 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, "Stack", function() { return /* reexport */ OtherContainer_Stack; }); __webpack_require__.d(__webpack_exports__, "Queue", function() { return /* reexport */ OtherContainer_Queue; }); __webpack_require__.d(__webpack_exports__, "PriorityQueue", function() { return /* reexport */ OtherContainer_PriorityQueue; }); __webpack_require__.d(__webpack_exports__, "Vector", function() { return /* reexport */ SequentialContainer_Vector; }); __webpack_require__.d(__webpack_exports__, "LinkList", function() { return /* reexport */ SequentialContainer_LinkList; }); __webpack_require__.d(__webpack_exports__, "Deque", function() { return /* reexport */ SequentialContainer_Deque; }); __webpack_require__.d(__webpack_exports__, "OrderedSet", function() { return /* reexport */ TreeContainer_OrderedSet; }); __webpack_require__.d(__webpack_exports__, "OrderedMap", function() { return /* reexport */ TreeContainer_OrderedMap; }); __webpack_require__.d(__webpack_exports__, "HashSet", function() { return /* reexport */ HashContainer_HashSet; }); __webpack_require__.d(__webpack_exports__, "HashMap", function() { return /* reexport */ HashContainer_HashMap; }); // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/ContainerBase/index.js var __extends = undefined && undefined.t || function() { var extendStatics = function(n, t) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, t) { n.__proto__ = t; } || function(n, t) { for (var r in t) if (Object.prototype.hasOwnProperty.call(t, r)) n[r] = t[r]; }; return extendStatics(n, t); }; return function(n, t) { if (typeof t !== "function" && t !== null) throw new TypeError("Class extends value " + String(t) + " is not a constructor or null"); extendStatics(n, t); function __() { this.constructor = n; } n.prototype = t === null ? Object.create(t) : (__.prototype = t.prototype, new __); }; }(); var ContainerIterator = function() { function ContainerIterator(n) { if (n === void 0) { n = 0; } this.iteratorType = n; } ContainerIterator.prototype.equals = function(n) { return this.o === n.o; }; return ContainerIterator; }(); var Base = function() { function Base() { this.M = 0; } Object.defineProperty(Base.prototype, "length", { get: function() { return this.M; }, enumerable: false, configurable: true }); Base.prototype.size = function() { return this.M; }; Base.prototype.empty = function() { return this.M === 0; }; return Base; }(); var Container = function(n) { __extends(Container, n); function Container() { return n !== null && n.apply(this, arguments) || this; } return Container; }(Base); //# sourceMappingURL=index.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/OtherContainer/Stack.js var Stack_extends = undefined && undefined.t || function() { var extendStatics = function(t, n) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, n) { t.__proto__ = n; } || function(t, n) { for (var i in n) if (Object.prototype.hasOwnProperty.call(n, i)) t[i] = n[i]; }; return extendStatics(t, n); }; return function(t, n) { if (typeof n !== "function" && n !== null) throw new TypeError("Class extends value " + String(n) + " is not a constructor or null"); extendStatics(t, n); function __() { this.constructor = t; } t.prototype = n === null ? Object.create(n) : (__.prototype = n.prototype, new __); }; }(); var Stack = function(t) { Stack_extends(Stack, t); function Stack(n) { if (n === void 0) { n = []; } var i = t.call(this) || this; i.nt = []; var r = i; n.forEach((function(t) { r.push(t); })); return i; } Stack.prototype.clear = function() { this.M = 0; this.nt = []; }; Stack.prototype.push = function(t) { this.nt.push(t); this.M += 1; return this.M; }; Stack.prototype.pop = function() { if (this.M === 0) return; this.M -= 1; return this.nt.pop(); }; Stack.prototype.top = function() { return this.nt[this.M - 1]; }; return Stack; }(Base); /* harmony default export */ var OtherContainer_Stack = (Stack); //# sourceMappingURL=Stack.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/OtherContainer/Queue.js var Queue_extends = undefined && undefined.t || function() { var extendStatics = function(t, i) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, i) { t.__proto__ = i; } || function(t, i) { for (var n in i) if (Object.prototype.hasOwnProperty.call(i, n)) t[n] = i[n]; }; return extendStatics(t, i); }; return function(t, i) { if (typeof i !== "function" && i !== null) throw new TypeError("Class extends value " + String(i) + " is not a constructor or null"); extendStatics(t, i); function __() { this.constructor = t; } t.prototype = i === null ? Object.create(i) : (__.prototype = i.prototype, new __); }; }(); var Queue = function(t) { Queue_extends(Queue, t); function Queue(i) { if (i === void 0) { i = []; } var n = t.call(this) || this; n.A = 0; n.tt = []; var e = n; i.forEach((function(t) { e.push(t); })); return n; } Queue.prototype.clear = function() { this.tt = []; this.M = this.A = 0; }; Queue.prototype.push = function(t) { var i = this.tt.length; if (this.A / i > .5 && this.A + this.M >= i && i > 4096) { var n = this.M; for (var e = 0; e < n; ++e) { this.tt[e] = this.tt[this.A + e]; } this.A = 0; this.tt[this.M] = t; } else this.tt[this.A + this.M] = t; return ++this.M; }; Queue.prototype.pop = function() { if (this.M === 0) return; var t = this.tt[this.A++]; this.M -= 1; return t; }; Queue.prototype.front = function() { if (this.M === 0) return; return this.tt[this.A]; }; return Queue; }(Base); /* harmony default export */ var OtherContainer_Queue = (Queue); //# sourceMappingURL=Queue.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/OtherContainer/PriorityQueue.js var PriorityQueue_extends = undefined && undefined.t || function() { var extendStatics = function(i, r) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(i, r) { i.__proto__ = r; } || function(i, r) { for (var t in r) if (Object.prototype.hasOwnProperty.call(r, t)) i[t] = r[t]; }; return extendStatics(i, r); }; return function(i, r) { if (typeof r !== "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); extendStatics(i, r); function __() { this.constructor = i; } i.prototype = r === null ? Object.create(r) : (__.prototype = r.prototype, new __); }; }(); var __read = undefined && undefined.q || function(i, r) { var t = typeof Symbol === "function" && i[Symbol.iterator]; if (!t) return i; var e = t.call(i), n, u = [], s; try { while ((r === void 0 || r-- > 0) && !(n = e.next()).done) u.push(n.value); } catch (i) { s = { error: i }; } finally { try { if (n && !n.done && (t = e["return"])) t.call(e); } finally { if (s) throw s.error; } } return u; }; var __spreadArray = undefined && undefined.D || function(i, r, t) { if (t || arguments.length === 2) for (var e = 0, n = r.length, u; e < n; e++) { if (u || !(e in r)) { if (!u) u = Array.prototype.slice.call(r, 0, e); u[e] = r[e]; } } return i.concat(u || Array.prototype.slice.call(r)); }; var PriorityQueue = function(i) { PriorityQueue_extends(PriorityQueue, i); function PriorityQueue(r, t, e) { if (r === void 0) { r = []; } if (t === void 0) { t = function(i, r) { if (i > r) return -1; if (i < r) return 1; return 0; }; } if (e === void 0) { e = true; } var n = i.call(this) || this; n.$ = t; if (Array.isArray(r)) { n.ii = e ? __spreadArray([], __read(r), false) : r; } else { n.ii = []; var u = n; r.forEach((function(i) { u.ii.push(i); })); } n.M = n.ii.length; var s = n.M >> 1; for (var o = n.M - 1 >> 1; o >= 0; --o) { n.ri(o, s); } return n; } PriorityQueue.prototype.ti = function(i) { var r = this.ii[i]; while (i > 0) { var t = i - 1 >> 1; var e = this.ii[t]; if (this.$(e, r) <= 0) break; this.ii[i] = e; i = t; } this.ii[i] = r; }; PriorityQueue.prototype.ri = function(i, r) { var t = this.ii[i]; while (i < r) { var e = i << 1 | 1; var n = e + 1; var u = this.ii[e]; if (n < this.M && this.$(u, this.ii[n]) > 0) { e = n; u = this.ii[n]; } if (this.$(u, t) >= 0) break; this.ii[i] = u; i = e; } this.ii[i] = t; }; PriorityQueue.prototype.clear = function() { this.M = 0; this.ii.length = 0; }; PriorityQueue.prototype.push = function(i) { this.ii.push(i); this.ti(this.M); this.M += 1; }; PriorityQueue.prototype.pop = function() { if (this.M === 0) return; var i = this.ii[0]; var r = this.ii.pop(); this.M -= 1; if (this.M) { this.ii[0] = r; this.ri(0, this.M >> 1); } return i; }; PriorityQueue.prototype.top = function() { return this.ii[0]; }; PriorityQueue.prototype.find = function(i) { return this.ii.indexOf(i) >= 0; }; PriorityQueue.prototype.remove = function(i) { var r = this.ii.indexOf(i); if (r < 0) return false; if (r === 0) { this.pop(); } else if (r === this.M - 1) { this.ii.pop(); this.M -= 1; } else { this.ii.splice(r, 1, this.ii.pop()); this.M -= 1; this.ti(r); this.ri(r, this.M >> 1); } return true; }; PriorityQueue.prototype.updateItem = function(i) { var r = this.ii.indexOf(i); if (r < 0) return false; this.ti(r); this.ri(r, this.M >> 1); return true; }; PriorityQueue.prototype.toArray = function() { return __spreadArray([], __read(this.ii), false); }; return PriorityQueue; }(Base); /* harmony default export */ var OtherContainer_PriorityQueue = (PriorityQueue); //# sourceMappingURL=PriorityQueue.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/SequentialContainer/Base/index.js var Base_extends = undefined && undefined.t || function() { var extendStatics = function(n, t) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, t) { n.__proto__ = t; } || function(n, t) { for (var e in t) if (Object.prototype.hasOwnProperty.call(t, e)) n[e] = t[e]; }; return extendStatics(n, t); }; return function(n, t) { if (typeof t !== "function" && t !== null) throw new TypeError("Class extends value " + String(t) + " is not a constructor or null"); extendStatics(n, t); function __() { this.constructor = n; } n.prototype = t === null ? Object.create(t) : (__.prototype = t.prototype, new __); }; }(); var SequentialContainer = function(n) { Base_extends(SequentialContainer, n); function SequentialContainer() { return n !== null && n.apply(this, arguments) || this; } return SequentialContainer; }(Container); /* harmony default export */ var SequentialContainer_Base = (SequentialContainer); //# sourceMappingURL=index.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/utils/throwError.js function throwIteratorAccessError() { throw new RangeError("Iterator access denied!"); } //# sourceMappingURL=throwError.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/SequentialContainer/Base/RandomIterator.js var RandomIterator_extends = undefined && undefined.t || function() { var extendStatics = function(t, r) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, r) { t.__proto__ = r; } || function(t, r) { for (var n in r) if (Object.prototype.hasOwnProperty.call(r, n)) t[n] = r[n]; }; return extendStatics(t, r); }; return function(t, r) { if (typeof r !== "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); extendStatics(t, r); function __() { this.constructor = t; } t.prototype = r === null ? Object.create(r) : (__.prototype = r.prototype, new __); }; }(); var RandomIterator_RandomIterator = function(t) { RandomIterator_extends(RandomIterator, t); function RandomIterator(r, n) { var o = t.call(this, n) || this; o.o = r; if (o.iteratorType === 0) { o.pre = function() { if (this.o === 0) { throwIteratorAccessError(); } this.o -= 1; return this; }; o.next = function() { if (this.o === this.container.size()) { throwIteratorAccessError(); } this.o += 1; return this; }; } else { o.pre = function() { if (this.o === this.container.size() - 1) { throwIteratorAccessError(); } this.o += 1; return this; }; o.next = function() { if (this.o === -1) { throwIteratorAccessError(); } this.o -= 1; return this; }; } return o; } Object.defineProperty(RandomIterator.prototype, "pointer", { get: function() { return this.container.getElementByPos(this.o); }, set: function(t) { this.container.setElementByPos(this.o, t); }, enumerable: false, configurable: true }); return RandomIterator; }(ContainerIterator); //# sourceMappingURL=RandomIterator.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/SequentialContainer/Vector.js var Vector_extends = undefined && undefined.t || function() { var extendStatics = function(t, r) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, r) { t.__proto__ = r; } || function(t, r) { for (var e in r) if (Object.prototype.hasOwnProperty.call(r, e)) t[e] = r[e]; }; return extendStatics(t, r); }; return function(t, r) { if (typeof r !== "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); extendStatics(t, r); function __() { this.constructor = t; } t.prototype = r === null ? Object.create(r) : (__.prototype = r.prototype, new __); }; }(); var __generator = undefined && undefined.i || function(t, r) { var e = { label: 0, sent: function() { if (o[0] & 1) throw o[1]; return o[1]; }, trys: [], ops: [] }, n, i, o, u; return u = { next: verb(0), throw: verb(1), return: verb(2) }, typeof Symbol === "function" && (u[Symbol.iterator] = function() { return this; }), u; function verb(t) { return function(r) { return step([ t, r ]); }; } function step(u) { if (n) throw new TypeError("Generator is already executing."); while (e) try { if (n = 1, i && (o = u[0] & 2 ? i["return"] : u[0] ? i["throw"] || ((o = i["return"]) && o.call(i), 0) : i.next) && !(o = o.call(i, u[1])).done) return o; if (i = 0, o) u = [ u[0] & 2, o.value ]; switch (u[0]) { case 0: case 1: o = u; break; case 4: e.label++; return { value: u[1], done: false }; case 5: e.label++; i = u[1]; u = [ 0 ]; continue; case 7: u = e.ops.pop(); e.trys.pop(); continue; default: if (!(o = e.trys, o = o.length > 0 && o[o.length - 1]) && (u[0] === 6 || u[0] === 2)) { e = 0; continue; } if (u[0] === 3 && (!o || u[1] > o[0] && u[1] < o[3])) { e.label = u[1]; break; } if (u[0] === 6 && e.label < o[1]) { e.label = o[1]; o = u; break; } if (o && e.label < o[2]) { e.label = o[2]; e.ops.push(u); break; } if (o[2]) e.ops.pop(); e.trys.pop(); continue; } u = r.call(t, e); } catch (t) { u = [ 6, t ]; i = 0; } finally { n = o = 0; } if (u[0] & 5) throw u[1]; return { value: u[0] ? u[1] : void 0, done: true }; } }; var Vector_read = undefined && undefined.q || function(t, r) { var e = typeof Symbol === "function" && t[Symbol.iterator]; if (!e) return t; var n = e.call(t), i, o = [], u; try { while ((r === void 0 || r-- > 0) && !(i = n.next()).done) o.push(i.value); } catch (t) { u = { error: t }; } finally { try { if (i && !i.done && (e = n["return"])) e.call(n); } finally { if (u) throw u.error; } } return o; }; var Vector_spreadArray = undefined && undefined.D || function(t, r, e) { if (e || arguments.length === 2) for (var n = 0, i = r.length, o; n < i; n++) { if (o || !(n in r)) { if (!o) o = Array.prototype.slice.call(r, 0, n); o[n] = r[n]; } } return t.concat(o || Array.prototype.slice.call(r)); }; var __values = undefined && undefined.V || function(t) { var r = typeof Symbol === "function" && Symbol.iterator, e = r && t[r], n = 0; if (e) return e.call(t); if (t && typeof t.length === "number") return { next: function() { if (t && n >= t.length) t = void 0; return { value: t && t[n++], done: !t }; } }; throw new TypeError(r ? "Object is not iterable." : "Symbol.iterator is not defined."); }; var VectorIterator = function(t) { Vector_extends(VectorIterator, t); function VectorIterator(r, e, n) { var i = t.call(this, r, n) || this; i.container = e; return i; } VectorIterator.prototype.copy = function() { return new VectorIterator(this.o, this.container, this.iteratorType); }; return VectorIterator; }(RandomIterator_RandomIterator); var Vector = function(t) { Vector_extends(Vector, t); function Vector(r, e) { if (r === void 0) { r = []; } if (e === void 0) { e = true; } var n = t.call(this) || this; if (Array.isArray(r)) { n.J = e ? Vector_spreadArray([], Vector_read(r), false) : r; n.M = r.length; } else { n.J = []; var i = n; r.forEach((function(t) { i.pushBack(t); })); } return n; } Vector.prototype.clear = function() { this.M = 0; this.J.length = 0; }; Vector.prototype.begin = function() { return new VectorIterator(0, this); }; Vector.prototype.end = function() { return new VectorIterator(this.M, this); }; Vector.prototype.rBegin = function() { return new VectorIterator(this.M - 1, this, 1); }; Vector.prototype.rEnd = function() { return new VectorIterator(-1, this, 1); }; Vector.prototype.front = function() { return this.J[0]; }; Vector.prototype.back = function() { return this.J[this.M - 1]; }; Vector.prototype.getElementByPos = function(t) { if (t < 0 || t > this.M - 1) { throw new RangeError; } return this.J[t]; }; Vector.prototype.eraseElementByPos = function(t) { if (t < 0 || t > this.M - 1) { throw new RangeError; } this.J.splice(t, 1); this.M -= 1; return this.M; }; Vector.prototype.eraseElementByValue = function(t) { var r = 0; for (var e = 0; e < this.M; ++e) { if (this.J[e] !== t) { this.J[r++] = this.J[e]; } } this.M = this.J.length = r; return this.M; }; Vector.prototype.eraseElementByIterator = function(t) { var r = t.o; t = t.next(); this.eraseElementByPos(r); return t; }; Vector.prototype.pushBack = function(t) { this.J.push(t); this.M += 1; return this.M; }; Vector.prototype.popBack = function() { if (this.M === 0) return; this.M -= 1; return this.J.pop(); }; Vector.prototype.setElementByPos = function(t, r) { if (t < 0 || t > this.M - 1) { throw new RangeError; } this.J[t] = r; }; Vector.prototype.insert = function(t, r, e) { var n; if (e === void 0) { e = 1; } if (t < 0 || t > this.M) { throw new RangeError; } (n = this.J).splice.apply(n, Vector_spreadArray([ t, 0 ], Vector_read(new Array(e).fill(r)), false)); this.M += e; return this.M; }; Vector.prototype.find = function(t) { for (var r = 0; r < this.M; ++r) { if (this.J[r] === t) { return new VectorIterator(r, this); } } return this.end(); }; Vector.prototype.reverse = function() { this.J.reverse(); }; Vector.prototype.unique = function() { var t = 1; for (var r = 1; r < this.M; ++r) { if (this.J[r] !== this.J[r - 1]) { this.J[t++] = this.J[r]; } } this.M = this.J.length = t; return this.M; }; Vector.prototype.sort = function(t) { this.J.sort(t); }; Vector.prototype.forEach = function(t) { for (var r = 0; r < this.M; ++r) { t(this.J[r], r, this); } }; Vector.prototype[Symbol.iterator] = function() { return function() { return __generator(this, (function(t) { switch (t.label) { case 0: return [ 5, __values(this.J) ]; case 1: t.sent(); return [ 2 ]; } })); }.bind(this)(); }; return Vector; }(SequentialContainer_Base); /* harmony default export */ var SequentialContainer_Vector = (Vector); //# sourceMappingURL=Vector.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/SequentialContainer/LinkList.js var LinkList_extends = undefined && undefined.t || function() { var extendStatics = function(t, i) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, i) { t.__proto__ = i; } || function(t, i) { for (var r in i) if (Object.prototype.hasOwnProperty.call(i, r)) t[r] = i[r]; }; return extendStatics(t, i); }; return function(t, i) { if (typeof i !== "function" && i !== null) throw new TypeError("Class extends value " + String(i) + " is not a constructor or null"); extendStatics(t, i); function __() { this.constructor = t; } t.prototype = i === null ? Object.create(i) : (__.prototype = i.prototype, new __); }; }(); var LinkList_generator = undefined && undefined.i || function(t, i) { var r = { label: 0, sent: function() { if (e[0] & 1) throw e[1]; return e[1]; }, trys: [], ops: [] }, n, s, e, h; return h = { next: verb(0), throw: verb(1), return: verb(2) }, typeof Symbol === "function" && (h[Symbol.iterator] = function() { return this; }), h; function verb(t) { return function(i) { return step([ t, i ]); }; } function step(h) { if (n) throw new TypeError("Generator is already executing."); while (r) try { if (n = 1, s && (e = h[0] & 2 ? s["return"] : h[0] ? s["throw"] || ((e = s["return"]) && e.call(s), 0) : s.next) && !(e = e.call(s, h[1])).done) return e; if (s = 0, e) h = [ h[0] & 2, e.value ]; switch (h[0]) { case 0: case 1: e = h; break; case 4: r.label++; return { value: h[1], done: false }; case 5: r.label++; s = h[1]; h = [ 0 ]; continue; case 7: h = r.ops.pop(); r.trys.pop(); continue; default: if (!(e = r.trys, e = e.length > 0 && e[e.length - 1]) && (h[0] === 6 || h[0] === 2)) { r = 0; continue; } if (h[0] === 3 && (!e || h[1] > e[0] && h[1] < e[3])) { r.label = h[1]; break; } if (h[0] === 6 && r.label < e[1]) { r.label = e[1]; e = h; break; } if (e && r.label < e[2]) { r.label = e[2]; r.ops.push(h); break; } if (e[2]) r.ops.pop(); r.trys.pop(); continue; } h = i.call(t, r); } catch (t) { h = [ 6, t ]; s = 0; } finally { n = e = 0; } if (h[0] & 5) throw h[1]; return { value: h[0] ? h[1] : void 0, done: true }; } }; var LinkList_LinkListIterator = function(t) { LinkList_extends(LinkListIterator, t); function LinkListIterator(i, r, n, s) { var e = t.call(this, s) || this; e.o = i; e.h = r; e.container = n; if (e.iteratorType === 0) { e.pre = function() { if (this.o.L === this.h) { throwIteratorAccessError(); } this.o = this.o.L; return this; }; e.next = function() { if (this.o === this.h) { throwIteratorAccessError(); } this.o = this.o.m; return this; }; } else { e.pre = function() { if (this.o.m === this.h) { throwIteratorAccessError(); } this.o = this.o.m; return this; }; e.next = function() { if (this.o === this.h) { throwIteratorAccessError(); } this.o = this.o.L; return this; }; } return e; } Object.defineProperty(LinkListIterator.prototype, "pointer", { get: function() { if (this.o === this.h) { throwIteratorAccessError(); } return this.o.p; }, set: function(t) { if (this.o === this.h) { throwIteratorAccessError(); } this.o.p = t; }, enumerable: false, configurable: true }); LinkListIterator.prototype.copy = function() { return new LinkListIterator(this.o, this.h, this.container, this.iteratorType); }; return LinkListIterator; }(ContainerIterator); var LinkList_LinkList = function(t) { LinkList_extends(LinkList, t); function LinkList(i) { if (i === void 0) { i = []; } var r = t.call(this) || this; r.h = {}; r.H = r.l = r.h.L = r.h.m = r.h; var n = r; i.forEach((function(t) { n.pushBack(t); })); return r; } LinkList.prototype.G = function(t) { var i = t.L, r = t.m; i.m = r; r.L = i; if (t === this.H) { this.H = r; } if (t === this.l) { this.l = i; } this.M -= 1; }; LinkList.prototype.F = function(t, i) { var r = i.m; var n = { p: t, L: i, m: r }; i.m = n; r.L = n; if (i === this.h) { this.H = n; } if (r === this.h) { this.l = n; } this.M += 1; }; LinkList.prototype.clear = function() { this.M = 0; this.H = this.l = this.h.L = this.h.m = this.h; }; LinkList.prototype.begin = function() { return new LinkList_LinkListIterator(this.H, this.h, this); }; LinkList.prototype.end = function() { return new LinkList_LinkListIterator(this.h, this.h, this); }; LinkList.prototype.rBegin = function() { return new LinkList_LinkListIterator(this.l, this.h, this, 1); }; LinkList.prototype.rEnd = function() { return new LinkList_LinkListIterator(this.h, this.h, this, 1); }; LinkList.prototype.front = function() { return this.H.p; }; LinkList.prototype.back = function() { return this.l.p; }; LinkList.prototype.getElementByPos = function(t) { if (t < 0 || t > this.M - 1) { throw new RangeError; } var i = this.H; while (t--) { i = i.m; } return i.p; }; LinkList.prototype.eraseElementByPos = function(t) { if (t < 0 || t > this.M - 1) { throw new RangeError; } var i = this.H; while (t--) { i = i.m; } this.G(i); return this.M; }; LinkList.prototype.eraseElementByValue = function(t) { var i = this.H; while (i !== this.h) { if (i.p === t) { this.G(i); } i = i.m; } return this.M; }; LinkList.prototype.eraseElementByIterator = function(t) { var i = t.o; if (i === this.h) { throwIteratorAccessError(); } t = t.next(); this.G(i); return t; }; LinkList.prototype.pushBack = function(t) { this.F(t, this.l); return this.M; }; LinkList.prototype.popBack = function() { if (this.M === 0) return; var t = this.l.p; this.G(this.l); return t; }; LinkList.prototype.pushFront = function(t) { this.F(t, this.h); return this.M; }; LinkList.prototype.popFront = function() { if (this.M === 0) return; var t = this.H.p; this.G(this.H); return t; }; LinkList.prototype.setElementByPos = function(t, i) { if (t < 0 || t > this.M - 1) { throw new RangeError; } var r = this.H; while (t--) { r = r.m; } r.p = i; }; LinkList.prototype.insert = function(t, i, r) { if (r === void 0) { r = 1; } if (t < 0 || t > this.M) { throw new RangeError; } if (r <= 0) return this.M; if (t === 0) { while (r--) this.pushFront(i); } else if (t === this.M) { while (r--) this.pushBack(i); } else { var n = this.H; for (var s = 1; s < t; ++s) { n = n.m; } var e = n.m; this.M += r; while (r--) { n.m = { p: i, L: n }; n.m.L = n; n = n.m; } n.m = e; e.L = n; } return this.M; }; LinkList.prototype.find = function(t) { var i = this.H; while (i !== this.h) { if (i.p === t) { return new LinkList_LinkListIterator(i, this.h, this); } i = i.m; } return this.end(); }; LinkList.prototype.reverse = function() { if (this.M <= 1) return; var t = this.H; var i = this.l; var r = 0; while (r << 1 < this.M) { var n = t.p; t.p = i.p; i.p = n; t = t.m; i = i.L; r += 1; } }; LinkList.prototype.unique = function() { if (this.M <= 1) { return this.M; } var t = this.H; while (t !== this.h) { var i = t; while (i.m !== this.h && i.p === i.m.p) { i = i.m; this.M -= 1; } t.m = i.m; t.m.L = t; t = t.m; } return this.M; }; LinkList.prototype.sort = function(t) { if (this.M <= 1) return; var i = []; this.forEach((function(t) { i.push(t); })); i.sort(t); var r = this.H; i.forEach((function(t) { r.p = t; r = r.m; })); }; LinkList.prototype.merge = function(t) { var i = this; if (this.M === 0) { t.forEach((function(t) { i.pushBack(t); })); } else { var r = this.H; t.forEach((function(t) { while (r !== i.h && r.p <= t) { r = r.m; } i.F(t, r.L); })); } return this.M; }; LinkList.prototype.forEach = function(t) { var i = this.H; var r = 0; while (i !== this.h) { t(i.p, r++, this); i = i.m; } }; LinkList.prototype[Symbol.iterator] = function() { return function() { var t; return LinkList_generator(this, (function(i) { switch (i.label) { case 0: if (this.M === 0) return [ 2 ]; t = this.H; i.label = 1; case 1: if (!(t !== this.h)) return [ 3, 3 ]; return [ 4, t.p ]; case 2: i.sent(); t = t.m; return [ 3, 1 ]; case 3: return [ 2 ]; } })); }.bind(this)(); }; return LinkList; }(SequentialContainer_Base); /* harmony default export */ var SequentialContainer_LinkList = (LinkList_LinkList); //# sourceMappingURL=LinkList.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/SequentialContainer/Deque.js var Deque_extends = undefined && undefined.t || function() { var extendStatics = function(t, i) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, i) { t.__proto__ = i; } || function(t, i) { for (var r in i) if (Object.prototype.hasOwnProperty.call(i, r)) t[r] = i[r]; }; return extendStatics(t, i); }; return function(t, i) { if (typeof i !== "function" && i !== null) throw new TypeError("Class extends value " + String(i) + " is not a constructor or null"); extendStatics(t, i); function __() { this.constructor = t; } t.prototype = i === null ? Object.create(i) : (__.prototype = i.prototype, new __); }; }(); var Deque_generator = undefined && undefined.i || function(t, i) { var r = { label: 0, sent: function() { if (h[0] & 1) throw h[1]; return h[1]; }, trys: [], ops: [] }, e, s, h, n; return n = { next: verb(0), throw: verb(1), return: verb(2) }, typeof Symbol === "function" && (n[Symbol.iterator] = function() { return this; }), n; function verb(t) { return function(i) { return step([ t, i ]); }; } function step(n) { if (e) throw new TypeError("Generator is already executing."); while (r) try { if (e = 1, s && (h = n[0] & 2 ? s["return"] : n[0] ? s["throw"] || ((h = s["return"]) && h.call(s), 0) : s.next) && !(h = h.call(s, n[1])).done) return h; if (s = 0, h) n = [ n[0] & 2, h.value ]; switch (n[0]) { case 0: case 1: h = n; break; case 4: r.label++; return { value: n[1], done: false }; case 5: r.label++; s = n[1]; n = [ 0 ]; continue; case 7: n = r.ops.pop(); r.trys.pop(); continue; default: if (!(h = r.trys, h = h.length > 0 && h[h.length - 1]) && (n[0] === 6 || n[0] === 2)) { r = 0; continue; } if (n[0] === 3 && (!h || n[1] > h[0] && n[1] < h[3])) { r.label = n[1]; break; } if (n[0] === 6 && r.label < h[1]) { r.label = h[1]; h = n; break; } if (h && r.label < h[2]) { r.label = h[2]; r.ops.push(n); break; } if (h[2]) r.ops.pop(); r.trys.pop(); continue; } n = i.call(t, r); } catch (t) { n = [ 6, t ]; s = 0; } finally { e = h = 0; } if (n[0] & 5) throw n[1]; return { value: n[0] ? n[1] : void 0, done: true }; } }; var Deque_read = undefined && undefined.q || function(t, i) { var r = typeof Symbol === "function" && t[Symbol.iterator]; if (!r) return t; var e = r.call(t), s, h = [], n; try { while ((i === void 0 || i-- > 0) && !(s = e.next()).done) h.push(s.value); } catch (t) { n = { error: t }; } finally { try { if (s && !s.done && (r = e["return"])) r.call(e); } finally { if (n) throw n.error; } } return h; }; var Deque_spreadArray = undefined && undefined.D || function(t, i, r) { if (r || arguments.length === 2) for (var e = 0, s = i.length, h; e < s; e++) { if (h || !(e in i)) { if (!h) h = Array.prototype.slice.call(i, 0, e); h[e] = i[e]; } } return t.concat(h || Array.prototype.slice.call(i)); }; var DequeIterator = function(t) { Deque_extends(DequeIterator, t); function DequeIterator(i, r, e) { var s = t.call(this, i, e) || this; s.container = r; return s; } DequeIterator.prototype.copy = function() { return new DequeIterator(this.o, this.container, this.iteratorType); }; return DequeIterator; }(RandomIterator_RandomIterator); var Deque = function(t) { Deque_extends(Deque, t); function Deque(i, r) { if (i === void 0) { i = []; } if (r === void 0) { r = 1 << 12; } var e = t.call(this) || this; e.A = 0; e.S = 0; e.R = 0; e.k = 0; e.C = 0; e.j = []; var s = function() { if (typeof i.length === "number") return i.length; if (typeof i.size === "number") return i.size; if (typeof i.size === "function") return i.size(); throw new TypeError("Cannot get the length or size of the container"); }(); e.B = r; e.C = Math.max(Math.ceil(s / e.B), 1); for (var h = 0; h < e.C; ++h) { e.j.push(new Array(e.B)); } var n = Math.ceil(s / e.B); e.A = e.R = (e.C >> 1) - (n >> 1); e.S = e.k = e.B - s % e.B >> 1; var u = e; i.forEach((function(t) { u.pushBack(t); })); return e; } Deque.prototype.O = function() { var t = []; var i = Math.max(this.C >> 1, 1); for (var r = 0; r < i; ++r) { t[r] = new Array(this.B); } for (var r = this.A; r < this.C; ++r) { t[t.length] = this.j[r]; } for (var r = 0; r < this.R; ++r) { t[t.length] = this.j[r]; } t[t.length] = Deque_spreadArray([], Deque_read(this.j[this.R]), false); this.A = i; this.R = t.length - 1; for (var r = 0; r < i; ++r) { t[t.length] = new Array(this.B); } this.j = t; this.C = t.length; }; Deque.prototype.T = function(t) { var i = this.S + t + 1; var r = i % this.B; var e = r - 1; var s = this.A + (i - r) / this.B; if (r === 0) s -= 1; s %= this.C; if (e < 0) e += this.B; return { curNodeBucketIndex: s, curNodePointerIndex: e }; }; Deque.prototype.clear = function() { this.j = [ new Array(this.B) ]; this.C = 1; this.A = this.R = this.M = 0; this.S = this.k = this.B >> 1; }; Deque.prototype.begin = function() { return new DequeIterator(0, this); }; Deque.prototype.end = function() { return new DequeIterator(this.M, this); }; Deque.prototype.rBegin = function() { return new DequeIterator(this.M - 1, this, 1); }; Deque.prototype.rEnd = function() { return new DequeIterator(-1, this, 1); }; Deque.prototype.front = function() { if (this.M === 0) return; return this.j[this.A][this.S]; }; Deque.prototype.back = function() { if (this.M === 0) return; return this.j[this.R][this.k]; }; Deque.prototype.pushBack = function(t) { if (this.M) { if (this.k < this.B - 1) { this.k += 1; } else if (this.R < this.C - 1) { this.R += 1; this.k = 0; } else { this.R = 0; this.k = 0; } if (this.R === this.A && this.k === this.S) this.O(); } this.M += 1; this.j[this.R][this.k] = t; return this.M; }; Deque.prototype.popBack = function() { if (this.M === 0) return; var t = this.j[this.R][this.k]; if (this.M !== 1) { if (this.k > 0) { this.k -= 1; } else if (this.R > 0) { this.R -= 1; this.k = this.B - 1; } else { this.R = this.C - 1; this.k = this.B - 1; } } this.M -= 1; return t; }; Deque.prototype.pushFront = function(t) { if (this.M) { if (this.S > 0) { this.S -= 1; } else if (this.A > 0) { this.A -= 1; this.S = this.B - 1; } else { this.A = this.C - 1; this.S = this.B - 1; } if (this.A === this.R && this.S === this.k) this.O(); } this.M += 1; this.j[this.A][this.S] = t; return this.M; }; Deque.prototype.popFront = function() { if (this.M === 0) return; var t = this.j[this.A][this.S]; if (this.M !== 1) { if (this.S < this.B - 1) { this.S += 1; } else if (this.A < this.C - 1) { this.A += 1; this.S = 0; } else { this.A = 0; this.S = 0; } } this.M -= 1; return t; }; Deque.prototype.getElementByPos = function(t) { if (t < 0 || t > this.M - 1) { throw new RangeError; } var i = this.T(t), r = i.curNodeBucketIndex, e = i.curNodePointerIndex; return this.j[r][e]; }; Deque.prototype.setElementByPos = function(t, i) { if (t < 0 || t > this.M - 1) { throw new RangeError; } var r = this.T(t), e = r.curNodeBucketIndex, s = r.curNodePointerIndex; this.j[e][s] = i; }; Deque.prototype.insert = function(t, i, r) { if (r === void 0) { r = 1; } if (t < 0 || t > this.M) { throw new RangeError; } if (t === 0) { while (r--) this.pushFront(i); } else if (t === this.M) { while (r--) this.pushBack(i); } else { var e = []; for (var s = t; s < this.M; ++s) { e.push(this.getElementByPos(s)); } this.cut(t - 1); for (var s = 0; s < r; ++s) this.pushBack(i); for (var s = 0; s < e.length; ++s) this.pushBack(e[s]); } return this.M; }; Deque.prototype.cut = function(t) { if (t < 0) { this.clear(); return 0; } var i = this.T(t), r = i.curNodeBucketIndex, e = i.curNodePointerIndex; this.R = r; this.k = e; this.M = t + 1; return this.M; }; Deque.prototype.eraseElementByPos = function(t) { if (t < 0 || t > this.M - 1) { throw new RangeError; } if (t === 0) this.popFront(); else if (t === this.M - 1) this.popBack(); else { var i = []; for (var r = t + 1; r < this.M; ++r) { i.push(this.getElementByPos(r)); } this.cut(t); this.popBack(); var e = this; i.forEach((function(t) { e.pushBack(t); })); } return this.M; }; Deque.prototype.eraseElementByValue = function(t) { if (this.M === 0) return 0; var i = []; for (var r = 0; r < this.M; ++r) { var e = this.getElementByPos(r); if (e !== t) i.push(e); } var s = i.length; for (var r = 0; r < s; ++r) this.setElementByPos(r, i[r]); return this.cut(s - 1); }; Deque.prototype.eraseElementByIterator = function(t) { var i = t.o; this.eraseElementByPos(i); t = t.next(); return t; }; Deque.prototype.find = function(t) { for (var i = 0; i < this.M; ++i) { if (this.getElementByPos(i) === t) { return new DequeIterator(i, this); } } return this.end(); }; Deque.prototype.reverse = function() { var t = 0; var i = this.M - 1; while (t < i) { var r = this.getElementByPos(t); this.setElementByPos(t, this.getElementByPos(i)); this.setElementByPos(i, r); t += 1; i -= 1; } }; Deque.prototype.unique = function() { if (this.M <= 1) { return this.M; } var t = 1; var i = this.getElementByPos(0); for (var r = 1; r < this.M; ++r) { var e = this.getElementByPos(r); if (e !== i) { i = e; this.setElementByPos(t++, e); } } while (this.M > t) this.popBack(); return this.M; }; Deque.prototype.sort = function(t) { var i = []; for (var r = 0; r < this.M; ++r) { i.push(this.getElementByPos(r)); } i.sort(t); for (var r = 0; r < this.M; ++r) this.setElementByPos(r, i[r]); }; Deque.prototype.shrinkToFit = function() { if (this.M === 0) return; var t = []; this.forEach((function(i) { t.push(i); })); this.C = Math.max(Math.ceil(this.M / this.B), 1); this.M = this.A = this.R = this.S = this.k = 0; this.j = []; for (var i = 0; i < this.C; ++i) { this.j.push(new Array(this.B)); } for (var i = 0; i < t.length; ++i) this.pushBack(t[i]); }; Deque.prototype.forEach = function(t) { for (var i = 0; i < this.M; ++i) { t(this.getElementByPos(i), i, this); } }; Deque.prototype[Symbol.iterator] = function() { return function() { var t; return Deque_generator(this, (function(i) { switch (i.label) { case 0: t = 0; i.label = 1; case 1: if (!(t < this.M)) return [ 3, 4 ]; return [ 4, this.getElementByPos(t) ]; case 2: i.sent(); i.label = 3; case 3: ++t; return [ 3, 1 ]; case 4: return [ 2 ]; } })); }.bind(this)(); }; return Deque; }(SequentialContainer_Base); /* harmony default export */ var SequentialContainer_Deque = (Deque); //# sourceMappingURL=Deque.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/TreeNode.js var TreeNode_extends = undefined && undefined.t || function() { var extendStatics = function(e, n) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(e, n) { e.__proto__ = n; } || function(e, n) { for (var t in n) if (Object.prototype.hasOwnProperty.call(n, t)) e[t] = n[t]; }; return extendStatics(e, n); }; return function(e, n) { if (typeof n !== "function" && n !== null) throw new TypeError("Class extends value " + String(n) + " is not a constructor or null"); extendStatics(e, n); function __() { this.constructor = e; } e.prototype = n === null ? Object.create(n) : (__.prototype = n.prototype, new __); }; }(); var TreeNode = function() { function TreeNode(e, n) { this.ee = 1; this.u = undefined; this.p = undefined; this.K = undefined; this.N = undefined; this.rr = undefined; this.u = e; this.p = n; } TreeNode.prototype.L = function() { var e = this; if (e.ee === 1 && e.rr.rr === e) { e = e.N; } else if (e.K) { e = e.K; while (e.N) { e = e.N; } } else { var n = e.rr; while (n.K === e) { e = n; n = e.rr; } e = n; } return e; }; TreeNode.prototype.m = function() { var e = this; if (e.N) { e = e.N; while (e.K) { e = e.K; } return e; } else { var n = e.rr; while (n.N === e) { e = n; n = e.rr; } if (e.N !== n) { return n; } else return e; } }; TreeNode.prototype.ne = function() { var e = this.rr; var n = this.N; var t = n.K; if (e.rr === this) e.rr = n; else if (e.K === this) e.K = n; else e.N = n; n.rr = e; n.K = this; this.rr = n; this.N = t; if (t) t.rr = this; return n; }; TreeNode.prototype.te = function() { var e = this.rr; var n = this.K; var t = n.N; if (e.rr === this) e.rr = n; else if (e.K === this) e.K = n; else e.N = n; n.rr = e; n.N = this; this.rr = n; this.K = t; if (t) t.rr = this; return n; }; return TreeNode; }(); var TreeNodeEnableIndex = function(e) { TreeNode_extends(TreeNodeEnableIndex, e); function TreeNodeEnableIndex() { var n = e !== null && e.apply(this, arguments) || this; n.tr = 1; return n; } TreeNodeEnableIndex.prototype.ne = function() { var n = e.prototype.ne.call(this); this.ie(); n.ie(); return n; }; TreeNodeEnableIndex.prototype.te = function() { var n = e.prototype.te.call(this); this.ie(); n.ie(); return n; }; TreeNodeEnableIndex.prototype.ie = function() { this.tr = 1; if (this.K) { this.tr += this.K.tr; } if (this.N) { this.tr += this.N.tr; } }; return TreeNodeEnableIndex; }(TreeNode); //# sourceMappingURL=TreeNode.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/index.js var TreeContainer_Base_extends = undefined && undefined.t || function() { var extendStatics = function(e, r) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(e, r) { e.__proto__ = r; } || function(e, r) { for (var i in r) if (Object.prototype.hasOwnProperty.call(r, i)) e[i] = r[i]; }; return extendStatics(e, r); }; return function(e, r) { if (typeof r !== "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); extendStatics(e, r); function __() { this.constructor = e; } e.prototype = r === null ? Object.create(r) : (__.prototype = r.prototype, new __); }; }(); var Base_read = undefined && undefined.q || function(e, r) { var i = typeof Symbol === "function" && e[Symbol.iterator]; if (!i) return e; var t = i.call(e), n, s = [], f; try { while ((r === void 0 || r-- > 0) && !(n = t.next()).done) s.push(n.value); } catch (e) { f = { error: e }; } finally { try { if (n && !n.done && (i = t["return"])) i.call(t); } finally { if (f) throw f.error; } } return s; }; var Base_values = undefined && undefined.V || function(e) { var r = typeof Symbol === "function" && Symbol.iterator, i = r && e[r], t = 0; if (i) return i.call(e); if (e && typeof e.length === "number") return { next: function() { if (e && t >= e.length) e = void 0; return { value: e && e[t++], done: !e }; } }; throw new TypeError(r ? "Object is not iterable." : "Symbol.iterator is not defined."); }; var Base_TreeContainer = function(e) { TreeContainer_Base_extends(TreeContainer, e); function TreeContainer(r, i) { if (r === void 0) { r = function(e, r) { if (e < r) return -1; if (e > r) return 1; return 0; }; } if (i === void 0) { i = false; } var t = e.call(this) || this; t.W = undefined; t.$ = r; if (i) { t.re = TreeNodeEnableIndex; t.v = function(e, r, i) { var t = this.se(e, r, i); if (t) { var n = t.rr; while (n !== this.h) { n.tr += 1; n = n.rr; } var s = this.fe(t); if (s) { var f = s, h = f.parentNode, u = f.grandParent, a = f.curNode; h.ie(); u.ie(); a.ie(); } } return this.M; }; t.G = function(e) { var r = this.he(e); while (r !== this.h) { r.tr -= 1; r = r.rr; } }; } else { t.re = TreeNode; t.v = function(e, r, i) { var t = this.se(e, r, i); if (t) this.fe(t); return this.M; }; t.G = t.he; } t.h = new t.re; return t; } TreeContainer.prototype.U = function(e, r) { var i = this.h; while (e) { var t = this.$(e.u, r); if (t < 0) { e = e.N; } else if (t > 0) { i = e; e = e.K; } else return e; } return i; }; TreeContainer.prototype.X = function(e, r) { var i = this.h; while (e) { var t = this.$(e.u, r); if (t <= 0) { e = e.N; } else { i = e; e = e.K; } } return i; }; TreeContainer.prototype.Y = function(e, r) { var i = this.h; while (e) { var t = this.$(e.u, r); if (t < 0) { i = e; e = e.N; } else if (t > 0) { e = e.K; } else return e; } return i; }; TreeContainer.prototype.Z = function(e, r) { var i = this.h; while (e) { var t = this.$(e.u, r); if (t < 0) { i = e; e = e.N; } else { e = e.K; } } return i; }; TreeContainer.prototype.ue = function(e) { while (true) { var r = e.rr; if (r === this.h) return; if (e.ee === 1) { e.ee = 0; return; } if (e === r.K) { var i = r.N; if (i.ee === 1) { i.ee = 0; r.ee = 1; if (r === this.W) { this.W = r.ne(); } else r.ne(); } else { if (i.N && i.N.ee === 1) { i.ee = r.ee; r.ee = 0; i.N.ee = 0; if (r === this.W) { this.W = r.ne(); } else r.ne(); return; } else if (i.K && i.K.ee === 1) { i.ee = 1; i.K.ee = 0; i.te(); } else { i.ee = 1; e = r; } } } else { var i = r.K; if (i.ee === 1) { i.ee = 0; r.ee = 1; if (r === this.W) { this.W = r.te(); } else r.te(); } else { if (i.K && i.K.ee === 1) { i.ee = r.ee; r.ee = 0; i.K.ee = 0; if (r === this.W) { this.W = r.te(); } else r.te(); return; } else if (i.N && i.N.ee === 1) { i.ee = 1; i.N.ee = 0; i.ne(); } else { i.ee = 1; e = r; } } } } }; TreeContainer.prototype.he = function(e) { var r, i; if (this.M === 1) { this.clear(); return this.h; } var t = e; while (t.K || t.N) { if (t.N) { t = t.N; while (t.K) t = t.K; } else { t = t.K; } r = Base_read([ t.u, e.u ], 2), e.u = r[0], t.u = r[1]; i = Base_read([ t.p, e.p ], 2), e.p = i[0], t.p = i[1]; e = t; } if (this.h.K === t) { this.h.K = t.rr; } else if (this.h.N === t) { this.h.N = t.rr; } this.ue(t); var n = t.rr; if (t === n.K) { n.K = undefined; } else n.N = undefined; this.M -= 1; this.W.ee = 0; return n; }; TreeContainer.prototype.ae = function(e, r) { if (e === undefined) return false; var i = this.ae(e.K, r); if (i) return true; if (r(e)) return true; return this.ae(e.N, r); }; TreeContainer.prototype.fe = function(e) { while (true) { var r = e.rr; if (r.ee === 0) return; var i = r.rr; if (r === i.K) { var t = i.N; if (t && t.ee === 1) { t.ee = r.ee = 0; if (i === this.W) return; i.ee = 1; e = i; continue; } else if (e === r.N) { e.ee = 0; if (e.K) e.K.rr = r; if (e.N) e.N.rr = i; r.N = e.K; i.K = e.N; e.K = r; e.N = i; if (i === this.W) { this.W = e; this.h.rr = e; } else { var n = i.rr; if (n.K === i) { n.K = e; } else n.N = e; } e.rr = i.rr; r.rr = e; i.rr = e; i.ee = 1; return { parentNode: r, grandParent: i, curNode: e }; } else { r.ee = 0; if (i === this.W) { this.W = i.te(); } else i.te(); i.ee = 1; } } else { var t = i.K; if (t && t.ee === 1) { t.ee = r.ee = 0; if (i === this.W) return; i.ee = 1; e = i; continue; } else if (e === r.K) { e.ee = 0; if (e.K) e.K.rr = i; if (e.N) e.N.rr = r; i.N = e.K; r.K = e.N; e.K = i; e.N = r; if (i === this.W) { this.W = e; this.h.rr = e; } else { var n = i.rr; if (n.K === i) { n.K = e; } else n.N = e; } e.rr = i.rr; r.rr = e; i.rr = e; i.ee = 1; return { parentNode: r, grandParent: i, curNode: e }; } else { r.ee = 0; if (i === this.W) { this.W = i.ne(); } else i.ne(); i.ee = 1; } } return; } }; TreeContainer.prototype.se = function(e, r, i) { if (this.W === undefined) { this.M += 1; this.W = new this.re(e, r); this.W.ee = 0; this.W.rr = this.h; this.h.rr = this.W; this.h.K = this.W; this.h.N = this.W; return; } var t; var n = this.h.K; var s = this.$(n.u, e); if (s === 0) { n.p = r; return; } else if (s > 0) { n.K = new this.re(e, r); n.K.rr = n; t = n.K; this.h.K = t; } else { var f = this.h.N; var h = this.$(f.u, e); if (h === 0) { f.p = r; return; } else if (h < 0) { f.N = new this.re(e, r); f.N.rr = f; t = f.N; this.h.N = t; } else { if (i !== undefined) { var u = i.o; if (u !== this.h) { var a = this.$(u.u, e); if (a === 0) { u.p = r; return; } else if (a > 0) { var o = u.L(); var l = this.$(o.u, e); if (l === 0) { o.p = r; return; } else if (l < 0) { t = new this.re(e, r); if (o.N === undefined) { o.N = t; t.rr = o; } else { u.K = t; t.rr = u; } } } } } if (t === undefined) { t = this.W; while (true) { var v = this.$(t.u, e); if (v > 0) { if (t.K === undefined) { t.K = new this.re(e, r); t.K.rr = t; t = t.K; break; } t = t.K; } else if (v < 0) { if (t.N === undefined) { t.N = new this.re(e, r); t.N.rr = t; t = t.N; break; } t = t.N; } else { t.p = r; return; } } } } } this.M += 1; return t; }; TreeContainer.prototype.g = function(e, r) { while (e) { var i = this.$(e.u, r); if (i < 0) { e = e.N; } else if (i > 0) { e = e.K; } else return e; } return e || this.h; }; TreeContainer.prototype.clear = function() { this.M = 0; this.W = undefined; this.h.rr = undefined; this.h.K = this.h.N = undefined; }; TreeContainer.prototype.updateKeyByIterator = function(e, r) { var i = e.o; if (i === this.h) { throwIteratorAccessError(); } if (this.M === 1) { i.u = r; return true; } if (i === this.h.K) { if (this.$(i.m().u, r) > 0) { i.u = r; return true; } return false; } if (i === this.h.N) { if (this.$(i.L().u, r) < 0) { i.u = r; return true; } return false; } var t = i.L().u; if (this.$(t, r) >= 0) return false; var n = i.m().u; if (this.$(n, r) <= 0) return false; i.u = r; return true; }; TreeContainer.prototype.eraseElementByPos = function(e) { if (e < 0 || e > this.M - 1) { throw new RangeError; } var r = 0; var i = this; this.ae(this.W, (function(t) { if (e === r) { i.G(t); return true; } r += 1; return false; })); return this.M; }; TreeContainer.prototype.eraseElementByKey = function(e) { if (this.M === 0) return false; var r = this.g(this.W, e); if (r === this.h) return false; this.G(r); return true; }; TreeContainer.prototype.eraseElementByIterator = function(e) { var r = e.o; if (r === this.h) { throwIteratorAccessError(); } var i = r.N === undefined; var t = e.iteratorType === 0; if (t) { if (i) e.next(); } else { if (!i || r.K === undefined) e.next(); } this.G(r); return e; }; TreeContainer.prototype.forEach = function(e) { var r, i; var t = 0; try { for (var n = Base_values(this), s = n.next(); !s.done; s = n.next()) { var f = s.value; e(f, t++, this); } } catch (e) { r = { error: e }; } finally { try { if (s && !s.done && (i = n.return)) i.call(n); } finally { if (r) throw r.error; } } }; TreeContainer.prototype.getElementByPos = function(e) { var r, i; if (e < 0 || e > this.M - 1) { throw new RangeError; } var t; var n = 0; try { for (var s = Base_values(this), f = s.next(); !f.done; f = s.next()) { var h = f.value; if (n === e) { t = h; break; } n += 1; } } catch (e) { r = { error: e }; } finally { try { if (f && !f.done && (i = s.return)) i.call(s); } finally { if (r) throw r.error; } } return t; }; TreeContainer.prototype.getHeight = function() { if (this.M === 0) return 0; var traversal = function(e) { if (!e) return 0; return Math.max(traversal(e.K), traversal(e.N)) + 1; }; return traversal(this.W); }; return TreeContainer; }(Container); /* harmony default export */ var TreeContainer_Base = (Base_TreeContainer); //# sourceMappingURL=index.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/TreeContainer/Base/TreeIterator.js var TreeIterator_extends = undefined && undefined.t || function() { var extendStatics = function(r, t) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(r, t) { r.__proto__ = t; } || function(r, t) { for (var e in t) if (Object.prototype.hasOwnProperty.call(t, e)) r[e] = t[e]; }; return extendStatics(r, t); }; return function(r, t) { if (typeof t !== "function" && t !== null) throw new TypeError("Class extends value " + String(t) + " is not a constructor or null"); extendStatics(r, t); function __() { this.constructor = r; } r.prototype = t === null ? Object.create(t) : (__.prototype = t.prototype, new __); }; }(); var TreeIterator_TreeIterator = function(r) { TreeIterator_extends(TreeIterator, r); function TreeIterator(t, e, i) { var n = r.call(this, i) || this; n.o = t; n.h = e; if (n.iteratorType === 0) { n.pre = function() { if (this.o === this.h.K) { throwIteratorAccessError(); } this.o = this.o.L(); return this; }; n.next = function() { if (this.o === this.h) { throwIteratorAccessError(); } this.o = this.o.m(); return this; }; } else { n.pre = function() { if (this.o === this.h.N) { throwIteratorAccessError(); } this.o = this.o.m(); return this; }; n.next = function() { if (this.o === this.h) { throwIteratorAccessError(); } this.o = this.o.L(); return this; }; } return n; } Object.defineProperty(TreeIterator.prototype, "index", { get: function() { var r = this.o; var t = this.h.rr; if (r === this.h) { if (t) { return t.tr - 1; } return 0; } var e = 0; if (r.K) { e += r.K.tr; } while (r !== t) { var i = r.rr; if (r === i.N) { e += 1; if (i.K) { e += i.K.tr; } } r = i; } return e; }, enumerable: false, configurable: true }); return TreeIterator; }(ContainerIterator); /* harmony default export */ var Base_TreeIterator = (TreeIterator_TreeIterator); //# sourceMappingURL=TreeIterator.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/TreeContainer/OrderedSet.js var OrderedSet_extends = undefined && undefined.t || function() { var extendStatics = function(e, t) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(e, t) { e.__proto__ = t; } || function(e, t) { for (var r in t) if (Object.prototype.hasOwnProperty.call(t, r)) e[r] = t[r]; }; return extendStatics(e, t); }; return function(e, t) { if (typeof t !== "function" && t !== null) throw new TypeError("Class extends value " + String(t) + " is not a constructor or null"); extendStatics(e, t); function __() { this.constructor = e; } e.prototype = t === null ? Object.create(t) : (__.prototype = t.prototype, new __); }; }(); var OrderedSet_generator = undefined && undefined.i || function(e, t) { var r = { label: 0, sent: function() { if (o[0] & 1) throw o[1]; return o[1]; }, trys: [], ops: [] }, n, i, o, u; return u = { next: verb(0), throw: verb(1), return: verb(2) }, typeof Symbol === "function" && (u[Symbol.iterator] = function() { return this; }), u; function verb(e) { return function(t) { return step([ e, t ]); }; } function step(u) { if (n) throw new TypeError("Generator is already executing."); while (r) try { if (n = 1, i && (o = u[0] & 2 ? i["return"] : u[0] ? i["throw"] || ((o = i["return"]) && o.call(i), 0) : i.next) && !(o = o.call(i, u[1])).done) return o; if (i = 0, o) u = [ u[0] & 2, o.value ]; switch (u[0]) { case 0: case 1: o = u; break; case 4: r.label++; return { value: u[1], done: false }; case 5: r.label++; i = u[1]; u = [ 0 ]; continue; case 7: u = r.ops.pop(); r.trys.pop(); continue; default: if (!(o = r.trys, o = o.length > 0 && o[o.length - 1]) && (u[0] === 6 || u[0] === 2)) { r = 0; continue; } if (u[0] === 3 && (!o || u[1] > o[0] && u[1] < o[3])) { r.label = u[1]; break; } if (u[0] === 6 && r.label < o[1]) { r.label = o[1]; o = u; break; } if (o && r.label < o[2]) { r.label = o[2]; r.ops.push(u); break; } if (o[2]) r.ops.pop(); r.trys.pop(); continue; } u = t.call(e, r); } catch (e) { u = [ 6, e ]; i = 0; } finally { n = o = 0; } if (u[0] & 5) throw u[1]; return { value: u[0] ? u[1] : void 0, done: true }; } }; var OrderedSet_values = undefined && undefined.V || function(e) { var t = typeof Symbol === "function" && Symbol.iterator, r = t && e[t], n = 0; if (r) return r.call(e); if (e && typeof e.length === "number") return { next: function() { if (e && n >= e.length) e = void 0; return { value: e && e[n++], done: !e }; } }; throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined."); }; var OrderedSet_OrderedSetIterator = function(e) { OrderedSet_extends(OrderedSetIterator, e); function OrderedSetIterator(t, r, n, i) { var o = e.call(this, t, r, i) || this; o.container = n; return o; } Object.defineProperty(OrderedSetIterator.prototype, "pointer", { get: function() { if (this.o === this.h) { throwIteratorAccessError(); } return this.o.u; }, enumerable: false, configurable: true }); OrderedSetIterator.prototype.copy = function() { return new OrderedSetIterator(this.o, this.h, this.container, this.iteratorType); }; return OrderedSetIterator; }(Base_TreeIterator); var OrderedSet = function(e) { OrderedSet_extends(OrderedSet, e); function OrderedSet(t, r, n) { if (t === void 0) { t = []; } var i = e.call(this, r, n) || this; var o = i; t.forEach((function(e) { o.insert(e); })); return i; } OrderedSet.prototype.P = function(e) { return OrderedSet_generator(this, (function(t) { switch (t.label) { case 0: if (e === undefined) return [ 2 ]; return [ 5, OrderedSet_values(this.P(e.K)) ]; case 1: t.sent(); return [ 4, e.u ]; case 2: t.sent(); return [ 5, OrderedSet_values(this.P(e.N)) ]; case 3: t.sent(); return [ 2 ]; } })); }; OrderedSet.prototype.begin = function() { return new OrderedSet_OrderedSetIterator(this.h.K || this.h, this.h, this); }; OrderedSet.prototype.end = function() { return new OrderedSet_OrderedSetIterator(this.h, this.h, this); }; OrderedSet.prototype.rBegin = function() { return new OrderedSet_OrderedSetIterator(this.h.N || this.h, this.h, this, 1); }; OrderedSet.prototype.rEnd = function() { return new OrderedSet_OrderedSetIterator(this.h, this.h, this, 1); }; OrderedSet.prototype.front = function() { return this.h.K ? this.h.K.u : undefined; }; OrderedSet.prototype.back = function() { return this.h.N ? this.h.N.u : undefined; }; OrderedSet.prototype.insert = function(e, t) { return this.v(e, undefined, t); }; OrderedSet.prototype.find = function(e) { var t = this.g(this.W, e); return new OrderedSet_OrderedSetIterator(t, this.h, this); }; OrderedSet.prototype.lowerBound = function(e) { var t = this.U(this.W, e); return new OrderedSet_OrderedSetIterator(t, this.h, this); }; OrderedSet.prototype.upperBound = function(e) { var t = this.X(this.W, e); return new OrderedSet_OrderedSetIterator(t, this.h, this); }; OrderedSet.prototype.reverseLowerBound = function(e) { var t = this.Y(this.W, e); return new OrderedSet_OrderedSetIterator(t, this.h, this); }; OrderedSet.prototype.reverseUpperBound = function(e) { var t = this.Z(this.W, e); return new OrderedSet_OrderedSetIterator(t, this.h, this); }; OrderedSet.prototype.union = function(e) { var t = this; e.forEach((function(e) { t.insert(e); })); return this.M; }; OrderedSet.prototype[Symbol.iterator] = function() { return this.P(this.W); }; return OrderedSet; }(TreeContainer_Base); /* harmony default export */ var TreeContainer_OrderedSet = (OrderedSet); //# sourceMappingURL=OrderedSet.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/TreeContainer/OrderedMap.js var OrderedMap_extends = undefined && undefined.t || function() { var extendStatics = function(r, e) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(r, e) { r.__proto__ = e; } || function(r, e) { for (var t in e) if (Object.prototype.hasOwnProperty.call(e, t)) r[t] = e[t]; }; return extendStatics(r, e); }; return function(r, e) { if (typeof e !== "function" && e !== null) throw new TypeError("Class extends value " + String(e) + " is not a constructor or null"); extendStatics(r, e); function __() { this.constructor = r; } r.prototype = e === null ? Object.create(e) : (__.prototype = e.prototype, new __); }; }(); var OrderedMap_generator = undefined && undefined.i || function(r, e) { var t = { label: 0, sent: function() { if (o[0] & 1) throw o[1]; return o[1]; }, trys: [], ops: [] }, n, i, o, a; return a = { next: verb(0), throw: verb(1), return: verb(2) }, typeof Symbol === "function" && (a[Symbol.iterator] = function() { return this; }), a; function verb(r) { return function(e) { return step([ r, e ]); }; } function step(a) { if (n) throw new TypeError("Generator is already executing."); while (t) try { if (n = 1, i && (o = a[0] & 2 ? i["return"] : a[0] ? i["throw"] || ((o = i["return"]) && o.call(i), 0) : i.next) && !(o = o.call(i, a[1])).done) return o; if (i = 0, o) a = [ a[0] & 2, o.value ]; switch (a[0]) { case 0: case 1: o = a; break; case 4: t.label++; return { value: a[1], done: false }; case 5: t.label++; i = a[1]; a = [ 0 ]; continue; case 7: a = t.ops.pop(); t.trys.pop(); continue; default: if (!(o = t.trys, o = o.length > 0 && o[o.length - 1]) && (a[0] === 6 || a[0] === 2)) { t = 0; continue; } if (a[0] === 3 && (!o || a[1] > o[0] && a[1] < o[3])) { t.label = a[1]; break; } if (a[0] === 6 && t.label < o[1]) { t.label = o[1]; o = a; break; } if (o && t.label < o[2]) { t.label = o[2]; t.ops.push(a); break; } if (o[2]) t.ops.pop(); t.trys.pop(); continue; } a = e.call(r, t); } catch (r) { a = [ 6, r ]; i = 0; } finally { n = o = 0; } if (a[0] & 5) throw a[1]; return { value: a[0] ? a[1] : void 0, done: true }; } }; var OrderedMap_values = undefined && undefined.V || function(r) { var e = typeof Symbol === "function" && Symbol.iterator, t = e && r[e], n = 0; if (t) return t.call(r); if (r && typeof r.length === "number") return { next: function() { if (r && n >= r.length) r = void 0; return { value: r && r[n++], done: !r }; } }; throw new TypeError(e ? "Object is not iterable." : "Symbol.iterator is not defined."); }; var OrderedMap_OrderedMapIterator = function(r) { OrderedMap_extends(OrderedMapIterator, r); function OrderedMapIterator(e, t, n, i) { var o = r.call(this, e, t, i) || this; o.container = n; return o; } Object.defineProperty(OrderedMapIterator.prototype, "pointer", { get: function() { if (this.o === this.h) { throwIteratorAccessError(); } var r = this; return new Proxy([], { get: function(e, t) { if (t === "0") return r.o.u; else if (t === "1") return r.o.p; }, set: function(e, t, n) { if (t !== "1") { throw new TypeError("props must be 1"); } r.o.p = n; return true; } }); }, enumerable: false, configurable: true }); OrderedMapIterator.prototype.copy = function() { return new OrderedMapIterator(this.o, this.h, this.container, this.iteratorType); }; return OrderedMapIterator; }(Base_TreeIterator); var OrderedMap = function(r) { OrderedMap_extends(OrderedMap, r); function OrderedMap(e, t, n) { if (e === void 0) { e = []; } var i = r.call(this, t, n) || this; var o = i; e.forEach((function(r) { o.setElement(r[0], r[1]); })); return i; } OrderedMap.prototype.P = function(r) { return OrderedMap_generator(this, (function(e) { switch (e.label) { case 0: if (r === undefined) return [ 2 ]; return [ 5, OrderedMap_values(this.P(r.K)) ]; case 1: e.sent(); return [ 4, [ r.u, r.p ] ]; case 2: e.sent(); return [ 5, OrderedMap_values(this.P(r.N)) ]; case 3: e.sent(); return [ 2 ]; } })); }; OrderedMap.prototype.begin = function() { return new OrderedMap_OrderedMapIterator(this.h.K || this.h, this.h, this); }; OrderedMap.prototype.end = function() { return new OrderedMap_OrderedMapIterator(this.h, this.h, this); }; OrderedMap.prototype.rBegin = function() { return new OrderedMap_OrderedMapIterator(this.h.N || this.h, this.h, this, 1); }; OrderedMap.prototype.rEnd = function() { return new OrderedMap_OrderedMapIterator(this.h, this.h, this, 1); }; OrderedMap.prototype.front = function() { if (this.M === 0) return; var r = this.h.K; return [ r.u, r.p ]; }; OrderedMap.prototype.back = function() { if (this.M === 0) return; var r = this.h.N; return [ r.u, r.p ]; }; OrderedMap.prototype.lowerBound = function(r) { var e = this.U(this.W, r); return new OrderedMap_OrderedMapIterator(e, this.h, this); }; OrderedMap.prototype.upperBound = function(r) { var e = this.X(this.W, r); return new OrderedMap_OrderedMapIterator(e, this.h, this); }; OrderedMap.prototype.reverseLowerBound = function(r) { var e = this.Y(this.W, r); return new OrderedMap_OrderedMapIterator(e, this.h, this); }; OrderedMap.prototype.reverseUpperBound = function(r) { var e = this.Z(this.W, r); return new OrderedMap_OrderedMapIterator(e, this.h, this); }; OrderedMap.prototype.setElement = function(r, e, t) { return this.v(r, e, t); }; OrderedMap.prototype.find = function(r) { var e = this.g(this.W, r); return new OrderedMap_OrderedMapIterator(e, this.h, this); }; OrderedMap.prototype.getElementByKey = function(r) { var e = this.g(this.W, r); return e.p; }; OrderedMap.prototype.union = function(r) { var e = this; r.forEach((function(r) { e.setElement(r[0], r[1]); })); return this.M; }; OrderedMap.prototype[Symbol.iterator] = function() { return this.P(this.W); }; return OrderedMap; }(TreeContainer_Base); /* harmony default export */ var TreeContainer_OrderedMap = (OrderedMap); //# sourceMappingURL=OrderedMap.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/utils/checkObject.js function checkObject(t) { var e = typeof t; return e === "object" && t !== null || e === "function"; } //# sourceMappingURL=checkObject.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/HashContainer/Base/index.js var HashContainer_Base_extends = undefined && undefined.t || function() { var extendStatics = function(t, i) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, i) { t.__proto__ = i; } || function(t, i) { for (var r in i) if (Object.prototype.hasOwnProperty.call(i, r)) t[r] = i[r]; }; return extendStatics(t, i); }; return function(t, i) { if (typeof i !== "function" && i !== null) throw new TypeError("Class extends value " + String(i) + " is not a constructor or null"); extendStatics(t, i); function __() { this.constructor = t; } t.prototype = i === null ? Object.create(i) : (__.prototype = i.prototype, new __); }; }(); var Base_HashContainerIterator = function(t) { HashContainer_Base_extends(HashContainerIterator, t); function HashContainerIterator(i, r, e) { var n = t.call(this, e) || this; n.o = i; n.h = r; if (n.iteratorType === 0) { n.pre = function() { if (this.o.L === this.h) { throwIteratorAccessError(); } this.o = this.o.L; return this; }; n.next = function() { if (this.o === this.h) { throwIteratorAccessError(); } this.o = this.o.m; return this; }; } else { n.pre = function() { if (this.o.m === this.h) { throwIteratorAccessError(); } this.o = this.o.m; return this; }; n.next = function() { if (this.o === this.h) { throwIteratorAccessError(); } this.o = this.o.L; return this; }; } return n; } return HashContainerIterator; }(ContainerIterator); var Base_HashContainer = function(t) { HashContainer_Base_extends(HashContainer, t); function HashContainer() { var i = t.call(this) || this; i._ = []; i.I = {}; i.HASH_TAG = Symbol("@@HASH_TAG"); Object.setPrototypeOf(i.I, null); i.h = {}; i.h.L = i.h.m = i.H = i.l = i.h; return i; } HashContainer.prototype.G = function(t) { var i = t.L, r = t.m; i.m = r; r.L = i; if (t === this.H) { this.H = r; } if (t === this.l) { this.l = i; } this.M -= 1; }; HashContainer.prototype.v = function(t, i, r) { if (r === undefined) r = checkObject(t); var e; if (r) { var n = t[this.HASH_TAG]; if (n !== undefined) { this._[n].p = i; return this.M; } Object.defineProperty(t, this.HASH_TAG, { value: this._.length, configurable: true }); e = { u: t, p: i, L: this.l, m: this.h }; this._.push(e); } else { var s = this.I[t]; if (s) { s.p = i; return this.M; } e = { u: t, p: i, L: this.l, m: this.h }; this.I[t] = e; } if (this.M === 0) { this.H = e; this.h.m = e; } else { this.l.m = e; } this.l = e; this.h.L = e; return ++this.M; }; HashContainer.prototype.g = function(t, i) { if (i === undefined) i = checkObject(t); if (i) { var r = t[this.HASH_TAG]; if (r === undefined) return this.h; return this._[r]; } else { return this.I[t] || this.h; } }; HashContainer.prototype.clear = function() { var t = this.HASH_TAG; this._.forEach((function(i) { delete i.u[t]; })); this._ = []; this.I = {}; Object.setPrototypeOf(this.I, null); this.M = 0; this.H = this.l = this.h.L = this.h.m = this.h; }; HashContainer.prototype.eraseElementByKey = function(t, i) { var r; if (i === undefined) i = checkObject(t); if (i) { var e = t[this.HASH_TAG]; if (e === undefined) return false; delete t[this.HASH_TAG]; r = this._[e]; delete this._[e]; } else { r = this.I[t]; if (r === undefined) return false; delete this.I[t]; } this.G(r); return true; }; HashContainer.prototype.eraseElementByIterator = function(t) { var i = t.o; if (i === this.h) { throwIteratorAccessError(); } this.G(i); return t.next(); }; HashContainer.prototype.eraseElementByPos = function(t) { if (t < 0 || t > this.M - 1) { throw new RangeError; } var i = this.H; while (t--) { i = i.m; } this.G(i); return this.M; }; return HashContainer; }(Container); //# sourceMappingURL=index.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/HashContainer/HashSet.js var HashSet_extends = undefined && undefined.t || function() { var extendStatics = function(t, r) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, r) { t.__proto__ = r; } || function(t, r) { for (var e in r) if (Object.prototype.hasOwnProperty.call(r, e)) t[e] = r[e]; }; return extendStatics(t, r); }; return function(t, r) { if (typeof r !== "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); extendStatics(t, r); function __() { this.constructor = t; } t.prototype = r === null ? Object.create(r) : (__.prototype = r.prototype, new __); }; }(); var HashSet_generator = undefined && undefined.i || function(t, r) { var e = { label: 0, sent: function() { if (s[0] & 1) throw s[1]; return s[1]; }, trys: [], ops: [] }, n, i, s, a; return a = { next: verb(0), throw: verb(1), return: verb(2) }, typeof Symbol === "function" && (a[Symbol.iterator] = function() { return this; }), a; function verb(t) { return function(r) { return step([ t, r ]); }; } function step(a) { if (n) throw new TypeError("Generator is already executing."); while (e) try { if (n = 1, i && (s = a[0] & 2 ? i["return"] : a[0] ? i["throw"] || ((s = i["return"]) && s.call(i), 0) : i.next) && !(s = s.call(i, a[1])).done) return s; if (i = 0, s) a = [ a[0] & 2, s.value ]; switch (a[0]) { case 0: case 1: s = a; break; case 4: e.label++; return { value: a[1], done: false }; case 5: e.label++; i = a[1]; a = [ 0 ]; continue; case 7: a = e.ops.pop(); e.trys.pop(); continue; default: if (!(s = e.trys, s = s.length > 0 && s[s.length - 1]) && (a[0] === 6 || a[0] === 2)) { e = 0; continue; } if (a[0] === 3 && (!s || a[1] > s[0] && a[1] < s[3])) { e.label = a[1]; break; } if (a[0] === 6 && e.label < s[1]) { e.label = s[1]; s = a; break; } if (s && e.label < s[2]) { e.label = s[2]; e.ops.push(a); break; } if (s[2]) e.ops.pop(); e.trys.pop(); continue; } a = r.call(t, e); } catch (t) { a = [ 6, t ]; i = 0; } finally { n = s = 0; } if (a[0] & 5) throw a[1]; return { value: a[0] ? a[1] : void 0, done: true }; } }; var HashSet_HashSetIterator = function(t) { HashSet_extends(HashSetIterator, t); function HashSetIterator(r, e, n, i) { var s = t.call(this, r, e, i) || this; s.container = n; return s; } Object.defineProperty(HashSetIterator.prototype, "pointer", { get: function() { if (this.o === this.h) { throwIteratorAccessError(); } return this.o.u; }, enumerable: false, configurable: true }); HashSetIterator.prototype.copy = function() { return new HashSetIterator(this.o, this.h, this.container, this.iteratorType); }; return HashSetIterator; }(Base_HashContainerIterator); var HashSet = function(t) { HashSet_extends(HashSet, t); function HashSet(r) { if (r === void 0) { r = []; } var e = t.call(this) || this; var n = e; r.forEach((function(t) { n.insert(t); })); return e; } HashSet.prototype.begin = function() { return new HashSet_HashSetIterator(this.H, this.h, this); }; HashSet.prototype.end = function() { return new HashSet_HashSetIterator(this.h, this.h, this); }; HashSet.prototype.rBegin = function() { return new HashSet_HashSetIterator(this.l, this.h, this, 1); }; HashSet.prototype.rEnd = function() { return new HashSet_HashSetIterator(this.h, this.h, this, 1); }; HashSet.prototype.front = function() { return this.H.u; }; HashSet.prototype.back = function() { return this.l.u; }; HashSet.prototype.insert = function(t, r) { return this.v(t, undefined, r); }; HashSet.prototype.getElementByPos = function(t) { if (t < 0 || t > this.M - 1) { throw new RangeError; } var r = this.H; while (t--) { r = r.m; } return r.u; }; HashSet.prototype.find = function(t, r) { var e = this.g(t, r); return new HashSet_HashSetIterator(e, this.h, this); }; HashSet.prototype.forEach = function(t) { var r = 0; var e = this.H; while (e !== this.h) { t(e.u, r++, this); e = e.m; } }; HashSet.prototype[Symbol.iterator] = function() { return function() { var t; return HashSet_generator(this, (function(r) { switch (r.label) { case 0: t = this.H; r.label = 1; case 1: if (!(t !== this.h)) return [ 3, 3 ]; return [ 4, t.u ]; case 2: r.sent(); t = t.m; return [ 3, 1 ]; case 3: return [ 2 ]; } })); }.bind(this)(); }; return HashSet; }(Base_HashContainer); /* harmony default export */ var HashContainer_HashSet = (HashSet); //# sourceMappingURL=HashSet.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/container/HashContainer/HashMap.js var HashMap_extends = undefined && undefined.t || function() { var extendStatics = function(t, r) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, r) { t.__proto__ = r; } || function(t, r) { for (var n in r) if (Object.prototype.hasOwnProperty.call(r, n)) t[n] = r[n]; }; return extendStatics(t, r); }; return function(t, r) { if (typeof r !== "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); extendStatics(t, r); function __() { this.constructor = t; } t.prototype = r === null ? Object.create(r) : (__.prototype = r.prototype, new __); }; }(); var HashMap_generator = undefined && undefined.i || function(t, r) { var n = { label: 0, sent: function() { if (a[0] & 1) throw a[1]; return a[1]; }, trys: [], ops: [] }, e, i, a, s; return s = { next: verb(0), throw: verb(1), return: verb(2) }, typeof Symbol === "function" && (s[Symbol.iterator] = function() { return this; }), s; function verb(t) { return function(r) { return step([ t, r ]); }; } function step(s) { if (e) throw new TypeError("Generator is already executing."); while (n) try { if (e = 1, i && (a = s[0] & 2 ? i["return"] : s[0] ? i["throw"] || ((a = i["return"]) && a.call(i), 0) : i.next) && !(a = a.call(i, s[1])).done) return a; if (i = 0, a) s = [ s[0] & 2, a.value ]; switch (s[0]) { case 0: case 1: a = s; break; case 4: n.label++; return { value: s[1], done: false }; case 5: n.label++; i = s[1]; s = [ 0 ]; continue; case 7: s = n.ops.pop(); n.trys.pop(); continue; default: if (!(a = n.trys, a = a.length > 0 && a[a.length - 1]) && (s[0] === 6 || s[0] === 2)) { n = 0; continue; } if (s[0] === 3 && (!a || s[1] > a[0] && s[1] < a[3])) { n.label = s[1]; break; } if (s[0] === 6 && n.label < a[1]) { n.label = a[1]; a = s; break; } if (a && n.label < a[2]) { n.label = a[2]; n.ops.push(s); break; } if (a[2]) n.ops.pop(); n.trys.pop(); continue; } s = r.call(t, n); } catch (t) { s = [ 6, t ]; i = 0; } finally { e = a = 0; } if (s[0] & 5) throw s[1]; return { value: s[0] ? s[1] : void 0, done: true }; } }; var HashMap_HashMapIterator = function(t) { HashMap_extends(HashMapIterator, t); function HashMapIterator(r, n, e, i) { var a = t.call(this, r, n, i) || this; a.container = e; return a; } Object.defineProperty(HashMapIterator.prototype, "pointer", { get: function() { if (this.o === this.h) { throwIteratorAccessError(); } var t = this; return new Proxy([], { get: function(r, n) { if (n === "0") return t.o.u; else if (n === "1") return t.o.p; }, set: function(r, n, e) { if (n !== "1") { throw new TypeError("props must be 1"); } t.o.p = e; return true; } }); }, enumerable: false, configurable: true }); HashMapIterator.prototype.copy = function() { return new HashMapIterator(this.o, this.h, this.container, this.iteratorType); }; return HashMapIterator; }(Base_HashContainerIterator); var HashMap_HashMap = function(t) { HashMap_extends(HashMap, t); function HashMap(r) { if (r === void 0) { r = []; } var n = t.call(this) || this; var e = n; r.forEach((function(t) { e.setElement(t[0], t[1]); })); return n; } HashMap.prototype.begin = function() { return new HashMap_HashMapIterator(this.H, this.h, this); }; HashMap.prototype.end = function() { return new HashMap_HashMapIterator(this.h, this.h, this); }; HashMap.prototype.rBegin = function() { return new HashMap_HashMapIterator(this.l, this.h, this, 1); }; HashMap.prototype.rEnd = function() { return new HashMap_HashMapIterator(this.h, this.h, this, 1); }; HashMap.prototype.front = function() { if (this.M === 0) return; return [ this.H.u, this.H.p ]; }; HashMap.prototype.back = function() { if (this.M === 0) return; return [ this.l.u, this.l.p ]; }; HashMap.prototype.setElement = function(t, r, n) { return this.v(t, r, n); }; HashMap.prototype.getElementByKey = function(t, r) { if (r === undefined) r = checkObject(t); if (r) { var n = t[this.HASH_TAG]; return n !== undefined ? this._[n].p : undefined; } var e = this.I[t]; return e ? e.p : undefined; }; HashMap.prototype.getElementByPos = function(t) { if (t < 0 || t > this.M - 1) { throw new RangeError; } var r = this.H; while (t--) { r = r.m; } return [ r.u, r.p ]; }; HashMap.prototype.find = function(t, r) { var n = this.g(t, r); return new HashMap_HashMapIterator(n, this.h, this); }; HashMap.prototype.forEach = function(t) { var r = 0; var n = this.H; while (n !== this.h) { t([ n.u, n.p ], r++, this); n = n.m; } }; HashMap.prototype[Symbol.iterator] = function() { return function() { var t; return HashMap_generator(this, (function(r) { switch (r.label) { case 0: t = this.H; r.label = 1; case 1: if (!(t !== this.h)) return [ 3, 3 ]; return [ 4, [ t.u, t.p ] ]; case 2: r.sent(); t = t.m; return [ 3, 1 ]; case 3: return [ 2 ]; } })); }.bind(this)(); }; return HashMap; }(Base_HashContainer); /* harmony default export */ var HashContainer_HashMap = (HashMap_HashMap); //# sourceMappingURL=HashMap.js.map // CONCATENATED MODULE: ./node_modules/js-sdsl/dist/esm/index.js //# sourceMappingURL=index.js.map /***/ }) /******/ ]);