diff --git a/.npmignore b/.npmignore index 49baa315..b2ca5c8b 100644 --- a/.npmignore +++ b/.npmignore @@ -3,5 +3,5 @@ *.yml build/ node_modules/ -local/ -gulpfile.js \ No newline at end of file +test/ +gulpfile.js diff --git a/build/webpack.config.js b/build/webpack.dev.config.js similarity index 100% rename from build/webpack.config.js rename to build/webpack.dev.config.js diff --git a/build/webpack.dist.dev.config.js b/build/webpack.dist.dev.config.js new file mode 100644 index 00000000..81c2167b --- /dev/null +++ b/build/webpack.dist.dev.config.js @@ -0,0 +1,48 @@ +var path = require('path'); +var webpack = require('webpack'); + +module.exports = { + entry: { + main: './src/index.js' + }, + output: { + path: path.resolve(__dirname, '../dist'), + publicPath: '/dist/', + filename: 'iview.js', + library: 'iview', + libraryTarget: 'umd', + umdNamedDefine: true + }, + resolve: { + extensions: ['', '.js', '.vue'] + }, + module: { + loaders: [{ + test: /\.vue$/, + loader: 'vue' + }, { + test: /\.js$/, + loader: 'babel', + exclude: /node_modules/ + }, { + test: /\.css$/, + loader: 'style!css!autoprefixer' + }, { + test: /\.less$/, + loader: 'style!css!less' + }, { + test: /\.(gif|jpg|png|woff|svg|eot|ttf)\??.*$/, + loader: 'url?limit=8192' + }, { + test: /\.(html|tpl)$/, + loader: 'vue-html' + }] + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: '"development"' + } + }) + ] +} diff --git a/build/webpack.dist.prod.config.js b/build/webpack.dist.prod.config.js new file mode 100644 index 00000000..3d0464b3 --- /dev/null +++ b/build/webpack.dist.prod.config.js @@ -0,0 +1,54 @@ +var path = require('path'); +var webpack = require('webpack'); + +module.exports = { + entry: { + main: './src/index.js' + }, + output: { + path: path.resolve(__dirname, '../dist'), + publicPath: '/dist/', + filename: 'iview.min.js', + library: 'iview', + libraryTarget: 'umd', + umdNamedDefine: true + }, + resolve: { + extensions: ['', '.js', '.vue'] + }, + module: { + loaders: [{ + test: /\.vue$/, + loader: 'vue' + }, { + test: /\.js$/, + loader: 'babel', + exclude: /node_modules/ + }, { + test: /\.css$/, + loader: 'style!css!autoprefixer' + }, { + test: /\.less$/, + loader: 'style!css!less' + }, { + test: /\.(gif|jpg|png|woff|svg|eot|ttf)\??.*$/, + loader: 'url?limit=8192' + }, { + test: /\.(html|tpl)$/, + loader: 'vue-html' + }] + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: '"production"' + } + }), + new webpack.optimize.UglifyJsPlugin({ + compress: { + warnings: false + } + }), + new webpack.optimize.OccurenceOrderPlugin() + ] +} diff --git a/dist/iview.js b/dist/iview.js new file mode 100644 index 00000000..737d8e27 --- /dev/null +++ b/dist/iview.js @@ -0,0 +1,20475 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define("iview", [], factory); + else if(typeof exports === 'object') + exports["iview"] = factory(); + else + root["iview"] = factory(); +})(this, function() { +return /******/ (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] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = 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; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = "/dist/"; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var _assign = __webpack_require__(1); + + var _assign2 = _interopRequireDefault(_assign); + + var _keys = __webpack_require__(38); + + var _keys2 = _interopRequireDefault(_keys); + + var _affix = __webpack_require__(42); + + var _affix2 = _interopRequireDefault(_affix); + + var _alert = __webpack_require__(50); + + var _alert2 = _interopRequireDefault(_alert); + + var _backTop = __webpack_require__(59); + + var _backTop2 = _interopRequireDefault(_backTop); + + var _badge = __webpack_require__(63); + + var _badge2 = _interopRequireDefault(_badge); + + var _breadcrumb = __webpack_require__(67); + + var _breadcrumb2 = _interopRequireDefault(_breadcrumb); + + var _button = __webpack_require__(74); + + var _button2 = _interopRequireDefault(_button); + + var _card = __webpack_require__(81); + + var _card2 = _interopRequireDefault(_card); + + var _checkbox = __webpack_require__(85); + + var _checkbox2 = _interopRequireDefault(_checkbox); + + var _circle = __webpack_require__(92); + + var _circle2 = _interopRequireDefault(_circle); + + var _collapse = __webpack_require__(96); + + var _collapse2 = _interopRequireDefault(_collapse); + + var _icon = __webpack_require__(53); + + var _icon2 = _interopRequireDefault(_icon); + + var _input = __webpack_require__(103); + + var _input2 = _interopRequireDefault(_input); + + var _inputNumber = __webpack_require__(107); + + var _inputNumber2 = _interopRequireDefault(_inputNumber); + + var _loadingBar = __webpack_require__(111); + + var _loadingBar2 = _interopRequireDefault(_loadingBar); + + var _message = __webpack_require__(117); + + var _message2 = _interopRequireDefault(_message); + + var _modal = __webpack_require__(125); + + var _modal2 = _interopRequireDefault(_modal); + + var _notice = __webpack_require__(130); + + var _notice2 = _interopRequireDefault(_notice); + + var _page = __webpack_require__(131); + + var _page2 = _interopRequireDefault(_page); + + var _poptip = __webpack_require__(184); + + var _poptip2 = _interopRequireDefault(_poptip); + + var _progress = __webpack_require__(189); + + var _progress2 = _interopRequireDefault(_progress); + + var _radio = __webpack_require__(193); + + var _radio2 = _interopRequireDefault(_radio); + + var _slider = __webpack_require__(200); + + var _slider2 = _interopRequireDefault(_slider); + + var _spin = __webpack_require__(207); + + var _spin2 = _interopRequireDefault(_spin); + + var _steps = __webpack_require__(211); + + var _steps2 = _interopRequireDefault(_steps); + + var _switch = __webpack_require__(218); + + var _switch2 = _interopRequireDefault(_switch); + + var _tag = __webpack_require__(222); + + var _tag2 = _interopRequireDefault(_tag); + + var _timeline = __webpack_require__(226); + + var _timeline2 = _interopRequireDefault(_timeline); + + var _tooltip = __webpack_require__(233); + + var _tooltip2 = _interopRequireDefault(_tooltip); + + var _layout = __webpack_require__(234); + + var _select = __webpack_require__(241); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var iview = { + Affix: _affix2.default, + Alert: _alert2.default, + BackTop: _backTop2.default, + Badge: _badge2.default, + Breadcrumb: _breadcrumb2.default, + BreadcrumbItem: _breadcrumb2.default.Item, + iButton: _button2.default, + ButtonGroup: _button2.default.Group, + Card: _card2.default, + Checkbox: _checkbox2.default, + CheckboxGroup: _checkbox2.default.Group, + Circle: _circle2.default, + iCol: _layout.Col, + Collapse: _collapse2.default, + Icon: _icon2.default, + iInput: _input2.default, + InputNumber: _inputNumber2.default, + LoadingBar: _loadingBar2.default, + Message: _message2.default, + Modal: _modal2.default, + Notice: _notice2.default, + iOption: _select.Option, + OptionGroup: _select.OptionGroup, + Page: _page2.default, + Panel: _collapse2.default.Panel, + Poptip: _poptip2.default, + Progress: _progress2.default, + Radio: _radio2.default, + RadioGroup: _radio2.default.Group, + Row: _layout.Row, + iSelect: _select.Select, + Slider: _slider2.default, + Spin: _spin2.default, + Step: _steps2.default.Step, + Steps: _steps2.default, + Switch: _switch2.default, + Tag: _tag2.default, + Timeline: _timeline2.default, + TimelineItem: _timeline2.default.Item, + Tooltip: _tooltip2.default + }; + + var install = function install(Vue) { + (0, _keys2.default)(iview).forEach(function (key) { + Vue.component(key, iview[key]); + }); + }; + + if (typeof window !== 'undefined' && window.Vue) { + install(window.Vue); + }; + + module.exports = (0, _assign2.default)(iview, { install: install }); + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(2), __esModule: true }; + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(3); + module.exports = __webpack_require__(6).Object.assign; + +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.3.1 Object.assign(target, source) + var $export = __webpack_require__(4); + + $export($export.S + $export.F, 'Object', {assign: __webpack_require__(19)}); + +/***/ }, +/* 4 */ +/***/ function(module, exports, __webpack_require__) { + + var global = __webpack_require__(5) + , core = __webpack_require__(6) + , ctx = __webpack_require__(7) + , hide = __webpack_require__(9) + , PROTOTYPE = 'prototype'; + + var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , IS_WRAP = type & $export.W + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , expProto = exports[PROTOTYPE] + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] + , key, own, out; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if(own && key in exports)continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function(C){ + var F = function(a, b, c){ + if(this instanceof C){ + switch(arguments.length){ + case 0: return new C; + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if(IS_PROTO){ + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out); + } + } + }; + // type bitmap + $export.F = 1; // forced + $export.G = 2; // global + $export.S = 4; // static + $export.P = 8; // proto + $export.B = 16; // bind + $export.W = 32; // wrap + $export.U = 64; // safe + $export.R = 128; // real proto method for `library` + module.exports = $export; + +/***/ }, +/* 5 */ +/***/ function(module, exports) { + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); + if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef + +/***/ }, +/* 6 */ +/***/ function(module, exports) { + + var core = module.exports = {version: '2.4.0'}; + if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + // optional / simple context binding + var aFunction = __webpack_require__(8); + module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; + }; + +/***/ }, +/* 8 */ +/***/ function(module, exports) { + + module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; + }; + +/***/ }, +/* 9 */ +/***/ function(module, exports, __webpack_require__) { + + var dP = __webpack_require__(10) + , createDesc = __webpack_require__(18); + module.exports = __webpack_require__(14) ? function(object, key, value){ + return dP.f(object, key, createDesc(1, value)); + } : function(object, key, value){ + object[key] = value; + return object; + }; + +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + var anObject = __webpack_require__(11) + , IE8_DOM_DEFINE = __webpack_require__(13) + , toPrimitive = __webpack_require__(17) + , dP = Object.defineProperty; + + exports.f = __webpack_require__(14) ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; + }; + +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(12); + module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; + }; + +/***/ }, +/* 12 */ +/***/ function(module, exports) { + + module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + +/***/ }, +/* 13 */ +/***/ function(module, exports, __webpack_require__) { + + module.exports = !__webpack_require__(14) && !__webpack_require__(15)(function(){ + return Object.defineProperty(__webpack_require__(16)('div'), 'a', {get: function(){ return 7; }}).a != 7; + }); + +/***/ }, +/* 14 */ +/***/ function(module, exports, __webpack_require__) { + + // Thank's IE8 for his funny defineProperty + module.exports = !__webpack_require__(15)(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; + }); + +/***/ }, +/* 15 */ +/***/ function(module, exports) { + + module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } + }; + +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(12) + , document = __webpack_require__(5).document + // in old IE typeof document.createElement is 'object' + , is = isObject(document) && isObject(document.createElement); + module.exports = function(it){ + return is ? document.createElement(it) : {}; + }; + +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { + + // 7.1.1 ToPrimitive(input [, PreferredType]) + var isObject = __webpack_require__(12); + // instead of the ES6 spec version, we didn't implement @@toPrimitive case + // and the second argument - flag - preferred type is a string + module.exports = function(it, S){ + if(!isObject(it))return it; + var fn, val; + if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; + if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + throw TypeError("Can't convert object to primitive value"); + }; + +/***/ }, +/* 18 */ +/***/ function(module, exports) { + + module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; + }; + +/***/ }, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // 19.1.2.1 Object.assign(target, source, ...) + var getKeys = __webpack_require__(20) + , gOPS = __webpack_require__(35) + , pIE = __webpack_require__(36) + , toObject = __webpack_require__(37) + , IObject = __webpack_require__(24) + , $assign = Object.assign; + + // should work with symbols and should have deterministic property order (V8 bug) + module.exports = !$assign || __webpack_require__(15)(function(){ + var A = {} + , B = {} + , S = Symbol() + , K = 'abcdefghijklmnopqrst'; + A[S] = 7; + K.split('').forEach(function(k){ B[k] = k; }); + return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; + }) ? function assign(target, source){ // eslint-disable-line no-unused-vars + var T = toObject(target) + , aLen = arguments.length + , index = 1 + , getSymbols = gOPS.f + , isEnum = pIE.f; + while(aLen > index){ + var S = IObject(arguments[index++]) + , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S) + , length = keys.length + , j = 0 + , key; + while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key]; + } return T; + } : $assign; + +/***/ }, +/* 20 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.14 / 15.2.3.14 Object.keys(O) + var $keys = __webpack_require__(21) + , enumBugKeys = __webpack_require__(34); + + module.exports = Object.keys || function keys(O){ + return $keys(O, enumBugKeys); + }; + +/***/ }, +/* 21 */ +/***/ function(module, exports, __webpack_require__) { + + var has = __webpack_require__(22) + , toIObject = __webpack_require__(23) + , arrayIndexOf = __webpack_require__(27)(false) + , IE_PROTO = __webpack_require__(31)('IE_PROTO'); + + module.exports = function(object, names){ + var O = toIObject(object) + , i = 0 + , result = [] + , key; + for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while(names.length > i)if(has(O, key = names[i++])){ + ~arrayIndexOf(result, key) || result.push(key); + } + return result; + }; + +/***/ }, +/* 22 */ +/***/ function(module, exports) { + + var hasOwnProperty = {}.hasOwnProperty; + module.exports = function(it, key){ + return hasOwnProperty.call(it, key); + }; + +/***/ }, +/* 23 */ +/***/ function(module, exports, __webpack_require__) { + + // to indexed object, toObject with fallback for non-array-like ES3 strings + var IObject = __webpack_require__(24) + , defined = __webpack_require__(26); + module.exports = function(it){ + return IObject(defined(it)); + }; + +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + var cof = __webpack_require__(25); + module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ + return cof(it) == 'String' ? it.split('') : Object(it); + }; + +/***/ }, +/* 25 */ +/***/ function(module, exports) { + + var toString = {}.toString; + + module.exports = function(it){ + return toString.call(it).slice(8, -1); + }; + +/***/ }, +/* 26 */ +/***/ function(module, exports) { + + // 7.2.1 RequireObjectCoercible(argument) + module.exports = function(it){ + if(it == undefined)throw TypeError("Can't call method on " + it); + return it; + }; + +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { + + // false -> Array#indexOf + // true -> Array#includes + var toIObject = __webpack_require__(23) + , toLength = __webpack_require__(28) + , toIndex = __webpack_require__(30); + module.exports = function(IS_INCLUDES){ + return function($this, el, fromIndex){ + var O = toIObject($this) + , length = toLength(O.length) + , index = toIndex(fromIndex, length) + , value; + // Array#includes uses SameValueZero equality algorithm + if(IS_INCLUDES && el != el)while(length > index){ + value = O[index++]; + if(value != value)return true; + // Array#toIndex ignores holes, Array#includes - not + } else for(;length > index; index++)if(IS_INCLUDES || index in O){ + if(O[index] === el)return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; + }; + +/***/ }, +/* 28 */ +/***/ function(module, exports, __webpack_require__) { + + // 7.1.15 ToLength + var toInteger = __webpack_require__(29) + , min = Math.min; + module.exports = function(it){ + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 + }; + +/***/ }, +/* 29 */ +/***/ function(module, exports) { + + // 7.1.4 ToInteger + var ceil = Math.ceil + , floor = Math.floor; + module.exports = function(it){ + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); + }; + +/***/ }, +/* 30 */ +/***/ function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__(29) + , max = Math.max + , min = Math.min; + module.exports = function(index, length){ + index = toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); + }; + +/***/ }, +/* 31 */ +/***/ function(module, exports, __webpack_require__) { + + var shared = __webpack_require__(32)('keys') + , uid = __webpack_require__(33); + module.exports = function(key){ + return shared[key] || (shared[key] = uid(key)); + }; + +/***/ }, +/* 32 */ +/***/ function(module, exports, __webpack_require__) { + + var global = __webpack_require__(5) + , SHARED = '__core-js_shared__' + , store = global[SHARED] || (global[SHARED] = {}); + module.exports = function(key){ + return store[key] || (store[key] = {}); + }; + +/***/ }, +/* 33 */ +/***/ function(module, exports) { + + var id = 0 + , px = Math.random(); + module.exports = function(key){ + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); + }; + +/***/ }, +/* 34 */ +/***/ function(module, exports) { + + // IE 8- don't enum bug keys + module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' + ).split(','); + +/***/ }, +/* 35 */ +/***/ function(module, exports) { + + exports.f = Object.getOwnPropertySymbols; + +/***/ }, +/* 36 */ +/***/ function(module, exports) { + + exports.f = {}.propertyIsEnumerable; + +/***/ }, +/* 37 */ +/***/ function(module, exports, __webpack_require__) { + + // 7.1.13 ToObject(argument) + var defined = __webpack_require__(26); + module.exports = function(it){ + return Object(defined(it)); + }; + +/***/ }, +/* 38 */ +/***/ function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(39), __esModule: true }; + +/***/ }, +/* 39 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(40); + module.exports = __webpack_require__(6).Object.keys; + +/***/ }, +/* 40 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.14 Object.keys(O) + var toObject = __webpack_require__(37) + , $keys = __webpack_require__(20); + + __webpack_require__(41)('keys', function(){ + return function keys(it){ + return $keys(toObject(it)); + }; + }); + +/***/ }, +/* 41 */ +/***/ function(module, exports, __webpack_require__) { + + // most Object methods by ES6 should accept primitives + var $export = __webpack_require__(4) + , core = __webpack_require__(6) + , fails = __webpack_require__(15); + module.exports = function(KEY, exec){ + var fn = (core.Object || {})[KEY] || Object[KEY] + , exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); + }; + +/***/ }, +/* 42 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _affix = __webpack_require__(43); + + var _affix2 = _interopRequireDefault(_affix); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.default = _affix2.default; + +/***/ }, +/* 43 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(44) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\affix\\affix.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(49) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-e45ea8a6/affix.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 44 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-affix'; + + function getScroll(target, top) { + var prop = top ? 'pageYOffset' : 'pageXOffset'; + var method = top ? 'scrollTop' : 'scrollLeft'; + + var ret = target[prop]; + + if (typeof ret !== 'number') { + ret = window.document.documentElement[method]; + } + + return ret; + } + + function getOffset(element) { + var rect = element.getBoundingClientRect(); + + var scrollTop = getScroll(window, true); + var scrollLeft = getScroll(window); + + var docEl = window.document.body; + var clientTop = docEl.clientTop || 0; + var clientLeft = docEl.clientLeft || 0; + + return { + top: rect.top + scrollTop - clientTop, + left: rect.left + scrollLeft - clientLeft + }; + } + + exports.default = { + props: { + offsetTop: { + type: Number, + default: 0 + }, + offsetBottom: { + type: Number + } + }, + data: function data() { + return { + affix: false, + styles: {} + }; + }, + + computed: { + offsetType: function offsetType() { + var type = 'top'; + if (this.offsetBottom >= 0) { + type = 'bottom'; + } + + return type; + }, + classes: function classes() { + return [(0, _defineProperty3.default)({}, '' + prefixCls, this.affix)]; + } + }, + ready: function ready() { + window.addEventListener('scroll', this.handleScroll, false); + window.addEventListener('resize', this.handleScroll, false); + }, + beforeDestroy: function beforeDestroy() { + window.removeEventListener('scroll', this.handleScroll, false); + window.removeEventListener('resize', this.handleScroll, false); + }, + + methods: { + handleScroll: function handleScroll() { + var affix = this.affix; + var scrollTop = getScroll(window, true); + var elOffset = getOffset(this.$el); + var windowHeight = window.innerHeight; + var elHeight = this.$el.getElementsByTagName('div')[0].offsetHeight; + + if (elOffset.top - this.offsetTop < scrollTop && this.offsetType == 'top' && !affix) { + this.affix = true; + this.styles = { + top: this.offsetTop + 'px', + left: elOffset.left + 'px', + width: this.$el.offsetWidth + 'px' + }; + + this.$emit('on-change', true); + } else if (elOffset.top - this.offsetTop > scrollTop && this.offsetType == 'top' && affix) { + this.affix = false; + this.styles = null; + + this.$emit('on-change', false); + } + + if (elOffset.top + this.offsetBottom + elHeight > scrollTop + windowHeight && this.offsetType == 'bottom' && !affix) { + this.affix = true; + this.styles = { + bottom: this.offsetBottom + 'px', + left: elOffset.left + 'px', + width: this.$el.offsetWidth + 'px' + }; + + this.$emit('on-change', true); + } else if (elOffset.top + this.offsetBottom + elHeight < scrollTop + windowHeight && this.offsetType == 'bottom' && affix) { + this.affix = false; + this.styles = null; + + this.$emit('on-change', false); + } + } + } + }; + +/***/ }, +/* 45 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + + exports.__esModule = true; + + var _defineProperty = __webpack_require__(46); + + var _defineProperty2 = _interopRequireDefault(_defineProperty); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.default = function (obj, key, value) { + if (key in obj) { + (0, _defineProperty2.default)(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + }; + +/***/ }, +/* 46 */ +/***/ function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(47), __esModule: true }; + +/***/ }, +/* 47 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(48); + var $Object = __webpack_require__(6).Object; + module.exports = function defineProperty(it, key, desc){ + return $Object.defineProperty(it, key, desc); + }; + +/***/ }, +/* 48 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(4); + // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) + $export($export.S + $export.F * !__webpack_require__(14), 'Object', {defineProperty: __webpack_require__(10).f}); + +/***/ }, +/* 49 */ +/***/ function(module, exports) { + + module.exports = "\n
\n
\n \n
\n
\n"; + +/***/ }, +/* 50 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _alert = __webpack_require__(51); + + var _alert2 = _interopRequireDefault(_alert); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.default = _alert2.default; + +/***/ }, +/* 51 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(52) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\alert\\alert.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(58) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-25b075c5/alert.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 52 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + var _icon = __webpack_require__(53); + + var _icon2 = _interopRequireDefault(_icon); + + var _assist = __webpack_require__(57); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-alert'; + + exports.default = { + components: { Icon: _icon2.default }, + props: { + type: { + validator: function validator(value) { + return (0, _assist.oneOf)(value, ['success', 'info', 'warning', 'error']); + }, + + default: 'info' + }, + closable: { + type: Boolean, + default: false + }, + showIcon: { + type: Boolean, + default: false + } + }, + data: function data() { + return { + closed: false, + desc: false + }; + }, + + computed: { + wrapClasses: function wrapClasses() { + var _ref; + + return ['' + prefixCls, prefixCls + '-' + this.type, (_ref = {}, (0, _defineProperty3.default)(_ref, prefixCls + '-with-icon', this.showIcon), (0, _defineProperty3.default)(_ref, prefixCls + '-with-desc', this.desc), _ref)]; + }, + messageClasses: function messageClasses() { + return prefixCls + '-message'; + }, + descClasses: function descClasses() { + return prefixCls + '-desc'; + }, + closeClasses: function closeClasses() { + return prefixCls + '-close'; + }, + iconClasses: function iconClasses() { + return prefixCls + '-icon'; + }, + iconType: function iconType() { + var type = ''; + + switch (this.type) { + case 'success': + type = 'checkmark-circled'; + break; + case 'info': + type = 'information-circled'; + break; + case 'warning': + type = 'android-alert'; + break; + case 'error': + type = 'close-circled'; + break; + } + + return type; + } + }, + methods: { + close: function close(e) { + this.closed = true; + this.$emit('on-close', e); + } + }, + compiled: function compiled() { + this.desc = this.$els.desc.innerHTML != ''; + } + }; + +/***/ }, +/* 53 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _icon = __webpack_require__(54); + + var _icon2 = _interopRequireDefault(_icon); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.default = _icon2.default; + +/***/ }, +/* 54 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(55) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\icon\\icon.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(56) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-1f8d2525/icon.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 55 */ +/***/ function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var prefixCls = 'ivu-icon'; + + exports.default = { + props: { + type: String, + size: [Number, String] + }, + computed: { + classes: function classes() { + return prefixCls + ' ' + prefixCls + '-' + this.type; + }, + styles: function styles() { + if (!!this.size) { + return { + 'font-size': this.size + 'px' + }; + } else { + return {}; + } + } + } + }; + +/***/ }, +/* 56 */ +/***/ function(module, exports) { + + module.exports = "\n\n"; + +/***/ }, +/* 57 */ +/***/ function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.oneOf = oneOf; + exports.camelcaseToHyphen = camelcaseToHyphen; + exports.getScrollBarSize = getScrollBarSize; + function oneOf(value, validList) { + for (var i = 0; i < validList.length; i++) { + if (value === validList[i]) { + return true; + } + } + return false; + } + + function camelcaseToHyphen(str) { + return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); + } + + var cached = void 0; + function getScrollBarSize(fresh) { + if (fresh || cached === undefined) { + var inner = document.createElement('div'); + inner.style.width = '100%'; + inner.style.height = '200px'; + + var outer = document.createElement('div'); + var outerStyle = outer.style; + + outerStyle.position = 'absolute'; + outerStyle.top = 0; + outerStyle.left = 0; + outerStyle.pointerEvents = 'none'; + outerStyle.visibility = 'hidden'; + outerStyle.width = '200px'; + outerStyle.height = '150px'; + outerStyle.overflow = 'hidden'; + + outer.appendChild(inner); + + document.body.appendChild(outer); + + var widthContained = inner.offsetWidth; + outer.style.overflow = 'scroll'; + var widthScroll = inner.offsetWidth; + + if (widthContained === widthScroll) { + widthScroll = outer.clientWidth; + } + + document.body.removeChild(outer); + + cached = widthContained - widthScroll; + } + return cached; + } + +/***/ }, +/* 58 */ +/***/ function(module, exports) { + + module.exports = "\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n"; + +/***/ }, +/* 59 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _backTop = __webpack_require__(60); + + var _backTop2 = _interopRequireDefault(_backTop); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.default = _backTop2.default; + +/***/ }, +/* 60 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(61) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\back-top\\back-top.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(62) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-54b2df65/back-top.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 61 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-back-top'; + + function getScroll(target, top) { + var prop = top ? 'pageYOffset' : 'pageXOffset'; + var method = top ? 'scrollTop' : 'scrollLeft'; + + var ret = target[prop]; + + if (typeof ret !== 'number') { + ret = window.document.documentElement[method]; + } + + return ret; + } + + exports.default = { + props: { + height: { + type: Number, + default: 400 + }, + bottom: { + type: Number, + default: 30 + }, + right: { + type: Number, + default: 30 + } + }, + data: function data() { + return { + backTop: false + }; + }, + ready: function ready() { + window.addEventListener('scroll', this.handleScroll, false); + window.addEventListener('resize', this.handleScroll, false); + }, + beforeDestroy: function beforeDestroy() { + window.removeEventListener('scroll', this.handleScroll, false); + window.removeEventListener('resize', this.handleScroll, false); + }, + + computed: { + classes: function classes() { + return ['' + prefixCls, (0, _defineProperty3.default)({}, prefixCls + '-show', this.backTop)]; + }, + styles: function styles() { + return { + bottom: this.bottom + 'px', + right: this.right + 'px' + }; + }, + innerClasses: function innerClasses() { + return prefixCls + '-inner'; + } + }, + methods: { + handleScroll: function handleScroll() { + var backTop = this.backTop; + var scrollTop = getScroll(window, true); + + if (this.height <= scrollTop && !backTop) { + this.backTop = true; + } else if (this.height > scrollTop && backTop) { + this.backTop = false; + } + }, + back: function back() { + window.scrollTo(0, 0); + this.$emit('on-click'); + } + } + }; + +/***/ }, +/* 62 */ +/***/ function(module, exports) { + + module.exports = "\n
\n \n
\n \n
\n
\n
\n"; + +/***/ }, +/* 63 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _badge = __webpack_require__(64); + + var _badge2 = _interopRequireDefault(_badge); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.default = _badge2.default; + +/***/ }, +/* 64 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(65) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\badge\\badge.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(66) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-b8dd9bda/badge.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 65 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-badge'; + + exports.default = { + props: { + count: [Number, String], + dot: { + type: Boolean, + default: false + }, + overflowCount: { + type: [Number, String], + default: 99 + }, + class: String + }, + computed: { + classes: function classes() { + return '' + prefixCls; + }, + dotClasses: function dotClasses() { + return prefixCls + '-dot'; + }, + countClasses: function countClasses() { + var _ref; + + return [prefixCls + '-count', (_ref = {}, (0, _defineProperty3.default)(_ref, '' + this.class, !!this.class), (0, _defineProperty3.default)(_ref, prefixCls + '-count-alone', this.alone), _ref)]; + }, + finalCount: function finalCount() { + return parseInt(this.count) >= parseInt(this.overflowCount) ? this.overflowCount + '+' : this.count; + }, + badge: function badge() { + var status = false; + + if (this.count) { + status = !(parseInt(this.count) === 0); + } + + if (this.dot) { + status = true; + if (this.count) { + if (parseInt(this.count) === 0) { + status = false; + } + } + } + + return status; + } + }, + data: function data() { + return { + alone: false + }; + }, + compiled: function compiled() { + var child_length = this.$els.badge.children.length; + if (child_length === 1) { + this.alone = true; + } + } + }; + +/***/ }, +/* 66 */ +/***/ function(module, exports) { + + module.exports = "\n\n \n \n\n\n \n {{ finalCount }}\n\n"; + +/***/ }, +/* 67 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _breadcrumb = __webpack_require__(68); + + var _breadcrumb2 = _interopRequireDefault(_breadcrumb); + + var _breadcrumbItem = __webpack_require__(71); + + var _breadcrumbItem2 = _interopRequireDefault(_breadcrumbItem); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + _breadcrumb2.default.Item = _breadcrumbItem2.default; + exports.default = _breadcrumb2.default; + +/***/ }, +/* 68 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(69) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\breadcrumb\\breadcrumb.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(70) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-6fc829b6/breadcrumb.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 69 */ +/***/ function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var prefixCls = 'ivu-breadcrumb'; + + exports.default = { + props: { + separator: { + type: String, + default: '/' + } + }, + computed: { + classes: function classes() { + return '' + prefixCls; + } + }, + compiled: function compiled() { + this.updateChildren(); + }, + + methods: { + updateChildren: function updateChildren() { + var _this = this; + + this.$children.forEach(function (child) { + child.separator = _this.separator; + }); + } + }, + watch: { + separator: function separator() { + this.updateChildren(); + } + } + }; + +/***/ }, +/* 70 */ +/***/ function(module, exports) { + + module.exports = "\n
\n \n
\n"; + +/***/ }, +/* 71 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(72) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\breadcrumb\\breadcrumb-item.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(73) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-493f06eb/breadcrumb-item.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 72 */ +/***/ function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var prefixCls = 'ivu-breadcrumb-item'; + + exports.default = { + props: { + href: { + type: String + }, + separator: { + type: String, + default: '/' + } + }, + computed: { + linkClasses: function linkClasses() { + return prefixCls + '-link'; + }, + separatorClasses: function separatorClasses() { + return prefixCls + '-separator'; + } + } + }; + +/***/ }, +/* 73 */ +/***/ function(module, exports) { + + module.exports = "\n\n \n \n \n \n \n \n \n {{{ separator }}}\n \n\n"; + +/***/ }, +/* 74 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _button = __webpack_require__(75); + + var _button2 = _interopRequireDefault(_button); + + var _buttonGroup = __webpack_require__(78); + + var _buttonGroup2 = _interopRequireDefault(_buttonGroup); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + _button2.default.Group = _buttonGroup2.default; + exports.default = _button2.default; + +/***/ }, +/* 75 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(76) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\button\\button.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(77) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-9a708476/button.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 76 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + var _icon = __webpack_require__(53); + + var _icon2 = _interopRequireDefault(_icon); + + var _assist = __webpack_require__(57); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-btn'; + var iconPrefixCls = 'ivu-icon'; + + exports.default = { + components: { Icon: _icon2.default }, + props: { + type: { + validator: function validator(value) { + return (0, _assist.oneOf)(value, ['primary', 'ghost', 'dashed', 'text']); + } + }, + shape: { + validator: function validator(value) { + return (0, _assist.oneOf)(value, ['circle', 'circle-outline']); + } + }, + size: { + validator: function validator(value) { + return (0, _assist.oneOf)(value, ['small', 'large']); + } + }, + loading: Boolean, + disabled: Boolean, + htmlType: { + default: 'button', + validator: function validator(value) { + return (0, _assist.oneOf)(value, ['button', 'submit', 'reset']); + } + }, + icon: String + }, + data: function data() { + return { + showSlot: true + }; + }, + + computed: { + classes: function classes() { + var _ref; + + return ['' + prefixCls, (_ref = {}, (0, _defineProperty3.default)(_ref, prefixCls + '-' + this.type, !!this.type), (0, _defineProperty3.default)(_ref, prefixCls + '-' + this.shape, !!this.shape), (0, _defineProperty3.default)(_ref, prefixCls + '-' + this.size, !!this.size), (0, _defineProperty3.default)(_ref, prefixCls + '-loading', this.loading != null && this.loading), (0, _defineProperty3.default)(_ref, prefixCls + '-icon-only', !this.showSlot && (!!this.icon || this.loading)), _ref)]; + }, + loadingIconClasses: function loadingIconClasses() { + return iconPrefixCls + ' ivu-load-loop ' + iconPrefixCls + '-load-c'; + }, + typeIconClasses: function typeIconClasses() { + return ['' + iconPrefixCls, (0, _defineProperty3.default)({}, iconPrefixCls + '-' + this.icon, !!this.icon)]; + } + }, + ready: function ready() { + this.showSlot = this.$els.slot.innerHTML !== ''; + } + }; + +/***/ }, +/* 77 */ +/***/ function(module, exports) { + + module.exports = "\n\n"; + +/***/ }, +/* 78 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(79) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\button\\button-group.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(80) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-192f2d12/button-group.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 79 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + var _assist = __webpack_require__(57); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-btn-group'; + + exports.default = { + props: { + size: { + validator: function validator(value) { + return (0, _assist.oneOf)(value, ['small', 'large']); + } + }, + shape: { + validator: function validator(value) { + return (0, _assist.oneOf)(value, ['circle', 'circle-outline']); + } + } + }, + computed: { + classes: function classes() { + var _ref; + + return ['' + prefixCls, (_ref = {}, (0, _defineProperty3.default)(_ref, prefixCls + '-' + this.size, !!this.size), (0, _defineProperty3.default)(_ref, prefixCls + '-' + this.shape, !!this.shape), _ref)]; + } + } + }; + +/***/ }, +/* 80 */ +/***/ function(module, exports) { + + module.exports = "\n
\n \n
\n"; + +/***/ }, +/* 81 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _card = __webpack_require__(82); + + var _card2 = _interopRequireDefault(_card); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.default = _card2.default; + +/***/ }, +/* 82 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(83) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\card\\card.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(84) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-4f3508f6/card.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 83 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-card'; + + exports.default = { + props: { + bordered: { + type: Boolean, + default: true + }, + disHover: { + type: Boolean, + default: false + }, + shadow: { + type: Boolean, + default: false + } + }, + data: function data() { + return { + showHead: true, + showExtra: true + }; + }, + + computed: { + classes: function classes() { + var _ref; + + return ['' + prefixCls, (_ref = {}, (0, _defineProperty3.default)(_ref, prefixCls + '-bordered', this.bordered && !this.shadow), (0, _defineProperty3.default)(_ref, prefixCls + '-dis-hover', this.disHover || this.shadow), (0, _defineProperty3.default)(_ref, prefixCls + '-shadow', this.shadow), _ref)]; + }, + headClasses: function headClasses() { + return prefixCls + '-head'; + }, + extraClasses: function extraClasses() { + return prefixCls + '-extra'; + }, + bodyClasses: function bodyClasses() { + return prefixCls + '-body'; + } + }, + compiled: function compiled() { + this.showHead = this.$els.head.innerHTML != ''; + this.showExtra = this.$els.extra.innerHTML != ''; + } + }; + +/***/ }, +/* 84 */ +/***/ function(module, exports) { + + module.exports = "\n
\n
\n
\n
\n
\n"; + +/***/ }, +/* 85 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _checkbox = __webpack_require__(86); + + var _checkbox2 = _interopRequireDefault(_checkbox); + + var _checkboxGroup = __webpack_require__(89); + + var _checkboxGroup2 = _interopRequireDefault(_checkboxGroup); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + _checkbox2.default.Group = _checkboxGroup2.default; + exports.default = _checkbox2.default; + +/***/ }, +/* 86 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(87) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\checkbox\\checkbox.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(88) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-8b0b8436/checkbox.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 87 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-checkbox'; + + exports.default = { + props: { + disabled: { + type: Boolean, + default: false + }, + value: { + type: [String, Number, Boolean] + }, + checked: { + type: Boolean, + default: false + } + }, + data: function data() { + return { + model: [], + selected: false, + group: false + }; + }, + + computed: { + wrapClasses: function wrapClasses() { + var _ref; + + return [prefixCls + '-wrapper', (_ref = {}, (0, _defineProperty3.default)(_ref, prefixCls + '-group-item', this.group), (0, _defineProperty3.default)(_ref, prefixCls + '-wrapper-checked', this.selected), (0, _defineProperty3.default)(_ref, prefixCls + '-wrapper-disabled', this.disabled), _ref)]; + }, + checkboxClasses: function checkboxClasses() { + var _ref2; + + return ['' + prefixCls, (_ref2 = {}, (0, _defineProperty3.default)(_ref2, prefixCls + '-checked', this.selected), (0, _defineProperty3.default)(_ref2, prefixCls + '-disabled', this.disabled), _ref2)]; + }, + innerClasses: function innerClasses() { + return prefixCls + '-inner'; + }, + inputClasses: function inputClasses() { + return prefixCls + '-input'; + } + }, + ready: function ready() { + if (!this.group) { + this.updateModel(); + } + }, + + methods: { + change: function change(event) { + if (this.disabled) { + return false; + } + + this.selected = event.target.checked; + + if (this.group) { + this.$parent.change(this.model); + } else { + this.$emit('on-change', this.checked); + } + }, + updateModel: function updateModel() { + this.selected = this.checked; + } + }, + watch: { + checked: function checked() { + this.updateModel(); + } + } + }; + +/***/ }, +/* 88 */ +/***/ function(module, exports) { + + module.exports = "\n\n"; + +/***/ }, +/* 89 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(90) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\checkbox\\checkbox-group.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(91) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-affb5cd2/checkbox-group.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 90 */ +/***/ function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var prefixCls = 'ivu-checkbox-group'; + + exports.default = { + props: { + model: { + type: Array, + default: [] + } + }, + computed: { + classes: function classes() { + return '' + prefixCls; + } + }, + compiled: function compiled() { + this.updateModel(true); + }, + + methods: { + updateModel: function updateModel(update) { + var model = this.model; + + this.$children.forEach(function (child) { + child.model = model; + + if (update) { + child.selected = model.indexOf(child.value) >= 0; + child.group = true; + } + }); + }, + change: function change(data) { + this.model = data; + this.$emit('on-change', data); + } + }, + watch: { + model: function model(val, oldVal) { + if (val == oldVal) { + this.updateModel(); + } else { + this.updateModel(true); + } + } + } + }; + +/***/ }, +/* 91 */ +/***/ function(module, exports) { + + module.exports = "\n
\n \n
\n"; + +/***/ }, +/* 92 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _circle = __webpack_require__(93); + + var _circle2 = _interopRequireDefault(_circle); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.default = _circle2.default; + +/***/ }, +/* 93 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(94) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\circle\\circle.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(95) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-54ccb005/circle.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 94 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _assist = __webpack_require__(57); + + var prefixCls = 'ivu-chart-circle'; + + exports.default = { + props: { + percent: { + type: Number, + default: 0 + }, + size: { + type: Number, + default: 120 + }, + strokeWidth: { + type: Number, + default: 6 + }, + strokeColor: { + type: String, + default: '#2db7f5' + }, + strokeLinecap: { + validator: function validator(value) { + return (0, _assist.oneOf)(value, ['square', 'round']); + }, + + default: 'round' + }, + trailWidth: { + type: Number, + default: 5 + }, + trailColor: { + type: String, + default: '#eaeef2' + } + }, + computed: { + circleSize: function circleSize() { + return { + width: this.size + 'px', + height: this.size + 'px' + }; + }, + radius: function radius() { + return 50 - this.strokeWidth / 2; + }, + pathString: function pathString() { + return 'M 50,50 m 0,-' + this.radius + '\n a ' + this.radius + ',' + this.radius + ' 0 1 1 0,' + 2 * this.radius + '\n a ' + this.radius + ',' + this.radius + ' 0 1 1 0,-' + 2 * this.radius; + }, + len: function len() { + return Math.PI * 2 * this.radius; + }, + pathStyle: function pathStyle() { + return { + 'stroke-dasharray': this.len + 'px ' + this.len + 'px', + 'stroke-dashoffset': (100 - this.percent) / 100 * this.len + 'px', + 'transition': 'stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease' + }; + }, + wrapClasses: function wrapClasses() { + return '' + prefixCls; + }, + innerClasses: function innerClasses() { + return prefixCls + '-inner'; + } + } + }; + +/***/ }, +/* 95 */ +/***/ function(module, exports) { + + module.exports = "\n
\n \n \n \n \n
\n \n
\n
\n"; + +/***/ }, +/* 96 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _collapse = __webpack_require__(97); + + var _collapse2 = _interopRequireDefault(_collapse); + + var _panel = __webpack_require__(100); + + var _panel2 = _interopRequireDefault(_panel); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + _collapse2.default.Panel = _panel2.default; + exports.default = _collapse2.default; + +/***/ }, +/* 97 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(98) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\collapse\\collapse.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(99) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-3e3de525/collapse.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 98 */ +/***/ function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var prefixCls = 'ivu-collapse'; + + exports.default = { + props: { + accordion: { + type: Boolean, + default: false + }, + activeKey: { + type: [Array, String] + } + }, + computed: { + classes: function classes() { + return '' + prefixCls; + } + }, + compiled: function compiled() { + this.setActive(); + }, + + methods: { + setActive: function setActive() { + var activeKey = this.getActiveKey(); + + this.$children.forEach(function (child, index) { + var key = child.key || index.toString(); + var isActive = false; + + if (self.accordion) { + isActive = activeKey === key; + } else { + isActive = activeKey.indexOf(key) > -1; + } + + child.isActive = isActive; + child.index = index; + }); + }, + getActiveKey: function getActiveKey() { + var activeKey = this.activeKey || []; + var accordion = this.accordion; + + if (!Array.isArray(activeKey)) { + activeKey = [activeKey]; + } + + if (accordion && activeKey.length > 1) { + activeKey = [activeKey[0]]; + } + + for (var i = 0; i < activeKey.length; i++) { + activeKey[i] = activeKey[i].toString(); + } + + return activeKey; + }, + toggle: function toggle(data) { + var key = data.key.toString(); + var newActiveKey = []; + + if (this.accordion) { + if (!data.isActive) { + newActiveKey.push(key); + } + } else { + var activeKey = this.getActiveKey(); + var keyIndex = activeKey.indexOf(key); + + if (data.isActive) { + if (keyIndex > -1) { + activeKey.splice(keyIndex, 1); + } + } else { + if (keyIndex < 0) { + activeKey.push(key); + } + } + + newActiveKey = activeKey; + } + + this.activeKey = newActiveKey; + this.$emit('on-change', newActiveKey); + } + }, + watch: { + activeKey: function activeKey() { + this.setActive(); + } + } + }; + +/***/ }, +/* 99 */ +/***/ function(module, exports) { + + module.exports = "\n
\n \n
\n"; + +/***/ }, +/* 100 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(101) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\collapse\\panel.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(102) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-7af8693c/panel.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 101 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + var _icon = __webpack_require__(53); + + var _icon2 = _interopRequireDefault(_icon); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-collapse'; + + exports.default = { + components: { Icon: _icon2.default }, + props: { + key: { + type: String + } + }, + data: function data() { + return { + index: 0, + isActive: false + }; + }, + + computed: { + itemClasses: function itemClasses() { + return [prefixCls + '-item', (0, _defineProperty3.default)({}, prefixCls + '-item-active', this.isActive)]; + }, + headerClasses: function headerClasses() { + return prefixCls + '-header'; + }, + concentClasses: function concentClasses() { + return prefixCls + '-content'; + }, + boxClasses: function boxClasses() { + return prefixCls + '-content-box'; + } + }, + methods: { + toggle: function toggle() { + this.$parent.toggle({ + key: this.key || this.index, + isActive: this.isActive + }); + } + } + }; + +/***/ }, +/* 102 */ +/***/ function(module, exports) { + + module.exports = "\n
\n
\n \n \n
\n
\n
\n
\n
\n"; + +/***/ }, +/* 103 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _input = __webpack_require__(104); + + var _input2 = _interopRequireDefault(_input); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.default = _input2.default; + +/***/ }, +/* 104 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(105) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\input\\input.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(106) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-68330bbe/input.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 105 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + var _assist = __webpack_require__(57); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-input'; + + exports.default = { + props: { + type: { + type: String, + default: 'text' + }, + value: { + type: [String, Number], + default: '', + twoWay: true + }, + placeholder: String, + name: String, + size: { + validator: function validator(value) { + return (0, _assist.oneOf)(value, ['small', 'large']); + } + } + }, + data: function data() { + return {}; + }, + + computed: { + classes: function classes() { + return ['' + prefixCls, (0, _defineProperty3.default)({}, prefixCls + '-' + this.size, !!this.size)]; + } + } + }; + +/***/ }, +/* 106 */ +/***/ function(module, exports) { + + module.exports = "\n\n"; + +/***/ }, +/* 107 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _inputNumber = __webpack_require__(108); + + var _inputNumber2 = _interopRequireDefault(_inputNumber); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.default = _inputNumber2.default; + +/***/ }, +/* 108 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(109) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\input-number\\input-number.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(110) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-c12ba9f6/input-number.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 109 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + var _assist = __webpack_require__(57); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-input-number'; + var iconPrefixCls = 'ivu-icon'; + + function isValueNumber(value) { + return (/(^-?[0-9]+\.{1}\d+$)|(^-?[1-9][0-9]*$)/.test(value + '') + ); + } + function addNum(num1, num2) { + var sq1, sq2, m; + try { + sq1 = num1.toString().split(".")[1].length; + } catch (e) { + sq1 = 0; + } + try { + sq2 = num2.toString().split(".")[1].length; + } catch (e) { + sq2 = 0; + } + + m = Math.pow(10, Math.max(sq1, sq2)); + return (num1 * m + num2 * m) / m; + } + + exports.default = { + props: { + max: { + type: Number, + default: Infinity + }, + min: { + type: Number, + default: -Infinity + }, + step: { + type: Number, + default: 1 + }, + value: { + type: Number, + default: 1 + }, + size: { + validator: function validator(value) { + return (0, _assist.oneOf)(value, ['small', 'large']); + } + }, + disabled: { + type: Boolean, + default: false + } + }, + data: function data() { + return { + focused: false, + upDisabled: false, + downDisabled: false + }; + }, + + computed: { + wrapClasses: function wrapClasses() { + var _ref; + + return ['' + prefixCls, (_ref = {}, (0, _defineProperty3.default)(_ref, prefixCls + '-' + this.size, !!this.size), (0, _defineProperty3.default)(_ref, prefixCls + '-disabled', this.disabled), (0, _defineProperty3.default)(_ref, prefixCls + '-focused', this.focused), _ref)]; + }, + handlerClasses: function handlerClasses() { + return prefixCls + '-handler-wrap'; + }, + upClasses: function upClasses() { + return [prefixCls + '-handler', prefixCls + '-handler-up', (0, _defineProperty3.default)({}, prefixCls + '-handler-up-disabled', this.upDisabled)]; + }, + innerUpClasses: function innerUpClasses() { + return prefixCls + '-handler-up-inner ' + iconPrefixCls + ' ' + iconPrefixCls + '-ios-arrow-up'; + }, + downClasses: function downClasses() { + return [prefixCls + '-handler', prefixCls + '-handler-down', (0, _defineProperty3.default)({}, prefixCls + '-handler-down-disabled', this.downDisabled)]; + }, + innerDownClasses: function innerDownClasses() { + return prefixCls + '-handler-down-inner ' + iconPrefixCls + ' ' + iconPrefixCls + '-ios-arrow-down'; + }, + inputWrapClasses: function inputWrapClasses() { + return prefixCls + '-input-wrap'; + }, + inputClasses: function inputClasses() { + return prefixCls + '-input'; + } + }, + methods: { + preventDefault: function preventDefault(e) { + e.preventDefault(); + }, + up: function up() { + if (this.upDisabled) { + return false; + } + this.changeStep('up'); + }, + down: function down() { + if (this.downDisabled) { + return false; + } + this.changeStep('down'); + }, + changeStep: function changeStep(type) { + if (this.disabled) { + return false; + } + + var val = Number(this.value); + var step = Number(this.step); + if (isNaN(val)) { + return false; + } + + if (type == 'up') { + val = addNum(val, step); + } else if (type == 'down') { + val = addNum(val, -step); + } + this.setValue(val); + }, + setValue: function setValue(val) { + var _this = this; + + this.$nextTick(function () { + _this.value = val; + }); + + this.$emit('on-change', val); + }, + focus: function focus() { + this.focused = true; + }, + blur: function blur() { + this.focused = false; + }, + keyDown: function keyDown(e) { + if (e.keyCode === 38) { + e.preventDefault(); + this.up(); + } else if (e.keyCode === 40) { + e.preventDefault(); + this.down(); + } + }, + change: function change(event) { + var val = event.target.value.trim(); + + var max = this.max; + var min = this.min; + + if (isValueNumber(val)) { + val = Number(val); + this.value = val; + + if (val > max) { + this.setValue(max); + } else if (val < min) { + this.setValue(min); + } else { + this.setValue(val); + } + } else { + event.target.value = this.value; + } + }, + changeVal: function changeVal(val) { + if (isValueNumber(val) || val === 0) { + val = Number(val); + var step = this.step; + + this.upDisabled = val + step > this.max; + this.downDisabled = val - step < this.min; + } else { + this.upDisabled = true; + this.downDisabled = true; + } + } + }, + ready: function ready() { + this.changeVal(this.value); + }, + + watch: { + value: function value(val) { + this.changeVal(val); + } + } + }; + +/***/ }, +/* 110 */ +/***/ function(module, exports) { + + module.exports = "\n
\n
\n \n \n \n \n \n \n
\n
\n \n
\n
\n"; + +/***/ }, +/* 111 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _loadingBar = __webpack_require__(112); + + var _loadingBar2 = _interopRequireDefault(_loadingBar); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var loadingBarInstance = void 0; + var color = 'primary'; + var failedColor = 'error'; + var height = 2; + var timer = void 0; + + function getLoadingBarInstance() { + loadingBarInstance = loadingBarInstance || _loadingBar2.default.newInstance({ + color: color, + failedColor: failedColor, + height: height + }); + + return loadingBarInstance; + } + + function _update(options) { + var instance = getLoadingBarInstance(); + + instance.update(options); + } + + function hide() { + setTimeout(function () { + _update({ + show: false + }); + setTimeout(function () { + _update({ + percent: 0 + }); + }, 200); + }, 800); + } + + function clearTimer() { + if (timer) { + clearInterval(timer); + timer = null; + } + } + + exports.default = { + start: function start() { + var percent = 0; + + _update({ + percent: percent, + status: 'success', + show: true + }); + + timer = setInterval(function () { + percent += Math.floor(Math.random() * 3 + 5); + if (percent > 95) { + clearTimer(); + } + _update({ + percent: percent, + status: 'success', + show: true + }); + }, 200); + }, + update: function update(percent) { + clearTimer(); + _update({ + percent: percent, + status: 'success', + show: true + }); + }, + finish: function finish() { + clearTimer(); + _update({ + percent: 100, + status: 'success', + show: true + }); + hide(); + }, + error: function error() { + clearTimer(); + _update({ + percent: 100, + status: 'error', + show: true + }); + hide(); + }, + config: function config(options) { + if (options.color) { + color = options.color; + } + if (options.failedColor) { + failedColor = options.failedColor; + } + if (options.height) { + height = options.height; + } + }, + destroy: function destroy() { + clearTimer(); + var instance = getLoadingBarInstance(); + loadingBarInstance = null; + instance.destroy(); + } + }; + +/***/ }, +/* 112 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _keys = __webpack_require__(38); + + var _keys2 = _interopRequireDefault(_keys); + + var _loadingBar = __webpack_require__(113); + + var _loadingBar2 = _interopRequireDefault(_loadingBar); + + var _vue = __webpack_require__(116); + + var _vue2 = _interopRequireDefault(_vue); + + var _assist = __webpack_require__(57); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + _loadingBar2.default.newInstance = function (properties) { + var _props = properties || {}; + + var props = ''; + (0, _keys2.default)(_props).forEach(function (prop) { + props += ' :' + (0, _assist.camelcaseToHyphen)(prop) + '=' + prop; + }); + + var div = document.createElement('div'); + div.innerHTML = ''; + document.body.appendChild(div); + + var loading_bar = new _vue2.default({ + el: div, + data: _props, + components: { LoadingBar: _loadingBar2.default } + }).$children[0]; + + return { + update: function update(options) { + if ('percent' in options) { + loading_bar.percent = options.percent; + } + if (options.status) { + loading_bar.status = options.status; + } + if ('show' in options) { + loading_bar.show = options.show; + } + }, + + component: loading_bar, + destroy: function destroy() { + document.body.removeChild(div); + } + }; + }; + + exports.default = _loadingBar2.default; + +/***/ }, +/* 113 */ +/***/ function(module, exports, __webpack_require__) { + + var __vue_script__, __vue_template__ + var __vue_styles__ = {} + __vue_script__ = __webpack_require__(114) + if (__vue_script__ && + __vue_script__.__esModule && + Object.keys(__vue_script__).length > 1) { + console.warn("[vue-loader] src\\components\\loading-bar\\loading-bar.vue: named exports in *.vue files are ignored.")} + __vue_template__ = __webpack_require__(115) + module.exports = __vue_script__ || {} + if (module.exports.__esModule) module.exports = module.exports.default + var __vue_options__ = typeof module.exports === "function" ? (module.exports.options || (module.exports.options = {})) : module.exports + if (__vue_template__) { + __vue_options__.template = __vue_template__ + } + if (!__vue_options__.computed) __vue_options__.computed = {} + Object.keys(__vue_styles__).forEach(function (key) { + var module = __vue_styles__[key] + __vue_options__.computed[key] = function () { return module } + }) + if (false) {(function () { module.hot.accept() + var hotAPI = require("vue-hot-reload-api") + hotAPI.install(require("vue"), false) + if (!hotAPI.compatible) return + var id = "_v-f209aade/loading-bar.vue" + if (!module.hot.data) { + hotAPI.createRecord(id, module.exports) + } else { + hotAPI.update(id, module.exports, __vue_template__) + } + })()} + +/***/ }, +/* 114 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _defineProperty2 = __webpack_require__(45); + + var _defineProperty3 = _interopRequireDefault(_defineProperty2); + + var _assist = __webpack_require__(57); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + var prefixCls = 'ivu-loading-bar'; + + exports.default = { + props: { + percent: { + type: Number, + default: 0 + }, + color: { + type: String, + default: 'primary' + }, + failedColor: { + type: String, + default: 'error' + }, + height: { + type: Number, + default: 2 + }, + status: { + type: String, + validator: function validator(value) { + return (0, _assist.oneOf)(value, ['success', 'error']); + }, + + default: 'success' + }, + show: { + type: Boolean, + default: false + } + }, + computed: { + classes: function classes() { + return '' + prefixCls; + }, + innerClasses: function innerClasses() { + var _ref; + + return [prefixCls + '-inner', (_ref = {}, (0, _defineProperty3.default)(_ref, prefixCls + '-inner-color-primary', this.color === 'primary' && this.status === 'success'), (0, _defineProperty3.default)(_ref, prefixCls + '-inner-failed-color-error', this.failedColor === 'error' && this.status === 'error'), _ref)]; + }, + outerStyles: function outerStyles() { + return { + height: this.height + 'px' + }; + }, + styles: function styles() { + var style = { + width: this.percent + '%', + height: this.height + 'px' + }; + + if (this.color !== 'primary' && this.status === 'success') { + style.backgroundColor = this.color; + } + + if (this.failedColor !== 'error' && this.status === 'error') { + style.backgroundColor = this.failedColor; + } + + return style; + } + } + }; + +/***/ }, +/* 115 */ +/***/ function(module, exports) { + + module.exports = "\n
\n
\n
\n"; + +/***/ }, +/* 116 */ +/***/ function(module, exports, __webpack_require__) { + + /*! + * Vue.js v1.0.28 + * (c) 2016 Evan You + * Released under the MIT License. + */ + 'use strict'; + + function set(obj, key, val) { + if (hasOwn(obj, key)) { + obj[key] = val; + return; + } + if (obj._isVue) { + set(obj._data, key, val); + return; + } + var ob = obj.__ob__; + if (!ob) { + obj[key] = val; + return; + } + ob.convert(key, val); + ob.dep.notify(); + if (ob.vms) { + var i = ob.vms.length; + while (i--) { + var vm = ob.vms[i]; + vm._proxy(key); + vm._digest(); + } + } + return val; + } + + /** + * Delete a property and trigger change if necessary. + * + * @param {Object} obj + * @param {String} key + */ + + function del(obj, key) { + if (!hasOwn(obj, key)) { + return; + } + delete obj[key]; + var ob = obj.__ob__; + if (!ob) { + if (obj._isVue) { + delete obj._data[key]; + obj._digest(); + } + return; + } + ob.dep.notify(); + if (ob.vms) { + var i = ob.vms.length; + while (i--) { + var vm = ob.vms[i]; + vm._unproxy(key); + vm._digest(); + } + } + } + + var hasOwnProperty = Object.prototype.hasOwnProperty; + /** + * Check whether the object has the property. + * + * @param {Object} obj + * @param {String} key + * @return {Boolean} + */ + + function hasOwn(obj, key) { + return hasOwnProperty.call(obj, key); + } + + /** + * Check if an expression is a literal value. + * + * @param {String} exp + * @return {Boolean} + */ + + var literalValueRE = /^\s?(true|false|-?[\d\.]+|'[^']*'|"[^"]*")\s?$/; + + function isLiteral(exp) { + return literalValueRE.test(exp); + } + + /** + * Check if a string starts with $ or _ + * + * @param {String} str + * @return {Boolean} + */ + + function isReserved(str) { + var c = (str + '').charCodeAt(0); + return c === 0x24 || c === 0x5F; + } + + /** + * Guard text output, make sure undefined outputs + * empty string + * + * @param {*} value + * @return {String} + */ + + function _toString(value) { + return value == null ? '' : value.toString(); + } + + /** + * Check and convert possible numeric strings to numbers + * before setting back to data + * + * @param {*} value + * @return {*|Number} + */ + + function toNumber(value) { + if (typeof value !== 'string') { + return value; + } else { + var parsed = Number(value); + return isNaN(parsed) ? value : parsed; + } + } + + /** + * Convert string boolean literals into real booleans. + * + * @param {*} value + * @return {*|Boolean} + */ + + function toBoolean(value) { + return value === 'true' ? true : value === 'false' ? false : value; + } + + /** + * Strip quotes from a string + * + * @param {String} str + * @return {String | false} + */ + + function stripQuotes(str) { + var a = str.charCodeAt(0); + var b = str.charCodeAt(str.length - 1); + return a === b && (a === 0x22 || a === 0x27) ? str.slice(1, -1) : str; + } + + /** + * Camelize a hyphen-delimited string. + * + * @param {String} str + * @return {String} + */ + + var camelizeRE = /-(\w)/g; + + function camelize(str) { + return str.replace(camelizeRE, toUpper); + } + + function toUpper(_, c) { + return c ? c.toUpperCase() : ''; + } + + /** + * Hyphenate a camelCase string. + * + * @param {String} str + * @return {String} + */ + + var hyphenateRE = /([^-])([A-Z])/g; + + function hyphenate(str) { + return str.replace(hyphenateRE, '$1-$2').replace(hyphenateRE, '$1-$2').toLowerCase(); + } + + /** + * Converts hyphen/underscore/slash delimitered names into + * camelized classNames. + * + * e.g. my-component => MyComponent + * some_else => SomeElse + * some/comp => SomeComp + * + * @param {String} str + * @return {String} + */ + + var classifyRE = /(?:^|[-_\/])(\w)/g; + + function classify(str) { + return str.replace(classifyRE, toUpper); + } + + /** + * Simple bind, faster than native + * + * @param {Function} fn + * @param {Object} ctx + * @return {Function} + */ + + function bind(fn, ctx) { + return function (a) { + var l = arguments.length; + return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx); + }; + } + + /** + * Convert an Array-like object to a real Array. + * + * @param {Array-like} list + * @param {Number} [start] - start index + * @return {Array} + */ + + function toArray(list, start) { + start = start || 0; + var i = list.length - start; + var ret = new Array(i); + while (i--) { + ret[i] = list[i + start]; + } + return ret; + } + + /** + * Mix properties into target object. + * + * @param {Object} to + * @param {Object} from + */ + + function extend(to, from) { + var keys = Object.keys(from); + var i = keys.length; + while (i--) { + to[keys[i]] = from[keys[i]]; + } + return to; + } + + /** + * Quick object check - this is primarily used to tell + * Objects from primitive values when we know the value + * is a JSON-compliant type. + * + * @param {*} obj + * @return {Boolean} + */ + + function isObject(obj) { + return obj !== null && typeof obj === 'object'; + } + + /** + * Strict object type check. Only returns true + * for plain JavaScript objects. + * + * @param {*} obj + * @return {Boolean} + */ + + var toString = Object.prototype.toString; + var OBJECT_STRING = '[object Object]'; + + function isPlainObject(obj) { + return toString.call(obj) === OBJECT_STRING; + } + + /** + * Array type check. + * + * @param {*} obj + * @return {Boolean} + */ + + var isArray = Array.isArray; + + /** + * Define a property. + * + * @param {Object} obj + * @param {String} key + * @param {*} val + * @param {Boolean} [enumerable] + */ + + function def(obj, key, val, enumerable) { + Object.defineProperty(obj, key, { + value: val, + enumerable: !!enumerable, + writable: true, + configurable: true + }); + } + + /** + * Debounce a function so it only gets called after the + * input stops arriving after the given wait period. + * + * @param {Function} func + * @param {Number} wait + * @return {Function} - the debounced function + */ + + function _debounce(func, wait) { + var timeout, args, context, timestamp, result; + var later = function later() { + var last = Date.now() - timestamp; + if (last < wait && last >= 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + } + }; + return function () { + context = this; + args = arguments; + timestamp = Date.now(); + if (!timeout) { + timeout = setTimeout(later, wait); + } + return result; + }; + } + + /** + * Manual indexOf because it's slightly faster than + * native. + * + * @param {Array} arr + * @param {*} obj + */ + + function indexOf(arr, obj) { + var i = arr.length; + while (i--) { + if (arr[i] === obj) return i; + } + return -1; + } + + /** + * Make a cancellable version of an async callback. + * + * @param {Function} fn + * @return {Function} + */ + + function cancellable(fn) { + var cb = function cb() { + if (!cb.cancelled) { + return fn.apply(this, arguments); + } + }; + cb.cancel = function () { + cb.cancelled = true; + }; + return cb; + } + + /** + * Check if two values are loosely equal - that is, + * if they are plain objects, do they have the same shape? + * + * @param {*} a + * @param {*} b + * @return {Boolean} + */ + + function looseEqual(a, b) { + /* eslint-disable eqeqeq */ + return a == b || (isObject(a) && isObject(b) ? JSON.stringify(a) === JSON.stringify(b) : false); + /* eslint-enable eqeqeq */ + } + + var hasProto = ('__proto__' in {}); + + // Browser environment sniffing + var inBrowser = typeof window !== 'undefined' && Object.prototype.toString.call(window) !== '[object Object]'; + + // detect devtools + var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; + + // UA sniffing for working around browser-specific quirks + var UA = inBrowser && window.navigator.userAgent.toLowerCase(); + var isIE = UA && UA.indexOf('trident') > 0; + var isIE9 = UA && UA.indexOf('msie 9.0') > 0; + var isAndroid = UA && UA.indexOf('android') > 0; + var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA); + + var transitionProp = undefined; + var transitionEndEvent = undefined; + var animationProp = undefined; + var animationEndEvent = undefined; + + // Transition property/event sniffing + if (inBrowser && !isIE9) { + var isWebkitTrans = window.ontransitionend === undefined && window.onwebkittransitionend !== undefined; + var isWebkitAnim = window.onanimationend === undefined && window.onwebkitanimationend !== undefined; + transitionProp = isWebkitTrans ? 'WebkitTransition' : 'transition'; + transitionEndEvent = isWebkitTrans ? 'webkitTransitionEnd' : 'transitionend'; + animationProp = isWebkitAnim ? 'WebkitAnimation' : 'animation'; + animationEndEvent = isWebkitAnim ? 'webkitAnimationEnd' : 'animationend'; + } + + /* istanbul ignore next */ + function isNative(Ctor) { + return (/native code/.test(Ctor.toString()) + ); + } + + /** + * Defer a task to execute it asynchronously. Ideally this + * should be executed as a microtask, so we leverage + * MutationObserver if it's available, and fallback to + * setTimeout(0). + * + * @param {Function} cb + * @param {Object} ctx + */ + + var nextTick = (function () { + var callbacks = []; + var pending = false; + var timerFunc = undefined; + + function nextTickHandler() { + pending = false; + var copies = callbacks.slice(0); + callbacks.length = 0; + for (var i = 0; i < copies.length; i++) { + copies[i](); + } + } + + // the nextTick behavior leverages the microtask queue, which can be accessed + // via either native Promise.then or MutationObserver. + // MutationObserver has wider support, however it is seriously bugged in + // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It + // completely stops working after triggering a few times... so, if native + // Promise is available, we will use it: + /* istanbul ignore if */ + if (typeof Promise !== 'undefined' && isNative(Promise)) { + var p = Promise.resolve(); + var noop = function noop() {}; + timerFunc = function () { + p.then(nextTickHandler); + // in problematic UIWebViews, Promise.then doesn't completely break, but + // it can get stuck in a weird state where callbacks are pushed into the + // microtask queue but the queue isn't being flushed, until the browser + // needs to do some other work, e.g. handle a timer. Therefore we can + // "force" the microtask queue to be flushed by adding an empty timer. + if (isIOS) setTimeout(noop); + }; + } else if (typeof MutationObserver !== 'undefined') { + // use MutationObserver where native Promise is not available, + // e.g. IE11, iOS7, Android 4.4 + var counter = 1; + var observer = new MutationObserver(nextTickHandler); + var textNode = document.createTextNode(String(counter)); + observer.observe(textNode, { + characterData: true + }); + timerFunc = function () { + counter = (counter + 1) % 2; + textNode.data = String(counter); + }; + } else { + // fallback to setTimeout + /* istanbul ignore next */ + timerFunc = setTimeout; + } + + return function (cb, ctx) { + var func = ctx ? function () { + cb.call(ctx); + } : cb; + callbacks.push(func); + if (pending) return; + pending = true; + timerFunc(nextTickHandler, 0); + }; + })(); + + var _Set = undefined; + /* istanbul ignore if */ + if (typeof Set !== 'undefined' && isNative(Set)) { + // use native Set when available. + _Set = Set; + } else { + // a non-standard Set polyfill that only works with primitive keys. + _Set = function () { + this.set = Object.create(null); + }; + _Set.prototype.has = function (key) { + return this.set[key] !== undefined; + }; + _Set.prototype.add = function (key) { + this.set[key] = 1; + }; + _Set.prototype.clear = function () { + this.set = Object.create(null); + }; + } + + function Cache(limit) { + this.size = 0; + this.limit = limit; + this.head = this.tail = undefined; + this._keymap = Object.create(null); + } + + var p = Cache.prototype; + + /** + * Put into the cache associated with . + * Returns the entry which was removed to make room for + * the new entry. Otherwise undefined is returned. + * (i.e. if there was enough room already). + * + * @param {String} key + * @param {*} value + * @return {Entry|undefined} + */ + + p.put = function (key, value) { + var removed; + + var entry = this.get(key, true); + if (!entry) { + if (this.size === this.limit) { + removed = this.shift(); + } + entry = { + key: key + }; + this._keymap[key] = entry; + if (this.tail) { + this.tail.newer = entry; + entry.older = this.tail; + } else { + this.head = entry; + } + this.tail = entry; + this.size++; + } + entry.value = value; + + return removed; + }; + + /** + * Purge the least recently used (oldest) entry from the + * cache. Returns the removed entry or undefined if the + * cache was empty. + */ + + p.shift = function () { + var entry = this.head; + if (entry) { + this.head = this.head.newer; + this.head.older = undefined; + entry.newer = entry.older = undefined; + this._keymap[entry.key] = undefined; + this.size--; + } + return entry; + }; + + /** + * Get and register recent use of . Returns the value + * associated with or undefined if not in cache. + * + * @param {String} key + * @param {Boolean} returnEntry + * @return {Entry|*} + */ + + p.get = function (key, returnEntry) { + var entry = this._keymap[key]; + if (entry === undefined) return; + if (entry === this.tail) { + return returnEntry ? entry : entry.value; + } + // HEAD--------------TAIL + // <.older .newer> + // <--- add direction -- + // A B C E + if (entry.newer) { + if (entry === this.head) { + this.head = entry.newer; + } + entry.newer.older = entry.older; // C <-- E. + } + if (entry.older) { + entry.older.newer = entry.newer; // C. --> E + } + entry.newer = undefined; // D --x + entry.older = this.tail; // D. --> E + if (this.tail) { + this.tail.newer = entry; // E. <-- D + } + this.tail = entry; + return returnEntry ? entry : entry.value; + }; + + var cache$1 = new Cache(1000); + var reservedArgRE = /^in$|^-?\d+/; + + /** + * Parser state + */ + + var str; + var dir; + var len; + var index; + var chr; + var state; + var startState = 0; + var filterState = 1; + var filterNameState = 2; + var filterArgState = 3; + + var doubleChr = 0x22; + var singleChr = 0x27; + var pipeChr = 0x7C; + var escapeChr = 0x5C; + var spaceChr = 0x20; + + var expStartChr = { 0x5B: 1, 0x7B: 1, 0x28: 1 }; + var expChrPair = { 0x5B: 0x5D, 0x7B: 0x7D, 0x28: 0x29 }; + + function peek() { + return str.charCodeAt(index + 1); + } + + function next() { + return str.charCodeAt(++index); + } + + function eof() { + return index >= len; + } + + function eatSpace() { + while (peek() === spaceChr) { + next(); + } + } + + function isStringStart(chr) { + return chr === doubleChr || chr === singleChr; + } + + function isExpStart(chr) { + return expStartChr[chr]; + } + + function isExpEnd(start, chr) { + return expChrPair[start] === chr; + } + + function parseString() { + var stringQuote = next(); + var chr; + while (!eof()) { + chr = next(); + // escape char + if (chr === escapeChr) { + next(); + } else if (chr === stringQuote) { + break; + } + } + } + + function parseSpecialExp(chr) { + var inExp = 0; + var startChr = chr; + + while (!eof()) { + chr = peek(); + if (isStringStart(chr)) { + parseString(); + continue; + } + + if (startChr === chr) { + inExp++; + } + if (isExpEnd(startChr, chr)) { + inExp--; + } + + next(); + + if (inExp === 0) { + break; + } + } + } + + /** + * syntax: + * expression | filterName [arg arg [| filterName arg arg]] + */ + + function parseExpression() { + var start = index; + while (!eof()) { + chr = peek(); + if (isStringStart(chr)) { + parseString(); + } else if (isExpStart(chr)) { + parseSpecialExp(chr); + } else if (chr === pipeChr) { + next(); + chr = peek(); + if (chr === pipeChr) { + next(); + } else { + if (state === startState || state === filterArgState) { + state = filterState; + } + break; + } + } else if (chr === spaceChr && (state === filterNameState || state === filterArgState)) { + eatSpace(); + break; + } else { + if (state === filterState) { + state = filterNameState; + } + next(); + } + } + + return str.slice(start + 1, index) || null; + } + + function parseFilterList() { + var filters = []; + while (!eof()) { + filters.push(parseFilter()); + } + return filters; + } + + function parseFilter() { + var filter = {}; + var args; + + state = filterState; + filter.name = parseExpression().trim(); + + state = filterArgState; + args = parseFilterArguments(); + + if (args.length) { + filter.args = args; + } + return filter; + } + + function parseFilterArguments() { + var args = []; + while (!eof() && state !== filterState) { + var arg = parseExpression(); + if (!arg) { + break; + } + args.push(processFilterArg(arg)); + } + + return args; + } + + /** + * Check if an argument is dynamic and strip quotes. + * + * @param {String} arg + * @return {Object} + */ + + function processFilterArg(arg) { + if (reservedArgRE.test(arg)) { + return { + value: toNumber(arg), + dynamic: false + }; + } else { + var stripped = stripQuotes(arg); + var dynamic = stripped === arg; + return { + value: dynamic ? arg : stripped, + dynamic: dynamic + }; + } + } + + /** + * Parse a directive value and extract the expression + * and its filters into a descriptor. + * + * Example: + * + * "a + 1 | uppercase" will yield: + * { + * expression: 'a + 1', + * filters: [ + * { name: 'uppercase', args: null } + * ] + * } + * + * @param {String} s + * @return {Object} + */ + + function parseDirective(s) { + var hit = cache$1.get(s); + if (hit) { + return hit; + } + + // reset parser state + str = s; + dir = {}; + len = str.length; + index = -1; + chr = ''; + state = startState; + + var filters; + + if (str.indexOf('|') < 0) { + dir.expression = str.trim(); + } else { + dir.expression = parseExpression().trim(); + filters = parseFilterList(); + if (filters.length) { + dir.filters = filters; + } + } + + cache$1.put(s, dir); + return dir; + } + + var directive = Object.freeze({ + parseDirective: parseDirective + }); + + var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g; + var cache = undefined; + var tagRE = undefined; + var htmlRE = undefined; + /** + * Escape a string so it can be used in a RegExp + * constructor. + * + * @param {String} str + */ + + function escapeRegex(str) { + return str.replace(regexEscapeRE, '\\$&'); + } + + function compileRegex() { + var open = escapeRegex(config.delimiters[0]); + var close = escapeRegex(config.delimiters[1]); + var unsafeOpen = escapeRegex(config.unsafeDelimiters[0]); + var unsafeClose = escapeRegex(config.unsafeDelimiters[1]); + tagRE = new RegExp(unsafeOpen + '((?:.|\\n)+?)' + unsafeClose + '|' + open + '((?:.|\\n)+?)' + close, 'g'); + htmlRE = new RegExp('^' + unsafeOpen + '((?:.|\\n)+?)' + unsafeClose + '$'); + // reset cache + cache = new Cache(1000); + } + + /** + * Parse a template text string into an array of tokens. + * + * @param {String} text + * @return {Array | null} + * - {String} type + * - {String} value + * - {Boolean} [html] + * - {Boolean} [oneTime] + */ + + function parseText(text) { + if (!cache) { + compileRegex(); + } + var hit = cache.get(text); + if (hit) { + return hit; + } + if (!tagRE.test(text)) { + return null; + } + var tokens = []; + var lastIndex = tagRE.lastIndex = 0; + var match, index, html, value, first, oneTime; + /* eslint-disable no-cond-assign */ + while (match = tagRE.exec(text)) { + /* eslint-enable no-cond-assign */ + index = match.index; + // push text token + if (index > lastIndex) { + tokens.push({ + value: text.slice(lastIndex, index) + }); + } + // tag token + html = htmlRE.test(match[0]); + value = html ? match[1] : match[2]; + first = value.charCodeAt(0); + oneTime = first === 42; // * + value = oneTime ? value.slice(1) : value; + tokens.push({ + tag: true, + value: value.trim(), + html: html, + oneTime: oneTime + }); + lastIndex = index + match[0].length; + } + if (lastIndex < text.length) { + tokens.push({ + value: text.slice(lastIndex) + }); + } + cache.put(text, tokens); + return tokens; + } + + /** + * Format a list of tokens into an expression. + * e.g. tokens parsed from 'a {{b}} c' can be serialized + * into one single expression as '"a " + b + " c"'. + * + * @param {Array} tokens + * @param {Vue} [vm] + * @return {String} + */ + + function tokensToExp(tokens, vm) { + if (tokens.length > 1) { + return tokens.map(function (token) { + return formatToken(token, vm); + }).join('+'); + } else { + return formatToken(tokens[0], vm, true); + } + } + + /** + * Format a single token. + * + * @param {Object} token + * @param {Vue} [vm] + * @param {Boolean} [single] + * @return {String} + */ + + function formatToken(token, vm, single) { + return token.tag ? token.oneTime && vm ? '"' + vm.$eval(token.value) + '"' : inlineFilters(token.value, single) : '"' + token.value + '"'; + } + + /** + * For an attribute with multiple interpolation tags, + * e.g. attr="some-{{thing | filter}}", in order to combine + * the whole thing into a single watchable expression, we + * have to inline those filters. This function does exactly + * that. This is a bit hacky but it avoids heavy changes + * to directive parser and watcher mechanism. + * + * @param {String} exp + * @param {Boolean} single + * @return {String} + */ + + var filterRE = /[^|]\|[^|]/; + function inlineFilters(exp, single) { + if (!filterRE.test(exp)) { + return single ? exp : '(' + exp + ')'; + } else { + var dir = parseDirective(exp); + if (!dir.filters) { + return '(' + exp + ')'; + } else { + return 'this._applyFilters(' + dir.expression + // value + ',null,' + // oldValue (null for read) + JSON.stringify(dir.filters) + // filter descriptors + ',false)'; // write? + } + } + } + + var text = Object.freeze({ + compileRegex: compileRegex, + parseText: parseText, + tokensToExp: tokensToExp + }); + + var delimiters = ['{{', '}}']; + var unsafeDelimiters = ['{{{', '}}}']; + + var config = Object.defineProperties({ + + /** + * Whether to print debug messages. + * Also enables stack trace for warnings. + * + * @type {Boolean} + */ + + debug: false, + + /** + * Whether to suppress warnings. + * + * @type {Boolean} + */ + + silent: false, + + /** + * Whether to use async rendering. + */ + + async: true, + + /** + * Whether to warn against errors caught when evaluating + * expressions. + */ + + warnExpressionErrors: true, + + /** + * Whether to allow devtools inspection. + * Disabled by default in production builds. + */ + + devtools: ("development") !== 'production', + + /** + * Internal flag to indicate the delimiters have been + * changed. + * + * @type {Boolean} + */ + + _delimitersChanged: true, + + /** + * List of asset types that a component can own. + * + * @type {Array} + */ + + _assetTypes: ['component', 'directive', 'elementDirective', 'filter', 'transition', 'partial'], + + /** + * prop binding modes + */ + + _propBindingModes: { + ONE_WAY: 0, + TWO_WAY: 1, + ONE_TIME: 2 + }, + + /** + * Max circular updates allowed in a batcher flush cycle. + */ + + _maxUpdateCount: 100 + + }, { + delimiters: { /** + * Interpolation delimiters. Changing these would trigger + * the text parser to re-compile the regular expressions. + * + * @type {Array} + */ + + get: function get() { + return delimiters; + }, + set: function set(val) { + delimiters = val; + compileRegex(); + }, + configurable: true, + enumerable: true + }, + unsafeDelimiters: { + get: function get() { + return unsafeDelimiters; + }, + set: function set(val) { + unsafeDelimiters = val; + compileRegex(); + }, + configurable: true, + enumerable: true + } + }); + + var warn = undefined; + var formatComponentName = undefined; + + if (true) { + (function () { + var hasConsole = typeof console !== 'undefined'; + + warn = function (msg, vm) { + if (hasConsole && !config.silent) { + console.error('[Vue warn]: ' + msg + (vm ? formatComponentName(vm) : '')); + } + }; + + formatComponentName = function (vm) { + var name = vm._isVue ? vm.$options.name : vm.name; + return name ? ' (found in component: <' + hyphenate(name) + '>)' : ''; + }; + })(); + } + + /** + * Append with transition. + * + * @param {Element} el + * @param {Element} target + * @param {Vue} vm + * @param {Function} [cb] + */ + + function appendWithTransition(el, target, vm, cb) { + applyTransition(el, 1, function () { + target.appendChild(el); + }, vm, cb); + } + + /** + * InsertBefore with transition. + * + * @param {Element} el + * @param {Element} target + * @param {Vue} vm + * @param {Function} [cb] + */ + + function beforeWithTransition(el, target, vm, cb) { + applyTransition(el, 1, function () { + before(el, target); + }, vm, cb); + } + + /** + * Remove with transition. + * + * @param {Element} el + * @param {Vue} vm + * @param {Function} [cb] + */ + + function removeWithTransition(el, vm, cb) { + applyTransition(el, -1, function () { + remove(el); + }, vm, cb); + } + + /** + * Apply transitions with an operation callback. + * + * @param {Element} el + * @param {Number} direction + * 1: enter + * -1: leave + * @param {Function} op - the actual DOM operation + * @param {Vue} vm + * @param {Function} [cb] + */ + + function applyTransition(el, direction, op, vm, cb) { + var transition = el.__v_trans; + if (!transition || + // skip if there are no js hooks and CSS transition is + // not supported + !transition.hooks && !transitionEndEvent || + // skip transitions for initial compile + !vm._isCompiled || + // if the vm is being manipulated by a parent directive + // during the parent's compilation phase, skip the + // animation. + vm.$parent && !vm.$parent._isCompiled) { + op(); + if (cb) cb(); + return; + } + var action = direction > 0 ? 'enter' : 'leave'; + transition[action](op, cb); + } + + var transition = Object.freeze({ + appendWithTransition: appendWithTransition, + beforeWithTransition: beforeWithTransition, + removeWithTransition: removeWithTransition, + applyTransition: applyTransition + }); + + /** + * Query an element selector if it's not an element already. + * + * @param {String|Element} el + * @return {Element} + */ + + function query(el) { + if (typeof el === 'string') { + var selector = el; + el = document.querySelector(el); + if (!el) { + ("development") !== 'production' && warn('Cannot find element: ' + selector); + } + } + return el; + } + + /** + * Check if a node is in the document. + * Note: document.documentElement.contains should work here + * but always returns false for comment nodes in phantomjs, + * making unit tests difficult. This is fixed by doing the + * contains() check on the node's parentNode instead of + * the node itself. + * + * @param {Node} node + * @return {Boolean} + */ + + function inDoc(node) { + if (!node) return false; + var doc = node.ownerDocument.documentElement; + var parent = node.parentNode; + return doc === node || doc === parent || !!(parent && parent.nodeType === 1 && doc.contains(parent)); + } + + /** + * Get and remove an attribute from a node. + * + * @param {Node} node + * @param {String} _attr + */ + + function getAttr(node, _attr) { + var val = node.getAttribute(_attr); + if (val !== null) { + node.removeAttribute(_attr); + } + return val; + } + + /** + * Get an attribute with colon or v-bind: prefix. + * + * @param {Node} node + * @param {String} name + * @return {String|null} + */ + + function getBindAttr(node, name) { + var val = getAttr(node, ':' + name); + if (val === null) { + val = getAttr(node, 'v-bind:' + name); + } + return val; + } + + /** + * Check the presence of a bind attribute. + * + * @param {Node} node + * @param {String} name + * @return {Boolean} + */ + + function hasBindAttr(node, name) { + return node.hasAttribute(name) || node.hasAttribute(':' + name) || node.hasAttribute('v-bind:' + name); + } + + /** + * Insert el before target + * + * @param {Element} el + * @param {Element} target + */ + + function before(el, target) { + target.parentNode.insertBefore(el, target); + } + + /** + * Insert el after target + * + * @param {Element} el + * @param {Element} target + */ + + function after(el, target) { + if (target.nextSibling) { + before(el, target.nextSibling); + } else { + target.parentNode.appendChild(el); + } + } + + /** + * Remove el from DOM + * + * @param {Element} el + */ + + function remove(el) { + el.parentNode.removeChild(el); + } + + /** + * Prepend el to target + * + * @param {Element} el + * @param {Element} target + */ + + function prepend(el, target) { + if (target.firstChild) { + before(el, target.firstChild); + } else { + target.appendChild(el); + } + } + + /** + * Replace target with el + * + * @param {Element} target + * @param {Element} el + */ + + function replace(target, el) { + var parent = target.parentNode; + if (parent) { + parent.replaceChild(el, target); + } + } + + /** + * Add event listener shorthand. + * + * @param {Element} el + * @param {String} event + * @param {Function} cb + * @param {Boolean} [useCapture] + */ + + function on(el, event, cb, useCapture) { + el.addEventListener(event, cb, useCapture); + } + + /** + * Remove event listener shorthand. + * + * @param {Element} el + * @param {String} event + * @param {Function} cb + */ + + function off(el, event, cb) { + el.removeEventListener(event, cb); + } + + /** + * For IE9 compat: when both class and :class are present + * getAttribute('class') returns wrong value... + * + * @param {Element} el + * @return {String} + */ + + function getClass(el) { + var classname = el.className; + if (typeof classname === 'object') { + classname = classname.baseVal || ''; + } + return classname; + } + + /** + * In IE9, setAttribute('class') will result in empty class + * if the element also has the :class attribute; However in + * PhantomJS, setting `className` does not work on SVG elements... + * So we have to do a conditional check here. + * + * @param {Element} el + * @param {String} cls + */ + + function setClass(el, cls) { + /* istanbul ignore if */ + if (isIE9 && !/svg$/.test(el.namespaceURI)) { + el.className = cls; + } else { + el.setAttribute('class', cls); + } + } + + /** + * Add class with compatibility for IE & SVG + * + * @param {Element} el + * @param {String} cls + */ + + function addClass(el, cls) { + if (el.classList) { + el.classList.add(cls); + } else { + var cur = ' ' + getClass(el) + ' '; + if (cur.indexOf(' ' + cls + ' ') < 0) { + setClass(el, (cur + cls).trim()); + } + } + } + + /** + * Remove class with compatibility for IE & SVG + * + * @param {Element} el + * @param {String} cls + */ + + function removeClass(el, cls) { + if (el.classList) { + el.classList.remove(cls); + } else { + var cur = ' ' + getClass(el) + ' '; + var tar = ' ' + cls + ' '; + while (cur.indexOf(tar) >= 0) { + cur = cur.replace(tar, ' '); + } + setClass(el, cur.trim()); + } + if (!el.className) { + el.removeAttribute('class'); + } + } + + /** + * Extract raw content inside an element into a temporary + * container div + * + * @param {Element} el + * @param {Boolean} asFragment + * @return {Element|DocumentFragment} + */ + + function extractContent(el, asFragment) { + var child; + var rawContent; + /* istanbul ignore if */ + if (isTemplate(el) && isFragment(el.content)) { + el = el.content; + } + if (el.hasChildNodes()) { + trimNode(el); + rawContent = asFragment ? document.createDocumentFragment() : document.createElement('div'); + /* eslint-disable no-cond-assign */ + while (child = el.firstChild) { + /* eslint-enable no-cond-assign */ + rawContent.appendChild(child); + } + } + return rawContent; + } + + /** + * Trim possible empty head/tail text and comment + * nodes inside a parent. + * + * @param {Node} node + */ + + function trimNode(node) { + var child; + /* eslint-disable no-sequences */ + while ((child = node.firstChild, isTrimmable(child))) { + node.removeChild(child); + } + while ((child = node.lastChild, isTrimmable(child))) { + node.removeChild(child); + } + /* eslint-enable no-sequences */ + } + + function isTrimmable(node) { + return node && (node.nodeType === 3 && !node.data.trim() || node.nodeType === 8); + } + + /** + * Check if an element is a template tag. + * Note if the template appears inside an SVG its tagName + * will be in lowercase. + * + * @param {Element} el + */ + + function isTemplate(el) { + return el.tagName && el.tagName.toLowerCase() === 'template'; + } + + /** + * Create an "anchor" for performing dom insertion/removals. + * This is used in a number of scenarios: + * - fragment instance + * - v-html + * - v-if + * - v-for + * - component + * + * @param {String} content + * @param {Boolean} persist - IE trashes empty textNodes on + * cloneNode(true), so in certain + * cases the anchor needs to be + * non-empty to be persisted in + * templates. + * @return {Comment|Text} + */ + + function createAnchor(content, persist) { + var anchor = config.debug ? document.createComment(content) : document.createTextNode(persist ? ' ' : ''); + anchor.__v_anchor = true; + return anchor; + } + + /** + * Find a component ref attribute that starts with $. + * + * @param {Element} node + * @return {String|undefined} + */ + + var refRE = /^v-ref:/; + + function findRef(node) { + if (node.hasAttributes()) { + var attrs = node.attributes; + for (var i = 0, l = attrs.length; i < l; i++) { + var name = attrs[i].name; + if (refRE.test(name)) { + return camelize(name.replace(refRE, '')); + } + } + } + } + + /** + * Map a function to a range of nodes . + * + * @param {Node} node + * @param {Node} end + * @param {Function} op + */ + + function mapNodeRange(node, end, op) { + var next; + while (node !== end) { + next = node.nextSibling; + op(node); + node = next; + } + op(end); + } + + /** + * Remove a range of nodes with transition, store + * the nodes in a fragment with correct ordering, + * and call callback when done. + * + * @param {Node} start + * @param {Node} end + * @param {Vue} vm + * @param {DocumentFragment} frag + * @param {Function} cb + */ + + function removeNodeRange(start, end, vm, frag, cb) { + var done = false; + var removed = 0; + var nodes = []; + mapNodeRange(start, end, function (node) { + if (node === end) done = true; + nodes.push(node); + removeWithTransition(node, vm, onRemoved); + }); + function onRemoved() { + removed++; + if (done && removed >= nodes.length) { + for (var i = 0; i < nodes.length; i++) { + frag.appendChild(nodes[i]); + } + cb && cb(); + } + } + } + + /** + * Check if a node is a DocumentFragment. + * + * @param {Node} node + * @return {Boolean} + */ + + function isFragment(node) { + return node && node.nodeType === 11; + } + + /** + * Get outerHTML of elements, taking care + * of SVG elements in IE as well. + * + * @param {Element} el + * @return {String} + */ + + function getOuterHTML(el) { + if (el.outerHTML) { + return el.outerHTML; + } else { + var container = document.createElement('div'); + container.appendChild(el.cloneNode(true)); + return container.innerHTML; + } + } + + var commonTagRE = /^(div|p|span|img|a|b|i|br|ul|ol|li|h1|h2|h3|h4|h5|h6|code|pre|table|th|td|tr|form|label|input|select|option|nav|article|section|header|footer)$/i; + var reservedTagRE = /^(slot|partial|component)$/i; + + var isUnknownElement = undefined; + if (true) { + isUnknownElement = function (el, tag) { + if (tag.indexOf('-') > -1) { + // http://stackoverflow.com/a/28210364/1070244 + return el.constructor === window.HTMLUnknownElement || el.constructor === window.HTMLElement; + } else { + return (/HTMLUnknownElement/.test(el.toString()) && + // Chrome returns unknown for several HTML5 elements. + // https://code.google.com/p/chromium/issues/detail?id=540526 + // Firefox returns unknown for some "Interactive elements." + !/^(data|time|rtc|rb|details|dialog|summary)$/.test(tag) + ); + } + }; + } + + /** + * Check if an element is a component, if yes return its + * component id. + * + * @param {Element} el + * @param {Object} options + * @return {Object|undefined} + */ + + function checkComponentAttr(el, options) { + var tag = el.tagName.toLowerCase(); + var hasAttrs = el.hasAttributes(); + if (!commonTagRE.test(tag) && !reservedTagRE.test(tag)) { + if (resolveAsset(options, 'components', tag)) { + return { id: tag }; + } else { + var is = hasAttrs && getIsBinding(el, options); + if (is) { + return is; + } else if (true) { + var expectedTag = options._componentNameMap && options._componentNameMap[tag]; + if (expectedTag) { + warn('Unknown custom element: <' + tag + '> - ' + 'did you mean <' + expectedTag + '>? ' + 'HTML is case-insensitive, remember to use kebab-case in templates.'); + } else if (isUnknownElement(el, tag)) { + warn('Unknown custom element: <' + tag + '> - did you ' + 'register the component correctly? For recursive components, ' + 'make sure to provide the "name" option.'); + } + } + } + } else if (hasAttrs) { + return getIsBinding(el, options); + } + } + + /** + * Get "is" binding from an element. + * + * @param {Element} el + * @param {Object} options + * @return {Object|undefined} + */ + + function getIsBinding(el, options) { + // dynamic syntax + var exp = el.getAttribute('is'); + if (exp != null) { + if (resolveAsset(options, 'components', exp)) { + el.removeAttribute('is'); + return { id: exp }; + } + } else { + exp = getBindAttr(el, 'is'); + if (exp != null) { + return { id: exp, dynamic: true }; + } + } + } + + /** + * Option overwriting strategies are functions that handle + * how to merge a parent option value and a child option + * value into the final value. + * + * All strategy functions follow the same signature: + * + * @param {*} parentVal + * @param {*} childVal + * @param {Vue} [vm] + */ + + var strats = config.optionMergeStrategies = Object.create(null); + + /** + * Helper that recursively merges two data objects together. + */ + + function mergeData(to, from) { + var key, toVal, fromVal; + for (key in from) { + toVal = to[key]; + fromVal = from[key]; + if (!hasOwn(to, key)) { + set(to, key, fromVal); + } else if (isObject(toVal) && isObject(fromVal)) { + mergeData(toVal, fromVal); + } + } + return to; + } + + /** + * Data + */ + + strats.data = function (parentVal, childVal, vm) { + if (!vm) { + // in a Vue.extend merge, both should be functions + if (!childVal) { + return parentVal; + } + if (typeof childVal !== 'function') { + ("development") !== 'production' && warn('The "data" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm); + return parentVal; + } + if (!parentVal) { + return childVal; + } + // when parentVal & childVal are both present, + // we need to return a function that returns the + // merged result of both functions... no need to + // check if parentVal is a function here because + // it has to be a function to pass previous merges. + return function mergedDataFn() { + return mergeData(childVal.call(this), parentVal.call(this)); + }; + } else if (parentVal || childVal) { + return function mergedInstanceDataFn() { + // instance merge + var instanceData = typeof childVal === 'function' ? childVal.call(vm) : childVal; + var defaultData = typeof parentVal === 'function' ? parentVal.call(vm) : undefined; + if (instanceData) { + return mergeData(instanceData, defaultData); + } else { + return defaultData; + } + }; + } + }; + + /** + * El + */ + + strats.el = function (parentVal, childVal, vm) { + if (!vm && childVal && typeof childVal !== 'function') { + ("development") !== 'production' && warn('The "el" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm); + return; + } + var ret = childVal || parentVal; + // invoke the element factory if this is instance merge + return vm && typeof ret === 'function' ? ret.call(vm) : ret; + }; + + /** + * Hooks and param attributes are merged as arrays. + */ + + strats.init = strats.created = strats.ready = strats.attached = strats.detached = strats.beforeCompile = strats.compiled = strats.beforeDestroy = strats.destroyed = strats.activate = function (parentVal, childVal) { + return childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal; + }; + + /** + * Assets + * + * When a vm is present (instance creation), we need to do + * a three-way merge between constructor options, instance + * options and parent options. + */ + + function mergeAssets(parentVal, childVal) { + var res = Object.create(parentVal || null); + return childVal ? extend(res, guardArrayAssets(childVal)) : res; + } + + config._assetTypes.forEach(function (type) { + strats[type + 's'] = mergeAssets; + }); + + /** + * Events & Watchers. + * + * Events & watchers hashes should not overwrite one + * another, so we merge them as arrays. + */ + + strats.watch = strats.events = function (parentVal, childVal) { + if (!childVal) return parentVal; + if (!parentVal) return childVal; + var ret = {}; + extend(ret, parentVal); + for (var key in childVal) { + var parent = ret[key]; + var child = childVal[key]; + if (parent && !isArray(parent)) { + parent = [parent]; + } + ret[key] = parent ? parent.concat(child) : [child]; + } + return ret; + }; + + /** + * Other object hashes. + */ + + strats.props = strats.methods = strats.computed = function (parentVal, childVal) { + if (!childVal) return parentVal; + if (!parentVal) return childVal; + var ret = Object.create(null); + extend(ret, parentVal); + extend(ret, childVal); + return ret; + }; + + /** + * Default strategy. + */ + + var defaultStrat = function defaultStrat(parentVal, childVal) { + return childVal === undefined ? parentVal : childVal; + }; + + /** + * Make sure component options get converted to actual + * constructors. + * + * @param {Object} options + */ + + function guardComponents(options) { + if (options.components) { + var components = options.components = guardArrayAssets(options.components); + var ids = Object.keys(components); + var def; + if (true) { + var map = options._componentNameMap = {}; + } + for (var i = 0, l = ids.length; i < l; i++) { + var key = ids[i]; + if (commonTagRE.test(key) || reservedTagRE.test(key)) { + ("development") !== 'production' && warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + key); + continue; + } + // record a all lowercase <-> kebab-case mapping for + // possible custom element case error warning + if (true) { + map[key.replace(/-/g, '').toLowerCase()] = hyphenate(key); + } + def = components[key]; + if (isPlainObject(def)) { + components[key] = Vue.extend(def); + } + } + } + } + + /** + * Ensure all props option syntax are normalized into the + * Object-based format. + * + * @param {Object} options + */ + + function guardProps(options) { + var props = options.props; + var i, val; + if (isArray(props)) { + options.props = {}; + i = props.length; + while (i--) { + val = props[i]; + if (typeof val === 'string') { + options.props[val] = null; + } else if (val.name) { + options.props[val.name] = val; + } + } + } else if (isPlainObject(props)) { + var keys = Object.keys(props); + i = keys.length; + while (i--) { + val = props[keys[i]]; + if (typeof val === 'function') { + props[keys[i]] = { type: val }; + } + } + } + } + + /** + * Guard an Array-format assets option and converted it + * into the key-value Object format. + * + * @param {Object|Array} assets + * @return {Object} + */ + + function guardArrayAssets(assets) { + if (isArray(assets)) { + var res = {}; + var i = assets.length; + var asset; + while (i--) { + asset = assets[i]; + var id = typeof asset === 'function' ? asset.options && asset.options.name || asset.id : asset.name || asset.id; + if (!id) { + ("development") !== 'production' && warn('Array-syntax assets must provide a "name" or "id" field.'); + } else { + res[id] = asset; + } + } + return res; + } + return assets; + } + + /** + * Merge two option objects into a new one. + * Core utility used in both instantiation and inheritance. + * + * @param {Object} parent + * @param {Object} child + * @param {Vue} [vm] - if vm is present, indicates this is + * an instantiation merge. + */ + + function mergeOptions(parent, child, vm) { + guardComponents(child); + guardProps(child); + if (true) { + if (child.propsData && !vm) { + warn('propsData can only be used as an instantiation option.'); + } + } + var options = {}; + var key; + if (child['extends']) { + parent = typeof child['extends'] === 'function' ? mergeOptions(parent, child['extends'].options, vm) : mergeOptions(parent, child['extends'], vm); + } + if (child.mixins) { + for (var i = 0, l = child.mixins.length; i < l; i++) { + var mixin = child.mixins[i]; + var mixinOptions = mixin.prototype instanceof Vue ? mixin.options : mixin; + parent = mergeOptions(parent, mixinOptions, vm); + } + } + for (key in parent) { + mergeField(key); + } + for (key in child) { + if (!hasOwn(parent, key)) { + mergeField(key); + } + } + function mergeField(key) { + var strat = strats[key] || defaultStrat; + options[key] = strat(parent[key], child[key], vm, key); + } + return options; + } + + /** + * Resolve an asset. + * This function is used because child instances need access + * to assets defined in its ancestor chain. + * + * @param {Object} options + * @param {String} type + * @param {String} id + * @param {Boolean} warnMissing + * @return {Object|Function} + */ + + function resolveAsset(options, type, id, warnMissing) { + /* istanbul ignore if */ + if (typeof id !== 'string') { + return; + } + var assets = options[type]; + var camelizedId; + var res = assets[id] || + // camelCase ID + assets[camelizedId = camelize(id)] || + // Pascal Case ID + assets[camelizedId.charAt(0).toUpperCase() + camelizedId.slice(1)]; + if (("development") !== 'production' && warnMissing && !res) { + warn('Failed to resolve ' + type.slice(0, -1) + ': ' + id, options); + } + return res; + } + + var uid$1 = 0; + + /** + * A dep is an observable that can have multiple + * directives subscribing to it. + * + * @constructor + */ + function Dep() { + this.id = uid$1++; + this.subs = []; + } + + // the current target watcher being evaluated. + // this is globally unique because there could be only one + // watcher being evaluated at any time. + Dep.target = null; + + /** + * Add a directive subscriber. + * + * @param {Directive} sub + */ + + Dep.prototype.addSub = function (sub) { + this.subs.push(sub); + }; + + /** + * Remove a directive subscriber. + * + * @param {Directive} sub + */ + + Dep.prototype.removeSub = function (sub) { + this.subs.$remove(sub); + }; + + /** + * Add self as a dependency to the target watcher. + */ + + Dep.prototype.depend = function () { + Dep.target.addDep(this); + }; + + /** + * Notify all subscribers of a new value. + */ + + Dep.prototype.notify = function () { + // stablize the subscriber list first + var subs = toArray(this.subs); + for (var i = 0, l = subs.length; i < l; i++) { + subs[i].update(); + } + }; + + var arrayProto = Array.prototype; + var arrayMethods = Object.create(arrayProto) + + /** + * Intercept mutating methods and emit events + */ + + ;['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'].forEach(function (method) { + // cache original method + var original = arrayProto[method]; + def(arrayMethods, method, function mutator() { + // avoid leaking arguments: + // http://jsperf.com/closure-with-arguments + var i = arguments.length; + var args = new Array(i); + while (i--) { + args[i] = arguments[i]; + } + var result = original.apply(this, args); + var ob = this.__ob__; + var inserted; + switch (method) { + case 'push': + inserted = args; + break; + case 'unshift': + inserted = args; + break; + case 'splice': + inserted = args.slice(2); + break; + } + if (inserted) ob.observeArray(inserted); + // notify change + ob.dep.notify(); + return result; + }); + }); + + /** + * Swap the element at the given index with a new value + * and emits corresponding event. + * + * @param {Number} index + * @param {*} val + * @return {*} - replaced element + */ + + def(arrayProto, '$set', function $set(index, val) { + if (index >= this.length) { + this.length = Number(index) + 1; + } + return this.splice(index, 1, val)[0]; + }); + + /** + * Convenience method to remove the element at given index or target element reference. + * + * @param {*} item + */ + + def(arrayProto, '$remove', function $remove(item) { + /* istanbul ignore if */ + if (!this.length) return; + var index = indexOf(this, item); + if (index > -1) { + return this.splice(index, 1); + } + }); + + var arrayKeys = Object.getOwnPropertyNames(arrayMethods); + + /** + * By default, when a reactive property is set, the new value is + * also converted to become reactive. However in certain cases, e.g. + * v-for scope alias and props, we don't want to force conversion + * because the value may be a nested value under a frozen data structure. + * + * So whenever we want to set a reactive property without forcing + * conversion on the new value, we wrap that call inside this function. + */ + + var shouldConvert = true; + + function withoutConversion(fn) { + shouldConvert = false; + fn(); + shouldConvert = true; + } + + /** + * Observer class that are attached to each observed + * object. Once attached, the observer converts target + * object's property keys into getter/setters that + * collect dependencies and dispatches updates. + * + * @param {Array|Object} value + * @constructor + */ + + function Observer(value) { + this.value = value; + this.dep = new Dep(); + def(value, '__ob__', this); + if (isArray(value)) { + var augment = hasProto ? protoAugment : copyAugment; + augment(value, arrayMethods, arrayKeys); + this.observeArray(value); + } else { + this.walk(value); + } + } + + // Instance methods + + /** + * Walk through each property and convert them into + * getter/setters. This method should only be called when + * value type is Object. + * + * @param {Object} obj + */ + + Observer.prototype.walk = function (obj) { + var keys = Object.keys(obj); + for (var i = 0, l = keys.length; i < l; i++) { + this.convert(keys[i], obj[keys[i]]); + } + }; + + /** + * Observe a list of Array items. + * + * @param {Array} items + */ + + Observer.prototype.observeArray = function (items) { + for (var i = 0, l = items.length; i < l; i++) { + observe(items[i]); + } + }; + + /** + * Convert a property into getter/setter so we can emit + * the events when the property is accessed/changed. + * + * @param {String} key + * @param {*} val + */ + + Observer.prototype.convert = function (key, val) { + defineReactive(this.value, key, val); + }; + + /** + * Add an owner vm, so that when $set/$delete mutations + * happen we can notify owner vms to proxy the keys and + * digest the watchers. This is only called when the object + * is observed as an instance's root $data. + * + * @param {Vue} vm + */ + + Observer.prototype.addVm = function (vm) { + (this.vms || (this.vms = [])).push(vm); + }; + + /** + * Remove an owner vm. This is called when the object is + * swapped out as an instance's $data object. + * + * @param {Vue} vm + */ + + Observer.prototype.removeVm = function (vm) { + this.vms.$remove(vm); + }; + + // helpers + + /** + * Augment an target Object or Array by intercepting + * the prototype chain using __proto__ + * + * @param {Object|Array} target + * @param {Object} src + */ + + function protoAugment(target, src) { + /* eslint-disable no-proto */ + target.__proto__ = src; + /* eslint-enable no-proto */ + } + + /** + * Augment an target Object or Array by defining + * hidden properties. + * + * @param {Object|Array} target + * @param {Object} proto + */ + + function copyAugment(target, src, keys) { + for (var i = 0, l = keys.length; i < l; i++) { + var key = keys[i]; + def(target, key, src[key]); + } + } + + /** + * Attempt to create an observer instance for a value, + * returns the new observer if successfully observed, + * or the existing observer if the value already has one. + * + * @param {*} value + * @param {Vue} [vm] + * @return {Observer|undefined} + * @static + */ + + function observe(value, vm) { + if (!value || typeof value !== 'object') { + return; + } + var ob; + if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { + ob = value.__ob__; + } else if (shouldConvert && (isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value._isVue) { + ob = new Observer(value); + } + if (ob && vm) { + ob.addVm(vm); + } + return ob; + } + + /** + * Define a reactive property on an Object. + * + * @param {Object} obj + * @param {String} key + * @param {*} val + */ + + function defineReactive(obj, key, val) { + var dep = new Dep(); + + var property = Object.getOwnPropertyDescriptor(obj, key); + if (property && property.configurable === false) { + return; + } + + // cater for pre-defined getter/setters + var getter = property && property.get; + var setter = property && property.set; + + var childOb = observe(val); + Object.defineProperty(obj, key, { + enumerable: true, + configurable: true, + get: function reactiveGetter() { + var value = getter ? getter.call(obj) : val; + if (Dep.target) { + dep.depend(); + if (childOb) { + childOb.dep.depend(); + } + if (isArray(value)) { + for (var e, i = 0, l = value.length; i < l; i++) { + e = value[i]; + e && e.__ob__ && e.__ob__.dep.depend(); + } + } + } + return value; + }, + set: function reactiveSetter(newVal) { + var value = getter ? getter.call(obj) : val; + if (newVal === value) { + return; + } + if (setter) { + setter.call(obj, newVal); + } else { + val = newVal; + } + childOb = observe(newVal); + dep.notify(); + } + }); + } + + + + var util = Object.freeze({ + defineReactive: defineReactive, + set: set, + del: del, + hasOwn: hasOwn, + isLiteral: isLiteral, + isReserved: isReserved, + _toString: _toString, + toNumber: toNumber, + toBoolean: toBoolean, + stripQuotes: stripQuotes, + camelize: camelize, + hyphenate: hyphenate, + classify: classify, + bind: bind, + toArray: toArray, + extend: extend, + isObject: isObject, + isPlainObject: isPlainObject, + def: def, + debounce: _debounce, + indexOf: indexOf, + cancellable: cancellable, + looseEqual: looseEqual, + isArray: isArray, + hasProto: hasProto, + inBrowser: inBrowser, + devtools: devtools, + isIE: isIE, + isIE9: isIE9, + isAndroid: isAndroid, + isIOS: isIOS, + get transitionProp () { return transitionProp; }, + get transitionEndEvent () { return transitionEndEvent; }, + get animationProp () { return animationProp; }, + get animationEndEvent () { return animationEndEvent; }, + nextTick: nextTick, + get _Set () { return _Set; }, + query: query, + inDoc: inDoc, + getAttr: getAttr, + getBindAttr: getBindAttr, + hasBindAttr: hasBindAttr, + before: before, + after: after, + remove: remove, + prepend: prepend, + replace: replace, + on: on, + off: off, + setClass: setClass, + addClass: addClass, + removeClass: removeClass, + extractContent: extractContent, + trimNode: trimNode, + isTemplate: isTemplate, + createAnchor: createAnchor, + findRef: findRef, + mapNodeRange: mapNodeRange, + removeNodeRange: removeNodeRange, + isFragment: isFragment, + getOuterHTML: getOuterHTML, + mergeOptions: mergeOptions, + resolveAsset: resolveAsset, + checkComponentAttr: checkComponentAttr, + commonTagRE: commonTagRE, + reservedTagRE: reservedTagRE, + get warn () { return warn; } + }); + + var uid = 0; + + function initMixin (Vue) { + /** + * The main init sequence. This is called for every + * instance, including ones that are created from extended + * constructors. + * + * @param {Object} options - this options object should be + * the result of merging class + * options and the options passed + * in to the constructor. + */ + + Vue.prototype._init = function (options) { + options = options || {}; + + this.$el = null; + this.$parent = options.parent; + this.$root = this.$parent ? this.$parent.$root : this; + this.$children = []; + this.$refs = {}; // child vm references + this.$els = {}; // element references + this._watchers = []; // all watchers as an array + this._directives = []; // all directives + + // a uid + this._uid = uid++; + + // a flag to avoid this being observed + this._isVue = true; + + // events bookkeeping + this._events = {}; // registered callbacks + this._eventsCount = {}; // for $broadcast optimization + + // fragment instance properties + this._isFragment = false; + this._fragment = // @type {DocumentFragment} + this._fragmentStart = // @type {Text|Comment} + this._fragmentEnd = null; // @type {Text|Comment} + + // lifecycle state + this._isCompiled = this._isDestroyed = this._isReady = this._isAttached = this._isBeingDestroyed = this._vForRemoving = false; + this._unlinkFn = null; + + // context: + // if this is a transcluded component, context + // will be the common parent vm of this instance + // and its host. + this._context = options._context || this.$parent; + + // scope: + // if this is inside an inline v-for, the scope + // will be the intermediate scope created for this + // repeat fragment. this is used for linking props + // and container directives. + this._scope = options._scope; + + // fragment: + // if this instance is compiled inside a Fragment, it + // needs to register itself as a child of that fragment + // for attach/detach to work properly. + this._frag = options._frag; + if (this._frag) { + this._frag.children.push(this); + } + + // push self into parent / transclusion host + if (this.$parent) { + this.$parent.$children.push(this); + } + + // merge options. + options = this.$options = mergeOptions(this.constructor.options, options, this); + + // set ref + this._updateRef(); + + // initialize data as empty object. + // it will be filled up in _initData(). + this._data = {}; + + // call init hook + this._callHook('init'); + + // initialize data observation and scope inheritance. + this._initState(); + + // setup event system and option events. + this._initEvents(); + + // call created hook + this._callHook('created'); + + // if `el` option is passed, start compilation. + if (options.el) { + this.$mount(options.el); + } + }; + } + + var pathCache = new Cache(1000); + + // actions + var APPEND = 0; + var PUSH = 1; + var INC_SUB_PATH_DEPTH = 2; + var PUSH_SUB_PATH = 3; + + // states + var BEFORE_PATH = 0; + var IN_PATH = 1; + var BEFORE_IDENT = 2; + var IN_IDENT = 3; + var IN_SUB_PATH = 4; + var IN_SINGLE_QUOTE = 5; + var IN_DOUBLE_QUOTE = 6; + var AFTER_PATH = 7; + var ERROR = 8; + + var pathStateMachine = []; + + pathStateMachine[BEFORE_PATH] = { + 'ws': [BEFORE_PATH], + 'ident': [IN_IDENT, APPEND], + '[': [IN_SUB_PATH], + 'eof': [AFTER_PATH] + }; + + pathStateMachine[IN_PATH] = { + 'ws': [IN_PATH], + '.': [BEFORE_IDENT], + '[': [IN_SUB_PATH], + 'eof': [AFTER_PATH] + }; + + pathStateMachine[BEFORE_IDENT] = { + 'ws': [BEFORE_IDENT], + 'ident': [IN_IDENT, APPEND] + }; + + pathStateMachine[IN_IDENT] = { + 'ident': [IN_IDENT, APPEND], + '0': [IN_IDENT, APPEND], + 'number': [IN_IDENT, APPEND], + 'ws': [IN_PATH, PUSH], + '.': [BEFORE_IDENT, PUSH], + '[': [IN_SUB_PATH, PUSH], + 'eof': [AFTER_PATH, PUSH] + }; + + pathStateMachine[IN_SUB_PATH] = { + "'": [IN_SINGLE_QUOTE, APPEND], + '"': [IN_DOUBLE_QUOTE, APPEND], + '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH], + ']': [IN_PATH, PUSH_SUB_PATH], + 'eof': ERROR, + 'else': [IN_SUB_PATH, APPEND] + }; + + pathStateMachine[IN_SINGLE_QUOTE] = { + "'": [IN_SUB_PATH, APPEND], + 'eof': ERROR, + 'else': [IN_SINGLE_QUOTE, APPEND] + }; + + pathStateMachine[IN_DOUBLE_QUOTE] = { + '"': [IN_SUB_PATH, APPEND], + 'eof': ERROR, + 'else': [IN_DOUBLE_QUOTE, APPEND] + }; + + /** + * Determine the type of a character in a keypath. + * + * @param {Char} ch + * @return {String} type + */ + + function getPathCharType(ch) { + if (ch === undefined) { + return 'eof'; + } + + var code = ch.charCodeAt(0); + + switch (code) { + case 0x5B: // [ + case 0x5D: // ] + case 0x2E: // . + case 0x22: // " + case 0x27: // ' + case 0x30: + // 0 + return ch; + + case 0x5F: // _ + case 0x24: + // $ + return 'ident'; + + case 0x20: // Space + case 0x09: // Tab + case 0x0A: // Newline + case 0x0D: // Return + case 0xA0: // No-break space + case 0xFEFF: // Byte Order Mark + case 0x2028: // Line Separator + case 0x2029: + // Paragraph Separator + return 'ws'; + } + + // a-z, A-Z + if (code >= 0x61 && code <= 0x7A || code >= 0x41 && code <= 0x5A) { + return 'ident'; + } + + // 1-9 + if (code >= 0x31 && code <= 0x39) { + return 'number'; + } + + return 'else'; + } + + /** + * Format a subPath, return its plain form if it is + * a literal string or number. Otherwise prepend the + * dynamic indicator (*). + * + * @param {String} path + * @return {String} + */ + + function formatSubPath(path) { + var trimmed = path.trim(); + // invalid leading 0 + if (path.charAt(0) === '0' && isNaN(path)) { + return false; + } + return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed; + } + + /** + * Parse a string path into an array of segments + * + * @param {String} path + * @return {Array|undefined} + */ + + function parse(path) { + var keys = []; + var index = -1; + var mode = BEFORE_PATH; + var subPathDepth = 0; + var c, newChar, key, type, transition, action, typeMap; + + var actions = []; + + actions[PUSH] = function () { + if (key !== undefined) { + keys.push(key); + key = undefined; + } + }; + + actions[APPEND] = function () { + if (key === undefined) { + key = newChar; + } else { + key += newChar; + } + }; + + actions[INC_SUB_PATH_DEPTH] = function () { + actions[APPEND](); + subPathDepth++; + }; + + actions[PUSH_SUB_PATH] = function () { + if (subPathDepth > 0) { + subPathDepth--; + mode = IN_SUB_PATH; + actions[APPEND](); + } else { + subPathDepth = 0; + key = formatSubPath(key); + if (key === false) { + return false; + } else { + actions[PUSH](); + } + } + }; + + function maybeUnescapeQuote() { + var nextChar = path[index + 1]; + if (mode === IN_SINGLE_QUOTE && nextChar === "'" || mode === IN_DOUBLE_QUOTE && nextChar === '"') { + index++; + newChar = '\\' + nextChar; + actions[APPEND](); + return true; + } + } + + while (mode != null) { + index++; + c = path[index]; + + if (c === '\\' && maybeUnescapeQuote()) { + continue; + } + + type = getPathCharType(c); + typeMap = pathStateMachine[mode]; + transition = typeMap[type] || typeMap['else'] || ERROR; + + if (transition === ERROR) { + return; // parse error + } + + mode = transition[0]; + action = actions[transition[1]]; + if (action) { + newChar = transition[2]; + newChar = newChar === undefined ? c : newChar; + if (action() === false) { + return; + } + } + + if (mode === AFTER_PATH) { + keys.raw = path; + return keys; + } + } + } + + /** + * External parse that check for a cache hit first + * + * @param {String} path + * @return {Array|undefined} + */ + + function parsePath(path) { + var hit = pathCache.get(path); + if (!hit) { + hit = parse(path); + if (hit) { + pathCache.put(path, hit); + } + } + return hit; + } + + /** + * Get from an object from a path string + * + * @param {Object} obj + * @param {String} path + */ + + function getPath(obj, path) { + return parseExpression$1(path).get(obj); + } + + /** + * Warn against setting non-existent root path on a vm. + */ + + var warnNonExistent; + if (true) { + warnNonExistent = function (path, vm) { + warn('You are setting a non-existent path "' + path.raw + '" ' + 'on a vm instance. Consider pre-initializing the property ' + 'with the "data" option for more reliable reactivity ' + 'and better performance.', vm); + }; + } + + /** + * Set on an object from a path + * + * @param {Object} obj + * @param {String | Array} path + * @param {*} val + */ + + function setPath(obj, path, val) { + var original = obj; + if (typeof path === 'string') { + path = parse(path); + } + if (!path || !isObject(obj)) { + return false; + } + var last, key; + for (var i = 0, l = path.length; i < l; i++) { + last = obj; + key = path[i]; + if (key.charAt(0) === '*') { + key = parseExpression$1(key.slice(1)).get.call(original, original); + } + if (i < l - 1) { + obj = obj[key]; + if (!isObject(obj)) { + obj = {}; + if (("development") !== 'production' && last._isVue) { + warnNonExistent(path, last); + } + set(last, key, obj); + } + } else { + if (isArray(obj)) { + obj.$set(key, val); + } else if (key in obj) { + obj[key] = val; + } else { + if (("development") !== 'production' && obj._isVue) { + warnNonExistent(path, obj); + } + set(obj, key, val); + } + } + } + return true; + } + + var path = Object.freeze({ + parsePath: parsePath, + getPath: getPath, + setPath: setPath + }); + + var expressionCache = new Cache(1000); + + var allowedKeywords = 'Math,Date,this,true,false,null,undefined,Infinity,NaN,' + 'isNaN,isFinite,decodeURI,decodeURIComponent,encodeURI,' + 'encodeURIComponent,parseInt,parseFloat'; + var allowedKeywordsRE = new RegExp('^(' + allowedKeywords.replace(/,/g, '\\b|') + '\\b)'); + + // keywords that don't make sense inside expressions + var improperKeywords = 'break,case,class,catch,const,continue,debugger,default,' + 'delete,do,else,export,extends,finally,for,function,if,' + 'import,in,instanceof,let,return,super,switch,throw,try,' + 'var,while,with,yield,enum,await,implements,package,' + 'protected,static,interface,private,public'; + var improperKeywordsRE = new RegExp('^(' + improperKeywords.replace(/,/g, '\\b|') + '\\b)'); + + var wsRE = /\s/g; + var newlineRE = /\n/g; + var saveRE = /[\{,]\s*[\w\$_]+\s*:|('(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\"']|\\.)*`|`(?:[^`\\]|\\.)*`)|new |typeof |void /g; + var restoreRE = /"(\d+)"/g; + var pathTestRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\]|\[\d+\]|\[[A-Za-z_$][\w$]*\])*$/; + var identRE = /[^\w$\.](?:[A-Za-z_$][\w$]*)/g; + var literalValueRE$1 = /^(?:true|false|null|undefined|Infinity|NaN)$/; + + function noop() {} + + /** + * Save / Rewrite / Restore + * + * When rewriting paths found in an expression, it is + * possible for the same letter sequences to be found in + * strings and Object literal property keys. Therefore we + * remove and store these parts in a temporary array, and + * restore them after the path rewrite. + */ + + var saved = []; + + /** + * Save replacer + * + * The save regex can match two possible cases: + * 1. An opening object literal + * 2. A string + * If matched as a plain string, we need to escape its + * newlines, since the string needs to be preserved when + * generating the function body. + * + * @param {String} str + * @param {String} isString - str if matched as a string + * @return {String} - placeholder with index + */ + + function save(str, isString) { + var i = saved.length; + saved[i] = isString ? str.replace(newlineRE, '\\n') : str; + return '"' + i + '"'; + } + + /** + * Path rewrite replacer + * + * @param {String} raw + * @return {String} + */ + + function rewrite(raw) { + var c = raw.charAt(0); + var path = raw.slice(1); + if (allowedKeywordsRE.test(path)) { + return raw; + } else { + path = path.indexOf('"') > -1 ? path.replace(restoreRE, restore) : path; + return c + 'scope.' + path; + } + } + + /** + * Restore replacer + * + * @param {String} str + * @param {String} i - matched save index + * @return {String} + */ + + function restore(str, i) { + return saved[i]; + } + + /** + * Rewrite an expression, prefixing all path accessors with + * `scope.` and generate getter/setter functions. + * + * @param {String} exp + * @return {Function} + */ + + function compileGetter(exp) { + if (improperKeywordsRE.test(exp)) { + ("development") !== 'production' && warn('Avoid using reserved keywords in expression: ' + exp); + } + // reset state + saved.length = 0; + // save strings and object literal keys + var body = exp.replace(saveRE, save).replace(wsRE, ''); + // rewrite all paths + // pad 1 space here because the regex matches 1 extra char + body = (' ' + body).replace(identRE, rewrite).replace(restoreRE, restore); + return makeGetterFn(body); + } + + /** + * Build a getter function. Requires eval. + * + * We isolate the try/catch so it doesn't affect the + * optimization of the parse function when it is not called. + * + * @param {String} body + * @return {Function|undefined} + */ + + function makeGetterFn(body) { + try { + /* eslint-disable no-new-func */ + return new Function('scope', 'return ' + body + ';'); + /* eslint-enable no-new-func */ + } catch (e) { + if (true) { + /* istanbul ignore if */ + if (e.toString().match(/unsafe-eval|CSP/)) { + warn('It seems you are using the default build of Vue.js in an environment ' + 'with Content Security Policy that prohibits unsafe-eval. ' + 'Use the CSP-compliant build instead: ' + 'http://vuejs.org/guide/installation.html#CSP-compliant-build'); + } else { + warn('Invalid expression. ' + 'Generated function body: ' + body); + } + } + return noop; + } + } + + /** + * Compile a setter function for the expression. + * + * @param {String} exp + * @return {Function|undefined} + */ + + function compileSetter(exp) { + var path = parsePath(exp); + if (path) { + return function (scope, val) { + setPath(scope, path, val); + }; + } else { + ("development") !== 'production' && warn('Invalid setter expression: ' + exp); + } + } + + /** + * Parse an expression into re-written getter/setters. + * + * @param {String} exp + * @param {Boolean} needSet + * @return {Function} + */ + + function parseExpression$1(exp, needSet) { + exp = exp.trim(); + // try cache + var hit = expressionCache.get(exp); + if (hit) { + if (needSet && !hit.set) { + hit.set = compileSetter(hit.exp); + } + return hit; + } + var res = { exp: exp }; + res.get = isSimplePath(exp) && exp.indexOf('[') < 0 + // optimized super simple getter + ? makeGetterFn('scope.' + exp) + // dynamic getter + : compileGetter(exp); + if (needSet) { + res.set = compileSetter(exp); + } + expressionCache.put(exp, res); + return res; + } + + /** + * Check if an expression is a simple path. + * + * @param {String} exp + * @return {Boolean} + */ + + function isSimplePath(exp) { + return pathTestRE.test(exp) && + // don't treat literal values as paths + !literalValueRE$1.test(exp) && + // Math constants e.g. Math.PI, Math.E etc. + exp.slice(0, 5) !== 'Math.'; + } + + var expression = Object.freeze({ + parseExpression: parseExpression$1, + isSimplePath: isSimplePath + }); + + // we have two separate queues: one for directive updates + // and one for user watcher registered via $watch(). + // we want to guarantee directive updates to be called + // before user watchers so that when user watchers are + // triggered, the DOM would have already been in updated + // state. + + var queue = []; + var userQueue = []; + var has = {}; + var circular = {}; + var waiting = false; + + /** + * Reset the batcher's state. + */ + + function resetBatcherState() { + queue.length = 0; + userQueue.length = 0; + has = {}; + circular = {}; + waiting = false; + } + + /** + * Flush both queues and run the watchers. + */ + + function flushBatcherQueue() { + var _again = true; + + _function: while (_again) { + _again = false; + + runBatcherQueue(queue); + runBatcherQueue(userQueue); + // user watchers triggered more watchers, + // keep flushing until it depletes + if (queue.length) { + _again = true; + continue _function; + } + // dev tool hook + /* istanbul ignore if */ + if (devtools && config.devtools) { + devtools.emit('flush'); + } + resetBatcherState(); + } + } + + /** + * Run the watchers in a single queue. + * + * @param {Array} queue + */ + + function runBatcherQueue(queue) { + // do not cache length because more watchers might be pushed + // as we run existing watchers + for (var i = 0; i < queue.length; i++) { + var watcher = queue[i]; + var id = watcher.id; + has[id] = null; + watcher.run(); + // in dev build, check and stop circular updates. + if (("development") !== 'production' && has[id] != null) { + circular[id] = (circular[id] || 0) + 1; + if (circular[id] > config._maxUpdateCount) { + warn('You may have an infinite update loop for watcher ' + 'with expression "' + watcher.expression + '"', watcher.vm); + break; + } + } + } + queue.length = 0; + } + + /** + * Push a watcher into the watcher queue. + * Jobs with duplicate IDs will be skipped unless it's + * pushed when the queue is being flushed. + * + * @param {Watcher} watcher + * properties: + * - {Number} id + * - {Function} run + */ + + function pushWatcher(watcher) { + var id = watcher.id; + if (has[id] == null) { + // push watcher into appropriate queue + var q = watcher.user ? userQueue : queue; + has[id] = q.length; + q.push(watcher); + // queue the flush + if (!waiting) { + waiting = true; + nextTick(flushBatcherQueue); + } + } + } + + var uid$2 = 0; + + /** + * A watcher parses an expression, collects dependencies, + * and fires callback when the expression value changes. + * This is used for both the $watch() api and directives. + * + * @param {Vue} vm + * @param {String|Function} expOrFn + * @param {Function} cb + * @param {Object} options + * - {Array} filters + * - {Boolean} twoWay + * - {Boolean} deep + * - {Boolean} user + * - {Boolean} sync + * - {Boolean} lazy + * - {Function} [preProcess] + * - {Function} [postProcess] + * @constructor + */ + function Watcher(vm, expOrFn, cb, options) { + // mix in options + if (options) { + extend(this, options); + } + var isFn = typeof expOrFn === 'function'; + this.vm = vm; + vm._watchers.push(this); + this.expression = expOrFn; + this.cb = cb; + this.id = ++uid$2; // uid for batching + this.active = true; + this.dirty = this.lazy; // for lazy watchers + this.deps = []; + this.newDeps = []; + this.depIds = new _Set(); + this.newDepIds = new _Set(); + this.prevError = null; // for async error stacks + // parse expression for getter/setter + if (isFn) { + this.getter = expOrFn; + this.setter = undefined; + } else { + var res = parseExpression$1(expOrFn, this.twoWay); + this.getter = res.get; + this.setter = res.set; + } + this.value = this.lazy ? undefined : this.get(); + // state for avoiding false triggers for deep and Array + // watchers during vm._digest() + this.queued = this.shallow = false; + } + + /** + * Evaluate the getter, and re-collect dependencies. + */ + + Watcher.prototype.get = function () { + this.beforeGet(); + var scope = this.scope || this.vm; + var value; + try { + value = this.getter.call(scope, scope); + } catch (e) { + if (("development") !== 'production' && config.warnExpressionErrors) { + warn('Error when evaluating expression ' + '"' + this.expression + '": ' + e.toString(), this.vm); + } + } + // "touch" every property so they are all tracked as + // dependencies for deep watching + if (this.deep) { + traverse(value); + } + if (this.preProcess) { + value = this.preProcess(value); + } + if (this.filters) { + value = scope._applyFilters(value, null, this.filters, false); + } + if (this.postProcess) { + value = this.postProcess(value); + } + this.afterGet(); + return value; + }; + + /** + * Set the corresponding value with the setter. + * + * @param {*} value + */ + + Watcher.prototype.set = function (value) { + var scope = this.scope || this.vm; + if (this.filters) { + value = scope._applyFilters(value, this.value, this.filters, true); + } + try { + this.setter.call(scope, scope, value); + } catch (e) { + if (("development") !== 'production' && config.warnExpressionErrors) { + warn('Error when evaluating setter ' + '"' + this.expression + '": ' + e.toString(), this.vm); + } + } + // two-way sync for v-for alias + var forContext = scope.$forContext; + if (forContext && forContext.alias === this.expression) { + if (forContext.filters) { + ("development") !== 'production' && warn('It seems you are using two-way binding on ' + 'a v-for alias (' + this.expression + '), and the ' + 'v-for has filters. This will not work properly. ' + 'Either remove the filters or use an array of ' + 'objects and bind to object properties instead.', this.vm); + return; + } + forContext._withLock(function () { + if (scope.$key) { + // original is an object + forContext.rawValue[scope.$key] = value; + } else { + forContext.rawValue.$set(scope.$index, value); + } + }); + } + }; + + /** + * Prepare for dependency collection. + */ + + Watcher.prototype.beforeGet = function () { + Dep.target = this; + }; + + /** + * Add a dependency to this directive. + * + * @param {Dep} dep + */ + + Watcher.prototype.addDep = function (dep) { + var id = dep.id; + if (!this.newDepIds.has(id)) { + this.newDepIds.add(id); + this.newDeps.push(dep); + if (!this.depIds.has(id)) { + dep.addSub(this); + } + } + }; + + /** + * Clean up for dependency collection. + */ + + Watcher.prototype.afterGet = function () { + Dep.target = null; + var i = this.deps.length; + while (i--) { + var dep = this.deps[i]; + if (!this.newDepIds.has(dep.id)) { + dep.removeSub(this); + } + } + var tmp = this.depIds; + this.depIds = this.newDepIds; + this.newDepIds = tmp; + this.newDepIds.clear(); + tmp = this.deps; + this.deps = this.newDeps; + this.newDeps = tmp; + this.newDeps.length = 0; + }; + + /** + * Subscriber interface. + * Will be called when a dependency changes. + * + * @param {Boolean} shallow + */ + + Watcher.prototype.update = function (shallow) { + if (this.lazy) { + this.dirty = true; + } else if (this.sync || !config.async) { + this.run(); + } else { + // if queued, only overwrite shallow with non-shallow, + // but not the other way around. + this.shallow = this.queued ? shallow ? this.shallow : false : !!shallow; + this.queued = true; + // record before-push error stack in debug mode + /* istanbul ignore if */ + if (("development") !== 'production' && config.debug) { + this.prevError = new Error('[vue] async stack trace'); + } + pushWatcher(this); + } + }; + + /** + * Batcher job interface. + * Will be called by the batcher. + */ + + Watcher.prototype.run = function () { + if (this.active) { + var value = this.get(); + if (value !== this.value || + // Deep watchers and watchers on Object/Arrays should fire even + // when the value is the same, because the value may + // have mutated; but only do so if this is a + // non-shallow update (caused by a vm digest). + (isObject(value) || this.deep) && !this.shallow) { + // set new value + var oldValue = this.value; + this.value = value; + // in debug + async mode, when a watcher callbacks + // throws, we also throw the saved before-push error + // so the full cross-tick stack trace is available. + var prevError = this.prevError; + /* istanbul ignore if */ + if (("development") !== 'production' && config.debug && prevError) { + this.prevError = null; + try { + this.cb.call(this.vm, value, oldValue); + } catch (e) { + nextTick(function () { + throw prevError; + }, 0); + throw e; + } + } else { + this.cb.call(this.vm, value, oldValue); + } + } + this.queued = this.shallow = false; + } + }; + + /** + * Evaluate the value of the watcher. + * This only gets called for lazy watchers. + */ + + Watcher.prototype.evaluate = function () { + // avoid overwriting another watcher that is being + // collected. + var current = Dep.target; + this.value = this.get(); + this.dirty = false; + Dep.target = current; + }; + + /** + * Depend on all deps collected by this watcher. + */ + + Watcher.prototype.depend = function () { + var i = this.deps.length; + while (i--) { + this.deps[i].depend(); + } + }; + + /** + * Remove self from all dependencies' subcriber list. + */ + + Watcher.prototype.teardown = function () { + if (this.active) { + // remove self from vm's watcher list + // this is a somewhat expensive operation so we skip it + // if the vm is being destroyed or is performing a v-for + // re-render (the watcher list is then filtered by v-for). + if (!this.vm._isBeingDestroyed && !this.vm._vForRemoving) { + this.vm._watchers.$remove(this); + } + var i = this.deps.length; + while (i--) { + this.deps[i].removeSub(this); + } + this.active = false; + this.vm = this.cb = this.value = null; + } + }; + + /** + * Recrusively traverse an object to evoke all converted + * getters, so that every nested property inside the object + * is collected as a "deep" dependency. + * + * @param {*} val + */ + + var seenObjects = new _Set(); + function traverse(val, seen) { + var i = undefined, + keys = undefined; + if (!seen) { + seen = seenObjects; + seen.clear(); + } + var isA = isArray(val); + var isO = isObject(val); + if ((isA || isO) && Object.isExtensible(val)) { + if (val.__ob__) { + var depId = val.__ob__.dep.id; + if (seen.has(depId)) { + return; + } else { + seen.add(depId); + } + } + if (isA) { + i = val.length; + while (i--) traverse(val[i], seen); + } else if (isO) { + keys = Object.keys(val); + i = keys.length; + while (i--) traverse(val[keys[i]], seen); + } + } + } + + var text$1 = { + + bind: function bind() { + this.attr = this.el.nodeType === 3 ? 'data' : 'textContent'; + }, + + update: function update(value) { + this.el[this.attr] = _toString(value); + } + }; + + var templateCache = new Cache(1000); + var idSelectorCache = new Cache(1000); + + var map = { + efault: [0, '', ''], + legend: [1, '
', '
'], + tr: [2, '', '
'], + col: [2, '', '
'] + }; + + map.td = map.th = [3, '', '
']; + + map.option = map.optgroup = [1, '']; + + map.thead = map.tbody = map.colgroup = map.caption = map.tfoot = [1, '', '
']; + + map.g = map.defs = map.symbol = map.use = map.image = map.text = map.circle = map.ellipse = map.line = map.path = map.polygon = map.polyline = map.rect = [1, '', '']; + + /** + * Check if a node is a supported template node with a + * DocumentFragment content. + * + * @param {Node} node + * @return {Boolean} + */ + + function isRealTemplate(node) { + return isTemplate(node) && isFragment(node.content); + } + + var tagRE$1 = /<([\w:-]+)/; + var entityRE = /&#?\w+?;/; + var commentRE = /