vue-retina
Version:
a retinajs binding of vue2
87 lines (82 loc) • 738 kB
JavaScript
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 3);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("var retina = void 0;\n\nfunction setupRetina(el, binding, vnode, oldValue) {\n var newSrc = vnode ? vnode.data.attrs && vnode.data.attrs.src : 0;\n var oldSrc = oldValue ? oldValue.data.attrs && oldVnode.data.attrs.src : 1;\n if (binding.value !== binding.oldValue || newSrc !== oldSrc) {\n el.setAttribute('data-rjs', binding.value || 2);\n el.removeAttribute('data-rjs-processed');\n if (retina) {\n if (el._onload) {\n el.removeEventListener('load', el._onload);\n }\n el._onload = function () {\n return retina([el]);\n };\n el.addEventListener('load', el._onload);\n }\n }\n}\n\nvar directive = {\n inserted: function inserted(el, binding) {\n setupRetina(el, binding);\n },\n update: function update(el, binding, vnode, oldVnode) {\n setupRetina(el, binding, vnode, oldVnode);\n },\n unbind: function unbind(el) {\n if (el._onload) {\n el.removeEventListener('load', el._onload);\n }\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (Vue, options) {\n\n retina = Vue.retina = options.retina;\n if (!Vue.retina) {\n console.error('vue-retina need retina');\n return;\n }\n\n Vue.directive('rjs', directive);\n Vue.directive('retina', directive);\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvaW5kZXguanM/MWZkZiJdLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgcmV0aW5hXG5cbmZ1bmN0aW9uIHNldHVwUmV0aW5hIChlbCwgYmluZGluZywgdm5vZGUsIG9sZFZhbHVlKSB7XG4gICAgY29uc3QgbmV3U3JjID0gdm5vZGUgPyAodm5vZGUuZGF0YS5hdHRycyAmJiB2bm9kZS5kYXRhLmF0dHJzLnNyYykgOiAwXG4gICAgY29uc3Qgb2xkU3JjID0gb2xkVmFsdWUgPyAob2xkVmFsdWUuZGF0YS5hdHRycyAmJiBvbGRWbm9kZS5kYXRhLmF0dHJzLnNyYykgOiAxXG4gICAgaWYgKGJpbmRpbmcudmFsdWUgIT09IGJpbmRpbmcub2xkVmFsdWUgXG4gICAgICB8fCBuZXdTcmMgIT09IG9sZFNyYykge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLXJqcycsIGJpbmRpbmcudmFsdWUgfHwgMilcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1yanMtcHJvY2Vzc2VkJylcbiAgICAgIGlmIChyZXRpbmEpIHtcbiAgICAgICAgaWYgKGVsLl9vbmxvYWQpIHtcbiAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgZWwuX29ubG9hZClcbiAgICAgICAgfVxuICAgICAgICBlbC5fb25sb2FkID0gKCkgPT4gcmV0aW5hKFtlbF0pXG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBlbC5fb25sb2FkKSBcbiAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IGRpcmVjdGl2ZSA9IHtcbiAgaW5zZXJ0ZWQgKGVsLCBiaW5kaW5nKSB7XG4gICAgc2V0dXBSZXRpbmEoZWwsIGJpbmRpbmcpXG4gIH0sXG4gIHVwZGF0ZSAoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWbm9kZSkge1xuICAgIHNldHVwUmV0aW5hKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpXG4gIH0sXG5cbiAgdW5iaW5kIChlbCkge1xuICAgIGlmIChlbC5fb25sb2FkKSB7XG4gICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgZWwuX29ubG9hZClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKFZ1ZSwgb3B0aW9ucykge1xuXG4gIHJldGluYSA9IFZ1ZS5yZXRpbmEgPSBvcHRpb25zLnJldGluYVxuICBpZiAoIVZ1ZS5yZXRpbmEpIHtcbiAgICBjb25zb2xlLmVycm9yKCd2dWUtcmV0aW5hIG5lZWQgcmV0aW5hJylcbiAgICByZXR1cm4gXG4gIH1cblxuICBWdWUuZGlyZWN0aXZlKCdyanMnLCBkaXJlY3RpdmUpXG4gIFZ1ZS5kaXJlY3RpdmUoJ3JldGluYScsIGRpcmVjdGl2ZSlcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2luZGV4LmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=");
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * Retina.js v2.1.1\n *\n * Copyright 2016 Axial, LLC\n * Released under the MIT license\n *\n * Retina.js is an open source script that makes it easy to serve\n * high-resolution images to devices with retina displays.\n */\n(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports !== \"undefined\") {\n factory(exports);\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports);\n global.retina = mod.exports;\n }\n})(this, function (exports) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n /*\n * Determine whether or not `window` is available.\n */\n var hasWindow = typeof window !== 'undefined';\n\n /*\n * Get the device pixel ratio per our environment.\n * Default to 1.\n */\n var environment = Math.round(hasWindow ? window.devicePixelRatio || 1 : 1);\n\n /*\n * Define a pattern for capturing src url suffixes.\n */\n var srcReplace = /(\\.[A-z]{3,4}\\/?(\\?.*)?)$/;\n var inlineReplace = /url\\(('|\")?([^\\)'\"]+)('|\")?\\)/i;\n\n /*\n * Define our selectors for elements to target.\n */\n var selector = '[data-rjs]';\n\n /*\n * Define the attribute we'll use to mark an image as having been processed.\n */\n var processedAttr = 'data-rjs-processed';\n\n /**\n * Shortcut for turning some iterable object into an array.\n *\n * @param {Iterable} object Any iterable object.\n *\n * @return {Array}\n */\n function arrayify(object) {\n return Array.prototype.slice.call(object);\n }\n\n /**\n * Chooses the actual image size to fetch, (for example 2 or 3) that\n * will be used to create a suffix like \"@2x\" or \"@3x\".\n *\n * @param {String|Number} cap The number the user provided indicating that\n * they have prepared images up to this size.\n *\n * @return {Number} The number we'll be using to create a suffix.\n */\n function chooseCap(cap) {\n var numericCap = parseInt(cap, 10);\n\n /*\n * If the environment's device pixel ratio is less than what the user\n * provided, we'll only grab images at that size.\n */\n if (environment < numericCap) {\n return environment;\n\n /*\n * If the device pixel ratio is greater than or equal to what the\n * user provided, we'll use what the user provided.\n */\n } else {\n return numericCap;\n }\n }\n\n /**\n * Makes sure that, since we are going to swap out the source of an image,\n * the image does not change size on the page.\n *\n * @param {Element} image An image element in the DOM.\n *\n * @return {Element} The same element that was passed in.\n */\n function forceOriginalDimensions(image) {\n if (!image.hasAttribute('data-no-resize')) {\n if (image.offsetWidth === 0 && image.offsetHeight === 0) {\n image.setAttribute('width', image.naturalWidth);\n image.setAttribute('height', image.naturalHeight);\n } else {\n image.setAttribute('width', image.offsetWidth);\n image.setAttribute('height', image.offsetHeight);\n }\n }\n return image;\n }\n\n /**\n * Determines whether the retina image actually exists on the server.\n * If so, swaps out the retina image for the standard one. If not,\n * leaves the original image alone.\n *\n * @param {Element} image An image element in the DOM.\n * @param {String} newSrc The url to the retina image.\n *\n * @return {undefined}\n */\n function setSourceIfAvailable(image, retinaURL) {\n var imgType = image.nodeName.toLowerCase();\n\n /*\n * Create a new image element and give it a load listener. When the\n * load listener fires, it means the URL is correct and we will then\n * attach it to the user's image.\n */\n var testImage = document.createElement('img');\n testImage.addEventListener('load', function () {\n /*\n * If we're dealing with an image tag, force it's dimensions\n * and set the source attribute. If not, go after the background-image\n * inline style.\n */\n if (imgType === 'img') {\n forceOriginalDimensions(image).setAttribute('src', retinaURL);\n } else {\n image.style.backgroundImage = 'url(' + retinaURL + ')';\n }\n });\n\n /*\n * Attach the retina URL to our proxy image to load in the new\n * image resource.\n */\n testImage.setAttribute('src', retinaURL);\n\n /*\n * Mark our image as processed so that it won't be processed again.\n */\n image.setAttribute(processedAttr, true);\n }\n\n /**\n * Attempts to do an image url swap on a given image.\n *\n * @param {Element} image An image in the DOM.\n * @param {String} src The original image source attribute.\n * @param {String|Number} rjs The pixel density cap for images provided.\n *\n * @return {undefined}\n */\n function dynamicSwapImage(image, src) {\n var rjs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n var cap = chooseCap(rjs);\n\n /*\n * Don't do anything if the cap is less than 2 or there is no src.\n */\n if (src && cap > 1) {\n var newSrc = src.replace(srcReplace, '@' + cap + 'x$1');\n setSourceIfAvailable(image, newSrc);\n }\n }\n\n /**\n * Performs an image url swap on a given image with a provided url.\n *\n * @param {Element} image An image in the DOM.\n * @param {String} src The original image source attribute.\n * @param {String} hdsrc The path for a 2x image.\n *\n * @return {undefined}\n */\n function manualSwapImage(image, src, hdsrc) {\n if (environment > 1) {\n setSourceIfAvailable(image, hdsrc);\n }\n }\n\n /**\n * Collects all images matching our selector, and converts our\n * NodeList into an Array so that Array methods will be available to it.\n *\n * @param {Iterable} images Optional. An Array, jQuery selection, or NodeList\n * of elements to affect with retina.js.\n *\n * @return {Iterable} Contains all elements matching our selector.\n */\n function getImages(images) {\n if (!images) {\n return typeof document !== 'undefined' ? arrayify(document.querySelectorAll(selector)) : [];\n } else {\n return typeof images.forEach === 'function' ? images : arrayify(images);\n }\n }\n\n /**\n * Converts a string like \"url(hello.png)\" into \"hello.png\".\n *\n * @param {Element} img An HTML element with a background image.\n *\n * @return {String}\n */\n function cleanBgImg(img) {\n return img.style.backgroundImage.replace(inlineReplace, '$2');\n }\n\n /**\n * Gets all participating images and dynamically swaps out each one for its\n * retina equivalent taking into account the environment capabilities and\n * the densities for which the user has provided images.\n *\n * @param {Iterable} images Optional. An Array, jQuery selection, or NodeList\n * of elements to affect with retina.js. If not\n * provided, retina.js will grab all images on the\n * page.\n *\n * @return {undefined}\n */\n function retina(images) {\n getImages(images).forEach(function (img) {\n if (!img.getAttribute(processedAttr)) {\n var isImg = img.nodeName.toLowerCase() === 'img';\n var src = isImg ? img.getAttribute('src') : cleanBgImg(img);\n var rjs = img.getAttribute('data-rjs');\n var rjsIsNumber = !isNaN(parseInt(rjs, 10));\n\n // do not try to load /null image!\n if (rjs === null) {\n return;\n }\n\n /*\n * If the user provided a number, dynamically swap out the image.\n * If the user provided a url, do it manually.\n */\n if (rjsIsNumber) {\n dynamicSwapImage(img, src, rjs);\n } else {\n manualSwapImage(img, src, rjs);\n }\n }\n });\n }\n\n /*\n * If this environment has `window`, activate the plugin.\n */\n if (hasWindow) {\n window.addEventListener('load', function () {\n retina();\n });\n window.retinajs = retina;\n }\n\n exports.default = retina;\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vcmV0aW5hanMvZGlzdC9yZXRpbmEuanM/NjA2MCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFJldGluYS5qcyB2Mi4xLjFcbiAqXG4gKiBDb3B5cmlnaHQgMjAxNiBBeGlhbCwgTExDXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqXG4gKiBSZXRpbmEuanMgaXMgYW4gb3BlbiBzb3VyY2Ugc2NyaXB0IHRoYXQgbWFrZXMgaXQgZWFzeSB0byBzZXJ2ZVxuICogaGlnaC1yZXNvbHV0aW9uIGltYWdlcyB0byBkZXZpY2VzIHdpdGggcmV0aW5hIGRpc3BsYXlzLlxuICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZmFjdG9yeShleHBvcnRzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbW9kID0ge1xuICAgICAgZXhwb3J0czoge31cbiAgICB9O1xuICAgIGZhY3RvcnkobW9kLmV4cG9ydHMpO1xuICAgIGdsb2JhbC5yZXRpbmEgPSBtb2QuZXhwb3J0cztcbiAgfVxufSkodGhpcywgZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG4gIH0pO1xuICAvKlxuICAgKiBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgYHdpbmRvd2AgaXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgdmFyIGhhc1dpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG4gIC8qXG4gICAqIEdldCB0aGUgZGV2aWNlIHBpeGVsIHJhdGlvIHBlciBvdXIgZW52aXJvbm1lbnQuXG4gICAqIERlZmF1bHQgdG8gMS5cbiAgICovXG4gIHZhciBlbnZpcm9ubWVudCA9IE1hdGgucm91bmQoaGFzV2luZG93ID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSA6IDEpO1xuXG4gIC8qXG4gICAqIERlZmluZSBhIHBhdHRlcm4gZm9yIGNhcHR1cmluZyBzcmMgdXJsIHN1ZmZpeGVzLlxuICAgKi9cbiAgdmFyIHNyY1JlcGxhY2UgPSAvKFxcLltBLXpdezMsNH1cXC8/KFxcPy4qKT8pJC87XG4gIHZhciBpbmxpbmVSZXBsYWNlID0gL3VybFxcKCgnfFwiKT8oW15cXCknXCJdKykoJ3xcIik/XFwpL2k7XG5cbiAgLypcbiAgICogRGVmaW5lIG91ciBzZWxlY3RvcnMgZm9yIGVsZW1lbnRzIHRvIHRhcmdldC5cbiAgICovXG4gIHZhciBzZWxlY3RvciA9ICdbZGF0YS1yanNdJztcblxuICAvKlxuICAgKiBEZWZpbmUgdGhlIGF0dHJpYnV0ZSB3ZSdsbCB1c2UgdG8gbWFyayBhbiBpbWFnZSBhcyBoYXZpbmcgYmVlbiBwcm9jZXNzZWQuXG4gICAqL1xuICB2YXIgcHJvY2Vzc2VkQXR0ciA9ICdkYXRhLXJqcy1wcm9jZXNzZWQnO1xuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBmb3IgdHVybmluZyBzb21lIGl0ZXJhYmxlIG9iamVjdCBpbnRvIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0gIHtJdGVyYWJsZX0gb2JqZWN0IEFueSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlpZnkob2JqZWN0KSB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iamVjdCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hvb3NlcyB0aGUgYWN0dWFsIGltYWdlIHNpemUgdG8gZmV0Y2gsIChmb3IgZXhhbXBsZSAyIG9yIDMpIHRoYXRcbiAgICogd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSBhIHN1ZmZpeCBsaWtlIFwiQDJ4XCIgb3IgXCJAM3hcIi5cbiAgICpcbiAgICogQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gY2FwIFRoZSBudW1iZXIgdGhlIHVzZXIgcHJvdmlkZWQgaW5kaWNhdGluZyB0aGF0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV5IGhhdmUgcHJlcGFyZWQgaW1hZ2VzIHVwIHRvIHRoaXMgc2l6ZS5cbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBUaGUgbnVtYmVyIHdlJ2xsIGJlIHVzaW5nIHRvIGNyZWF0ZSBhIHN1ZmZpeC5cbiAgICovXG4gIGZ1bmN0aW9uIGNob29zZUNhcChjYXApIHtcbiAgICB2YXIgbnVtZXJpY0NhcCA9IHBhcnNlSW50KGNhcCwgMTApO1xuXG4gICAgLypcbiAgICAgKiBJZiB0aGUgZW52aXJvbm1lbnQncyBkZXZpY2UgcGl4ZWwgcmF0aW8gaXMgbGVzcyB0aGFuIHdoYXQgdGhlIHVzZXJcbiAgICAgKiBwcm92aWRlZCwgd2UnbGwgb25seSBncmFiIGltYWdlcyBhdCB0aGF0IHNpemUuXG4gICAgICovXG4gICAgaWYgKGVudmlyb25tZW50IDwgbnVtZXJpY0NhcCkge1xuICAgICAgcmV0dXJuIGVudmlyb25tZW50O1xuXG4gICAgICAvKlxuICAgICAgICogSWYgdGhlIGRldmljZSBwaXhlbCByYXRpbyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gd2hhdCB0aGVcbiAgICAgICAqIHVzZXIgcHJvdmlkZWQsIHdlJ2xsIHVzZSB3aGF0IHRoZSB1c2VyIHByb3ZpZGVkLlxuICAgICAgICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudW1lcmljQ2FwO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlcyBzdXJlIHRoYXQsIHNpbmNlIHdlIGFyZSBnb2luZyB0byBzd2FwIG91dCB0aGUgc291cmNlIG9mIGFuIGltYWdlLFxuICAgKiB0aGUgaW1hZ2UgZG9lcyBub3QgY2hhbmdlIHNpemUgb24gdGhlIHBhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSAge0VsZW1lbnR9IGltYWdlIEFuIGltYWdlIGVsZW1lbnQgaW4gdGhlIERPTS5cbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudH0gVGhlIHNhbWUgZWxlbWVudCB0aGF0IHdhcyBwYXNzZWQgaW4uXG4gICAqL1xuICBmdW5jdGlvbiBmb3JjZU9yaWdpbmFsRGltZW5zaW9ucyhpbWFnZSkge1xuICAgIGlmICghaW1hZ2UuaGFzQXR0cmlidXRlKCdkYXRhLW5vLXJlc2l6ZScpKSB7XG4gICAgICBpZiAoaW1hZ2Uub2Zmc2V0V2lkdGggPT09IDAgJiYgaW1hZ2Uub2Zmc2V0SGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIGltYWdlLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBpbWFnZS5uYXR1cmFsV2lkdGgpO1xuICAgICAgICBpbWFnZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGltYWdlLm5hdHVyYWxIZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1hZ2Uuc2V0QXR0cmlidXRlKCd3aWR0aCcsIGltYWdlLm9mZnNldFdpZHRoKTtcbiAgICAgICAgaW1hZ2Uuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBpbWFnZS5vZmZzZXRIZWlnaHQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW1hZ2U7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByZXRpbmEgaW1hZ2UgYWN0dWFsbHkgZXhpc3RzIG9uIHRoZSBzZXJ2ZXIuXG4gICAqIElmIHNvLCBzd2FwcyBvdXQgdGhlIHJldGluYSBpbWFnZSBmb3IgdGhlIHN0YW5kYXJkIG9uZS4gSWYgbm90LFxuICAgKiBsZWF2ZXMgdGhlIG9yaWdpbmFsIGltYWdlIGFsb25lLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGltYWdlICBBbiBpbWFnZSBlbGVtZW50IGluIHRoZSBET00uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSAgbmV3U3JjIFRoZSB1cmwgdG8gdGhlIHJldGluYSBpbWFnZS5cbiAgICpcbiAgICogQHJldHVybiB7dW5kZWZpbmVkfVxuICAgKi9cbiAgZnVuY3Rpb24gc2V0U291cmNlSWZBdmFpbGFibGUoaW1hZ2UsIHJldGluYVVSTCkge1xuICAgIHZhciBpbWdUeXBlID0gaW1hZ2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIC8qXG4gICAgICogQ3JlYXRlIGEgbmV3IGltYWdlIGVsZW1lbnQgYW5kIGdpdmUgaXQgYSBsb2FkIGxpc3RlbmVyLiBXaGVuIHRoZVxuICAgICAqIGxvYWQgbGlzdGVuZXIgZmlyZXMsIGl0IG1lYW5zIHRoZSBVUkwgaXMgY29ycmVjdCBhbmQgd2Ugd2lsbCB0aGVuXG4gICAgICogYXR0YWNoIGl0IHRvIHRoZSB1c2VyJ3MgaW1hZ2UuXG4gICAgICovXG4gICAgdmFyIHRlc3RJbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHRlc3RJbWFnZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgLypcbiAgICAgICAqIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBpbWFnZSB0YWcsIGZvcmNlIGl0J3MgZGltZW5zaW9uc1xuICAgICAgICogYW5kIHNldCB0aGUgc291cmNlIGF0dHJpYnV0ZS4gSWYgbm90LCBnbyBhZnRlciB0aGUgYmFja2dyb3VuZC1pbWFnZVxuICAgICAgICogaW5saW5lIHN0eWxlLlxuICAgICAgICovXG4gICAgICBpZiAoaW1nVHlwZSA9PT0gJ2ltZycpIHtcbiAgICAgICAgZm9yY2VPcmlnaW5hbERpbWVuc2lvbnMoaW1hZ2UpLnNldEF0dHJpYnV0ZSgnc3JjJywgcmV0aW5hVVJMKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGltYWdlLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICd1cmwoJyArIHJldGluYVVSTCArICcpJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qXG4gICAgICogQXR0YWNoIHRoZSByZXRpbmEgVVJMIHRvIG91ciBwcm94eSBpbWFnZSB0byBsb2FkIGluIHRoZSBuZXdcbiAgICAgKiBpbWFnZSByZXNvdXJjZS5cbiAgICAgKi9cbiAgICB0ZXN0SW1hZ2Uuc2V0QXR0cmlidXRlKCdzcmMnLCByZXRpbmFVUkwpO1xuXG4gICAgLypcbiAgICAgKiBNYXJrIG91ciBpbWFnZSBhcyBwcm9jZXNzZWQgc28gdGhhdCBpdCB3b24ndCBiZSBwcm9jZXNzZWQgYWdhaW4uXG4gICAgICovXG4gICAgaW1hZ2Uuc2V0QXR0cmlidXRlKHByb2Nlc3NlZEF0dHIsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIGRvIGFuIGltYWdlIHVybCBzd2FwIG9uIGEgZ2l2ZW4gaW1hZ2UuXG4gICAqXG4gICAqIEBwYXJhbSAge0VsZW1lbnR9ICAgICAgIGltYWdlIEFuIGltYWdlIGluIHRoZSBET00uXG4gICAqIEBwYXJhbSAge1N0cmluZ30gICAgICAgIHNyYyAgIFRoZSBvcmlnaW5hbCBpbWFnZSBzb3VyY2UgYXR0cmlidXRlLlxuICAgKiBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSByanMgICBUaGUgcGl4ZWwgZGVuc2l0eSBjYXAgZm9yIGltYWdlcyBwcm92aWRlZC5cbiAgICpcbiAgICogQHJldHVybiB7dW5kZWZpbmVkfVxuICAgKi9cbiAgZnVuY3Rpb24gZHluYW1pY1N3YXBJbWFnZShpbWFnZSwgc3JjKSB7XG4gICAgdmFyIHJqcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogMTtcblxuICAgIHZhciBjYXAgPSBjaG9vc2VDYXAocmpzKTtcblxuICAgIC8qXG4gICAgICogRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGNhcCBpcyBsZXNzIHRoYW4gMiBvciB0aGVyZSBpcyBubyBzcmMuXG4gICAgICovXG4gICAgaWYgKHNyYyAmJiBjYXAgPiAxKSB7XG4gICAgICB2YXIgbmV3U3JjID0gc3JjLnJlcGxhY2Uoc3JjUmVwbGFjZSwgJ0AnICsgY2FwICsgJ3gkMScpO1xuICAgICAgc2V0U291cmNlSWZBdmFpbGFibGUoaW1hZ2UsIG5ld1NyYyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGFuIGltYWdlIHVybCBzd2FwIG9uIGEgZ2l2ZW4gaW1hZ2Ugd2l0aCBhIHByb3ZpZGVkIHVybC5cbiAgICpcbiAgICogQHBhcmFtICB7RWxlbWVudH0gaW1hZ2UgIEFuIGltYWdlIGluIHRoZSBET00uXG4gICAqIEBwYXJhbSAge1N0cmluZ30gIHNyYyAgICBUaGUgb3JpZ2luYWwgaW1hZ2Ugc291cmNlIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtICB7U3RyaW5nfSAgaGRzcmMgIFRoZSBwYXRoIGZvciBhIDJ4IGltYWdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiBtYW51YWxTd2FwSW1hZ2UoaW1hZ2UsIHNyYywgaGRzcmMpIHtcbiAgICBpZiAoZW52aXJvbm1lbnQgPiAxKSB7XG4gICAgICBzZXRTb3VyY2VJZkF2YWlsYWJsZShpbWFnZSwgaGRzcmMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyBhbGwgaW1hZ2VzIG1hdGNoaW5nIG91ciBzZWxlY3RvciwgYW5kIGNvbnZlcnRzIG91clxuICAgKiBOb2RlTGlzdCBpbnRvIGFuIEFycmF5IHNvIHRoYXQgQXJyYXkgbWV0aG9kcyB3aWxsIGJlIGF2YWlsYWJsZSB0byBpdC5cbiAgICpcbiAgICogQHBhcmFtIHtJdGVyYWJsZX0gaW1hZ2VzICBPcHRpb25hbC4gQW4gQXJyYXksIGpRdWVyeSBzZWxlY3Rpb24sIG9yIE5vZGVMaXN0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgZWxlbWVudHMgdG8gYWZmZWN0IHdpdGggcmV0aW5hLmpzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtJdGVyYWJsZX0gQ29udGFpbnMgYWxsIGVsZW1lbnRzIG1hdGNoaW5nIG91ciBzZWxlY3Rvci5cbiAgICovXG4gIGZ1bmN0aW9uIGdldEltYWdlcyhpbWFnZXMpIHtcbiAgICBpZiAoIWltYWdlcykge1xuICAgICAgcmV0dXJuIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBhcnJheWlmeShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkgOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHR5cGVvZiBpbWFnZXMuZm9yRWFjaCA9PT0gJ2Z1bmN0aW9uJyA/IGltYWdlcyA6IGFycmF5aWZ5KGltYWdlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc3RyaW5nIGxpa2UgXCJ1cmwoaGVsbG8ucG5nKVwiIGludG8gXCJoZWxsby5wbmdcIi5cbiAgICpcbiAgICogQHBhcmFtICB7RWxlbWVudH0gaW1nIEFuIEhUTUwgZWxlbWVudCB3aXRoIGEgYmFja2dyb3VuZCBpbWFnZS5cbiAgICpcbiAgICogQHJldHVybiB7U3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYW5CZ0ltZyhpbWcpIHtcbiAgICByZXR1cm4gaW1nLnN0eWxlLmJhY2tncm91bmRJbWFnZS5yZXBsYWNlKGlubGluZVJlcGxhY2UsICckMicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHBhcnRpY2lwYXRpbmcgaW1hZ2VzIGFuZCBkeW5hbWljYWxseSBzd2FwcyBvdXQgZWFjaCBvbmUgZm9yIGl0c1xuICAgKiByZXRpbmEgZXF1aXZhbGVudCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBlbnZpcm9ubWVudCBjYXBhYmlsaXRpZXMgYW5kXG4gICAqIHRoZSBkZW5zaXRpZXMgZm9yIHdoaWNoIHRoZSB1c2VyIGhhcyBwcm92aWRlZCBpbWFnZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7SXRlcmFibGV9IGltYWdlcyAgT3B0aW9uYWwuIEFuIEFycmF5LCBqUXVlcnkgc2VsZWN0aW9uLCBvciBOb2RlTGlzdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGVsZW1lbnRzIHRvIGFmZmVjdCB3aXRoIHJldGluYS5qcy4gSWYgbm90XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQsIHJldGluYS5qcyB3aWxsIGdyYWIgYWxsIGltYWdlcyBvbiB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG4gICAqL1xuICBmdW5jdGlvbiByZXRpbmEoaW1hZ2VzKSB7XG4gICAgZ2V0SW1hZ2VzKGltYWdlcykuZm9yRWFjaChmdW5jdGlvbiAoaW1nKSB7XG4gICAgICBpZiAoIWltZy5nZXRBdHRyaWJ1dGUocHJvY2Vzc2VkQXR0cikpIHtcbiAgICAgICAgdmFyIGlzSW1nID0gaW1nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbWcnO1xuICAgICAgICB2YXIgc3JjID0gaXNJbWcgPyBpbWcuZ2V0QXR0cmlidXRlKCdzcmMnKSA6IGNsZWFuQmdJbWcoaW1nKTtcbiAgICAgICAgdmFyIHJqcyA9IGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmpzJyk7XG4gICAgICAgIHZhciByanNJc051bWJlciA9ICFpc05hTihwYXJzZUludChyanMsIDEwKSk7XG5cbiAgICAgICAgLy8gZG8gbm90IHRyeSB0byBsb2FkIC9udWxsIGltYWdlIVxuICAgICAgICBpZiAocmpzID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICogSWYgdGhlIHVzZXIgcHJvdmlkZWQgYSBudW1iZXIsIGR5bmFtaWNhbGx5IHN3YXAgb3V0IHRoZSBpbWFnZS5cbiAgICAgICAgICogSWYgdGhlIHVzZXIgcHJvdmlkZWQgYSB1cmwsIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHJqc0lzTnVtYmVyKSB7XG4gICAgICAgICAgZHluYW1pY1N3YXBJbWFnZShpbWcsIHNyYywgcmpzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYW51YWxTd2FwSW1hZ2UoaW1nLCBzcmMsIHJqcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAqIElmIHRoaXMgZW52aXJvbm1lbnQgaGFzIGB3aW5kb3dgLCBhY3RpdmF0ZSB0aGUgcGx1Z2luLlxuICAgKi9cbiAgaWYgKGhhc1dpbmRvdykge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0aW5hKCk7XG4gICAgfSk7XG4gICAgd2luZG93LnJldGluYWpzID0gcmV0aW5hO1xuICB9XG5cbiAgZXhwb3J0cy5kZWZhdWx0ID0gcmV0aW5hO1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3JldGluYWpzL2Rpc3QvcmV0aW5hLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=");
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(process, global) {/*!\n * Vue.js v2.3.3\n * (c) 2014-2017 Evan You\n * Released under the MIT License.\n */\n\n\n/* */\n\n// these helpers produces better vm code in JS engines due to their\n// explicitness and function inlining\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n/**\n * Check if value is primitive\n */\nfunction isPrimitive (value) {\n return typeof value === 'string' || typeof value === 'number'\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\nvar _toString = Object.prototype.toString;\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : typeof val === 'object'\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert a input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Remove an item from an array\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether the object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /([^-])([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str\n .replace(hyphenateRE, '$1-$2')\n .replace(hyphenateRE, '$1-$2')\n .toLowerCase()\n});\n\n/**\n * Simple bind, faster than native\n */\nfunction bind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n // record original fn length\n boundFn._length = fn.length;\n return boundFn\n}\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/**\n * Perform no operation.\n */\nfunction noop () {}\n\n/**\n * Always return false.\n */\nvar no = function () { return false; };\n\n/**\n * Return same value\n */\nvar identity = function (_) { return _; };\n\n/**\n * Generate a static keys string from compiler modules.\n */\nfunction genStaticKeys (modules) {\n return modules.reduce(function (keys, m) {\n return keys.concat(m.staticKeys || [])\n }, []).join(',')\n}\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n return JSON.stringify(a) === JSON.stringify(b)\n } catch (e) {\n // possible circular reference\n return a === b\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated'\n];\n\n/* */\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\nvar emptyObject = Object.freeze({});\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = /[^\\w.$]/;\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar formatComponentName = (null); // work around flow check\n\nif (process.env.NODE_ENV !== 'production') {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.error(\"[Vue warn]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n return '<Root>'\n }\n var name = typeof vm === 'string'\n ? vm\n : typeof vm === 'function' && vm.options\n ? vm.options.name\n : vm._isVue\n ? vm.$options.name || vm.$options._componentTag\n : vm.name;\n\n var file = vm._isVue && vm.$options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n var generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n if (config.errorHandler) {\n config.errorHandler.call(null, err, vm, info);\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if (inBrowser && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n }\n}\n\n/* */\n/* globals MutationObserver */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = UA && UA.indexOf('android') > 0;\nvar isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\n\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n } )); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\n/**\n * Defer a task to execute it asynchronously.\n */\nvar nextTick = (function () {\n var callbacks = [];\n var pending = false;\n var timerFunc;\n\n function nextTickHandler () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n }\n\n // the nextTick behavior leverages the microtask queue, which can be accessed\n // via either native Promise.then or MutationObserver.\n // MutationObserver has wider support, however it is seriously bugged in\n // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n // completely stops working after triggering a few times... so, if native\n // Promise is available, we will use it:\n /* istanbul ignore if */\n if (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n var logError = function (err) { console.error(err); };\n timerFunc = function () {\n p.then(nextTickHandler).catch(logError);\n // in problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n } else if (typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n )) {\n // use MutationObserver where native Promise is not available,\n // e.g. PhantomJS IE11, iOS7, Android 4.4\n var counter = 1;\n var observer = new MutationObserver(nextTickHandler);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n } else {\n // fallback to setTimeout\n /* istanbul ignore next */\n timerFunc = function () {\n setTimeout(nextTickHandler, 0);\n };\n }\n\n return function queueNextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n _resolve = resolve;\n })\n }\n }\n})();\n\nvar _Set;\n/* istanbul ignore if */\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = (function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// the current target watcher being evaluated.\n// this is globally unique because there could be only one\n// watcher being evaluated at any time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (_target) {\n if (Dep.target) { targetStack.push(Dep.target); }\n Dep.target = _target;\n}\n\nfunction popTarget () {\n Dep.target = targetStack.pop();\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);[\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n]\n.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var arguments$1 = arguments;\n\n // avoid leaking arguments:\n // http://jsperf.com/closure-with-arguments\n var i = arguments.length;\n var args = new Array(i);\n while (i--) {\n args[i] = arguments$1[i];\n }\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n inserted = args;\n break\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * By default, when a reactive property is set, the new value is\n * also converted to become reactive. However when passing down props,\n * we don't want to force conversion because the value may be a nested value\n * under a frozen data structure. Converting it would defeat the optimization.\n */\nvar observerState = {\n shouldConvert: true,\n isSettingProps: false\n};\n\n/**\n * Observer class that are attached to each observed\n * object. Once attached, the observer converts target\n * object's property keys into getter/setters that\n * collect dependencies and dispatches updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n var augment = hasProto\n ? protoAugment\n : copyAugment;\n augment(value, arrayMethods, arrayKeys);\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through each property and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i], obj[keys[i]]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment an target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment an target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value)) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n observerState.shouldConvert &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(va