Image optimization & Lazy Load by Optimole - Version 2.0.7

Version Description

Download this release

Release Info

Developer optimole
Plugin Icon 128x128 Image optimization & Lazy Load by Optimole
Version 2.0.7
Comparing to
See all releases

Code changes from version 2.0.6 to 2.0.7

CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  #### [Version 2.0.6](https://github.com/Codeinwp/optimole-wp/compare/v2.0.5...v2.0.6) (2019-03-29)
2
 
3
  * **Bug Fixes**
1
+ #### [Version 2.0.7](https://github.com/Codeinwp/optimole-wp/compare/v2.0.6...v2.0.7) (2019-05-29)
2
+
3
+ * **Bug Fixes**
4
+ * **rest:** WordPress core routes were called with double slashes ([2e47fe0](https://github.com/Codeinwp/optimole-wp/commit/2e47fe0))
5
+ * better replacement for relative paths ([c18be2f](https://github.com/Codeinwp/optimole-wp/commit/c18be2f))
6
+ * image replacement was breaking non-image urls with query strings ([2ef2212](https://github.com/Codeinwp/optimole-wp/commit/2ef2212))
7
+ * improve admin bar quota looking and copyright [#99](https://github.com/Codeinwp/optimole-wp/issues/99) ([200e746](https://github.com/Codeinwp/optimole-wp/commit/200e746))
8
+ * improve CDN domain label naming [#97](https://github.com/Codeinwp/optimole-wp/issues/97) ([8a2da71](https://github.com/Codeinwp/optimole-wp/commit/8a2da71))
9
+ * improve error reporting on connection to the service ([11ee514](https://github.com/Codeinwp/optimole-wp/commit/11ee514))
10
+ * remove image replacement on Thrive Architect editor ([3a8c46b](https://github.com/Codeinwp/optimole-wp/commit/3a8c46b))
11
+ * removes redundant api request parameters ([4385f68](https://github.com/Codeinwp/optimole-wp/commit/4385f68))
12
+
13
+ * **Documentation**
14
+ * improve readme description ([4134b05](https://github.com/Codeinwp/optimole-wp/commit/4134b05))
15
+
16
+ * **Features**
17
+ * **api:** adds filter before url replacement, for individual image args ([d936944](https://github.com/Codeinwp/optimole-wp/commit/d936944))
18
+ * adds possible conflicts tab which reports the most common problems that Optimole might have with various plugins ([3b1ec3f](https://github.com/Codeinwp/optimole-wp/commit/3b1ec3f))
19
+
20
  #### [Version 2.0.6](https://github.com/Codeinwp/optimole-wp/compare/v2.0.5...v2.0.6) (2019-03-29)
21
 
22
  * **Bug Fixes**
README.md CHANGED
@@ -1,29 +1,26 @@
1
  # Image optimization service by Optimole #
2
  **Contributors:** [optimole](https://profiles.wordpress.org/optimole)
3
- **Tags:** image optimization, cdn, image compression, compress image, images, optimization, perfomance, photos
4
  **Requires at least:** 4.7
5
- **Tested up to:** 5.1
6
  **Requires PHP:** 5.4
7
  **License:** GPLv3
8
  **License URI:** https://www.gnu.org/licenses/gpl-3.0.en.html
9
 
10
- End-to-end image processing
11
- With OptiMole, your site’s images will be cropped, optimized and processed on-the-fly.
12
-
13
 
14
  ## Description ##
15
 
16
  > **What makes Optimole so special?**
17
  >
18
  > * Smaller images. Same quality
19
- > * Optimizes based on the visitor's actual device
20
  > * Fully automated; set and forget
21
  > * Supports all image types
22
  > * Supports both Retina and WebP images
23
  > * Serves images from a global CDN for free
24
  > * Optimizes based on the visitor's actual device (no more guesswork and width estimations)
25
  > * Full support for page builders like Elementor
26
- > * Lazy loading without jQuery (better)
27
  > * Fully functional free version (we have paid plans as well)
28
  >
29
 
@@ -45,13 +42,13 @@ With the basic plan, you will be able to optimize 1GB of images per month with 5
45
  Better yet. The free version is fully functional and includes all of the following great features.
46
 
47
  **Format Based Optimization**
48
- Our cloud-based transformation process means we can offer optimizations based on the format. If your visitor is using a WebP capable browser, then Optimole will send a WebP image to their device.
49
 
50
  **Image Optimization**
51
  Our algorithms crunch the numbers to provide the best lossy or lossless optimization for the best-looking image at the smallest size.
52
 
53
  **Exact Used Size**
54
- Optimole will use just one image and resize it to fit perfectly on your visitors' devices. No more awkward guesses at potential screen widths.
55
 
56
  **Retina Support**
57
  Optimole can detect Retina screens and deliver an image with the perfect Digital Pixel Ratio (DPR).
@@ -71,7 +68,7 @@ Optimole provides an option to downgrade the image quality when it detects a slo
71
  Optimole loves page builders and has unique tweaks to solve image replacements. It also has full compatibility with the new block editor in WordPress 5.0
72
 
73
  **CDN**
74
- Optimole provides free access to a CDN with 7 edge locations around the world. Even more with the Pro version.
75
 
76
  **What About Security?**
77
  The stripped EXGIF data is not stored on our service. Optimole likes to work behind the scenes, and won't interact with your site's visitors. No data is collected but you can check the [Terms of Service](https://optimole.com/terms/)
@@ -91,6 +88,27 @@ Premium users will be able to optimize 10GB images per month with a 50GB viewing
91
 
92
  ## Changelog ##
93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  #### [Version 2.0.6](https://github.com/Codeinwp/optimole-wp/compare/v2.0.5...v2.0.6) (2019-03-29)
95
 
96
  * **Bug Fixes**
@@ -263,24 +281,24 @@ Premium users will be able to optimize 10GB images per month with a 50GB viewing
263
 
264
  ### 1.1.1 - 2018-12-10 ###
265
 
266
- * Improve the lazy loading mechanism and adds compatibility with the new javascript library.
267
- * Improve sample images and quality selector integration.
268
- * Adds a notice when the Rest API is not available.
269
- * Adds notice for new users on how the plugin works.
270
- * Tested up with WordPress 5.0, all working smooth.
271
  * Fix possible issues with thumbnails when the original image is available on a different url scheme.
272
  * Ignore lazyload replacement on feed/amp pages.
273
 
274
 
275
  ### 1.1.0 - 2018-11-16 ###
276
 
277
- * Integrates lazy load feature with support for low-quality placeholders ( LQIP ).
278
  * Integrates Javascript library which delivers images at the right size for each device, including Retina.
279
  * Improve image replacement algorithm.
280
- * Improves compatibility with Elementor and Gutenberg.
281
  * Adds support for Custom CNAME and Client hints.
282
- * Improves support for custom CDN.
283
- * Improves AMP support.
284
  * Improves compatibility with WordPress Multisites.
285
 
286
 
@@ -342,7 +360,7 @@ Once you exceed these, we will contact you and kindly ask to upgrade to the plan
342
 
343
  ### What Content Delivery Network (CDN) do you use? ###
344
 
345
- Our FREE plan uses our custom made CDN built with 7 locations around the globe. For the paid plans, we have direct integration with Amazon Cloudfront, with more than 130 locations around the globe.
346
 
347
  ### I'm already using a CDN, can I use that instead of yours ? ###
348
 
1
  # Image optimization service by Optimole #
2
  **Contributors:** [optimole](https://profiles.wordpress.org/optimole)
3
+ **Tags:** image optimization, convert webp, responsive images, lazy load, images, optimization, performance, photos
4
  **Requires at least:** 4.7
5
+ **Tested up to:** 5.2
6
  **Requires PHP:** 5.4
7
  **License:** GPLv3
8
  **License URI:** https://www.gnu.org/licenses/gpl-3.0.en.html
9
 
10
+ Improve your site loading speed by delivering optimized image for each device. Lazy load included.
 
 
11
 
12
  ## Description ##
13
 
14
  > **What makes Optimole so special?**
15
  >
16
  > * Smaller images. Same quality
 
17
  > * Fully automated; set and forget
18
  > * Supports all image types
19
  > * Supports both Retina and WebP images
20
  > * Serves images from a global CDN for free
21
  > * Optimizes based on the visitor's actual device (no more guesswork and width estimations)
22
  > * Full support for page builders like Elementor
23
+ > * Lazy load without jQuery (better)
24
  > * Fully functional free version (we have paid plans as well)
25
  >
26
 
42
  Better yet. The free version is fully functional and includes all of the following great features.
43
 
44
  **Format Based Optimization**
45
+ Our cloud-based transformation process means we can offer optimizations based on the format. If your visitor is using a WebP capable browser, then Optimole will convert to WebP the image and send it to their device.
46
 
47
  **Image Optimization**
48
  Our algorithms crunch the numbers to provide the best lossy or lossless optimization for the best-looking image at the smallest size.
49
 
50
  **Exact Used Size**
51
+ Optimole will use just one image and resize it delivering a responsive image to fit perfectly on your visitors' devices. No more awkward guesses at potential screen widths.
52
 
53
  **Retina Support**
54
  Optimole can detect Retina screens and deliver an image with the perfect Digital Pixel Ratio (DPR).
68
  Optimole loves page builders and has unique tweaks to solve image replacements. It also has full compatibility with the new block editor in WordPress 5.0
69
 
70
  **CDN**
71
+ Optimole provides free access to a AWS CloudFront CDN with edge locations in Europe and North America. Even more with the Pro version.
72
 
73
  **What About Security?**
74
  The stripped EXGIF data is not stored on our service. Optimole likes to work behind the scenes, and won't interact with your site's visitors. No data is collected but you can check the [Terms of Service](https://optimole.com/terms/)
88
 
89
  ## Changelog ##
90
 
91
+ #### [Version 2.0.7](https://github.com/Codeinwp/optimole-wp/compare/v2.0.6...v2.0.7) (2019-05-29)
92
+
93
+ * **Bug Fixes**
94
+ * **rest:** WordPress core routes were called with double slashes ([2e47fe0](https://github.com/Codeinwp/optimole-wp/commit/2e47fe0))
95
+ * better replacement for relative paths ([c18be2f](https://github.com/Codeinwp/optimole-wp/commit/c18be2f))
96
+ * image replacement was breaking non-image urls with query strings ([2ef2212](https://github.com/Codeinwp/optimole-wp/commit/2ef2212))
97
+ * improve admin bar quota looking and copyright [#99](https://github.com/Codeinwp/optimole-wp/issues/99) ([200e746](https://github.com/Codeinwp/optimole-wp/commit/200e746))
98
+ * improve CDN domain label naming [#97](https://github.com/Codeinwp/optimole-wp/issues/97) ([8a2da71](https://github.com/Codeinwp/optimole-wp/commit/8a2da71))
99
+ * improve error reporting on connection to the service ([11ee514](https://github.com/Codeinwp/optimole-wp/commit/11ee514))
100
+ * remove image replacement on Thrive Architect editor ([3a8c46b](https://github.com/Codeinwp/optimole-wp/commit/3a8c46b))
101
+ * removes redundant api request parameters ([4385f68](https://github.com/Codeinwp/optimole-wp/commit/4385f68))
102
+
103
+ * **Documentation**
104
+ * improve readme description ([4134b05](https://github.com/Codeinwp/optimole-wp/commit/4134b05))
105
+
106
+ * **Features**
107
+ * **api:** adds filter before url replacement, for individual image args ([d936944](https://github.com/Codeinwp/optimole-wp/commit/d936944))
108
+ * adds possible conflicts tab which reports the most common problems that Optimole might have with various plugins ([3b1ec3f](https://github.com/Codeinwp/optimole-wp/commit/3b1ec3f))
109
+
110
+
111
+
112
  #### [Version 2.0.6](https://github.com/Codeinwp/optimole-wp/compare/v2.0.5...v2.0.6) (2019-03-29)
113
 
114
  * **Bug Fixes**
281
 
282
  ### 1.1.1 - 2018-12-10 ###
283
 
284
+ * Improve the lazy loading mechanism and adds compatibility with the new javascript library.
285
+ * Improve sample images and quality selector integration.
286
+ * Adds a notice when the Rest API is not available.
287
+ * Adds notice for new users on how the plugin works.
288
+ * Tested up with WordPress 5.0, all working smooth.
289
  * Fix possible issues with thumbnails when the original image is available on a different url scheme.
290
  * Ignore lazyload replacement on feed/amp pages.
291
 
292
 
293
  ### 1.1.0 - 2018-11-16 ###
294
 
295
+ * Integrates lazy load feature with support for low-quality placeholders ( LQIP ).
296
  * Integrates Javascript library which delivers images at the right size for each device, including Retina.
297
  * Improve image replacement algorithm.
298
+ * Improves compatibility with Elementor and Gutenberg.
299
  * Adds support for Custom CNAME and Client hints.
300
+ * Improves support for custom CDN.
301
+ * Improves AMP support.
302
  * Improves compatibility with WordPress Multisites.
303
 
304
 
360
 
361
  ### What Content Delivery Network (CDN) do you use? ###
362
 
363
+ Our FREE plan uses our AWS CloudFront CDN with locations only in Europe and North America. For the paid plans, we have a global full coverage, with more than 130 locations around the globe.
364
 
365
  ### I'm already using a CDN, can I use that instead of yours ? ###
366
 
assets/js/assets/img/optimole-logo.png DELETED
Binary file
assets/js/bundle.js DELETED
@@ -1,21174 +0,0 @@
1
- /******/ (function(modules) { // webpackBootstrap
2
- /******/ // The module cache
3
- /******/ var installedModules = {};
4
- /******/
5
- /******/ // The require function
6
- /******/ function __webpack_require__(moduleId) {
7
- /******/
8
- /******/ // Check if module is in cache
9
- /******/ if(installedModules[moduleId]) {
10
- /******/ return installedModules[moduleId].exports;
11
- /******/ }
12
- /******/ // Create a new module (and put it into the cache)
13
- /******/ var module = installedModules[moduleId] = {
14
- /******/ i: moduleId,
15
- /******/ l: false,
16
- /******/ exports: {}
17
- /******/ };
18
- /******/
19
- /******/ // Execute the module function
20
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21
- /******/
22
- /******/ // Flag the module as loaded
23
- /******/ module.l = true;
24
- /******/
25
- /******/ // Return the exports of the module
26
- /******/ return module.exports;
27
- /******/ }
28
- /******/
29
- /******/
30
- /******/ // expose the modules object (__webpack_modules__)
31
- /******/ __webpack_require__.m = modules;
32
- /******/
33
- /******/ // expose the module cache
34
- /******/ __webpack_require__.c = installedModules;
35
- /******/
36
- /******/ // define getter function for harmony exports
37
- /******/ __webpack_require__.d = function(exports, name, getter) {
38
- /******/ if(!__webpack_require__.o(exports, name)) {
39
- /******/ Object.defineProperty(exports, name, {
40
- /******/ configurable: false,
41
- /******/ enumerable: true,
42
- /******/ get: getter
43
- /******/ });
44
- /******/ }
45
- /******/ };
46
- /******/
47
- /******/ // getDefaultExport function for compatibility with non-harmony modules
48
- /******/ __webpack_require__.n = function(module) {
49
- /******/ var getter = module && module.__esModule ?
50
- /******/ function getDefault() { return module['default']; } :
51
- /******/ function getModuleExports() { return module; };
52
- /******/ __webpack_require__.d(getter, 'a', getter);
53
- /******/ return getter;
54
- /******/ };
55
- /******/
56
- /******/ // Object.prototype.hasOwnProperty.call
57
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
58
- /******/
59
- /******/ // __webpack_public_path__
60
- /******/ __webpack_require__.p = "/";
61
- /******/
62
- /******/ // Load entry module and return exports
63
- /******/ return __webpack_require__(__webpack_require__.s = 7);
64
- /******/ })
65
- /************************************************************************/
66
- /******/ ([
67
- /* 0 */
68
- /***/ (function(module, exports) {
69
-
70
- /*
71
- MIT License http://www.opensource.org/licenses/mit-license.php
72
- Author Tobias Koppers @sokra
73
- */
74
- // css base code, injected by the css-loader
75
- module.exports = function() {
76
- var list = [];
77
-
78
- // return the list of modules as css string
79
- list.toString = function toString() {
80
- var result = [];
81
- for(var i = 0; i < this.length; i++) {
82
- var item = this[i];
83
- if(item[2]) {
84
- result.push("@media " + item[2] + "{" + item[1] + "}");
85
- } else {
86
- result.push(item[1]);
87
- }
88
- }
89
- return result.join("");
90
- };
91
-
92
- // import a list of modules into the list
93
- list.i = function(modules, mediaQuery) {
94
- if(typeof modules === "string")
95
- modules = [[null, modules, ""]];
96
- var alreadyImportedModules = {};
97
- for(var i = 0; i < this.length; i++) {
98
- var id = this[i][0];
99
- if(typeof id === "number")
100
- alreadyImportedModules[id] = true;
101
- }
102
- for(i = 0; i < modules.length; i++) {
103
- var item = modules[i];
104
- // skip already imported module
105
- // this implementation is not 100% perfect for weird media query combinations
106
- // when a module is imported multiple times with different media queries.
107
- // I hope this will never occur (Hey this way we have smaller bundles)
108
- if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
109
- if(mediaQuery && !item[2]) {
110
- item[2] = mediaQuery;
111
- } else if(mediaQuery) {
112
- item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
113
- }
114
- list.push(item);
115
- }
116
- }
117
- };
118
- return list;
119
- };
120
-
121
-
122
- /***/ }),
123
- /* 1 */
124
- /***/ (function(module, exports) {
125
-
126
- /*
127
- MIT License http://www.opensource.org/licenses/mit-license.php
128
- Author Tobias Koppers @sokra
129
- */
130
- var stylesInDom = {},
131
- memoize = function(fn) {
132
- var memo;
133
- return function () {
134
- if (typeof memo === "undefined") memo = fn.apply(this, arguments);
135
- return memo;
136
- };
137
- },
138
- isOldIE = memoize(function() {
139
- return /msie [6-9]\b/.test(self.navigator.userAgent.toLowerCase());
140
- }),
141
- getHeadElement = memoize(function () {
142
- return document.head || document.getElementsByTagName("head")[0];
143
- }),
144
- singletonElement = null,
145
- singletonCounter = 0,
146
- styleElementsInsertedAtTop = [];
147
-
148
- module.exports = function(list, options) {
149
- if(typeof DEBUG !== "undefined" && DEBUG) {
150
- if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
151
- }
152
-
153
- options = options || {};
154
- // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
155
- // tags it will allow on a page
156
- if (typeof options.singleton === "undefined") options.singleton = isOldIE();
157
-
158
- // By default, add <style> tags to the bottom of <head>.
159
- if (typeof options.insertAt === "undefined") options.insertAt = "bottom";
160
-
161
- var styles = listToStyles(list);
162
- addStylesToDom(styles, options);
163
-
164
- return function update(newList) {
165
- var mayRemove = [];
166
- for(var i = 0; i < styles.length; i++) {
167
- var item = styles[i];
168
- var domStyle = stylesInDom[item.id];
169
- domStyle.refs--;
170
- mayRemove.push(domStyle);
171
- }
172
- if(newList) {
173
- var newStyles = listToStyles(newList);
174
- addStylesToDom(newStyles, options);
175
- }
176
- for(var i = 0; i < mayRemove.length; i++) {
177
- var domStyle = mayRemove[i];
178
- if(domStyle.refs === 0) {
179
- for(var j = 0; j < domStyle.parts.length; j++)
180
- domStyle.parts[j]();
181
- delete stylesInDom[domStyle.id];
182
- }
183
- }
184
- };
185
- }
186
-
187
- function addStylesToDom(styles, options) {
188
- for(var i = 0; i < styles.length; i++) {
189
- var item = styles[i];
190
- var domStyle = stylesInDom[item.id];
191
- if(domStyle) {
192
- domStyle.refs++;
193
- for(var j = 0; j < domStyle.parts.length; j++) {
194
- domStyle.parts[j](item.parts[j]);
195
- }
196
- for(; j < item.parts.length; j++) {
197
- domStyle.parts.push(addStyle(item.parts[j], options));
198
- }
199
- } else {
200
- var parts = [];
201
- for(var j = 0; j < item.parts.length; j++) {
202
- parts.push(addStyle(item.parts[j], options));
203
- }
204
- stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
205
- }
206
- }
207
- }
208
-
209
- function listToStyles(list) {
210
- var styles = [];
211
- var newStyles = {};
212
- for(var i = 0; i < list.length; i++) {
213
- var item = list[i];
214
- var id = item[0];
215
- var css = item[1];
216
- var media = item[2];
217
- var sourceMap = item[3];
218
- var part = {css: css, media: media, sourceMap: sourceMap};
219
- if(!newStyles[id])
220
- styles.push(newStyles[id] = {id: id, parts: [part]});
221
- else
222
- newStyles[id].parts.push(part);
223
- }
224
- return styles;
225
- }
226
-
227
- function insertStyleElement(options, styleElement) {
228
- var head = getHeadElement();
229
- var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];
230
- if (options.insertAt === "top") {
231
- if(!lastStyleElementInsertedAtTop) {
232
- head.insertBefore(styleElement, head.firstChild);
233
- } else if(lastStyleElementInsertedAtTop.nextSibling) {
234
- head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);
235
- } else {
236
- head.appendChild(styleElement);
237
- }
238
- styleElementsInsertedAtTop.push(styleElement);
239
- } else if (options.insertAt === "bottom") {
240
- head.appendChild(styleElement);
241
- } else {
242
- throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
243
- }
244
- }
245
-
246
- function removeStyleElement(styleElement) {
247
- styleElement.parentNode.removeChild(styleElement);
248
- var idx = styleElementsInsertedAtTop.indexOf(styleElement);
249
- if(idx >= 0) {
250
- styleElementsInsertedAtTop.splice(idx, 1);
251
- }
252
- }
253
-
254
- function createStyleElement(options) {
255
- var styleElement = document.createElement("style");
256
- styleElement.type = "text/css";
257
- insertStyleElement(options, styleElement);
258
- return styleElement;
259
- }
260
-
261
- function createLinkElement(options) {
262
- var linkElement = document.createElement("link");
263
- linkElement.rel = "stylesheet";
264
- insertStyleElement(options, linkElement);
265
- return linkElement;
266
- }
267
-
268
- function addStyle(obj, options) {
269
- var styleElement, update, remove;
270
-
271
- if (options.singleton) {
272
- var styleIndex = singletonCounter++;
273
- styleElement = singletonElement || (singletonElement = createStyleElement(options));
274
- update = applyToSingletonTag.bind(null, styleElement, styleIndex, false);
275
- remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);
276
- } else if(obj.sourceMap &&
277
- typeof URL === "function" &&
278
- typeof URL.createObjectURL === "function" &&
279
- typeof URL.revokeObjectURL === "function" &&
280
- typeof Blob === "function" &&
281
- typeof btoa === "function") {
282
- styleElement = createLinkElement(options);
283
- update = updateLink.bind(null, styleElement);
284
- remove = function() {
285
- removeStyleElement(styleElement);
286
- if(styleElement.href)
287
- URL.revokeObjectURL(styleElement.href);
288
- };
289
- } else {
290
- styleElement = createStyleElement(options);
291
- update = applyToTag.bind(null, styleElement);
292
- remove = function() {
293
- removeStyleElement(styleElement);
294
- };
295
- }
296
-
297
- update(obj);
298
-
299
- return function updateStyle(newObj) {
300
- if(newObj) {
301
- if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)
302
- return;
303
- update(obj = newObj);
304
- } else {
305
- remove();
306
- }
307
- };
308
- }
309
-
310
- var replaceText = (function () {
311
- var textStore = [];
312
-
313
- return function (index, replacement) {
314
- textStore[index] = replacement;
315
- return textStore.filter(Boolean).join('\n');
316
- };
317
- })();
318
-
319
- function applyToSingletonTag(styleElement, index, remove, obj) {
320
- var css = remove ? "" : obj.css;
321
-
322
- if (styleElement.styleSheet) {
323
- styleElement.styleSheet.cssText = replaceText(index, css);
324
- } else {
325
- var cssNode = document.createTextNode(css);
326
- var childNodes = styleElement.childNodes;
327
- if (childNodes[index]) styleElement.removeChild(childNodes[index]);
328
- if (childNodes.length) {
329
- styleElement.insertBefore(cssNode, childNodes[index]);
330
- } else {
331
- styleElement.appendChild(cssNode);
332
- }
333
- }
334
- }
335
-
336
- function applyToTag(styleElement, obj) {
337
- var css = obj.css;
338
- var media = obj.media;
339
-
340
- if(media) {
341
- styleElement.setAttribute("media", media)
342
- }
343
-
344
- if(styleElement.styleSheet) {
345
- styleElement.styleSheet.cssText = css;
346
- } else {
347
- while(styleElement.firstChild) {
348
- styleElement.removeChild(styleElement.firstChild);
349
- }
350
- styleElement.appendChild(document.createTextNode(css));
351
- }
352
- }
353
-
354
- function updateLink(linkElement, obj) {
355
- var css = obj.css;
356
- var sourceMap = obj.sourceMap;
357
-
358
- if(sourceMap) {
359
- // http://stackoverflow.com/a/26603875
360
- css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
361
- }
362
-
363
- var blob = new Blob([css], { type: "text/css" });
364
-
365
- var oldSrc = linkElement.href;
366
-
367
- linkElement.href = URL.createObjectURL(blob);
368
-
369
- if(oldSrc)
370
- URL.revokeObjectURL(oldSrc);
371
- }
372
-
373
-
374
- /***/ }),
375
- /* 2 */
376
- /***/ (function(module, exports) {
377
-
378
- var g;
379
-
380
- // This works in non-strict mode
381
- g = (function() {
382
- return this;
383
- })();
384
-
385
- try {
386
- // This works if eval is allowed (see CSP)
387
- g = g || Function("return this")() || (1,eval)("this");
388
- } catch(e) {
389
- // This works if the window reference is available
390
- if(typeof window === "object")
391
- g = window;
392
- }
393
-
394
- // g can still be undefined, but nothing to do about it...
395
- // We return undefined, instead of nothing here, so it's
396
- // easier to handle this case. if(!global) { ...}
397
-
398
- module.exports = g;
399
-
400
-
401
- /***/ }),
402
- /* 3 */
403
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
404
-
405
- "use strict";
406
- Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
407
- /* WEBPACK VAR INJECTION */(function(process, global, setImmediate) {/*!
408
- * Vue.js v2.6.6
409
- * (c) 2014-2019 Evan You
410
- * Released under the MIT License.
411
- */
412
- /* */
413
-
414
- var emptyObject = Object.freeze({});
415
-
416
- // These helpers produce better VM code in JS engines due to their
417
- // explicitness and function inlining.
418
- function isUndef (v) {
419
- return v === undefined || v === null
420
- }
421
-
422
- function isDef (v) {
423
- return v !== undefined && v !== null
424
- }
425
-
426
- function isTrue (v) {
427
- return v === true
428
- }
429
-
430
- function isFalse (v) {
431
- return v === false
432
- }
433
-
434
- /**
435
- * Check if value is primitive.
436
- */
437
- function isPrimitive (value) {
438
- return (
439
- typeof value === 'string' ||
440
- typeof value === 'number' ||
441
- // $flow-disable-line
442
- typeof value === 'symbol' ||
443
- typeof value === 'boolean'
444
- )
445
- }
446
-
447
- /**
448
- * Quick object check - this is primarily used to tell
449
- * Objects from primitive values when we know the value
450
- * is a JSON-compliant type.
451
- */
452
- function isObject (obj) {
453
- return obj !== null && typeof obj === 'object'
454
- }
455
-
456
- /**
457
- * Get the raw type string of a value, e.g., [object Object].
458
- */
459
- var _toString = Object.prototype.toString;
460
-
461
- function toRawType (value) {
462
- return _toString.call(value).slice(8, -1)
463
- }
464
-
465
- /**
466
- * Strict object type check. Only returns true
467
- * for plain JavaScript objects.
468
- */
469
- function isPlainObject (obj) {
470
- return _toString.call(obj) === '[object Object]'
471
- }
472
-
473
- function isRegExp (v) {
474
- return _toString.call(v) === '[object RegExp]'
475
- }
476
-
477
- /**
478
- * Check if val is a valid array index.
479
- */
480
- function isValidArrayIndex (val) {
481
- var n = parseFloat(String(val));
482
- return n >= 0 && Math.floor(n) === n && isFinite(val)
483
- }
484
-
485
- function isPromise (val) {
486
- return (
487
- isDef(val) &&
488
- typeof val.then === 'function' &&
489
- typeof val.catch === 'function'
490
- )
491
- }
492
-
493
- /**
494
- * Convert a value to a string that is actually rendered.
495
- */
496
- function toString (val) {
497
- return val == null
498
- ? ''
499
- : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
500
- ? JSON.stringify(val, null, 2)
501
- : String(val)
502
- }
503
-
504
- /**
505
- * Convert an input value to a number for persistence.
506
- * If the conversion fails, return original string.
507
- */
508
- function toNumber (val) {
509
- var n = parseFloat(val);
510
- return isNaN(n) ? val : n
511
- }
512
-
513
- /**
514
- * Make a map and return a function for checking if a key
515
- * is in that map.
516
- */
517
- function makeMap (
518
- str,
519
- expectsLowerCase
520
- ) {
521
- var map = Object.create(null);
522
- var list = str.split(',');
523
- for (var i = 0; i < list.length; i++) {
524
- map[list[i]] = true;
525
- }
526
- return expectsLowerCase
527
- ? function (val) { return map[val.toLowerCase()]; }
528
- : function (val) { return map[val]; }
529
- }
530
-
531
- /**
532
- * Check if a tag is a built-in tag.
533
- */
534
- var isBuiltInTag = makeMap('slot,component', true);
535
-
536
- /**
537
- * Check if an attribute is a reserved attribute.
538
- */
539
- var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
540
-
541
- /**
542
- * Remove an item from an array.
543
- */
544
- function remove (arr, item) {
545
- if (arr.length) {
546
- var index = arr.indexOf(item);
547
- if (index > -1) {
548
- return arr.splice(index, 1)
549
- }
550
- }
551
- }
552
-
553
- /**
554
- * Check whether an object has the property.
555
- */
556
- var hasOwnProperty = Object.prototype.hasOwnProperty;
557
- function hasOwn (obj, key) {
558
- return hasOwnProperty.call(obj, key)
559
- }
560
-
561
- /**
562
- * Create a cached version of a pure function.
563
- */
564
- function cached (fn) {
565
- var cache = Object.create(null);
566
- return (function cachedFn (str) {
567
- var hit = cache[str];
568
- return hit || (cache[str] = fn(str))
569
- })
570
- }
571
-
572
- /**
573
- * Camelize a hyphen-delimited string.
574
- */
575
- var camelizeRE = /-(\w)/g;
576
- var camelize = cached(function (str) {
577
- return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
578
- });
579
-
580
- /**
581
- * Capitalize a string.
582
- */
583
- var capitalize = cached(function (str) {
584
- return str.charAt(0).toUpperCase() + str.slice(1)
585
- });
586
-
587
- /**
588
- * Hyphenate a camelCase string.
589
- */
590
- var hyphenateRE = /\B([A-Z])/g;
591
- var hyphenate = cached(function (str) {
592
- return str.replace(hyphenateRE, '-$1').toLowerCase()
593
- });
594
-
595
- /**
596
- * Simple bind polyfill for environments that do not support it,
597
- * e.g., PhantomJS 1.x. Technically, we don't need this anymore
598
- * since native bind is now performant enough in most browsers.
599
- * But removing it would mean breaking code that was able to run in
600
- * PhantomJS 1.x, so this must be kept for backward compatibility.
601
- */
602
-
603
- /* istanbul ignore next */
604
- function polyfillBind (fn, ctx) {
605
- function boundFn (a) {
606
- var l = arguments.length;
607
- return l
608
- ? l > 1
609
- ? fn.apply(ctx, arguments)
610
- : fn.call(ctx, a)
611
- : fn.call(ctx)
612
- }
613
-
614
- boundFn._length = fn.length;
615
- return boundFn
616
- }
617
-
618
- function nativeBind (fn, ctx) {
619
- return fn.bind(ctx)
620
- }
621
-
622
- var bind = Function.prototype.bind
623
- ? nativeBind
624
- : polyfillBind;
625
-
626
- /**
627
- * Convert an Array-like object to a real Array.
628
- */
629
- function toArray (list, start) {
630
- start = start || 0;
631
- var i = list.length - start;
632
- var ret = new Array(i);
633
- while (i--) {
634
- ret[i] = list[i + start];
635
- }
636
- return ret
637
- }
638
-
639
- /**
640
- * Mix properties into target object.
641
- */
642
- function extend (to, _from) {
643
- for (var key in _from) {
644
- to[key] = _from[key];
645
- }
646
- return to
647
- }
648
-
649
- /**
650
- * Merge an Array of Objects into a single Object.
651
- */
652
- function toObject (arr) {
653
- var res = {};
654
- for (var i = 0; i < arr.length; i++) {
655
- if (arr[i]) {
656
- extend(res, arr[i]);
657
- }
658
- }
659
- return res
660
- }
661
-
662
- /* eslint-disable no-unused-vars */
663
-
664
- /**
665
- * Perform no operation.
666
- * Stubbing args to make Flow happy without leaving useless transpiled code
667
- * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
668
- */
669
- function noop (a, b, c) {}
670
-
671
- /**
672
- * Always return false.
673
- */
674
- var no = function (a, b, c) { return false; };
675
-
676
- /* eslint-enable no-unused-vars */
677
-
678
- /**
679
- * Return the same value.
680
- */
681
- var identity = function (_) { return _; };
682
-
683
- /**
684
- * Generate a string containing static keys from compiler modules.
685
- */
686
- function genStaticKeys (modules) {
687
- return modules.reduce(function (keys, m) {
688
- return keys.concat(m.staticKeys || [])
689
- }, []).join(',')
690
- }
691
-
692
- /**
693
- * Check if two values are loosely equal - that is,
694
- * if they are plain objects, do they have the same shape?
695
- */
696
- function looseEqual (a, b) {
697
- if (a === b) { return true }
698
- var isObjectA = isObject(a);
699
- var isObjectB = isObject(b);
700
- if (isObjectA && isObjectB) {
701
- try {
702
- var isArrayA = Array.isArray(a);
703
- var isArrayB = Array.isArray(b);
704
- if (isArrayA && isArrayB) {
705
- return a.length === b.length && a.every(function (e, i) {
706
- return looseEqual(e, b[i])
707
- })
708
- } else if (a instanceof Date && b instanceof Date) {
709
- return a.getTime() === b.getTime()
710
- } else if (!isArrayA && !isArrayB) {
711
- var keysA = Object.keys(a);
712
- var keysB = Object.keys(b);
713
- return keysA.length === keysB.length && keysA.every(function (key) {
714
- return looseEqual(a[key], b[key])
715
- })
716
- } else {
717
- /* istanbul ignore next */
718
- return false
719
- }
720
- } catch (e) {
721
- /* istanbul ignore next */
722
- return false
723
- }
724
- } else if (!isObjectA && !isObjectB) {
725
- return String(a) === String(b)
726
- } else {
727
- return false
728
- }
729
- }
730
-
731
- /**
732
- * Return the first index at which a loosely equal value can be
733
- * found in the array (if value is a plain object, the array must
734
- * contain an object of the same shape), or -1 if it is not present.
735
- */
736
- function looseIndexOf (arr, val) {
737
- for (var i = 0; i < arr.length; i++) {
738
- if (looseEqual(arr[i], val)) { return i }
739
- }
740
- return -1
741
- }
742
-
743
- /**
744
- * Ensure a function is called only once.
745
- */
746
- function once (fn) {
747
- var called = false;
748
- return function () {
749
- if (!called) {
750
- called = true;
751
- fn.apply(this, arguments);
752
- }
753
- }
754
- }
755
-
756
- var SSR_ATTR = 'data-server-rendered';
757
-
758
- var ASSET_TYPES = [
759
- 'component',
760
- 'directive',
761
- 'filter'
762
- ];
763
-
764
- var LIFECYCLE_HOOKS = [
765
- 'beforeCreate',
766
- 'created',
767
- 'beforeMount',
768
- 'mounted',
769
- 'beforeUpdate',
770
- 'updated',
771
- 'beforeDestroy',
772
- 'destroyed',
773
- 'activated',
774
- 'deactivated',
775
- 'errorCaptured',
776
- 'serverPrefetch'
777
- ];
778
-
779
- /* */
780
-
781
-
782
-
783
- var config = ({
784
- /**
785
- * Option merge strategies (used in core/util/options)
786
- */
787
- // $flow-disable-line
788
- optionMergeStrategies: Object.create(null),
789
-
790
- /**
791
- * Whether to suppress warnings.
792
- */
793
- silent: false,
794
-
795
- /**
796
- * Show production mode tip message on boot?
797
- */
798
- productionTip: process.env.NODE_ENV !== 'production',
799
-
800
- /**
801
- * Whether to enable devtools
802
- */
803
- devtools: process.env.NODE_ENV !== 'production',
804
-
805
- /**
806
- * Whether to record perf
807
- */
808
- performance: false,
809
-
810
- /**
811
- * Error handler for watcher errors
812
- */
813
- errorHandler: null,
814
-
815
- /**
816
- * Warn handler for watcher warns
817
- */
818
- warnHandler: null,
819
-
820
- /**
821
- * Ignore certain custom elements
822
- */
823
- ignoredElements: [],
824
-
825
- /**
826
- * Custom user key aliases for v-on
827
- */
828
- // $flow-disable-line
829
- keyCodes: Object.create(null),
830
-
831
- /**
832
- * Check if a tag is reserved so that it cannot be registered as a
833
- * component. This is platform-dependent and may be overwritten.
834
- */
835
- isReservedTag: no,
836
-
837
- /**
838
- * Check if an attribute is reserved so that it cannot be used as a component
839
- * prop. This is platform-dependent and may be overwritten.
840
- */
841
- isReservedAttr: no,
842
-
843
- /**
844
- * Check if a tag is an unknown element.
845
- * Platform-dependent.
846
- */
847
- isUnknownElement: no,
848
-
849
- /**
850
- * Get the namespace of an element
851
- */
852
- getTagNamespace: noop,
853
-
854
- /**
855
- * Parse the real tag name for the specific platform.
856
- */
857
- parsePlatformTagName: identity,
858
-
859
- /**
860
- * Check if an attribute must be bound using property, e.g. value
861
- * Platform-dependent.
862
- */
863
- mustUseProp: no,
864
-
865
- /**
866
- * Perform updates asynchronously. Intended to be used by Vue Test Utils
867
- * This will significantly reduce performance if set to false.
868
- */
869
- async: true,
870
-
871
- /**
872
- * Exposed for legacy reasons
873
- */
874
- _lifecycleHooks: LIFECYCLE_HOOKS
875
- });
876
-
877
- /* */
878
-
879
- /**
880
- * unicode letters used for parsing html tags, component names and property paths.
881
- * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
882
- * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
883
- */
884
- var unicodeLetters = 'a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD';
885
-
886
- /**
887
- * Check if a string starts with $ or _
888
- */
889
- function isReserved (str) {
890
- var c = (str + '').charCodeAt(0);
891
- return c === 0x24 || c === 0x5F
892
- }
893
-
894
- /**
895
- * Define a property.
896
- */
897
- function def (obj, key, val, enumerable) {
898
- Object.defineProperty(obj, key, {
899
- value: val,
900
- enumerable: !!enumerable,
901
- writable: true,
902
- configurable: true
903
- });
904
- }
905
-
906
- /**
907
- * Parse simple path.
908
- */
909
- var bailRE = new RegExp(("[^" + unicodeLetters + ".$_\\d]"));
910
- function parsePath (path) {
911
- if (bailRE.test(path)) {
912
- return
913
- }
914
- var segments = path.split('.');
915
- return function (obj) {
916
- for (var i = 0; i < segments.length; i++) {
917
- if (!obj) { return }
918
- obj = obj[segments[i]];
919
- }
920
- return obj
921
- }
922
- }
923
-
924
- /* */
925
-
926
- // can we use __proto__?
927
- var hasProto = '__proto__' in {};
928
-
929
- // Browser environment sniffing
930
- var inBrowser = typeof window !== 'undefined';
931
- var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
932
- var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
933
- var UA = inBrowser && window.navigator.userAgent.toLowerCase();
934
- var isIE = UA && /msie|trident/.test(UA);
935
- var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
936
- var isEdge = UA && UA.indexOf('edge/') > 0;
937
- var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');
938
- var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');
939
- var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
940
- var isPhantomJS = UA && /phantomjs/.test(UA);
941
- var isFF = UA && UA.match(/firefox\/(\d+)/);
942
-
943
- // Firefox has a "watch" function on Object.prototype...
944
- var nativeWatch = ({}).watch;
945
-
946
- var supportsPassive = false;
947
- if (inBrowser) {
948
- try {
949
- var opts = {};
950
- Object.defineProperty(opts, 'passive', ({
951
- get: function get () {
952
- /* istanbul ignore next */
953
- supportsPassive = true;
954
- }
955
- })); // https://github.com/facebook/flow/issues/285
956
- window.addEventListener('test-passive', null, opts);
957
- } catch (e) {}
958
- }
959
-
960
- // this needs to be lazy-evaled because vue may be required before
961
- // vue-server-renderer can set VUE_ENV
962
- var _isServer;
963
- var isServerRendering = function () {
964
- if (_isServer === undefined) {
965
- /* istanbul ignore if */
966
- if (!inBrowser && !inWeex && typeof global !== 'undefined') {
967
- // detect presence of vue-server-renderer and avoid
968
- // Webpack shimming the process
969
- _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';
970
- } else {
971
- _isServer = false;
972
- }
973
- }
974
- return _isServer
975
- };
976
-
977
- // detect devtools
978
- var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
979
-
980
- /* istanbul ignore next */
981
- function isNative (Ctor) {
982
- return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
983
- }
984
-
985
- var hasSymbol =
986
- typeof Symbol !== 'undefined' && isNative(Symbol) &&
987
- typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);
988
-
989
- var _Set;
990
- /* istanbul ignore if */ // $flow-disable-line
991
- if (typeof Set !== 'undefined' && isNative(Set)) {
992
- // use native Set when available.
993
- _Set = Set;
994
- } else {
995
- // a non-standard Set polyfill that only works with primitive keys.
996
- _Set = /*@__PURE__*/(function () {
997
- function Set () {
998
- this.set = Object.create(null);
999
- }
1000
- Set.prototype.has = function has (key) {
1001
- return this.set[key] === true
1002
- };
1003
- Set.prototype.add = function add (key) {
1004
- this.set[key] = true;
1005
- };
1006
- Set.prototype.clear = function clear () {
1007
- this.set = Object.create(null);
1008
- };
1009
-
1010
- return Set;
1011
- }());
1012
- }
1013
-
1014
- /* */
1015
-
1016
- var warn = noop;
1017
- var tip = noop;
1018
- var generateComponentTrace = (noop); // work around flow check
1019
- var formatComponentName = (noop);
1020
-
1021
- if (process.env.NODE_ENV !== 'production') {
1022
- var hasConsole = typeof console !== 'undefined';
1023
- var classifyRE = /(?:^|[-_])(\w)/g;
1024
- var classify = function (str) { return str
1025
- .replace(classifyRE, function (c) { return c.toUpperCase(); })
1026
- .replace(/[-_]/g, ''); };
1027
-
1028
- warn = function (msg, vm) {
1029
- var trace = vm ? generateComponentTrace(vm) : '';
1030
-
1031
- if (config.warnHandler) {
1032
- config.warnHandler.call(null, msg, vm, trace);
1033
- } else if (hasConsole && (!config.silent)) {
1034
- console.error(("[Vue warn]: " + msg + trace));
1035
- }
1036
- };
1037
-
1038
- tip = function (msg, vm) {
1039
- if (hasConsole && (!config.silent)) {
1040
- console.warn("[Vue tip]: " + msg + (
1041
- vm ? generateComponentTrace(vm) : ''
1042
- ));
1043
- }
1044
- };
1045
-
1046
- formatComponentName = function (vm, includeFile) {
1047
- if (vm.$root === vm) {
1048
- return '<Root>'
1049
- }
1050
- var options = typeof vm === 'function' && vm.cid != null
1051
- ? vm.options
1052
- : vm._isVue
1053
- ? vm.$options || vm.constructor.options
1054
- : vm;
1055
- var name = options.name || options._componentTag;
1056
- var file = options.__file;
1057
- if (!name && file) {
1058
- var match = file.match(/([^/\\]+)\.vue$/);
1059
- name = match && match[1];
1060
- }
1061
-
1062
- return (
1063
- (name ? ("<" + (classify(name)) + ">") : "<Anonymous>") +
1064
- (file && includeFile !== false ? (" at " + file) : '')
1065
- )
1066
- };
1067
-
1068
- var repeat = function (str, n) {
1069
- var res = '';
1070
- while (n) {
1071
- if (n % 2 === 1) { res += str; }
1072
- if (n > 1) { str += str; }
1073
- n >>= 1;
1074
- }
1075
- return res
1076
- };
1077
-
1078
- generateComponentTrace = function (vm) {
1079
- if (vm._isVue && vm.$parent) {
1080
- var tree = [];
1081
- var currentRecursiveSequence = 0;
1082
- while (vm) {
1083
- if (tree.length > 0) {
1084
- var last = tree[tree.length - 1];
1085
- if (last.constructor === vm.constructor) {
1086
- currentRecursiveSequence++;
1087
- vm = vm.$parent;
1088
- continue
1089
- } else if (currentRecursiveSequence > 0) {
1090
- tree[tree.length - 1] = [last, currentRecursiveSequence];
1091
- currentRecursiveSequence = 0;
1092
- }
1093
- }
1094
- tree.push(vm);
1095
- vm = vm.$parent;
1096
- }
1097
- return '\n\nfound in\n\n' + tree
1098
- .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
1099
- ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
1100
- : formatComponentName(vm))); })
1101
- .join('\n')
1102
- } else {
1103
- return ("\n\n(found in " + (formatComponentName(vm)) + ")")
1104
- }
1105
- };
1106
- }
1107
-
1108
- /* */
1109
-
1110
- var uid = 0;
1111
-
1112
- /**
1113
- * A dep is an observable that can have multiple
1114
- * directives subscribing to it.
1115
- */
1116
- var Dep = function Dep () {
1117
- this.id = uid++;
1118
- this.subs = [];
1119
- };
1120
-
1121
- Dep.prototype.addSub = function addSub (sub) {
1122
- this.subs.push(sub);
1123
- };
1124
-
1125
- Dep.prototype.removeSub = function removeSub (sub) {
1126
- remove(this.subs, sub);
1127
- };
1128
-
1129
- Dep.prototype.depend = function depend () {
1130
- if (Dep.target) {
1131
- Dep.target.addDep(this);
1132
- }
1133
- };
1134
-
1135
- Dep.prototype.notify = function notify () {
1136
- // stabilize the subscriber list first
1137
- var subs = this.subs.slice();
1138
- if (process.env.NODE_ENV !== 'production' && !config.async) {
1139
- // subs aren't sorted in scheduler if not running async
1140
- // we need to sort them now to make sure they fire in correct
1141
- // order
1142
- subs.sort(function (a, b) { return a.id - b.id; });
1143
- }
1144
- for (var i = 0, l = subs.length; i < l; i++) {
1145
- subs[i].update();
1146
- }
1147
- };
1148
-
1149
- // The current target watcher being evaluated.
1150
- // This is globally unique because only one watcher
1151
- // can be evaluated at a time.
1152
- Dep.target = null;
1153
- var targetStack = [];
1154
-
1155
- function pushTarget (target) {
1156
- targetStack.push(target);
1157
- Dep.target = target;
1158
- }
1159
-
1160
- function popTarget () {
1161
- targetStack.pop();
1162
- Dep.target = targetStack[targetStack.length - 1];
1163
- }
1164
-
1165
- /* */
1166
-
1167
- var VNode = function VNode (
1168
- tag,
1169
- data,
1170
- children,
1171
- text,
1172
- elm,
1173
- context,
1174
- componentOptions,
1175
- asyncFactory
1176
- ) {
1177
- this.tag = tag;
1178
- this.data = data;
1179
- this.children = children;
1180
- this.text = text;
1181
- this.elm = elm;
1182
- this.ns = undefined;
1183
- this.context = context;
1184
- this.fnContext = undefined;
1185
- this.fnOptions = undefined;
1186
- this.fnScopeId = undefined;
1187
- this.key = data && data.key;
1188
- this.componentOptions = componentOptions;
1189
- this.componentInstance = undefined;
1190
- this.parent = undefined;
1191
- this.raw = false;
1192
- this.isStatic = false;
1193
- this.isRootInsert = true;
1194
- this.isComment = false;
1195
- this.isCloned = false;
1196
- this.isOnce = false;
1197
- this.asyncFactory = asyncFactory;
1198
- this.asyncMeta = undefined;
1199
- this.isAsyncPlaceholder = false;
1200
- };
1201
-
1202
- var prototypeAccessors = { child: { configurable: true } };
1203
-
1204
- // DEPRECATED: alias for componentInstance for backwards compat.
1205
- /* istanbul ignore next */
1206
- prototypeAccessors.child.get = function () {
1207
- return this.componentInstance
1208
- };
1209
-
1210
- Object.defineProperties( VNode.prototype, prototypeAccessors );
1211
-
1212
- var createEmptyVNode = function (text) {
1213
- if ( text === void 0 ) text = '';
1214
-
1215
- var node = new VNode();
1216
- node.text = text;
1217
- node.isComment = true;
1218
- return node
1219
- };
1220
-
1221
- function createTextVNode (val) {
1222
- return new VNode(undefined, undefined, undefined, String(val))
1223
- }
1224
-
1225
- // optimized shallow clone
1226
- // used for static nodes and slot nodes because they may be reused across
1227
- // multiple renders, cloning them avoids errors when DOM manipulations rely
1228
- // on their elm reference.
1229
- function cloneVNode (vnode) {
1230
- var cloned = new VNode(
1231
- vnode.tag,
1232
- vnode.data,
1233
- // #7975
1234
- // clone children array to avoid mutating original in case of cloning
1235
- // a child.
1236
- vnode.children && vnode.children.slice(),
1237
- vnode.text,
1238
- vnode.elm,
1239
- vnode.context,
1240
- vnode.componentOptions,
1241
- vnode.asyncFactory
1242
- );
1243
- cloned.ns = vnode.ns;
1244
- cloned.isStatic = vnode.isStatic;
1245
- cloned.key = vnode.key;
1246
- cloned.isComment = vnode.isComment;
1247
- cloned.fnContext = vnode.fnContext;
1248
- cloned.fnOptions = vnode.fnOptions;
1249
- cloned.fnScopeId = vnode.fnScopeId;
1250
- cloned.asyncMeta = vnode.asyncMeta;
1251
- cloned.isCloned = true;
1252
- return cloned
1253
- }
1254
-
1255
- /*
1256
- * not type checking this file because flow doesn't play well with
1257
- * dynamically accessing methods on Array prototype
1258
- */
1259
-
1260
- var arrayProto = Array.prototype;
1261
- var arrayMethods = Object.create(arrayProto);
1262
-
1263
- var methodsToPatch = [
1264
- 'push',
1265
- 'pop',
1266
- 'shift',
1267
- 'unshift',
1268
- 'splice',
1269
- 'sort',
1270
- 'reverse'
1271
- ];
1272
-
1273
- /**
1274
- * Intercept mutating methods and emit events
1275
- */
1276
- methodsToPatch.forEach(function (method) {
1277
- // cache original method
1278
- var original = arrayProto[method];
1279
- def(arrayMethods, method, function mutator () {
1280
- var args = [], len = arguments.length;
1281
- while ( len-- ) args[ len ] = arguments[ len ];
1282
-
1283
- var result = original.apply(this, args);
1284
- var ob = this.__ob__;
1285
- var inserted;
1286
- switch (method) {
1287
- case 'push':
1288
- case 'unshift':
1289
- inserted = args;
1290
- break
1291
- case 'splice':
1292
- inserted = args.slice(2);
1293
- break
1294
- }
1295
- if (inserted) { ob.observeArray(inserted); }
1296
- // notify change
1297
- ob.dep.notify();
1298
- return result
1299
- });
1300
- });
1301
-
1302
- /* */
1303
-
1304
- var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
1305
-
1306
- /**
1307
- * In some cases we may want to disable observation inside a component's
1308
- * update computation.
1309
- */
1310
- var shouldObserve = true;
1311
-
1312
- function toggleObserving (value) {
1313
- shouldObserve = value;
1314
- }
1315
-
1316
- /**
1317
- * Observer class that is attached to each observed
1318
- * object. Once attached, the observer converts the target
1319
- * object's property keys into getter/setters that
1320
- * collect dependencies and dispatch updates.
1321
- */
1322
- var Observer = function Observer (value) {
1323
- this.value = value;
1324
- this.dep = new Dep();
1325
- this.vmCount = 0;
1326
- def(value, '__ob__', this);
1327
- if (Array.isArray(value)) {
1328
- if (hasProto) {
1329
- protoAugment(value, arrayMethods);
1330
- } else {
1331
- copyAugment(value, arrayMethods, arrayKeys);
1332
- }
1333
- this.observeArray(value);
1334
- } else {
1335
- this.walk(value);
1336
- }
1337
- };
1338
-
1339
- /**
1340
- * Walk through all properties and convert them into
1341
- * getter/setters. This method should only be called when
1342
- * value type is Object.
1343
- */
1344
- Observer.prototype.walk = function walk (obj) {
1345
- var keys = Object.keys(obj);
1346
- for (var i = 0; i < keys.length; i++) {
1347
- defineReactive$$1(obj, keys[i]);
1348
- }
1349
- };
1350
-
1351
- /**
1352
- * Observe a list of Array items.
1353
- */
1354
- Observer.prototype.observeArray = function observeArray (items) {
1355
- for (var i = 0, l = items.length; i < l; i++) {
1356
- observe(items[i]);
1357
- }
1358
- };
1359
-
1360
- // helpers
1361
-
1362
- /**
1363
- * Augment a target Object or Array by intercepting
1364
- * the prototype chain using __proto__
1365
- */
1366
- function protoAugment (target, src) {
1367
- /* eslint-disable no-proto */
1368
- target.__proto__ = src;
1369
- /* eslint-enable no-proto */
1370
- }
1371
-
1372
- /**
1373
- * Augment a target Object or Array by defining
1374
- * hidden properties.
1375
- */
1376
- /* istanbul ignore next */
1377
- function copyAugment (target, src, keys) {
1378
- for (var i = 0, l = keys.length; i < l; i++) {
1379
- var key = keys[i];
1380
- def(target, key, src[key]);
1381
- }
1382
- }
1383
-
1384
- /**
1385
- * Attempt to create an observer instance for a value,
1386
- * returns the new observer if successfully observed,
1387
- * or the existing observer if the value already has one.
1388
- */
1389
- function observe (value, asRootData) {
1390
- if (!isObject(value) || value instanceof VNode) {
1391
- return
1392
- }
1393
- var ob;
1394
- if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
1395
- ob = value.__ob__;
1396
- } else if (
1397
- shouldObserve &&
1398
- !isServerRendering() &&
1399
- (Array.isArray(value) || isPlainObject(value)) &&
1400
- Object.isExtensible(value) &&
1401
- !value._isVue
1402
- ) {
1403
- ob = new Observer(value);
1404
- }
1405
- if (asRootData && ob) {
1406
- ob.vmCount++;
1407
- }
1408
- return ob
1409
- }
1410
-
1411
- /**
1412
- * Define a reactive property on an Object.
1413
- */
1414
- function defineReactive$$1 (
1415
- obj,
1416
- key,
1417
- val,
1418
- customSetter,
1419
- shallow
1420
- ) {
1421
- var dep = new Dep();
1422
-
1423
- var property = Object.getOwnPropertyDescriptor(obj, key);
1424
- if (property && property.configurable === false) {
1425
- return
1426
- }
1427
-
1428
- // cater for pre-defined getter/setters
1429
- var getter = property && property.get;
1430
- var setter = property && property.set;
1431
- if ((!getter || setter) && arguments.length === 2) {
1432
- val = obj[key];
1433
- }
1434
-
1435
- var childOb = !shallow && observe(val);
1436
- Object.defineProperty(obj, key, {
1437
- enumerable: true,
1438
- configurable: true,
1439
- get: function reactiveGetter () {
1440
- var value = getter ? getter.call(obj) : val;
1441
- if (Dep.target) {
1442
- dep.depend();
1443
- if (childOb) {
1444
- childOb.dep.depend();
1445
- if (Array.isArray(value)) {
1446
- dependArray(value);
1447
- }
1448
- }
1449
- }
1450
- return value
1451
- },
1452
- set: function reactiveSetter (newVal) {
1453
- var value = getter ? getter.call(obj) : val;
1454
- /* eslint-disable no-self-compare */
1455
- if (newVal === value || (newVal !== newVal && value !== value)) {
1456
- return
1457
- }
1458
- /* eslint-enable no-self-compare */
1459
- if (process.env.NODE_ENV !== 'production' && customSetter) {
1460
- customSetter();
1461
- }
1462
- // #7981: for accessor properties without setter
1463
- if (getter && !setter) { return }
1464
- if (setter) {
1465
- setter.call(obj, newVal);
1466
- } else {
1467
- val = newVal;
1468
- }
1469
- childOb = !shallow && observe(newVal);
1470
- dep.notify();
1471
- }
1472
- });
1473
- }
1474
-
1475
- /**
1476
- * Set a property on an object. Adds the new property and
1477
- * triggers change notification if the property doesn't
1478
- * already exist.
1479
- */
1480
- function set (target, key, val) {
1481
- if (process.env.NODE_ENV !== 'production' &&
1482
- (isUndef(target) || isPrimitive(target))
1483
- ) {
1484
- warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target))));
1485
- }
1486
- if (Array.isArray(target) && isValidArrayIndex(key)) {
1487
- target.length = Math.max(target.length, key);
1488
- target.splice(key, 1, val);
1489
- return val
1490
- }
1491
- if (key in target && !(key in Object.prototype)) {
1492
- target[key] = val;
1493
- return val
1494
- }
1495
- var ob = (target).__ob__;
1496
- if (target._isVue || (ob && ob.vmCount)) {
1497
- process.env.NODE_ENV !== 'production' && warn(
1498
- 'Avoid adding reactive properties to a Vue instance or its root $data ' +
1499
- 'at runtime - declare it upfront in the data option.'
1500
- );
1501
- return val
1502
- }
1503
- if (!ob) {
1504
- target[key] = val;
1505
- return val
1506
- }
1507
- defineReactive$$1(ob.value, key, val);
1508
- ob.dep.notify();
1509
- return val
1510
- }
1511
-
1512
- /**
1513
- * Delete a property and trigger change if necessary.
1514
- */
1515
- function del (target, key) {
1516
- if (process.env.NODE_ENV !== 'production' &&
1517
- (isUndef(target) || isPrimitive(target))
1518
- ) {
1519
- warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target))));
1520
- }
1521
- if (Array.isArray(target) && isValidArrayIndex(key)) {
1522
- target.splice(key, 1);
1523
- return
1524
- }
1525
- var ob = (target).__ob__;
1526
- if (target._isVue || (ob && ob.vmCount)) {
1527
- process.env.NODE_ENV !== 'production' && warn(
1528
- 'Avoid deleting properties on a Vue instance or its root $data ' +
1529
- '- just set it to null.'
1530
- );
1531
- return
1532
- }
1533
- if (!hasOwn(target, key)) {
1534
- return
1535
- }
1536
- delete target[key];
1537
- if (!ob) {
1538
- return
1539
- }
1540
- ob.dep.notify();
1541
- }
1542
-
1543
- /**
1544
- * Collect dependencies on array elements when the array is touched, since
1545
- * we cannot intercept array element access like property getters.
1546
- */
1547
- function dependArray (value) {
1548
- for (var e = (void 0), i = 0, l = value.length; i < l; i++) {
1549
- e = value[i];
1550
- e && e.__ob__ && e.__ob__.dep.depend();
1551
- if (Array.isArray(e)) {
1552
- dependArray(e);
1553
- }
1554
- }
1555
- }
1556
-
1557
- /* */
1558
-
1559
- /**
1560
- * Option overwriting strategies are functions that handle
1561
- * how to merge a parent option value and a child option
1562
- * value into the final value.
1563
- */
1564
- var strats = config.optionMergeStrategies;
1565
-
1566
- /**
1567
- * Options with restrictions
1568
- */
1569
- if (process.env.NODE_ENV !== 'production') {
1570
- strats.el = strats.propsData = function (parent, child, vm, key) {
1571
- if (!vm) {
1572
- warn(
1573
- "option \"" + key + "\" can only be used during instance " +
1574
- 'creation with the `new` keyword.'
1575
- );
1576
- }
1577
- return defaultStrat(parent, child)
1578
- };
1579
- }
1580
-
1581
- /**
1582
- * Helper that recursively merges two data objects together.
1583
- */
1584
- function mergeData (to, from) {
1585
- if (!from) { return to }
1586
- var key, toVal, fromVal;
1587
-
1588
- var keys = hasSymbol
1589
- ? Reflect.ownKeys(from)
1590
- : Object.keys(from);
1591
-
1592
- for (var i = 0; i < keys.length; i++) {
1593
- key = keys[i];
1594
- // in case the object is already observed...
1595
- if (key === '__ob__') { continue }
1596
- toVal = to[key];
1597
- fromVal = from[key];
1598
- if (!hasOwn(to, key)) {
1599
- set(to, key, fromVal);
1600
- } else if (
1601
- toVal !== fromVal &&
1602
- isPlainObject(toVal) &&
1603
- isPlainObject(fromVal)
1604
- ) {
1605
- mergeData(toVal, fromVal);
1606
- }
1607
- }
1608
- return to
1609
- }
1610
-
1611
- /**
1612
- * Data
1613
- */
1614
- function mergeDataOrFn (
1615
- parentVal,
1616
- childVal,
1617
- vm
1618
- ) {
1619
- if (!vm) {
1620
- // in a Vue.extend merge, both should be functions
1621
- if (!childVal) {
1622
- return parentVal
1623
- }
1624
- if (!parentVal) {
1625
- return childVal
1626
- }
1627
- // when parentVal & childVal are both present,
1628
- // we need to return a function that returns the
1629
- // merged result of both functions... no need to
1630
- // check if parentVal is a function here because
1631
- // it has to be a function to pass previous merges.
1632
- return function mergedDataFn () {
1633
- return mergeData(
1634
- typeof childVal === 'function' ? childVal.call(this, this) : childVal,
1635
- typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal
1636
- )
1637
- }
1638
- } else {
1639
- return function mergedInstanceDataFn () {
1640
- // instance merge
1641
- var instanceData = typeof childVal === 'function'
1642
- ? childVal.call(vm, vm)
1643
- : childVal;
1644
- var defaultData = typeof parentVal === 'function'
1645
- ? parentVal.call(vm, vm)
1646
- : parentVal;
1647
- if (instanceData) {
1648
- return mergeData(instanceData, defaultData)
1649
- } else {
1650
- return defaultData
1651
- }
1652
- }
1653
- }
1654
- }
1655
-
1656
- strats.data = function (
1657
- parentVal,
1658
- childVal,
1659
- vm
1660
- ) {
1661
- if (!vm) {
1662
- if (childVal && typeof childVal !== 'function') {
1663
- process.env.NODE_ENV !== 'production' && warn(
1664
- 'The "data" option should be a function ' +
1665
- 'that returns a per-instance value in component ' +
1666
- 'definitions.',
1667
- vm
1668
- );
1669
-
1670
- return parentVal
1671
- }
1672
- return mergeDataOrFn(parentVal, childVal)
1673
- }
1674
-
1675
- return mergeDataOrFn(parentVal, childVal, vm)
1676
- };
1677
-
1678
- /**
1679
- * Hooks and props are merged as arrays.
1680
- */
1681
- function mergeHook (
1682
- parentVal,
1683
- childVal
1684
- ) {
1685
- var res = childVal
1686
- ? parentVal
1687
- ? parentVal.concat(childVal)
1688
- : Array.isArray(childVal)
1689
- ? childVal
1690
- : [childVal]
1691
- : parentVal;
1692
- return res
1693
- ? dedupeHooks(res)
1694
- : res
1695
- }
1696
-
1697
- function dedupeHooks (hooks) {
1698
- var res = [];
1699
- for (var i = 0; i < hooks.length; i++) {
1700
- if (res.indexOf(hooks[i]) === -1) {
1701
- res.push(hooks[i]);
1702
- }
1703
- }
1704
- return res
1705
- }
1706
-
1707
- LIFECYCLE_HOOKS.forEach(function (hook) {
1708
- strats[hook] = mergeHook;
1709
- });
1710
-
1711
- /**
1712
- * Assets
1713
- *
1714
- * When a vm is present (instance creation), we need to do
1715
- * a three-way merge between constructor options, instance
1716
- * options and parent options.
1717
- */
1718
- function mergeAssets (
1719
- parentVal,
1720
- childVal,
1721
- vm,
1722
- key
1723
- ) {
1724
- var res = Object.create(parentVal || null);
1725
- if (childVal) {
1726
- process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);
1727
- return extend(res, childVal)
1728
- } else {
1729
- return res
1730
- }
1731
- }
1732
-
1733
- ASSET_TYPES.forEach(function (type) {
1734
- strats[type + 's'] = mergeAssets;
1735
- });
1736
-
1737
- /**
1738
- * Watchers.
1739
- *
1740
- * Watchers hashes should not overwrite one
1741
- * another, so we merge them as arrays.
1742
- */
1743
- strats.watch = function (
1744
- parentVal,
1745
- childVal,
1746
- vm,
1747
- key
1748
- ) {
1749
- // work around Firefox's Object.prototype.watch...
1750
- if (parentVal === nativeWatch) { parentVal = undefined; }
1751
- if (childVal === nativeWatch) { childVal = undefined; }
1752
- /* istanbul ignore if */
1753
- if (!childVal) { return Object.create(parentVal || null) }
1754
- if (process.env.NODE_ENV !== 'production') {
1755
- assertObjectType(key, childVal, vm);
1756
- }
1757
- if (!parentVal) { return childVal }
1758
- var ret = {};
1759
- extend(ret, parentVal);
1760
- for (var key$1 in childVal) {
1761
- var parent = ret[key$1];
1762
- var child = childVal[key$1];
1763
- if (parent && !Array.isArray(parent)) {
1764
- parent = [parent];
1765
- }
1766
- ret[key$1] = parent
1767
- ? parent.concat(child)
1768
- : Array.isArray(child) ? child : [child];
1769
- }
1770
- return ret
1771
- };
1772
-
1773
- /**
1774
- * Other object hashes.
1775
- */
1776
- strats.props =
1777
- strats.methods =
1778
- strats.inject =
1779
- strats.computed = function (
1780
- parentVal,
1781
- childVal,
1782
- vm,
1783
- key
1784
- ) {
1785
- if (childVal && process.env.NODE_ENV !== 'production') {
1786
- assertObjectType(key, childVal, vm);
1787
- }
1788
- if (!parentVal) { return childVal }
1789
- var ret = Object.create(null);
1790
- extend(ret, parentVal);
1791
- if (childVal) { extend(ret, childVal); }
1792
- return ret
1793
- };
1794
- strats.provide = mergeDataOrFn;
1795
-
1796
- /**
1797
- * Default strategy.
1798
- */
1799
- var defaultStrat = function (parentVal, childVal) {
1800
- return childVal === undefined
1801
- ? parentVal
1802
- : childVal
1803
- };
1804
-
1805
- /**
1806
- * Validate component names
1807
- */
1808
- function checkComponents (options) {
1809
- for (var key in options.components) {
1810
- validateComponentName(key);
1811
- }
1812
- }
1813
-
1814
- function validateComponentName (name) {
1815
- if (!new RegExp(("^[a-zA-Z][\\-\\.0-9_" + unicodeLetters + "]*$")).test(name)) {
1816
- warn(
1817
- 'Invalid component name: "' + name + '". Component names ' +
1818
- 'should conform to valid custom element name in html5 specification.'
1819
- );
1820
- }
1821
- if (isBuiltInTag(name) || config.isReservedTag(name)) {
1822
- warn(
1823
- 'Do not use built-in or reserved HTML elements as component ' +
1824
- 'id: ' + name
1825
- );
1826
- }
1827
- }
1828
-
1829
- /**
1830
- * Ensure all props option syntax are normalized into the
1831
- * Object-based format.
1832
- */
1833
- function normalizeProps (options, vm) {
1834
- var props = options.props;
1835
- if (!props) { return }
1836
- var res = {};
1837
- var i, val, name;
1838
- if (Array.isArray(props)) {
1839
- i = props.length;
1840
- while (i--) {
1841
- val = props[i];
1842
- if (typeof val === 'string') {
1843
- name = camelize(val);
1844
- res[name] = { type: null };
1845
- } else if (process.env.NODE_ENV !== 'production') {
1846
- warn('props must be strings when using array syntax.');
1847
- }
1848
- }
1849
- } else if (isPlainObject(props)) {
1850
- for (var key in props) {
1851
- val = props[key];
1852
- name = camelize(key);
1853
- res[name] = isPlainObject(val)
1854
- ? val
1855
- : { type: val };
1856
- }
1857
- } else if (process.env.NODE_ENV !== 'production') {
1858
- warn(
1859
- "Invalid value for option \"props\": expected an Array or an Object, " +
1860
- "but got " + (toRawType(props)) + ".",
1861
- vm
1862
- );
1863
- }
1864
- options.props = res;
1865
- }
1866
-
1867
- /**
1868
- * Normalize all injections into Object-based format
1869
- */
1870
- function normalizeInject (options, vm) {
1871
- var inject = options.inject;
1872
- if (!inject) { return }
1873
- var normalized = options.inject = {};
1874
- if (Array.isArray(inject)) {
1875
- for (var i = 0; i < inject.length; i++) {
1876
- normalized[inject[i]] = { from: inject[i] };
1877
- }
1878
- } else if (isPlainObject(inject)) {
1879
- for (var key in inject) {
1880
- var val = inject[key];
1881
- normalized[key] = isPlainObject(val)
1882
- ? extend({ from: key }, val)
1883
- : { from: val };
1884
- }
1885
- } else if (process.env.NODE_ENV !== 'production') {
1886
- warn(
1887
- "Invalid value for option \"inject\": expected an Array or an Object, " +
1888
- "but got " + (toRawType(inject)) + ".",
1889
- vm
1890
- );
1891
- }
1892
- }
1893
-
1894
- /**
1895
- * Normalize raw function directives into object format.
1896
- */
1897
- function normalizeDirectives (options) {
1898
- var dirs = options.directives;
1899
- if (dirs) {
1900
- for (var key in dirs) {
1901
- var def$$1 = dirs[key];
1902
- if (typeof def$$1 === 'function') {
1903
- dirs[key] = { bind: def$$1, update: def$$1 };
1904
- }
1905
- }
1906
- }
1907
- }
1908
-
1909
- function assertObjectType (name, value, vm) {
1910
- if (!isPlainObject(value)) {
1911
- warn(
1912
- "Invalid value for option \"" + name + "\": expected an Object, " +
1913
- "but got " + (toRawType(value)) + ".",
1914
- vm
1915
- );
1916
- }
1917
- }
1918
-
1919
- /**
1920
- * Merge two option objects into a new one.
1921
- * Core utility used in both instantiation and inheritance.
1922
- */
1923
- function mergeOptions (
1924
- parent,
1925
- child,
1926
- vm
1927
- ) {
1928
- if (process.env.NODE_ENV !== 'production') {
1929
- checkComponents(child);
1930
- }
1931
-
1932
- if (typeof child === 'function') {
1933
- child = child.options;
1934
- }
1935
-
1936
- normalizeProps(child, vm);
1937
- normalizeInject(child, vm);
1938
- normalizeDirectives(child);
1939
-
1940
- // Apply extends and mixins on the child options,
1941
- // but only if it is a raw options object that isn't
1942
- // the result of another mergeOptions call.
1943
- // Only merged options has the _base property.
1944
- if (!child._base) {
1945
- if (child.extends) {
1946
- parent = mergeOptions(parent, child.extends, vm);
1947
- }
1948
- if (child.mixins) {
1949
- for (var i = 0, l = child.mixins.length; i < l; i++) {
1950
- parent = mergeOptions(parent, child.mixins[i], vm);
1951
- }
1952
- }
1953
- }
1954
-
1955
- var options = {};
1956
- var key;
1957
- for (key in parent) {
1958
- mergeField(key);
1959
- }
1960
- for (key in child) {
1961
- if (!hasOwn(parent, key)) {
1962
- mergeField(key);
1963
- }
1964
- }
1965
- function mergeField (key) {
1966
- var strat = strats[key] || defaultStrat;
1967
- options[key] = strat(parent[key], child[key], vm, key);
1968
- }
1969
- return options
1970
- }
1971
-
1972
- /**
1973
- * Resolve an asset.
1974
- * This function is used because child instances need access
1975
- * to assets defined in its ancestor chain.
1976
- */
1977
- function resolveAsset (
1978
- options,
1979
- type,
1980
- id,
1981
- warnMissing
1982
- ) {
1983
- /* istanbul ignore if */
1984
- if (typeof id !== 'string') {
1985
- return
1986
- }
1987
- var assets = options[type];
1988
- // check local registration variations first
1989
- if (hasOwn(assets, id)) { return assets[id] }
1990
- var camelizedId = camelize(id);
1991
- if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
1992
- var PascalCaseId = capitalize(camelizedId);
1993
- if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
1994
- // fallback to prototype chain
1995
- var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
1996
- if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {
1997
- warn(
1998
- 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
1999
- options
2000
- );
2001
- }
2002
- return res
2003
- }
2004
-
2005
- /* */
2006
-
2007
-
2008
-
2009
- function validateProp (
2010
- key,
2011
- propOptions,
2012
- propsData,
2013
- vm
2014
- ) {
2015
- var prop = propOptions[key];
2016
- var absent = !hasOwn(propsData, key);
2017
- var value = propsData[key];
2018
- // boolean casting
2019
- var booleanIndex = getTypeIndex(Boolean, prop.type);
2020
- if (booleanIndex > -1) {
2021
- if (absent && !hasOwn(prop, 'default')) {
2022
- value = false;
2023
- } else if (value === '' || value === hyphenate(key)) {
2024
- // only cast empty string / same name to boolean if
2025
- // boolean has higher priority
2026
- var stringIndex = getTypeIndex(String, prop.type);
2027
- if (stringIndex < 0 || booleanIndex < stringIndex) {
2028
- value = true;
2029
- }
2030
- }
2031
- }
2032
- // check default value
2033
- if (value === undefined) {
2034
- value = getPropDefaultValue(vm, prop, key);
2035
- // since the default value is a fresh copy,
2036
- // make sure to observe it.
2037
- var prevShouldObserve = shouldObserve;
2038
- toggleObserving(true);
2039
- observe(value);
2040
- toggleObserving(prevShouldObserve);
2041
- }
2042
- if (
2043
- process.env.NODE_ENV !== 'production' &&
2044
- // skip validation for weex recycle-list child component props
2045
- !(false)
2046
- ) {
2047
- assertProp(prop, key, value, vm, absent);
2048
- }
2049
- return value
2050
- }
2051
-
2052
- /**
2053
- * Get the default value of a prop.
2054
- */
2055
- function getPropDefaultValue (vm, prop, key) {
2056
- // no default, return undefined
2057
- if (!hasOwn(prop, 'default')) {
2058
- return undefined
2059
- }
2060
- var def = prop.default;
2061
- // warn against non-factory defaults for Object & Array
2062
- if (process.env.NODE_ENV !== 'production' && isObject(def)) {
2063
- warn(
2064
- 'Invalid default value for prop "' + key + '": ' +
2065
- 'Props with type Object/Array must use a factory function ' +
2066
- 'to return the default value.',
2067
- vm
2068
- );
2069
- }
2070
- // the raw prop value was also undefined from previous render,
2071
- // return previous default value to avoid unnecessary watcher trigger
2072
- if (vm && vm.$options.propsData &&
2073
- vm.$options.propsData[key] === undefined &&
2074
- vm._props[key] !== undefined
2075
- ) {
2076
- return vm._props[key]
2077
- }
2078
- // call factory function for non-Function types
2079
- // a value is Function if its prototype is function even across different execution context
2080
- return typeof def === 'function' && getType(prop.type) !== 'Function'
2081
- ? def.call(vm)
2082
- : def
2083
- }
2084
-
2085
- /**
2086
- * Assert whether a prop is valid.
2087
- */
2088
- function assertProp (
2089
- prop,
2090
- name,
2091
- value,
2092
- vm,
2093
- absent
2094
- ) {
2095
- if (prop.required && absent) {
2096
- warn(
2097
- 'Missing required prop: "' + name + '"',
2098
- vm
2099
- );
2100
- return
2101
- }
2102
- if (value == null && !prop.required) {
2103
- return
2104
- }
2105
- var type = prop.type;
2106
- var valid = !type || type === true;
2107
- var expectedTypes = [];
2108
- if (type) {
2109
- if (!Array.isArray(type)) {
2110
- type = [type];
2111
- }
2112
- for (var i = 0; i < type.length && !valid; i++) {
2113
- var assertedType = assertType(value, type[i]);
2114
- expectedTypes.push(assertedType.expectedType || '');
2115
- valid = assertedType.valid;
2116
- }
2117
- }
2118
-
2119
- if (!valid) {
2120
- warn(
2121
- getInvalidTypeMessage(name, value, expectedTypes),
2122
- vm
2123
- );
2124
- return
2125
- }
2126
- var validator = prop.validator;
2127
- if (validator) {
2128
- if (!validator(value)) {
2129
- warn(
2130
- 'Invalid prop: custom validator check failed for prop "' + name + '".',
2131
- vm
2132
- );
2133
- }
2134
- }
2135
- }
2136
-
2137
- var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;
2138
-
2139
- function assertType (value, type) {
2140
- var valid;
2141
- var expectedType = getType(type);
2142
- if (simpleCheckRE.test(expectedType)) {
2143
- var t = typeof value;
2144
- valid = t === expectedType.toLowerCase();
2145
- // for primitive wrapper objects
2146
- if (!valid && t === 'object') {
2147
- valid = value instanceof type;
2148
- }
2149
- } else if (expectedType === 'Object') {
2150
- valid = isPlainObject(value);
2151
- } else if (expectedType === 'Array') {
2152
- valid = Array.isArray(value);
2153
- } else {
2154
- valid = value instanceof type;
2155
- }
2156
- return {
2157
- valid: valid,
2158
- expectedType: expectedType
2159
- }
2160
- }
2161
-
2162
- /**
2163
- * Use function string name to check built-in types,
2164
- * because a simple equality check will fail when running
2165
- * across different vms / iframes.
2166
- */
2167
- function getType (fn) {
2168
- var match = fn && fn.toString().match(/^\s*function (\w+)/);
2169
- return match ? match[1] : ''
2170
- }
2171
-
2172
- function isSameType (a, b) {
2173
- return getType(a) === getType(b)
2174
- }
2175
-
2176
- function getTypeIndex (type, expectedTypes) {
2177
- if (!Array.isArray(expectedTypes)) {
2178
- return isSameType(expectedTypes, type) ? 0 : -1
2179
- }
2180
- for (var i = 0, len = expectedTypes.length; i < len; i++) {
2181
- if (isSameType(expectedTypes[i], type)) {
2182
- return i
2183
- }
2184
- }
2185
- return -1
2186
- }
2187
-
2188
- function getInvalidTypeMessage (name, value, expectedTypes) {
2189
- var message = "Invalid prop: type check failed for prop \"" + name + "\"." +
2190
- " Expected " + (expectedTypes.map(capitalize).join(', '));
2191
- var expectedType = expectedTypes[0];
2192
- var receivedType = toRawType(value);
2193
- var expectedValue = styleValue(value, expectedType);
2194
- var receivedValue = styleValue(value, receivedType);
2195
- // check if we need to specify expected value
2196
- if (expectedTypes.length === 1 &&
2197
- isExplicable(expectedType) &&
2198
- !isBoolean(expectedType, receivedType)) {
2199
- message += " with value " + expectedValue;
2200
- }
2201
- message += ", got " + receivedType + " ";
2202
- // check if we need to specify received value
2203
- if (isExplicable(receivedType)) {
2204
- message += "with value " + receivedValue + ".";
2205
- }
2206
- return message
2207
- }
2208
-
2209
- function styleValue (value, type) {
2210
- if (type === 'String') {
2211
- return ("\"" + value + "\"")
2212
- } else if (type === 'Number') {
2213
- return ("" + (Number(value)))
2214
- } else {
2215
- return ("" + value)
2216
- }
2217
- }
2218
-
2219
- function isExplicable (value) {
2220
- var explicitTypes = ['string', 'number', 'boolean'];
2221
- return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })
2222
- }
2223
-
2224
- function isBoolean () {
2225
- var args = [], len = arguments.length;
2226
- while ( len-- ) args[ len ] = arguments[ len ];
2227
-
2228
- return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })
2229
- }
2230
-
2231
- /* */
2232
-
2233
- function handleError (err, vm, info) {
2234
- if (vm) {
2235
- var cur = vm;
2236
- while ((cur = cur.$parent)) {
2237
- var hooks = cur.$options.errorCaptured;
2238
- if (hooks) {
2239
- for (var i = 0; i < hooks.length; i++) {
2240
- try {
2241
- var capture = hooks[i].call(cur, err, vm, info) === false;
2242
- if (capture) { return }
2243
- } catch (e) {
2244
- globalHandleError(e, cur, 'errorCaptured hook');
2245
- }
2246
- }
2247
- }
2248
- }
2249
- }
2250
- globalHandleError(err, vm, info);
2251
- }
2252
-
2253
- function invokeWithErrorHandling (
2254
- handler,
2255
- context,
2256
- args,
2257
- vm,
2258
- info
2259
- ) {
2260
- var res;
2261
- try {
2262
- res = args ? handler.apply(context, args) : handler.call(context);
2263
- if (res && !res._isVue && isPromise(res)) {
2264
- res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
2265
- }
2266
- } catch (e) {
2267
- handleError(e, vm, info);
2268
- }
2269
- return res
2270
- }
2271
-
2272
- function globalHandleError (err, vm, info) {
2273
- if (config.errorHandler) {
2274
- try {
2275
- return config.errorHandler.call(null, err, vm, info)
2276
- } catch (e) {
2277
- // if the user intentionally throws the original error in the handler,
2278
- // do not log it twice
2279
- if (e !== err) {
2280
- logError(e, null, 'config.errorHandler');
2281
- }
2282
- }
2283
- }
2284
- logError(err, vm, info);
2285
- }
2286
-
2287
- function logError (err, vm, info) {
2288
- if (process.env.NODE_ENV !== 'production') {
2289
- warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
2290
- }
2291
- /* istanbul ignore else */
2292
- if ((inBrowser || inWeex) && typeof console !== 'undefined') {
2293
- console.error(err);
2294
- } else {
2295
- throw err
2296
- }
2297
- }
2298
-
2299
- /* */
2300
-
2301
- var isUsingMicroTask = false;
2302
-
2303
- var callbacks = [];
2304
- var pending = false;
2305
-
2306
- function flushCallbacks () {
2307
- pending = false;
2308
- var copies = callbacks.slice(0);
2309
- callbacks.length = 0;
2310
- for (var i = 0; i < copies.length; i++) {
2311
- copies[i]();
2312
- }
2313
- }
2314
-
2315
- // Here we have async deferring wrappers using microtasks.
2316
- // In 2.5 we used (macro) tasks (in combination with microtasks).
2317
- // However, it has subtle problems when state is changed right before repaint
2318
- // (e.g. #6813, out-in transitions).
2319
- // Also, using (macro) tasks in event handler would cause some weird behaviors
2320
- // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
2321
- // So we now use microtasks everywhere, again.
2322
- // A major drawback of this tradeoff is that there are some scenarios
2323
- // where microtasks have too high a priority and fire in between supposedly
2324
- // sequential events (e.g. #4521, #6690, which have workarounds)
2325
- // or even between bubbling of the same event (#6566).
2326
- var timerFunc;
2327
-
2328
- // The nextTick behavior leverages the microtask queue, which can be accessed
2329
- // via either native Promise.then or MutationObserver.
2330
- // MutationObserver has wider support, however it is seriously bugged in
2331
- // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
2332
- // completely stops working after triggering a few times... so, if native
2333
- // Promise is available, we will use it:
2334
- /* istanbul ignore next, $flow-disable-line */
2335
- if (typeof Promise !== 'undefined' && isNative(Promise)) {
2336
- var p = Promise.resolve();
2337
- timerFunc = function () {
2338
- p.then(flushCallbacks);
2339
- // In problematic UIWebViews, Promise.then doesn't completely break, but
2340
- // it can get stuck in a weird state where callbacks are pushed into the
2341
- // microtask queue but the queue isn't being flushed, until the browser
2342
- // needs to do some other work, e.g. handle a timer. Therefore we can
2343
- // "force" the microtask queue to be flushed by adding an empty timer.
2344
- if (isIOS) { setTimeout(noop); }
2345
- };
2346
- isUsingMicroTask = true;
2347
- } else if (!isIE && typeof MutationObserver !== 'undefined' && (
2348
- isNative(MutationObserver) ||
2349
- // PhantomJS and iOS 7.x
2350
- MutationObserver.toString() === '[object MutationObserverConstructor]'
2351
- )) {
2352
- // Use MutationObserver where native Promise is not available,
2353
- // e.g. PhantomJS, iOS7, Android 4.4
2354
- // (#6466 MutationObserver is unreliable in IE11)
2355
- var counter = 1;
2356
- var observer = new MutationObserver(flushCallbacks);
2357
- var textNode = document.createTextNode(String(counter));
2358
- observer.observe(textNode, {
2359
- characterData: true
2360
- });
2361
- timerFunc = function () {
2362
- counter = (counter + 1) % 2;
2363
- textNode.data = String(counter);
2364
- };
2365
- isUsingMicroTask = true;
2366
- } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
2367
- // Fallback to setImmediate.
2368
- // Techinically it leverages the (macro) task queue,
2369
- // but it is still a better choice than setTimeout.
2370
- timerFunc = function () {
2371
- setImmediate(flushCallbacks);
2372
- };
2373
- } else {
2374
- // Fallback to setTimeout.
2375
- timerFunc = function () {
2376
- setTimeout(flushCallbacks, 0);
2377
- };
2378
- }
2379
-
2380
- function nextTick (cb, ctx) {
2381
- var _resolve;
2382
- callbacks.push(function () {
2383
- if (cb) {
2384
- try {
2385
- cb.call(ctx);
2386
- } catch (e) {
2387
- handleError(e, ctx, 'nextTick');
2388
- }
2389
- } else if (_resolve) {
2390
- _resolve(ctx);
2391
- }
2392
- });
2393
- if (!pending) {
2394
- pending = true;
2395
- timerFunc();
2396
- }
2397
- // $flow-disable-line
2398
- if (!cb && typeof Promise !== 'undefined') {
2399
- return new Promise(function (resolve) {
2400
- _resolve = resolve;
2401
- })
2402
- }
2403
- }
2404
-
2405
- /* */
2406
-
2407
- var mark;
2408
- var measure;
2409
-
2410
- if (process.env.NODE_ENV !== 'production') {
2411
- var perf = inBrowser && window.performance;
2412
- /* istanbul ignore if */
2413
- if (
2414
- perf &&
2415
- perf.mark &&
2416
- perf.measure &&
2417
- perf.clearMarks &&
2418
- perf.clearMeasures
2419
- ) {
2420
- mark = function (tag) { return perf.mark(tag); };
2421
- measure = function (name, startTag, endTag) {
2422
- perf.measure(name, startTag, endTag);
2423
- perf.clearMarks(startTag);
2424
- perf.clearMarks(endTag);
2425
- // perf.clearMeasures(name)
2426
- };
2427
- }
2428
- }
2429
-
2430
- /* not type checking this file because flow doesn't play well with Proxy */
2431
-
2432
- var initProxy;
2433
-
2434
- if (process.env.NODE_ENV !== 'production') {
2435
- var allowedGlobals = makeMap(
2436
- 'Infinity,undefined,NaN,isFinite,isNaN,' +
2437
- 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
2438
- 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
2439
- 'require' // for Webpack/Browserify
2440
- );
2441
-
2442
- var warnNonPresent = function (target, key) {
2443
- warn(
2444
- "Property or method \"" + key + "\" is not defined on the instance but " +
2445
- 'referenced during render. Make sure that this property is reactive, ' +
2446
- 'either in the data option, or for class-based components, by ' +
2447
- 'initializing the property. ' +
2448
- 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',
2449
- target
2450
- );
2451
- };
2452
-
2453
- var warnReservedPrefix = function (target, key) {
2454
- warn(
2455
- "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " +
2456
- 'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
2457
- 'prevent conflicts with Vue internals' +
2458
- 'See: https://vuejs.org/v2/api/#data',
2459
- target
2460
- );
2461
- };
2462
-
2463
- var hasProxy =
2464
- typeof Proxy !== 'undefined' && isNative(Proxy);
2465
-
2466
- if (hasProxy) {
2467
- var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
2468
- config.keyCodes = new Proxy(config.keyCodes, {
2469
- set: function set (target, key, value) {
2470
- if (isBuiltInModifier(key)) {
2471
- warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key));
2472
- return false
2473
- } else {
2474
- target[key] = value;
2475
- return true
2476
- }
2477
- }
2478
- });
2479
- }
2480
-
2481
- var hasHandler = {
2482
- has: function has (target, key) {
2483
- var has = key in target;
2484
- var isAllowed = allowedGlobals(key) ||
2485
- (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));
2486
- if (!has && !isAllowed) {
2487
- if (key in target.$data) { warnReservedPrefix(target, key); }
2488
- else { warnNonPresent(target, key); }
2489
- }
2490
- return has || !isAllowed
2491
- }
2492
- };
2493
-
2494
- var getHandler = {
2495
- get: function get (target, key) {
2496
- if (typeof key === 'string' && !(key in target)) {
2497
- if (key in target.$data) { warnReservedPrefix(target, key); }
2498
- else { warnNonPresent(target, key); }
2499
- }
2500
- return target[key]
2501
- }
2502
- };
2503
-
2504
- initProxy = function initProxy (vm) {
2505
- if (hasProxy) {
2506
- // determine which proxy handler to use
2507
- var options = vm.$options;
2508
- var handlers = options.render && options.render._withStripped
2509
- ? getHandler
2510
- : hasHandler;
2511
- vm._renderProxy = new Proxy(vm, handlers);
2512
- } else {
2513
- vm._renderProxy = vm;
2514
- }
2515
- };
2516
- }
2517
-
2518
- /* */
2519
-
2520
- var seenObjects = new _Set();
2521
-
2522
- /**
2523
- * Recursively traverse an object to evoke all converted
2524
- * getters, so that every nested property inside the object
2525
- * is collected as a "deep" dependency.
2526
- */
2527
- function traverse (val) {
2528
- _traverse(val, seenObjects);
2529
- seenObjects.clear();
2530
- }
2531
-
2532
- function _traverse (val, seen) {
2533
- var i, keys;
2534
- var isA = Array.isArray(val);
2535
- if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {
2536
- return
2537
- }
2538
- if (val.__ob__) {
2539
- var depId = val.__ob__.dep.id;
2540
- if (seen.has(depId)) {
2541
- return
2542
- }
2543
- seen.add(depId);
2544
- }
2545
- if (isA) {
2546
- i = val.length;
2547
- while (i--) { _traverse(val[i], seen); }
2548
- } else {
2549
- keys = Object.keys(val);
2550
- i = keys.length;
2551
- while (i--) { _traverse(val[keys[i]], seen); }
2552
- }
2553
- }
2554
-
2555
- /* */
2556
-
2557
- var normalizeEvent = cached(function (name) {
2558
- var passive = name.charAt(0) === '&';
2559
- name = passive ? name.slice(1) : name;
2560
- var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first
2561
- name = once$$1 ? name.slice(1) : name;
2562
- var capture = name.charAt(0) === '!';
2563
- name = capture ? name.slice(1) : name;
2564
- return {
2565
- name: name,
2566
- once: once$$1,
2567
- capture: capture,
2568
- passive: passive
2569
- }
2570
- });
2571
-
2572
- function createFnInvoker (fns, vm) {
2573
- function invoker () {
2574
- var arguments$1 = arguments;
2575
-
2576
- var fns = invoker.fns;
2577
- if (Array.isArray(fns)) {
2578
- var cloned = fns.slice();
2579
- for (var i = 0; i < cloned.length; i++) {
2580
- invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler");
2581
- }
2582
- } else {
2583
- // return handler return value for single handlers
2584
- return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler")
2585
- }
2586
- }
2587
- invoker.fns = fns;
2588
- return invoker
2589
- }
2590
-
2591
- function updateListeners (
2592
- on,
2593
- oldOn,
2594
- add,
2595
- remove$$1,
2596
- createOnceHandler,
2597
- vm
2598
- ) {
2599
- var name, def$$1, cur, old, event;
2600
- for (name in on) {
2601
- def$$1 = cur = on[name];
2602
- old = oldOn[name];
2603
- event = normalizeEvent(name);
2604
- if (isUndef(cur)) {
2605
- process.env.NODE_ENV !== 'production' && warn(
2606
- "Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
2607
- vm
2608
- );
2609
- } else if (isUndef(old)) {
2610
- if (isUndef(cur.fns)) {
2611
- cur = on[name] = createFnInvoker(cur, vm);
2612
- }
2613
- if (isTrue(event.once)) {
2614
- cur = on[name] = createOnceHandler(event.name, cur, event.capture);
2615
- }
2616
- add(event.name, cur, event.capture, event.passive, event.params);
2617
- } else if (cur !== old) {
2618
- old.fns = cur;
2619
- on[name] = old;
2620
- }
2621
- }
2622
- for (name in oldOn) {
2623
- if (isUndef(on[name])) {
2624
- event = normalizeEvent(name);
2625
- remove$$1(event.name, oldOn[name], event.capture);
2626
- }
2627
- }
2628
- }
2629
-
2630
- /* */
2631
-
2632
- function mergeVNodeHook (def, hookKey, hook) {
2633
- if (def instanceof VNode) {
2634
- def = def.data.hook || (def.data.hook = {});
2635
- }
2636
- var invoker;
2637
- var oldHook = def[hookKey];
2638
-
2639
- function wrappedHook () {
2640
- hook.apply(this, arguments);
2641
- // important: remove merged hook to ensure it's called only once
2642
- // and prevent memory leak
2643
- remove(invoker.fns, wrappedHook);
2644
- }
2645
-
2646
- if (isUndef(oldHook)) {
2647
- // no existing hook
2648
- invoker = createFnInvoker([wrappedHook]);
2649
- } else {
2650
- /* istanbul ignore if */
2651
- if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
2652
- // already a merged invoker
2653
- invoker = oldHook;
2654
- invoker.fns.push(wrappedHook);
2655
- } else {
2656
- // existing plain hook
2657
- invoker = createFnInvoker([oldHook, wrappedHook]);
2658
- }
2659
- }
2660
-
2661
- invoker.merged = true;
2662
- def[hookKey] = invoker;
2663
- }
2664
-
2665
- /* */
2666
-
2667
- function extractPropsFromVNodeData (
2668
- data,
2669
- Ctor,
2670
- tag
2671
- ) {
2672
- // we are only extracting raw values here.
2673
- // validation and default values are handled in the child
2674
- // component itself.
2675
- var propOptions = Ctor.options.props;
2676
- if (isUndef(propOptions)) {
2677
- return
2678
- }
2679
- var res = {};
2680
- var attrs = data.attrs;
2681
- var props = data.props;
2682
- if (isDef(attrs) || isDef(props)) {
2683
- for (var key in propOptions) {
2684
- var altKey = hyphenate(key);
2685
- if (process.env.NODE_ENV !== 'production') {
2686
- var keyInLowerCase = key.toLowerCase();
2687
- if (
2688
- key !== keyInLowerCase &&
2689
- attrs && hasOwn(attrs, keyInLowerCase)
2690
- ) {
2691
- tip(
2692
- "Prop \"" + keyInLowerCase + "\" is passed to component " +
2693
- (formatComponentName(tag || Ctor)) + ", but the declared prop name is" +
2694
- " \"" + key + "\". " +
2695
- "Note that HTML attributes are case-insensitive and camelCased " +
2696
- "props need to use their kebab-case equivalents when using in-DOM " +
2697
- "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."
2698
- );
2699
- }
2700
- }
2701
- checkProp(res, props, key, altKey, true) ||
2702
- checkProp(res, attrs, key, altKey, false);
2703
- }
2704
- }
2705
- return res
2706
- }
2707
-
2708
- function checkProp (
2709
- res,
2710
- hash,
2711
- key,
2712
- altKey,
2713
- preserve
2714
- ) {
2715
- if (isDef(hash)) {
2716
- if (hasOwn(hash, key)) {
2717
- res[key] = hash[key];
2718
- if (!preserve) {
2719
- delete hash[key];
2720
- }
2721
- return true
2722
- } else if (hasOwn(hash, altKey)) {
2723
- res[key] = hash[altKey];
2724
- if (!preserve) {
2725
- delete hash[altKey];
2726
- }
2727
- return true
2728
- }
2729
- }
2730
- return false
2731
- }
2732
-
2733
- /* */
2734
-
2735
- // The template compiler attempts to minimize the need for normalization by
2736
- // statically analyzing the template at compile time.
2737
- //
2738
- // For plain HTML markup, normalization can be completely skipped because the
2739
- // generated render function is guaranteed to return Array<VNode>. There are
2740
- // two cases where extra normalization is needed:
2741
-
2742
- // 1. When the children contains components - because a functional component
2743
- // may return an Array instead of a single root. In this case, just a simple
2744
- // normalization is needed - if any child is an Array, we flatten the whole
2745
- // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
2746
- // because functional components already normalize their own children.
2747
- function simpleNormalizeChildren (children) {
2748
- for (var i = 0; i < children.length; i++) {
2749
- if (Array.isArray(children[i])) {
2750
- return Array.prototype.concat.apply([], children)
2751
- }
2752
- }
2753
- return children
2754
- }
2755
-
2756
- // 2. When the children contains constructs that always generated nested Arrays,
2757
- // e.g. <template>, <slot>, v-for, or when the children is provided by user
2758
- // with hand-written render functions / JSX. In such cases a full normalization
2759
- // is needed to cater to all possible types of children values.
2760
- function normalizeChildren (children) {
2761
- return isPrimitive(children)
2762
- ? [createTextVNode(children)]
2763
- : Array.isArray(children)
2764
- ? normalizeArrayChildren(children)
2765
- : undefined
2766
- }
2767
-
2768
- function isTextNode (node) {
2769
- return isDef(node) && isDef(node.text) && isFalse(node.isComment)
2770
- }
2771
-
2772
- function normalizeArrayChildren (children, nestedIndex) {
2773
- var res = [];
2774
- var i, c, lastIndex, last;
2775
- for (i = 0; i < children.length; i++) {
2776
- c = children[i];
2777
- if (isUndef(c) || typeof c === 'boolean') { continue }
2778
- lastIndex = res.length - 1;
2779
- last = res[lastIndex];
2780
- // nested
2781
- if (Array.isArray(c)) {
2782
- if (c.length > 0) {
2783
- c = normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i));
2784
- // merge adjacent text nodes
2785
- if (isTextNode(c[0]) && isTextNode(last)) {
2786
- res[lastIndex] = createTextVNode(last.text + (c[0]).text);
2787
- c.shift();
2788
- }
2789
- res.push.apply(res, c);
2790
- }
2791
- } else if (isPrimitive(c)) {
2792
- if (isTextNode(last)) {
2793
- // merge adjacent text nodes
2794
- // this is necessary for SSR hydration because text nodes are
2795
- // essentially merged when rendered to HTML strings
2796
- res[lastIndex] = createTextVNode(last.text + c);
2797
- } else if (c !== '') {
2798
- // convert primitive to vnode
2799
- res.push(createTextVNode(c));
2800
- }
2801
- } else {
2802
- if (isTextNode(c) && isTextNode(last)) {
2803
- // merge adjacent text nodes
2804
- res[lastIndex] = createTextVNode(last.text + c.text);
2805
- } else {
2806
- // default key for nested array children (likely generated by v-for)
2807
- if (isTrue(children._isVList) &&
2808
- isDef(c.tag) &&
2809
- isUndef(c.key) &&
2810
- isDef(nestedIndex)) {
2811
- c.key = "__vlist" + nestedIndex + "_" + i + "__";
2812
- }
2813
- res.push(c);
2814
- }
2815
- }
2816
- }
2817
- return res
2818
- }
2819
-
2820
- /* */
2821
-
2822
- function initProvide (vm) {
2823
- var provide = vm.$options.provide;
2824
- if (provide) {
2825
- vm._provided = typeof provide === 'function'
2826
- ? provide.call(vm)
2827
- : provide;
2828
- }
2829
- }
2830
-
2831
- function initInjections (vm) {
2832
- var result = resolveInject(vm.$options.inject, vm);
2833
- if (result) {
2834
- toggleObserving(false);
2835
- Object.keys(result).forEach(function (key) {
2836
- /* istanbul ignore else */
2837
- if (process.env.NODE_ENV !== 'production') {
2838
- defineReactive$$1(vm, key, result[key], function () {
2839
- warn(
2840
- "Avoid mutating an injected value directly since the changes will be " +
2841
- "overwritten whenever the provided component re-renders. " +
2842
- "injection being mutated: \"" + key + "\"",
2843
- vm
2844
- );
2845
- });
2846
- } else {
2847
- defineReactive$$1(vm, key, result[key]);
2848
- }
2849
- });
2850
- toggleObserving(true);
2851
- }
2852
- }
2853
-
2854
- function resolveInject (inject, vm) {
2855
- if (inject) {
2856
- // inject is :any because flow is not smart enough to figure out cached
2857
- var result = Object.create(null);
2858
- var keys = hasSymbol
2859
- ? Reflect.ownKeys(inject)
2860
- : Object.keys(inject);
2861
-
2862
- for (var i = 0; i < keys.length; i++) {
2863
- var key = keys[i];
2864
- // #6574 in case the inject object is observed...
2865
- if (key === '__ob__') { continue }
2866
- var provideKey = inject[key].from;
2867
- var source = vm;
2868
- while (source) {
2869
- if (source._provided && hasOwn(source._provided, provideKey)) {
2870
- result[key] = source._provided[provideKey];
2871
- break
2872
- }
2873
- source = source.$parent;
2874
- }
2875
- if (!source) {
2876
- if ('default' in inject[key]) {
2877
- var provideDefault = inject[key].default;
2878
- result[key] = typeof provideDefault === 'function'
2879
- ? provideDefault.call(vm)
2880
- : provideDefault;
2881
- } else if (process.env.NODE_ENV !== 'production') {
2882
- warn(("Injection \"" + key + "\" not found"), vm);
2883
- }
2884
- }
2885
- }
2886
- return result
2887
- }
2888
- }
2889
-
2890
- /* */
2891
-
2892
-
2893
-
2894
- /**
2895
- * Runtime helper for resolving raw children VNodes into a slot object.
2896
- */
2897
- function resolveSlots (
2898
- children,
2899
- context
2900
- ) {
2901
- if (!children || !children.length) {
2902
- return {}
2903
- }
2904
- var slots = {};
2905
- for (var i = 0, l = children.length; i < l; i++) {
2906
- var child = children[i];
2907
- var data = child.data;
2908
- // remove slot attribute if the node is resolved as a Vue slot node
2909
- if (data && data.attrs && data.attrs.slot) {
2910
- delete data.attrs.slot;
2911
- }
2912
- // named slots should only be respected if the vnode was rendered in the
2913
- // same context.
2914
- if ((child.context === context || child.fnContext === context) &&
2915
- data && data.slot != null
2916
- ) {
2917
- var name = data.slot;
2918
- var slot = (slots[name] || (slots[name] = []));
2919
- if (child.tag === 'template') {
2920
- slot.push.apply(slot, child.children || []);
2921
- } else {
2922
- slot.push(child);
2923
- }
2924
- } else {
2925
- (slots.default || (slots.default = [])).push(child);
2926
- }
2927
- }
2928
- // ignore slots that contains only whitespace
2929
- for (var name$1 in slots) {
2930
- if (slots[name$1].every(isWhitespace)) {
2931
- delete slots[name$1];
2932
- }
2933
- }
2934
- return slots
2935
- }
2936
-
2937
- function isWhitespace (node) {
2938
- return (node.isComment && !node.asyncFactory) || node.text === ' '
2939
- }
2940
-
2941
- /* */
2942
-
2943
- function normalizeScopedSlots (
2944
- slots,
2945
- normalSlots,
2946
- prevSlots
2947
- ) {
2948
- var res;
2949
- if (!slots) {
2950
- res = {};
2951
- } else if (slots._normalized) {
2952
- // fast path 1: child component re-render only, parent did not change
2953
- return slots._normalized
2954
- } else if (
2955
- slots.$stable &&
2956
- prevSlots &&
2957
- prevSlots !== emptyObject &&
2958
- Object.keys(normalSlots).length === 0
2959
- ) {
2960
- // fast path 2: stable scoped slots w/ no normal slots to proxy,
2961
- // only need to normalize once
2962
- return prevSlots
2963
- } else {
2964
- res = {};
2965
- for (var key in slots) {
2966
- if (slots[key] && key[0] !== '$') {
2967
- res[key] = normalizeScopedSlot(normalSlots, key, slots[key]);
2968
- }
2969
- }
2970
- }
2971
- // expose normal slots on scopedSlots
2972
- for (var key$1 in normalSlots) {
2973
- if (!(key$1 in res)) {
2974
- res[key$1] = proxyNormalSlot(normalSlots, key$1);
2975
- }
2976
- }
2977
- // avoriaz seems to mock a non-extensible $scopedSlots object
2978
- // and when that is passed down this would cause an error
2979
- if (slots && Object.isExtensible(slots)) {
2980
- (slots)._normalized = res;
2981
- }
2982
- def(res, '$stable', slots ? !!slots.$stable : true);
2983
- return res
2984
- }
2985
-
2986
- function normalizeScopedSlot(normalSlots, key, fn) {
2987
- var normalized = function () {
2988
- var res = arguments.length ? fn.apply(null, arguments) : fn({});
2989
- res = res && typeof res === 'object' && !Array.isArray(res)
2990
- ? [res] // single vnode
2991
- : normalizeChildren(res);
2992
- return res && res.length === 0
2993
- ? undefined
2994
- : res
2995
- };
2996
- // this is a slot using the new v-slot syntax without scope. although it is
2997
- // compiled as a scoped slot, render fn users would expect it to be present
2998
- // on this.$slots because the usage is semantically a normal slot.
2999
- if (fn.proxy) {
3000
- Object.defineProperty(normalSlots, key, {
3001
- get: normalized,
3002
- enumerable: true,
3003
- configurable: true
3004
- });
3005
- }
3006
- return normalized
3007
- }
3008
-
3009
- function proxyNormalSlot(slots, key) {
3010
- return function () { return slots[key]; }
3011
- }
3012
-
3013
- /* */
3014
-
3015
- /**
3016
- * Runtime helper for rendering v-for lists.
3017
- */
3018
- function renderList (
3019
- val,
3020
- render
3021
- ) {
3022
- var ret, i, l, keys, key;
3023
- if (Array.isArray(val) || typeof val === 'string') {
3024
- ret = new Array(val.length);
3025
- for (i = 0, l = val.length; i < l; i++) {
3026
- ret[i] = render(val[i], i);
3027
- }
3028
- } else if (typeof val === 'number') {
3029
- ret = new Array(val);
3030
- for (i = 0; i < val; i++) {
3031
- ret[i] = render(i + 1, i);
3032
- }
3033
- } else if (isObject(val)) {
3034
- if (hasSymbol && val[Symbol.iterator]) {
3035
- ret = [];
3036
- var iterator = val[Symbol.iterator]();
3037
- var result = iterator.next();
3038
- while (!result.done) {
3039
- ret.push(render(result.value, ret.length));
3040
- result = iterator.next();
3041
- }
3042
- } else {
3043
- keys = Object.keys(val);
3044
- ret = new Array(keys.length);
3045
- for (i = 0, l = keys.length; i < l; i++) {
3046
- key = keys[i];
3047
- ret[i] = render(val[key], key, i);
3048
- }
3049
- }
3050
- }
3051
- if (!isDef(ret)) {
3052
- ret = [];
3053
- }
3054
- (ret)._isVList = true;
3055
- return ret
3056
- }
3057
-
3058
- /* */
3059
-
3060
- /**
3061
- * Runtime helper for rendering <slot>
3062
- */
3063
- function renderSlot (
3064
- name,
3065
- fallback,
3066
- props,
3067
- bindObject
3068
- ) {
3069
- var scopedSlotFn = this.$scopedSlots[name];
3070
- var nodes;
3071
- if (scopedSlotFn) { // scoped slot
3072
- props = props || {};
3073
- if (bindObject) {
3074
- if (process.env.NODE_ENV !== 'production' && !isObject(bindObject)) {
3075
- warn(
3076
- 'slot v-bind without argument expects an Object',
3077
- this
3078
- );
3079
- }
3080
- props = extend(extend({}, bindObject), props);
3081
- }
3082
- nodes = scopedSlotFn(props) || fallback;
3083
- } else {
3084
- nodes = this.$slots[name] || fallback;
3085
- }
3086
-
3087
- var target = props && props.slot;
3088
- if (target) {
3089
- return this.$createElement('template', { slot: target }, nodes)
3090
- } else {
3091
- return nodes
3092
- }
3093
- }
3094
-
3095
- /* */
3096
-
3097
- /**
3098
- * Runtime helper for resolving filters
3099
- */
3100
- function resolveFilter (id) {
3101
- return resolveAsset(this.$options, 'filters', id, true) || identity
3102
- }
3103
-
3104
- /* */
3105
-
3106
- function isKeyNotMatch (expect, actual) {
3107
- if (Array.isArray(expect)) {
3108
- return expect.indexOf(actual) === -1
3109
- } else {
3110
- return expect !== actual
3111
- }
3112
- }
3113
-
3114
- /**
3115
- * Runtime helper for checking keyCodes from config.
3116
- * exposed as Vue.prototype._k
3117
- * passing in eventKeyName as last argument separately for backwards compat
3118
- */
3119
- function checkKeyCodes (
3120
- eventKeyCode,
3121
- key,
3122
- builtInKeyCode,
3123
- eventKeyName,
3124
- builtInKeyName
3125
- ) {
3126
- var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
3127
- if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
3128
- return isKeyNotMatch(builtInKeyName, eventKeyName)
3129
- } else if (mappedKeyCode) {
3130
- return isKeyNotMatch(mappedKeyCode, eventKeyCode)
3131
- } else if (eventKeyName) {
3132
- return hyphenate(eventKeyName) !== key
3133
- }
3134
- }
3135
-
3136
- /* */
3137
-
3138
- /**
3139
- * Runtime helper for merging v-bind="object" into a VNode's data.
3140
- */
3141
- function bindObjectProps (
3142
- data,
3143
- tag,
3144
- value,
3145
- asProp,
3146
- isSync
3147
- ) {
3148
- if (value) {
3149
- if (!isObject(value)) {
3150
- process.env.NODE_ENV !== 'production' && warn(
3151
- 'v-bind without argument expects an Object or Array value',
3152
- this
3153
- );
3154
- } else {
3155
- if (Array.isArray(value)) {
3156
- value = toObject(value);
3157
- }
3158
- var hash;
3159
- var loop = function ( key ) {
3160
- if (
3161
- key === 'class' ||
3162
- key === 'style' ||
3163
- isReservedAttribute(key)
3164
- ) {
3165
- hash = data;
3166
- } else {
3167
- var type = data.attrs && data.attrs.type;
3168
- hash = asProp || config.mustUseProp(tag, type, key)
3169
- ? data.domProps || (data.domProps = {})
3170
- : data.attrs || (data.attrs = {});
3171
- }
3172
- var camelizedKey = camelize(key);
3173
- if (!(key in hash) && !(camelizedKey in hash)) {
3174
- hash[key] = value[key];
3175
-
3176
- if (isSync) {
3177
- var on = data.on || (data.on = {});
3178
- on[("update:" + camelizedKey)] = function ($event) {
3179
- value[key] = $event;
3180
- };
3181
- }
3182
- }
3183
- };
3184
-
3185
- for (var key in value) loop( key );
3186
- }
3187
- }
3188
- return data
3189
- }
3190
-
3191
- /* */
3192
-
3193
- /**
3194
- * Runtime helper for rendering static trees.
3195
- */
3196
- function renderStatic (
3197
- index,
3198
- isInFor
3199
- ) {
3200
- var cached = this._staticTrees || (this._staticTrees = []);
3201
- var tree = cached[index];
3202
- // if has already-rendered static tree and not inside v-for,
3203
- // we can reuse the same tree.
3204
- if (tree && !isInFor) {
3205
- return tree
3206
- }
3207
- // otherwise, render a fresh tree.
3208
- tree = cached[index] = this.$options.staticRenderFns[index].call(
3209
- this._renderProxy,
3210
- null,
3211
- this // for render fns generated for functional component templates
3212
- );
3213
- markStatic(tree, ("__static__" + index), false);
3214
- return tree
3215
- }
3216
-
3217
- /**
3218
- * Runtime helper for v-once.
3219
- * Effectively it means marking the node as static with a unique key.
3220
- */
3221
- function markOnce (
3222
- tree,
3223
- index,
3224
- key
3225
- ) {
3226
- markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
3227
- return tree
3228
- }
3229
-
3230
- function markStatic (
3231
- tree,
3232
- key,
3233
- isOnce
3234
- ) {
3235
- if (Array.isArray(tree)) {
3236
- for (var i = 0; i < tree.length; i++) {
3237
- if (tree[i] && typeof tree[i] !== 'string') {
3238
- markStaticNode(tree[i], (key + "_" + i), isOnce);
3239
- }
3240
- }
3241
- } else {
3242
- markStaticNode(tree, key, isOnce);
3243
- }
3244
- }
3245
-
3246
- function markStaticNode (node, key, isOnce) {
3247
- node.isStatic = true;
3248
- node.key = key;
3249
- node.isOnce = isOnce;
3250
- }
3251
-
3252
- /* */
3253
-
3254
- function bindObjectListeners (data, value) {
3255
- if (value) {
3256
- if (!isPlainObject(value)) {
3257
- process.env.NODE_ENV !== 'production' && warn(
3258
- 'v-on without argument expects an Object value',
3259
- this
3260
- );
3261
- } else {
3262
- var on = data.on = data.on ? extend({}, data.on) : {};
3263
- for (var key in value) {
3264
- var existing = on[key];
3265
- var ours = value[key];
3266
- on[key] = existing ? [].concat(existing, ours) : ours;
3267
- }
3268
- }
3269
- }
3270
- return data
3271
- }
3272
-
3273
- /* */
3274
-
3275
- function resolveScopedSlots (
3276
- fns, // see flow/vnode
3277
- hasDynamicKeys,
3278
- res
3279
- ) {
3280
- res = res || { $stable: !hasDynamicKeys };
3281
- for (var i = 0; i < fns.length; i++) {
3282
- var slot = fns[i];
3283
- if (Array.isArray(slot)) {
3284
- resolveScopedSlots(slot, hasDynamicKeys, res);
3285
- } else if (slot) {
3286
- // marker for reverse proxying v-slot without scope on this.$slots
3287
- if (slot.proxy) {
3288
- slot.fn.proxy = true;
3289
- }
3290
- res[slot.key] = slot.fn;
3291
- }
3292
- }
3293
- return res
3294
- }
3295
-
3296
- /* */
3297
-
3298
- function bindDynamicKeys (baseObj, values) {
3299
- for (var i = 0; i < values.length; i += 2) {
3300
- var key = values[i];
3301
- if (typeof key === 'string' && key) {
3302
- baseObj[values[i]] = values[i + 1];
3303
- } else if (process.env.NODE_ENV !== 'production' && key !== '' && key !== null) {
3304
- // null is a speical value for explicitly removing a binding
3305
- warn(
3306
- ("Invalid value for dynamic directive argument (expected string or null): " + key),
3307
- this
3308
- );
3309
- }
3310
- }
3311
- return baseObj
3312
- }
3313
-
3314
- // helper to dynamically append modifier runtime markers to event names.
3315
- // ensure only append when value is already string, otherwise it will be cast
3316
- // to string and cause the type check to miss.
3317
- function prependModifier (value, symbol) {
3318
- return typeof value === 'string' ? symbol + value : value
3319
- }
3320
-
3321
- /* */
3322
-
3323
- function installRenderHelpers (target) {
3324
- target._o = markOnce;
3325
- target._n = toNumber;
3326
- target._s = toString;
3327
- target._l = renderList;
3328
- target._t = renderSlot;
3329
- target._q = looseEqual;
3330
- target._i = looseIndexOf;
3331
- target._m = renderStatic;
3332
- target._f = resolveFilter;
3333
- target._k = checkKeyCodes;
3334
- target._b = bindObjectProps;
3335
- target._v = createTextVNode;
3336
- target._e = createEmptyVNode;
3337
- target._u = resolveScopedSlots;
3338
- target._g = bindObjectListeners;
3339
- target._d = bindDynamicKeys;
3340
- target._p = prependModifier;
3341
- }
3342
-
3343
- /* */
3344
-
3345
- function FunctionalRenderContext (
3346
- data,
3347
- props,
3348
- children,
3349
- parent,
3350
- Ctor
3351
- ) {
3352
- var this$1 = this;
3353
-
3354
- var options = Ctor.options;
3355
- // ensure the createElement function in functional components
3356
- // gets a unique context - this is necessary for correct named slot check
3357
- var contextVm;
3358
- if (hasOwn(parent, '_uid')) {
3359
- contextVm = Object.create(parent);
3360
- // $flow-disable-line
3361
- contextVm._original = parent;
3362
- } else {
3363
- // the context vm passed in is a functional context as well.
3364
- // in this case we want to make sure we are able to get a hold to the
3365
- // real context instance.
3366
- contextVm = parent;
3367
- // $flow-disable-line
3368
- parent = parent._original;
3369
- }
3370
- var isCompiled = isTrue(options._compiled);
3371
- var needNormalization = !isCompiled;
3372
-
3373
- this.data = data;
3374
- this.props = props;
3375
- this.children = children;
3376
- this.parent = parent;
3377
- this.listeners = data.on || emptyObject;
3378
- this.injections = resolveInject(options.inject, parent);
3379
- this.slots = function () {
3380
- if (!this$1.$slots) {
3381
- normalizeScopedSlots(
3382
- data.scopedSlots,
3383
- this$1.$slots = resolveSlots(children, parent)
3384
- );
3385
- }
3386
- return this$1.$slots
3387
- };
3388
-
3389
- Object.defineProperty(this, 'scopedSlots', ({
3390
- enumerable: true,
3391
- get: function get () {
3392
- return normalizeScopedSlots(data.scopedSlots, this.slots())
3393
- }
3394
- }));
3395
-
3396
- // support for compiled functional template
3397
- if (isCompiled) {
3398
- // exposing $options for renderStatic()
3399
- this.$options = options;
3400
- // pre-resolve slots for renderSlot()
3401
- this.$slots = this.slots();
3402
- this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);
3403
- }
3404
-
3405
- if (options._scopeId) {
3406
- this._c = function (a, b, c, d) {
3407
- var vnode = createElement(contextVm, a, b, c, d, needNormalization);
3408
- if (vnode && !Array.isArray(vnode)) {
3409
- vnode.fnScopeId = options._scopeId;
3410
- vnode.fnContext = parent;
3411
- }
3412
- return vnode
3413
- };
3414
- } else {
3415
- this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };
3416
- }
3417
- }
3418
-
3419
- installRenderHelpers(FunctionalRenderContext.prototype);
3420
-
3421
- function createFunctionalComponent (
3422
- Ctor,
3423
- propsData,
3424
- data,
3425
- contextVm,
3426
- children
3427
- ) {
3428
- var options = Ctor.options;
3429
- var props = {};
3430
- var propOptions = options.props;
3431
- if (isDef(propOptions)) {
3432
- for (var key in propOptions) {
3433
- props[key] = validateProp(key, propOptions, propsData || emptyObject);
3434
- }
3435
- } else {
3436
- if (isDef(data.attrs)) { mergeProps(props, data.attrs); }
3437
- if (isDef(data.props)) { mergeProps(props, data.props); }
3438
- }
3439
-
3440
- var renderContext = new FunctionalRenderContext(
3441
- data,
3442
- props,
3443
- children,
3444
- contextVm,
3445
- Ctor
3446
- );
3447
-
3448
- var vnode = options.render.call(null, renderContext._c, renderContext);
3449
-
3450
- if (vnode instanceof VNode) {
3451
- return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)
3452
- } else if (Array.isArray(vnode)) {
3453
- var vnodes = normalizeChildren(vnode) || [];
3454
- var res = new Array(vnodes.length);
3455
- for (var i = 0; i < vnodes.length; i++) {
3456
- res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
3457
- }
3458
- return res
3459
- }
3460
- }
3461
-
3462
- function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {
3463
- // #7817 clone node before setting fnContext, otherwise if the node is reused
3464
- // (e.g. it was from a cached normal slot) the fnContext causes named slots
3465
- // that should not be matched to match.
3466
- var clone = cloneVNode(vnode);
3467
- clone.fnContext = contextVm;
3468
- clone.fnOptions = options;
3469
- if (process.env.NODE_ENV !== 'production') {
3470
- (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;
3471
- }
3472
- if (data.slot) {
3473
- (clone.data || (clone.data = {})).slot = data.slot;
3474
- }
3475
- return clone
3476
- }
3477
-
3478
- function mergeProps (to, from) {
3479
- for (var key in from) {
3480
- to[camelize(key)] = from[key];
3481
- }
3482
- }
3483
-
3484
- /* */
3485
-
3486
- /* */
3487
-
3488
- /* */
3489
-
3490
- /* */
3491
-
3492
- // inline hooks to be invoked on component VNodes during patch
3493
- var componentVNodeHooks = {
3494
- init: function init (vnode, hydrating) {
3495
- if (
3496
- vnode.componentInstance &&
3497
- !vnode.componentInstance._isDestroyed &&
3498
- vnode.data.keepAlive
3499
- ) {
3500
- // kept-alive components, treat as a patch
3501
- var mountedNode = vnode; // work around flow
3502
- componentVNodeHooks.prepatch(mountedNode, mountedNode);
3503
- } else {
3504
- var child = vnode.componentInstance = createComponentInstanceForVnode(
3505
- vnode,
3506
- activeInstance
3507
- );
3508
- child.$mount(hydrating ? vnode.elm : undefined, hydrating);
3509
- }
3510
- },
3511
-
3512
- prepatch: function prepatch (oldVnode, vnode) {
3513
- var options = vnode.componentOptions;
3514
- var child = vnode.componentInstance = oldVnode.componentInstance;
3515
- updateChildComponent(
3516
- child,
3517
- options.propsData, // updated props
3518
- options.listeners, // updated listeners
3519
- vnode, // new parent vnode
3520
- options.children // new children
3521
- );
3522
- },
3523
-
3524
- insert: function insert (vnode) {
3525
- var context = vnode.context;
3526
- var componentInstance = vnode.componentInstance;
3527
- if (!componentInstance._isMounted) {
3528
- componentInstance._isMounted = true;
3529
- callHook(componentInstance, 'mounted');
3530
- }
3531
- if (vnode.data.keepAlive) {
3532
- if (context._isMounted) {
3533
- // vue-router#1212
3534
- // During updates, a kept-alive component's child components may
3535
- // change, so directly walking the tree here may call activated hooks
3536
- // on incorrect children. Instead we push them into a queue which will
3537
- // be processed after the whole patch process ended.
3538
- queueActivatedComponent(componentInstance);
3539
- } else {
3540
- activateChildComponent(componentInstance, true /* direct */);
3541
- }
3542
- }
3543
- },
3544
-
3545
- destroy: function destroy (vnode) {
3546
- var componentInstance = vnode.componentInstance;
3547
- if (!componentInstance._isDestroyed) {
3548
- if (!vnode.data.keepAlive) {
3549
- componentInstance.$destroy();
3550
- } else {
3551
- deactivateChildComponent(componentInstance, true /* direct */);
3552
- }
3553
- }
3554
- }
3555
- };
3556
-
3557
- var hooksToMerge = Object.keys(componentVNodeHooks);
3558
-
3559
- function createComponent (
3560
- Ctor,
3561
- data,
3562
- context,
3563
- children,
3564
- tag
3565
- ) {
3566
- if (isUndef(Ctor)) {
3567
- return
3568
- }
3569
-
3570
- var baseCtor = context.$options._base;
3571
-
3572
- // plain options object: turn it into a constructor
3573
- if (isObject(Ctor)) {
3574
- Ctor = baseCtor.extend(Ctor);
3575
- }
3576
-
3577
- // if at this stage it's not a constructor or an async component factory,
3578
- // reject.
3579
- if (typeof Ctor !== 'function') {
3580
- if (process.env.NODE_ENV !== 'production') {
3581
- warn(("Invalid Component definition: " + (String(Ctor))), context);
3582
- }
3583
- return
3584
- }
3585
-
3586
- // async component
3587
- var asyncFactory;
3588
- if (isUndef(Ctor.cid)) {
3589
- asyncFactory = Ctor;
3590
- Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
3591
- if (Ctor === undefined) {
3592
- // return a placeholder node for async component, which is rendered
3593
- // as a comment node but preserves all the raw information for the node.
3594
- // the information will be used for async server-rendering and hydration.
3595
- return createAsyncPlaceholder(
3596
- asyncFactory,
3597
- data,
3598
- context,
3599
- children,
3600
- tag
3601
- )
3602
- }
3603
- }
3604
-
3605
- data = data || {};
3606
-
3607
- // resolve constructor options in case global mixins are applied after
3608
- // component constructor creation
3609
- resolveConstructorOptions(Ctor);
3610
-
3611
- // transform component v-model data into props & events
3612
- if (isDef(data.model)) {
3613
- transformModel(Ctor.options, data);
3614
- }
3615
-
3616
- // extract props
3617
- var propsData = extractPropsFromVNodeData(data, Ctor, tag);
3618
-
3619
- // functional component
3620
- if (isTrue(Ctor.options.functional)) {
3621
- return createFunctionalComponent(Ctor, propsData, data, context, children)
3622
- }
3623
-
3624
- // extract listeners, since these needs to be treated as
3625
- // child component listeners instead of DOM listeners
3626
- var listeners = data.on;
3627
- // replace with listeners with .native modifier
3628
- // so it gets processed during parent component patch.
3629
- data.on = data.nativeOn;
3630
-
3631
- if (isTrue(Ctor.options.abstract)) {
3632
- // abstract components do not keep anything
3633
- // other than props & listeners & slot
3634
-
3635
- // work around flow
3636
- var slot = data.slot;
3637
- data = {};
3638
- if (slot) {
3639
- data.slot = slot;
3640
- }
3641
- }
3642
-
3643
- // install component management hooks onto the placeholder node
3644
- installComponentHooks(data);
3645
-
3646
- // return a placeholder vnode
3647
- var name = Ctor.options.name || tag;
3648
- var vnode = new VNode(
3649
- ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
3650
- data, undefined, undefined, undefined, context,
3651
- { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },
3652
- asyncFactory
3653
- );
3654
-
3655
- return vnode
3656
- }
3657
-
3658
- function createComponentInstanceForVnode (
3659
- vnode, // we know it's MountedComponentVNode but flow doesn't
3660
- parent // activeInstance in lifecycle state
3661
- ) {
3662
- var options = {
3663
- _isComponent: true,
3664
- _parentVnode: vnode,
3665
- parent: parent
3666
- };
3667
- // check inline-template render functions
3668
- var inlineTemplate = vnode.data.inlineTemplate;
3669
- if (isDef(inlineTemplate)) {
3670
- options.render = inlineTemplate.render;
3671
- options.staticRenderFns = inlineTemplate.staticRenderFns;
3672
- }
3673
- return new vnode.componentOptions.Ctor(options)
3674
- }
3675
-
3676
- function installComponentHooks (data) {
3677
- var hooks = data.hook || (data.hook = {});
3678
- for (var i = 0; i < hooksToMerge.length; i++) {
3679
- var key = hooksToMerge[i];
3680
- var existing = hooks[key];
3681
- var toMerge = componentVNodeHooks[key];
3682
- if (existing !== toMerge && !(existing && existing._merged)) {
3683
- hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;
3684
- }
3685
- }
3686
- }
3687
-
3688
- function mergeHook$1 (f1, f2) {
3689
- var merged = function (a, b) {
3690
- // flow complains about extra args which is why we use any
3691
- f1(a, b);
3692
- f2(a, b);
3693
- };
3694
- merged._merged = true;
3695
- return merged
3696
- }
3697
-
3698
- // transform component v-model info (value and callback) into
3699
- // prop and event handler respectively.
3700
- function transformModel (options, data) {
3701
- var prop = (options.model && options.model.prop) || 'value';
3702
- var event = (options.model && options.model.event) || 'input'
3703
- ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;
3704
- var on = data.on || (data.on = {});
3705
- var existing = on[event];
3706
- var callback = data.model.callback;
3707
- if (isDef(existing)) {
3708
- if (
3709
- Array.isArray(existing)
3710
- ? existing.indexOf(callback) === -1
3711
- : existing !== callback
3712
- ) {
3713
- on[event] = [callback].concat(existing);
3714
- }
3715
- } else {
3716
- on[event] = callback;
3717
- }
3718
- }
3719
-
3720
- /* */
3721
-
3722
- var SIMPLE_NORMALIZE = 1;
3723
- var ALWAYS_NORMALIZE = 2;
3724
-
3725
- // wrapper function for providing a more flexible interface
3726
- // without getting yelled at by flow
3727
- function createElement (
3728
- context,
3729
- tag,
3730
- data,
3731
- children,
3732
- normalizationType,
3733
- alwaysNormalize
3734
- ) {
3735
- if (Array.isArray(data) || isPrimitive(data)) {
3736
- normalizationType = children;
3737
- children = data;
3738
- data = undefined;
3739
- }
3740
- if (isTrue(alwaysNormalize)) {
3741
- normalizationType = ALWAYS_NORMALIZE;
3742
- }
3743
- return _createElement(context, tag, data, children, normalizationType)
3744
- }
3745
-
3746
- function _createElement (
3747
- context,
3748
- tag,
3749
- data,
3750
- children,
3751
- normalizationType
3752
- ) {
3753
- if (isDef(data) && isDef((data).__ob__)) {
3754
- process.env.NODE_ENV !== 'production' && warn(
3755
- "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
3756
- 'Always create fresh vnode data objects in each render!',
3757
- context
3758
- );
3759
- return createEmptyVNode()
3760
- }
3761
- // object syntax in v-bind
3762
- if (isDef(data) && isDef(data.is)) {
3763
- tag = data.is;
3764
- }
3765
- if (!tag) {
3766
- // in case of component :is set to falsy value
3767
- return createEmptyVNode()
3768
- }
3769
- // warn against non-primitive key
3770
- if (process.env.NODE_ENV !== 'production' &&
3771
- isDef(data) && isDef(data.key) && !isPrimitive(data.key)
3772
- ) {
3773
- {
3774
- warn(
3775
- 'Avoid using non-primitive value as key, ' +
3776
- 'use string/number value instead.',
3777
- context
3778
- );
3779
- }
3780
- }
3781
- // support single function children as default scoped slot
3782
- if (Array.isArray(children) &&
3783
- typeof children[0] === 'function'
3784
- ) {
3785
- data = data || {};
3786
- data.scopedSlots = { default: children[0] };
3787
- children.length = 0;
3788
- }
3789
- if (normalizationType === ALWAYS_NORMALIZE) {
3790
- children = normalizeChildren(children);
3791
- } else if (normalizationType === SIMPLE_NORMALIZE) {
3792
- children = simpleNormalizeChildren(children);
3793
- }
3794
- var vnode, ns;
3795
- if (typeof tag === 'string') {
3796
- var Ctor;
3797
- ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
3798
- if (config.isReservedTag(tag)) {
3799
- // platform built-in elements
3800
- vnode = new VNode(
3801
- config.parsePlatformTagName(tag), data, children,
3802
- undefined, undefined, context
3803
- );
3804
- } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
3805
- // component
3806
- vnode = createComponent(Ctor, data, context, children, tag);
3807
- } else {
3808
- // unknown or unlisted namespaced elements
3809
- // check at runtime because it may get assigned a namespace when its
3810
- // parent normalizes children
3811
- vnode = new VNode(
3812
- tag, data, children,
3813
- undefined, undefined, context
3814
- );
3815
- }
3816
- } else {
3817
- // direct component options / constructor
3818
- vnode = createComponent(tag, data, context, children);
3819
- }
3820
- if (Array.isArray(vnode)) {
3821
- return vnode
3822
- } else if (isDef(vnode)) {
3823
- if (isDef(ns)) { applyNS(vnode, ns); }
3824
- if (isDef(data)) { registerDeepBindings(data); }
3825
- return vnode
3826
- } else {
3827
- return createEmptyVNode()
3828
- }
3829
- }
3830
-
3831
- function applyNS (vnode, ns, force) {
3832
- vnode.ns = ns;
3833
- if (vnode.tag === 'foreignObject') {
3834
- // use default namespace inside foreignObject
3835
- ns = undefined;
3836
- force = true;
3837
- }
3838
- if (isDef(vnode.children)) {
3839
- for (var i = 0, l = vnode.children.length; i < l; i++) {
3840
- var child = vnode.children[i];
3841
- if (isDef(child.tag) && (
3842
- isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
3843
- applyNS(child, ns, force);
3844
- }
3845
- }
3846
- }
3847
- }
3848
-
3849
- // ref #5318
3850
- // necessary to ensure parent re-render when deep bindings like :style and
3851
- // :class are used on slot nodes
3852
- function registerDeepBindings (data) {
3853
- if (isObject(data.style)) {
3854
- traverse(data.style);
3855
- }
3856
- if (isObject(data.class)) {
3857
- traverse(data.class);
3858
- }
3859
- }
3860
-
3861
- /* */
3862
-
3863
- function initRender (vm) {
3864
- vm._vnode = null; // the root of the child tree
3865
- vm._staticTrees = null; // v-once cached trees
3866
- var options = vm.$options;
3867
- var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree
3868
- var renderContext = parentVnode && parentVnode.context;
3869
- vm.$slots = resolveSlots(options._renderChildren, renderContext);
3870
- vm.$scopedSlots = emptyObject;
3871
- // bind the createElement fn to this instance
3872
- // so that we get proper render context inside it.
3873
- // args order: tag, data, children, normalizationType, alwaysNormalize
3874
- // internal version is used by render functions compiled from templates
3875
- vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
3876
- // normalization is always applied for the public version, used in
3877
- // user-written render functions.
3878
- vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
3879
-
3880
- // $attrs & $listeners are exposed for easier HOC creation.
3881
- // they need to be reactive so that HOCs using them are always updated
3882
- var parentData = parentVnode && parentVnode.data;
3883
-
3884
- /* istanbul ignore else */
3885
- if (process.env.NODE_ENV !== 'production') {
3886
- defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {
3887
- !isUpdatingChildComponent && warn("$attrs is readonly.", vm);
3888
- }, true);
3889
- defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {
3890
- !isUpdatingChildComponent && warn("$listeners is readonly.", vm);
3891
- }, true);
3892
- } else {
3893
- defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, null, true);
3894
- defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, null, true);
3895
- }
3896
- }
3897
-
3898
- var currentRenderingInstance = null;
3899
-
3900
- function renderMixin (Vue) {
3901
- // install runtime convenience helpers
3902
- installRenderHelpers(Vue.prototype);
3903
-
3904
- Vue.prototype.$nextTick = function (fn) {
3905
- return nextTick(fn, this)
3906
- };
3907
-
3908
- Vue.prototype._render = function () {
3909
- var vm = this;
3910
- var ref = vm.$options;
3911
- var render = ref.render;
3912
- var _parentVnode = ref._parentVnode;
3913
-
3914
- if (_parentVnode) {
3915
- vm.$scopedSlots = normalizeScopedSlots(
3916
- _parentVnode.data.scopedSlots,
3917
- vm.$slots,
3918
- vm.$scopedSlots
3919
- );
3920
- }
3921
-
3922
- // set parent vnode. this allows render functions to have access
3923
- // to the data on the placeholder node.
3924
- vm.$vnode = _parentVnode;
3925
- // render self
3926
- var vnode;
3927
- try {
3928
- // There's no need to maintain a stack becaues all render fns are called
3929
- // separately from one another. Nested component's render fns are called
3930
- // when parent component is patched.
3931
- currentRenderingInstance = vm;
3932
- vnode = render.call(vm._renderProxy, vm.$createElement);
3933
- } catch (e) {
3934
- handleError(e, vm, "render");
3935
- // return error render result,
3936
- // or previous vnode to prevent render error causing blank component
3937
- /* istanbul ignore else */
3938
- if (process.env.NODE_ENV !== 'production' && vm.$options.renderError) {
3939
- try {
3940
- vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
3941
- } catch (e) {
3942
- handleError(e, vm, "renderError");
3943
- vnode = vm._vnode;
3944
- }
3945
- } else {
3946
- vnode = vm._vnode;
3947
- }
3948
- } finally {
3949
- currentRenderingInstance = null;
3950
- }
3951
- // if the returned array contains only a single node, allow it
3952
- if (Array.isArray(vnode) && vnode.length === 1) {
3953
- vnode = vnode[0];
3954
- }
3955
- // return empty vnode in case the render function errored out
3956
- if (!(vnode instanceof VNode)) {
3957
- if (process.env.NODE_ENV !== 'production' && Array.isArray(vnode)) {
3958
- warn(
3959
- 'Multiple root nodes returned from render function. Render function ' +
3960
- 'should return a single root node.',
3961
- vm
3962
- );
3963
- }
3964
- vnode = createEmptyVNode();
3965
- }
3966
- // set parent
3967
- vnode.parent = _parentVnode;
3968
- return vnode
3969
- };
3970
- }
3971
-
3972
- /* */
3973
-
3974
- function ensureCtor (comp, base) {
3975
- if (
3976
- comp.__esModule ||
3977
- (hasSymbol && comp[Symbol.toStringTag] === 'Module')
3978
- ) {
3979
- comp = comp.default;
3980
- }
3981
- return isObject(comp)
3982
- ? base.extend(comp)
3983
- : comp
3984
- }
3985
-
3986
- function createAsyncPlaceholder (
3987
- factory,
3988
- data,
3989
- context,
3990
- children,
3991
- tag
3992
- ) {
3993
- var node = createEmptyVNode();
3994
- node.asyncFactory = factory;
3995
- node.asyncMeta = { data: data, context: context, children: children, tag: tag };
3996
- return node
3997
- }
3998
-
3999
- function resolveAsyncComponent (
4000
- factory,
4001
- baseCtor
4002
- ) {
4003
- if (isTrue(factory.error) && isDef(factory.errorComp)) {
4004
- return factory.errorComp
4005
- }
4006
-
4007
- if (isDef(factory.resolved)) {
4008
- return factory.resolved
4009
- }
4010
-
4011
- if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
4012
- return factory.loadingComp
4013
- }
4014
-
4015
- var owner = currentRenderingInstance;
4016
- if (isDef(factory.owners)) {
4017
- // already pending
4018
- factory.owners.push(owner);
4019
- } else {
4020
- var owners = factory.owners = [owner];
4021
- var sync = true;
4022
-
4023
- var forceRender = function (renderCompleted) {
4024
- for (var i = 0, l = owners.length; i < l; i++) {
4025
- (owners[i]).$forceUpdate();
4026
- }
4027
-
4028
- if (renderCompleted) {
4029
- owners.length = 0;
4030
- }
4031
- };
4032
-
4033
- var resolve = once(function (res) {
4034
- // cache resolved
4035
- factory.resolved = ensureCtor(res, baseCtor);
4036
- // invoke callbacks only if this is not a synchronous resolve
4037
- // (async resolves are shimmed as synchronous during SSR)
4038
- if (!sync) {
4039
- forceRender(true);
4040
- } else {
4041
- owners.length = 0;
4042
- }
4043
- });
4044
-
4045
- var reject = once(function (reason) {
4046
- process.env.NODE_ENV !== 'production' && warn(
4047
- "Failed to resolve async component: " + (String(factory)) +
4048
- (reason ? ("\nReason: " + reason) : '')
4049
- );
4050
- if (isDef(factory.errorComp)) {
4051
- factory.error = true;
4052
- forceRender(true);
4053
- }
4054
- });
4055
-
4056
- var res = factory(resolve, reject);
4057
-
4058
- if (isObject(res)) {
4059
- if (isPromise(res)) {
4060
- // () => Promise
4061
- if (isUndef(factory.resolved)) {
4062
- res.then(resolve, reject);
4063
- }
4064
- } else if (isPromise(res.component)) {
4065
- res.component.then(resolve, reject);
4066
-
4067
- if (isDef(res.error)) {
4068
- factory.errorComp = ensureCtor(res.error, baseCtor);
4069
- }
4070
-
4071
- if (isDef(res.loading)) {
4072
- factory.loadingComp = ensureCtor(res.loading, baseCtor);
4073
- if (res.delay === 0) {
4074
- factory.loading = true;
4075
- } else {
4076
- setTimeout(function () {
4077
- if (isUndef(factory.resolved) && isUndef(factory.error)) {
4078
- factory.loading = true;
4079
- forceRender(false);
4080
- }
4081
- }, res.delay || 200);
4082
- }
4083
- }
4084
-
4085
- if (isDef(res.timeout)) {
4086
- setTimeout(function () {
4087
- if (isUndef(factory.resolved)) {
4088
- reject(
4089
- process.env.NODE_ENV !== 'production'
4090
- ? ("timeout (" + (res.timeout) + "ms)")
4091
- : null
4092
- );
4093
- }
4094
- }, res.timeout);
4095
- }
4096
- }
4097
- }
4098
-
4099
- sync = false;
4100
- // return in case resolved synchronously
4101
- return factory.loading
4102
- ? factory.loadingComp
4103
- : factory.resolved
4104
- }
4105
- }
4106
-
4107
- /* */
4108
-
4109
- function isAsyncPlaceholder (node) {
4110
- return node.isComment && node.asyncFactory
4111
- }
4112
-
4113
- /* */
4114
-
4115
- function getFirstComponentChild (children) {
4116
- if (Array.isArray(children)) {
4117
- for (var i = 0; i < children.length; i++) {
4118
- var c = children[i];
4119
- if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
4120
- return c
4121
- }
4122
- }
4123
- }
4124
- }
4125
-
4126
- /* */
4127
-
4128
- /* */
4129
-
4130
- function initEvents (vm) {
4131
- vm._events = Object.create(null);
4132
- vm._hasHookEvent = false;
4133
- // init parent attached events
4134
- var listeners = vm.$options._parentListeners;
4135
- if (listeners) {
4136
- updateComponentListeners(vm, listeners);
4137
- }
4138
- }
4139
-
4140
- var target;
4141
-
4142
- function add (event, fn) {
4143
- target.$on(event, fn);
4144
- }
4145
-
4146
- function remove$1 (event, fn) {
4147
- target.$off(event, fn);
4148
- }
4149
-
4150
- function createOnceHandler (event, fn) {
4151
- var _target = target;
4152
- return function onceHandler () {
4153
- var res = fn.apply(null, arguments);
4154
- if (res !== null) {
4155
- _target.$off(event, onceHandler);
4156
- }
4157
- }
4158
- }
4159
-
4160
- function updateComponentListeners (
4161
- vm,
4162
- listeners,
4163
- oldListeners
4164
- ) {
4165
- target = vm;
4166
- updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);
4167
- target = undefined;
4168
- }
4169
-
4170
- function eventsMixin (Vue) {
4171
- var hookRE = /^hook:/;
4172
- Vue.prototype.$on = function (event, fn) {
4173
- var vm = this;
4174
- if (Array.isArray(event)) {
4175
- for (var i = 0, l = event.length; i < l; i++) {
4176
- vm.$on(event[i], fn);
4177
- }
4178
- } else {
4179
- (vm._events[event] || (vm._events[event] = [])).push(fn);
4180
- // optimize hook:event cost by using a boolean flag marked at registration
4181
- // instead of a hash lookup
4182
- if (hookRE.test(event)) {
4183
- vm._hasHookEvent = true;
4184
- }
4185
- }
4186
- return vm
4187
- };
4188
-
4189
- Vue.prototype.$once = function (event, fn) {
4190
- var vm = this;
4191
- function on () {
4192
- vm.$off(event, on);
4193
- fn.apply(vm, arguments);
4194
- }
4195
- on.fn = fn;
4196
- vm.$on(event, on);
4197
- return vm
4198
- };
4199
-
4200
- Vue.prototype.$off = function (event, fn) {
4201
- var vm = this;
4202
- // all
4203
- if (!arguments.length) {
4204
- vm._events = Object.create(null);
4205
- return vm
4206
- }
4207
- // array of events
4208
- if (Array.isArray(event)) {
4209
- for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {
4210
- vm.$off(event[i$1], fn);
4211
- }
4212
- return vm
4213
- }
4214
- // specific event
4215
- var cbs = vm._events[event];
4216
- if (!cbs) {
4217
- return vm
4218
- }
4219
- if (!fn) {
4220
- vm._events[event] = null;
4221
- return vm
4222
- }
4223
- // specific handler
4224
- var cb;
4225
- var i = cbs.length;
4226
- while (i--) {
4227
- cb = cbs[i];
4228
- if (cb === fn || cb.fn === fn) {
4229
- cbs.splice(i, 1);
4230
- break
4231
- }
4232
- }
4233
- return vm
4234
- };
4235
-
4236
- Vue.prototype.$emit = function (event) {
4237
- var vm = this;
4238
- if (process.env.NODE_ENV !== 'production') {
4239
- var lowerCaseEvent = event.toLowerCase();
4240
- if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
4241
- tip(
4242
- "Event \"" + lowerCaseEvent + "\" is emitted in component " +
4243
- (formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " +
4244
- "Note that HTML attributes are case-insensitive and you cannot use " +
4245
- "v-on to listen to camelCase events when using in-DOM templates. " +
4246
- "You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"."
4247
- );
4248
- }
4249
- }
4250
- var cbs = vm._events[event];
4251
- if (cbs) {
4252
- cbs = cbs.length > 1 ? toArray(cbs) : cbs;
4253
- var args = toArray(arguments, 1);
4254
- var info = "event handler for \"" + event + "\"";
4255
- for (var i = 0, l = cbs.length; i < l; i++) {
4256
- invokeWithErrorHandling(cbs[i], vm, args, vm, info);
4257
- }
4258
- }
4259
- return vm
4260
- };
4261
- }
4262
-
4263
- /* */
4264
-
4265
- var activeInstance = null;
4266
- var isUpdatingChildComponent = false;
4267
-
4268
- function setActiveInstance(vm) {
4269
- var prevActiveInstance = activeInstance;
4270
- activeInstance = vm;
4271
- return function () {
4272
- activeInstance = prevActiveInstance;
4273
- }
4274
- }
4275
-
4276
- function initLifecycle (vm) {
4277
- var options = vm.$options;
4278
-
4279
- // locate first non-abstract parent
4280
- var parent = options.parent;
4281
- if (parent && !options.abstract) {
4282
- while (parent.$options.abstract && parent.$parent) {
4283
- parent = parent.$parent;
4284
- }
4285
- parent.$children.push(vm);
4286
- }
4287
-
4288
- vm.$parent = parent;
4289
- vm.$root = parent ? parent.$root : vm;
4290
-
4291
- vm.$children = [];
4292
- vm.$refs = {};
4293
-
4294
- vm._watcher = null;
4295
- vm._inactive = null;
4296
- vm._directInactive = false;
4297
- vm._isMounted = false;
4298
- vm._isDestroyed = false;
4299
- vm._isBeingDestroyed = false;
4300
- }
4301
-
4302
- function lifecycleMixin (Vue) {
4303
- Vue.prototype._update = function (vnode, hydrating) {
4304
- var vm = this;
4305
- var prevEl = vm.$el;
4306
- var prevVnode = vm._vnode;
4307
- var restoreActiveInstance = setActiveInstance(vm);
4308
- vm._vnode = vnode;
4309
- // Vue.prototype.__patch__ is injected in entry points
4310
- // based on the rendering backend used.
4311
- if (!prevVnode) {
4312
- // initial render
4313
- vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
4314
- } else {
4315
- // updates
4316
- vm.$el = vm.__patch__(prevVnode, vnode);
4317
- }
4318
- restoreActiveInstance();
4319
- // update __vue__ reference
4320
- if (prevEl) {
4321
- prevEl.__vue__ = null;
4322
- }
4323
- if (vm.$el) {
4324
- vm.$el.__vue__ = vm;
4325
- }
4326
- // if parent is an HOC, update its $el as well
4327
- if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {
4328
- vm.$parent.$el = vm.$el;
4329
- }
4330
- // updated hook is called by the scheduler to ensure that children are
4331
- // updated in a parent's updated hook.
4332
- };
4333
-
4334
- Vue.prototype.$forceUpdate = function () {
4335
- var vm = this;
4336
- if (vm._watcher) {
4337
- vm._watcher.update();
4338
- }
4339
- };
4340
-
4341
- Vue.prototype.$destroy = function () {
4342
- var vm = this;
4343
- if (vm._isBeingDestroyed) {
4344
- return
4345
- }
4346
- callHook(vm, 'beforeDestroy');
4347
- vm._isBeingDestroyed = true;
4348
- // remove self from parent
4349
- var parent = vm.$parent;
4350
- if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
4351
- remove(parent.$children, vm);
4352
- }
4353
- // teardown watchers
4354
- if (vm._watcher) {
4355
- vm._watcher.teardown();
4356
- }
4357
- var i = vm._watchers.length;
4358
- while (i--) {
4359
- vm._watchers[i].teardown();
4360
- }
4361
- // remove reference from data ob
4362
- // frozen object may not have observer.
4363
- if (vm._data.__ob__) {
4364
- vm._data.__ob__.vmCount--;
4365
- }
4366
- // call the last hook...
4367
- vm._isDestroyed = true;
4368
- // invoke destroy hooks on current rendered tree
4369
- vm.__patch__(vm._vnode, null);
4370
- // fire destroyed hook
4371
- callHook(vm, 'destroyed');
4372
- // turn off all instance listeners.
4373
- vm.$off();
4374
- // remove __vue__ reference
4375
- if (vm.$el) {
4376
- vm.$el.__vue__ = null;
4377
- }
4378
- // release circular reference (#6759)
4379
- if (vm.$vnode) {
4380
- vm.$vnode.parent = null;
4381
- }
4382
- };
4383
- }
4384
-
4385
- function mountComponent (
4386
- vm,
4387
- el,
4388
- hydrating
4389
- ) {
4390
- vm.$el = el;
4391
- if (!vm.$options.render) {
4392
- vm.$options.render = createEmptyVNode;
4393
- if (process.env.NODE_ENV !== 'production') {
4394
- /* istanbul ignore if */
4395
- if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
4396
- vm.$options.el || el) {
4397
- warn(
4398
- 'You are using the runtime-only build of Vue where the template ' +
4399
- 'compiler is not available. Either pre-compile the templates into ' +
4400
- 'render functions, or use the compiler-included build.',
4401
- vm
4402
- );
4403
- } else {
4404
- warn(
4405
- 'Failed to mount component: template or render function not defined.',
4406
- vm
4407
- );
4408
- }
4409
- }
4410
- }
4411
- callHook(vm, 'beforeMount');
4412
-
4413
- var updateComponent;
4414
- /* istanbul ignore if */
4415
- if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
4416
- updateComponent = function () {
4417
- var name = vm._name;
4418
- var id = vm._uid;
4419
- var startTag = "vue-perf-start:" + id;
4420
- var endTag = "vue-perf-end:" + id;
4421
-
4422
- mark(startTag);
4423
- var vnode = vm._render();
4424
- mark(endTag);
4425
- measure(("vue " + name + " render"), startTag, endTag);
4426
-
4427
- mark(startTag);
4428
- vm._update(vnode, hydrating);
4429
- mark(endTag);
4430
- measure(("vue " + name + " patch"), startTag, endTag);
4431
- };
4432
- } else {
4433
- updateComponent = function () {
4434
- vm._update(vm._render(), hydrating);
4435
- };
4436
- }
4437
-
4438
- // we set this to vm._watcher inside the watcher's constructor
4439
- // since the watcher's initial patch may call $forceUpdate (e.g. inside child
4440
- // component's mounted hook), which relies on vm._watcher being already defined
4441
- new Watcher(vm, updateComponent, noop, {
4442
- before: function before () {
4443
- if (vm._isMounted && !vm._isDestroyed) {
4444
- callHook(vm, 'beforeUpdate');
4445
- }
4446
- }
4447
- }, true /* isRenderWatcher */);
4448
- hydrating = false;
4449
-
4450
- // manually mounted instance, call mounted on self
4451
- // mounted is called for render-created child components in its inserted hook
4452
- if (vm.$vnode == null) {
4453
- vm._isMounted = true;
4454
- callHook(vm, 'mounted');
4455
- }
4456
- return vm
4457
- }
4458
-
4459
- function updateChildComponent (
4460
- vm,
4461
- propsData,
4462
- listeners,
4463
- parentVnode,
4464
- renderChildren
4465
- ) {
4466
- if (process.env.NODE_ENV !== 'production') {
4467
- isUpdatingChildComponent = true;
4468
- }
4469
-
4470
- // determine whether component has slot children
4471
- // we need to do this before overwriting $options._renderChildren.
4472
-
4473
- // check if there are dynamic scopedSlots (hand-written or compiled but with
4474
- // dynamic slot names). Static scoped slots compiled from template has the
4475
- // "$stable" marker.
4476
- var hasDynamicScopedSlot = !!(
4477
- (parentVnode.data.scopedSlots && !parentVnode.data.scopedSlots.$stable) ||
4478
- (vm.$scopedSlots !== emptyObject && !vm.$scopedSlots.$stable)
4479
- );
4480
-
4481
- // Any static slot children from the parent may have changed during parent's
4482
- // update. Dynamic scoped slots may also have changed. In such cases, a forced
4483
- // update is necessary to ensure correctness.
4484
- var needsForceUpdate = !!(
4485
- renderChildren || // has new static slots
4486
- vm.$options._renderChildren || // has old static slots
4487
- hasDynamicScopedSlot
4488
- );
4489
-
4490
- vm.$options._parentVnode = parentVnode;
4491
- vm.$vnode = parentVnode; // update vm's placeholder node without re-render
4492
-
4493
- if (vm._vnode) { // update child tree's parent
4494
- vm._vnode.parent = parentVnode;
4495
- }
4496
- vm.$options._renderChildren = renderChildren;
4497
-
4498
- // update $attrs and $listeners hash
4499
- // these are also reactive so they may trigger child update if the child
4500
- // used them during render
4501
- vm.$attrs = parentVnode.data.attrs || emptyObject;
4502
- vm.$listeners = listeners || emptyObject;
4503
-
4504
- // update props
4505
- if (propsData && vm.$options.props) {
4506
- toggleObserving(false);
4507
- var props = vm._props;
4508
- var propKeys = vm.$options._propKeys || [];
4509
- for (var i = 0; i < propKeys.length; i++) {
4510
- var key = propKeys[i];
4511
- var propOptions = vm.$options.props; // wtf flow?
4512
- props[key] = validateProp(key, propOptions, propsData, vm);
4513
- }
4514
- toggleObserving(true);
4515
- // keep a copy of raw propsData
4516
- vm.$options.propsData = propsData;
4517
- }
4518
-
4519
- // update listeners
4520
- listeners = listeners || emptyObject;
4521
- var oldListeners = vm.$options._parentListeners;
4522
- vm.$options._parentListeners = listeners;
4523
- updateComponentListeners(vm, listeners, oldListeners);
4524
-
4525
- // resolve slots + force update if has children
4526
- if (needsForceUpdate) {
4527
- vm.$slots = resolveSlots(renderChildren, parentVnode.context);
4528
- vm.$forceUpdate();
4529
- }
4530
-
4531
- if (process.env.NODE_ENV !== 'production') {
4532
- isUpdatingChildComponent = false;
4533
- }
4534
- }
4535
-
4536
- function isInInactiveTree (vm) {
4537
- while (vm && (vm = vm.$parent)) {
4538
- if (vm._inactive) { return true }
4539
- }
4540
- return false
4541
- }
4542
-
4543
- function activateChildComponent (vm, direct) {
4544
- if (direct) {
4545
- vm._directInactive = false;
4546
- if (isInInactiveTree(vm)) {
4547
- return
4548
- }
4549
- } else if (vm._directInactive) {
4550
- return
4551
- }
4552
- if (vm._inactive || vm._inactive === null) {
4553
- vm._inactive = false;
4554
- for (var i = 0; i < vm.$children.length; i++) {
4555
- activateChildComponent(vm.$children[i]);
4556
- }
4557
- callHook(vm, 'activated');
4558
- }
4559
- }
4560
-
4561
- function deactivateChildComponent (vm, direct) {
4562
- if (direct) {
4563
- vm._directInactive = true;
4564
- if (isInInactiveTree(vm)) {
4565
- return
4566
- }
4567
- }
4568
- if (!vm._inactive) {
4569
- vm._inactive = true;
4570
- for (var i = 0; i < vm.$children.length; i++) {
4571
- deactivateChildComponent(vm.$children[i]);
4572
- }
4573
- callHook(vm, 'deactivated');
4574
- }
4575
- }
4576
-
4577
- function callHook (vm, hook) {
4578
- // #7573 disable dep collection when invoking lifecycle hooks
4579
- pushTarget();
4580
- var handlers = vm.$options[hook];
4581
- var info = hook + " hook";
4582
- if (handlers) {
4583
- for (var i = 0, j = handlers.length; i < j; i++) {
4584
- invokeWithErrorHandling(handlers[i], vm, null, vm, info);
4585
- }
4586
- }
4587
- if (vm._hasHookEvent) {
4588
- vm.$emit('hook:' + hook);
4589
- }
4590
- popTarget();
4591
- }
4592
-
4593
- /* */
4594
-
4595
- var MAX_UPDATE_COUNT = 100;
4596
-
4597
- var queue = [];
4598
- var activatedChildren = [];
4599
- var has = {};
4600
- var circular = {};
4601
- var waiting = false;
4602
- var flushing = false;
4603
- var index = 0;
4604
-
4605
- /**
4606
- * Reset the scheduler's state.
4607
- */
4608
- function resetSchedulerState () {
4609
- index = queue.length = activatedChildren.length = 0;
4610
- has = {};
4611
- if (process.env.NODE_ENV !== 'production') {
4612
- circular = {};
4613
- }
4614
- waiting = flushing = false;
4615
- }
4616
-
4617
- // Async edge case #6566 requires saving the timestamp when event listeners are
4618
- // attached. However, calling performance.now() has a perf overhead especially
4619
- // if the page has thousands of event listeners. Instead, we take a timestamp
4620
- // every time the scheduler flushes and use that for all event listeners
4621
- // attached during that flush.
4622
- var currentFlushTimestamp = 0;
4623
-
4624
- // Async edge case fix requires storing an event listener's attach timestamp.
4625
- var getNow = Date.now;
4626
-
4627
- // Determine what event timestamp the browser is using. Annoyingly, the
4628
- // timestamp can either be hi-res (relative to page load) or low-res
4629
- // (relative to UNIX epoch), so in order to compare time we have to use the
4630
- // same timestamp type when saving the flush timestamp.
4631
- if (inBrowser && getNow() > document.createEvent('Event').timeStamp) {
4632
- // if the low-res timestamp which is bigger than the event timestamp
4633
- // (which is evaluated AFTER) it means the event is using a hi-res timestamp,
4634
- // and we need to use the hi-res version for event listeners as well.
4635
- getNow = function () { return performance.now(); };
4636
- }
4637
-
4638
- /**
4639
- * Flush both queues and run the watchers.
4640
- */
4641
- function flushSchedulerQueue () {
4642
- currentFlushTimestamp = getNow();
4643
- flushing = true;
4644
- var watcher, id;
4645
-
4646
- // Sort queue before flush.
4647
- // This ensures that:
4648
- // 1. Components are updated from parent to child. (because parent is always
4649
- // created before the child)
4650
- // 2. A component's user watchers are run before its render watcher (because
4651
- // user watchers are created before the render watcher)
4652
- // 3. If a component is destroyed during a parent component's watcher run,
4653
- // its watchers can be skipped.
4654
- queue.sort(function (a, b) { return a.id - b.id; });
4655
-
4656
- // do not cache length because more watchers might be pushed
4657
- // as we run existing watchers
4658
- for (index = 0; index < queue.length; index++) {
4659
- watcher = queue[index];
4660
- if (watcher.before) {
4661
- watcher.before();
4662
- }
4663
- id = watcher.id;
4664
- has[id] = null;
4665
- watcher.run();
4666
- // in dev build, check and stop circular updates.
4667
- if (process.env.NODE_ENV !== 'production' && has[id] != null) {
4668
- circular[id] = (circular[id] || 0) + 1;
4669
- if (circular[id] > MAX_UPDATE_COUNT) {
4670
- warn(
4671
- 'You may have an infinite update loop ' + (
4672
- watcher.user
4673
- ? ("in watcher with expression \"" + (watcher.expression) + "\"")
4674
- : "in a component render function."
4675
- ),
4676
- watcher.vm
4677
- );
4678
- break
4679
- }
4680
- }
4681
- }
4682
-
4683
- // keep copies of post queues before resetting state
4684
- var activatedQueue = activatedChildren.slice();
4685
- var updatedQueue = queue.slice();
4686
-
4687
- resetSchedulerState();
4688
-
4689
- // call component updated and activated hooks
4690
- callActivatedHooks(activatedQueue);
4691
- callUpdatedHooks(updatedQueue);
4692
-
4693
- // devtool hook
4694
- /* istanbul ignore if */
4695
- if (devtools && config.devtools) {
4696
- devtools.emit('flush');
4697
- }
4698
- }
4699
-
4700
- function callUpdatedHooks (queue) {
4701
- var i = queue.length;
4702
- while (i--) {
4703
- var watcher = queue[i];
4704
- var vm = watcher.vm;
4705
- if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
4706
- callHook(vm, 'updated');
4707
- }
4708
- }
4709
- }
4710
-
4711
- /**
4712
- * Queue a kept-alive component that was activated during patch.
4713
- * The queue will be processed after the entire tree has been patched.
4714
- */
4715
- function queueActivatedComponent (vm) {
4716
- // setting _inactive to false here so that a render function can
4717
- // rely on checking whether it's in an inactive tree (e.g. router-view)
4718
- vm._inactive = false;
4719
- activatedChildren.push(vm);
4720
- }
4721
-
4722
- function callActivatedHooks (queue) {
4723
- for (var i = 0; i < queue.length; i++) {
4724
- queue[i]._inactive = true;
4725
- activateChildComponent(queue[i], true /* true */);
4726
- }
4727
- }
4728
-
4729
- /**
4730
- * Push a watcher into the watcher queue.
4731
- * Jobs with duplicate IDs will be skipped unless it's
4732
- * pushed when the queue is being flushed.
4733
- */
4734
- function queueWatcher (watcher) {
4735
- var id = watcher.id;
4736
- if (has[id] == null) {
4737
- has[id] = true;
4738
- if (!flushing) {
4739
- queue.push(watcher);
4740
- } else {
4741
- // if already flushing, splice the watcher based on its id
4742
- // if already past its id, it will be run next immediately.
4743
- var i = queue.length - 1;
4744
- while (i > index && queue[i].id > watcher.id) {
4745
- i--;
4746
- }
4747
- queue.splice(i + 1, 0, watcher);
4748
- }
4749
- // queue the flush
4750
- if (!waiting) {
4751
- waiting = true;
4752
-
4753
- if (process.env.NODE_ENV !== 'production' && !config.async) {
4754
- flushSchedulerQueue();
4755
- return
4756
- }
4757
- nextTick(flushSchedulerQueue);
4758
- }
4759
- }
4760
- }
4761
-
4762
- /* */
4763
-
4764
-
4765
-
4766
- var uid$2 = 0;
4767
-
4768
- /**
4769
- * A watcher parses an expression, collects dependencies,
4770
- * and fires callback when the expression value changes.
4771
- * This is used for both the $watch() api and directives.
4772
- */
4773
- var Watcher = function Watcher (
4774
- vm,
4775
- expOrFn,
4776
- cb,
4777
- options,
4778
- isRenderWatcher
4779
- ) {
4780
- this.vm = vm;
4781
- if (isRenderWatcher) {
4782
- vm._watcher = this;
4783
- }
4784
- vm._watchers.push(this);
4785
- // options
4786
- if (options) {
4787
- this.deep = !!options.deep;
4788
- this.user = !!options.user;
4789
- this.lazy = !!options.lazy;
4790
- this.sync = !!options.sync;
4791
- this.before = options.before;
4792
- } else {
4793
- this.deep = this.user = this.lazy = this.sync = false;
4794
- }
4795
- this.cb = cb;
4796
- this.id = ++uid$2; // uid for batching
4797
- this.active = true;
4798
- this.dirty = this.lazy; // for lazy watchers
4799
- this.deps = [];
4800
- this.newDeps = [];
4801
- this.depIds = new _Set();
4802
- this.newDepIds = new _Set();
4803
- this.expression = process.env.NODE_ENV !== 'production'
4804
- ? expOrFn.toString()
4805
- : '';
4806
- // parse expression for getter
4807
- if (typeof expOrFn === 'function') {
4808
- this.getter = expOrFn;
4809
- } else {
4810
- this.getter = parsePath(expOrFn);
4811
- if (!this.getter) {
4812
- this.getter = noop;
4813
- process.env.NODE_ENV !== 'production' && warn(
4814
- "Failed watching path: \"" + expOrFn + "\" " +
4815
- 'Watcher only accepts simple dot-delimited paths. ' +
4816
- 'For full control, use a function instead.',
4817
- vm
4818
- );
4819
- }
4820
- }
4821
- this.value = this.lazy
4822
- ? undefined
4823
- : this.get();
4824
- };
4825
-
4826
- /**
4827
- * Evaluate the getter, and re-collect dependencies.
4828
- */
4829
- Watcher.prototype.get = function get () {
4830
- pushTarget(this);
4831
- var value;
4832
- var vm = this.vm;
4833
- try {
4834
- value = this.getter.call(vm, vm);
4835
- } catch (e) {
4836
- if (this.user) {
4837
- handleError(e, vm, ("getter for watcher \"" + (this.expression) + "\""));
4838
- } else {
4839
- throw e
4840
- }
4841
- } finally {
4842
- // "touch" every property so they are all tracked as
4843
- // dependencies for deep watching
4844
- if (this.deep) {
4845
- traverse(value);
4846
- }
4847
- popTarget();
4848
- this.cleanupDeps();
4849
- }
4850
- return value
4851
- };
4852
-
4853
- /**
4854
- * Add a dependency to this directive.
4855
- */
4856
- Watcher.prototype.addDep = function addDep (dep) {
4857
- var id = dep.id;
4858
- if (!this.newDepIds.has(id)) {
4859
- this.newDepIds.add(id);
4860
- this.newDeps.push(dep);
4861
- if (!this.depIds.has(id)) {
4862
- dep.addSub(this);
4863
- }
4864
- }
4865
- };
4866
-
4867
- /**
4868
- * Clean up for dependency collection.
4869
- */
4870
- Watcher.prototype.cleanupDeps = function cleanupDeps () {
4871
- var i = this.deps.length;
4872
- while (i--) {
4873
- var dep = this.deps[i];
4874
- if (!this.newDepIds.has(dep.id)) {
4875
- dep.removeSub(this);
4876
- }
4877
- }
4878
- var tmp = this.depIds;
4879
- this.depIds = this.newDepIds;
4880
- this.newDepIds = tmp;
4881
- this.newDepIds.clear();
4882
- tmp = this.deps;
4883
- this.deps = this.newDeps;
4884
- this.newDeps = tmp;
4885
- this.newDeps.length = 0;
4886
- };
4887
-
4888
- /**
4889
- * Subscriber interface.
4890
- * Will be called when a dependency changes.
4891
- */
4892
- Watcher.prototype.update = function update () {
4893
- /* istanbul ignore else */
4894
- if (this.lazy) {
4895
- this.dirty = true;
4896
- } else if (this.sync) {
4897
- this.run();
4898
- } else {
4899
- queueWatcher(this);
4900
- }
4901
- };
4902
-
4903
- /**
4904
- * Scheduler job interface.
4905
- * Will be called by the scheduler.
4906
- */
4907
- Watcher.prototype.run = function run () {
4908
- if (this.active) {
4909
- var value = this.get();
4910
- if (
4911
- value !== this.value ||
4912
- // Deep watchers and watchers on Object/Arrays should fire even
4913
- // when the value is the same, because the value may
4914
- // have mutated.
4915
- isObject(value) ||
4916
- this.deep
4917
- ) {
4918
- // set new value
4919
- var oldValue = this.value;
4920
- this.value = value;
4921
- if (this.user) {
4922
- try {
4923
- this.cb.call(this.vm, value, oldValue);
4924
- } catch (e) {
4925
- handleError(e, this.vm, ("callback for watcher \"" + (this.expression) + "\""));
4926
- }
4927
- } else {
4928
- this.cb.call(this.vm, value, oldValue);
4929
- }
4930
- }
4931
- }
4932
- };
4933
-
4934
- /**
4935
- * Evaluate the value of the watcher.
4936
- * This only gets called for lazy watchers.
4937
- */
4938
- Watcher.prototype.evaluate = function evaluate () {
4939
- this.value = this.get();
4940
- this.dirty = false;
4941
- };
4942
-
4943
- /**
4944
- * Depend on all deps collected by this watcher.
4945
- */
4946
- Watcher.prototype.depend = function depend () {
4947
- var i = this.deps.length;
4948
- while (i--) {
4949
- this.deps[i].depend();
4950
- }
4951
- };
4952
-
4953
- /**
4954
- * Remove self from all dependencies' subscriber list.
4955
- */
4956
- Watcher.prototype.teardown = function teardown () {
4957
- if (this.active) {
4958
- // remove self from vm's watcher list
4959
- // this is a somewhat expensive operation so we skip it
4960
- // if the vm is being destroyed.
4961
- if (!this.vm._isBeingDestroyed) {
4962
- remove(this.vm._watchers, this);
4963
- }
4964
- var i = this.deps.length;
4965
- while (i--) {
4966
- this.deps[i].removeSub(this);
4967
- }
4968
- this.active = false;
4969
- }
4970
- };
4971
-
4972
- /* */
4973
-
4974
- var sharedPropertyDefinition = {
4975
- enumerable: true,
4976
- configurable: true,
4977
- get: noop,
4978
- set: noop
4979
- };
4980
-
4981
- function proxy (target, sourceKey, key) {
4982
- sharedPropertyDefinition.get = function proxyGetter () {
4983
- return this[sourceKey][key]
4984
- };
4985
- sharedPropertyDefinition.set = function proxySetter (val) {
4986
- this[sourceKey][key] = val;
4987
- };
4988
- Object.defineProperty(target, key, sharedPropertyDefinition);
4989
- }
4990
-
4991
- function initState (vm) {
4992
- vm._watchers = [];
4993
- var opts = vm.$options;
4994
- if (opts.props) { initProps(vm, opts.props); }
4995
- if (opts.methods) { initMethods(vm, opts.methods); }
4996
- if (opts.data) {
4997
- initData(vm);
4998
- } else {
4999
- observe(vm._data = {}, true /* asRootData */);
5000
- }
5001
- if (opts.computed) { initComputed(vm, opts.computed); }
5002
- if (opts.watch && opts.watch !== nativeWatch) {
5003
- initWatch(vm, opts.watch);
5004
- }
5005
- }
5006
-
5007
- function initProps (vm, propsOptions) {
5008
- var propsData = vm.$options.propsData || {};
5009
- var props = vm._props = {};
5010
- // cache prop keys so that future props updates can iterate using Array
5011
- // instead of dynamic object key enumeration.
5012
- var keys = vm.$options._propKeys = [];
5013
- var isRoot = !vm.$parent;
5014
- // root instance props should be converted
5015
- if (!isRoot) {
5016
- toggleObserving(false);
5017
- }
5018
- var loop = function ( key ) {
5019
- keys.push(key);
5020
- var value = validateProp(key, propsOptions, propsData, vm);
5021
- /* istanbul ignore else */
5022
- if (process.env.NODE_ENV !== 'production') {
5023
- var hyphenatedKey = hyphenate(key);
5024
- if (isReservedAttribute(hyphenatedKey) ||
5025
- config.isReservedAttr(hyphenatedKey)) {
5026
- warn(
5027
- ("\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop."),
5028
- vm
5029
- );
5030
- }
5031
- defineReactive$$1(props, key, value, function () {
5032
- if (!isRoot && !isUpdatingChildComponent) {
5033
- warn(
5034
- "Avoid mutating a prop directly since the value will be " +
5035
- "overwritten whenever the parent component re-renders. " +
5036
- "Instead, use a data or computed property based on the prop's " +
5037
- "value. Prop being mutated: \"" + key + "\"",
5038
- vm
5039
- );
5040
- }
5041
- });
5042
- } else {
5043
- defineReactive$$1(props, key, value);
5044
- }
5045
- // static props are already proxied on the component's prototype
5046
- // during Vue.extend(). We only need to proxy props defined at
5047
- // instantiation here.
5048
- if (!(key in vm)) {
5049
- proxy(vm, "_props", key);
5050
- }
5051
- };
5052
-
5053
- for (var key in propsOptions) loop( key );
5054
- toggleObserving(true);
5055
- }
5056
-
5057
- function initData (vm) {
5058
- var data = vm.$options.data;
5059
- data = vm._data = typeof data === 'function'
5060
- ? getData(data, vm)
5061
- : data || {};
5062
- if (!isPlainObject(data)) {
5063
- data = {};
5064
- process.env.NODE_ENV !== 'production' && warn(
5065
- 'data functions should return an object:\n' +
5066
- 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
5067
- vm
5068
- );
5069
- }
5070
- // proxy data on instance
5071
- var keys = Object.keys(data);
5072
- var props = vm.$options.props;
5073
- var methods = vm.$options.methods;
5074
- var i = keys.length;
5075
- while (i--) {
5076
- var key = keys[i];
5077
- if (process.env.NODE_ENV !== 'production') {
5078
- if (methods && hasOwn(methods, key)) {
5079
- warn(
5080
- ("Method \"" + key + "\" has already been defined as a data property."),
5081
- vm
5082
- );
5083
- }
5084
- }
5085
- if (props && hasOwn(props, key)) {
5086
- process.env.NODE_ENV !== 'production' && warn(
5087
- "The data property \"" + key + "\" is already declared as a prop. " +
5088
- "Use prop default value instead.",
5089
- vm
5090
- );
5091
- } else if (!isReserved(key)) {
5092
- proxy(vm, "_data", key);
5093
- }
5094
- }
5095
- // observe data
5096
- observe(data, true /* asRootData */);
5097
- }
5098
-
5099
- function getData (data, vm) {
5100
- // #7573 disable dep collection when invoking data getters
5101
- pushTarget();
5102
- try {
5103
- return data.call(vm, vm)
5104
- } catch (e) {
5105
- handleError(e, vm, "data()");
5106
- return {}
5107
- } finally {
5108
- popTarget();
5109
- }
5110
- }
5111
-
5112
- var computedWatcherOptions = { lazy: true };
5113
-
5114
- function initComputed (vm, computed) {
5115
- // $flow-disable-line
5116
- var watchers = vm._computedWatchers = Object.create(null);
5117
- // computed properties are just getters during SSR
5118
- var isSSR = isServerRendering();
5119
-
5120
- for (var key in computed) {
5121
- var userDef = computed[key];
5122
- var getter = typeof userDef === 'function' ? userDef : userDef.get;
5123
- if (process.env.NODE_ENV !== 'production' && getter == null) {
5124
- warn(
5125
- ("Getter is missing for computed property \"" + key + "\"."),
5126
- vm
5127
- );
5128
- }
5129
-
5130
- if (!isSSR) {
5131
- // create internal watcher for the computed property.
5132
- watchers[key] = new Watcher(
5133
- vm,
5134
- getter || noop,
5135
- noop,
5136
- computedWatcherOptions
5137
- );
5138
- }
5139
-
5140
- // component-defined computed properties are already defined on the
5141
- // component prototype. We only need to define computed properties defined
5142
- // at instantiation here.
5143
- if (!(key in vm)) {
5144
- defineComputed(vm, key, userDef);
5145
- } else if (process.env.NODE_ENV !== 'production') {
5146
- if (key in vm.$data) {
5147
- warn(("The computed property \"" + key + "\" is already defined in data."), vm);
5148
- } else if (vm.$options.props && key in vm.$options.props) {
5149
- warn(("The computed property \"" + key + "\" is already defined as a prop."), vm);
5150
- }
5151
- }
5152
- }
5153
- }
5154
-
5155
- function defineComputed (
5156
- target,
5157
- key,
5158
- userDef
5159
- ) {
5160
- var shouldCache = !isServerRendering();
5161
- if (typeof userDef === 'function') {
5162
- sharedPropertyDefinition.get = shouldCache
5163
- ? createComputedGetter(key)
5164
- : createGetterInvoker(userDef);
5165
- sharedPropertyDefinition.set = noop;
5166
- } else {
5167
- sharedPropertyDefinition.get = userDef.get
5168
- ? shouldCache && userDef.cache !== false
5169
- ? createComputedGetter(key)
5170
- : createGetterInvoker(userDef.get)
5171
- : noop;
5172
- sharedPropertyDefinition.set = userDef.set || noop;
5173
- }
5174
- if (process.env.NODE_ENV !== 'production' &&
5175
- sharedPropertyDefinition.set === noop) {
5176
- sharedPropertyDefinition.set = function () {
5177
- warn(
5178
- ("Computed property \"" + key + "\" was assigned to but it has no setter."),
5179
- this
5180
- );
5181
- };
5182
- }
5183
- Object.defineProperty(target, key, sharedPropertyDefinition);
5184
- }
5185
-
5186
- function createComputedGetter (key) {
5187
- return function computedGetter () {
5188
- var watcher = this._computedWatchers && this._computedWatchers[key];
5189
- if (watcher) {
5190
- if (watcher.dirty) {
5191
- watcher.evaluate();
5192
- }
5193
- if (Dep.target) {
5194
- watcher.depend();
5195
- }
5196
- return watcher.value
5197
- }
5198
- }
5199
- }
5200
-
5201
- function createGetterInvoker(fn) {
5202
- return function computedGetter () {
5203
- return fn.call(this, this)
5204
- }
5205
- }
5206
-
5207
- function initMethods (vm, methods) {
5208
- var props = vm.$options.props;
5209
- for (var key in methods) {
5210
- if (process.env.NODE_ENV !== 'production') {
5211
- if (typeof methods[key] !== 'function') {
5212
- warn(
5213
- "Method \"" + key + "\" has type \"" + (typeof methods[key]) + "\" in the component definition. " +
5214
- "Did you reference the function correctly?",
5215
- vm
5216
- );
5217
- }
5218
- if (props && hasOwn(props, key)) {
5219
- warn(
5220
- ("Method \"" + key + "\" has already been defined as a prop."),
5221
- vm
5222
- );
5223
- }
5224
- if ((key in vm) && isReserved(key)) {
5225
- warn(
5226
- "Method \"" + key + "\" conflicts with an existing Vue instance method. " +
5227
- "Avoid defining component methods that start with _ or $."
5228
- );
5229
- }
5230
- }
5231
- vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);
5232
- }
5233
- }
5234
-
5235
- function initWatch (vm, watch) {
5236
- for (var key in watch) {
5237
- var handler = watch[key];
5238
- if (Array.isArray(handler)) {
5239
- for (var i = 0; i < handler.length; i++) {
5240
- createWatcher(vm, key, handler[i]);
5241
- }
5242
- } else {
5243
- createWatcher(vm, key, handler);
5244
- }
5245
- }
5246
- }
5247
-
5248
- function createWatcher (
5249
- vm,
5250
- expOrFn,
5251
- handler,
5252
- options
5253
- ) {
5254
- if (isPlainObject(handler)) {
5255
- options = handler;
5256
- handler = handler.handler;
5257
- }
5258
- if (typeof handler === 'string') {
5259
- handler = vm[handler];
5260
- }
5261
- return vm.$watch(expOrFn, handler, options)
5262
- }
5263
-
5264
- function stateMixin (Vue) {
5265
- // flow somehow has problems with directly declared definition object
5266
- // when using Object.defineProperty, so we have to procedurally build up
5267
- // the object here.
5268
- var dataDef = {};
5269
- dataDef.get = function () { return this._data };
5270
- var propsDef = {};
5271
- propsDef.get = function () { return this._props };
5272
- if (process.env.NODE_ENV !== 'production') {
5273
- dataDef.set = function () {
5274
- warn(
5275
- 'Avoid replacing instance root $data. ' +
5276
- 'Use nested data properties instead.',
5277
- this
5278
- );
5279
- };
5280
- propsDef.set = function () {
5281
- warn("$props is readonly.", this);
5282
- };
5283
- }
5284
- Object.defineProperty(Vue.prototype, '$data', dataDef);
5285
- Object.defineProperty(Vue.prototype, '$props', propsDef);
5286
-
5287
- Vue.prototype.$set = set;
5288
- Vue.prototype.$delete = del;
5289
-
5290
- Vue.prototype.$watch = function (
5291
- expOrFn,
5292
- cb,
5293
- options
5294
- ) {
5295
- var vm = this;
5296
- if (isPlainObject(cb)) {
5297
- return createWatcher(vm, expOrFn, cb, options)
5298
- }
5299
- options = options || {};
5300
- options.user = true;
5301
- var watcher = new Watcher(vm, expOrFn, cb, options);
5302
- if (options.immediate) {
5303
- try {
5304
- cb.call(vm, watcher.value);
5305
- } catch (error) {
5306
- handleError(error, vm, ("callback for immediate watcher \"" + (watcher.expression) + "\""));
5307
- }
5308
- }
5309
- return function unwatchFn () {
5310
- watcher.teardown();
5311
- }
5312
- };
5313
- }
5314
-
5315
- /* */
5316
-
5317
- var uid$3 = 0;
5318
-
5319
- function initMixin (Vue) {
5320
- Vue.prototype._init = function (options) {
5321
- var vm = this;
5322
- // a uid
5323
- vm._uid = uid$3++;
5324
-
5325
- var startTag, endTag;
5326
- /* istanbul ignore if */
5327
- if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
5328
- startTag = "vue-perf-start:" + (vm._uid);
5329
- endTag = "vue-perf-end:" + (vm._uid);
5330
- mark(startTag);
5331
- }
5332
-
5333
- // a flag to avoid this being observed
5334
- vm._isVue = true;
5335
- // merge options
5336
- if (options && options._isComponent) {
5337
- // optimize internal component instantiation
5338
- // since dynamic options merging is pretty slow, and none of the
5339
- // internal component options needs special treatment.
5340
- initInternalComponent(vm, options);
5341
- } else {
5342
- vm.$options = mergeOptions(
5343
- resolveConstructorOptions(vm.constructor),
5344
- options || {},
5345
- vm
5346
- );
5347
- }
5348
- /* istanbul ignore else */
5349
- if (process.env.NODE_ENV !== 'production') {
5350
- initProxy(vm);
5351
- } else {
5352
- vm._renderProxy = vm;
5353
- }
5354
- // expose real self
5355
- vm._self = vm;
5356
- initLifecycle(vm);
5357
- initEvents(vm);
5358
- initRender(vm);
5359
- callHook(vm, 'beforeCreate');
5360
- initInjections(vm); // resolve injections before data/props
5361
- initState(vm);
5362
- initProvide(vm); // resolve provide after data/props
5363
- callHook(vm, 'created');
5364
-
5365
- /* istanbul ignore if */
5366
- if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
5367
- vm._name = formatComponentName(vm, false);
5368
- mark(endTag);
5369
- measure(("vue " + (vm._name) + " init"), startTag, endTag);
5370
- }
5371
-
5372
- if (vm.$options.el) {
5373
- vm.$mount(vm.$options.el);
5374
- }
5375
- };
5376
- }
5377
-
5378
- function initInternalComponent (vm, options) {
5379
- var opts = vm.$options = Object.create(vm.constructor.options);
5380
- // doing this because it's faster than dynamic enumeration.
5381
- var parentVnode = options._parentVnode;
5382
- opts.parent = options.parent;
5383
- opts._parentVnode = parentVnode;
5384
-
5385
- var vnodeComponentOptions = parentVnode.componentOptions;
5386
- opts.propsData = vnodeComponentOptions.propsData;
5387
- opts._parentListeners = vnodeComponentOptions.listeners;
5388
- opts._renderChildren = vnodeComponentOptions.children;
5389
- opts._componentTag = vnodeComponentOptions.tag;
5390
-
5391
- if (options.render) {
5392
- opts.render = options.render;
5393
- opts.staticRenderFns = options.staticRenderFns;
5394
- }
5395
- }
5396
-
5397
- function resolveConstructorOptions (Ctor) {
5398
- var options = Ctor.options;
5399
- if (Ctor.super) {
5400
- var superOptions = resolveConstructorOptions(Ctor.super);
5401
- var cachedSuperOptions = Ctor.superOptions;
5402
- if (superOptions !== cachedSuperOptions) {
5403
- // super option changed,
5404
- // need to resolve new options.
5405
- Ctor.superOptions = superOptions;
5406
- // check if there are any late-modified/attached options (#4976)
5407
- var modifiedOptions = resolveModifiedOptions(Ctor);
5408
- // update base extend options
5409
- if (modifiedOptions) {
5410
- extend(Ctor.extendOptions, modifiedOptions);
5411
- }
5412
- options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
5413
- if (options.name) {
5414
- options.components[options.name] = Ctor;
5415
- }
5416
- }
5417
- }
5418
- return options
5419
- }
5420
-
5421
- function resolveModifiedOptions (Ctor) {
5422
- var modified;
5423
- var latest = Ctor.options;
5424
- var sealed = Ctor.sealedOptions;
5425
- for (var key in latest) {
5426
- if (latest[key] !== sealed[key]) {
5427
- if (!modified) { modified = {}; }
5428
- modified[key] = latest[key];
5429
- }
5430
- }
5431
- return modified
5432
- }
5433
-
5434
- function Vue (options) {
5435
- if (process.env.NODE_ENV !== 'production' &&
5436
- !(this instanceof Vue)
5437
- ) {
5438
- warn('Vue is a constructor and should be called with the `new` keyword');
5439
- }
5440
- this._init(options);
5441
- }
5442
-
5443
- initMixin(Vue);
5444
- stateMixin(Vue);
5445
- eventsMixin(Vue);
5446
- lifecycleMixin(Vue);
5447
- renderMixin(Vue);
5448
-
5449
- /* */
5450
-
5451
- function initUse (Vue) {
5452
- Vue.use = function (plugin) {
5453
- var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
5454
- if (installedPlugins.indexOf(plugin) > -1) {
5455
- return this
5456
- }
5457
-
5458
- // additional parameters
5459
- var args = toArray(arguments, 1);
5460
- args.unshift(this);
5461
- if (typeof plugin.install === 'function') {
5462
- plugin.install.apply(plugin, args);
5463
- } else if (typeof plugin === 'function') {
5464
- plugin.apply(null, args);
5465
- }
5466
- installedPlugins.push(plugin);
5467
- return this
5468
- };
5469
- }
5470
-
5471
- /* */
5472
-
5473
- function initMixin$1 (Vue) {
5474
- Vue.mixin = function (mixin) {
5475
- this.options = mergeOptions(this.options, mixin);
5476
- return this
5477
- };
5478
- }
5479
-
5480
- /* */
5481
-
5482
- function initExtend (Vue) {
5483
- /**
5484
- * Each instance constructor, including Vue, has a unique
5485
- * cid. This enables us to create wrapped "child
5486
- * constructors" for prototypal inheritance and cache them.
5487
- */
5488
- Vue.cid = 0;
5489
- var cid = 1;
5490
-
5491
- /**
5492
- * Class inheritance
5493
- */
5494
- Vue.extend = function (extendOptions) {
5495
- extendOptions = extendOptions || {};
5496
- var Super = this;
5497
- var SuperId = Super.cid;
5498
- var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
5499
- if (cachedCtors[SuperId]) {
5500
- return cachedCtors[SuperId]
5501
- }
5502
-
5503
- var name = extendOptions.name || Super.options.name;
5504
- if (process.env.NODE_ENV !== 'production' && name) {
5505
- validateComponentName(name);
5506
- }
5507
-
5508
- var Sub = function VueComponent (options) {
5509
- this._init(options);
5510
- };
5511
- Sub.prototype = Object.create(Super.prototype);
5512
- Sub.prototype.constructor = Sub;
5513
- Sub.cid = cid++;
5514
- Sub.options = mergeOptions(
5515
- Super.options,
5516
- extendOptions
5517
- );
5518
- Sub['super'] = Super;
5519
-
5520
- // For props and computed properties, we define the proxy getters on
5521
- // the Vue instances at extension time, on the extended prototype. This
5522
- // avoids Object.defineProperty calls for each instance created.
5523
- if (Sub.options.props) {
5524
- initProps$1(Sub);
5525
- }
5526
- if (Sub.options.computed) {
5527
- initComputed$1(Sub);
5528
- }
5529
-
5530
- // allow further extension/mixin/plugin usage
5531
- Sub.extend = Super.extend;
5532
- Sub.mixin = Super.mixin;
5533
- Sub.use = Super.use;
5534
-
5535
- // create asset registers, so extended classes
5536
- // can have their private assets too.
5537
- ASSET_TYPES.forEach(function (type) {
5538
- Sub[type] = Super[type];
5539
- });
5540
- // enable recursive self-lookup
5541
- if (name) {
5542
- Sub.options.components[name] = Sub;
5543
- }
5544
-
5545
- // keep a reference to the super options at extension time.
5546
- // later at instantiation we can check if Super's options have
5547
- // been updated.
5548
- Sub.superOptions = Super.options;
5549
- Sub.extendOptions = extendOptions;
5550
- Sub.sealedOptions = extend({}, Sub.options);
5551
-
5552
- // cache constructor
5553
- cachedCtors[SuperId] = Sub;
5554
- return Sub
5555
- };
5556
- }
5557
-
5558
- function initProps$1 (Comp) {
5559
- var props = Comp.options.props;
5560
- for (var key in props) {
5561
- proxy(Comp.prototype, "_props", key);
5562
- }
5563
- }
5564
-
5565
- function initComputed$1 (Comp) {
5566
- var computed = Comp.options.computed;
5567
- for (var key in computed) {
5568
- defineComputed(Comp.prototype, key, computed[key]);
5569
- }
5570
- }
5571
-
5572
- /* */
5573
-
5574
- function initAssetRegisters (Vue) {
5575
- /**
5576
- * Create asset registration methods.
5577
- */
5578
- ASSET_TYPES.forEach(function (type) {
5579
- Vue[type] = function (
5580
- id,
5581
- definition
5582
- ) {
5583
- if (!definition) {
5584
- return this.options[type + 's'][id]
5585
- } else {
5586
- /* istanbul ignore if */
5587
- if (process.env.NODE_ENV !== 'production' && type === 'component') {
5588
- validateComponentName(id);
5589
- }
5590
- if (type === 'component' && isPlainObject(definition)) {
5591
- definition.name = definition.name || id;
5592
- definition = this.options._base.extend(definition);
5593
- }
5594
- if (type === 'directive' && typeof definition === 'function') {
5595
- definition = { bind: definition, update: definition };
5596
- }
5597
- this.options[type + 's'][id] = definition;
5598
- return definition
5599
- }
5600
- };
5601
- });
5602
- }
5603
-
5604
- /* */
5605
-
5606
-
5607
-
5608
- function getComponentName (opts) {
5609
- return opts && (opts.Ctor.options.name || opts.tag)
5610
- }
5611
-
5612
- function matches (pattern, name) {
5613
- if (Array.isArray(pattern)) {
5614
- return pattern.indexOf(name) > -1
5615
- } else if (typeof pattern === 'string') {
5616
- return pattern.split(',').indexOf(name) > -1
5617
- } else if (isRegExp(pattern)) {
5618
- return pattern.test(name)
5619
- }
5620
- /* istanbul ignore next */
5621
- return false
5622
- }
5623
-
5624
- function pruneCache (keepAliveInstance, filter) {
5625
- var cache = keepAliveInstance.cache;
5626
- var keys = keepAliveInstance.keys;
5627
- var _vnode = keepAliveInstance._vnode;
5628
- for (var key in cache) {
5629
- var cachedNode = cache[key];
5630
- if (cachedNode) {
5631
- var name = getComponentName(cachedNode.componentOptions);
5632
- if (name && !filter(name)) {
5633
- pruneCacheEntry(cache, key, keys, _vnode);
5634
- }
5635
- }
5636
- }
5637
- }
5638
-
5639
- function pruneCacheEntry (
5640
- cache,
5641
- key,
5642
- keys,
5643
- current
5644
- ) {
5645
- var cached$$1 = cache[key];
5646
- if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {
5647
- cached$$1.componentInstance.$destroy();
5648
- }
5649
- cache[key] = null;
5650
- remove(keys, key);
5651
- }
5652
-
5653
- var patternTypes = [String, RegExp, Array];
5654
-
5655
- var KeepAlive = {
5656
- name: 'keep-alive',
5657
- abstract: true,
5658
-
5659
- props: {
5660
- include: patternTypes,
5661
- exclude: patternTypes,
5662
- max: [String, Number]
5663
- },
5664
-
5665
- created: function created () {
5666
- this.cache = Object.create(null);
5667
- this.keys = [];
5668
- },
5669
-
5670
- destroyed: function destroyed () {
5671
- for (var key in this.cache) {
5672
- pruneCacheEntry(this.cache, key, this.keys);
5673
- }
5674
- },
5675
-
5676
- mounted: function mounted () {
5677
- var this$1 = this;
5678
-
5679
- this.$watch('include', function (val) {
5680
- pruneCache(this$1, function (name) { return matches(val, name); });
5681
- });
5682
- this.$watch('exclude', function (val) {
5683
- pruneCache(this$1, function (name) { return !matches(val, name); });
5684
- });
5685
- },
5686
-
5687
- render: function render () {
5688
- var slot = this.$slots.default;
5689
- var vnode = getFirstComponentChild(slot);
5690
- var componentOptions = vnode && vnode.componentOptions;
5691
- if (componentOptions) {
5692
- // check pattern
5693
- var name = getComponentName(componentOptions);
5694
- var ref = this;
5695
- var include = ref.include;
5696
- var exclude = ref.exclude;
5697
- if (
5698
- // not included
5699
- (include && (!name || !matches(include, name))) ||
5700
- // excluded
5701
- (exclude && name && matches(exclude, name))
5702
- ) {
5703
- return vnode
5704
- }
5705
-
5706
- var ref$1 = this;
5707
- var cache = ref$1.cache;
5708
- var keys = ref$1.keys;
5709
- var key = vnode.key == null
5710
- // same constructor may get registered as different local components
5711
- // so cid alone is not enough (#3269)
5712
- ? componentOptions.Ctor.cid + (componentOptions.tag ? ("::" + (componentOptions.tag)) : '')
5713
- : vnode.key;
5714
- if (cache[key]) {
5715
- vnode.componentInstance = cache[key].componentInstance;
5716
- // make current key freshest
5717
- remove(keys, key);
5718
- keys.push(key);
5719
- } else {
5720
- cache[key] = vnode;
5721
- keys.push(key);
5722
- // prune oldest entry
5723
- if (this.max && keys.length > parseInt(this.max)) {
5724
- pruneCacheEntry(cache, keys[0], keys, this._vnode);
5725
- }
5726
- }
5727
-
5728
- vnode.data.keepAlive = true;
5729
- }
5730
- return vnode || (slot && slot[0])
5731
- }
5732
- };
5733
-
5734
- var builtInComponents = {
5735
- KeepAlive: KeepAlive
5736
- };
5737
-
5738
- /* */
5739
-
5740
- function initGlobalAPI (Vue) {
5741
- // config
5742
- var configDef = {};
5743
- configDef.get = function () { return config; };
5744
- if (process.env.NODE_ENV !== 'production') {
5745
- configDef.set = function () {
5746
- warn(
5747
- 'Do not replace the Vue.config object, set individual fields instead.'
5748
- );
5749
- };
5750
- }
5751
- Object.defineProperty(Vue, 'config', configDef);
5752
-
5753
- // exposed util methods.
5754
- // NOTE: these are not considered part of the public API - avoid relying on
5755
- // them unless you are aware of the risk.
5756
- Vue.util = {
5757
- warn: warn,
5758
- extend: extend,
5759
- mergeOptions: mergeOptions,
5760
- defineReactive: defineReactive$$1
5761
- };
5762
-
5763
- Vue.set = set;
5764
- Vue.delete = del;
5765
- Vue.nextTick = nextTick;
5766
-
5767
- // 2.6 explicit observable API
5768
- Vue.observable = function (obj) {
5769
- observe(obj);
5770
- return obj
5771
- };
5772
-
5773
- Vue.options = Object.create(null);
5774
- ASSET_TYPES.forEach(function (type) {
5775
- Vue.options[type + 's'] = Object.create(null);
5776
- });
5777
-
5778
- // this is used to identify the "base" constructor to extend all plain-object
5779
- // components with in Weex's multi-instance scenarios.
5780
- Vue.options._base = Vue;
5781
-
5782
- extend(Vue.options.components, builtInComponents);
5783
-
5784
- initUse(Vue);
5785
- initMixin$1(Vue);
5786
- initExtend(Vue);
5787
- initAssetRegisters(Vue);
5788
- }
5789
-
5790
- initGlobalAPI(Vue);
5791
-
5792
- Object.defineProperty(Vue.prototype, '$isServer', {
5793
- get: isServerRendering
5794
- });
5795
-
5796
- Object.defineProperty(Vue.prototype, '$ssrContext', {
5797
- get: function get () {
5798
- /* istanbul ignore next */
5799
- return this.$vnode && this.$vnode.ssrContext
5800
- }
5801
- });
5802
-
5803
- // expose FunctionalRenderContext for ssr runtime helper installation
5804
- Object.defineProperty(Vue, 'FunctionalRenderContext', {
5805
- value: FunctionalRenderContext
5806
- });
5807
-
5808
- Vue.version = '2.6.6';
5809
-
5810
- /* */
5811
-
5812
- // these are reserved for web because they are directly compiled away
5813
- // during template compilation
5814
- var isReservedAttr = makeMap('style,class');
5815
-
5816
- // attributes that should be using props for binding
5817
- var acceptValue = makeMap('input,textarea,option,select,progress');
5818
- var mustUseProp = function (tag, type, attr) {
5819
- return (
5820
- (attr === 'value' && acceptValue(tag)) && type !== 'button' ||
5821
- (attr === 'selected' && tag === 'option') ||
5822
- (attr === 'checked' && tag === 'input') ||
5823
- (attr === 'muted' && tag === 'video')
5824
- )
5825
- };
5826
-
5827
- var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
5828
-
5829
- var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
5830
-
5831
- var convertEnumeratedValue = function (key, value) {
5832
- return isFalsyAttrValue(value) || value === 'false'
5833
- ? 'false'
5834
- // allow arbitrary string value for contenteditable
5835
- : key === 'contenteditable' && isValidContentEditableValue(value)
5836
- ? value
5837
- : 'true'
5838
- };
5839
-
5840
- var isBooleanAttr = makeMap(
5841
- 'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
5842
- 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
5843
- 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
5844
- 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
5845
- 'required,reversed,scoped,seamless,selected,sortable,translate,' +
5846
- 'truespeed,typemustmatch,visible'
5847
- );
5848
-
5849
- var xlinkNS = 'http://www.w3.org/1999/xlink';
5850
-
5851
- var isXlink = function (name) {
5852
- return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'
5853
- };
5854
-
5855
- var getXlinkProp = function (name) {
5856
- return isXlink(name) ? name.slice(6, name.length) : ''
5857
- };
5858
-
5859
- var isFalsyAttrValue = function (val) {
5860
- return val == null || val === false
5861
- };
5862
-
5863
- /* */
5864
-
5865
- function genClassForVnode (vnode) {
5866
- var data = vnode.data;
5867
- var parentNode = vnode;
5868
- var childNode = vnode;
5869
- while (isDef(childNode.componentInstance)) {
5870
- childNode = childNode.componentInstance._vnode;
5871
- if (childNode && childNode.data) {
5872
- data = mergeClassData(childNode.data, data);
5873
- }
5874
- }
5875
- while (isDef(parentNode = parentNode.parent)) {
5876
- if (parentNode && parentNode.data) {
5877
- data = mergeClassData(data, parentNode.data);
5878
- }
5879
- }
5880
- return renderClass(data.staticClass, data.class)
5881
- }
5882
-
5883
- function mergeClassData (child, parent) {
5884
- return {
5885
- staticClass: concat(child.staticClass, parent.staticClass),
5886
- class: isDef(child.class)
5887
- ? [child.class, parent.class]
5888
- : parent.class
5889
- }
5890
- }
5891
-
5892
- function renderClass (
5893
- staticClass,
5894
- dynamicClass
5895
- ) {
5896
- if (isDef(staticClass) || isDef(dynamicClass)) {
5897
- return concat(staticClass, stringifyClass(dynamicClass))
5898
- }
5899
- /* istanbul ignore next */
5900
- return ''
5901
- }
5902
-
5903
- function concat (a, b) {
5904
- return a ? b ? (a + ' ' + b) : a : (b || '')
5905
- }
5906
-
5907
- function stringifyClass (value) {
5908
- if (Array.isArray(value)) {
5909
- return stringifyArray(value)
5910
- }
5911
- if (isObject(value)) {
5912
- return stringifyObject(value)
5913
- }
5914
- if (typeof value === 'string') {
5915
- return value
5916
- }
5917
- /* istanbul ignore next */
5918
- return ''
5919
- }
5920
-
5921
- function stringifyArray (value) {
5922
- var res = '';
5923
- var stringified;
5924
- for (var i = 0, l = value.length; i < l; i++) {
5925
- if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {
5926
- if (res) { res += ' '; }
5927
- res += stringified;
5928
- }
5929
- }
5930
- return res
5931
- }
5932
-
5933
- function stringifyObject (value) {
5934
- var res = '';
5935
- for (var key in value) {
5936
- if (value[key]) {
5937
- if (res) { res += ' '; }
5938
- res += key;
5939
- }
5940
- }
5941
- return res
5942
- }
5943
-
5944
- /* */
5945
-
5946
- var namespaceMap = {
5947
- svg: 'http://www.w3.org/2000/svg',
5948
- math: 'http://www.w3.org/1998/Math/MathML'
5949
- };
5950
-
5951
- var isHTMLTag = makeMap(
5952
- 'html,body,base,head,link,meta,style,title,' +
5953
- 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
5954
- 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
5955
- 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
5956
- 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
5957
- 'embed,object,param,source,canvas,script,noscript,del,ins,' +
5958
- 'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
5959
- 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
5960
- 'output,progress,select,textarea,' +
5961
- 'details,dialog,menu,menuitem,summary,' +
5962
- 'content,element,shadow,template,blockquote,iframe,tfoot'
5963
- );
5964
-
5965
- // this map is intentionally selective, only covering SVG elements that may
5966
- // contain child elements.
5967
- var isSVG = makeMap(
5968
- 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
5969
- 'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
5970
- 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',
5971
- true
5972
- );
5973
-
5974
- var isPreTag = function (tag) { return tag === 'pre'; };
5975
-
5976
- var isReservedTag = function (tag) {
5977
- return isHTMLTag(tag) || isSVG(tag)
5978
- };
5979
-
5980
- function getTagNamespace (tag) {
5981
- if (isSVG(tag)) {
5982
- return 'svg'
5983
- }
5984
- // basic support for MathML
5985
- // note it doesn't support other MathML elements being component roots
5986
- if (tag === 'math') {
5987
- return 'math'
5988
- }
5989
- }
5990
-
5991
- var unknownElementCache = Object.create(null);
5992
- function isUnknownElement (tag) {
5993
- /* istanbul ignore if */
5994
- if (!inBrowser) {
5995
- return true
5996
- }
5997
- if (isReservedTag(tag)) {
5998
- return false
5999
- }
6000
- tag = tag.toLowerCase();
6001
- /* istanbul ignore if */
6002
- if (unknownElementCache[tag] != null) {
6003
- return unknownElementCache[tag]
6004
- }
6005
- var el = document.createElement(tag);
6006
- if (tag.indexOf('-') > -1) {
6007
- // http://stackoverflow.com/a/28210364/1070244
6008
- return (unknownElementCache[tag] = (
6009
- el.constructor === window.HTMLUnknownElement ||
6010
- el.constructor === window.HTMLElement
6011
- ))
6012
- } else {
6013
- return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))
6014
- }
6015
- }
6016
-
6017
- var isTextInputType = makeMap('text,number,password,search,email,tel,url');
6018
-
6019
- /* */
6020
-
6021
- /**
6022
- * Query an element selector if it's not an element already.
6023
- */
6024
- function query (el) {
6025
- if (typeof el === 'string') {
6026
- var selected = document.querySelector(el);
6027
- if (!selected) {
6028
- process.env.NODE_ENV !== 'production' && warn(
6029
- 'Cannot find element: ' + el
6030
- );
6031
- return document.createElement('div')
6032
- }
6033
- return selected
6034
- } else {
6035
- return el
6036
- }
6037
- }
6038
-
6039
- /* */
6040
-
6041
- function createElement$1 (tagName, vnode) {
6042
- var elm = document.createElement(tagName);
6043
- if (tagName !== 'select') {
6044
- return elm
6045
- }
6046
- // false or null will remove the attribute but undefined will not
6047
- if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {
6048
- elm.setAttribute('multiple', 'multiple');
6049
- }
6050
- return elm
6051
- }
6052
-
6053
- function createElementNS (namespace, tagName) {
6054
- return document.createElementNS(namespaceMap[namespace], tagName)
6055
- }
6056
-
6057
- function createTextNode (text) {
6058
- return document.createTextNode(text)
6059
- }
6060
-
6061
- function createComment (text) {
6062
- return document.createComment(text)
6063
- }
6064
-
6065
- function insertBefore (parentNode, newNode, referenceNode) {
6066
- parentNode.insertBefore(newNode, referenceNode);
6067
- }
6068
-
6069
- function removeChild (node, child) {
6070
- node.removeChild(child);
6071
- }
6072
-
6073
- function appendChild (node, child) {
6074
- node.appendChild(child);
6075
- }
6076
-
6077
- function parentNode (node) {
6078
- return node.parentNode
6079
- }
6080
-
6081
- function nextSibling (node) {
6082
- return node.nextSibling
6083
- }
6084
-
6085
- function tagName (node) {
6086
- return node.tagName
6087
- }
6088
-
6089
- function setTextContent (node, text) {
6090
- node.textContent = text;
6091
- }
6092
-
6093
- function setStyleScope (node, scopeId) {
6094
- node.setAttribute(scopeId, '');
6095
- }
6096
-
6097
- var nodeOps = /*#__PURE__*/Object.freeze({
6098
- createElement: createElement$1,
6099
- createElementNS: createElementNS,
6100
- createTextNode: createTextNode,
6101
- createComment: createComment,
6102
- insertBefore: insertBefore,
6103
- removeChild: removeChild,
6104
- appendChild: appendChild,
6105
- parentNode: parentNode,
6106
- nextSibling: nextSibling,
6107
- tagName: tagName,
6108
- setTextContent: setTextContent,
6109
- setStyleScope: setStyleScope
6110
- });
6111
-
6112
- /* */
6113
-
6114
- var ref = {
6115
- create: function create (_, vnode) {
6116
- registerRef(vnode);
6117
- },
6118
- update: function update (oldVnode, vnode) {
6119
- if (oldVnode.data.ref !== vnode.data.ref) {
6120
- registerRef(oldVnode, true);
6121
- registerRef(vnode);
6122
- }
6123
- },
6124
- destroy: function destroy (vnode) {
6125
- registerRef(vnode, true);
6126
- }
6127
- };
6128
-
6129
- function registerRef (vnode, isRemoval) {
6130
- var key = vnode.data.ref;
6131
- if (!isDef(key)) { return }
6132
-
6133
- var vm = vnode.context;
6134
- var ref = vnode.componentInstance || vnode.elm;
6135
- var refs = vm.$refs;
6136
- if (isRemoval) {
6137
- if (Array.isArray(refs[key])) {
6138
- remove(refs[key], ref);
6139
- } else if (refs[key] === ref) {
6140
- refs[key] = undefined;
6141
- }
6142
- } else {
6143
- if (vnode.data.refInFor) {
6144
- if (!Array.isArray(refs[key])) {
6145
- refs[key] = [ref];
6146
- } else if (refs[key].indexOf(ref) < 0) {
6147
- // $flow-disable-line
6148
- refs[key].push(ref);
6149
- }
6150
- } else {
6151
- refs[key] = ref;
6152
- }
6153
- }
6154
- }
6155
-
6156
- /**
6157
- * Virtual DOM patching algorithm based on Snabbdom by
6158
- * Simon Friis Vindum (@paldepind)
6159
- * Licensed under the MIT License
6160
- * https://github.com/paldepind/snabbdom/blob/master/LICENSE
6161
- *
6162
- * modified by Evan You (@yyx990803)
6163
- *
6164
- * Not type-checking this because this file is perf-critical and the cost
6165
- * of making flow understand it is not worth it.
6166
- */
6167
-
6168
- var emptyNode = new VNode('', {}, []);
6169
-
6170
- var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
6171
-
6172
- function sameVnode (a, b) {
6173
- return (
6174
- a.key === b.key && (
6175
- (
6176
- a.tag === b.tag &&
6177
- a.isComment === b.isComment &&
6178
- isDef(a.data) === isDef(b.data) &&
6179
- sameInputType(a, b)
6180
- ) || (
6181
- isTrue(a.isAsyncPlaceholder) &&
6182
- a.asyncFactory === b.asyncFactory &&
6183
- isUndef(b.asyncFactory.error)
6184
- )
6185
- )
6186
- )
6187
- }
6188
-
6189
- function sameInputType (a, b) {
6190
- if (a.tag !== 'input') { return true }
6191
- var i;
6192
- var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;
6193
- var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;
6194
- return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)
6195
- }
6196
-
6197
- function createKeyToOldIdx (children, beginIdx, endIdx) {
6198
- var i, key;
6199
- var map = {};
6200
- for (i = beginIdx; i <= endIdx; ++i) {
6201
- key = children[i].key;
6202
- if (isDef(key)) { map[key] = i; }
6203
- }
6204
- return map
6205
- }
6206
-
6207
- function createPatchFunction (backend) {
6208
- var i, j;
6209
- var cbs = {};
6210
-
6211
- var modules = backend.modules;
6212
- var nodeOps = backend.nodeOps;
6213
-
6214
- for (i = 0; i < hooks.length; ++i) {
6215
- cbs[hooks[i]] = [];
6216
- for (j = 0; j < modules.length; ++j) {
6217
- if (isDef(modules[j][hooks[i]])) {
6218
- cbs[hooks[i]].push(modules[j][hooks[i]]);
6219
- }
6220
- }
6221
- }
6222
-
6223
- function emptyNodeAt (elm) {
6224
- return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)
6225
- }
6226
-
6227
- function createRmCb (childElm, listeners) {
6228
- function remove$$1 () {
6229
- if (--remove$$1.listeners === 0) {
6230
- removeNode(childElm);
6231
- }
6232
- }
6233
- remove$$1.listeners = listeners;
6234
- return remove$$1
6235
- }
6236
-
6237
- function removeNode (el) {
6238
- var parent = nodeOps.parentNode(el);
6239
- // element may have already been removed due to v-html / v-text
6240
- if (isDef(parent)) {
6241
- nodeOps.removeChild(parent, el);
6242
- }
6243
- }
6244
-
6245
- function isUnknownElement$$1 (vnode, inVPre) {
6246
- return (
6247
- !inVPre &&
6248
- !vnode.ns &&
6249
- !(
6250
- config.ignoredElements.length &&
6251
- config.ignoredElements.some(function (ignore) {
6252
- return isRegExp(ignore)
6253
- ? ignore.test(vnode.tag)
6254
- : ignore === vnode.tag
6255
- })
6256
- ) &&
6257
- config.isUnknownElement(vnode.tag)
6258
- )
6259
- }
6260
-
6261
- var creatingElmInVPre = 0;
6262
-
6263
- function createElm (
6264
- vnode,
6265
- insertedVnodeQueue,
6266
- parentElm,
6267
- refElm,
6268
- nested,
6269
- ownerArray,
6270
- index
6271
- ) {
6272
- if (isDef(vnode.elm) && isDef(ownerArray)) {
6273
- // This vnode was used in a previous render!
6274
- // now it's used as a new node, overwriting its elm would cause
6275
- // potential patch errors down the road when it's used as an insertion
6276
- // reference node. Instead, we clone the node on-demand before creating
6277
- // associated DOM element for it.
6278
- vnode = ownerArray[index] = cloneVNode(vnode);
6279
- }
6280
-
6281
- vnode.isRootInsert = !nested; // for transition enter check
6282
- if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
6283
- return
6284
- }
6285
-
6286
- var data = vnode.data;
6287
- var children = vnode.children;
6288
- var tag = vnode.tag;
6289
- if (isDef(tag)) {
6290
- if (process.env.NODE_ENV !== 'production') {
6291
- if (data && data.pre) {
6292
- creatingElmInVPre++;
6293
- }
6294
- if (isUnknownElement$$1(vnode, creatingElmInVPre)) {
6295
- warn(
6296
- 'Unknown custom element: <' + tag + '> - did you ' +
6297
- 'register the component correctly? For recursive components, ' +
6298
- 'make sure to provide the "name" option.',
6299
- vnode.context
6300
- );
6301
- }
6302
- }
6303
-
6304
- vnode.elm = vnode.ns
6305
- ? nodeOps.createElementNS(vnode.ns, tag)
6306
- : nodeOps.createElement(tag, vnode);
6307
- setScope(vnode);
6308
-
6309
- /* istanbul ignore if */
6310
- {
6311
- createChildren(vnode, children, insertedVnodeQueue);
6312
- if (isDef(data)) {
6313
- invokeCreateHooks(vnode, insertedVnodeQueue);
6314
- }
6315
- insert(parentElm, vnode.elm, refElm);
6316
- }
6317
-
6318
- if (process.env.NODE_ENV !== 'production' && data && data.pre) {
6319
- creatingElmInVPre--;
6320
- }
6321
- } else if (isTrue(vnode.isComment)) {
6322
- vnode.elm = nodeOps.createComment(vnode.text);
6323
- insert(parentElm, vnode.elm, refElm);
6324
- } else {
6325
- vnode.elm = nodeOps.createTextNode(vnode.text);
6326
- insert(parentElm, vnode.elm, refElm);
6327
- }
6328
- }
6329
-
6330
- function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
6331
- var i = vnode.data;
6332
- if (isDef(i)) {
6333
- var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
6334
- if (isDef(i = i.hook) && isDef(i = i.init)) {
6335
- i(vnode, false /* hydrating */);
6336
- }
6337
- // after calling the init hook, if the vnode is a child component
6338
- // it should've created a child instance and mounted it. the child
6339
- // component also has set the placeholder vnode's elm.
6340
- // in that case we can just return the element and be done.
6341
- if (isDef(vnode.componentInstance)) {
6342
- initComponent(vnode, insertedVnodeQueue);
6343
- insert(parentElm, vnode.elm, refElm);
6344
- if (isTrue(isReactivated)) {
6345
- reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
6346
- }
6347
- return true
6348
- }
6349
- }
6350
- }
6351
-
6352
- function initComponent (vnode, insertedVnodeQueue) {
6353
- if (isDef(vnode.data.pendingInsert)) {
6354
- insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
6355
- vnode.data.pendingInsert = null;
6356
- }
6357
- vnode.elm = vnode.componentInstance.$el;
6358
- if (isPatchable(vnode)) {
6359
- invokeCreateHooks(vnode, insertedVnodeQueue);
6360
- setScope(vnode);
6361
- } else {
6362
- // empty component root.
6363
- // skip all element-related modules except for ref (#3455)
6364
- registerRef(vnode);
6365
- // make sure to invoke the insert hook
6366
- insertedVnodeQueue.push(vnode);
6367
- }
6368
- }
6369
-
6370
- function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
6371
- var i;
6372
- // hack for #4339: a reactivated component with inner transition
6373
- // does not trigger because the inner node's created hooks are not called
6374
- // again. It's not ideal to involve module-specific logic in here but
6375
- // there doesn't seem to be a better way to do it.
6376
- var innerNode = vnode;
6377
- while (innerNode.componentInstance) {
6378
- innerNode = innerNode.componentInstance._vnode;
6379
- if (isDef(i = innerNode.data) && isDef(i = i.transition)) {
6380
- for (i = 0; i < cbs.activate.length; ++i) {
6381
- cbs.activate[i](emptyNode, innerNode);
6382
- }
6383
- insertedVnodeQueue.push(innerNode);
6384
- break
6385
- }
6386
- }
6387
- // unlike a newly created component,
6388
- // a reactivated keep-alive component doesn't insert itself
6389
- insert(parentElm, vnode.elm, refElm);
6390
- }
6391
-
6392
- function insert (parent, elm, ref$$1) {
6393
- if (isDef(parent)) {
6394
- if (isDef(ref$$1)) {
6395
- if (nodeOps.parentNode(ref$$1) === parent) {
6396
- nodeOps.insertBefore(parent, elm, ref$$1);
6397
- }
6398
- } else {
6399
- nodeOps.appendChild(parent, elm);
6400
- }
6401
- }
6402
- }
6403
-
6404
- function createChildren (vnode, children, insertedVnodeQueue) {
6405
- if (Array.isArray(children)) {
6406
- if (process.env.NODE_ENV !== 'production') {
6407
- checkDuplicateKeys(children);
6408
- }
6409
- for (var i = 0; i < children.length; ++i) {
6410
- createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);
6411
- }
6412
- } else if (isPrimitive(vnode.text)) {
6413
- nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
6414
- }
6415
- }
6416
-
6417
- function isPatchable (vnode) {
6418
- while (vnode.componentInstance) {
6419
- vnode = vnode.componentInstance._vnode;
6420
- }
6421
- return isDef(vnode.tag)
6422
- }
6423
-
6424
- function invokeCreateHooks (vnode, insertedVnodeQueue) {
6425
- for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {
6426
- cbs.create[i$1](emptyNode, vnode);
6427
- }
6428
- i = vnode.data.hook; // Reuse variable
6429
- if (isDef(i)) {
6430
- if (isDef(i.create)) { i.create(emptyNode, vnode); }
6431
- if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }
6432
- }
6433
- }
6434
-
6435
- // set scope id attribute for scoped CSS.
6436
- // this is implemented as a special case to avoid the overhead
6437
- // of going through the normal attribute patching process.
6438
- function setScope (vnode) {
6439
- var i;
6440
- if (isDef(i = vnode.fnScopeId)) {
6441
- nodeOps.setStyleScope(vnode.elm, i);
6442
- } else {
6443
- var ancestor = vnode;
6444
- while (ancestor) {
6445
- if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {
6446
- nodeOps.setStyleScope(vnode.elm, i);
6447
- }
6448
- ancestor = ancestor.parent;
6449
- }
6450
- }
6451
- // for slot content they should also get the scopeId from the host instance.
6452
- if (isDef(i = activeInstance) &&
6453
- i !== vnode.context &&
6454
- i !== vnode.fnContext &&
6455
- isDef(i = i.$options._scopeId)
6456
- ) {
6457
- nodeOps.setStyleScope(vnode.elm, i);
6458
- }
6459
- }
6460
-
6461
- function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
6462
- for (; startIdx <= endIdx; ++startIdx) {
6463
- createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
6464
- }
6465
- }
6466
-
6467
- function invokeDestroyHook (vnode) {
6468
- var i, j;
6469
- var data = vnode.data;
6470
- if (isDef(data)) {
6471
- if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }
6472
- for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }
6473
- }
6474
- if (isDef(i = vnode.children)) {
6475
- for (j = 0; j < vnode.children.length; ++j) {
6476
- invokeDestroyHook(vnode.children[j]);
6477
- }
6478
- }
6479
- }
6480
-
6481
- function removeVnodes (parentElm, vnodes, startIdx, endIdx) {
6482
- for (; startIdx <= endIdx; ++startIdx) {
6483
- var ch = vnodes[startIdx];
6484
- if (isDef(ch)) {
6485
- if (isDef(ch.tag)) {
6486
- removeAndInvokeRemoveHook(ch);
6487
- invokeDestroyHook(ch);
6488
- } else { // Text node
6489
- removeNode(ch.elm);
6490
- }
6491
- }
6492
- }
6493
- }
6494
-
6495
- function removeAndInvokeRemoveHook (vnode, rm) {
6496
- if (isDef(rm) || isDef(vnode.data)) {
6497
- var i;
6498
- var listeners = cbs.remove.length + 1;
6499
- if (isDef(rm)) {
6500
- // we have a recursively passed down rm callback
6501
- // increase the listeners count
6502
- rm.listeners += listeners;
6503
- } else {
6504
- // directly removing
6505
- rm = createRmCb(vnode.elm, listeners);
6506
- }
6507
- // recursively invoke hooks on child component root node
6508
- if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {
6509
- removeAndInvokeRemoveHook(i, rm);
6510
- }
6511
- for (i = 0; i < cbs.remove.length; ++i) {
6512
- cbs.remove[i](vnode, rm);
6513
- }
6514
- if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {
6515
- i(vnode, rm);
6516
- } else {
6517
- rm();
6518
- }
6519
- } else {
6520
- removeNode(vnode.elm);
6521
- }
6522
- }
6523
-
6524
- function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
6525
- var oldStartIdx = 0;
6526
- var newStartIdx = 0;
6527
- var oldEndIdx = oldCh.length - 1;
6528
- var oldStartVnode = oldCh[0];
6529
- var oldEndVnode = oldCh[oldEndIdx];
6530
- var newEndIdx = newCh.length - 1;
6531
- var newStartVnode = newCh[0];
6532
- var newEndVnode = newCh[newEndIdx];
6533
- var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
6534
-
6535
- // removeOnly is a special flag used only by <transition-group>
6536
- // to ensure removed elements stay in correct relative positions
6537
- // during leaving transitions
6538
- var canMove = !removeOnly;
6539
-
6540
- if (process.env.NODE_ENV !== 'production') {
6541
- checkDuplicateKeys(newCh);
6542
- }
6543
-
6544
- while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
6545
- if (isUndef(oldStartVnode)) {
6546
- oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
6547
- } else if (isUndef(oldEndVnode)) {
6548
- oldEndVnode = oldCh[--oldEndIdx];
6549
- } else if (sameVnode(oldStartVnode, newStartVnode)) {
6550
- patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
6551
- oldStartVnode = oldCh[++oldStartIdx];
6552
- newStartVnode = newCh[++newStartIdx];
6553
- } else if (sameVnode(oldEndVnode, newEndVnode)) {
6554
- patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
6555
- oldEndVnode = oldCh[--oldEndIdx];
6556
- newEndVnode = newCh[--newEndIdx];
6557
- } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right
6558
- patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
6559
- canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
6560
- oldStartVnode = oldCh[++oldStartIdx];
6561
- newEndVnode = newCh[--newEndIdx];
6562
- } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left
6563
- patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
6564
- canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
6565
- oldEndVnode = oldCh[--oldEndIdx];
6566
- newStartVnode = newCh[++newStartIdx];
6567
- } else {
6568
- if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }
6569
- idxInOld = isDef(newStartVnode.key)
6570
- ? oldKeyToIdx[newStartVnode.key]
6571
- : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
6572
- if (isUndef(idxInOld)) { // New element
6573
- createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
6574
- } else {
6575
- vnodeToMove = oldCh[idxInOld];
6576
- if (sameVnode(vnodeToMove, newStartVnode)) {
6577
- patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
6578
- oldCh[idxInOld] = undefined;
6579
- canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
6580
- } else {
6581
- // same key but different element. treat as new element
6582
- createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
6583
- }
6584
- }
6585
- newStartVnode = newCh[++newStartIdx];
6586
- }
6587
- }
6588
- if (oldStartIdx > oldEndIdx) {
6589
- refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
6590
- addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
6591
- } else if (newStartIdx > newEndIdx) {
6592
- removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);
6593
- }
6594
- }
6595
-
6596
- function checkDuplicateKeys (children) {
6597
- var seenKeys = {};
6598
- for (var i = 0; i < children.length; i++) {
6599
- var vnode = children[i];
6600
- var key = vnode.key;
6601
- if (isDef(key)) {
6602
- if (seenKeys[key]) {
6603
- warn(
6604
- ("Duplicate keys detected: '" + key + "'. This may cause an update error."),
6605
- vnode.context
6606
- );
6607
- } else {
6608
- seenKeys[key] = true;
6609
- }
6610
- }
6611
- }
6612
- }
6613
-
6614
- function findIdxInOld (node, oldCh, start, end) {
6615
- for (var i = start; i < end; i++) {
6616
- var c = oldCh[i];
6617
- if (isDef(c) && sameVnode(node, c)) { return i }
6618
- }
6619
- }
6620
-
6621
- function patchVnode (
6622
- oldVnode,
6623
- vnode,
6624
- insertedVnodeQueue,
6625
- ownerArray,
6626
- index,
6627
- removeOnly
6628
- ) {
6629
- if (oldVnode === vnode) {
6630
- return
6631
- }
6632
-
6633
- if (isDef(vnode.elm) && isDef(ownerArray)) {
6634
- // clone reused vnode
6635
- vnode = ownerArray[index] = cloneVNode(vnode);
6636
- }
6637
-
6638
- var elm = vnode.elm = oldVnode.elm;
6639
-
6640
- if (isTrue(oldVnode.isAsyncPlaceholder)) {
6641
- if (isDef(vnode.asyncFactory.resolved)) {
6642
- hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
6643
- } else {
6644
- vnode.isAsyncPlaceholder = true;
6645
- }
6646
- return
6647
- }
6648
-
6649
- // reuse element for static trees.
6650
- // note we only do this if the vnode is cloned -
6651
- // if the new node is not cloned it means the render functions have been
6652
- // reset by the hot-reload-api and we need to do a proper re-render.
6653
- if (isTrue(vnode.isStatic) &&
6654
- isTrue(oldVnode.isStatic) &&
6655
- vnode.key === oldVnode.key &&
6656
- (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))
6657
- ) {
6658
- vnode.componentInstance = oldVnode.componentInstance;
6659
- return
6660
- }
6661
-
6662
- var i;
6663
- var data = vnode.data;
6664
- if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {
6665
- i(oldVnode, vnode);
6666
- }
6667
-
6668
- var oldCh = oldVnode.children;
6669
- var ch = vnode.children;
6670
- if (isDef(data) && isPatchable(vnode)) {
6671
- for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }
6672
- if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }
6673
- }
6674
- if (isUndef(vnode.text)) {
6675
- if (isDef(oldCh) && isDef(ch)) {
6676
- if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }
6677
- } else if (isDef(ch)) {
6678
- if (process.env.NODE_ENV !== 'production') {
6679
- checkDuplicateKeys(ch);
6680
- }
6681
- if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }
6682
- addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
6683
- } else if (isDef(oldCh)) {
6684
- removeVnodes(elm, oldCh, 0, oldCh.length - 1);
6685
- } else if (isDef(oldVnode.text)) {
6686
- nodeOps.setTextContent(elm, '');
6687
- }
6688
- } else if (oldVnode.text !== vnode.text) {
6689
- nodeOps.setTextContent(elm, vnode.text);
6690
- }
6691
- if (isDef(data)) {
6692
- if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }
6693
- }
6694
- }
6695
-
6696
- function invokeInsertHook (vnode, queue, initial) {
6697
- // delay insert hooks for component root nodes, invoke them after the
6698
- // element is really inserted
6699
- if (isTrue(initial) && isDef(vnode.parent)) {
6700
- vnode.parent.data.pendingInsert = queue;
6701
- } else {
6702
- for (var i = 0; i < queue.length; ++i) {
6703
- queue[i].data.hook.insert(queue[i]);
6704
- }
6705
- }
6706
- }
6707
-
6708
- var hydrationBailed = false;
6709
- // list of modules that can skip create hook during hydration because they
6710
- // are already rendered on the client or has no need for initialization
6711
- // Note: style is excluded because it relies on initial clone for future
6712
- // deep updates (#7063).
6713
- var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
6714
-
6715
- // Note: this is a browser-only function so we can assume elms are DOM nodes.
6716
- function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {
6717
- var i;
6718
- var tag = vnode.tag;
6719
- var data = vnode.data;
6720
- var children = vnode.children;
6721
- inVPre = inVPre || (data && data.pre);
6722
- vnode.elm = elm;
6723
-
6724
- if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
6725
- vnode.isAsyncPlaceholder = true;
6726
- return true
6727
- }
6728
- // assert node match
6729
- if (process.env.NODE_ENV !== 'production') {
6730
- if (!assertNodeMatch(elm, vnode, inVPre)) {
6731
- return false
6732
- }
6733
- }
6734
- if (isDef(data)) {
6735
- if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }
6736
- if (isDef(i = vnode.componentInstance)) {
6737
- // child component. it should have hydrated its own tree.
6738
- initComponent(vnode, insertedVnodeQueue);
6739
- return true
6740
- }
6741
- }
6742
- if (isDef(tag)) {
6743
- if (isDef(children)) {
6744
- // empty element, allow client to pick up and populate children
6745
- if (!elm.hasChildNodes()) {
6746
- createChildren(vnode, children, insertedVnodeQueue);
6747
- } else {
6748
- // v-html and domProps: innerHTML
6749
- if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {
6750
- if (i !== elm.innerHTML) {
6751
- /* istanbul ignore if */
6752
- if (process.env.NODE_ENV !== 'production' &&
6753
- typeof console !== 'undefined' &&
6754
- !hydrationBailed
6755
- ) {
6756
- hydrationBailed = true;
6757
- console.warn('Parent: ', elm);
6758
- console.warn('server innerHTML: ', i);
6759
- console.warn('client innerHTML: ', elm.innerHTML);
6760
- }
6761
- return false
6762
- }
6763
- } else {
6764
- // iterate and compare children lists
6765
- var childrenMatch = true;
6766
- var childNode = elm.firstChild;
6767
- for (var i$1 = 0; i$1 < children.length; i$1++) {
6768
- if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {
6769
- childrenMatch = false;
6770
- break
6771
- }
6772
- childNode = childNode.nextSibling;
6773
- }
6774
- // if childNode is not null, it means the actual childNodes list is
6775
- // longer than the virtual children list.
6776
- if (!childrenMatch || childNode) {
6777
- /* istanbul ignore if */
6778
- if (process.env.NODE_ENV !== 'production' &&
6779
- typeof console !== 'undefined' &&
6780
- !hydrationBailed
6781
- ) {
6782
- hydrationBailed = true;
6783
- console.warn('Parent: ', elm);
6784
- console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
6785
- }
6786
- return false
6787
- }
6788
- }
6789
- }
6790
- }
6791
- if (isDef(data)) {
6792
- var fullInvoke = false;
6793
- for (var key in data) {
6794
- if (!isRenderedModule(key)) {
6795
- fullInvoke = true;
6796
- invokeCreateHooks(vnode, insertedVnodeQueue);
6797
- break
6798
- }
6799
- }
6800
- if (!fullInvoke && data['class']) {
6801
- // ensure collecting deps for deep class bindings for future updates
6802
- traverse(data['class']);
6803
- }
6804
- }
6805
- } else if (elm.data !== vnode.text) {
6806
- elm.data = vnode.text;
6807
- }
6808
- return true
6809
- }
6810
-
6811
- function assertNodeMatch (node, vnode, inVPre) {
6812
- if (isDef(vnode.tag)) {
6813
- return vnode.tag.indexOf('vue-component') === 0 || (
6814
- !isUnknownElement$$1(vnode, inVPre) &&
6815
- vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())
6816
- )
6817
- } else {
6818
- return node.nodeType === (vnode.isComment ? 8 : 3)
6819
- }
6820
- }
6821
-
6822
- return function patch (oldVnode, vnode, hydrating, removeOnly) {
6823
- if (isUndef(vnode)) {
6824
- if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }
6825
- return
6826
- }
6827
-
6828
- var isInitialPatch = false;
6829
- var insertedVnodeQueue = [];
6830
-
6831
- if (isUndef(oldVnode)) {
6832
- // empty mount (likely as component), create new root element
6833
- isInitialPatch = true;
6834
- createElm(vnode, insertedVnodeQueue);
6835
- } else {
6836
- var isRealElement = isDef(oldVnode.nodeType);
6837
- if (!isRealElement && sameVnode(oldVnode, vnode)) {
6838
- // patch existing root node
6839
- patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
6840
- } else {
6841
- if (isRealElement) {
6842
- // mounting to a real element
6843
- // check if this is server-rendered content and if we can perform
6844
- // a successful hydration.
6845
- if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
6846
- oldVnode.removeAttribute(SSR_ATTR);
6847
- hydrating = true;
6848
- }
6849
- if (isTrue(hydrating)) {
6850
- if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
6851
- invokeInsertHook(vnode, insertedVnodeQueue, true);
6852
- return oldVnode
6853
- } else if (process.env.NODE_ENV !== 'production') {
6854
- warn(
6855
- 'The client-side rendered virtual DOM tree is not matching ' +
6856
- 'server-rendered content. This is likely caused by incorrect ' +
6857
- 'HTML markup, for example nesting block-level elements inside ' +
6858
- '<p>, or missing <tbody>. Bailing hydration and performing ' +
6859
- 'full client-side render.'
6860
- );
6861
- }
6862
- }
6863
- // either not server-rendered, or hydration failed.
6864
- // create an empty node and replace it
6865
- oldVnode = emptyNodeAt(oldVnode);
6866
- }
6867
-
6868
- // replacing existing element
6869
- var oldElm = oldVnode.elm;
6870
- var parentElm = nodeOps.parentNode(oldElm);
6871
-
6872
- // create new node
6873
- createElm(
6874
- vnode,
6875
- insertedVnodeQueue,
6876
- // extremely rare edge case: do not insert if old element is in a
6877
- // leaving transition. Only happens when combining transition +
6878
- // keep-alive + HOCs. (#4590)
6879
- oldElm._leaveCb ? null : parentElm,
6880
- nodeOps.nextSibling(oldElm)
6881
- );
6882
-
6883
- // update parent placeholder node element, recursively
6884
- if (isDef(vnode.parent)) {
6885
- var ancestor = vnode.parent;
6886
- var patchable = isPatchable(vnode);
6887
- while (ancestor) {
6888
- for (var i = 0; i < cbs.destroy.length; ++i) {
6889
- cbs.destroy[i](ancestor);
6890
- }
6891
- ancestor.elm = vnode.elm;
6892
- if (patchable) {
6893
- for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {
6894
- cbs.create[i$1](emptyNode, ancestor);
6895
- }
6896
- // #6513
6897
- // invoke insert hooks that may have been merged by create hooks.
6898
- // e.g. for directives that uses the "inserted" hook.
6899
- var insert = ancestor.data.hook.insert;
6900
- if (insert.merged) {
6901
- // start at index 1 to avoid re-invoking component mounted hook
6902
- for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {
6903
- insert.fns[i$2]();
6904
- }
6905
- }
6906
- } else {
6907
- registerRef(ancestor);
6908
- }
6909
- ancestor = ancestor.parent;
6910
- }
6911
- }
6912
-
6913
- // destroy old node
6914
- if (isDef(parentElm)) {
6915
- removeVnodes(parentElm, [oldVnode], 0, 0);
6916
- } else if (isDef(oldVnode.tag)) {
6917
- invokeDestroyHook(oldVnode);
6918
- }
6919
- }
6920
- }
6921
-
6922
- invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
6923
- return vnode.elm
6924
- }
6925
- }
6926
-
6927
- /* */
6928
-
6929
- var directives = {
6930
- create: updateDirectives,
6931
- update: updateDirectives,
6932
- destroy: function unbindDirectives (vnode) {
6933
- updateDirectives(vnode, emptyNode);
6934
- }
6935
- };
6936
-
6937
- function updateDirectives (oldVnode, vnode) {
6938
- if (oldVnode.data.directives || vnode.data.directives) {
6939
- _update(oldVnode, vnode);
6940
- }
6941
- }
6942
-
6943
- function _update (oldVnode, vnode) {
6944
- var isCreate = oldVnode === emptyNode;
6945
- var isDestroy = vnode === emptyNode;
6946
- var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);
6947
- var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);
6948
-
6949
- var dirsWithInsert = [];
6950
- var dirsWithPostpatch = [];
6951
-
6952
- var key, oldDir, dir;
6953
- for (key in newDirs) {
6954
- oldDir = oldDirs[key];
6955
- dir = newDirs[key];
6956
- if (!oldDir) {
6957
- // new directive, bind
6958
- callHook$1(dir, 'bind', vnode, oldVnode);
6959
- if (dir.def && dir.def.inserted) {
6960
- dirsWithInsert.push(dir);
6961
- }
6962
- } else {
6963
- // existing directive, update
6964
- dir.oldValue = oldDir.value;
6965
- dir.oldArg = oldDir.arg;
6966
- callHook$1(dir, 'update', vnode, oldVnode);
6967
- if (dir.def && dir.def.componentUpdated) {
6968
- dirsWithPostpatch.push(dir);
6969
- }
6970
- }
6971
- }
6972
-
6973
- if (dirsWithInsert.length) {
6974
- var callInsert = function () {
6975
- for (var i = 0; i < dirsWithInsert.length; i++) {
6976
- callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);
6977
- }
6978
- };
6979
- if (isCreate) {
6980
- mergeVNodeHook(vnode, 'insert', callInsert);
6981
- } else {
6982
- callInsert();
6983
- }
6984
- }
6985
-
6986
- if (dirsWithPostpatch.length) {
6987
- mergeVNodeHook(vnode, 'postpatch', function () {
6988
- for (var i = 0; i < dirsWithPostpatch.length; i++) {
6989
- callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
6990
- }
6991
- });
6992
- }
6993
-
6994
- if (!isCreate) {
6995
- for (key in oldDirs) {
6996
- if (!newDirs[key]) {
6997
- // no longer present, unbind
6998
- callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
6999
- }
7000
- }
7001
- }
7002
- }
7003
-
7004
- var emptyModifiers = Object.create(null);
7005
-
7006
- function normalizeDirectives$1 (
7007
- dirs,
7008
- vm
7009
- ) {
7010
- var res = Object.create(null);
7011
- if (!dirs) {
7012
- // $flow-disable-line
7013
- return res
7014
- }
7015
- var i, dir;
7016
- for (i = 0; i < dirs.length; i++) {
7017
- dir = dirs[i];
7018
- if (!dir.modifiers) {
7019
- // $flow-disable-line
7020
- dir.modifiers = emptyModifiers;
7021
- }
7022
- res[getRawDirName(dir)] = dir;
7023
- dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);
7024
- }
7025
- // $flow-disable-line
7026
- return res
7027
- }
7028
-
7029
- function getRawDirName (dir) {
7030
- return dir.rawName || ((dir.name) + "." + (Object.keys(dir.modifiers || {}).join('.')))
7031
- }
7032
-
7033
- function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {
7034
- var fn = dir.def && dir.def[hook];
7035
- if (fn) {
7036
- try {
7037
- fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
7038
- } catch (e) {
7039
- handleError(e, vnode.context, ("directive " + (dir.name) + " " + hook + " hook"));
7040
- }
7041
- }
7042
- }
7043
-
7044
- var baseModules = [
7045
- ref,
7046
- directives
7047
- ];
7048
-
7049
- /* */
7050
-
7051
- function updateAttrs (oldVnode, vnode) {
7052
- var opts = vnode.componentOptions;
7053
- if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
7054
- return
7055
- }
7056
- if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
7057
- return
7058
- }
7059
- var key, cur, old;
7060
- var elm = vnode.elm;
7061
- var oldAttrs = oldVnode.data.attrs || {};
7062
- var attrs = vnode.data.attrs || {};
7063
- // clone observed objects, as the user probably wants to mutate it
7064
- if (isDef(attrs.__ob__)) {
7065
- attrs = vnode.data.attrs = extend({}, attrs);
7066
- }
7067
-
7068
- for (key in attrs) {
7069
- cur = attrs[key];
7070
- old = oldAttrs[key];
7071
- if (old !== cur) {
7072
- setAttr(elm, key, cur);
7073
- }
7074
- }
7075
- // #4391: in IE9, setting type can reset value for input[type=radio]
7076
- // #6666: IE/Edge forces progress value down to 1 before setting a max
7077
- /* istanbul ignore if */
7078
- if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
7079
- setAttr(elm, 'value', attrs.value);
7080
- }
7081
- for (key in oldAttrs) {
7082
- if (isUndef(attrs[key])) {
7083
- if (isXlink(key)) {
7084
- elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
7085
- } else if (!isEnumeratedAttr(key)) {
7086
- elm.removeAttribute(key);
7087
- }
7088
- }
7089
- }
7090
- }
7091
-
7092
- function setAttr (el, key, value) {
7093
- if (el.tagName.indexOf('-') > -1) {
7094
- baseSetAttr(el, key, value);
7095
- } else if (isBooleanAttr(key)) {
7096
- // set attribute for blank value
7097
- // e.g. <option disabled>Select one</option>
7098
- if (isFalsyAttrValue(value)) {
7099
- el.removeAttribute(key);
7100
- } else {
7101
- // technically allowfullscreen is a boolean attribute for <iframe>,
7102
- // but Flash expects a value of "true" when used on <embed> tag
7103
- value = key === 'allowfullscreen' && el.tagName === 'EMBED'
7104
- ? 'true'
7105
- : key;
7106
- el.setAttribute(key, value);
7107
- }
7108
- } else if (isEnumeratedAttr(key)) {
7109
- el.setAttribute(key, convertEnumeratedValue(key, value));
7110
- } else if (isXlink(key)) {
7111
- if (isFalsyAttrValue(value)) {
7112
- el.removeAttributeNS(xlinkNS, getXlinkProp(key));
7113
- } else {
7114
- el.setAttributeNS(xlinkNS, key, value);
7115
- }
7116
- } else {
7117
- baseSetAttr(el, key, value);
7118
- }
7119
- }
7120
-
7121
- function baseSetAttr (el, key, value) {
7122
- if (isFalsyAttrValue(value)) {
7123
- el.removeAttribute(key);
7124
- } else {
7125
- // #7138: IE10 & 11 fires input event when setting placeholder on
7126
- // <textarea>... block the first input event and remove the blocker
7127
- // immediately.
7128
- /* istanbul ignore if */
7129
- if (
7130
- isIE && !isIE9 &&
7131
- el.tagName === 'TEXTAREA' &&
7132
- key === 'placeholder' && value !== '' && !el.__ieph
7133
- ) {
7134
- var blocker = function (e) {
7135
- e.stopImmediatePropagation();
7136
- el.removeEventListener('input', blocker);
7137
- };
7138
- el.addEventListener('input', blocker);
7139
- // $flow-disable-line
7140
- el.__ieph = true; /* IE placeholder patched */
7141
- }
7142
- el.setAttribute(key, value);
7143
- }
7144
- }
7145
-
7146
- var attrs = {
7147
- create: updateAttrs,
7148
- update: updateAttrs
7149
- };
7150
-
7151
- /* */
7152
-
7153
- function updateClass (oldVnode, vnode) {
7154
- var el = vnode.elm;
7155
- var data = vnode.data;
7156
- var oldData = oldVnode.data;
7157
- if (
7158
- isUndef(data.staticClass) &&
7159
- isUndef(data.class) && (
7160
- isUndef(oldData) || (
7161
- isUndef(oldData.staticClass) &&
7162
- isUndef(oldData.class)
7163
- )
7164
- )
7165
- ) {
7166
- return
7167
- }
7168
-
7169
- var cls = genClassForVnode(vnode);
7170
-
7171
- // handle transition classes
7172
- var transitionClass = el._transitionClasses;
7173
- if (isDef(transitionClass)) {
7174
- cls = concat(cls, stringifyClass(transitionClass));
7175
- }
7176
-
7177
- // set the class
7178
- if (cls !== el._prevClass) {
7179
- el.setAttribute('class', cls);
7180
- el._prevClass = cls;
7181
- }
7182
- }
7183
-
7184
- var klass = {
7185
- create: updateClass,
7186
- update: updateClass
7187
- };
7188
-
7189
- /* */
7190
-
7191
- var validDivisionCharRE = /[\w).+\-_$\]]/;
7192
-
7193
- function parseFilters (exp) {
7194
- var inSingle = false;
7195
- var inDouble = false;
7196
- var inTemplateString = false;
7197
- var inRegex = false;
7198
- var curly = 0;
7199
- var square = 0;
7200
- var paren = 0;
7201
- var lastFilterIndex = 0;
7202
- var c, prev, i, expression, filters;
7203
-
7204
- for (i = 0; i < exp.length; i++) {
7205
- prev = c;
7206
- c = exp.charCodeAt(i);
7207
- if (inSingle) {
7208
- if (c === 0x27 && prev !== 0x5C) { inSingle = false; }
7209
- } else if (inDouble) {
7210
- if (c === 0x22 && prev !== 0x5C) { inDouble = false; }
7211
- } else if (inTemplateString) {
7212
- if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }
7213
- } else if (inRegex) {
7214
- if (c === 0x2f && prev !== 0x5C) { inRegex = false; }
7215
- } else if (
7216
- c === 0x7C && // pipe
7217
- exp.charCodeAt(i + 1) !== 0x7C &&
7218
- exp.charCodeAt(i - 1) !== 0x7C &&
7219
- !curly && !square && !paren
7220
- ) {
7221
- if (expression === undefined) {
7222
- // first filter, end of expression
7223
- lastFilterIndex = i + 1;
7224
- expression = exp.slice(0, i).trim();
7225
- } else {
7226
- pushFilter();
7227
- }
7228
- } else {
7229
- switch (c) {
7230
- case 0x22: inDouble = true; break // "
7231
- case 0x27: inSingle = true; break // '
7232
- case 0x60: inTemplateString = true; break // `
7233
- case 0x28: paren++; break // (
7234
- case 0x29: paren--; break // )
7235
- case 0x5B: square++; break // [
7236
- case 0x5D: square--; break // ]
7237
- case 0x7B: curly++; break // {
7238
- case 0x7D: curly--; break // }
7239
- }
7240
- if (c === 0x2f) { // /
7241
- var j = i - 1;
7242
- var p = (void 0);
7243
- // find first non-whitespace prev char
7244
- for (; j >= 0; j--) {
7245
- p = exp.charAt(j);
7246
- if (p !== ' ') { break }
7247
- }
7248
- if (!p || !validDivisionCharRE.test(p)) {
7249
- inRegex = true;
7250
- }
7251
- }
7252
- }
7253
- }
7254
-
7255
- if (expression === undefined) {
7256
- expression = exp.slice(0, i).trim();
7257
- } else if (lastFilterIndex !== 0) {
7258
- pushFilter();
7259
- }
7260
-
7261
- function pushFilter () {
7262
- (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
7263
- lastFilterIndex = i + 1;
7264
- }
7265
-
7266
- if (filters) {
7267
- for (i = 0; i < filters.length; i++) {
7268
- expression = wrapFilter(expression, filters[i]);
7269
- }
7270
- }
7271
-
7272
- return expression
7273
- }
7274
-
7275
- function wrapFilter (exp, filter) {
7276
- var i = filter.indexOf('(');
7277
- if (i < 0) {
7278
- // _f: resolveFilter
7279
- return ("_f(\"" + filter + "\")(" + exp + ")")
7280
- } else {
7281
- var name = filter.slice(0, i);
7282
- var args = filter.slice(i + 1);
7283
- return ("_f(\"" + name + "\")(" + exp + (args !== ')' ? ',' + args : args))
7284
- }
7285
- }
7286
-
7287
- /* */
7288
-
7289
-
7290
-
7291
- /* eslint-disable no-unused-vars */
7292
- function baseWarn (msg, range) {
7293
- console.error(("[Vue compiler]: " + msg));
7294
- }
7295
- /* eslint-enable no-unused-vars */
7296
-
7297
- function pluckModuleFunction (
7298
- modules,
7299
- key
7300
- ) {
7301
- return modules
7302
- ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })
7303
- : []
7304
- }
7305
-
7306
- function addProp (el, name, value, range, dynamic) {
7307
- (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
7308
- el.plain = false;
7309
- }
7310
-
7311
- function addAttr (el, name, value, range, dynamic) {
7312
- var attrs = dynamic
7313
- ? (el.dynamicAttrs || (el.dynamicAttrs = []))
7314
- : (el.attrs || (el.attrs = []));
7315
- attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
7316
- el.plain = false;
7317
- }
7318
-
7319
- // add a raw attr (use this in preTransforms)
7320
- function addRawAttr (el, name, value, range) {
7321
- el.attrsMap[name] = value;
7322
- el.attrsList.push(rangeSetItem({ name: name, value: value }, range));
7323
- }
7324
-
7325
- function addDirective (
7326
- el,
7327
- name,
7328
- rawName,
7329
- value,
7330
- arg,
7331
- isDynamicArg,
7332
- modifiers,
7333
- range
7334
- ) {
7335
- (el.directives || (el.directives = [])).push(rangeSetItem({
7336
- name: name,
7337
- rawName: rawName,
7338
- value: value,
7339
- arg: arg,
7340
- isDynamicArg: isDynamicArg,
7341
- modifiers: modifiers
7342
- }, range));
7343
- el.plain = false;
7344
- }
7345
-
7346
- function prependModifierMarker (symbol, name, dynamic) {
7347
- return dynamic
7348
- ? ("_p(" + name + ",\"" + symbol + "\")")
7349
- : symbol + name // mark the event as captured
7350
- }
7351
-
7352
- function addHandler (
7353
- el,
7354
- name,
7355
- value,
7356
- modifiers,
7357
- important,
7358
- warn,
7359
- range,
7360
- dynamic
7361
- ) {
7362
- modifiers = modifiers || emptyObject;
7363
- // warn prevent and passive modifier
7364
- /* istanbul ignore if */
7365
- if (
7366
- process.env.NODE_ENV !== 'production' && warn &&
7367
- modifiers.prevent && modifiers.passive
7368
- ) {
7369
- warn(
7370
- 'passive and prevent can\'t be used together. ' +
7371
- 'Passive handler can\'t prevent default event.',
7372
- range
7373
- );
7374
- }
7375
-
7376
- // normalize click.right and click.middle since they don't actually fire
7377
- // this is technically browser-specific, but at least for now browsers are
7378
- // the only target envs that have right/middle clicks.
7379
- if (modifiers.right) {
7380
- if (dynamic) {
7381
- name = "(" + name + ")==='click'?'contextmenu':(" + name + ")";
7382
- } else if (name === 'click') {
7383
- name = 'contextmenu';
7384
- delete modifiers.right;
7385
- }
7386
- } else if (modifiers.middle) {
7387
- if (dynamic) {
7388
- name = "(" + name + ")==='click'?'mouseup':(" + name + ")";
7389
- } else if (name === 'click') {
7390
- name = 'mouseup';
7391
- }
7392
- }
7393
-
7394
- // check capture modifier
7395
- if (modifiers.capture) {
7396
- delete modifiers.capture;
7397
- name = prependModifierMarker('!', name, dynamic);
7398
- }
7399
- if (modifiers.once) {
7400
- delete modifiers.once;
7401
- name = prependModifierMarker('~', name, dynamic);
7402
- }
7403
- /* istanbul ignore if */
7404
- if (modifiers.passive) {
7405
- delete modifiers.passive;
7406
- name = prependModifierMarker('&', name, dynamic);
7407
- }
7408
-
7409
- var events;
7410
- if (modifiers.native) {
7411
- delete modifiers.native;
7412
- events = el.nativeEvents || (el.nativeEvents = {});
7413
- } else {
7414
- events = el.events || (el.events = {});
7415
- }
7416
-
7417
- var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);
7418
- if (modifiers !== emptyObject) {
7419
- newHandler.modifiers = modifiers;
7420
- }
7421
-
7422
- var handlers = events[name];
7423
- /* istanbul ignore if */
7424
- if (Array.isArray(handlers)) {
7425
- important ? handlers.unshift(newHandler) : handlers.push(newHandler);
7426
- } else if (handlers) {
7427
- events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
7428
- } else {
7429
- events[name] = newHandler;
7430
- }
7431
-
7432
- el.plain = false;
7433
- }
7434
-
7435
- function getRawBindingAttr (
7436
- el,
7437
- name
7438
- ) {
7439
- return el.rawAttrsMap[':' + name] ||
7440
- el.rawAttrsMap['v-bind:' + name] ||
7441
- el.rawAttrsMap[name]
7442
- }
7443
-
7444
- function getBindingAttr (
7445
- el,
7446
- name,
7447
- getStatic
7448
- ) {
7449
- var dynamicValue =
7450
- getAndRemoveAttr(el, ':' + name) ||
7451
- getAndRemoveAttr(el, 'v-bind:' + name);
7452
- if (dynamicValue != null) {
7453
- return parseFilters(dynamicValue)
7454
- } else if (getStatic !== false) {
7455
- var staticValue = getAndRemoveAttr(el, name);
7456
- if (staticValue != null) {
7457
- return JSON.stringify(staticValue)
7458
- }
7459
- }
7460
- }
7461
-
7462
- // note: this only removes the attr from the Array (attrsList) so that it
7463
- // doesn't get processed by processAttrs.
7464
- // By default it does NOT remove it from the map (attrsMap) because the map is
7465
- // needed during codegen.
7466
- function getAndRemoveAttr (
7467
- el,
7468
- name,
7469
- removeFromMap
7470
- ) {
7471
- var val;
7472
- if ((val = el.attrsMap[name]) != null) {
7473
- var list = el.attrsList;
7474
- for (var i = 0, l = list.length; i < l; i++) {
7475
- if (list[i].name === name) {
7476
- list.splice(i, 1);
7477
- break
7478
- }
7479
- }
7480
- }
7481
- if (removeFromMap) {
7482
- delete el.attrsMap[name];
7483
- }
7484
- return val
7485
- }
7486
-
7487
- function getAndRemoveAttrByRegex (
7488
- el,
7489
- name
7490
- ) {
7491
- var list = el.attrsList;
7492
- for (var i = 0, l = list.length; i < l; i++) {
7493
- var attr = list[i];
7494
- if (name.test(attr.name)) {
7495
- list.splice(i, 1);
7496
- return attr
7497
- }
7498
- }
7499
- }
7500
-
7501
- function rangeSetItem (
7502
- item,
7503
- range
7504
- ) {
7505
- if (range) {
7506
- if (range.start != null) {
7507
- item.start = range.start;
7508
- }
7509
- if (range.end != null) {
7510
- item.end = range.end;
7511
- }
7512
- }
7513
- return item
7514
- }
7515
-
7516
- /* */
7517
-
7518
- /**
7519
- * Cross-platform code generation for component v-model
7520
- */
7521
- function genComponentModel (
7522
- el,
7523
- value,
7524
- modifiers
7525
- ) {
7526
- var ref = modifiers || {};
7527
- var number = ref.number;
7528
- var trim = ref.trim;
7529
-
7530
- var baseValueExpression = '$$v';
7531
- var valueExpression = baseValueExpression;
7532
- if (trim) {
7533
- valueExpression =
7534
- "(typeof " + baseValueExpression + " === 'string'" +
7535
- "? " + baseValueExpression + ".trim()" +
7536
- ": " + baseValueExpression + ")";
7537
- }
7538
- if (number) {
7539
- valueExpression = "_n(" + valueExpression + ")";
7540
- }
7541
- var assignment = genAssignmentCode(value, valueExpression);
7542
-
7543
- el.model = {
7544
- value: ("(" + value + ")"),
7545
- expression: JSON.stringify(value),
7546
- callback: ("function (" + baseValueExpression + ") {" + assignment + "}")
7547
- };
7548
- }
7549
-
7550
- /**
7551
- * Cross-platform codegen helper for generating v-model value assignment code.
7552
- */
7553
- function genAssignmentCode (
7554
- value,
7555
- assignment
7556
- ) {
7557
- var res = parseModel(value);
7558
- if (res.key === null) {
7559
- return (value + "=" + assignment)
7560
- } else {
7561
- return ("$set(" + (res.exp) + ", " + (res.key) + ", " + assignment + ")")
7562
- }
7563
- }
7564
-
7565
- /**
7566
- * Parse a v-model expression into a base path and a final key segment.
7567
- * Handles both dot-path and possible square brackets.
7568
- *
7569
- * Possible cases:
7570
- *
7571
- * - test
7572
- * - test[key]
7573
- * - test[test1[key]]
7574
- * - test["a"][key]
7575
- * - xxx.test[a[a].test1[key]]
7576
- * - test.xxx.a["asa"][test1[key]]
7577
- *
7578
- */
7579
-
7580
- var len, str, chr, index$1, expressionPos, expressionEndPos;
7581
-
7582
-
7583
-
7584
- function parseModel (val) {
7585
- // Fix https://github.com/vuejs/vue/pull/7730
7586
- // allow v-model="obj.val " (trailing whitespace)
7587
- val = val.trim();
7588
- len = val.length;
7589
-
7590
- if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
7591
- index$1 = val.lastIndexOf('.');
7592
- if (index$1 > -1) {
7593
- return {
7594
- exp: val.slice(0, index$1),
7595
- key: '"' + val.slice(index$1 + 1) + '"'
7596
- }
7597
- } else {
7598
- return {
7599
- exp: val,
7600
- key: null
7601
- }
7602
- }
7603
- }
7604
-
7605
- str = val;
7606
- index$1 = expressionPos = expressionEndPos = 0;
7607
-
7608
- while (!eof()) {
7609
- chr = next();
7610
- /* istanbul ignore if */
7611
- if (isStringStart(chr)) {
7612
- parseString(chr);
7613
- } else if (chr === 0x5B) {
7614
- parseBracket(chr);
7615
- }
7616
- }
7617
-
7618
- return {
7619
- exp: val.slice(0, expressionPos),
7620
- key: val.slice(expressionPos + 1, expressionEndPos)
7621
- }
7622
- }
7623
-
7624
- function next () {
7625
- return str.charCodeAt(++index$1)
7626
- }
7627
-
7628
- function eof () {
7629
- return index$1 >= len
7630
- }
7631
-
7632
- function isStringStart (chr) {
7633
- return chr === 0x22 || chr === 0x27
7634
- }
7635
-
7636
- function parseBracket (chr) {
7637
- var inBracket = 1;
7638
- expressionPos = index$1;
7639
- while (!eof()) {
7640
- chr = next();
7641
- if (isStringStart(chr)) {
7642
- parseString(chr);
7643
- continue
7644
- }
7645
- if (chr === 0x5B) { inBracket++; }
7646
- if (chr === 0x5D) { inBracket--; }
7647
- if (inBracket === 0) {
7648
- expressionEndPos = index$1;
7649
- break
7650
- }
7651
- }
7652
- }
7653
-
7654
- function parseString (chr) {
7655
- var stringQuote = chr;
7656
- while (!eof()) {
7657
- chr = next();
7658
- if (chr === stringQuote) {
7659
- break
7660
- }
7661
- }
7662
- }
7663
-
7664
- /* */
7665
-
7666
- var warn$1;
7667
-
7668
- // in some cases, the event used has to be determined at runtime
7669
- // so we used some reserved tokens during compile.
7670
- var RANGE_TOKEN = '__r';
7671
- var CHECKBOX_RADIO_TOKEN = '__c';
7672
-
7673
- function model (
7674
- el,
7675
- dir,
7676
- _warn
7677
- ) {
7678
- warn$1 = _warn;
7679
- var value = dir.value;
7680
- var modifiers = dir.modifiers;
7681
- var tag = el.tag;
7682
- var type = el.attrsMap.type;
7683
-
7684
- if (process.env.NODE_ENV !== 'production') {
7685
- // inputs with type="file" are read only and setting the input's
7686
- // value will throw an error.
7687
- if (tag === 'input' && type === 'file') {
7688
- warn$1(
7689
- "<" + (el.tag) + " v-model=\"" + value + "\" type=\"file\">:\n" +
7690
- "File inputs are read only. Use a v-on:change listener instead.",
7691
- el.rawAttrsMap['v-model']
7692
- );
7693
- }
7694
- }
7695
-
7696
- if (el.component) {
7697
- genComponentModel(el, value, modifiers);
7698
- // component v-model doesn't need extra runtime
7699
- return false
7700
- } else if (tag === 'select') {
7701
- genSelect(el, value, modifiers);
7702
- } else if (tag === 'input' && type === 'checkbox') {
7703
- genCheckboxModel(el, value, modifiers);
7704
- } else if (tag === 'input' && type === 'radio') {
7705
- genRadioModel(el, value, modifiers);
7706
- } else if (tag === 'input' || tag === 'textarea') {
7707
- genDefaultModel(el, value, modifiers);
7708
- } else if (!config.isReservedTag(tag)) {
7709
- genComponentModel(el, value, modifiers);
7710
- // component v-model doesn't need extra runtime
7711
- return false
7712
- } else if (process.env.NODE_ENV !== 'production') {
7713
- warn$1(
7714
- "<" + (el.tag) + " v-model=\"" + value + "\">: " +
7715
- "v-model is not supported on this element type. " +
7716
- 'If you are working with contenteditable, it\'s recommended to ' +
7717
- 'wrap a library dedicated for that purpose inside a custom component.',
7718
- el.rawAttrsMap['v-model']
7719
- );
7720
- }
7721
-
7722
- // ensure runtime directive metadata
7723
- return true
7724
- }
7725
-
7726
- function genCheckboxModel (
7727
- el,
7728
- value,
7729
- modifiers
7730
- ) {
7731
- var number = modifiers && modifiers.number;
7732
- var valueBinding = getBindingAttr(el, 'value') || 'null';
7733
- var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
7734
- var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
7735
- addProp(el, 'checked',
7736
- "Array.isArray(" + value + ")" +
7737
- "?_i(" + value + "," + valueBinding + ")>-1" + (
7738
- trueValueBinding === 'true'
7739
- ? (":(" + value + ")")
7740
- : (":_q(" + value + "," + trueValueBinding + ")")
7741
- )
7742
- );
7743
- addHandler(el, 'change',
7744
- "var $$a=" + value + "," +
7745
- '$$el=$event.target,' +
7746
- "$$c=$$el.checked?(" + trueValueBinding + "):(" + falseValueBinding + ");" +
7747
- 'if(Array.isArray($$a)){' +
7748
- "var $$v=" + (number ? '_n(' + valueBinding + ')' : valueBinding) + "," +
7749
- '$$i=_i($$a,$$v);' +
7750
- "if($$el.checked){$$i<0&&(" + (genAssignmentCode(value, '$$a.concat([$$v])')) + ")}" +
7751
- "else{$$i>-1&&(" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + ")}" +
7752
- "}else{" + (genAssignmentCode(value, '$$c')) + "}",
7753
- null, true
7754
- );
7755
- }
7756
-
7757
- function genRadioModel (
7758
- el,
7759
- value,
7760
- modifiers
7761
- ) {
7762
- var number = modifiers && modifiers.number;
7763
- var valueBinding = getBindingAttr(el, 'value') || 'null';
7764
- valueBinding = number ? ("_n(" + valueBinding + ")") : valueBinding;
7765
- addProp(el, 'checked', ("_q(" + value + "," + valueBinding + ")"));
7766
- addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
7767
- }
7768
-
7769
- function genSelect (
7770
- el,
7771
- value,
7772
- modifiers
7773
- ) {
7774
- var number = modifiers && modifiers.number;
7775
- var selectedVal = "Array.prototype.filter" +
7776
- ".call($event.target.options,function(o){return o.selected})" +
7777
- ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" +
7778
- "return " + (number ? '_n(val)' : 'val') + "})";
7779
-
7780
- var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
7781
- var code = "var $$selectedVal = " + selectedVal + ";";
7782
- code = code + " " + (genAssignmentCode(value, assignment));
7783
- addHandler(el, 'change', code, null, true);
7784
- }
7785
-
7786
- function genDefaultModel (
7787
- el,
7788
- value,
7789
- modifiers
7790
- ) {
7791
- var type = el.attrsMap.type;
7792
-
7793
- // warn if v-bind:value conflicts with v-model
7794
- // except for inputs with v-bind:type
7795
- if (process.env.NODE_ENV !== 'production') {
7796
- var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
7797
- var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
7798
- if (value$1 && !typeBinding) {
7799
- var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
7800
- warn$1(
7801
- binding + "=\"" + value$1 + "\" conflicts with v-model on the same element " +
7802
- 'because the latter already expands to a value binding internally',
7803
- el.rawAttrsMap[binding]
7804
- );
7805
- }
7806
- }
7807
-
7808
- var ref = modifiers || {};
7809
- var lazy = ref.lazy;
7810
- var number = ref.number;
7811
- var trim = ref.trim;
7812
- var needCompositionGuard = !lazy && type !== 'range';
7813
- var event = lazy
7814
- ? 'change'
7815
- : type === 'range'
7816
- ? RANGE_TOKEN
7817
- : 'input';
7818
-
7819
- var valueExpression = '$event.target.value';
7820
- if (trim) {
7821
- valueExpression = "$event.target.value.trim()";
7822
- }
7823
- if (number) {
7824
- valueExpression = "_n(" + valueExpression + ")";
7825
- }
7826
-
7827
- var code = genAssignmentCode(value, valueExpression);
7828
- if (needCompositionGuard) {
7829
- code = "if($event.target.composing)return;" + code;
7830
- }
7831
-
7832
- addProp(el, 'value', ("(" + value + ")"));
7833
- addHandler(el, event, code, null, true);
7834
- if (trim || number) {
7835
- addHandler(el, 'blur', '$forceUpdate()');
7836
- }
7837
- }
7838
-
7839
- /* */
7840
-
7841
- // normalize v-model event tokens that can only be determined at runtime.
7842
- // it's important to place the event as the first in the array because
7843
- // the whole point is ensuring the v-model callback gets called before
7844
- // user-attached handlers.
7845
- function normalizeEvents (on) {
7846
- /* istanbul ignore if */
7847
- if (isDef(on[RANGE_TOKEN])) {
7848
- // IE input[type=range] only supports `change` event
7849
- var event = isIE ? 'change' : 'input';
7850
- on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);
7851
- delete on[RANGE_TOKEN];
7852
- }
7853
- // This was originally intended to fix #4521 but no longer necessary
7854
- // after 2.5. Keeping it for backwards compat with generated code from < 2.4
7855
- /* istanbul ignore if */
7856
- if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
7857
- on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
7858
- delete on[CHECKBOX_RADIO_TOKEN];
7859
- }
7860
- }
7861
-
7862
- var target$1;
7863
-
7864
- function createOnceHandler$1 (event, handler, capture) {
7865
- var _target = target$1; // save current target element in closure
7866
- return function onceHandler () {
7867
- var res = handler.apply(null, arguments);
7868
- if (res !== null) {
7869
- remove$2(event, onceHandler, capture, _target);
7870
- }
7871
- }
7872
- }
7873
-
7874
- // #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
7875
- // implementation and does not fire microtasks in between event propagation, so
7876
- // safe to exclude.
7877
- var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
7878
-
7879
- function add$1 (
7880
- name,
7881
- handler,
7882
- capture,
7883
- passive
7884
- ) {
7885
- // async edge case #6566: inner click event triggers patch, event handler
7886
- // attached to outer element during patch, and triggered again. This
7887
- // happens because browsers fire microtask ticks between event propagation.
7888
- // the solution is simple: we save the timestamp when a handler is attached,
7889
- // and the handler would only fire if the event passed to it was fired
7890
- // AFTER it was attached.
7891
- if (useMicrotaskFix) {
7892
- var attachedTimestamp = currentFlushTimestamp;
7893
- var original = handler;
7894
- handler = original._wrapper = function (e) {
7895
- if (
7896
- // no bubbling, should always fire.
7897
- // this is just a safety net in case event.timeStamp is unreliable in
7898
- // certain weird environments...
7899
- e.target === e.currentTarget ||
7900
- // event is fired after handler attachment
7901
- e.timeStamp >= attachedTimestamp ||
7902
- // #9462 bail for iOS 9 bug: event.timeStamp is 0 after history.pushState
7903
- e.timeStamp === 0 ||
7904
- // #9448 bail if event is fired in another document in a multi-page
7905
- // electron/nw.js app, since event.timeStamp will be using a different
7906
- // starting reference
7907
- e.target.ownerDocument !== document
7908
- ) {
7909
- return original.apply(this, arguments)
7910
- }
7911
- };
7912
- }
7913
- target$1.addEventListener(
7914
- name,
7915
- handler,
7916
- supportsPassive
7917
- ? { capture: capture, passive: passive }
7918
- : capture
7919
- );
7920
- }
7921
-
7922
- function remove$2 (
7923
- name,
7924
- handler,
7925
- capture,
7926
- _target
7927
- ) {
7928
- (_target || target$1).removeEventListener(
7929
- name,
7930
- handler._wrapper || handler,
7931
- capture
7932
- );
7933
- }
7934
-
7935
- function updateDOMListeners (oldVnode, vnode) {
7936
- if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
7937
- return
7938
- }
7939
- var on = vnode.data.on || {};
7940
- var oldOn = oldVnode.data.on || {};
7941
- target$1 = vnode.elm;
7942
- normalizeEvents(on);
7943
- updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);
7944
- target$1 = undefined;
7945
- }
7946
-
7947
- var events = {
7948
- create: updateDOMListeners,
7949
- update: updateDOMListeners
7950
- };
7951
-
7952
- /* */
7953
-
7954
- var svgContainer;
7955
-
7956
- function updateDOMProps (oldVnode, vnode) {
7957
- if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
7958
- return
7959
- }
7960
- var key, cur;
7961
- var elm = vnode.elm;
7962
- var oldProps = oldVnode.data.domProps || {};
7963
- var props = vnode.data.domProps || {};
7964
- // clone observed objects, as the user probably wants to mutate it
7965
- if (isDef(props.__ob__)) {
7966
- props = vnode.data.domProps = extend({}, props);
7967
- }
7968
-
7969
- for (key in oldProps) {
7970
- if (isUndef(props[key])) {
7971
- elm[key] = '';
7972
- }
7973
- }
7974
- for (key in props) {
7975
- cur = props[key];
7976
- // ignore children if the node has textContent or innerHTML,
7977
- // as these will throw away existing DOM nodes and cause removal errors
7978
- // on subsequent patches (#3360)
7979
- if (key === 'textContent' || key === 'innerHTML') {
7980
- if (vnode.children) { vnode.children.length = 0; }
7981
- if (cur === oldProps[key]) { continue }
7982
- // #6601 work around Chrome version <= 55 bug where single textNode
7983
- // replaced by innerHTML/textContent retains its parentNode property
7984
- if (elm.childNodes.length === 1) {
7985
- elm.removeChild(elm.childNodes[0]);
7986
- }
7987
- }
7988
-
7989
- // skip the update if old and new VDOM state is the same.
7990
- // the only exception is `value` where the DOM value may be temporarily
7991
- // out of sync with VDOM state due to focus, composition and modifiers.
7992
- // This also covers #4521 by skipping the unnecesarry `checked` update.
7993
- if (key !== 'value' && cur === oldProps[key]) {
7994
- continue
7995
- }
7996
-
7997
- if (key === 'value') {
7998
- // store value as _value as well since
7999
- // non-string values will be stringified
8000
- elm._value = cur;
8001
- // avoid resetting cursor position when value is the same
8002
- var strCur = isUndef(cur) ? '' : String(cur);
8003
- if (shouldUpdateValue(elm, strCur)) {
8004
- elm.value = strCur;
8005
- }
8006
- } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {
8007
- // IE doesn't support innerHTML for SVG elements
8008
- svgContainer = svgContainer || document.createElement('div');
8009
- svgContainer.innerHTML = "<svg>" + cur + "</svg>";
8010
- var svg = svgContainer.firstChild;
8011
- while (elm.firstChild) {
8012
- elm.removeChild(elm.firstChild);
8013
- }
8014
- while (svg.firstChild) {
8015
- elm.appendChild(svg.firstChild);
8016
- }
8017
- } else {
8018
- elm[key] = cur;
8019
- }
8020
- }
8021
- }
8022
-
8023
- // check platforms/web/util/attrs.js acceptValue
8024
-
8025
-
8026
- function shouldUpdateValue (elm, checkVal) {
8027
- return (!elm.composing && (
8028
- elm.tagName === 'OPTION' ||
8029
- isNotInFocusAndDirty(elm, checkVal) ||
8030
- isDirtyWithModifiers(elm, checkVal)
8031
- ))
8032
- }
8033
-
8034
- function isNotInFocusAndDirty (elm, checkVal) {
8035
- // return true when textbox (.number and .trim) loses focus and its value is
8036
- // not equal to the updated value
8037
- var notInFocus = true;
8038
- // #6157
8039
- // work around IE bug when accessing document.activeElement in an iframe
8040
- try { notInFocus = document.activeElement !== elm; } catch (e) {}
8041
- return notInFocus && elm.value !== checkVal
8042
- }
8043
-
8044
- function isDirtyWithModifiers (elm, newVal) {
8045
- var value = elm.value;
8046
- var modifiers = elm._vModifiers; // injected by v-model runtime
8047
- if (isDef(modifiers)) {
8048
- if (modifiers.number) {
8049
- return toNumber(value) !== toNumber(newVal)
8050
- }
8051
- if (modifiers.trim) {
8052
- return value.trim() !== newVal.trim()
8053
- }
8054
- }
8055
- return value !== newVal
8056
- }
8057
-
8058
- var domProps = {
8059
- create: updateDOMProps,
8060
- update: updateDOMProps
8061
- };
8062
-
8063
- /* */
8064
-
8065
- var parseStyleText = cached(function (cssText) {
8066
- var res = {};
8067
- var listDelimiter = /;(?![^(]*\))/g;
8068
- var propertyDelimiter = /:(.+)/;
8069
- cssText.split(listDelimiter).forEach(function (item) {
8070
- if (item) {
8071
- var tmp = item.split(propertyDelimiter);
8072
- tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
8073
- }
8074
- });
8075
- return res
8076
- });
8077
-
8078
- // merge static and dynamic style data on the same vnode
8079
- function normalizeStyleData (data) {
8080
- var style = normalizeStyleBinding(data.style);
8081
- // static style is pre-processed into an object during compilation
8082
- // and is always a fresh object, so it's safe to merge into it
8083
- return data.staticStyle
8084
- ? extend(data.staticStyle, style)
8085
- : style
8086
- }
8087
-
8088
- // normalize possible array / string values into Object
8089
- function normalizeStyleBinding (bindingStyle) {
8090
- if (Array.isArray(bindingStyle)) {
8091
- return toObject(bindingStyle)
8092
- }
8093
- if (typeof bindingStyle === 'string') {
8094
- return parseStyleText(bindingStyle)
8095
- }
8096
- return bindingStyle
8097
- }
8098
-
8099
- /**
8100
- * parent component style should be after child's
8101
- * so that parent component's style could override it
8102
- */
8103
- function getStyle (vnode, checkChild) {
8104
- var res = {};
8105
- var styleData;
8106
-
8107
- if (checkChild) {
8108
- var childNode = vnode;
8109
- while (childNode.componentInstance) {
8110
- childNode = childNode.componentInstance._vnode;
8111
- if (
8112
- childNode && childNode.data &&
8113
- (styleData = normalizeStyleData(childNode.data))
8114
- ) {
8115
- extend(res, styleData);
8116
- }
8117
- }
8118
- }
8119
-
8120
- if ((styleData = normalizeStyleData(vnode.data))) {
8121
- extend(res, styleData);
8122
- }
8123
-
8124
- var parentNode = vnode;
8125
- while ((parentNode = parentNode.parent)) {
8126
- if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
8127
- extend(res, styleData);
8128
- }
8129
- }
8130
- return res
8131
- }
8132
-
8133
- /* */
8134
-
8135
- var cssVarRE = /^--/;
8136
- var importantRE = /\s*!important$/;
8137
- var setProp = function (el, name, val) {
8138
- /* istanbul ignore if */
8139
- if (cssVarRE.test(name)) {
8140
- el.style.setProperty(name, val);
8141
- } else if (importantRE.test(val)) {
8142
- el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
8143
- } else {
8144
- var normalizedName = normalize(name);
8145
- if (Array.isArray(val)) {
8146
- // Support values array created by autoprefixer, e.g.
8147
- // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
8148
- // Set them one by one, and the browser will only set those it can recognize
8149
- for (var i = 0, len = val.length; i < len; i++) {
8150
- el.style[normalizedName] = val[i];
8151
- }
8152
- } else {
8153
- el.style[normalizedName] = val;
8154
- }
8155
- }
8156
- };
8157
-
8158
- var vendorNames = ['Webkit', 'Moz', 'ms'];
8159
-
8160
- var emptyStyle;
8161
- var normalize = cached(function (prop) {
8162
- emptyStyle = emptyStyle || document.createElement('div').style;
8163
- prop = camelize(prop);
8164
- if (prop !== 'filter' && (prop in emptyStyle)) {
8165
- return prop
8166
- }
8167
- var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
8168
- for (var i = 0; i < vendorNames.length; i++) {
8169
- var name = vendorNames[i] + capName;
8170
- if (name in emptyStyle) {
8171
- return name
8172
- }
8173
- }
8174
- });
8175
-
8176
- function updateStyle (oldVnode, vnode) {
8177
- var data = vnode.data;
8178
- var oldData = oldVnode.data;
8179
-
8180
- if (isUndef(data.staticStyle) && isUndef(data.style) &&
8181
- isUndef(oldData.staticStyle) && isUndef(oldData.style)
8182
- ) {
8183
- return
8184
- }
8185
-
8186
- var cur, name;
8187
- var el = vnode.elm;
8188
- var oldStaticStyle = oldData.staticStyle;
8189
- var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
8190
-
8191
- // if static style exists, stylebinding already merged into it when doing normalizeStyleData
8192
- var oldStyle = oldStaticStyle || oldStyleBinding;
8193
-
8194
- var style = normalizeStyleBinding(vnode.data.style) || {};
8195
-
8196
- // store normalized style under a different key for next diff
8197
- // make sure to clone it if it's reactive, since the user likely wants
8198
- // to mutate it.
8199
- vnode.data.normalizedStyle = isDef(style.__ob__)
8200
- ? extend({}, style)
8201
- : style;
8202
-
8203
- var newStyle = getStyle(vnode, true);
8204
-
8205
- for (name in oldStyle) {
8206
- if (isUndef(newStyle[name])) {
8207
- setProp(el, name, '');
8208
- }
8209
- }
8210
- for (name in newStyle) {
8211
- cur = newStyle[name];
8212
- if (cur !== oldStyle[name]) {
8213
- // ie9 setting to null has no effect, must use empty string
8214
- setProp(el, name, cur == null ? '' : cur);
8215
- }
8216
- }
8217
- }
8218
-
8219
- var style = {
8220
- create: updateStyle,
8221
- update: updateStyle
8222
- };
8223
-
8224
- /* */
8225
-
8226
- var whitespaceRE = /\s+/;
8227
-
8228
- /**
8229
- * Add class with compatibility for SVG since classList is not supported on
8230
- * SVG elements in IE
8231
- */
8232
- function addClass (el, cls) {
8233
- /* istanbul ignore if */
8234
- if (!cls || !(cls = cls.trim())) {
8235
- return
8236
- }
8237
-
8238
- /* istanbul ignore else */
8239
- if (el.classList) {
8240
- if (cls.indexOf(' ') > -1) {
8241
- cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });
8242
- } else {
8243
- el.classList.add(cls);
8244
- }
8245
- } else {
8246
- var cur = " " + (el.getAttribute('class') || '') + " ";
8247
- if (cur.indexOf(' ' + cls + ' ') < 0) {
8248
- el.setAttribute('class', (cur + cls).trim());
8249
- }
8250
- }
8251
- }
8252
-
8253
- /**
8254
- * Remove class with compatibility for SVG since classList is not supported on
8255
- * SVG elements in IE
8256
- */
8257
- function removeClass (el, cls) {
8258
- /* istanbul ignore if */
8259
- if (!cls || !(cls = cls.trim())) {
8260
- return
8261
- }
8262
-
8263
- /* istanbul ignore else */
8264
- if (el.classList) {
8265
- if (cls.indexOf(' ') > -1) {
8266
- cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });
8267
- } else {
8268
- el.classList.remove(cls);
8269
- }
8270
- if (!el.classList.length) {
8271
- el.removeAttribute('class');
8272
- }
8273
- } else {
8274
- var cur = " " + (el.getAttribute('class') || '') + " ";
8275
- var tar = ' ' + cls + ' ';
8276
- while (cur.indexOf(tar) >= 0) {
8277
- cur = cur.replace(tar, ' ');
8278
- }
8279
- cur = cur.trim();
8280
- if (cur) {
8281
- el.setAttribute('class', cur);
8282
- } else {
8283
- el.removeAttribute('class');
8284
- }
8285
- }
8286
- }
8287
-
8288
- /* */
8289
-
8290
- function resolveTransition (def$$1) {
8291
- if (!def$$1) {
8292
- return
8293
- }
8294
- /* istanbul ignore else */
8295
- if (typeof def$$1 === 'object') {
8296
- var res = {};
8297
- if (def$$1.css !== false) {
8298
- extend(res, autoCssTransition(def$$1.name || 'v'));
8299
- }
8300
- extend(res, def$$1);
8301
- return res
8302
- } else if (typeof def$$1 === 'string') {
8303
- return autoCssTransition(def$$1)
8304
- }
8305
- }
8306
-
8307
- var autoCssTransition = cached(function (name) {
8308
- return {
8309
- enterClass: (name + "-enter"),
8310
- enterToClass: (name + "-enter-to"),
8311
- enterActiveClass: (name + "-enter-active"),
8312
- leaveClass: (name + "-leave"),
8313
- leaveToClass: (name + "-leave-to"),
8314
- leaveActiveClass: (name + "-leave-active")
8315
- }
8316
- });
8317
-
8318
- var hasTransition = inBrowser && !isIE9;
8319
- var TRANSITION = 'transition';
8320
- var ANIMATION = 'animation';
8321
-
8322
- // Transition property/event sniffing
8323
- var transitionProp = 'transition';
8324
- var transitionEndEvent = 'transitionend';
8325
- var animationProp = 'animation';
8326
- var animationEndEvent = 'animationend';
8327
- if (hasTransition) {
8328
- /* istanbul ignore if */
8329
- if (window.ontransitionend === undefined &&
8330
- window.onwebkittransitionend !== undefined
8331
- ) {
8332
- transitionProp = 'WebkitTransition';
8333
- transitionEndEvent = 'webkitTransitionEnd';
8334
- }
8335
- if (window.onanimationend === undefined &&
8336
- window.onwebkitanimationend !== undefined
8337
- ) {
8338
- animationProp = 'WebkitAnimation';
8339
- animationEndEvent = 'webkitAnimationEnd';
8340
- }
8341
- }
8342
-
8343
- // binding to window is necessary to make hot reload work in IE in strict mode
8344
- var raf = inBrowser
8345
- ? window.requestAnimationFrame
8346
- ? window.requestAnimationFrame.bind(window)
8347
- : setTimeout
8348
- : /* istanbul ignore next */ function (fn) { return fn(); };
8349
-
8350
- function nextFrame (fn) {
8351
- raf(function () {
8352
- raf(fn);
8353
- });
8354
- }
8355
-
8356
- function addTransitionClass (el, cls) {
8357
- var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
8358
- if (transitionClasses.indexOf(cls) < 0) {
8359
- transitionClasses.push(cls);
8360
- addClass(el, cls);
8361
- }
8362
- }
8363
-
8364
- function removeTransitionClass (el, cls) {
8365
- if (el._transitionClasses) {
8366
- remove(el._transitionClasses, cls);
8367
- }
8368
- removeClass(el, cls);
8369
- }
8370
-
8371
- function whenTransitionEnds (
8372
- el,
8373
- expectedType,
8374
- cb
8375
- ) {
8376
- var ref = getTransitionInfo(el, expectedType);
8377
- var type = ref.type;
8378
- var timeout = ref.timeout;
8379
- var propCount = ref.propCount;
8380
- if (!type) { return cb() }
8381
- var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
8382
- var ended = 0;
8383
- var end = function () {
8384
- el.removeEventListener(event, onEnd);
8385
- cb();
8386
- };
8387
- var onEnd = function (e) {
8388
- if (e.target === el) {
8389
- if (++ended >= propCount) {
8390
- end();
8391
- }
8392
- }
8393
- };
8394
- setTimeout(function () {
8395
- if (ended < propCount) {
8396
- end();
8397
- }
8398
- }, timeout + 1);
8399
- el.addEventListener(event, onEnd);
8400
- }
8401
-
8402
- var transformRE = /\b(transform|all)(,|$)/;
8403
-
8404
- function getTransitionInfo (el, expectedType) {
8405
- var styles = window.getComputedStyle(el);
8406
- // JSDOM may return undefined for transition properties
8407
- var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
8408
- var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
8409
- var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
8410
- var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
8411
- var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
8412
- var animationTimeout = getTimeout(animationDelays, animationDurations);
8413
-
8414
- var type;
8415
- var timeout = 0;
8416
- var propCount = 0;
8417
- /* istanbul ignore if */
8418
- if (expectedType === TRANSITION) {
8419
- if (transitionTimeout > 0) {
8420
- type = TRANSITION;
8421
- timeout = transitionTimeout;
8422
- propCount = transitionDurations.length;
8423
- }
8424
- } else if (expectedType === ANIMATION) {
8425
- if (animationTimeout > 0) {
8426
- type = ANIMATION;
8427
- timeout = animationTimeout;
8428
- propCount = animationDurations.length;
8429
- }
8430
- } else {
8431
- timeout = Math.max(transitionTimeout, animationTimeout);
8432
- type = timeout > 0
8433
- ? transitionTimeout > animationTimeout
8434
- ? TRANSITION
8435
- : ANIMATION
8436
- : null;
8437
- propCount = type
8438
- ? type === TRANSITION
8439
- ? transitionDurations.length
8440
- : animationDurations.length
8441
- : 0;
8442
- }
8443
- var hasTransform =
8444
- type === TRANSITION &&
8445
- transformRE.test(styles[transitionProp + 'Property']);
8446
- return {
8447
- type: type,
8448
- timeout: timeout,
8449
- propCount: propCount,
8450
- hasTransform: hasTransform
8451
- }
8452
- }
8453
-
8454
- function getTimeout (delays, durations) {
8455
- /* istanbul ignore next */
8456
- while (delays.length < durations.length) {
8457
- delays = delays.concat(delays);
8458
- }
8459
-
8460
- return Math.max.apply(null, durations.map(function (d, i) {
8461
- return toMs(d) + toMs(delays[i])
8462
- }))
8463
- }
8464
-
8465
- // Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
8466
- // in a locale-dependent way, using a comma instead of a dot.
8467
- // If comma is not replaced with a dot, the input will be rounded down (i.e. acting
8468
- // as a floor function) causing unexpected behaviors
8469
- function toMs (s) {
8470
- return Number(s.slice(0, -1).replace(',', '.')) * 1000
8471
- }
8472
-
8473
- /* */
8474
-
8475
- function enter (vnode, toggleDisplay) {
8476
- var el = vnode.elm;
8477
-
8478
- // call leave callback now
8479
- if (isDef(el._leaveCb)) {
8480
- el._leaveCb.cancelled = true;
8481
- el._leaveCb();
8482
- }
8483
-
8484
- var data = resolveTransition(vnode.data.transition);
8485
- if (isUndef(data)) {
8486
- return
8487
- }
8488
-
8489
- /* istanbul ignore if */
8490
- if (isDef(el._enterCb) || el.nodeType !== 1) {
8491
- return
8492
- }
8493
-
8494
- var css = data.css;
8495
- var type = data.type;
8496
- var enterClass = data.enterClass;
8497
- var enterToClass = data.enterToClass;
8498
- var enterActiveClass = data.enterActiveClass;
8499
- var appearClass = data.appearClass;
8500
- var appearToClass = data.appearToClass;
8501
- var appearActiveClass = data.appearActiveClass;
8502
- var beforeEnter = data.beforeEnter;
8503
- var enter = data.enter;
8504
- var afterEnter = data.afterEnter;
8505
- var enterCancelled = data.enterCancelled;
8506
- var beforeAppear = data.beforeAppear;
8507
- var appear = data.appear;
8508
- var afterAppear = data.afterAppear;
8509
- var appearCancelled = data.appearCancelled;
8510
- var duration = data.duration;
8511
-
8512
- // activeInstance will always be the <transition> component managing this
8513
- // transition. One edge case to check is when the <transition> is placed
8514
- // as the root node of a child component. In that case we need to check
8515
- // <transition>'s parent for appear check.
8516
- var context = activeInstance;
8517
- var transitionNode = activeInstance.$vnode;
8518
- while (transitionNode && transitionNode.parent) {
8519
- transitionNode = transitionNode.parent;
8520
- context = transitionNode.context;
8521
- }
8522
-
8523
- var isAppear = !context._isMounted || !vnode.isRootInsert;
8524
-
8525
- if (isAppear && !appear && appear !== '') {
8526
- return
8527
- }
8528
-
8529
- var startClass = isAppear && appearClass
8530
- ? appearClass
8531
- : enterClass;
8532
- var activeClass = isAppear && appearActiveClass
8533
- ? appearActiveClass
8534
- : enterActiveClass;
8535
- var toClass = isAppear && appearToClass
8536
- ? appearToClass
8537
- : enterToClass;
8538
-
8539
- var beforeEnterHook = isAppear
8540
- ? (beforeAppear || beforeEnter)
8541
- : beforeEnter;
8542
- var enterHook = isAppear
8543
- ? (typeof appear === 'function' ? appear : enter)
8544
- : enter;
8545
- var afterEnterHook = isAppear
8546
- ? (afterAppear || afterEnter)
8547
- : afterEnter;
8548
- var enterCancelledHook = isAppear
8549
- ? (appearCancelled || enterCancelled)
8550
- : enterCancelled;
8551
-
8552
- var explicitEnterDuration = toNumber(
8553
- isObject(duration)
8554
- ? duration.enter
8555
- : duration
8556
- );
8557
-
8558
- if (process.env.NODE_ENV !== 'production' && explicitEnterDuration != null) {
8559
- checkDuration(explicitEnterDuration, 'enter', vnode);
8560
- }
8561
-
8562
- var expectsCSS = css !== false && !isIE9;
8563
- var userWantsControl = getHookArgumentsLength(enterHook);
8564
-
8565
- var cb = el._enterCb = once(function () {
8566
- if (expectsCSS) {
8567
- removeTransitionClass(el, toClass);
8568
- removeTransitionClass(el, activeClass);
8569
- }
8570
- if (cb.cancelled) {
8571
- if (expectsCSS) {
8572
- removeTransitionClass(el, startClass);
8573
- }
8574
- enterCancelledHook && enterCancelledHook(el);
8575
- } else {
8576
- afterEnterHook && afterEnterHook(el);
8577
- }
8578
- el._enterCb = null;
8579
- });
8580
-
8581
- if (!vnode.data.show) {
8582
- // remove pending leave element on enter by injecting an insert hook
8583
- mergeVNodeHook(vnode, 'insert', function () {
8584
- var parent = el.parentNode;
8585
- var pendingNode = parent && parent._pending && parent._pending[vnode.key];
8586
- if (pendingNode &&
8587
- pendingNode.tag === vnode.tag &&
8588
- pendingNode.elm._leaveCb
8589
- ) {
8590
- pendingNode.elm._leaveCb();
8591
- }
8592
- enterHook && enterHook(el, cb);
8593
- });
8594
- }
8595
-
8596
- // start enter transition
8597
- beforeEnterHook && beforeEnterHook(el);
8598
- if (expectsCSS) {
8599
- addTransitionClass(el, startClass);
8600
- addTransitionClass(el, activeClass);
8601
- nextFrame(function () {
8602
- removeTransitionClass(el, startClass);
8603
- if (!cb.cancelled) {
8604
- addTransitionClass(el, toClass);
8605
- if (!userWantsControl) {
8606
- if (isValidDuration(explicitEnterDuration)) {
8607
- setTimeout(cb, explicitEnterDuration);
8608
- } else {
8609
- whenTransitionEnds(el, type, cb);
8610
- }
8611
- }
8612
- }
8613
- });
8614
- }
8615
-
8616
- if (vnode.data.show) {
8617
- toggleDisplay && toggleDisplay();
8618
- enterHook && enterHook(el, cb);
8619
- }
8620
-
8621
- if (!expectsCSS && !userWantsControl) {
8622
- cb();
8623
- }
8624
- }
8625
-
8626
- function leave (vnode, rm) {
8627
- var el = vnode.elm;
8628
-
8629
- // call enter callback now
8630
- if (isDef(el._enterCb)) {
8631
- el._enterCb.cancelled = true;
8632
- el._enterCb();
8633
- }
8634
-
8635
- var data = resolveTransition(vnode.data.transition);
8636
- if (isUndef(data) || el.nodeType !== 1) {
8637
- return rm()
8638
- }
8639
-
8640
- /* istanbul ignore if */
8641
- if (isDef(el._leaveCb)) {
8642
- return
8643
- }
8644
-
8645
- var css = data.css;
8646
- var type = data.type;
8647
- var leaveClass = data.leaveClass;
8648
- var leaveToClass = data.leaveToClass;
8649
- var leaveActiveClass = data.leaveActiveClass;
8650
- var beforeLeave = data.beforeLeave;
8651
- var leave = data.leave;
8652
- var afterLeave = data.afterLeave;
8653
- var leaveCancelled = data.leaveCancelled;
8654
- var delayLeave = data.delayLeave;
8655
- var duration = data.duration;
8656
-
8657
- var expectsCSS = css !== false && !isIE9;
8658
- var userWantsControl = getHookArgumentsLength(leave);
8659
-
8660
- var explicitLeaveDuration = toNumber(
8661
- isObject(duration)
8662
- ? duration.leave
8663
- : duration
8664
- );
8665
-
8666
- if (process.env.NODE_ENV !== 'production' && isDef(explicitLeaveDuration)) {
8667
- checkDuration(explicitLeaveDuration, 'leave', vnode);
8668
- }
8669
-
8670
- var cb = el._leaveCb = once(function () {
8671
- if (el.parentNode && el.parentNode._pending) {
8672
- el.parentNode._pending[vnode.key] = null;
8673
- }
8674
- if (expectsCSS) {
8675
- removeTransitionClass(el, leaveToClass);
8676
- removeTransitionClass(el, leaveActiveClass);
8677
- }
8678
- if (cb.cancelled) {
8679
- if (expectsCSS) {
8680
- removeTransitionClass(el, leaveClass);
8681
- }
8682
- leaveCancelled && leaveCancelled(el);
8683
- } else {
8684
- rm();
8685
- afterLeave && afterLeave(el);
8686
- }
8687
- el._leaveCb = null;
8688
- });
8689
-
8690
- if (delayLeave) {
8691
- delayLeave(performLeave);
8692
- } else {
8693
- performLeave();
8694
- }
8695
-
8696
- function performLeave () {
8697
- // the delayed leave may have already been cancelled
8698
- if (cb.cancelled) {
8699
- return
8700
- }
8701
- // record leaving element
8702
- if (!vnode.data.show && el.parentNode) {
8703
- (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;
8704
- }
8705
- beforeLeave && beforeLeave(el);
8706
- if (expectsCSS) {
8707
- addTransitionClass(el, leaveClass);
8708
- addTransitionClass(el, leaveActiveClass);
8709
- nextFrame(function () {
8710
- removeTransitionClass(el, leaveClass);
8711
- if (!cb.cancelled) {
8712
- addTransitionClass(el, leaveToClass);
8713
- if (!userWantsControl) {
8714
- if (isValidDuration(explicitLeaveDuration)) {
8715
- setTimeout(cb, explicitLeaveDuration);
8716
- } else {
8717
- whenTransitionEnds(el, type, cb);
8718
- }
8719
- }
8720
- }
8721
- });
8722
- }
8723
- leave && leave(el, cb);
8724
- if (!expectsCSS && !userWantsControl) {
8725
- cb();
8726
- }
8727
- }
8728
- }
8729
-
8730
- // only used in dev mode
8731
- function checkDuration (val, name, vnode) {
8732
- if (typeof val !== 'number') {
8733
- warn(
8734
- "<transition> explicit " + name + " duration is not a valid number - " +
8735
- "got " + (JSON.stringify(val)) + ".",
8736
- vnode.context
8737
- );
8738
- } else if (isNaN(val)) {
8739
- warn(
8740
- "<transition> explicit " + name + " duration is NaN - " +
8741
- 'the duration expression might be incorrect.',
8742
- vnode.context
8743
- );
8744
- }
8745
- }
8746
-
8747
- function isValidDuration (val) {
8748
- return typeof val === 'number' && !isNaN(val)
8749
- }
8750
-
8751
- /**
8752
- * Normalize a transition hook's argument length. The hook may be:
8753
- * - a merged hook (invoker) with the original in .fns
8754
- * - a wrapped component method (check ._length)
8755
- * - a plain function (.length)
8756
- */
8757
- function getHookArgumentsLength (fn) {
8758
- if (isUndef(fn)) {
8759
- return false
8760
- }
8761
- var invokerFns = fn.fns;
8762
- if (isDef(invokerFns)) {
8763
- // invoker
8764
- return getHookArgumentsLength(
8765
- Array.isArray(invokerFns)
8766
- ? invokerFns[0]
8767
- : invokerFns
8768
- )
8769
- } else {
8770
- return (fn._length || fn.length) > 1
8771
- }
8772
- }
8773
-
8774
- function _enter (_, vnode) {
8775
- if (vnode.data.show !== true) {
8776
- enter(vnode);
8777
- }
8778
- }
8779
-
8780
- var transition = inBrowser ? {
8781
- create: _enter,
8782
- activate: _enter,
8783
- remove: function remove$$1 (vnode, rm) {
8784
- /* istanbul ignore else */
8785
- if (vnode.data.show !== true) {
8786
- leave(vnode, rm);
8787
- } else {
8788
- rm();
8789
- }
8790
- }
8791
- } : {};
8792
-
8793
- var platformModules = [
8794
- attrs,
8795
- klass,
8796
- events,
8797
- domProps,
8798
- style,
8799
- transition
8800
- ];
8801
-
8802
- /* */
8803
-
8804
- // the directive module should be applied last, after all
8805
- // built-in modules have been applied.
8806
- var modules = platformModules.concat(baseModules);
8807
-
8808
- var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });
8809
-
8810
- /**
8811
- * Not type checking this file because flow doesn't like attaching
8812
- * properties to Elements.
8813
- */
8814
-
8815
- /* istanbul ignore if */
8816
- if (isIE9) {
8817
- // http://www.matts411.com/post/internet-explorer-9-oninput/
8818
- document.addEventListener('selectionchange', function () {
8819
- var el = document.activeElement;
8820
- if (el && el.vmodel) {
8821
- trigger(el, 'input');
8822
- }
8823
- });
8824
- }
8825
-
8826
- var directive = {
8827
- inserted: function inserted (el, binding, vnode, oldVnode) {
8828
- if (vnode.tag === 'select') {
8829
- // #6903
8830
- if (oldVnode.elm && !oldVnode.elm._vOptions) {
8831
- mergeVNodeHook(vnode, 'postpatch', function () {
8832
- directive.componentUpdated(el, binding, vnode);
8833
- });
8834
- } else {
8835
- setSelected(el, binding, vnode.context);
8836
- }
8837
- el._vOptions = [].map.call(el.options, getValue);
8838
- } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
8839
- el._vModifiers = binding.modifiers;
8840
- if (!binding.modifiers.lazy) {
8841
- el.addEventListener('compositionstart', onCompositionStart);
8842
- el.addEventListener('compositionend', onCompositionEnd);
8843
- // Safari < 10.2 & UIWebView doesn't fire compositionend when
8844
- // switching focus before confirming composition choice
8845
- // this also fixes the issue where some browsers e.g. iOS Chrome
8846
- // fires "change" instead of "input" on autocomplete.
8847
- el.addEventListener('change', onCompositionEnd);
8848
- /* istanbul ignore if */
8849
- if (isIE9) {
8850
- el.vmodel = true;
8851
- }
8852
- }
8853
- }
8854
- },
8855
-
8856
- componentUpdated: function componentUpdated (el, binding, vnode) {
8857
- if (vnode.tag === 'select') {
8858
- setSelected(el, binding, vnode.context);
8859
- // in case the options rendered by v-for have changed,
8860
- // it's possible that the value is out-of-sync with the rendered options.
8861
- // detect such cases and filter out values that no longer has a matching
8862
- // option in the DOM.
8863
- var prevOptions = el._vOptions;
8864
- var curOptions = el._vOptions = [].map.call(el.options, getValue);
8865
- if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {
8866
- // trigger change event if
8867
- // no matching option found for at least one value
8868
- var needReset = el.multiple
8869
- ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })
8870
- : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);
8871
- if (needReset) {
8872
- trigger(el, 'change');
8873
- }
8874
- }
8875
- }
8876
- }
8877
- };
8878
-
8879
- function setSelected (el, binding, vm) {
8880
- actuallySetSelected(el, binding, vm);
8881
- /* istanbul ignore if */
8882
- if (isIE || isEdge) {
8883
- setTimeout(function () {
8884
- actuallySetSelected(el, binding, vm);
8885
- }, 0);
8886
- }
8887
- }
8888
-
8889
- function actuallySetSelected (el, binding, vm) {
8890
- var value = binding.value;
8891
- var isMultiple = el.multiple;
8892
- if (isMultiple && !Array.isArray(value)) {
8893
- process.env.NODE_ENV !== 'production' && warn(
8894
- "<select multiple v-model=\"" + (binding.expression) + "\"> " +
8895
- "expects an Array value for its binding, but got " + (Object.prototype.toString.call(value).slice(8, -1)),
8896
- vm
8897
- );
8898
- return
8899
- }
8900
- var selected, option;
8901
- for (var i = 0, l = el.options.length; i < l; i++) {
8902
- option = el.options[i];
8903
- if (isMultiple) {
8904
- selected = looseIndexOf(value, getValue(option)) > -1;
8905
- if (option.selected !== selected) {
8906
- option.selected = selected;
8907
- }
8908
- } else {
8909
- if (looseEqual(getValue(option), value)) {
8910
- if (el.selectedIndex !== i) {
8911
- el.selectedIndex = i;
8912
- }
8913
- return
8914
- }
8915
- }
8916
- }
8917
- if (!isMultiple) {
8918
- el.selectedIndex = -1;
8919
- }
8920
- }
8921
-
8922
- function hasNoMatchingOption (value, options) {
8923
- return options.every(function (o) { return !looseEqual(o, value); })
8924
- }
8925
-
8926
- function getValue (option) {
8927
- return '_value' in option
8928
- ? option._value
8929
- : option.value
8930
- }
8931
-
8932
- function onCompositionStart (e) {
8933
- e.target.composing = true;
8934
- }
8935
-
8936
- function onCompositionEnd (e) {
8937
- // prevent triggering an input event for no reason
8938
- if (!e.target.composing) { return }
8939
- e.target.composing = false;
8940
- trigger(e.target, 'input');
8941
- }
8942
-
8943
- function trigger (el, type) {
8944
- var e = document.createEvent('HTMLEvents');
8945
- e.initEvent(type, true, true);
8946
- el.dispatchEvent(e);
8947
- }
8948
-
8949
- /* */
8950
-
8951
- // recursively search for possible transition defined inside the component root
8952
- function locateNode (vnode) {
8953
- return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
8954
- ? locateNode(vnode.componentInstance._vnode)
8955
- : vnode
8956
- }
8957
-
8958
- var show = {
8959
- bind: function bind (el, ref, vnode) {
8960
- var value = ref.value;
8961
-
8962
- vnode = locateNode(vnode);
8963
- var transition$$1 = vnode.data && vnode.data.transition;
8964
- var originalDisplay = el.__vOriginalDisplay =
8965
- el.style.display === 'none' ? '' : el.style.display;
8966
- if (value && transition$$1) {
8967
- vnode.data.show = true;
8968
- enter(vnode, function () {
8969
- el.style.display = originalDisplay;
8970
- });
8971
- } else {
8972
- el.style.display = value ? originalDisplay : 'none';
8973
- }
8974
- },
8975
-
8976
- update: function update (el, ref, vnode) {
8977
- var value = ref.value;
8978
- var oldValue = ref.oldValue;
8979
-
8980
- /* istanbul ignore if */
8981
- if (!value === !oldValue) { return }
8982
- vnode = locateNode(vnode);
8983
- var transition$$1 = vnode.data && vnode.data.transition;
8984
- if (transition$$1) {
8985
- vnode.data.show = true;
8986
- if (value) {
8987
- enter(vnode, function () {
8988
- el.style.display = el.__vOriginalDisplay;
8989
- });
8990
- } else {
8991
- leave(vnode, function () {
8992
- el.style.display = 'none';
8993
- });
8994
- }
8995
- } else {
8996
- el.style.display = value ? el.__vOriginalDisplay : 'none';
8997
- }
8998
- },
8999
-
9000
- unbind: function unbind (
9001
- el,
9002
- binding,
9003
- vnode,
9004
- oldVnode,
9005
- isDestroy
9006
- ) {
9007
- if (!isDestroy) {
9008
- el.style.display = el.__vOriginalDisplay;
9009
- }
9010
- }
9011
- };
9012
-
9013
- var platformDirectives = {
9014
- model: directive,
9015
- show: show
9016
- };
9017
-
9018
- /* */
9019
-
9020
- var transitionProps = {
9021
- name: String,
9022
- appear: Boolean,
9023
- css: Boolean,
9024
- mode: String,
9025
- type: String,
9026
- enterClass: String,
9027
- leaveClass: String,
9028
- enterToClass: String,
9029
- leaveToClass: String,
9030
- enterActiveClass: String,
9031
- leaveActiveClass: String,
9032
- appearClass: String,
9033
- appearActiveClass: String,
9034
- appearToClass: String,
9035
- duration: [Number, String, Object]
9036
- };
9037
-
9038
- // in case the child is also an abstract component, e.g. <keep-alive>
9039
- // we want to recursively retrieve the real component to be rendered
9040
- function getRealChild (vnode) {
9041
- var compOptions = vnode && vnode.componentOptions;
9042
- if (compOptions && compOptions.Ctor.options.abstract) {
9043
- return getRealChild(getFirstComponentChild(compOptions.children))
9044
- } else {
9045
- return vnode
9046
- }
9047
- }
9048
-
9049
- function extractTransitionData (comp) {
9050
- var data = {};
9051
- var options = comp.$options;
9052
- // props
9053
- for (var key in options.propsData) {
9054
- data[key] = comp[key];
9055
- }
9056
- // events.
9057
- // extract listeners and pass them directly to the transition methods
9058
- var listeners = options._parentListeners;
9059
- for (var key$1 in listeners) {
9060
- data[camelize(key$1)] = listeners[key$1];
9061
- }
9062
- return data
9063
- }
9064
-
9065
- function placeholder (h, rawChild) {
9066
- if (/\d-keep-alive$/.test(rawChild.tag)) {
9067
- return h('keep-alive', {
9068
- props: rawChild.componentOptions.propsData
9069
- })
9070
- }
9071
- }
9072
-
9073
- function hasParentTransition (vnode) {
9074
- while ((vnode = vnode.parent)) {
9075
- if (vnode.data.transition) {
9076
- return true
9077
- }
9078
- }
9079
- }
9080
-
9081
- function isSameChild (child, oldChild) {
9082
- return oldChild.key === child.key && oldChild.tag === child.tag
9083
- }
9084
-
9085
- var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };
9086
-
9087
- var isVShowDirective = function (d) { return d.name === 'show'; };
9088
-
9089
- var Transition = {
9090
- name: 'transition',
9091
- props: transitionProps,
9092
- abstract: true,
9093
-
9094
- render: function render (h) {
9095
- var this$1 = this;
9096
-
9097
- var children = this.$slots.default;
9098
- if (!children) {
9099
- return
9100
- }
9101
-
9102
- // filter out text nodes (possible whitespaces)
9103
- children = children.filter(isNotTextNode);
9104
- /* istanbul ignore if */
9105
- if (!children.length) {
9106
- return
9107
- }
9108
-
9109
- // warn multiple elements
9110
- if (process.env.NODE_ENV !== 'production' && children.length > 1) {
9111
- warn(
9112
- '<transition> can only be used on a single element. Use ' +
9113
- '<transition-group> for lists.',
9114
- this.$parent
9115
- );
9116
- }
9117
-
9118
- var mode = this.mode;
9119
-
9120
- // warn invalid mode
9121
- if (process.env.NODE_ENV !== 'production' &&
9122
- mode && mode !== 'in-out' && mode !== 'out-in'
9123
- ) {
9124
- warn(
9125
- 'invalid <transition> mode: ' + mode,
9126
- this.$parent
9127
- );
9128
- }
9129
-
9130
- var rawChild = children[0];
9131
-
9132
- // if this is a component root node and the component's
9133
- // parent container node also has transition, skip.
9134
- if (hasParentTransition(this.$vnode)) {
9135
- return rawChild
9136
- }
9137
-
9138
- // apply transition data to child
9139
- // use getRealChild() to ignore abstract components e.g. keep-alive
9140
- var child = getRealChild(rawChild);
9141
- /* istanbul ignore if */
9142
- if (!child) {
9143
- return rawChild
9144
- }
9145
-
9146
- if (this._leaving) {
9147
- return placeholder(h, rawChild)
9148
- }
9149
-
9150
- // ensure a key that is unique to the vnode type and to this transition
9151
- // component instance. This key will be used to remove pending leaving nodes
9152
- // during entering.
9153
- var id = "__transition-" + (this._uid) + "-";
9154
- child.key = child.key == null
9155
- ? child.isComment
9156
- ? id + 'comment'
9157
- : id + child.tag
9158
- : isPrimitive(child.key)
9159
- ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)
9160
- : child.key;
9161
-
9162
- var data = (child.data || (child.data = {})).transition = extractTransitionData(this);
9163
- var oldRawChild = this._vnode;
9164
- var oldChild = getRealChild(oldRawChild);
9165
-
9166
- // mark v-show
9167
- // so that the transition module can hand over the control to the directive
9168
- if (child.data.directives && child.data.directives.some(isVShowDirective)) {
9169
- child.data.show = true;
9170
- }
9171
-
9172
- if (
9173
- oldChild &&
9174
- oldChild.data &&
9175
- !isSameChild(child, oldChild) &&
9176
- !isAsyncPlaceholder(oldChild) &&
9177
- // #6687 component root is a comment node
9178
- !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)
9179
- ) {
9180
- // replace old child transition data with fresh one
9181
- // important for dynamic transitions!
9182
- var oldData = oldChild.data.transition = extend({}, data);
9183
- // handle transition mode
9184
- if (mode === 'out-in') {
9185
- // return placeholder node and queue update when leave finishes
9186
- this._leaving = true;
9187
- mergeVNodeHook(oldData, 'afterLeave', function () {
9188
- this$1._leaving = false;
9189
- this$1.$forceUpdate();
9190
- });
9191
- return placeholder(h, rawChild)
9192
- } else if (mode === 'in-out') {
9193
- if (isAsyncPlaceholder(child)) {
9194
- return oldRawChild
9195
- }
9196
- var delayedLeave;
9197
- var performLeave = function () { delayedLeave(); };
9198
- mergeVNodeHook(data, 'afterEnter', performLeave);
9199
- mergeVNodeHook(data, 'enterCancelled', performLeave);
9200
- mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });
9201
- }
9202
- }
9203
-
9204
- return rawChild
9205
- }
9206
- };
9207
-
9208
- /* */
9209
-
9210
- var props = extend({
9211
- tag: String,
9212
- moveClass: String
9213
- }, transitionProps);
9214
-
9215
- delete props.mode;
9216
-
9217
- var TransitionGroup = {
9218
- props: props,
9219
-
9220
- beforeMount: function beforeMount () {
9221
- var this$1 = this;
9222
-
9223
- var update = this._update;
9224
- this._update = function (vnode, hydrating) {
9225
- var restoreActiveInstance = setActiveInstance(this$1);
9226
- // force removing pass
9227
- this$1.__patch__(
9228
- this$1._vnode,
9229
- this$1.kept,
9230
- false, // hydrating
9231
- true // removeOnly (!important, avoids unnecessary moves)
9232
- );
9233
- this$1._vnode = this$1.kept;
9234
- restoreActiveInstance();
9235
- update.call(this$1, vnode, hydrating);
9236
- };
9237
- },
9238
-
9239
- render: function render (h) {
9240
- var tag = this.tag || this.$vnode.data.tag || 'span';
9241
- var map = Object.create(null);
9242
- var prevChildren = this.prevChildren = this.children;
9243
- var rawChildren = this.$slots.default || [];
9244
- var children = this.children = [];
9245
- var transitionData = extractTransitionData(this);
9246
-
9247
- for (var i = 0; i < rawChildren.length; i++) {
9248
- var c = rawChildren[i];
9249
- if (c.tag) {
9250
- if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
9251
- children.push(c);
9252
- map[c.key] = c
9253
- ;(c.data || (c.data = {})).transition = transitionData;
9254
- } else if (process.env.NODE_ENV !== 'production') {
9255
- var opts = c.componentOptions;
9256
- var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;
9257
- warn(("<transition-group> children must be keyed: <" + name + ">"));
9258
- }
9259
- }
9260
- }
9261
-
9262
- if (prevChildren) {
9263
- var kept = [];
9264
- var removed = [];
9265
- for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {
9266
- var c$1 = prevChildren[i$1];
9267
- c$1.data.transition = transitionData;
9268
- c$1.data.pos = c$1.elm.getBoundingClientRect();
9269
- if (map[c$1.key]) {
9270
- kept.push(c$1);
9271
- } else {
9272
- removed.push(c$1);
9273
- }
9274
- }
9275
- this.kept = h(tag, null, kept);
9276
- this.removed = removed;
9277
- }
9278
-
9279
- return h(tag, null, children)
9280
- },
9281
-
9282
- updated: function updated () {
9283
- var children = this.prevChildren;
9284
- var moveClass = this.moveClass || ((this.name || 'v') + '-move');
9285
- if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
9286
- return
9287
- }
9288
-
9289
- // we divide the work into three loops to avoid mixing DOM reads and writes
9290
- // in each iteration - which helps prevent layout thrashing.
9291
- children.forEach(callPendingCbs);
9292
- children.forEach(recordPosition);
9293
- children.forEach(applyTranslation);
9294
-
9295
- // force reflow to put everything in position
9296
- // assign to this to avoid being removed in tree-shaking
9297
- // $flow-disable-line
9298
- this._reflow = document.body.offsetHeight;
9299
-
9300
- children.forEach(function (c) {
9301
- if (c.data.moved) {
9302
- var el = c.elm;
9303
- var s = el.style;
9304
- addTransitionClass(el, moveClass);
9305
- s.transform = s.WebkitTransform = s.transitionDuration = '';
9306
- el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {
9307
- if (e && e.target !== el) {
9308
- return
9309
- }
9310
- if (!e || /transform$/.test(e.propertyName)) {
9311
- el.removeEventListener(transitionEndEvent, cb);
9312
- el._moveCb = null;
9313
- removeTransitionClass(el, moveClass);
9314
- }
9315
- });
9316
- }
9317
- });
9318
- },
9319
-
9320
- methods: {
9321
- hasMove: function hasMove (el, moveClass) {
9322
- /* istanbul ignore if */
9323
- if (!hasTransition) {
9324
- return false
9325
- }
9326
- /* istanbul ignore if */
9327
- if (this._hasMove) {
9328
- return this._hasMove
9329
- }
9330
- // Detect whether an element with the move class applied has
9331
- // CSS transitions. Since the element may be inside an entering
9332
- // transition at this very moment, we make a clone of it and remove
9333
- // all other transition classes applied to ensure only the move class
9334
- // is applied.
9335
- var clone = el.cloneNode();
9336
- if (el._transitionClasses) {
9337
- el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });
9338
- }
9339
- addClass(clone, moveClass);
9340
- clone.style.display = 'none';
9341
- this.$el.appendChild(clone);
9342
- var info = getTransitionInfo(clone);
9343
- this.$el.removeChild(clone);
9344
- return (this._hasMove = info.hasTransform)
9345
- }
9346
- }
9347
- };
9348
-
9349
- function callPendingCbs (c) {
9350
- /* istanbul ignore if */
9351
- if (c.elm._moveCb) {
9352
- c.elm._moveCb();
9353
- }
9354
- /* istanbul ignore if */
9355
- if (c.elm._enterCb) {
9356
- c.elm._enterCb();
9357
- }
9358
- }
9359
-
9360
- function recordPosition (c) {
9361
- c.data.newPos = c.elm.getBoundingClientRect();
9362
- }
9363
-
9364
- function applyTranslation (c) {
9365
- var oldPos = c.data.pos;
9366
- var newPos = c.data.newPos;
9367
- var dx = oldPos.left - newPos.left;
9368
- var dy = oldPos.top - newPos.top;
9369
- if (dx || dy) {
9370
- c.data.moved = true;
9371
- var s = c.elm.style;
9372
- s.transform = s.WebkitTransform = "translate(" + dx + "px," + dy + "px)";
9373
- s.transitionDuration = '0s';
9374
- }
9375
- }
9376
-
9377
- var platformComponents = {
9378
- Transition: Transition,
9379
- TransitionGroup: TransitionGroup
9380
- };
9381
-
9382
- /* */
9383
-
9384
- // install platform specific utils
9385
- Vue.config.mustUseProp = mustUseProp;
9386
- Vue.config.isReservedTag = isReservedTag;
9387
- Vue.config.isReservedAttr = isReservedAttr;
9388
- Vue.config.getTagNamespace = getTagNamespace;
9389
- Vue.config.isUnknownElement = isUnknownElement;
9390
-
9391
- // install platform runtime directives & components
9392
- extend(Vue.options.directives, platformDirectives);
9393
- extend(Vue.options.components, platformComponents);
9394
-
9395
- // install platform patch function
9396
- Vue.prototype.__patch__ = inBrowser ? patch : noop;
9397
-
9398
- // public mount method
9399
- Vue.prototype.$mount = function (
9400
- el,
9401
- hydrating
9402
- ) {
9403
- el = el && inBrowser ? query(el) : undefined;
9404
- return mountComponent(this, el, hydrating)
9405
- };
9406
-
9407
- // devtools global hook
9408
- /* istanbul ignore next */
9409
- if (inBrowser) {
9410
- setTimeout(function () {
9411
- if (config.devtools) {
9412
- if (devtools) {
9413
- devtools.emit('init', Vue);
9414
- } else if (
9415
- process.env.NODE_ENV !== 'production' &&
9416
- process.env.NODE_ENV !== 'test'
9417
- ) {
9418
- console[console.info ? 'info' : 'log'](
9419
- 'Download the Vue Devtools extension for a better development experience:\n' +
9420
- 'https://github.com/vuejs/vue-devtools'
9421
- );
9422
- }
9423
- }
9424
- if (process.env.NODE_ENV !== 'production' &&
9425
- process.env.NODE_ENV !== 'test' &&
9426
- config.productionTip !== false &&
9427
- typeof console !== 'undefined'
9428
- ) {
9429
- console[console.info ? 'info' : 'log'](
9430
- "You are running Vue in development mode.\n" +
9431
- "Make sure to turn on production mode when deploying for production.\n" +
9432
- "See more tips at https://vuejs.org/guide/deployment.html"
9433
- );
9434
- }
9435
- }, 0);
9436
- }
9437
-
9438
- /* */
9439
-
9440
- var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
9441
- var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
9442
-
9443
- var buildRegex = cached(function (delimiters) {
9444
- var open = delimiters[0].replace(regexEscapeRE, '\\$&');
9445
- var close = delimiters[1].replace(regexEscapeRE, '\\$&');
9446
- return new RegExp(open + '((?:.|\\n)+?)' + close, 'g')
9447
- });
9448
-
9449
-
9450
-
9451
- function parseText (
9452
- text,
9453
- delimiters
9454
- ) {
9455
- var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
9456
- if (!tagRE.test(text)) {
9457
- return
9458
- }
9459
- var tokens = [];
9460
- var rawTokens = [];
9461
- var lastIndex = tagRE.lastIndex = 0;
9462
- var match, index, tokenValue;
9463
- while ((match = tagRE.exec(text))) {
9464
- index = match.index;
9465
- // push text token
9466
- if (index > lastIndex) {
9467
- rawTokens.push(tokenValue = text.slice(lastIndex, index));
9468
- tokens.push(JSON.stringify(tokenValue));
9469
- }
9470
- // tag token
9471
- var exp = parseFilters(match[1].trim());
9472
- tokens.push(("_s(" + exp + ")"));
9473
- rawTokens.push({ '@binding': exp });
9474
- lastIndex = index + match[0].length;
9475
- }
9476
- if (lastIndex < text.length) {
9477
- rawTokens.push(tokenValue = text.slice(lastIndex));
9478
- tokens.push(JSON.stringify(tokenValue));
9479
- }
9480
- return {
9481
- expression: tokens.join('+'),
9482
- tokens: rawTokens
9483
- }
9484
- }
9485
-
9486
- /* */
9487
-
9488
- function transformNode (el, options) {
9489
- var warn = options.warn || baseWarn;
9490
- var staticClass = getAndRemoveAttr(el, 'class');
9491
- if (process.env.NODE_ENV !== 'production' && staticClass) {
9492
- var res = parseText(staticClass, options.delimiters);
9493
- if (res) {
9494
- warn(
9495
- "class=\"" + staticClass + "\": " +
9496
- 'Interpolation inside attributes has been removed. ' +
9497
- 'Use v-bind or the colon shorthand instead. For example, ' +
9498
- 'instead of <div class="{{ val }}">, use <div :class="val">.',
9499
- el.rawAttrsMap['class']
9500
- );
9501
- }
9502
- }
9503
- if (staticClass) {
9504
- el.staticClass = JSON.stringify(staticClass);
9505
- }
9506
- var classBinding = getBindingAttr(el, 'class', false /* getStatic */);
9507
- if (classBinding) {
9508
- el.classBinding = classBinding;
9509
- }
9510
- }
9511
-
9512
- function genData (el) {
9513
- var data = '';
9514
- if (el.staticClass) {
9515
- data += "staticClass:" + (el.staticClass) + ",";
9516
- }
9517
- if (el.classBinding) {
9518
- data += "class:" + (el.classBinding) + ",";
9519
- }
9520
- return data
9521
- }
9522
-
9523
- var klass$1 = {
9524
- staticKeys: ['staticClass'],
9525
- transformNode: transformNode,
9526
- genData: genData
9527
- };
9528
-
9529
- /* */
9530
-
9531
- function transformNode$1 (el, options) {
9532
- var warn = options.warn || baseWarn;
9533
- var staticStyle = getAndRemoveAttr(el, 'style');
9534
- if (staticStyle) {
9535
- /* istanbul ignore if */
9536
- if (process.env.NODE_ENV !== 'production') {
9537
- var res = parseText(staticStyle, options.delimiters);
9538
- if (res) {
9539
- warn(
9540
- "style=\"" + staticStyle + "\": " +
9541
- 'Interpolation inside attributes has been removed. ' +
9542
- 'Use v-bind or the colon shorthand instead. For example, ' +
9543
- 'instead of <div style="{{ val }}">, use <div :style="val">.',
9544
- el.rawAttrsMap['style']
9545
- );
9546
- }
9547
- }
9548
- el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
9549
- }
9550
-
9551
- var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
9552
- if (styleBinding) {
9553
- el.styleBinding = styleBinding;
9554
- }
9555
- }
9556
-
9557
- function genData$1 (el) {
9558
- var data = '';
9559
- if (el.staticStyle) {
9560
- data += "staticStyle:" + (el.staticStyle) + ",";
9561
- }
9562
- if (el.styleBinding) {
9563
- data += "style:(" + (el.styleBinding) + "),";
9564
- }
9565
- return data
9566
- }
9567
-
9568
- var style$1 = {
9569
- staticKeys: ['staticStyle'],
9570
- transformNode: transformNode$1,
9571
- genData: genData$1
9572
- };
9573
-
9574
- /* */
9575
-
9576
- var decoder;
9577
-
9578
- var he = {
9579
- decode: function decode (html) {
9580
- decoder = decoder || document.createElement('div');
9581
- decoder.innerHTML = html;
9582
- return decoder.textContent
9583
- }
9584
- };
9585
-
9586
- /* */
9587
-
9588
- var isUnaryTag = makeMap(
9589
- 'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
9590
- 'link,meta,param,source,track,wbr'
9591
- );
9592
-
9593
- // Elements that you can, intentionally, leave open
9594
- // (and which close themselves)
9595
- var canBeLeftOpenTag = makeMap(
9596
- 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'
9597
- );
9598
-
9599
- // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
9600
- // Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
9601
- var isNonPhrasingTag = makeMap(
9602
- 'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
9603
- 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
9604
- 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
9605
- 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
9606
- 'title,tr,track'
9607
- );
9608
-
9609
- /**
9610
- * Not type-checking this file because it's mostly vendor code.
9611
- */
9612
-
9613
- // Regular Expressions for parsing tags and attributes
9614
- var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
9615
- var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
9616
- var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z" + unicodeLetters + "]*";
9617
- var qnameCapture = "((?:" + ncname + "\\:)?" + ncname + ")";
9618
- var startTagOpen = new RegExp(("^<" + qnameCapture));
9619
- var startTagClose = /^\s*(\/?)>/;
9620
- var endTag = new RegExp(("^<\\/" + qnameCapture + "[^>]*>"));
9621
- var doctype = /^<!DOCTYPE [^>]+>/i;
9622
- // #7298: escape - to avoid being pased as HTML comment when inlined in page
9623
- var comment = /^<!\--/;
9624
- var conditionalComment = /^<!\[/;
9625
-
9626
- // Special Elements (can contain anything)
9627
- var isPlainTextElement = makeMap('script,style,textarea', true);
9628
- var reCache = {};
9629
-
9630
- var decodingMap = {
9631
- '&lt;': '<',
9632
- '&gt;': '>',
9633
- '&quot;': '"',
9634
- '&amp;': '&',
9635
- '&#10;': '\n',
9636
- '&#9;': '\t',
9637
- '&#39;': "'"
9638
- };
9639
- var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
9640
- var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
9641
-
9642
- // #5992
9643
- var isIgnoreNewlineTag = makeMap('pre,textarea', true);
9644
- var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'; };
9645
-
9646
- function decodeAttr (value, shouldDecodeNewlines) {
9647
- var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
9648
- return value.replace(re, function (match) { return decodingMap[match]; })
9649
- }
9650
-
9651
- function parseHTML (html, options) {
9652
- var stack = [];
9653
- var expectHTML = options.expectHTML;
9654
- var isUnaryTag$$1 = options.isUnaryTag || no;
9655
- var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;
9656
- var index = 0;
9657
- var last, lastTag;
9658
- while (html) {
9659
- last = html;
9660
- // Make sure we're not in a plaintext content element like script/style
9661
- if (!lastTag || !isPlainTextElement(lastTag)) {
9662
- var textEnd = html.indexOf('<');
9663
- if (textEnd === 0) {
9664
- // Comment:
9665
- if (comment.test(html)) {
9666
- var commentEnd = html.indexOf('-->');
9667
-
9668
- if (commentEnd >= 0) {
9669
- if (options.shouldKeepComment) {
9670
- options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
9671
- }
9672
- advance(commentEnd + 3);
9673
- continue
9674
- }
9675
- }
9676
-
9677
- // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
9678
- if (conditionalComment.test(html)) {
9679
- var conditionalEnd = html.indexOf(']>');
9680
-
9681
- if (conditionalEnd >= 0) {
9682
- advance(conditionalEnd + 2);
9683
- continue
9684
- }
9685
- }
9686
-
9687
- // Doctype:
9688
- var doctypeMatch = html.match(doctype);
9689
- if (doctypeMatch) {
9690
- advance(doctypeMatch[0].length);
9691
- continue
9692
- }
9693
-
9694
- // End tag:
9695
- var endTagMatch = html.match(endTag);
9696
- if (endTagMatch) {
9697
- var curIndex = index;
9698
- advance(endTagMatch[0].length);
9699
- parseEndTag(endTagMatch[1], curIndex, index);
9700
- continue
9701
- }
9702
-
9703
- // Start tag:
9704
- var startTagMatch = parseStartTag();
9705
- if (startTagMatch) {
9706
- handleStartTag(startTagMatch);
9707
- if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
9708
- advance(1);
9709
- }
9710
- continue
9711
- }
9712
- }
9713
-
9714
- var text = (void 0), rest = (void 0), next = (void 0);
9715
- if (textEnd >= 0) {
9716
- rest = html.slice(textEnd);
9717
- while (
9718
- !endTag.test(rest) &&
9719
- !startTagOpen.test(rest) &&
9720
- !comment.test(rest) &&
9721
- !conditionalComment.test(rest)
9722
- ) {
9723
- // < in plain text, be forgiving and treat it as text
9724
- next = rest.indexOf('<', 1);
9725
- if (next < 0) { break }
9726
- textEnd += next;
9727
- rest = html.slice(textEnd);
9728
- }
9729
- text = html.substring(0, textEnd);
9730
- }
9731
-
9732
- if (textEnd < 0) {
9733
- text = html;
9734
- }
9735
-
9736
- if (text) {
9737
- advance(text.length);
9738
- }
9739
-
9740
- if (options.chars && text) {
9741
- options.chars(text, index - text.length, index);
9742
- }
9743
- } else {
9744
- var endTagLength = 0;
9745
- var stackedTag = lastTag.toLowerCase();
9746
- var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\s\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));
9747
- var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {
9748
- endTagLength = endTag.length;
9749
- if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {
9750
- text = text
9751
- .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
9752
- .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
9753
- }
9754
- if (shouldIgnoreFirstNewline(stackedTag, text)) {
9755
- text = text.slice(1);
9756
- }
9757
- if (options.chars) {
9758
- options.chars(text);
9759
- }
9760
- return ''
9761
- });
9762
- index += html.length - rest$1.length;
9763
- html = rest$1;
9764
- parseEndTag(stackedTag, index - endTagLength, index);
9765
- }
9766
-
9767
- if (html === last) {
9768
- options.chars && options.chars(html);
9769
- if (process.env.NODE_ENV !== 'production' && !stack.length && options.warn) {
9770
- options.warn(("Mal-formatted tag at end of template: \"" + html + "\""), { start: index + html.length });
9771
- }
9772
- break
9773
- }
9774
- }
9775
-
9776
- // Clean up any remaining tags
9777
- parseEndTag();
9778
-
9779
- function advance (n) {
9780
- index += n;
9781
- html = html.substring(n);
9782
- }
9783
-
9784
- function parseStartTag () {
9785
- var start = html.match(startTagOpen);
9786
- if (start) {
9787
- var match = {
9788
- tagName: start[1],
9789
- attrs: [],
9790
- start: index
9791
- };
9792
- advance(start[0].length);
9793
- var end, attr;
9794
- while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
9795
- attr.start = index;
9796
- advance(attr[0].length);
9797
- attr.end = index;
9798
- match.attrs.push(attr);
9799
- }
9800
- if (end) {
9801
- match.unarySlash = end[1];
9802
- advance(end[0].length);
9803
- match.end = index;
9804
- return match
9805
- }
9806
- }
9807
- }
9808
-
9809
- function handleStartTag (match) {
9810
- var tagName = match.tagName;
9811
- var unarySlash = match.unarySlash;
9812
-
9813
- if (expectHTML) {
9814
- if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
9815
- parseEndTag(lastTag);
9816
- }
9817
- if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {
9818
- parseEndTag(tagName);
9819
- }
9820
- }
9821
-
9822
- var unary = isUnaryTag$$1(tagName) || !!unarySlash;
9823
-
9824
- var l = match.attrs.length;
9825
- var attrs = new Array(l);
9826
- for (var i = 0; i < l; i++) {
9827
- var args = match.attrs[i];
9828
- var value = args[3] || args[4] || args[5] || '';
9829
- var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
9830
- ? options.shouldDecodeNewlinesForHref
9831
- : options.shouldDecodeNewlines;
9832
- attrs[i] = {
9833
- name: args[1],
9834
- value: decodeAttr(value, shouldDecodeNewlines)
9835
- };
9836
- if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
9837
- attrs[i].start = args.start + args[0].match(/^\s*/).length;
9838
- attrs[i].end = args.end;
9839
- }
9840
- }
9841
-
9842
- if (!unary) {
9843
- stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });
9844
- lastTag = tagName;
9845
- }
9846
-
9847
- if (options.start) {
9848
- options.start(tagName, attrs, unary, match.start, match.end);
9849
- }
9850
- }
9851
-
9852
- function parseEndTag (tagName, start, end) {
9853
- var pos, lowerCasedTagName;
9854
- if (start == null) { start = index; }
9855
- if (end == null) { end = index; }
9856
-
9857
- // Find the closest opened tag of the same type
9858
- if (tagName) {
9859
- lowerCasedTagName = tagName.toLowerCase();
9860
- for (pos = stack.length - 1; pos >= 0; pos--) {
9861
- if (stack[pos].lowerCasedTag === lowerCasedTagName) {
9862
- break
9863
- }
9864
- }
9865
- } else {
9866
- // If no tag name is provided, clean shop
9867
- pos = 0;
9868
- }
9869
-
9870
- if (pos >= 0) {
9871
- // Close all the open elements, up the stack
9872
- for (var i = stack.length - 1; i >= pos; i--) {
9873
- if (process.env.NODE_ENV !== 'production' &&
9874
- (i > pos || !tagName) &&
9875
- options.warn
9876
- ) {
9877
- options.warn(
9878
- ("tag <" + (stack[i].tag) + "> has no matching end tag."),
9879
- { start: stack[i].start }
9880
- );
9881
- }
9882
- if (options.end) {
9883
- options.end(stack[i].tag, start, end);
9884
- }
9885
- }
9886
-
9887
- // Remove the open elements from the stack
9888
- stack.length = pos;
9889
- lastTag = pos && stack[pos - 1].tag;
9890
- } else if (lowerCasedTagName === 'br') {
9891
- if (options.start) {
9892
- options.start(tagName, [], true, start, end);
9893
- }
9894
- } else if (lowerCasedTagName === 'p') {
9895
- if (options.start) {
9896
- options.start(tagName, [], false, start, end);
9897
- }
9898
- if (options.end) {
9899
- options.end(tagName, start, end);
9900
- }
9901
- }
9902
- }
9903
- }
9904
-
9905
- /* */
9906
-
9907
- var onRE = /^@|^v-on:/;
9908
- var dirRE = /^v-|^@|^:/;
9909
- var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
9910
- var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
9911
- var stripParensRE = /^\(|\)$/g;
9912
- var dynamicArgRE = /^\[.*\]$/;
9913
-
9914
- var argRE = /:(.*)$/;
9915
- var bindRE = /^:|^\.|^v-bind:/;
9916
- var modifierRE = /\.[^.]+/g;
9917
-
9918
- var slotRE = /^v-slot(:|$)|^#/;
9919
-
9920
- var lineBreakRE = /[\r\n]/;
9921
- var whitespaceRE$1 = /\s+/g;
9922
-
9923
- var invalidAttributeRE = /[\s"'<>\/=]/;
9924
-
9925
- var decodeHTMLCached = cached(he.decode);
9926
-
9927
- var emptySlotScopeToken = "_empty_";
9928
-
9929
- // configurable state
9930
- var warn$2;
9931
- var delimiters;
9932
- var transforms;
9933
- var preTransforms;
9934
- var postTransforms;
9935
- var platformIsPreTag;
9936
- var platformMustUseProp;
9937
- var platformGetTagNamespace;
9938
- var maybeComponent;
9939
-
9940
- function createASTElement (
9941
- tag,
9942
- attrs,
9943
- parent
9944
- ) {
9945
- return {
9946
- type: 1,
9947
- tag: tag,
9948
- attrsList: attrs,
9949
- attrsMap: makeAttrsMap(attrs),
9950
- rawAttrsMap: {},
9951
- parent: parent,
9952
- children: []
9953
- }
9954
- }
9955
-
9956
- /**
9957
- * Convert HTML string to AST.
9958
- */
9959
- function parse (
9960
- template,
9961
- options
9962
- ) {
9963
- warn$2 = options.warn || baseWarn;
9964
-
9965
- platformIsPreTag = options.isPreTag || no;
9966
- platformMustUseProp = options.mustUseProp || no;
9967
- platformGetTagNamespace = options.getTagNamespace || no;
9968
- var isReservedTag = options.isReservedTag || no;
9969
- maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };
9970
-
9971
- transforms = pluckModuleFunction(options.modules, 'transformNode');
9972
- preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
9973
- postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
9974
-
9975
- delimiters = options.delimiters;
9976
-
9977
- var stack = [];
9978
- var preserveWhitespace = options.preserveWhitespace !== false;
9979
- var whitespaceOption = options.whitespace;
9980
- var root;
9981
- var currentParent;
9982
- var inVPre = false;
9983
- var inPre = false;
9984
- var warned = false;
9985
-
9986
- function warnOnce (msg, range) {
9987
- if (!warned) {
9988
- warned = true;
9989
- warn$2(msg, range);
9990
- }
9991
- }
9992
-
9993
- function closeElement (element) {
9994
- trimEndingWhitespace(element);
9995
- if (!inVPre && !element.processed) {
9996
- element = processElement(element, options);
9997
- }
9998
- // tree management
9999
- if (!stack.length && element !== root) {
10000
- // allow root elements with v-if, v-else-if and v-else
10001
- if (root.if && (element.elseif || element.else)) {
10002
- if (process.env.NODE_ENV !== 'production') {
10003
- checkRootConstraints(element);
10004
- }
10005
- addIfCondition(root, {
10006
- exp: element.elseif,
10007
- block: element
10008
- });
10009
- } else if (process.env.NODE_ENV !== 'production') {
10010
- warnOnce(
10011
- "Component template should contain exactly one root element. " +
10012
- "If you are using v-if on multiple elements, " +
10013
- "use v-else-if to chain them instead.",
10014
- { start: element.start }
10015
- );
10016
- }
10017
- }
10018
- if (currentParent && !element.forbidden) {
10019
- if (element.elseif || element.else) {
10020
- processIfConditions(element, currentParent);
10021
- } else {
10022
- if (element.slotScope) {
10023
- // scoped slot
10024
- // keep it in the children list so that v-else(-if) conditions can
10025
- // find it as the prev node.
10026
- var name = element.slotTarget || '"default"'
10027
- ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;
10028
- }
10029
- currentParent.children.push(element);
10030
- element.parent = currentParent;
10031
- }
10032
- }
10033
-
10034
- // final children cleanup
10035
- // filter out scoped slots
10036
- element.children = element.children.filter(function (c) { return !(c).slotScope; });
10037
- // remove trailing whitespace node again
10038
- trimEndingWhitespace(element);
10039
-
10040
- // check pre state
10041
- if (element.pre) {
10042
- inVPre = false;
10043
- }
10044
- if (platformIsPreTag(element.tag)) {
10045
- inPre = false;
10046
- }
10047
- // apply post-transforms
10048
- for (var i = 0; i < postTransforms.length; i++) {
10049
- postTransforms[i](element, options);
10050
- }
10051
- }
10052
-
10053
- function trimEndingWhitespace (el) {
10054
- // remove trailing whitespace node
10055
- if (!inPre) {
10056
- var lastNode;
10057
- while (
10058
- (lastNode = el.children[el.children.length - 1]) &&
10059
- lastNode.type === 3 &&
10060
- lastNode.text === ' '
10061
- ) {
10062
- el.children.pop();
10063
- }
10064
- }
10065
- }
10066
-
10067
- function checkRootConstraints (el) {
10068
- if (el.tag === 'slot' || el.tag === 'template') {
10069
- warnOnce(
10070
- "Cannot use <" + (el.tag) + "> as component root element because it may " +
10071
- 'contain multiple nodes.',
10072
- { start: el.start }
10073
- );
10074
- }
10075
- if (el.attrsMap.hasOwnProperty('v-for')) {
10076
- warnOnce(
10077
- 'Cannot use v-for on stateful component root element because ' +
10078
- 'it renders multiple elements.',
10079
- el.rawAttrsMap['v-for']
10080
- );
10081
- }
10082
- }
10083
-
10084
- parseHTML(template, {
10085
- warn: warn$2,
10086
- expectHTML: options.expectHTML,
10087
- isUnaryTag: options.isUnaryTag,
10088
- canBeLeftOpenTag: options.canBeLeftOpenTag,
10089
- shouldDecodeNewlines: options.shouldDecodeNewlines,
10090
- shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
10091
- shouldKeepComment: options.comments,
10092
- outputSourceRange: options.outputSourceRange,
10093
- start: function start (tag, attrs, unary, start$1) {
10094
- // check namespace.
10095
- // inherit parent ns if there is one
10096
- var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
10097
-
10098
- // handle IE svg bug
10099
- /* istanbul ignore if */
10100
- if (isIE && ns === 'svg') {
10101
- attrs = guardIESVGBug(attrs);
10102
- }
10103
-
10104
- var element = createASTElement(tag, attrs, currentParent);
10105
- if (ns) {
10106
- element.ns = ns;
10107
- }
10108
-
10109
- if (process.env.NODE_ENV !== 'production') {
10110
- if (options.outputSourceRange) {
10111
- element.start = start$1;
10112
- element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {
10113
- cumulated[attr.name] = attr;
10114
- return cumulated
10115
- }, {});
10116
- }
10117
- attrs.forEach(function (attr) {
10118
- if (invalidAttributeRE.test(attr.name)) {
10119
- warn$2(
10120
- "Invalid dynamic argument expression: attribute names cannot contain " +
10121
- "spaces, quotes, <, >, / or =.",
10122
- {
10123
- start: attr.start + attr.name.indexOf("["),
10124
- end: attr.start + attr.name.length
10125
- }
10126
- );
10127
- }
10128
- });
10129
- }
10130
-
10131
- if (isForbiddenTag(element) && !isServerRendering()) {
10132
- element.forbidden = true;
10133
- process.env.NODE_ENV !== 'production' && warn$2(
10134
- 'Templates should only be responsible for mapping the state to the ' +
10135
- 'UI. Avoid placing tags with side-effects in your templates, such as ' +
10136
- "<" + tag + ">" + ', as they will not be parsed.',
10137
- { start: element.start }
10138
- );
10139
- }
10140
-
10141
- // apply pre-transforms
10142
- for (var i = 0; i < preTransforms.length; i++) {
10143
- element = preTransforms[i](element, options) || element;
10144
- }
10145
-
10146
- if (!inVPre) {
10147
- processPre(element);
10148
- if (element.pre) {
10149
- inVPre = true;
10150
- }
10151
- }
10152
- if (platformIsPreTag(element.tag)) {
10153
- inPre = true;
10154
- }
10155
- if (inVPre) {
10156
- processRawAttrs(element);
10157
- } else if (!element.processed) {
10158
- // structural directives
10159
- processFor(element);
10160
- processIf(element);
10161
- processOnce(element);
10162
- }
10163
-
10164
- if (!root) {
10165
- root = element;
10166
- if (process.env.NODE_ENV !== 'production') {
10167
- checkRootConstraints(root);
10168
- }
10169
- }
10170
-
10171
- if (!unary) {
10172
- currentParent = element;
10173
- stack.push(element);
10174
- } else {
10175
- closeElement(element);
10176
- }
10177
- },
10178
-
10179
- end: function end (tag, start, end$1) {
10180
- var element = stack[stack.length - 1];
10181
- // pop stack
10182
- stack.length -= 1;
10183
- currentParent = stack[stack.length - 1];
10184
- if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
10185
- element.end = end$1;
10186
- }
10187
- closeElement(element);
10188
- },
10189
-
10190
- chars: function chars (text, start, end) {
10191
- if (!currentParent) {
10192
- if (process.env.NODE_ENV !== 'production') {
10193
- if (text === template) {
10194
- warnOnce(
10195
- 'Component template requires a root element, rather than just text.',
10196
- { start: start }
10197
- );
10198
- } else if ((text = text.trim())) {
10199
- warnOnce(
10200
- ("text \"" + text + "\" outside root element will be ignored."),
10201
- { start: start }
10202
- );
10203
- }
10204
- }
10205
- return
10206
- }
10207
- // IE textarea placeholder bug
10208
- /* istanbul ignore if */
10209
- if (isIE &&
10210
- currentParent.tag === 'textarea' &&
10211
- currentParent.attrsMap.placeholder === text
10212
- ) {
10213
- return
10214
- }
10215
- var children = currentParent.children;
10216
- if (inPre || text.trim()) {
10217
- text = isTextTag(currentParent) ? text : decodeHTMLCached(text);
10218
- } else if (!children.length) {
10219
- // remove the whitespace-only node right after an opening tag
10220
- text = '';
10221
- } else if (whitespaceOption) {
10222
- if (whitespaceOption === 'condense') {
10223
- // in condense mode, remove the whitespace node if it contains
10224
- // line break, otherwise condense to a single space
10225
- text = lineBreakRE.test(text) ? '' : ' ';
10226
- } else {
10227
- text = ' ';
10228
- }
10229
- } else {
10230
- text = preserveWhitespace ? ' ' : '';
10231
- }
10232
- if (text) {
10233
- if (whitespaceOption === 'condense') {
10234
- // condense consecutive whitespaces into single space
10235
- text = text.replace(whitespaceRE$1, ' ');
10236
- }
10237
- var res;
10238
- var child;
10239
- if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
10240
- child = {
10241
- type: 2,
10242
- expression: res.expression,
10243
- tokens: res.tokens,
10244
- text: text
10245
- };
10246
- } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {
10247
- child = {
10248
- type: 3,
10249
- text: text
10250
- };
10251
- }
10252
- if (child) {
10253
- if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
10254
- child.start = start;
10255
- child.end = end;
10256
- }
10257
- children.push(child);
10258
- }
10259
- }
10260
- },
10261
- comment: function comment (text, start, end) {
10262
- // adding anyting as a sibling to the root node is forbidden
10263
- // comments should still be allowed, but ignored
10264
- if (currentParent) {
10265
- var child = {
10266
- type: 3,
10267
- text: text,
10268
- isComment: true
10269
- };
10270
- if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
10271
- child.start = start;
10272
- child.end = end;
10273
- }
10274
- currentParent.children.push(child);
10275
- }
10276
- }
10277
- });
10278
- return root
10279
- }
10280
-
10281
- function processPre (el) {
10282
- if (getAndRemoveAttr(el, 'v-pre') != null) {
10283
- el.pre = true;
10284
- }
10285
- }
10286
-
10287
- function processRawAttrs (el) {
10288
- var list = el.attrsList;
10289
- var len = list.length;
10290
- if (len) {
10291
- var attrs = el.attrs = new Array(len);
10292
- for (var i = 0; i < len; i++) {
10293
- attrs[i] = {
10294
- name: list[i].name,
10295
- value: JSON.stringify(list[i].value)
10296
- };
10297
- if (list[i].start != null) {
10298
- attrs[i].start = list[i].start;
10299
- attrs[i].end = list[i].end;
10300
- }
10301
- }
10302
- } else if (!el.pre) {
10303
- // non root node in pre blocks with no attributes
10304
- el.plain = true;
10305
- }
10306
- }
10307
-
10308
- function processElement (
10309
- element,
10310
- options
10311
- ) {
10312
- processKey(element);
10313
-
10314
- // determine whether this is a plain element after
10315
- // removing structural attributes
10316
- element.plain = (
10317
- !element.key &&
10318
- !element.scopedSlots &&
10319
- !element.attrsList.length
10320
- );
10321
-
10322
- processRef(element);
10323
- processSlotContent(element);
10324
- processSlotOutlet(element);
10325
- processComponent(element);
10326
- for (var i = 0; i < transforms.length; i++) {
10327
- element = transforms[i](element, options) || element;
10328
- }
10329
- processAttrs(element);
10330
- return element
10331
- }
10332
-
10333
- function processKey (el) {
10334
- var exp = getBindingAttr(el, 'key');
10335
- if (exp) {
10336
- if (process.env.NODE_ENV !== 'production') {
10337
- if (el.tag === 'template') {
10338
- warn$2(
10339
- "<template> cannot be keyed. Place the key on real elements instead.",
10340
- getRawBindingAttr(el, 'key')
10341
- );
10342
- }
10343
- if (el.for) {
10344
- var iterator = el.iterator2 || el.iterator1;
10345
- var parent = el.parent;
10346
- if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {
10347
- warn$2(
10348
- "Do not use v-for index as key on <transition-group> children, " +
10349
- "this is the same as not using keys.",
10350
- getRawBindingAttr(el, 'key'),
10351
- true /* tip */
10352
- );
10353
- }
10354
- }
10355
- }
10356
- el.key = exp;
10357
- }
10358
- }
10359
-
10360
- function processRef (el) {
10361
- var ref = getBindingAttr(el, 'ref');
10362
- if (ref) {
10363
- el.ref = ref;
10364
- el.refInFor = checkInFor(el);
10365
- }
10366
- }
10367
-
10368
- function processFor (el) {
10369
- var exp;
10370
- if ((exp = getAndRemoveAttr(el, 'v-for'))) {
10371
- var res = parseFor(exp);
10372
- if (res) {
10373
- extend(el, res);
10374
- } else if (process.env.NODE_ENV !== 'production') {
10375
- warn$2(
10376
- ("Invalid v-for expression: " + exp),
10377
- el.rawAttrsMap['v-for']
10378
- );
10379
- }
10380
- }
10381
- }
10382
-
10383
-
10384
-
10385
- function parseFor (exp) {
10386
- var inMatch = exp.match(forAliasRE);
10387
- if (!inMatch) { return }
10388
- var res = {};
10389
- res.for = inMatch[2].trim();
10390
- var alias = inMatch[1].trim().replace(stripParensRE, '');
10391
- var iteratorMatch = alias.match(forIteratorRE);
10392
- if (iteratorMatch) {
10393
- res.alias = alias.replace(forIteratorRE, '').trim();
10394
- res.iterator1 = iteratorMatch[1].trim();
10395
- if (iteratorMatch[2]) {
10396
- res.iterator2 = iteratorMatch[2].trim();
10397
- }
10398
- } else {
10399
- res.alias = alias;
10400
- }
10401
- return res
10402
- }
10403
-
10404
- function processIf (el) {
10405
- var exp = getAndRemoveAttr(el, 'v-if');
10406
- if (exp) {
10407
- el.if = exp;
10408
- addIfCondition(el, {
10409
- exp: exp,
10410
- block: el
10411
- });
10412
- } else {
10413
- if (getAndRemoveAttr(el, 'v-else') != null) {
10414
- el.else = true;
10415
- }
10416
- var elseif = getAndRemoveAttr(el, 'v-else-if');
10417
- if (elseif) {
10418
- el.elseif = elseif;
10419
- }
10420
- }
10421
- }
10422
-
10423
- function processIfConditions (el, parent) {
10424
- var prev = findPrevElement(parent.children);
10425
- if (prev && prev.if) {
10426
- addIfCondition(prev, {
10427
- exp: el.elseif,
10428
- block: el
10429
- });
10430
- } else if (process.env.NODE_ENV !== 'production') {
10431
- warn$2(
10432
- "v-" + (el.elseif ? ('else-if="' + el.elseif + '"') : 'else') + " " +
10433
- "used on element <" + (el.tag) + "> without corresponding v-if.",
10434
- el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']
10435
- );
10436
- }
10437
- }
10438
-
10439
- function findPrevElement (children) {
10440
- var i = children.length;
10441
- while (i--) {
10442
- if (children[i].type === 1) {
10443
- return children[i]
10444
- } else {
10445
- if (process.env.NODE_ENV !== 'production' && children[i].text !== ' ') {
10446
- warn$2(
10447
- "text \"" + (children[i].text.trim()) + "\" between v-if and v-else(-if) " +
10448
- "will be ignored.",
10449
- children[i]
10450
- );
10451
- }
10452
- children.pop();
10453
- }
10454
- }
10455
- }
10456
-
10457
- function addIfCondition (el, condition) {
10458
- if (!el.ifConditions) {
10459
- el.ifConditions = [];
10460
- }
10461
- el.ifConditions.push(condition);
10462
- }
10463
-
10464
- function processOnce (el) {
10465
- var once$$1 = getAndRemoveAttr(el, 'v-once');
10466
- if (once$$1 != null) {
10467
- el.once = true;
10468
- }
10469
- }
10470
-
10471
- // handle content being passed to a component as slot,
10472
- // e.g. <template slot="xxx">, <div slot-scope="xxx">
10473
- function processSlotContent (el) {
10474
- var slotScope;
10475
- if (el.tag === 'template') {
10476
- slotScope = getAndRemoveAttr(el, 'scope');
10477
- /* istanbul ignore if */
10478
- if (process.env.NODE_ENV !== 'production' && slotScope) {
10479
- warn$2(
10480
- "the \"scope\" attribute for scoped slots have been deprecated and " +
10481
- "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " +
10482
- "can also be used on plain elements in addition to <template> to " +
10483
- "denote scoped slots.",
10484
- el.rawAttrsMap['scope'],
10485
- true
10486
- );
10487
- }
10488
- el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
10489
- } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
10490
- /* istanbul ignore if */
10491
- if (process.env.NODE_ENV !== 'production' && el.attrsMap['v-for']) {
10492
- warn$2(
10493
- "Ambiguous combined usage of slot-scope and v-for on <" + (el.tag) + "> " +
10494
- "(v-for takes higher priority). Use a wrapper <template> for the " +
10495
- "scoped slot to make it clearer.",
10496
- el.rawAttrsMap['slot-scope'],
10497
- true
10498
- );
10499
- }
10500
- el.slotScope = slotScope;
10501
- }
10502
-
10503
- // slot="xxx"
10504
- var slotTarget = getBindingAttr(el, 'slot');
10505
- if (slotTarget) {
10506
- el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
10507
- el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
10508
- // preserve slot as an attribute for native shadow DOM compat
10509
- // only for non-scoped slots.
10510
- if (el.tag !== 'template' && !el.slotScope) {
10511
- addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
10512
- }
10513
- }
10514
-
10515
- // 2.6 v-slot syntax
10516
- {
10517
- if (el.tag === 'template') {
10518
- // v-slot on <template>
10519
- var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
10520
- if (slotBinding) {
10521
- if (process.env.NODE_ENV !== 'production') {
10522
- if (el.slotTarget || el.slotScope) {
10523
- warn$2(
10524
- "Unexpected mixed usage of different slot syntaxes.",
10525
- el
10526
- );
10527
- }
10528
- if (el.parent && !maybeComponent(el.parent)) {
10529
- warn$2(
10530
- "<template v-slot> can only appear at the root level inside " +
10531
- "the receiving the component",
10532
- el
10533
- );
10534
- }
10535
- }
10536
- var ref = getSlotName(slotBinding);
10537
- var name = ref.name;
10538
- var dynamic = ref.dynamic;
10539
- el.slotTarget = name;
10540
- el.slotTargetDynamic = dynamic;
10541
- el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
10542
- }
10543
- } else {
10544
- // v-slot on component, denotes default slot
10545
- var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);
10546
- if (slotBinding$1) {
10547
- if (process.env.NODE_ENV !== 'production') {
10548
- if (!maybeComponent(el)) {
10549
- warn$2(
10550
- "v-slot can only be used on components or <template>.",
10551
- slotBinding$1
10552
- );
10553
- }
10554
- if (el.slotScope || el.slotTarget) {
10555
- warn$2(
10556
- "Unexpected mixed usage of different slot syntaxes.",
10557
- el
10558
- );
10559
- }
10560
- if (el.scopedSlots) {
10561
- warn$2(
10562
- "To avoid scope ambiguity, the default slot should also use " +
10563
- "<template> syntax when there are other named slots.",
10564
- slotBinding$1
10565
- );
10566
- }
10567
- }
10568
- // add the component's children to its default slot
10569
- var slots = el.scopedSlots || (el.scopedSlots = {});
10570
- var ref$1 = getSlotName(slotBinding$1);
10571
- var name$1 = ref$1.name;
10572
- var dynamic$1 = ref$1.dynamic;
10573
- var slotContainer = slots[name$1] = createASTElement('template', [], el);
10574
- slotContainer.slotTarget = name$1;
10575
- slotContainer.slotTargetDynamic = dynamic$1;
10576
- slotContainer.children = el.children.filter(function (c) {
10577
- if (!c.slotScope) {
10578
- c.parent = slotContainer;
10579
- return true
10580
- }
10581
- });
10582
- slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;
10583
- // remove children as they are returned from scopedSlots now
10584
- el.children = [];
10585
- // mark el non-plain so data gets generated
10586
- el.plain = false;
10587
- }
10588
- }
10589
- }
10590
- }
10591
-
10592
- function getSlotName (binding) {
10593
- var name = binding.name.replace(slotRE, '');
10594
- if (!name) {
10595
- if (binding.name[0] !== '#') {
10596
- name = 'default';
10597
- } else if (process.env.NODE_ENV !== 'production') {
10598
- warn$2(
10599
- "v-slot shorthand syntax requires a slot name.",
10600
- binding
10601
- );
10602
- }
10603
- }
10604
- return dynamicArgRE.test(name)
10605
- // dynamic [name]
10606
- ? { name: name.slice(1, -1), dynamic: true }
10607
- // static name
10608
- : { name: ("\"" + name + "\""), dynamic: false }
10609
- }
10610
-
10611
- // handle <slot/> outlets
10612
- function processSlotOutlet (el) {
10613
- if (el.tag === 'slot') {
10614
- el.slotName = getBindingAttr(el, 'name');
10615
- if (process.env.NODE_ENV !== 'production' && el.key) {
10616
- warn$2(
10617
- "`key` does not work on <slot> because slots are abstract outlets " +
10618
- "and can possibly expand into multiple elements. " +
10619
- "Use the key on a wrapping element instead.",
10620
- getRawBindingAttr(el, 'key')
10621
- );
10622
- }
10623
- }
10624
- }
10625
-
10626
- function processComponent (el) {
10627
- var binding;
10628
- if ((binding = getBindingAttr(el, 'is'))) {
10629
- el.component = binding;
10630
- }
10631
- if (getAndRemoveAttr(el, 'inline-template') != null) {
10632
- el.inlineTemplate = true;
10633
- }
10634
- }
10635
-
10636
- function processAttrs (el) {
10637
- var list = el.attrsList;
10638
- var i, l, name, rawName, value, modifiers, syncGen, isDynamic;
10639
- for (i = 0, l = list.length; i < l; i++) {
10640
- name = rawName = list[i].name;
10641
- value = list[i].value;
10642
- if (dirRE.test(name)) {
10643
- // mark element as dynamic
10644
- el.hasBindings = true;
10645
- // modifiers
10646
- modifiers = parseModifiers(name.replace(dirRE, ''));
10647
- // support .foo shorthand syntax for the .prop modifier
10648
- if (modifiers) {
10649
- name = name.replace(modifierRE, '');
10650
- }
10651
- if (bindRE.test(name)) { // v-bind
10652
- name = name.replace(bindRE, '');
10653
- value = parseFilters(value);
10654
- isDynamic = dynamicArgRE.test(name);
10655
- if (isDynamic) {
10656
- name = name.slice(1, -1);
10657
- }
10658
- if (
10659
- process.env.NODE_ENV !== 'production' &&
10660
- value.trim().length === 0
10661
- ) {
10662
- warn$2(
10663
- ("The value for a v-bind expression cannot be empty. Found in \"v-bind:" + name + "\"")
10664
- );
10665
- }
10666
- if (modifiers) {
10667
- if (modifiers.prop && !isDynamic) {
10668
- name = camelize(name);
10669
- if (name === 'innerHtml') { name = 'innerHTML'; }
10670
- }
10671
- if (modifiers.camel && !isDynamic) {
10672
- name = camelize(name);
10673
- }
10674
- if (modifiers.sync) {
10675
- syncGen = genAssignmentCode(value, "$event");
10676
- if (!isDynamic) {
10677
- addHandler(
10678
- el,
10679
- ("update:" + (camelize(name))),
10680
- syncGen,
10681
- null,
10682
- false,
10683
- warn$2,
10684
- list[i]
10685
- );
10686
- if (hyphenate(name) !== camelize(name)) {
10687
- addHandler(
10688
- el,
10689
- ("update:" + (hyphenate(name))),
10690
- syncGen,
10691
- null,
10692
- false,
10693
- warn$2,
10694
- list[i]
10695
- );
10696
- }
10697
- } else {
10698
- // handler w/ dynamic event name
10699
- addHandler(
10700
- el,
10701
- ("\"update:\"+(" + name + ")"),
10702
- syncGen,
10703
- null,
10704
- false,
10705
- warn$2,
10706
- list[i],
10707
- true // dynamic
10708
- );
10709
- }
10710
- }
10711
- }
10712
- if ((modifiers && modifiers.prop) || (
10713
- !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)
10714
- )) {
10715
- addProp(el, name, value, list[i], isDynamic);
10716
- } else {
10717
- addAttr(el, name, value, list[i], isDynamic);
10718
- }
10719
- } else if (onRE.test(name)) { // v-on
10720
- name = name.replace(onRE, '');
10721
- isDynamic = dynamicArgRE.test(name);
10722
- if (isDynamic) {
10723
- name = name.slice(1, -1);
10724
- }
10725
- addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);
10726
- } else { // normal directives
10727
- name = name.replace(dirRE, '');
10728
- // parse arg
10729
- var argMatch = name.match(argRE);
10730
- var arg = argMatch && argMatch[1];
10731
- isDynamic = false;
10732
- if (arg) {
10733
- name = name.slice(0, -(arg.length + 1));
10734
- if (dynamicArgRE.test(arg)) {
10735
- arg = arg.slice(1, -1);
10736
- isDynamic = true;
10737
- }
10738
- }
10739
- addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
10740
- if (process.env.NODE_ENV !== 'production' && name === 'model') {
10741
- checkForAliasModel(el, value);
10742
- }
10743
- }
10744
- } else {
10745
- // literal attribute
10746
- if (process.env.NODE_ENV !== 'production') {
10747
- var res = parseText(value, delimiters);
10748
- if (res) {
10749
- warn$2(
10750
- name + "=\"" + value + "\": " +
10751
- 'Interpolation inside attributes has been removed. ' +
10752
- 'Use v-bind or the colon shorthand instead. For example, ' +
10753
- 'instead of <div id="{{ val }}">, use <div :id="val">.',
10754
- list[i]
10755
- );
10756
- }
10757
- }
10758
- addAttr(el, name, JSON.stringify(value), list[i]);
10759
- // #6887 firefox doesn't update muted state if set via attribute
10760
- // even immediately after element creation
10761
- if (!el.component &&
10762
- name === 'muted' &&
10763
- platformMustUseProp(el.tag, el.attrsMap.type, name)) {
10764
- addProp(el, name, 'true', list[i]);
10765
- }
10766
- }
10767
- }
10768
- }
10769
-
10770
- function checkInFor (el) {
10771
- var parent = el;
10772
- while (parent) {
10773
- if (parent.for !== undefined) {
10774
- return true
10775
- }
10776
- parent = parent.parent;
10777
- }
10778
- return false
10779
- }
10780
-
10781
- function parseModifiers (name) {
10782
- var match = name.match(modifierRE);
10783
- if (match) {
10784
- var ret = {};
10785
- match.forEach(function (m) { ret[m.slice(1)] = true; });
10786
- return ret
10787
- }
10788
- }
10789
-
10790
- function makeAttrsMap (attrs) {
10791
- var map = {};
10792
- for (var i = 0, l = attrs.length; i < l; i++) {
10793
- if (
10794
- process.env.NODE_ENV !== 'production' &&
10795
- map[attrs[i].name] && !isIE && !isEdge
10796
- ) {
10797
- warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);
10798
- }
10799
- map[attrs[i].name] = attrs[i].value;
10800
- }
10801
- return map
10802
- }
10803
-
10804
- // for script (e.g. type="x/template") or style, do not decode content
10805
- function isTextTag (el) {
10806
- return el.tag === 'script' || el.tag === 'style'
10807
- }
10808
-
10809
- function isForbiddenTag (el) {
10810
- return (
10811
- el.tag === 'style' ||
10812
- (el.tag === 'script' && (
10813
- !el.attrsMap.type ||
10814
- el.attrsMap.type === 'text/javascript'
10815
- ))
10816
- )
10817
- }
10818
-
10819
- var ieNSBug = /^xmlns:NS\d+/;
10820
- var ieNSPrefix = /^NS\d+:/;
10821
-
10822
- /* istanbul ignore next */
10823
- function guardIESVGBug (attrs) {
10824
- var res = [];
10825
- for (var i = 0; i < attrs.length; i++) {
10826
- var attr = attrs[i];
10827
- if (!ieNSBug.test(attr.name)) {
10828
- attr.name = attr.name.replace(ieNSPrefix, '');
10829
- res.push(attr);
10830
- }
10831
- }
10832
- return res
10833
- }
10834
-
10835
- function checkForAliasModel (el, value) {
10836
- var _el = el;
10837
- while (_el) {
10838
- if (_el.for && _el.alias === value) {
10839
- warn$2(
10840
- "<" + (el.tag) + " v-model=\"" + value + "\">: " +
10841
- "You are binding v-model directly to a v-for iteration alias. " +
10842
- "This will not be able to modify the v-for source array because " +
10843
- "writing to the alias is like modifying a function local variable. " +
10844
- "Consider using an array of objects and use v-model on an object property instead.",
10845
- el.rawAttrsMap['v-model']
10846
- );
10847
- }
10848
- _el = _el.parent;
10849
- }
10850
- }
10851
-
10852
- /* */
10853
-
10854
- function preTransformNode (el, options) {
10855
- if (el.tag === 'input') {
10856
- var map = el.attrsMap;
10857
- if (!map['v-model']) {
10858
- return
10859
- }
10860
-
10861
- var typeBinding;
10862
- if (map[':type'] || map['v-bind:type']) {
10863
- typeBinding = getBindingAttr(el, 'type');
10864
- }
10865
- if (!map.type && !typeBinding && map['v-bind']) {
10866
- typeBinding = "(" + (map['v-bind']) + ").type";
10867
- }
10868
-
10869
- if (typeBinding) {
10870
- var ifCondition = getAndRemoveAttr(el, 'v-if', true);
10871
- var ifConditionExtra = ifCondition ? ("&&(" + ifCondition + ")") : "";
10872
- var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
10873
- var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
10874
- // 1. checkbox
10875
- var branch0 = cloneASTElement(el);
10876
- // process for on the main node
10877
- processFor(branch0);
10878
- addRawAttr(branch0, 'type', 'checkbox');
10879
- processElement(branch0, options);
10880
- branch0.processed = true; // prevent it from double-processed
10881
- branch0.if = "(" + typeBinding + ")==='checkbox'" + ifConditionExtra;
10882
- addIfCondition(branch0, {
10883
- exp: branch0.if,
10884
- block: branch0
10885
- });
10886
- // 2. add radio else-if condition
10887
- var branch1 = cloneASTElement(el);
10888
- getAndRemoveAttr(branch1, 'v-for', true);
10889
- addRawAttr(branch1, 'type', 'radio');
10890
- processElement(branch1, options);
10891
- addIfCondition(branch0, {
10892
- exp: "(" + typeBinding + ")==='radio'" + ifConditionExtra,
10893
- block: branch1
10894
- });
10895
- // 3. other
10896
- var branch2 = cloneASTElement(el);
10897
- getAndRemoveAttr(branch2, 'v-for', true);
10898
- addRawAttr(branch2, ':type', typeBinding);
10899
- processElement(branch2, options);
10900
- addIfCondition(branch0, {
10901
- exp: ifCondition,
10902
- block: branch2
10903
- });
10904
-
10905
- if (hasElse) {
10906
- branch0.else = true;
10907
- } else if (elseIfCondition) {
10908
- branch0.elseif = elseIfCondition;
10909
- }
10910
-
10911
- return branch0
10912
- }
10913
- }
10914
- }
10915
-
10916
- function cloneASTElement (el) {
10917
- return createASTElement(el.tag, el.attrsList.slice(), el.parent)
10918
- }
10919
-
10920
- var model$1 = {
10921
- preTransformNode: preTransformNode
10922
- };
10923
-
10924
- var modules$1 = [
10925
- klass$1,
10926
- style$1,
10927
- model$1
10928
- ];
10929
-
10930
- /* */
10931
-
10932
- function text (el, dir) {
10933
- if (dir.value) {
10934
- addProp(el, 'textContent', ("_s(" + (dir.value) + ")"), dir);
10935
- }
10936
- }
10937
-
10938
- /* */
10939
-
10940
- function html (el, dir) {
10941
- if (dir.value) {
10942
- addProp(el, 'innerHTML', ("_s(" + (dir.value) + ")"), dir);
10943
- }
10944
- }
10945
-
10946
- var directives$1 = {
10947
- model: model,
10948
- text: text,
10949
- html: html
10950
- };
10951
-
10952
- /* */
10953
-
10954
- var baseOptions = {
10955
- expectHTML: true,
10956
- modules: modules$1,
10957
- directives: directives$1,
10958
- isPreTag: isPreTag,
10959
- isUnaryTag: isUnaryTag,
10960
- mustUseProp: mustUseProp,
10961
- canBeLeftOpenTag: canBeLeftOpenTag,
10962
- isReservedTag: isReservedTag,
10963
- getTagNamespace: getTagNamespace,
10964
- staticKeys: genStaticKeys(modules$1)
10965
- };
10966
-
10967
- /* */
10968
-
10969
- var isStaticKey;
10970
- var isPlatformReservedTag;
10971
-
10972
- var genStaticKeysCached = cached(genStaticKeys$1);
10973
-
10974
- /**
10975
- * Goal of the optimizer: walk the generated template AST tree
10976
- * and detect sub-trees that are purely static, i.e. parts of
10977
- * the DOM that never needs to change.
10978
- *
10979
- * Once we detect these sub-trees, we can:
10980
- *
10981
- * 1. Hoist them into constants, so that we no longer need to
10982
- * create fresh nodes for them on each re-render;
10983
- * 2. Completely skip them in the patching process.
10984
- */
10985
- function optimize (root, options) {
10986
- if (!root) { return }
10987
- isStaticKey = genStaticKeysCached(options.staticKeys || '');
10988
- isPlatformReservedTag = options.isReservedTag || no;
10989
- // first pass: mark all non-static nodes.
10990
- markStatic$1(root);
10991
- // second pass: mark static roots.
10992
- markStaticRoots(root, false);
10993
- }
10994
-
10995
- function genStaticKeys$1 (keys) {
10996
- return makeMap(
10997
- 'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
10998
- (keys ? ',' + keys : '')
10999
- )
11000
- }
11001
-
11002
- function markStatic$1 (node) {
11003
- node.static = isStatic(node);
11004
- if (node.type === 1) {
11005
- // do not make component slot content static. this avoids
11006
- // 1. components not able to mutate slot nodes
11007
- // 2. static slot content fails for hot-reloading
11008
- if (
11009
- !isPlatformReservedTag(node.tag) &&
11010
- node.tag !== 'slot' &&
11011
- node.attrsMap['inline-template'] == null
11012
- ) {
11013
- return
11014
- }
11015
- for (var i = 0, l = node.children.length; i < l; i++) {
11016
- var child = node.children[i];
11017
- markStatic$1(child);
11018
- if (!child.static) {
11019
- node.static = false;
11020
- }
11021
- }
11022
- if (node.ifConditions) {
11023
- for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {
11024
- var block = node.ifConditions[i$1].block;
11025
- markStatic$1(block);
11026
- if (!block.static) {
11027
- node.static = false;
11028
- }
11029
- }
11030
- }
11031
- }
11032
- }
11033
-
11034
- function markStaticRoots (node, isInFor) {
11035
- if (node.type === 1) {
11036
- if (node.static || node.once) {
11037
- node.staticInFor = isInFor;
11038
- }
11039
- // For a node to qualify as a static root, it should have children that
11040
- // are not just static text. Otherwise the cost of hoisting out will
11041
- // outweigh the benefits and it's better off to just always render it fresh.
11042
- if (node.static && node.children.length && !(
11043
- node.children.length === 1 &&
11044
- node.children[0].type === 3
11045
- )) {
11046
- node.staticRoot = true;
11047
- return
11048
- } else {
11049
- node.staticRoot = false;
11050
- }
11051
- if (node.children) {
11052
- for (var i = 0, l = node.children.length; i < l; i++) {
11053
- markStaticRoots(node.children[i], isInFor || !!node.for);
11054
- }
11055
- }
11056
- if (node.ifConditions) {
11057
- for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {
11058
- markStaticRoots(node.ifConditions[i$1].block, isInFor);
11059
- }
11060
- }
11061
- }
11062
- }
11063
-
11064
- function isStatic (node) {
11065
- if (node.type === 2) { // expression
11066
- return false
11067
- }
11068
- if (node.type === 3) { // text
11069
- return true
11070
- }
11071
- return !!(node.pre || (
11072
- !node.hasBindings && // no dynamic bindings
11073
- !node.if && !node.for && // not v-if or v-for or v-else
11074
- !isBuiltInTag(node.tag) && // not a built-in
11075
- isPlatformReservedTag(node.tag) && // not a component
11076
- !isDirectChildOfTemplateFor(node) &&
11077
- Object.keys(node).every(isStaticKey)
11078
- ))
11079
- }
11080
-
11081
- function isDirectChildOfTemplateFor (node) {
11082
- while (node.parent) {
11083
- node = node.parent;
11084
- if (node.tag !== 'template') {
11085
- return false
11086
- }
11087
- if (node.for) {
11088
- return true
11089
- }
11090
- }
11091
- return false
11092
- }
11093
-
11094
- /* */
11095
-
11096
- var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function\s*\(/;
11097
- var fnInvokeRE = /\([^)]*?\);*$/;
11098
- var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
11099
-
11100
- // KeyboardEvent.keyCode aliases
11101
- var keyCodes = {
11102
- esc: 27,
11103
- tab: 9,
11104
- enter: 13,
11105
- space: 32,
11106
- up: 38,
11107
- left: 37,
11108
- right: 39,
11109
- down: 40,
11110
- 'delete': [8, 46]
11111
- };
11112
-
11113
- // KeyboardEvent.key aliases
11114
- var keyNames = {
11115
- // #7880: IE11 and Edge use `Esc` for Escape key name.
11116
- esc: ['Esc', 'Escape'],
11117
- tab: 'Tab',
11118
- enter: 'Enter',
11119
- // #9112: IE11 uses `Spacebar` for Space key name.
11120
- space: [' ', 'Spacebar'],
11121
- // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
11122
- up: ['Up', 'ArrowUp'],
11123
- left: ['Left', 'ArrowLeft'],
11124
- right: ['Right', 'ArrowRight'],
11125
- down: ['Down', 'ArrowDown'],
11126
- // #9112: IE11 uses `Del` for Delete key name.
11127
- 'delete': ['Backspace', 'Delete', 'Del']
11128
- };
11129
-
11130
- // #4868: modifiers that prevent the execution of the listener
11131
- // need to explicitly return null so that we can determine whether to remove
11132
- // the listener for .once
11133
- var genGuard = function (condition) { return ("if(" + condition + ")return null;"); };
11134
-
11135
- var modifierCode = {
11136
- stop: '$event.stopPropagation();',
11137
- prevent: '$event.preventDefault();',
11138
- self: genGuard("$event.target !== $event.currentTarget"),
11139
- ctrl: genGuard("!$event.ctrlKey"),
11140
- shift: genGuard("!$event.shiftKey"),
11141
- alt: genGuard("!$event.altKey"),
11142
- meta: genGuard("!$event.metaKey"),
11143
- left: genGuard("'button' in $event && $event.button !== 0"),
11144
- middle: genGuard("'button' in $event && $event.button !== 1"),
11145
- right: genGuard("'button' in $event && $event.button !== 2")
11146
- };
11147
-
11148
- function genHandlers (
11149
- events,
11150
- isNative
11151
- ) {
11152
- var prefix = isNative ? 'nativeOn:' : 'on:';
11153
- var staticHandlers = "";
11154
- var dynamicHandlers = "";
11155
- for (var name in events) {
11156
- var handlerCode = genHandler(events[name]);
11157
- if (events[name] && events[name].dynamic) {
11158
- dynamicHandlers += name + "," + handlerCode + ",";
11159
- } else {
11160
- staticHandlers += "\"" + name + "\":" + handlerCode + ",";
11161
- }
11162
- }
11163
- staticHandlers = "{" + (staticHandlers.slice(0, -1)) + "}";
11164
- if (dynamicHandlers) {
11165
- return prefix + "_d(" + staticHandlers + ",[" + (dynamicHandlers.slice(0, -1)) + "])"
11166
- } else {
11167
- return prefix + staticHandlers
11168
- }
11169
- }
11170
-
11171
- function genHandler (handler) {
11172
- if (!handler) {
11173
- return 'function(){}'
11174
- }
11175
-
11176
- if (Array.isArray(handler)) {
11177
- return ("[" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + "]")
11178
- }
11179
-
11180
- var isMethodPath = simplePathRE.test(handler.value);
11181
- var isFunctionExpression = fnExpRE.test(handler.value);
11182
- var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
11183
-
11184
- if (!handler.modifiers) {
11185
- if (isMethodPath || isFunctionExpression) {
11186
- return handler.value
11187
- }
11188
- return ("function($event){" + (isFunctionInvocation ? ("return " + (handler.value)) : handler.value) + "}") // inline statement
11189
- } else {
11190
- var code = '';
11191
- var genModifierCode = '';
11192
- var keys = [];
11193
- for (var key in handler.modifiers) {
11194
- if (modifierCode[key]) {
11195
- genModifierCode += modifierCode[key];
11196
- // left/right
11197
- if (keyCodes[key]) {
11198
- keys.push(key);
11199
- }
11200
- } else if (key === 'exact') {
11201
- var modifiers = (handler.modifiers);
11202
- genModifierCode += genGuard(
11203
- ['ctrl', 'shift', 'alt', 'meta']
11204
- .filter(function (keyModifier) { return !modifiers[keyModifier]; })
11205
- .map(function (keyModifier) { return ("$event." + keyModifier + "Key"); })
11206
- .join('||')
11207
- );
11208
- } else {
11209
- keys.push(key);
11210
- }
11211
- }
11212
- if (keys.length) {
11213
- code += genKeyFilter(keys);
11214
- }
11215
- // Make sure modifiers like prevent and stop get executed after key filtering
11216
- if (genModifierCode) {
11217
- code += genModifierCode;
11218
- }
11219
- var handlerCode = isMethodPath
11220
- ? ("return " + (handler.value) + "($event)")
11221
- : isFunctionExpression
11222
- ? ("return (" + (handler.value) + ")($event)")
11223
- : isFunctionInvocation
11224
- ? ("return " + (handler.value))
11225
- : handler.value;
11226
- return ("function($event){" + code + handlerCode + "}")
11227
- }
11228
- }
11229
-
11230
- function genKeyFilter (keys) {
11231
- return (
11232
- // make sure the key filters only apply to KeyboardEvents
11233
- // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
11234
- // key events that do not have keyCode property...
11235
- "if(!$event.type.indexOf('key')&&" +
11236
- (keys.map(genFilterCode).join('&&')) + ")return null;"
11237
- )
11238
- }
11239
-
11240
- function genFilterCode (key) {
11241
- var keyVal = parseInt(key, 10);
11242
- if (keyVal) {
11243
- return ("$event.keyCode!==" + keyVal)
11244
- }
11245
- var keyCode = keyCodes[key];
11246
- var keyName = keyNames[key];
11247
- return (
11248
- "_k($event.keyCode," +
11249
- (JSON.stringify(key)) + "," +
11250
- (JSON.stringify(keyCode)) + "," +
11251
- "$event.key," +
11252
- "" + (JSON.stringify(keyName)) +
11253
- ")"
11254
- )
11255
- }
11256
-
11257
- /* */
11258
-
11259
- function on (el, dir) {
11260
- if (process.env.NODE_ENV !== 'production' && dir.modifiers) {
11261
- warn("v-on without argument does not support modifiers.");
11262
- }
11263
- el.wrapListeners = function (code) { return ("_g(" + code + "," + (dir.value) + ")"); };
11264
- }
11265
-
11266
- /* */
11267
-
11268
- function bind$1 (el, dir) {
11269
- el.wrapData = function (code) {
11270
- return ("_b(" + code + ",'" + (el.tag) + "'," + (dir.value) + "," + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + ")")
11271
- };
11272
- }
11273
-
11274
- /* */
11275
-
11276
- var baseDirectives = {
11277
- on: on,
11278
- bind: bind$1,
11279
- cloak: noop
11280
- };
11281
-
11282
- /* */
11283
-
11284
-
11285
-
11286
-
11287
-
11288
- var CodegenState = function CodegenState (options) {
11289
- this.options = options;
11290
- this.warn = options.warn || baseWarn;
11291
- this.transforms = pluckModuleFunction(options.modules, 'transformCode');
11292
- this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
11293
- this.directives = extend(extend({}, baseDirectives), options.directives);
11294
- var isReservedTag = options.isReservedTag || no;
11295
- this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };
11296
- this.onceId = 0;
11297
- this.staticRenderFns = [];
11298
- this.pre = false;
11299
- };
11300
-
11301
-
11302
-
11303
- function generate (
11304
- ast,
11305
- options
11306
- ) {
11307
- var state = new CodegenState(options);
11308
- var code = ast ? genElement(ast, state) : '_c("div")';
11309
- return {
11310
- render: ("with(this){return " + code + "}"),
11311
- staticRenderFns: state.staticRenderFns
11312
- }
11313
- }
11314
-
11315
- function genElement (el, state) {
11316
- if (el.parent) {
11317
- el.pre = el.pre || el.parent.pre;
11318
- }
11319
-
11320
- if (el.staticRoot && !el.staticProcessed) {
11321
- return genStatic(el, state)
11322
- } else if (el.once && !el.onceProcessed) {
11323
- return genOnce(el, state)
11324
- } else if (el.for && !el.forProcessed) {
11325
- return genFor(el, state)
11326
- } else if (el.if && !el.ifProcessed) {
11327
- return genIf(el, state)
11328
- } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
11329
- return genChildren(el, state) || 'void 0'
11330
- } else if (el.tag === 'slot') {
11331
- return genSlot(el, state)
11332
- } else {
11333
- // component or element
11334
- var code;
11335
- if (el.component) {
11336
- code = genComponent(el.component, el, state);
11337
- } else {
11338
- var data;
11339
- if (!el.plain || (el.pre && state.maybeComponent(el))) {
11340
- data = genData$2(el, state);
11341
- }
11342
-
11343
- var children = el.inlineTemplate ? null : genChildren(el, state, true);
11344
- code = "_c('" + (el.tag) + "'" + (data ? ("," + data) : '') + (children ? ("," + children) : '') + ")";
11345
- }
11346
- // module transforms
11347
- for (var i = 0; i < state.transforms.length; i++) {
11348
- code = state.transforms[i](el, code);
11349
- }
11350
- return code
11351
- }
11352
- }
11353
-
11354
- // hoist static sub-trees out
11355
- function genStatic (el, state) {
11356
- el.staticProcessed = true;
11357
- // Some elements (templates) need to behave differently inside of a v-pre
11358
- // node. All pre nodes are static roots, so we can use this as a location to
11359
- // wrap a state change and reset it upon exiting the pre node.
11360
- var originalPreState = state.pre;
11361
- if (el.pre) {
11362
- state.pre = el.pre;
11363
- }
11364
- state.staticRenderFns.push(("with(this){return " + (genElement(el, state)) + "}"));
11365
- state.pre = originalPreState;
11366
- return ("_m(" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + ")")
11367
- }
11368
-
11369
- // v-once
11370
- function genOnce (el, state) {
11371
- el.onceProcessed = true;
11372
- if (el.if && !el.ifProcessed) {
11373
- return genIf(el, state)
11374
- } else if (el.staticInFor) {
11375
- var key = '';
11376
- var parent = el.parent;
11377
- while (parent) {
11378
- if (parent.for) {
11379
- key = parent.key;
11380
- break
11381
- }
11382
- parent = parent.parent;
11383
- }
11384
- if (!key) {
11385
- process.env.NODE_ENV !== 'production' && state.warn(
11386
- "v-once can only be used inside v-for that is keyed. ",
11387
- el.rawAttrsMap['v-once']
11388
- );
11389
- return genElement(el, state)
11390
- }
11391
- return ("_o(" + (genElement(el, state)) + "," + (state.onceId++) + "," + key + ")")
11392
- } else {
11393
- return genStatic(el, state)
11394
- }
11395
- }
11396
-
11397
- function genIf (
11398
- el,
11399
- state,
11400
- altGen,
11401
- altEmpty
11402
- ) {
11403
- el.ifProcessed = true; // avoid recursion
11404
- return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)
11405
- }
11406
-
11407
- function genIfConditions (
11408
- conditions,
11409
- state,
11410
- altGen,
11411
- altEmpty
11412
- ) {
11413
- if (!conditions.length) {
11414
- return altEmpty || '_e()'
11415
- }
11416
-
11417
- var condition = conditions.shift();
11418
- if (condition.exp) {
11419
- return ("(" + (condition.exp) + ")?" + (genTernaryExp(condition.block)) + ":" + (genIfConditions(conditions, state, altGen, altEmpty)))
11420
- } else {
11421
- return ("" + (genTernaryExp(condition.block)))
11422
- }
11423
-
11424
- // v-if with v-once should generate code like (a)?_m(0):_m(1)
11425
- function genTernaryExp (el) {
11426
- return altGen
11427
- ? altGen(el, state)
11428
- : el.once
11429
- ? genOnce(el, state)
11430
- : genElement(el, state)
11431
- }
11432
- }
11433
-
11434
- function genFor (
11435
- el,
11436
- state,
11437
- altGen,
11438
- altHelper
11439
- ) {
11440
- var exp = el.for;
11441
- var alias = el.alias;
11442
- var iterator1 = el.iterator1 ? ("," + (el.iterator1)) : '';
11443
- var iterator2 = el.iterator2 ? ("," + (el.iterator2)) : '';
11444
-
11445
- if (process.env.NODE_ENV !== 'production' &&
11446
- state.maybeComponent(el) &&
11447
- el.tag !== 'slot' &&
11448
- el.tag !== 'template' &&
11449
- !el.key
11450
- ) {
11451
- state.warn(
11452
- "<" + (el.tag) + " v-for=\"" + alias + " in " + exp + "\">: component lists rendered with " +
11453
- "v-for should have explicit keys. " +
11454
- "See https://vuejs.org/guide/list.html#key for more info.",
11455
- el.rawAttrsMap['v-for'],
11456
- true /* tip */
11457
- );
11458
- }
11459
-
11460
- el.forProcessed = true; // avoid recursion
11461
- return (altHelper || '_l') + "((" + exp + ")," +
11462
- "function(" + alias + iterator1 + iterator2 + "){" +
11463
- "return " + ((altGen || genElement)(el, state)) +
11464
- '})'
11465
- }
11466
-
11467
- function genData$2 (el, state) {
11468
- var data = '{';
11469
-
11470
- // directives first.
11471
- // directives may mutate the el's other properties before they are generated.
11472
- var dirs = genDirectives(el, state);
11473
- if (dirs) { data += dirs + ','; }
11474
-
11475
- // key
11476
- if (el.key) {
11477
- data += "key:" + (el.key) + ",";
11478
- }
11479
- // ref
11480
- if (el.ref) {
11481
- data += "ref:" + (el.ref) + ",";
11482
- }
11483
- if (el.refInFor) {
11484
- data += "refInFor:true,";
11485
- }
11486
- // pre
11487
- if (el.pre) {
11488
- data += "pre:true,";
11489
- }
11490
- // record original tag name for components using "is" attribute
11491
- if (el.component) {
11492
- data += "tag:\"" + (el.tag) + "\",";
11493
- }
11494
- // module data generation functions
11495
- for (var i = 0; i < state.dataGenFns.length; i++) {
11496
- data += state.dataGenFns[i](el);
11497
- }
11498
- // attributes
11499
- if (el.attrs) {
11500
- data += "attrs:" + (genProps(el.attrs)) + ",";
11501
- }
11502
- // DOM props
11503
- if (el.props) {
11504
- data += "domProps:" + (genProps(el.props)) + ",";
11505
- }
11506
- // event handlers
11507
- if (el.events) {
11508
- data += (genHandlers(el.events, false)) + ",";
11509
- }
11510
- if (el.nativeEvents) {
11511
- data += (genHandlers(el.nativeEvents, true)) + ",";
11512
- }
11513
- // slot target
11514
- // only for non-scoped slots
11515
- if (el.slotTarget && !el.slotScope) {
11516
- data += "slot:" + (el.slotTarget) + ",";
11517
- }
11518
- // scoped slots
11519
- if (el.scopedSlots) {
11520
- data += (genScopedSlots(el, el.scopedSlots, state)) + ",";
11521
- }
11522
- // component v-model
11523
- if (el.model) {
11524
- data += "model:{value:" + (el.model.value) + ",callback:" + (el.model.callback) + ",expression:" + (el.model.expression) + "},";
11525
- }
11526
- // inline-template
11527
- if (el.inlineTemplate) {
11528
- var inlineTemplate = genInlineTemplate(el, state);
11529
- if (inlineTemplate) {
11530
- data += inlineTemplate + ",";
11531
- }
11532
- }
11533
- data = data.replace(/,$/, '') + '}';
11534
- // v-bind dynamic argument wrap
11535
- // v-bind with dynamic arguments must be applied using the same v-bind object
11536
- // merge helper so that class/style/mustUseProp attrs are handled correctly.
11537
- if (el.dynamicAttrs) {
11538
- data = "_b(" + data + ",\"" + (el.tag) + "\"," + (genProps(el.dynamicAttrs)) + ")";
11539
- }
11540
- // v-bind data wrap
11541
- if (el.wrapData) {
11542
- data = el.wrapData(data);
11543
- }
11544
- // v-on data wrap
11545
- if (el.wrapListeners) {
11546
- data = el.wrapListeners(data);
11547
- }
11548
- return data
11549
- }
11550
-
11551
- function genDirectives (el, state) {
11552
- var dirs = el.directives;
11553
- if (!dirs) { return }
11554
- var res = 'directives:[';
11555
- var hasRuntime = false;
11556
- var i, l, dir, needRuntime;
11557
- for (i = 0, l = dirs.length; i < l; i++) {
11558
- dir = dirs[i];
11559
- needRuntime = true;
11560
- var gen = state.directives[dir.name];
11561
- if (gen) {
11562
- // compile-time directive that manipulates AST.
11563
- // returns true if it also needs a runtime counterpart.
11564
- needRuntime = !!gen(el, dir, state.warn);
11565
- }
11566
- if (needRuntime) {
11567
- hasRuntime = true;
11568
- res += "{name:\"" + (dir.name) + "\",rawName:\"" + (dir.rawName) + "\"" + (dir.value ? (",value:(" + (dir.value) + "),expression:" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (",arg:" + (dir.isDynamicArg ? dir.arg : ("\"" + (dir.arg) + "\""))) : '') + (dir.modifiers ? (",modifiers:" + (JSON.stringify(dir.modifiers))) : '') + "},";
11569
- }
11570
- }
11571
- if (hasRuntime) {
11572
- return res.slice(0, -1) + ']'
11573
- }
11574
- }
11575
-
11576
- function genInlineTemplate (el, state) {
11577
- var ast = el.children[0];
11578
- if (process.env.NODE_ENV !== 'production' && (
11579
- el.children.length !== 1 || ast.type !== 1
11580
- )) {
11581
- state.warn(
11582
- 'Inline-template components must have exactly one child element.',
11583
- { start: el.start }
11584
- );
11585
- }
11586
- if (ast && ast.type === 1) {
11587
- var inlineRenderFns = generate(ast, state.options);
11588
- return ("inlineTemplate:{render:function(){" + (inlineRenderFns.render) + "},staticRenderFns:[" + (inlineRenderFns.staticRenderFns.map(function (code) { return ("function(){" + code + "}"); }).join(',')) + "]}")
11589
- }
11590
- }
11591
-
11592
- function genScopedSlots (
11593
- el,
11594
- slots,
11595
- state
11596
- ) {
11597
- // by default scoped slots are considered "stable", this allows child
11598
- // components with only scoped slots to skip forced updates from parent.
11599
- // but in some cases we have to bail-out of this optimization
11600
- // for example if the slot contains dynamic names, has v-if or v-for on them...
11601
- var needsForceUpdate = Object.keys(slots).some(function (key) {
11602
- var slot = slots[key];
11603
- return (
11604
- slot.slotTargetDynamic ||
11605
- slot.if ||
11606
- slot.for ||
11607
- containsSlotChild(slot) // is passing down slot from parent which may be dynamic
11608
- )
11609
- });
11610
- // OR when it is inside another scoped slot (the reactivity is disconnected)
11611
- // #9438
11612
- if (!needsForceUpdate) {
11613
- var parent = el.parent;
11614
- while (parent) {
11615
- if (parent.slotScope && parent.slotScope !== emptySlotScopeToken) {
11616
- needsForceUpdate = true;
11617
- break
11618
- }
11619
- parent = parent.parent;
11620
- }
11621
- }
11622
-
11623
- return ("scopedSlots:_u([" + (Object.keys(slots).map(function (key) {
11624
- return genScopedSlot(slots[key], state)
11625
- }).join(',')) + "]" + (needsForceUpdate ? ",true" : "") + ")")
11626
- }
11627
-
11628
- function containsSlotChild (el) {
11629
- if (el.type === 1) {
11630
- if (el.tag === 'slot') {
11631
- return true
11632
- }
11633
- return el.children.some(containsSlotChild)
11634
- }
11635
- return false
11636
- }
11637
-
11638
- function genScopedSlot (
11639
- el,
11640
- state
11641
- ) {
11642
- var isLegacySyntax = el.attrsMap['slot-scope'];
11643
- if (el.if && !el.ifProcessed && !isLegacySyntax) {
11644
- return genIf(el, state, genScopedSlot, "null")
11645
- }
11646
- if (el.for && !el.forProcessed) {
11647
- return genFor(el, state, genScopedSlot)
11648
- }
11649
- var slotScope = el.slotScope === emptySlotScopeToken
11650
- ? ""
11651
- : String(el.slotScope);
11652
- var fn = "function(" + slotScope + "){" +
11653
- "return " + (el.tag === 'template'
11654
- ? el.if && isLegacySyntax
11655
- ? ("(" + (el.if) + ")?" + (genChildren(el, state) || 'undefined') + ":undefined")
11656
- : genChildren(el, state) || 'undefined'
11657
- : genElement(el, state)) + "}";
11658
- // reverse proxy v-slot without scope on this.$slots
11659
- var reverseProxy = slotScope ? "" : ",proxy:true";
11660
- return ("{key:" + (el.slotTarget || "\"default\"") + ",fn:" + fn + reverseProxy + "}")
11661
- }
11662
-
11663
- function genChildren (
11664
- el,
11665
- state,
11666
- checkSkip,
11667
- altGenElement,
11668
- altGenNode
11669
- ) {
11670
- var children = el.children;
11671
- if (children.length) {
11672
- var el$1 = children[0];
11673
- // optimize single v-for
11674
- if (children.length === 1 &&
11675
- el$1.for &&
11676
- el$1.tag !== 'template' &&
11677
- el$1.tag !== 'slot'
11678
- ) {
11679
- var normalizationType = checkSkip
11680
- ? state.maybeComponent(el$1) ? ",1" : ",0"
11681
- : "";
11682
- return ("" + ((altGenElement || genElement)(el$1, state)) + normalizationType)
11683
- }
11684
- var normalizationType$1 = checkSkip
11685
- ? getNormalizationType(children, state.maybeComponent)
11686
- : 0;
11687
- var gen = altGenNode || genNode;
11688
- return ("[" + (children.map(function (c) { return gen(c, state); }).join(',')) + "]" + (normalizationType$1 ? ("," + normalizationType$1) : ''))
11689
- }
11690
- }
11691
-
11692
- // determine the normalization needed for the children array.
11693
- // 0: no normalization needed
11694
- // 1: simple normalization needed (possible 1-level deep nested array)
11695
- // 2: full normalization needed
11696
- function getNormalizationType (
11697
- children,
11698
- maybeComponent
11699
- ) {
11700
- var res = 0;
11701
- for (var i = 0; i < children.length; i++) {
11702
- var el = children[i];
11703
- if (el.type !== 1) {
11704
- continue
11705
- }
11706
- if (needsNormalization(el) ||
11707
- (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
11708
- res = 2;
11709
- break
11710
- }
11711
- if (maybeComponent(el) ||
11712
- (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {
11713
- res = 1;
11714
- }
11715
- }
11716
- return res
11717
- }
11718
-
11719
- function needsNormalization (el) {
11720
- return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'
11721
- }
11722
-
11723
- function genNode (node, state) {
11724
- if (node.type === 1) {
11725
- return genElement(node, state)
11726
- } else if (node.type === 3 && node.isComment) {
11727
- return genComment(node)
11728
- } else {
11729
- return genText(node)
11730
- }
11731
- }
11732
-
11733
- function genText (text) {
11734
- return ("_v(" + (text.type === 2
11735
- ? text.expression // no need for () because already wrapped in _s()
11736
- : transformSpecialNewlines(JSON.stringify(text.text))) + ")")
11737
- }
11738
-
11739
- function genComment (comment) {
11740
- return ("_e(" + (JSON.stringify(comment.text)) + ")")
11741
- }
11742
-
11743
- function genSlot (el, state) {
11744
- var slotName = el.slotName || '"default"';
11745
- var children = genChildren(el, state);
11746
- var res = "_t(" + slotName + (children ? ("," + children) : '');
11747
- var attrs = el.attrs || el.dynamicAttrs
11748
- ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({
11749
- // slot props are camelized
11750
- name: camelize(attr.name),
11751
- value: attr.value,
11752
- dynamic: attr.dynamic
11753
- }); }))
11754
- : null;
11755
- var bind$$1 = el.attrsMap['v-bind'];
11756
- if ((attrs || bind$$1) && !children) {
11757
- res += ",null";
11758
- }
11759
- if (attrs) {
11760
- res += "," + attrs;
11761
- }
11762
- if (bind$$1) {
11763
- res += (attrs ? '' : ',null') + "," + bind$$1;
11764
- }
11765
- return res + ')'
11766
- }
11767
-
11768
- // componentName is el.component, take it as argument to shun flow's pessimistic refinement
11769
- function genComponent (
11770
- componentName,
11771
- el,
11772
- state
11773
- ) {
11774
- var children = el.inlineTemplate ? null : genChildren(el, state, true);
11775
- return ("_c(" + componentName + "," + (genData$2(el, state)) + (children ? ("," + children) : '') + ")")
11776
- }
11777
-
11778
- function genProps (props) {
11779
- var staticProps = "";
11780
- var dynamicProps = "";
11781
- for (var i = 0; i < props.length; i++) {
11782
- var prop = props[i];
11783
- var value = transformSpecialNewlines(prop.value);
11784
- if (prop.dynamic) {
11785
- dynamicProps += (prop.name) + "," + value + ",";
11786
- } else {
11787
- staticProps += "\"" + (prop.name) + "\":" + value + ",";
11788
- }
11789
- }
11790
- staticProps = "{" + (staticProps.slice(0, -1)) + "}";
11791
- if (dynamicProps) {
11792
- return ("_d(" + staticProps + ",[" + (dynamicProps.slice(0, -1)) + "])")
11793
- } else {
11794
- return staticProps
11795
- }
11796
- }
11797
-
11798
- // #3895, #4268
11799
- function transformSpecialNewlines (text) {
11800
- return text
11801
- .replace(/\u2028/g, '\\u2028')
11802
- .replace(/\u2029/g, '\\u2029')
11803
- }
11804
-
11805
- /* */
11806
-
11807
-
11808
-
11809
- // these keywords should not appear inside expressions, but operators like
11810
- // typeof, instanceof and in are allowed
11811
- var prohibitedKeywordRE = new RegExp('\\b' + (
11812
- 'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
11813
- 'super,throw,while,yield,delete,export,import,return,switch,default,' +
11814
- 'extends,finally,continue,debugger,function,arguments'
11815
- ).split(',').join('\\b|\\b') + '\\b');
11816
-
11817
- // these unary operators should not be used as property/method names
11818
- var unaryOperatorsRE = new RegExp('\\b' + (
11819
- 'delete,typeof,void'
11820
- ).split(',').join('\\s*\\([^\\)]*\\)|\\b') + '\\s*\\([^\\)]*\\)');
11821
-
11822
- // strip strings in expressions
11823
- var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
11824
-
11825
- // detect problematic expressions in a template
11826
- function detectErrors (ast, warn) {
11827
- if (ast) {
11828
- checkNode(ast, warn);
11829
- }
11830
- }
11831
-
11832
- function checkNode (node, warn) {
11833
- if (node.type === 1) {
11834
- for (var name in node.attrsMap) {
11835
- if (dirRE.test(name)) {
11836
- var value = node.attrsMap[name];
11837
- if (value) {
11838
- var range = node.rawAttrsMap[name];
11839
- if (name === 'v-for') {
11840
- checkFor(node, ("v-for=\"" + value + "\""), warn, range);
11841
- } else if (onRE.test(name)) {
11842
- checkEvent(value, (name + "=\"" + value + "\""), warn, range);
11843
- } else {
11844
- checkExpression(value, (name + "=\"" + value + "\""), warn, range);
11845
- }
11846
- }
11847
- }
11848
- }
11849
- if (node.children) {
11850
- for (var i = 0; i < node.children.length; i++) {
11851
- checkNode(node.children[i], warn);
11852
- }
11853
- }
11854
- } else if (node.type === 2) {
11855
- checkExpression(node.expression, node.text, warn, node);
11856
- }
11857
- }
11858
-
11859
- function checkEvent (exp, text, warn, range) {
11860
- var stipped = exp.replace(stripStringRE, '');
11861
- var keywordMatch = stipped.match(unaryOperatorsRE);
11862
- if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {
11863
- warn(
11864
- "avoid using JavaScript unary operator as property name: " +
11865
- "\"" + (keywordMatch[0]) + "\" in expression " + (text.trim()),
11866
- range
11867
- );
11868
- }
11869
- checkExpression(exp, text, warn, range);
11870
- }
11871
-
11872
- function checkFor (node, text, warn, range) {
11873
- checkExpression(node.for || '', text, warn, range);
11874
- checkIdentifier(node.alias, 'v-for alias', text, warn, range);
11875
- checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
11876
- checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
11877
- }
11878
-
11879
- function checkIdentifier (
11880
- ident,
11881
- type,
11882
- text,
11883
- warn,
11884
- range
11885
- ) {
11886
- if (typeof ident === 'string') {
11887
- try {
11888
- new Function(("var " + ident + "=_"));
11889
- } catch (e) {
11890
- warn(("invalid " + type + " \"" + ident + "\" in expression: " + (text.trim())), range);
11891
- }
11892
- }
11893
- }
11894
-
11895
- function checkExpression (exp, text, warn, range) {
11896
- try {
11897
- new Function(("return " + exp));
11898
- } catch (e) {
11899
- var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);
11900
- if (keywordMatch) {
11901
- warn(
11902
- "avoid using JavaScript keyword as property name: " +
11903
- "\"" + (keywordMatch[0]) + "\"\n Raw expression: " + (text.trim()),
11904
- range
11905
- );
11906
- } else {
11907
- warn(
11908
- "invalid expression: " + (e.message) + " in\n\n" +
11909
- " " + exp + "\n\n" +
11910
- " Raw expression: " + (text.trim()) + "\n",
11911
- range
11912
- );
11913
- }
11914
- }
11915
- }
11916
-
11917
- /* */
11918
-
11919
- var range = 2;
11920
-
11921
- function generateCodeFrame (
11922
- source,
11923
- start,
11924
- end
11925
- ) {
11926
- if ( start === void 0 ) start = 0;
11927
- if ( end === void 0 ) end = source.length;
11928
-
11929
- var lines = source.split(/\r?\n/);
11930
- var count = 0;
11931
- var res = [];
11932
- for (var i = 0; i < lines.length; i++) {
11933
- count += lines[i].length + 1;
11934
- if (count >= start) {
11935
- for (var j = i - range; j <= i + range || end > count; j++) {
11936
- if (j < 0 || j >= lines.length) { continue }
11937
- res.push(("" + (j + 1) + (repeat$1(" ", 3 - String(j + 1).length)) + "| " + (lines[j])));
11938
- var lineLength = lines[j].length;
11939
- if (j === i) {
11940
- // push underline
11941
- var pad = start - (count - lineLength) + 1;
11942
- var length = end > count ? lineLength - pad : end - start;
11943
- res.push(" | " + repeat$1(" ", pad) + repeat$1("^", length));
11944
- } else if (j > i) {
11945
- if (end > count) {
11946
- var length$1 = Math.min(end - count, lineLength);
11947
- res.push(" | " + repeat$1("^", length$1));
11948
- }
11949
- count += lineLength + 1;
11950
- }
11951
- }
11952
- break
11953
- }
11954
- }
11955
- return res.join('\n')
11956
- }
11957
-
11958
- function repeat$1 (str, n) {
11959
- var result = '';
11960
- while (true) { // eslint-disable-line
11961
- if (n & 1) { result += str; }
11962
- n >>>= 1;
11963
- if (n <= 0) { break }
11964
- str += str;
11965
- }
11966
- return result
11967
- }
11968
-
11969
- /* */
11970
-
11971
-
11972
-
11973
- function createFunction (code, errors) {
11974
- try {
11975
- return new Function(code)
11976
- } catch (err) {
11977
- errors.push({ err: err, code: code });
11978
- return noop
11979
- }
11980
- }
11981
-
11982
- function createCompileToFunctionFn (compile) {
11983
- var cache = Object.create(null);
11984
-
11985
- return function compileToFunctions (
11986
- template,
11987
- options,
11988
- vm
11989
- ) {
11990
- options = extend({}, options);
11991
- var warn$$1 = options.warn || warn;
11992
- delete options.warn;
11993
-
11994
- /* istanbul ignore if */
11995
- if (process.env.NODE_ENV !== 'production') {
11996
- // detect possible CSP restriction
11997
- try {
11998
- new Function('return 1');
11999
- } catch (e) {
12000
- if (e.toString().match(/unsafe-eval|CSP/)) {
12001
- warn$$1(
12002
- 'It seems you are using the standalone build of Vue.js in an ' +
12003
- 'environment with Content Security Policy that prohibits unsafe-eval. ' +
12004
- 'The template compiler cannot work in this environment. Consider ' +
12005
- 'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
12006
- 'templates into render functions.'
12007
- );
12008
- }
12009
- }
12010
- }
12011
-
12012
- // check cache
12013
- var key = options.delimiters
12014
- ? String(options.delimiters) + template
12015
- : template;
12016
- if (cache[key]) {
12017
- return cache[key]
12018
- }
12019
-
12020
- // compile
12021
- var compiled = compile(template, options);
12022
-
12023
- // check compilation errors/tips
12024
- if (process.env.NODE_ENV !== 'production') {
12025
- if (compiled.errors && compiled.errors.length) {
12026
- if (options.outputSourceRange) {
12027
- compiled.errors.forEach(function (e) {
12028
- warn$$1(
12029
- "Error compiling template:\n\n" + (e.msg) + "\n\n" +
12030
- generateCodeFrame(template, e.start, e.end),
12031
- vm
12032
- );
12033
- });
12034
- } else {
12035
- warn$$1(
12036
- "Error compiling template:\n\n" + template + "\n\n" +
12037
- compiled.errors.map(function (e) { return ("- " + e); }).join('\n') + '\n',
12038
- vm
12039
- );
12040
- }
12041
- }
12042
- if (compiled.tips && compiled.tips.length) {
12043
- if (options.outputSourceRange) {
12044
- compiled.tips.forEach(function (e) { return tip(e.msg, vm); });
12045
- } else {
12046
- compiled.tips.forEach(function (msg) { return tip(msg, vm); });
12047
- }
12048
- }
12049
- }
12050
-
12051
- // turn code into functions
12052
- var res = {};
12053
- var fnGenErrors = [];
12054
- res.render = createFunction(compiled.render, fnGenErrors);
12055
- res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
12056
- return createFunction(code, fnGenErrors)
12057
- });
12058
-
12059
- // check function generation errors.
12060
- // this should only happen if there is a bug in the compiler itself.
12061
- // mostly for codegen development use
12062
- /* istanbul ignore if */
12063
- if (process.env.NODE_ENV !== 'production') {
12064
- if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
12065
- warn$$1(
12066
- "Failed to generate render function:\n\n" +
12067
- fnGenErrors.map(function (ref) {
12068
- var err = ref.err;
12069
- var code = ref.code;
12070
-
12071
- return ((err.toString()) + " in\n\n" + code + "\n");
12072
- }).join('\n'),
12073
- vm
12074
- );
12075
- }
12076
- }
12077
-
12078
- return (cache[key] = res)
12079
- }
12080
- }
12081
-
12082
- /* */
12083
-
12084
- function createCompilerCreator (baseCompile) {
12085
- return function createCompiler (baseOptions) {
12086
- function compile (
12087
- template,
12088
- options
12089
- ) {
12090
- var finalOptions = Object.create(baseOptions);
12091
- var errors = [];
12092
- var tips = [];
12093
-
12094
- var warn = function (msg, range, tip) {
12095
- (tip ? tips : errors).push(msg);
12096
- };
12097
-
12098
- if (options) {
12099
- if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
12100
- // $flow-disable-line
12101
- var leadingSpaceLength = template.match(/^\s*/)[0].length;
12102
-
12103
- warn = function (msg, range, tip) {
12104
- var data = { msg: msg };
12105
- if (range) {
12106
- if (range.start != null) {
12107
- data.start = range.start + leadingSpaceLength;
12108
- }
12109
- if (range.end != null) {
12110
- data.end = range.end + leadingSpaceLength;
12111
- }
12112
- }
12113
- (tip ? tips : errors).push(data);
12114
- };
12115
- }
12116
- // merge custom modules
12117
- if (options.modules) {
12118
- finalOptions.modules =
12119
- (baseOptions.modules || []).concat(options.modules);
12120
- }
12121
- // merge custom directives
12122
- if (options.directives) {
12123
- finalOptions.directives = extend(
12124
- Object.create(baseOptions.directives || null),
12125
- options.directives
12126
- );
12127
- }
12128
- // copy other options
12129
- for (var key in options) {
12130
- if (key !== 'modules' && key !== 'directives') {
12131
- finalOptions[key] = options[key];
12132
- }
12133
- }
12134
- }
12135
-
12136
- finalOptions.warn = warn;
12137
-
12138
- var compiled = baseCompile(template.trim(), finalOptions);
12139
- if (process.env.NODE_ENV !== 'production') {
12140
- detectErrors(compiled.ast, warn);
12141
- }
12142
- compiled.errors = errors;
12143
- compiled.tips = tips;
12144
- return compiled
12145
- }
12146
-
12147
- return {
12148
- compile: compile,
12149
- compileToFunctions: createCompileToFunctionFn(compile)
12150
- }
12151
- }
12152
- }
12153
-
12154
- /* */
12155
-
12156
- // `createCompilerCreator` allows creating compilers that use alternative
12157
- // parser/optimizer/codegen, e.g the SSR optimizing compiler.
12158
- // Here we just export a default compiler using the default parts.
12159
- var createCompiler = createCompilerCreator(function baseCompile (
12160
- template,
12161
- options
12162
- ) {
12163
- var ast = parse(template.trim(), options);
12164
- if (options.optimize !== false) {
12165
- optimize(ast, options);
12166
- }
12167
- var code = generate(ast, options);
12168
- return {
12169
- ast: ast,
12170
- render: code.render,
12171
- staticRenderFns: code.staticRenderFns
12172
- }
12173
- });
12174
-
12175
- /* */
12176
-
12177
- var ref$1 = createCompiler(baseOptions);
12178
- var compile = ref$1.compile;
12179
- var compileToFunctions = ref$1.compileToFunctions;
12180
-
12181
- /* */
12182
-
12183
- // check whether current browser encodes a char inside attribute values
12184
- var div;
12185
- function getShouldDecode (href) {
12186
- div = div || document.createElement('div');
12187
- div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>";
12188
- return div.innerHTML.indexOf('&#10;') > 0
12189
- }
12190
-
12191
- // #3663: IE encodes newlines inside attribute values while other browsers don't
12192
- var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
12193
- // #6828: chrome encodes content in a[href]
12194
- var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;
12195
-
12196
- /* */
12197
-
12198
- var idToTemplate = cached(function (id) {
12199
- var el = query(id);
12200
- return el && el.innerHTML
12201
- });
12202
-
12203
- var mount = Vue.prototype.$mount;
12204
- Vue.prototype.$mount = function (
12205
- el,
12206
- hydrating
12207
- ) {
12208
- el = el && query(el);
12209
-
12210
- /* istanbul ignore if */
12211
- if (el === document.body || el === document.documentElement) {
12212
- process.env.NODE_ENV !== 'production' && warn(
12213
- "Do not mount Vue to <html> or <body> - mount to normal elements instead."
12214
- );
12215
- return this
12216
- }
12217
-
12218
- var options = this.$options;
12219
- // resolve template/el and convert to render function
12220
- if (!options.render) {
12221
- var template = options.template;
12222
- if (template) {
12223
- if (typeof template === 'string') {
12224
- if (template.charAt(0) === '#') {
12225
- template = idToTemplate(template);
12226
- /* istanbul ignore if */
12227
- if (process.env.NODE_ENV !== 'production' && !template) {
12228
- warn(
12229
- ("Template element not found or is empty: " + (options.template)),
12230
- this
12231
- );
12232
- }
12233
- }
12234
- } else if (template.nodeType) {
12235
- template = template.innerHTML;
12236
- } else {
12237
- if (process.env.NODE_ENV !== 'production') {
12238
- warn('invalid template option:' + template, this);
12239
- }
12240
- return this
12241
- }
12242
- } else if (el) {
12243
- template = getOuterHTML(el);
12244
- }
12245
- if (template) {
12246
- /* istanbul ignore if */
12247
- if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
12248
- mark('compile');
12249
- }
12250
-
12251
- var ref = compileToFunctions(template, {
12252
- outputSourceRange: process.env.NODE_ENV !== 'production',
12253
- shouldDecodeNewlines: shouldDecodeNewlines,
12254
- shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,
12255
- delimiters: options.delimiters,
12256
- comments: options.comments
12257
- }, this);
12258
- var render = ref.render;
12259
- var staticRenderFns = ref.staticRenderFns;
12260
- options.render = render;
12261
- options.staticRenderFns = staticRenderFns;
12262
-
12263
- /* istanbul ignore if */
12264
- if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
12265
- mark('compile end');
12266
- measure(("vue " + (this._name) + " compile"), 'compile', 'compile end');
12267
- }
12268
- }
12269
- }
12270
- return mount.call(this, el, hydrating)
12271
- };
12272
-
12273
- /**
12274
- * Get outerHTML of elements, taking care
12275
- * of SVG elements in IE as well.
12276
- */
12277
- function getOuterHTML (el) {
12278
- if (el.outerHTML) {
12279
- return el.outerHTML
12280
- } else {
12281
- var container = document.createElement('div');
12282
- container.appendChild(el.cloneNode(true));
12283
- return container.innerHTML
12284
- }
12285
- }
12286
-
12287
- Vue.compile = compileToFunctions;
12288
-
12289
- /* harmony default export */ __webpack_exports__["default"] = (Vue);
12290
-
12291
- /* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(4), __webpack_require__(2), __webpack_require__(8).setImmediate))
12292
-
12293
- /***/ }),
12294
- /* 4 */
12295
- /***/ (function(module, exports) {
12296
-
12297
- // shim for using process in browser
12298
- var process = module.exports = {};
12299
-
12300
- // cached from whatever global is present so that test runners that stub it
12301
- // don't break things. But we need to wrap it in a try catch in case it is
12302
- // wrapped in strict mode code which doesn't define any globals. It's inside a
12303
- // function because try/catches deoptimize in certain engines.
12304
-
12305
- var cachedSetTimeout;
12306
- var cachedClearTimeout;
12307
-
12308
- function defaultSetTimout() {
12309
- throw new Error('setTimeout has not been defined');
12310
- }
12311
- function defaultClearTimeout () {
12312
- throw new Error('clearTimeout has not been defined');
12313
- }
12314
- (function () {
12315
- try {
12316
- if (typeof setTimeout === 'function') {
12317
- cachedSetTimeout = setTimeout;
12318
- } else {
12319
- cachedSetTimeout = defaultSetTimout;
12320
- }
12321
- } catch (e) {
12322
- cachedSetTimeout = defaultSetTimout;
12323
- }
12324
- try {
12325
- if (typeof clearTimeout === 'function') {
12326
- cachedClearTimeout = clearTimeout;
12327
- } else {
12328
- cachedClearTimeout = defaultClearTimeout;
12329
- }
12330
- } catch (e) {
12331
- cachedClearTimeout = defaultClearTimeout;
12332
- }
12333
- } ())
12334
- function runTimeout(fun) {
12335
- if (cachedSetTimeout === setTimeout) {
12336
- //normal enviroments in sane situations
12337
- return setTimeout(fun, 0);
12338
- }
12339
- // if setTimeout wasn't available but was latter defined
12340
- if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
12341
- cachedSetTimeout = setTimeout;
12342
- return setTimeout(fun, 0);
12343
- }
12344
- try {
12345
- // when when somebody has screwed with setTimeout but no I.E. maddness
12346
- return cachedSetTimeout(fun, 0);
12347
- } catch(e){
12348
- try {
12349
- // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
12350
- return cachedSetTimeout.call(null, fun, 0);
12351
- } catch(e){
12352
- // 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
12353
- return cachedSetTimeout.call(this, fun, 0);
12354
- }
12355
- }
12356
-
12357
-
12358
- }
12359
- function runClearTimeout(marker) {
12360
- if (cachedClearTimeout === clearTimeout) {
12361
- //normal enviroments in sane situations
12362
- return clearTimeout(marker);
12363
- }
12364
- // if clearTimeout wasn't available but was latter defined
12365
- if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
12366
- cachedClearTimeout = clearTimeout;
12367
- return clearTimeout(marker);
12368
- }
12369
- try {
12370
- // when when somebody has screwed with setTimeout but no I.E. maddness
12371
- return cachedClearTimeout(marker);
12372
- } catch (e){
12373
- try {
12374
- // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
12375
- return cachedClearTimeout.call(null, marker);
12376
- } catch (e){
12377
- // 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.
12378
- // Some versions of I.E. have different rules for clearTimeout vs setTimeout
12379
- return cachedClearTimeout.call(this, marker);
12380
- }
12381
- }
12382
-
12383
-
12384
-
12385
- }
12386
- var queue = [];
12387
- var draining = false;
12388
- var currentQueue;
12389
- var queueIndex = -1;
12390
-
12391
- function cleanUpNextTick() {
12392
- if (!draining || !currentQueue) {
12393
- return;
12394
- }
12395
- draining = false;
12396
- if (currentQueue.length) {
12397
- queue = currentQueue.concat(queue);
12398
- } else {
12399
- queueIndex = -1;
12400
- }
12401
- if (queue.length) {
12402
- drainQueue();
12403
- }
12404
- }
12405
-
12406
- function drainQueue() {
12407
- if (draining) {
12408
- return;
12409
- }
12410
- var timeout = runTimeout(cleanUpNextTick);
12411
- draining = true;
12412
-
12413
- var len = queue.length;
12414
- while(len) {
12415
- currentQueue = queue;
12416
- queue = [];
12417
- while (++queueIndex < len) {
12418
- if (currentQueue) {
12419
- currentQueue[queueIndex].run();
12420
- }
12421
- }
12422
- queueIndex = -1;
12423
- len = queue.length;
12424
- }
12425
- currentQueue = null;
12426
- draining = false;
12427
- runClearTimeout(timeout);
12428
- }
12429
-
12430
- process.nextTick = function (fun) {
12431
- var args = new Array(arguments.length - 1);
12432
- if (arguments.length > 1) {
12433
- for (var i = 1; i < arguments.length; i++) {
12434
- args[i - 1] = arguments[i];
12435
- }
12436
- }
12437
- queue.push(new Item(fun, args));
12438
- if (queue.length === 1 && !draining) {
12439
- runTimeout(drainQueue);
12440
- }
12441
- };
12442
-
12443
- // v8 likes predictible objects
12444
- function Item(fun, array) {
12445
- this.fun = fun;
12446
- this.array = array;
12447
- }
12448
- Item.prototype.run = function () {
12449
- this.fun.apply(null, this.array);
12450
- };
12451
- process.title = 'browser';
12452
- process.browser = true;
12453
- process.env = {};
12454
- process.argv = [];
12455
- process.version = ''; // empty string to avoid regexp issues
12456
- process.versions = {};
12457
-
12458
- function noop() {}
12459
-
12460
- process.on = noop;
12461
- process.addListener = noop;
12462
- process.once = noop;
12463
- process.off = noop;
12464
- process.removeListener = noop;
12465
- process.removeAllListeners = noop;
12466
- process.emit = noop;
12467
- process.prependListener = noop;
12468
- process.prependOnceListener = noop;
12469
-
12470
- process.listeners = function (name) { return [] }
12471
-
12472
- process.binding = function (name) {
12473
- throw new Error('process.binding is not supported');
12474
- };
12475
-
12476
- process.cwd = function () { return '/' };
12477
- process.chdir = function (dir) {
12478
- throw new Error('process.chdir is not supported');
12479
- };
12480
- process.umask = function() { return 0; };
12481
-
12482
-
12483
- /***/ }),
12484
- /* 5 */
12485
- /***/ (function(module, exports, __webpack_require__) {
12486
-
12487
- var __vue_script__, __vue_template__
12488
- __vue_script__ = __webpack_require__(28)
12489
- __vue_template__ = __webpack_require__(29)
12490
- module.exports = __vue_script__ || {}
12491
- if (module.exports.__esModule) module.exports = module.exports.default
12492
- if (__vue_template__) { (typeof module.exports === "function" ? module.exports.options : module.exports).template = __vue_template__ }
12493
- if (false) {(function () { module.hot.accept()
12494
- var hotAPI = require("vue-hot-reload-api")
12495
- hotAPI.install(require("vue"), true)
12496
- if (!hotAPI.compatible) return
12497
- var id = "D:\\dev\\optimole-wp\\assets\\vue\\components\\api-key-form.vue"
12498
- if (!module.hot.data) {
12499
- hotAPI.createRecord(id, module.exports)
12500
- } else {
12501
- hotAPI.update(id, module.exports, __vue_template__)
12502
- }
12503
- })()}
12504
-
12505
- /***/ }),
12506
- /* 6 */
12507
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
12508
-
12509
- "use strict";
12510
- Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
12511
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Url", function() { return Url; });
12512
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Http", function() { return Http; });
12513
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Resource", function() { return Resource; });
12514
- /*!
12515
- * vue-resource v1.5.1
12516
- * https://github.com/pagekit/vue-resource
12517
- * Released under the MIT License.
12518
- */
12519
-
12520
- /**
12521
- * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis)
12522
- */
12523
-
12524
- var RESOLVED = 0;
12525
- var REJECTED = 1;
12526
- var PENDING = 2;
12527
-
12528
- function Promise$1(executor) {
12529
-
12530
- this.state = PENDING;
12531
- this.value = undefined;
12532
- this.deferred = [];
12533
-
12534
- var promise = this;
12535
-
12536
- try {
12537
- executor(function (x) {
12538
- promise.resolve(x);
12539
- }, function (r) {
12540
- promise.reject(r);
12541
- });
12542
- } catch (e) {
12543
- promise.reject(e);
12544
- }
12545
- }
12546
-
12547
- Promise$1.reject = function (r) {
12548
- return new Promise$1(function (resolve, reject) {
12549
- reject(r);
12550
- });
12551
- };
12552
-
12553
- Promise$1.resolve = function (x) {
12554
- return new Promise$1(function (resolve, reject) {
12555
- resolve(x);
12556
- });
12557
- };
12558
-
12559
- Promise$1.all = function all(iterable) {
12560
- return new Promise$1(function (resolve, reject) {
12561
- var count = 0, result = [];
12562
-
12563
- if (iterable.length === 0) {
12564
- resolve(result);
12565
- }
12566
-
12567
- function resolver(i) {
12568
- return function (x) {
12569
- result[i] = x;
12570
- count += 1;
12571
-
12572
- if (count === iterable.length) {
12573
- resolve(result);
12574
- }
12575
- };
12576
- }
12577
-
12578
- for (var i = 0; i < iterable.length; i += 1) {
12579
- Promise$1.resolve(iterable[i]).then(resolver(i), reject);
12580
- }
12581
- });
12582
- };
12583
-
12584
- Promise$1.race = function race(iterable) {
12585
- return new Promise$1(function (resolve, reject) {
12586
- for (var i = 0; i < iterable.length; i += 1) {
12587
- Promise$1.resolve(iterable[i]).then(resolve, reject);
12588
- }
12589
- });
12590
- };
12591
-
12592
- var p = Promise$1.prototype;
12593
-
12594
- p.resolve = function resolve(x) {
12595
- var promise = this;
12596
-
12597
- if (promise.state === PENDING) {
12598
- if (x === promise) {
12599
- throw new TypeError('Promise settled with itself.');
12600
- }
12601
-
12602
- var called = false;
12603
-
12604
- try {
12605
- var then = x && x['then'];
12606
-
12607
- if (x !== null && typeof x === 'object' && typeof then === 'function') {
12608
- then.call(x, function (x) {
12609
- if (!called) {
12610
- promise.resolve(x);
12611
- }
12612
- called = true;
12613
-
12614
- }, function (r) {
12615
- if (!called) {
12616
- promise.reject(r);
12617
- }
12618
- called = true;
12619
- });
12620
- return;
12621
- }
12622
- } catch (e) {
12623
- if (!called) {
12624
- promise.reject(e);
12625
- }
12626
- return;
12627
- }
12628
-
12629
- promise.state = RESOLVED;
12630
- promise.value = x;
12631
- promise.notify();
12632
- }
12633
- };
12634
-
12635
- p.reject = function reject(reason) {
12636
- var promise = this;
12637
-
12638
- if (promise.state === PENDING) {
12639
- if (reason === promise) {
12640
- throw new TypeError('Promise settled with itself.');
12641
- }
12642
-
12643
- promise.state = REJECTED;
12644
- promise.value = reason;
12645
- promise.notify();
12646
- }
12647
- };
12648
-
12649
- p.notify = function notify() {
12650
- var promise = this;
12651
-
12652
- nextTick(function () {
12653
- if (promise.state !== PENDING) {
12654
- while (promise.deferred.length) {
12655
- var deferred = promise.deferred.shift(),
12656
- onResolved = deferred[0],
12657
- onRejected = deferred[1],
12658
- resolve = deferred[2],
12659
- reject = deferred[3];
12660
-
12661
- try {
12662
- if (promise.state === RESOLVED) {
12663
- if (typeof onResolved === 'function') {
12664
- resolve(onResolved.call(undefined, promise.value));
12665
- } else {
12666
- resolve(promise.value);
12667
- }
12668
- } else if (promise.state === REJECTED) {
12669
- if (typeof onRejected === 'function') {
12670
- resolve(onRejected.call(undefined, promise.value));
12671
- } else {
12672
- reject(promise.value);
12673
- }
12674
- }
12675
- } catch (e) {
12676
- reject(e);
12677
- }
12678
- }
12679
- }
12680
- });
12681
- };
12682
-
12683
- p.then = function then(onResolved, onRejected) {
12684
- var promise = this;
12685
-
12686
- return new Promise$1(function (resolve, reject) {
12687
- promise.deferred.push([onResolved, onRejected, resolve, reject]);
12688
- promise.notify();
12689
- });
12690
- };
12691
-
12692
- p.catch = function (onRejected) {
12693
- return this.then(undefined, onRejected);
12694
- };
12695
-
12696
- /**
12697
- * Promise adapter.
12698
- */
12699
-
12700
- if (typeof Promise === 'undefined') {
12701
- window.Promise = Promise$1;
12702
- }
12703
-
12704
- function PromiseObj(executor, context) {
12705
-
12706
- if (executor instanceof Promise) {
12707
- this.promise = executor;
12708
- } else {
12709
- this.promise = new Promise(executor.bind(context));
12710
- }
12711
-
12712
- this.context = context;
12713
- }
12714
-
12715
- PromiseObj.all = function (iterable, context) {
12716
- return new PromiseObj(Promise.all(iterable), context);
12717
- };
12718
-
12719
- PromiseObj.resolve = function (value, context) {
12720
- return new PromiseObj(Promise.resolve(value), context);
12721
- };
12722
-
12723
- PromiseObj.reject = function (reason, context) {
12724
- return new PromiseObj(Promise.reject(reason), context);
12725
- };
12726
-
12727
- PromiseObj.race = function (iterable, context) {
12728
- return new PromiseObj(Promise.race(iterable), context);
12729
- };
12730
-
12731
- var p$1 = PromiseObj.prototype;
12732
-
12733
- p$1.bind = function (context) {
12734
- this.context = context;
12735
- return this;
12736
- };
12737
-
12738
- p$1.then = function (fulfilled, rejected) {
12739
-
12740
- if (fulfilled && fulfilled.bind && this.context) {
12741
- fulfilled = fulfilled.bind(this.context);
12742
- }
12743
-
12744
- if (rejected && rejected.bind && this.context) {
12745
- rejected = rejected.bind(this.context);
12746
- }
12747
-
12748
- return new PromiseObj(this.promise.then(fulfilled, rejected), this.context);
12749
- };
12750
-
12751
- p$1.catch = function (rejected) {
12752
-
12753
- if (rejected && rejected.bind && this.context) {
12754
- rejected = rejected.bind(this.context);
12755
- }
12756
-
12757
- return new PromiseObj(this.promise.catch(rejected), this.context);
12758
- };
12759
-
12760
- p$1.finally = function (callback) {
12761
-
12762
- return this.then(function (value) {
12763
- callback.call(this);
12764
- return value;
12765
- }, function (reason) {
12766
- callback.call(this);
12767
- return Promise.reject(reason);
12768
- }
12769
- );
12770
- };
12771
-
12772
- /**
12773
- * Utility functions.
12774
- */
12775
-
12776
- var ref = {};
12777
- var hasOwnProperty = ref.hasOwnProperty;
12778
- var ref$1 = [];
12779
- var slice = ref$1.slice;
12780
- var debug = false, ntick;
12781
-
12782
- var inBrowser = typeof window !== 'undefined';
12783
-
12784
- function Util (ref) {
12785
- var config = ref.config;
12786
- var nextTick = ref.nextTick;
12787
-
12788
- ntick = nextTick;
12789
- debug = config.debug || !config.silent;
12790
- }
12791
-
12792
- function warn(msg) {
12793
- if (typeof console !== 'undefined' && debug) {
12794
- console.warn('[VueResource warn]: ' + msg);
12795
- }
12796
- }
12797
-
12798
- function error(msg) {
12799
- if (typeof console !== 'undefined') {
12800
- console.error(msg);
12801
- }
12802
- }
12803
-
12804
- function nextTick(cb, ctx) {
12805
- return ntick(cb, ctx);
12806
- }
12807
-
12808
- function trim(str) {
12809
- return str ? str.replace(/^\s*|\s*$/g, '') : '';
12810
- }
12811
-
12812
- function trimEnd(str, chars) {
12813
-
12814
- if (str && chars === undefined) {
12815
- return str.replace(/\s+$/, '');
12816
- }
12817
-
12818
- if (!str || !chars) {
12819
- return str;
12820
- }
12821
-
12822
- return str.replace(new RegExp(("[" + chars + "]+$")), '');
12823
- }
12824
-
12825
- function toLower(str) {
12826
- return str ? str.toLowerCase() : '';
12827
- }
12828
-
12829
- function toUpper(str) {
12830
- return str ? str.toUpperCase() : '';
12831
- }
12832
-
12833
- var isArray = Array.isArray;
12834
-
12835
- function isString(val) {
12836
- return typeof val === 'string';
12837
- }
12838
-
12839
- function isFunction(val) {
12840
- return typeof val === 'function';
12841
- }
12842
-
12843
- function isObject(obj) {
12844
- return obj !== null && typeof obj === 'object';
12845
- }
12846
-
12847
- function isPlainObject(obj) {
12848
- return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;
12849
- }
12850
-
12851
- function isBlob(obj) {
12852
- return typeof Blob !== 'undefined' && obj instanceof Blob;
12853
- }
12854
-
12855
- function isFormData(obj) {
12856
- return typeof FormData !== 'undefined' && obj instanceof FormData;
12857
- }
12858
-
12859
- function when(value, fulfilled, rejected) {
12860
-
12861
- var promise = PromiseObj.resolve(value);
12862
-
12863
- if (arguments.length < 2) {
12864
- return promise;
12865
- }
12866
-
12867
- return promise.then(fulfilled, rejected);
12868
- }
12869
-
12870
- function options(fn, obj, opts) {
12871
-
12872
- opts = opts || {};
12873
-
12874
- if (isFunction(opts)) {
12875
- opts = opts.call(obj);
12876
- }
12877
-
12878
- return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts});
12879
- }
12880
-
12881
- function each(obj, iterator) {
12882
-
12883
- var i, key;
12884
-
12885
- if (isArray(obj)) {
12886
- for (i = 0; i < obj.length; i++) {
12887
- iterator.call(obj[i], obj[i], i);
12888
- }
12889
- } else if (isObject(obj)) {
12890
- for (key in obj) {
12891
- if (hasOwnProperty.call(obj, key)) {
12892
- iterator.call(obj[key], obj[key], key);
12893
- }
12894
- }
12895
- }
12896
-
12897
- return obj;
12898
- }
12899
-
12900
- var assign = Object.assign || _assign;
12901
-
12902
- function merge(target) {
12903
-
12904
- var args = slice.call(arguments, 1);
12905
-
12906
- args.forEach(function (source) {
12907
- _merge(target, source, true);
12908
- });
12909
-
12910
- return target;
12911
- }
12912
-
12913
- function defaults(target) {
12914
-
12915
- var args = slice.call(arguments, 1);
12916
-
12917
- args.forEach(function (source) {
12918
-
12919
- for (var key in source) {
12920
- if (target[key] === undefined) {
12921
- target[key] = source[key];
12922
- }
12923
- }
12924
-
12925
- });
12926
-
12927
- return target;
12928
- }
12929
-
12930
- function _assign(target) {
12931
-
12932
- var args = slice.call(arguments, 1);
12933
-
12934
- args.forEach(function (source) {
12935
- _merge(target, source);
12936
- });
12937
-
12938
- return target;
12939
- }
12940
-
12941
- function _merge(target, source, deep) {
12942
- for (var key in source) {
12943
- if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
12944
- if (isPlainObject(source[key]) && !isPlainObject(target[key])) {
12945
- target[key] = {};
12946
- }
12947
- if (isArray(source[key]) && !isArray(target[key])) {
12948
- target[key] = [];
12949
- }
12950
- _merge(target[key], source[key], deep);
12951
- } else if (source[key] !== undefined) {
12952
- target[key] = source[key];
12953
- }
12954
- }
12955
- }
12956
-
12957
- /**
12958
- * Root Prefix Transform.
12959
- */
12960
-
12961
- function root (options$$1, next) {
12962
-
12963
- var url = next(options$$1);
12964
-
12965
- if (isString(options$$1.root) && !/^(https?:)?\//.test(url)) {
12966
- url = trimEnd(options$$1.root, '/') + '/' + url;
12967
- }
12968
-
12969
- return url;
12970
- }
12971
-
12972
- /**
12973
- * Query Parameter Transform.
12974
- */
12975
-
12976
- function query (options$$1, next) {
12977
-
12978
- var urlParams = Object.keys(Url.options.params), query = {}, url = next(options$$1);
12979
-
12980
- each(options$$1.params, function (value, key) {
12981
- if (urlParams.indexOf(key) === -1) {
12982
- query[key] = value;
12983
- }
12984
- });
12985
-
12986
- query = Url.params(query);
12987
-
12988
- if (query) {
12989
- url += (url.indexOf('?') == -1 ? '?' : '&') + query;
12990
- }
12991
-
12992
- return url;
12993
- }
12994
-
12995
- /**
12996
- * URL Template v2.0.6 (https://github.com/bramstein/url-template)
12997
- */
12998
-
12999
- function expand(url, params, variables) {
13000
-
13001
- var tmpl = parse(url), expanded = tmpl.expand(params);
13002
-
13003
- if (variables) {
13004
- variables.push.apply(variables, tmpl.vars);
13005
- }
13006
-
13007
- return expanded;
13008
- }
13009
-
13010
- function parse(template) {
13011
-
13012
- var operators = ['+', '#', '.', '/', ';', '?', '&'], variables = [];
13013
-
13014
- return {
13015
- vars: variables,
13016
- expand: function expand(context) {
13017
- return template.replace(/\{([^{}]+)\}|([^{}]+)/g, function (_, expression, literal) {
13018
- if (expression) {
13019
-
13020
- var operator = null, values = [];
13021
-
13022
- if (operators.indexOf(expression.charAt(0)) !== -1) {
13023
- operator = expression.charAt(0);
13024
- expression = expression.substr(1);
13025
- }
13026
-
13027
- expression.split(/,/g).forEach(function (variable) {
13028
- var tmp = /([^:*]*)(?::(\d+)|(\*))?/.exec(variable);
13029
- values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
13030
- variables.push(tmp[1]);
13031
- });
13032
-
13033
- if (operator && operator !== '+') {
13034
-
13035
- var separator = ',';
13036
-
13037
- if (operator === '?') {
13038
- separator = '&';
13039
- } else if (operator !== '#') {
13040
- separator = operator;
13041
- }
13042
-
13043
- return (values.length !== 0 ? operator : '') + values.join(separator);
13044
- } else {
13045
- return values.join(',');
13046
- }
13047
-
13048
- } else {
13049
- return encodeReserved(literal);
13050
- }
13051
- });
13052
- }
13053
- };
13054
- }
13055
-
13056
- function getValues(context, operator, key, modifier) {
13057
-
13058
- var value = context[key], result = [];
13059
-
13060
- if (isDefined(value) && value !== '') {
13061
- if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
13062
- value = value.toString();
13063
-
13064
- if (modifier && modifier !== '*') {
13065
- value = value.substring(0, parseInt(modifier, 10));
13066
- }
13067
-
13068
- result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));
13069
- } else {
13070
- if (modifier === '*') {
13071
- if (Array.isArray(value)) {
13072
- value.filter(isDefined).forEach(function (value) {
13073
- result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));
13074
- });
13075
- } else {
13076
- Object.keys(value).forEach(function (k) {
13077
- if (isDefined(value[k])) {
13078
- result.push(encodeValue(operator, value[k], k));
13079
- }
13080
- });
13081
- }
13082
- } else {
13083
- var tmp = [];
13084
-
13085
- if (Array.isArray(value)) {
13086
- value.filter(isDefined).forEach(function (value) {
13087
- tmp.push(encodeValue(operator, value));
13088
- });
13089
- } else {
13090
- Object.keys(value).forEach(function (k) {
13091
- if (isDefined(value[k])) {
13092
- tmp.push(encodeURIComponent(k));
13093
- tmp.push(encodeValue(operator, value[k].toString()));
13094
- }
13095
- });
13096
- }
13097
-
13098
- if (isKeyOperator(operator)) {
13099
- result.push(encodeURIComponent(key) + '=' + tmp.join(','));
13100
- } else if (tmp.length !== 0) {
13101
- result.push(tmp.join(','));
13102
- }
13103
- }
13104
- }
13105
- } else {
13106
- if (operator === ';') {
13107
- result.push(encodeURIComponent(key));
13108
- } else if (value === '' && (operator === '&' || operator === '?')) {
13109
- result.push(encodeURIComponent(key) + '=');
13110
- } else if (value === '') {
13111
- result.push('');
13112
- }
13113
- }
13114
-
13115
- return result;
13116
- }
13117
-
13118
- function isDefined(value) {
13119
- return value !== undefined && value !== null;
13120
- }
13121
-
13122
- function isKeyOperator(operator) {
13123
- return operator === ';' || operator === '&' || operator === '?';
13124
- }
13125
-
13126
- function encodeValue(operator, value, key) {
13127
-
13128
- value = (operator === '+' || operator === '#') ? encodeReserved(value) : encodeURIComponent(value);
13129
-
13130
- if (key) {
13131
- return encodeURIComponent(key) + '=' + value;
13132
- } else {
13133
- return value;
13134
- }
13135
- }
13136
-
13137
- function encodeReserved(str) {
13138
- return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {
13139
- if (!/%[0-9A-Fa-f]/.test(part)) {
13140
- part = encodeURI(part);
13141
- }
13142
- return part;
13143
- }).join('');
13144
- }
13145
-
13146
- /**
13147
- * URL Template (RFC 6570) Transform.
13148
- */
13149
-
13150
- function template (options) {
13151
-
13152
- var variables = [], url = expand(options.url, options.params, variables);
13153
-
13154
- variables.forEach(function (key) {
13155
- delete options.params[key];
13156
- });
13157
-
13158
- return url;
13159
- }
13160
-
13161
- /**
13162
- * Service for URL templating.
13163
- */
13164
-
13165
- function Url(url, params) {
13166
-
13167
- var self = this || {}, options$$1 = url, transform;
13168
-
13169
- if (isString(url)) {
13170
- options$$1 = {url: url, params: params};
13171
- }
13172
-
13173
- options$$1 = merge({}, Url.options, self.$options, options$$1);
13174
-
13175
- Url.transforms.forEach(function (handler) {
13176
-
13177
- if (isString(handler)) {
13178
- handler = Url.transform[handler];
13179
- }
13180
-
13181
- if (isFunction(handler)) {
13182
- transform = factory(handler, transform, self.$vm);
13183
- }
13184
-
13185
- });
13186
-
13187
- return transform(options$$1);
13188
- }
13189
-
13190
- /**
13191
- * Url options.
13192
- */
13193
-
13194
- Url.options = {
13195
- url: '',
13196
- root: null,
13197
- params: {}
13198
- };
13199
-
13200
- /**
13201
- * Url transforms.
13202
- */
13203
-
13204
- Url.transform = {template: template, query: query, root: root};
13205
- Url.transforms = ['template', 'query', 'root'];
13206
-
13207
- /**
13208
- * Encodes a Url parameter string.
13209
- *
13210
- * @param {Object} obj
13211
- */
13212
-
13213
- Url.params = function (obj) {
13214
-
13215
- var params = [], escape = encodeURIComponent;
13216
-
13217
- params.add = function (key, value) {
13218
-
13219
- if (isFunction(value)) {
13220
- value = value();
13221
- }
13222
-
13223
- if (value === null) {
13224
- value = '';
13225
- }
13226
-
13227
- this.push(escape(key) + '=' + escape(value));
13228
- };
13229
-
13230
- serialize(params, obj);
13231
-
13232
- return params.join('&').replace(/%20/g, '+');
13233
- };
13234
-
13235
- /**
13236
- * Parse a URL and return its components.
13237
- *
13238
- * @param {String} url
13239
- */
13240
-
13241
- Url.parse = function (url) {
13242
-
13243
- var el = document.createElement('a');
13244
-
13245
- if (document.documentMode) {
13246
- el.href = url;
13247
- url = el.href;
13248
- }
13249
-
13250
- el.href = url;
13251
-
13252
- return {
13253
- href: el.href,
13254
- protocol: el.protocol ? el.protocol.replace(/:$/, '') : '',
13255
- port: el.port,
13256
- host: el.host,
13257
- hostname: el.hostname,
13258
- pathname: el.pathname.charAt(0) === '/' ? el.pathname : '/' + el.pathname,
13259
- search: el.search ? el.search.replace(/^\?/, '') : '',
13260
- hash: el.hash ? el.hash.replace(/^#/, '') : ''
13261
- };
13262
- };
13263
-
13264
- function factory(handler, next, vm) {
13265
- return function (options$$1) {
13266
- return handler.call(vm, options$$1, next);
13267
- };
13268
- }
13269
-
13270
- function serialize(params, obj, scope) {
13271
-
13272
- var array = isArray(obj), plain = isPlainObject(obj), hash;
13273
-
13274
- each(obj, function (value, key) {
13275
-
13276
- hash = isObject(value) || isArray(value);
13277
-
13278
- if (scope) {
13279
- key = scope + '[' + (plain || hash ? key : '') + ']';
13280
- }
13281
-
13282
- if (!scope && array) {
13283
- params.add(value.name, value.value);
13284
- } else if (hash) {
13285
- serialize(params, value, key);
13286
- } else {
13287
- params.add(key, value);
13288
- }
13289
- });
13290
- }
13291
-
13292
- /**
13293
- * XDomain client (Internet Explorer).
13294
- */
13295
-
13296
- function xdrClient (request) {
13297
- return new PromiseObj(function (resolve) {
13298
-
13299
- var xdr = new XDomainRequest(), handler = function (ref) {
13300
- var type = ref.type;
13301
-
13302
-
13303
- var status = 0;
13304
-
13305
- if (type === 'load') {
13306
- status = 200;
13307
- } else if (type === 'error') {
13308
- status = 500;
13309
- }
13310
-
13311
- resolve(request.respondWith(xdr.responseText, {status: status}));
13312
- };
13313
-
13314
- request.abort = function () { return xdr.abort(); };
13315
-
13316
- xdr.open(request.method, request.getUrl());
13317
-
13318
- if (request.timeout) {
13319
- xdr.timeout = request.timeout;
13320
- }
13321
-
13322
- xdr.onload = handler;
13323
- xdr.onabort = handler;
13324
- xdr.onerror = handler;
13325
- xdr.ontimeout = handler;
13326
- xdr.onprogress = function () {};
13327
- xdr.send(request.getBody());
13328
- });
13329
- }
13330
-
13331
- /**
13332
- * CORS Interceptor.
13333
- */
13334
-
13335
- var SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();
13336
-
13337
- function cors (request) {
13338
-
13339
- if (inBrowser) {
13340
-
13341
- var orgUrl = Url.parse(location.href);
13342
- var reqUrl = Url.parse(request.getUrl());
13343
-
13344
- if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {
13345
-
13346
- request.crossOrigin = true;
13347
- request.emulateHTTP = false;
13348
-
13349
- if (!SUPPORTS_CORS) {
13350
- request.client = xdrClient;
13351
- }
13352
- }
13353
- }
13354
-
13355
- }
13356
-
13357
- /**
13358
- * Form data Interceptor.
13359
- */
13360
-
13361
- function form (request) {
13362
-
13363
- if (isFormData(request.body)) {
13364
- request.headers.delete('Content-Type');
13365
- } else if (isObject(request.body) && request.emulateJSON) {
13366
- request.body = Url.params(request.body);
13367
- request.headers.set('Content-Type', 'application/x-www-form-urlencoded');
13368
- }
13369
-
13370
- }
13371
-
13372
- /**
13373
- * JSON Interceptor.
13374
- */
13375
-
13376
- function json (request) {
13377
-
13378
- var type = request.headers.get('Content-Type') || '';
13379
-
13380
- if (isObject(request.body) && type.indexOf('application/json') === 0) {
13381
- request.body = JSON.stringify(request.body);
13382
- }
13383
-
13384
- return function (response) {
13385
-
13386
- return response.bodyText ? when(response.text(), function (text) {
13387
-
13388
- var type = response.headers.get('Content-Type') || '';
13389
-
13390
- if (type.indexOf('application/json') === 0 || isJson(text)) {
13391
-
13392
- try {
13393
- response.body = JSON.parse(text);
13394
- } catch (e) {
13395
- response.body = null;
13396
- }
13397
-
13398
- } else {
13399
- response.body = text;
13400
- }
13401
-
13402
- return response;
13403
-
13404
- }) : response;
13405
-
13406
- };
13407
- }
13408
-
13409
- function isJson(str) {
13410
-
13411
- var start = str.match(/^\s*(\[|\{)/);
13412
- var end = {'[': /]\s*$/, '{': /}\s*$/};
13413
-
13414
- return start && end[start[1]].test(str);
13415
- }
13416
-
13417
- /**
13418
- * JSONP client (Browser).
13419
- */
13420
-
13421
- function jsonpClient (request) {
13422
- return new PromiseObj(function (resolve) {
13423
-
13424
- var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script;
13425
-
13426
- handler = function (ref) {
13427
- var type = ref.type;
13428
-
13429
-
13430
- var status = 0;
13431
-
13432
- if (type === 'load' && body !== null) {
13433
- status = 200;
13434
- } else if (type === 'error') {
13435
- status = 500;
13436
- }
13437
-
13438
- if (status && window[callback]) {
13439
- delete window[callback];
13440
- document.body.removeChild(script);
13441
- }
13442
-
13443
- resolve(request.respondWith(body, {status: status}));
13444
- };
13445
-
13446
- window[callback] = function (result) {
13447
- body = JSON.stringify(result);
13448
- };
13449
-
13450
- request.abort = function () {
13451
- handler({type: 'abort'});
13452
- };
13453
-
13454
- request.params[name] = callback;
13455
-
13456
- if (request.timeout) {
13457
- setTimeout(request.abort, request.timeout);
13458
- }
13459
-
13460
- script = document.createElement('script');
13461
- script.src = request.getUrl();
13462
- script.type = 'text/javascript';
13463
- script.async = true;
13464
- script.onload = handler;
13465
- script.onerror = handler;
13466
-
13467
- document.body.appendChild(script);
13468
- });
13469
- }
13470
-
13471
- /**
13472
- * JSONP Interceptor.
13473
- */
13474
-
13475
- function jsonp (request) {
13476
-
13477
- if (request.method == 'JSONP') {
13478
- request.client = jsonpClient;
13479
- }
13480
-
13481
- }
13482
-
13483
- /**
13484
- * Before Interceptor.
13485
- */
13486
-
13487
- function before (request) {
13488
-
13489
- if (isFunction(request.before)) {
13490
- request.before.call(this, request);
13491
- }
13492
-
13493
- }
13494
-
13495
- /**
13496
- * HTTP method override Interceptor.
13497
- */
13498
-
13499
- function method (request) {
13500
-
13501
- if (request.emulateHTTP && /^(PUT|PATCH|DELETE)$/i.test(request.method)) {
13502
- request.headers.set('X-HTTP-Method-Override', request.method);
13503
- request.method = 'POST';
13504
- }
13505
-
13506
- }
13507
-
13508
- /**
13509
- * Header Interceptor.
13510
- */
13511
-
13512
- function header (request) {
13513
-
13514
- var headers = assign({}, Http.headers.common,
13515
- !request.crossOrigin ? Http.headers.custom : {},
13516
- Http.headers[toLower(request.method)]
13517
- );
13518
-
13519
- each(headers, function (value, name) {
13520
- if (!request.headers.has(name)) {
13521
- request.headers.set(name, value);
13522
- }
13523
- });
13524
-
13525
- }
13526
-
13527
- /**
13528
- * XMLHttp client (Browser).
13529
- */
13530
-
13531
- function xhrClient (request) {
13532
- return new PromiseObj(function (resolve) {
13533
-
13534
- var xhr = new XMLHttpRequest(), handler = function (event) {
13535
-
13536
- var response = request.respondWith(
13537
- 'response' in xhr ? xhr.response : xhr.responseText, {
13538
- status: xhr.status === 1223 ? 204 : xhr.status, // IE9 status bug
13539
- statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText)
13540
- });
13541
-
13542
- each(trim(xhr.getAllResponseHeaders()).split('\n'), function (row) {
13543
- response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1));
13544
- });
13545
-
13546
- resolve(response);
13547
- };
13548
-
13549
- request.abort = function () { return xhr.abort(); };
13550
-
13551
- xhr.open(request.method, request.getUrl(), true);
13552
-
13553
- if (request.timeout) {
13554
- xhr.timeout = request.timeout;
13555
- }
13556
-
13557
- if (request.responseType && 'responseType' in xhr) {
13558
- xhr.responseType = request.responseType;
13559
- }
13560
-
13561
- if (request.withCredentials || request.credentials) {
13562
- xhr.withCredentials = true;
13563
- }
13564
-
13565
- if (!request.crossOrigin) {
13566
- request.headers.set('X-Requested-With', 'XMLHttpRequest');
13567
- }
13568
-
13569
- // deprecated use downloadProgress
13570
- if (isFunction(request.progress) && request.method === 'GET') {
13571
- xhr.addEventListener('progress', request.progress);
13572
- }
13573
-
13574
- if (isFunction(request.downloadProgress)) {
13575
- xhr.addEventListener('progress', request.downloadProgress);
13576
- }
13577
-
13578
- // deprecated use uploadProgress
13579
- if (isFunction(request.progress) && /^(POST|PUT)$/i.test(request.method)) {
13580
- xhr.upload.addEventListener('progress', request.progress);
13581
- }
13582
-
13583
- if (isFunction(request.uploadProgress) && xhr.upload) {
13584
- xhr.upload.addEventListener('progress', request.uploadProgress);
13585
- }
13586
-
13587
- request.headers.forEach(function (value, name) {
13588
- xhr.setRequestHeader(name, value);
13589
- });
13590
-
13591
- xhr.onload = handler;
13592
- xhr.onabort = handler;
13593
- xhr.onerror = handler;
13594
- xhr.ontimeout = handler;
13595
- xhr.send(request.getBody());
13596
- });
13597
- }
13598
-
13599
- /**
13600
- * Http client (Node).
13601
- */
13602
-
13603
- function nodeClient (request) {
13604
-
13605
- var client = __webpack_require__(55);
13606
-
13607
- return new PromiseObj(function (resolve) {
13608
-
13609
- var url = request.getUrl();
13610
- var body = request.getBody();
13611
- var method = request.method;
13612
- var headers = {}, handler;
13613
-
13614
- request.headers.forEach(function (value, name) {
13615
- headers[name] = value;
13616
- });
13617
-
13618
- client(url, {body: body, method: method, headers: headers}).then(handler = function (resp) {
13619
-
13620
- var response = request.respondWith(resp.body, {
13621
- status: resp.statusCode,
13622
- statusText: trim(resp.statusMessage)
13623
- });
13624
-
13625
- each(resp.headers, function (value, name) {
13626
- response.headers.set(name, value);
13627
- });
13628
-
13629
- resolve(response);
13630
-
13631
- }, function (error$$1) { return handler(error$$1.response); });
13632
- });
13633
- }
13634
-
13635
- /**
13636
- * Base client.
13637
- */
13638
-
13639
- function Client (context) {
13640
-
13641
- var reqHandlers = [sendRequest], resHandlers = [];
13642
-
13643
- if (!isObject(context)) {
13644
- context = null;
13645
- }
13646
-
13647
- function Client(request) {
13648
- while (reqHandlers.length) {
13649
-
13650
- var handler = reqHandlers.pop();
13651
-
13652
- if (isFunction(handler)) {
13653
-
13654
- var response = (void 0), next = (void 0);
13655
-
13656
- response = handler.call(context, request, function (val) { return next = val; }) || next;
13657
-
13658
- if (isObject(response)) {
13659
- return new PromiseObj(function (resolve, reject) {
13660
-
13661
- resHandlers.forEach(function (handler) {
13662
- response = when(response, function (response) {
13663
- return handler.call(context, response) || response;
13664
- }, reject);
13665
- });
13666
-
13667
- when(response, resolve, reject);
13668
-
13669
- }, context);
13670
- }
13671
-
13672
- if (isFunction(response)) {
13673
- resHandlers.unshift(response);
13674
- }
13675
-
13676
- } else {
13677
- warn(("Invalid interceptor of type " + (typeof handler) + ", must be a function"));
13678
- }
13679
- }
13680
- }
13681
-
13682
- Client.use = function (handler) {
13683
- reqHandlers.push(handler);
13684
- };
13685
-
13686
- return Client;
13687
- }
13688
-
13689
- function sendRequest(request) {
13690
-
13691
- var client = request.client || (inBrowser ? xhrClient : nodeClient);
13692
-
13693
- return client(request);
13694
- }
13695
-
13696
- /**
13697
- * HTTP Headers.
13698
- */
13699
-
13700
- var Headers = function Headers(headers) {
13701
- var this$1 = this;
13702
-
13703
-
13704
- this.map = {};
13705
-
13706
- each(headers, function (value, name) { return this$1.append(name, value); });
13707
- };
13708
-
13709
- Headers.prototype.has = function has (name) {
13710
- return getName(this.map, name) !== null;
13711
- };
13712
-
13713
- Headers.prototype.get = function get (name) {
13714
-
13715
- var list = this.map[getName(this.map, name)];
13716
-
13717
- return list ? list.join() : null;
13718
- };
13719
-
13720
- Headers.prototype.getAll = function getAll (name) {
13721
- return this.map[getName(this.map, name)] || [];
13722
- };
13723
-
13724
- Headers.prototype.set = function set (name, value) {
13725
- this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)];
13726
- };
13727
-
13728
- Headers.prototype.append = function append (name, value) {
13729
-
13730
- var list = this.map[getName(this.map, name)];
13731
-
13732
- if (list) {
13733
- list.push(trim(value));
13734
- } else {
13735
- this.set(name, value);
13736
- }
13737
- };
13738
-
13739
- Headers.prototype.delete = function delete$1 (name) {
13740
- delete this.map[getName(this.map, name)];
13741
- };
13742
-
13743
- Headers.prototype.deleteAll = function deleteAll () {
13744
- this.map = {};
13745
- };
13746
-
13747
- Headers.prototype.forEach = function forEach (callback, thisArg) {
13748
- var this$1 = this;
13749
-
13750
- each(this.map, function (list, name) {
13751
- each(list, function (value) { return callback.call(thisArg, value, name, this$1); });
13752
- });
13753
- };
13754
-
13755
- function getName(map, name) {
13756
- return Object.keys(map).reduce(function (prev, curr) {
13757
- return toLower(name) === toLower(curr) ? curr : prev;
13758
- }, null);
13759
- }
13760
-
13761
- function normalizeName(name) {
13762
-
13763
- if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name)) {
13764
- throw new TypeError('Invalid character in header field name');
13765
- }
13766
-
13767
- return trim(name);
13768
- }
13769
-
13770
- /**
13771
- * HTTP Response.
13772
- */
13773
-
13774
- var Response = function Response(body, ref) {
13775
- var url = ref.url;
13776
- var headers = ref.headers;
13777
- var status = ref.status;
13778
- var statusText = ref.statusText;
13779
-
13780
-
13781
- this.url = url;
13782
- this.ok = status >= 200 && status < 300;
13783
- this.status = status || 0;
13784
- this.statusText = statusText || '';
13785
- this.headers = new Headers(headers);
13786
- this.body = body;
13787
-
13788
- if (isString(body)) {
13789
-
13790
- this.bodyText = body;
13791
-
13792
- } else if (isBlob(body)) {
13793
-
13794
- this.bodyBlob = body;
13795
-
13796
- if (isBlobText(body)) {
13797
- this.bodyText = blobText(body);
13798
- }
13799
- }
13800
- };
13801
-
13802
- Response.prototype.blob = function blob () {
13803
- return when(this.bodyBlob);
13804
- };
13805
-
13806
- Response.prototype.text = function text () {
13807
- return when(this.bodyText);
13808
- };
13809
-
13810
- Response.prototype.json = function json () {
13811
- return when(this.text(), function (text) { return JSON.parse(text); });
13812
- };
13813
-
13814
- Object.defineProperty(Response.prototype, 'data', {
13815
-
13816
- get: function get() {
13817
- return this.body;
13818
- },
13819
-
13820
- set: function set(body) {
13821
- this.body = body;
13822
- }
13823
-
13824
- });
13825
-
13826
- function blobText(body) {
13827
- return new PromiseObj(function (resolve) {
13828
-
13829
- var reader = new FileReader();
13830
-
13831
- reader.readAsText(body);
13832
- reader.onload = function () {
13833
- resolve(reader.result);
13834
- };
13835
-
13836
- });
13837
- }
13838
-
13839
- function isBlobText(body) {
13840
- return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;
13841
- }
13842
-
13843
- /**
13844
- * HTTP Request.
13845
- */
13846
-
13847
- var Request = function Request(options$$1) {
13848
-
13849
- this.body = null;
13850
- this.params = {};
13851
-
13852
- assign(this, options$$1, {
13853
- method: toUpper(options$$1.method || 'GET')
13854
- });
13855
-
13856
- if (!(this.headers instanceof Headers)) {
13857
- this.headers = new Headers(this.headers);
13858
- }
13859
- };
13860
-
13861
- Request.prototype.getUrl = function getUrl () {
13862
- return Url(this);
13863
- };
13864
-
13865
- Request.prototype.getBody = function getBody () {
13866
- return this.body;
13867
- };
13868
-
13869
- Request.prototype.respondWith = function respondWith (body, options$$1) {
13870
- return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));
13871
- };
13872
-
13873
- /**
13874
- * Service for sending network requests.
13875
- */
13876
-
13877
- var COMMON_HEADERS = {'Accept': 'application/json, text/plain, */*'};
13878
- var JSON_CONTENT_TYPE = {'Content-Type': 'application/json;charset=utf-8'};
13879
-
13880
- function Http(options$$1) {
13881
-
13882
- var self = this || {}, client = Client(self.$vm);
13883
-
13884
- defaults(options$$1 || {}, self.$options, Http.options);
13885
-
13886
- Http.interceptors.forEach(function (handler) {
13887
-
13888
- if (isString(handler)) {
13889
- handler = Http.interceptor[handler];
13890
- }
13891
-
13892
- if (isFunction(handler)) {
13893
- client.use(handler);
13894
- }
13895
-
13896
- });
13897
-
13898
- return client(new Request(options$$1)).then(function (response) {
13899
-
13900
- return response.ok ? response : PromiseObj.reject(response);
13901
-
13902
- }, function (response) {
13903
-
13904
- if (response instanceof Error) {
13905
- error(response);
13906
- }
13907
-
13908
- return PromiseObj.reject(response);
13909
- });
13910
- }
13911
-
13912
- Http.options = {};
13913
-
13914
- Http.headers = {
13915
- put: JSON_CONTENT_TYPE,
13916
- post: JSON_CONTENT_TYPE,
13917
- patch: JSON_CONTENT_TYPE,
13918
- delete: JSON_CONTENT_TYPE,
13919
- common: COMMON_HEADERS,
13920
- custom: {}
13921
- };
13922
-
13923
- Http.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};
13924
- Http.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];
13925
-
13926
- ['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {
13927
-
13928
- Http[method$$1] = function (url, options$$1) {
13929
- return this(assign(options$$1 || {}, {url: url, method: method$$1}));
13930
- };
13931
-
13932
- });
13933
-
13934
- ['post', 'put', 'patch'].forEach(function (method$$1) {
13935
-
13936
- Http[method$$1] = function (url, body, options$$1) {
13937
- return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));
13938
- };
13939
-
13940
- });
13941
-
13942
- /**
13943
- * Service for interacting with RESTful services.
13944
- */
13945
-
13946
- function Resource(url, params, actions, options$$1) {
13947
-
13948
- var self = this || {}, resource = {};
13949
-
13950
- actions = assign({},
13951
- Resource.actions,
13952
- actions
13953
- );
13954
-
13955
- each(actions, function (action, name) {
13956
-
13957
- action = merge({url: url, params: assign({}, params)}, options$$1, action);
13958
-
13959
- resource[name] = function () {
13960
- return (self.$http || Http)(opts(action, arguments));
13961
- };
13962
- });
13963
-
13964
- return resource;
13965
- }
13966
-
13967
- function opts(action, args) {
13968
-
13969
- var options$$1 = assign({}, action), params = {}, body;
13970
-
13971
- switch (args.length) {
13972
-
13973
- case 2:
13974
-
13975
- params = args[0];
13976
- body = args[1];
13977
-
13978
- break;
13979
-
13980
- case 1:
13981
-
13982
- if (/^(POST|PUT|PATCH)$/i.test(options$$1.method)) {
13983
- body = args[0];
13984
- } else {
13985
- params = args[0];
13986
- }
13987
-
13988
- break;
13989
-
13990
- case 0:
13991
-
13992
- break;
13993
-
13994
- default:
13995
-
13996
- throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';
13997
- }
13998
-
13999
- options$$1.body = body;
14000
- options$$1.params = assign({}, options$$1.params, params);
14001
-
14002
- return options$$1;
14003
- }
14004
-
14005
- Resource.actions = {
14006
-
14007
- get: {method: 'GET'},
14008
- save: {method: 'POST'},
14009
- query: {method: 'GET'},
14010
- update: {method: 'PUT'},
14011
- remove: {method: 'DELETE'},
14012
- delete: {method: 'DELETE'}
14013
-
14014
- };
14015
-
14016
- /**
14017
- * Install plugin.
14018
- */
14019
-
14020
- function plugin(Vue) {
14021
-
14022
- if (plugin.installed) {
14023
- return;
14024
- }
14025
-
14026
- Util(Vue);
14027
-
14028
- Vue.url = Url;
14029
- Vue.http = Http;
14030
- Vue.resource = Resource;
14031
- Vue.Promise = PromiseObj;
14032
-
14033
- Object.defineProperties(Vue.prototype, {
14034
-
14035
- $url: {
14036
- get: function get() {
14037
- return options(Vue.url, this, this.$options.url);
14038
- }
14039
- },
14040
-
14041
- $http: {
14042
- get: function get() {
14043
- return options(Vue.http, this, this.$options.http);
14044
- }
14045
- },
14046
-
14047
- $resource: {
14048
- get: function get() {
14049
- return Vue.resource.bind(this);
14050
- }
14051
- },
14052
-
14053
- $promise: {
14054
- get: function get() {
14055
- var this$1 = this;
14056
-
14057
- return function (executor) { return new Vue.Promise(executor, this$1); };
14058
- }
14059
- }
14060
-
14061
- });
14062
- }
14063
-
14064
- if (typeof window !== 'undefined' && window.Vue) {
14065
- window.Vue.use(plugin);
14066
- }
14067
-
14068
- /* harmony default export */ __webpack_exports__["default"] = (plugin);
14069
-
14070
-
14071
-
14072
- /***/ }),
14073
- /* 7 */
14074
- /***/ (function(module, exports, __webpack_require__) {
14075
-
14076
- "use strict";
14077
-
14078
-
14079
- var _vue = __webpack_require__(3);
14080
-
14081
- var _vue2 = _interopRequireDefault(_vue);
14082
-
14083
- var _main = __webpack_require__(10);
14084
-
14085
- var _main2 = _interopRequireDefault(_main);
14086
-
14087
- var _store = __webpack_require__(53);
14088
-
14089
- var _store2 = _interopRequireDefault(_store);
14090
-
14091
- var _vueResize = __webpack_require__(58);
14092
-
14093
- var _vueResize2 = _interopRequireDefault(_vueResize);
14094
-
14095
- var _vueJsToggleButton = __webpack_require__(59);
14096
-
14097
- var _vueJsToggleButton2 = _interopRequireDefault(_vueJsToggleButton);
14098
-
14099
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14100
-
14101
- _vue2.default.use(_vueJsToggleButton2.default); /*jshint esversion: 6 */
14102
-
14103
-
14104
- _vue2.default.use(_vueResize2.default);
14105
-
14106
- window.addEventListener('load', function () {
14107
- new _vue2.default({
14108
- el: '#optimole-app',
14109
- store: _store2.default,
14110
- components: {
14111
- App: _main2.default
14112
- }
14113
- });
14114
- });
14115
-
14116
- /***/ }),
14117
- /* 8 */
14118
- /***/ (function(module, exports, __webpack_require__) {
14119
-
14120
- /* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) ||
14121
- (typeof self !== "undefined" && self) ||
14122
- window;
14123
- var apply = Function.prototype.apply;
14124
-
14125
- // DOM APIs, for completeness
14126
-
14127
- exports.setTimeout = function() {
14128
- return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);
14129
- };
14130
- exports.setInterval = function() {
14131
- return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);
14132
- };
14133
- exports.clearTimeout =
14134
- exports.clearInterval = function(timeout) {
14135
- if (timeout) {
14136
- timeout.close();
14137
- }
14138
- };
14139
-
14140
- function Timeout(id, clearFn) {
14141
- this._id = id;
14142
- this._clearFn = clearFn;
14143
- }
14144
- Timeout.prototype.unref = Timeout.prototype.ref = function() {};
14145
- Timeout.prototype.close = function() {
14146
- this._clearFn.call(scope, this._id);
14147
- };
14148
-
14149
- // Does not start the time, just sets up the members needed.
14150
- exports.enroll = function(item, msecs) {
14151
- clearTimeout(item._idleTimeoutId);
14152
- item._idleTimeout = msecs;
14153
- };
14154
-
14155
- exports.unenroll = function(item) {
14156
- clearTimeout(item._idleTimeoutId);
14157
- item._idleTimeout = -1;
14158
- };
14159
-
14160
- exports._unrefActive = exports.active = function(item) {
14161
- clearTimeout(item._idleTimeoutId);
14162
-
14163
- var msecs = item._idleTimeout;
14164
- if (msecs >= 0) {
14165
- item._idleTimeoutId = setTimeout(function onTimeout() {
14166
- if (item._onTimeout)
14167
- item._onTimeout();
14168
- }, msecs);
14169
- }
14170
- };
14171
-
14172
- // setimmediate attaches itself to the global object
14173
- __webpack_require__(9);
14174
- // On some exotic environments, it's not clear which object `setimmediate` was
14175
- // able to install onto. Search each possibility in the same order as the
14176
- // `setimmediate` library.
14177
- exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) ||
14178
- (typeof global !== "undefined" && global.setImmediate) ||
14179
- (this && this.setImmediate);
14180
- exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) ||
14181
- (typeof global !== "undefined" && global.clearImmediate) ||
14182
- (this && this.clearImmediate);
14183
-
14184
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))
14185
-
14186
- /***/ }),
14187
- /* 9 */
14188
- /***/ (function(module, exports, __webpack_require__) {
14189
-
14190
- /* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {
14191
- "use strict";
14192
-
14193
- if (global.setImmediate) {
14194
- return;
14195
- }
14196
-
14197
- var nextHandle = 1; // Spec says greater than zero
14198
- var tasksByHandle = {};
14199
- var currentlyRunningATask = false;
14200
- var doc = global.document;
14201
- var registerImmediate;
14202
-
14203
- function setImmediate(callback) {
14204
- // Callback can either be a function or a string
14205
- if (typeof callback !== "function") {
14206
- callback = new Function("" + callback);
14207
- }
14208
- // Copy function arguments
14209
- var args = new Array(arguments.length - 1);
14210
- for (var i = 0; i < args.length; i++) {
14211
- args[i] = arguments[i + 1];
14212
- }
14213
- // Store and register the task
14214
- var task = { callback: callback, args: args };
14215
- tasksByHandle[nextHandle] = task;
14216
- registerImmediate(nextHandle);
14217
- return nextHandle++;
14218
- }
14219
-
14220
- function clearImmediate(handle) {
14221
- delete tasksByHandle[handle];
14222
- }
14223
-
14224
- function run(task) {
14225
- var callback = task.callback;
14226
- var args = task.args;
14227
- switch (args.length) {
14228
- case 0:
14229
- callback();
14230
- break;
14231
- case 1:
14232
- callback(args[0]);
14233
- break;
14234
- case 2:
14235
- callback(args[0], args[1]);
14236
- break;
14237
- case 3:
14238
- callback(args[0], args[1], args[2]);
14239
- break;
14240
- default:
14241
- callback.apply(undefined, args);
14242
- break;
14243
- }
14244
- }
14245
-
14246
- function runIfPresent(handle) {
14247
- // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
14248
- // So if we're currently running a task, we'll need to delay this invocation.
14249
- if (currentlyRunningATask) {
14250
- // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
14251
- // "too much recursion" error.
14252
- setTimeout(runIfPresent, 0, handle);
14253
- } else {
14254
- var task = tasksByHandle[handle];
14255
- if (task) {
14256
- currentlyRunningATask = true;
14257
- try {
14258
- run(task);
14259
- } finally {
14260
- clearImmediate(handle);
14261
- currentlyRunningATask = false;
14262
- }
14263
- }
14264
- }
14265
- }
14266
-
14267
- function installNextTickImplementation() {
14268
- registerImmediate = function(handle) {
14269
- process.nextTick(function () { runIfPresent(handle); });
14270
- };
14271
- }
14272
-
14273
- function canUsePostMessage() {
14274
- // The test against `importScripts` prevents this implementation from being installed inside a web worker,
14275
- // where `global.postMessage` means something completely different and can't be used for this purpose.
14276
- if (global.postMessage && !global.importScripts) {
14277
- var postMessageIsAsynchronous = true;
14278
- var oldOnMessage = global.onmessage;
14279
- global.onmessage = function() {
14280
- postMessageIsAsynchronous = false;
14281
- };
14282
- global.postMessage("", "*");
14283
- global.onmessage = oldOnMessage;
14284
- return postMessageIsAsynchronous;
14285
- }
14286
- }
14287
-
14288
- function installPostMessageImplementation() {
14289
- // Installs an event handler on `global` for the `message` event: see
14290
- // * https://developer.mozilla.org/en/DOM/window.postMessage
14291
- // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
14292
-
14293
- var messagePrefix = "setImmediate$" + Math.random() + "$";
14294
- var onGlobalMessage = function(event) {
14295
- if (event.source === global &&
14296
- typeof event.data === "string" &&
14297
- event.data.indexOf(messagePrefix) === 0) {
14298
- runIfPresent(+event.data.slice(messagePrefix.length));
14299
- }
14300
- };
14301
-
14302
- if (global.addEventListener) {
14303
- global.addEventListener("message", onGlobalMessage, false);
14304
- } else {
14305
- global.attachEvent("onmessage", onGlobalMessage);
14306
- }
14307
-
14308
- registerImmediate = function(handle) {
14309
- global.postMessage(messagePrefix + handle, "*");
14310
- };
14311
- }
14312
-
14313
- function installMessageChannelImplementation() {
14314
- var channel = new MessageChannel();
14315
- channel.port1.onmessage = function(event) {
14316
- var handle = event.data;
14317
- runIfPresent(handle);
14318
- };
14319
-
14320
- registerImmediate = function(handle) {
14321
- channel.port2.postMessage(handle);
14322
- };
14323
- }
14324
-
14325
- function installReadyStateChangeImplementation() {
14326
- var html = doc.documentElement;
14327
- registerImmediate = function(handle) {
14328
- // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
14329
- // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
14330
- var script = doc.createElement("script");
14331
- script.onreadystatechange = function () {
14332
- runIfPresent(handle);
14333
- script.onreadystatechange = null;
14334
- html.removeChild(script);
14335
- script = null;
14336
- };
14337
- html.appendChild(script);
14338
- };
14339
- }
14340
-
14341
- function installSetTimeoutImplementation() {
14342
- registerImmediate = function(handle) {
14343
- setTimeout(runIfPresent, 0, handle);
14344
- };
14345
- }
14346
-
14347
- // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
14348
- var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
14349
- attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
14350
-
14351
- // Don't get fooled by e.g. browserify environments.
14352
- if ({}.toString.call(global.process) === "[object process]") {
14353
- // For Node.js before 0.9
14354
- installNextTickImplementation();
14355
-
14356
- } else if (canUsePostMessage()) {
14357
- // For non-IE10 modern browsers
14358
- installPostMessageImplementation();
14359
-
14360
- } else if (global.MessageChannel) {
14361
- // For web workers, where supported
14362
- installMessageChannelImplementation();
14363
-
14364
- } else if (doc && "onreadystatechange" in doc.createElement("script")) {
14365
- // For IE 6–8
14366
- installReadyStateChangeImplementation();
14367
-
14368
- } else {
14369
- // For older browsers
14370
- installSetTimeoutImplementation();
14371
- }
14372
-
14373
- attachTo.setImmediate = setImmediate;
14374
- attachTo.clearImmediate = clearImmediate;
14375
- }(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self));
14376
-
14377
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(4)))
14378
-
14379
- /***/ }),
14380
- /* 10 */
14381
- /***/ (function(module, exports, __webpack_require__) {
14382
-
14383
- var __vue_script__, __vue_template__
14384
- __webpack_require__(11)
14385
- __vue_script__ = __webpack_require__(13)
14386
- __vue_template__ = __webpack_require__(52)
14387
- module.exports = __vue_script__ || {}
14388
- if (module.exports.__esModule) module.exports = module.exports.default
14389
- if (__vue_template__) { (typeof module.exports === "function" ? module.exports.options : module.exports).template = __vue_template__ }
14390
- if (false) {(function () { module.hot.accept()
14391
- var hotAPI = require("vue-hot-reload-api")
14392
- hotAPI.install(require("vue"), true)
14393
- if (!hotAPI.compatible) return
14394
- var id = "D:\\dev\\optimole-wp\\assets\\vue\\components\\main.vue"
14395
- if (!module.hot.data) {
14396
- hotAPI.createRecord(id, module.exports)
14397
- } else {
14398
- hotAPI.update(id, module.exports, __vue_template__)
14399
- }
14400
- })()}
14401
-
14402
- /***/ }),
14403
- /* 11 */
14404
- /***/ (function(module, exports, __webpack_require__) {
14405
-
14406
- // style-loader: Adds some css to the DOM by adding a <style> tag
14407
-
14408
- // load the styles
14409
- var content = __webpack_require__(12);
14410
- if(typeof content === 'string') content = [[module.i, content, '']];
14411
- // add the styles to the DOM
14412
- var update = __webpack_require__(1)(content, {});
14413
- if(content.locals) module.exports = content.locals;
14414
- // Hot Module Replacement
14415
- if(false) {
14416
- // When the styles change, update the <style> tags
14417
- if(!content.locals) {
14418
- module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-21c7f086&file=main.vue!../../../node_modules/sass-loader/lib/loader.js!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./main.vue", function() {
14419
- var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-21c7f086&file=main.vue!../../../node_modules/sass-loader/lib/loader.js!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./main.vue");
14420
- if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
14421
- update(newContent);
14422
- });
14423
- }
14424
- // When the module is disposed, remove the <style> tags
14425
- module.hot.dispose(function() { update(); });
14426
- }
14427
-
14428
- /***/ }),
14429
- /* 12 */
14430
- /***/ (function(module, exports, __webpack_require__) {
14431
-
14432
- exports = module.exports = __webpack_require__(0)();
14433
- // imports
14434
-
14435
-
14436
- // module
14437
- exports.push([module.i, "#optimole-app {\n padding: 0 30px 0 20px;\n /*! bulma.io v0.7.4 | MIT License | github.com/jgthms/bulma */\n /*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */ }\n\n@keyframes spinAround {\n from {\n transform: rotate(0deg); }\n to {\n transform: rotate(359deg); } }\n #optimole-app .delete, #optimole-app .modal-close, #optimole-app .is-unselectable, #optimole-app .button, #optimole-app .file, #optimole-app .breadcrumb, #optimole-app .pagination-previous,\n #optimole-app .pagination-next,\n #optimole-app .pagination-link,\n #optimole-app .pagination-ellipsis, #optimole-app .tabs {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n #optimole-app .select:not(.is-multiple):not(.is-loading)::after, #optimole-app .navbar-link:not(.is-arrowless)::after {\n border: 3px solid transparent;\n border-radius: 2px;\n border-right: 0;\n border-top: 0;\n content: \" \";\n display: block;\n height: 0.625em;\n margin-top: -0.4375em;\n pointer-events: none;\n position: absolute;\n top: 50%;\n transform: rotate(-45deg);\n transform-origin: center;\n width: 0.625em; }\n #optimole-app .box:not(:last-child), #optimole-app .content:not(:last-child), #optimole-app .notification:not(:last-child), #optimole-app .progress:not(:last-child), #optimole-app .table:not(:last-child), #optimole-app .table-container:not(:last-child), #optimole-app .title:not(:last-child),\n #optimole-app .subtitle:not(:last-child), #optimole-app .block:not(:last-child), #optimole-app .highlight:not(:last-child), #optimole-app .breadcrumb:not(:last-child), #optimole-app .level:not(:last-child), #optimole-app .list:not(:last-child), #optimole-app .message:not(:last-child), #optimole-app .tabs:not(:last-child) {\n margin-bottom: 1.5rem; }\n #optimole-app .delete, #optimole-app .modal-close {\n -moz-appearance: none;\n -webkit-appearance: none;\n background-color: rgba(10, 10, 10, 0.2);\n border: none;\n border-radius: 290486px;\n cursor: pointer;\n pointer-events: auto;\n display: inline-block;\n -ms-flex-positive: 0;\n flex-grow: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n font-size: 0;\n height: 20px;\n max-height: 20px;\n max-width: 20px;\n min-height: 20px;\n min-width: 20px;\n outline: none;\n position: relative;\n vertical-align: top;\n width: 20px; }\n #optimole-app .delete::before, #optimole-app .modal-close::before, #optimole-app .delete::after, #optimole-app .modal-close::after {\n background-color: white;\n content: \"\";\n display: block;\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translateX(-50%) translateY(-50%) rotate(45deg);\n transform-origin: center center; }\n #optimole-app .delete::before, #optimole-app .modal-close::before {\n height: 2px;\n width: 50%; }\n #optimole-app .delete::after, #optimole-app .modal-close::after {\n height: 50%;\n width: 2px; }\n #optimole-app .delete:hover, #optimole-app .modal-close:hover, #optimole-app .delete:focus, #optimole-app .modal-close:focus {\n background-color: rgba(10, 10, 10, 0.3); }\n #optimole-app .delete:active, #optimole-app .modal-close:active {\n background-color: rgba(10, 10, 10, 0.4); }\n #optimole-app .is-small.delete, #optimole-app .is-small.modal-close {\n height: 16px;\n max-height: 16px;\n max-width: 16px;\n min-height: 16px;\n min-width: 16px;\n width: 16px; }\n #optimole-app .is-medium.delete, #optimole-app .is-medium.modal-close {\n height: 24px;\n max-height: 24px;\n max-width: 24px;\n min-height: 24px;\n min-width: 24px;\n width: 24px; }\n #optimole-app .is-large.delete, #optimole-app .is-large.modal-close {\n height: 32px;\n max-height: 32px;\n max-width: 32px;\n min-height: 32px;\n min-width: 32px;\n width: 32px; }\n #optimole-app .button.is-loading::after, #optimole-app .select.is-loading::after, #optimole-app .control.is-loading::after, #optimole-app .loader {\n animation: spinAround 500ms infinite linear;\n border: 2px solid #dbdbdb;\n border-radius: 290486px;\n border-right-color: transparent;\n border-top-color: transparent;\n content: \"\";\n display: block;\n height: 1em;\n position: relative;\n width: 1em; }\n #optimole-app .is-overlay, #optimole-app .image.is-square img,\n #optimole-app .image.is-square .has-ratio, #optimole-app .image.is-1by1 img,\n #optimole-app .image.is-1by1 .has-ratio, #optimole-app .image.is-5by4 img,\n #optimole-app .image.is-5by4 .has-ratio, #optimole-app .image.is-4by3 img,\n #optimole-app .image.is-4by3 .has-ratio, #optimole-app .image.is-3by2 img,\n #optimole-app .image.is-3by2 .has-ratio, #optimole-app .image.is-5by3 img,\n #optimole-app .image.is-5by3 .has-ratio, #optimole-app .image.is-16by9 img,\n #optimole-app .image.is-16by9 .has-ratio, #optimole-app .image.is-2by1 img,\n #optimole-app .image.is-2by1 .has-ratio, #optimole-app .image.is-3by1 img,\n #optimole-app .image.is-3by1 .has-ratio, #optimole-app .image.is-4by5 img,\n #optimole-app .image.is-4by5 .has-ratio, #optimole-app .image.is-3by4 img,\n #optimole-app .image.is-3by4 .has-ratio, #optimole-app .image.is-2by3 img,\n #optimole-app .image.is-2by3 .has-ratio, #optimole-app .image.is-3by5 img,\n #optimole-app .image.is-3by5 .has-ratio, #optimole-app .image.is-9by16 img,\n #optimole-app .image.is-9by16 .has-ratio, #optimole-app .image.is-1by2 img,\n #optimole-app .image.is-1by2 .has-ratio, #optimole-app .image.is-1by3 img,\n #optimole-app .image.is-1by3 .has-ratio, #optimole-app .modal, #optimole-app .modal-background, #optimole-app .hero-video {\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0; }\n #optimole-app .button, #optimole-app .input,\n #optimole-app .textarea, #optimole-app .select select, #optimole-app .file-cta,\n #optimole-app .file-name, #optimole-app .pagination-previous,\n #optimole-app .pagination-next,\n #optimole-app .pagination-link,\n #optimole-app .pagination-ellipsis {\n -moz-appearance: none;\n -webkit-appearance: none;\n -ms-flex-align: center;\n align-items: center;\n border: 1px solid transparent;\n border-radius: 4px;\n box-shadow: none;\n display: -ms-inline-flexbox;\n display: inline-flex;\n font-size: 1rem;\n height: 2.25em;\n -ms-flex-pack: start;\n justify-content: flex-start;\n line-height: 1.5;\n padding-bottom: calc(0.375em - 1px);\n padding-left: calc(0.625em - 1px);\n padding-right: calc(0.625em - 1px);\n padding-top: calc(0.375em - 1px);\n position: relative;\n vertical-align: top; }\n #optimole-app .button:focus, #optimole-app .input:focus,\n #optimole-app .textarea:focus, #optimole-app .select select:focus, #optimole-app .file-cta:focus,\n #optimole-app .file-name:focus, #optimole-app .pagination-previous:focus,\n #optimole-app .pagination-next:focus,\n #optimole-app .pagination-link:focus,\n #optimole-app .pagination-ellipsis:focus, #optimole-app .is-focused.button, #optimole-app .is-focused.input,\n #optimole-app .is-focused.textarea, #optimole-app .select select.is-focused, #optimole-app .is-focused.file-cta,\n #optimole-app .is-focused.file-name, #optimole-app .is-focused.pagination-previous,\n #optimole-app .is-focused.pagination-next,\n #optimole-app .is-focused.pagination-link,\n #optimole-app .is-focused.pagination-ellipsis, #optimole-app .button:active, #optimole-app .input:active,\n #optimole-app .textarea:active, #optimole-app .select select:active, #optimole-app .file-cta:active,\n #optimole-app .file-name:active, #optimole-app .pagination-previous:active,\n #optimole-app .pagination-next:active,\n #optimole-app .pagination-link:active,\n #optimole-app .pagination-ellipsis:active, #optimole-app .is-active.button, #optimole-app .is-active.input,\n #optimole-app .is-active.textarea, #optimole-app .select select.is-active, #optimole-app .is-active.file-cta,\n #optimole-app .is-active.file-name, #optimole-app .is-active.pagination-previous,\n #optimole-app .is-active.pagination-next,\n #optimole-app .is-active.pagination-link,\n #optimole-app .is-active.pagination-ellipsis {\n outline: none; }\n #optimole-app .button[disabled], #optimole-app .input[disabled],\n #optimole-app .textarea[disabled], #optimole-app .select select[disabled], #optimole-app .file-cta[disabled],\n #optimole-app .file-name[disabled], #optimole-app .pagination-previous[disabled],\n #optimole-app .pagination-next[disabled],\n #optimole-app .pagination-link[disabled],\n #optimole-app .pagination-ellipsis[disabled],\n fieldset[disabled] #optimole-app .button,\n fieldset[disabled] #optimole-app .input,\n fieldset[disabled] #optimole-app .textarea,\n fieldset[disabled] #optimole-app .select select,\n fieldset[disabled] #optimole-app .file-cta,\n fieldset[disabled] #optimole-app .file-name,\n fieldset[disabled] #optimole-app .pagination-previous,\n fieldset[disabled] #optimole-app .pagination-next,\n fieldset[disabled] #optimole-app .pagination-link,\n fieldset[disabled] #optimole-app .pagination-ellipsis {\n cursor: not-allowed; }\n #optimole-app html,\n #optimole-app body,\n #optimole-app p,\n #optimole-app ol,\n #optimole-app ul,\n #optimole-app li,\n #optimole-app dl,\n #optimole-app dt,\n #optimole-app dd,\n #optimole-app blockquote,\n #optimole-app figure,\n #optimole-app fieldset,\n #optimole-app legend,\n #optimole-app textarea,\n #optimole-app pre,\n #optimole-app iframe,\n #optimole-app hr,\n #optimole-app h1,\n #optimole-app h2,\n #optimole-app h3,\n #optimole-app h4,\n #optimole-app h5,\n #optimole-app h6 {\n margin: 0;\n padding: 0; }\n #optimole-app h1,\n #optimole-app h2,\n #optimole-app h3,\n #optimole-app h4,\n #optimole-app h5,\n #optimole-app h6 {\n font-size: 100%;\n font-weight: normal; }\n #optimole-app ul {\n list-style: none; }\n #optimole-app button,\n #optimole-app input,\n #optimole-app select,\n #optimole-app textarea {\n margin: 0; }\n #optimole-app html {\n box-sizing: border-box; }\n #optimole-app *, #optimole-app *::before, #optimole-app *::after {\n box-sizing: inherit; }\n #optimole-app img,\n #optimole-app embed,\n #optimole-app iframe,\n #optimole-app object,\n #optimole-app video {\n height: auto;\n max-width: 100%; }\n #optimole-app audio {\n max-width: 100%; }\n #optimole-app iframe {\n border: 0; }\n #optimole-app table {\n border-collapse: collapse;\n border-spacing: 0; }\n #optimole-app td,\n #optimole-app th {\n padding: 0;\n text-align: left; }\n #optimole-app html {\n background-color: white;\n font-size: 16px;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n min-width: 300px;\n overflow-x: hidden;\n overflow-y: scroll;\n text-rendering: optimizeLegibility;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n text-size-adjust: 100%; }\n #optimole-app article,\n #optimole-app aside,\n #optimole-app figure,\n #optimole-app footer,\n #optimole-app header,\n #optimole-app hgroup,\n #optimole-app section {\n display: block; }\n #optimole-app body,\n #optimole-app button,\n #optimole-app input,\n #optimole-app select,\n #optimole-app textarea {\n font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif; }\n #optimole-app code,\n #optimole-app pre {\n -moz-osx-font-smoothing: auto;\n -webkit-font-smoothing: auto;\n font-family: monospace; }\n #optimole-app body {\n color: #4a4a4a;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5; }\n #optimole-app a {\n color: #3273dc;\n cursor: pointer;\n text-decoration: none; }\n #optimole-app a strong {\n color: currentColor; }\n #optimole-app a:hover {\n color: #363636; }\n #optimole-app code {\n background-color: whitesmoke;\n color: #ff3860;\n font-size: 0.875em;\n font-weight: normal;\n padding: 0.25em 0.5em 0.25em; }\n #optimole-app hr {\n background-color: whitesmoke;\n border: none;\n display: block;\n height: 2px;\n margin: 1.5rem 0; }\n #optimole-app img {\n height: auto;\n max-width: 100%; }\n #optimole-app input[type=\"checkbox\"],\n #optimole-app input[type=\"radio\"] {\n vertical-align: baseline; }\n #optimole-app small {\n font-size: 0.875em; }\n #optimole-app span {\n font-style: inherit;\n font-weight: inherit; }\n #optimole-app strong {\n color: #363636;\n font-weight: 700; }\n #optimole-app fieldset {\n border: none; }\n #optimole-app pre {\n -webkit-overflow-scrolling: touch;\n background-color: whitesmoke;\n color: #4a4a4a;\n font-size: 0.875em;\n overflow-x: auto;\n padding: 1.25rem 1.5rem;\n white-space: pre;\n word-wrap: normal; }\n #optimole-app pre code {\n background-color: transparent;\n color: currentColor;\n font-size: 1em;\n padding: 0; }\n #optimole-app table td,\n #optimole-app table th {\n text-align: left;\n vertical-align: top; }\n #optimole-app table th {\n color: #363636; }\n #optimole-app .is-clearfix::after {\n clear: both;\n content: \" \";\n display: table; }\n #optimole-app .is-pulled-left {\n float: left !important; }\n #optimole-app .is-pulled-right {\n float: right !important; }\n #optimole-app .is-clipped {\n overflow: hidden !important; }\n #optimole-app .is-size-1 {\n font-size: 3rem !important; }\n #optimole-app .is-size-2 {\n font-size: 2.5rem !important; }\n #optimole-app .is-size-3 {\n font-size: 2rem !important; }\n #optimole-app .is-size-4 {\n font-size: 1.5rem !important; }\n #optimole-app .is-size-5 {\n font-size: 1.25rem !important; }\n #optimole-app .is-size-6 {\n font-size: 1rem !important; }\n #optimole-app .is-size-7 {\n font-size: 0.75rem !important; }\n @media screen and (max-width: 768px) {\n #optimole-app .is-size-1-mobile {\n font-size: 3rem !important; }\n #optimole-app .is-size-2-mobile {\n font-size: 2.5rem !important; }\n #optimole-app .is-size-3-mobile {\n font-size: 2rem !important; }\n #optimole-app .is-size-4-mobile {\n font-size: 1.5rem !important; }\n #optimole-app .is-size-5-mobile {\n font-size: 1.25rem !important; }\n #optimole-app .is-size-6-mobile {\n font-size: 1rem !important; }\n #optimole-app .is-size-7-mobile {\n font-size: 0.75rem !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .is-size-1-tablet {\n font-size: 3rem !important; }\n #optimole-app .is-size-2-tablet {\n font-size: 2.5rem !important; }\n #optimole-app .is-size-3-tablet {\n font-size: 2rem !important; }\n #optimole-app .is-size-4-tablet {\n font-size: 1.5rem !important; }\n #optimole-app .is-size-5-tablet {\n font-size: 1.25rem !important; }\n #optimole-app .is-size-6-tablet {\n font-size: 1rem !important; }\n #optimole-app .is-size-7-tablet {\n font-size: 0.75rem !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .is-size-1-touch {\n font-size: 3rem !important; }\n #optimole-app .is-size-2-touch {\n font-size: 2.5rem !important; }\n #optimole-app .is-size-3-touch {\n font-size: 2rem !important; }\n #optimole-app .is-size-4-touch {\n font-size: 1.5rem !important; }\n #optimole-app .is-size-5-touch {\n font-size: 1.25rem !important; }\n #optimole-app .is-size-6-touch {\n font-size: 1rem !important; }\n #optimole-app .is-size-7-touch {\n font-size: 0.75rem !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .is-size-1-desktop {\n font-size: 3rem !important; }\n #optimole-app .is-size-2-desktop {\n font-size: 2.5rem !important; }\n #optimole-app .is-size-3-desktop {\n font-size: 2rem !important; }\n #optimole-app .is-size-4-desktop {\n font-size: 1.5rem !important; }\n #optimole-app .is-size-5-desktop {\n font-size: 1.25rem !important; }\n #optimole-app .is-size-6-desktop {\n font-size: 1rem !important; }\n #optimole-app .is-size-7-desktop {\n font-size: 0.75rem !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .is-size-1-widescreen {\n font-size: 3rem !important; }\n #optimole-app .is-size-2-widescreen {\n font-size: 2.5rem !important; }\n #optimole-app .is-size-3-widescreen {\n font-size: 2rem !important; }\n #optimole-app .is-size-4-widescreen {\n font-size: 1.5rem !important; }\n #optimole-app .is-size-5-widescreen {\n font-size: 1.25rem !important; }\n #optimole-app .is-size-6-widescreen {\n font-size: 1rem !important; }\n #optimole-app .is-size-7-widescreen {\n font-size: 0.75rem !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .is-size-1-fullhd {\n font-size: 3rem !important; }\n #optimole-app .is-size-2-fullhd {\n font-size: 2.5rem !important; }\n #optimole-app .is-size-3-fullhd {\n font-size: 2rem !important; }\n #optimole-app .is-size-4-fullhd {\n font-size: 1.5rem !important; }\n #optimole-app .is-size-5-fullhd {\n font-size: 1.25rem !important; }\n #optimole-app .is-size-6-fullhd {\n font-size: 1rem !important; }\n #optimole-app .is-size-7-fullhd {\n font-size: 0.75rem !important; } }\n #optimole-app .has-text-centered {\n text-align: center !important; }\n #optimole-app .has-text-justified {\n text-align: justify !important; }\n #optimole-app .has-text-left {\n text-align: left !important; }\n #optimole-app .has-text-right {\n text-align: right !important; }\n @media screen and (max-width: 768px) {\n #optimole-app .has-text-centered-mobile {\n text-align: center !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .has-text-centered-tablet {\n text-align: center !important; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .has-text-centered-tablet-only {\n text-align: center !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .has-text-centered-touch {\n text-align: center !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .has-text-centered-desktop {\n text-align: center !important; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .has-text-centered-desktop-only {\n text-align: center !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .has-text-centered-widescreen {\n text-align: center !important; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .has-text-centered-widescreen-only {\n text-align: center !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .has-text-centered-fullhd {\n text-align: center !important; } }\n @media screen and (max-width: 768px) {\n #optimole-app .has-text-justified-mobile {\n text-align: justify !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .has-text-justified-tablet {\n text-align: justify !important; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .has-text-justified-tablet-only {\n text-align: justify !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .has-text-justified-touch {\n text-align: justify !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .has-text-justified-desktop {\n text-align: justify !important; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .has-text-justified-desktop-only {\n text-align: justify !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .has-text-justified-widescreen {\n text-align: justify !important; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .has-text-justified-widescreen-only {\n text-align: justify !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .has-text-justified-fullhd {\n text-align: justify !important; } }\n @media screen and (max-width: 768px) {\n #optimole-app .has-text-left-mobile {\n text-align: left !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .has-text-left-tablet {\n text-align: left !important; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .has-text-left-tablet-only {\n text-align: left !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .has-text-left-touch {\n text-align: left !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .has-text-left-desktop {\n text-align: left !important; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .has-text-left-desktop-only {\n text-align: left !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .has-text-left-widescreen {\n text-align: left !important; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .has-text-left-widescreen-only {\n text-align: left !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .has-text-left-fullhd {\n text-align: left !important; } }\n @media screen and (max-width: 768px) {\n #optimole-app .has-text-right-mobile {\n text-align: right !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .has-text-right-tablet {\n text-align: right !important; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .has-text-right-tablet-only {\n text-align: right !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .has-text-right-touch {\n text-align: right !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .has-text-right-desktop {\n text-align: right !important; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .has-text-right-desktop-only {\n text-align: right !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .has-text-right-widescreen {\n text-align: right !important; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .has-text-right-widescreen-only {\n text-align: right !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .has-text-right-fullhd {\n text-align: right !important; } }\n #optimole-app .is-capitalized {\n text-transform: capitalize !important; }\n #optimole-app .is-lowercase {\n text-transform: lowercase !important; }\n #optimole-app .is-uppercase {\n text-transform: uppercase !important; }\n #optimole-app .is-italic {\n font-style: italic !important; }\n #optimole-app .has-text-white {\n color: white !important; }\n #optimole-app a.has-text-white:hover, #optimole-app a.has-text-white:focus {\n color: #e6e6e6 !important; }\n #optimole-app .has-background-white {\n background-color: white !important; }\n #optimole-app .has-text-black {\n color: #0a0a0a !important; }\n #optimole-app a.has-text-black:hover, #optimole-app a.has-text-black:focus {\n color: black !important; }\n #optimole-app .has-background-black {\n background-color: #0a0a0a !important; }\n #optimole-app .has-text-light {\n color: whitesmoke !important; }\n #optimole-app a.has-text-light:hover, #optimole-app a.has-text-light:focus {\n color: #dbdbdb !important; }\n #optimole-app .has-background-light {\n background-color: whitesmoke !important; }\n #optimole-app .has-text-dark {\n color: #363636 !important; }\n #optimole-app a.has-text-dark:hover, #optimole-app a.has-text-dark:focus {\n color: #1c1c1c !important; }\n #optimole-app .has-background-dark {\n background-color: #363636 !important; }\n #optimole-app .has-text-primary {\n color: #EF686B !important; }\n #optimole-app a.has-text-primary:hover, #optimole-app a.has-text-primary:focus {\n color: #ea3a3e !important; }\n #optimole-app .has-background-primary {\n background-color: #EF686B !important; }\n #optimole-app .has-text-link {\n color: #3273dc !important; }\n #optimole-app a.has-text-link:hover, #optimole-app a.has-text-link:focus {\n color: #205bbc !important; }\n #optimole-app .has-background-link {\n background-color: #3273dc !important; }\n #optimole-app .has-text-info {\n color: #5180C1 !important; }\n #optimole-app a.has-text-info:hover, #optimole-app a.has-text-info:focus {\n color: #3b67a4 !important; }\n #optimole-app .has-background-info {\n background-color: #5180C1 !important; }\n #optimole-app .has-text-success {\n color: #34a85e !important; }\n #optimole-app a.has-text-success:hover, #optimole-app a.has-text-success:focus {\n color: #288148 !important; }\n #optimole-app .has-background-success {\n background-color: #34a85e !important; }\n #optimole-app .has-text-warning {\n color: #ffdd57 !important; }\n #optimole-app a.has-text-warning:hover, #optimole-app a.has-text-warning:focus {\n color: #ffd324 !important; }\n #optimole-app .has-background-warning {\n background-color: #ffdd57 !important; }\n #optimole-app .has-text-danger {\n color: #D54222 !important; }\n #optimole-app a.has-text-danger:hover, #optimole-app a.has-text-danger:focus {\n color: #a9341b !important; }\n #optimole-app .has-background-danger {\n background-color: #D54222 !important; }\n #optimole-app .has-text-black-bis {\n color: #121212 !important; }\n #optimole-app .has-background-black-bis {\n background-color: #121212 !important; }\n #optimole-app .has-text-black-ter {\n color: #242424 !important; }\n #optimole-app .has-background-black-ter {\n background-color: #242424 !important; }\n #optimole-app .has-text-grey-darker {\n color: #363636 !important; }\n #optimole-app .has-background-grey-darker {\n background-color: #363636 !important; }\n #optimole-app .has-text-grey-dark {\n color: #4a4a4a !important; }\n #optimole-app .has-background-grey-dark {\n background-color: #4a4a4a !important; }\n #optimole-app .has-text-grey {\n color: #7a7a7a !important; }\n #optimole-app .has-background-grey {\n background-color: #7a7a7a !important; }\n #optimole-app .has-text-grey-light {\n color: #b5b5b5 !important; }\n #optimole-app .has-background-grey-light {\n background-color: #b5b5b5 !important; }\n #optimole-app .has-text-grey-lighter {\n color: #dbdbdb !important; }\n #optimole-app .has-background-grey-lighter {\n background-color: #dbdbdb !important; }\n #optimole-app .has-text-white-ter {\n color: whitesmoke !important; }\n #optimole-app .has-background-white-ter {\n background-color: whitesmoke !important; }\n #optimole-app .has-text-white-bis {\n color: #fafafa !important; }\n #optimole-app .has-background-white-bis {\n background-color: #fafafa !important; }\n #optimole-app .has-text-weight-light {\n font-weight: 300 !important; }\n #optimole-app .has-text-weight-normal {\n font-weight: 400 !important; }\n #optimole-app .has-text-weight-semibold {\n font-weight: 600 !important; }\n #optimole-app .has-text-weight-bold {\n font-weight: 700 !important; }\n #optimole-app .is-family-primary {\n font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif !important; }\n #optimole-app .is-family-secondary {\n font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif !important; }\n #optimole-app .is-family-sans-serif {\n font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif !important; }\n #optimole-app .is-family-monospace {\n font-family: monospace !important; }\n #optimole-app .is-family-code {\n font-family: monospace !important; }\n #optimole-app .is-block {\n display: block !important; }\n @media screen and (max-width: 768px) {\n #optimole-app .is-block-mobile {\n display: block !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .is-block-tablet {\n display: block !important; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .is-block-tablet-only {\n display: block !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .is-block-touch {\n display: block !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .is-block-desktop {\n display: block !important; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .is-block-desktop-only {\n display: block !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .is-block-widescreen {\n display: block !important; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .is-block-widescreen-only {\n display: block !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .is-block-fullhd {\n display: block !important; } }\n #optimole-app .is-flex {\n display: -ms-flexbox !important;\n display: flex !important; }\n @media screen and (max-width: 768px) {\n #optimole-app .is-flex-mobile {\n display: -ms-flexbox !important;\n display: flex !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .is-flex-tablet {\n display: -ms-flexbox !important;\n display: flex !important; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .is-flex-tablet-only {\n display: -ms-flexbox !important;\n display: flex !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .is-flex-touch {\n display: -ms-flexbox !important;\n display: flex !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .is-flex-desktop {\n display: -ms-flexbox !important;\n display: flex !important; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .is-flex-desktop-only {\n display: -ms-flexbox !important;\n display: flex !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .is-flex-widescreen {\n display: -ms-flexbox !important;\n display: flex !important; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .is-flex-widescreen-only {\n display: -ms-flexbox !important;\n display: flex !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .is-flex-fullhd {\n display: -ms-flexbox !important;\n display: flex !important; } }\n #optimole-app .is-inline {\n display: inline !important; }\n @media screen and (max-width: 768px) {\n #optimole-app .is-inline-mobile {\n display: inline !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .is-inline-tablet {\n display: inline !important; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .is-inline-tablet-only {\n display: inline !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .is-inline-touch {\n display: inline !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .is-inline-desktop {\n display: inline !important; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .is-inline-desktop-only {\n display: inline !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .is-inline-widescreen {\n display: inline !important; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .is-inline-widescreen-only {\n display: inline !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .is-inline-fullhd {\n display: inline !important; } }\n #optimole-app .is-inline-block {\n display: inline-block !important; }\n @media screen and (max-width: 768px) {\n #optimole-app .is-inline-block-mobile {\n display: inline-block !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .is-inline-block-tablet {\n display: inline-block !important; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .is-inline-block-tablet-only {\n display: inline-block !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .is-inline-block-touch {\n display: inline-block !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .is-inline-block-desktop {\n display: inline-block !important; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .is-inline-block-desktop-only {\n display: inline-block !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .is-inline-block-widescreen {\n display: inline-block !important; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .is-inline-block-widescreen-only {\n display: inline-block !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .is-inline-block-fullhd {\n display: inline-block !important; } }\n #optimole-app .is-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important; }\n @media screen and (max-width: 768px) {\n #optimole-app .is-inline-flex-mobile {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .is-inline-flex-tablet {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .is-inline-flex-tablet-only {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .is-inline-flex-touch {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .is-inline-flex-desktop {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .is-inline-flex-desktop-only {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .is-inline-flex-widescreen {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .is-inline-flex-widescreen-only {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .is-inline-flex-fullhd {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important; } }\n #optimole-app .is-hidden {\n display: none !important; }\n #optimole-app .is-sr-only {\n border: none !important;\n clip: rect(0, 0, 0, 0) !important;\n height: 0.01em !important;\n overflow: hidden !important;\n padding: 0 !important;\n position: absolute !important;\n white-space: nowrap !important;\n width: 0.01em !important; }\n @media screen and (max-width: 768px) {\n #optimole-app .is-hidden-mobile {\n display: none !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .is-hidden-tablet {\n display: none !important; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .is-hidden-tablet-only {\n display: none !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .is-hidden-touch {\n display: none !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .is-hidden-desktop {\n display: none !important; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .is-hidden-desktop-only {\n display: none !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .is-hidden-widescreen {\n display: none !important; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .is-hidden-widescreen-only {\n display: none !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .is-hidden-fullhd {\n display: none !important; } }\n #optimole-app .is-invisible {\n visibility: hidden !important; }\n @media screen and (max-width: 768px) {\n #optimole-app .is-invisible-mobile {\n visibility: hidden !important; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .is-invisible-tablet {\n visibility: hidden !important; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .is-invisible-tablet-only {\n visibility: hidden !important; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .is-invisible-touch {\n visibility: hidden !important; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .is-invisible-desktop {\n visibility: hidden !important; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .is-invisible-desktop-only {\n visibility: hidden !important; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .is-invisible-widescreen {\n visibility: hidden !important; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .is-invisible-widescreen-only {\n visibility: hidden !important; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .is-invisible-fullhd {\n visibility: hidden !important; } }\n #optimole-app .is-marginless {\n margin: 0 !important; }\n #optimole-app .is-paddingless {\n padding: 0 !important; }\n #optimole-app .is-radiusless {\n border-radius: 0 !important; }\n #optimole-app .is-shadowless {\n box-shadow: none !important; }\n #optimole-app .box {\n background-color: white;\n border-radius: 6px;\n box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);\n color: #4a4a4a;\n display: block;\n padding: 1.25rem; }\n #optimole-app a.box:hover, #optimole-app a.box:focus {\n box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #3273dc; }\n #optimole-app a.box:active {\n box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #3273dc; }\n #optimole-app .button {\n background-color: white;\n border-color: #dbdbdb;\n border-width: 1px;\n color: #363636;\n cursor: pointer;\n -ms-flex-pack: center;\n justify-content: center;\n padding-bottom: calc(0.375em - 1px);\n padding-left: 0.75em;\n padding-right: 0.75em;\n padding-top: calc(0.375em - 1px);\n text-align: center;\n white-space: nowrap; }\n #optimole-app .button strong {\n color: inherit; }\n #optimole-app .button .icon, #optimole-app .button .icon.is-small, #optimole-app .button .icon.is-medium, #optimole-app .button .icon.is-large {\n height: 1.5em;\n width: 1.5em; }\n #optimole-app .button .icon:first-child:not(:last-child) {\n margin-left: calc(-0.375em - 1px);\n margin-right: 0.1875em; }\n #optimole-app .button .icon:last-child:not(:first-child) {\n margin-left: 0.1875em;\n margin-right: calc(-0.375em - 1px); }\n #optimole-app .button .icon:first-child:last-child {\n margin-left: calc(-0.375em - 1px);\n margin-right: calc(-0.375em - 1px); }\n #optimole-app .button:hover, #optimole-app .button.is-hovered {\n border-color: #b5b5b5;\n color: #363636; }\n #optimole-app .button:focus, #optimole-app .button.is-focused {\n border-color: #3273dc;\n color: #363636; }\n #optimole-app .button:focus:not(:active), #optimole-app .button.is-focused:not(:active) {\n box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }\n #optimole-app .button:active, #optimole-app .button.is-active {\n border-color: #4a4a4a;\n color: #363636; }\n #optimole-app .button.is-text {\n background-color: transparent;\n border-color: transparent;\n color: #4a4a4a;\n text-decoration: underline; }\n #optimole-app .button.is-text:hover, #optimole-app .button.is-text.is-hovered, #optimole-app .button.is-text:focus, #optimole-app .button.is-text.is-focused {\n background-color: whitesmoke;\n color: #363636; }\n #optimole-app .button.is-text:active, #optimole-app .button.is-text.is-active {\n background-color: #e8e8e8;\n color: #363636; }\n #optimole-app .button.is-text[disabled],\n fieldset[disabled] #optimole-app .button.is-text {\n background-color: transparent;\n border-color: transparent;\n box-shadow: none; }\n #optimole-app .button.is-white {\n background-color: white;\n border-color: transparent;\n color: #0a0a0a; }\n #optimole-app .button.is-white:hover, #optimole-app .button.is-white.is-hovered {\n background-color: #f9f9f9;\n border-color: transparent;\n color: #0a0a0a; }\n #optimole-app .button.is-white:focus, #optimole-app .button.is-white.is-focused {\n border-color: transparent;\n color: #0a0a0a; }\n #optimole-app .button.is-white:focus:not(:active), #optimole-app .button.is-white.is-focused:not(:active) {\n box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); }\n #optimole-app .button.is-white:active, #optimole-app .button.is-white.is-active {\n background-color: #f2f2f2;\n border-color: transparent;\n color: #0a0a0a; }\n #optimole-app .button.is-white[disabled],\n fieldset[disabled] #optimole-app .button.is-white {\n background-color: white;\n border-color: transparent;\n box-shadow: none; }\n #optimole-app .button.is-white.is-inverted {\n background-color: #0a0a0a;\n color: white; }\n #optimole-app .button.is-white.is-inverted:hover {\n background-color: black; }\n #optimole-app .button.is-white.is-inverted[disabled],\n fieldset[disabled] #optimole-app .button.is-white.is-inverted {\n background-color: #0a0a0a;\n border-color: transparent;\n box-shadow: none;\n color: white; }\n #optimole-app .button.is-white.is-loading::after {\n border-color: transparent transparent #0a0a0a #0a0a0a !important; }\n #optimole-app .button.is-white.is-outlined {\n background-color: transparent;\n border-color: white;\n color: white; }\n #optimole-app .button.is-white.is-outlined:hover, #optimole-app .button.is-white.is-outlined:focus {\n background-color: white;\n border-color: white;\n color: #0a0a0a; }\n #optimole-app .button.is-white.is-outlined.is-loading::after {\n border-color: transparent transparent white white !important; }\n #optimole-app .button.is-white.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-white.is-outlined {\n background-color: transparent;\n border-color: white;\n box-shadow: none;\n color: white; }\n #optimole-app .button.is-white.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #0a0a0a;\n color: #0a0a0a; }\n #optimole-app .button.is-white.is-inverted.is-outlined:hover, #optimole-app .button.is-white.is-inverted.is-outlined:focus {\n background-color: #0a0a0a;\n color: white; }\n #optimole-app .button.is-white.is-inverted.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-white.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #0a0a0a;\n box-shadow: none;\n color: #0a0a0a; }\n #optimole-app .button.is-black {\n background-color: #0a0a0a;\n border-color: transparent;\n color: white; }\n #optimole-app .button.is-black:hover, #optimole-app .button.is-black.is-hovered {\n background-color: #040404;\n border-color: transparent;\n color: white; }\n #optimole-app .button.is-black:focus, #optimole-app .button.is-black.is-focused {\n border-color: transparent;\n color: white; }\n #optimole-app .button.is-black:focus:not(:active), #optimole-app .button.is-black.is-focused:not(:active) {\n box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); }\n #optimole-app .button.is-black:active, #optimole-app .button.is-black.is-active {\n background-color: black;\n border-color: transparent;\n color: white; }\n #optimole-app .button.is-black[disabled],\n fieldset[disabled] #optimole-app .button.is-black {\n background-color: #0a0a0a;\n border-color: transparent;\n box-shadow: none; }\n #optimole-app .button.is-black.is-inverted {\n background-color: white;\n color: #0a0a0a; }\n #optimole-app .button.is-black.is-inverted:hover {\n background-color: #f2f2f2; }\n #optimole-app .button.is-black.is-inverted[disabled],\n fieldset[disabled] #optimole-app .button.is-black.is-inverted {\n background-color: white;\n border-color: transparent;\n box-shadow: none;\n color: #0a0a0a; }\n #optimole-app .button.is-black.is-loading::after {\n border-color: transparent transparent white white !important; }\n #optimole-app .button.is-black.is-outlined {\n background-color: transparent;\n border-color: #0a0a0a;\n color: #0a0a0a; }\n #optimole-app .button.is-black.is-outlined:hover, #optimole-app .button.is-black.is-outlined:focus {\n background-color: #0a0a0a;\n border-color: #0a0a0a;\n color: white; }\n #optimole-app .button.is-black.is-outlined.is-loading::after {\n border-color: transparent transparent #0a0a0a #0a0a0a !important; }\n #optimole-app .button.is-black.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-black.is-outlined {\n background-color: transparent;\n border-color: #0a0a0a;\n box-shadow: none;\n color: #0a0a0a; }\n #optimole-app .button.is-black.is-inverted.is-outlined {\n background-color: transparent;\n border-color: white;\n color: white; }\n #optimole-app .button.is-black.is-inverted.is-outlined:hover, #optimole-app .button.is-black.is-inverted.is-outlined:focus {\n background-color: white;\n color: #0a0a0a; }\n #optimole-app .button.is-black.is-inverted.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-black.is-inverted.is-outlined {\n background-color: transparent;\n border-color: white;\n box-shadow: none;\n color: white; }\n #optimole-app .button.is-light {\n background-color: whitesmoke;\n border-color: transparent;\n color: #363636; }\n #optimole-app .button.is-light:hover, #optimole-app .button.is-light.is-hovered {\n background-color: #eeeeee;\n border-color: transparent;\n color: #363636; }\n #optimole-app .button.is-light:focus, #optimole-app .button.is-light.is-focused {\n border-color: transparent;\n color: #363636; }\n #optimole-app .button.is-light:focus:not(:active), #optimole-app .button.is-light.is-focused:not(:active) {\n box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); }\n #optimole-app .button.is-light:active, #optimole-app .button.is-light.is-active {\n background-color: #e8e8e8;\n border-color: transparent;\n color: #363636; }\n #optimole-app .button.is-light[disabled],\n fieldset[disabled] #optimole-app .button.is-light {\n background-color: whitesmoke;\n border-color: transparent;\n box-shadow: none; }\n #optimole-app .button.is-light.is-inverted {\n background-color: #363636;\n color: whitesmoke; }\n #optimole-app .button.is-light.is-inverted:hover {\n background-color: #292929; }\n #optimole-app .button.is-light.is-inverted[disabled],\n fieldset[disabled] #optimole-app .button.is-light.is-inverted {\n background-color: #363636;\n border-color: transparent;\n box-shadow: none;\n color: whitesmoke; }\n #optimole-app .button.is-light.is-loading::after {\n border-color: transparent transparent #363636 #363636 !important; }\n #optimole-app .button.is-light.is-outlined {\n background-color: transparent;\n border-color: whitesmoke;\n color: whitesmoke; }\n #optimole-app .button.is-light.is-outlined:hover, #optimole-app .button.is-light.is-outlined:focus {\n background-color: whitesmoke;\n border-color: whitesmoke;\n color: #363636; }\n #optimole-app .button.is-light.is-outlined.is-loading::after {\n border-color: transparent transparent whitesmoke whitesmoke !important; }\n #optimole-app .button.is-light.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-light.is-outlined {\n background-color: transparent;\n border-color: whitesmoke;\n box-shadow: none;\n color: whitesmoke; }\n #optimole-app .button.is-light.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #363636;\n color: #363636; }\n #optimole-app .button.is-light.is-inverted.is-outlined:hover, #optimole-app .button.is-light.is-inverted.is-outlined:focus {\n background-color: #363636;\n color: whitesmoke; }\n #optimole-app .button.is-light.is-inverted.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-light.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #363636;\n box-shadow: none;\n color: #363636; }\n #optimole-app .button.is-dark {\n background-color: #363636;\n border-color: transparent;\n color: whitesmoke; }\n #optimole-app .button.is-dark:hover, #optimole-app .button.is-dark.is-hovered {\n background-color: #2f2f2f;\n border-color: transparent;\n color: whitesmoke; }\n #optimole-app .button.is-dark:focus, #optimole-app .button.is-dark.is-focused {\n border-color: transparent;\n color: whitesmoke; }\n #optimole-app .button.is-dark:focus:not(:active), #optimole-app .button.is-dark.is-focused:not(:active) {\n box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); }\n #optimole-app .button.is-dark:active, #optimole-app .button.is-dark.is-active {\n background-color: #292929;\n border-color: transparent;\n color: whitesmoke; }\n #optimole-app .button.is-dark[disabled],\n fieldset[disabled] #optimole-app .button.is-dark {\n background-color: #363636;\n border-color: transparent;\n box-shadow: none; }\n #optimole-app .button.is-dark.is-inverted {\n background-color: whitesmoke;\n color: #363636; }\n #optimole-app .button.is-dark.is-inverted:hover {\n background-color: #e8e8e8; }\n #optimole-app .button.is-dark.is-inverted[disabled],\n fieldset[disabled] #optimole-app .button.is-dark.is-inverted {\n background-color: whitesmoke;\n border-color: transparent;\n box-shadow: none;\n color: #363636; }\n #optimole-app .button.is-dark.is-loading::after {\n border-color: transparent transparent whitesmoke whitesmoke !important; }\n #optimole-app .button.is-dark.is-outlined {\n background-color: transparent;\n border-color: #363636;\n color: #363636; }\n #optimole-app .button.is-dark.is-outlined:hover, #optimole-app .button.is-dark.is-outlined:focus {\n background-color: #363636;\n border-color: #363636;\n color: whitesmoke; }\n #optimole-app .button.is-dark.is-outlined.is-loading::after {\n border-color: transparent transparent #363636 #363636 !important; }\n #optimole-app .button.is-dark.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-dark.is-outlined {\n background-color: transparent;\n border-color: #363636;\n box-shadow: none;\n color: #363636; }\n #optimole-app .button.is-dark.is-inverted.is-outlined {\n background-color: transparent;\n border-color: whitesmoke;\n color: whitesmoke; }\n #optimole-app .button.is-dark.is-inverted.is-outlined:hover, #optimole-app .button.is-dark.is-inverted.is-outlined:focus {\n background-color: whitesmoke;\n color: #363636; }\n #optimole-app .button.is-dark.is-inverted.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-dark.is-inverted.is-outlined {\n background-color: transparent;\n border-color: whitesmoke;\n box-shadow: none;\n color: whitesmoke; }\n #optimole-app .button.is-primary {\n background-color: #EF686B;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-primary:hover, #optimole-app .button.is-primary.is-hovered {\n background-color: #ee5c60;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-primary:focus, #optimole-app .button.is-primary.is-focused {\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-primary:focus:not(:active), #optimole-app .button.is-primary.is-focused:not(:active) {\n box-shadow: 0 0 0 0.125em rgba(239, 104, 107, 0.25); }\n #optimole-app .button.is-primary:active, #optimole-app .button.is-primary.is-active {\n background-color: #ed5154;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-primary[disabled],\n fieldset[disabled] #optimole-app .button.is-primary {\n background-color: #EF686B;\n border-color: transparent;\n box-shadow: none; }\n #optimole-app .button.is-primary.is-inverted {\n background-color: #fff;\n color: #EF686B; }\n #optimole-app .button.is-primary.is-inverted:hover {\n background-color: #f2f2f2; }\n #optimole-app .button.is-primary.is-inverted[disabled],\n fieldset[disabled] #optimole-app .button.is-primary.is-inverted {\n background-color: #fff;\n border-color: transparent;\n box-shadow: none;\n color: #EF686B; }\n #optimole-app .button.is-primary.is-loading::after {\n border-color: transparent transparent #fff #fff !important; }\n #optimole-app .button.is-primary.is-outlined {\n background-color: transparent;\n border-color: #EF686B;\n color: #EF686B; }\n #optimole-app .button.is-primary.is-outlined:hover, #optimole-app .button.is-primary.is-outlined:focus {\n background-color: #EF686B;\n border-color: #EF686B;\n color: #fff; }\n #optimole-app .button.is-primary.is-outlined.is-loading::after {\n border-color: transparent transparent #EF686B #EF686B !important; }\n #optimole-app .button.is-primary.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-primary.is-outlined {\n background-color: transparent;\n border-color: #EF686B;\n box-shadow: none;\n color: #EF686B; }\n #optimole-app .button.is-primary.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #fff;\n color: #fff; }\n #optimole-app .button.is-primary.is-inverted.is-outlined:hover, #optimole-app .button.is-primary.is-inverted.is-outlined:focus {\n background-color: #fff;\n color: #EF686B; }\n #optimole-app .button.is-primary.is-inverted.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-primary.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #fff;\n box-shadow: none;\n color: #fff; }\n #optimole-app .button.is-link {\n background-color: #3273dc;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-link:hover, #optimole-app .button.is-link.is-hovered {\n background-color: #276cda;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-link:focus, #optimole-app .button.is-link.is-focused {\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-link:focus:not(:active), #optimole-app .button.is-link.is-focused:not(:active) {\n box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }\n #optimole-app .button.is-link:active, #optimole-app .button.is-link.is-active {\n background-color: #2366d1;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-link[disabled],\n fieldset[disabled] #optimole-app .button.is-link {\n background-color: #3273dc;\n border-color: transparent;\n box-shadow: none; }\n #optimole-app .button.is-link.is-inverted {\n background-color: #fff;\n color: #3273dc; }\n #optimole-app .button.is-link.is-inverted:hover {\n background-color: #f2f2f2; }\n #optimole-app .button.is-link.is-inverted[disabled],\n fieldset[disabled] #optimole-app .button.is-link.is-inverted {\n background-color: #fff;\n border-color: transparent;\n box-shadow: none;\n color: #3273dc; }\n #optimole-app .button.is-link.is-loading::after {\n border-color: transparent transparent #fff #fff !important; }\n #optimole-app .button.is-link.is-outlined {\n background-color: transparent;\n border-color: #3273dc;\n color: #3273dc; }\n #optimole-app .button.is-link.is-outlined:hover, #optimole-app .button.is-link.is-outlined:focus {\n background-color: #3273dc;\n border-color: #3273dc;\n color: #fff; }\n #optimole-app .button.is-link.is-outlined.is-loading::after {\n border-color: transparent transparent #3273dc #3273dc !important; }\n #optimole-app .button.is-link.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-link.is-outlined {\n background-color: transparent;\n border-color: #3273dc;\n box-shadow: none;\n color: #3273dc; }\n #optimole-app .button.is-link.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #fff;\n color: #fff; }\n #optimole-app .button.is-link.is-inverted.is-outlined:hover, #optimole-app .button.is-link.is-inverted.is-outlined:focus {\n background-color: #fff;\n color: #3273dc; }\n #optimole-app .button.is-link.is-inverted.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-link.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #fff;\n box-shadow: none;\n color: #fff; }\n #optimole-app .button.is-info {\n background-color: #5180C1;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-info:hover, #optimole-app .button.is-info.is-hovered {\n background-color: #4879be;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-info:focus, #optimole-app .button.is-info.is-focused {\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-info:focus:not(:active), #optimole-app .button.is-info.is-focused:not(:active) {\n box-shadow: 0 0 0 0.125em rgba(81, 128, 193, 0.25); }\n #optimole-app .button.is-info:active, #optimole-app .button.is-info.is-active {\n background-color: #4173b7;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-info[disabled],\n fieldset[disabled] #optimole-app .button.is-info {\n background-color: #5180C1;\n border-color: transparent;\n box-shadow: none; }\n #optimole-app .button.is-info.is-inverted {\n background-color: #fff;\n color: #5180C1; }\n #optimole-app .button.is-info.is-inverted:hover {\n background-color: #f2f2f2; }\n #optimole-app .button.is-info.is-inverted[disabled],\n fieldset[disabled] #optimole-app .button.is-info.is-inverted {\n background-color: #fff;\n border-color: transparent;\n box-shadow: none;\n color: #5180C1; }\n #optimole-app .button.is-info.is-loading::after {\n border-color: transparent transparent #fff #fff !important; }\n #optimole-app .button.is-info.is-outlined {\n background-color: transparent;\n border-color: #5180C1;\n color: #5180C1; }\n #optimole-app .button.is-info.is-outlined:hover, #optimole-app .button.is-info.is-outlined:focus {\n background-color: #5180C1;\n border-color: #5180C1;\n color: #fff; }\n #optimole-app .button.is-info.is-outlined.is-loading::after {\n border-color: transparent transparent #5180C1 #5180C1 !important; }\n #optimole-app .button.is-info.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-info.is-outlined {\n background-color: transparent;\n border-color: #5180C1;\n box-shadow: none;\n color: #5180C1; }\n #optimole-app .button.is-info.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #fff;\n color: #fff; }\n #optimole-app .button.is-info.is-inverted.is-outlined:hover, #optimole-app .button.is-info.is-inverted.is-outlined:focus {\n background-color: #fff;\n color: #5180C1; }\n #optimole-app .button.is-info.is-inverted.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-info.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #fff;\n box-shadow: none;\n color: #fff; }\n #optimole-app .button.is-success {\n background-color: #34a85e;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-success:hover, #optimole-app .button.is-success.is-hovered {\n background-color: #319e59;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-success:focus, #optimole-app .button.is-success.is-focused {\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-success:focus:not(:active), #optimole-app .button.is-success.is-focused:not(:active) {\n box-shadow: 0 0 0 0.125em rgba(52, 168, 94, 0.25); }\n #optimole-app .button.is-success:active, #optimole-app .button.is-success.is-active {\n background-color: #2e9553;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-success[disabled],\n fieldset[disabled] #optimole-app .button.is-success {\n background-color: #34a85e;\n border-color: transparent;\n box-shadow: none; }\n #optimole-app .button.is-success.is-inverted {\n background-color: #fff;\n color: #34a85e; }\n #optimole-app .button.is-success.is-inverted:hover {\n background-color: #f2f2f2; }\n #optimole-app .button.is-success.is-inverted[disabled],\n fieldset[disabled] #optimole-app .button.is-success.is-inverted {\n background-color: #fff;\n border-color: transparent;\n box-shadow: none;\n color: #34a85e; }\n #optimole-app .button.is-success.is-loading::after {\n border-color: transparent transparent #fff #fff !important; }\n #optimole-app .button.is-success.is-outlined {\n background-color: transparent;\n border-color: #34a85e;\n color: #34a85e; }\n #optimole-app .button.is-success.is-outlined:hover, #optimole-app .button.is-success.is-outlined:focus {\n background-color: #34a85e;\n border-color: #34a85e;\n color: #fff; }\n #optimole-app .button.is-success.is-outlined.is-loading::after {\n border-color: transparent transparent #34a85e #34a85e !important; }\n #optimole-app .button.is-success.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-success.is-outlined {\n background-color: transparent;\n border-color: #34a85e;\n box-shadow: none;\n color: #34a85e; }\n #optimole-app .button.is-success.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #fff;\n color: #fff; }\n #optimole-app .button.is-success.is-inverted.is-outlined:hover, #optimole-app .button.is-success.is-inverted.is-outlined:focus {\n background-color: #fff;\n color: #34a85e; }\n #optimole-app .button.is-success.is-inverted.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-success.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #fff;\n box-shadow: none;\n color: #fff; }\n #optimole-app .button.is-warning {\n background-color: #ffdd57;\n border-color: transparent;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .button.is-warning:hover, #optimole-app .button.is-warning.is-hovered {\n background-color: #ffdb4a;\n border-color: transparent;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .button.is-warning:focus, #optimole-app .button.is-warning.is-focused {\n border-color: transparent;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .button.is-warning:focus:not(:active), #optimole-app .button.is-warning.is-focused:not(:active) {\n box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); }\n #optimole-app .button.is-warning:active, #optimole-app .button.is-warning.is-active {\n background-color: #ffd83d;\n border-color: transparent;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .button.is-warning[disabled],\n fieldset[disabled] #optimole-app .button.is-warning {\n background-color: #ffdd57;\n border-color: transparent;\n box-shadow: none; }\n #optimole-app .button.is-warning.is-inverted {\n background-color: rgba(0, 0, 0, 0.7);\n color: #ffdd57; }\n #optimole-app .button.is-warning.is-inverted:hover {\n background-color: rgba(0, 0, 0, 0.7); }\n #optimole-app .button.is-warning.is-inverted[disabled],\n fieldset[disabled] #optimole-app .button.is-warning.is-inverted {\n background-color: rgba(0, 0, 0, 0.7);\n border-color: transparent;\n box-shadow: none;\n color: #ffdd57; }\n #optimole-app .button.is-warning.is-loading::after {\n border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; }\n #optimole-app .button.is-warning.is-outlined {\n background-color: transparent;\n border-color: #ffdd57;\n color: #ffdd57; }\n #optimole-app .button.is-warning.is-outlined:hover, #optimole-app .button.is-warning.is-outlined:focus {\n background-color: #ffdd57;\n border-color: #ffdd57;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .button.is-warning.is-outlined.is-loading::after {\n border-color: transparent transparent #ffdd57 #ffdd57 !important; }\n #optimole-app .button.is-warning.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-warning.is-outlined {\n background-color: transparent;\n border-color: #ffdd57;\n box-shadow: none;\n color: #ffdd57; }\n #optimole-app .button.is-warning.is-inverted.is-outlined {\n background-color: transparent;\n border-color: rgba(0, 0, 0, 0.7);\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .button.is-warning.is-inverted.is-outlined:hover, #optimole-app .button.is-warning.is-inverted.is-outlined:focus {\n background-color: rgba(0, 0, 0, 0.7);\n color: #ffdd57; }\n #optimole-app .button.is-warning.is-inverted.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-warning.is-inverted.is-outlined {\n background-color: transparent;\n border-color: rgba(0, 0, 0, 0.7);\n box-shadow: none;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .button.is-danger {\n background-color: #D54222;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-danger:hover, #optimole-app .button.is-danger.is-hovered {\n background-color: #ca3f20;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-danger:focus, #optimole-app .button.is-danger.is-focused {\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-danger:focus:not(:active), #optimole-app .button.is-danger.is-focused:not(:active) {\n box-shadow: 0 0 0 0.125em rgba(213, 66, 34, 0.25); }\n #optimole-app .button.is-danger:active, #optimole-app .button.is-danger.is-active {\n background-color: #bf3b1e;\n border-color: transparent;\n color: #fff; }\n #optimole-app .button.is-danger[disabled],\n fieldset[disabled] #optimole-app .button.is-danger {\n background-color: #D54222;\n border-color: transparent;\n box-shadow: none; }\n #optimole-app .button.is-danger.is-inverted {\n background-color: #fff;\n color: #D54222; }\n #optimole-app .button.is-danger.is-inverted:hover {\n background-color: #f2f2f2; }\n #optimole-app .button.is-danger.is-inverted[disabled],\n fieldset[disabled] #optimole-app .button.is-danger.is-inverted {\n background-color: #fff;\n border-color: transparent;\n box-shadow: none;\n color: #D54222; }\n #optimole-app .button.is-danger.is-loading::after {\n border-color: transparent transparent #fff #fff !important; }\n #optimole-app .button.is-danger.is-outlined {\n background-color: transparent;\n border-color: #D54222;\n color: #D54222; }\n #optimole-app .button.is-danger.is-outlined:hover, #optimole-app .button.is-danger.is-outlined:focus {\n background-color: #D54222;\n border-color: #D54222;\n color: #fff; }\n #optimole-app .button.is-danger.is-outlined.is-loading::after {\n border-color: transparent transparent #D54222 #D54222 !important; }\n #optimole-app .button.is-danger.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-danger.is-outlined {\n background-color: transparent;\n border-color: #D54222;\n box-shadow: none;\n color: #D54222; }\n #optimole-app .button.is-danger.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #fff;\n color: #fff; }\n #optimole-app .button.is-danger.is-inverted.is-outlined:hover, #optimole-app .button.is-danger.is-inverted.is-outlined:focus {\n background-color: #fff;\n color: #D54222; }\n #optimole-app .button.is-danger.is-inverted.is-outlined[disabled],\n fieldset[disabled] #optimole-app .button.is-danger.is-inverted.is-outlined {\n background-color: transparent;\n border-color: #fff;\n box-shadow: none;\n color: #fff; }\n #optimole-app .button.is-small {\n border-radius: 2px;\n font-size: 0.75rem; }\n #optimole-app .button.is-normal {\n font-size: 1rem; }\n #optimole-app .button.is-medium {\n font-size: 1.25rem; }\n #optimole-app .button.is-large {\n font-size: 1.5rem; }\n #optimole-app .button[disabled],\n fieldset[disabled] #optimole-app .button {\n background-color: white;\n border-color: #dbdbdb;\n box-shadow: none;\n opacity: 0.5; }\n #optimole-app .button.is-fullwidth {\n display: -ms-flexbox;\n display: flex;\n width: 100%; }\n #optimole-app .button.is-loading {\n color: transparent !important;\n pointer-events: none; }\n #optimole-app .button.is-loading::after {\n position: absolute;\n left: calc(50% - (1em / 2));\n top: calc(50% - (1em / 2));\n position: absolute !important; }\n #optimole-app .button.is-static {\n background-color: whitesmoke;\n border-color: #dbdbdb;\n color: #7a7a7a;\n box-shadow: none;\n pointer-events: none; }\n #optimole-app .button.is-rounded {\n border-radius: 290486px;\n padding-left: 1em;\n padding-right: 1em; }\n #optimole-app .buttons {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-pack: start;\n justify-content: flex-start; }\n #optimole-app .buttons .button {\n margin-bottom: 0.5rem; }\n #optimole-app .buttons .button:not(:last-child):not(.is-fullwidth) {\n margin-right: 0.5rem; }\n #optimole-app .buttons:last-child {\n margin-bottom: -0.5rem; }\n #optimole-app .buttons:not(:last-child) {\n margin-bottom: 1rem; }\n #optimole-app .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) {\n border-radius: 2px;\n font-size: 0.75rem; }\n #optimole-app .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) {\n font-size: 1.25rem; }\n #optimole-app .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) {\n font-size: 1.5rem; }\n #optimole-app .buttons.has-addons .button:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n #optimole-app .buttons.has-addons .button:not(:last-child) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n margin-right: -1px; }\n #optimole-app .buttons.has-addons .button:last-child {\n margin-right: 0; }\n #optimole-app .buttons.has-addons .button:hover, #optimole-app .buttons.has-addons .button.is-hovered {\n z-index: 2; }\n #optimole-app .buttons.has-addons .button:focus, #optimole-app .buttons.has-addons .button.is-focused, #optimole-app .buttons.has-addons .button:active, #optimole-app .buttons.has-addons .button.is-active, #optimole-app .buttons.has-addons .button.is-selected {\n z-index: 3; }\n #optimole-app .buttons.has-addons .button:focus:hover, #optimole-app .buttons.has-addons .button.is-focused:hover, #optimole-app .buttons.has-addons .button:active:hover, #optimole-app .buttons.has-addons .button.is-active:hover, #optimole-app .buttons.has-addons .button.is-selected:hover {\n z-index: 4; }\n #optimole-app .buttons.has-addons .button.is-expanded {\n -ms-flex-positive: 1;\n flex-grow: 1; }\n #optimole-app .buttons.is-centered {\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .buttons.is-right {\n -ms-flex-pack: end;\n justify-content: flex-end; }\n #optimole-app .container {\n margin: 0 auto;\n position: relative; }\n @media screen and (min-width: 1088px) {\n #optimole-app .container {\n max-width: 960px;\n width: 960px; }\n #optimole-app .container.is-fluid {\n margin-left: 64px;\n margin-right: 64px;\n max-width: none;\n width: auto; } }\n @media screen and (max-width: 1279px) {\n #optimole-app .container.is-widescreen {\n max-width: 1152px;\n width: auto; } }\n @media screen and (max-width: 1471px) {\n #optimole-app .container.is-fullhd {\n max-width: 1344px;\n width: auto; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .container {\n max-width: 1152px;\n width: 1152px; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .container {\n max-width: 1344px;\n width: 1344px; } }\n #optimole-app .content li + li {\n margin-top: 0.25em; }\n #optimole-app .content p:not(:last-child),\n #optimole-app .content dl:not(:last-child),\n #optimole-app .content ol:not(:last-child),\n #optimole-app .content ul:not(:last-child),\n #optimole-app .content blockquote:not(:last-child),\n #optimole-app .content pre:not(:last-child),\n #optimole-app .content table:not(:last-child) {\n margin-bottom: 1em; }\n #optimole-app .content h1,\n #optimole-app .content h2,\n #optimole-app .content h3,\n #optimole-app .content h4,\n #optimole-app .content h5,\n #optimole-app .content h6 {\n color: #363636;\n font-weight: 600;\n line-height: 1.125; }\n #optimole-app .content h1 {\n font-size: 2em;\n margin-bottom: 0.5em; }\n #optimole-app .content h1:not(:first-child) {\n margin-top: 1em; }\n #optimole-app .content h2 {\n font-size: 1.75em;\n margin-bottom: 0.5714em; }\n #optimole-app .content h2:not(:first-child) {\n margin-top: 1.1428em; }\n #optimole-app .content h3 {\n font-size: 1.5em;\n margin-bottom: 0.6666em; }\n #optimole-app .content h3:not(:first-child) {\n margin-top: 1.3333em; }\n #optimole-app .content h4 {\n font-size: 1.25em;\n margin-bottom: 0.8em; }\n #optimole-app .content h5 {\n font-size: 1.125em;\n margin-bottom: 0.8888em; }\n #optimole-app .content h6 {\n font-size: 1em;\n margin-bottom: 1em; }\n #optimole-app .content blockquote {\n background-color: whitesmoke;\n border-left: 5px solid #dbdbdb;\n padding: 1.25em 1.5em; }\n #optimole-app .content ol {\n list-style-position: outside;\n margin-left: 2em;\n margin-top: 1em; }\n #optimole-app .content ol:not([type]) {\n list-style-type: decimal; }\n #optimole-app .content ol:not([type]).is-lower-alpha {\n list-style-type: lower-alpha; }\n #optimole-app .content ol:not([type]).is-lower-roman {\n list-style-type: lower-roman; }\n #optimole-app .content ol:not([type]).is-upper-alpha {\n list-style-type: upper-alpha; }\n #optimole-app .content ol:not([type]).is-upper-roman {\n list-style-type: upper-roman; }\n #optimole-app .content ul {\n list-style: disc outside;\n margin-left: 2em;\n margin-top: 1em; }\n #optimole-app .content ul ul {\n list-style-type: circle;\n margin-top: 0.5em; }\n #optimole-app .content ul ul ul {\n list-style-type: square; }\n #optimole-app .content dd {\n margin-left: 2em; }\n #optimole-app .content figure {\n margin-left: 2em;\n margin-right: 2em;\n text-align: center; }\n #optimole-app .content figure:not(:first-child) {\n margin-top: 2em; }\n #optimole-app .content figure:not(:last-child) {\n margin-bottom: 2em; }\n #optimole-app .content figure img {\n display: inline-block; }\n #optimole-app .content figure figcaption {\n font-style: italic; }\n #optimole-app .content pre {\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n padding: 1.25em 1.5em;\n white-space: pre;\n word-wrap: normal; }\n #optimole-app .content sup,\n #optimole-app .content sub {\n font-size: 75%; }\n #optimole-app .content table {\n width: 100%; }\n #optimole-app .content table td,\n #optimole-app .content table th {\n border: 1px solid #dbdbdb;\n border-width: 0 0 1px;\n padding: 0.5em 0.75em;\n vertical-align: top; }\n #optimole-app .content table th {\n color: #363636;\n text-align: left; }\n #optimole-app .content table thead td,\n #optimole-app .content table thead th {\n border-width: 0 0 2px;\n color: #363636; }\n #optimole-app .content table tfoot td,\n #optimole-app .content table tfoot th {\n border-width: 2px 0 0;\n color: #363636; }\n #optimole-app .content table tbody tr:last-child td,\n #optimole-app .content table tbody tr:last-child th {\n border-bottom-width: 0; }\n #optimole-app .content.is-small {\n font-size: 0.75rem; }\n #optimole-app .content.is-medium {\n font-size: 1.25rem; }\n #optimole-app .content.is-large {\n font-size: 1.5rem; }\n #optimole-app .input,\n #optimole-app .textarea {\n background-color: white;\n border-color: #dbdbdb;\n color: #363636;\n box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1);\n max-width: 100%;\n width: 100%; }\n #optimole-app .input::-moz-placeholder,\n #optimole-app .textarea::-moz-placeholder {\n color: rgba(54, 54, 54, 0.3); }\n #optimole-app .input::-webkit-input-placeholder,\n #optimole-app .textarea::-webkit-input-placeholder {\n color: rgba(54, 54, 54, 0.3); }\n #optimole-app .input:-moz-placeholder,\n #optimole-app .textarea:-moz-placeholder {\n color: rgba(54, 54, 54, 0.3); }\n #optimole-app .input:-ms-input-placeholder,\n #optimole-app .textarea:-ms-input-placeholder {\n color: rgba(54, 54, 54, 0.3); }\n #optimole-app .input:hover, #optimole-app .input.is-hovered,\n #optimole-app .textarea:hover,\n #optimole-app .textarea.is-hovered {\n border-color: #b5b5b5; }\n #optimole-app .input:focus, #optimole-app .input.is-focused, #optimole-app .input:active, #optimole-app .input.is-active,\n #optimole-app .textarea:focus,\n #optimole-app .textarea.is-focused,\n #optimole-app .textarea:active,\n #optimole-app .textarea.is-active {\n border-color: #3273dc;\n box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }\n #optimole-app .input[disabled],\n fieldset[disabled] #optimole-app .input,\n #optimole-app .textarea[disabled],\n fieldset[disabled]\n #optimole-app .textarea {\n background-color: whitesmoke;\n border-color: whitesmoke;\n box-shadow: none;\n color: #7a7a7a; }\n #optimole-app .input[disabled]::-moz-placeholder,\n fieldset[disabled] #optimole-app .input::-moz-placeholder,\n #optimole-app .textarea[disabled]::-moz-placeholder,\n fieldset[disabled]\n #optimole-app .textarea::-moz-placeholder {\n color: rgba(122, 122, 122, 0.3); }\n #optimole-app .input[disabled]::-webkit-input-placeholder,\n fieldset[disabled] #optimole-app .input::-webkit-input-placeholder,\n #optimole-app .textarea[disabled]::-webkit-input-placeholder,\n fieldset[disabled]\n #optimole-app .textarea::-webkit-input-placeholder {\n color: rgba(122, 122, 122, 0.3); }\n #optimole-app .input[disabled]:-moz-placeholder,\n fieldset[disabled] #optimole-app .input:-moz-placeholder,\n #optimole-app .textarea[disabled]:-moz-placeholder,\n fieldset[disabled]\n #optimole-app .textarea:-moz-placeholder {\n color: rgba(122, 122, 122, 0.3); }\n #optimole-app .input[disabled]:-ms-input-placeholder,\n fieldset[disabled] #optimole-app .input:-ms-input-placeholder,\n #optimole-app .textarea[disabled]:-ms-input-placeholder,\n fieldset[disabled]\n #optimole-app .textarea:-ms-input-placeholder {\n color: rgba(122, 122, 122, 0.3); }\n #optimole-app .input[readonly],\n #optimole-app .textarea[readonly] {\n box-shadow: none; }\n #optimole-app .input.is-white,\n #optimole-app .textarea.is-white {\n border-color: white; }\n #optimole-app .input.is-white:focus, #optimole-app .input.is-white.is-focused, #optimole-app .input.is-white:active, #optimole-app .input.is-white.is-active,\n #optimole-app .textarea.is-white:focus,\n #optimole-app .textarea.is-white.is-focused,\n #optimole-app .textarea.is-white:active,\n #optimole-app .textarea.is-white.is-active {\n box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); }\n #optimole-app .input.is-black,\n #optimole-app .textarea.is-black {\n border-color: #0a0a0a; }\n #optimole-app .input.is-black:focus, #optimole-app .input.is-black.is-focused, #optimole-app .input.is-black:active, #optimole-app .input.is-black.is-active,\n #optimole-app .textarea.is-black:focus,\n #optimole-app .textarea.is-black.is-focused,\n #optimole-app .textarea.is-black:active,\n #optimole-app .textarea.is-black.is-active {\n box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); }\n #optimole-app .input.is-light,\n #optimole-app .textarea.is-light {\n border-color: whitesmoke; }\n #optimole-app .input.is-light:focus, #optimole-app .input.is-light.is-focused, #optimole-app .input.is-light:active, #optimole-app .input.is-light.is-active,\n #optimole-app .textarea.is-light:focus,\n #optimole-app .textarea.is-light.is-focused,\n #optimole-app .textarea.is-light:active,\n #optimole-app .textarea.is-light.is-active {\n box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); }\n #optimole-app .input.is-dark,\n #optimole-app .textarea.is-dark {\n border-color: #363636; }\n #optimole-app .input.is-dark:focus, #optimole-app .input.is-dark.is-focused, #optimole-app .input.is-dark:active, #optimole-app .input.is-dark.is-active,\n #optimole-app .textarea.is-dark:focus,\n #optimole-app .textarea.is-dark.is-focused,\n #optimole-app .textarea.is-dark:active,\n #optimole-app .textarea.is-dark.is-active {\n box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); }\n #optimole-app .input.is-primary,\n #optimole-app .textarea.is-primary {\n border-color: #EF686B; }\n #optimole-app .input.is-primary:focus, #optimole-app .input.is-primary.is-focused, #optimole-app .input.is-primary:active, #optimole-app .input.is-primary.is-active,\n #optimole-app .textarea.is-primary:focus,\n #optimole-app .textarea.is-primary.is-focused,\n #optimole-app .textarea.is-primary:active,\n #optimole-app .textarea.is-primary.is-active {\n box-shadow: 0 0 0 0.125em rgba(239, 104, 107, 0.25); }\n #optimole-app .input.is-link,\n #optimole-app .textarea.is-link {\n border-color: #3273dc; }\n #optimole-app .input.is-link:focus, #optimole-app .input.is-link.is-focused, #optimole-app .input.is-link:active, #optimole-app .input.is-link.is-active,\n #optimole-app .textarea.is-link:focus,\n #optimole-app .textarea.is-link.is-focused,\n #optimole-app .textarea.is-link:active,\n #optimole-app .textarea.is-link.is-active {\n box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }\n #optimole-app .input.is-info,\n #optimole-app .textarea.is-info {\n border-color: #5180C1; }\n #optimole-app .input.is-info:focus, #optimole-app .input.is-info.is-focused, #optimole-app .input.is-info:active, #optimole-app .input.is-info.is-active,\n #optimole-app .textarea.is-info:focus,\n #optimole-app .textarea.is-info.is-focused,\n #optimole-app .textarea.is-info:active,\n #optimole-app .textarea.is-info.is-active {\n box-shadow: 0 0 0 0.125em rgba(81, 128, 193, 0.25); }\n #optimole-app .input.is-success,\n #optimole-app .textarea.is-success {\n border-color: #34a85e; }\n #optimole-app .input.is-success:focus, #optimole-app .input.is-success.is-focused, #optimole-app .input.is-success:active, #optimole-app .input.is-success.is-active,\n #optimole-app .textarea.is-success:focus,\n #optimole-app .textarea.is-success.is-focused,\n #optimole-app .textarea.is-success:active,\n #optimole-app .textarea.is-success.is-active {\n box-shadow: 0 0 0 0.125em rgba(52, 168, 94, 0.25); }\n #optimole-app .input.is-warning,\n #optimole-app .textarea.is-warning {\n border-color: #ffdd57; }\n #optimole-app .input.is-warning:focus, #optimole-app .input.is-warning.is-focused, #optimole-app .input.is-warning:active, #optimole-app .input.is-warning.is-active,\n #optimole-app .textarea.is-warning:focus,\n #optimole-app .textarea.is-warning.is-focused,\n #optimole-app .textarea.is-warning:active,\n #optimole-app .textarea.is-warning.is-active {\n box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); }\n #optimole-app .input.is-danger,\n #optimole-app .textarea.is-danger {\n border-color: #D54222; }\n #optimole-app .input.is-danger:focus, #optimole-app .input.is-danger.is-focused, #optimole-app .input.is-danger:active, #optimole-app .input.is-danger.is-active,\n #optimole-app .textarea.is-danger:focus,\n #optimole-app .textarea.is-danger.is-focused,\n #optimole-app .textarea.is-danger:active,\n #optimole-app .textarea.is-danger.is-active {\n box-shadow: 0 0 0 0.125em rgba(213, 66, 34, 0.25); }\n #optimole-app .input.is-small,\n #optimole-app .textarea.is-small {\n border-radius: 2px;\n font-size: 0.75rem; }\n #optimole-app .input.is-medium,\n #optimole-app .textarea.is-medium {\n font-size: 1.25rem; }\n #optimole-app .input.is-large,\n #optimole-app .textarea.is-large {\n font-size: 1.5rem; }\n #optimole-app .input.is-fullwidth,\n #optimole-app .textarea.is-fullwidth {\n display: block;\n width: 100%; }\n #optimole-app .input.is-inline,\n #optimole-app .textarea.is-inline {\n display: inline;\n width: auto; }\n #optimole-app .input.is-rounded {\n border-radius: 290486px;\n padding-left: 1em;\n padding-right: 1em; }\n #optimole-app .input.is-static {\n background-color: transparent;\n border-color: transparent;\n box-shadow: none;\n padding-left: 0;\n padding-right: 0; }\n #optimole-app .textarea {\n display: block;\n max-width: 100%;\n min-width: 100%;\n padding: 0.625em;\n resize: vertical; }\n #optimole-app .textarea:not([rows]) {\n max-height: 600px;\n min-height: 120px; }\n #optimole-app .textarea[rows] {\n height: initial; }\n #optimole-app .textarea.has-fixed-size {\n resize: none; }\n #optimole-app .checkbox,\n #optimole-app .radio {\n cursor: pointer;\n display: inline-block;\n line-height: 1.25;\n position: relative; }\n #optimole-app .checkbox input,\n #optimole-app .radio input {\n cursor: pointer; }\n #optimole-app .checkbox:hover,\n #optimole-app .radio:hover {\n color: #363636; }\n #optimole-app .checkbox[disabled],\n fieldset[disabled] #optimole-app .checkbox,\n #optimole-app .radio[disabled],\n fieldset[disabled]\n #optimole-app .radio {\n color: #7a7a7a;\n cursor: not-allowed; }\n #optimole-app .radio + .radio {\n margin-left: 0.5em; }\n #optimole-app .select {\n display: inline-block;\n max-width: 100%;\n position: relative;\n vertical-align: top; }\n #optimole-app .select:not(.is-multiple) {\n height: 2.25em; }\n #optimole-app .select:not(.is-multiple):not(.is-loading)::after {\n border-color: #3273dc;\n right: 1.125em;\n z-index: 4; }\n #optimole-app .select.is-rounded select {\n border-radius: 290486px;\n padding-left: 1em; }\n #optimole-app .select select {\n background-color: white;\n border-color: #dbdbdb;\n color: #363636;\n cursor: pointer;\n display: block;\n font-size: 1em;\n max-width: 100%;\n outline: none; }\n #optimole-app .select select::-moz-placeholder {\n color: rgba(54, 54, 54, 0.3); }\n #optimole-app .select select::-webkit-input-placeholder {\n color: rgba(54, 54, 54, 0.3); }\n #optimole-app .select select:-moz-placeholder {\n color: rgba(54, 54, 54, 0.3); }\n #optimole-app .select select:-ms-input-placeholder {\n color: rgba(54, 54, 54, 0.3); }\n #optimole-app .select select:hover, #optimole-app .select select.is-hovered {\n border-color: #b5b5b5; }\n #optimole-app .select select:focus, #optimole-app .select select.is-focused, #optimole-app .select select:active, #optimole-app .select select.is-active {\n border-color: #3273dc;\n box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }\n #optimole-app .select select[disabled],\n fieldset[disabled] #optimole-app .select select {\n background-color: whitesmoke;\n border-color: whitesmoke;\n box-shadow: none;\n color: #7a7a7a; }\n #optimole-app .select select[disabled]::-moz-placeholder,\n fieldset[disabled] #optimole-app .select select::-moz-placeholder {\n color: rgba(122, 122, 122, 0.3); }\n #optimole-app .select select[disabled]::-webkit-input-placeholder,\n fieldset[disabled] #optimole-app .select select::-webkit-input-placeholder {\n color: rgba(122, 122, 122, 0.3); }\n #optimole-app .select select[disabled]:-moz-placeholder,\n fieldset[disabled] #optimole-app .select select:-moz-placeholder {\n color: rgba(122, 122, 122, 0.3); }\n #optimole-app .select select[disabled]:-ms-input-placeholder,\n fieldset[disabled] #optimole-app .select select:-ms-input-placeholder {\n color: rgba(122, 122, 122, 0.3); }\n #optimole-app .select select::-ms-expand {\n display: none; }\n #optimole-app .select select[disabled]:hover,\n fieldset[disabled] #optimole-app .select select:hover {\n border-color: whitesmoke; }\n #optimole-app .select select:not([multiple]) {\n padding-right: 2.5em; }\n #optimole-app .select select[multiple] {\n height: auto;\n padding: 0; }\n #optimole-app .select select[multiple] option {\n padding: 0.5em 1em; }\n #optimole-app .select:not(.is-multiple):not(.is-loading):hover::after {\n border-color: #363636; }\n #optimole-app .select.is-white:not(:hover)::after {\n border-color: white; }\n #optimole-app .select.is-white select {\n border-color: white; }\n #optimole-app .select.is-white select:hover, #optimole-app .select.is-white select.is-hovered {\n border-color: #f2f2f2; }\n #optimole-app .select.is-white select:focus, #optimole-app .select.is-white select.is-focused, #optimole-app .select.is-white select:active, #optimole-app .select.is-white select.is-active {\n box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); }\n #optimole-app .select.is-black:not(:hover)::after {\n border-color: #0a0a0a; }\n #optimole-app .select.is-black select {\n border-color: #0a0a0a; }\n #optimole-app .select.is-black select:hover, #optimole-app .select.is-black select.is-hovered {\n border-color: black; }\n #optimole-app .select.is-black select:focus, #optimole-app .select.is-black select.is-focused, #optimole-app .select.is-black select:active, #optimole-app .select.is-black select.is-active {\n box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); }\n #optimole-app .select.is-light:not(:hover)::after {\n border-color: whitesmoke; }\n #optimole-app .select.is-light select {\n border-color: whitesmoke; }\n #optimole-app .select.is-light select:hover, #optimole-app .select.is-light select.is-hovered {\n border-color: #e8e8e8; }\n #optimole-app .select.is-light select:focus, #optimole-app .select.is-light select.is-focused, #optimole-app .select.is-light select:active, #optimole-app .select.is-light select.is-active {\n box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); }\n #optimole-app .select.is-dark:not(:hover)::after {\n border-color: #363636; }\n #optimole-app .select.is-dark select {\n border-color: #363636; }\n #optimole-app .select.is-dark select:hover, #optimole-app .select.is-dark select.is-hovered {\n border-color: #292929; }\n #optimole-app .select.is-dark select:focus, #optimole-app .select.is-dark select.is-focused, #optimole-app .select.is-dark select:active, #optimole-app .select.is-dark select.is-active {\n box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); }\n #optimole-app .select.is-primary:not(:hover)::after {\n border-color: #EF686B; }\n #optimole-app .select.is-primary select {\n border-color: #EF686B; }\n #optimole-app .select.is-primary select:hover, #optimole-app .select.is-primary select.is-hovered {\n border-color: #ed5154; }\n #optimole-app .select.is-primary select:focus, #optimole-app .select.is-primary select.is-focused, #optimole-app .select.is-primary select:active, #optimole-app .select.is-primary select.is-active {\n box-shadow: 0 0 0 0.125em rgba(239, 104, 107, 0.25); }\n #optimole-app .select.is-link:not(:hover)::after {\n border-color: #3273dc; }\n #optimole-app .select.is-link select {\n border-color: #3273dc; }\n #optimole-app .select.is-link select:hover, #optimole-app .select.is-link select.is-hovered {\n border-color: #2366d1; }\n #optimole-app .select.is-link select:focus, #optimole-app .select.is-link select.is-focused, #optimole-app .select.is-link select:active, #optimole-app .select.is-link select.is-active {\n box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }\n #optimole-app .select.is-info:not(:hover)::after {\n border-color: #5180C1; }\n #optimole-app .select.is-info select {\n border-color: #5180C1; }\n #optimole-app .select.is-info select:hover, #optimole-app .select.is-info select.is-hovered {\n border-color: #4173b7; }\n #optimole-app .select.is-info select:focus, #optimole-app .select.is-info select.is-focused, #optimole-app .select.is-info select:active, #optimole-app .select.is-info select.is-active {\n box-shadow: 0 0 0 0.125em rgba(81, 128, 193, 0.25); }\n #optimole-app .select.is-success:not(:hover)::after {\n border-color: #34a85e; }\n #optimole-app .select.is-success select {\n border-color: #34a85e; }\n #optimole-app .select.is-success select:hover, #optimole-app .select.is-success select.is-hovered {\n border-color: #2e9553; }\n #optimole-app .select.is-success select:focus, #optimole-app .select.is-success select.is-focused, #optimole-app .select.is-success select:active, #optimole-app .select.is-success select.is-active {\n box-shadow: 0 0 0 0.125em rgba(52, 168, 94, 0.25); }\n #optimole-app .select.is-warning:not(:hover)::after {\n border-color: #ffdd57; }\n #optimole-app .select.is-warning select {\n border-color: #ffdd57; }\n #optimole-app .select.is-warning select:hover, #optimole-app .select.is-warning select.is-hovered {\n border-color: #ffd83d; }\n #optimole-app .select.is-warning select:focus, #optimole-app .select.is-warning select.is-focused, #optimole-app .select.is-warning select:active, #optimole-app .select.is-warning select.is-active {\n box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); }\n #optimole-app .select.is-danger:not(:hover)::after {\n border-color: #D54222; }\n #optimole-app .select.is-danger select {\n border-color: #D54222; }\n #optimole-app .select.is-danger select:hover, #optimole-app .select.is-danger select.is-hovered {\n border-color: #bf3b1e; }\n #optimole-app .select.is-danger select:focus, #optimole-app .select.is-danger select.is-focused, #optimole-app .select.is-danger select:active, #optimole-app .select.is-danger select.is-active {\n box-shadow: 0 0 0 0.125em rgba(213, 66, 34, 0.25); }\n #optimole-app .select.is-small {\n border-radius: 2px;\n font-size: 0.75rem; }\n #optimole-app .select.is-medium {\n font-size: 1.25rem; }\n #optimole-app .select.is-large {\n font-size: 1.5rem; }\n #optimole-app .select.is-disabled::after {\n border-color: #7a7a7a; }\n #optimole-app .select.is-fullwidth {\n width: 100%; }\n #optimole-app .select.is-fullwidth select {\n width: 100%; }\n #optimole-app .select.is-loading::after {\n margin-top: 0;\n position: absolute;\n right: 0.625em;\n top: 0.625em;\n transform: none; }\n #optimole-app .select.is-loading.is-small:after {\n font-size: 0.75rem; }\n #optimole-app .select.is-loading.is-medium:after {\n font-size: 1.25rem; }\n #optimole-app .select.is-loading.is-large:after {\n font-size: 1.5rem; }\n #optimole-app .file {\n -ms-flex-align: stretch;\n align-items: stretch;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: start;\n justify-content: flex-start;\n position: relative; }\n #optimole-app .file.is-white .file-cta {\n background-color: white;\n border-color: transparent;\n color: #0a0a0a; }\n #optimole-app .file.is-white:hover .file-cta, #optimole-app .file.is-white.is-hovered .file-cta {\n background-color: #f9f9f9;\n border-color: transparent;\n color: #0a0a0a; }\n #optimole-app .file.is-white:focus .file-cta, #optimole-app .file.is-white.is-focused .file-cta {\n border-color: transparent;\n box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25);\n color: #0a0a0a; }\n #optimole-app .file.is-white:active .file-cta, #optimole-app .file.is-white.is-active .file-cta {\n background-color: #f2f2f2;\n border-color: transparent;\n color: #0a0a0a; }\n #optimole-app .file.is-black .file-cta {\n background-color: #0a0a0a;\n border-color: transparent;\n color: white; }\n #optimole-app .file.is-black:hover .file-cta, #optimole-app .file.is-black.is-hovered .file-cta {\n background-color: #040404;\n border-color: transparent;\n color: white; }\n #optimole-app .file.is-black:focus .file-cta, #optimole-app .file.is-black.is-focused .file-cta {\n border-color: transparent;\n box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25);\n color: white; }\n #optimole-app .file.is-black:active .file-cta, #optimole-app .file.is-black.is-active .file-cta {\n background-color: black;\n border-color: transparent;\n color: white; }\n #optimole-app .file.is-light .file-cta {\n background-color: whitesmoke;\n border-color: transparent;\n color: #363636; }\n #optimole-app .file.is-light:hover .file-cta, #optimole-app .file.is-light.is-hovered .file-cta {\n background-color: #eeeeee;\n border-color: transparent;\n color: #363636; }\n #optimole-app .file.is-light:focus .file-cta, #optimole-app .file.is-light.is-focused .file-cta {\n border-color: transparent;\n box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25);\n color: #363636; }\n #optimole-app .file.is-light:active .file-cta, #optimole-app .file.is-light.is-active .file-cta {\n background-color: #e8e8e8;\n border-color: transparent;\n color: #363636; }\n #optimole-app .file.is-dark .file-cta {\n background-color: #363636;\n border-color: transparent;\n color: whitesmoke; }\n #optimole-app .file.is-dark:hover .file-cta, #optimole-app .file.is-dark.is-hovered .file-cta {\n background-color: #2f2f2f;\n border-color: transparent;\n color: whitesmoke; }\n #optimole-app .file.is-dark:focus .file-cta, #optimole-app .file.is-dark.is-focused .file-cta {\n border-color: transparent;\n box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25);\n color: whitesmoke; }\n #optimole-app .file.is-dark:active .file-cta, #optimole-app .file.is-dark.is-active .file-cta {\n background-color: #292929;\n border-color: transparent;\n color: whitesmoke; }\n #optimole-app .file.is-primary .file-cta {\n background-color: #EF686B;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-primary:hover .file-cta, #optimole-app .file.is-primary.is-hovered .file-cta {\n background-color: #ee5c60;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-primary:focus .file-cta, #optimole-app .file.is-primary.is-focused .file-cta {\n border-color: transparent;\n box-shadow: 0 0 0.5em rgba(239, 104, 107, 0.25);\n color: #fff; }\n #optimole-app .file.is-primary:active .file-cta, #optimole-app .file.is-primary.is-active .file-cta {\n background-color: #ed5154;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-link .file-cta {\n background-color: #3273dc;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-link:hover .file-cta, #optimole-app .file.is-link.is-hovered .file-cta {\n background-color: #276cda;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-link:focus .file-cta, #optimole-app .file.is-link.is-focused .file-cta {\n border-color: transparent;\n box-shadow: 0 0 0.5em rgba(50, 115, 220, 0.25);\n color: #fff; }\n #optimole-app .file.is-link:active .file-cta, #optimole-app .file.is-link.is-active .file-cta {\n background-color: #2366d1;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-info .file-cta {\n background-color: #5180C1;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-info:hover .file-cta, #optimole-app .file.is-info.is-hovered .file-cta {\n background-color: #4879be;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-info:focus .file-cta, #optimole-app .file.is-info.is-focused .file-cta {\n border-color: transparent;\n box-shadow: 0 0 0.5em rgba(81, 128, 193, 0.25);\n color: #fff; }\n #optimole-app .file.is-info:active .file-cta, #optimole-app .file.is-info.is-active .file-cta {\n background-color: #4173b7;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-success .file-cta {\n background-color: #34a85e;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-success:hover .file-cta, #optimole-app .file.is-success.is-hovered .file-cta {\n background-color: #319e59;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-success:focus .file-cta, #optimole-app .file.is-success.is-focused .file-cta {\n border-color: transparent;\n box-shadow: 0 0 0.5em rgba(52, 168, 94, 0.25);\n color: #fff; }\n #optimole-app .file.is-success:active .file-cta, #optimole-app .file.is-success.is-active .file-cta {\n background-color: #2e9553;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-warning .file-cta {\n background-color: #ffdd57;\n border-color: transparent;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .file.is-warning:hover .file-cta, #optimole-app .file.is-warning.is-hovered .file-cta {\n background-color: #ffdb4a;\n border-color: transparent;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .file.is-warning:focus .file-cta, #optimole-app .file.is-warning.is-focused .file-cta {\n border-color: transparent;\n box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25);\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .file.is-warning:active .file-cta, #optimole-app .file.is-warning.is-active .file-cta {\n background-color: #ffd83d;\n border-color: transparent;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .file.is-danger .file-cta {\n background-color: #D54222;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-danger:hover .file-cta, #optimole-app .file.is-danger.is-hovered .file-cta {\n background-color: #ca3f20;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-danger:focus .file-cta, #optimole-app .file.is-danger.is-focused .file-cta {\n border-color: transparent;\n box-shadow: 0 0 0.5em rgba(213, 66, 34, 0.25);\n color: #fff; }\n #optimole-app .file.is-danger:active .file-cta, #optimole-app .file.is-danger.is-active .file-cta {\n background-color: #bf3b1e;\n border-color: transparent;\n color: #fff; }\n #optimole-app .file.is-small {\n font-size: 0.75rem; }\n #optimole-app .file.is-medium {\n font-size: 1.25rem; }\n #optimole-app .file.is-medium .file-icon .fa {\n font-size: 21px; }\n #optimole-app .file.is-large {\n font-size: 1.5rem; }\n #optimole-app .file.is-large .file-icon .fa {\n font-size: 28px; }\n #optimole-app .file.has-name .file-cta {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n #optimole-app .file.has-name .file-name {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n #optimole-app .file.has-name.is-empty .file-cta {\n border-radius: 4px; }\n #optimole-app .file.has-name.is-empty .file-name {\n display: none; }\n #optimole-app .file.is-boxed .file-label {\n -ms-flex-direction: column;\n flex-direction: column; }\n #optimole-app .file.is-boxed .file-cta {\n -ms-flex-direction: column;\n flex-direction: column;\n height: auto;\n padding: 1em 3em; }\n #optimole-app .file.is-boxed .file-name {\n border-width: 0 1px 1px; }\n #optimole-app .file.is-boxed .file-icon {\n height: 1.5em;\n width: 1.5em; }\n #optimole-app .file.is-boxed .file-icon .fa {\n font-size: 21px; }\n #optimole-app .file.is-boxed.is-small .file-icon .fa {\n font-size: 14px; }\n #optimole-app .file.is-boxed.is-medium .file-icon .fa {\n font-size: 28px; }\n #optimole-app .file.is-boxed.is-large .file-icon .fa {\n font-size: 35px; }\n #optimole-app .file.is-boxed.has-name .file-cta {\n border-radius: 4px 4px 0 0; }\n #optimole-app .file.is-boxed.has-name .file-name {\n border-radius: 0 0 4px 4px;\n border-width: 0 1px 1px; }\n #optimole-app .file.is-centered {\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .file.is-fullwidth .file-label {\n width: 100%; }\n #optimole-app .file.is-fullwidth .file-name {\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: none; }\n #optimole-app .file.is-right {\n -ms-flex-pack: end;\n justify-content: flex-end; }\n #optimole-app .file.is-right .file-cta {\n border-radius: 0 4px 4px 0; }\n #optimole-app .file.is-right .file-name {\n border-radius: 4px 0 0 4px;\n border-width: 1px 0 1px 1px;\n -ms-flex-order: -1;\n order: -1; }\n #optimole-app .file-label {\n -ms-flex-align: stretch;\n align-items: stretch;\n display: -ms-flexbox;\n display: flex;\n cursor: pointer;\n -ms-flex-pack: start;\n justify-content: flex-start;\n overflow: hidden;\n position: relative; }\n #optimole-app .file-label:hover .file-cta {\n background-color: #eeeeee;\n color: #363636; }\n #optimole-app .file-label:hover .file-name {\n border-color: #d5d5d5; }\n #optimole-app .file-label:active .file-cta {\n background-color: #e8e8e8;\n color: #363636; }\n #optimole-app .file-label:active .file-name {\n border-color: #cfcfcf; }\n #optimole-app .file-input {\n height: 100%;\n left: 0;\n opacity: 0;\n outline: none;\n position: absolute;\n top: 0;\n width: 100%; }\n #optimole-app .file-cta,\n #optimole-app .file-name {\n border-color: #dbdbdb;\n border-radius: 4px;\n font-size: 1em;\n padding-left: 1em;\n padding-right: 1em;\n white-space: nowrap; }\n #optimole-app .file-cta {\n background-color: whitesmoke;\n color: #4a4a4a; }\n #optimole-app .file-name {\n border-color: #dbdbdb;\n border-style: solid;\n border-width: 1px 1px 1px 0;\n display: block;\n max-width: 16em;\n overflow: hidden;\n text-align: left;\n text-overflow: ellipsis; }\n #optimole-app .file-icon {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex;\n height: 1em;\n -ms-flex-pack: center;\n justify-content: center;\n margin-right: 0.5em;\n width: 1em; }\n #optimole-app .file-icon .fa {\n font-size: 14px; }\n #optimole-app .label {\n color: #363636;\n display: block;\n font-size: 1rem;\n font-weight: 700; }\n #optimole-app .label:not(:last-child) {\n margin-bottom: 0.5em; }\n #optimole-app .label.is-small {\n font-size: 0.75rem; }\n #optimole-app .label.is-medium {\n font-size: 1.25rem; }\n #optimole-app .label.is-large {\n font-size: 1.5rem; }\n #optimole-app .help {\n display: block;\n font-size: 0.75rem;\n margin-top: 0.25rem; }\n #optimole-app .help.is-white {\n color: white; }\n #optimole-app .help.is-black {\n color: #0a0a0a; }\n #optimole-app .help.is-light {\n color: whitesmoke; }\n #optimole-app .help.is-dark {\n color: #363636; }\n #optimole-app .help.is-primary {\n color: #EF686B; }\n #optimole-app .help.is-link {\n color: #3273dc; }\n #optimole-app .help.is-info {\n color: #5180C1; }\n #optimole-app .help.is-success {\n color: #34a85e; }\n #optimole-app .help.is-warning {\n color: #ffdd57; }\n #optimole-app .help.is-danger {\n color: #D54222; }\n #optimole-app .field:not(:last-child) {\n margin-bottom: 0.75rem; }\n #optimole-app .field.has-addons {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: start;\n justify-content: flex-start; }\n #optimole-app .field.has-addons .control:not(:last-child) {\n margin-right: -1px; }\n #optimole-app .field.has-addons .control:not(:first-child):not(:last-child) .button,\n #optimole-app .field.has-addons .control:not(:first-child):not(:last-child) .input,\n #optimole-app .field.has-addons .control:not(:first-child):not(:last-child) .select select {\n border-radius: 0; }\n #optimole-app .field.has-addons .control:first-child:not(:only-child) .button,\n #optimole-app .field.has-addons .control:first-child:not(:only-child) .input,\n #optimole-app .field.has-addons .control:first-child:not(:only-child) .select select {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n #optimole-app .field.has-addons .control:last-child:not(:only-child) .button,\n #optimole-app .field.has-addons .control:last-child:not(:only-child) .input,\n #optimole-app .field.has-addons .control:last-child:not(:only-child) .select select {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n #optimole-app .field.has-addons .control .button:not([disabled]):hover, #optimole-app .field.has-addons .control .button:not([disabled]).is-hovered,\n #optimole-app .field.has-addons .control .input:not([disabled]):hover,\n #optimole-app .field.has-addons .control .input:not([disabled]).is-hovered,\n #optimole-app .field.has-addons .control .select select:not([disabled]):hover,\n #optimole-app .field.has-addons .control .select select:not([disabled]).is-hovered {\n z-index: 2; }\n #optimole-app .field.has-addons .control .button:not([disabled]):focus, #optimole-app .field.has-addons .control .button:not([disabled]).is-focused, #optimole-app .field.has-addons .control .button:not([disabled]):active, #optimole-app .field.has-addons .control .button:not([disabled]).is-active,\n #optimole-app .field.has-addons .control .input:not([disabled]):focus,\n #optimole-app .field.has-addons .control .input:not([disabled]).is-focused,\n #optimole-app .field.has-addons .control .input:not([disabled]):active,\n #optimole-app .field.has-addons .control .input:not([disabled]).is-active,\n #optimole-app .field.has-addons .control .select select:not([disabled]):focus,\n #optimole-app .field.has-addons .control .select select:not([disabled]).is-focused,\n #optimole-app .field.has-addons .control .select select:not([disabled]):active,\n #optimole-app .field.has-addons .control .select select:not([disabled]).is-active {\n z-index: 3; }\n #optimole-app .field.has-addons .control .button:not([disabled]):focus:hover, #optimole-app .field.has-addons .control .button:not([disabled]).is-focused:hover, #optimole-app .field.has-addons .control .button:not([disabled]):active:hover, #optimole-app .field.has-addons .control .button:not([disabled]).is-active:hover,\n #optimole-app .field.has-addons .control .input:not([disabled]):focus:hover,\n #optimole-app .field.has-addons .control .input:not([disabled]).is-focused:hover,\n #optimole-app .field.has-addons .control .input:not([disabled]):active:hover,\n #optimole-app .field.has-addons .control .input:not([disabled]).is-active:hover,\n #optimole-app .field.has-addons .control .select select:not([disabled]):focus:hover,\n #optimole-app .field.has-addons .control .select select:not([disabled]).is-focused:hover,\n #optimole-app .field.has-addons .control .select select:not([disabled]):active:hover,\n #optimole-app .field.has-addons .control .select select:not([disabled]).is-active:hover {\n z-index: 4; }\n #optimole-app .field.has-addons .control.is-expanded {\n -ms-flex-positive: 1;\n flex-grow: 1; }\n #optimole-app .field.has-addons.has-addons-centered {\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .field.has-addons.has-addons-right {\n -ms-flex-pack: end;\n justify-content: flex-end; }\n #optimole-app .field.has-addons.has-addons-fullwidth .control {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 0;\n flex-shrink: 0; }\n #optimole-app .field.is-grouped {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: start;\n justify-content: flex-start; }\n #optimole-app .field.is-grouped > .control {\n -ms-flex-negative: 0;\n flex-shrink: 0; }\n #optimole-app .field.is-grouped > .control:not(:last-child) {\n margin-bottom: 0;\n margin-right: 0.75rem; }\n #optimole-app .field.is-grouped > .control.is-expanded {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1; }\n #optimole-app .field.is-grouped.is-grouped-centered {\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .field.is-grouped.is-grouped-right {\n -ms-flex-pack: end;\n justify-content: flex-end; }\n #optimole-app .field.is-grouped.is-grouped-multiline {\n -ms-flex-wrap: wrap;\n flex-wrap: wrap; }\n #optimole-app .field.is-grouped.is-grouped-multiline > .control:last-child, #optimole-app .field.is-grouped.is-grouped-multiline > .control:not(:last-child) {\n margin-bottom: 0.75rem; }\n #optimole-app .field.is-grouped.is-grouped-multiline:last-child {\n margin-bottom: -0.75rem; }\n #optimole-app .field.is-grouped.is-grouped-multiline:not(:last-child) {\n margin-bottom: 0; }\n @media screen and (min-width: 769px), print {\n #optimole-app .field.is-horizontal {\n display: -ms-flexbox;\n display: flex; } }\n #optimole-app .field-label .label {\n font-size: inherit; }\n @media screen and (max-width: 768px) {\n #optimole-app .field-label {\n margin-bottom: 0.5rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .field-label {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n margin-right: 1.5rem;\n text-align: right; }\n #optimole-app .field-label.is-small {\n font-size: 0.75rem;\n padding-top: 0.375em; }\n #optimole-app .field-label.is-normal {\n padding-top: 0.375em; }\n #optimole-app .field-label.is-medium {\n font-size: 1.25rem;\n padding-top: 0.375em; }\n #optimole-app .field-label.is-large {\n font-size: 1.5rem;\n padding-top: 0.375em; } }\n #optimole-app .field-body .field .field {\n margin-bottom: 0; }\n @media screen and (min-width: 769px), print {\n #optimole-app .field-body {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 5;\n flex-grow: 5;\n -ms-flex-negative: 1;\n flex-shrink: 1; }\n #optimole-app .field-body .field {\n margin-bottom: 0; }\n #optimole-app .field-body > .field {\n -ms-flex-negative: 1;\n flex-shrink: 1; }\n #optimole-app .field-body > .field:not(.is-narrow) {\n -ms-flex-positive: 1;\n flex-grow: 1; }\n #optimole-app .field-body > .field:not(:last-child) {\n margin-right: 0.75rem; } }\n #optimole-app .control {\n box-sizing: border-box;\n clear: both;\n font-size: 1rem;\n position: relative;\n text-align: left; }\n #optimole-app .control.has-icons-left .input:focus ~ .icon,\n #optimole-app .control.has-icons-left .select:focus ~ .icon, #optimole-app .control.has-icons-right .input:focus ~ .icon,\n #optimole-app .control.has-icons-right .select:focus ~ .icon {\n color: #7a7a7a; }\n #optimole-app .control.has-icons-left .input.is-small ~ .icon,\n #optimole-app .control.has-icons-left .select.is-small ~ .icon, #optimole-app .control.has-icons-right .input.is-small ~ .icon,\n #optimole-app .control.has-icons-right .select.is-small ~ .icon {\n font-size: 0.75rem; }\n #optimole-app .control.has-icons-left .input.is-medium ~ .icon,\n #optimole-app .control.has-icons-left .select.is-medium ~ .icon, #optimole-app .control.has-icons-right .input.is-medium ~ .icon,\n #optimole-app .control.has-icons-right .select.is-medium ~ .icon {\n font-size: 1.25rem; }\n #optimole-app .control.has-icons-left .input.is-large ~ .icon,\n #optimole-app .control.has-icons-left .select.is-large ~ .icon, #optimole-app .control.has-icons-right .input.is-large ~ .icon,\n #optimole-app .control.has-icons-right .select.is-large ~ .icon {\n font-size: 1.5rem; }\n #optimole-app .control.has-icons-left .icon, #optimole-app .control.has-icons-right .icon {\n color: #dbdbdb;\n height: 2.25em;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 2.25em;\n z-index: 4; }\n #optimole-app .control.has-icons-left .input,\n #optimole-app .control.has-icons-left .select select {\n padding-left: 2.25em; }\n #optimole-app .control.has-icons-left .icon.is-left {\n left: 0; }\n #optimole-app .control.has-icons-right .input,\n #optimole-app .control.has-icons-right .select select {\n padding-right: 2.25em; }\n #optimole-app .control.has-icons-right .icon.is-right {\n right: 0; }\n #optimole-app .control.is-loading::after {\n position: absolute !important;\n right: 0.625em;\n top: 0.625em;\n z-index: 4; }\n #optimole-app .control.is-loading.is-small:after {\n font-size: 0.75rem; }\n #optimole-app .control.is-loading.is-medium:after {\n font-size: 1.25rem; }\n #optimole-app .control.is-loading.is-large:after {\n font-size: 1.5rem; }\n #optimole-app .icon {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-pack: center;\n justify-content: center;\n height: 1.5rem;\n width: 1.5rem; }\n #optimole-app .icon.is-small {\n height: 1rem;\n width: 1rem; }\n #optimole-app .icon.is-medium {\n height: 2rem;\n width: 2rem; }\n #optimole-app .icon.is-large {\n height: 3rem;\n width: 3rem; }\n #optimole-app .image {\n display: block;\n position: relative; }\n #optimole-app .image img {\n display: block;\n height: auto;\n width: 100%; }\n #optimole-app .image img.is-rounded {\n border-radius: 290486px; }\n #optimole-app .image.is-square img,\n #optimole-app .image.is-square .has-ratio, #optimole-app .image.is-1by1 img,\n #optimole-app .image.is-1by1 .has-ratio, #optimole-app .image.is-5by4 img,\n #optimole-app .image.is-5by4 .has-ratio, #optimole-app .image.is-4by3 img,\n #optimole-app .image.is-4by3 .has-ratio, #optimole-app .image.is-3by2 img,\n #optimole-app .image.is-3by2 .has-ratio, #optimole-app .image.is-5by3 img,\n #optimole-app .image.is-5by3 .has-ratio, #optimole-app .image.is-16by9 img,\n #optimole-app .image.is-16by9 .has-ratio, #optimole-app .image.is-2by1 img,\n #optimole-app .image.is-2by1 .has-ratio, #optimole-app .image.is-3by1 img,\n #optimole-app .image.is-3by1 .has-ratio, #optimole-app .image.is-4by5 img,\n #optimole-app .image.is-4by5 .has-ratio, #optimole-app .image.is-3by4 img,\n #optimole-app .image.is-3by4 .has-ratio, #optimole-app .image.is-2by3 img,\n #optimole-app .image.is-2by3 .has-ratio, #optimole-app .image.is-3by5 img,\n #optimole-app .image.is-3by5 .has-ratio, #optimole-app .image.is-9by16 img,\n #optimole-app .image.is-9by16 .has-ratio, #optimole-app .image.is-1by2 img,\n #optimole-app .image.is-1by2 .has-ratio, #optimole-app .image.is-1by3 img,\n #optimole-app .image.is-1by3 .has-ratio {\n height: 100%;\n width: 100%; }\n #optimole-app .image.is-square, #optimole-app .image.is-1by1 {\n padding-top: 100%; }\n #optimole-app .image.is-5by4 {\n padding-top: 80%; }\n #optimole-app .image.is-4by3 {\n padding-top: 75%; }\n #optimole-app .image.is-3by2 {\n padding-top: 66.6666%; }\n #optimole-app .image.is-5by3 {\n padding-top: 60%; }\n #optimole-app .image.is-16by9 {\n padding-top: 56.25%; }\n #optimole-app .image.is-2by1 {\n padding-top: 50%; }\n #optimole-app .image.is-3by1 {\n padding-top: 33.3333%; }\n #optimole-app .image.is-4by5 {\n padding-top: 125%; }\n #optimole-app .image.is-3by4 {\n padding-top: 133.3333%; }\n #optimole-app .image.is-2by3 {\n padding-top: 150%; }\n #optimole-app .image.is-3by5 {\n padding-top: 166.6666%; }\n #optimole-app .image.is-9by16 {\n padding-top: 177.7777%; }\n #optimole-app .image.is-1by2 {\n padding-top: 200%; }\n #optimole-app .image.is-1by3 {\n padding-top: 300%; }\n #optimole-app .image.is-16x16 {\n height: 16px;\n width: 16px; }\n #optimole-app .image.is-24x24 {\n height: 24px;\n width: 24px; }\n #optimole-app .image.is-32x32 {\n height: 32px;\n width: 32px; }\n #optimole-app .image.is-48x48 {\n height: 48px;\n width: 48px; }\n #optimole-app .image.is-64x64 {\n height: 64px;\n width: 64px; }\n #optimole-app .image.is-96x96 {\n height: 96px;\n width: 96px; }\n #optimole-app .image.is-128x128 {\n height: 128px;\n width: 128px; }\n #optimole-app .notification {\n background-color: whitesmoke;\n border-radius: 4px;\n padding: 1.25rem 2.5rem 1.25rem 1.5rem;\n position: relative; }\n #optimole-app .notification a:not(.button):not(.dropdown-item) {\n color: currentColor;\n text-decoration: underline; }\n #optimole-app .notification strong {\n color: currentColor; }\n #optimole-app .notification code,\n #optimole-app .notification pre {\n background: white; }\n #optimole-app .notification pre code {\n background: transparent; }\n #optimole-app .notification > .delete {\n position: absolute;\n right: 0.5rem;\n top: 0.5rem; }\n #optimole-app .notification .title,\n #optimole-app .notification .subtitle,\n #optimole-app .notification .content {\n color: currentColor; }\n #optimole-app .notification.is-white {\n background-color: white;\n color: #0a0a0a; }\n #optimole-app .notification.is-black {\n background-color: #0a0a0a;\n color: white; }\n #optimole-app .notification.is-light {\n background-color: whitesmoke;\n color: #363636; }\n #optimole-app .notification.is-dark {\n background-color: #363636;\n color: whitesmoke; }\n #optimole-app .notification.is-primary {\n background-color: #EF686B;\n color: #fff; }\n #optimole-app .notification.is-link {\n background-color: #3273dc;\n color: #fff; }\n #optimole-app .notification.is-info {\n background-color: #5180C1;\n color: #fff; }\n #optimole-app .notification.is-success {\n background-color: #34a85e;\n color: #fff; }\n #optimole-app .notification.is-warning {\n background-color: #ffdd57;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .notification.is-danger {\n background-color: #D54222;\n color: #fff; }\n #optimole-app .progress {\n -moz-appearance: none;\n -webkit-appearance: none;\n border: none;\n border-radius: 290486px;\n display: block;\n height: 1rem;\n overflow: hidden;\n padding: 0;\n width: 100%; }\n #optimole-app .progress::-webkit-progress-bar {\n background-color: #dbdbdb; }\n #optimole-app .progress::-webkit-progress-value {\n background-color: #4a4a4a; }\n #optimole-app .progress::-moz-progress-bar {\n background-color: #4a4a4a; }\n #optimole-app .progress::-ms-fill {\n background-color: #4a4a4a;\n border: none; }\n #optimole-app .progress:indeterminate {\n animation-duration: 1.5s;\n animation-iteration-count: infinite;\n animation-name: moveIndeterminate;\n animation-timing-function: linear;\n background-color: #dbdbdb;\n background-image: linear-gradient(to right, #4a4a4a 30%, #dbdbdb 30%);\n background-position: top left;\n background-repeat: no-repeat;\n background-size: 150% 150%; }\n #optimole-app .progress:indeterminate::-webkit-progress-bar {\n background-color: transparent; }\n #optimole-app .progress:indeterminate::-moz-progress-bar {\n background-color: transparent; }\n #optimole-app .progress.is-white::-webkit-progress-value {\n background-color: white; }\n #optimole-app .progress.is-white::-moz-progress-bar {\n background-color: white; }\n #optimole-app .progress.is-white::-ms-fill {\n background-color: white; }\n #optimole-app .progress.is-white:indeterminate {\n background-image: linear-gradient(to right, white 30%, #dbdbdb 30%); }\n #optimole-app .progress.is-black::-webkit-progress-value {\n background-color: #0a0a0a; }\n #optimole-app .progress.is-black::-moz-progress-bar {\n background-color: #0a0a0a; }\n #optimole-app .progress.is-black::-ms-fill {\n background-color: #0a0a0a; }\n #optimole-app .progress.is-black:indeterminate {\n background-image: linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%); }\n #optimole-app .progress.is-light::-webkit-progress-value {\n background-color: whitesmoke; }\n #optimole-app .progress.is-light::-moz-progress-bar {\n background-color: whitesmoke; }\n #optimole-app .progress.is-light::-ms-fill {\n background-color: whitesmoke; }\n #optimole-app .progress.is-light:indeterminate {\n background-image: linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%); }\n #optimole-app .progress.is-dark::-webkit-progress-value {\n background-color: #363636; }\n #optimole-app .progress.is-dark::-moz-progress-bar {\n background-color: #363636; }\n #optimole-app .progress.is-dark::-ms-fill {\n background-color: #363636; }\n #optimole-app .progress.is-dark:indeterminate {\n background-image: linear-gradient(to right, #363636 30%, #dbdbdb 30%); }\n #optimole-app .progress.is-primary::-webkit-progress-value {\n background-color: #EF686B; }\n #optimole-app .progress.is-primary::-moz-progress-bar {\n background-color: #EF686B; }\n #optimole-app .progress.is-primary::-ms-fill {\n background-color: #EF686B; }\n #optimole-app .progress.is-primary:indeterminate {\n background-image: linear-gradient(to right, #EF686B 30%, #dbdbdb 30%); }\n #optimole-app .progress.is-link::-webkit-progress-value {\n background-color: #3273dc; }\n #optimole-app .progress.is-link::-moz-progress-bar {\n background-color: #3273dc; }\n #optimole-app .progress.is-link::-ms-fill {\n background-color: #3273dc; }\n #optimole-app .progress.is-link:indeterminate {\n background-image: linear-gradient(to right, #3273dc 30%, #dbdbdb 30%); }\n #optimole-app .progress.is-info::-webkit-progress-value {\n background-color: #5180C1; }\n #optimole-app .progress.is-info::-moz-progress-bar {\n background-color: #5180C1; }\n #optimole-app .progress.is-info::-ms-fill {\n background-color: #5180C1; }\n #optimole-app .progress.is-info:indeterminate {\n background-image: linear-gradient(to right, #5180C1 30%, #dbdbdb 30%); }\n #optimole-app .progress.is-success::-webkit-progress-value {\n background-color: #34a85e; }\n #optimole-app .progress.is-success::-moz-progress-bar {\n background-color: #34a85e; }\n #optimole-app .progress.is-success::-ms-fill {\n background-color: #34a85e; }\n #optimole-app .progress.is-success:indeterminate {\n background-image: linear-gradient(to right, #34a85e 30%, #dbdbdb 30%); }\n #optimole-app .progress.is-warning::-webkit-progress-value {\n background-color: #ffdd57; }\n #optimole-app .progress.is-warning::-moz-progress-bar {\n background-color: #ffdd57; }\n #optimole-app .progress.is-warning::-ms-fill {\n background-color: #ffdd57; }\n #optimole-app .progress.is-warning:indeterminate {\n background-image: linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%); }\n #optimole-app .progress.is-danger::-webkit-progress-value {\n background-color: #D54222; }\n #optimole-app .progress.is-danger::-moz-progress-bar {\n background-color: #D54222; }\n #optimole-app .progress.is-danger::-ms-fill {\n background-color: #D54222; }\n #optimole-app .progress.is-danger:indeterminate {\n background-image: linear-gradient(to right, #D54222 30%, #dbdbdb 30%); }\n #optimole-app .progress.is-small {\n height: 0.75rem; }\n #optimole-app .progress.is-medium {\n height: 1.25rem; }\n #optimole-app .progress.is-large {\n height: 1.5rem; }\n\n@keyframes moveIndeterminate {\n from {\n background-position: 200% 0; }\n to {\n background-position: -200% 0; } }\n #optimole-app .table {\n background-color: white;\n color: #363636; }\n #optimole-app .table td,\n #optimole-app .table th {\n border: 1px solid #dbdbdb;\n border-width: 0 0 1px;\n padding: 0.5em 0.75em;\n vertical-align: top; }\n #optimole-app .table td.is-white,\n #optimole-app .table th.is-white {\n background-color: white;\n border-color: white;\n color: #0a0a0a; }\n #optimole-app .table td.is-black,\n #optimole-app .table th.is-black {\n background-color: #0a0a0a;\n border-color: #0a0a0a;\n color: white; }\n #optimole-app .table td.is-light,\n #optimole-app .table th.is-light {\n background-color: whitesmoke;\n border-color: whitesmoke;\n color: #363636; }\n #optimole-app .table td.is-dark,\n #optimole-app .table th.is-dark {\n background-color: #363636;\n border-color: #363636;\n color: whitesmoke; }\n #optimole-app .table td.is-primary,\n #optimole-app .table th.is-primary {\n background-color: #EF686B;\n border-color: #EF686B;\n color: #fff; }\n #optimole-app .table td.is-link,\n #optimole-app .table th.is-link {\n background-color: #3273dc;\n border-color: #3273dc;\n color: #fff; }\n #optimole-app .table td.is-info,\n #optimole-app .table th.is-info {\n background-color: #5180C1;\n border-color: #5180C1;\n color: #fff; }\n #optimole-app .table td.is-success,\n #optimole-app .table th.is-success {\n background-color: #34a85e;\n border-color: #34a85e;\n color: #fff; }\n #optimole-app .table td.is-warning,\n #optimole-app .table th.is-warning {\n background-color: #ffdd57;\n border-color: #ffdd57;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .table td.is-danger,\n #optimole-app .table th.is-danger {\n background-color: #D54222;\n border-color: #D54222;\n color: #fff; }\n #optimole-app .table td.is-narrow,\n #optimole-app .table th.is-narrow {\n white-space: nowrap;\n width: 1%; }\n #optimole-app .table td.is-selected,\n #optimole-app .table th.is-selected {\n background-color: #EF686B;\n color: #fff; }\n #optimole-app .table td.is-selected a,\n #optimole-app .table td.is-selected strong,\n #optimole-app .table th.is-selected a,\n #optimole-app .table th.is-selected strong {\n color: currentColor; }\n #optimole-app .table th {\n color: #363636;\n text-align: left; }\n #optimole-app .table tr.is-selected {\n background-color: #EF686B;\n color: #fff; }\n #optimole-app .table tr.is-selected a,\n #optimole-app .table tr.is-selected strong {\n color: currentColor; }\n #optimole-app .table tr.is-selected td,\n #optimole-app .table tr.is-selected th {\n border-color: #fff;\n color: currentColor; }\n #optimole-app .table thead {\n background-color: transparent; }\n #optimole-app .table thead td,\n #optimole-app .table thead th {\n border-width: 0 0 2px;\n color: #363636; }\n #optimole-app .table tfoot {\n background-color: transparent; }\n #optimole-app .table tfoot td,\n #optimole-app .table tfoot th {\n border-width: 2px 0 0;\n color: #363636; }\n #optimole-app .table tbody {\n background-color: transparent; }\n #optimole-app .table tbody tr:last-child td,\n #optimole-app .table tbody tr:last-child th {\n border-bottom-width: 0; }\n #optimole-app .table.is-bordered td,\n #optimole-app .table.is-bordered th {\n border-width: 1px; }\n #optimole-app .table.is-bordered tr:last-child td,\n #optimole-app .table.is-bordered tr:last-child th {\n border-bottom-width: 1px; }\n #optimole-app .table.is-fullwidth {\n width: 100%; }\n #optimole-app .table.is-hoverable tbody tr:not(.is-selected):hover {\n background-color: #fafafa; }\n #optimole-app .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover {\n background-color: #fafafa; }\n #optimole-app .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) {\n background-color: whitesmoke; }\n #optimole-app .table.is-narrow td,\n #optimole-app .table.is-narrow th {\n padding: 0.25em 0.5em; }\n #optimole-app .table.is-striped tbody tr:not(.is-selected):nth-child(even) {\n background-color: #fafafa; }\n #optimole-app .table-container {\n -webkit-overflow-scrolling: touch;\n overflow: auto;\n overflow-y: hidden;\n max-width: 100%; }\n #optimole-app .tags {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-pack: start;\n justify-content: flex-start; }\n #optimole-app .tags .tag {\n margin-bottom: 0.5rem; }\n #optimole-app .tags .tag:not(:last-child) {\n margin-right: 0.5rem; }\n #optimole-app .tags:last-child {\n margin-bottom: -0.5rem; }\n #optimole-app .tags:not(:last-child) {\n margin-bottom: 1rem; }\n #optimole-app .tags.are-medium .tag:not(.is-normal):not(.is-large) {\n font-size: 1rem; }\n #optimole-app .tags.are-large .tag:not(.is-normal):not(.is-medium) {\n font-size: 1.25rem; }\n #optimole-app .tags.has-addons .tag {\n margin-right: 0; }\n #optimole-app .tags.has-addons .tag:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n #optimole-app .tags.has-addons .tag:not(:last-child) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n #optimole-app .tags.is-centered {\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .tags.is-centered .tag {\n margin-right: 0.25rem;\n margin-left: 0.25rem; }\n #optimole-app .tags.is-right {\n -ms-flex-pack: end;\n justify-content: flex-end; }\n #optimole-app .tags.is-right .tag:not(:first-child) {\n margin-left: 0.5rem; }\n #optimole-app .tags.is-right .tag:not(:last-child) {\n margin-right: 0; }\n #optimole-app .tags.has-addons .tag {\n margin-right: 0; }\n #optimole-app .tags.has-addons .tag:not(:first-child) {\n margin-left: 0;\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n #optimole-app .tags.has-addons .tag:not(:last-child) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n #optimole-app .tag:not(body) {\n -ms-flex-align: center;\n align-items: center;\n background-color: whitesmoke;\n border-radius: 4px;\n color: #4a4a4a;\n display: -ms-inline-flexbox;\n display: inline-flex;\n font-size: 0.75rem;\n height: 2em;\n -ms-flex-pack: center;\n justify-content: center;\n line-height: 1.5;\n padding-left: 0.75em;\n padding-right: 0.75em;\n white-space: nowrap; }\n #optimole-app .tag:not(body) .delete {\n margin-left: 0.25rem;\n margin-right: -0.375rem; }\n #optimole-app .tag:not(body).is-white {\n background-color: white;\n color: #0a0a0a; }\n #optimole-app .tag:not(body).is-black {\n background-color: #0a0a0a;\n color: white; }\n #optimole-app .tag:not(body).is-light {\n background-color: whitesmoke;\n color: #363636; }\n #optimole-app .tag:not(body).is-dark {\n background-color: #363636;\n color: whitesmoke; }\n #optimole-app .tag:not(body).is-primary {\n background-color: #EF686B;\n color: #fff; }\n #optimole-app .tag:not(body).is-link {\n background-color: #3273dc;\n color: #fff; }\n #optimole-app .tag:not(body).is-info {\n background-color: #5180C1;\n color: #fff; }\n #optimole-app .tag:not(body).is-success {\n background-color: #34a85e;\n color: #fff; }\n #optimole-app .tag:not(body).is-warning {\n background-color: #ffdd57;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .tag:not(body).is-danger {\n background-color: #D54222;\n color: #fff; }\n #optimole-app .tag:not(body).is-normal {\n font-size: 0.75rem; }\n #optimole-app .tag:not(body).is-medium {\n font-size: 1rem; }\n #optimole-app .tag:not(body).is-large {\n font-size: 1.25rem; }\n #optimole-app .tag:not(body) .icon:first-child:not(:last-child) {\n margin-left: -0.375em;\n margin-right: 0.1875em; }\n #optimole-app .tag:not(body) .icon:last-child:not(:first-child) {\n margin-left: 0.1875em;\n margin-right: -0.375em; }\n #optimole-app .tag:not(body) .icon:first-child:last-child {\n margin-left: -0.375em;\n margin-right: -0.375em; }\n #optimole-app .tag:not(body).is-delete {\n margin-left: 1px;\n padding: 0;\n position: relative;\n width: 2em; }\n #optimole-app .tag:not(body).is-delete::before, #optimole-app .tag:not(body).is-delete::after {\n background-color: currentColor;\n content: \"\";\n display: block;\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translateX(-50%) translateY(-50%) rotate(45deg);\n transform-origin: center center; }\n #optimole-app .tag:not(body).is-delete::before {\n height: 1px;\n width: 50%; }\n #optimole-app .tag:not(body).is-delete::after {\n height: 50%;\n width: 1px; }\n #optimole-app .tag:not(body).is-delete:hover, #optimole-app .tag:not(body).is-delete:focus {\n background-color: #e8e8e8; }\n #optimole-app .tag:not(body).is-delete:active {\n background-color: #dbdbdb; }\n #optimole-app .tag:not(body).is-rounded {\n border-radius: 290486px; }\n #optimole-app a.tag:hover {\n text-decoration: underline; }\n #optimole-app .title,\n #optimole-app .subtitle {\n word-break: break-word; }\n #optimole-app .title em,\n #optimole-app .title span,\n #optimole-app .subtitle em,\n #optimole-app .subtitle span {\n font-weight: inherit; }\n #optimole-app .title sub,\n #optimole-app .subtitle sub {\n font-size: 0.75em; }\n #optimole-app .title sup,\n #optimole-app .subtitle sup {\n font-size: 0.75em; }\n #optimole-app .title .tag,\n #optimole-app .subtitle .tag {\n vertical-align: middle; }\n #optimole-app .title {\n color: #363636;\n font-size: 2rem;\n font-weight: 600;\n line-height: 1.125; }\n #optimole-app .title strong {\n color: inherit;\n font-weight: inherit; }\n #optimole-app .title + .highlight {\n margin-top: -0.75rem; }\n #optimole-app .title:not(.is-spaced) + .subtitle {\n margin-top: -1.25rem; }\n #optimole-app .title.is-1 {\n font-size: 3rem; }\n #optimole-app .title.is-2 {\n font-size: 2.5rem; }\n #optimole-app .title.is-3 {\n font-size: 2rem; }\n #optimole-app .title.is-4 {\n font-size: 1.5rem; }\n #optimole-app .title.is-5 {\n font-size: 1.25rem; }\n #optimole-app .title.is-6 {\n font-size: 1rem; }\n #optimole-app .title.is-7 {\n font-size: 0.75rem; }\n #optimole-app .subtitle {\n color: #4a4a4a;\n font-size: 1.25rem;\n font-weight: 400;\n line-height: 1.25; }\n #optimole-app .subtitle strong {\n color: #363636;\n font-weight: 600; }\n #optimole-app .subtitle:not(.is-spaced) + .title {\n margin-top: -1.25rem; }\n #optimole-app .subtitle.is-1 {\n font-size: 3rem; }\n #optimole-app .subtitle.is-2 {\n font-size: 2.5rem; }\n #optimole-app .subtitle.is-3 {\n font-size: 2rem; }\n #optimole-app .subtitle.is-4 {\n font-size: 1.5rem; }\n #optimole-app .subtitle.is-5 {\n font-size: 1.25rem; }\n #optimole-app .subtitle.is-6 {\n font-size: 1rem; }\n #optimole-app .subtitle.is-7 {\n font-size: 0.75rem; }\n #optimole-app .heading {\n display: block;\n font-size: 11px;\n letter-spacing: 1px;\n margin-bottom: 5px;\n text-transform: uppercase; }\n #optimole-app .highlight {\n font-weight: 400;\n max-width: 100%;\n overflow: hidden;\n padding: 0; }\n #optimole-app .highlight pre {\n overflow: auto;\n max-width: 100%; }\n #optimole-app .number {\n -ms-flex-align: center;\n align-items: center;\n background-color: whitesmoke;\n border-radius: 290486px;\n display: -ms-inline-flexbox;\n display: inline-flex;\n font-size: 1.25rem;\n height: 2em;\n -ms-flex-pack: center;\n justify-content: center;\n margin-right: 1.5rem;\n min-width: 2.5em;\n padding: 0.25rem 0.5rem;\n text-align: center;\n vertical-align: top; }\n #optimole-app .breadcrumb {\n font-size: 1rem;\n white-space: nowrap; }\n #optimole-app .breadcrumb a {\n -ms-flex-align: center;\n align-items: center;\n color: #3273dc;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n padding: 0 0.75em; }\n #optimole-app .breadcrumb a:hover {\n color: #363636; }\n #optimole-app .breadcrumb li {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .breadcrumb li:first-child a {\n padding-left: 0; }\n #optimole-app .breadcrumb li.is-active a {\n color: #363636;\n cursor: default;\n pointer-events: none; }\n #optimole-app .breadcrumb li + li::before {\n color: #b5b5b5;\n content: \"/\"; }\n #optimole-app .breadcrumb ul,\n #optimole-app .breadcrumb ol {\n -ms-flex-align: start;\n align-items: flex-start;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-pack: start;\n justify-content: flex-start; }\n #optimole-app .breadcrumb .icon:first-child {\n margin-right: 0.5em; }\n #optimole-app .breadcrumb .icon:last-child {\n margin-left: 0.5em; }\n #optimole-app .breadcrumb.is-centered ol,\n #optimole-app .breadcrumb.is-centered ul {\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .breadcrumb.is-right ol,\n #optimole-app .breadcrumb.is-right ul {\n -ms-flex-pack: end;\n justify-content: flex-end; }\n #optimole-app .breadcrumb.is-small {\n font-size: 0.75rem; }\n #optimole-app .breadcrumb.is-medium {\n font-size: 1.25rem; }\n #optimole-app .breadcrumb.is-large {\n font-size: 1.5rem; }\n #optimole-app .breadcrumb.has-arrow-separator li + li::before {\n content: \"\\2192\"; }\n #optimole-app .breadcrumb.has-bullet-separator li + li::before {\n content: \"\\2022\"; }\n #optimole-app .breadcrumb.has-dot-separator li + li::before {\n content: \"\\B7\"; }\n #optimole-app .breadcrumb.has-succeeds-separator li + li::before {\n content: \"\\227B\"; }\n #optimole-app .card {\n background-color: white;\n box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);\n color: #4a4a4a;\n max-width: 100%;\n position: relative; }\n #optimole-app .card-header {\n background-color: transparent;\n -ms-flex-align: stretch;\n align-items: stretch;\n box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1);\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .card-header-title {\n -ms-flex-align: center;\n align-items: center;\n color: #363636;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-positive: 1;\n flex-grow: 1;\n font-weight: 700;\n padding: 0.75rem; }\n #optimole-app .card-header-title.is-centered {\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .card-header-icon {\n -ms-flex-align: center;\n align-items: center;\n cursor: pointer;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n padding: 0.75rem; }\n #optimole-app .card-image {\n display: block;\n position: relative; }\n #optimole-app .card-content {\n background-color: transparent;\n padding: 1.5rem; }\n #optimole-app .card-footer {\n background-color: transparent;\n border-top: 1px solid #dbdbdb;\n -ms-flex-align: stretch;\n align-items: stretch;\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .card-footer-item {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n -ms-flex-pack: center;\n justify-content: center;\n padding: 0.75rem; }\n #optimole-app .card-footer-item:not(:last-child) {\n border-right: 1px solid #dbdbdb; }\n #optimole-app .card .media:not(:last-child) {\n margin-bottom: 0.75rem; }\n #optimole-app .dropdown {\n display: -ms-inline-flexbox;\n display: inline-flex;\n position: relative;\n vertical-align: top; }\n #optimole-app .dropdown.is-active .dropdown-menu, #optimole-app .dropdown.is-hoverable:hover .dropdown-menu {\n display: block; }\n #optimole-app .dropdown.is-right .dropdown-menu {\n left: auto;\n right: 0; }\n #optimole-app .dropdown.is-up .dropdown-menu {\n bottom: 100%;\n padding-bottom: 4px;\n padding-top: initial;\n top: auto; }\n #optimole-app .dropdown-menu {\n display: none;\n left: 0;\n min-width: 12rem;\n padding-top: 4px;\n position: absolute;\n top: 100%;\n z-index: 20; }\n #optimole-app .dropdown-content {\n background-color: white;\n border-radius: 4px;\n box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);\n padding-bottom: 0.5rem;\n padding-top: 0.5rem; }\n #optimole-app .dropdown-item {\n color: #4a4a4a;\n display: block;\n font-size: 0.875rem;\n line-height: 1.5;\n padding: 0.375rem 1rem;\n position: relative; }\n #optimole-app a.dropdown-item,\n #optimole-app button.dropdown-item {\n padding-right: 3rem;\n text-align: left;\n white-space: nowrap;\n width: 100%; }\n #optimole-app a.dropdown-item:hover,\n #optimole-app button.dropdown-item:hover {\n background-color: whitesmoke;\n color: #0a0a0a; }\n #optimole-app a.dropdown-item.is-active,\n #optimole-app button.dropdown-item.is-active {\n background-color: #3273dc;\n color: #fff; }\n #optimole-app .dropdown-divider {\n background-color: #dbdbdb;\n border: none;\n display: block;\n height: 1px;\n margin: 0.5rem 0; }\n #optimole-app .level {\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between; }\n #optimole-app .level code {\n border-radius: 4px; }\n #optimole-app .level img {\n display: inline-block;\n vertical-align: top; }\n #optimole-app .level.is-mobile {\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .level.is-mobile .level-left,\n #optimole-app .level.is-mobile .level-right {\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .level.is-mobile .level-left + .level-right {\n margin-top: 0; }\n #optimole-app .level.is-mobile .level-item:not(:last-child) {\n margin-bottom: 0;\n margin-right: 0.75rem; }\n #optimole-app .level.is-mobile .level-item:not(.is-narrow) {\n -ms-flex-positive: 1;\n flex-grow: 1; }\n @media screen and (min-width: 769px), print {\n #optimole-app .level {\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .level > .level-item:not(.is-narrow) {\n -ms-flex-positive: 1;\n flex-grow: 1; } }\n #optimole-app .level-item {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n -ms-flex-positive: 0;\n flex-grow: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .level-item .title,\n #optimole-app .level-item .subtitle {\n margin-bottom: 0; }\n @media screen and (max-width: 768px) {\n #optimole-app .level-item:not(:last-child) {\n margin-bottom: 0.75rem; } }\n #optimole-app .level-left,\n #optimole-app .level-right {\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n -ms-flex-positive: 0;\n flex-grow: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0; }\n #optimole-app .level-left .level-item.is-flexible,\n #optimole-app .level-right .level-item.is-flexible {\n -ms-flex-positive: 1;\n flex-grow: 1; }\n @media screen and (min-width: 769px), print {\n #optimole-app .level-left .level-item:not(:last-child),\n #optimole-app .level-right .level-item:not(:last-child) {\n margin-right: 0.75rem; } }\n #optimole-app .level-left {\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: start;\n justify-content: flex-start; }\n @media screen and (max-width: 768px) {\n #optimole-app .level-left + .level-right {\n margin-top: 1.5rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .level-left {\n display: -ms-flexbox;\n display: flex; } }\n #optimole-app .level-right {\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: end;\n justify-content: flex-end; }\n @media screen and (min-width: 769px), print {\n #optimole-app .level-right {\n display: -ms-flexbox;\n display: flex; } }\n #optimole-app .list {\n background-color: white;\n border-radius: 4px;\n box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); }\n #optimole-app .list-item {\n display: block;\n padding: 0.5em 1em; }\n #optimole-app .list-item:not(a) {\n color: #4a4a4a; }\n #optimole-app .list-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px; }\n #optimole-app .list-item:last-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px; }\n #optimole-app .list-item:not(:last-child) {\n border-bottom: 1px solid #dbdbdb; }\n #optimole-app .list-item.is-active {\n background-color: #3273dc;\n color: #fff; }\n #optimole-app a.list-item {\n background-color: whitesmoke;\n cursor: pointer; }\n #optimole-app .media {\n -ms-flex-align: start;\n align-items: flex-start;\n display: -ms-flexbox;\n display: flex;\n text-align: left; }\n #optimole-app .media .content:not(:last-child) {\n margin-bottom: 0.75rem; }\n #optimole-app .media .media {\n border-top: 1px solid rgba(219, 219, 219, 0.5);\n display: -ms-flexbox;\n display: flex;\n padding-top: 0.75rem; }\n #optimole-app .media .media .content:not(:last-child),\n #optimole-app .media .media .control:not(:last-child) {\n margin-bottom: 0.5rem; }\n #optimole-app .media .media .media {\n padding-top: 0.5rem; }\n #optimole-app .media .media .media + .media {\n margin-top: 0.5rem; }\n #optimole-app .media + .media {\n border-top: 1px solid rgba(219, 219, 219, 0.5);\n margin-top: 1rem;\n padding-top: 1rem; }\n #optimole-app .media.is-large + .media {\n margin-top: 1.5rem;\n padding-top: 1.5rem; }\n #optimole-app .media-left,\n #optimole-app .media-right {\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n -ms-flex-positive: 0;\n flex-grow: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0; }\n #optimole-app .media-left {\n margin-right: 1rem; }\n #optimole-app .media-right {\n margin-left: 1rem; }\n #optimole-app .media-content {\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1;\n text-align: left; }\n @media screen and (max-width: 768px) {\n #optimole-app .media-content {\n overflow-x: auto; } }\n #optimole-app .menu {\n font-size: 1rem; }\n #optimole-app .menu.is-small {\n font-size: 0.75rem; }\n #optimole-app .menu.is-medium {\n font-size: 1.25rem; }\n #optimole-app .menu.is-large {\n font-size: 1.5rem; }\n #optimole-app .menu-list {\n line-height: 1.25; }\n #optimole-app .menu-list a {\n border-radius: 2px;\n color: #4a4a4a;\n display: block;\n padding: 0.5em 0.75em; }\n #optimole-app .menu-list a:hover {\n background-color: whitesmoke;\n color: #363636; }\n #optimole-app .menu-list a.is-active {\n background-color: #3273dc;\n color: #fff; }\n #optimole-app .menu-list li ul {\n border-left: 1px solid #dbdbdb;\n margin: 0.75em;\n padding-left: 0.75em; }\n #optimole-app .menu-label {\n color: #7a7a7a;\n font-size: 0.75em;\n letter-spacing: 0.1em;\n text-transform: uppercase; }\n #optimole-app .menu-label:not(:first-child) {\n margin-top: 1em; }\n #optimole-app .menu-label:not(:last-child) {\n margin-bottom: 1em; }\n #optimole-app .message {\n background-color: whitesmoke;\n border-radius: 4px;\n font-size: 1rem; }\n #optimole-app .message strong {\n color: currentColor; }\n #optimole-app .message a:not(.button):not(.tag):not(.dropdown-item) {\n color: currentColor;\n text-decoration: underline; }\n #optimole-app .message.is-small {\n font-size: 0.75rem; }\n #optimole-app .message.is-medium {\n font-size: 1.25rem; }\n #optimole-app .message.is-large {\n font-size: 1.5rem; }\n #optimole-app .message.is-white {\n background-color: white; }\n #optimole-app .message.is-white .message-header {\n background-color: white;\n color: #0a0a0a; }\n #optimole-app .message.is-white .message-body {\n border-color: white;\n color: #4d4d4d; }\n #optimole-app .message.is-black {\n background-color: #fafafa; }\n #optimole-app .message.is-black .message-header {\n background-color: #0a0a0a;\n color: white; }\n #optimole-app .message.is-black .message-body {\n border-color: #0a0a0a;\n color: #090909; }\n #optimole-app .message.is-light {\n background-color: #fafafa; }\n #optimole-app .message.is-light .message-header {\n background-color: whitesmoke;\n color: #363636; }\n #optimole-app .message.is-light .message-body {\n border-color: whitesmoke;\n color: #505050; }\n #optimole-app .message.is-dark {\n background-color: #fafafa; }\n #optimole-app .message.is-dark .message-header {\n background-color: #363636;\n color: whitesmoke; }\n #optimole-app .message.is-dark .message-body {\n border-color: #363636;\n color: #2a2a2a; }\n #optimole-app .message.is-primary {\n background-color: #fef6f6; }\n #optimole-app .message.is-primary .message-header {\n background-color: #EF686B;\n color: #fff; }\n #optimole-app .message.is-primary .message-body {\n border-color: #EF686B;\n color: #bd2124; }\n #optimole-app .message.is-link {\n background-color: #f6f9fe; }\n #optimole-app .message.is-link .message-header {\n background-color: #3273dc;\n color: #fff; }\n #optimole-app .message.is-link .message-body {\n border-color: #3273dc;\n color: #22509a; }\n #optimole-app .message.is-info {\n background-color: #f7fafc; }\n #optimole-app .message.is-info .message-header {\n background-color: #5180C1;\n color: #fff; }\n #optimole-app .message.is-info .message-body {\n border-color: #5180C1;\n color: #36537c; }\n #optimole-app .message.is-success {\n background-color: #f7fdf9; }\n #optimole-app .message.is-success .message-header {\n background-color: #34a85e;\n color: #fff; }\n #optimole-app .message.is-success .message-body {\n border-color: #34a85e;\n color: #1b432a; }\n #optimole-app .message.is-warning {\n background-color: #fffdf5; }\n #optimole-app .message.is-warning .message-header {\n background-color: #ffdd57;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .message.is-warning .message-body {\n border-color: #ffdd57;\n color: #3b3108; }\n #optimole-app .message.is-danger {\n background-color: #fef8f6; }\n #optimole-app .message.is-danger .message-header {\n background-color: #D54222;\n color: #fff; }\n #optimole-app .message.is-danger .message-body {\n border-color: #D54222;\n color: #8d311d; }\n #optimole-app .message-header {\n -ms-flex-align: center;\n align-items: center;\n background-color: #4a4a4a;\n border-radius: 4px 4px 0 0;\n color: #fff;\n display: -ms-flexbox;\n display: flex;\n font-weight: 700;\n -ms-flex-pack: justify;\n justify-content: space-between;\n line-height: 1.25;\n padding: 0.75em 1em;\n position: relative; }\n #optimole-app .message-header .delete {\n -ms-flex-positive: 0;\n flex-grow: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n margin-left: 0.75em; }\n #optimole-app .message-header + .message-body {\n border-width: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0; }\n #optimole-app .message-body {\n border-color: #dbdbdb;\n border-radius: 4px;\n border-style: solid;\n border-width: 0 0 0 4px;\n color: #4a4a4a;\n padding: 1.25em 1.5em; }\n #optimole-app .message-body code,\n #optimole-app .message-body pre {\n background-color: white; }\n #optimole-app .message-body pre code {\n background-color: transparent; }\n #optimole-app .modal {\n -ms-flex-align: center;\n align-items: center;\n display: none;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n overflow: hidden;\n position: fixed;\n z-index: 40; }\n #optimole-app .modal.is-active {\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .modal-background {\n background-color: rgba(10, 10, 10, 0.86); }\n #optimole-app .modal-content,\n #optimole-app .modal-card {\n margin: 0 20px;\n max-height: calc(100vh - 160px);\n overflow: auto;\n position: relative;\n width: 100%; }\n @media screen and (min-width: 769px), print {\n #optimole-app .modal-content,\n #optimole-app .modal-card {\n margin: 0 auto;\n max-height: calc(100vh - 40px);\n width: 640px; } }\n #optimole-app .modal-close {\n background: none;\n height: 40px;\n position: fixed;\n right: 20px;\n top: 20px;\n width: 40px; }\n #optimole-app .modal-card {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n max-height: calc(100vh - 40px);\n overflow: hidden;\n -ms-overflow-y: visible; }\n #optimole-app .modal-card-head,\n #optimole-app .modal-card-foot {\n -ms-flex-align: center;\n align-items: center;\n background-color: whitesmoke;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n -ms-flex-pack: start;\n justify-content: flex-start;\n padding: 20px;\n position: relative; }\n #optimole-app .modal-card-head {\n border-bottom: 1px solid #dbdbdb;\n border-top-left-radius: 6px;\n border-top-right-radius: 6px; }\n #optimole-app .modal-card-title {\n color: #363636;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n font-size: 1.5rem;\n line-height: 1; }\n #optimole-app .modal-card-foot {\n border-bottom-left-radius: 6px;\n border-bottom-right-radius: 6px;\n border-top: 1px solid #dbdbdb; }\n #optimole-app .modal-card-foot .button:not(:last-child) {\n margin-right: 10px; }\n #optimole-app .modal-card-body {\n -webkit-overflow-scrolling: touch;\n background-color: white;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1;\n overflow: auto;\n padding: 20px; }\n #optimole-app .navbar {\n background-color: white;\n min-height: 3.25rem;\n position: relative;\n z-index: 30; }\n #optimole-app .navbar.is-white {\n background-color: white;\n color: #0a0a0a; }\n #optimole-app .navbar.is-white .navbar-brand > .navbar-item,\n #optimole-app .navbar.is-white .navbar-brand .navbar-link {\n color: #0a0a0a; }\n #optimole-app .navbar.is-white .navbar-brand > a.navbar-item:hover, #optimole-app .navbar.is-white .navbar-brand > a.navbar-item.is-active,\n #optimole-app .navbar.is-white .navbar-brand .navbar-link:hover,\n #optimole-app .navbar.is-white .navbar-brand .navbar-link.is-active {\n background-color: #f2f2f2;\n color: #0a0a0a; }\n #optimole-app .navbar.is-white .navbar-brand .navbar-link::after {\n border-color: #0a0a0a; }\n #optimole-app .navbar.is-white .navbar-burger {\n color: #0a0a0a; }\n @media screen and (min-width: 1088px) {\n #optimole-app .navbar.is-white .navbar-start > .navbar-item,\n #optimole-app .navbar.is-white .navbar-start .navbar-link,\n #optimole-app .navbar.is-white .navbar-end > .navbar-item,\n #optimole-app .navbar.is-white .navbar-end .navbar-link {\n color: #0a0a0a; }\n #optimole-app .navbar.is-white .navbar-start > a.navbar-item:hover, #optimole-app .navbar.is-white .navbar-start > a.navbar-item.is-active,\n #optimole-app .navbar.is-white .navbar-start .navbar-link:hover,\n #optimole-app .navbar.is-white .navbar-start .navbar-link.is-active,\n #optimole-app .navbar.is-white .navbar-end > a.navbar-item:hover,\n #optimole-app .navbar.is-white .navbar-end > a.navbar-item.is-active,\n #optimole-app .navbar.is-white .navbar-end .navbar-link:hover,\n #optimole-app .navbar.is-white .navbar-end .navbar-link.is-active {\n background-color: #f2f2f2;\n color: #0a0a0a; }\n #optimole-app .navbar.is-white .navbar-start .navbar-link::after,\n #optimole-app .navbar.is-white .navbar-end .navbar-link::after {\n border-color: #0a0a0a; }\n #optimole-app .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,\n #optimole-app .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link {\n background-color: #f2f2f2;\n color: #0a0a0a; }\n #optimole-app .navbar.is-white .navbar-dropdown a.navbar-item.is-active {\n background-color: white;\n color: #0a0a0a; } }\n #optimole-app .navbar.is-black {\n background-color: #0a0a0a;\n color: white; }\n #optimole-app .navbar.is-black .navbar-brand > .navbar-item,\n #optimole-app .navbar.is-black .navbar-brand .navbar-link {\n color: white; }\n #optimole-app .navbar.is-black .navbar-brand > a.navbar-item:hover, #optimole-app .navbar.is-black .navbar-brand > a.navbar-item.is-active,\n #optimole-app .navbar.is-black .navbar-brand .navbar-link:hover,\n #optimole-app .navbar.is-black .navbar-brand .navbar-link.is-active {\n background-color: black;\n color: white; }\n #optimole-app .navbar.is-black .navbar-brand .navbar-link::after {\n border-color: white; }\n #optimole-app .navbar.is-black .navbar-burger {\n color: white; }\n @media screen and (min-width: 1088px) {\n #optimole-app .navbar.is-black .navbar-start > .navbar-item,\n #optimole-app .navbar.is-black .navbar-start .navbar-link,\n #optimole-app .navbar.is-black .navbar-end > .navbar-item,\n #optimole-app .navbar.is-black .navbar-end .navbar-link {\n color: white; }\n #optimole-app .navbar.is-black .navbar-start > a.navbar-item:hover, #optimole-app .navbar.is-black .navbar-start > a.navbar-item.is-active,\n #optimole-app .navbar.is-black .navbar-start .navbar-link:hover,\n #optimole-app .navbar.is-black .navbar-start .navbar-link.is-active,\n #optimole-app .navbar.is-black .navbar-end > a.navbar-item:hover,\n #optimole-app .navbar.is-black .navbar-end > a.navbar-item.is-active,\n #optimole-app .navbar.is-black .navbar-end .navbar-link:hover,\n #optimole-app .navbar.is-black .navbar-end .navbar-link.is-active {\n background-color: black;\n color: white; }\n #optimole-app .navbar.is-black .navbar-start .navbar-link::after,\n #optimole-app .navbar.is-black .navbar-end .navbar-link::after {\n border-color: white; }\n #optimole-app .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,\n #optimole-app .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link {\n background-color: black;\n color: white; }\n #optimole-app .navbar.is-black .navbar-dropdown a.navbar-item.is-active {\n background-color: #0a0a0a;\n color: white; } }\n #optimole-app .navbar.is-light {\n background-color: whitesmoke;\n color: #363636; }\n #optimole-app .navbar.is-light .navbar-brand > .navbar-item,\n #optimole-app .navbar.is-light .navbar-brand .navbar-link {\n color: #363636; }\n #optimole-app .navbar.is-light .navbar-brand > a.navbar-item:hover, #optimole-app .navbar.is-light .navbar-brand > a.navbar-item.is-active,\n #optimole-app .navbar.is-light .navbar-brand .navbar-link:hover,\n #optimole-app .navbar.is-light .navbar-brand .navbar-link.is-active {\n background-color: #e8e8e8;\n color: #363636; }\n #optimole-app .navbar.is-light .navbar-brand .navbar-link::after {\n border-color: #363636; }\n #optimole-app .navbar.is-light .navbar-burger {\n color: #363636; }\n @media screen and (min-width: 1088px) {\n #optimole-app .navbar.is-light .navbar-start > .navbar-item,\n #optimole-app .navbar.is-light .navbar-start .navbar-link,\n #optimole-app .navbar.is-light .navbar-end > .navbar-item,\n #optimole-app .navbar.is-light .navbar-end .navbar-link {\n color: #363636; }\n #optimole-app .navbar.is-light .navbar-start > a.navbar-item:hover, #optimole-app .navbar.is-light .navbar-start > a.navbar-item.is-active,\n #optimole-app .navbar.is-light .navbar-start .navbar-link:hover,\n #optimole-app .navbar.is-light .navbar-start .navbar-link.is-active,\n #optimole-app .navbar.is-light .navbar-end > a.navbar-item:hover,\n #optimole-app .navbar.is-light .navbar-end > a.navbar-item.is-active,\n #optimole-app .navbar.is-light .navbar-end .navbar-link:hover,\n #optimole-app .navbar.is-light .navbar-end .navbar-link.is-active {\n background-color: #e8e8e8;\n color: #363636; }\n #optimole-app .navbar.is-light .navbar-start .navbar-link::after,\n #optimole-app .navbar.is-light .navbar-end .navbar-link::after {\n border-color: #363636; }\n #optimole-app .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,\n #optimole-app .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link {\n background-color: #e8e8e8;\n color: #363636; }\n #optimole-app .navbar.is-light .navbar-dropdown a.navbar-item.is-active {\n background-color: whitesmoke;\n color: #363636; } }\n #optimole-app .navbar.is-dark {\n background-color: #363636;\n color: whitesmoke; }\n #optimole-app .navbar.is-dark .navbar-brand > .navbar-item,\n #optimole-app .navbar.is-dark .navbar-brand .navbar-link {\n color: whitesmoke; }\n #optimole-app .navbar.is-dark .navbar-brand > a.navbar-item:hover, #optimole-app .navbar.is-dark .navbar-brand > a.navbar-item.is-active,\n #optimole-app .navbar.is-dark .navbar-brand .navbar-link:hover,\n #optimole-app .navbar.is-dark .navbar-brand .navbar-link.is-active {\n background-color: #292929;\n color: whitesmoke; }\n #optimole-app .navbar.is-dark .navbar-brand .navbar-link::after {\n border-color: whitesmoke; }\n #optimole-app .navbar.is-dark .navbar-burger {\n color: whitesmoke; }\n @media screen and (min-width: 1088px) {\n #optimole-app .navbar.is-dark .navbar-start > .navbar-item,\n #optimole-app .navbar.is-dark .navbar-start .navbar-link,\n #optimole-app .navbar.is-dark .navbar-end > .navbar-item,\n #optimole-app .navbar.is-dark .navbar-end .navbar-link {\n color: whitesmoke; }\n #optimole-app .navbar.is-dark .navbar-start > a.navbar-item:hover, #optimole-app .navbar.is-dark .navbar-start > a.navbar-item.is-active,\n #optimole-app .navbar.is-dark .navbar-start .navbar-link:hover,\n #optimole-app .navbar.is-dark .navbar-start .navbar-link.is-active,\n #optimole-app .navbar.is-dark .navbar-end > a.navbar-item:hover,\n #optimole-app .navbar.is-dark .navbar-end > a.navbar-item.is-active,\n #optimole-app .navbar.is-dark .navbar-end .navbar-link:hover,\n #optimole-app .navbar.is-dark .navbar-end .navbar-link.is-active {\n background-color: #292929;\n color: whitesmoke; }\n #optimole-app .navbar.is-dark .navbar-start .navbar-link::after,\n #optimole-app .navbar.is-dark .navbar-end .navbar-link::after {\n border-color: whitesmoke; }\n #optimole-app .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,\n #optimole-app .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link {\n background-color: #292929;\n color: whitesmoke; }\n #optimole-app .navbar.is-dark .navbar-dropdown a.navbar-item.is-active {\n background-color: #363636;\n color: whitesmoke; } }\n #optimole-app .navbar.is-primary {\n background-color: #EF686B;\n color: #fff; }\n #optimole-app .navbar.is-primary .navbar-brand > .navbar-item,\n #optimole-app .navbar.is-primary .navbar-brand .navbar-link {\n color: #fff; }\n #optimole-app .navbar.is-primary .navbar-brand > a.navbar-item:hover, #optimole-app .navbar.is-primary .navbar-brand > a.navbar-item.is-active,\n #optimole-app .navbar.is-primary .navbar-brand .navbar-link:hover,\n #optimole-app .navbar.is-primary .navbar-brand .navbar-link.is-active {\n background-color: #ed5154;\n color: #fff; }\n #optimole-app .navbar.is-primary .navbar-brand .navbar-link::after {\n border-color: #fff; }\n #optimole-app .navbar.is-primary .navbar-burger {\n color: #fff; }\n @media screen and (min-width: 1088px) {\n #optimole-app .navbar.is-primary .navbar-start > .navbar-item,\n #optimole-app .navbar.is-primary .navbar-start .navbar-link,\n #optimole-app .navbar.is-primary .navbar-end > .navbar-item,\n #optimole-app .navbar.is-primary .navbar-end .navbar-link {\n color: #fff; }\n #optimole-app .navbar.is-primary .navbar-start > a.navbar-item:hover, #optimole-app .navbar.is-primary .navbar-start > a.navbar-item.is-active,\n #optimole-app .navbar.is-primary .navbar-start .navbar-link:hover,\n #optimole-app .navbar.is-primary .navbar-start .navbar-link.is-active,\n #optimole-app .navbar.is-primary .navbar-end > a.navbar-item:hover,\n #optimole-app .navbar.is-primary .navbar-end > a.navbar-item.is-active,\n #optimole-app .navbar.is-primary .navbar-end .navbar-link:hover,\n #optimole-app .navbar.is-primary .navbar-end .navbar-link.is-active {\n background-color: #ed5154;\n color: #fff; }\n #optimole-app .navbar.is-primary .navbar-start .navbar-link::after,\n #optimole-app .navbar.is-primary .navbar-end .navbar-link::after {\n border-color: #fff; }\n #optimole-app .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,\n #optimole-app .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link {\n background-color: #ed5154;\n color: #fff; }\n #optimole-app .navbar.is-primary .navbar-dropdown a.navbar-item.is-active {\n background-color: #EF686B;\n color: #fff; } }\n #optimole-app .navbar.is-link {\n background-color: #3273dc;\n color: #fff; }\n #optimole-app .navbar.is-link .navbar-brand > .navbar-item,\n #optimole-app .navbar.is-link .navbar-brand .navbar-link {\n color: #fff; }\n #optimole-app .navbar.is-link .navbar-brand > a.navbar-item:hover, #optimole-app .navbar.is-link .navbar-brand > a.navbar-item.is-active,\n #optimole-app .navbar.is-link .navbar-brand .navbar-link:hover,\n #optimole-app .navbar.is-link .navbar-brand .navbar-link.is-active {\n background-color: #2366d1;\n color: #fff; }\n #optimole-app .navbar.is-link .navbar-brand .navbar-link::after {\n border-color: #fff; }\n #optimole-app .navbar.is-link .navbar-burger {\n color: #fff; }\n @media screen and (min-width: 1088px) {\n #optimole-app .navbar.is-link .navbar-start > .navbar-item,\n #optimole-app .navbar.is-link .navbar-start .navbar-link,\n #optimole-app .navbar.is-link .navbar-end > .navbar-item,\n #optimole-app .navbar.is-link .navbar-end .navbar-link {\n color: #fff; }\n #optimole-app .navbar.is-link .navbar-start > a.navbar-item:hover, #optimole-app .navbar.is-link .navbar-start > a.navbar-item.is-active,\n #optimole-app .navbar.is-link .navbar-start .navbar-link:hover,\n #optimole-app .navbar.is-link .navbar-start .navbar-link.is-active,\n #optimole-app .navbar.is-link .navbar-end > a.navbar-item:hover,\n #optimole-app .navbar.is-link .navbar-end > a.navbar-item.is-active,\n #optimole-app .navbar.is-link .navbar-end .navbar-link:hover,\n #optimole-app .navbar.is-link .navbar-end .navbar-link.is-active {\n background-color: #2366d1;\n color: #fff; }\n #optimole-app .navbar.is-link .navbar-start .navbar-link::after,\n #optimole-app .navbar.is-link .navbar-end .navbar-link::after {\n border-color: #fff; }\n #optimole-app .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,\n #optimole-app .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link {\n background-color: #2366d1;\n color: #fff; }\n #optimole-app .navbar.is-link .navbar-dropdown a.navbar-item.is-active {\n background-color: #3273dc;\n color: #fff; } }\n #optimole-app .navbar.is-info {\n background-color: #5180C1;\n color: #fff; }\n #optimole-app .navbar.is-info .navbar-brand > .navbar-item,\n #optimole-app .navbar.is-info .navbar-brand .navbar-link {\n color: #fff; }\n #optimole-app .navbar.is-info .navbar-brand > a.navbar-item:hover, #optimole-app .navbar.is-info .navbar-brand > a.navbar-item.is-active,\n #optimole-app .navbar.is-info .navbar-brand .navbar-link:hover,\n #optimole-app .navbar.is-info .navbar-brand .navbar-link.is-active {\n background-color: #4173b7;\n color: #fff; }\n #optimole-app .navbar.is-info .navbar-brand .navbar-link::after {\n border-color: #fff; }\n #optimole-app .navbar.is-info .navbar-burger {\n color: #fff; }\n @media screen and (min-width: 1088px) {\n #optimole-app .navbar.is-info .navbar-start > .navbar-item,\n #optimole-app .navbar.is-info .navbar-start .navbar-link,\n #optimole-app .navbar.is-info .navbar-end > .navbar-item,\n #optimole-app .navbar.is-info .navbar-end .navbar-link {\n color: #fff; }\n #optimole-app .navbar.is-info .navbar-start > a.navbar-item:hover, #optimole-app .navbar.is-info .navbar-start > a.navbar-item.is-active,\n #optimole-app .navbar.is-info .navbar-start .navbar-link:hover,\n #optimole-app .navbar.is-info .navbar-start .navbar-link.is-active,\n #optimole-app .navbar.is-info .navbar-end > a.navbar-item:hover,\n #optimole-app .navbar.is-info .navbar-end > a.navbar-item.is-active,\n #optimole-app .navbar.is-info .navbar-end .navbar-link:hover,\n #optimole-app .navbar.is-info .navbar-end .navbar-link.is-active {\n background-color: #4173b7;\n color: #fff; }\n #optimole-app .navbar.is-info .navbar-start .navbar-link::after,\n #optimole-app .navbar.is-info .navbar-end .navbar-link::after {\n border-color: #fff; }\n #optimole-app .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,\n #optimole-app .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link {\n background-color: #4173b7;\n color: #fff; }\n #optimole-app .navbar.is-info .navbar-dropdown a.navbar-item.is-active {\n background-color: #5180C1;\n color: #fff; } }\n #optimole-app .navbar.is-success {\n background-color: #34a85e;\n color: #fff; }\n #optimole-app .navbar.is-success .navbar-brand > .navbar-item,\n #optimole-app .navbar.is-success .navbar-brand .navbar-link {\n color: #fff; }\n #optimole-app .navbar.is-success .navbar-brand > a.navbar-item:hover, #optimole-app .navbar.is-success .navbar-brand > a.navbar-item.is-active,\n #optimole-app .navbar.is-success .navbar-brand .navbar-link:hover,\n #optimole-app .navbar.is-success .navbar-brand .navbar-link.is-active {\n background-color: #2e9553;\n color: #fff; }\n #optimole-app .navbar.is-success .navbar-brand .navbar-link::after {\n border-color: #fff; }\n #optimole-app .navbar.is-success .navbar-burger {\n color: #fff; }\n @media screen and (min-width: 1088px) {\n #optimole-app .navbar.is-success .navbar-start > .navbar-item,\n #optimole-app .navbar.is-success .navbar-start .navbar-link,\n #optimole-app .navbar.is-success .navbar-end > .navbar-item,\n #optimole-app .navbar.is-success .navbar-end .navbar-link {\n color: #fff; }\n #optimole-app .navbar.is-success .navbar-start > a.navbar-item:hover, #optimole-app .navbar.is-success .navbar-start > a.navbar-item.is-active,\n #optimole-app .navbar.is-success .navbar-start .navbar-link:hover,\n #optimole-app .navbar.is-success .navbar-start .navbar-link.is-active,\n #optimole-app .navbar.is-success .navbar-end > a.navbar-item:hover,\n #optimole-app .navbar.is-success .navbar-end > a.navbar-item.is-active,\n #optimole-app .navbar.is-success .navbar-end .navbar-link:hover,\n #optimole-app .navbar.is-success .navbar-end .navbar-link.is-active {\n background-color: #2e9553;\n color: #fff; }\n #optimole-app .navbar.is-success .navbar-start .navbar-link::after,\n #optimole-app .navbar.is-success .navbar-end .navbar-link::after {\n border-color: #fff; }\n #optimole-app .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,\n #optimole-app .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link {\n background-color: #2e9553;\n color: #fff; }\n #optimole-app .navbar.is-success .navbar-dropdown a.navbar-item.is-active {\n background-color: #34a85e;\n color: #fff; } }\n #optimole-app .navbar.is-warning {\n background-color: #ffdd57;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .navbar.is-warning .navbar-brand > .navbar-item,\n #optimole-app .navbar.is-warning .navbar-brand .navbar-link {\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .navbar.is-warning .navbar-brand > a.navbar-item:hover, #optimole-app .navbar.is-warning .navbar-brand > a.navbar-item.is-active,\n #optimole-app .navbar.is-warning .navbar-brand .navbar-link:hover,\n #optimole-app .navbar.is-warning .navbar-brand .navbar-link.is-active {\n background-color: #ffd83d;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .navbar.is-warning .navbar-brand .navbar-link::after {\n border-color: rgba(0, 0, 0, 0.7); }\n #optimole-app .navbar.is-warning .navbar-burger {\n color: rgba(0, 0, 0, 0.7); }\n @media screen and (min-width: 1088px) {\n #optimole-app .navbar.is-warning .navbar-start > .navbar-item,\n #optimole-app .navbar.is-warning .navbar-start .navbar-link,\n #optimole-app .navbar.is-warning .navbar-end > .navbar-item,\n #optimole-app .navbar.is-warning .navbar-end .navbar-link {\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .navbar.is-warning .navbar-start > a.navbar-item:hover, #optimole-app .navbar.is-warning .navbar-start > a.navbar-item.is-active,\n #optimole-app .navbar.is-warning .navbar-start .navbar-link:hover,\n #optimole-app .navbar.is-warning .navbar-start .navbar-link.is-active,\n #optimole-app .navbar.is-warning .navbar-end > a.navbar-item:hover,\n #optimole-app .navbar.is-warning .navbar-end > a.navbar-item.is-active,\n #optimole-app .navbar.is-warning .navbar-end .navbar-link:hover,\n #optimole-app .navbar.is-warning .navbar-end .navbar-link.is-active {\n background-color: #ffd83d;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .navbar.is-warning .navbar-start .navbar-link::after,\n #optimole-app .navbar.is-warning .navbar-end .navbar-link::after {\n border-color: rgba(0, 0, 0, 0.7); }\n #optimole-app .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,\n #optimole-app .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link {\n background-color: #ffd83d;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .navbar.is-warning .navbar-dropdown a.navbar-item.is-active {\n background-color: #ffdd57;\n color: rgba(0, 0, 0, 0.7); } }\n #optimole-app .navbar.is-danger {\n background-color: #D54222;\n color: #fff; }\n #optimole-app .navbar.is-danger .navbar-brand > .navbar-item,\n #optimole-app .navbar.is-danger .navbar-brand .navbar-link {\n color: #fff; }\n #optimole-app .navbar.is-danger .navbar-brand > a.navbar-item:hover, #optimole-app .navbar.is-danger .navbar-brand > a.navbar-item.is-active,\n #optimole-app .navbar.is-danger .navbar-brand .navbar-link:hover,\n #optimole-app .navbar.is-danger .navbar-brand .navbar-link.is-active {\n background-color: #bf3b1e;\n color: #fff; }\n #optimole-app .navbar.is-danger .navbar-brand .navbar-link::after {\n border-color: #fff; }\n #optimole-app .navbar.is-danger .navbar-burger {\n color: #fff; }\n @media screen and (min-width: 1088px) {\n #optimole-app .navbar.is-danger .navbar-start > .navbar-item,\n #optimole-app .navbar.is-danger .navbar-start .navbar-link,\n #optimole-app .navbar.is-danger .navbar-end > .navbar-item,\n #optimole-app .navbar.is-danger .navbar-end .navbar-link {\n color: #fff; }\n #optimole-app .navbar.is-danger .navbar-start > a.navbar-item:hover, #optimole-app .navbar.is-danger .navbar-start > a.navbar-item.is-active,\n #optimole-app .navbar.is-danger .navbar-start .navbar-link:hover,\n #optimole-app .navbar.is-danger .navbar-start .navbar-link.is-active,\n #optimole-app .navbar.is-danger .navbar-end > a.navbar-item:hover,\n #optimole-app .navbar.is-danger .navbar-end > a.navbar-item.is-active,\n #optimole-app .navbar.is-danger .navbar-end .navbar-link:hover,\n #optimole-app .navbar.is-danger .navbar-end .navbar-link.is-active {\n background-color: #bf3b1e;\n color: #fff; }\n #optimole-app .navbar.is-danger .navbar-start .navbar-link::after,\n #optimole-app .navbar.is-danger .navbar-end .navbar-link::after {\n border-color: #fff; }\n #optimole-app .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,\n #optimole-app .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link {\n background-color: #bf3b1e;\n color: #fff; }\n #optimole-app .navbar.is-danger .navbar-dropdown a.navbar-item.is-active {\n background-color: #D54222;\n color: #fff; } }\n #optimole-app .navbar > .container {\n -ms-flex-align: stretch;\n align-items: stretch;\n display: -ms-flexbox;\n display: flex;\n min-height: 3.25rem;\n width: 100%; }\n #optimole-app .navbar.has-shadow {\n box-shadow: 0 2px 0 0 whitesmoke; }\n #optimole-app .navbar.is-fixed-bottom, #optimole-app .navbar.is-fixed-top {\n left: 0;\n position: fixed;\n right: 0;\n z-index: 30; }\n #optimole-app .navbar.is-fixed-bottom {\n bottom: 0; }\n #optimole-app .navbar.is-fixed-bottom.has-shadow {\n box-shadow: 0 -2px 0 0 whitesmoke; }\n #optimole-app .navbar.is-fixed-top {\n top: 0; }\n #optimole-app html.has-navbar-fixed-top,\n #optimole-app body.has-navbar-fixed-top {\n padding-top: 3.25rem; }\n #optimole-app html.has-navbar-fixed-bottom,\n #optimole-app body.has-navbar-fixed-bottom {\n padding-bottom: 3.25rem; }\n #optimole-app .navbar-brand,\n #optimole-app .navbar-tabs {\n -ms-flex-align: stretch;\n align-items: stretch;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n min-height: 3.25rem; }\n #optimole-app .navbar-brand a.navbar-item:hover {\n background-color: transparent; }\n #optimole-app .navbar-tabs {\n -webkit-overflow-scrolling: touch;\n max-width: 100vw;\n overflow-x: auto;\n overflow-y: hidden; }\n #optimole-app .navbar-burger {\n color: #4a4a4a;\n cursor: pointer;\n display: block;\n height: 3.25rem;\n position: relative;\n width: 3.25rem;\n margin-left: auto; }\n #optimole-app .navbar-burger span {\n background-color: currentColor;\n display: block;\n height: 1px;\n left: calc(50% - 8px);\n position: absolute;\n transform-origin: center;\n transition-duration: 86ms;\n transition-property: background-color, opacity, transform;\n transition-timing-function: ease-out;\n width: 16px; }\n #optimole-app .navbar-burger span:nth-child(1) {\n top: calc(50% - 6px); }\n #optimole-app .navbar-burger span:nth-child(2) {\n top: calc(50% - 1px); }\n #optimole-app .navbar-burger span:nth-child(3) {\n top: calc(50% + 4px); }\n #optimole-app .navbar-burger:hover {\n background-color: rgba(0, 0, 0, 0.05); }\n #optimole-app .navbar-burger.is-active span:nth-child(1) {\n transform: translateY(5px) rotate(45deg); }\n #optimole-app .navbar-burger.is-active span:nth-child(2) {\n opacity: 0; }\n #optimole-app .navbar-burger.is-active span:nth-child(3) {\n transform: translateY(-5px) rotate(-45deg); }\n #optimole-app .navbar-menu {\n display: none; }\n #optimole-app .navbar-item,\n #optimole-app .navbar-link {\n color: #4a4a4a;\n display: block;\n line-height: 1.5;\n padding: 0.5rem 0.75rem;\n position: relative; }\n #optimole-app .navbar-item .icon:only-child,\n #optimole-app .navbar-link .icon:only-child {\n margin-left: -0.25rem;\n margin-right: -0.25rem; }\n #optimole-app a.navbar-item,\n #optimole-app .navbar-link {\n cursor: pointer; }\n #optimole-app a.navbar-item:hover, #optimole-app a.navbar-item.is-active,\n #optimole-app .navbar-link:hover,\n #optimole-app .navbar-link.is-active {\n background-color: #fafafa;\n color: #3273dc; }\n #optimole-app .navbar-item {\n display: block;\n -ms-flex-positive: 0;\n flex-grow: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0; }\n #optimole-app .navbar-item img {\n max-height: 1.75rem; }\n #optimole-app .navbar-item.has-dropdown {\n padding: 0; }\n #optimole-app .navbar-item.is-expanded {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1; }\n #optimole-app .navbar-item.is-tab {\n border-bottom: 1px solid transparent;\n min-height: 3.25rem;\n padding-bottom: calc(0.5rem - 1px); }\n #optimole-app .navbar-item.is-tab:hover {\n background-color: transparent;\n border-bottom-color: #3273dc; }\n #optimole-app .navbar-item.is-tab.is-active {\n background-color: transparent;\n border-bottom-color: #3273dc;\n border-bottom-style: solid;\n border-bottom-width: 3px;\n color: #3273dc;\n padding-bottom: calc(0.5rem - 3px); }\n #optimole-app .navbar-content {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1; }\n #optimole-app .navbar-link:not(.is-arrowless) {\n padding-right: 2.5em; }\n #optimole-app .navbar-link:not(.is-arrowless)::after {\n border-color: #3273dc;\n margin-top: -0.375em;\n right: 1.125em; }\n #optimole-app .navbar-dropdown {\n font-size: 0.875rem;\n padding-bottom: 0.5rem;\n padding-top: 0.5rem; }\n #optimole-app .navbar-dropdown .navbar-item {\n padding-left: 1.5rem;\n padding-right: 1.5rem; }\n #optimole-app .navbar-divider {\n background-color: whitesmoke;\n border: none;\n display: none;\n height: 2px;\n margin: 0.5rem 0; }\n @media screen and (max-width: 1087px) {\n #optimole-app .navbar > .container {\n display: block; }\n #optimole-app .navbar-brand .navbar-item,\n #optimole-app .navbar-tabs .navbar-item {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .navbar-link::after {\n display: none; }\n #optimole-app .navbar-menu {\n background-color: white;\n box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1);\n padding: 0.5rem 0; }\n #optimole-app .navbar-menu.is-active {\n display: block; }\n #optimole-app .navbar.is-fixed-bottom-touch, #optimole-app .navbar.is-fixed-top-touch {\n left: 0;\n position: fixed;\n right: 0;\n z-index: 30; }\n #optimole-app .navbar.is-fixed-bottom-touch {\n bottom: 0; }\n #optimole-app .navbar.is-fixed-bottom-touch.has-shadow {\n box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); }\n #optimole-app .navbar.is-fixed-top-touch {\n top: 0; }\n #optimole-app .navbar.is-fixed-top .navbar-menu, #optimole-app .navbar.is-fixed-top-touch .navbar-menu {\n -webkit-overflow-scrolling: touch;\n max-height: calc(100vh - 3.25rem);\n overflow: auto; }\n #optimole-app html.has-navbar-fixed-top-touch,\n #optimole-app body.has-navbar-fixed-top-touch {\n padding-top: 3.25rem; }\n #optimole-app html.has-navbar-fixed-bottom-touch,\n #optimole-app body.has-navbar-fixed-bottom-touch {\n padding-bottom: 3.25rem; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .navbar,\n #optimole-app .navbar-menu,\n #optimole-app .navbar-start,\n #optimole-app .navbar-end {\n -ms-flex-align: stretch;\n align-items: stretch;\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .navbar {\n min-height: 3.25rem; }\n #optimole-app .navbar.is-spaced {\n padding: 1rem 2rem; }\n #optimole-app .navbar.is-spaced .navbar-start,\n #optimole-app .navbar.is-spaced .navbar-end {\n -ms-flex-align: center;\n align-items: center; }\n #optimole-app .navbar.is-spaced a.navbar-item,\n #optimole-app .navbar.is-spaced .navbar-link {\n border-radius: 4px; }\n #optimole-app .navbar.is-transparent a.navbar-item:hover, #optimole-app .navbar.is-transparent a.navbar-item.is-active,\n #optimole-app .navbar.is-transparent .navbar-link:hover,\n #optimole-app .navbar.is-transparent .navbar-link.is-active {\n background-color: transparent !important; }\n #optimole-app .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, #optimole-app .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link {\n background-color: transparent !important; }\n #optimole-app .navbar.is-transparent .navbar-dropdown a.navbar-item:hover {\n background-color: whitesmoke;\n color: #0a0a0a; }\n #optimole-app .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active {\n background-color: whitesmoke;\n color: #3273dc; }\n #optimole-app .navbar-burger {\n display: none; }\n #optimole-app .navbar-item,\n #optimole-app .navbar-link {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .navbar-item {\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .navbar-item.has-dropdown {\n -ms-flex-align: stretch;\n align-items: stretch; }\n #optimole-app .navbar-item.has-dropdown-up .navbar-link::after {\n transform: rotate(135deg) translate(0.25em, -0.25em); }\n #optimole-app .navbar-item.has-dropdown-up .navbar-dropdown {\n border-bottom: 2px solid #dbdbdb;\n border-radius: 6px 6px 0 0;\n border-top: none;\n bottom: 100%;\n box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1);\n top: auto; }\n #optimole-app .navbar-item.is-active .navbar-dropdown, #optimole-app .navbar-item.is-hoverable:hover .navbar-dropdown {\n display: block; }\n .navbar.is-spaced #optimole-app .navbar-item.is-active .navbar-dropdown, #optimole-app .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced #optimole-app .navbar-item.is-hoverable:hover .navbar-dropdown, #optimole-app .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0); }\n #optimole-app .navbar-menu {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 0;\n flex-shrink: 0; }\n #optimole-app .navbar-start {\n -ms-flex-pack: start;\n justify-content: flex-start;\n margin-right: auto; }\n #optimole-app .navbar-end {\n -ms-flex-pack: end;\n justify-content: flex-end;\n margin-left: auto; }\n #optimole-app .navbar-dropdown {\n background-color: white;\n border-bottom-left-radius: 6px;\n border-bottom-right-radius: 6px;\n border-top: 2px solid #dbdbdb;\n box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1);\n display: none;\n font-size: 0.875rem;\n left: 0;\n min-width: 100%;\n position: absolute;\n top: 100%;\n z-index: 20; }\n #optimole-app .navbar-dropdown .navbar-item {\n padding: 0.375rem 1rem;\n white-space: nowrap; }\n #optimole-app .navbar-dropdown a.navbar-item {\n padding-right: 3rem; }\n #optimole-app .navbar-dropdown a.navbar-item:hover {\n background-color: whitesmoke;\n color: #0a0a0a; }\n #optimole-app .navbar-dropdown a.navbar-item.is-active {\n background-color: whitesmoke;\n color: #3273dc; }\n .navbar.is-spaced #optimole-app .navbar-dropdown, #optimole-app .navbar-dropdown.is-boxed {\n border-radius: 6px;\n border-top: none;\n box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);\n display: block;\n opacity: 0;\n pointer-events: none;\n top: calc(100% + (-4px));\n transform: translateY(-5px);\n transition-duration: 86ms;\n transition-property: opacity, transform; }\n #optimole-app .navbar-dropdown.is-right {\n left: auto;\n right: 0; }\n #optimole-app .navbar-divider {\n display: block; }\n #optimole-app .navbar > .container .navbar-brand,\n #optimole-app .container > .navbar .navbar-brand {\n margin-left: -.75rem; }\n #optimole-app .navbar > .container .navbar-menu,\n #optimole-app .container > .navbar .navbar-menu {\n margin-right: -.75rem; }\n #optimole-app .navbar.is-fixed-bottom-desktop, #optimole-app .navbar.is-fixed-top-desktop {\n left: 0;\n position: fixed;\n right: 0;\n z-index: 30; }\n #optimole-app .navbar.is-fixed-bottom-desktop {\n bottom: 0; }\n #optimole-app .navbar.is-fixed-bottom-desktop.has-shadow {\n box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); }\n #optimole-app .navbar.is-fixed-top-desktop {\n top: 0; }\n #optimole-app html.has-navbar-fixed-top-desktop,\n #optimole-app body.has-navbar-fixed-top-desktop {\n padding-top: 3.25rem; }\n #optimole-app html.has-navbar-fixed-bottom-desktop,\n #optimole-app body.has-navbar-fixed-bottom-desktop {\n padding-bottom: 3.25rem; }\n #optimole-app html.has-spaced-navbar-fixed-top,\n #optimole-app body.has-spaced-navbar-fixed-top {\n padding-top: 5.25rem; }\n #optimole-app html.has-spaced-navbar-fixed-bottom,\n #optimole-app body.has-spaced-navbar-fixed-bottom {\n padding-bottom: 5.25rem; }\n #optimole-app a.navbar-item.is-active,\n #optimole-app .navbar-link.is-active {\n color: #0a0a0a; }\n #optimole-app a.navbar-item.is-active:not(:hover),\n #optimole-app .navbar-link.is-active:not(:hover) {\n background-color: transparent; }\n #optimole-app .navbar-item.has-dropdown:hover .navbar-link, #optimole-app .navbar-item.has-dropdown.is-active .navbar-link {\n background-color: #fafafa; } }\n #optimole-app .hero.is-fullheight-with-navbar {\n min-height: calc(100vh - 3.25rem); }\n #optimole-app .pagination {\n font-size: 1rem;\n margin: -0.25rem; }\n #optimole-app .pagination.is-small {\n font-size: 0.75rem; }\n #optimole-app .pagination.is-medium {\n font-size: 1.25rem; }\n #optimole-app .pagination.is-large {\n font-size: 1.5rem; }\n #optimole-app .pagination.is-rounded .pagination-previous,\n #optimole-app .pagination.is-rounded .pagination-next {\n padding-left: 1em;\n padding-right: 1em;\n border-radius: 290486px; }\n #optimole-app .pagination.is-rounded .pagination-link {\n border-radius: 290486px; }\n #optimole-app .pagination,\n #optimole-app .pagination-list {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n text-align: center; }\n #optimole-app .pagination-previous,\n #optimole-app .pagination-next,\n #optimole-app .pagination-link,\n #optimole-app .pagination-ellipsis {\n font-size: 1em;\n padding-left: 0.5em;\n padding-right: 0.5em;\n -ms-flex-pack: center;\n justify-content: center;\n margin: 0.25rem;\n text-align: center; }\n #optimole-app .pagination-previous,\n #optimole-app .pagination-next,\n #optimole-app .pagination-link {\n border-color: #dbdbdb;\n color: #363636;\n min-width: 2.25em; }\n #optimole-app .pagination-previous:hover,\n #optimole-app .pagination-next:hover,\n #optimole-app .pagination-link:hover {\n border-color: #b5b5b5;\n color: #363636; }\n #optimole-app .pagination-previous:focus,\n #optimole-app .pagination-next:focus,\n #optimole-app .pagination-link:focus {\n border-color: #3273dc; }\n #optimole-app .pagination-previous:active,\n #optimole-app .pagination-next:active,\n #optimole-app .pagination-link:active {\n box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); }\n #optimole-app .pagination-previous[disabled],\n #optimole-app .pagination-next[disabled],\n #optimole-app .pagination-link[disabled] {\n background-color: #dbdbdb;\n border-color: #dbdbdb;\n box-shadow: none;\n color: #7a7a7a;\n opacity: 0.5; }\n #optimole-app .pagination-previous,\n #optimole-app .pagination-next {\n padding-left: 0.75em;\n padding-right: 0.75em;\n white-space: nowrap; }\n #optimole-app .pagination-link.is-current {\n background-color: #3273dc;\n border-color: #3273dc;\n color: #fff; }\n #optimole-app .pagination-ellipsis {\n color: #b5b5b5;\n pointer-events: none; }\n #optimole-app .pagination-list {\n -ms-flex-wrap: wrap;\n flex-wrap: wrap; }\n @media screen and (max-width: 768px) {\n #optimole-app .pagination {\n -ms-flex-wrap: wrap;\n flex-wrap: wrap; }\n #optimole-app .pagination-previous,\n #optimole-app .pagination-next {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1; }\n #optimole-app .pagination-list li {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .pagination-list {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1;\n -ms-flex-pack: start;\n justify-content: flex-start;\n -ms-flex-order: 1;\n order: 1; }\n #optimole-app .pagination-previous {\n -ms-flex-order: 2;\n order: 2; }\n #optimole-app .pagination-next {\n -ms-flex-order: 3;\n order: 3; }\n #optimole-app .pagination {\n -ms-flex-pack: justify;\n justify-content: space-between; }\n #optimole-app .pagination.is-centered .pagination-previous {\n -ms-flex-order: 1;\n order: 1; }\n #optimole-app .pagination.is-centered .pagination-list {\n -ms-flex-pack: center;\n justify-content: center;\n -ms-flex-order: 2;\n order: 2; }\n #optimole-app .pagination.is-centered .pagination-next {\n -ms-flex-order: 3;\n order: 3; }\n #optimole-app .pagination.is-right .pagination-previous {\n -ms-flex-order: 1;\n order: 1; }\n #optimole-app .pagination.is-right .pagination-next {\n -ms-flex-order: 2;\n order: 2; }\n #optimole-app .pagination.is-right .pagination-list {\n -ms-flex-pack: end;\n justify-content: flex-end;\n -ms-flex-order: 3;\n order: 3; } }\n #optimole-app .panel {\n font-size: 1rem; }\n #optimole-app .panel:not(:last-child) {\n margin-bottom: 1.5rem; }\n #optimole-app .panel-heading,\n #optimole-app .panel-tabs,\n #optimole-app .panel-block {\n border-bottom: 1px solid #dbdbdb;\n border-left: 1px solid #dbdbdb;\n border-right: 1px solid #dbdbdb; }\n #optimole-app .panel-heading:first-child,\n #optimole-app .panel-tabs:first-child,\n #optimole-app .panel-block:first-child {\n border-top: 1px solid #dbdbdb; }\n #optimole-app .panel-heading {\n background-color: whitesmoke;\n border-radius: 4px 4px 0 0;\n color: #363636;\n font-size: 1.25em;\n font-weight: 300;\n line-height: 1.25;\n padding: 0.5em 0.75em; }\n #optimole-app .panel-tabs {\n -ms-flex-align: end;\n align-items: flex-end;\n display: -ms-flexbox;\n display: flex;\n font-size: 0.875em;\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .panel-tabs a {\n border-bottom: 1px solid #dbdbdb;\n margin-bottom: -1px;\n padding: 0.5em; }\n #optimole-app .panel-tabs a.is-active {\n border-bottom-color: #4a4a4a;\n color: #363636; }\n #optimole-app .panel-list a {\n color: #4a4a4a; }\n #optimole-app .panel-list a:hover {\n color: #3273dc; }\n #optimole-app .panel-block {\n -ms-flex-align: center;\n align-items: center;\n color: #363636;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: start;\n justify-content: flex-start;\n padding: 0.5em 0.75em; }\n #optimole-app .panel-block input[type=\"checkbox\"] {\n margin-right: 0.75em; }\n #optimole-app .panel-block > .control {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1;\n width: 100%; }\n #optimole-app .panel-block.is-wrapped {\n -ms-flex-wrap: wrap;\n flex-wrap: wrap; }\n #optimole-app .panel-block.is-active {\n border-left-color: #3273dc;\n color: #363636; }\n #optimole-app .panel-block.is-active .panel-icon {\n color: #3273dc; }\n #optimole-app a.panel-block,\n #optimole-app label.panel-block {\n cursor: pointer; }\n #optimole-app a.panel-block:hover,\n #optimole-app label.panel-block:hover {\n background-color: whitesmoke; }\n #optimole-app .panel-icon {\n display: inline-block;\n font-size: 14px;\n height: 1em;\n line-height: 1em;\n text-align: center;\n vertical-align: top;\n width: 1em;\n color: #7a7a7a;\n margin-right: 0.75em; }\n #optimole-app .panel-icon .fa {\n font-size: inherit;\n line-height: inherit; }\n #optimole-app .tabs {\n -webkit-overflow-scrolling: touch;\n -ms-flex-align: stretch;\n align-items: stretch;\n display: -ms-flexbox;\n display: flex;\n font-size: 1rem;\n -ms-flex-pack: justify;\n justify-content: space-between;\n overflow: hidden;\n overflow-x: auto;\n white-space: nowrap; }\n #optimole-app .tabs a {\n -ms-flex-align: center;\n align-items: center;\n border-bottom-color: #dbdbdb;\n border-bottom-style: solid;\n border-bottom-width: 1px;\n color: #4a4a4a;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n margin-bottom: -1px;\n padding: 0.5em 1em;\n vertical-align: top; }\n #optimole-app .tabs a:hover {\n border-bottom-color: #363636;\n color: #363636; }\n #optimole-app .tabs li {\n display: block; }\n #optimole-app .tabs li.is-active a {\n border-bottom-color: #3273dc;\n color: #3273dc; }\n #optimole-app .tabs ul {\n -ms-flex-align: center;\n align-items: center;\n border-bottom-color: #dbdbdb;\n border-bottom-style: solid;\n border-bottom-width: 1px;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n -ms-flex-pack: start;\n justify-content: flex-start; }\n #optimole-app .tabs ul.is-left {\n padding-right: 0.75em; }\n #optimole-app .tabs ul.is-center {\n -ms-flex: none;\n flex: none;\n -ms-flex-pack: center;\n justify-content: center;\n padding-left: 0.75em;\n padding-right: 0.75em; }\n #optimole-app .tabs ul.is-right {\n -ms-flex-pack: end;\n justify-content: flex-end;\n padding-left: 0.75em; }\n #optimole-app .tabs .icon:first-child {\n margin-right: 0.5em; }\n #optimole-app .tabs .icon:last-child {\n margin-left: 0.5em; }\n #optimole-app .tabs.is-centered ul {\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .tabs.is-right ul {\n -ms-flex-pack: end;\n justify-content: flex-end; }\n #optimole-app .tabs.is-boxed a {\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0; }\n #optimole-app .tabs.is-boxed a:hover {\n background-color: whitesmoke;\n border-bottom-color: #dbdbdb; }\n #optimole-app .tabs.is-boxed li.is-active a {\n background-color: white;\n border-color: #dbdbdb;\n border-bottom-color: transparent !important; }\n #optimole-app .tabs.is-fullwidth li {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 0;\n flex-shrink: 0; }\n #optimole-app .tabs.is-toggle a {\n border-color: #dbdbdb;\n border-style: solid;\n border-width: 1px;\n margin-bottom: 0;\n position: relative; }\n #optimole-app .tabs.is-toggle a:hover {\n background-color: whitesmoke;\n border-color: #b5b5b5;\n z-index: 2; }\n #optimole-app .tabs.is-toggle li + li {\n margin-left: -1px; }\n #optimole-app .tabs.is-toggle li:first-child a {\n border-radius: 4px 0 0 4px; }\n #optimole-app .tabs.is-toggle li:last-child a {\n border-radius: 0 4px 4px 0; }\n #optimole-app .tabs.is-toggle li.is-active a {\n background-color: #3273dc;\n border-color: #3273dc;\n color: #fff;\n z-index: 1; }\n #optimole-app .tabs.is-toggle ul {\n border-bottom: none; }\n #optimole-app .tabs.is-toggle.is-toggle-rounded li:first-child a {\n border-bottom-left-radius: 290486px;\n border-top-left-radius: 290486px;\n padding-left: 1.25em; }\n #optimole-app .tabs.is-toggle.is-toggle-rounded li:last-child a {\n border-bottom-right-radius: 290486px;\n border-top-right-radius: 290486px;\n padding-right: 1.25em; }\n #optimole-app .tabs.is-small {\n font-size: 0.75rem; }\n #optimole-app .tabs.is-medium {\n font-size: 1.25rem; }\n #optimole-app .tabs.is-large {\n font-size: 1.5rem; }\n #optimole-app .column {\n display: block;\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1;\n padding: 0.75rem; }\n .columns.is-mobile > #optimole-app .column.is-narrow {\n -ms-flex: none;\n flex: none; }\n .columns.is-mobile > #optimole-app .column.is-full {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n .columns.is-mobile > #optimole-app .column.is-three-quarters {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n .columns.is-mobile > #optimole-app .column.is-two-thirds {\n -ms-flex: none;\n flex: none;\n width: 66.6666%; }\n .columns.is-mobile > #optimole-app .column.is-half {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n .columns.is-mobile > #optimole-app .column.is-one-third {\n -ms-flex: none;\n flex: none;\n width: 33.3333%; }\n .columns.is-mobile > #optimole-app .column.is-one-quarter {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n .columns.is-mobile > #optimole-app .column.is-one-fifth {\n -ms-flex: none;\n flex: none;\n width: 20%; }\n .columns.is-mobile > #optimole-app .column.is-two-fifths {\n -ms-flex: none;\n flex: none;\n width: 40%; }\n .columns.is-mobile > #optimole-app .column.is-three-fifths {\n -ms-flex: none;\n flex: none;\n width: 60%; }\n .columns.is-mobile > #optimole-app .column.is-four-fifths {\n -ms-flex: none;\n flex: none;\n width: 80%; }\n .columns.is-mobile > #optimole-app .column.is-offset-three-quarters {\n margin-left: 75%; }\n .columns.is-mobile > #optimole-app .column.is-offset-two-thirds {\n margin-left: 66.6666%; }\n .columns.is-mobile > #optimole-app .column.is-offset-half {\n margin-left: 50%; }\n .columns.is-mobile > #optimole-app .column.is-offset-one-third {\n margin-left: 33.3333%; }\n .columns.is-mobile > #optimole-app .column.is-offset-one-quarter {\n margin-left: 25%; }\n .columns.is-mobile > #optimole-app .column.is-offset-one-fifth {\n margin-left: 20%; }\n .columns.is-mobile > #optimole-app .column.is-offset-two-fifths {\n margin-left: 40%; }\n .columns.is-mobile > #optimole-app .column.is-offset-three-fifths {\n margin-left: 60%; }\n .columns.is-mobile > #optimole-app .column.is-offset-four-fifths {\n margin-left: 80%; }\n .columns.is-mobile > #optimole-app .column.is-1 {\n -ms-flex: none;\n flex: none;\n width: 8.33333%; }\n .columns.is-mobile > #optimole-app .column.is-offset-1 {\n margin-left: 8.33333%; }\n .columns.is-mobile > #optimole-app .column.is-2 {\n -ms-flex: none;\n flex: none;\n width: 16.66667%; }\n .columns.is-mobile > #optimole-app .column.is-offset-2 {\n margin-left: 16.66667%; }\n .columns.is-mobile > #optimole-app .column.is-3 {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n .columns.is-mobile > #optimole-app .column.is-offset-3 {\n margin-left: 25%; }\n .columns.is-mobile > #optimole-app .column.is-4 {\n -ms-flex: none;\n flex: none;\n width: 33.33333%; }\n .columns.is-mobile > #optimole-app .column.is-offset-4 {\n margin-left: 33.33333%; }\n .columns.is-mobile > #optimole-app .column.is-5 {\n -ms-flex: none;\n flex: none;\n width: 41.66667%; }\n .columns.is-mobile > #optimole-app .column.is-offset-5 {\n margin-left: 41.66667%; }\n .columns.is-mobile > #optimole-app .column.is-6 {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n .columns.is-mobile > #optimole-app .column.is-offset-6 {\n margin-left: 50%; }\n .columns.is-mobile > #optimole-app .column.is-7 {\n -ms-flex: none;\n flex: none;\n width: 58.33333%; }\n .columns.is-mobile > #optimole-app .column.is-offset-7 {\n margin-left: 58.33333%; }\n .columns.is-mobile > #optimole-app .column.is-8 {\n -ms-flex: none;\n flex: none;\n width: 66.66667%; }\n .columns.is-mobile > #optimole-app .column.is-offset-8 {\n margin-left: 66.66667%; }\n .columns.is-mobile > #optimole-app .column.is-9 {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n .columns.is-mobile > #optimole-app .column.is-offset-9 {\n margin-left: 75%; }\n .columns.is-mobile > #optimole-app .column.is-10 {\n -ms-flex: none;\n flex: none;\n width: 83.33333%; }\n .columns.is-mobile > #optimole-app .column.is-offset-10 {\n margin-left: 83.33333%; }\n .columns.is-mobile > #optimole-app .column.is-11 {\n -ms-flex: none;\n flex: none;\n width: 91.66667%; }\n .columns.is-mobile > #optimole-app .column.is-offset-11 {\n margin-left: 91.66667%; }\n .columns.is-mobile > #optimole-app .column.is-12 {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n .columns.is-mobile > #optimole-app .column.is-offset-12 {\n margin-left: 100%; }\n @media screen and (max-width: 768px) {\n #optimole-app .column.is-narrow-mobile {\n -ms-flex: none;\n flex: none; }\n #optimole-app .column.is-full-mobile {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-three-quarters-mobile {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-two-thirds-mobile {\n -ms-flex: none;\n flex: none;\n width: 66.6666%; }\n #optimole-app .column.is-half-mobile {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-one-third-mobile {\n -ms-flex: none;\n flex: none;\n width: 33.3333%; }\n #optimole-app .column.is-one-quarter-mobile {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-one-fifth-mobile {\n -ms-flex: none;\n flex: none;\n width: 20%; }\n #optimole-app .column.is-two-fifths-mobile {\n -ms-flex: none;\n flex: none;\n width: 40%; }\n #optimole-app .column.is-three-fifths-mobile {\n -ms-flex: none;\n flex: none;\n width: 60%; }\n #optimole-app .column.is-four-fifths-mobile {\n -ms-flex: none;\n flex: none;\n width: 80%; }\n #optimole-app .column.is-offset-three-quarters-mobile {\n margin-left: 75%; }\n #optimole-app .column.is-offset-two-thirds-mobile {\n margin-left: 66.6666%; }\n #optimole-app .column.is-offset-half-mobile {\n margin-left: 50%; }\n #optimole-app .column.is-offset-one-third-mobile {\n margin-left: 33.3333%; }\n #optimole-app .column.is-offset-one-quarter-mobile {\n margin-left: 25%; }\n #optimole-app .column.is-offset-one-fifth-mobile {\n margin-left: 20%; }\n #optimole-app .column.is-offset-two-fifths-mobile {\n margin-left: 40%; }\n #optimole-app .column.is-offset-three-fifths-mobile {\n margin-left: 60%; }\n #optimole-app .column.is-offset-four-fifths-mobile {\n margin-left: 80%; }\n #optimole-app .column.is-1-mobile {\n -ms-flex: none;\n flex: none;\n width: 8.33333%; }\n #optimole-app .column.is-offset-1-mobile {\n margin-left: 8.33333%; }\n #optimole-app .column.is-2-mobile {\n -ms-flex: none;\n flex: none;\n width: 16.66667%; }\n #optimole-app .column.is-offset-2-mobile {\n margin-left: 16.66667%; }\n #optimole-app .column.is-3-mobile {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-offset-3-mobile {\n margin-left: 25%; }\n #optimole-app .column.is-4-mobile {\n -ms-flex: none;\n flex: none;\n width: 33.33333%; }\n #optimole-app .column.is-offset-4-mobile {\n margin-left: 33.33333%; }\n #optimole-app .column.is-5-mobile {\n -ms-flex: none;\n flex: none;\n width: 41.66667%; }\n #optimole-app .column.is-offset-5-mobile {\n margin-left: 41.66667%; }\n #optimole-app .column.is-6-mobile {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-offset-6-mobile {\n margin-left: 50%; }\n #optimole-app .column.is-7-mobile {\n -ms-flex: none;\n flex: none;\n width: 58.33333%; }\n #optimole-app .column.is-offset-7-mobile {\n margin-left: 58.33333%; }\n #optimole-app .column.is-8-mobile {\n -ms-flex: none;\n flex: none;\n width: 66.66667%; }\n #optimole-app .column.is-offset-8-mobile {\n margin-left: 66.66667%; }\n #optimole-app .column.is-9-mobile {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-offset-9-mobile {\n margin-left: 75%; }\n #optimole-app .column.is-10-mobile {\n -ms-flex: none;\n flex: none;\n width: 83.33333%; }\n #optimole-app .column.is-offset-10-mobile {\n margin-left: 83.33333%; }\n #optimole-app .column.is-11-mobile {\n -ms-flex: none;\n flex: none;\n width: 91.66667%; }\n #optimole-app .column.is-offset-11-mobile {\n margin-left: 91.66667%; }\n #optimole-app .column.is-12-mobile {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-offset-12-mobile {\n margin-left: 100%; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .column.is-narrow, #optimole-app .column.is-narrow-tablet {\n -ms-flex: none;\n flex: none; }\n #optimole-app .column.is-full, #optimole-app .column.is-full-tablet {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-three-quarters, #optimole-app .column.is-three-quarters-tablet {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-two-thirds, #optimole-app .column.is-two-thirds-tablet {\n -ms-flex: none;\n flex: none;\n width: 66.6666%; }\n #optimole-app .column.is-half, #optimole-app .column.is-half-tablet {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-one-third, #optimole-app .column.is-one-third-tablet {\n -ms-flex: none;\n flex: none;\n width: 33.3333%; }\n #optimole-app .column.is-one-quarter, #optimole-app .column.is-one-quarter-tablet {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-one-fifth, #optimole-app .column.is-one-fifth-tablet {\n -ms-flex: none;\n flex: none;\n width: 20%; }\n #optimole-app .column.is-two-fifths, #optimole-app .column.is-two-fifths-tablet {\n -ms-flex: none;\n flex: none;\n width: 40%; }\n #optimole-app .column.is-three-fifths, #optimole-app .column.is-three-fifths-tablet {\n -ms-flex: none;\n flex: none;\n width: 60%; }\n #optimole-app .column.is-four-fifths, #optimole-app .column.is-four-fifths-tablet {\n -ms-flex: none;\n flex: none;\n width: 80%; }\n #optimole-app .column.is-offset-three-quarters, #optimole-app .column.is-offset-three-quarters-tablet {\n margin-left: 75%; }\n #optimole-app .column.is-offset-two-thirds, #optimole-app .column.is-offset-two-thirds-tablet {\n margin-left: 66.6666%; }\n #optimole-app .column.is-offset-half, #optimole-app .column.is-offset-half-tablet {\n margin-left: 50%; }\n #optimole-app .column.is-offset-one-third, #optimole-app .column.is-offset-one-third-tablet {\n margin-left: 33.3333%; }\n #optimole-app .column.is-offset-one-quarter, #optimole-app .column.is-offset-one-quarter-tablet {\n margin-left: 25%; }\n #optimole-app .column.is-offset-one-fifth, #optimole-app .column.is-offset-one-fifth-tablet {\n margin-left: 20%; }\n #optimole-app .column.is-offset-two-fifths, #optimole-app .column.is-offset-two-fifths-tablet {\n margin-left: 40%; }\n #optimole-app .column.is-offset-three-fifths, #optimole-app .column.is-offset-three-fifths-tablet {\n margin-left: 60%; }\n #optimole-app .column.is-offset-four-fifths, #optimole-app .column.is-offset-four-fifths-tablet {\n margin-left: 80%; }\n #optimole-app .column.is-1, #optimole-app .column.is-1-tablet {\n -ms-flex: none;\n flex: none;\n width: 8.33333%; }\n #optimole-app .column.is-offset-1, #optimole-app .column.is-offset-1-tablet {\n margin-left: 8.33333%; }\n #optimole-app .column.is-2, #optimole-app .column.is-2-tablet {\n -ms-flex: none;\n flex: none;\n width: 16.66667%; }\n #optimole-app .column.is-offset-2, #optimole-app .column.is-offset-2-tablet {\n margin-left: 16.66667%; }\n #optimole-app .column.is-3, #optimole-app .column.is-3-tablet {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-offset-3, #optimole-app .column.is-offset-3-tablet {\n margin-left: 25%; }\n #optimole-app .column.is-4, #optimole-app .column.is-4-tablet {\n -ms-flex: none;\n flex: none;\n width: 33.33333%; }\n #optimole-app .column.is-offset-4, #optimole-app .column.is-offset-4-tablet {\n margin-left: 33.33333%; }\n #optimole-app .column.is-5, #optimole-app .column.is-5-tablet {\n -ms-flex: none;\n flex: none;\n width: 41.66667%; }\n #optimole-app .column.is-offset-5, #optimole-app .column.is-offset-5-tablet {\n margin-left: 41.66667%; }\n #optimole-app .column.is-6, #optimole-app .column.is-6-tablet {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-offset-6, #optimole-app .column.is-offset-6-tablet {\n margin-left: 50%; }\n #optimole-app .column.is-7, #optimole-app .column.is-7-tablet {\n -ms-flex: none;\n flex: none;\n width: 58.33333%; }\n #optimole-app .column.is-offset-7, #optimole-app .column.is-offset-7-tablet {\n margin-left: 58.33333%; }\n #optimole-app .column.is-8, #optimole-app .column.is-8-tablet {\n -ms-flex: none;\n flex: none;\n width: 66.66667%; }\n #optimole-app .column.is-offset-8, #optimole-app .column.is-offset-8-tablet {\n margin-left: 66.66667%; }\n #optimole-app .column.is-9, #optimole-app .column.is-9-tablet {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-offset-9, #optimole-app .column.is-offset-9-tablet {\n margin-left: 75%; }\n #optimole-app .column.is-10, #optimole-app .column.is-10-tablet {\n -ms-flex: none;\n flex: none;\n width: 83.33333%; }\n #optimole-app .column.is-offset-10, #optimole-app .column.is-offset-10-tablet {\n margin-left: 83.33333%; }\n #optimole-app .column.is-11, #optimole-app .column.is-11-tablet {\n -ms-flex: none;\n flex: none;\n width: 91.66667%; }\n #optimole-app .column.is-offset-11, #optimole-app .column.is-offset-11-tablet {\n margin-left: 91.66667%; }\n #optimole-app .column.is-12, #optimole-app .column.is-12-tablet {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-offset-12, #optimole-app .column.is-offset-12-tablet {\n margin-left: 100%; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .column.is-narrow-touch {\n -ms-flex: none;\n flex: none; }\n #optimole-app .column.is-full-touch {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-three-quarters-touch {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-two-thirds-touch {\n -ms-flex: none;\n flex: none;\n width: 66.6666%; }\n #optimole-app .column.is-half-touch {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-one-third-touch {\n -ms-flex: none;\n flex: none;\n width: 33.3333%; }\n #optimole-app .column.is-one-quarter-touch {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-one-fifth-touch {\n -ms-flex: none;\n flex: none;\n width: 20%; }\n #optimole-app .column.is-two-fifths-touch {\n -ms-flex: none;\n flex: none;\n width: 40%; }\n #optimole-app .column.is-three-fifths-touch {\n -ms-flex: none;\n flex: none;\n width: 60%; }\n #optimole-app .column.is-four-fifths-touch {\n -ms-flex: none;\n flex: none;\n width: 80%; }\n #optimole-app .column.is-offset-three-quarters-touch {\n margin-left: 75%; }\n #optimole-app .column.is-offset-two-thirds-touch {\n margin-left: 66.6666%; }\n #optimole-app .column.is-offset-half-touch {\n margin-left: 50%; }\n #optimole-app .column.is-offset-one-third-touch {\n margin-left: 33.3333%; }\n #optimole-app .column.is-offset-one-quarter-touch {\n margin-left: 25%; }\n #optimole-app .column.is-offset-one-fifth-touch {\n margin-left: 20%; }\n #optimole-app .column.is-offset-two-fifths-touch {\n margin-left: 40%; }\n #optimole-app .column.is-offset-three-fifths-touch {\n margin-left: 60%; }\n #optimole-app .column.is-offset-four-fifths-touch {\n margin-left: 80%; }\n #optimole-app .column.is-1-touch {\n -ms-flex: none;\n flex: none;\n width: 8.33333%; }\n #optimole-app .column.is-offset-1-touch {\n margin-left: 8.33333%; }\n #optimole-app .column.is-2-touch {\n -ms-flex: none;\n flex: none;\n width: 16.66667%; }\n #optimole-app .column.is-offset-2-touch {\n margin-left: 16.66667%; }\n #optimole-app .column.is-3-touch {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-offset-3-touch {\n margin-left: 25%; }\n #optimole-app .column.is-4-touch {\n -ms-flex: none;\n flex: none;\n width: 33.33333%; }\n #optimole-app .column.is-offset-4-touch {\n margin-left: 33.33333%; }\n #optimole-app .column.is-5-touch {\n -ms-flex: none;\n flex: none;\n width: 41.66667%; }\n #optimole-app .column.is-offset-5-touch {\n margin-left: 41.66667%; }\n #optimole-app .column.is-6-touch {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-offset-6-touch {\n margin-left: 50%; }\n #optimole-app .column.is-7-touch {\n -ms-flex: none;\n flex: none;\n width: 58.33333%; }\n #optimole-app .column.is-offset-7-touch {\n margin-left: 58.33333%; }\n #optimole-app .column.is-8-touch {\n -ms-flex: none;\n flex: none;\n width: 66.66667%; }\n #optimole-app .column.is-offset-8-touch {\n margin-left: 66.66667%; }\n #optimole-app .column.is-9-touch {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-offset-9-touch {\n margin-left: 75%; }\n #optimole-app .column.is-10-touch {\n -ms-flex: none;\n flex: none;\n width: 83.33333%; }\n #optimole-app .column.is-offset-10-touch {\n margin-left: 83.33333%; }\n #optimole-app .column.is-11-touch {\n -ms-flex: none;\n flex: none;\n width: 91.66667%; }\n #optimole-app .column.is-offset-11-touch {\n margin-left: 91.66667%; }\n #optimole-app .column.is-12-touch {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-offset-12-touch {\n margin-left: 100%; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .column.is-narrow-desktop {\n -ms-flex: none;\n flex: none; }\n #optimole-app .column.is-full-desktop {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-three-quarters-desktop {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-two-thirds-desktop {\n -ms-flex: none;\n flex: none;\n width: 66.6666%; }\n #optimole-app .column.is-half-desktop {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-one-third-desktop {\n -ms-flex: none;\n flex: none;\n width: 33.3333%; }\n #optimole-app .column.is-one-quarter-desktop {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-one-fifth-desktop {\n -ms-flex: none;\n flex: none;\n width: 20%; }\n #optimole-app .column.is-two-fifths-desktop {\n -ms-flex: none;\n flex: none;\n width: 40%; }\n #optimole-app .column.is-three-fifths-desktop {\n -ms-flex: none;\n flex: none;\n width: 60%; }\n #optimole-app .column.is-four-fifths-desktop {\n -ms-flex: none;\n flex: none;\n width: 80%; }\n #optimole-app .column.is-offset-three-quarters-desktop {\n margin-left: 75%; }\n #optimole-app .column.is-offset-two-thirds-desktop {\n margin-left: 66.6666%; }\n #optimole-app .column.is-offset-half-desktop {\n margin-left: 50%; }\n #optimole-app .column.is-offset-one-third-desktop {\n margin-left: 33.3333%; }\n #optimole-app .column.is-offset-one-quarter-desktop {\n margin-left: 25%; }\n #optimole-app .column.is-offset-one-fifth-desktop {\n margin-left: 20%; }\n #optimole-app .column.is-offset-two-fifths-desktop {\n margin-left: 40%; }\n #optimole-app .column.is-offset-three-fifths-desktop {\n margin-left: 60%; }\n #optimole-app .column.is-offset-four-fifths-desktop {\n margin-left: 80%; }\n #optimole-app .column.is-1-desktop {\n -ms-flex: none;\n flex: none;\n width: 8.33333%; }\n #optimole-app .column.is-offset-1-desktop {\n margin-left: 8.33333%; }\n #optimole-app .column.is-2-desktop {\n -ms-flex: none;\n flex: none;\n width: 16.66667%; }\n #optimole-app .column.is-offset-2-desktop {\n margin-left: 16.66667%; }\n #optimole-app .column.is-3-desktop {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-offset-3-desktop {\n margin-left: 25%; }\n #optimole-app .column.is-4-desktop {\n -ms-flex: none;\n flex: none;\n width: 33.33333%; }\n #optimole-app .column.is-offset-4-desktop {\n margin-left: 33.33333%; }\n #optimole-app .column.is-5-desktop {\n -ms-flex: none;\n flex: none;\n width: 41.66667%; }\n #optimole-app .column.is-offset-5-desktop {\n margin-left: 41.66667%; }\n #optimole-app .column.is-6-desktop {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-offset-6-desktop {\n margin-left: 50%; }\n #optimole-app .column.is-7-desktop {\n -ms-flex: none;\n flex: none;\n width: 58.33333%; }\n #optimole-app .column.is-offset-7-desktop {\n margin-left: 58.33333%; }\n #optimole-app .column.is-8-desktop {\n -ms-flex: none;\n flex: none;\n width: 66.66667%; }\n #optimole-app .column.is-offset-8-desktop {\n margin-left: 66.66667%; }\n #optimole-app .column.is-9-desktop {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-offset-9-desktop {\n margin-left: 75%; }\n #optimole-app .column.is-10-desktop {\n -ms-flex: none;\n flex: none;\n width: 83.33333%; }\n #optimole-app .column.is-offset-10-desktop {\n margin-left: 83.33333%; }\n #optimole-app .column.is-11-desktop {\n -ms-flex: none;\n flex: none;\n width: 91.66667%; }\n #optimole-app .column.is-offset-11-desktop {\n margin-left: 91.66667%; }\n #optimole-app .column.is-12-desktop {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-offset-12-desktop {\n margin-left: 100%; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .column.is-narrow-widescreen {\n -ms-flex: none;\n flex: none; }\n #optimole-app .column.is-full-widescreen {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-three-quarters-widescreen {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-two-thirds-widescreen {\n -ms-flex: none;\n flex: none;\n width: 66.6666%; }\n #optimole-app .column.is-half-widescreen {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-one-third-widescreen {\n -ms-flex: none;\n flex: none;\n width: 33.3333%; }\n #optimole-app .column.is-one-quarter-widescreen {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-one-fifth-widescreen {\n -ms-flex: none;\n flex: none;\n width: 20%; }\n #optimole-app .column.is-two-fifths-widescreen {\n -ms-flex: none;\n flex: none;\n width: 40%; }\n #optimole-app .column.is-three-fifths-widescreen {\n -ms-flex: none;\n flex: none;\n width: 60%; }\n #optimole-app .column.is-four-fifths-widescreen {\n -ms-flex: none;\n flex: none;\n width: 80%; }\n #optimole-app .column.is-offset-three-quarters-widescreen {\n margin-left: 75%; }\n #optimole-app .column.is-offset-two-thirds-widescreen {\n margin-left: 66.6666%; }\n #optimole-app .column.is-offset-half-widescreen {\n margin-left: 50%; }\n #optimole-app .column.is-offset-one-third-widescreen {\n margin-left: 33.3333%; }\n #optimole-app .column.is-offset-one-quarter-widescreen {\n margin-left: 25%; }\n #optimole-app .column.is-offset-one-fifth-widescreen {\n margin-left: 20%; }\n #optimole-app .column.is-offset-two-fifths-widescreen {\n margin-left: 40%; }\n #optimole-app .column.is-offset-three-fifths-widescreen {\n margin-left: 60%; }\n #optimole-app .column.is-offset-four-fifths-widescreen {\n margin-left: 80%; }\n #optimole-app .column.is-1-widescreen {\n -ms-flex: none;\n flex: none;\n width: 8.33333%; }\n #optimole-app .column.is-offset-1-widescreen {\n margin-left: 8.33333%; }\n #optimole-app .column.is-2-widescreen {\n -ms-flex: none;\n flex: none;\n width: 16.66667%; }\n #optimole-app .column.is-offset-2-widescreen {\n margin-left: 16.66667%; }\n #optimole-app .column.is-3-widescreen {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-offset-3-widescreen {\n margin-left: 25%; }\n #optimole-app .column.is-4-widescreen {\n -ms-flex: none;\n flex: none;\n width: 33.33333%; }\n #optimole-app .column.is-offset-4-widescreen {\n margin-left: 33.33333%; }\n #optimole-app .column.is-5-widescreen {\n -ms-flex: none;\n flex: none;\n width: 41.66667%; }\n #optimole-app .column.is-offset-5-widescreen {\n margin-left: 41.66667%; }\n #optimole-app .column.is-6-widescreen {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-offset-6-widescreen {\n margin-left: 50%; }\n #optimole-app .column.is-7-widescreen {\n -ms-flex: none;\n flex: none;\n width: 58.33333%; }\n #optimole-app .column.is-offset-7-widescreen {\n margin-left: 58.33333%; }\n #optimole-app .column.is-8-widescreen {\n -ms-flex: none;\n flex: none;\n width: 66.66667%; }\n #optimole-app .column.is-offset-8-widescreen {\n margin-left: 66.66667%; }\n #optimole-app .column.is-9-widescreen {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-offset-9-widescreen {\n margin-left: 75%; }\n #optimole-app .column.is-10-widescreen {\n -ms-flex: none;\n flex: none;\n width: 83.33333%; }\n #optimole-app .column.is-offset-10-widescreen {\n margin-left: 83.33333%; }\n #optimole-app .column.is-11-widescreen {\n -ms-flex: none;\n flex: none;\n width: 91.66667%; }\n #optimole-app .column.is-offset-11-widescreen {\n margin-left: 91.66667%; }\n #optimole-app .column.is-12-widescreen {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-offset-12-widescreen {\n margin-left: 100%; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .column.is-narrow-fullhd {\n -ms-flex: none;\n flex: none; }\n #optimole-app .column.is-full-fullhd {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-three-quarters-fullhd {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-two-thirds-fullhd {\n -ms-flex: none;\n flex: none;\n width: 66.6666%; }\n #optimole-app .column.is-half-fullhd {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-one-third-fullhd {\n -ms-flex: none;\n flex: none;\n width: 33.3333%; }\n #optimole-app .column.is-one-quarter-fullhd {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-one-fifth-fullhd {\n -ms-flex: none;\n flex: none;\n width: 20%; }\n #optimole-app .column.is-two-fifths-fullhd {\n -ms-flex: none;\n flex: none;\n width: 40%; }\n #optimole-app .column.is-three-fifths-fullhd {\n -ms-flex: none;\n flex: none;\n width: 60%; }\n #optimole-app .column.is-four-fifths-fullhd {\n -ms-flex: none;\n flex: none;\n width: 80%; }\n #optimole-app .column.is-offset-three-quarters-fullhd {\n margin-left: 75%; }\n #optimole-app .column.is-offset-two-thirds-fullhd {\n margin-left: 66.6666%; }\n #optimole-app .column.is-offset-half-fullhd {\n margin-left: 50%; }\n #optimole-app .column.is-offset-one-third-fullhd {\n margin-left: 33.3333%; }\n #optimole-app .column.is-offset-one-quarter-fullhd {\n margin-left: 25%; }\n #optimole-app .column.is-offset-one-fifth-fullhd {\n margin-left: 20%; }\n #optimole-app .column.is-offset-two-fifths-fullhd {\n margin-left: 40%; }\n #optimole-app .column.is-offset-three-fifths-fullhd {\n margin-left: 60%; }\n #optimole-app .column.is-offset-four-fifths-fullhd {\n margin-left: 80%; }\n #optimole-app .column.is-1-fullhd {\n -ms-flex: none;\n flex: none;\n width: 8.33333%; }\n #optimole-app .column.is-offset-1-fullhd {\n margin-left: 8.33333%; }\n #optimole-app .column.is-2-fullhd {\n -ms-flex: none;\n flex: none;\n width: 16.66667%; }\n #optimole-app .column.is-offset-2-fullhd {\n margin-left: 16.66667%; }\n #optimole-app .column.is-3-fullhd {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .column.is-offset-3-fullhd {\n margin-left: 25%; }\n #optimole-app .column.is-4-fullhd {\n -ms-flex: none;\n flex: none;\n width: 33.33333%; }\n #optimole-app .column.is-offset-4-fullhd {\n margin-left: 33.33333%; }\n #optimole-app .column.is-5-fullhd {\n -ms-flex: none;\n flex: none;\n width: 41.66667%; }\n #optimole-app .column.is-offset-5-fullhd {\n margin-left: 41.66667%; }\n #optimole-app .column.is-6-fullhd {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .column.is-offset-6-fullhd {\n margin-left: 50%; }\n #optimole-app .column.is-7-fullhd {\n -ms-flex: none;\n flex: none;\n width: 58.33333%; }\n #optimole-app .column.is-offset-7-fullhd {\n margin-left: 58.33333%; }\n #optimole-app .column.is-8-fullhd {\n -ms-flex: none;\n flex: none;\n width: 66.66667%; }\n #optimole-app .column.is-offset-8-fullhd {\n margin-left: 66.66667%; }\n #optimole-app .column.is-9-fullhd {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .column.is-offset-9-fullhd {\n margin-left: 75%; }\n #optimole-app .column.is-10-fullhd {\n -ms-flex: none;\n flex: none;\n width: 83.33333%; }\n #optimole-app .column.is-offset-10-fullhd {\n margin-left: 83.33333%; }\n #optimole-app .column.is-11-fullhd {\n -ms-flex: none;\n flex: none;\n width: 91.66667%; }\n #optimole-app .column.is-offset-11-fullhd {\n margin-left: 91.66667%; }\n #optimole-app .column.is-12-fullhd {\n -ms-flex: none;\n flex: none;\n width: 100%; }\n #optimole-app .column.is-offset-12-fullhd {\n margin-left: 100%; } }\n #optimole-app .columns {\n margin-left: -0.75rem;\n margin-right: -0.75rem;\n margin-top: -0.75rem; }\n #optimole-app .columns:last-child {\n margin-bottom: -0.75rem; }\n #optimole-app .columns:not(:last-child) {\n margin-bottom: calc(1.5rem - 0.75rem); }\n #optimole-app .columns.is-centered {\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .columns.is-gapless {\n margin-left: 0;\n margin-right: 0;\n margin-top: 0; }\n #optimole-app .columns.is-gapless > .column {\n margin: 0;\n padding: 0 !important; }\n #optimole-app .columns.is-gapless:not(:last-child) {\n margin-bottom: 1.5rem; }\n #optimole-app .columns.is-gapless:last-child {\n margin-bottom: 0; }\n #optimole-app .columns.is-mobile {\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .columns.is-multiline {\n -ms-flex-wrap: wrap;\n flex-wrap: wrap; }\n #optimole-app .columns.is-vcentered {\n -ms-flex-align: center;\n align-items: center; }\n @media screen and (min-width: 769px), print {\n #optimole-app .columns:not(.is-desktop) {\n display: -ms-flexbox;\n display: flex; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .columns.is-desktop {\n display: -ms-flexbox;\n display: flex; } }\n #optimole-app .columns.is-variable {\n --columnGap: 0.75rem;\n margin-left: calc(-1 * var(--columnGap));\n margin-right: calc(-1 * var(--columnGap)); }\n #optimole-app .columns.is-variable .column {\n padding-left: var(--columnGap);\n padding-right: var(--columnGap); }\n #optimole-app .columns.is-variable.is-0 {\n --columnGap: 0rem; }\n @media screen and (max-width: 768px) {\n #optimole-app .columns.is-variable.is-0-mobile {\n --columnGap: 0rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .columns.is-variable.is-0-tablet {\n --columnGap: 0rem; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-0-tablet-only {\n --columnGap: 0rem; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-0-touch {\n --columnGap: 0rem; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .columns.is-variable.is-0-desktop {\n --columnGap: 0rem; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .columns.is-variable.is-0-desktop-only {\n --columnGap: 0rem; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .columns.is-variable.is-0-widescreen {\n --columnGap: 0rem; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .columns.is-variable.is-0-widescreen-only {\n --columnGap: 0rem; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .columns.is-variable.is-0-fullhd {\n --columnGap: 0rem; } }\n #optimole-app .columns.is-variable.is-1 {\n --columnGap: 0.25rem; }\n @media screen and (max-width: 768px) {\n #optimole-app .columns.is-variable.is-1-mobile {\n --columnGap: 0.25rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .columns.is-variable.is-1-tablet {\n --columnGap: 0.25rem; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-1-tablet-only {\n --columnGap: 0.25rem; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-1-touch {\n --columnGap: 0.25rem; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .columns.is-variable.is-1-desktop {\n --columnGap: 0.25rem; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .columns.is-variable.is-1-desktop-only {\n --columnGap: 0.25rem; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .columns.is-variable.is-1-widescreen {\n --columnGap: 0.25rem; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .columns.is-variable.is-1-widescreen-only {\n --columnGap: 0.25rem; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .columns.is-variable.is-1-fullhd {\n --columnGap: 0.25rem; } }\n #optimole-app .columns.is-variable.is-2 {\n --columnGap: 0.5rem; }\n @media screen and (max-width: 768px) {\n #optimole-app .columns.is-variable.is-2-mobile {\n --columnGap: 0.5rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .columns.is-variable.is-2-tablet {\n --columnGap: 0.5rem; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-2-tablet-only {\n --columnGap: 0.5rem; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-2-touch {\n --columnGap: 0.5rem; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .columns.is-variable.is-2-desktop {\n --columnGap: 0.5rem; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .columns.is-variable.is-2-desktop-only {\n --columnGap: 0.5rem; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .columns.is-variable.is-2-widescreen {\n --columnGap: 0.5rem; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .columns.is-variable.is-2-widescreen-only {\n --columnGap: 0.5rem; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .columns.is-variable.is-2-fullhd {\n --columnGap: 0.5rem; } }\n #optimole-app .columns.is-variable.is-3 {\n --columnGap: 0.75rem; }\n @media screen and (max-width: 768px) {\n #optimole-app .columns.is-variable.is-3-mobile {\n --columnGap: 0.75rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .columns.is-variable.is-3-tablet {\n --columnGap: 0.75rem; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-3-tablet-only {\n --columnGap: 0.75rem; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-3-touch {\n --columnGap: 0.75rem; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .columns.is-variable.is-3-desktop {\n --columnGap: 0.75rem; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .columns.is-variable.is-3-desktop-only {\n --columnGap: 0.75rem; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .columns.is-variable.is-3-widescreen {\n --columnGap: 0.75rem; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .columns.is-variable.is-3-widescreen-only {\n --columnGap: 0.75rem; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .columns.is-variable.is-3-fullhd {\n --columnGap: 0.75rem; } }\n #optimole-app .columns.is-variable.is-4 {\n --columnGap: 1rem; }\n @media screen and (max-width: 768px) {\n #optimole-app .columns.is-variable.is-4-mobile {\n --columnGap: 1rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .columns.is-variable.is-4-tablet {\n --columnGap: 1rem; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-4-tablet-only {\n --columnGap: 1rem; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-4-touch {\n --columnGap: 1rem; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .columns.is-variable.is-4-desktop {\n --columnGap: 1rem; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .columns.is-variable.is-4-desktop-only {\n --columnGap: 1rem; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .columns.is-variable.is-4-widescreen {\n --columnGap: 1rem; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .columns.is-variable.is-4-widescreen-only {\n --columnGap: 1rem; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .columns.is-variable.is-4-fullhd {\n --columnGap: 1rem; } }\n #optimole-app .columns.is-variable.is-5 {\n --columnGap: 1.25rem; }\n @media screen and (max-width: 768px) {\n #optimole-app .columns.is-variable.is-5-mobile {\n --columnGap: 1.25rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .columns.is-variable.is-5-tablet {\n --columnGap: 1.25rem; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-5-tablet-only {\n --columnGap: 1.25rem; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-5-touch {\n --columnGap: 1.25rem; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .columns.is-variable.is-5-desktop {\n --columnGap: 1.25rem; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .columns.is-variable.is-5-desktop-only {\n --columnGap: 1.25rem; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .columns.is-variable.is-5-widescreen {\n --columnGap: 1.25rem; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .columns.is-variable.is-5-widescreen-only {\n --columnGap: 1.25rem; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .columns.is-variable.is-5-fullhd {\n --columnGap: 1.25rem; } }\n #optimole-app .columns.is-variable.is-6 {\n --columnGap: 1.5rem; }\n @media screen and (max-width: 768px) {\n #optimole-app .columns.is-variable.is-6-mobile {\n --columnGap: 1.5rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .columns.is-variable.is-6-tablet {\n --columnGap: 1.5rem; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-6-tablet-only {\n --columnGap: 1.5rem; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-6-touch {\n --columnGap: 1.5rem; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .columns.is-variable.is-6-desktop {\n --columnGap: 1.5rem; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .columns.is-variable.is-6-desktop-only {\n --columnGap: 1.5rem; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .columns.is-variable.is-6-widescreen {\n --columnGap: 1.5rem; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .columns.is-variable.is-6-widescreen-only {\n --columnGap: 1.5rem; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .columns.is-variable.is-6-fullhd {\n --columnGap: 1.5rem; } }\n #optimole-app .columns.is-variable.is-7 {\n --columnGap: 1.75rem; }\n @media screen and (max-width: 768px) {\n #optimole-app .columns.is-variable.is-7-mobile {\n --columnGap: 1.75rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .columns.is-variable.is-7-tablet {\n --columnGap: 1.75rem; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-7-tablet-only {\n --columnGap: 1.75rem; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-7-touch {\n --columnGap: 1.75rem; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .columns.is-variable.is-7-desktop {\n --columnGap: 1.75rem; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .columns.is-variable.is-7-desktop-only {\n --columnGap: 1.75rem; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .columns.is-variable.is-7-widescreen {\n --columnGap: 1.75rem; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .columns.is-variable.is-7-widescreen-only {\n --columnGap: 1.75rem; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .columns.is-variable.is-7-fullhd {\n --columnGap: 1.75rem; } }\n #optimole-app .columns.is-variable.is-8 {\n --columnGap: 2rem; }\n @media screen and (max-width: 768px) {\n #optimole-app .columns.is-variable.is-8-mobile {\n --columnGap: 2rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .columns.is-variable.is-8-tablet {\n --columnGap: 2rem; } }\n @media screen and (min-width: 769px) and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-8-tablet-only {\n --columnGap: 2rem; } }\n @media screen and (max-width: 1087px) {\n #optimole-app .columns.is-variable.is-8-touch {\n --columnGap: 2rem; } }\n @media screen and (min-width: 1088px) {\n #optimole-app .columns.is-variable.is-8-desktop {\n --columnGap: 2rem; } }\n @media screen and (min-width: 1088px) and (max-width: 1279px) {\n #optimole-app .columns.is-variable.is-8-desktop-only {\n --columnGap: 2rem; } }\n @media screen and (min-width: 1280px) {\n #optimole-app .columns.is-variable.is-8-widescreen {\n --columnGap: 2rem; } }\n @media screen and (min-width: 1280px) and (max-width: 1471px) {\n #optimole-app .columns.is-variable.is-8-widescreen-only {\n --columnGap: 2rem; } }\n @media screen and (min-width: 1472px) {\n #optimole-app .columns.is-variable.is-8-fullhd {\n --columnGap: 2rem; } }\n #optimole-app .tile {\n -ms-flex-align: stretch;\n align-items: stretch;\n display: block;\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1;\n min-height: -webkit-min-content;\n min-height: -moz-min-content;\n min-height: min-content; }\n #optimole-app .tile.is-ancestor {\n margin-left: -0.75rem;\n margin-right: -0.75rem;\n margin-top: -0.75rem; }\n #optimole-app .tile.is-ancestor:last-child {\n margin-bottom: -0.75rem; }\n #optimole-app .tile.is-ancestor:not(:last-child) {\n margin-bottom: 0.75rem; }\n #optimole-app .tile.is-child {\n margin: 0 !important; }\n #optimole-app .tile.is-parent {\n padding: 0.75rem; }\n #optimole-app .tile.is-vertical {\n -ms-flex-direction: column;\n flex-direction: column; }\n #optimole-app .tile.is-vertical > .tile.is-child:not(:last-child) {\n margin-bottom: 1.5rem !important; }\n @media screen and (min-width: 769px), print {\n #optimole-app .tile:not(.is-child) {\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .tile.is-1 {\n -ms-flex: none;\n flex: none;\n width: 8.33333%; }\n #optimole-app .tile.is-2 {\n -ms-flex: none;\n flex: none;\n width: 16.66667%; }\n #optimole-app .tile.is-3 {\n -ms-flex: none;\n flex: none;\n width: 25%; }\n #optimole-app .tile.is-4 {\n -ms-flex: none;\n flex: none;\n width: 33.33333%; }\n #optimole-app .tile.is-5 {\n -ms-flex: none;\n flex: none;\n width: 41.66667%; }\n #optimole-app .tile.is-6 {\n -ms-flex: none;\n flex: none;\n width: 50%; }\n #optimole-app .tile.is-7 {\n -ms-flex: none;\n flex: none;\n width: 58.33333%; }\n #optimole-app .tile.is-8 {\n -ms-flex: none;\n flex: none;\n width: 66.66667%; }\n #optimole-app .tile.is-9 {\n -ms-flex: none;\n flex: none;\n width: 75%; }\n #optimole-app .tile.is-10 {\n -ms-flex: none;\n flex: none;\n width: 83.33333%; }\n #optimole-app .tile.is-11 {\n -ms-flex: none;\n flex: none;\n width: 91.66667%; }\n #optimole-app .tile.is-12 {\n -ms-flex: none;\n flex: none;\n width: 100%; } }\n #optimole-app .hero {\n -ms-flex-align: stretch;\n align-items: stretch;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: justify;\n justify-content: space-between; }\n #optimole-app .hero .navbar {\n background: none; }\n #optimole-app .hero .tabs ul {\n border-bottom: none; }\n #optimole-app .hero.is-white {\n background-color: white;\n color: #0a0a0a; }\n #optimole-app .hero.is-white a:not(.button):not(.dropdown-item):not(.tag),\n #optimole-app .hero.is-white strong {\n color: inherit; }\n #optimole-app .hero.is-white .title {\n color: #0a0a0a; }\n #optimole-app .hero.is-white .subtitle {\n color: rgba(10, 10, 10, 0.9); }\n #optimole-app .hero.is-white .subtitle a:not(.button),\n #optimole-app .hero.is-white .subtitle strong {\n color: #0a0a0a; }\n @media screen and (max-width: 1087px) {\n #optimole-app .hero.is-white .navbar-menu {\n background-color: white; } }\n #optimole-app .hero.is-white .navbar-item,\n #optimole-app .hero.is-white .navbar-link {\n color: rgba(10, 10, 10, 0.7); }\n #optimole-app .hero.is-white a.navbar-item:hover, #optimole-app .hero.is-white a.navbar-item.is-active,\n #optimole-app .hero.is-white .navbar-link:hover,\n #optimole-app .hero.is-white .navbar-link.is-active {\n background-color: #f2f2f2;\n color: #0a0a0a; }\n #optimole-app .hero.is-white .tabs a {\n color: #0a0a0a;\n opacity: 0.9; }\n #optimole-app .hero.is-white .tabs a:hover {\n opacity: 1; }\n #optimole-app .hero.is-white .tabs li.is-active a {\n opacity: 1; }\n #optimole-app .hero.is-white .tabs.is-boxed a, #optimole-app .hero.is-white .tabs.is-toggle a {\n color: #0a0a0a; }\n #optimole-app .hero.is-white .tabs.is-boxed a:hover, #optimole-app .hero.is-white .tabs.is-toggle a:hover {\n background-color: rgba(10, 10, 10, 0.1); }\n #optimole-app .hero.is-white .tabs.is-boxed li.is-active a, #optimole-app .hero.is-white .tabs.is-boxed li.is-active a:hover, #optimole-app .hero.is-white .tabs.is-toggle li.is-active a, #optimole-app .hero.is-white .tabs.is-toggle li.is-active a:hover {\n background-color: #0a0a0a;\n border-color: #0a0a0a;\n color: white; }\n #optimole-app .hero.is-white.is-bold {\n background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); }\n @media screen and (max-width: 768px) {\n #optimole-app .hero.is-white.is-bold .navbar-menu {\n background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } }\n #optimole-app .hero.is-black {\n background-color: #0a0a0a;\n color: white; }\n #optimole-app .hero.is-black a:not(.button):not(.dropdown-item):not(.tag),\n #optimole-app .hero.is-black strong {\n color: inherit; }\n #optimole-app .hero.is-black .title {\n color: white; }\n #optimole-app .hero.is-black .subtitle {\n color: rgba(255, 255, 255, 0.9); }\n #optimole-app .hero.is-black .subtitle a:not(.button),\n #optimole-app .hero.is-black .subtitle strong {\n color: white; }\n @media screen and (max-width: 1087px) {\n #optimole-app .hero.is-black .navbar-menu {\n background-color: #0a0a0a; } }\n #optimole-app .hero.is-black .navbar-item,\n #optimole-app .hero.is-black .navbar-link {\n color: rgba(255, 255, 255, 0.7); }\n #optimole-app .hero.is-black a.navbar-item:hover, #optimole-app .hero.is-black a.navbar-item.is-active,\n #optimole-app .hero.is-black .navbar-link:hover,\n #optimole-app .hero.is-black .navbar-link.is-active {\n background-color: black;\n color: white; }\n #optimole-app .hero.is-black .tabs a {\n color: white;\n opacity: 0.9; }\n #optimole-app .hero.is-black .tabs a:hover {\n opacity: 1; }\n #optimole-app .hero.is-black .tabs li.is-active a {\n opacity: 1; }\n #optimole-app .hero.is-black .tabs.is-boxed a, #optimole-app .hero.is-black .tabs.is-toggle a {\n color: white; }\n #optimole-app .hero.is-black .tabs.is-boxed a:hover, #optimole-app .hero.is-black .tabs.is-toggle a:hover {\n background-color: rgba(10, 10, 10, 0.1); }\n #optimole-app .hero.is-black .tabs.is-boxed li.is-active a, #optimole-app .hero.is-black .tabs.is-boxed li.is-active a:hover, #optimole-app .hero.is-black .tabs.is-toggle li.is-active a, #optimole-app .hero.is-black .tabs.is-toggle li.is-active a:hover {\n background-color: white;\n border-color: white;\n color: #0a0a0a; }\n #optimole-app .hero.is-black.is-bold {\n background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); }\n @media screen and (max-width: 768px) {\n #optimole-app .hero.is-black.is-bold .navbar-menu {\n background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } }\n #optimole-app .hero.is-light {\n background-color: whitesmoke;\n color: #363636; }\n #optimole-app .hero.is-light a:not(.button):not(.dropdown-item):not(.tag),\n #optimole-app .hero.is-light strong {\n color: inherit; }\n #optimole-app .hero.is-light .title {\n color: #363636; }\n #optimole-app .hero.is-light .subtitle {\n color: rgba(54, 54, 54, 0.9); }\n #optimole-app .hero.is-light .subtitle a:not(.button),\n #optimole-app .hero.is-light .subtitle strong {\n color: #363636; }\n @media screen and (max-width: 1087px) {\n #optimole-app .hero.is-light .navbar-menu {\n background-color: whitesmoke; } }\n #optimole-app .hero.is-light .navbar-item,\n #optimole-app .hero.is-light .navbar-link {\n color: rgba(54, 54, 54, 0.7); }\n #optimole-app .hero.is-light a.navbar-item:hover, #optimole-app .hero.is-light a.navbar-item.is-active,\n #optimole-app .hero.is-light .navbar-link:hover,\n #optimole-app .hero.is-light .navbar-link.is-active {\n background-color: #e8e8e8;\n color: #363636; }\n #optimole-app .hero.is-light .tabs a {\n color: #363636;\n opacity: 0.9; }\n #optimole-app .hero.is-light .tabs a:hover {\n opacity: 1; }\n #optimole-app .hero.is-light .tabs li.is-active a {\n opacity: 1; }\n #optimole-app .hero.is-light .tabs.is-boxed a, #optimole-app .hero.is-light .tabs.is-toggle a {\n color: #363636; }\n #optimole-app .hero.is-light .tabs.is-boxed a:hover, #optimole-app .hero.is-light .tabs.is-toggle a:hover {\n background-color: rgba(10, 10, 10, 0.1); }\n #optimole-app .hero.is-light .tabs.is-boxed li.is-active a, #optimole-app .hero.is-light .tabs.is-boxed li.is-active a:hover, #optimole-app .hero.is-light .tabs.is-toggle li.is-active a, #optimole-app .hero.is-light .tabs.is-toggle li.is-active a:hover {\n background-color: #363636;\n border-color: #363636;\n color: whitesmoke; }\n #optimole-app .hero.is-light.is-bold {\n background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); }\n @media screen and (max-width: 768px) {\n #optimole-app .hero.is-light.is-bold .navbar-menu {\n background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } }\n #optimole-app .hero.is-dark {\n background-color: #363636;\n color: whitesmoke; }\n #optimole-app .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag),\n #optimole-app .hero.is-dark strong {\n color: inherit; }\n #optimole-app .hero.is-dark .title {\n color: whitesmoke; }\n #optimole-app .hero.is-dark .subtitle {\n color: rgba(245, 245, 245, 0.9); }\n #optimole-app .hero.is-dark .subtitle a:not(.button),\n #optimole-app .hero.is-dark .subtitle strong {\n color: whitesmoke; }\n @media screen and (max-width: 1087px) {\n #optimole-app .hero.is-dark .navbar-menu {\n background-color: #363636; } }\n #optimole-app .hero.is-dark .navbar-item,\n #optimole-app .hero.is-dark .navbar-link {\n color: rgba(245, 245, 245, 0.7); }\n #optimole-app .hero.is-dark a.navbar-item:hover, #optimole-app .hero.is-dark a.navbar-item.is-active,\n #optimole-app .hero.is-dark .navbar-link:hover,\n #optimole-app .hero.is-dark .navbar-link.is-active {\n background-color: #292929;\n color: whitesmoke; }\n #optimole-app .hero.is-dark .tabs a {\n color: whitesmoke;\n opacity: 0.9; }\n #optimole-app .hero.is-dark .tabs a:hover {\n opacity: 1; }\n #optimole-app .hero.is-dark .tabs li.is-active a {\n opacity: 1; }\n #optimole-app .hero.is-dark .tabs.is-boxed a, #optimole-app .hero.is-dark .tabs.is-toggle a {\n color: whitesmoke; }\n #optimole-app .hero.is-dark .tabs.is-boxed a:hover, #optimole-app .hero.is-dark .tabs.is-toggle a:hover {\n background-color: rgba(10, 10, 10, 0.1); }\n #optimole-app .hero.is-dark .tabs.is-boxed li.is-active a, #optimole-app .hero.is-dark .tabs.is-boxed li.is-active a:hover, #optimole-app .hero.is-dark .tabs.is-toggle li.is-active a, #optimole-app .hero.is-dark .tabs.is-toggle li.is-active a:hover {\n background-color: whitesmoke;\n border-color: whitesmoke;\n color: #363636; }\n #optimole-app .hero.is-dark.is-bold {\n background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); }\n @media screen and (max-width: 768px) {\n #optimole-app .hero.is-dark.is-bold .navbar-menu {\n background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } }\n #optimole-app .hero.is-primary {\n background-color: #EF686B;\n color: #fff; }\n #optimole-app .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag),\n #optimole-app .hero.is-primary strong {\n color: inherit; }\n #optimole-app .hero.is-primary .title {\n color: #fff; }\n #optimole-app .hero.is-primary .subtitle {\n color: rgba(255, 255, 255, 0.9); }\n #optimole-app .hero.is-primary .subtitle a:not(.button),\n #optimole-app .hero.is-primary .subtitle strong {\n color: #fff; }\n @media screen and (max-width: 1087px) {\n #optimole-app .hero.is-primary .navbar-menu {\n background-color: #EF686B; } }\n #optimole-app .hero.is-primary .navbar-item,\n #optimole-app .hero.is-primary .navbar-link {\n color: rgba(255, 255, 255, 0.7); }\n #optimole-app .hero.is-primary a.navbar-item:hover, #optimole-app .hero.is-primary a.navbar-item.is-active,\n #optimole-app .hero.is-primary .navbar-link:hover,\n #optimole-app .hero.is-primary .navbar-link.is-active {\n background-color: #ed5154;\n color: #fff; }\n #optimole-app .hero.is-primary .tabs a {\n color: #fff;\n opacity: 0.9; }\n #optimole-app .hero.is-primary .tabs a:hover {\n opacity: 1; }\n #optimole-app .hero.is-primary .tabs li.is-active a {\n opacity: 1; }\n #optimole-app .hero.is-primary .tabs.is-boxed a, #optimole-app .hero.is-primary .tabs.is-toggle a {\n color: #fff; }\n #optimole-app .hero.is-primary .tabs.is-boxed a:hover, #optimole-app .hero.is-primary .tabs.is-toggle a:hover {\n background-color: rgba(10, 10, 10, 0.1); }\n #optimole-app .hero.is-primary .tabs.is-boxed li.is-active a, #optimole-app .hero.is-primary .tabs.is-boxed li.is-active a:hover, #optimole-app .hero.is-primary .tabs.is-toggle li.is-active a, #optimole-app .hero.is-primary .tabs.is-toggle li.is-active a:hover {\n background-color: #fff;\n border-color: #fff;\n color: #EF686B; }\n #optimole-app .hero.is-primary.is-bold {\n background-image: linear-gradient(141deg, #f52f54 0%, #EF686B 71%, #f58d7c 100%); }\n @media screen and (max-width: 768px) {\n #optimole-app .hero.is-primary.is-bold .navbar-menu {\n background-image: linear-gradient(141deg, #f52f54 0%, #EF686B 71%, #f58d7c 100%); } }\n #optimole-app .hero.is-link {\n background-color: #3273dc;\n color: #fff; }\n #optimole-app .hero.is-link a:not(.button):not(.dropdown-item):not(.tag),\n #optimole-app .hero.is-link strong {\n color: inherit; }\n #optimole-app .hero.is-link .title {\n color: #fff; }\n #optimole-app .hero.is-link .subtitle {\n color: rgba(255, 255, 255, 0.9); }\n #optimole-app .hero.is-link .subtitle a:not(.button),\n #optimole-app .hero.is-link .subtitle strong {\n color: #fff; }\n @media screen and (max-width: 1087px) {\n #optimole-app .hero.is-link .navbar-menu {\n background-color: #3273dc; } }\n #optimole-app .hero.is-link .navbar-item,\n #optimole-app .hero.is-link .navbar-link {\n color: rgba(255, 255, 255, 0.7); }\n #optimole-app .hero.is-link a.navbar-item:hover, #optimole-app .hero.is-link a.navbar-item.is-active,\n #optimole-app .hero.is-link .navbar-link:hover,\n #optimole-app .hero.is-link .navbar-link.is-active {\n background-color: #2366d1;\n color: #fff; }\n #optimole-app .hero.is-link .tabs a {\n color: #fff;\n opacity: 0.9; }\n #optimole-app .hero.is-link .tabs a:hover {\n opacity: 1; }\n #optimole-app .hero.is-link .tabs li.is-active a {\n opacity: 1; }\n #optimole-app .hero.is-link .tabs.is-boxed a, #optimole-app .hero.is-link .tabs.is-toggle a {\n color: #fff; }\n #optimole-app .hero.is-link .tabs.is-boxed a:hover, #optimole-app .hero.is-link .tabs.is-toggle a:hover {\n background-color: rgba(10, 10, 10, 0.1); }\n #optimole-app .hero.is-link .tabs.is-boxed li.is-active a, #optimole-app .hero.is-link .tabs.is-boxed li.is-active a:hover, #optimole-app .hero.is-link .tabs.is-toggle li.is-active a, #optimole-app .hero.is-link .tabs.is-toggle li.is-active a:hover {\n background-color: #fff;\n border-color: #fff;\n color: #3273dc; }\n #optimole-app .hero.is-link.is-bold {\n background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%); }\n @media screen and (max-width: 768px) {\n #optimole-app .hero.is-link.is-bold .navbar-menu {\n background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%); } }\n #optimole-app .hero.is-info {\n background-color: #5180C1;\n color: #fff; }\n #optimole-app .hero.is-info a:not(.button):not(.dropdown-item):not(.tag),\n #optimole-app .hero.is-info strong {\n color: inherit; }\n #optimole-app .hero.is-info .title {\n color: #fff; }\n #optimole-app .hero.is-info .subtitle {\n color: rgba(255, 255, 255, 0.9); }\n #optimole-app .hero.is-info .subtitle a:not(.button),\n #optimole-app .hero.is-info .subtitle strong {\n color: #fff; }\n @media screen and (max-width: 1087px) {\n #optimole-app .hero.is-info .navbar-menu {\n background-color: #5180C1; } }\n #optimole-app .hero.is-info .navbar-item,\n #optimole-app .hero.is-info .navbar-link {\n color: rgba(255, 255, 255, 0.7); }\n #optimole-app .hero.is-info a.navbar-item:hover, #optimole-app .hero.is-info a.navbar-item.is-active,\n #optimole-app .hero.is-info .navbar-link:hover,\n #optimole-app .hero.is-info .navbar-link.is-active {\n background-color: #4173b7;\n color: #fff; }\n #optimole-app .hero.is-info .tabs a {\n color: #fff;\n opacity: 0.9; }\n #optimole-app .hero.is-info .tabs a:hover {\n opacity: 1; }\n #optimole-app .hero.is-info .tabs li.is-active a {\n opacity: 1; }\n #optimole-app .hero.is-info .tabs.is-boxed a, #optimole-app .hero.is-info .tabs.is-toggle a {\n color: #fff; }\n #optimole-app .hero.is-info .tabs.is-boxed a:hover, #optimole-app .hero.is-info .tabs.is-toggle a:hover {\n background-color: rgba(10, 10, 10, 0.1); }\n #optimole-app .hero.is-info .tabs.is-boxed li.is-active a, #optimole-app .hero.is-info .tabs.is-boxed li.is-active a:hover, #optimole-app .hero.is-info .tabs.is-toggle li.is-active a, #optimole-app .hero.is-info .tabs.is-toggle li.is-active a:hover {\n background-color: #fff;\n border-color: #fff;\n color: #5180C1; }\n #optimole-app .hero.is-info.is-bold {\n background-image: linear-gradient(141deg, #2f7bb0 0%, #5180C1 71%, #5f7acd 100%); }\n @media screen and (max-width: 768px) {\n #optimole-app .hero.is-info.is-bold .navbar-menu {\n background-image: linear-gradient(141deg, #2f7bb0 0%, #5180C1 71%, #5f7acd 100%); } }\n #optimole-app .hero.is-success {\n background-color: #34a85e;\n color: #fff; }\n #optimole-app .hero.is-success a:not(.button):not(.dropdown-item):not(.tag),\n #optimole-app .hero.is-success strong {\n color: inherit; }\n #optimole-app .hero.is-success .title {\n color: #fff; }\n #optimole-app .hero.is-success .subtitle {\n color: rgba(255, 255, 255, 0.9); }\n #optimole-app .hero.is-success .subtitle a:not(.button),\n #optimole-app .hero.is-success .subtitle strong {\n color: #fff; }\n @media screen and (max-width: 1087px) {\n #optimole-app .hero.is-success .navbar-menu {\n background-color: #34a85e; } }\n #optimole-app .hero.is-success .navbar-item,\n #optimole-app .hero.is-success .navbar-link {\n color: rgba(255, 255, 255, 0.7); }\n #optimole-app .hero.is-success a.navbar-item:hover, #optimole-app .hero.is-success a.navbar-item.is-active,\n #optimole-app .hero.is-success .navbar-link:hover,\n #optimole-app .hero.is-success .navbar-link.is-active {\n background-color: #2e9553;\n color: #fff; }\n #optimole-app .hero.is-success .tabs a {\n color: #fff;\n opacity: 0.9; }\n #optimole-app .hero.is-success .tabs a:hover {\n opacity: 1; }\n #optimole-app .hero.is-success .tabs li.is-active a {\n opacity: 1; }\n #optimole-app .hero.is-success .tabs.is-boxed a, #optimole-app .hero.is-success .tabs.is-toggle a {\n color: #fff; }\n #optimole-app .hero.is-success .tabs.is-boxed a:hover, #optimole-app .hero.is-success .tabs.is-toggle a:hover {\n background-color: rgba(10, 10, 10, 0.1); }\n #optimole-app .hero.is-success .tabs.is-boxed li.is-active a, #optimole-app .hero.is-success .tabs.is-boxed li.is-active a:hover, #optimole-app .hero.is-success .tabs.is-toggle li.is-active a, #optimole-app .hero.is-success .tabs.is-toggle li.is-active a:hover {\n background-color: #fff;\n border-color: #fff;\n color: #34a85e; }\n #optimole-app .hero.is-success.is-bold {\n background-image: linear-gradient(141deg, #1f8a34 0%, #34a85e 71%, #34c27f 100%); }\n @media screen and (max-width: 768px) {\n #optimole-app .hero.is-success.is-bold .navbar-menu {\n background-image: linear-gradient(141deg, #1f8a34 0%, #34a85e 71%, #34c27f 100%); } }\n #optimole-app .hero.is-warning {\n background-color: #ffdd57;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag),\n #optimole-app .hero.is-warning strong {\n color: inherit; }\n #optimole-app .hero.is-warning .title {\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .hero.is-warning .subtitle {\n color: rgba(0, 0, 0, 0.9); }\n #optimole-app .hero.is-warning .subtitle a:not(.button),\n #optimole-app .hero.is-warning .subtitle strong {\n color: rgba(0, 0, 0, 0.7); }\n @media screen and (max-width: 1087px) {\n #optimole-app .hero.is-warning .navbar-menu {\n background-color: #ffdd57; } }\n #optimole-app .hero.is-warning .navbar-item,\n #optimole-app .hero.is-warning .navbar-link {\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .hero.is-warning a.navbar-item:hover, #optimole-app .hero.is-warning a.navbar-item.is-active,\n #optimole-app .hero.is-warning .navbar-link:hover,\n #optimole-app .hero.is-warning .navbar-link.is-active {\n background-color: #ffd83d;\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .hero.is-warning .tabs a {\n color: rgba(0, 0, 0, 0.7);\n opacity: 0.9; }\n #optimole-app .hero.is-warning .tabs a:hover {\n opacity: 1; }\n #optimole-app .hero.is-warning .tabs li.is-active a {\n opacity: 1; }\n #optimole-app .hero.is-warning .tabs.is-boxed a, #optimole-app .hero.is-warning .tabs.is-toggle a {\n color: rgba(0, 0, 0, 0.7); }\n #optimole-app .hero.is-warning .tabs.is-boxed a:hover, #optimole-app .hero.is-warning .tabs.is-toggle a:hover {\n background-color: rgba(10, 10, 10, 0.1); }\n #optimole-app .hero.is-warning .tabs.is-boxed li.is-active a, #optimole-app .hero.is-warning .tabs.is-boxed li.is-active a:hover, #optimole-app .hero.is-warning .tabs.is-toggle li.is-active a, #optimole-app .hero.is-warning .tabs.is-toggle li.is-active a:hover {\n background-color: rgba(0, 0, 0, 0.7);\n border-color: rgba(0, 0, 0, 0.7);\n color: #ffdd57; }\n #optimole-app .hero.is-warning.is-bold {\n background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); }\n @media screen and (max-width: 768px) {\n #optimole-app .hero.is-warning.is-bold .navbar-menu {\n background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); } }\n #optimole-app .hero.is-danger {\n background-color: #D54222;\n color: #fff; }\n #optimole-app .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag),\n #optimole-app .hero.is-danger strong {\n color: inherit; }\n #optimole-app .hero.is-danger .title {\n color: #fff; }\n #optimole-app .hero.is-danger .subtitle {\n color: rgba(255, 255, 255, 0.9); }\n #optimole-app .hero.is-danger .subtitle a:not(.button),\n #optimole-app .hero.is-danger .subtitle strong {\n color: #fff; }\n @media screen and (max-width: 1087px) {\n #optimole-app .hero.is-danger .navbar-menu {\n background-color: #D54222; } }\n #optimole-app .hero.is-danger .navbar-item,\n #optimole-app .hero.is-danger .navbar-link {\n color: rgba(255, 255, 255, 0.7); }\n #optimole-app .hero.is-danger a.navbar-item:hover, #optimole-app .hero.is-danger a.navbar-item.is-active,\n #optimole-app .hero.is-danger .navbar-link:hover,\n #optimole-app .hero.is-danger .navbar-link.is-active {\n background-color: #bf3b1e;\n color: #fff; }\n #optimole-app .hero.is-danger .tabs a {\n color: #fff;\n opacity: 0.9; }\n #optimole-app .hero.is-danger .tabs a:hover {\n opacity: 1; }\n #optimole-app .hero.is-danger .tabs li.is-active a {\n opacity: 1; }\n #optimole-app .hero.is-danger .tabs.is-boxed a, #optimole-app .hero.is-danger .tabs.is-toggle a {\n color: #fff; }\n #optimole-app .hero.is-danger .tabs.is-boxed a:hover, #optimole-app .hero.is-danger .tabs.is-toggle a:hover {\n background-color: rgba(10, 10, 10, 0.1); }\n #optimole-app .hero.is-danger .tabs.is-boxed li.is-active a, #optimole-app .hero.is-danger .tabs.is-boxed li.is-active a:hover, #optimole-app .hero.is-danger .tabs.is-toggle li.is-active a, #optimole-app .hero.is-danger .tabs.is-toggle li.is-active a:hover {\n background-color: #fff;\n border-color: #fff;\n color: #D54222; }\n #optimole-app .hero.is-danger.is-bold {\n background-image: linear-gradient(141deg, #b31311 0%, #D54222 71%, #e46c2c 100%); }\n @media screen and (max-width: 768px) {\n #optimole-app .hero.is-danger.is-bold .navbar-menu {\n background-image: linear-gradient(141deg, #b31311 0%, #D54222 71%, #e46c2c 100%); } }\n #optimole-app .hero.is-small .hero-body {\n padding-bottom: 1.5rem;\n padding-top: 1.5rem; }\n @media screen and (min-width: 769px), print {\n #optimole-app .hero.is-medium .hero-body {\n padding-bottom: 9rem;\n padding-top: 9rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .hero.is-large .hero-body {\n padding-bottom: 18rem;\n padding-top: 18rem; } }\n #optimole-app .hero.is-halfheight .hero-body, #optimole-app .hero.is-fullheight .hero-body, #optimole-app .hero.is-fullheight-with-navbar .hero-body {\n -ms-flex-align: center;\n align-items: center;\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .hero.is-halfheight .hero-body > .container, #optimole-app .hero.is-fullheight .hero-body > .container, #optimole-app .hero.is-fullheight-with-navbar .hero-body > .container {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1; }\n #optimole-app .hero.is-halfheight {\n min-height: 50vh; }\n #optimole-app .hero.is-fullheight {\n min-height: 100vh; }\n #optimole-app .hero-video {\n overflow: hidden; }\n #optimole-app .hero-video video {\n left: 50%;\n min-height: 100%;\n min-width: 100%;\n position: absolute;\n top: 50%;\n transform: translate3d(-50%, -50%, 0); }\n #optimole-app .hero-video.is-transparent {\n opacity: 0.3; }\n @media screen and (max-width: 768px) {\n #optimole-app .hero-video {\n display: none; } }\n #optimole-app .hero-buttons {\n margin-top: 1.5rem; }\n @media screen and (max-width: 768px) {\n #optimole-app .hero-buttons .button {\n display: -ms-flexbox;\n display: flex; }\n #optimole-app .hero-buttons .button:not(:last-child) {\n margin-bottom: 0.75rem; } }\n @media screen and (min-width: 769px), print {\n #optimole-app .hero-buttons {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center; }\n #optimole-app .hero-buttons .button:not(:last-child) {\n margin-right: 1.5rem; } }\n #optimole-app .hero-head,\n #optimole-app .hero-foot {\n -ms-flex-positive: 0;\n flex-grow: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0; }\n #optimole-app .hero-body {\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n padding: 3rem 1.5rem; }\n #optimole-app .section {\n padding: 3rem 1.5rem; }\n @media screen and (min-width: 1088px) {\n #optimole-app .section.is-medium {\n padding: 9rem 1.5rem; }\n #optimole-app .section.is-large {\n padding: 18rem 1.5rem; } }\n #optimole-app .footer {\n background-color: #fafafa;\n padding: 3rem 1.5rem 6rem; }\n #optimole-app .card {\n transition: all 750ms ease-in-out;\n border: 0;\n border-radius: .1875rem;\n box-shadow: 0 1px 15px 1px rgba(39, 39, 39, 0.1); }\n #optimole-app .logo {\n margin-bottom: 10px; }\n #optimole-app .logo img {\n max-width: 180px;\n margin: 0 auto; }\n #optimole-app .vue-js-switch {\n -ms-flex-item-align: center;\n -ms-grid-row-align: center;\n align-self: center; }\n #optimole-app .api-key-control {\n padding: 0; }\n #optimole-app .api-key-field .button.is-danger {\n padding-left: 20px;\n padding-right: 20px; }\n #optimole-app .api-key-label {\n -ms-flex-item-align: center;\n -ms-grid-row-align: center;\n align-self: center;\n margin: 0.5em 10px 0.5em 0;\n font-size: 1em; }\n #optimole-app .header {\n padding: 0 1.5rem 0; }\n #optimole-app .header.level {\n margin-bottom: 0; }\n #optimole-app .account img {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px; }\n #optimole-app .account .label {\n margin-bottom: 0; }\n #optimole-app .optimized-images table td, #optimole-app .optimized-images table th {\n vertical-align: middle; }\n #optimole-app .media-diff {\n position: relative;\n margin: 0 auto; }\n #optimole-app .media-diff video, #optimole-app .media-diff img {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; }\n #optimole-app .origin-wrapper {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n z-index: 1;\n transform: translateZ(0);\n will-change: width; }\n #optimole-app .handle {\n position: absolute;\n top: 0;\n bottom: 0;\n color: rgba(255, 255, 255, 0.8);\n background-color: rgba(255, 255, 255, 0.8);\n width: 2px;\n cursor: ew-resize;\n transform: translateX(-50%) translateZ(0);\n z-index: 2;\n will-change: left;\n left: 200px; }\n #optimole-app .cursor {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translateX(-50%) translateZ(0); }\n #optimole-app .cursor .circle {\n background-color: rgba(255, 255, 255, 0.8);\n width: 24px;\n height: 24px;\n border-radius: 50%; }\n #optimole-app .no-padding-right {\n padding-right: 0px !important; }\n\n.fade-enter-active, .fade-leave-active {\n transition: opacity .5s; }\n\n.fade-enter, .fade-leave-to {\n opacity: 0; }\n\n.media_page_optimole #wpbody-content > * {\n display: none !important; }\n\n.media_page_optimole #wpbody-content > #optimole-app {\n display: block !important; }\n\n#optimole-app img.optml-image {\n float: left;\n max-width: 100px;\n width: auto;\n margin: auto; }\n\n#optimole-app img.optml-image-watermark {\n width: 50px; }\n\n.optml-ratio-feedback .emoji {\n font-size: 1.5em; }\n\n.optml-ratio-feedback {\n float: right;\n padding-right: 20px; }\n\n.optml-image-heading {\n text-align: left; }\n\nth.optml-image-ratio-heading {\n text-align: right !important;\n font-size: 150%; }\n\n@media screen and (max-width: 768px) {\n li:not(.is-active) > a > span:not(.icon) {\n visibility: hidden;\n position: absolute; }\n nav.tabs li:not(.is-active) {\n -ms-flex-positive: 0;\n flex-grow: 0;\n -ms-flex-negative: 1;\n flex-shrink: 1; }\n .tabs .icon {\n margin-left: 0.5em; } }\n\n.tabs li {\n transition: flex-grow 1s ease;\n transition: flex-grow 1s ease, -ms-flex-positive 1s ease; }\n\n#optimole-app .tabs a {\n margin-bottom: -4px; }\n\n#optimole-app .optml-upgrade {\n min-width: 200px; }\n\n#optimole-app .is-tab.no-images {\n min-height: 400px; }\n\n#optimole-app .is-tab {\n min-height: 700px; }\n", ""]);
14438
-
14439
- // exports
14440
-
14441
-
14442
- /***/ }),
14443
- /* 13 */
14444
- /***/ (function(module, exports, __webpack_require__) {
14445
-
14446
- "use strict";
14447
-
14448
-
14449
- var _appHeader = __webpack_require__(14);
14450
-
14451
- var _appHeader2 = _interopRequireDefault(_appHeader);
14452
-
14453
- var _cdnDetails = __webpack_require__(19);
14454
-
14455
- var _cdnDetails2 = _interopRequireDefault(_cdnDetails);
14456
-
14457
- var _connectLayout = __webpack_require__(24);
14458
-
14459
- var _connectLayout2 = _interopRequireDefault(_connectLayout);
14460
-
14461
- var _lastImages = __webpack_require__(31);
14462
-
14463
- var _lastImages2 = _interopRequireDefault(_lastImages);
14464
-
14465
- var _apiKeyForm = __webpack_require__(5);
14466
-
14467
- var _apiKeyForm2 = _interopRequireDefault(_apiKeyForm);
14468
-
14469
- var _options = __webpack_require__(36);
14470
-
14471
- var _options2 = _interopRequireDefault(_options);
14472
-
14473
- var _watermarks = __webpack_require__(46);
14474
-
14475
- var _watermarks2 = _interopRequireDefault(_watermarks);
14476
-
14477
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14478
-
14479
- module.exports = {
14480
- name: 'app',
14481
- data: function data() {
14482
- return {
14483
- strings: optimoleDashboardApp.strings,
14484
- home: optimoleDashboardApp.home_url,
14485
- remove_images: optimoleDashboardApp.remove_latest_images === 'yes',
14486
- fetchStatus: false,
14487
- tab: 'dashboard'
14488
- };
14489
- },
14490
-
14491
- components: {
14492
- AppHeader: _appHeader2.default,
14493
- Options: _options2.default,
14494
- Watermarks: _watermarks2.default,
14495
- ConnectLayout: _connectLayout2.default,
14496
- ApiKeyForm: _apiKeyForm2.default,
14497
- CdnDetails: _cdnDetails2.default,
14498
- LastImages: _lastImages2.default
14499
- },
14500
- mounted: function mounted() {
14501
- var self = this;
14502
- if (this.$store.state.connected) {
14503
- this.$store.dispatch('retrieveOptimizedImages', { waitTime: 0, component: null });
14504
- self.fetchStatus = true;
14505
- }
14506
- },
14507
-
14508
- methods: {
14509
- changeTab: function changeTab(value) {
14510
- this.tab = value;
14511
- }
14512
- }
14513
- // </script>
14514
- // <style lang="sass-loader">
14515
- // @import '../../css/style.scss';
14516
- //
14517
- // #optimole-app .tabs a {
14518
- // margin-bottom: -4px;
14519
- // }
14520
- //
14521
- // #optimole-app .optml-upgrade {
14522
- // min-width: 200px;
14523
- // }
14524
- //
14525
- // #optimole-app .is-tab.no-images{
14526
- // min-height: 400px;
14527
- // }
14528
- // #optimole-app .is-tab {
14529
- // min-height: 700px;
14530
- // }
14531
- // </style>
14532
-
14533
- }; // <template>
14534
- // <div class="columns is-desktop">
14535
- //
14536
- // <div class="column ">
14537
- // <div class="card">
14538
- // <app-header></app-header>
14539
- // <div class="card-content">
14540
- // <div class="content">
14541
- // <connect-layout v-if="! this.$store.state.connected"></connect-layout>
14542
- // <transition name="fade" mode="out-in">
14543
- // <div v-if="this.$store.state.connected">
14544
- // <div class="tabs is-left is-boxed is-medium">
14545
- // <ul class="is-marginless">
14546
- // <li :class="tab === 'dashboard' ? 'is-active' : ''">
14547
- // <a @click="changeTab('dashboard')" class="is-size-6-mobile">
14548
- // <span class="icon is-size-6-mobile is-size-6-tablet dashicons dashicons-admin-home"></span>
14549
- // <span class="is-size-6-mobile is-size-6-touch ">{{strings.dashboard_menu_item}}</span>
14550
- // </a>
14551
- // </li>
14552
- //
14553
- // <li :class="tab === 'settings' ? 'is-active' : ''">
14554
- // <a @click="changeTab('settings')" class="is-size-6-mobile ">
14555
- // <span class="icon is-size-6-mobile is-size-6-tablet dashicons dashicons-admin-settings"></span>
14556
- // <span class="is-size-6-mobile is-size-6-touch">{{strings.settings_menu_item}}</span>
14557
- // </a>
14558
- // </li>
14559
- // <li :class="tab === 'watermarks' ? 'is-active' : ''">
14560
- // <a @click="changeTab('watermarks')" class="is-size-6-mobile">
14561
- // <span class="icon is-size-6-mobile is-size-6-tablet dashicons dashicons-tag"></span>
14562
- // <span class="is-size-6-mobile is-size-6-touch">{{strings.watermarks_menu_item}}</span>
14563
- // </a>
14564
- // </li>
14565
- // </ul>
14566
- // </div>
14567
- //
14568
- // <div class="is-tab" v-if="tab === 'dashboard' " :class="remove_images ? 'no-images' : '' ">
14569
- // <div class="notification is-success" v-if="strings.notice_just_activated.length > 0"
14570
- // v-html="strings.notice_just_activated"></div>
14571
- // <api-key-form></api-key-form>
14572
- // <cdn-details v-if="this.$store.state.userData"></cdn-details>
14573
- // <hr/>
14574
- // <last-images :status="fetchStatus" v-if="! remove_images"></last-images>
14575
- // </div>
14576
- // <div class="is-tab" v-if=" tab === 'settings'">
14577
- // <options></options>
14578
- // </div>
14579
- // <div class="is-tab" v-if=" tab === 'watermarks'">
14580
- // <watermarks></watermarks>
14581
- // </div>
14582
- // </div>
14583
- // </transition>
14584
- // </div>
14585
- // </div>
14586
- //
14587
- // <div class="level-right">
14588
- // <p class="level-item"><a href="https://optimole.com" target="_blank">Optimole
14589
- // v{{strings.version}}</a></p>
14590
- // <p class="level-item"><a href="https://optimole.com/terms/"
14591
- // target="_blank">{{strings.terms_menu}}</a></p>
14592
- // <p class="level-item"><a href="https://optimole.com/privacy-policy/" target="_blank">{{strings.privacy_menu}}</a>
14593
- // </p>
14594
- // <p class="level-item"><a :href="'https://speedtest.optimole.com/?url=' + home " target="_blank">{{strings.testdrive_menu}}</a>
14595
- // </p>
14596
- // </div>
14597
- // </div>
14598
- // </div>
14599
- // <div v-if="this.$store.state.connected && this.$store.state.userData.plan === 'free' " class="column is-narrow is-hidden-desktop-only is-hidden-tablet-only is-hidden-mobile">
14600
- // <div class="card optml-upgrade">
14601
- // <div class="card-header">
14602
- // <h3 class="is-size-5 card-header-title"><span class="dashicons dashicons-chart-line"></span> {{strings.upgrade.title}}</h3>
14603
- // </div>
14604
- // <div class="card-content">
14605
- // <ul>
14606
- // <li><span class="dashicons dashicons-yes"></span>{{strings.upgrade.reason_1}}</li>
14607
- // <li><span class="dashicons dashicons-yes"></span>{{strings.upgrade.reason_2}}</li>
14608
- // <li><span class="dashicons dashicons-yes"></span>{{strings.upgrade.reason_3}}</li>
14609
- // </ul>
14610
- // </div>
14611
- // <div class="card-footer ">
14612
- // <div class="card-footer-item">
14613
- // <a href="https://optimole.com#pricing" target="_blank" class="button is-centered is-small is-success"><span class="dashicons dashicons-external"></span>{{strings.upgrade.cta}}</a>
14614
- // </div>
14615
- // </div>
14616
- // </div>
14617
- // </div>
14618
- // </div>
14619
- // </template>
14620
- //
14621
- // <script>
14622
-
14623
- /***/ }),
14624
- /* 14 */
14625
- /***/ (function(module, exports, __webpack_require__) {
14626
-
14627
- var __vue_script__, __vue_template__
14628
- __webpack_require__(15)
14629
- __vue_script__ = __webpack_require__(17)
14630
- __vue_template__ = __webpack_require__(18)
14631
- module.exports = __vue_script__ || {}
14632
- if (module.exports.__esModule) module.exports = module.exports.default
14633
- if (__vue_template__) { (typeof module.exports === "function" ? module.exports.options : module.exports).template = __vue_template__ }
14634
- if (false) {(function () { module.hot.accept()
14635
- var hotAPI = require("vue-hot-reload-api")
14636
- hotAPI.install(require("vue"), true)
14637
- if (!hotAPI.compatible) return
14638
- var id = "D:\\dev\\optimole-wp\\assets\\vue\\components\\app-header.vue"
14639
- if (!module.hot.data) {
14640
- hotAPI.createRecord(id, module.exports)
14641
- } else {
14642
- hotAPI.update(id, module.exports, __vue_template__)
14643
- }
14644
- })()}
14645
-
14646
- /***/ }),
14647
- /* 15 */
14648
- /***/ (function(module, exports, __webpack_require__) {
14649
-
14650
- // style-loader: Adds some css to the DOM by adding a <style> tag
14651
-
14652
- // load the styles
14653
- var content = __webpack_require__(16);
14654
- if(typeof content === 'string') content = [[module.i, content, '']];
14655
- // add the styles to the DOM
14656
- var update = __webpack_require__(1)(content, {});
14657
- if(content.locals) module.exports = content.locals;
14658
- // Hot Module Replacement
14659
- if(false) {
14660
- // When the styles change, update the <style> tags
14661
- if(!content.locals) {
14662
- module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-b80baa74&file=app-header.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./app-header.vue", function() {
14663
- var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-b80baa74&file=app-header.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./app-header.vue");
14664
- if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
14665
- update(newContent);
14666
- });
14667
- }
14668
- // When the module is disposed, remove the <style> tags
14669
- module.hot.dispose(function() { update(); });
14670
- }
14671
-
14672
- /***/ }),
14673
- /* 16 */
14674
- /***/ (function(module, exports, __webpack_require__) {
14675
-
14676
- exports = module.exports = __webpack_require__(0)();
14677
- // imports
14678
-
14679
-
14680
- // module
14681
- exports.push([module.i, "\r\n\t@media ( min-width: 769px ) {\r\n\t\t#optimole-app hr[_v-b80baa74] {\r\n\t\t\tmargin: 0;\r\n\t\t}\r\n\t}\r\n", ""]);
14682
-
14683
- // exports
14684
-
14685
-
14686
- /***/ }),
14687
- /* 17 */
14688
- /***/ (function(module, exports, __webpack_require__) {
14689
-
14690
- "use strict";
14691
-
14692
-
14693
- Object.defineProperty(exports, "__esModule", {
14694
- value: true
14695
- });
14696
- // <template>
14697
- // <div>
14698
- // <div class="header has-text-centered level">
14699
- //
14700
- // <div class="level-left">
14701
- // <a class="logo level-item" href="https://optimole.com" target="_blank">
14702
- // <figure class="image is-96x96 is-hidden-touch">
14703
- // <img :src="logo" :alt="strings.optimole + ' ' + strings.service_details" >
14704
- // </figure>
14705
- // <figure class="image is-48x48 is-hidden-desktop">
14706
- // <img :src="logo" :alt="strings.optimole + ' ' + strings.service_details" >
14707
- // </figure>
14708
- // </a>
14709
- // <h3 class="has-text-centered has-text-grey-dark is-size-5 is-size-4-widescreen is-size-6-touch level-item">
14710
- // <span class="has-text-weight-semibold">
14711
- // OptiMole - {{strings.service_details}}
14712
- // </span>
14713
- // </h3>
14714
- // </div>
14715
- // <div class="level-right">
14716
- // <div class="tags has-addons level-item">
14717
- // <span class="tag is-dark">{{strings.status}}</span>
14718
- // <span v-if="connected" class="tag is-success">{{strings.connected}}</span>
14719
- // <span v-else class="tag is-danger">{{strings.not_connected}}</span>
14720
- // </div>
14721
- // </div>
14722
- //
14723
- // </div>
14724
- // <hr/>
14725
- // </div>
14726
- // </template>
14727
- //
14728
- // <script>
14729
- exports.default = {
14730
- name: "app-header",
14731
- data: function data() {
14732
- return {
14733
- logo: optimoleDashboardApp.assets_url + 'img/logo.png',
14734
- strings: optimoleDashboardApp.strings
14735
- };
14736
- },
14737
-
14738
- computed: {
14739
- connected: function connected() {
14740
- return this.$store.state.connected;
14741
- }
14742
- }
14743
- // </script>
14744
- //
14745
- // <style scoped>
14746
- // @media ( min-width: 769px ) {
14747
- // #optimole-app hr {
14748
- // margin: 0;
14749
- // }
14750
- // }
14751
- // </style>
14752
-
14753
- };
14754
-
14755
- /***/ }),
14756
- /* 18 */
14757
- /***/ (function(module, exports) {
14758
-
14759
- module.exports = "\n\t<div _v-b80baa74=\"\">\n\t\t<div class=\"header has-text-centered level\" _v-b80baa74=\"\">\n\t\t\t\n\t\t\t<div class=\"level-left\" _v-b80baa74=\"\">\n\t\t\t\t<a class=\"logo level-item\" href=\"https://optimole.com\" target=\"_blank\" _v-b80baa74=\"\">\n\t\t\t\t\t<figure class=\"image is-96x96 is-hidden-touch\" _v-b80baa74=\"\">\n\t\t\t\t\t\t<img :src=\"logo\" :alt=\"strings.optimole + ' ' + strings.service_details\" _v-b80baa74=\"\">\n\t\t\t\t\t</figure>\n\t\t\t\t\t<figure class=\"image is-48x48 is-hidden-desktop\" _v-b80baa74=\"\">\n\t\t\t\t\t\t<img :src=\"logo\" :alt=\"strings.optimole + ' ' + strings.service_details\" _v-b80baa74=\"\">\n\t\t\t\t\t</figure>\n\t\t\t\t</a>\n\t\t\t\t<h3 class=\"has-text-centered has-text-grey-dark is-size-5 is-size-4-widescreen is-size-6-touch level-item\" _v-b80baa74=\"\">\n\t\t\t\t\t<span class=\"has-text-weight-semibold\" _v-b80baa74=\"\">\n\t\t\t\t\tOptiMole - {{strings.service_details}}\n\t\t\t\t\t</span>\n\t\t\t\t</h3>\n\t\t\t</div>\n\t\t\t<div class=\"level-right\" _v-b80baa74=\"\">\n\t\t\t\t<div class=\"tags has-addons level-item\" _v-b80baa74=\"\">\n\t\t\t\t\t<span class=\"tag is-dark\" _v-b80baa74=\"\">{{strings.status}}</span>\n\t\t\t\t\t<span v-if=\"connected\" class=\"tag is-success\" _v-b80baa74=\"\">{{strings.connected}}</span>\n\t\t\t\t\t<span v-else=\"\" class=\"tag is-danger\" _v-b80baa74=\"\">{{strings.not_connected}}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\n\t\t</div>\n\t\t<hr _v-b80baa74=\"\">\n\t</div>\n";
14760
-
14761
- /***/ }),
14762
- /* 19 */
14763
- /***/ (function(module, exports, __webpack_require__) {
14764
-
14765
- var __vue_script__, __vue_template__
14766
- __webpack_require__(20)
14767
- __vue_script__ = __webpack_require__(22)
14768
- __vue_template__ = __webpack_require__(23)
14769
- module.exports = __vue_script__ || {}
14770
- if (module.exports.__esModule) module.exports = module.exports.default
14771
- if (__vue_template__) { (typeof module.exports === "function" ? module.exports.options : module.exports).template = __vue_template__ }
14772
- if (false) {(function () { module.hot.accept()
14773
- var hotAPI = require("vue-hot-reload-api")
14774
- hotAPI.install(require("vue"), true)
14775
- if (!hotAPI.compatible) return
14776
- var id = "D:\\dev\\optimole-wp\\assets\\vue\\components\\cdn-details.vue"
14777
- if (!module.hot.data) {
14778
- hotAPI.createRecord(id, module.exports)
14779
- } else {
14780
- hotAPI.update(id, module.exports, __vue_template__)
14781
- }
14782
- })()}
14783
-
14784
- /***/ }),
14785
- /* 20 */
14786
- /***/ (function(module, exports, __webpack_require__) {
14787
-
14788
- // style-loader: Adds some css to the DOM by adding a <style> tag
14789
-
14790
- // load the styles
14791
- var content = __webpack_require__(21);
14792
- if(typeof content === 'string') content = [[module.i, content, '']];
14793
- // add the styles to the DOM
14794
- var update = __webpack_require__(1)(content, {});
14795
- if(content.locals) module.exports = content.locals;
14796
- // Hot Module Replacement
14797
- if(false) {
14798
- // When the styles change, update the <style> tags
14799
- if(!content.locals) {
14800
- module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-5e7be7e5&file=cdn-details.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./cdn-details.vue", function() {
14801
- var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-5e7be7e5&file=cdn-details.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./cdn-details.vue");
14802
- if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
14803
- update(newContent);
14804
- });
14805
- }
14806
- // When the module is disposed, remove the <style> tags
14807
- module.hot.dispose(function() { update(); });
14808
- }
14809
-
14810
- /***/ }),
14811
- /* 21 */
14812
- /***/ (function(module, exports, __webpack_require__) {
14813
-
14814
- exports = module.exports = __webpack_require__(0)();
14815
- // imports
14816
-
14817
-
14818
- // module
14819
- exports.push([module.i, "\r\n\t#optimole-app .label[_v-5e7be7e5] {\r\n\t\tmargin-top: 0;\r\n\t}\r\n\t.optml-refresh-wrapper i.dashicons[_v-5e7be7e5]{\r\n\t\twidth:auto;\r\n\t\theight:auto;\r\n\t}\r\n", ""]);
14820
-
14821
- // exports
14822
-
14823
-
14824
- /***/ }),
14825
- /* 22 */
14826
- /***/ (function(module, exports, __webpack_require__) {
14827
-
14828
- "use strict";
14829
-
14830
-
14831
- Object.defineProperty(exports, "__esModule", {
14832
- value: true
14833
- });
14834
- // <template>
14835
- // <div class="cdn-details">
14836
- // <hr/>
14837
- // <div class="account level has-text-centered">
14838
- // <div class="level-left">
14839
- // <span class="label level-item">{{strings.logged_in_as}}:</span>
14840
- // <p class="details level-item tags has-addons">
14841
- // <span class="tag is-light">{{userData.display_name}}</span>
14842
- // <span class="tag is-paddingless"><img :src="userData.picture" class="image is-24x24 is-rounded"
14843
- // :alt="userData.display_name"></span>
14844
- // </p>
14845
- // </div>
14846
- // <div class="level-right">
14847
- // <span class="label level-item">{{strings.private_cdn_url}}:</span>
14848
- // <p class="details level-item tag is-light">{{userData.cdn_key}}.i.optimole.com</p>
14849
- // </div>
14850
- // </div>
14851
- // <hr/>
14852
- // <div class="level stats">
14853
- // <div class="level-left">
14854
- // <div class="level-item">
14855
- // <div class="tags has-addons">
14856
- // <span class="tag is-info">{{strings.usage}}:</span>
14857
- // <span class="tag">{{this.userData.usage_pretty}}</span>
14858
- // </div>
14859
- // </div>
14860
- // </div>
14861
- // <h4 class="level-item is-size-5 is-marginless has-text-grey">
14862
- // {{computedPercentage()}}%
14863
- // </h4>
14864
- // <div class="level-right">
14865
- // <div class="level-item">
14866
- // <div class="tags has-addons">
14867
- // <span class="tag is-info">{{strings.quota}}:</span>
14868
- // <span class="tag">{{this.userData.quota_pretty}}</span>
14869
- // </div>
14870
- // </div>
14871
- // </div>
14872
- // </div>
14873
- //
14874
- // <div class="level-right">
14875
- //
14876
- // <div class="level-item optml-refresh-wrapper">
14877
- // <a class="button is-small is-warning" v-if="this.$store.state.loading"><span class="icon"><i
14878
- // class="dashicons dashicons-backup is-size-6"></i></span> <span>{{strings.updating_stats_cta}}</span>
14879
- // </a>
14880
- // <a class="button is-small is-info" v-else v-on:click="requestUpdate"><span class="icon"><i
14881
- // class="dashicons dashicons-image-rotate is-size-6"></i></span> <span>{{strings.refresh_stats_cta}}</span>
14882
- // </a>
14883
- // </div>
14884
- // </div>
14885
- // <hr/>
14886
- // <progress class="progress is-success" :value="this.userData.usage" :max="this.userData.quota">60%</progress>
14887
- //
14888
- // </div>
14889
- // </template>
14890
- //
14891
- // <script>
14892
- exports.default = {
14893
- name: "cdn-details",
14894
- data: function data() {
14895
- return {
14896
- strings: optimoleDashboardApp.strings
14897
- };
14898
- },
14899
-
14900
- computed: {
14901
- userData: function userData() {
14902
- return this.$store.state.userData;
14903
- }
14904
- },
14905
- methods: {
14906
- computedPercentage: function computedPercentage() {
14907
- return (this.userData.usage / this.userData.quota * 100).toFixed(2);
14908
- },
14909
- requestUpdate: function requestUpdate() {
14910
- this.$store.dispatch('requestStatsUpdate', { waitTime: 0, component: null });
14911
- }
14912
- }
14913
- // </script>
14914
- //
14915
- // <style scoped>
14916
- // #optimole-app .label {
14917
- // margin-top: 0;
14918
- // }
14919
- // .optml-refresh-wrapper i.dashicons{
14920
- // width:auto;
14921
- // height:auto;
14922
- // }
14923
- // </style>
14924
-
14925
- };
14926
-
14927
- /***/ }),
14928
- /* 23 */
14929
- /***/ (function(module, exports) {
14930
-
14931
- module.exports = "\n\t<div class=\"cdn-details\" _v-5e7be7e5=\"\">\n\t\t<hr _v-5e7be7e5=\"\">\n\t\t<div class=\"account level has-text-centered\" _v-5e7be7e5=\"\">\n\t\t\t<div class=\"level-left\" _v-5e7be7e5=\"\">\n\t\t\t\t<span class=\"label level-item\" _v-5e7be7e5=\"\">{{strings.logged_in_as}}:</span>\n\t\t\t\t<p class=\"details level-item tags has-addons\" _v-5e7be7e5=\"\">\n\t\t\t\t\t<span class=\"tag is-light\" _v-5e7be7e5=\"\">{{userData.display_name}}</span>\n\t\t\t\t\t<span class=\"tag is-paddingless\" _v-5e7be7e5=\"\"><img :src=\"userData.picture\" class=\"image is-24x24 is-rounded\" :alt=\"userData.display_name\" _v-5e7be7e5=\"\"></span>\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<div class=\"level-right\" _v-5e7be7e5=\"\">\n\t\t\t\t<span class=\"label level-item\" _v-5e7be7e5=\"\">{{strings.private_cdn_url}}:</span>\n\t\t\t\t<p class=\"details level-item tag is-light\" _v-5e7be7e5=\"\">{{userData.cdn_key}}.i.optimole.com</p>\n\t\t\t</div>\n\t\t</div>\n\t\t<hr _v-5e7be7e5=\"\">\n\t\t<div class=\"level stats\" _v-5e7be7e5=\"\">\n\t\t\t<div class=\"level-left\" _v-5e7be7e5=\"\">\n\t\t\t\t<div class=\"level-item\" _v-5e7be7e5=\"\">\n\t\t\t\t\t<div class=\"tags has-addons\" _v-5e7be7e5=\"\">\n\t\t\t\t\t\t<span class=\"tag is-info\" _v-5e7be7e5=\"\">{{strings.usage}}:</span>\n\t\t\t\t\t\t<span class=\"tag\" _v-5e7be7e5=\"\">{{this.userData.usage_pretty}}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<h4 class=\"level-item is-size-5 is-marginless has-text-grey\" _v-5e7be7e5=\"\">\n\t\t\t\t{{computedPercentage()}}%\n\t\t\t</h4>\n\t\t\t<div class=\"level-right\" _v-5e7be7e5=\"\">\n\t\t\t\t<div class=\"level-item\" _v-5e7be7e5=\"\">\n\t\t\t\t\t<div class=\"tags has-addons\" _v-5e7be7e5=\"\">\n\t\t\t\t\t\t<span class=\"tag is-info\" _v-5e7be7e5=\"\">{{strings.quota}}:</span>\n\t\t\t\t\t\t<span class=\"tag\" _v-5e7be7e5=\"\">{{this.userData.quota_pretty}}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t\n\t\t<div class=\"level-right\" _v-5e7be7e5=\"\">\n\t\t\t\n\t\t\t<div class=\"level-item optml-refresh-wrapper\" _v-5e7be7e5=\"\">\n\t\t\t<a class=\"button is-small is-warning\" v-if=\"this.$store.state.loading\" _v-5e7be7e5=\"\"><span class=\"icon\" _v-5e7be7e5=\"\"><i class=\"dashicons dashicons-backup is-size-6\" _v-5e7be7e5=\"\"></i></span> <span _v-5e7be7e5=\"\">{{strings.updating_stats_cta}}</span>\n\t\t\t</a>\n\t\t\t<a class=\"button is-small is-info\" v-else=\"\" v-on:click=\"requestUpdate\" _v-5e7be7e5=\"\"><span class=\"icon\" _v-5e7be7e5=\"\"><i class=\"dashicons dashicons-image-rotate is-size-6\" _v-5e7be7e5=\"\"></i></span> <span _v-5e7be7e5=\"\">{{strings.refresh_stats_cta}}</span>\n\t\t\t</a>\n\t\t\t</div>\n\t\t</div>\n\t\t<hr _v-5e7be7e5=\"\">\n\t\t<progress class=\"progress is-success\" :value=\"this.userData.usage\" :max=\"this.userData.quota\" _v-5e7be7e5=\"\">60%</progress>\n\t\n\t</div>\n";
14932
-
14933
- /***/ }),
14934
- /* 24 */
14935
- /***/ (function(module, exports, __webpack_require__) {
14936
-
14937
- var __vue_script__, __vue_template__
14938
- __webpack_require__(25)
14939
- __vue_script__ = __webpack_require__(27)
14940
- __vue_template__ = __webpack_require__(30)
14941
- module.exports = __vue_script__ || {}
14942
- if (module.exports.__esModule) module.exports = module.exports.default
14943
- if (__vue_template__) { (typeof module.exports === "function" ? module.exports.options : module.exports).template = __vue_template__ }
14944
- if (false) {(function () { module.hot.accept()
14945
- var hotAPI = require("vue-hot-reload-api")
14946
- hotAPI.install(require("vue"), true)
14947
- if (!hotAPI.compatible) return
14948
- var id = "D:\\dev\\optimole-wp\\assets\\vue\\components\\connect-layout.vue"
14949
- if (!module.hot.data) {
14950
- hotAPI.createRecord(id, module.exports)
14951
- } else {
14952
- hotAPI.update(id, module.exports, __vue_template__)
14953
- }
14954
- })()}
14955
-
14956
- /***/ }),
14957
- /* 25 */
14958
- /***/ (function(module, exports, __webpack_require__) {
14959
-
14960
- // style-loader: Adds some css to the DOM by adding a <style> tag
14961
-
14962
- // load the styles
14963
- var content = __webpack_require__(26);
14964
- if(typeof content === 'string') content = [[module.i, content, '']];
14965
- // add the styles to the DOM
14966
- var update = __webpack_require__(1)(content, {});
14967
- if(content.locals) module.exports = content.locals;
14968
- // Hot Module Replacement
14969
- if(false) {
14970
- // When the styles change, update the <style> tags
14971
- if(!content.locals) {
14972
- module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-c57b780c&file=connect-layout.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./connect-layout.vue", function() {
14973
- var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-c57b780c&file=connect-layout.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./connect-layout.vue");
14974
- if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
14975
- update(newContent);
14976
- });
14977
- }
14978
- // When the module is disposed, remove the <style> tags
14979
- module.hot.dispose(function() { update(); });
14980
- }
14981
-
14982
- /***/ }),
14983
- /* 26 */
14984
- /***/ (function(module, exports, __webpack_require__) {
14985
-
14986
- exports = module.exports = __webpack_require__(0)();
14987
- // imports
14988
-
14989
-
14990
- // module
14991
- exports.push([module.i, "\n\tinput[_v-c57b780c], .notification .delete[_v-c57b780c], button[_v-c57b780c] {\n\t\tbox-sizing: border-box !important;\n\t}\n\n", ""]);
14992
-
14993
- // exports
14994
-
14995
-
14996
- /***/ }),
14997
- /* 27 */
14998
- /***/ (function(module, exports, __webpack_require__) {
14999
-
15000
- "use strict";
15001
-
15002
-
15003
- Object.defineProperty(exports, "__esModule", {
15004
- value: true
15005
- });
15006
-
15007
- var _apiKeyForm = __webpack_require__(5);
15008
-
15009
- var _apiKeyForm2 = _interopRequireDefault(_apiKeyForm);
15010
-
15011
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15012
-
15013
- exports.default = {
15014
- name: 'connect-layout',
15015
- components: { ApiKeyForm: _apiKeyForm2.default },
15016
- data: function data() {
15017
- return {
15018
- email: optimoleDashboardApp.current_user.email,
15019
- strings: optimoleDashboardApp.strings,
15020
- showApiKey: false,
15021
- error: false,
15022
- showRegisterField: false,
15023
- from_register: false
15024
-
15025
- };
15026
- },
15027
-
15028
- computed: {
15029
- isLoading: function isLoading() {
15030
- return this.$store.state.loading;
15031
- },
15032
- isRestApiWorking: function isRestApiWorking() {
15033
- return this.$store.state.apiError;
15034
- }
15035
- },
15036
- methods: {
15037
- toggleApiForm: function toggleApiForm() {
15038
- this.error = false;
15039
- this.from_register = false;
15040
- this.showApiKey = !this.showApiKey;
15041
- },
15042
- registerAccount: function registerAccount() {
15043
- var _this = this;
15044
-
15045
- if (!this.showRegisterField) {
15046
- this.showRegisterField = true;
15047
- return;
15048
- }
15049
- this.error = false;
15050
- this.$store.dispatch('registerOptimole', {
15051
- email: this.email
15052
- }).then(function (response) {
15053
- if (response.code === 'success') {
15054
- _this.showApiKey = true;
15055
- _this.from_register = true;
15056
- } else {
15057
- _this.error = true;
15058
- }
15059
- });
15060
- }
15061
- }
15062
- // </script>
15063
- // <style scoped>
15064
- // input, .notification .delete, button {
15065
- // box-sizing: border-box !important;
15066
- // }
15067
- //
15068
- // </style>
15069
-
15070
- }; // <template>
15071
- // <section class="is-clearfix">
15072
- // <nav class="breadcrumb" aria-label="breadcrumbs" v-if="showApiKey">
15073
- // <ul>
15074
- // <li><a @click="toggleApiForm" href="#">{{strings.back_to_register}}</a></li>
15075
- // <li class="is-active is-marginless" v-if="showApiKey"><a href="#" aria-current="page">{{strings.back_to_connect}}</a>
15076
- // </li>
15077
- // </ul>
15078
- // </nav>
15079
- // <div class="notification is-danger" v-if="isRestApiWorking" v-html="strings.notice_api_not_working"></div>
15080
- // <div class="section" v-if="showApiKey">
15081
- // <div class="notification is-success" v-if="from_register">
15082
- // {{strings.notification_message_register}}
15083
- // </div>
15084
- // <api-key-form></api-key-form>
15085
- // <hr/>
15086
- // <div class="columns">
15087
- //
15088
- // <div class="column columns is-marginless is-vcentered ">
15089
- //
15090
- // <span class="dashicons dashicons-share column is-2 is-size-3 is-paddingless"></span>
15091
- // <div class="is-pulled-left column is-10 is-paddingless">
15092
- // <p class="title is-size-5 ">1. {{strings.step_one_api_title}}</p>
15093
- // <p class="subtitle is-size-6" v-html="strings.step_one_api_desc"></p>
15094
- // </div>
15095
- // </div>
15096
- // <div class="column is columns is-vcentered is-marginless">
15097
- //
15098
- // <span class="dashicons dashicons-admin-plugins column is-2 is-size-3 is-paddingless"></span>
15099
- // <div class="is-pulled-left column is-10 is-paddingless">
15100
- // <p class="title is-size-5">2. {{strings.step_two_api_title}}</p>
15101
- // <p class="subtitle is-size-6">{{strings.step_two_api_desc}}</p>
15102
- // </div>
15103
- // </div>
15104
- // </div>
15105
- //
15106
- // </div>
15107
- // <div class="columns is-vcentered is-desktop " v-else>
15108
- // <div class="column has-text-left is-fluid is-hidden-touch">
15109
- // <div class="hero">
15110
- // <div class="hero-body content">
15111
- // <p class="title">{{strings.account_needed_heading}}</p>
15112
- // <p class="subtitle " v-html="strings.account_needed_title"></p>
15113
- // <div class=" is-hidden-touch">
15114
- // <div class="columns is-vcentered ">
15115
- // <div class=" is-narrow is-hidden-touch column">
15116
- // <span class="dashicons icon dashicons-format-image is-size-4 "></span>
15117
- // </div>
15118
- // <div class="column">
15119
- // <p class="subtitle column is-size-6 is-vcentered has-text-left"
15120
- // v-html="strings.account_needed_subtitle_1"></p>
15121
- // </div>
15122
- // </div>
15123
- // <div class="columns is-vcentered">
15124
- // <div class=" is-narrow is-hidden-touch column">
15125
- // <span class="dashicons icon dashicons-plus is-size-4 "></span>
15126
- // </div>
15127
- // <div class="column">
15128
- // <p class="subtitle column is-size-6 is-vcentered has-text-left"
15129
- // v-html="strings.account_needed_subtitle_2"></p>
15130
- // </div>
15131
- // </div>
15132
- // </div>
15133
- // </div>
15134
- // </div>
15135
- // </div>
15136
- // <div class="column is-4-desktop is-full-touch ">
15137
- // <p v-html="strings.account_needed_title" class="is-size-6 has-text-centered is-hidden-desktop"></p>
15138
- // <div class="field " v-show="showRegisterField">
15139
- // <label for="optml-email" class="label title is-size-5 is-12">{{strings.email_address_label}}
15140
- // :</label>
15141
- // <div class="control is-12 is-small has-icons-left ">
15142
- // <input name="optml-email" id="optml-email" class="input is-medium is-fullwidth is-danger"
15143
- // type="email"
15144
- // v-model="email"/>
15145
- // <span class="icon is-small is-left dashicons dashicons-email"></span>
15146
- //
15147
- // </div>
15148
- //
15149
- // <p class="help is-danger" v-if="error" v-html="strings.error_register"></p>
15150
- // </div>
15151
- // <div class="field ">
15152
- // <div class="control ">
15153
- // <div class=" has-text-centered-mobile">
15154
- // <button @click="registerAccount" class="button is-fullwidth is-medium is-primary "
15155
- // :class="isLoading ? 'is-loading' :'' ">
15156
- // <span class="icon dashicons dashicons-admin-users"></span>
15157
- // <span>{{strings.register_btn}}</span>
15158
- // </button>
15159
- // </div>
15160
- // <hr/>
15161
- // <div class=" is-right has-text-centered-mobile has-text-right">
15162
- // <button @click="toggleApiForm" class="button is-fullwidth is-medium is-outlined is-info">
15163
- // <span class="icon dashicons dashicons-admin-network is-small"></span>
15164
- // <span>{{strings.api_exists}}</span>
15165
- // </button>
15166
- // </div>
15167
- // </div>
15168
- // </div>
15169
- // </div>
15170
- // </div>
15171
- // </section>
15172
- // </template>
15173
- //
15174
- // <script>
15175
-
15176
- /***/ }),
15177
- /* 28 */
15178
- /***/ (function(module, exports, __webpack_require__) {
15179
-
15180
- "use strict";
15181
-
15182
-
15183
- Object.defineProperty(exports, "__esModule", {
15184
- value: true
15185
- });
15186
- // <template>
15187
- // <div>
15188
- // <div class="field has-addons api-key-field">
15189
- // <label v-if="isConnected"
15190
- // class="label api-key-label has-text-grey-dark">{{strings.api_key_placeholder}}:</label>
15191
- // <div class="control is-expanded api-key-control">
15192
- // <input :type="isConnected ? 'password' : 'text'" :disabled="isConnected" name="api_key" class="input "
15193
- // :class="validKey ? '' : 'is-danger'" :placeholder="strings.api_key_placeholder"
15194
- // v-model="apiKey">
15195
- // </div>
15196
- // <div class="control">
15197
- // <button v-if="! isConnected" class="button button is-success "
15198
- // @click="connect" :class="{ 'is-loading' : this.$store.state.isConnecting }">
15199
- // <span class="icon"><i class="dashicons dashicons-admin-plugins"></i></span>
15200
- // <span>{{strings.connect_btn}}</span>
15201
- // </button>
15202
- // <button v-else class="button is-danger " @click="disconnect"
15203
- // :class="{ 'is-loading' : this.$store.state.isConnecting }">
15204
- // <span class="icon"><i class="dashicons dashicons-dismiss"></i></span>
15205
- // <span>{{strings.disconnect_btn}}</span>
15206
- // </button>
15207
- // </div>
15208
- // </div>
15209
- // <p v-if="! validKey" class="help is-danger">
15210
- // {{strings.invalid_key}}
15211
- // </p>
15212
- // </div>
15213
- // </template>
15214
- //
15215
- // <script>
15216
- exports.default = {
15217
- name: 'api-key-form',
15218
- data: function data() {
15219
- return {
15220
- apiKey: this.$store.state.apiKey ? this.$store.state.apiKey : '',
15221
- connected: this.$store.state.connected,
15222
- strings: optimoleDashboardApp.strings,
15223
- isLoading: false
15224
- };
15225
- },
15226
-
15227
- mounted: function mounted() {},
15228
-
15229
- computed: {
15230
- validKey: function validKey() {
15231
- return this.$store.state.apiKeyValidity;
15232
- },
15233
- isConnected: function isConnected() {
15234
- return this.$store.state.connected;
15235
- }
15236
- },
15237
- methods: {
15238
- connect: function connect() {
15239
- this.$store.dispatch('connectOptimole', {
15240
- apiKey: this.apiKey
15241
- });
15242
- },
15243
- disconnect: function disconnect() {
15244
- this.apiKey = '';
15245
- this.$store.dispatch('disconnectOptimole', {});
15246
- }
15247
- }
15248
- // </script>
15249
-
15250
- };
15251
-
15252
- /***/ }),
15253
- /* 29 */
15254
- /***/ (function(module, exports) {
15255
-
15256
- module.exports = "\r\n\t<div>\r\n\t\t<div class=\"field has-addons api-key-field\">\r\n\t\t\t<label v-if=\"isConnected\"\r\n\t\t\t\t\tclass=\"label api-key-label has-text-grey-dark\">{{strings.api_key_placeholder}}:</label>\r\n\t\t\t<div class=\"control is-expanded api-key-control\">\r\n\t\t\t\t<input :type=\"isConnected ? 'password' : 'text'\" :disabled=\"isConnected\" name=\"api_key\" class=\"input \"\r\n\t\t\t\t\t\t:class=\"validKey ? '' : 'is-danger'\" :placeholder=\"strings.api_key_placeholder\"\r\n\t\t\t\t\t\tv-model=\"apiKey\">\r\n\t\t\t</div>\r\n\t\t\t<div class=\"control\">\r\n\t\t\t\t<button v-if=\"! isConnected\" class=\"button button is-success \"\r\n\t\t\t\t\t\t@click=\"connect\" :class=\"{ 'is-loading' : this.$store.state.isConnecting }\">\r\n\t\t\t\t\t<span class=\"icon\"><i class=\"dashicons dashicons-admin-plugins\"></i></span>\r\n\t\t\t\t\t<span>{{strings.connect_btn}}</span>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button v-else class=\"button is-danger \" @click=\"disconnect\"\r\n\t\t\t\t\t\t:class=\"{ 'is-loading' : this.$store.state.isConnecting }\">\r\n\t\t\t\t\t<span class=\"icon\"><i class=\"dashicons dashicons-dismiss\"></i></span>\r\n\t\t\t\t\t<span>{{strings.disconnect_btn}}</span>\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<p v-if=\"! validKey\" class=\"help is-danger\">\r\n\t\t\t{{strings.invalid_key}}\r\n\t\t</p>\r\n\t</div>\r\n";
15257
-
15258
- /***/ }),
15259
- /* 30 */
15260
- /***/ (function(module, exports) {
15261
-
15262
- module.exports = "\n\t<section class=\"is-clearfix\" _v-c57b780c=\"\">\n\t\t<nav class=\"breadcrumb\" aria-label=\"breadcrumbs\" v-if=\"showApiKey\" _v-c57b780c=\"\">\n\t\t\t<ul _v-c57b780c=\"\">\n\t\t\t\t<li _v-c57b780c=\"\"><a @click=\"toggleApiForm\" href=\"#\" _v-c57b780c=\"\">{{strings.back_to_register}}</a></li>\n\t\t\t\t<li class=\"is-active is-marginless\" v-if=\"showApiKey\" _v-c57b780c=\"\"><a href=\"#\" aria-current=\"page\" _v-c57b780c=\"\">{{strings.back_to_connect}}</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</nav>\n\t\t<div class=\"notification is-danger\" v-if=\"isRestApiWorking\" v-html=\"strings.notice_api_not_working\" _v-c57b780c=\"\"></div>\n\t\t<div class=\"section\" v-if=\"showApiKey\" _v-c57b780c=\"\">\n\t\t\t<div class=\"notification is-success\" v-if=\"from_register\" _v-c57b780c=\"\">\n\t\t\t\t{{strings.notification_message_register}}\n\t\t\t</div>\n\t\t\t<api-key-form _v-c57b780c=\"\"></api-key-form>\n\t\t\t<hr _v-c57b780c=\"\">\n\t\t\t<div class=\"columns\" _v-c57b780c=\"\">\n\t\t\t\t\n\t\t\t\t<div class=\"column columns is-marginless is-vcentered \" _v-c57b780c=\"\">\n\t\t\t\t\t\n\t\t\t\t\t<span class=\"dashicons dashicons-share column is-2 is-size-3 is-paddingless\" _v-c57b780c=\"\"></span>\n\t\t\t\t\t<div class=\"is-pulled-left column is-10 is-paddingless\" _v-c57b780c=\"\">\n\t\t\t\t\t\t<p class=\"title is-size-5 \" _v-c57b780c=\"\">1. {{strings.step_one_api_title}}</p>\n\t\t\t\t\t\t<p class=\"subtitle is-size-6\" v-html=\"strings.step_one_api_desc\" _v-c57b780c=\"\"></p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"column is columns is-vcentered is-marginless\" _v-c57b780c=\"\">\n\t\t\t\t\t\n\t\t\t\t\t<span class=\"dashicons dashicons-admin-plugins column is-2 is-size-3 is-paddingless\" _v-c57b780c=\"\"></span>\n\t\t\t\t\t<div class=\"is-pulled-left column is-10 is-paddingless\" _v-c57b780c=\"\">\n\t\t\t\t\t\t<p class=\"title is-size-5\" _v-c57b780c=\"\">2. {{strings.step_two_api_title}}</p>\n\t\t\t\t\t\t<p class=\"subtitle is-size-6\" _v-c57b780c=\"\">{{strings.step_two_api_desc}}</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\n\t\t</div>\n\t\t<div class=\"columns is-vcentered is-desktop \" v-else=\"\" _v-c57b780c=\"\">\n\t\t\t<div class=\"column has-text-left is-fluid is-hidden-touch\" _v-c57b780c=\"\">\n\t\t\t\t<div class=\"hero\" _v-c57b780c=\"\">\n\t\t\t\t\t<div class=\"hero-body content\" _v-c57b780c=\"\">\n\t\t\t\t\t\t<p class=\"title\" _v-c57b780c=\"\">{{strings.account_needed_heading}}</p>\n\t\t\t\t\t\t<p class=\"subtitle \" v-html=\"strings.account_needed_title\" _v-c57b780c=\"\"></p>\n\t\t\t\t\t\t<div class=\" is-hidden-touch\" _v-c57b780c=\"\">\n\t\t\t\t\t\t\t<div class=\"columns is-vcentered \" _v-c57b780c=\"\">\n\t\t\t\t\t\t\t\t<div class=\" is-narrow is-hidden-touch column\" _v-c57b780c=\"\">\n\t\t\t\t\t\t\t\t\t<span class=\"dashicons icon dashicons-format-image is-size-4 \" _v-c57b780c=\"\"></span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"column\" _v-c57b780c=\"\">\n\t\t\t\t\t\t\t\t\t<p class=\"subtitle column is-size-6 is-vcentered has-text-left\" v-html=\"strings.account_needed_subtitle_1\" _v-c57b780c=\"\"></p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"columns is-vcentered\" _v-c57b780c=\"\">\n\t\t\t\t\t\t\t\t<div class=\" is-narrow is-hidden-touch column\" _v-c57b780c=\"\">\n\t\t\t\t\t\t\t\t\t<span class=\"dashicons icon dashicons-plus is-size-4 \" _v-c57b780c=\"\"></span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"column\" _v-c57b780c=\"\">\n\t\t\t\t\t\t\t\t\t<p class=\"subtitle column is-size-6 is-vcentered has-text-left\" v-html=\"strings.account_needed_subtitle_2\" _v-c57b780c=\"\"></p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"column is-4-desktop is-full-touch \" _v-c57b780c=\"\">\n\t\t\t\t<p v-html=\"strings.account_needed_title\" class=\"is-size-6 has-text-centered is-hidden-desktop\" _v-c57b780c=\"\"></p>\n\t\t\t\t<div class=\"field \" v-show=\"showRegisterField\" _v-c57b780c=\"\">\n\t\t\t\t\t<label for=\"optml-email\" class=\"label title is-size-5 is-12\" _v-c57b780c=\"\">{{strings.email_address_label}}\n\t\t\t\t\t\t:</label>\n\t\t\t\t\t<div class=\"control is-12 is-small has-icons-left \" _v-c57b780c=\"\">\n\t\t\t\t\t\t<input name=\"optml-email\" id=\"optml-email\" class=\"input is-medium is-fullwidth is-danger\" type=\"email\" v-model=\"email\" _v-c57b780c=\"\">\n\t\t\t\t\t\t<span class=\"icon is-small is-left dashicons dashicons-email\" _v-c57b780c=\"\"></span>\n\t\t\t\t\t\n\t\t\t\t\t</div>\n\t\t\t\t\t\n\t\t\t\t\t<p class=\"help is-danger\" v-if=\"error\" v-html=\"strings.error_register\" _v-c57b780c=\"\"></p>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"field \" _v-c57b780c=\"\">\n\t\t\t\t\t<div class=\"control \" _v-c57b780c=\"\">\n\t\t\t\t\t\t<div class=\" has-text-centered-mobile\" _v-c57b780c=\"\">\n\t\t\t\t\t\t\t<button @click=\"registerAccount\" class=\"button is-fullwidth is-medium is-primary \" :class=\"isLoading ? 'is-loading' :'' \" _v-c57b780c=\"\">\n\t\t\t\t\t\t\t\t<span class=\"icon dashicons dashicons-admin-users\" _v-c57b780c=\"\"></span>\n\t\t\t\t\t\t\t\t<span _v-c57b780c=\"\">{{strings.register_btn}}</span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<hr _v-c57b780c=\"\">\n\t\t\t\t\t\t<div class=\" is-right has-text-centered-mobile has-text-right\" _v-c57b780c=\"\">\n\t\t\t\t\t\t\t<button @click=\"toggleApiForm\" class=\"button is-fullwidth is-medium is-outlined is-info\" _v-c57b780c=\"\">\n\t\t\t\t\t\t\t\t<span class=\"icon dashicons dashicons-admin-network is-small\" _v-c57b780c=\"\"></span>\n\t\t\t\t\t\t\t\t<span _v-c57b780c=\"\">{{strings.api_exists}}</span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n";
15263
-
15264
- /***/ }),
15265
- /* 31 */
15266
- /***/ (function(module, exports, __webpack_require__) {
15267
-
15268
- var __vue_script__, __vue_template__
15269
- __webpack_require__(32)
15270
- __vue_script__ = __webpack_require__(34)
15271
- __vue_template__ = __webpack_require__(35)
15272
- module.exports = __vue_script__ || {}
15273
- if (module.exports.__esModule) module.exports = module.exports.default
15274
- if (__vue_template__) { (typeof module.exports === "function" ? module.exports.options : module.exports).template = __vue_template__ }
15275
- if (false) {(function () { module.hot.accept()
15276
- var hotAPI = require("vue-hot-reload-api")
15277
- hotAPI.install(require("vue"), true)
15278
- if (!hotAPI.compatible) return
15279
- var id = "D:\\dev\\optimole-wp\\assets\\vue\\components\\last-images.vue"
15280
- if (!module.hot.data) {
15281
- hotAPI.createRecord(id, module.exports)
15282
- } else {
15283
- hotAPI.update(id, module.exports, __vue_template__)
15284
- }
15285
- })()}
15286
-
15287
- /***/ }),
15288
- /* 32 */
15289
- /***/ (function(module, exports, __webpack_require__) {
15290
-
15291
- // style-loader: Adds some css to the DOM by adding a <style> tag
15292
-
15293
- // load the styles
15294
- var content = __webpack_require__(33);
15295
- if(typeof content === 'string') content = [[module.i, content, '']];
15296
- // add the styles to the DOM
15297
- var update = __webpack_require__(1)(content, {});
15298
- if(content.locals) module.exports = content.locals;
15299
- // Hot Module Replacement
15300
- if(false) {
15301
- // When the styles change, update the <style> tags
15302
- if(!content.locals) {
15303
- module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-0659935c&file=last-images.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./last-images.vue", function() {
15304
- var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-0659935c&file=last-images.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./last-images.vue");
15305
- if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
15306
- update(newContent);
15307
- });
15308
- }
15309
- // When the module is disposed, remove the <style> tags
15310
- module.hot.dispose(function() { update(); });
15311
- }
15312
-
15313
- /***/ }),
15314
- /* 33 */
15315
- /***/ (function(module, exports, __webpack_require__) {
15316
-
15317
- exports = module.exports = __webpack_require__(0)();
15318
- // imports
15319
-
15320
-
15321
- // module
15322
- exports.push([module.i, "\n\t.loader[_v-0659935c] {\n\t\tmargin: 0 auto;\n\t\tfont-size: 10em;\n\t\tborder-left: 2px solid #888 !important;\n\t\tborder-bottom: 2px solid #888 !important;\n\t\tmargin-top: 0.2em;\n\t}\n\t\n\t.progress[_v-0659935c]::-webkit-progress-value {\n\t\ttransition: width 0.5s ease;\n\t}\n", ""]);
15323
-
15324
- // exports
15325
-
15326
-
15327
- /***/ }),
15328
- /* 34 */
15329
- /***/ (function(module, exports, __webpack_require__) {
15330
-
15331
- "use strict";
15332
-
15333
-
15334
- Object.defineProperty(exports, "__esModule", {
15335
- value: true
15336
- });
15337
- // <template>
15338
- // <div>
15339
- // <div class="optimized-images" v-if="! loading ">
15340
- // <div v-if="!noImages">
15341
- // <h3 class="has-text-centered">{{strings.last}} {{strings.optimized_images}}</h3>
15342
- // <table class="table is-striped is-hoverable is-fullwidth">
15343
- // <thead>
15344
- // <tr>
15345
- // <th class="optml-image-heading">{{strings.image}}</th>
15346
- // <th class="optml-image-ratio-heading">{{strings.compression}}</th>
15347
- // </tr>
15348
- // </thead>
15349
- // <tbody>
15350
- // <tr v-for="(item, index) in imageData">
15351
- // <td><a :href="item.url" target="_blank"><img :src="item.url" class="optml-image"/></a></td>
15352
- // <td><p
15353
- // class="optml-ratio-feedback"
15354
- // v-html="compressionRate(item.ex_size_raw, item.new_size_raw)"></p>
15355
- // </td>
15356
- // </tr>
15357
- // </tbody>
15358
- // </table>
15359
- // </div>
15360
- // </div>
15361
- // <div v-else>
15362
- // <iframe width="1" height="1" :src="home_url" style="visibility: hidden"></iframe>
15363
- // <h6 class="has-text-centered">{{strings.loading_latest_images}}</h6>
15364
- // <progress class="progress is-large" :value="startTime" :max="maxTime"></progress>
15365
- // </div>
15366
- // <table class="table is-striped is-hoverable is-fullwidth" v-if="noImages">
15367
- // <thead>
15368
- // <tr>
15369
- // <th class="optml-image-heading has-text-centered" v-html="strings.no_images_found"></th>
15370
- // </tr>
15371
- // </thead>
15372
- // </table>
15373
- // </div>
15374
- // </template>
15375
- //
15376
- // <script>
15377
-
15378
- exports.default = {
15379
- name: "last-images",
15380
- data: function data() {
15381
- return {
15382
- loading: true,
15383
- startTime: 0,
15384
- maxTime: 20,
15385
- noImages: false,
15386
- home_url: optimoleDashboardApp.home_url,
15387
- strings: optimoleDashboardApp.strings.latest_images
15388
- };
15389
- },
15390
-
15391
- props: {
15392
- status: status
15393
- },
15394
- mounted: function mounted() {
15395
- if (this.$store.state.optimizedImages.length > 0) {
15396
- this.loading = false;
15397
- return;
15398
- }
15399
- this.doProgressBar();
15400
- this.$store.dispatch('retrieveOptimizedImages', { waitTime: this.maxTime * 1000, component: this });
15401
- },
15402
-
15403
- watch: {
15404
- imageData: function imageData() {
15405
- var _this = this;
15406
-
15407
- if (this.imageData.length > 0) {
15408
- this.startTime = this.maxTime;
15409
- setTimeout(function () {
15410
- _this.loading = false;
15411
- }, 1000);
15412
- }
15413
- }
15414
- },
15415
- computed: {
15416
- imageData: function imageData() {
15417
-
15418
- return this.$store.state.optimizedImages !== null ? this.$store.state.optimizedImages : [];
15419
- }
15420
- },
15421
- methods: {
15422
- doProgressBar: function doProgressBar() {
15423
- if (this.startTime === this.maxTime) {
15424
- return;
15425
- }
15426
- this.startTime++;
15427
- //console.log(this.startTime);
15428
- setTimeout(this.doProgressBar, 1000);
15429
- },
15430
- compressionRate: function compressionRate(oldSize, newSize) {
15431
- var value = (parseFloat(oldSize / newSize * 100) - 100).toFixed(1);
15432
- if (value < 1) {
15433
- return this.strings.same_size;
15434
- }
15435
- if (value > 1 && value < 25) {
15436
- return this.strings.small_optimization.replace('{ratio}', value.toString() + '%');
15437
- }
15438
- if (value > 25 && value < 100) {
15439
- return this.strings.medium_optimization.replace('{ratio}', value.toString() + '%');
15440
- }
15441
- if (value > 100) {
15442
- return this.strings.big_optimization.replace('{ratio}', (Math.floor(value / 10 + 10) / 10).toFixed(1).toString() + 'x');
15443
- }
15444
- }
15445
- }
15446
- // </script>
15447
- //
15448
- // <style scoped>
15449
- // .loader {
15450
- // margin: 0 auto;
15451
- // font-size: 10em;
15452
- // border-left: 2px solid #888 !important;
15453
- // border-bottom: 2px solid #888 !important;
15454
- // margin-top: 0.2em;
15455
- // }
15456
- //
15457
- // .progress::-webkit-progress-value {
15458
- // transition: width 0.5s ease;
15459
- // }
15460
- // </style>
15461
-
15462
- };
15463
-
15464
- /***/ }),
15465
- /* 35 */
15466
- /***/ (function(module, exports) {
15467
-
15468
- module.exports = "\n\t<div _v-0659935c=\"\">\n\t\t<div class=\"optimized-images\" v-if=\"! loading \" _v-0659935c=\"\">\n\t\t\t<div v-if=\"!noImages\" _v-0659935c=\"\">\n\t\t\t\t<h3 class=\"has-text-centered\" _v-0659935c=\"\">{{strings.last}} {{strings.optimized_images}}</h3>\n\t\t\t\t<table class=\"table is-striped is-hoverable is-fullwidth\" _v-0659935c=\"\">\n\t\t\t\t\t<thead _v-0659935c=\"\">\n\t\t\t\t\t<tr _v-0659935c=\"\">\n\t\t\t\t\t\t<th class=\"optml-image-heading\" _v-0659935c=\"\">{{strings.image}}</th>\n\t\t\t\t\t\t<th class=\"optml-image-ratio-heading\" _v-0659935c=\"\">{{strings.compression}}</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody _v-0659935c=\"\">\n\t\t\t\t\t<tr v-for=\"(item, index) in imageData\" _v-0659935c=\"\">\n\t\t\t\t\t\t<td _v-0659935c=\"\"><a :href=\"item.url\" target=\"_blank\" _v-0659935c=\"\"><img :src=\"item.url\" class=\"optml-image\" _v-0659935c=\"\"></a></td>\n\t\t\t\t\t\t<td _v-0659935c=\"\"><p class=\"optml-ratio-feedback\" v-html=\"compressionRate(item.ex_size_raw, item.new_size_raw)\" _v-0659935c=\"\"></p>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-else=\"\" _v-0659935c=\"\">\n\t\t\t<iframe width=\"1\" height=\"1\" :src=\"home_url\" style=\"visibility: hidden\" _v-0659935c=\"\"></iframe>\n\t\t\t<h6 class=\"has-text-centered\" _v-0659935c=\"\">{{strings.loading_latest_images}}</h6>\n\t\t\t<progress class=\"progress is-large\" :value=\"startTime\" :max=\"maxTime\" _v-0659935c=\"\"></progress>\n\t\t</div>\n\t\t<table class=\"table is-striped is-hoverable is-fullwidth\" v-if=\"noImages\" _v-0659935c=\"\">\n\t\t\t<thead _v-0659935c=\"\">\n\t\t\t<tr _v-0659935c=\"\">\n\t\t\t\t<th class=\"optml-image-heading has-text-centered\" v-html=\"strings.no_images_found\" _v-0659935c=\"\"></th>\n\t\t\t</tr>\n\t\t\t</thead>\n\t\t</table>\n\t</div>\n";
15469
-
15470
- /***/ }),
15471
- /* 36 */
15472
- /***/ (function(module, exports, __webpack_require__) {
15473
-
15474
- var __vue_script__, __vue_template__
15475
- __webpack_require__(37)
15476
- __vue_script__ = __webpack_require__(39)
15477
- __vue_template__ = __webpack_require__(45)
15478
- module.exports = __vue_script__ || {}
15479
- if (module.exports.__esModule) module.exports = module.exports.default
15480
- if (__vue_template__) { (typeof module.exports === "function" ? module.exports.options : module.exports).template = __vue_template__ }
15481
- if (false) {(function () { module.hot.accept()
15482
- var hotAPI = require("vue-hot-reload-api")
15483
- hotAPI.install(require("vue"), true)
15484
- if (!hotAPI.compatible) return
15485
- var id = "D:\\dev\\optimole-wp\\assets\\vue\\components\\options.vue"
15486
- if (!module.hot.data) {
15487
- hotAPI.createRecord(id, module.exports)
15488
- } else {
15489
- hotAPI.update(id, module.exports, __vue_template__)
15490
- }
15491
- })()}
15492
-
15493
- /***/ }),
15494
- /* 37 */
15495
- /***/ (function(module, exports, __webpack_require__) {
15496
-
15497
- // style-loader: Adds some css to the DOM by adding a <style> tag
15498
-
15499
- // load the styles
15500
- var content = __webpack_require__(38);
15501
- if(typeof content === 'string') content = [[module.i, content, '']];
15502
- // add the styles to the DOM
15503
- var update = __webpack_require__(1)(content, {});
15504
- if(content.locals) module.exports = content.locals;
15505
- // Hot Module Replacement
15506
- if(false) {
15507
- // When the styles change, update the <style> tags
15508
- if(!content.locals) {
15509
- module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-546bc561&file=options.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./options.vue", function() {
15510
- var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-546bc561&file=options.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./options.vue");
15511
- if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
15512
- update(newContent);
15513
- });
15514
- }
15515
- // When the module is disposed, remove the <style> tags
15516
- module.hot.dispose(function() { update(); });
15517
- }
15518
-
15519
- /***/ }),
15520
- /* 38 */
15521
- /***/ (function(module, exports, __webpack_require__) {
15522
-
15523
- exports = module.exports = __webpack_require__(0)();
15524
- // imports
15525
-
15526
-
15527
- // module
15528
- exports.push([module.i, "\n\t.saving--option[_v-546bc561] {\n\t\topacity: .75;\n\t}\n\t\n\t#optimole-app .notification[_v-546bc561] {\n\t\tpadding: 0.5rem;\n\t}\n\t\n\t#optimole-app .image[_v-546bc561] {\n\t\ttext-align: center;\n\t}\n\t\n\t#optimole-app .visual-compare img[_v-546bc561] {\n\t\twidth: 100%;\n\t}\n\t\n\t#optimole-app .icon.dashicons.dashicons-controls-pause[_v-546bc561] {\n\t\ttransform: rotate(90deg);\n\t}\n\t\n\t#optimole-app .image img[_v-546bc561] {\n\t\t\n\t\tmax-height: 300px;\n\t\twidth: auto;\n\t\t\n\t}\n\t\n\t.field[_v-546bc561]:nth-child(even) {\n\t\t-ms-flex-pack: end;\n\t\t justify-content: flex-end;\n\t}\n\t\n\t#optimole-app .button.is-selected:not(.is-info) span[_v-546bc561] {\n\t\tcolor: #008ec2;\n\t}\n\t\n\t#optimole-app p.compress-optimization-ratio-done strong[_v-546bc561] {\n\t\t\n\t\tcolor: #44464e;\n\t}\n\t\n\t#optimole-app p.compress-optimization-ratio-nothing[_v-546bc561],\n\t#optimole-app p.compress-optimization-ratio-done[_v-546bc561] {\n\t\tposition: absolute;\n\t\tright: 10px;\n\t\tcolor: #44464e;\n\t\t\n\t\tfont-size: 0.9rem !important;\n\t\tline-height: 1.4rem;\n\t}\n\t\n\t#optimole-app p.compress-optimization-ratio-nothing[_v-546bc561] {\n\t\tcolor: #fff;\n\t\tleft: 20px;\n\t}\n\t\n\t#optimole-app .progress-wrapper[_v-546bc561] {\n\t\tposition: relative;\n\t}\n", ""]);
15529
-
15530
- // exports
15531
-
15532
-
15533
- /***/ }),
15534
- /* 39 */
15535
- /***/ (function(module, exports, __webpack_require__) {
15536
-
15537
- "use strict";
15538
-
15539
-
15540
- Object.defineProperty(exports, "__esModule", {
15541
- value: true
15542
- });
15543
-
15544
- var _image_diff = __webpack_require__(40);
15545
-
15546
- var _image_diff2 = _interopRequireDefault(_image_diff);
15547
-
15548
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15549
-
15550
- exports.default = {
15551
- name: "options",
15552
- components: { Image_diff: _image_diff2.default },
15553
- data: function data() {
15554
- return {
15555
- strings: optimoleDashboardApp.strings.options_strings,
15556
- all_strings: optimoleDashboardApp.strings,
15557
- showNotification: false,
15558
- loading_images: false,
15559
- showComparison: false,
15560
- showSave: false,
15561
- new_data: {}
15562
-
15563
- };
15564
- },
15565
-
15566
- mounted: function mounted() {
15567
- this.updateSampleImage(this.site_settings.quality);
15568
- },
15569
- methods: {
15570
- newSample: function newSample() {
15571
- this.updateSampleImage(this.new_data.quality, 'yes');
15572
- },
15573
- changeQuality: function changeQuality(value) {
15574
- if (this.showComparison !== true) {
15575
- this.showComparison = true;
15576
- }
15577
- this.updateSampleImage(value);
15578
- this.qualityStatus = value;
15579
- },
15580
- updateSampleImage: function updateSampleImage(value) {
15581
- var _this = this;
15582
-
15583
- var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'no';
15584
-
15585
- this.$store.dispatch('sampleRate', {
15586
- quality: value,
15587
- force: force,
15588
- component: this
15589
- }).then(function (response) {
15590
-
15591
- setTimeout(function () {
15592
- _this.showNotification = false;
15593
- }, 1000);
15594
- }, function (response) {});
15595
- },
15596
- saveChanges: function saveChanges() {
15597
- this.$store.dispatch('saveSettings', {
15598
- settings: this.new_data
15599
- });
15600
- },
15601
- isActiveQuality: function isActiveQuality(q) {
15602
- if (this.new_data && this.new_data.quality) {
15603
- return this.new_data.quality === q;
15604
- }
15605
- return this.site_settings.quality === q;
15606
- }
15607
- },
15608
- computed: {
15609
- site_settings: function site_settings() {
15610
- return this.$store.state.site_settings;
15611
- },
15612
-
15613
- getReplacerStatus: {
15614
- get: function get() {
15615
- return !(this.site_settings.image_replacer === 'disabled');
15616
- },
15617
- set: function set(value) {
15618
- this.new_data.image_replacer = value ? 'enabled' : 'disabled';
15619
- }
15620
- },
15621
- adminBarItemStatus: {
15622
- set: function set(value) {
15623
- this.new_data.admin_bar_item = value ? 'enabled' : 'disabled';
15624
- if (value) {
15625
- document.getElementById("wp-admin-bar-optml_image_quota").style.display = 'block';
15626
- } else {
15627
- document.getElementById("wp-admin-bar-optml_image_quota").style.display = 'none';
15628
- }
15629
- },
15630
- get: function get() {
15631
- return !(this.site_settings.admin_bar_item === 'disabled');
15632
- }
15633
- },
15634
- lazyLoadStatus: {
15635
- set: function set(value) {
15636
- this.new_data.lazyload = value ? 'enabled' : 'disabled';
15637
- },
15638
- get: function get() {
15639
- return !(this.site_settings.lazyload === 'disabled');
15640
- }
15641
- },
15642
- widthStatus: {
15643
- set: function set(value) {
15644
- this.new_data.max_width = value;
15645
- },
15646
- get: function get() {
15647
-
15648
- return this.site_settings.max_width;
15649
- }
15650
- },
15651
- heightStatus: {
15652
- set: function set(value) {
15653
- this.new_data.max_height = value;
15654
- },
15655
- get: function get() {
15656
-
15657
- return this.site_settings.max_height;
15658
- }
15659
- },
15660
- qualityStatus: {
15661
- set: function set(value) {
15662
- this.new_data.quality = value;
15663
- },
15664
- get: function get() {
15665
- return this.site_settings.quality;
15666
- }
15667
- },
15668
- compressionRatio: function compressionRatio() {
15669
- return (parseFloat(this.sample_images.optimized_size / this.sample_images.original_size) * 100).toFixed(0);
15670
- },
15671
- sample_images: function sample_images() {
15672
- return this.$store.state.sample_rate;
15673
- },
15674
- loading: function loading() {
15675
- return this.$store.state.loading;
15676
- }
15677
- }
15678
- // </script>
15679
- //
15680
- // <style scoped>
15681
- // .saving--option {
15682
- // opacity: .75;
15683
- // }
15684
- //
15685
- // #optimole-app .notification {
15686
- // padding: 0.5rem;
15687
- // }
15688
- //
15689
- // #optimole-app .image {
15690
- // text-align: center;
15691
- // }
15692
- //
15693
- // #optimole-app .visual-compare img {
15694
- // width: 100%;
15695
- // }
15696
- //
15697
- // #optimole-app .icon.dashicons.dashicons-controls-pause {
15698
- // transform: rotate(90deg);
15699
- // }
15700
- //
15701
- // #optimole-app .image img {
15702
- //
15703
- // max-height: 300px;
15704
- // width: auto;
15705
- //
15706
- // }
15707
- //
15708
- // .field:nth-child(even) {
15709
- // justify-content: flex-end;
15710
- // }
15711
- //
15712
- // #optimole-app .button.is-selected:not(.is-info) span {
15713
- // color: #008ec2;
15714
- // }
15715
- //
15716
- // #optimole-app p.compress-optimization-ratio-done strong {
15717
- //
15718
- // color: #44464e;
15719
- // }
15720
- //
15721
- // #optimole-app p.compress-optimization-ratio-nothing,
15722
- // #optimole-app p.compress-optimization-ratio-done {
15723
- // position: absolute;
15724
- // right: 10px;
15725
- // color: #44464e;
15726
- //
15727
- // font-size: 0.9rem !important;
15728
- // line-height: 1.4rem;
15729
- // }
15730
- //
15731
- // #optimole-app p.compress-optimization-ratio-nothing {
15732
- // color: #fff;
15733
- // left: 20px;
15734
- // }
15735
- //
15736
- // #optimole-app .progress-wrapper {
15737
- // position: relative;
15738
- // }
15739
- // </style>
15740
-
15741
- }; // <template>
15742
- // <div :class="{ 'saving--option' : this.$store.state.loading }">
15743
- //
15744
- // <div class="field columns">
15745
- // <label class="label column has-text-grey-dark">
15746
- // {{strings.enable_image_replace}}
15747
- // <p class="is-italic has-text-weight-normal">
15748
- // {{strings.replacer_desc}}
15749
- // </p>
15750
- // </label>
15751
- // <div class="column ">
15752
- // <toggle-button :class="'has-text-dark'"
15753
- // v-model="getReplacerStatus"
15754
- // :disabled="this.$store.state.loading"
15755
- // :labels="{checked: strings.enabled, unchecked: strings.disabled}"
15756
- // :width="80"
15757
- // :height="25"
15758
- // color="#008ec2"></toggle-button>
15759
- // </div>
15760
- //
15761
- // </div>
15762
- // <div class="field is-fullwidth columns">
15763
- // <label class="label column has-text-grey-dark">
15764
- // {{strings.toggle_ab_item}}
15765
- // <p class="is-italic has-text-weight-normal">
15766
- // {{strings.admin_bar_desc}}
15767
- // </p>
15768
- // </label>
15769
- //
15770
- // <div class="column ">
15771
- // <toggle-button :class="'has-text-dark'"
15772
- // v-model="adminBarItemStatus"
15773
- // :disabled="this.$store.state.loading"
15774
- // :labels="{checked: strings.show, unchecked: strings.hide}"
15775
- // :width="80"
15776
- // :height="25"
15777
- // color="#008ec2"></toggle-button>
15778
- // </div>
15779
- // </div>
15780
- //
15781
- // <div class="field is-fullwidth columns">
15782
- // <label class="label column has-text-grey-dark">
15783
- // {{strings.toggle_lazyload}}
15784
- // <p class="is-italic has-text-weight-normal">
15785
- // {{strings.lazyload_desc}}
15786
- // </p>
15787
- // </label>
15788
- //
15789
- // <div class="column ">
15790
- // <toggle-button :class="'has-text-dark'"
15791
- // v-model="lazyLoadStatus"
15792
- // :disabled="this.$store.state.loading"
15793
- // :labels="{checked: strings.enabled, unchecked: strings.disabled}"
15794
- // :width="80"
15795
- // :height="25"
15796
- // color="#008ec2"></toggle-button>
15797
- // </div>
15798
- // </div>
15799
- //
15800
- // <div class="field is-fullwidth columns n">
15801
- // <label class="label is-half column has-text-grey-dark no-padding-right ">
15802
- // {{strings.size_title}}
15803
- // <p class="is-italic has-text-weight-normal">
15804
- // {{strings.size_desc}}
15805
- // </p>
15806
- // </label>
15807
- //
15808
- // <div class="column is-paddingless">
15809
- // <div class="columns">
15810
- // <div class="field column is-narrow has-addons">
15811
- // <p class="control">
15812
- // <a class="button is-small is-static">
15813
- // {{strings.width_field}}
15814
- // </a>
15815
- // </p>
15816
- // <p class="control ">
15817
- // <input v-model="widthStatus" class="input is-small" type="number" min="100"
15818
- // max="10000">
15819
- // </p>
15820
- // </div>
15821
- // <div class="field column is-small has-addons">
15822
- // <p class="control">
15823
- // <a class="button is-small is-static">
15824
- // {{strings.height_field}}
15825
- // </a>
15826
- // </p>
15827
- // <p class="control ">
15828
- // <input v-model="heightStatus" class="input is-small" type="number" min="100"
15829
- // max="10000">
15830
- // </p>
15831
- // </div>
15832
- // </div>
15833
- // </div>
15834
- // </div>
15835
- //
15836
- // <div class="field columns">
15837
- // <label class="label column has-text-grey-dark">
15838
- // {{strings.quality_title}}
15839
- // <p class="is-italic has-text-weight-normal">
15840
- // {{strings.quality_desc}}
15841
- // </p>
15842
- // </label>
15843
- // <div class="column buttons ">
15844
- // <div class="field columns ">
15845
- // <div class="column field has-addons">
15846
- // <p class="control">
15847
- // <a @click="changeQuality('auto')"
15848
- // :class="{ 'is-info':isActiveQuality ( 'auto'), ' is-selected':site_settings.quality === 'auto' }"
15849
- // class="button is-small is-rounded">
15850
- // <span class="icon dashicons dashicons-marker"></span>
15851
- // <span>{{strings.auto_q_title}}</span>
15852
- // </a>
15853
- // </p>
15854
- // <p class="control">
15855
- // <a @click="changeQuality('high_c')"
15856
- // :class="{ 'is-info': isActiveQuality ('high_c'), 'is-selected':site_settings.quality === 'high_c' }"
15857
- // class="button is-rounded is-small">
15858
- // <span class="icon dashicons dashicons-menu"></span>
15859
- // <span>{{strings.high_q_title}}</span>
15860
- // </a>
15861
- // </p>
15862
- //
15863
- // <p class="control">
15864
- // <a @click="changeQuality('medium_c')"
15865
- // :class="{ 'is-info': isActiveQuality( 'medium_c' ), ' is-selected':site_settings.quality === 'medium_c' }"
15866
- // class="button is-small">
15867
- // <span class="icon dashicons dashicons-controls-pause"></span>
15868
- // <span class=" ">{{strings.medium_q_title}}</span>
15869
- // </a>
15870
- // </p>
15871
- //
15872
- // <p class="control">
15873
- // <a @click="changeQuality('low_c')"
15874
- // :class="{ 'is-info':isActiveQuality( 'low_c' ), ' is-selected':site_settings.quality === 'low_c' }"
15875
- // class="button is-small">
15876
- // <span class="icon dashicons dashicons-minus "></span>
15877
- // <span>{{strings.low_q_title}}</span>
15878
- // </a>
15879
- // </p>
15880
- // </div>
15881
- // <p class="control column has-text-centered-desktop has-text-left-touch ">
15882
- // <a @click="saveChanges()" class="button is-small is-success "
15883
- // :class="{'is-loading':loading}">
15884
- // <span class="dashicons dashicons-yes icon"></span>
15885
- // <span> {{strings.save_changes}}</span>
15886
- // </a>
15887
- // </p>
15888
- // </div>
15889
- // </div>
15890
- // </div>
15891
- // <div v-if="showComparison">
15892
- // <div v-if="loading_images" class="has-text-centered subtitle ">{{strings.sample_image_loading}}<span
15893
- // class="loader has-text-black-bis icon is-small"></span>
15894
- // </div>
15895
- // <div v-else-if="sample_images.id && sample_images.original_size > 0">
15896
- // <p class="title has-text-centered is-5 is-size-6-mobile">{{strings.quality_slider_desc}}</p>
15897
- // <div class="columns is-centered is-vcentered is-multiline is-mobile">
15898
- // <a @click="newSample()"
15899
- // class="button is-small is-pulled-right">
15900
- // <span class="icon dashicons dashicons-image-rotate"></span>
15901
- // </a>
15902
- // <div class="column visual-compare is-half-fullhd is-half-desktop is-three-quarters-touch is-12-mobile ">
15903
- // <div class="is-full progress-wrapper">
15904
- // <p class="subtitle is-size-6 compress-optimization-ratio-done has-text-centered"
15905
- // v-if="compressionRatio > 0">
15906
- // <strong>{{( 100 - compressionRatio )}}%</strong> smaller </p>
15907
- // <p class="subtitle compress-optimization-ratio-nothing is-size-6 has-text-centered" v-else>
15908
- // {{all_strings.latest_images.same_size}}
15909
- // </p>
15910
- // <progress class=" progress is-large is-success "
15911
- // :value="compressionRatio"
15912
- // :max="100">
15913
- // </progress>
15914
- // <hr/>
15915
- // </div>
15916
- // <Image_diff class="is-fullwidth" value="50" :first_label="strings.image_1_label"
15917
- // :second_label="strings.image_2_label">
15918
- // <img slot="first" :src="sample_images.optimized">
15919
- // <img slot="second" :src="sample_images.original">
15920
- // </Image_diff>
15921
- // </div>
15922
- // </div>
15923
- // </div>
15924
- // <div v-else-if=" sample_images.id < 0">
15925
- // <p class="title has-text-centered is-5 is-size-6-mobile">{{strings.no_images_found}}</p>
15926
- // </div>
15927
- // </div>
15928
- //
15929
- // </div>
15930
- //
15931
- // </template>
15932
- //
15933
- // <script>
15934
-
15935
- /***/ }),
15936
- /* 40 */
15937
- /***/ (function(module, exports, __webpack_require__) {
15938
-
15939
- var __vue_script__, __vue_template__
15940
- __webpack_require__(41)
15941
- __vue_script__ = __webpack_require__(43)
15942
- __vue_template__ = __webpack_require__(44)
15943
- module.exports = __vue_script__ || {}
15944
- if (module.exports.__esModule) module.exports = module.exports.default
15945
- if (__vue_template__) { (typeof module.exports === "function" ? module.exports.options : module.exports).template = __vue_template__ }
15946
- if (false) {(function () { module.hot.accept()
15947
- var hotAPI = require("vue-hot-reload-api")
15948
- hotAPI.install(require("vue"), true)
15949
- if (!hotAPI.compatible) return
15950
- var id = "D:\\dev\\optimole-wp\\assets\\vue\\components\\image_diff.vue"
15951
- if (!module.hot.data) {
15952
- hotAPI.createRecord(id, module.exports)
15953
- } else {
15954
- hotAPI.update(id, module.exports, __vue_template__)
15955
- }
15956
- })()}
15957
-
15958
- /***/ }),
15959
- /* 41 */
15960
- /***/ (function(module, exports, __webpack_require__) {
15961
-
15962
- // style-loader: Adds some css to the DOM by adding a <style> tag
15963
-
15964
- // load the styles
15965
- var content = __webpack_require__(42);
15966
- if(typeof content === 'string') content = [[module.i, content, '']];
15967
- // add the styles to the DOM
15968
- var update = __webpack_require__(1)(content, {});
15969
- if(content.locals) module.exports = content.locals;
15970
- // Hot Module Replacement
15971
- if(false) {
15972
- // When the styles change, update the <style> tags
15973
- if(!content.locals) {
15974
- module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-1a7eb376&file=image_diff.vue!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./image_diff.vue", function() {
15975
- var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-1a7eb376&file=image_diff.vue!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./image_diff.vue");
15976
- if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
15977
- update(newContent);
15978
- });
15979
- }
15980
- // When the module is disposed, remove the <style> tags
15981
- module.hot.dispose(function() { update(); });
15982
- }
15983
-
15984
- /***/ }),
15985
- /* 42 */
15986
- /***/ (function(module, exports, __webpack_require__) {
15987
-
15988
- exports = module.exports = __webpack_require__(0)();
15989
- // imports
15990
-
15991
-
15992
- // module
15993
- exports.push([module.i, "\n\t:root {\n\t\t--handle-bg: #4a4a4a;\n\t\t--handle-width: 30px;\n\t\t--handle-height: 30px;\n\t\t--handle-chevron-size: 20px;\n\t\t\n\t\t--handle-line-bg: #4a4a4a;\n\t\t--handle-line-width: 2px;\n\t\t--handle-line-height: 100%;\n\t\t\n\t\t--z-index-handle: 5;\n\t\t--z-index-handle-line: 4;\n\t\t--z-index-range-input: 6;\n\t}\n\t\n\t.compare-wrapper {\n\t\tposition: relative;\n\t}\n\t\n\t.compare,\n\t.compare__content {\n\t\tposition: relative;\n\t\theight: 100%;\n\t}\n\t\n\t.compare-overlay.initial,\n\t.compare__content.initial {\n\t\topacity: 0.2;\n\t}\n\t\n\t.compare-overlay,\n\t.compare__content {\n\t\ttransition: opacity .3s ease-in-out;\n\t}\n\t\n\t.compare-overlay {\n\t\tposition: absolute;\n\t\toverflow: hidden;\n\t\theight: 100%;\n\t\ttop: 0;\n\t}\n\t\n\t.compare-overlay__content {\n\t\tposition: relative;\n\t\theight: 100%;\n\t\twidth: 100%;\n\t}\n\t\n\t.handle__arrow {\n\t\tposition: absolute;\n\t\twidth: var(--handle-chevron-size);\n\t}\n\t\n\t.handle__arrow--l {\n\t\tleft: 0;\n\t}\n\t\n\t.handle__arrow--r {\n\t\tright: 0;\n\t}\n\t\n\t.handle-wrap {\n\t\tdisplay: -ms-flexbox;\n\t\tdisplay: flex;\n\t\t-ms-flex-align: center;\n\t\t align-items: center;\n\t\t-ms-flex-pack: center;\n\t\t justify-content: center;\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\theight: 100%;\n\t\ttransform: translate(-50%, -50%);\n\t\tz-index: var(--z-index-handle);\n\t}\n\t\n\t.handle-icon {\n\t\tdisplay: -ms-flexbox;\n\t\tdisplay: flex;\n\t\t-ms-flex-align: center;\n\t\t align-items: center;\n\t\t-ms-flex-pack: center;\n\t\t justify-content: center;\n\t\tcolor: white;\n\t\tbackground: var(--handle-bg);\n\t\tborder-radius: 50%;\n\t\twidth: var(--handle-width);\n\t\theight: var(--handle-height);\n\t}\n\t\n\t.handle-line {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\twidth: var(--handle-line-width);\n\t\theight: 100%;\n\t\tbackground: var(--handle-line-bg);\n\t\tz-index: var(--z-index-handle-line);\n\t\tpointer-events: none;\n\t\t-webkit-user-select: none;\n\t\t -moz-user-select: none;\n\t\t -ms-user-select: none;\n\t\t user-select: none;\n\t}\n\t\n\t.compare__range {\n\t\tposition: absolute;\n\t\tcursor: ew-resize;\n\t\tleft: calc(var(--handle-width) / -2);\n\t\twidth: calc(100% + var(--handle-width));\n\t\ttransform: translatey(-50%);\n\t\ttop: calc(50%);\n\t\tz-index: var(--z-index-range-input);\n\t\t-webkit-appearance: none;\n\t\theight: var(--handle-height);\n\t\t/* debugging purposes only */\n\t\tbackground: rgba(0, 0, 0, .4);\n\t\topacity: .0;\n\t}\n\t\n\t.object-fit-cover {\n\t\t-o-object-fit: cover;\n\t\t object-fit: cover;\n\t}\n\t\n\t.compare_optimized {\n\t\tright: 5px;\n\t}\n\t\n\t.compare_original {\n\t\tleft: 5px;\n\t}\n\t\n\t.compare_label {\n\t\tposition: absolute;\n\t\tz-index: 999;\n\t\tbackground: #444;\n\t\topacity: 0.6;\n\t\tpadding: 0.5rem;\n\t\tborder-radius: 0.2rem;\n\t\tcolor: #fff;\n\t\ttop: 10px;\n\t\t\n\t}\n", ""]);
15994
-
15995
- // exports
15996
-
15997
-
15998
- /***/ }),
15999
- /* 43 */
16000
- /***/ (function(module, exports, __webpack_require__) {
16001
-
16002
- "use strict";
16003
-
16004
-
16005
- Object.defineProperty(exports, "__esModule", {
16006
- value: true
16007
- });
16008
- // <template>
16009
- // <div class="compare-wrapper" @mouseenter="removeInitial">
16010
- // <div class="compare">
16011
- //
16012
- // <span class="compare_label compare_original">{{this.first_label}}</span>
16013
- // <span class="compare_label compare_optimized">{{this.second_label}}</span>
16014
- // <div class="compare__content " :class="{'initial':!initial}" :style="{'width': width}">
16015
- // <slot name="first"></slot>
16016
- //
16017
- // </div>
16018
- //
16019
- // <resize-observer @notify="handleResize" style="display: none"></resize-observer>
16020
- // <div class="handle-wrap" :style="{left:`calc(${compareWidth + '%'} - var(--handle-line-width) / 2`}">
16021
- // <div class="handle-icon">
16022
- // <svg class="handle__arrow handle__arrow--l" xmlns="http://www.w3.org/2000/svg" width="24"
16023
- // height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
16024
- // stroke-linecap="round" stroke-linejoin="round">
16025
- // <polyline points="15 18 9 12 15 6"></polyline>
16026
- // </svg>
16027
- // <svg class="handle__arrow handle__arrow--r" xmlns="http://www.w3.org/2000/svg" width="24"
16028
- // height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
16029
- // stroke-linecap="round" stroke-linejoin="round">
16030
- // <polyline points="9 18 15 12 9 6"></polyline>
16031
- // </svg>
16032
- //
16033
- // </div>
16034
- // <span class="handle-line"></span>
16035
- // </div>
16036
- //
16037
- // <div class="compare-overlay" :class="{'initial':!initial}" :style="{width:`calc(${compareWidth + '%'})`}">
16038
- // <div class="compare-overlay__content" :style="{ 'width': width}">
16039
- // <slot name="second"></slot>
16040
- // </div>
16041
- // </div>
16042
- //
16043
- // </div>
16044
- // <input type="range" min="0" max="100" :step="step" class="compare__range" :value="compareWidth"
16045
- // @input="handleInput" tabindex="-1">
16046
- //
16047
- // </div>
16048
- // </template>
16049
- // <script>
16050
-
16051
- exports.default = {
16052
- name: 'image_diff',
16053
- props: {
16054
- value: { default: 50 },
16055
- first_label: {
16056
- type: String,
16057
- default: ''
16058
- },
16059
- second_label: {
16060
- type: String,
16061
- default: ''
16062
- },
16063
- step: { default: '.1' }
16064
- },
16065
- data: function data() {
16066
- return {
16067
- width: null,
16068
- initial: false,
16069
- compareWidth: this.value
16070
- };
16071
- },
16072
-
16073
- watch: {
16074
- value: function value() {
16075
- this.compareWidth = this.value;
16076
- }
16077
- },
16078
- mounted: function mounted() {
16079
- this.width = this.getContainerWidth();
16080
- },
16081
-
16082
- methods: {
16083
- removeInitial: function removeInitial() {
16084
- this.initial = true;
16085
- },
16086
- handleInput: function handleInput(e) {
16087
- this.compareWidth = e.target.value;
16088
- this.$emit('input', e.target.value);
16089
- },
16090
- handleResize: function handleResize() {
16091
- var w = this.getContainerWidth();
16092
- if (w === this.width) return;
16093
- this.width = w;
16094
- },
16095
- getContainerWidth: function getContainerWidth() {
16096
- return window.getComputedStyle(this.$el, null).getPropertyValue('width');
16097
- }
16098
- }
16099
- // </script>
16100
- // <style>
16101
- // :root {
16102
- // --handle-bg: #4a4a4a;
16103
- // --handle-width: 30px;
16104
- // --handle-height: 30px;
16105
- // --handle-chevron-size: 20px;
16106
- //
16107
- // --handle-line-bg: #4a4a4a;
16108
- // --handle-line-width: 2px;
16109
- // --handle-line-height: 100%;
16110
- //
16111
- // --z-index-handle: 5;
16112
- // --z-index-handle-line: 4;
16113
- // --z-index-range-input: 6;
16114
- // }
16115
- //
16116
- // .compare-wrapper {
16117
- // position: relative;
16118
- // }
16119
- //
16120
- // .compare,
16121
- // .compare__content {
16122
- // position: relative;
16123
- // height: 100%;
16124
- // }
16125
- //
16126
- // .compare-overlay.initial,
16127
- // .compare__content.initial {
16128
- // opacity: 0.2;
16129
- // }
16130
- //
16131
- // .compare-overlay,
16132
- // .compare__content {
16133
- // -webkit-transition: opacity .3s ease-in-out;
16134
- // -moz-transition: opacity .3s ease-in-out;
16135
- // -ms-transition: opacity .3s ease-in-out;
16136
- // -o-transition: opacity .3s ease-in-out;
16137
- // transition: opacity .3s ease-in-out;
16138
- // }
16139
- //
16140
- // .compare-overlay {
16141
- // position: absolute;
16142
- // overflow: hidden;
16143
- // height: 100%;
16144
- // top: 0;
16145
- // }
16146
- //
16147
- // .compare-overlay__content {
16148
- // position: relative;
16149
- // height: 100%;
16150
- // width: 100%;
16151
- // }
16152
- //
16153
- // .handle__arrow {
16154
- // position: absolute;
16155
- // width: var(--handle-chevron-size);
16156
- // }
16157
- //
16158
- // .handle__arrow--l {
16159
- // left: 0;
16160
- // }
16161
- //
16162
- // .handle__arrow--r {
16163
- // right: 0;
16164
- // }
16165
- //
16166
- // .handle-wrap {
16167
- // display: flex;
16168
- // align-items: center;
16169
- // justify-content: center;
16170
- // position: absolute;
16171
- // top: 50%;
16172
- // height: 100%;
16173
- // transform: translate(-50%, -50%);
16174
- // z-index: var(--z-index-handle);
16175
- // }
16176
- //
16177
- // .handle-icon {
16178
- // display: flex;
16179
- // align-items: center;
16180
- // justify-content: center;
16181
- // color: white;
16182
- // background: var(--handle-bg);
16183
- // border-radius: 50%;
16184
- // width: var(--handle-width);
16185
- // height: var(--handle-height);
16186
- // }
16187
- //
16188
- // .handle-line {
16189
- // content: '';
16190
- // position: absolute;
16191
- // top: 0;
16192
- // width: var(--handle-line-width);
16193
- // height: 100%;
16194
- // background: var(--handle-line-bg);
16195
- // z-index: var(--z-index-handle-line);
16196
- // pointer-events: none;
16197
- // user-select: none;
16198
- // }
16199
- //
16200
- // .compare__range {
16201
- // position: absolute;
16202
- // cursor: ew-resize;
16203
- // left: calc(var(--handle-width) / -2);
16204
- // width: calc(100% + var(--handle-width));
16205
- // transform: translatey(-50%);
16206
- // top: calc(50%);
16207
- // z-index: var(--z-index-range-input);
16208
- // -webkit-appearance: none;
16209
- // height: var(--handle-height);
16210
- // /* debugging purposes only */
16211
- // background: rgba(0, 0, 0, .4);
16212
- // opacity: .0;
16213
- // }
16214
- //
16215
- // .object-fit-cover {
16216
- // object-fit: cover;
16217
- // }
16218
- //
16219
- // .compare_optimized {
16220
- // right: 5px;
16221
- // }
16222
- //
16223
- // .compare_original {
16224
- // left: 5px;
16225
- // }
16226
- //
16227
- // .compare_label {
16228
- // position: absolute;
16229
- // z-index: 999;
16230
- // background: #444;
16231
- // opacity: 0.6;
16232
- // padding: 0.5rem;
16233
- // border-radius: 0.2rem;
16234
- // color: #fff;
16235
- // top: 10px;
16236
- //
16237
- // }
16238
- // </style>
16239
-
16240
- };
16241
-
16242
- /***/ }),
16243
- /* 44 */
16244
- /***/ (function(module, exports) {
16245
-
16246
- module.exports = "\n\t<div class=\"compare-wrapper\" @mouseenter=\"removeInitial\">\n\t\t<div class=\"compare\">\n\t\t\t\n\t\t\t<span class=\"compare_label compare_original\">{{this.first_label}}</span>\n\t\t\t<span class=\"compare_label compare_optimized\">{{this.second_label}}</span>\n\t\t\t<div class=\"compare__content \" :class=\"{'initial':!initial}\" :style=\"{'width': width}\">\n\t\t\t\t<slot name=\"first\"></slot>\n\t\t\t\n\t\t\t</div>\n\t\t\t\n\t\t\t<resize-observer @notify=\"handleResize\" style=\"display: none\"></resize-observer>\n\t\t\t<div class=\"handle-wrap\" :style=\"{left:`calc(${compareWidth + '%'} - var(--handle-line-width) / 2`}\">\n\t\t\t\t<div class=\"handle-icon\">\n\t\t\t\t\t<svg class=\"handle__arrow handle__arrow--l\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\n\t\t\t\t\t height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n\t\t\t\t\t stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t\t\t<polyline points=\"15 18 9 12 15 6\"></polyline>\n\t\t\t\t\t</svg>\n\t\t\t\t\t<svg class=\"handle__arrow handle__arrow--r\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\n\t\t\t\t\t height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n\t\t\t\t\t stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t\t\t<polyline points=\"9 18 15 12 9 6\"></polyline>\n\t\t\t\t\t</svg>\n\t\t\t\t\n\t\t\t\t</div>\n\t\t\t\t<span class=\"handle-line\"></span>\n\t\t\t</div>\n\t\t\t\n\t\t\t<div class=\"compare-overlay\" :class=\"{'initial':!initial}\" :style=\"{width:`calc(${compareWidth + '%'})`}\">\n\t\t\t\t<div class=\"compare-overlay__content\" :style=\"{ 'width': width}\">\n\t\t\t\t\t<slot name=\"second\"></slot>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\n\t\t</div>\n\t\t<input type=\"range\" min=\"0\" max=\"100\" :step=\"step\" class=\"compare__range\" :value=\"compareWidth\"\n\t\t @input=\"handleInput\" tabindex=\"-1\">\n\t\n\t</div>\n";
16247
-
16248
- /***/ }),
16249
- /* 45 */
16250
- /***/ (function(module, exports) {
16251
-
16252
- module.exports = "\n\t<div :class=\"{ 'saving--option' : this.$store.state.loading }\" _v-546bc561=\"\">\n\t\t\n\t\t<div class=\"field columns\" _v-546bc561=\"\">\n\t\t\t<label class=\"label column has-text-grey-dark\" _v-546bc561=\"\">\n\t\t\t\t{{strings.enable_image_replace}}\n\t\t\t\t<p class=\"is-italic has-text-weight-normal\" _v-546bc561=\"\">\n\t\t\t\t\t{{strings.replacer_desc}}\n\t\t\t\t</p>\n\t\t\t</label>\n\t\t\t<div class=\"column \" _v-546bc561=\"\">\n\t\t\t\t<toggle-button :class=\"'has-text-dark'\" v-model=\"getReplacerStatus\" :disabled=\"this.$store.state.loading\" :labels=\"{checked: strings.enabled, unchecked: strings.disabled}\" :width=\"80\" :height=\"25\" color=\"#008ec2\" _v-546bc561=\"\"></toggle-button>\n\t\t\t</div>\n\t\t\n\t\t</div>\n\t\t<div class=\"field is-fullwidth columns\" _v-546bc561=\"\">\n\t\t\t<label class=\"label column has-text-grey-dark\" _v-546bc561=\"\">\n\t\t\t\t{{strings.toggle_ab_item}}\n\t\t\t\t<p class=\"is-italic has-text-weight-normal\" _v-546bc561=\"\">\n\t\t\t\t\t{{strings.admin_bar_desc}}\n\t\t\t\t</p>\n\t\t\t</label>\n\t\t\t\n\t\t\t<div class=\"column \" _v-546bc561=\"\">\n\t\t\t\t<toggle-button :class=\"'has-text-dark'\" v-model=\"adminBarItemStatus\" :disabled=\"this.$store.state.loading\" :labels=\"{checked: strings.show, unchecked: strings.hide}\" :width=\"80\" :height=\"25\" color=\"#008ec2\" _v-546bc561=\"\"></toggle-button>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"field is-fullwidth columns\" _v-546bc561=\"\">\n\t\t\t<label class=\"label column has-text-grey-dark\" _v-546bc561=\"\">\n\t\t\t\t{{strings.toggle_lazyload}}\n\t\t\t\t<p class=\"is-italic has-text-weight-normal\" _v-546bc561=\"\">\n\t\t\t\t\t{{strings.lazyload_desc}}\n\t\t\t\t</p>\n\t\t\t</label>\n\n\t\t\t<div class=\"column \" _v-546bc561=\"\">\n\t\t\t\t<toggle-button :class=\"'has-text-dark'\" v-model=\"lazyLoadStatus\" :disabled=\"this.$store.state.loading\" :labels=\"{checked: strings.enabled, unchecked: strings.disabled}\" :width=\"80\" :height=\"25\" color=\"#008ec2\" _v-546bc561=\"\"></toggle-button>\n\t\t\t</div>\n\t\t</div>\n\t\t\n\t\t<div class=\"field is-fullwidth columns n\" _v-546bc561=\"\">\n\t\t\t<label class=\"label is-half column has-text-grey-dark no-padding-right \" _v-546bc561=\"\">\n\t\t\t\t{{strings.size_title}}\n\t\t\t\t<p class=\"is-italic has-text-weight-normal\" _v-546bc561=\"\">\n\t\t\t\t\t{{strings.size_desc}}\n\t\t\t\t</p>\n\t\t\t</label>\n\t\t\t\n\t\t\t<div class=\"column is-paddingless\" _v-546bc561=\"\">\n\t\t\t\t<div class=\"columns\" _v-546bc561=\"\">\n\t\t\t\t\t<div class=\"field column is-narrow has-addons\" _v-546bc561=\"\">\n\t\t\t\t\t\t<p class=\"control\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t<a class=\"button is-small is-static\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t\t{{strings.width_field}}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p class=\"control \" _v-546bc561=\"\">\n\t\t\t\t\t\t\t<input v-model=\"widthStatus\" class=\"input is-small\" type=\"number\" min=\"100\" max=\"10000\" _v-546bc561=\"\">\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"field column is-small has-addons\" _v-546bc561=\"\">\n\t\t\t\t\t\t<p class=\"control\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t<a class=\"button is-small is-static\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t\t{{strings.height_field}}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p class=\"control \" _v-546bc561=\"\">\n\t\t\t\t\t\t\t<input v-model=\"heightStatus\" class=\"input is-small\" type=\"number\" min=\"100\" max=\"10000\" _v-546bc561=\"\">\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t\n\t\t<div class=\"field columns\" _v-546bc561=\"\">\n\t\t\t<label class=\"label column has-text-grey-dark\" _v-546bc561=\"\">\n\t\t\t\t{{strings.quality_title}}\n\t\t\t\t<p class=\"is-italic has-text-weight-normal\" _v-546bc561=\"\">\n\t\t\t\t\t{{strings.quality_desc}}\n\t\t\t\t</p>\n\t\t\t</label>\n\t\t\t<div class=\"column buttons \" _v-546bc561=\"\">\n\t\t\t\t<div class=\"field columns \" _v-546bc561=\"\">\n\t\t\t\t\t<div class=\"column field has-addons\" _v-546bc561=\"\">\n\t\t\t\t\t\t<p class=\"control\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t<a @click=\"changeQuality('auto')\" :class=\"{ 'is-info':isActiveQuality ( 'auto'), ' is-selected':site_settings.quality === 'auto' }\" class=\"button is-small is-rounded\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t\t<span class=\"icon dashicons dashicons-marker\" _v-546bc561=\"\"></span>\n\t\t\t\t\t\t\t\t<span _v-546bc561=\"\">{{strings.auto_q_title}}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p class=\"control\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t<a @click=\"changeQuality('high_c')\" :class=\"{ 'is-info': isActiveQuality ('high_c'), 'is-selected':site_settings.quality === 'high_c' }\" class=\"button is-rounded is-small\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t\t<span class=\"icon dashicons dashicons-menu\" _v-546bc561=\"\"></span>\n\t\t\t\t\t\t\t\t<span _v-546bc561=\"\">{{strings.high_q_title}}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<p class=\"control\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t<a @click=\"changeQuality('medium_c')\" :class=\"{ 'is-info': isActiveQuality( 'medium_c' ), ' is-selected':site_settings.quality === 'medium_c' }\" class=\"button is-small\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t\t<span class=\"icon dashicons dashicons-controls-pause\" _v-546bc561=\"\"></span>\n\t\t\t\t\t\t\t\t<span class=\" \" _v-546bc561=\"\">{{strings.medium_q_title}}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<p class=\"control\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t<a @click=\"changeQuality('low_c')\" :class=\"{ 'is-info':isActiveQuality( 'low_c' ), ' is-selected':site_settings.quality === 'low_c' }\" class=\"button is-small\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t\t<span class=\"icon dashicons dashicons-minus \" _v-546bc561=\"\"></span>\n\t\t\t\t\t\t\t\t<span _v-546bc561=\"\">{{strings.low_q_title}}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<p class=\"control column has-text-centered-desktop has-text-left-touch \" _v-546bc561=\"\">\n\t\t\t\t\t\t<a @click=\"saveChanges()\" class=\"button is-small is-success \" :class=\"{'is-loading':loading}\" _v-546bc561=\"\">\n\t\t\t\t\t\t\t<span class=\"dashicons dashicons-yes icon\" _v-546bc561=\"\"></span>\n\t\t\t\t\t\t\t<span _v-546bc561=\"\">\t{{strings.save_changes}}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n <div v-if=\"showComparison\" _v-546bc561=\"\">\n <div v-if=\"loading_images\" class=\"has-text-centered subtitle \" _v-546bc561=\"\">{{strings.sample_image_loading}}<span class=\"loader has-text-black-bis icon is-small\" _v-546bc561=\"\"></span>\n </div>\n <div v-else-if=\"sample_images.id &amp;&amp; sample_images.original_size > 0\" _v-546bc561=\"\">\n <p class=\"title has-text-centered is-5 is-size-6-mobile\" _v-546bc561=\"\">{{strings.quality_slider_desc}}</p>\n <div class=\"columns is-centered is-vcentered is-multiline is-mobile\" _v-546bc561=\"\">\n <a @click=\"newSample()\" class=\"button is-small is-pulled-right\" _v-546bc561=\"\">\n <span class=\"icon dashicons dashicons-image-rotate\" _v-546bc561=\"\"></span>\n </a>\n <div class=\"column visual-compare is-half-fullhd is-half-desktop is-three-quarters-touch is-12-mobile \" _v-546bc561=\"\">\n <div class=\"is-full progress-wrapper\" _v-546bc561=\"\">\n <p class=\"subtitle is-size-6 compress-optimization-ratio-done has-text-centered\" v-if=\"compressionRatio > 0\" _v-546bc561=\"\">\n <strong _v-546bc561=\"\">{{( 100 - compressionRatio )}}%</strong> smaller </p>\n <p class=\"subtitle compress-optimization-ratio-nothing is-size-6 has-text-centered\" v-else=\"\" _v-546bc561=\"\">\n {{all_strings.latest_images.same_size}}\n </p>\n <progress class=\" progress is-large is-success \" :value=\"compressionRatio\" :max=\"100\" _v-546bc561=\"\">\n </progress>\n <hr _v-546bc561=\"\">\n </div>\n <image_diff class=\"is-fullwidth\" value=\"50\" :first_label=\"strings.image_1_label\" :second_label=\"strings.image_2_label\" _v-546bc561=\"\">\n <img slot=\"first\" :src=\"sample_images.optimized\" _v-546bc561=\"\">\n <img slot=\"second\" :src=\"sample_images.original\" _v-546bc561=\"\">\n </image_diff>\n </div>\n </div>\n </div>\n <div v-else-if=\" sample_images.id < 0\" _v-546bc561=\"\">\n <p class=\"title has-text-centered is-5 is-size-6-mobile\" _v-546bc561=\"\">{{strings.no_images_found}}</p>\n </div>\n </div>\n\t\n\t</div>\n\n";
16253
-
16254
- /***/ }),
16255
- /* 46 */
16256
- /***/ (function(module, exports, __webpack_require__) {
16257
-
16258
- var __vue_script__, __vue_template__
16259
- __webpack_require__(47)
16260
- __vue_script__ = __webpack_require__(49)
16261
- __vue_template__ = __webpack_require__(51)
16262
- module.exports = __vue_script__ || {}
16263
- if (module.exports.__esModule) module.exports = module.exports.default
16264
- if (__vue_template__) { (typeof module.exports === "function" ? module.exports.options : module.exports).template = __vue_template__ }
16265
- if (false) {(function () { module.hot.accept()
16266
- var hotAPI = require("vue-hot-reload-api")
16267
- hotAPI.install(require("vue"), true)
16268
- if (!hotAPI.compatible) return
16269
- var id = "D:\\dev\\optimole-wp\\assets\\vue\\components\\watermarks.vue"
16270
- if (!module.hot.data) {
16271
- hotAPI.createRecord(id, module.exports)
16272
- } else {
16273
- hotAPI.update(id, module.exports, __vue_template__)
16274
- }
16275
- })()}
16276
-
16277
- /***/ }),
16278
- /* 47 */
16279
- /***/ (function(module, exports, __webpack_require__) {
16280
-
16281
- // style-loader: Adds some css to the DOM by adding a <style> tag
16282
-
16283
- // load the styles
16284
- var content = __webpack_require__(48);
16285
- if(typeof content === 'string') content = [[module.i, content, '']];
16286
- // add the styles to the DOM
16287
- var update = __webpack_require__(1)(content, {});
16288
- if(content.locals) module.exports = content.locals;
16289
- // Hot Module Replacement
16290
- if(false) {
16291
- // When the styles change, update the <style> tags
16292
- if(!content.locals) {
16293
- module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-3fe3cec8&file=watermarks.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./watermarks.vue", function() {
16294
- var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/vue-loader/lib/style-rewriter.js?id=_v-3fe3cec8&file=watermarks.vue&scoped=true!../../../node_modules/vue-loader/lib/selector.js?type=style&index=0!../../../node_modules/eslint-loader/index.js!../../../node_modules/eslint-loader/index.js!./watermarks.vue");
16295
- if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
16296
- update(newContent);
16297
- });
16298
- }
16299
- // When the module is disposed, remove the <style> tags
16300
- module.hot.dispose(function() { update(); });
16301
- }
16302
-
16303
- /***/ }),
16304
- /* 48 */
16305
- /***/ (function(module, exports, __webpack_require__) {
16306
-
16307
- exports = module.exports = __webpack_require__(0)();
16308
- // imports
16309
-
16310
-
16311
- // module
16312
- exports.push([module.i, "\r\n\t.optml-layout-grid .grid-button.is-selected[_v-3fe3cec8] {\r\n\t\tbackground: #4a4a4a;\r\n\t}\r\n\t\r\n\t.optml-layout-grid .grid-button[_v-3fe3cec8] {\r\n\t\twidth: 50px;\r\n\t\theight: 50px;\r\n\t\tdisplay: inline-block;\r\n\t\tmargin: 0;\r\n\t\tpadding: 0;\r\n\t\tborder-radius: 9px;\r\n\t\tborder: 5px solid #4a4a4a;\r\n\t}\r\n\t\r\n\t.optml-layout-grid[_v-3fe3cec8] {\r\n\t\twidth: 200px;\r\n\t\t\r\n\t}\r\n\t#optimole-app .input.is-small.is-tiny[_v-3fe3cec8]{\r\n\t\twidth:60px;\r\n\t}\r\n", ""]);
16313
-
16314
- // exports
16315
-
16316
-
16317
- /***/ }),
16318
- /* 49 */
16319
- /***/ (function(module, exports, __webpack_require__) {
16320
-
16321
- "use strict";
16322
-
16323
-
16324
- Object.defineProperty(exports, "__esModule", {
16325
- value: true
16326
- });
16327
-
16328
- var _vueUploadComponent = __webpack_require__(50);
16329
-
16330
- var _vueUploadComponent2 = _interopRequireDefault(_vueUploadComponent);
16331
-
16332
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16333
-
16334
- exports.default = {
16335
- name: "watermarks",
16336
- components: { FileUpload: _vueUploadComponent2.default },
16337
- data: function data() {
16338
- return {
16339
- global: optimoleDashboardApp,
16340
- startTime: 0,
16341
- maxTime: 20,
16342
- noImages: true,
16343
- files: [],
16344
- is_error: false,
16345
- error_message: '',
16346
- home_url: optimoleDashboardApp.home_url,
16347
- strings: optimoleDashboardApp.strings.watermarks,
16348
- watermarkData: [{
16349
- ID: 1,
16350
- guid: ''
16351
- }],
16352
- watermarkSettings: this.$store.state.site_settings.watermark,
16353
- newData: {}
16354
- };
16355
- },
16356
- mounted: function mounted() {
16357
- if (this.$store.state.optimizedImages.length > 0) {
16358
- return;
16359
- }
16360
- this.selectedWatermark = this.watermarkSettings.id;
16361
- this.$store.dispatch('retrieveWatermarks', { component: this });
16362
- },
16363
-
16364
- computed: {
16365
- watermarkOpacity: {
16366
- set: function set(value) {
16367
- if (parseInt(value) < 0) {
16368
- this.$store.commit('updateWatermark', { opacity: 0 });
16369
- this.newData.wm_opacity = this.watermarkSettings.opacity;
16370
- return;
16371
- }
16372
- if (parseInt(value) > 100) {
16373
- opacity = 1;
16374
- this.$store.commit('updateWatermark', { opacity: 1 });
16375
- this.newData.wm_opacity = this.watermarkSettings.opacity;
16376
- return;
16377
- }
16378
-
16379
- this.$store.commit('updateWatermark', { opacity: parseFloat(parseInt(value) / 100) });
16380
- this.newData.wm_opacity = this.watermarkSettings.opacity;
16381
- },
16382
- get: function get() {
16383
- return Math.round(this.watermarkSettings.opacity * 100);
16384
- }
16385
- },
16386
- watermarkScale: {
16387
- set: function set(value) {
16388
- if (parseInt(value) < 0) {
16389
- this.$store.commit('updateWatermark', { scale: 0 });
16390
- this.newData.wm_scale = this.watermarkSettings.scale;
16391
- return;
16392
- }
16393
- if (parseInt(value) > 300) {
16394
- this.$store.commit('updateWatermark', { scale: 3 });
16395
- this.newData.wm_scale = this.watermarkSettings.scale;
16396
- return;
16397
- }
16398
-
16399
- this.$store.commit('updateWatermark', { scale: parseFloat(parseInt(value) / 100) });
16400
- this.newData.wm_scale = this.watermarkSettings.scale;
16401
- },
16402
- get: function get() {
16403
- return Math.round(this.watermarkSettings.scale * 100);
16404
- }
16405
- },
16406
- watermarkX: {
16407
- set: function set(value) {
16408
- this.$store.commit('updateWatermark', { x_offset: parseInt(value) });
16409
- this.newData.wm_x = this.watermarkSettings.x_offset;
16410
- },
16411
- get: function get() {
16412
- return this.watermarkSettings.x_offset;
16413
- }
16414
- },
16415
- watermarkY: {
16416
- set: function set(value) {
16417
- this.$store.commit('updateWatermark', { y_offset: parseInt(value) });
16418
- this.newData.wm_y = this.watermarkSettings.y_offset;
16419
- },
16420
- get: function get() {
16421
- return this.watermarkSettings.y_offset;
16422
- }
16423
- },
16424
- selectedWatermark: {
16425
- set: function set(value) {
16426
- this.$store.commit('updateWatermark', { id: parseInt(value) });
16427
- this.newData.wm_id = this.watermarkSettings.id;
16428
- },
16429
- get: function get() {
16430
- return this.watermarkSettings.id;
16431
- }
16432
- },
16433
- loading: function loading() {
16434
- return this.$store.state.loading;
16435
- }
16436
- },
16437
- methods: {
16438
- saveChanges: function saveChanges() {
16439
- this.$store.dispatch('saveSettings', {
16440
- settings: this.newData
16441
- });
16442
- },
16443
- changePosition: function changePosition(value) {
16444
- this.$store.commit('updateWatermark', { position: value });
16445
- this.newData.wm_position = this.watermarkSettings.position;
16446
- },
16447
- isSelectedWatermark: function isSelectedWatermark(id) {
16448
- return this.$store.state.site_settings.watermark.id === id;
16449
- },
16450
- isActivePosition: function isActivePosition(pos) {
16451
- return this.watermarkSettings.position === pos;
16452
- },
16453
- inputFilter: function inputFilter(newFile, oldFile, prevent) {
16454
- if (newFile && !oldFile) {
16455
- // Before adding a file
16456
- // Filter system files or hide files
16457
- if (/(\/|^)(Thumbs\.db|desktop\.ini|\..+)$/.test(newFile.name)) {
16458
- return prevent();
16459
- }
16460
- // Filter php html js file
16461
- if (/\.(php5?|html?|jsx?)$/i.test(newFile.name)) {
16462
- return prevent();
16463
- }
16464
- }
16465
- },
16466
- inputFile: function inputFile(newFile, oldFile) {
16467
- if (newFile && !oldFile) {
16468
- // add
16469
- this.is_error = false;
16470
- this.error_message = '';
16471
- this.$refs.upload.active = true;
16472
- }
16473
- if (newFile && oldFile) {
16474
- if (newFile.response.code && newFile.response.code === 'error') {
16475
- this.is_error = true;
16476
- this.error_message = newFile.response.data;
16477
- return;
16478
- }
16479
- this.$store.dispatch('retrieveWatermarks', { component: this });
16480
- }
16481
- if (newFile && oldFile && newFile.success !== oldFile.success) {
16482
- this.$refs.upload.clear();
16483
- }
16484
- if (!newFile && oldFile) {
16485
- // remove
16486
- }
16487
- },
16488
- removeWatermark: function removeWatermark(postID) {
16489
- this.$store.dispatch('removeWatermark', { postID: postID, component: this });
16490
- }
16491
- }
16492
- // </script>
16493
- //
16494
- // <style scoped>
16495
- // .optml-layout-grid .grid-button.is-selected {
16496
- // background: #4a4a4a;
16497
- // }
16498
- //
16499
- // .optml-layout-grid .grid-button {
16500
- // width: 50px;
16501
- // height: 50px;
16502
- // display: inline-block;
16503
- // margin: 0;
16504
- // padding: 0;
16505
- // border-radius: 9px;
16506
- // border: 5px solid #4a4a4a;
16507
- // }
16508
- //
16509
- // .optml-layout-grid {
16510
- // width: 200px;
16511
- //
16512
- // }
16513
- // #optimole-app .input.is-small.is-tiny{
16514
- // width:60px;
16515
- // }
16516
- // </style>
16517
-
16518
- }; // <template>
16519
- // <div>
16520
- // <h4>{{strings.add_desc}}</h4>
16521
- // <div class="field columns">
16522
- // <div class="column" v-for="file in files">
16523
- // <span class="tag">
16524
- // <i>{{file.name}}</i>
16525
- // <i v-if="!file.active && !file.success && file.error === ''"
16526
- // class="dashicons dashicons-yes icon has-text-grey-light"></i>
16527
- // <i v-else-if="file.active" class="dashicons dashicons-marker icon spin has-text-warning"></i>
16528
- // <i v-else-if="!file.active && file.success"
16529
- // class="dashicons dashicons-yes icon has-text-success"></i>
16530
- // <i v-else class="dashicons dashicons-no-alt icon has-text-danger"></i>
16531
- // </span>
16532
- // </div>
16533
- // </div>
16534
- // <div class="column ">
16535
- // <file-upload
16536
- // class="button is-secondary is-rounded"
16537
- // :post-action=" global.root + '/add_watermark'"
16538
- // :headers="{'X-WP-Nonce': global.nonce}"
16539
- // extensions="gif,jpg,jpeg,png,webp"
16540
- // accept="image/png,image/gif,image/jpeg,image/webp"
16541
- // :size="1024 * 1024 * 10"
16542
- // v-model="files"
16543
- // @input-filter="inputFilter"
16544
- // @input-file="inputFile"
16545
- // :disabled="loading"
16546
- // ref="upload">
16547
- // <i class="dashicons dashicons-plus icon"></i>
16548
- // {{strings.upload}}
16549
- // </file-upload>
16550
- // <br/><br/><span class="tag is-danger" v-if="is_error">{{error_message}}</span>
16551
- // </div>
16552
- // <hr/>
16553
- // <div class="box">
16554
- // <h3><span class="dashicons dashicons-menu"></span> {{strings.list_header}} </h3>
16555
- // <small><i>{{strings.max_allowed}}</i></small>
16556
- //
16557
- // <div class="optimized-images">
16558
- // <div v-if="!noImages">
16559
- // <h3 class="has-text-centered">{{strings.last}} {{strings.optimized_images}}</h3>
16560
- // <table class="table is-striped is-hoverable is-fullwidth">
16561
- // <thead>
16562
- // <tr>
16563
- // <th class="optml-image-heading">{{strings.id}}</th>
16564
- // <th class="optml-image-heading">{{strings.image}}</th>
16565
- // <th class="optml-image-heading">{{strings.action}}</th>
16566
- // </tr>
16567
- // </thead>
16568
- // <tbody>
16569
- // <tr v-for="(item, index) in watermarkData">
16570
- // <td><code>#{{item.ID}}</code></td>
16571
- // <td><img :src="item.guid" class="optml-image-watermark" width="50"/></td>
16572
- // <td width="50">
16573
- // <a @click="removeWatermark(item.ID)" class="button is-small is-danger is-rounded"
16574
- // :class="{'is-loading':loading}">
16575
- // <span class="dashicons dashicons-no-alt icon"></span>
16576
- // </a>
16577
- // </td>
16578
- // </tr>
16579
- // </tbody>
16580
- // </table>
16581
- //
16582
- // <span class="tag is-success" v-if="loading">
16583
- // {{strings.loading_remove_watermark}}
16584
- // </span>
16585
- // </div>
16586
- // </div>
16587
- // <table class="table is-striped is-hoverable is-fullwidth" v-if="noImages">
16588
- // <thead>
16589
- // <tr>
16590
- // <th class="optml-image-heading has-text-centered" v-html="strings.no_images_found"></th>
16591
- // </tr>
16592
- // </thead>
16593
- // </table>
16594
- // <hr/>
16595
- // <h3><span class="dashicons dashicons-grid-view"></span> {{strings.settings_header}} </h3>
16596
- // <br/>
16597
- // <div class="field is-fullwidth columns">
16598
- // <label class="label is-half column has-text-grey-dark no-padding-right ">
16599
- // {{strings.wm_title}}
16600
- // <p class="is-italic has-text-weight-normal">
16601
- // {{strings.wm_desc}}
16602
- // </p>
16603
- // </label>
16604
- //
16605
- // <div class="column is-paddingless">
16606
- // <div class="columns">
16607
- // <div class="field column is-narrow">
16608
- // <div class="select">
16609
- // <select title="Watermark Selection" v-model="selectedWatermark">
16610
- // <option value="-1">No watermark</option>
16611
- // <option v-for="(item, index) in watermarkData" :value="item.ID">#({{item.ID}})
16612
- // </option>
16613
- // </select>
16614
- // </div>
16615
- // </div>
16616
- // </div>
16617
- // </div>
16618
- // </div>
16619
- //
16620
- // <div class="field is-fullwidth columns">
16621
- // <label class="label is-half column has-text-grey-dark no-padding-right ">
16622
- // {{strings.opacity_title}}
16623
- // <p class="is-italic has-text-weight-normal">
16624
- // {{strings.opacity_desc}}
16625
- // </p>
16626
- // </label>
16627
- //
16628
- // <div class="column is-paddingless">
16629
- // <div class="columns">
16630
- // <div class="field column is-narrow has-addons">
16631
- // <p class="control">
16632
- // <a class="button is-small is-static">
16633
- // {{strings.opacity_field}}
16634
- // </a>
16635
- // </p>
16636
- // <p class="control ">
16637
- // <input v-model="watermarkOpacity" class="input is-small" type="number" min="0"
16638
- // max="100">
16639
- // </p>
16640
- // </div>
16641
- // </div>
16642
- // </div>
16643
- // </div>
16644
- //
16645
- // <div class="field columns">
16646
- // <label class="label column has-text-grey-dark">
16647
- // {{strings.position_title}}
16648
- // <p class="is-italic has-text-weight-normal">
16649
- // {{strings.position_desc}}
16650
- // </p>
16651
- // </label>
16652
- // <div class="column buttons ">
16653
- // <div class="field columns is-gapless is-marginless ">
16654
- // <div class="is-fullwidth optml-layout-grid">
16655
- // <a @click="changePosition('nowe')"
16656
- // :class="{ 'is-info':isActivePosition ('nowe'), ' is-selected':watermarkSettings.position === 'nowe' }"
16657
- // class="grid-button " :title="strings.pos_nowe_title">
16658
- // </a>
16659
- // <a @click="changePosition('no')"
16660
- // :class="{ 'is-info':isActivePosition ('no'), ' is-selected':watermarkSettings.position === 'no' }"
16661
- // class="grid-button " :title="strings.pos_no_title">
16662
- // </a>
16663
- // <a @click="changePosition('noea')"
16664
- // :class="{ 'is-info':isActivePosition ('noea'), ' is-selected':watermarkSettings.position === 'noea' }"
16665
- // class="grid-button" :title="strings.pos_noea_title">
16666
- // </a>
16667
- // <a @click="changePosition('we')"
16668
- // :class="{ 'is-info':isActivePosition ('we'), ' is-selected':watermarkSettings.position === 'we' }"
16669
- // class="grid-button" :title="strings.pos_we_title">
16670
- // </a>
16671
- // <a @click="changePosition('ce')"
16672
- // :class="{ 'is-info':isActivePosition ('ce'), ' is-selected':watermarkSettings.position === 'ce' }"
16673
- // class="grid-button" :title="strings.pos_ce_title">
16674
- // </a>
16675
- // <a @click="changePosition('ea')"
16676
- // :class="{ 'is-info':isActivePosition ('ea'), ' is-selected':watermarkSettings.position === 'ea' }"
16677
- // class="grid-button" :title="strings.pos_ea_title">
16678
- // </a>
16679
- // <a @click="changePosition('sowe')"
16680
- // :class="{ 'is-info':isActivePosition ('sowe'), ' is-selected':watermarkSettings.position === 'sowe' }"
16681
- // class="grid-button" :title="strings.pos_sowe_title">
16682
- // </a>
16683
- // <a @click="changePosition('so')"
16684
- // :class="{ 'is-info':isActivePosition ('so'), ' is-selected':watermarkSettings.position === 'so' }"
16685
- // class="grid-button" :title="strings.pos_so_title">
16686
- // </a>
16687
- // <a @click="changePosition('soea')"
16688
- // :class="{ 'is-info':isActivePosition ('soea'), ' is-selected':watermarkSettings.position === 'soea' }"
16689
- // class="grid-button" :title="strings.pos_soea_title">
16690
- // </a>
16691
- // </div>
16692
- // </div>
16693
- // <br/>
16694
- // </div>
16695
- // </div>
16696
- //
16697
- // <div class="field is-fullwidth columns ">
16698
- // <label class="label is-half column has-text-grey-dark no-padding-right ">
16699
- // {{strings.offset_title}}
16700
- // <p class="is-italic has-text-weight-normal">
16701
- // {{strings.offset_desc}}
16702
- // </p>
16703
- // </label>
16704
- //
16705
- // <div class="column is-paddingless">
16706
- // <div class="columns">
16707
- // <div class="field column is-narrow has-addons">
16708
- // <p class="control">
16709
- // <a class="button is-small is-static">
16710
- // {{strings.offset_x_field}}
16711
- // </a>
16712
- // </p>
16713
- // <p class="control ">
16714
- // <input v-model="watermarkX" class="input is-tiny is-small" type="number">
16715
- // </p>
16716
- // </div>
16717
- // <div class="field column is-narrow has-addons">
16718
- // <p class="control">
16719
- // <a class="button is-small is-static">
16720
- // {{strings.offset_y_field}}
16721
- // </a>
16722
- // </p>
16723
- // <p class="control ">
16724
- // <input v-model="watermarkY" class="input is-small is-tiny" type="number">
16725
- // </p>
16726
- // </div>
16727
- // </div>
16728
- // </div>
16729
- // </div>
16730
- //
16731
- // <div class="field is-fullwidth columns">
16732
- // <label class="label is-half column has-text-grey-dark no-padding-right ">
16733
- // {{strings.scale_title}}
16734
- // <p class="is-italic has-text-weight-normal">
16735
- // {{strings.scale_desc}}
16736
- // </p>
16737
- // </label>
16738
- //
16739
- // <div class="column is-paddingless">
16740
- // <div class="columns">
16741
- // <div class="field column is-narrow has-addons">
16742
- // <p class="control">
16743
- // <a class="button is-small is-static">
16744
- // {{strings.scale_field}}
16745
- // </a>
16746
- // </p>
16747
- // <p class="control ">
16748
- // <input v-model="watermarkScale" class="input is-small" type="number" min="0"
16749
- // max="100">
16750
- // </p>
16751
- // </div>
16752
- // </div>
16753
- // </div>
16754
- // </div>
16755
- //
16756
- // <p class="control column has-text-centered-desktop has-text-left-touch ">
16757
- // <a @click="saveChanges()" class="button is-small is-success "
16758
- // :class="{'is-loading':loading}">
16759
- // <span class="dashicons dashicons-yes icon"></span>
16760
- // <span> {{strings.save_changes}}</span>
16761
- // </a>
16762
- // </p>
16763
- // </div>
16764
- // </div>
16765
- // </template>
16766
- //
16767
- // <script>
16768
-
16769
- /***/ }),
16770
- /* 50 */
16771
- /***/ (function(module, exports, __webpack_require__) {
16772
-
16773
- /*!
16774
- * Name: vue-upload-component
16775
- * Version: 2.8.19
16776
- * Author: LianYue
16777
- */
16778
- (function (global, factory) {
16779
- true ? module.exports = factory() :
16780
- typeof define === 'function' && define.amd ? define(factory) :
16781
- (global.VueUploadComponent = factory());
16782
- }(this, (function () { 'use strict';
16783
-
16784
- /**
16785
- * Creates a XHR request
16786
- *
16787
- * @param {Object} options
16788
- */
16789
- var createRequest = function createRequest(options) {
16790
- var xhr = new XMLHttpRequest();
16791
- xhr.open(options.method || 'GET', options.url);
16792
- xhr.responseType = 'json';
16793
- if (options.headers) {
16794
- Object.keys(options.headers).forEach(function (key) {
16795
- xhr.setRequestHeader(key, options.headers[key]);
16796
- });
16797
- }
16798
-
16799
- return xhr;
16800
- };
16801
-
16802
- /**
16803
- * Sends a XHR request with certain body
16804
- *
16805
- * @param {XMLHttpRequest} xhr
16806
- * @param {Object} body
16807
- */
16808
- var sendRequest = function sendRequest(xhr, body) {
16809
- return new Promise(function (resolve, reject) {
16810
- xhr.onload = function () {
16811
- if (xhr.status >= 200 && xhr.status < 300) {
16812
- var response;
16813
- try {
16814
- response = JSON.parse(xhr.response);
16815
- } catch (err) {
16816
- response = xhr.response;
16817
- }
16818
- resolve(response);
16819
- } else {
16820
- reject(xhr.response);
16821
- }
16822
- };
16823
- xhr.onerror = function () {
16824
- return reject(xhr.response);
16825
- };
16826
- xhr.send(JSON.stringify(body));
16827
- });
16828
- };
16829
-
16830
- /**
16831
- * Sends a XHR request with certain form data
16832
- *
16833
- * @param {XMLHttpRequest} xhr
16834
- * @param {Object} data
16835
- */
16836
- var sendFormRequest = function sendFormRequest(xhr, data) {
16837
- var body = new FormData();
16838
- for (var name in data) {
16839
- body.append(name, data[name]);
16840
- }
16841
-
16842
- return new Promise(function (resolve, reject) {
16843
- xhr.onload = function () {
16844
- if (xhr.status >= 200 && xhr.status < 300) {
16845
- var response;
16846
- try {
16847
- response = JSON.parse(xhr.response);
16848
- } catch (err) {
16849
- response = xhr.response;
16850
- }
16851
- resolve(response);
16852
- } else {
16853
- reject(xhr.response);
16854
- }
16855
- };
16856
- xhr.onerror = function () {
16857
- return reject(xhr.response);
16858
- };
16859
- xhr.send(body);
16860
- });
16861
- };
16862
-
16863
- /**
16864
- * Creates and sends XHR request
16865
- *
16866
- * @param {Object} options
16867
- *
16868
- * @returns Promise
16869
- */
16870
- function request (options) {
16871
- var xhr = createRequest(options);
16872
-
16873
- return sendRequest(xhr, options.body);
16874
- }
16875
-
16876
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
16877
-
16878
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
16879
-
16880
- var ChunkUploadHandler = function () {
16881
- /**
16882
- * Constructor
16883
- *
16884
- * @param {File} file
16885
- * @param {Object} options
16886
- */
16887
- function ChunkUploadHandler(file, options) {
16888
- _classCallCheck(this, ChunkUploadHandler);
16889
-
16890
- this.file = file;
16891
- this.options = options;
16892
- }
16893
-
16894
- /**
16895
- * Gets the max retries from options
16896
- */
16897
-
16898
-
16899
- _createClass(ChunkUploadHandler, [{
16900
- key: 'createChunks',
16901
-
16902
-
16903
- /**
16904
- * Creates all the chunks in the initial state
16905
- */
16906
- value: function createChunks() {
16907
- this.chunks = [];
16908
-
16909
- var start = 0;
16910
- var end = this.chunkSize;
16911
- while (start < this.fileSize) {
16912
- this.chunks.push({
16913
- blob: this.file.file.slice(start, end),
16914
- startOffset: start,
16915
- active: false,
16916
- retries: this.maxRetries
16917
- });
16918
- start = end;
16919
- end = start + this.chunkSize;
16920
- }
16921
- }
16922
-
16923
- /**
16924
- * Updates the progress of the file with the handler's progress
16925
- */
16926
-
16927
- }, {
16928
- key: 'updateFileProgress',
16929
- value: function updateFileProgress() {
16930
- this.file.progress = this.progress;
16931
- }
16932
-
16933
- /**
16934
- * Paues the upload process
16935
- * - Stops all active requests
16936
- * - Sets the file not active
16937
- */
16938
-
16939
- }, {
16940
- key: 'pause',
16941
- value: function pause() {
16942
- this.file.active = false;
16943
- this.stopChunks();
16944
- }
16945
-
16946
- /**
16947
- * Stops all the current chunks
16948
- */
16949
-
16950
- }, {
16951
- key: 'stopChunks',
16952
- value: function stopChunks() {
16953
- this.chunksUploading.forEach(function (chunk) {
16954
- chunk.xhr.abort();
16955
- chunk.active = false;
16956
- });
16957
- }
16958
-
16959
- /**
16960
- * Resumes the file upload
16961
- * - Sets the file active
16962
- * - Starts the following chunks
16963
- */
16964
-
16965
- }, {
16966
- key: 'resume',
16967
- value: function resume() {
16968
- this.file.active = true;
16969
- this.startChunking();
16970
- }
16971
-
16972
- /**
16973
- * Starts the file upload
16974
- *
16975
- * @returns Promise
16976
- * - resolve The file was uploaded
16977
- * - reject The file upload failed
16978
- */
16979
-
16980
- }, {
16981
- key: 'upload',
16982
- value: function upload() {
16983
- var _this = this;
16984
-
16985
- this.promise = new Promise(function (resolve, reject) {
16986
- _this.resolve = resolve;
16987
- _this.reject = reject;
16988
- });
16989
- this.start();
16990
-
16991
- return this.promise;
16992
- }
16993
-
16994
- /**
16995
- * Start phase
16996
- * Sends a request to the backend to initialise the chunks
16997
- */
16998
-
16999
- }, {
17000
- key: 'start',
17001
- value: function start() {
17002
- var _this2 = this;
17003
-
17004
- request({
17005
- method: 'POST',
17006
- headers: Object.assign({}, this.headers, {
17007
- 'Content-Type': 'application/json'
17008
- }),
17009
- url: this.action,
17010
- body: Object.assign(this.startBody, {
17011
- phase: 'start',
17012
- mime_type: this.fileType,
17013
- size: this.fileSize,
17014
- name: this.fileName
17015
- })
17016
- }).then(function (res) {
17017
- if (res.status !== 'success') {
17018
- _this2.file.response = res;
17019
- return _this2.reject('server');
17020
- }
17021
-
17022
- _this2.sessionId = res.data.session_id;
17023
- _this2.chunkSize = res.data.end_offset;
17024
-
17025
- _this2.createChunks();
17026
- _this2.startChunking();
17027
- }).catch(function (res) {
17028
- _this2.file.response = res;
17029
- _this2.reject('server');
17030
- });
17031
- }
17032
-
17033
- /**
17034
- * Starts to upload chunks
17035
- */
17036
-
17037
- }, {
17038
- key: 'startChunking',
17039
- value: function startChunking() {
17040
- for (var i = 0; i < this.maxActiveChunks; i++) {
17041
- this.uploadNextChunk();
17042
- }
17043
- }
17044
-
17045
- /**
17046
- * Uploads the next chunk
17047
- * - Won't do anything if the process is paused
17048
- * - Will start finish phase if there are no more chunks to upload
17049
- */
17050
-
17051
- }, {
17052
- key: 'uploadNextChunk',
17053
- value: function uploadNextChunk() {
17054
- if (this.file.active) {
17055
- if (this.hasChunksToUpload) {
17056
- return this.uploadChunk(this.chunksToUpload[0]);
17057
- }
17058
-
17059
- if (this.chunksUploading.length === 0) {
17060
- return this.finish();
17061
- }
17062
- }
17063
- }
17064
-
17065
- /**
17066
- * Uploads a chunk
17067
- * - Sends the chunk to the backend
17068
- * - Sets the chunk as uploaded if everything went well
17069
- * - Decreases the number of retries if anything went wrong
17070
- * - Fails if there are no more retries
17071
- *
17072
- * @param {Object} chunk
17073
- */
17074
-
17075
- }, {
17076
- key: 'uploadChunk',
17077
- value: function uploadChunk(chunk) {
17078
- var _this3 = this;
17079
-
17080
- chunk.progress = 0;
17081
- chunk.active = true;
17082
- this.updateFileProgress();
17083
- chunk.xhr = createRequest({
17084
- method: 'POST',
17085
- headers: this.headers,
17086
- url: this.action
17087
- });
17088
-
17089
- chunk.xhr.upload.addEventListener('progress', function (evt) {
17090
- if (evt.lengthComputable) {
17091
- chunk.progress = Math.round(evt.loaded / evt.total * 100);
17092
- }
17093
- }, false);
17094
-
17095
- sendFormRequest(chunk.xhr, Object.assign(this.uploadBody, {
17096
- phase: 'upload',
17097
- session_id: this.sessionId,
17098
- start_offset: chunk.startOffset,
17099
- chunk: chunk.blob
17100
- })).then(function (res) {
17101
- chunk.active = false;
17102
- if (res.status === 'success') {
17103
- chunk.uploaded = true;
17104
- } else {
17105
- if (chunk.retries-- <= 0) {
17106
- _this3.stopChunks();
17107
- return _this3.reject('upload');
17108
- }
17109
- }
17110
-
17111
- _this3.uploadNextChunk();
17112
- }).catch(function () {
17113
- chunk.active = false;
17114
- if (chunk.retries-- <= 0) {
17115
- _this3.stopChunks();
17116
- return _this3.reject('upload');
17117
- }
17118
-
17119
- _this3.uploadNextChunk();
17120
- });
17121
- }
17122
-
17123
- /**
17124
- * Finish phase
17125
- * Sends a request to the backend to finish the process
17126
- */
17127
-
17128
- }, {
17129
- key: 'finish',
17130
- value: function finish() {
17131
- var _this4 = this;
17132
-
17133
- this.updateFileProgress();
17134
-
17135
- request({
17136
- method: 'POST',
17137
- headers: Object.assign({}, this.headers, {
17138
- 'Content-Type': 'application/json'
17139
- }),
17140
- url: this.action,
17141
- body: Object.assign(this.finishBody, {
17142
- phase: 'finish',
17143
- session_id: this.sessionId
17144
- })
17145
- }).then(function (res) {
17146
- _this4.file.response = res;
17147
- if (res.status !== 'success') {
17148
- return _this4.reject('server');
17149
- }
17150
-
17151
- _this4.resolve(res);
17152
- }).catch(function (res) {
17153
- _this4.file.response = res;
17154
- _this4.reject('server');
17155
- });
17156
- }
17157
- }, {
17158
- key: 'maxRetries',
17159
- get: function get() {
17160
- return parseInt(this.options.maxRetries);
17161
- }
17162
-
17163
- /**
17164
- * Gets the max number of active chunks being uploaded at once from options
17165
- */
17166
-
17167
- }, {
17168
- key: 'maxActiveChunks',
17169
- get: function get() {
17170
- return parseInt(this.options.maxActive);
17171
- }
17172
-
17173
- /**
17174
- * Gets the file type
17175
- */
17176
-
17177
- }, {
17178
- key: 'fileType',
17179
- get: function get() {
17180
- return this.file.type;
17181
- }
17182
-
17183
- /**
17184
- * Gets the file size
17185
- */
17186
-
17187
- }, {
17188
- key: 'fileSize',
17189
- get: function get() {
17190
- return this.file.size;
17191
- }
17192
-
17193
- /**
17194
- * Gets the file name
17195
- */
17196
-
17197
- }, {
17198
- key: 'fileName',
17199
- get: function get() {
17200
- return this.file.name;
17201
- }
17202
-
17203
- /**
17204
- * Gets action (url) to upload the file
17205
- */
17206
-
17207
- }, {
17208
- key: 'action',
17209
- get: function get() {
17210
- return this.options.action || null;
17211
- }
17212
-
17213
- /**
17214
- * Gets the body to be merged when sending the request in start phase
17215
- */
17216
-
17217
- }, {
17218
- key: 'startBody',
17219
- get: function get() {
17220
- return this.options.startBody || {};
17221
- }
17222
-
17223
- /**
17224
- * Gets the body to be merged when sending the request in upload phase
17225
- */
17226
-
17227
- }, {
17228
- key: 'uploadBody',
17229
- get: function get() {
17230
- return this.options.uploadBody || {};
17231
- }
17232
-
17233
- /**
17234
- * Gets the body to be merged when sending the request in finish phase
17235
- */
17236
-
17237
- }, {
17238
- key: 'finishBody',
17239
- get: function get() {
17240
- return this.options.finishBody || {};
17241
- }
17242
-
17243
- /**
17244
- * Gets the headers of the requests from options
17245
- */
17246
-
17247
- }, {
17248
- key: 'headers',
17249
- get: function get() {
17250
- return this.options.headers || {};
17251
- }
17252
-
17253
- /**
17254
- * Whether it's ready to upload files or not
17255
- */
17256
-
17257
- }, {
17258
- key: 'readyToUpload',
17259
- get: function get() {
17260
- return !!this.chunks;
17261
- }
17262
-
17263
- /**
17264
- * Gets the progress of the chunk upload
17265
- * - Gets all the completed chunks
17266
- * - Gets the progress of all the chunks that are being uploaded
17267
- */
17268
-
17269
- }, {
17270
- key: 'progress',
17271
- get: function get() {
17272
- var _this5 = this;
17273
-
17274
- var completedProgress = this.chunksUploaded.length / this.chunks.length * 100;
17275
- var uploadingProgress = this.chunksUploading.reduce(function (progress, chunk) {
17276
- return progress + (chunk.progress | 0) / _this5.chunks.length;
17277
- }, 0);
17278
-
17279
- return Math.min(completedProgress + uploadingProgress, 100);
17280
- }
17281
-
17282
- /**
17283
- * Gets all the chunks that are pending to be uploaded
17284
- */
17285
-
17286
- }, {
17287
- key: 'chunksToUpload',
17288
- get: function get() {
17289
- return this.chunks.filter(function (chunk) {
17290
- return !chunk.active && !chunk.uploaded;
17291
- });
17292
- }
17293
-
17294
- /**
17295
- * Whether there are chunks to upload or not
17296
- */
17297
-
17298
- }, {
17299
- key: 'hasChunksToUpload',
17300
- get: function get() {
17301
- return this.chunksToUpload.length > 0;
17302
- }
17303
-
17304
- /**
17305
- * Gets all the chunks that are uploading
17306
- */
17307
-
17308
- }, {
17309
- key: 'chunksUploading',
17310
- get: function get() {
17311
- return this.chunks.filter(function (chunk) {
17312
- return !!chunk.xhr && !!chunk.active;
17313
- });
17314
- }
17315
-
17316
- /**
17317
- * Gets all the chunks that have finished uploading
17318
- */
17319
-
17320
- }, {
17321
- key: 'chunksUploaded',
17322
- get: function get() {
17323
- return this.chunks.filter(function (chunk) {
17324
- return !!chunk.uploaded;
17325
- });
17326
- }
17327
- }]);
17328
-
17329
- return ChunkUploadHandler;
17330
- }();
17331
-
17332
- //
17333
- //
17334
- //
17335
- //
17336
- //
17337
- //
17338
- //
17339
- //
17340
- //
17341
- //
17342
- //
17343
- //
17344
- //
17345
- //
17346
-
17347
- var script = {
17348
- methods: {
17349
- change: function change(e) {
17350
- this.$parent.addInputFile(e.target);
17351
- if (e.target.files) {
17352
- e.target.value = '';
17353
- if (!/safari/i.test(navigator.userAgent)) {
17354
- e.target.type = '';
17355
- e.target.type = 'file';
17356
- }
17357
- } else {
17358
- // ie9 fix #219
17359
- this.$destroy();
17360
- // eslint-disable-next-line
17361
- new this.constructor({
17362
- parent: this.$parent,
17363
- el: this.$el
17364
- });
17365
- }
17366
- }
17367
- }
17368
- };
17369
-
17370
- /* script */
17371
- var __vue_script__ = script;
17372
-
17373
- /* template */
17374
- var __vue_render__ = function __vue_render__() {
17375
- var _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c('input', { attrs: { "type": "file", "name": _vm.$parent.name, "id": _vm.$parent.inputId || _vm.$parent.name, "accept": _vm.$parent.accept, "capture": _vm.$parent.capture, "disabled": _vm.$parent.disabled, "webkitdirectory": _vm.$parent.directory && _vm.$parent.features.directory, "directory": _vm.$parent.directory && _vm.$parent.features.directory, "multiple": _vm.$parent.multiple && _vm.$parent.features.html5 }, on: { "change": _vm.change } });
17376
- };
17377
- var __vue_staticRenderFns__ = [];
17378
-
17379
- /* style */
17380
- var __vue_inject_styles__ = undefined;
17381
- /* scoped */
17382
- var __vue_scope_id__ = undefined;
17383
- /* module identifier */
17384
- var __vue_module_identifier__ = undefined;
17385
- /* functional template */
17386
- var __vue_is_functional_template__ = false;
17387
- /* component normalizer */
17388
- function __vue_normalize__(template, style, script$$1, scope, functional, moduleIdentifier, createInjector, createInjectorSSR) {
17389
- var component = (typeof script$$1 === 'function' ? script$$1.options : script$$1) || {};
17390
-
17391
- if (!component.render) {
17392
- component.render = template.render;
17393
- component.staticRenderFns = template.staticRenderFns;
17394
- component._compiled = true;
17395
-
17396
- if (functional) component.functional = true;
17397
- }
17398
-
17399
- component._scopeId = scope;
17400
-
17401
- return component;
17402
- }
17403
- /* style inject */
17404
- function __vue_create_injector__() {
17405
- var head = document.head || document.getElementsByTagName('head')[0];
17406
- var styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {});
17407
- var isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());
17408
-
17409
- return function addStyle(id, css) {
17410
- if (document.querySelector('style[data-vue-ssr-id~="' + id + '"]')) return; // SSR styles are present.
17411
-
17412
- var group = isOldIE ? css.media || 'default' : id;
17413
- var style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined });
17414
-
17415
- if (!style.ids.includes(id)) {
17416
- var code = css.source;
17417
- var index = style.ids.length;
17418
-
17419
- style.ids.push(id);
17420
-
17421
- if (css.map) {
17422
- // https://developer.chrome.com/devtools/docs/javascript-debugging
17423
- // this makes source maps inside style tags work properly in Chrome
17424
- code += '\n/*# sourceURL=' + css.map.sources[0] + ' */';
17425
- // http://stackoverflow.com/a/26603875
17426
- code += '\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) + ' */';
17427
- }
17428
-
17429
- if (isOldIE) {
17430
- style.element = style.element || document.querySelector('style[data-group=' + group + ']');
17431
- }
17432
-
17433
- if (!style.element) {
17434
- var el = style.element = document.createElement('style');
17435
- el.type = 'text/css';
17436
-
17437
- if (css.media) el.setAttribute('media', css.media);
17438
- if (isOldIE) {
17439
- el.setAttribute('data-group', group);
17440
- el.setAttribute('data-next-index', '0');
17441
- }
17442
-
17443
- head.appendChild(el);
17444
- }
17445
-
17446
- if (isOldIE) {
17447
- index = parseInt(style.element.getAttribute('data-next-index'));
17448
- style.element.setAttribute('data-next-index', index + 1);
17449
- }
17450
-
17451
- if (style.element.styleSheet) {
17452
- style.parts.push(code);
17453
- style.element.styleSheet.cssText = style.parts.filter(Boolean).join('\n');
17454
- } else {
17455
- var textNode = document.createTextNode(code);
17456
- var nodes = style.element.childNodes;
17457
- if (nodes[index]) style.element.removeChild(nodes[index]);
17458
- if (nodes.length) style.element.insertBefore(textNode, nodes[index]);else style.element.appendChild(textNode);
17459
- }
17460
- }
17461
- };
17462
- }
17463
- /* style inject SSR */
17464
-
17465
- var InputFile = __vue_normalize__({ render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, __vue_create_injector__, undefined);
17466
-
17467
- var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
17468
-
17469
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
17470
-
17471
- function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
17472
-
17473
- var CHUNK_DEFAULT_OPTIONS = {
17474
- headers: {},
17475
- action: '',
17476
- minSize: 1048576,
17477
- maxActive: 3,
17478
- maxRetries: 5,
17479
-
17480
- handler: ChunkUploadHandler
17481
- };
17482
-
17483
- var script$1 = {
17484
- components: {
17485
- InputFile: InputFile
17486
- },
17487
- props: {
17488
- inputId: {
17489
- type: String
17490
- },
17491
-
17492
- name: {
17493
- type: String,
17494
- default: 'file'
17495
- },
17496
-
17497
- accept: {
17498
- type: String
17499
- },
17500
-
17501
- capture: {},
17502
-
17503
- disabled: {},
17504
-
17505
- multiple: {
17506
- type: Boolean
17507
- },
17508
-
17509
- maximum: {
17510
- type: Number,
17511
- default: function _default() {
17512
- return this.multiple ? 0 : 1;
17513
- }
17514
- },
17515
-
17516
- addIndex: {
17517
- type: [Boolean, Number]
17518
- },
17519
-
17520
- directory: {
17521
- type: Boolean
17522
- },
17523
-
17524
- postAction: {
17525
- type: String
17526
- },
17527
-
17528
- putAction: {
17529
- type: String
17530
- },
17531
-
17532
- customAction: {
17533
- type: Function
17534
- },
17535
-
17536
- headers: {
17537
- type: Object,
17538
- default: Object
17539
- },
17540
-
17541
- data: {
17542
- type: Object,
17543
- default: Object
17544
- },
17545
-
17546
- timeout: {
17547
- type: Number,
17548
- default: 0
17549
- },
17550
-
17551
- drop: {
17552
- default: false
17553
- },
17554
-
17555
- dropDirectory: {
17556
- type: Boolean,
17557
- default: true
17558
- },
17559
-
17560
- size: {
17561
- type: Number,
17562
- default: 0
17563
- },
17564
-
17565
- extensions: {
17566
- default: Array
17567
- },
17568
-
17569
- value: {
17570
- type: Array,
17571
- default: Array
17572
- },
17573
-
17574
- thread: {
17575
- type: Number,
17576
- default: 1
17577
- },
17578
-
17579
- // Chunk upload enabled
17580
- chunkEnabled: {
17581
- type: Boolean,
17582
- default: false
17583
- },
17584
-
17585
- // Chunk upload properties
17586
- chunk: {
17587
- type: Object,
17588
- default: function _default() {
17589
- return CHUNK_DEFAULT_OPTIONS;
17590
- }
17591
- }
17592
- },
17593
-
17594
- data: function data() {
17595
- return {
17596
- files: this.value,
17597
- features: {
17598
- html5: true,
17599
- directory: false,
17600
- drag: false
17601
- },
17602
-
17603
- active: false,
17604
- dropActive: false,
17605
-
17606
- uploading: 0,
17607
-
17608
- destroy: false
17609
- };
17610
- },
17611
-
17612
-
17613
- /**
17614
- * mounted
17615
- * @return {[type]} [description]
17616
- */
17617
- mounted: function mounted() {
17618
- var input = document.createElement('input');
17619
- input.type = 'file';
17620
- input.multiple = true;
17621
-
17622
- // html5 特征
17623
- if (window.FormData && input.files) {
17624
- // 上传目录特征
17625
- if (typeof input.webkitdirectory === 'boolean' || typeof input.directory === 'boolean') {
17626
- this.features.directory = true;
17627
- }
17628
-
17629
- // 拖拽特征
17630
- if (this.features.html5 && typeof input.ondrop !== 'undefined') {
17631
- this.features.drop = true;
17632
- }
17633
- } else {
17634
- this.features.html5 = false;
17635
- }
17636
-
17637
- // files 定位缓存
17638
- this.maps = {};
17639
- if (this.files) {
17640
- for (var i = 0; i < this.files.length; i++) {
17641
- var file = this.files[i];
17642
- this.maps[file.id] = file;
17643
- }
17644
- }
17645
-
17646
- this.$nextTick(function () {
17647
-
17648
- // 更新下父级
17649
- if (this.$parent) {
17650
- this.$parent.$forceUpdate();
17651
- }
17652
-
17653
- // 拖拽渲染
17654
- this.watchDrop(this.drop);
17655
- });
17656
- },
17657
-
17658
-
17659
- /**
17660
- * beforeDestroy
17661
- * @return {[type]} [description]
17662
- */
17663
- beforeDestroy: function beforeDestroy() {
17664
- // 已销毁
17665
- this.destroy = true;
17666
-
17667
- // 设置成不激活
17668
- this.active = false;
17669
- },
17670
-
17671
-
17672
- computed: {
17673
- /**
17674
- * uploading 正在上传的线程
17675
- * @return {[type]} [description]
17676
- */
17677
-
17678
- /**
17679
- * uploaded 文件列表是否全部已上传
17680
- * @return {[type]} [description]
17681
- */
17682
- uploaded: function uploaded() {
17683
- var file = void 0;
17684
- for (var i = 0; i < this.files.length; i++) {
17685
- file = this.files[i];
17686
- if (file.fileObject && !file.error && !file.success) {
17687
- return false;
17688
- }
17689
- }
17690
- return true;
17691
- },
17692
- chunkOptions: function chunkOptions() {
17693
- return Object.assign(CHUNK_DEFAULT_OPTIONS, this.chunk);
17694
- },
17695
- className: function className() {
17696
- return ['file-uploads', this.features.html5 ? 'file-uploads-html5' : 'file-uploads-html4', this.features.directory && this.directory ? 'file-uploads-directory' : undefined, this.features.drop && this.drop ? 'file-uploads-drop' : undefined, this.disabled ? 'file-uploads-disabled' : undefined];
17697
- }
17698
- },
17699
-
17700
- watch: {
17701
- active: function active(_active) {
17702
- this.watchActive(_active);
17703
- },
17704
- dropActive: function dropActive() {
17705
- if (this.$parent) {
17706
- this.$parent.$forceUpdate();
17707
- }
17708
- },
17709
- drop: function drop(value) {
17710
- this.watchDrop(value);
17711
- },
17712
- value: function value(files) {
17713
- if (this.files === files) {
17714
- return;
17715
- }
17716
- this.files = files;
17717
-
17718
- var oldMaps = this.maps;
17719
-
17720
- // 重写 maps 缓存
17721
- this.maps = {};
17722
- for (var i = 0; i < this.files.length; i++) {
17723
- var file = this.files[i];
17724
- this.maps[file.id] = file;
17725
- }
17726
-
17727
- // add, update
17728
- for (var key in this.maps) {
17729
- var newFile = this.maps[key];
17730
- var oldFile = oldMaps[key];
17731
- if (newFile !== oldFile) {
17732
- this.emitFile(newFile, oldFile);
17733
- }
17734
- }
17735
-
17736
- // delete
17737
- for (var _key in oldMaps) {
17738
- if (!this.maps[_key]) {
17739
- this.emitFile(undefined, oldMaps[_key]);
17740
- }
17741
- }
17742
- }
17743
- },
17744
-
17745
- methods: {
17746
-
17747
- // 清空
17748
- clear: function clear() {
17749
- if (this.files.length) {
17750
- var files = this.files;
17751
- this.files = [];
17752
-
17753
- // 定位
17754
- this.maps = {};
17755
-
17756
- // 事件
17757
- this.emitInput();
17758
- for (var i = 0; i < files.length; i++) {
17759
- this.emitFile(undefined, files[i]);
17760
- }
17761
- }
17762
- return true;
17763
- },
17764
-
17765
-
17766
- // 选择
17767
- get: function get(id) {
17768
- if (!id) {
17769
- return false;
17770
- }
17771
-
17772
- if ((typeof id === 'undefined' ? 'undefined' : _typeof(id)) === 'object') {
17773
- return this.maps[id.id] || false;
17774
- }
17775
-
17776
- return this.maps[id] || false;
17777
- },
17778
-
17779
-
17780
- // 添加
17781
- add: function add(_files) {
17782
- var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.addIndex;
17783
-
17784
- var files = _files;
17785
- var isArray = files instanceof Array;
17786
-
17787
- // 不是数组整理成数组
17788
- if (!isArray) {
17789
- files = [files];
17790
- }
17791
-
17792
- // 遍历规范对象
17793
- var addFiles = [];
17794
- for (var i = 0; i < files.length; i++) {
17795
- var file = files[i];
17796
- if (this.features.html5 && file instanceof Blob) {
17797
- file = {
17798
- file: file,
17799
- size: file.size,
17800
- name: file.webkitRelativePath || file.relativePath || file.name || 'unknown',
17801
- type: file.type
17802
- };
17803
- }
17804
- var fileObject = false;
17805
- if (file.fileObject === false) ; else if (file.fileObject) {
17806
- fileObject = true;
17807
- } else if (typeof Element !== 'undefined' && file.el instanceof Element) {
17808
- fileObject = true;
17809
- } else if (typeof Blob !== 'undefined' && file.file instanceof Blob) {
17810
- fileObject = true;
17811
- }
17812
- if (fileObject) {
17813
- file = _extends({
17814
- fileObject: true,
17815
- size: -1,
17816
- name: 'Filename',
17817
- type: '',
17818
- active: false,
17819
- error: '',
17820
- success: false,
17821
- putAction: this.putAction,
17822
- postAction: this.postAction,
17823
- timeout: this.timeout
17824
- }, file, {
17825
- response: {},
17826
-
17827
- progress: '0.00', // 只读
17828
- speed: 0 // 只读
17829
- // xhr: false, // 只读
17830
- // iframe: false, // 只读
17831
- });
17832
-
17833
- file.data = _extends({}, this.data, file.data ? file.data : {});
17834
-
17835
- file.headers = _extends({}, this.headers, file.headers ? file.headers : {});
17836
- }
17837
-
17838
- // 必须包含 id
17839
- if (!file.id) {
17840
- file.id = Math.random().toString(36).substr(2);
17841
- }
17842
-
17843
- if (this.emitFilter(file, undefined)) {
17844
- continue;
17845
- }
17846
-
17847
- // 最大数量限制
17848
- if (this.maximum > 1 && addFiles.length + this.files.length >= this.maximum) {
17849
- break;
17850
- }
17851
-
17852
- addFiles.push(file);
17853
-
17854
- // 最大数量限制
17855
- if (this.maximum === 1) {
17856
- break;
17857
- }
17858
- }
17859
-
17860
- // 没有文件
17861
- if (!addFiles.length) {
17862
- return false;
17863
- }
17864
-
17865
- // 如果是 1 清空
17866
- if (this.maximum === 1) {
17867
- this.clear();
17868
- }
17869
-
17870
- // 添加进去 files
17871
- var newFiles = void 0;
17872
- if (index === true || index === 0) {
17873
- newFiles = addFiles.concat(this.files);
17874
- } else if (index) {
17875
- var _newFiles;
17876
-
17877
- newFiles = this.files.concat([]);
17878
- (_newFiles = newFiles).splice.apply(_newFiles, [index, 0].concat(addFiles));
17879
- } else {
17880
- newFiles = this.files.concat(addFiles);
17881
- }
17882
-
17883
- this.files = newFiles;
17884
-
17885
- // 定位
17886
- for (var _i = 0; _i < addFiles.length; _i++) {
17887
- var _file2 = addFiles[_i];
17888
- this.maps[_file2.id] = _file2;
17889
- }
17890
-
17891
- // 事件
17892
- this.emitInput();
17893
- for (var _i2 = 0; _i2 < addFiles.length; _i2++) {
17894
- this.emitFile(addFiles[_i2], undefined);
17895
- }
17896
-
17897
- return isArray ? addFiles : addFiles[0];
17898
- },
17899
-
17900
-
17901
- // 添加表单文件
17902
- addInputFile: function addInputFile(el) {
17903
- var files = [];
17904
- if (el.files) {
17905
- for (var i = 0; i < el.files.length; i++) {
17906
- var file = el.files[i];
17907
- files.push({
17908
- size: file.size,
17909
- name: file.webkitRelativePath || file.relativePath || file.name,
17910
- type: file.type,
17911
- file: file
17912
- });
17913
- }
17914
- } else {
17915
- var names = el.value.replace(/\\/g, '/').split('/');
17916
- delete el.__vuex__;
17917
- files.push({
17918
- name: names[names.length - 1],
17919
- el: el
17920
- });
17921
- }
17922
- return this.add(files);
17923
- },
17924
-
17925
-
17926
- // 添加 DataTransfer
17927
- addDataTransfer: function addDataTransfer(dataTransfer) {
17928
- var _this = this;
17929
-
17930
- var files = [];
17931
- if (dataTransfer.items && dataTransfer.items.length) {
17932
- var items = [];
17933
- for (var i = 0; i < dataTransfer.items.length; i++) {
17934
- var item = dataTransfer.items[i];
17935
- if (item.getAsEntry) {
17936
- item = item.getAsEntry() || item.getAsFile();
17937
- } else if (item.webkitGetAsEntry) {
17938
- item = item.webkitGetAsEntry() || item.getAsFile();
17939
- } else {
17940
- item = item.getAsFile();
17941
- }
17942
- if (item) {
17943
- items.push(item);
17944
- }
17945
- }
17946
-
17947
- return new Promise(function (resolve, reject) {
17948
- var forEach = function forEach(i) {
17949
- var item = items[i];
17950
- // 结束 文件数量大于 最大数量
17951
- if (!item || _this.maximum > 0 && files.length >= _this.maximum) {
17952
- return resolve(_this.add(files));
17953
- }
17954
- _this.getEntry(item).then(function (results) {
17955
- files.push.apply(files, _toConsumableArray(results));
17956
- forEach(i + 1);
17957
- });
17958
- };
17959
- forEach(0);
17960
- });
17961
- }
17962
-
17963
- if (dataTransfer.files.length) {
17964
- for (var _i3 = 0; _i3 < dataTransfer.files.length; _i3++) {
17965
- files.push(dataTransfer.files[_i3]);
17966
- if (this.maximum > 0 && files.length >= this.maximum) {
17967
- break;
17968
- }
17969
- }
17970
- return Promise.resolve(this.add(files));
17971
- }
17972
-
17973
- return Promise.resolve([]);
17974
- },
17975
-
17976
-
17977
- // 获得 entry
17978
- getEntry: function getEntry(entry) {
17979
- var _this2 = this;
17980
-
17981
- var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
17982
-
17983
- return new Promise(function (resolve, reject) {
17984
- if (entry.isFile) {
17985
- entry.file(function (file) {
17986
- resolve([{
17987
- size: file.size,
17988
- name: path + file.name,
17989
- type: file.type,
17990
- file: file
17991
- }]);
17992
- });
17993
- } else if (entry.isDirectory && _this2.dropDirectory) {
17994
- var files = [];
17995
- var dirReader = entry.createReader();
17996
- var readEntries = function readEntries() {
17997
- dirReader.readEntries(function (entries) {
17998
- var forEach = function forEach(i) {
17999
- if (!entries[i] && i === 0 || _this2.maximum > 0 && files.length >= _this2.maximum) {
18000
- return resolve(files);
18001
- }
18002
- if (!entries[i]) {
18003
- return readEntries();
18004
- }
18005
- _this2.getEntry(entries[i], path + entry.name + '/').then(function (results) {
18006
- files.push.apply(files, _toConsumableArray(results));
18007
- forEach(i + 1);
18008
- });
18009
- };
18010
- forEach(0);
18011
- });
18012
- };
18013
- readEntries();
18014
- } else {
18015
- resolve([]);
18016
- }
18017
- });
18018
- },
18019
- replace: function replace(id1, id2) {
18020
- var file1 = this.get(id1);
18021
- var file2 = this.get(id2);
18022
- if (!file1 || !file2 || file1 === file2) {
18023
- return false;
18024
- }
18025
- var files = this.files.concat([]);
18026
- var index1 = files.indexOf(file1);
18027
- var index2 = files.indexOf(file2);
18028
- if (index1 === -1 || index2 === -1) {
18029
- return false;
18030
- }
18031
- files[index1] = file2;
18032
- files[index2] = file1;
18033
- this.files = files;
18034
- this.emitInput();
18035
- return true;
18036
- },
18037
-
18038
-
18039
- // 移除
18040
- remove: function remove(id) {
18041
- var file = this.get(id);
18042
- if (file) {
18043
- if (this.emitFilter(undefined, file)) {
18044
- return false;
18045
- }
18046
- var files = this.files.concat([]);
18047
- var index = files.indexOf(file);
18048
- if (index === -1) {
18049
- console.error('remove', file);
18050
- return false;
18051
- }
18052
- files.splice(index, 1);
18053
- this.files = files;
18054
-
18055
- // 定位
18056
- delete this.maps[file.id];
18057
-
18058
- // 事件
18059
- this.emitInput();
18060
- this.emitFile(undefined, file);
18061
- }
18062
- return file;
18063
- },
18064
-
18065
-
18066
- // 更新
18067
- update: function update(id, data) {
18068
- var file = this.get(id);
18069
- if (file) {
18070
- var newFile = _extends({}, file, data);
18071
- // 停用必须加上错误
18072
- if (file.fileObject && file.active && !newFile.active && !newFile.error && !newFile.success) {
18073
- newFile.error = 'abort';
18074
- }
18075
-
18076
- if (this.emitFilter(newFile, file)) {
18077
- return false;
18078
- }
18079
-
18080
- var files = this.files.concat([]);
18081
- var index = files.indexOf(file);
18082
- if (index === -1) {
18083
- console.error('update', file);
18084
- return false;
18085
- }
18086
- files.splice(index, 1, newFile);
18087
- this.files = files;
18088
-
18089
- // 删除 旧定位 写入 新定位 (已便支持修改id)
18090
- delete this.maps[file.id];
18091
- this.maps[newFile.id] = newFile;
18092
-
18093
- // 事件
18094
- this.emitInput();
18095
- this.emitFile(newFile, file);
18096
- return newFile;
18097
- }
18098
- return false;
18099
- },
18100
-
18101
-
18102
- // 预处理 事件 过滤器
18103
- emitFilter: function emitFilter(newFile, oldFile) {
18104
- var isPrevent = false;
18105
- this.$emit('input-filter', newFile, oldFile, function () {
18106
- isPrevent = true;
18107
- return isPrevent;
18108
- });
18109
- return isPrevent;
18110
- },
18111
-
18112
-
18113
- // 处理后 事件 分发
18114
- emitFile: function emitFile(newFile, oldFile) {
18115
- this.$emit('input-file', newFile, oldFile);
18116
- if (newFile && newFile.fileObject && newFile.active && (!oldFile || !oldFile.active)) {
18117
- this.uploading++;
18118
- // 激活
18119
- this.$nextTick(function () {
18120
- var _this3 = this;
18121
-
18122
- setTimeout(function () {
18123
- _this3.upload(newFile).then(function () {
18124
- // eslint-disable-next-line
18125
- newFile = _this3.get(newFile);
18126
- if (newFile && newFile.fileObject) {
18127
- _this3.update(newFile, {
18128
- active: false,
18129
- success: !newFile.error
18130
- });
18131
- }
18132
- }).catch(function (e) {
18133
- _this3.update(newFile, {
18134
- active: false,
18135
- success: false,
18136
- error: e.code || e.error || e.message || e
18137
- });
18138
- });
18139
- }, parseInt(Math.random() * 50 + 50, 10));
18140
- });
18141
- } else if ((!newFile || !newFile.fileObject || !newFile.active) && oldFile && oldFile.fileObject && oldFile.active) {
18142
- // 停止
18143
- this.uploading--;
18144
- }
18145
-
18146
- // 自动延续激活
18147
- if (this.active && (Boolean(newFile) !== Boolean(oldFile) || newFile.active !== oldFile.active)) {
18148
- this.watchActive(true);
18149
- }
18150
- },
18151
- emitInput: function emitInput() {
18152
- this.$emit('input', this.files);
18153
- },
18154
-
18155
-
18156
- // 上传
18157
- upload: function upload(id) {
18158
- var file = this.get(id);
18159
-
18160
- // 被删除
18161
- if (!file) {
18162
- return Promise.reject('not_exists');
18163
- }
18164
-
18165
- // 不是文件对象
18166
- if (!file.fileObject) {
18167
- return Promise.reject('file_object');
18168
- }
18169
-
18170
- // 有错误直接响应
18171
- if (file.error) {
18172
- return Promise.reject(file.error);
18173
- }
18174
-
18175
- // 已完成直接响应
18176
- if (file.success) {
18177
- return Promise.resolve(file);
18178
- }
18179
-
18180
- // 后缀
18181
- var extensions = this.extensions;
18182
- if (extensions && (extensions.length || typeof extensions.length === 'undefined')) {
18183
- if ((typeof extensions === 'undefined' ? 'undefined' : _typeof(extensions)) !== 'object' || !(extensions instanceof RegExp)) {
18184
- if (typeof extensions === 'string') {
18185
- extensions = extensions.split(',').map(function (value) {
18186
- return value.trim();
18187
- }).filter(function (value) {
18188
- return value;
18189
- });
18190
- }
18191
- extensions = new RegExp('\\.(' + extensions.join('|').replace(/\./g, '\\.') + ')$', 'i');
18192
- }
18193
- if (file.name.search(extensions) === -1) {
18194
- return Promise.reject('extension');
18195
- }
18196
- }
18197
-
18198
- // 大小
18199
- if (this.size > 0 && file.size >= 0 && file.size > this.size) {
18200
- return Promise.reject('size');
18201
- }
18202
-
18203
- if (this.customAction) {
18204
- return this.customAction(file, this);
18205
- }
18206
-
18207
- if (this.features.html5) {
18208
- if (this.shouldUseChunkUpload(file)) {
18209
- return this.uploadChunk(file);
18210
- }
18211
- if (file.putAction) {
18212
- return this.uploadPut(file);
18213
- }
18214
- if (file.postAction) {
18215
- return this.uploadHtml5(file);
18216
- }
18217
- }
18218
- if (file.postAction) {
18219
- return this.uploadHtml4(file);
18220
- }
18221
- return Promise.reject('No action configured');
18222
- },
18223
-
18224
-
18225
- /**
18226
- * Whether this file should be uploaded using chunk upload or not
18227
- *
18228
- * @param Object file
18229
- */
18230
- shouldUseChunkUpload: function shouldUseChunkUpload(file) {
18231
- return this.chunkEnabled && !!this.chunkOptions.handler && file.size > this.chunkOptions.minSize;
18232
- },
18233
-
18234
-
18235
- /**
18236
- * Upload a file using Chunk method
18237
- *
18238
- * @param File file
18239
- */
18240
- uploadChunk: function uploadChunk(file) {
18241
- var HandlerClass = this.chunkOptions.handler;
18242
- file.chunk = new HandlerClass(file, this.chunkOptions);
18243
-
18244
- return file.chunk.upload();
18245
- },
18246
- uploadPut: function uploadPut(file) {
18247
- var querys = [];
18248
- var value = void 0;
18249
- for (var key in file.data) {
18250
- value = file.data[key];
18251
- if (value !== null && value !== undefined) {
18252
- querys.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
18253
- }
18254
- }
18255
- var queryString = querys.length ? (file.putAction.indexOf('?') === -1 ? '?' : '&') + querys.join('&') : '';
18256
- var xhr = new XMLHttpRequest();
18257
- xhr.open('PUT', file.putAction + queryString);
18258
- return this.uploadXhr(xhr, file, file.file);
18259
- },
18260
- uploadHtml5: function uploadHtml5(file) {
18261
- var form = new window.FormData();
18262
- var value = void 0;
18263
- for (var key in file.data) {
18264
- value = file.data[key];
18265
- if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && typeof value.toString !== 'function') {
18266
- if (value instanceof File) {
18267
- form.append(key, value, value.name);
18268
- } else {
18269
- form.append(key, JSON.stringify(value));
18270
- }
18271
- } else if (value !== null && value !== undefined) {
18272
- form.append(key, value);
18273
- }
18274
- }
18275
- form.append(this.name, file.file, file.file.filename || file.name);
18276
- var xhr = new XMLHttpRequest();
18277
- xhr.open('POST', file.postAction);
18278
- return this.uploadXhr(xhr, file, form);
18279
- },
18280
- uploadXhr: function uploadXhr(xhr, _file, body) {
18281
- var _this4 = this;
18282
-
18283
- var file = _file;
18284
- var speedTime = 0;
18285
- var speedLoaded = 0;
18286
-
18287
- // 进度条
18288
- xhr.upload.onprogress = function (e) {
18289
- // 还未开始上传 已删除 未激活
18290
- file = _this4.get(file);
18291
- if (!e.lengthComputable || !file || !file.fileObject || !file.active) {
18292
- return;
18293
- }
18294
-
18295
- // 进度 速度 每秒更新一次
18296
- var speedTime2 = Math.round(Date.now() / 1000);
18297
- if (speedTime2 === speedTime) {
18298
- return;
18299
- }
18300
- speedTime = speedTime2;
18301
-
18302
- file = _this4.update(file, {
18303
- progress: (e.loaded / e.total * 100).toFixed(2),
18304
- speed: e.loaded - speedLoaded
18305
- });
18306
- speedLoaded = e.loaded;
18307
- };
18308
-
18309
- // 检查激活状态
18310
- var interval = setInterval(function () {
18311
- file = _this4.get(file);
18312
- if (file && file.fileObject && !file.success && !file.error && file.active) {
18313
- return;
18314
- }
18315
-
18316
- if (interval) {
18317
- clearInterval(interval);
18318
- interval = false;
18319
- }
18320
-
18321
- try {
18322
- xhr.abort();
18323
- xhr.timeout = 1;
18324
- } catch (e) {}
18325
- }, 100);
18326
-
18327
- return new Promise(function (resolve, reject) {
18328
- var complete = void 0;
18329
- var fn = function fn(e) {
18330
- // 已经处理过了
18331
- if (complete) {
18332
- return;
18333
- }
18334
- complete = true;
18335
- if (interval) {
18336
- clearInterval(interval);
18337
- interval = false;
18338
- }
18339
-
18340
- file = _this4.get(file);
18341
-
18342
- // 不存在直接响应
18343
- if (!file) {
18344
- return reject('not_exists');
18345
- }
18346
-
18347
- // 不是文件对象
18348
- if (!file.fileObject) {
18349
- return reject('file_object');
18350
- }
18351
-
18352
- // 有错误自动响应
18353
- if (file.error) {
18354
- return reject(file.error);
18355
- }
18356
-
18357
- // 未激活
18358
- if (!file.active) {
18359
- return reject('abort');
18360
- }
18361
-
18362
- // 已完成 直接相应
18363
- if (file.success) {
18364
- return resolve(file);
18365
- }
18366
-
18367
- var data = {};
18368
-
18369
- switch (e.type) {
18370
- case 'timeout':
18371
- case 'abort':
18372
- data.error = e.type;
18373
- break;
18374
- case 'error':
18375
- if (!xhr.status) {
18376
- data.error = 'network';
18377
- } else if (xhr.status >= 500) {
18378
- data.error = 'server';
18379
- } else if (xhr.status >= 400) {
18380
- data.error = 'denied';
18381
- }
18382
- break;
18383
- default:
18384
- if (xhr.status >= 500) {
18385
- data.error = 'server';
18386
- } else if (xhr.status >= 400) {
18387
- data.error = 'denied';
18388
- } else {
18389
- data.progress = '100.00';
18390
- }
18391
- }
18392
-
18393
- if (xhr.responseText) {
18394
- var contentType = xhr.getResponseHeader('Content-Type');
18395
- if (contentType && contentType.indexOf('/json') !== -1) {
18396
- data.response = JSON.parse(xhr.responseText);
18397
- } else {
18398
- data.response = xhr.responseText;
18399
- }
18400
- }
18401
-
18402
- // 更新
18403
- file = _this4.update(file, data);
18404
-
18405
- // 相应错误
18406
- if (file.error) {
18407
- return reject(file.error);
18408
- }
18409
-
18410
- // 响应
18411
- return resolve(file);
18412
- };
18413
-
18414
- // 事件
18415
- xhr.onload = fn;
18416
- xhr.onerror = fn;
18417
- xhr.onabort = fn;
18418
- xhr.ontimeout = fn;
18419
-
18420
- // 超时
18421
- if (file.timeout) {
18422
- xhr.timeout = file.timeout;
18423
- }
18424
-
18425
- // headers
18426
- for (var key in file.headers) {
18427
- xhr.setRequestHeader(key, file.headers[key]);
18428
- }
18429
-
18430
- // 更新 xhr
18431
- file = _this4.update(file, { xhr: xhr });
18432
-
18433
- // 开始上传
18434
- xhr.send(body);
18435
- });
18436
- },
18437
- uploadHtml4: function uploadHtml4(_file) {
18438
- var _this5 = this;
18439
-
18440
- var file = _file;
18441
- var onKeydown = function onKeydown(e) {
18442
- if (e.keyCode === 27) {
18443
- e.preventDefault();
18444
- }
18445
- };
18446
-
18447
- var iframe = document.createElement('iframe');
18448
- iframe.id = 'upload-iframe-' + file.id;
18449
- iframe.name = 'upload-iframe-' + file.id;
18450
- iframe.src = 'about:blank';
18451
- iframe.setAttribute('style', 'width:1px;height:1px;top:-999em;position:absolute; margin-top:-999em;');
18452
-
18453
- var form = document.createElement('form');
18454
-
18455
- form.action = file.postAction;
18456
-
18457
- form.name = 'upload-form-' + file.id;
18458
-
18459
- form.setAttribute('method', 'POST');
18460
- form.setAttribute('target', 'upload-iframe-' + file.id);
18461
- form.setAttribute('enctype', 'multipart/form-data');
18462
-
18463
- var value = void 0;
18464
- var input = void 0;
18465
- for (var key in file.data) {
18466
- value = file.data[key];
18467
- if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && typeof value.toString !== 'function') {
18468
- value = JSON.stringify(value);
18469
- }
18470
- if (value !== null && value !== undefined) {
18471
- input = document.createElement('input');
18472
- input.type = 'hidden';
18473
- input.name = key;
18474
- input.value = value;
18475
- form.appendChild(input);
18476
- }
18477
- }
18478
- form.appendChild(file.el);
18479
-
18480
- document.body.appendChild(iframe).appendChild(form);
18481
-
18482
- var getResponseData = function getResponseData() {
18483
- var doc = void 0;
18484
- try {
18485
- if (iframe.contentWindow) {
18486
- doc = iframe.contentWindow.document;
18487
- }
18488
- } catch (err) {}
18489
- if (!doc) {
18490
- try {
18491
- doc = iframe.contentDocument ? iframe.contentDocument : iframe.document;
18492
- } catch (err) {
18493
- doc = iframe.document;
18494
- }
18495
- }
18496
- if (doc && doc.body) {
18497
- return doc.body.innerHTML;
18498
- }
18499
- return null;
18500
- };
18501
-
18502
- return new Promise(function (resolve, reject) {
18503
- setTimeout(function () {
18504
- file = _this5.update(file, { iframe: iframe });
18505
-
18506
- // 不存在
18507
- if (!file) {
18508
- return reject('not_exists');
18509
- }
18510
-
18511
- // 定时检查
18512
- var interval = setInterval(function () {
18513
- file = _this5.get(file);
18514
- if (file && file.fileObject && !file.success && !file.error && file.active) {
18515
- return;
18516
- }
18517
-
18518
- if (interval) {
18519
- clearInterval(interval);
18520
- interval = false;
18521
- }
18522
-
18523
- iframe.onabort({ type: file ? 'abort' : 'not_exists' });
18524
- }, 100);
18525
-
18526
- var complete = void 0;
18527
- var fn = function fn(e) {
18528
- // 已经处理过了
18529
- if (complete) {
18530
- return;
18531
- }
18532
- complete = true;
18533
-
18534
- if (interval) {
18535
- clearInterval(interval);
18536
- interval = false;
18537
- }
18538
-
18539
- // 关闭 esc 事件
18540
- document.body.removeEventListener('keydown', onKeydown);
18541
-
18542
- file = _this5.get(file);
18543
-
18544
- // 不存在直接响应
18545
- if (!file) {
18546
- return reject('not_exists');
18547
- }
18548
-
18549
- // 不是文件对象
18550
- if (!file.fileObject) {
18551
- return reject('file_object');
18552
- }
18553
-
18554
- // 有错误自动响应
18555
- if (file.error) {
18556
- return reject(file.error);
18557
- }
18558
-
18559
- // 未激活
18560
- if (!file.active) {
18561
- return reject('abort');
18562
- }
18563
-
18564
- // 已完成 直接相应
18565
- if (file.success) {
18566
- return resolve(file);
18567
- }
18568
-
18569
- var response = getResponseData();
18570
- var data = {};
18571
- switch (e.type) {
18572
- case 'abort':
18573
- data.error = 'abort';
18574
- break;
18575
- case 'error':
18576
- if (file.error) {
18577
- data.error = file.error;
18578
- } else if (response === null) {
18579
- data.error = 'network';
18580
- } else {
18581
- data.error = 'denied';
18582
- }
18583
- break;
18584
- default:
18585
- if (file.error) {
18586
- data.error = file.error;
18587
- } else if (data === null) {
18588
- data.error = 'network';
18589
- } else {
18590
- data.progress = '100.00';
18591
- }
18592
- }
18593
-
18594
- if (response !== null) {
18595
- if (response && response.substr(0, 1) === '{' && response.substr(response.length - 1, 1) === '}') {
18596
- try {
18597
- response = JSON.parse(response);
18598
- } catch (err) {}
18599
- }
18600
- data.response = response;
18601
- }
18602
-
18603
- // 更新
18604
- file = _this5.update(file, data);
18605
-
18606
- if (file.error) {
18607
- return reject(file.error);
18608
- }
18609
-
18610
- // 响应
18611
- return resolve(file);
18612
- };
18613
-
18614
- // 添加事件
18615
- iframe.onload = fn;
18616
- iframe.onerror = fn;
18617
- iframe.onabort = fn;
18618
-
18619
- // 禁止 esc 键
18620
- document.body.addEventListener('keydown', onKeydown);
18621
-
18622
- // 提交
18623
- form.submit();
18624
- }, 50);
18625
- }).then(function (res) {
18626
- iframe.parentNode && iframe.parentNode.removeChild(iframe);
18627
- return res;
18628
- }).catch(function (res) {
18629
- iframe.parentNode && iframe.parentNode.removeChild(iframe);
18630
- return res;
18631
- });
18632
- },
18633
- watchActive: function watchActive(active) {
18634
- var file = void 0;
18635
- var index = 0;
18636
- while (file = this.files[index]) {
18637
- index++;
18638
- if (!file.fileObject) ; else if (active && !this.destroy) {
18639
- if (this.uploading >= this.thread || this.uploading && !this.features.html5) {
18640
- break;
18641
- }
18642
- if (!file.active && !file.error && !file.success) {
18643
- this.update(file, { active: true });
18644
- }
18645
- } else {
18646
- if (file.active) {
18647
- this.update(file, { active: false });
18648
- }
18649
- }
18650
- }
18651
- if (this.uploading === 0) {
18652
- this.active = false;
18653
- }
18654
- },
18655
- watchDrop: function watchDrop(_el) {
18656
- var el = _el;
18657
- if (!this.features.drop) {
18658
- return;
18659
- }
18660
-
18661
- // 移除挂载
18662
- if (this.dropElement) {
18663
- try {
18664
- document.removeEventListener('dragenter', this.onDragenter, false);
18665
- document.removeEventListener('dragleave', this.onDragleave, false);
18666
- document.removeEventListener('drop', this.onDocumentDrop, false);
18667
- this.dropElement.removeEventListener('dragover', this.onDragover, false);
18668
- this.dropElement.removeEventListener('drop', this.onDrop, false);
18669
- } catch (e) {}
18670
- }
18671
-
18672
- if (!el) {
18673
- el = false;
18674
- } else if (typeof el === 'string') {
18675
- el = document.querySelector(el) || this.$root.$el.querySelector(el);
18676
- } else if (el === true) {
18677
- el = this.$parent.$el;
18678
- }
18679
-
18680
- this.dropElement = el;
18681
-
18682
- if (this.dropElement) {
18683
- document.addEventListener('dragenter', this.onDragenter, false);
18684
- document.addEventListener('dragleave', this.onDragleave, false);
18685
- document.addEventListener('drop', this.onDocumentDrop, false);
18686
- this.dropElement.addEventListener('dragover', this.onDragover, false);
18687
- this.dropElement.addEventListener('drop', this.onDrop, false);
18688
- }
18689
- },
18690
- onDragenter: function onDragenter(e) {
18691
- e.preventDefault();
18692
- if (this.dropActive) {
18693
- return;
18694
- }
18695
- if (!e.dataTransfer) {
18696
- return;
18697
- }
18698
- var dt = e.dataTransfer;
18699
- if (dt.files && dt.files.length) {
18700
- this.dropActive = true;
18701
- } else if (!dt.types) {
18702
- this.dropActive = true;
18703
- } else if (dt.types.indexOf && dt.types.indexOf('Files') !== -1) {
18704
- this.dropActive = true;
18705
- } else if (dt.types.contains && dt.types.contains('Files')) {
18706
- this.dropActive = true;
18707
- }
18708
- },
18709
- onDragleave: function onDragleave(e) {
18710
- e.preventDefault();
18711
- if (!this.dropActive) {
18712
- return;
18713
- }
18714
- if (e.target.nodeName === 'HTML' || e.target === e.explicitOriginalTarget || !e.fromElement && (e.clientX <= 0 || e.clientY <= 0 || e.clientX >= window.innerWidth || e.clientY >= window.innerHeight)) {
18715
- this.dropActive = false;
18716
- }
18717
- },
18718
- onDragover: function onDragover(e) {
18719
- e.preventDefault();
18720
- },
18721
- onDocumentDrop: function onDocumentDrop() {
18722
- this.dropActive = false;
18723
- },
18724
- onDrop: function onDrop(e) {
18725
- e.preventDefault();
18726
- this.addDataTransfer(e.dataTransfer);
18727
- }
18728
- }
18729
- };
18730
-
18731
- /* script */
18732
- var __vue_script__$1 = script$1;
18733
-
18734
- /* template */
18735
- var __vue_render__$1 = function __vue_render__() {
18736
- var _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c('span', { class: _vm.className }, [_vm._t("default"), _vm._v(" "), _c('label', { attrs: { "for": _vm.inputId || _vm.name } }), _vm._v(" "), _c('input-file')], 2);
18737
- };
18738
- var __vue_staticRenderFns__$1 = [];
18739
-
18740
- /* style */
18741
- var __vue_inject_styles__$1 = function (inject) {
18742
- if (!inject) return;
18743
- inject("data-v-595958af_0", { source: "\n.file-uploads{overflow:hidden;position:relative;text-align:center;display:inline-block\n}\n.file-uploads.file-uploads-html4 input,.file-uploads.file-uploads-html5 label{background:#fff;opacity:0;font-size:20em;z-index:1;top:0;left:0;right:0;bottom:0;position:absolute;width:100%;height:100%\n}\n.file-uploads.file-uploads-html4 label,.file-uploads.file-uploads-html5 input{background:rgba(255,255,255,0);overflow:hidden;position:fixed;width:1px;height:1px;z-index:-1;opacity:0\n}", map: undefined, media: undefined });
18744
- };
18745
- /* scoped */
18746
- var __vue_scope_id__$1 = undefined;
18747
- /* module identifier */
18748
- var __vue_module_identifier__$1 = undefined;
18749
- /* functional template */
18750
- var __vue_is_functional_template__$1 = false;
18751
- /* component normalizer */
18752
- function __vue_normalize__$1(template, style, script, scope, functional, moduleIdentifier, createInjector, createInjectorSSR) {
18753
- var component = (typeof script === 'function' ? script.options : script) || {};
18754
-
18755
- if (!component.render) {
18756
- component.render = template.render;
18757
- component.staticRenderFns = template.staticRenderFns;
18758
- component._compiled = true;
18759
-
18760
- if (functional) component.functional = true;
18761
- }
18762
-
18763
- component._scopeId = scope;
18764
-
18765
- {
18766
- var hook = void 0;
18767
- if (style) {
18768
- hook = function hook(context) {
18769
- style.call(this, createInjector(context));
18770
- };
18771
- }
18772
-
18773
- if (hook !== undefined) {
18774
- if (component.functional) {
18775
- // register for functional component in vue file
18776
- var originalRender = component.render;
18777
- component.render = function renderWithStyleInjection(h, context) {
18778
- hook.call(context);
18779
- return originalRender(h, context);
18780
- };
18781
- } else {
18782
- // inject component registration as beforeCreate hook
18783
- var existing = component.beforeCreate;
18784
- component.beforeCreate = existing ? [].concat(existing, hook) : [hook];
18785
- }
18786
- }
18787
- }
18788
-
18789
- return component;
18790
- }
18791
- /* style inject */
18792
- function __vue_create_injector__$1() {
18793
- var head = document.head || document.getElementsByTagName('head')[0];
18794
- var styles = __vue_create_injector__$1.styles || (__vue_create_injector__$1.styles = {});
18795
- var isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());
18796
-
18797
- return function addStyle(id, css) {
18798
- if (document.querySelector('style[data-vue-ssr-id~="' + id + '"]')) return; // SSR styles are present.
18799
-
18800
- var group = isOldIE ? css.media || 'default' : id;
18801
- var style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined });
18802
-
18803
- if (!style.ids.includes(id)) {
18804
- var code = css.source;
18805
- var index = style.ids.length;
18806
-
18807
- style.ids.push(id);
18808
-
18809
- if (css.map) {
18810
- // https://developer.chrome.com/devtools/docs/javascript-debugging
18811
- // this makes source maps inside style tags work properly in Chrome
18812
- code += '\n/*# sourceURL=' + css.map.sources[0] + ' */';
18813
- // http://stackoverflow.com/a/26603875
18814
- code += '\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) + ' */';
18815
- }
18816
-
18817
- if (isOldIE) {
18818
- style.element = style.element || document.querySelector('style[data-group=' + group + ']');
18819
- }
18820
-
18821
- if (!style.element) {
18822
- var el = style.element = document.createElement('style');
18823
- el.type = 'text/css';
18824
-
18825
- if (css.media) el.setAttribute('media', css.media);
18826
- if (isOldIE) {
18827
- el.setAttribute('data-group', group);
18828
- el.setAttribute('data-next-index', '0');
18829
- }
18830
-
18831
- head.appendChild(el);
18832
- }
18833
-
18834
- if (isOldIE) {
18835
- index = parseInt(style.element.getAttribute('data-next-index'));
18836
- style.element.setAttribute('data-next-index', index + 1);
18837
- }
18838
-
18839
- if (style.element.styleSheet) {
18840
- style.parts.push(code);
18841
- style.element.styleSheet.cssText = style.parts.filter(Boolean).join('\n');
18842
- } else {
18843
- var textNode = document.createTextNode(code);
18844
- var nodes = style.element.childNodes;
18845
- if (nodes[index]) style.element.removeChild(nodes[index]);
18846
- if (nodes.length) style.element.insertBefore(textNode, nodes[index]);else style.element.appendChild(textNode);
18847
- }
18848
- }
18849
- };
18850
- }
18851
- /* style inject SSR */
18852
-
18853
- var FileUpload = __vue_normalize__$1({ render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 }, __vue_inject_styles__$1, __vue_script__$1, __vue_scope_id__$1, __vue_is_functional_template__$1, __vue_module_identifier__$1, __vue_create_injector__$1, undefined);
18854
-
18855
- var FileUpload$1 = /*#__PURE__*/Object.freeze({
18856
- default: FileUpload
18857
- });
18858
-
18859
- var require$$0 = ( FileUpload$1 && FileUpload ) || FileUpload$1;
18860
-
18861
- var src = require$$0;
18862
-
18863
- return src;
18864
-
18865
- })));
18866
- //# sourceMappingURL=vue-upload-component.js.map
18867
-
18868
-
18869
- /***/ }),
18870
- /* 51 */
18871
- /***/ (function(module, exports) {
18872
-
18873
- module.exports = "\n\t<div _v-3fe3cec8=\"\">\n\t\t<h4 _v-3fe3cec8=\"\">{{strings.add_desc}}</h4>\n\t\t<div class=\"field columns\" _v-3fe3cec8=\"\">\n\t\t\t<div class=\"column\" v-for=\"file in files\" _v-3fe3cec8=\"\">\n <span class=\"tag\" _v-3fe3cec8=\"\">\n <i _v-3fe3cec8=\"\">{{file.name}}</i>\n <i v-if=\"!file.active &amp;&amp; !file.success &amp;&amp; file.error === ''\" class=\"dashicons dashicons-yes icon has-text-grey-light\" _v-3fe3cec8=\"\"></i>\n <i v-else-if=\"file.active\" class=\"dashicons dashicons-marker icon spin has-text-warning\" _v-3fe3cec8=\"\"></i>\n <i v-else-if=\"!file.active &amp;&amp; file.success\" class=\"dashicons dashicons-yes icon has-text-success\" _v-3fe3cec8=\"\"></i>\n <i v-else=\"\" class=\"dashicons dashicons-no-alt icon has-text-danger\" _v-3fe3cec8=\"\"></i>\n </span>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"column \" _v-3fe3cec8=\"\">\n\t\t\t<file-upload class=\"button is-secondary is-rounded\" :post-action=\" global.root + '/add_watermark'\" :headers=\"{'X-WP-Nonce': global.nonce}\" extensions=\"gif,jpg,jpeg,png,webp\" accept=\"image/png,image/gif,image/jpeg,image/webp\" :size=\"1024 * 1024 * 10\" v-model=\"files\" @input-filter=\"inputFilter\" @input-file=\"inputFile\" :disabled=\"loading\" ref=\"upload\" _v-3fe3cec8=\"\">\n\t\t\t\t<i class=\"dashicons dashicons-plus icon\" _v-3fe3cec8=\"\"></i>\n\t\t\t\t{{strings.upload}}\n\t\t\t</file-upload>\n\t\t\t<br _v-3fe3cec8=\"\"><br _v-3fe3cec8=\"\"><span class=\"tag is-danger\" v-if=\"is_error\" _v-3fe3cec8=\"\">{{error_message}}</span>\n\t\t</div>\n\t\t<hr _v-3fe3cec8=\"\">\n\t\t<div class=\"box\" _v-3fe3cec8=\"\">\n\t\t\t<h3 _v-3fe3cec8=\"\"><span class=\"dashicons dashicons-menu\" _v-3fe3cec8=\"\"></span> {{strings.list_header}} </h3>\n\t\t\t<small _v-3fe3cec8=\"\"><i _v-3fe3cec8=\"\">{{strings.max_allowed}}</i></small>\n\t\t\t\n\t\t\t<div class=\"optimized-images\" _v-3fe3cec8=\"\">\n\t\t\t\t<div v-if=\"!noImages\" _v-3fe3cec8=\"\">\n\t\t\t\t\t<h3 class=\"has-text-centered\" _v-3fe3cec8=\"\">{{strings.last}} {{strings.optimized_images}}</h3>\n\t\t\t\t\t<table class=\"table is-striped is-hoverable is-fullwidth\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t<thead _v-3fe3cec8=\"\">\n\t\t\t\t\t\t<tr _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t<th class=\"optml-image-heading\" _v-3fe3cec8=\"\">{{strings.id}}</th>\n\t\t\t\t\t\t\t<th class=\"optml-image-heading\" _v-3fe3cec8=\"\">{{strings.image}}</th>\n\t\t\t\t\t\t\t<th class=\"optml-image-heading\" _v-3fe3cec8=\"\">{{strings.action}}</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t<tbody _v-3fe3cec8=\"\">\n\t\t\t\t\t\t<tr v-for=\"(item, index) in watermarkData\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t<td _v-3fe3cec8=\"\"><code _v-3fe3cec8=\"\">#{{item.ID}}</code></td>\n\t\t\t\t\t\t\t<td _v-3fe3cec8=\"\"><img :src=\"item.guid\" class=\"optml-image-watermark\" width=\"50\" _v-3fe3cec8=\"\"></td>\n\t\t\t\t\t\t\t<td width=\"50\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t<a @click=\"removeWatermark(item.ID)\" class=\"button is-small is-danger is-rounded\" :class=\"{'is-loading':loading}\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t\t<span class=\"dashicons dashicons-no-alt icon\" _v-3fe3cec8=\"\"></span>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t\t\n\t\t\t\t\t<span class=\"tag is-success\" v-if=\"loading\" _v-3fe3cec8=\"\">\n\t\t\t\t\t{{strings.loading_remove_watermark}}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<table class=\"table is-striped is-hoverable is-fullwidth\" v-if=\"noImages\" _v-3fe3cec8=\"\">\n\t\t\t\t<thead _v-3fe3cec8=\"\">\n\t\t\t\t<tr _v-3fe3cec8=\"\">\n\t\t\t\t\t<th class=\"optml-image-heading has-text-centered\" v-html=\"strings.no_images_found\" _v-3fe3cec8=\"\"></th>\n\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t</table>\n\t\t\t<hr _v-3fe3cec8=\"\">\n\t\t\t<h3 _v-3fe3cec8=\"\"><span class=\"dashicons dashicons-grid-view\" _v-3fe3cec8=\"\"></span> {{strings.settings_header}} </h3>\n\t\t\t<br _v-3fe3cec8=\"\">\n\t\t\t<div class=\"field is-fullwidth columns\" _v-3fe3cec8=\"\">\n\t\t\t\t<label class=\"label is-half column has-text-grey-dark no-padding-right \" _v-3fe3cec8=\"\">\n\t\t\t\t\t{{strings.wm_title}}\n\t\t\t\t\t<p class=\"is-italic has-text-weight-normal\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t{{strings.wm_desc}}\n\t\t\t\t\t</p>\n\t\t\t\t</label>\n\t\t\t\t\n\t\t\t\t<div class=\"column is-paddingless\" _v-3fe3cec8=\"\">\n\t\t\t\t\t<div class=\"columns\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t<div class=\"field column is-narrow\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t<div class=\"select\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t<select title=\"Watermark Selection\" v-model=\"selectedWatermark\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t\t<option value=\"-1\" _v-3fe3cec8=\"\">No watermark</option>\n\t\t\t\t\t\t\t\t\t<option v-for=\"(item, index) in watermarkData\" :value=\"item.ID\" _v-3fe3cec8=\"\">#({{item.ID}})\n\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t<div class=\"field is-fullwidth columns\" _v-3fe3cec8=\"\">\n\t\t\t\t<label class=\"label is-half column has-text-grey-dark no-padding-right \" _v-3fe3cec8=\"\">\n\t\t\t\t\t{{strings.opacity_title}}\n\t\t\t\t\t<p class=\"is-italic has-text-weight-normal\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t{{strings.opacity_desc}}\n\t\t\t\t\t</p>\n\t\t\t\t</label>\n\t\t\t\t\n\t\t\t\t<div class=\"column is-paddingless\" _v-3fe3cec8=\"\">\n\t\t\t\t\t<div class=\"columns\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t<div class=\"field column is-narrow has-addons\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t<p class=\"control\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t<a class=\"button is-small is-static\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t\t{{strings.opacity_field}}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"control \" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t<input v-model=\"watermarkOpacity\" class=\"input is-small\" type=\"number\" min=\"0\" max=\"100\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t<div class=\"field columns\" _v-3fe3cec8=\"\">\n\t\t\t\t<label class=\"label column has-text-grey-dark\" _v-3fe3cec8=\"\">\n\t\t\t\t\t{{strings.position_title}}\n\t\t\t\t\t<p class=\"is-italic has-text-weight-normal\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t{{strings.position_desc}}\n\t\t\t\t\t</p>\n\t\t\t\t</label>\n\t\t\t\t<div class=\"column buttons \" _v-3fe3cec8=\"\">\n\t\t\t\t\t<div class=\"field columns is-gapless is-marginless \" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t<div class=\"is-fullwidth optml-layout-grid\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t<a @click=\"changePosition('nowe')\" :class=\"{ 'is-info':isActivePosition ('nowe'), ' is-selected':watermarkSettings.position === 'nowe' }\" class=\"grid-button \" :title=\"strings.pos_nowe_title\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a @click=\"changePosition('no')\" :class=\"{ 'is-info':isActivePosition ('no'), ' is-selected':watermarkSettings.position === 'no' }\" class=\"grid-button \" :title=\"strings.pos_no_title\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a @click=\"changePosition('noea')\" :class=\"{ 'is-info':isActivePosition ('noea'), ' is-selected':watermarkSettings.position === 'noea' }\" class=\"grid-button\" :title=\"strings.pos_noea_title\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a @click=\"changePosition('we')\" :class=\"{ 'is-info':isActivePosition ('we'), ' is-selected':watermarkSettings.position === 'we' }\" class=\"grid-button\" :title=\"strings.pos_we_title\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a @click=\"changePosition('ce')\" :class=\"{ 'is-info':isActivePosition ('ce'), ' is-selected':watermarkSettings.position === 'ce' }\" class=\"grid-button\" :title=\"strings.pos_ce_title\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a @click=\"changePosition('ea')\" :class=\"{ 'is-info':isActivePosition ('ea'), ' is-selected':watermarkSettings.position === 'ea' }\" class=\"grid-button\" :title=\"strings.pos_ea_title\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a @click=\"changePosition('sowe')\" :class=\"{ 'is-info':isActivePosition ('sowe'), ' is-selected':watermarkSettings.position === 'sowe' }\" class=\"grid-button\" :title=\"strings.pos_sowe_title\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a @click=\"changePosition('so')\" :class=\"{ 'is-info':isActivePosition ('so'), ' is-selected':watermarkSettings.position === 'so' }\" class=\"grid-button\" :title=\"strings.pos_so_title\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a @click=\"changePosition('soea')\" :class=\"{ 'is-info':isActivePosition ('soea'), ' is-selected':watermarkSettings.position === 'soea' }\" class=\"grid-button\" :title=\"strings.pos_soea_title\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<br _v-3fe3cec8=\"\">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t<div class=\"field is-fullwidth columns \" _v-3fe3cec8=\"\">\n\t\t\t\t<label class=\"label is-half column has-text-grey-dark no-padding-right \" _v-3fe3cec8=\"\">\n\t\t\t\t\t{{strings.offset_title}}\n\t\t\t\t\t<p class=\"is-italic has-text-weight-normal\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t{{strings.offset_desc}}\n\t\t\t\t\t</p>\n\t\t\t\t</label>\n\t\t\t\t\n\t\t\t\t<div class=\"column is-paddingless\" _v-3fe3cec8=\"\">\n\t\t\t\t\t<div class=\"columns\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t<div class=\"field column is-narrow has-addons\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t<p class=\"control\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t<a class=\"button is-small is-static\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t\t{{strings.offset_x_field}}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"control \" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t<input v-model=\"watermarkX\" class=\"input is-tiny is-small\" type=\"number\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"field column is-narrow has-addons\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t<p class=\"control\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t<a class=\"button is-small is-static\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t\t{{strings.offset_y_field}}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"control \" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t<input v-model=\"watermarkY\" class=\"input is-small is-tiny\" type=\"number\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t<div class=\"field is-fullwidth columns\" _v-3fe3cec8=\"\">\n\t\t\t\t<label class=\"label is-half column has-text-grey-dark no-padding-right \" _v-3fe3cec8=\"\">\n\t\t\t\t\t{{strings.scale_title}}\n\t\t\t\t\t<p class=\"is-italic has-text-weight-normal\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t{{strings.scale_desc}}\n\t\t\t\t\t</p>\n\t\t\t\t</label>\n\t\t\t\t\n\t\t\t\t<div class=\"column is-paddingless\" _v-3fe3cec8=\"\">\n\t\t\t\t\t<div class=\"columns\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t<div class=\"field column is-narrow has-addons\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t<p class=\"control\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t<a class=\"button is-small is-static\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t\t{{strings.scale_field}}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class=\"control \" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t\t<input v-model=\"watermarkScale\" class=\"input is-small\" type=\"number\" min=\"0\" max=\"100\" _v-3fe3cec8=\"\">\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\n\t\t\t<p class=\"control column has-text-centered-desktop has-text-left-touch \" _v-3fe3cec8=\"\">\n\t\t\t\t<a @click=\"saveChanges()\" class=\"button is-small is-success \" :class=\"{'is-loading':loading}\" _v-3fe3cec8=\"\">\n\t\t\t\t\t<span class=\"dashicons dashicons-yes icon\" _v-3fe3cec8=\"\"></span>\n\t\t\t\t\t<span _v-3fe3cec8=\"\">\t{{strings.save_changes}}</span>\n\t\t\t\t</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n";
18874
-
18875
- /***/ }),
18876
- /* 52 */
18877
- /***/ (function(module, exports) {
18878
-
18879
- module.exports = "\r\n\t<div class=\"columns is-desktop\">\r\n\t\t\r\n\t\t<div class=\"column \">\r\n\t\t\t<div class=\"card\">\r\n\t\t\t\t<app-header></app-header>\r\n\t\t\t\t<div class=\"card-content\">\r\n\t\t\t\t\t<div class=\"content\">\r\n\t\t\t\t\t\t<connect-layout v-if=\"! this.$store.state.connected\"></connect-layout>\r\n\t\t\t\t\t\t<transition name=\"fade\" mode=\"out-in\">\r\n\t\t\t\t\t\t\t<div v-if=\"this.$store.state.connected\">\r\n\t\t\t\t\t\t\t\t<div class=\"tabs is-left is-boxed is-medium\">\r\n\t\t\t\t\t\t\t\t\t<ul class=\"is-marginless\">\r\n\t\t\t\t\t\t\t\t\t\t<li :class=\"tab === 'dashboard' ? 'is-active' : ''\">\r\n\t\t\t\t\t\t\t\t\t\t\t<a @click=\"changeTab('dashboard')\" class=\"is-size-6-mobile\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"icon is-size-6-mobile is-size-6-tablet dashicons dashicons-admin-home\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"is-size-6-mobile is-size-6-touch \">{{strings.dashboard_menu_item}}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t<li :class=\"tab === 'settings' ? 'is-active' : ''\">\r\n\t\t\t\t\t\t\t\t\t\t\t<a @click=\"changeTab('settings')\" class=\"is-size-6-mobile \">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"icon is-size-6-mobile is-size-6-tablet dashicons dashicons-admin-settings\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"is-size-6-mobile is-size-6-touch\">{{strings.settings_menu_item}}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t<li :class=\"tab === 'watermarks' ? 'is-active' : ''\">\r\n\t\t\t\t\t\t\t\t\t\t\t<a @click=\"changeTab('watermarks')\" class=\"is-size-6-mobile\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"icon is-size-6-mobile is-size-6-tablet dashicons dashicons-tag\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"is-size-6-mobile is-size-6-touch\">{{strings.watermarks_menu_item}}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<div class=\"is-tab\" v-if=\"tab === 'dashboard' \" :class=\"remove_images ? 'no-images' : '' \">\r\n\t\t\t\t\t\t\t\t\t<div class=\"notification is-success\" v-if=\"strings.notice_just_activated.length > 0\"\r\n\t\t\t\t\t\t\t\t\t v-html=\"strings.notice_just_activated\"></div>\r\n\t\t\t\t\t\t\t\t\t<api-key-form></api-key-form>\r\n\t\t\t\t\t\t\t\t\t<cdn-details v-if=\"this.$store.state.userData\"></cdn-details>\r\n\t\t\t\t\t\t\t\t\t<hr/>\r\n\t\t\t\t\t\t\t\t\t<last-images :status=\"fetchStatus\" v-if=\"! remove_images\"></last-images>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"is-tab\" v-if=\" tab === 'settings'\">\r\n\t\t\t\t\t\t\t\t\t<options></options>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"is-tab\" v-if=\" tab === 'watermarks'\">\r\n\t\t\t\t\t\t\t\t\t<watermarks></watermarks>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</transition>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t\r\n\t\t\t\t<div class=\"level-right\">\r\n\t\t\t\t\t<p class=\"level-item\"><a href=\"https://optimole.com\" target=\"_blank\">Optimole\r\n\t\t\t\t\t\tv{{strings.version}}</a></p>\r\n\t\t\t\t\t<p class=\"level-item\"><a href=\"https://optimole.com/terms/\"\r\n\t\t\t\t\t target=\"_blank\">{{strings.terms_menu}}</a></p>\r\n\t\t\t\t\t<p class=\"level-item\"><a href=\"https://optimole.com/privacy-policy/\" target=\"_blank\">{{strings.privacy_menu}}</a>\r\n\t\t\t\t\t</p>\r\n\t\t\t\t\t<p class=\"level-item\"><a :href=\"'https://speedtest.optimole.com/?url=' + home \" target=\"_blank\">{{strings.testdrive_menu}}</a>\r\n\t\t\t\t\t</p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div v-if=\"this.$store.state.connected && this.$store.state.userData.plan === 'free' \" class=\"column is-narrow is-hidden-desktop-only is-hidden-tablet-only is-hidden-mobile\">\r\n\t\t\t<div class=\"card optml-upgrade\">\r\n\t\t\t\t<div class=\"card-header\">\r\n\t\t\t\t\t<h3 class=\"is-size-5 card-header-title\"><span class=\"dashicons dashicons-chart-line\"></span> {{strings.upgrade.title}}</h3>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"card-content\">\r\n\t\t\t\t\t<ul>\r\n\t\t\t\t\t\t<li><span class=\"dashicons dashicons-yes\"></span>{{strings.upgrade.reason_1}}</li>\r\n\t\t\t\t\t\t<li><span class=\"dashicons dashicons-yes\"></span>{{strings.upgrade.reason_2}}</li>\r\n\t\t\t\t\t\t<li><span class=\"dashicons dashicons-yes\"></span>{{strings.upgrade.reason_3}}</li>\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"card-footer \">\r\n\t\t\t\t\t<div class=\"card-footer-item\">\r\n\t\t\t\t\t<a href=\"https://optimole.com#pricing\" target=\"_blank\" class=\"button is-centered is-small is-success\"><span class=\"dashicons dashicons-external\"></span>{{strings.upgrade.cta}}</a>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n";
18880
-
18881
- /***/ }),
18882
- /* 53 */
18883
- /***/ (function(module, exports, __webpack_require__) {
18884
-
18885
- "use strict";
18886
-
18887
-
18888
- Object.defineProperty(exports, "__esModule", {
18889
- value: true
18890
- });
18891
-
18892
- var _vue = __webpack_require__(3);
18893
-
18894
- var _vue2 = _interopRequireDefault(_vue);
18895
-
18896
- var _vuex = __webpack_require__(54);
18897
-
18898
- var _vuex2 = _interopRequireDefault(_vuex);
18899
-
18900
- var _vueResource = __webpack_require__(6);
18901
-
18902
- var _vueResource2 = _interopRequireDefault(_vueResource);
18903
-
18904
- var _mutations = __webpack_require__(56);
18905
-
18906
- var _mutations2 = _interopRequireDefault(_mutations);
18907
-
18908
- var _actions = __webpack_require__(57);
18909
-
18910
- var _actions2 = _interopRequireDefault(_actions);
18911
-
18912
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18913
-
18914
- _vue2.default.use(_vuex2.default); /* global optimoleDashboardApp */
18915
- /*jshint esversion: 6 */
18916
-
18917
- _vue2.default.use(_vueResource2.default);
18918
-
18919
- var store = new _vuex2.default.Store({
18920
- strict: true,
18921
- state: {
18922
- isConnecting: false,
18923
- loading: false,
18924
- site_settings: optimoleDashboardApp.site_settings,
18925
- connected: optimoleDashboardApp.connection_status === 'yes',
18926
- apiKey: optimoleDashboardApp.api_key ? optimoleDashboardApp.api_key : '',
18927
- apiKeyValidity: true,
18928
- sample_rate: {},
18929
- apiError: false,
18930
- userData: optimoleDashboardApp.user_data ? optimoleDashboardApp.user_data : null,
18931
- optimizedImages: [],
18932
- watermarks: []
18933
- },
18934
- mutations: _mutations2.default,
18935
- actions: _actions2.default
18936
- });
18937
-
18938
- exports.default = store;
18939
-
18940
- /***/ }),
18941
- /* 54 */
18942
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
18943
-
18944
- "use strict";
18945
- Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
18946
- /* WEBPACK VAR INJECTION */(function(process) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Store", function() { return Store; });
18947
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "install", function() { return install; });
18948
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapState", function() { return mapState; });
18949
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapMutations", function() { return mapMutations; });
18950
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapGetters", function() { return mapGetters; });
18951
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapActions", function() { return mapActions; });
18952
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createNamespacedHelpers", function() { return createNamespacedHelpers; });
18953
- /**
18954
- * vuex v2.5.0
18955
- * (c) 2017 Evan You
18956
- * @license MIT
18957
- */
18958
- var applyMixin = function (Vue) {
18959
- var version = Number(Vue.version.split('.')[0]);
18960
-
18961
- if (version >= 2) {
18962
- Vue.mixin({ beforeCreate: vuexInit });
18963
- } else {
18964
- // override init and inject vuex init procedure
18965
- // for 1.x backwards compatibility.
18966
- var _init = Vue.prototype._init;
18967
- Vue.prototype._init = function (options) {
18968
- if ( options === void 0 ) options = {};
18969
-
18970
- options.init = options.init
18971
- ? [vuexInit].concat(options.init)
18972
- : vuexInit;
18973
- _init.call(this, options);
18974
- };
18975
- }
18976
-
18977
- /**
18978
- * Vuex init hook, injected into each instances init hooks list.
18979
- */
18980
-
18981
- function vuexInit () {
18982
- var options = this.$options;
18983
- // store injection
18984
- if (options.store) {
18985
- this.$store = typeof options.store === 'function'
18986
- ? options.store()
18987
- : options.store;
18988
- } else if (options.parent && options.parent.$store) {
18989
- this.$store = options.parent.$store;
18990
- }
18991
- }
18992
- };
18993
-
18994
- var devtoolHook =
18995
- typeof window !== 'undefined' &&
18996
- window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
18997
-
18998
- function devtoolPlugin (store) {
18999
- if (!devtoolHook) { return }
19000
-
19001
- store._devtoolHook = devtoolHook;
19002
-
19003
- devtoolHook.emit('vuex:init', store);
19004
-
19005
- devtoolHook.on('vuex:travel-to-state', function (targetState) {
19006
- store.replaceState(targetState);
19007
- });
19008
-
19009
- store.subscribe(function (mutation, state) {
19010
- devtoolHook.emit('vuex:mutation', mutation, state);
19011
- });
19012
- }
19013
-
19014
- /**
19015
- * Get the first item that pass the test
19016
- * by second argument function
19017
- *
19018
- * @param {Array} list
19019
- * @param {Function} f
19020
- * @return {*}
19021
- */
19022
- /**
19023
- * Deep copy the given object considering circular structure.
19024
- * This function caches all nested objects and its copies.
19025
- * If it detects circular structure, use cached copy to avoid infinite loop.
19026
- *
19027
- * @param {*} obj
19028
- * @param {Array<Object>} cache
19029
- * @return {*}
19030
- */
19031
-
19032
-
19033
- /**
19034
- * forEach for object
19035
- */
19036
- function forEachValue (obj, fn) {
19037
- Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });
19038
- }
19039
-
19040
- function isObject (obj) {
19041
- return obj !== null && typeof obj === 'object'
19042
- }
19043
-
19044
- function isPromise (val) {
19045
- return val && typeof val.then === 'function'
19046
- }
19047
-
19048
- function assert (condition, msg) {
19049
- if (!condition) { throw new Error(("[vuex] " + msg)) }
19050
- }
19051
-
19052
- var Module = function Module (rawModule, runtime) {
19053
- this.runtime = runtime;
19054
- this._children = Object.create(null);
19055
- this._rawModule = rawModule;
19056
- var rawState = rawModule.state;
19057
- this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};
19058
- };
19059
-
19060
- var prototypeAccessors$1 = { namespaced: { configurable: true } };
19061
-
19062
- prototypeAccessors$1.namespaced.get = function () {
19063
- return !!this._rawModule.namespaced
19064
- };
19065
-
19066
- Module.prototype.addChild = function addChild (key, module) {
19067
- this._children[key] = module;
19068
- };
19069
-
19070
- Module.prototype.removeChild = function removeChild (key) {
19071
- delete this._children[key];
19072
- };
19073
-
19074
- Module.prototype.getChild = function getChild (key) {
19075
- return this._children[key]
19076
- };
19077
-
19078
- Module.prototype.update = function update (rawModule) {
19079
- this._rawModule.namespaced = rawModule.namespaced;
19080
- if (rawModule.actions) {
19081
- this._rawModule.actions = rawModule.actions;
19082
- }
19083
- if (rawModule.mutations) {
19084
- this._rawModule.mutations = rawModule.mutations;
19085
- }
19086
- if (rawModule.getters) {
19087
- this._rawModule.getters = rawModule.getters;
19088
- }
19089
- };
19090
-
19091
- Module.prototype.forEachChild = function forEachChild (fn) {
19092
- forEachValue(this._children, fn);
19093
- };
19094
-
19095
- Module.prototype.forEachGetter = function forEachGetter (fn) {
19096
- if (this._rawModule.getters) {
19097
- forEachValue(this._rawModule.getters, fn);
19098
- }
19099
- };
19100
-
19101
- Module.prototype.forEachAction = function forEachAction (fn) {
19102
- if (this._rawModule.actions) {
19103
- forEachValue(this._rawModule.actions, fn);
19104
- }
19105
- };
19106
-
19107
- Module.prototype.forEachMutation = function forEachMutation (fn) {
19108
- if (this._rawModule.mutations) {
19109
- forEachValue(this._rawModule.mutations, fn);
19110
- }
19111
- };
19112
-
19113
- Object.defineProperties( Module.prototype, prototypeAccessors$1 );
19114
-
19115
- var ModuleCollection = function ModuleCollection (rawRootModule) {
19116
- // register root module (Vuex.Store options)
19117
- this.register([], rawRootModule, false);
19118
- };
19119
-
19120
- ModuleCollection.prototype.get = function get (path) {
19121
- return path.reduce(function (module, key) {
19122
- return module.getChild(key)
19123
- }, this.root)
19124
- };
19125
-
19126
- ModuleCollection.prototype.getNamespace = function getNamespace (path) {
19127
- var module = this.root;
19128
- return path.reduce(function (namespace, key) {
19129
- module = module.getChild(key);
19130
- return namespace + (module.namespaced ? key + '/' : '')
19131
- }, '')
19132
- };
19133
-
19134
- ModuleCollection.prototype.update = function update$1 (rawRootModule) {
19135
- update([], this.root, rawRootModule);
19136
- };
19137
-
19138
- ModuleCollection.prototype.register = function register (path, rawModule, runtime) {
19139
- var this$1 = this;
19140
- if ( runtime === void 0 ) runtime = true;
19141
-
19142
- if (process.env.NODE_ENV !== 'production') {
19143
- assertRawModule(path, rawModule);
19144
- }
19145
-
19146
- var newModule = new Module(rawModule, runtime);
19147
- if (path.length === 0) {
19148
- this.root = newModule;
19149
- } else {
19150
- var parent = this.get(path.slice(0, -1));
19151
- parent.addChild(path[path.length - 1], newModule);
19152
- }
19153
-
19154
- // register nested modules
19155
- if (rawModule.modules) {
19156
- forEachValue(rawModule.modules, function (rawChildModule, key) {
19157
- this$1.register(path.concat(key), rawChildModule, runtime);
19158
- });
19159
- }
19160
- };
19161
-
19162
- ModuleCollection.prototype.unregister = function unregister (path) {
19163
- var parent = this.get(path.slice(0, -1));
19164
- var key = path[path.length - 1];
19165
- if (!parent.getChild(key).runtime) { return }
19166
-
19167
- parent.removeChild(key);
19168
- };
19169
-
19170
- function update (path, targetModule, newModule) {
19171
- if (process.env.NODE_ENV !== 'production') {
19172
- assertRawModule(path, newModule);
19173
- }
19174
-
19175
- // update target module
19176
- targetModule.update(newModule);
19177
-
19178
- // update nested modules
19179
- if (newModule.modules) {
19180
- for (var key in newModule.modules) {
19181
- if (!targetModule.getChild(key)) {
19182
- if (process.env.NODE_ENV !== 'production') {
19183
- console.warn(
19184
- "[vuex] trying to add a new module '" + key + "' on hot reloading, " +
19185
- 'manual reload is needed'
19186
- );
19187
- }
19188
- return
19189
- }
19190
- update(
19191
- path.concat(key),
19192
- targetModule.getChild(key),
19193
- newModule.modules[key]
19194
- );
19195
- }
19196
- }
19197
- }
19198
-
19199
- var functionAssert = {
19200
- assert: function (value) { return typeof value === 'function'; },
19201
- expected: 'function'
19202
- };
19203
-
19204
- var objectAssert = {
19205
- assert: function (value) { return typeof value === 'function' ||
19206
- (typeof value === 'object' && typeof value.handler === 'function'); },
19207
- expected: 'function or object with "handler" function'
19208
- };
19209
-
19210
- var assertTypes = {
19211
- getters: functionAssert,
19212
- mutations: functionAssert,
19213
- actions: objectAssert
19214
- };
19215
-
19216
- function assertRawModule (path, rawModule) {
19217
- Object.keys(assertTypes).forEach(function (key) {
19218
- if (!rawModule[key]) { return }
19219
-
19220
- var assertOptions = assertTypes[key];
19221
-
19222
- forEachValue(rawModule[key], function (value, type) {
19223
- assert(
19224
- assertOptions.assert(value),
19225
- makeAssertionMessage(path, key, type, value, assertOptions.expected)
19226
- );
19227
- });
19228
- });
19229
- }
19230
-
19231
- function makeAssertionMessage (path, key, type, value, expected) {
19232
- var buf = key + " should be " + expected + " but \"" + key + "." + type + "\"";
19233
- if (path.length > 0) {
19234
- buf += " in module \"" + (path.join('.')) + "\"";
19235
- }
19236
- buf += " is " + (JSON.stringify(value)) + ".";
19237
- return buf
19238
- }
19239
-
19240
- var Vue; // bind on install
19241
-
19242
- var Store = function Store (options) {
19243
- var this$1 = this;
19244
- if ( options === void 0 ) options = {};
19245
-
19246
- // Auto install if it is not done yet and `window` has `Vue`.
19247
- // To allow users to avoid auto-installation in some cases,
19248
- // this code should be placed here. See #731
19249
- if (!Vue && typeof window !== 'undefined' && window.Vue) {
19250
- install(window.Vue);
19251
- }
19252
-
19253
- if (process.env.NODE_ENV !== 'production') {
19254
- assert(Vue, "must call Vue.use(Vuex) before creating a store instance.");
19255
- assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser.");
19256
- assert(this instanceof Store, "Store must be called with the new operator.");
19257
- }
19258
-
19259
- var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];
19260
- var strict = options.strict; if ( strict === void 0 ) strict = false;
19261
-
19262
- var state = options.state; if ( state === void 0 ) state = {};
19263
- if (typeof state === 'function') {
19264
- state = state() || {};
19265
- }
19266
-
19267
- // store internal state
19268
- this._committing = false;
19269
- this._actions = Object.create(null);
19270
- this._actionSubscribers = [];
19271
- this._mutations = Object.create(null);
19272
- this._wrappedGetters = Object.create(null);
19273
- this._modules = new ModuleCollection(options);
19274
- this._modulesNamespaceMap = Object.create(null);
19275
- this._subscribers = [];
19276
- this._watcherVM = new Vue();
19277
-
19278
- // bind commit and dispatch to self
19279
- var store = this;
19280
- var ref = this;
19281
- var dispatch = ref.dispatch;
19282
- var commit = ref.commit;
19283
- this.dispatch = function boundDispatch (type, payload) {
19284
- return dispatch.call(store, type, payload)
19285
- };
19286
- this.commit = function boundCommit (type, payload, options) {
19287
- return commit.call(store, type, payload, options)
19288
- };
19289
-
19290
- // strict mode
19291
- this.strict = strict;
19292
-
19293
- // init root module.
19294
- // this also recursively registers all sub-modules
19295
- // and collects all module getters inside this._wrappedGetters
19296
- installModule(this, state, [], this._modules.root);
19297
-
19298
- // initialize the store vm, which is responsible for the reactivity
19299
- // (also registers _wrappedGetters as computed properties)
19300
- resetStoreVM(this, state);
19301
-
19302
- // apply plugins
19303
- plugins.forEach(function (plugin) { return plugin(this$1); });
19304
-
19305
- if (Vue.config.devtools) {
19306
- devtoolPlugin(this);
19307
- }
19308
- };
19309
-
19310
- var prototypeAccessors = { state: { configurable: true } };
19311
-
19312
- prototypeAccessors.state.get = function () {
19313
- return this._vm._data.$$state
19314
- };
19315
-
19316
- prototypeAccessors.state.set = function (v) {
19317
- if (process.env.NODE_ENV !== 'production') {
19318
- assert(false, "Use store.replaceState() to explicit replace store state.");
19319
- }
19320
- };
19321
-
19322
- Store.prototype.commit = function commit (_type, _payload, _options) {
19323
- var this$1 = this;
19324
-
19325
- // check object-style commit
19326
- var ref = unifyObjectStyle(_type, _payload, _options);
19327
- var type = ref.type;
19328
- var payload = ref.payload;
19329
- var options = ref.options;
19330
-
19331
- var mutation = { type: type, payload: payload };
19332
- var entry = this._mutations[type];
19333
- if (!entry) {
19334
- if (process.env.NODE_ENV !== 'production') {
19335
- console.error(("[vuex] unknown mutation type: " + type));
19336
- }
19337
- return
19338
- }
19339
- this._withCommit(function () {
19340
- entry.forEach(function commitIterator (handler) {
19341
- handler(payload);
19342
- });
19343
- });
19344
- this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });
19345
-
19346
- if (
19347
- process.env.NODE_ENV !== 'production' &&
19348
- options && options.silent
19349
- ) {
19350
- console.warn(
19351
- "[vuex] mutation type: " + type + ". Silent option has been removed. " +
19352
- 'Use the filter functionality in the vue-devtools'
19353
- );
19354
- }
19355
- };
19356
-
19357
- Store.prototype.dispatch = function dispatch (_type, _payload) {
19358
- var this$1 = this;
19359
-
19360
- // check object-style dispatch
19361
- var ref = unifyObjectStyle(_type, _payload);
19362
- var type = ref.type;
19363
- var payload = ref.payload;
19364
-
19365
- var action = { type: type, payload: payload };
19366
- var entry = this._actions[type];
19367
- if (!entry) {
19368
- if (process.env.NODE_ENV !== 'production') {
19369
- console.error(("[vuex] unknown action type: " + type));
19370
- }
19371
- return
19372
- }
19373
-
19374
- this._actionSubscribers.forEach(function (sub) { return sub(action, this$1.state); });
19375
-
19376
- return entry.length > 1
19377
- ? Promise.all(entry.map(function (handler) { return handler(payload); }))
19378
- : entry[0](payload)
19379
- };
19380
-
19381
- Store.prototype.subscribe = function subscribe (fn) {
19382
- return genericSubscribe(fn, this._subscribers)
19383
- };
19384
-
19385
- Store.prototype.subscribeAction = function subscribeAction (fn) {
19386
- return genericSubscribe(fn, this._actionSubscribers)
19387
- };
19388
-
19389
- Store.prototype.watch = function watch (getter, cb, options) {
19390
- var this$1 = this;
19391
-
19392
- if (process.env.NODE_ENV !== 'production') {
19393
- assert(typeof getter === 'function', "store.watch only accepts a function.");
19394
- }
19395
- return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)
19396
- };
19397
-
19398
- Store.prototype.replaceState = function replaceState (state) {
19399
- var this$1 = this;
19400
-
19401
- this._withCommit(function () {
19402
- this$1._vm._data.$$state = state;
19403
- });
19404
- };
19405
-
19406
- Store.prototype.registerModule = function registerModule (path, rawModule, options) {
19407
- if ( options === void 0 ) options = {};
19408
-
19409
- if (typeof path === 'string') { path = [path]; }
19410
-
19411
- if (process.env.NODE_ENV !== 'production') {
19412
- assert(Array.isArray(path), "module path must be a string or an Array.");
19413
- assert(path.length > 0, 'cannot register the root module by using registerModule.');
19414
- }
19415
-
19416
- this._modules.register(path, rawModule);
19417
- installModule(this, this.state, path, this._modules.get(path), options.preserveState);
19418
- // reset store to update getters...
19419
- resetStoreVM(this, this.state);
19420
- };
19421
-
19422
- Store.prototype.unregisterModule = function unregisterModule (path) {
19423
- var this$1 = this;
19424
-
19425
- if (typeof path === 'string') { path = [path]; }
19426
-
19427
- if (process.env.NODE_ENV !== 'production') {
19428
- assert(Array.isArray(path), "module path must be a string or an Array.");
19429
- }
19430
-
19431
- this._modules.unregister(path);
19432
- this._withCommit(function () {
19433
- var parentState = getNestedState(this$1.state, path.slice(0, -1));
19434
- Vue.delete(parentState, path[path.length - 1]);
19435
- });
19436
- resetStore(this);
19437
- };
19438
-
19439
- Store.prototype.hotUpdate = function hotUpdate (newOptions) {
19440
- this._modules.update(newOptions);
19441
- resetStore(this, true);
19442
- };
19443
-
19444
- Store.prototype._withCommit = function _withCommit (fn) {
19445
- var committing = this._committing;
19446
- this._committing = true;
19447
- fn();
19448
- this._committing = committing;
19449
- };
19450
-
19451
- Object.defineProperties( Store.prototype, prototypeAccessors );
19452
-
19453
- function genericSubscribe (fn, subs) {
19454
- if (subs.indexOf(fn) < 0) {
19455
- subs.push(fn);
19456
- }
19457
- return function () {
19458
- var i = subs.indexOf(fn);
19459
- if (i > -1) {
19460
- subs.splice(i, 1);
19461
- }
19462
- }
19463
- }
19464
-
19465
- function resetStore (store, hot) {
19466
- store._actions = Object.create(null);
19467
- store._mutations = Object.create(null);
19468
- store._wrappedGetters = Object.create(null);
19469
- store._modulesNamespaceMap = Object.create(null);
19470
- var state = store.state;
19471
- // init all modules
19472
- installModule(store, state, [], store._modules.root, true);
19473
- // reset vm
19474
- resetStoreVM(store, state, hot);
19475
- }
19476
-
19477
- function resetStoreVM (store, state, hot) {
19478
- var oldVm = store._vm;
19479
-
19480
- // bind store public getters
19481
- store.getters = {};
19482
- var wrappedGetters = store._wrappedGetters;
19483
- var computed = {};
19484
- forEachValue(wrappedGetters, function (fn, key) {
19485
- // use computed to leverage its lazy-caching mechanism
19486
- computed[key] = function () { return fn(store); };
19487
- Object.defineProperty(store.getters, key, {
19488
- get: function () { return store._vm[key]; },
19489
- enumerable: true // for local getters
19490
- });
19491
- });
19492
-
19493
- // use a Vue instance to store the state tree
19494
- // suppress warnings just in case the user has added
19495
- // some funky global mixins
19496
- var silent = Vue.config.silent;
19497
- Vue.config.silent = true;
19498
- store._vm = new Vue({
19499
- data: {
19500
- $$state: state
19501
- },
19502
- computed: computed
19503
- });
19504
- Vue.config.silent = silent;
19505
-
19506
- // enable strict mode for new vm
19507
- if (store.strict) {
19508
- enableStrictMode(store);
19509
- }
19510
-
19511
- if (oldVm) {
19512
- if (hot) {
19513
- // dispatch changes in all subscribed watchers
19514
- // to force getter re-evaluation for hot reloading.
19515
- store._withCommit(function () {
19516
- oldVm._data.$$state = null;
19517
- });
19518
- }
19519
- Vue.nextTick(function () { return oldVm.$destroy(); });
19520
- }
19521
- }
19522
-
19523
- function installModule (store, rootState, path, module, hot) {
19524
- var isRoot = !path.length;
19525
- var namespace = store._modules.getNamespace(path);
19526
-
19527
- // register in namespace map
19528
- if (module.namespaced) {
19529
- store._modulesNamespaceMap[namespace] = module;
19530
- }
19531
-
19532
- // set state
19533
- if (!isRoot && !hot) {
19534
- var parentState = getNestedState(rootState, path.slice(0, -1));
19535
- var moduleName = path[path.length - 1];
19536
- store._withCommit(function () {
19537
- Vue.set(parentState, moduleName, module.state);
19538
- });
19539
- }
19540
-
19541
- var local = module.context = makeLocalContext(store, namespace, path);
19542
-
19543
- module.forEachMutation(function (mutation, key) {
19544
- var namespacedType = namespace + key;
19545
- registerMutation(store, namespacedType, mutation, local);
19546
- });
19547
-
19548
- module.forEachAction(function (action, key) {
19549
- var type = action.root ? key : namespace + key;
19550
- var handler = action.handler || action;
19551
- registerAction(store, type, handler, local);
19552
- });
19553
-
19554
- module.forEachGetter(function (getter, key) {
19555
- var namespacedType = namespace + key;
19556
- registerGetter(store, namespacedType, getter, local);
19557
- });
19558
-
19559
- module.forEachChild(function (child, key) {
19560
- installModule(store, rootState, path.concat(key), child, hot);
19561
- });
19562
- }
19563
-
19564
- /**
19565
- * make localized dispatch, commit, getters and state
19566
- * if there is no namespace, just use root ones
19567
- */
19568
- function makeLocalContext (store, namespace, path) {
19569
- var noNamespace = namespace === '';
19570
-
19571
- var local = {
19572
- dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {
19573
- var args = unifyObjectStyle(_type, _payload, _options);
19574
- var payload = args.payload;
19575
- var options = args.options;
19576
- var type = args.type;
19577
-
19578
- if (!options || !options.root) {
19579
- type = namespace + type;
19580
- if (process.env.NODE_ENV !== 'production' && !store._actions[type]) {
19581
- console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type));
19582
- return
19583
- }
19584
- }
19585
-
19586
- return store.dispatch(type, payload)
19587
- },
19588
-
19589
- commit: noNamespace ? store.commit : function (_type, _payload, _options) {
19590
- var args = unifyObjectStyle(_type, _payload, _options);
19591
- var payload = args.payload;
19592
- var options = args.options;
19593
- var type = args.type;
19594
-
19595
- if (!options || !options.root) {
19596
- type = namespace + type;
19597
- if (process.env.NODE_ENV !== 'production' && !store._mutations[type]) {
19598
- console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type));
19599
- return
19600
- }
19601
- }
19602
-
19603
- store.commit(type, payload, options);
19604
- }
19605
- };
19606
-
19607
- // getters and state object must be gotten lazily
19608
- // because they will be changed by vm update
19609
- Object.defineProperties(local, {
19610
- getters: {
19611
- get: noNamespace
19612
- ? function () { return store.getters; }
19613
- : function () { return makeLocalGetters(store, namespace); }
19614
- },
19615
- state: {
19616
- get: function () { return getNestedState(store.state, path); }
19617
- }
19618
- });
19619
-
19620
- return local
19621
- }
19622
-
19623
- function makeLocalGetters (store, namespace) {
19624
- var gettersProxy = {};
19625
-
19626
- var splitPos = namespace.length;
19627
- Object.keys(store.getters).forEach(function (type) {
19628
- // skip if the target getter is not match this namespace
19629
- if (type.slice(0, splitPos) !== namespace) { return }
19630
-
19631
- // extract local getter type
19632
- var localType = type.slice(splitPos);
19633
-
19634
- // Add a port to the getters proxy.
19635
- // Define as getter property because
19636
- // we do not want to evaluate the getters in this time.
19637
- Object.defineProperty(gettersProxy, localType, {
19638
- get: function () { return store.getters[type]; },
19639
- enumerable: true
19640
- });
19641
- });
19642
-
19643
- return gettersProxy
19644
- }
19645
-
19646
- function registerMutation (store, type, handler, local) {
19647
- var entry = store._mutations[type] || (store._mutations[type] = []);
19648
- entry.push(function wrappedMutationHandler (payload) {
19649
- handler.call(store, local.state, payload);
19650
- });
19651
- }
19652
-
19653
- function registerAction (store, type, handler, local) {
19654
- var entry = store._actions[type] || (store._actions[type] = []);
19655
- entry.push(function wrappedActionHandler (payload, cb) {
19656
- var res = handler.call(store, {
19657
- dispatch: local.dispatch,
19658
- commit: local.commit,
19659
- getters: local.getters,
19660
- state: local.state,
19661
- rootGetters: store.getters,
19662
- rootState: store.state
19663
- }, payload, cb);
19664
- if (!isPromise(res)) {
19665
- res = Promise.resolve(res);
19666
- }
19667
- if (store._devtoolHook) {
19668
- return res.catch(function (err) {
19669
- store._devtoolHook.emit('vuex:error', err);
19670
- throw err
19671
- })
19672
- } else {
19673
- return res
19674
- }
19675
- });
19676
- }
19677
-
19678
- function registerGetter (store, type, rawGetter, local) {
19679
- if (store._wrappedGetters[type]) {
19680
- if (process.env.NODE_ENV !== 'production') {
19681
- console.error(("[vuex] duplicate getter key: " + type));
19682
- }
19683
- return
19684
- }
19685
- store._wrappedGetters[type] = function wrappedGetter (store) {
19686
- return rawGetter(
19687
- local.state, // local state
19688
- local.getters, // local getters
19689
- store.state, // root state
19690
- store.getters // root getters
19691
- )
19692
- };
19693
- }
19694
-
19695
- function enableStrictMode (store) {
19696
- store._vm.$watch(function () { return this._data.$$state }, function () {
19697
- if (process.env.NODE_ENV !== 'production') {
19698
- assert(store._committing, "Do not mutate vuex store state outside mutation handlers.");
19699
- }
19700
- }, { deep: true, sync: true });
19701
- }
19702
-
19703
- function getNestedState (state, path) {
19704
- return path.length
19705
- ? path.reduce(function (state, key) { return state[key]; }, state)
19706
- : state
19707
- }
19708
-
19709
- function unifyObjectStyle (type, payload, options) {
19710
- if (isObject(type) && type.type) {
19711
- options = payload;
19712
- payload = type;
19713
- type = type.type;
19714
- }
19715
-
19716
- if (process.env.NODE_ENV !== 'production') {
19717
- assert(typeof type === 'string', ("Expects string as the type, but found " + (typeof type) + "."));
19718
- }
19719
-
19720
- return { type: type, payload: payload, options: options }
19721
- }
19722
-
19723
- function install (_Vue) {
19724
- if (Vue && _Vue === Vue) {
19725
- if (process.env.NODE_ENV !== 'production') {
19726
- console.error(
19727
- '[vuex] already installed. Vue.use(Vuex) should be called only once.'
19728
- );
19729
- }
19730
- return
19731
- }
19732
- Vue = _Vue;
19733
- applyMixin(Vue);
19734
- }
19735
-
19736
- var mapState = normalizeNamespace(function (namespace, states) {
19737
- var res = {};
19738
- normalizeMap(states).forEach(function (ref) {
19739
- var key = ref.key;
19740
- var val = ref.val;
19741
-
19742
- res[key] = function mappedState () {
19743
- var state = this.$store.state;
19744
- var getters = this.$store.getters;
19745
- if (namespace) {
19746
- var module = getModuleByNamespace(this.$store, 'mapState', namespace);
19747
- if (!module) {
19748
- return
19749
- }
19750
- state = module.context.state;
19751
- getters = module.context.getters;
19752
- }
19753
- return typeof val === 'function'
19754
- ? val.call(this, state, getters)
19755
- : state[val]
19756
- };
19757
- // mark vuex getter for devtools
19758
- res[key].vuex = true;
19759
- });
19760
- return res
19761
- });
19762
-
19763
- var mapMutations = normalizeNamespace(function (namespace, mutations) {
19764
- var res = {};
19765
- normalizeMap(mutations).forEach(function (ref) {
19766
- var key = ref.key;
19767
- var val = ref.val;
19768
-
19769
- res[key] = function mappedMutation () {
19770
- var args = [], len = arguments.length;
19771
- while ( len-- ) args[ len ] = arguments[ len ];
19772
-
19773
- var commit = this.$store.commit;
19774
- if (namespace) {
19775
- var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);
19776
- if (!module) {
19777
- return
19778
- }
19779
- commit = module.context.commit;
19780
- }
19781
- return typeof val === 'function'
19782
- ? val.apply(this, [commit].concat(args))
19783
- : commit.apply(this.$store, [val].concat(args))
19784
- };
19785
- });
19786
- return res
19787
- });
19788
-
19789
- var mapGetters = normalizeNamespace(function (namespace, getters) {
19790
- var res = {};
19791
- normalizeMap(getters).forEach(function (ref) {
19792
- var key = ref.key;
19793
- var val = ref.val;
19794
-
19795
- val = namespace + val;
19796
- res[key] = function mappedGetter () {
19797
- if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {
19798
- return
19799
- }
19800
- if (process.env.NODE_ENV !== 'production' && !(val in this.$store.getters)) {
19801
- console.error(("[vuex] unknown getter: " + val));
19802
- return
19803
- }
19804
- return this.$store.getters[val]
19805
- };
19806
- // mark vuex getter for devtools
19807
- res[key].vuex = true;
19808
- });
19809
- return res
19810
- });
19811
-
19812
- var mapActions = normalizeNamespace(function (namespace, actions) {
19813
- var res = {};
19814
- normalizeMap(actions).forEach(function (ref) {
19815
- var key = ref.key;
19816
- var val = ref.val;
19817
-
19818
- res[key] = function mappedAction () {
19819
- var args = [], len = arguments.length;
19820
- while ( len-- ) args[ len ] = arguments[ len ];
19821
-
19822
- var dispatch = this.$store.dispatch;
19823
- if (namespace) {
19824
- var module = getModuleByNamespace(this.$store, 'mapActions', namespace);
19825
- if (!module) {
19826
- return
19827
- }
19828
- dispatch = module.context.dispatch;
19829
- }
19830
- return typeof val === 'function'
19831
- ? val.apply(this, [dispatch].concat(args))
19832
- : dispatch.apply(this.$store, [val].concat(args))
19833
- };
19834
- });
19835
- return res
19836
- });
19837
-
19838
- var createNamespacedHelpers = function (namespace) { return ({
19839
- mapState: mapState.bind(null, namespace),
19840
- mapGetters: mapGetters.bind(null, namespace),
19841
- mapMutations: mapMutations.bind(null, namespace),
19842
- mapActions: mapActions.bind(null, namespace)
19843
- }); };
19844
-
19845
- function normalizeMap (map) {
19846
- return Array.isArray(map)
19847
- ? map.map(function (key) { return ({ key: key, val: key }); })
19848
- : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })
19849
- }
19850
-
19851
- function normalizeNamespace (fn) {
19852
- return function (namespace, map) {
19853
- if (typeof namespace !== 'string') {
19854
- map = namespace;
19855
- namespace = '';
19856
- } else if (namespace.charAt(namespace.length - 1) !== '/') {
19857
- namespace += '/';
19858
- }
19859
- return fn(namespace, map)
19860
- }
19861
- }
19862
-
19863
- function getModuleByNamespace (store, helper, namespace) {
19864
- var module = store._modulesNamespaceMap[namespace];
19865
- if (process.env.NODE_ENV !== 'production' && !module) {
19866
- console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace));
19867
- }
19868
- return module
19869
- }
19870
-
19871
- var index_esm = {
19872
- Store: Store,
19873
- install: install,
19874
- version: '2.5.0',
19875
- mapState: mapState,
19876
- mapMutations: mapMutations,
19877
- mapGetters: mapGetters,
19878
- mapActions: mapActions,
19879
- createNamespacedHelpers: createNamespacedHelpers
19880
- };
19881
-
19882
-
19883
- /* harmony default export */ __webpack_exports__["default"] = (index_esm);
19884
-
19885
- /* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(4)))
19886
-
19887
- /***/ }),
19888
- /* 55 */
19889
- /***/ (function(module, exports) {
19890
-
19891
- /* (ignored) */
19892
-
19893
- /***/ }),
19894
- /* 56 */
19895
- /***/ (function(module, exports, __webpack_require__) {
19896
-
19897
- "use strict";
19898
-
19899
-
19900
- Object.defineProperty(exports, "__esModule", {
19901
- value: true
19902
- });
19903
- /* jshint esversion: 6 */
19904
- var toggleLoading = function toggleLoading(state, data) {
19905
- state.loading = data;
19906
- };
19907
- var toggleConnecting = function toggleConnecting(state, data) {
19908
- state.isConnecting = data;
19909
- };
19910
- var toggleKeyValidity = function toggleKeyValidity(state, data) {
19911
- state.apiKeyValidity = data;
19912
- };
19913
- var toggleConnectedToOptml = function toggleConnectedToOptml(state, data) {
19914
- state.connected = data;
19915
- };
19916
- var updateUserData = function updateUserData(state, data) {
19917
- state.userData = data;
19918
- };
19919
- var updateApiKey = function updateApiKey(state, data) {
19920
- state.apiKey = data;
19921
- };
19922
- var updateOptimizedImages = function updateOptimizedImages(state, data) {
19923
- state.optimizedImages = data.body.data;
19924
- };
19925
- var updateSampleRate = function updateSampleRate(state, data) {
19926
- state.sample_rate = data;
19927
- };
19928
- var restApiNotWorking = function restApiNotWorking(state, data) {
19929
- state.apiError = data;
19930
- };
19931
- var updateSettings = function updateSettings(state, data) {
19932
-
19933
- for (var setting in data) {
19934
- state.site_settings[setting] = data[setting];
19935
- }
19936
- };
19937
-
19938
- var updateWatermark = function updateWatermark(state, data) {
19939
-
19940
- for (var key in data) {
19941
- state.site_settings.watermark[key] = data[key];
19942
- }
19943
- };
19944
-
19945
- exports.default = {
19946
- toggleLoading: toggleLoading,
19947
- toggleConnecting: toggleConnecting,
19948
- toggleKeyValidity: toggleKeyValidity,
19949
- toggleConnectedToOptml: toggleConnectedToOptml,
19950
- updateUserData: updateUserData,
19951
- updateApiKey: updateApiKey,
19952
- updateSampleRate: updateSampleRate,
19953
- restApiNotWorking: restApiNotWorking,
19954
- updateSettings: updateSettings,
19955
- updateWatermark: updateWatermark,
19956
- updateOptimizedImages: updateOptimizedImages
19957
- };
19958
-
19959
- /***/ }),
19960
- /* 57 */
19961
- /***/ (function(module, exports, __webpack_require__) {
19962
-
19963
- "use strict";
19964
-
19965
-
19966
- Object.defineProperty(exports, "__esModule", {
19967
- value: true
19968
- });
19969
-
19970
- var _vue = __webpack_require__(3);
19971
-
19972
- var _vue2 = _interopRequireDefault(_vue);
19973
-
19974
- var _vueResource = __webpack_require__(6);
19975
-
19976
- var _vueResource2 = _interopRequireDefault(_vueResource);
19977
-
19978
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19979
-
19980
- /* jshint esversion: 6 */
19981
- /* global optimoleDashboardApp */
19982
- _vue2.default.use(_vueResource2.default);
19983
-
19984
- var connectOptimole = function connectOptimole(_ref, data) {
19985
- var commit = _ref.commit,
19986
- state = _ref.state;
19987
-
19988
- commit('toggleConnecting', true);
19989
- commit('restApiNotWorking', false);
19990
- _vue2.default.http({
19991
- url: optimoleDashboardApp.root + '/connect',
19992
- method: 'POST',
19993
- headers: { 'X-WP-Nonce': optimoleDashboardApp.nonce },
19994
- params: { 'req': data.req },
19995
- body: {
19996
- 'api_key': data.apiKey
19997
- },
19998
- responseType: 'json',
19999
- emulateJSON: true
20000
- }).then(function (response) {
20001
- commit('toggleConnecting', false);
20002
- if (response.body.code === 'success') {
20003
- commit('toggleKeyValidity', true);
20004
- commit('toggleConnectedToOptml', true);
20005
- commit('updateApiKey', data.apiKey);
20006
- commit('updateUserData', response.body.data);
20007
- console.log('%c OptiMole API connection successful.', 'color: #59B278');
20008
- } else {
20009
- commit('toggleKeyValidity', false);
20010
- console.log('%c Invalid API Key.', 'color: #E7602A');
20011
- }
20012
- }, function () {
20013
- commit('toggleConnecting', false);
20014
- commit('restApiNotWorking', true);
20015
- });
20016
- };
20017
-
20018
- var registerOptimole = function registerOptimole(_ref2, data) {
20019
- var commit = _ref2.commit,
20020
- state = _ref2.state;
20021
-
20022
-
20023
- commit('restApiNotWorking', false);
20024
- commit('toggleLoading', true);
20025
- return _vue2.default.http({
20026
- url: optimoleDashboardApp.root + '/register',
20027
- method: 'POST',
20028
- headers: { 'X-WP-Nonce': optimoleDashboardApp.nonce },
20029
- params: { 'req': data.req },
20030
- body: {
20031
- 'email': data.email
20032
- },
20033
- emulateJSON: true,
20034
- responseType: 'json'
20035
- }).then(function (response) {
20036
- commit('toggleLoading', false);
20037
- return response.data;
20038
- }, function (response) {
20039
- commit('toggleLoading', false);
20040
- commit('restApiNotWorking', true);
20041
- return response.data;
20042
- });
20043
- };
20044
-
20045
- var disconnectOptimole = function disconnectOptimole(_ref3, data) {
20046
- var commit = _ref3.commit,
20047
- state = _ref3.state;
20048
-
20049
- commit('toggleLoading', true, 'loading');
20050
- _vue2.default.http({
20051
- url: optimoleDashboardApp.root + '/disconnect',
20052
- method: 'GET',
20053
- headers: { 'X-WP-Nonce': optimoleDashboardApp.nonce },
20054
- params: { 'req': data.req },
20055
- emulateJSON: true,
20056
- responseType: 'json'
20057
- }).then(function (response) {
20058
- commit('updateUserData', null);
20059
- commit('toggleLoading', false);
20060
- commit('updateApiKey', '');
20061
- if (response.ok) {
20062
- commit('toggleConnectedToOptml', false);
20063
- console.log('%c Disconnected from OptiMole API.', 'color: #59B278');
20064
- } else {
20065
- console.error(response);
20066
- }
20067
- });
20068
- };
20069
-
20070
- var saveSettings = function saveSettings(_ref4, data) {
20071
- var commit = _ref4.commit,
20072
- state = _ref4.state;
20073
-
20074
- commit('updateSettings', data.settings);
20075
- commit('toggleLoading', true);
20076
- return _vue2.default.http({
20077
- url: optimoleDashboardApp.root + '/update_option',
20078
- method: 'POST',
20079
- headers: { 'X-WP-Nonce': optimoleDashboardApp.nonce },
20080
- emulateJSON: true,
20081
- body: {
20082
- 'settings': data.settings
20083
- },
20084
- responseType: 'json'
20085
- }).then(function (response) {
20086
- if (response.body.code === 'success') {
20087
- commit('updateSettings', response.body.data);
20088
- }
20089
- commit('toggleLoading', false);
20090
- });
20091
- };
20092
- var sampleRate = function sampleRate(_ref5, data) {
20093
- var commit = _ref5.commit,
20094
- state = _ref5.state;
20095
-
20096
-
20097
- data.component.loading_images = true;
20098
- return _vue2.default.http({
20099
- url: optimoleDashboardApp.root + '/images-sample-rate',
20100
- method: 'POST',
20101
- emulateJSON: true,
20102
- headers: { 'X-WP-Nonce': optimoleDashboardApp.nonce },
20103
- params: {
20104
- 'quality': data.quality,
20105
- 'force': data.force
20106
- },
20107
- responseType: 'json'
20108
- }).then(function (response) {
20109
-
20110
- data.component.loading_images = false;
20111
- if (response.body.code === 'success') {
20112
- commit('updateSampleRate', response.body.data);
20113
- }
20114
- });
20115
- };
20116
-
20117
- var retrieveOptimizedImages = function retrieveOptimizedImages(_ref6, data) {
20118
- var commit = _ref6.commit,
20119
- state = _ref6.state;
20120
-
20121
- var self = this;
20122
-
20123
- setTimeout(function () {
20124
- if (self.state.optimizedImages.length > 0) {
20125
- console.log('%c Images already exsist.', 'color: #59B278');
20126
- return false;
20127
- }
20128
- _vue2.default.http({
20129
- url: optimoleDashboardApp.root + '/poll_optimized_images',
20130
- method: 'GET',
20131
- emulateJSON: true,
20132
- headers: { 'X-WP-Nonce': optimoleDashboardApp.nonce },
20133
- params: { 'req': 'Get Optimized Images' },
20134
- responseType: 'json',
20135
- timeout: 10000
20136
- }).then(function (response) {
20137
- if (response.body.code === 'success') {
20138
- commit('updateOptimizedImages', response);
20139
- if (data.component !== null) {
20140
- data.component.loading = false;
20141
- data.component.startTime = data.component.maxTime;
20142
- if (response.body.data.length === 0) {
20143
- data.component.noImages = true;
20144
- }
20145
- }
20146
- console.log('%c Images Fetched.', 'color: #59B278');
20147
- } else {
20148
- component.noImages = true;
20149
- data.component.loading = false;
20150
- console.log('%c No images available.', 'color: #E7602A');
20151
- }
20152
- });
20153
- }, data.waitTime);
20154
- };
20155
-
20156
- var retrieveWatermarks = function retrieveWatermarks(_ref7, data) {
20157
- var commit = _ref7.commit,
20158
- state = _ref7.state;
20159
-
20160
-
20161
- commit('toggleLoading', true);
20162
- _vue2.default.http({
20163
- url: optimoleDashboardApp.root + '/poll_watermarks',
20164
- method: 'GET',
20165
- headers: { 'X-WP-Nonce': optimoleDashboardApp.nonce },
20166
- params: { 'req': 'Get Watermarks' },
20167
- responseType: 'json'
20168
- }).then(function (response) {
20169
- commit('toggleLoading', false);
20170
- if (response.status === 200) {
20171
- data.component.watermarkData = [];
20172
-
20173
- for (var row in response.data.data) {
20174
- var tmp = response.data.data[row];
20175
- var item = {
20176
- ID: tmp.ID,
20177
- post_title: tmp.post_title,
20178
- post_mime_type: tmp.post_mime_type,
20179
- guid: tmp.post_content || tmp.guid
20180
- };
20181
- data.component.watermarkData.push(item);
20182
- data.component.noImages = false;
20183
- }
20184
- }
20185
- });
20186
- };
20187
-
20188
- var removeWatermark = function removeWatermark(_ref8, data) {
20189
- var commit = _ref8.commit,
20190
- state = _ref8.state;
20191
-
20192
- var self = this;
20193
- commit('toggleLoading', true);
20194
- _vue2.default.http({
20195
- url: optimoleDashboardApp.root + '/remove_watermark',
20196
- method: 'POST',
20197
- headers: { 'X-WP-Nonce': optimoleDashboardApp.nonce },
20198
- params: { 'req': 'Get Watermarks', 'postID': data.postID },
20199
- responseType: 'json'
20200
- }).then(function (response) {
20201
-
20202
- commit('toggleLoading', false);
20203
- retrieveWatermarks({ commit: commit, state: state }, data);
20204
- });
20205
- };
20206
-
20207
- var requestStatsUpdate = function requestStatsUpdate(_ref9, data) {
20208
- var commit = _ref9.commit,
20209
- state = _ref9.state;
20210
-
20211
- commit('toggleLoading', true);
20212
- _vue2.default.http({
20213
- url: optimoleDashboardApp.root + '/request_update',
20214
- method: 'GET',
20215
- headers: { 'X-WP-Nonce': optimoleDashboardApp.nonce },
20216
- responseType: 'json'
20217
- }).then(function (response) {
20218
- commit('toggleLoading', false);
20219
- if (response.status === 200) {
20220
- commit('updateUserData', response.body.data);
20221
- }
20222
- });
20223
- };
20224
-
20225
- exports.default = {
20226
- connectOptimole: connectOptimole,
20227
- registerOptimole: registerOptimole,
20228
- disconnectOptimole: disconnectOptimole,
20229
- saveSettings: saveSettings,
20230
- sampleRate: sampleRate,
20231
- retrieveOptimizedImages: retrieveOptimizedImages,
20232
- retrieveWatermarks: retrieveWatermarks,
20233
- removeWatermark: removeWatermark,
20234
- requestStatsUpdate: requestStatsUpdate
20235
- };
20236
-
20237
- /***/ }),
20238
- /* 58 */
20239
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
20240
-
20241
- "use strict";
20242
- Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
20243
- /* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "install", function() { return install; });
20244
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ResizeObserver", function() { return ResizeObserver; });
20245
- function getInternetExplorerVersion() {
20246
- var ua = window.navigator.userAgent;
20247
-
20248
- var msie = ua.indexOf('MSIE ');
20249
- if (msie > 0) {
20250
- // IE 10 or older => return version number
20251
- return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
20252
- }
20253
-
20254
- var trident = ua.indexOf('Trident/');
20255
- if (trident > 0) {
20256
- // IE 11 => return version number
20257
- var rv = ua.indexOf('rv:');
20258
- return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
20259
- }
20260
-
20261
- var edge = ua.indexOf('Edge/');
20262
- if (edge > 0) {
20263
- // Edge (IE 12+) => return version number
20264
- return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
20265
- }
20266
-
20267
- // other browser
20268
- return -1;
20269
- }
20270
-
20271
- var isIE = void 0;
20272
-
20273
- function initCompat() {
20274
- if (!initCompat.init) {
20275
- initCompat.init = true;
20276
- isIE = getInternetExplorerVersion() !== -1;
20277
- }
20278
- }
20279
-
20280
- var ResizeObserver = { render: function render() {
20281
- var _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c('div', { staticClass: "resize-observer", attrs: { "tabindex": "-1" } });
20282
- }, staticRenderFns: [], _scopeId: 'data-v-b329ee4c',
20283
- name: 'resize-observer',
20284
-
20285
- methods: {
20286
- compareAndNotify: function compareAndNotify() {
20287
- if (this._w !== this.$el.offsetWidth || this._h !== this.$el.offsetHeight) {
20288
- this._w = this.$el.offsetWidth;
20289
- this._h = this.$el.offsetHeight;
20290
- this.$emit('notify');
20291
- }
20292
- },
20293
- addResizeHandlers: function addResizeHandlers() {
20294
- this._resizeObject.contentDocument.defaultView.addEventListener('resize', this.compareAndNotify);
20295
- this.compareAndNotify();
20296
- },
20297
- removeResizeHandlers: function removeResizeHandlers() {
20298
- if (this._resizeObject && this._resizeObject.onload) {
20299
- if (!isIE && this._resizeObject.contentDocument) {
20300
- this._resizeObject.contentDocument.defaultView.removeEventListener('resize', this.compareAndNotify);
20301
- }
20302
- delete this._resizeObject.onload;
20303
- }
20304
- }
20305
- },
20306
-
20307
- mounted: function mounted() {
20308
- var _this = this;
20309
-
20310
- initCompat();
20311
- this.$nextTick(function () {
20312
- _this._w = _this.$el.offsetWidth;
20313
- _this._h = _this.$el.offsetHeight;
20314
- });
20315
- var object = document.createElement('object');
20316
- this._resizeObject = object;
20317
- object.setAttribute('aria-hidden', 'true');
20318
- object.setAttribute('tabindex', -1);
20319
- object.onload = this.addResizeHandlers;
20320
- object.type = 'text/html';
20321
- if (isIE) {
20322
- this.$el.appendChild(object);
20323
- }
20324
- object.data = 'about:blank';
20325
- if (!isIE) {
20326
- this.$el.appendChild(object);
20327
- }
20328
- },
20329
- beforeDestroy: function beforeDestroy() {
20330
- this.removeResizeHandlers();
20331
- }
20332
- };
20333
-
20334
- // Install the components
20335
- function install(Vue) {
20336
- Vue.component('resize-observer', ResizeObserver);
20337
- Vue.component('ResizeObserver', ResizeObserver);
20338
- }
20339
-
20340
- // Plugin
20341
- var plugin = {
20342
- // eslint-disable-next-line no-undef
20343
- version: "0.4.5",
20344
- install: install
20345
- };
20346
-
20347
- // Auto-install
20348
- var GlobalVue = null;
20349
- if (typeof window !== 'undefined') {
20350
- GlobalVue = window.Vue;
20351
- } else if (typeof global !== 'undefined') {
20352
- GlobalVue = global.Vue;
20353
- }
20354
- if (GlobalVue) {
20355
- GlobalVue.use(plugin);
20356
- }
20357
-
20358
-
20359
- /* harmony default export */ __webpack_exports__["default"] = (plugin);
20360
-
20361
- /* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2)))
20362
-
20363
- /***/ }),
20364
- /* 59 */
20365
- /***/ (function(module, exports, __webpack_require__) {
20366
-
20367
- (function webpackUniversalModuleDefinition(root, factory) {
20368
- if(true)
20369
- module.exports = factory();
20370
- else if(typeof define === 'function' && define.amd)
20371
- define([], factory);
20372
- else if(typeof exports === 'object')
20373
- exports["vue-js-toggle-button"] = factory();
20374
- else
20375
- root["vue-js-toggle-button"] = factory();
20376
- })(this, function() {
20377
- return /******/ (function(modules) { // webpackBootstrap
20378
- /******/ // The module cache
20379
- /******/ var installedModules = {};
20380
- /******/
20381
- /******/ // The require function
20382
- /******/ function __webpack_require__(moduleId) {
20383
- /******/
20384
- /******/ // Check if module is in cache
20385
- /******/ if(installedModules[moduleId]) {
20386
- /******/ return installedModules[moduleId].exports;
20387
- /******/ }
20388
- /******/ // Create a new module (and put it into the cache)
20389
- /******/ var module = installedModules[moduleId] = {
20390
- /******/ i: moduleId,
20391
- /******/ l: false,
20392
- /******/ exports: {}
20393
- /******/ };
20394
- /******/
20395
- /******/ // Execute the module function
20396
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
20397
- /******/
20398
- /******/ // Flag the module as loaded
20399
- /******/ module.l = true;
20400
- /******/
20401
- /******/ // Return the exports of the module
20402
- /******/ return module.exports;
20403
- /******/ }
20404
- /******/
20405
- /******/
20406
- /******/ // expose the modules object (__webpack_modules__)
20407
- /******/ __webpack_require__.m = modules;
20408
- /******/
20409
- /******/ // expose the module cache
20410
- /******/ __webpack_require__.c = installedModules;
20411
- /******/
20412
- /******/ // identity function for calling harmony imports with the correct context
20413
- /******/ __webpack_require__.i = function(value) { return value; };
20414
- /******/
20415
- /******/ // define getter function for harmony exports
20416
- /******/ __webpack_require__.d = function(exports, name, getter) {
20417
- /******/ if(!__webpack_require__.o(exports, name)) {
20418
- /******/ Object.defineProperty(exports, name, {
20419
- /******/ configurable: false,
20420
- /******/ enumerable: true,
20421
- /******/ get: getter
20422
- /******/ });
20423
- /******/ }
20424
- /******/ };
20425
- /******/
20426
- /******/ // getDefaultExport function for compatibility with non-harmony modules
20427
- /******/ __webpack_require__.n = function(module) {
20428
- /******/ var getter = module && module.__esModule ?
20429
- /******/ function getDefault() { return module['default']; } :
20430
- /******/ function getModuleExports() { return module; };
20431
- /******/ __webpack_require__.d(getter, 'a', getter);
20432
- /******/ return getter;
20433
- /******/ };
20434
- /******/
20435
- /******/ // Object.prototype.hasOwnProperty.call
20436
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
20437
- /******/
20438
- /******/ // __webpack_public_path__
20439
- /******/ __webpack_require__.p = "/dist/";
20440
- /******/
20441
- /******/ // Load entry module and return exports
20442
- /******/ return __webpack_require__(__webpack_require__.s = 2);
20443
- /******/ })
20444
- /************************************************************************/
20445
- /******/ ([
20446
- /* 0 */
20447
- /***/ (function(module, exports, __webpack_require__) {
20448
-
20449
-
20450
- /* styles */
20451
- __webpack_require__(7)
20452
-
20453
- var Component = __webpack_require__(5)(
20454
- /* script */
20455
- __webpack_require__(1),
20456
- /* template */
20457
- __webpack_require__(6),
20458
- /* scopeId */
20459
- "data-v-25adc6c0",
20460
- /* cssModules */
20461
- null
20462
- )
20463
-
20464
- module.exports = Component.exports
20465
-
20466
-
20467
- /***/ }),
20468
- /* 1 */
20469
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
20470
-
20471
- "use strict";
20472
- Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
20473
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
20474
-
20475
- //
20476
- //
20477
- //
20478
- //
20479
- //
20480
- //
20481
- //
20482
- //
20483
- //
20484
- //
20485
- //
20486
- //
20487
- //
20488
- //
20489
- //
20490
- //
20491
- //
20492
- //
20493
- //
20494
- //
20495
- //
20496
- //
20497
- //
20498
- //
20499
- //
20500
- //
20501
- //
20502
- //
20503
- //
20504
- //
20505
- //
20506
-
20507
- var DEFAULT_COLOR_CHECKED = '#75c791';
20508
- var DEFAULT_COLOR_UNCHECKED = '#bfcbd9';
20509
- var DEFAULT_LABEL_CHECKED = 'on';
20510
- var DEFAULT_LABEL_UNCHECKED = 'off';
20511
- var DEFAULT_SWITCH_COLOR = '#fff';
20512
- var MARGIN = 3;
20513
-
20514
- var contains = function contains(object, title) {
20515
- return (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && object.hasOwnProperty(title);
20516
- };
20517
-
20518
- var px = function px(v) {
20519
- return v + 'px';
20520
- };
20521
-
20522
- /* harmony default export */ __webpack_exports__["default"] = ({
20523
- name: 'ToggleButton',
20524
- props: {
20525
- value: {
20526
- type: Boolean,
20527
- default: false
20528
- },
20529
- name: {
20530
- type: String
20531
- },
20532
- disabled: {
20533
- type: Boolean,
20534
- default: false
20535
- },
20536
- sync: {
20537
- type: Boolean,
20538
- default: false
20539
- },
20540
- speed: {
20541
- type: Number,
20542
- default: 300
20543
- },
20544
- color: {
20545
- type: [String, Object],
20546
- validator: function validator(value) {
20547
- return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' ? value.checked || value.unchecked || value.disabled : typeof value === 'string';
20548
- }
20549
- },
20550
- switchColor: {
20551
- type: [String, Object],
20552
- validator: function validator(value) {
20553
- return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' ? value.checked || value.unchecked : typeof value === 'string';
20554
- }
20555
- },
20556
- cssColors: {
20557
- type: Boolean,
20558
- default: false
20559
- },
20560
- labels: {
20561
- type: [Boolean, Object],
20562
- default: false,
20563
- validator: function validator(value) {
20564
- return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' ? value.checked || value.unchecked : typeof value === 'boolean';
20565
- }
20566
- },
20567
- height: {
20568
- type: Number,
20569
- default: 22
20570
- },
20571
- width: {
20572
- type: Number,
20573
- default: 50
20574
- },
20575
- fontSize: {
20576
- type: Number
20577
- }
20578
- },
20579
- computed: {
20580
- className: function className() {
20581
- var toggled = this.toggled,
20582
- disabled = this.disabled;
20583
-
20584
-
20585
- return ['vue-js-switch', { toggled: toggled, disabled: disabled }];
20586
- },
20587
- coreStyle: function coreStyle() {
20588
- return {
20589
- width: px(this.width),
20590
- height: px(this.height),
20591
- backgroundColor: this.cssColors ? null : this.disabled ? this.colorDisabled : this.colorCurrent,
20592
- borderRadius: px(Math.round(this.height / 2))
20593
- };
20594
- },
20595
- buttonRadius: function buttonRadius() {
20596
- return this.height - MARGIN * 2;
20597
- },
20598
- distance: function distance() {
20599
- return px(this.width - this.height + MARGIN);
20600
- },
20601
- buttonStyle: function buttonStyle() {
20602
- var transition = 'transform ' + this.speed + 'ms';
20603
-
20604
- var transform = this.toggled ? 'translate3d(' + this.distance + ', 3px, 0px)' : null;
20605
-
20606
- var background = this.switchColor ? this.switchColorCurrent : null;
20607
-
20608
- return {
20609
- width: px(this.buttonRadius),
20610
- height: px(this.buttonRadius),
20611
- transition: transition,
20612
- transform: transform,
20613
- background: background
20614
- };
20615
- },
20616
- labelStyle: function labelStyle() {
20617
- return {
20618
- lineHeight: px(this.height),
20619
- fontSize: this.fontSize ? px(this.fontSize) : null
20620
- };
20621
- },
20622
- colorChecked: function colorChecked() {
20623
- var color = this.color;
20624
-
20625
-
20626
- if ((typeof color === 'undefined' ? 'undefined' : _typeof(color)) !== 'object') {
20627
- return color || DEFAULT_COLOR_CHECKED;
20628
- }
20629
-
20630
- return contains(color, 'checked') ? color.checked : DEFAULT_COLOR_CHECKED;
20631
- },
20632
- colorUnchecked: function colorUnchecked() {
20633
- var color = this.color;
20634
-
20635
-
20636
- return contains(color, 'unchecked') ? color.unchecked : DEFAULT_COLOR_UNCHECKED;
20637
- },
20638
- colorDisabled: function colorDisabled() {
20639
- var color = this.color;
20640
-
20641
-
20642
- return contains(color, 'disabled') ? color.disabled : this.colorCurrent;
20643
- },
20644
- colorCurrent: function colorCurrent() {
20645
- return this.toggled ? this.colorChecked : this.colorUnchecked;
20646
- },
20647
- labelChecked: function labelChecked() {
20648
- var labels = this.labels;
20649
-
20650
-
20651
- return contains(labels, 'checked') ? labels.checked : DEFAULT_LABEL_CHECKED;
20652
- },
20653
- labelUnchecked: function labelUnchecked() {
20654
- var labels = this.labels;
20655
-
20656
-
20657
- return contains(labels, 'unchecked') ? labels.unchecked : DEFAULT_LABEL_UNCHECKED;
20658
- },
20659
- switchColorChecked: function switchColorChecked() {
20660
- var switchColor = this.switchColor;
20661
-
20662
-
20663
- return contains(switchColor, 'checked') ? switchColor.checked : DEFAULT_SWITCH_COLOR;
20664
- },
20665
- switchColorUnchecked: function switchColorUnchecked() {
20666
- var switchColor = this.switchColor;
20667
-
20668
-
20669
- return contains(switchColor, 'unchecked') ? switchColor.unchecked : DEFAULT_SWITCH_COLOR;
20670
- },
20671
- switchColorCurrent: function switchColorCurrent() {
20672
- var switchColor = this.switchColor;
20673
-
20674
-
20675
- if ((typeof switchColor === 'undefined' ? 'undefined' : _typeof(switchColor)) !== 'object') {
20676
- return switchColor || DEFAULT_SWITCH_COLOR;
20677
- }
20678
-
20679
- return this.toggled ? this.switchColorChecked : this.switchColorUnchecked;
20680
- }
20681
- },
20682
- watch: {
20683
- value: function value(_value) {
20684
- if (this.sync) {
20685
- this.toggled = !!_value;
20686
- }
20687
- }
20688
- },
20689
- data: function data() {
20690
- return {
20691
- toggled: !!this.value
20692
- };
20693
- },
20694
-
20695
- methods: {
20696
- toggle: function toggle(event) {
20697
- this.toggled = !this.toggled;
20698
- this.$emit('input', this.toggled);
20699
- this.$emit('change', {
20700
- value: this.toggled,
20701
- srcEvent: event
20702
- });
20703
- }
20704
- }
20705
- });
20706
-
20707
- /***/ }),
20708
- /* 2 */
20709
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
20710
-
20711
- "use strict";
20712
- Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
20713
- /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Button_vue__ = __webpack_require__(0);
20714
- /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Button_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__Button_vue__);
20715
- /* harmony reexport (default from non-hamory) */ __webpack_require__.d(__webpack_exports__, "ToggleButton", function() { return __WEBPACK_IMPORTED_MODULE_0__Button_vue___default.a; });
20716
-
20717
-
20718
- var installed = false;
20719
-
20720
- /* harmony default export */ __webpack_exports__["default"] = ({
20721
- install: function install(Vue) {
20722
- if (installed) {
20723
- return;
20724
- }
20725
-
20726
- Vue.component('ToggleButton', __WEBPACK_IMPORTED_MODULE_0__Button_vue___default.a);
20727
- installed = true;
20728
- }
20729
- });
20730
-
20731
-
20732
-
20733
- /***/ }),
20734
- /* 3 */
20735
- /***/ (function(module, exports, __webpack_require__) {
20736
-
20737
- exports = module.exports = __webpack_require__(4)();
20738
- // imports
20739
-
20740
-
20741
- // module
20742
- exports.push([module.i, ".vue-js-switch[data-v-25adc6c0]{display:inline-block;position:relative;overflow:hidden;vertical-align:middle;user-select:none;font-size:10px;cursor:pointer}.vue-js-switch .v-switch-input[data-v-25adc6c0]{opacity:0;position:absolute;width:1px;height:1px}.vue-js-switch .v-switch-label[data-v-25adc6c0]{position:absolute;top:0;font-weight:600;color:#fff;z-index:1}.vue-js-switch .v-switch-label.v-left[data-v-25adc6c0]{left:10px}.vue-js-switch .v-switch-label.v-right[data-v-25adc6c0]{right:10px}.vue-js-switch .v-switch-core[data-v-25adc6c0]{display:block;position:relative;box-sizing:border-box;outline:0;margin:0;transition:border-color .3s,background-color .3s;user-select:none}.vue-js-switch .v-switch-core .v-switch-button[data-v-25adc6c0]{display:block;position:absolute;overflow:hidden;top:0;left:0;transform:translate3d(3px,3px,0);border-radius:100%;background-color:#fff;z-index:2}.vue-js-switch.disabled[data-v-25adc6c0]{pointer-events:none;opacity:.6}", ""]);
20743
-
20744
- // exports
20745
-
20746
-
20747
- /***/ }),
20748
- /* 4 */
20749
- /***/ (function(module, exports) {
20750
-
20751
- /*
20752
- MIT License http://www.opensource.org/licenses/mit-license.php
20753
- Author Tobias Koppers @sokra
20754
- */
20755
- // css base code, injected by the css-loader
20756
- module.exports = function() {
20757
- var list = [];
20758
-
20759
- // return the list of modules as css string
20760
- list.toString = function toString() {
20761
- var result = [];
20762
- for(var i = 0; i < this.length; i++) {
20763
- var item = this[i];
20764
- if(item[2]) {
20765
- result.push("@media " + item[2] + "{" + item[1] + "}");
20766
- } else {
20767
- result.push(item[1]);
20768
- }
20769
- }
20770
- return result.join("");
20771
- };
20772
-
20773
- // import a list of modules into the list
20774
- list.i = function(modules, mediaQuery) {
20775
- if(typeof modules === "string")
20776
- modules = [[null, modules, ""]];
20777
- var alreadyImportedModules = {};
20778
- for(var i = 0; i < this.length; i++) {
20779
- var id = this[i][0];
20780
- if(typeof id === "number")
20781
- alreadyImportedModules[id] = true;
20782
- }
20783
- for(i = 0; i < modules.length; i++) {
20784
- var item = modules[i];
20785
- // skip already imported module
20786
- // this implementation is not 100% perfect for weird media query combinations
20787
- // when a module is imported multiple times with different media queries.
20788
- // I hope this will never occur (Hey this way we have smaller bundles)
20789
- if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
20790
- if(mediaQuery && !item[2]) {
20791
- item[2] = mediaQuery;
20792
- } else if(mediaQuery) {
20793
- item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
20794
- }
20795
- list.push(item);
20796
- }
20797
- }
20798
- };
20799
- return list;
20800
- };
20801
-
20802
-
20803
- /***/ }),
20804
- /* 5 */
20805
- /***/ (function(module, exports) {
20806
-
20807
- // this module is a runtime utility for cleaner component module output and will
20808
- // be included in the final webpack user bundle
20809
-
20810
- module.exports = function normalizeComponent (
20811
- rawScriptExports,
20812
- compiledTemplate,
20813
- scopeId,
20814
- cssModules
20815
- ) {
20816
- var esModule
20817
- var scriptExports = rawScriptExports = rawScriptExports || {}
20818
-
20819
- // ES6 modules interop
20820
- var type = typeof rawScriptExports.default
20821
- if (type === 'object' || type === 'function') {
20822
- esModule = rawScriptExports
20823
- scriptExports = rawScriptExports.default
20824
- }
20825
-
20826
- // Vue.extend constructor export interop
20827
- var options = typeof scriptExports === 'function'
20828
- ? scriptExports.options
20829
- : scriptExports
20830
-
20831
- // render functions
20832
- if (compiledTemplate) {
20833
- options.render = compiledTemplate.render
20834
- options.staticRenderFns = compiledTemplate.staticRenderFns
20835
- }
20836
-
20837
- // scopedId
20838
- if (scopeId) {
20839
- options._scopeId = scopeId
20840
- }
20841
-
20842
- // inject cssModules
20843
- if (cssModules) {
20844
- var computed = Object.create(options.computed || null)
20845
- Object.keys(cssModules).forEach(function (key) {
20846
- var module = cssModules[key]
20847
- computed[key] = function () { return module }
20848
- })
20849
- options.computed = computed
20850
- }
20851
-
20852
- return {
20853
- esModule: esModule,
20854
- exports: scriptExports,
20855
- options: options
20856
- }
20857
- }
20858
-
20859
-
20860
- /***/ }),
20861
- /* 6 */
20862
- /***/ (function(module, exports) {
20863
-
20864
- module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
20865
- return _c('label', {
20866
- class: _vm.className
20867
- }, [_c('input', {
20868
- staticClass: "v-switch-input",
20869
- attrs: {
20870
- "type": "checkbox",
20871
- "name": _vm.name
20872
- },
20873
- domProps: {
20874
- "checked": _vm.value
20875
- },
20876
- on: {
20877
- "change": function($event) {
20878
- $event.stopPropagation();
20879
- return _vm.toggle($event)
20880
- }
20881
- }
20882
- }), _vm._v(" "), _c('div', {
20883
- staticClass: "v-switch-core",
20884
- style: (_vm.coreStyle)
20885
- }, [_c('div', {
20886
- staticClass: "v-switch-button",
20887
- style: (_vm.buttonStyle)
20888
- })]), _vm._v(" "), (_vm.labels) ? [(_vm.toggled) ? _c('span', {
20889
- staticClass: "v-switch-label v-left",
20890
- style: (_vm.labelStyle)
20891
- }, [_vm._t("checked", [
20892
- [_vm._v(_vm._s(_vm.labelChecked))]
20893
- ])], 2) : _c('span', {
20894
- staticClass: "v-switch-label v-right",
20895
- style: (_vm.labelStyle)
20896
- }, [_vm._t("unchecked", [
20897
- [_vm._v(_vm._s(_vm.labelUnchecked))]
20898
- ])], 2)] : _vm._e()], 2)
20899
- },staticRenderFns: []}
20900
-
20901
- /***/ }),
20902
- /* 7 */
20903
- /***/ (function(module, exports, __webpack_require__) {
20904
-
20905
- // style-loader: Adds some css to the DOM by adding a <style> tag
20906
-
20907
- // load the styles
20908
- var content = __webpack_require__(3);
20909
- if(typeof content === 'string') content = [[module.i, content, '']];
20910
- if(content.locals) module.exports = content.locals;
20911
- // add the styles to the DOM
20912
- var update = __webpack_require__(8)("2283861f", content, true);
20913
-
20914
- /***/ }),
20915
- /* 8 */
20916
- /***/ (function(module, exports, __webpack_require__) {
20917
-
20918
- /*
20919
- MIT License http://www.opensource.org/licenses/mit-license.php
20920
- Author Tobias Koppers @sokra
20921
- Modified by Evan You @yyx990803
20922
- */
20923
-
20924
- var hasDocument = typeof document !== 'undefined'
20925
-
20926
- if (typeof DEBUG !== 'undefined' && DEBUG) {
20927
- if (!hasDocument) {
20928
- throw new Error(
20929
- 'vue-style-loader cannot be used in a non-browser environment. ' +
20930
- "Use { target: 'node' } in your Webpack config to indicate a server-rendering environment."
20931
- ) }
20932
- }
20933
-
20934
- var listToStyles = __webpack_require__(9)
20935
-
20936
- /*
20937
- type StyleObject = {
20938
- id: number;
20939
- parts: Array<StyleObjectPart>
20940
- }
20941
-
20942
- type StyleObjectPart = {
20943
- css: string;
20944
- media: string;
20945
- sourceMap: ?string
20946
- }
20947
- */
20948
-
20949
- var stylesInDom = {/*
20950
- [id: number]: {
20951
- id: number,
20952
- refs: number,
20953
- parts: Array<(obj?: StyleObjectPart) => void>
20954
- }
20955
- */}
20956
-
20957
- var head = hasDocument && (document.head || document.getElementsByTagName('head')[0])
20958
- var singletonElement = null
20959
- var singletonCounter = 0
20960
- var isProduction = false
20961
- var noop = function () {}
20962
-
20963
- // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
20964
- // tags it will allow on a page
20965
- var isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\b/.test(navigator.userAgent.toLowerCase())
20966
-
20967
- module.exports = function (parentId, list, _isProduction) {
20968
- isProduction = _isProduction
20969
-
20970
- var styles = listToStyles(parentId, list)
20971
- addStylesToDom(styles)
20972
-
20973
- return function update (newList) {
20974
- var mayRemove = []
20975
- for (var i = 0; i < styles.length; i++) {
20976
- var item = styles[i]
20977
- var domStyle = stylesInDom[item.id]
20978
- domStyle.refs--
20979
- mayRemove.push(domStyle)
20980
- }
20981
- if (newList) {
20982
- styles = listToStyles(parentId, newList)
20983
- addStylesToDom(styles)
20984
- } else {
20985
- styles = []
20986
- }
20987
- for (var i = 0; i < mayRemove.length; i++) {
20988
- var domStyle = mayRemove[i]
20989
- if (domStyle.refs === 0) {
20990
- for (var j = 0; j < domStyle.parts.length; j++) {
20991
- domStyle.parts[j]()
20992
- }
20993
- delete stylesInDom[domStyle.id]
20994
- }
20995
- }
20996
- }
20997
- }
20998
-
20999
- function addStylesToDom (styles /* Array<StyleObject> */) {
21000
- for (var i = 0; i < styles.length; i++) {
21001
- var item = styles[i]
21002
- var domStyle = stylesInDom[item.id]
21003
- if (domStyle) {
21004
- domStyle.refs++
21005
- for (var j = 0; j < domStyle.parts.length; j++) {
21006
- domStyle.parts[j](item.parts[j])
21007
- }
21008
- for (; j < item.parts.length; j++) {
21009
- domStyle.parts.push(addStyle(item.parts[j]))
21010
- }
21011
- if (domStyle.parts.length > item.parts.length) {
21012
- domStyle.parts.length = item.parts.length
21013
- }
21014
- } else {
21015
- var parts = []
21016
- for (var j = 0; j < item.parts.length; j++) {
21017
- parts.push(addStyle(item.parts[j]))
21018
- }
21019
- stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }
21020
- }
21021
- }
21022
- }
21023
-
21024
- function createStyleElement () {
21025
- var styleElement = document.createElement('style')
21026
- styleElement.type = 'text/css'
21027
- head.appendChild(styleElement)
21028
- return styleElement
21029
- }
21030
-
21031
- function addStyle (obj /* StyleObjectPart */) {
21032
- var update, remove
21033
- var styleElement = document.querySelector('style[data-vue-ssr-id~="' + obj.id + '"]')
21034
-
21035
- if (styleElement) {
21036
- if (isProduction) {
21037
- // has SSR styles and in production mode.
21038
- // simply do nothing.
21039
- return noop
21040
- } else {
21041
- // has SSR styles but in dev mode.
21042
- // for some reason Chrome can't handle source map in server-rendered
21043
- // style tags - source maps in <style> only works if the style tag is
21044
- // created and inserted dynamically. So we remove the server rendered
21045
- // styles and inject new ones.
21046
- styleElement.parentNode.removeChild(styleElement)
21047
- }
21048
- }
21049
-
21050
- if (isOldIE) {
21051
- // use singleton mode for IE9.
21052
- var styleIndex = singletonCounter++
21053
- styleElement = singletonElement || (singletonElement = createStyleElement())
21054
- update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)
21055
- remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)
21056
- } else {
21057
- // use multi-style-tag mode in all other cases
21058
- styleElement = createStyleElement()
21059
- update = applyToTag.bind(null, styleElement)
21060
- remove = function () {
21061
- styleElement.parentNode.removeChild(styleElement)
21062
- }
21063
- }
21064
-
21065
- update(obj)
21066
-
21067
- return function updateStyle (newObj /* StyleObjectPart */) {
21068
- if (newObj) {
21069
- if (newObj.css === obj.css &&
21070
- newObj.media === obj.media &&
21071
- newObj.sourceMap === obj.sourceMap) {
21072
- return
21073
- }
21074
- update(obj = newObj)
21075
- } else {
21076
- remove()
21077
- }
21078
- }
21079
- }
21080
-
21081
- var replaceText = (function () {
21082
- var textStore = []
21083
-
21084
- return function (index, replacement) {
21085
- textStore[index] = replacement
21086
- return textStore.filter(Boolean).join('\n')
21087
- }
21088
- })()
21089
-
21090
- function applyToSingletonTag (styleElement, index, remove, obj) {
21091
- var css = remove ? '' : obj.css
21092
-
21093
- if (styleElement.styleSheet) {
21094
- styleElement.styleSheet.cssText = replaceText(index, css)
21095
- } else {
21096
- var cssNode = document.createTextNode(css)
21097
- var childNodes = styleElement.childNodes
21098
- if (childNodes[index]) styleElement.removeChild(childNodes[index])
21099
- if (childNodes.length) {
21100
- styleElement.insertBefore(cssNode, childNodes[index])
21101
- } else {
21102
- styleElement.appendChild(cssNode)
21103
- }
21104
- }
21105
- }
21106
-
21107
- function applyToTag (styleElement, obj) {
21108
- var css = obj.css
21109
- var media = obj.media
21110
- var sourceMap = obj.sourceMap
21111
-
21112
- if (media) {
21113
- styleElement.setAttribute('media', media)
21114
- }
21115
-
21116
- if (sourceMap) {
21117
- // https://developer.chrome.com/devtools/docs/javascript-debugging
21118
- // this makes source maps inside style tags work properly in Chrome
21119
- css += '\n/*# sourceURL=' + sourceMap.sources[0] + ' */'
21120
- // http://stackoverflow.com/a/26603875
21121
- css += '\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'
21122
- }
21123
-
21124
- if (styleElement.styleSheet) {
21125
- styleElement.styleSheet.cssText = css
21126
- } else {
21127
- while (styleElement.firstChild) {
21128
- styleElement.removeChild(styleElement.firstChild)
21129
- }
21130
- styleElement.appendChild(document.createTextNode(css))
21131
- }
21132
- }
21133
-
21134
-
21135
- /***/ }),
21136
- /* 9 */
21137
- /***/ (function(module, exports) {
21138
-
21139
- /**
21140
- * Translates the list format produced by css-loader into something
21141
- * easier to manipulate.
21142
- */
21143
- module.exports = function listToStyles (parentId, list) {
21144
- var styles = []
21145
- var newStyles = {}
21146
- for (var i = 0; i < list.length; i++) {
21147
- var item = list[i]
21148
- var id = item[0]
21149
- var css = item[1]
21150
- var media = item[2]
21151
- var sourceMap = item[3]
21152
- var part = {
21153
- id: parentId + ':' + i,
21154
- css: css,
21155
- media: media,
21156
- sourceMap: sourceMap
21157
- }
21158
- if (!newStyles[id]) {
21159
- styles.push(newStyles[id] = { id: id, parts: [part] })
21160
- } else {
21161
- newStyles[id].parts.push(part)
21162
- }
21163
- }
21164
- return styles
21165
- }
21166
-
21167
-
21168
- /***/ })
21169
- /******/ ]);
21170
- });
21171
- //# sourceMappingURL=index.js.map
21172
-
21173
- /***/ })
21174
- /******/ ]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/bundle.min.js CHANGED
@@ -3,19 +3,19 @@
3
  * (c) 2014-2019 Evan You
4
  * Released under the MIT License.
5
  */
6
- var _a=Object.freeze({}),za=Object.prototype.toString,Ca=h("slot,component",!0),$a=h("key,ref,slot,slot-scope,is"),Aa=Object.prototype.hasOwnProperty,ja=/-(\w)/g,Oa=g(function(t){return t.replace(ja,function(t,e){return e?e.toUpperCase():""})}),Sa=g(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),Ta=/\B([A-Z])/g,Ea=g(function(t){return t.replace(Ta,"-$1").toLowerCase()}),Da=Function.prototype.bind?w:x,Ia=function(t,e,n){return!1},Pa=function(t){return t},Ma="data-server-rendered",Na=["component","directive","filter"],La=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],Fa={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:Ia,isReservedAttr:Ia,isUnknownElement:Ia,getTagNamespace:z,parsePlatformTagName:Pa,mustUseProp:Ia,async:!0,_lifecycleHooks:La},Ra="a-zA-Z·À-ÖØ-öø-ͽͿ-῿‌-‍‿-⁀⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�",Ba=new RegExp("[^"+Ra+".$_\\d]"),Ga="__proto__"in{},Ua="undefined"!=typeof window,qa="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,Ha=qa&&WXEnvironment.platform.toLowerCase(),Wa=Ua&&window.navigator.userAgent.toLowerCase(),Ka=Wa&&/msie|trident/.test(Wa),Va=Wa&&Wa.indexOf("msie 9.0")>0,Ja=Wa&&Wa.indexOf("edge/")>0,Xa=(Wa&&Wa.indexOf("android"),Wa&&/iphone|ipad|ipod|ios/.test(Wa)||"ios"===Ha),Ya=(Wa&&/chrome\/\d+/.test(Wa),Wa&&/phantomjs/.test(Wa),Wa&&Wa.match(/firefox\/(\d+)/)),Qa={}.watch,Za=!1;if(Ua)try{var tr={};Object.defineProperty(tr,"passive",{get:function(){Za=!0}}),window.addEventListener("test-passive",null,tr)}catch(t){}var er,nr,or=function(){return void 0===er&&(er=!Ua&&!qa&&void 0!==t&&(t.process&&"server"===t.process.env.VUE_ENV)),er},ir=Ua&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,ar="undefined"!=typeof Symbol&&T(Symbol)&&"undefined"!=typeof Reflect&&T(Reflect.ownKeys);nr="undefined"!=typeof Set&&T(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var rr=z,sr=0,pr=function(){this.id=sr++,this.subs=[]};pr.prototype.addSub=function(t){this.subs.push(t)},pr.prototype.removeSub=function(t){b(this.subs,t)},pr.prototype.depend=function(){pr.target&&pr.target.addDep(this)},pr.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;e<n;e++)t[e].update()},pr.target=null;var lr=[],cr=function(t,e,n,o,i,a,r,s){this.tag=t,this.data=e,this.children=n,this.text=o,this.elm=i,this.ns=void 0,this.context=a,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=r,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},dr={child:{configurable:!0}};dr.child.get=function(){return this.componentInstance},Object.defineProperties(cr.prototype,dr);var mr=function(t){void 0===t&&(t="");var e=new cr;return e.text=t,e.isComment=!0,e},fr=Array.prototype,ur=Object.create(fr);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(t){var e=fr[t];O(ur,t,function(){for(var n=[],o=arguments.length;o--;)n[o]=arguments[o];var i,a=e.apply(this,n),r=this.__ob__;switch(t){case"push":case"unshift":i=n;break;case"splice":i=n.slice(2)}return i&&r.observeArray(i),r.dep.notify(),a})});var hr=Object.getOwnPropertyNames(ur),br=!0,vr=function(t){this.value=t,this.dep=new pr,this.vmCount=0,O(t,"__ob__",this),Array.isArray(t)?(Ga?N(t,ur):L(t,ur,hr),this.observeArray(t)):this.walk(t)};vr.prototype.walk=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)R(t,e[n])},vr.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)F(t[e])};var gr=Fa.optionMergeStrategies;gr.data=function(t,e,n){return n?H(t,e,n):e&&"function"!=typeof e?t:H(t,e)},La.forEach(function(t){gr[t]=W}),Na.forEach(function(t){gr[t+"s"]=V}),gr.watch=function(t,e,n,o){if(t===Qa&&(t=void 0),e===Qa&&(e=void 0),!e)return Object.create(t||null);if(!t)return e;var i={};k(i,t);for(var a in e){var r=i[a],s=e[a];r&&!Array.isArray(r)&&(r=[r]),i[a]=r?r.concat(s):Array.isArray(s)?s:[s]}return i},gr.props=gr.methods=gr.inject=gr.computed=function(t,e,n,o){if(!t)return e;var i=Object.create(null);return k(i,t),e&&k(i,e),i},gr.provide=H;var xr,wr=function(t,e){return void 0===e?t:e},yr=!1,kr=[],_r=!1;if("undefined"!=typeof Promise&&T(Promise)){var zr=Promise.resolve();xr=function(){zr.then(lt),Xa&&setTimeout(z)},yr=!0}else if(Ka||"undefined"==typeof MutationObserver||!T(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())xr=void 0!==n&&T(n)?function(){n(lt)}:function(){setTimeout(lt,0)};else{var Cr=1,$r=new MutationObserver(lt),Ar=document.createTextNode(String(Cr));$r.observe(Ar,{characterData:!0}),xr=function(){Cr=(Cr+1)%2,Ar.data=String(Cr)},yr=!0}var jr=new nr,Or=g(function(t){var e="&"===t.charAt(0);t=e?t.slice(1):t;var n="~"===t.charAt(0);t=n?t.slice(1):t;var o="!"===t.charAt(0);return t=o?t.slice(1):t,{name:t,once:n,capture:o,passive:e}});qt(Ht.prototype);var Sr,Tr={init:function(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){var n=t;Tr.prepatch(n,n)}else{(t.componentInstance=Xt(t,Mr)).$mount(e?t.elm:void 0,e)}},prepatch:function(t,e){var n=e.componentOptions;ge(e.componentInstance=t.componentInstance,n.propsData,n.listeners,e,n.children)},insert:function(t){var e=t.context,n=t.componentInstance;n._isMounted||(n._isMounted=!0,ke(n,"mounted")),t.data.keepAlive&&(e._isMounted?$e(n):we(n,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?ye(e,!0):e.$destroy())}},Er=Object.keys(Tr),Dr=1,Ir=2,Pr=null,Mr=null,Nr=[],Lr=[],Fr={},Rr=!1,Br=!1,Gr=0,Ur=0,qr=Date.now;Ua&&qr()>document.createEvent("Event").timeStamp&&(qr=function(){return performance.now()});var Hr=0,Wr=function(t,e,n,o,i){this.vm=t,i&&(t._watcher=this),t._watchers.push(this),o?(this.deep=!!o.deep,this.user=!!o.user,this.lazy=!!o.lazy,this.sync=!!o.sync,this.before=o.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Hr,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new nr,this.newDepIds=new nr,this.expression="","function"==typeof e?this.getter=e:(this.getter=S(e),this.getter||(this.getter=z)),this.value=this.lazy?void 0:this.get()};Wr.prototype.get=function(){E(this);var t,e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;at(t,e,'getter for watcher "'+this.expression+'"')}finally{this.deep&&dt(t),D(),this.cleanupDeps()}return t},Wr.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},Wr.prototype.cleanupDeps=function(){for(var t=this.deps.length;t--;){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},Wr.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():je(this)},Wr.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||p(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){at(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},Wr.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Wr.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},Wr.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||b(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var Kr={enumerable:!0,configurable:!0,get:z,set:z},Vr={lazy:!0},Jr=0;!function(t){t.prototype._init=function(t){var e=this;e._uid=Jr++,e._isVue=!0,t&&t._isComponent?Be(e,t):e.$options=Q(Ge(e.constructor),t||{},e),e._renderProxy=e,e._self=e,be(e),ce(e),ie(e),ke(e,"beforeCreate"),_t(e),Se(e),kt(e),ke(e,"created"),e.$options.el&&e.$mount(e.$options.el)}}(qe),function(t){var e={};e.get=function(){return this._data};var n={};n.get=function(){return this._props},Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=B,t.prototype.$delete=G,t.prototype.$watch=function(t,e,n){var o=this;if(l(e))return Re(o,t,e,n);n=n||{},n.user=!0;var i=new Wr(o,t,e,n);if(n.immediate)try{e.call(o,i.value)}catch(t){at(t,o,'callback for immediate watcher "'+i.expression+'"')}return function(){i.teardown()}}}(qe),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var o=this;if(Array.isArray(t))for(var i=0,a=t.length;i<a;i++)o.$on(t[i],n);else(o._events[t]||(o._events[t]=[])).push(n),e.test(t)&&(o._hasHookEvent=!0);return o},t.prototype.$once=function(t,e){function n(){o.$off(t,n),e.apply(o,arguments)}var o=this;return n.fn=e,o.$on(t,n),o},t.prototype.$off=function(t,e){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(t)){for(var o=0,i=t.length;o<i;o++)n.$off(t[o],e);return n}var a=n._events[t];if(!a)return n;if(!e)return n._events[t]=null,n;for(var r,s=a.length;s--;)if((r=a[s])===e||r.fn===e){a.splice(s,1);break}return n},t.prototype.$emit=function(t){var e=this,n=e._events[t];if(n){n=n.length>1?y(n):n;for(var o=y(arguments,1),i='event handler for "'+t+'"',a=0,r=n.length;a<r;a++)rt(n[a],e,o,e,i)}return e}}(qe),function(t){t.prototype._update=function(t,e){var n=this,o=n.$el,i=n._vnode,a=he(n);n._vnode=t,n.$el=i?n.__patch__(i,t):n.__patch__(n.$el,t,e,!1),a(),o&&(o.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},t.prototype.$forceUpdate=function(){var t=this;t._watcher&&t._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){ke(t,"beforeDestroy"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||b(e.$children,t),t._watcher&&t._watcher.teardown();for(var n=t._watchers.length;n--;)t._watchers[n].teardown();t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),ke(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}}(qe),function(t){qt(t.prototype),t.prototype.$nextTick=function(t){return ct(t,this)},t.prototype._render=function(){var t=this,e=t.$options,n=e.render,o=e._parentVnode;o&&(t.$scopedSlots=At(o.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode=o;var i;try{Pr=t,i=n.call(t._renderProxy,t.$createElement)}catch(e){at(e,t,"render"),i=t._vnode}finally{Pr=null}return Array.isArray(i)&&1===i.length&&(i=i[0]),i instanceof cr||(i=mr()),i.parent=o,i}}(qe);var Xr=[String,RegExp,Array],Yr={name:"keep-alive",abstract:!0,props:{include:Xr,exclude:Xr,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)tn(this.cache,t,this.keys)},mounted:function(){var t=this;this.$watch("include",function(e){Ze(t,function(t){return Qe(e,t)})}),this.$watch("exclude",function(e){Ze(t,function(t){return!Qe(e,t)})})},render:function(){var t=this.$slots.default,e=le(t),n=e&&e.componentOptions;if(n){var o=Ye(n),i=this,a=i.include,r=i.exclude;if(a&&(!o||!Qe(a,o))||r&&o&&Qe(r,o))return e;var s=this,p=s.cache,l=s.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):e.key;p[c]?(e.componentInstance=p[c].componentInstance,b(l,c),l.push(c)):(p[c]=e,l.push(c),this.max&&l.length>parseInt(this.max)&&tn(p,l[0],l,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}},Qr={KeepAlive:Yr};!function(t){var e={};e.get=function(){return Fa},Object.defineProperty(t,"config",e),t.util={warn:rr,extend:k,mergeOptions:Q,defineReactive:R},t.set=B,t.delete=G,t.nextTick=ct,t.observable=function(t){return F(t),t},t.options=Object.create(null),Na.forEach(function(e){t.options[e+"s"]=Object.create(null)}),t.options._base=t,k(t.options.components,Qr),He(t),We(t),Ke(t),Xe(t)}(qe),Object.defineProperty(qe.prototype,"$isServer",{get:or}),Object.defineProperty(qe.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(qe,"FunctionalRenderContext",{value:Ht}),qe.version="2.6.6";var Zr,ts,es,ns,os,is,as,rs,ss,ps,ls=h("style,class"),cs=h("input,textarea,option,select,progress"),ds=function(t,e,n){return"value"===n&&cs(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},ms=h("contenteditable,draggable,spellcheck"),fs=h("events,caret,typing,plaintext-only"),us=function(t,e){return xs(e)||"false"===e?"false":"contenteditable"===t&&fs(e)?e:"true"},hs=h("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),bs="http://www.w3.org/1999/xlink",vs=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},gs=function(t){return vs(t)?t.slice(6,t.length):""},xs=function(t){return null==t||!1===t},ws={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},ys=h("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),ks=h("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),_s=function(t){return"pre"===t},zs=function(t){return ys(t)||ks(t)},Cs=Object.create(null),$s=h("text,number,password,search,email,tel,url"),As=Object.freeze({createElement:mn,createElementNS:fn,createTextNode:un,createComment:hn,insertBefore:bn,removeChild:vn,appendChild:gn,parentNode:xn,nextSibling:wn,tagName:yn,setTextContent:kn,setStyleScope:_n}),js={create:function(t,e){zn(e)},update:function(t,e){t.data.ref!==e.data.ref&&(zn(t,!0),zn(e))},destroy:function(t){zn(t,!0)}},Os=new cr("",{},[]),Ss=["create","activate","update","remove","destroy"],Ts={create:jn,update:jn,destroy:function(t){jn(t,Os)}},Es=Object.create(null),Ds=[js,Ts],Is={create:Dn,update:Dn},Ps={create:Mn,update:Mn},Ms=/[\w).+\-_$\]]/,Ns="__r",Ls="__c",Fs=yr&&!(Ya&&Number(Ya[1])<=53),Rs={create:bo,update:bo},Bs={create:vo,update:vo},Gs=g(function(t){var e={},n=/;(?![^(]*\))/g,o=/:(.+)/;return t.split(n).forEach(function(t){if(t){var n=t.split(o);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}),Us=/^--/,qs=/\s*!important$/,Hs=function(t,e,n){if(Us.test(e))t.style.setProperty(e,n);else if(qs.test(n))t.style.setProperty(Ea(e),n.replace(qs,""),"important");else{var o=Ks(e);if(Array.isArray(n))for(var i=0,a=n.length;i<a;i++)t.style[o]=n[i];else t.style[o]=n}},Ws=["Webkit","Moz","ms"],Ks=g(function(t){if(ps=ps||document.createElement("div").style,"filter"!==(t=Oa(t))&&t in ps)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<Ws.length;n++){var o=Ws[n]+e;if(o in ps)return o}}),Vs={create:zo,update:zo},Js=/\s+/,Xs=g(function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}}),Ys=Ua&&!Va,Qs="transition",Zs="animation",tp="transition",ep="transitionend",np="animation",op="animationend";Ys&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(tp="WebkitTransition",ep="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(np="WebkitAnimation",op="webkitAnimationEnd"));var ip=Ua?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()},ap=/\b(transform|all)(,|$)/,rp=Ua?{create:Fo,activate:Fo,remove:function(t,e){!0!==t.data.show?Mo(t,e):e()}}:{},sp=[Is,Ps,Rs,Bs,Vs,rp],pp=sp.concat(Ds),lp=function(t){function e(t){return new cr(T.tagName(t).toLowerCase(),{},[],void 0,t)}function n(t,e){function n(){0==--n.listeners&&r(t)}return n.listeners=e,n}function r(t){var e=T.parentNode(t);i(e)&&T.removeChild(e,t)}function p(t,e,n,o,r,s,p){if(i(t.elm)&&i(s)&&(t=s[p]=P(t)),t.isRootInsert=!r,!l(t,e,n,o)){var c=t.data,d=t.children,u=t.tag;i(u)?(t.elm=t.ns?T.createElementNS(t.ns,u):T.createElement(u,t),v(t),f(t,d,e),i(c)&&b(t,e),m(n,t.elm,o)):a(t.isComment)?(t.elm=T.createComment(t.text),m(n,t.elm,o)):(t.elm=T.createTextNode(t.text),m(n,t.elm,o))}}function l(t,e,n,o){var r=t.data;if(i(r)){var s=i(t.componentInstance)&&r.keepAlive;if(i(r=r.hook)&&i(r=r.init)&&r(t,!1),i(t.componentInstance))return c(t,e),m(n,t.elm,o),a(s)&&d(t,e,n,o),!0}}function c(t,e){i(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,u(t)?(b(t,e),v(t)):(zn(t),e.push(t))}function d(t,e,n,o){for(var a,r=t;r.componentInstance;)if(r=r.componentInstance._vnode,i(a=r.data)&&i(a=a.transition)){for(a=0;a<O.activate.length;++a)O.activate[a](Os,r);e.push(r);break}m(n,t.elm,o)}function m(t,e,n){i(t)&&(i(n)?T.parentNode(n)===t&&T.insertBefore(t,e,n):T.appendChild(t,e))}function f(t,e,n){if(Array.isArray(e))for(var o=0;o<e.length;++o)p(e[o],n,t.elm,null,!0,e,o);else s(t.text)&&T.appendChild(t.elm,T.createTextNode(String(t.text)))}function u(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return i(t.tag)}function b(t,e){for(var n=0;n<O.create.length;++n)O.create[n](Os,t);A=t.data.hook,i(A)&&(i(A.create)&&A.create(Os,t),i(A.insert)&&e.push(t))}function v(t){var e;if(i(e=t.fnScopeId))T.setStyleScope(t.elm,e);else for(var n=t;n;)i(e=n.context)&&i(e=e.$options._scopeId)&&T.setStyleScope(t.elm,e),n=n.parent;i(e=Mr)&&e!==t.context&&e!==t.fnContext&&i(e=e.$options._scopeId)&&T.setStyleScope(t.elm,e)}function g(t,e,n,o,i,a){for(;o<=i;++o)p(n[o],a,t,e,!1,n,o)}function x(t){var e,n,o=t.data;if(i(o))for(i(e=o.hook)&&i(e=e.destroy)&&e(t),e=0;e<O.destroy.length;++e)O.destroy[e](t);if(i(e=t.children))for(n=0;n<t.children.length;++n)x(t.children[n])}function w(t,e,n,o){for(;n<=o;++n){var a=e[n];i(a)&&(i(a.tag)?(y(a),x(a)):r(a.elm))}}function y(t,e){if(i(e)||i(t.data)){var o,a=O.remove.length+1;for(i(e)?e.listeners+=a:e=n(t.elm,a),i(o=t.componentInstance)&&i(o=o._vnode)&&i(o.data)&&y(o,e),o=0;o<O.remove.length;++o)O.remove[o](t,e);i(o=t.data.hook)&&i(o=o.remove)?o(t,e):e()}else r(t.elm)}function k(t,e,n,a,r){for(var s,l,c,d,m=0,f=0,u=e.length-1,h=e[0],b=e[u],v=n.length-1,x=n[0],y=n[v],k=!r;m<=u&&f<=v;)o(h)?h=e[++m]:o(b)?b=e[--u]:Cn(h,x)?(z(h,x,a,n,f),h=e[++m],x=n[++f]):Cn(b,y)?(z(b,y,a,n,v),b=e[--u],y=n[--v]):Cn(h,y)?(z(h,y,a,n,v),k&&T.insertBefore(t,h.elm,T.nextSibling(b.elm)),h=e[++m],y=n[--v]):Cn(b,x)?(z(b,x,a,n,f),k&&T.insertBefore(t,b.elm,h.elm),b=e[--u],x=n[++f]):(o(s)&&(s=An(e,m,u)),l=i(x.key)?s[x.key]:_(x,e,m,u),o(l)?p(x,a,t,h.elm,!1,n,f):(c=e[l],Cn(c,x)?(z(c,x,a,n,f),e[l]=void 0,k&&T.insertBefore(t,c.elm,h.elm)):p(x,a,t,h.elm,!1,n,f)),x=n[++f]);m>u?(d=o(n[v+1])?null:n[v+1].elm,g(t,d,n,f,v,a)):f>v&&w(t,e,m,u)}function _(t,e,n,o){for(var a=n;a<o;a++){var r=e[a];if(i(r)&&Cn(t,r))return a}}function z(t,e,n,r,s,p){if(t!==e){i(e.elm)&&i(r)&&(e=r[s]=P(e));var l=e.elm=t.elm;if(a(t.isAsyncPlaceholder))return void(i(e.asyncFactory.resolved)?$(t.elm,e,n):e.isAsyncPlaceholder=!0);if(a(e.isStatic)&&a(t.isStatic)&&e.key===t.key&&(a(e.isCloned)||a(e.isOnce)))return void(e.componentInstance=t.componentInstance);var c,d=e.data;i(d)&&i(c=d.hook)&&i(c=c.prepatch)&&c(t,e);var m=t.children,f=e.children;if(i(d)&&u(e)){for(c=0;c<O.update.length;++c)O.update[c](t,e);i(c=d.hook)&&i(c=c.update)&&c(t,e)}o(e.text)?i(m)&&i(f)?m!==f&&k(l,m,f,n,p):i(f)?(i(t.text)&&T.setTextContent(l,""),g(l,null,f,0,f.length-1,n)):i(m)?w(l,m,0,m.length-1):i(t.text)&&T.setTextContent(l,""):t.text!==e.text&&T.setTextContent(l,e.text),i(d)&&i(c=d.hook)&&i(c=c.postpatch)&&c(t,e)}}function C(t,e,n){if(a(n)&&i(t.parent))t.parent.data.pendingInsert=e;else for(var o=0;o<e.length;++o)e[o].data.hook.insert(e[o])}function $(t,e,n,o){var r,s=e.tag,p=e.data,l=e.children;if(o=o||p&&p.pre,e.elm=t,a(e.isComment)&&i(e.asyncFactory))return e.isAsyncPlaceholder=!0,!0;if(i(p)&&(i(r=p.hook)&&i(r=r.init)&&r(e,!0),i(r=e.componentInstance)))return c(e,n),!0;if(i(s)){if(i(l))if(t.hasChildNodes())if(i(r=p)&&i(r=r.domProps)&&i(r=r.innerHTML)){if(r!==t.innerHTML)return!1}else{for(var d=!0,m=t.firstChild,u=0;u<l.length;u++){if(!m||!$(m,l[u],n,o)){d=!1;break}m=m.nextSibling}if(!d||m)return!1}else f(e,l,n);if(i(p)){var h=!1;for(var v in p)if(!E(v)){h=!0,b(e,n);break}!h&&p.class&&dt(p.class)}}else t.data!==e.text&&(t.data=e.text);return!0}var A,j,O={},S=t.modules,T=t.nodeOps;for(A=0;A<Ss.length;++A)for(O[Ss[A]]=[],j=0;j<S.length;++j)i(S[j][Ss[A]])&&O[Ss[A]].push(S[j][Ss[A]]);var E=h("attrs,class,staticClass,staticStyle,key");return function(t,n,r,s){if(o(n))return void(i(t)&&x(t));var l=!1,c=[];if(o(t))l=!0,p(n,c);else{var d=i(t.nodeType);if(!d&&Cn(t,n))z(t,n,c,null,null,s);else{if(d){if(1===t.nodeType&&t.hasAttribute(Ma)&&(t.removeAttribute(Ma),r=!0),a(r)&&$(t,n,c))return C(n,c,!0),t;t=e(t)}var m=t.elm,f=T.parentNode(m);if(p(n,c,m._leaveCb?null:f,T.nextSibling(m)),i(n.parent))for(var h=n.parent,b=u(n);h;){for(var v=0;v<O.destroy.length;++v)O.destroy[v](h);if(h.elm=n.elm,b){for(var g=0;g<O.create.length;++g)O.create[g](Os,h);var y=h.data.hook.insert;if(y.merged)for(var k=1;k<y.fns.length;k++)y.fns[k]()}else zn(h);h=h.parent}i(f)?w(f,[t],0,0):i(t.tag)&&x(t)}}return C(n,c,l),n.elm}}({nodeOps:As,modules:pp});Va&&document.addEventListener("selectionchange",function(){var t=document.activeElement;t&&t.vmodel&&Wo(t,"input")});var cp={inserted:function(t,e,n,o){"select"===n.tag?(o.elm&&!o.elm._vOptions?ht(n,"postpatch",function(){cp.componentUpdated(t,e,n)}):Ro(t,e,n.context),t._vOptions=[].map.call(t.options,Uo)):("textarea"===n.tag||$s(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",qo),t.addEventListener("compositionend",Ho),t.addEventListener("change",Ho),Va&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){Ro(t,e,n.context);var o=t._vOptions,i=t._vOptions=[].map.call(t.options,Uo);if(i.some(function(t,e){return!C(t,o[e])})){(t.multiple?e.value.some(function(t){return Go(t,i)}):e.value!==e.oldValue&&Go(e.value,i))&&Wo(t,"change")}}}},dp={bind:function(t,e,n){var o=e.value;n=Ko(n);var i=n.data&&n.data.transition,a=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;o&&i?(n.data.show=!0,Po(n,function(){t.style.display=a})):t.style.display=o?a:"none"},update:function(t,e,n){var o=e.value;!o!=!e.oldValue&&(n=Ko(n),n.data&&n.data.transition?(n.data.show=!0,o?Po(n,function(){t.style.display=t.__vOriginalDisplay}):Mo(n,function(){t.style.display="none"})):t.style.display=o?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,o,i){i||(t.style.display=t.__vOriginalDisplay)}},mp={model:cp,show:dp},fp={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]},up=function(t){return t.tag||pe(t)},hp=function(t){return"show"===t.name},bp={name:"transition",props:fp,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(up),n.length)){var o=this.mode,i=n[0];if(Yo(this.$vnode))return i;var a=Vo(i);if(!a)return i;if(this._leaving)return Xo(t,i);var r="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?r+"comment":r+a.tag:s(a.key)?0===String(a.key).indexOf(r)?a.key:r+a.key:a.key;var p=(a.data||(a.data={})).transition=Jo(this),l=this._vnode,c=Vo(l);if(a.data.directives&&a.data.directives.some(hp)&&(a.data.show=!0),c&&c.data&&!Qo(a,c)&&!pe(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var d=c.data.transition=k({},p);if("out-in"===o)return this._leaving=!0,ht(d,"afterLeave",function(){e._leaving=!1,e.$forceUpdate()}),Xo(t,i);if("in-out"===o){if(pe(a))return l;var m,f=function(){m()};ht(p,"afterEnter",f),ht(p,"enterCancelled",f),ht(d,"delayLeave",function(t){m=t})}}return i}}},vp=k({tag:String,moveClass:String},fp);delete vp.mode;var gp={props:vp,beforeMount:function(){var t=this,e=this._update;this._update=function(n,o){var i=he(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,i(),e.call(t,n,o)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),o=this.prevChildren=this.children,i=this.$slots.default||[],a=this.children=[],r=Jo(this),s=0;s<i.length;s++){var p=i[s];if(p.tag)if(null!=p.key&&0!==String(p.key).indexOf("__vlist"))a.push(p),n[p.key]=p,(p.data||(p.data={})).transition=r;else;}if(o){for(var l=[],c=[],d=0;d<o.length;d++){var m=o[d];m.data.transition=r,m.data.pos=m.elm.getBoundingClientRect(),n[m.key]?l.push(m):c.push(m)}this.kept=t(e,null,l),this.removed=c}return t(e,null,a)},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,e)&&(t.forEach(Zo),t.forEach(ti),t.forEach(ei),this._reflow=document.body.offsetHeight,t.forEach(function(t){if(t.data.moved){var n=t.elm,o=n.style;Oo(n,e),o.transform=o.WebkitTransform=o.transitionDuration="",n.addEventListener(ep,n._moveCb=function t(o){o&&o.target!==n||o&&!/transform$/.test(o.propertyName)||(n.removeEventListener(ep,t),n._moveCb=null,So(n,e))})}}))},methods:{hasMove:function(t,e){if(!Ys)return!1;if(this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach(function(t){$o(n,t)}),Co(n,e),n.style.display="none",this.$el.appendChild(n);var o=Eo(n);return this.$el.removeChild(n),this._hasMove=o.hasTransform}}},xp={Transition:bp,TransitionGroup:gp};qe.config.mustUseProp=ds,qe.config.isReservedTag=zs,qe.config.isReservedAttr=ls,qe.config.getTagNamespace=ln,qe.config.isUnknownElement=cn,k(qe.options.directives,mp),k(qe.options.components,xp),qe.prototype.__patch__=Ua?lp:z,qe.prototype.$mount=function(t,e){return t=t&&Ua?dn(t):void 0,ve(this,t,e)},Ua&&setTimeout(function(){Fa.devtools&&ir&&ir.emit("init",qe)},0);var wp,yp,kp,_p,zp,Cp,$p,Ap,jp,Op,Sp,Tp,Ep,Dp=/\{\{((?:.|\r?\n)+?)\}\}/g,Ip=/[-.*+?^${}()|[\]\/\\]/g,Pp=g(function(t){var e=t[0].replace(Ip,"\\$&"),n=t[1].replace(Ip,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")}),Mp={staticKeys:["staticClass"],transformNode:oi,genData:ii},Np={staticKeys:["staticStyle"],transformNode:ai,genData:ri},Lp={decode:function(t){return wp=wp||document.createElement("div"),wp.innerHTML=t,wp.textContent}},Fp=h("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Rp=h("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Bp=h("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Gp=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Up=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,qp="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+Ra+"]*",Hp="((?:"+qp+"\\:)?"+qp+")",Wp=new RegExp("^<"+Hp),Kp=/^\s*(\/?)>/,Vp=new RegExp("^<\\/"+Hp+"[^>]*>"),Jp=/^<!DOCTYPE [^>]+>/i,Xp=/^<!\--/,Yp=/^<!\[/,Qp=h("script,style,textarea",!0),Zp={},tl={"&lt;":"<","&gt;":">","&quot;":'"',"&amp;":"&","&#10;":"\n","&#9;":"\t","&#39;":"'"},el=/&(?:lt|gt|quot|amp|#39);/g,nl=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,ol=h("pre,textarea",!0),il=function(t,e){return t&&ol(t)&&"\n"===e[0]},al=/^@|^v-on:/,rl=/^v-|^@|^:/,sl=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,pl=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,ll=/^\(|\)$/g,cl=/^\[.*\]$/,dl=/:(.*)$/,ml=/^:|^\.|^v-bind:/,fl=/\.[^.]+/g,ul=/^v-slot(:|$)|^#/,hl=/[\r\n]/,bl=/\s+/g,vl=g(Lp.decode),gl="_empty_",xl=/^xmlns:NS\d+/,wl=/^NS\d+:/,yl={preTransformNode:Ii},kl=[Mp,Np,yl],_l={model:ro,text:Mi,html:Ni},zl={expectHTML:!0,modules:kl,directives:_l,isPreTag:_s,isUnaryTag:Fp,mustUseProp:ds,canBeLeftOpenTag:Rp,isReservedTag:zs,getTagNamespace:ln,staticKeys:function(t){return t.reduce(function(t,e){return t.concat(e.staticKeys||[])},[]).join(",")}(kl)},Cl=g(Fi),$l=/^([\w$_]+|\([^)]*?\))\s*=>|^function\s*\(/,Al=/\([^)]*?\);*$/,jl=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Ol={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Sl={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Tl=function(t){return"if("+t+")return null;"},El={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Tl("$event.target !== $event.currentTarget"),ctrl:Tl("!$event.ctrlKey"),shift:Tl("!$event.shiftKey"),alt:Tl("!$event.altKey"),meta:Tl("!$event.metaKey"),left:Tl("'button' in $event && $event.button !== 0"),middle:Tl("'button' in $event && $event.button !== 1"),right:Tl("'button' in $event && $event.button !== 2")},Dl={on:Vi,bind:Ji,cloak:z},Il=function(t){this.options=t,this.warn=t.warn||Fn,this.transforms=Rn(t.modules,"transformCode"),this.dataGenFns=Rn(t.modules,"genData"),this.directives=k(k({},Dl),t.directives);var e=t.isReservedTag||Ia;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1},Pl=(new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),function(t){return function(e){function n(n,o){var i=Object.create(e),a=[],r=[],s=function(t,e,n){(n?r:a).push(t)};if(o){o.modules&&(i.modules=(e.modules||[]).concat(o.modules)),o.directives&&(i.directives=k(Object.create(e.directives||null),o.directives));for(var p in o)"modules"!==p&&"directives"!==p&&(i[p]=o[p])}i.warn=s;var l=t(n.trim(),i);return l.errors=a,l.tips=r,l}return{compile:n,compileToFunctions:wa(n)}}}(function(t,e){var n=ci(t.trim(),e);!1!==e.optimize&&Li(n,e);var o=Xi(n,e);return{ast:n,render:o.render,staticRenderFns:o.staticRenderFns}})),Ml=Pl(zl),Nl=(Ml.compile,Ml.compileToFunctions),Ll=!!Ua&&ya(!1),Fl=!!Ua&&ya(!0),Rl=g(function(t){var e=dn(t);return e&&e.innerHTML}),Bl=qe.prototype.$mount;qe.prototype.$mount=function(t,e){if((t=t&&dn(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var o=n.template;if(o)if("string"==typeof o)"#"===o.charAt(0)&&(o=Rl(o));else{if(!o.nodeType)return this;o=o.innerHTML}else t&&(o=ka(t));if(o){var i=Nl(o,{outputSourceRange:!1,shouldDecodeNewlines:Ll,shouldDecodeNewlinesForHref:Fl,delimiters:n.delimiters,comments:n.comments},this),a=i.render,r=i.staticRenderFns;n.render=a,n.staticRenderFns=r}}return Bl.call(this,t,e)},qe.compile=Nl,e.default=qe}.call(e,n(2),n(7).setImmediate)},function(t,e,n){var o,i;o=n(28),i=n(29),t.exports=o||{},t.exports.__esModule&&(t.exports=t.exports.default),i&&(("function"==typeof t.exports?t.exports.options:t.exports).template=i)},function(t,e,n){"use strict";function o(t){this.state=st,this.value=void 0,this.deferred=[];var e=this;try{t(function(t){e.resolve(t)},function(t){e.reject(t)})}catch(t){e.reject(t)}}function i(t,e){t instanceof Promise?this.promise=t:this.promise=new Promise(t.bind(e)),this.context=e}function a(t){var e=t.config,n=t.nextTick;ct=n,ht=e.debug||!e.silent}function r(t){"undefined"!=typeof console&&ht&&console.warn("[VueResource warn]: "+t)}function s(t){"undefined"!=typeof console&&console.error(t)}function p(t,e){return ct(t,e)}function l(t){return t?t.replace(/^\s*|\s*$/g,""):""}function c(t,e){return t&&void 0===e?t.replace(/\s+$/,""):t&&e?t.replace(new RegExp("["+e+"]+$"),""):t}function d(t){return t?t.toLowerCase():""}function m(t){return t?t.toUpperCase():""}function f(t){return"string"==typeof t}function u(t){return"function"==typeof t}function h(t){return null!==t&&"object"==typeof t}function b(t){return h(t)&&Object.getPrototypeOf(t)==Object.prototype}function v(t){return"undefined"!=typeof Blob&&t instanceof Blob}function g(t){return"undefined"!=typeof FormData&&t instanceof FormData}function x(t,e,n){var o=i.resolve(t);return arguments.length<2?o:o.then(e,n)}function w(t,e,n){return n=n||{},u(n)&&(n=n.call(e)),k(t.bind({$vm:e,$options:n}),t,{$options:n})}function y(t,e){var n,o;if(vt(t))for(n=0;n<t.length;n++)e.call(t[n],t[n],n);else if(h(t))for(o in t)mt.call(t,o)&&e.call(t[o],t[o],o);return t}function k(t){return ut.call(arguments,1).forEach(function(e){C(t,e,!0)}),t}function _(t){return ut.call(arguments,1).forEach(function(e){for(var n in e)void 0===t[n]&&(t[n]=e[n])}),t}function z(t){return ut.call(arguments,1).forEach(function(e){C(t,e)}),t}function C(t,e,n){for(var o in e)n&&(b(e[o])||vt(e[o]))?(b(e[o])&&!b(t[o])&&(t[o]={}),vt(e[o])&&!vt(t[o])&&(t[o]=[]),C(t[o],e[o],n)):void 0!==e[o]&&(t[o]=e[o])}function $(t,e){var n=e(t);return f(t.root)&&!/^(https?:)?\//.test(n)&&(n=c(t.root,"/")+"/"+n),n}function A(t,e){var n=Object.keys(M.options.params),o={},i=e(t);return y(t.params,function(t,e){-1===n.indexOf(e)&&(o[e]=t)}),o=M.params(o),o&&(i+=(-1==i.indexOf("?")?"?":"&")+o),i}function j(t,e,n){var o=O(t),i=o.expand(e);return n&&n.push.apply(n,o.vars),i}function O(t){var e=["+","#",".","/",";","?","&"],n=[];return{vars:n,expand:function(o){return t.replace(/\{([^{}]+)\}|([^{}]+)/g,function(t,i,a){if(i){var r=null,s=[];if(-1!==e.indexOf(i.charAt(0))&&(r=i.charAt(0),i=i.substr(1)),i.split(/,/g).forEach(function(t){var e=/([^:*]*)(?::(\d+)|(\*))?/.exec(t);s.push.apply(s,S(o,r,e[1],e[2]||e[3])),n.push(e[1])}),r&&"+"!==r){var p=",";return"?"===r?p="&":"#"!==r&&(p=r),(0!==s.length?r:"")+s.join(p)}return s.join(",")}return I(a)})}}}function S(t,e,n,o){var i=t[n],a=[];if(T(i)&&""!==i)if("string"==typeof i||"number"==typeof i||"boolean"==typeof i)i=i.toString(),o&&"*"!==o&&(i=i.substring(0,parseInt(o,10))),a.push(D(e,i,E(e)?n:null));else if("*"===o)Array.isArray(i)?i.filter(T).forEach(function(t){a.push(D(e,t,E(e)?n:null))}):Object.keys(i).forEach(function(t){T(i[t])&&a.push(D(e,i[t],t))});else{var r=[];Array.isArray(i)?i.filter(T).forEach(function(t){r.push(D(e,t))}):Object.keys(i).forEach(function(t){T(i[t])&&(r.push(encodeURIComponent(t)),r.push(D(e,i[t].toString())))}),E(e)?a.push(encodeURIComponent(n)+"="+r.join(",")):0!==r.length&&a.push(r.join(","))}else";"===e?a.push(encodeURIComponent(n)):""!==i||"&"!==e&&"?"!==e?""===i&&a.push(""):a.push(encodeURIComponent(n)+"=");return a}function T(t){return void 0!==t&&null!==t}function E(t){return";"===t||"&"===t||"?"===t}function D(t,e,n){return e="+"===t||"#"===t?I(e):encodeURIComponent(e),n?encodeURIComponent(n)+"="+e:e}function I(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map(function(t){return/%[0-9A-Fa-f]/.test(t)||(t=encodeURI(t)),t}).join("")}function P(t){var e=[],n=j(t.url,t.params,e);return e.forEach(function(e){delete t.params[e]}),n}function M(t,e){var n,o=this||{},i=t;return f(t)&&(i={url:t,params:e}),i=k({},M.options,o.$options,i),M.transforms.forEach(function(t){f(t)&&(t=M.transform[t]),u(t)&&(n=N(t,n,o.$vm))}),n(i)}function N(t,e,n){return function(o){return t.call(n,o,e)}}function L(t,e,n){var o,i=vt(e),a=b(e);y(e,function(e,r){o=h(e)||vt(e),n&&(r=n+"["+(a||o?r:"")+"]"),!n&&i?t.add(e.name,e.value):o?L(t,e,r):t.add(r,e)})}function F(t){return new i(function(e){var n=new XDomainRequest,o=function(o){var i=o.type,a=0;"load"===i?a=200:"error"===i&&(a=500),e(t.respondWith(n.responseText,{status:a}))};t.abort=function(){return n.abort()},n.open(t.method,t.getUrl()),t.timeout&&(n.timeout=t.timeout),n.onload=o,n.onabort=o,n.onerror=o,n.ontimeout=o,n.onprogress=function(){},n.send(t.getBody())})}function R(t){if(bt){var e=M.parse(location.href),n=M.parse(t.getUrl());n.protocol===e.protocol&&n.host===e.host||(t.crossOrigin=!0,t.emulateHTTP=!1,xt||(t.client=F))}}function B(t){g(t.body)?t.headers.delete("Content-Type"):h(t.body)&&t.emulateJSON&&(t.body=M.params(t.body),t.headers.set("Content-Type","application/x-www-form-urlencoded"))}function G(t){var e=t.headers.get("Content-Type")||"";return h(t.body)&&0===e.indexOf("application/json")&&(t.body=JSON.stringify(t.body)),function(t){return t.bodyText?x(t.text(),function(e){if(0===(t.headers.get("Content-Type")||"").indexOf("application/json")||U(e))try{t.body=JSON.parse(e)}catch(e){t.body=null}else t.body=e;return t}):t}}function U(t){var e=t.match(/^\s*(\[|\{)/),n={"[":/]\s*$/,"{":/}\s*$/};return e&&n[e[1]].test(t)}function q(t){return new i(function(e){var n,o,i=t.jsonp||"callback",a=t.jsonpCallback||"_jsonp"+Math.random().toString(36).substr(2),r=null;n=function(n){var i=n.type,s=0;"load"===i&&null!==r?s=200:"error"===i&&(s=500),s&&window[a]&&(delete window[a],document.body.removeChild(o)),e(t.respondWith(r,{status:s}))},window[a]=function(t){r=JSON.stringify(t)},t.abort=function(){n({type:"abort"})},t.params[i]=a,t.timeout&&setTimeout(t.abort,t.timeout),o=document.createElement("script"),o.src=t.getUrl(),o.type="text/javascript",o.async=!0,o.onload=n,o.onerror=n,document.body.appendChild(o)})}function H(t){"JSONP"==t.method&&(t.client=q)}function W(t){u(t.before)&&t.before.call(this,t)}function K(t){t.emulateHTTP&&/^(PUT|PATCH|DELETE)$/i.test(t.method)&&(t.headers.set("X-HTTP-Method-Override",t.method),t.method="POST")}function V(t){y(gt({},ot.headers.common,t.crossOrigin?{}:ot.headers.custom,ot.headers[d(t.method)]),function(e,n){t.headers.has(n)||t.headers.set(n,e)})}function J(t){return new i(function(e){var n=new XMLHttpRequest,o=function(o){var i=t.respondWith("response"in n?n.response:n.responseText,{status:1223===n.status?204:n.status,statusText:1223===n.status?"No Content":l(n.statusText)});y(l(n.getAllResponseHeaders()).split("\n"),function(t){i.headers.append(t.slice(0,t.indexOf(":")),t.slice(t.indexOf(":")+1))}),e(i)};t.abort=function(){return n.abort()},n.open(t.method,t.getUrl(),!0),t.timeout&&(n.timeout=t.timeout),t.responseType&&"responseType"in n&&(n.responseType=t.responseType),(t.withCredentials||t.credentials)&&(n.withCredentials=!0),t.crossOrigin||t.headers.set("X-Requested-With","XMLHttpRequest"),u(t.progress)&&"GET"===t.method&&n.addEventListener("progress",t.progress),u(t.downloadProgress)&&n.addEventListener("progress",t.downloadProgress),u(t.progress)&&/^(POST|PUT)$/i.test(t.method)&&n.upload.addEventListener("progress",t.progress),u(t.uploadProgress)&&n.upload&&n.upload.addEventListener("progress",t.uploadProgress),t.headers.forEach(function(t,e){n.setRequestHeader(e,t)}),n.onload=o,n.onabort=o,n.onerror=o,n.ontimeout=o,n.send(t.getBody())})}function X(t){var e=n(55);return new i(function(n){var o,i=t.getUrl(),a=t.getBody(),r=t.method,s={};t.headers.forEach(function(t,e){s[e]=t}),e(i,{body:a,method:r,headers:s}).then(o=function(e){var o=t.respondWith(e.body,{status:e.statusCode,statusText:l(e.statusMessage)});y(e.headers,function(t,e){o.headers.set(e,t)}),n(o)},function(t){return o(t.response)})})}function Y(t){function e(e){for(;n.length;){var a=n.pop();if(u(a)){var s=void 0,p=void 0;if(s=a.call(t,e,function(t){return p=t})||p,h(s))return new i(function(e,n){o.forEach(function(e){s=x(s,function(n){return e.call(t,n)||n},n)}),x(s,e,n)},t);u(s)&&o.unshift(s)}else r("Invalid interceptor of type "+typeof a+", must be a function")}}var n=[Q],o=[];return h(t)||(t=null),e.use=function(t){n.push(t)},e}function Q(t){return(t.client||(bt?J:X))(t)}function Z(t,e){return Object.keys(t).reduce(function(t,n){return d(e)===d(n)?n:t},null)}function tt(t){if(/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return l(t)}function et(t){return new i(function(e){var n=new FileReader;n.readAsText(t),n.onload=function(){e(n.result)}})}function nt(t){return 0===t.type.indexOf("text")||-1!==t.type.indexOf("json")}function ot(t){var e=this||{},n=Y(e.$vm);return _(t||{},e.$options,ot.options),ot.interceptors.forEach(function(t){f(t)&&(t=ot.interceptor[t]),u(t)&&n.use(t)}),n(new kt(t)).then(function(t){return t.ok?t:i.reject(t)},function(t){return t instanceof Error&&s(t),i.reject(t)})}function it(t,e,n,o){var i=this||{},a={};return n=gt({},it.actions,n),y(n,function(n,r){n=k({url:t,params:gt({},e)},o,n),a[r]=function(){return(i.$http||ot)(at(n,arguments))}}),a}function at(t,e){var n,o=gt({},t),i={};switch(e.length){case 2:i=e[0],n=e[1];break;case 1:/^(POST|PUT|PATCH)$/i.test(o.method)?n=e[0]:i=e[0];break;case 0:break;default:throw"Expected up to 2 arguments [params, body], got "+e.length+" arguments"}return o.body=n,o.params=gt({},o.params,i),o}function rt(t){rt.installed||(a(t),t.url=M,t.http=ot,t.resource=it,t.Promise=i,Object.defineProperties(t.prototype,{$url:{get:function(){return w(t.url,this,this.$options.url)}},$http:{get:function(){return w(t.http,this,this.$options.http)}},$resource:{get:function(){return t.resource.bind(this)}},$promise:{get:function(){var e=this;return function(n){return new t.Promise(n,e)}}}}))}Object.defineProperty(e,"__esModule",{value:!0}),n.d(e,"Url",function(){return M}),n.d(e,"Http",function(){return ot}),n.d(e,"Resource",function(){return it});/*!
3
  * (c) 2014-2019 Evan You
4
  * Released under the MIT License.
5
  */
6
+ var _a=Object.freeze({}),za=Object.prototype.toString,Ca=h("slot,component",!0),$a=h("key,ref,slot,slot-scope,is"),Aa=Object.prototype.hasOwnProperty,ja=/-(\w)/g,Oa=g(function(t){return t.replace(ja,function(t,e){return e?e.toUpperCase():""})}),Sa=g(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),Ta=/\B([A-Z])/g,Ea=g(function(t){return t.replace(Ta,"-$1").toLowerCase()}),Da=Function.prototype.bind?w:x,Ia=function(t,e,n){return!1},Pa=function(t){return t},Ma="data-server-rendered",Na=["component","directive","filter"],La=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],Fa={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:Ia,isReservedAttr:Ia,isUnknownElement:Ia,getTagNamespace:z,parsePlatformTagName:Pa,mustUseProp:Ia,async:!0,_lifecycleHooks:La},Ra="a-zA-Z·À-ÖØ-öø-ͽͿ-῿‌-‍‿-⁀⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�",Ba=new RegExp("[^"+Ra+".$_\\d]"),Ga="__proto__"in{},Ua="undefined"!=typeof window,qa="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,Ha=qa&&WXEnvironment.platform.toLowerCase(),Wa=Ua&&window.navigator.userAgent.toLowerCase(),Ka=Wa&&/msie|trident/.test(Wa),Va=Wa&&Wa.indexOf("msie 9.0")>0,Ja=Wa&&Wa.indexOf("edge/")>0,Xa=(Wa&&Wa.indexOf("android"),Wa&&/iphone|ipad|ipod|ios/.test(Wa)||"ios"===Ha),Ya=(Wa&&/chrome\/\d+/.test(Wa),Wa&&/phantomjs/.test(Wa),Wa&&Wa.match(/firefox\/(\d+)/)),Qa={}.watch,Za=!1;if(Ua)try{var tr={};Object.defineProperty(tr,"passive",{get:function(){Za=!0}}),window.addEventListener("test-passive",null,tr)}catch(t){}var er,nr,or=function(){return void 0===er&&(er=!Ua&&!qa&&void 0!==t&&(t.process&&"server"===t.process.env.VUE_ENV)),er},ir=Ua&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,ar="undefined"!=typeof Symbol&&T(Symbol)&&"undefined"!=typeof Reflect&&T(Reflect.ownKeys);nr="undefined"!=typeof Set&&T(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var rr=z,sr=0,pr=function(){this.id=sr++,this.subs=[]};pr.prototype.addSub=function(t){this.subs.push(t)},pr.prototype.removeSub=function(t){b(this.subs,t)},pr.prototype.depend=function(){pr.target&&pr.target.addDep(this)},pr.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;e<n;e++)t[e].update()},pr.target=null;var lr=[],cr=function(t,e,n,o,i,a,r,s){this.tag=t,this.data=e,this.children=n,this.text=o,this.elm=i,this.ns=void 0,this.context=a,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=r,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},dr={child:{configurable:!0}};dr.child.get=function(){return this.componentInstance},Object.defineProperties(cr.prototype,dr);var mr=function(t){void 0===t&&(t="");var e=new cr;return e.text=t,e.isComment=!0,e},fr=Array.prototype,ur=Object.create(fr);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(t){var e=fr[t];O(ur,t,function(){for(var n=[],o=arguments.length;o--;)n[o]=arguments[o];var i,a=e.apply(this,n),r=this.__ob__;switch(t){case"push":case"unshift":i=n;break;case"splice":i=n.slice(2)}return i&&r.observeArray(i),r.dep.notify(),a})});var hr=Object.getOwnPropertyNames(ur),br=!0,vr=function(t){this.value=t,this.dep=new pr,this.vmCount=0,O(t,"__ob__",this),Array.isArray(t)?(Ga?N(t,ur):L(t,ur,hr),this.observeArray(t)):this.walk(t)};vr.prototype.walk=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)R(t,e[n])},vr.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)F(t[e])};var gr=Fa.optionMergeStrategies;gr.data=function(t,e,n){return n?H(t,e,n):e&&"function"!=typeof e?t:H(t,e)},La.forEach(function(t){gr[t]=W}),Na.forEach(function(t){gr[t+"s"]=V}),gr.watch=function(t,e,n,o){if(t===Qa&&(t=void 0),e===Qa&&(e=void 0),!e)return Object.create(t||null);if(!t)return e;var i={};k(i,t);for(var a in e){var r=i[a],s=e[a];r&&!Array.isArray(r)&&(r=[r]),i[a]=r?r.concat(s):Array.isArray(s)?s:[s]}return i},gr.props=gr.methods=gr.inject=gr.computed=function(t,e,n,o){if(!t)return e;var i=Object.create(null);return k(i,t),e&&k(i,e),i},gr.provide=H;var xr,wr=function(t,e){return void 0===e?t:e},yr=!1,kr=[],_r=!1;if("undefined"!=typeof Promise&&T(Promise)){var zr=Promise.resolve();xr=function(){zr.then(lt),Xa&&setTimeout(z)},yr=!0}else if(Ka||"undefined"==typeof MutationObserver||!T(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())xr=void 0!==n&&T(n)?function(){n(lt)}:function(){setTimeout(lt,0)};else{var Cr=1,$r=new MutationObserver(lt),Ar=document.createTextNode(String(Cr));$r.observe(Ar,{characterData:!0}),xr=function(){Cr=(Cr+1)%2,Ar.data=String(Cr)},yr=!0}var jr=new nr,Or=g(function(t){var e="&"===t.charAt(0);t=e?t.slice(1):t;var n="~"===t.charAt(0);t=n?t.slice(1):t;var o="!"===t.charAt(0);return t=o?t.slice(1):t,{name:t,once:n,capture:o,passive:e}});qt(Ht.prototype);var Sr,Tr={init:function(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){var n=t;Tr.prepatch(n,n)}else{(t.componentInstance=Xt(t,Mr)).$mount(e?t.elm:void 0,e)}},prepatch:function(t,e){var n=e.componentOptions;ge(e.componentInstance=t.componentInstance,n.propsData,n.listeners,e,n.children)},insert:function(t){var e=t.context,n=t.componentInstance;n._isMounted||(n._isMounted=!0,ke(n,"mounted")),t.data.keepAlive&&(e._isMounted?$e(n):we(n,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?ye(e,!0):e.$destroy())}},Er=Object.keys(Tr),Dr=1,Ir=2,Pr=null,Mr=null,Nr=[],Lr=[],Fr={},Rr=!1,Br=!1,Gr=0,Ur=0,qr=Date.now;Ua&&qr()>document.createEvent("Event").timeStamp&&(qr=function(){return performance.now()});var Hr=0,Wr=function(t,e,n,o,i){this.vm=t,i&&(t._watcher=this),t._watchers.push(this),o?(this.deep=!!o.deep,this.user=!!o.user,this.lazy=!!o.lazy,this.sync=!!o.sync,this.before=o.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Hr,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new nr,this.newDepIds=new nr,this.expression="","function"==typeof e?this.getter=e:(this.getter=S(e),this.getter||(this.getter=z)),this.value=this.lazy?void 0:this.get()};Wr.prototype.get=function(){E(this);var t,e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;at(t,e,'getter for watcher "'+this.expression+'"')}finally{this.deep&&dt(t),D(),this.cleanupDeps()}return t},Wr.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},Wr.prototype.cleanupDeps=function(){for(var t=this.deps.length;t--;){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},Wr.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():je(this)},Wr.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||p(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){at(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},Wr.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Wr.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},Wr.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||b(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var Kr={enumerable:!0,configurable:!0,get:z,set:z},Vr={lazy:!0},Jr=0;!function(t){t.prototype._init=function(t){var e=this;e._uid=Jr++,e._isVue=!0,t&&t._isComponent?Be(e,t):e.$options=Q(Ge(e.constructor),t||{},e),e._renderProxy=e,e._self=e,be(e),ce(e),ie(e),ke(e,"beforeCreate"),_t(e),Se(e),kt(e),ke(e,"created"),e.$options.el&&e.$mount(e.$options.el)}}(qe),function(t){var e={};e.get=function(){return this._data};var n={};n.get=function(){return this._props},Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=B,t.prototype.$delete=G,t.prototype.$watch=function(t,e,n){var o=this;if(l(e))return Re(o,t,e,n);n=n||{},n.user=!0;var i=new Wr(o,t,e,n);if(n.immediate)try{e.call(o,i.value)}catch(t){at(t,o,'callback for immediate watcher "'+i.expression+'"')}return function(){i.teardown()}}}(qe),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var o=this;if(Array.isArray(t))for(var i=0,a=t.length;i<a;i++)o.$on(t[i],n);else(o._events[t]||(o._events[t]=[])).push(n),e.test(t)&&(o._hasHookEvent=!0);return o},t.prototype.$once=function(t,e){function n(){o.$off(t,n),e.apply(o,arguments)}var o=this;return n.fn=e,o.$on(t,n),o},t.prototype.$off=function(t,e){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(t)){for(var o=0,i=t.length;o<i;o++)n.$off(t[o],e);return n}var a=n._events[t];if(!a)return n;if(!e)return n._events[t]=null,n;for(var r,s=a.length;s--;)if((r=a[s])===e||r.fn===e){a.splice(s,1);break}return n},t.prototype.$emit=function(t){var e=this,n=e._events[t];if(n){n=n.length>1?y(n):n;for(var o=y(arguments,1),i='event handler for "'+t+'"',a=0,r=n.length;a<r;a++)rt(n[a],e,o,e,i)}return e}}(qe),function(t){t.prototype._update=function(t,e){var n=this,o=n.$el,i=n._vnode,a=he(n);n._vnode=t,n.$el=i?n.__patch__(i,t):n.__patch__(n.$el,t,e,!1),a(),o&&(o.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},t.prototype.$forceUpdate=function(){var t=this;t._watcher&&t._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){ke(t,"beforeDestroy"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||b(e.$children,t),t._watcher&&t._watcher.teardown();for(var n=t._watchers.length;n--;)t._watchers[n].teardown();t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),ke(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}}(qe),function(t){qt(t.prototype),t.prototype.$nextTick=function(t){return ct(t,this)},t.prototype._render=function(){var t=this,e=t.$options,n=e.render,o=e._parentVnode;o&&(t.$scopedSlots=At(o.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode=o;var i;try{Pr=t,i=n.call(t._renderProxy,t.$createElement)}catch(e){at(e,t,"render"),i=t._vnode}finally{Pr=null}return Array.isArray(i)&&1===i.length&&(i=i[0]),i instanceof cr||(i=mr()),i.parent=o,i}}(qe);var Xr=[String,RegExp,Array],Yr={name:"keep-alive",abstract:!0,props:{include:Xr,exclude:Xr,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)tn(this.cache,t,this.keys)},mounted:function(){var t=this;this.$watch("include",function(e){Ze(t,function(t){return Qe(e,t)})}),this.$watch("exclude",function(e){Ze(t,function(t){return!Qe(e,t)})})},render:function(){var t=this.$slots.default,e=le(t),n=e&&e.componentOptions;if(n){var o=Ye(n),i=this,a=i.include,r=i.exclude;if(a&&(!o||!Qe(a,o))||r&&o&&Qe(r,o))return e;var s=this,p=s.cache,l=s.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):e.key;p[c]?(e.componentInstance=p[c].componentInstance,b(l,c),l.push(c)):(p[c]=e,l.push(c),this.max&&l.length>parseInt(this.max)&&tn(p,l[0],l,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}},Qr={KeepAlive:Yr};!function(t){var e={};e.get=function(){return Fa},Object.defineProperty(t,"config",e),t.util={warn:rr,extend:k,mergeOptions:Q,defineReactive:R},t.set=B,t.delete=G,t.nextTick=ct,t.observable=function(t){return F(t),t},t.options=Object.create(null),Na.forEach(function(e){t.options[e+"s"]=Object.create(null)}),t.options._base=t,k(t.options.components,Qr),He(t),We(t),Ke(t),Xe(t)}(qe),Object.defineProperty(qe.prototype,"$isServer",{get:or}),Object.defineProperty(qe.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(qe,"FunctionalRenderContext",{value:Ht}),qe.version="2.6.6";var Zr,ts,es,ns,os,is,as,rs,ss,ps,ls=h("style,class"),cs=h("input,textarea,option,select,progress"),ds=function(t,e,n){return"value"===n&&cs(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},ms=h("contenteditable,draggable,spellcheck"),fs=h("events,caret,typing,plaintext-only"),us=function(t,e){return xs(e)||"false"===e?"false":"contenteditable"===t&&fs(e)?e:"true"},hs=h("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),bs="http://www.w3.org/1999/xlink",vs=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},gs=function(t){return vs(t)?t.slice(6,t.length):""},xs=function(t){return null==t||!1===t},ws={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},ys=h("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),ks=h("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),_s=function(t){return"pre"===t},zs=function(t){return ys(t)||ks(t)},Cs=Object.create(null),$s=h("text,number,password,search,email,tel,url"),As=Object.freeze({createElement:mn,createElementNS:fn,createTextNode:un,createComment:hn,insertBefore:bn,removeChild:vn,appendChild:gn,parentNode:xn,nextSibling:wn,tagName:yn,setTextContent:kn,setStyleScope:_n}),js={create:function(t,e){zn(e)},update:function(t,e){t.data.ref!==e.data.ref&&(zn(t,!0),zn(e))},destroy:function(t){zn(t,!0)}},Os=new cr("",{},[]),Ss=["create","activate","update","remove","destroy"],Ts={create:jn,update:jn,destroy:function(t){jn(t,Os)}},Es=Object.create(null),Ds=[js,Ts],Is={create:Dn,update:Dn},Ps={create:Mn,update:Mn},Ms=/[\w).+\-_$\]]/,Ns="__r",Ls="__c",Fs=yr&&!(Ya&&Number(Ya[1])<=53),Rs={create:bo,update:bo},Bs={create:vo,update:vo},Gs=g(function(t){var e={},n=/;(?![^(]*\))/g,o=/:(.+)/;return t.split(n).forEach(function(t){if(t){var n=t.split(o);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}),Us=/^--/,qs=/\s*!important$/,Hs=function(t,e,n){if(Us.test(e))t.style.setProperty(e,n);else if(qs.test(n))t.style.setProperty(Ea(e),n.replace(qs,""),"important");else{var o=Ks(e);if(Array.isArray(n))for(var i=0,a=n.length;i<a;i++)t.style[o]=n[i];else t.style[o]=n}},Ws=["Webkit","Moz","ms"],Ks=g(function(t){if(ps=ps||document.createElement("div").style,"filter"!==(t=Oa(t))&&t in ps)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<Ws.length;n++){var o=Ws[n]+e;if(o in ps)return o}}),Vs={create:zo,update:zo},Js=/\s+/,Xs=g(function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}}),Ys=Ua&&!Va,Qs="transition",Zs="animation",tp="transition",ep="transitionend",np="animation",op="animationend";Ys&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(tp="WebkitTransition",ep="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(np="WebkitAnimation",op="webkitAnimationEnd"));var ip=Ua?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()},ap=/\b(transform|all)(,|$)/,rp=Ua?{create:Fo,activate:Fo,remove:function(t,e){!0!==t.data.show?Mo(t,e):e()}}:{},sp=[Is,Ps,Rs,Bs,Vs,rp],pp=sp.concat(Ds),lp=function(t){function e(t){return new cr(T.tagName(t).toLowerCase(),{},[],void 0,t)}function n(t,e){function n(){0==--n.listeners&&r(t)}return n.listeners=e,n}function r(t){var e=T.parentNode(t);i(e)&&T.removeChild(e,t)}function p(t,e,n,o,r,s,p){if(i(t.elm)&&i(s)&&(t=s[p]=P(t)),t.isRootInsert=!r,!l(t,e,n,o)){var c=t.data,d=t.children,u=t.tag;i(u)?(t.elm=t.ns?T.createElementNS(t.ns,u):T.createElement(u,t),v(t),f(t,d,e),i(c)&&b(t,e),m(n,t.elm,o)):a(t.isComment)?(t.elm=T.createComment(t.text),m(n,t.elm,o)):(t.elm=T.createTextNode(t.text),m(n,t.elm,o))}}function l(t,e,n,o){var r=t.data;if(i(r)){var s=i(t.componentInstance)&&r.keepAlive;if(i(r=r.hook)&&i(r=r.init)&&r(t,!1),i(t.componentInstance))return c(t,e),m(n,t.elm,o),a(s)&&d(t,e,n,o),!0}}function c(t,e){i(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,u(t)?(b(t,e),v(t)):(zn(t),e.push(t))}function d(t,e,n,o){for(var a,r=t;r.componentInstance;)if(r=r.componentInstance._vnode,i(a=r.data)&&i(a=a.transition)){for(a=0;a<O.activate.length;++a)O.activate[a](Os,r);e.push(r);break}m(n,t.elm,o)}function m(t,e,n){i(t)&&(i(n)?T.parentNode(n)===t&&T.insertBefore(t,e,n):T.appendChild(t,e))}function f(t,e,n){if(Array.isArray(e))for(var o=0;o<e.length;++o)p(e[o],n,t.elm,null,!0,e,o);else s(t.text)&&T.appendChild(t.elm,T.createTextNode(String(t.text)))}function u(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return i(t.tag)}function b(t,e){for(var n=0;n<O.create.length;++n)O.create[n](Os,t);A=t.data.hook,i(A)&&(i(A.create)&&A.create(Os,t),i(A.insert)&&e.push(t))}function v(t){var e;if(i(e=t.fnScopeId))T.setStyleScope(t.elm,e);else for(var n=t;n;)i(e=n.context)&&i(e=e.$options._scopeId)&&T.setStyleScope(t.elm,e),n=n.parent;i(e=Mr)&&e!==t.context&&e!==t.fnContext&&i(e=e.$options._scopeId)&&T.setStyleScope(t.elm,e)}function g(t,e,n,o,i,a){for(;o<=i;++o)p(n[o],a,t,e,!1,n,o)}function x(t){var e,n,o=t.data;if(i(o))for(i(e=o.hook)&&i(e=e.destroy)&&e(t),e=0;e<O.destroy.length;++e)O.destroy[e](t);if(i(e=t.children))for(n=0;n<t.children.length;++n)x(t.children[n])}function w(t,e,n,o){for(;n<=o;++n){var a=e[n];i(a)&&(i(a.tag)?(y(a),x(a)):r(a.elm))}}function y(t,e){if(i(e)||i(t.data)){var o,a=O.remove.length+1;for(i(e)?e.listeners+=a:e=n(t.elm,a),i(o=t.componentInstance)&&i(o=o._vnode)&&i(o.data)&&y(o,e),o=0;o<O.remove.length;++o)O.remove[o](t,e);i(o=t.data.hook)&&i(o=o.remove)?o(t,e):e()}else r(t.elm)}function k(t,e,n,a,r){for(var s,l,c,d,m=0,f=0,u=e.length-1,h=e[0],b=e[u],v=n.length-1,x=n[0],y=n[v],k=!r;m<=u&&f<=v;)o(h)?h=e[++m]:o(b)?b=e[--u]:Cn(h,x)?(z(h,x,a,n,f),h=e[++m],x=n[++f]):Cn(b,y)?(z(b,y,a,n,v),b=e[--u],y=n[--v]):Cn(h,y)?(z(h,y,a,n,v),k&&T.insertBefore(t,h.elm,T.nextSibling(b.elm)),h=e[++m],y=n[--v]):Cn(b,x)?(z(b,x,a,n,f),k&&T.insertBefore(t,b.elm,h.elm),b=e[--u],x=n[++f]):(o(s)&&(s=An(e,m,u)),l=i(x.key)?s[x.key]:_(x,e,m,u),o(l)?p(x,a,t,h.elm,!1,n,f):(c=e[l],Cn(c,x)?(z(c,x,a,n,f),e[l]=void 0,k&&T.insertBefore(t,c.elm,h.elm)):p(x,a,t,h.elm,!1,n,f)),x=n[++f]);m>u?(d=o(n[v+1])?null:n[v+1].elm,g(t,d,n,f,v,a)):f>v&&w(t,e,m,u)}function _(t,e,n,o){for(var a=n;a<o;a++){var r=e[a];if(i(r)&&Cn(t,r))return a}}function z(t,e,n,r,s,p){if(t!==e){i(e.elm)&&i(r)&&(e=r[s]=P(e));var l=e.elm=t.elm;if(a(t.isAsyncPlaceholder))return void(i(e.asyncFactory.resolved)?$(t.elm,e,n):e.isAsyncPlaceholder=!0);if(a(e.isStatic)&&a(t.isStatic)&&e.key===t.key&&(a(e.isCloned)||a(e.isOnce)))return void(e.componentInstance=t.componentInstance);var c,d=e.data;i(d)&&i(c=d.hook)&&i(c=c.prepatch)&&c(t,e);var m=t.children,f=e.children;if(i(d)&&u(e)){for(c=0;c<O.update.length;++c)O.update[c](t,e);i(c=d.hook)&&i(c=c.update)&&c(t,e)}o(e.text)?i(m)&&i(f)?m!==f&&k(l,m,f,n,p):i(f)?(i(t.text)&&T.setTextContent(l,""),g(l,null,f,0,f.length-1,n)):i(m)?w(l,m,0,m.length-1):i(t.text)&&T.setTextContent(l,""):t.text!==e.text&&T.setTextContent(l,e.text),i(d)&&i(c=d.hook)&&i(c=c.postpatch)&&c(t,e)}}function C(t,e,n){if(a(n)&&i(t.parent))t.parent.data.pendingInsert=e;else for(var o=0;o<e.length;++o)e[o].data.hook.insert(e[o])}function $(t,e,n,o){var r,s=e.tag,p=e.data,l=e.children;if(o=o||p&&p.pre,e.elm=t,a(e.isComment)&&i(e.asyncFactory))return e.isAsyncPlaceholder=!0,!0;if(i(p)&&(i(r=p.hook)&&i(r=r.init)&&r(e,!0),i(r=e.componentInstance)))return c(e,n),!0;if(i(s)){if(i(l))if(t.hasChildNodes())if(i(r=p)&&i(r=r.domProps)&&i(r=r.innerHTML)){if(r!==t.innerHTML)return!1}else{for(var d=!0,m=t.firstChild,u=0;u<l.length;u++){if(!m||!$(m,l[u],n,o)){d=!1;break}m=m.nextSibling}if(!d||m)return!1}else f(e,l,n);if(i(p)){var h=!1;for(var v in p)if(!E(v)){h=!0,b(e,n);break}!h&&p.class&&dt(p.class)}}else t.data!==e.text&&(t.data=e.text);return!0}var A,j,O={},S=t.modules,T=t.nodeOps;for(A=0;A<Ss.length;++A)for(O[Ss[A]]=[],j=0;j<S.length;++j)i(S[j][Ss[A]])&&O[Ss[A]].push(S[j][Ss[A]]);var E=h("attrs,class,staticClass,staticStyle,key");return function(t,n,r,s){if(o(n))return void(i(t)&&x(t));var l=!1,c=[];if(o(t))l=!0,p(n,c);else{var d=i(t.nodeType);if(!d&&Cn(t,n))z(t,n,c,null,null,s);else{if(d){if(1===t.nodeType&&t.hasAttribute(Ma)&&(t.removeAttribute(Ma),r=!0),a(r)&&$(t,n,c))return C(n,c,!0),t;t=e(t)}var m=t.elm,f=T.parentNode(m);if(p(n,c,m._leaveCb?null:f,T.nextSibling(m)),i(n.parent))for(var h=n.parent,b=u(n);h;){for(var v=0;v<O.destroy.length;++v)O.destroy[v](h);if(h.elm=n.elm,b){for(var g=0;g<O.create.length;++g)O.create[g](Os,h);var y=h.data.hook.insert;if(y.merged)for(var k=1;k<y.fns.length;k++)y.fns[k]()}else zn(h);h=h.parent}i(f)?w(f,[t],0,0):i(t.tag)&&x(t)}}return C(n,c,l),n.elm}}({nodeOps:As,modules:pp});Va&&document.addEventListener("selectionchange",function(){var t=document.activeElement;t&&t.vmodel&&Wo(t,"input")});var cp={inserted:function(t,e,n,o){"select"===n.tag?(o.elm&&!o.elm._vOptions?ht(n,"postpatch",function(){cp.componentUpdated(t,e,n)}):Ro(t,e,n.context),t._vOptions=[].map.call(t.options,Uo)):("textarea"===n.tag||$s(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",qo),t.addEventListener("compositionend",Ho),t.addEventListener("change",Ho),Va&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){Ro(t,e,n.context);var o=t._vOptions,i=t._vOptions=[].map.call(t.options,Uo);if(i.some(function(t,e){return!C(t,o[e])})){(t.multiple?e.value.some(function(t){return Go(t,i)}):e.value!==e.oldValue&&Go(e.value,i))&&Wo(t,"change")}}}},dp={bind:function(t,e,n){var o=e.value;n=Ko(n);var i=n.data&&n.data.transition,a=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;o&&i?(n.data.show=!0,Po(n,function(){t.style.display=a})):t.style.display=o?a:"none"},update:function(t,e,n){var o=e.value;!o!=!e.oldValue&&(n=Ko(n),n.data&&n.data.transition?(n.data.show=!0,o?Po(n,function(){t.style.display=t.__vOriginalDisplay}):Mo(n,function(){t.style.display="none"})):t.style.display=o?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,o,i){i||(t.style.display=t.__vOriginalDisplay)}},mp={model:cp,show:dp},fp={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]},up=function(t){return t.tag||pe(t)},hp=function(t){return"show"===t.name},bp={name:"transition",props:fp,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(up),n.length)){var o=this.mode,i=n[0];if(Yo(this.$vnode))return i;var a=Vo(i);if(!a)return i;if(this._leaving)return Xo(t,i);var r="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?r+"comment":r+a.tag:s(a.key)?0===String(a.key).indexOf(r)?a.key:r+a.key:a.key;var p=(a.data||(a.data={})).transition=Jo(this),l=this._vnode,c=Vo(l);if(a.data.directives&&a.data.directives.some(hp)&&(a.data.show=!0),c&&c.data&&!Qo(a,c)&&!pe(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var d=c.data.transition=k({},p);if("out-in"===o)return this._leaving=!0,ht(d,"afterLeave",function(){e._leaving=!1,e.$forceUpdate()}),Xo(t,i);if("in-out"===o){if(pe(a))return l;var m,f=function(){m()};ht(p,"afterEnter",f),ht(p,"enterCancelled",f),ht(d,"delayLeave",function(t){m=t})}}return i}}},vp=k({tag:String,moveClass:String},fp);delete vp.mode;var gp={props:vp,beforeMount:function(){var t=this,e=this._update;this._update=function(n,o){var i=he(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,i(),e.call(t,n,o)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),o=this.prevChildren=this.children,i=this.$slots.default||[],a=this.children=[],r=Jo(this),s=0;s<i.length;s++){var p=i[s];if(p.tag)if(null!=p.key&&0!==String(p.key).indexOf("__vlist"))a.push(p),n[p.key]=p,(p.data||(p.data={})).transition=r;else;}if(o){for(var l=[],c=[],d=0;d<o.length;d++){var m=o[d];m.data.transition=r,m.data.pos=m.elm.getBoundingClientRect(),n[m.key]?l.push(m):c.push(m)}this.kept=t(e,null,l),this.removed=c}return t(e,null,a)},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,e)&&(t.forEach(Zo),t.forEach(ti),t.forEach(ei),this._reflow=document.body.offsetHeight,t.forEach(function(t){if(t.data.moved){var n=t.elm,o=n.style;Oo(n,e),o.transform=o.WebkitTransform=o.transitionDuration="",n.addEventListener(ep,n._moveCb=function t(o){o&&o.target!==n||o&&!/transform$/.test(o.propertyName)||(n.removeEventListener(ep,t),n._moveCb=null,So(n,e))})}}))},methods:{hasMove:function(t,e){if(!Ys)return!1;if(this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach(function(t){$o(n,t)}),Co(n,e),n.style.display="none",this.$el.appendChild(n);var o=Eo(n);return this.$el.removeChild(n),this._hasMove=o.hasTransform}}},xp={Transition:bp,TransitionGroup:gp};qe.config.mustUseProp=ds,qe.config.isReservedTag=zs,qe.config.isReservedAttr=ls,qe.config.getTagNamespace=ln,qe.config.isUnknownElement=cn,k(qe.options.directives,mp),k(qe.options.components,xp),qe.prototype.__patch__=Ua?lp:z,qe.prototype.$mount=function(t,e){return t=t&&Ua?dn(t):void 0,ve(this,t,e)},Ua&&setTimeout(function(){Fa.devtools&&ir&&ir.emit("init",qe)},0);var wp,yp,kp,_p,zp,Cp,$p,Ap,jp,Op,Sp,Tp,Ep,Dp=/\{\{((?:.|\r?\n)+?)\}\}/g,Ip=/[-.*+?^${}()|[\]\/\\]/g,Pp=g(function(t){var e=t[0].replace(Ip,"\\$&"),n=t[1].replace(Ip,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")}),Mp={staticKeys:["staticClass"],transformNode:oi,genData:ii},Np={staticKeys:["staticStyle"],transformNode:ai,genData:ri},Lp={decode:function(t){return wp=wp||document.createElement("div"),wp.innerHTML=t,wp.textContent}},Fp=h("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Rp=h("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Bp=h("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Gp=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Up=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,qp="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+Ra+"]*",Hp="((?:"+qp+"\\:)?"+qp+")",Wp=new RegExp("^<"+Hp),Kp=/^\s*(\/?)>/,Vp=new RegExp("^<\\/"+Hp+"[^>]*>"),Jp=/^<!DOCTYPE [^>]+>/i,Xp=/^<!\--/,Yp=/^<!\[/,Qp=h("script,style,textarea",!0),Zp={},tl={"&lt;":"<","&gt;":">","&quot;":'"',"&amp;":"&","&#10;":"\n","&#9;":"\t","&#39;":"'"},el=/&(?:lt|gt|quot|amp|#39);/g,nl=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,ol=h("pre,textarea",!0),il=function(t,e){return t&&ol(t)&&"\n"===e[0]},al=/^@|^v-on:/,rl=/^v-|^@|^:/,sl=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,pl=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,ll=/^\(|\)$/g,cl=/^\[.*\]$/,dl=/:(.*)$/,ml=/^:|^\.|^v-bind:/,fl=/\.[^.]+/g,ul=/^v-slot(:|$)|^#/,hl=/[\r\n]/,bl=/\s+/g,vl=g(Lp.decode),gl="_empty_",xl=/^xmlns:NS\d+/,wl=/^NS\d+:/,yl={preTransformNode:Ii},kl=[Mp,Np,yl],_l={model:ro,text:Mi,html:Ni},zl={expectHTML:!0,modules:kl,directives:_l,isPreTag:_s,isUnaryTag:Fp,mustUseProp:ds,canBeLeftOpenTag:Rp,isReservedTag:zs,getTagNamespace:ln,staticKeys:function(t){return t.reduce(function(t,e){return t.concat(e.staticKeys||[])},[]).join(",")}(kl)},Cl=g(Fi),$l=/^([\w$_]+|\([^)]*?\))\s*=>|^function\s*\(/,Al=/\([^)]*?\);*$/,jl=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Ol={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Sl={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Tl=function(t){return"if("+t+")return null;"},El={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Tl("$event.target !== $event.currentTarget"),ctrl:Tl("!$event.ctrlKey"),shift:Tl("!$event.shiftKey"),alt:Tl("!$event.altKey"),meta:Tl("!$event.metaKey"),left:Tl("'button' in $event && $event.button !== 0"),middle:Tl("'button' in $event && $event.button !== 1"),right:Tl("'button' in $event && $event.button !== 2")},Dl={on:Vi,bind:Ji,cloak:z},Il=function(t){this.options=t,this.warn=t.warn||Fn,this.transforms=Rn(t.modules,"transformCode"),this.dataGenFns=Rn(t.modules,"genData"),this.directives=k(k({},Dl),t.directives);var e=t.isReservedTag||Ia;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1},Pl=(new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),function(t){return function(e){function n(n,o){var i=Object.create(e),a=[],r=[],s=function(t,e,n){(n?r:a).push(t)};if(o){o.modules&&(i.modules=(e.modules||[]).concat(o.modules)),o.directives&&(i.directives=k(Object.create(e.directives||null),o.directives));for(var p in o)"modules"!==p&&"directives"!==p&&(i[p]=o[p])}i.warn=s;var l=t(n.trim(),i);return l.errors=a,l.tips=r,l}return{compile:n,compileToFunctions:wa(n)}}}(function(t,e){var n=ci(t.trim(),e);!1!==e.optimize&&Li(n,e);var o=Xi(n,e);return{ast:n,render:o.render,staticRenderFns:o.staticRenderFns}})),Ml=Pl(zl),Nl=(Ml.compile,Ml.compileToFunctions),Ll=!!Ua&&ya(!1),Fl=!!Ua&&ya(!0),Rl=g(function(t){var e=dn(t);return e&&e.innerHTML}),Bl=qe.prototype.$mount;qe.prototype.$mount=function(t,e){if((t=t&&dn(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var o=n.template;if(o)if("string"==typeof o)"#"===o.charAt(0)&&(o=Rl(o));else{if(!o.nodeType)return this;o=o.innerHTML}else t&&(o=ka(t));if(o){var i=Nl(o,{outputSourceRange:!1,shouldDecodeNewlines:Ll,shouldDecodeNewlinesForHref:Fl,delimiters:n.delimiters,comments:n.comments},this),a=i.render,r=i.staticRenderFns;n.render=a,n.staticRenderFns=r}}return Bl.call(this,t,e)},qe.compile=Nl,e.default=qe}.call(e,n(2),n(7).setImmediate)},function(t,e,n){var o,i;o=n(28),i=n(29),t.exports=o||{},t.exports.__esModule&&(t.exports=t.exports.default),i&&(("function"==typeof t.exports?t.exports.options:t.exports).template=i)},function(t,e,n){"use strict";function o(t){this.state=st,this.value=void 0,this.deferred=[];var e=this;try{t(function(t){e.resolve(t)},function(t){e.reject(t)})}catch(t){e.reject(t)}}function i(t,e){t instanceof Promise?this.promise=t:this.promise=new Promise(t.bind(e)),this.context=e}function a(t){var e=t.config,n=t.nextTick;ct=n,ht=e.debug||!e.silent}function r(t){"undefined"!=typeof console&&ht&&console.warn("[VueResource warn]: "+t)}function s(t){"undefined"!=typeof console&&console.error(t)}function p(t,e){return ct(t,e)}function l(t){return t?t.replace(/^\s*|\s*$/g,""):""}function c(t,e){return t&&void 0===e?t.replace(/\s+$/,""):t&&e?t.replace(new RegExp("["+e+"]+$"),""):t}function d(t){return t?t.toLowerCase():""}function m(t){return t?t.toUpperCase():""}function f(t){return"string"==typeof t}function u(t){return"function"==typeof t}function h(t){return null!==t&&"object"==typeof t}function b(t){return h(t)&&Object.getPrototypeOf(t)==Object.prototype}function v(t){return"undefined"!=typeof Blob&&t instanceof Blob}function g(t){return"undefined"!=typeof FormData&&t instanceof FormData}function x(t,e,n){var o=i.resolve(t);return arguments.length<2?o:o.then(e,n)}function w(t,e,n){return n=n||{},u(n)&&(n=n.call(e)),k(t.bind({$vm:e,$options:n}),t,{$options:n})}function y(t,e){var n,o;if(vt(t))for(n=0;n<t.length;n++)e.call(t[n],t[n],n);else if(h(t))for(o in t)mt.call(t,o)&&e.call(t[o],t[o],o);return t}function k(t){return ut.call(arguments,1).forEach(function(e){C(t,e,!0)}),t}function _(t){return ut.call(arguments,1).forEach(function(e){for(var n in e)void 0===t[n]&&(t[n]=e[n])}),t}function z(t){return ut.call(arguments,1).forEach(function(e){C(t,e)}),t}function C(t,e,n){for(var o in e)n&&(b(e[o])||vt(e[o]))?(b(e[o])&&!b(t[o])&&(t[o]={}),vt(e[o])&&!vt(t[o])&&(t[o]=[]),C(t[o],e[o],n)):void 0!==e[o]&&(t[o]=e[o])}function $(t,e){var n=e(t);return f(t.root)&&!/^(https?:)?\//.test(n)&&(n=c(t.root,"/")+"/"+n),n}function A(t,e){var n=Object.keys(M.options.params),o={},i=e(t);return y(t.params,function(t,e){-1===n.indexOf(e)&&(o[e]=t)}),o=M.params(o),o&&(i+=(-1==i.indexOf("?")?"?":"&")+o),i}function j(t,e,n){var o=O(t),i=o.expand(e);return n&&n.push.apply(n,o.vars),i}function O(t){var e=["+","#",".","/",";","?","&"],n=[];return{vars:n,expand:function(o){return t.replace(/\{([^{}]+)\}|([^{}]+)/g,function(t,i,a){if(i){var r=null,s=[];if(-1!==e.indexOf(i.charAt(0))&&(r=i.charAt(0),i=i.substr(1)),i.split(/,/g).forEach(function(t){var e=/([^:*]*)(?::(\d+)|(\*))?/.exec(t);s.push.apply(s,S(o,r,e[1],e[2]||e[3])),n.push(e[1])}),r&&"+"!==r){var p=",";return"?"===r?p="&":"#"!==r&&(p=r),(0!==s.length?r:"")+s.join(p)}return s.join(",")}return I(a)})}}}function S(t,e,n,o){var i=t[n],a=[];if(T(i)&&""!==i)if("string"==typeof i||"number"==typeof i||"boolean"==typeof i)i=i.toString(),o&&"*"!==o&&(i=i.substring(0,parseInt(o,10))),a.push(D(e,i,E(e)?n:null));else if("*"===o)Array.isArray(i)?i.filter(T).forEach(function(t){a.push(D(e,t,E(e)?n:null))}):Object.keys(i).forEach(function(t){T(i[t])&&a.push(D(e,i[t],t))});else{var r=[];Array.isArray(i)?i.filter(T).forEach(function(t){r.push(D(e,t))}):Object.keys(i).forEach(function(t){T(i[t])&&(r.push(encodeURIComponent(t)),r.push(D(e,i[t].toString())))}),E(e)?a.push(encodeURIComponent(n)+"="+r.join(",")):0!==r.length&&a.push(r.join(","))}else";"===e?a.push(encodeURIComponent(n)):""!==i||"&"!==e&&"?"!==e?""===i&&a.push(""):a.push(encodeURIComponent(n)+"=");return a}function T(t){return void 0!==t&&null!==t}function E(t){return";"===t||"&"===t||"?"===t}function D(t,e,n){return e="+"===t||"#"===t?I(e):encodeURIComponent(e),n?encodeURIComponent(n)+"="+e:e}function I(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map(function(t){return/%[0-9A-Fa-f]/.test(t)||(t=encodeURI(t)),t}).join("")}function P(t){var e=[],n=j(t.url,t.params,e);return e.forEach(function(e){delete t.params[e]}),n}function M(t,e){var n,o=this||{},i=t;return f(t)&&(i={url:t,params:e}),i=k({},M.options,o.$options,i),M.transforms.forEach(function(t){f(t)&&(t=M.transform[t]),u(t)&&(n=N(t,n,o.$vm))}),n(i)}function N(t,e,n){return function(o){return t.call(n,o,e)}}function L(t,e,n){var o,i=vt(e),a=b(e);y(e,function(e,r){o=h(e)||vt(e),n&&(r=n+"["+(a||o?r:"")+"]"),!n&&i?t.add(e.name,e.value):o?L(t,e,r):t.add(r,e)})}function F(t){return new i(function(e){var n=new XDomainRequest,o=function(o){var i=o.type,a=0;"load"===i?a=200:"error"===i&&(a=500),e(t.respondWith(n.responseText,{status:a}))};t.abort=function(){return n.abort()},n.open(t.method,t.getUrl()),t.timeout&&(n.timeout=t.timeout),n.onload=o,n.onabort=o,n.onerror=o,n.ontimeout=o,n.onprogress=function(){},n.send(t.getBody())})}function R(t){if(bt){var e=M.parse(location.href),n=M.parse(t.getUrl());n.protocol===e.protocol&&n.host===e.host||(t.crossOrigin=!0,t.emulateHTTP=!1,xt||(t.client=F))}}function B(t){g(t.body)?t.headers.delete("Content-Type"):h(t.body)&&t.emulateJSON&&(t.body=M.params(t.body),t.headers.set("Content-Type","application/x-www-form-urlencoded"))}function G(t){var e=t.headers.get("Content-Type")||"";return h(t.body)&&0===e.indexOf("application/json")&&(t.body=JSON.stringify(t.body)),function(t){return t.bodyText?x(t.text(),function(e){if(0===(t.headers.get("Content-Type")||"").indexOf("application/json")||U(e))try{t.body=JSON.parse(e)}catch(e){t.body=null}else t.body=e;return t}):t}}function U(t){var e=t.match(/^\s*(\[|\{)/),n={"[":/]\s*$/,"{":/}\s*$/};return e&&n[e[1]].test(t)}function q(t){return new i(function(e){var n,o,i=t.jsonp||"callback",a=t.jsonpCallback||"_jsonp"+Math.random().toString(36).substr(2),r=null;n=function(n){var i=n.type,s=0;"load"===i&&null!==r?s=200:"error"===i&&(s=500),s&&window[a]&&(delete window[a],document.body.removeChild(o)),e(t.respondWith(r,{status:s}))},window[a]=function(t){r=JSON.stringify(t)},t.abort=function(){n({type:"abort"})},t.params[i]=a,t.timeout&&setTimeout(t.abort,t.timeout),o=document.createElement("script"),o.src=t.getUrl(),o.type="text/javascript",o.async=!0,o.onload=n,o.onerror=n,document.body.appendChild(o)})}function H(t){"JSONP"==t.method&&(t.client=q)}function W(t){u(t.before)&&t.before.call(this,t)}function K(t){t.emulateHTTP&&/^(PUT|PATCH|DELETE)$/i.test(t.method)&&(t.headers.set("X-HTTP-Method-Override",t.method),t.method="POST")}function V(t){y(gt({},ot.headers.common,t.crossOrigin?{}:ot.headers.custom,ot.headers[d(t.method)]),function(e,n){t.headers.has(n)||t.headers.set(n,e)})}function J(t){return new i(function(e){var n=new XMLHttpRequest,o=function(o){var i=t.respondWith("response"in n?n.response:n.responseText,{status:1223===n.status?204:n.status,statusText:1223===n.status?"No Content":l(n.statusText)});y(l(n.getAllResponseHeaders()).split("\n"),function(t){i.headers.append(t.slice(0,t.indexOf(":")),t.slice(t.indexOf(":")+1))}),e(i)};t.abort=function(){return n.abort()},n.open(t.method,t.getUrl(),!0),t.timeout&&(n.timeout=t.timeout),t.responseType&&"responseType"in n&&(n.responseType=t.responseType),(t.withCredentials||t.credentials)&&(n.withCredentials=!0),t.crossOrigin||t.headers.set("X-Requested-With","XMLHttpRequest"),u(t.progress)&&"GET"===t.method&&n.addEventListener("progress",t.progress),u(t.downloadProgress)&&n.addEventListener("progress",t.downloadProgress),u(t.progress)&&/^(POST|PUT)$/i.test(t.method)&&n.upload.addEventListener("progress",t.progress),u(t.uploadProgress)&&n.upload&&n.upload.addEventListener("progress",t.uploadProgress),t.headers.forEach(function(t,e){n.setRequestHeader(e,t)}),n.onload=o,n.onabort=o,n.onerror=o,n.ontimeout=o,n.send(t.getBody())})}function X(t){var e=n(63);return new i(function(n){var o,i=t.getUrl(),a=t.getBody(),r=t.method,s={};t.headers.forEach(function(t,e){s[e]=t}),e(i,{body:a,method:r,headers:s}).then(o=function(e){var o=t.respondWith(e.body,{status:e.statusCode,statusText:l(e.statusMessage)});y(e.headers,function(t,e){o.headers.set(e,t)}),n(o)},function(t){return o(t.response)})})}function Y(t){function e(e){for(;n.length;){var a=n.pop();if(u(a)){var s=void 0,p=void 0;if(s=a.call(t,e,function(t){return p=t})||p,h(s))return new i(function(e,n){o.forEach(function(e){s=x(s,function(n){return e.call(t,n)||n},n)}),x(s,e,n)},t);u(s)&&o.unshift(s)}else r("Invalid interceptor of type "+typeof a+", must be a function")}}var n=[Q],o=[];return h(t)||(t=null),e.use=function(t){n.push(t)},e}function Q(t){return(t.client||(bt?J:X))(t)}function Z(t,e){return Object.keys(t).reduce(function(t,n){return d(e)===d(n)?n:t},null)}function tt(t){if(/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return l(t)}function et(t){return new i(function(e){var n=new FileReader;n.readAsText(t),n.onload=function(){e(n.result)}})}function nt(t){return 0===t.type.indexOf("text")||-1!==t.type.indexOf("json")}function ot(t){var e=this||{},n=Y(e.$vm);return _(t||{},e.$options,ot.options),ot.interceptors.forEach(function(t){f(t)&&(t=ot.interceptor[t]),u(t)&&n.use(t)}),n(new kt(t)).then(function(t){return t.ok?t:i.reject(t)},function(t){return t instanceof Error&&s(t),i.reject(t)})}function it(t,e,n,o){var i=this||{},a={};return n=gt({},it.actions,n),y(n,function(n,r){n=k({url:t,params:gt({},e)},o,n),a[r]=function(){return(i.$http||ot)(at(n,arguments))}}),a}function at(t,e){var n,o=gt({},t),i={};switch(e.length){case 2:i=e[0],n=e[1];break;case 1:/^(POST|PUT|PATCH)$/i.test(o.method)?n=e[0]:i=e[0];break;case 0:break;default:throw"Expected up to 2 arguments [params, body], got "+e.length+" arguments"}return o.body=n,o.params=gt({},o.params,i),o}function rt(t){rt.installed||(a(t),t.url=M,t.http=ot,t.resource=it,t.Promise=i,Object.defineProperties(t.prototype,{$url:{get:function(){return w(t.url,this,this.$options.url)}},$http:{get:function(){return w(t.http,this,this.$options.http)}},$resource:{get:function(){return t.resource.bind(this)}},$promise:{get:function(){var e=this;return function(n){return new t.Promise(n,e)}}}}))}Object.defineProperty(e,"__esModule",{value:!0}),n.d(e,"Url