vuejs 1.0.31 → 1.0.33

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vue.js v2.1.3
2
+ * Vue.js v2.1.6
3
3
  * (c) 2014-2016 Evan You
4
4
  * Released under the MIT License.
5
5
  */
@@ -200,6 +200,11 @@ function noop () {}
200
200
  */
201
201
  var no = function () { return false; };
202
202
 
203
+ /**
204
+ * Return same value
205
+ */
206
+ var identity = function (_) { return _; };
207
+
203
208
  /**
204
209
  * Generate a static keys string from compiler modules.
205
210
  */
@@ -232,6 +237,98 @@ function looseIndexOf (arr, val) {
232
237
 
233
238
  /* */
234
239
 
240
+ var config = {
241
+ /**
242
+ * Option merge strategies (used in core/util/options)
243
+ */
244
+ optionMergeStrategies: Object.create(null),
245
+
246
+ /**
247
+ * Whether to suppress warnings.
248
+ */
249
+ silent: false,
250
+
251
+ /**
252
+ * Whether to enable devtools
253
+ */
254
+ devtools: "development" !== 'production',
255
+
256
+ /**
257
+ * Error handler for watcher errors
258
+ */
259
+ errorHandler: null,
260
+
261
+ /**
262
+ * Ignore certain custom elements
263
+ */
264
+ ignoredElements: null,
265
+
266
+ /**
267
+ * Custom user key aliases for v-on
268
+ */
269
+ keyCodes: Object.create(null),
270
+
271
+ /**
272
+ * Check if a tag is reserved so that it cannot be registered as a
273
+ * component. This is platform-dependent and may be overwritten.
274
+ */
275
+ isReservedTag: no,
276
+
277
+ /**
278
+ * Check if a tag is an unknown element.
279
+ * Platform-dependent.
280
+ */
281
+ isUnknownElement: no,
282
+
283
+ /**
284
+ * Get the namespace of an element
285
+ */
286
+ getTagNamespace: noop,
287
+
288
+ /**
289
+ * Parse the real tag name for the specific platform.
290
+ */
291
+ parsePlatformTagName: identity,
292
+
293
+ /**
294
+ * Check if an attribute must be bound using property, e.g. value
295
+ * Platform-dependent.
296
+ */
297
+ mustUseProp: no,
298
+
299
+ /**
300
+ * List of asset types that a component can own.
301
+ */
302
+ _assetTypes: [
303
+ 'component',
304
+ 'directive',
305
+ 'filter'
306
+ ],
307
+
308
+ /**
309
+ * List of lifecycle hooks.
310
+ */
311
+ _lifecycleHooks: [
312
+ 'beforeCreate',
313
+ 'created',
314
+ 'beforeMount',
315
+ 'mounted',
316
+ 'beforeUpdate',
317
+ 'updated',
318
+ 'beforeDestroy',
319
+ 'destroyed',
320
+ 'activated',
321
+ 'deactivated'
322
+ ],
323
+
324
+ /**
325
+ * Max circular updates allowed in a scheduler flush cycle.
326
+ */
327
+ _maxUpdateCount: 100
328
+ };
329
+
330
+ /* */
331
+
235
332
  /**
236
333
  * Check if a string starts with $ or _
237
334
  */
@@ -278,10 +375,7 @@ function parsePath (path) {
278
375
  var hasProto = '__proto__' in {};
279
376
 
280
377
  // Browser environment sniffing
281
- var inBrowser =
282
- typeof window !== 'undefined' &&
283
- Object.prototype.toString.call(window) !== '[object Object]';
284
-
378
+ var inBrowser = typeof window !== 'undefined';
285
379
  var UA = inBrowser && window.navigator.userAgent.toLowerCase();
286
380
  var isIE = UA && /msie|trident/.test(UA);
287
381
  var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
@@ -340,8 +434,9 @@ var nextTick = (function () {
340
434
  /* istanbul ignore if */
341
435
  if (typeof Promise !== 'undefined' && isNative(Promise)) {
342
436
  var p = Promise.resolve();
437
+ var logError = function (err) { console.error(err); };
343
438
  timerFunc = function () {
344
- p.then(nextTickHandler);
439
+ p.then(nextTickHandler).catch(logError);
345
440
  // in problematic UIWebViews, Promise.then doesn't completely break, but
346
441
  // it can get stuck in a weird state where callbacks are pushed into the
347
442
  // microtask queue but the queue isn't being flushed, until the browser
@@ -404,10 +499,10 @@ if (typeof Set !== 'undefined' && isNative(Set)) {
404
499
  this.set = Object.create(null);
405
500
  }
406
501
  Set.prototype.has = function has (key) {
407
- return this.set[key] !== undefined
502
+ return this.set[key] === true
408
503
  };
409
504
  Set.prototype.add = function add (key) {
410
- this.set[key] = 1;
505
+ this.set[key] = true;
411
506
  };
412
507
  Set.prototype.clear = function clear () {
413
508
  this.set = Object.create(null);
@@ -417,93 +512,6 @@ if (typeof Set !== 'undefined' && isNative(Set)) {
417
512
  }());
418
513
  }
419
514
 
420
- /* */
421
-
422
- var config = {
423
- /**
424
- * Option merge strategies (used in core/util/options)
425
- */
426
- optionMergeStrategies: Object.create(null),
427
-
428
- /**
429
- * Whether to suppress warnings.
430
- */
431
- silent: false,
432
-
433
- /**
434
- * Whether to enable devtools
435
- */
436
- devtools: "development" !== 'production',
437
-
438
- /**
439
- * Error handler for watcher errors
440
- */
441
- errorHandler: null,
442
-
443
- /**
444
- * Ignore certain custom elements
445
- */
446
- ignoredElements: null,
447
-
448
- /**
449
- * Custom user key aliases for v-on
450
- */
451
- keyCodes: Object.create(null),
452
-
453
- /**
454
- * Check if a tag is reserved so that it cannot be registered as a
455
- * component. This is platform-dependent and may be overwritten.
456
- */
457
- isReservedTag: no,
458
-
459
- /**
460
- * Check if a tag is an unknown element.
461
- * Platform-dependent.
462
- */
463
- isUnknownElement: no,
464
-
465
- /**
466
- * Get the namespace of an element
467
- */
468
- getTagNamespace: noop,
469
-
470
- /**
471
- * Check if an attribute must be bound using property, e.g. value
472
- * Platform-dependent.
473
- */
474
- mustUseProp: no,
475
-
476
- /**
477
- * List of asset types that a component can own.
478
- */
479
- _assetTypes: [
480
- 'component',
481
- 'directive',
482
- 'filter'
483
- ],
484
-
485
- /**
486
- * List of lifecycle hooks.
487
- */
488
- _lifecycleHooks: [
489
- 'beforeCreate',
490
- 'created',
491
- 'beforeMount',
492
- 'mounted',
493
- 'beforeUpdate',
494
- 'updated',
495
- 'beforeDestroy',
496
- 'destroyed',
497
- 'activated',
498
- 'deactivated'
499
- ],
500
-
501
- /**
502
- * Max circular updates allowed in a scheduler flush cycle.
503
- */
504
- _maxUpdateCount: 100
505
- };
506
-
507
515
  var warn = noop;
508
516
  var formatComponentName;
509
517
 
@@ -712,9 +720,8 @@ function protoAugment (target, src) {
712
720
  /**
713
721
  * Augment an target Object or Array by defining
714
722
  * hidden properties.
715
- *
716
- * istanbul ignore next
717
723
  */
724
+ /* istanbul ignore next */
718
725
  function copyAugment (target, src, keys) {
719
726
  for (var i = 0, l = keys.length; i < l; i++) {
720
727
  var key = keys[i];
@@ -809,7 +816,7 @@ function defineReactive$$1 (
809
816
  * triggers change notification if the property doesn't
810
817
  * already exist.
811
818
  */
812
- function set (obj, key, val) {
819
+ function set$1 (obj, key, val) {
813
820
  if (Array.isArray(obj)) {
814
821
  obj.length = Math.max(obj.length, key);
815
822
  obj.splice(key, 1, val);
@@ -908,7 +915,7 @@ function mergeData (to, from) {
908
915
  toVal = to[key];
909
916
  fromVal = from[key];
910
917
  if (!hasOwn(to, key)) {
911
- set(to, key, fromVal);
918
+ set$1(to, key, fromVal);
912
919
  } else if (isPlainObject(toVal) && isPlainObject(fromVal)) {
913
920
  mergeData(toVal, fromVal);
914
921
  }
@@ -1180,11 +1187,14 @@ function resolveAsset (
1180
1187
  return
1181
1188
  }
1182
1189
  var assets = options[type];
1183
- var res = assets[id] ||
1184
- // camelCase ID
1185
- assets[camelize(id)] ||
1186
- // Pascal Case ID
1187
- assets[capitalize(camelize(id))];
1190
+ // check local registration variations first
1191
+ if (hasOwn(assets, id)) { return assets[id] }
1192
+ var camelizedId = camelize(id);
1193
+ if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
1194
+ var PascalCaseId = capitalize(camelizedId);
1195
+ if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
1196
+ // fallback to prototype chain
1197
+ var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
1188
1198
  if ("development" !== 'production' && warnMissing && !res) {
1189
1199
  warn(
1190
1200
  'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
@@ -1386,6 +1396,7 @@ var util = Object.freeze({
1386
1396
  toObject: toObject,
1387
1397
  noop: noop,
1388
1398
  no: no,
1399
+ identity: identity,
1389
1400
  genStaticKeys: genStaticKeys,
1390
1401
  looseEqual: looseEqual,
1391
1402
  looseIndexOf: looseIndexOf,
@@ -1436,6 +1447,21 @@ var initProxy;
1436
1447
  typeof Proxy !== 'undefined' &&
1437
1448
  Proxy.toString().match(/native code/);
1438
1449
 
1450
+ if (hasProxy) {
1451
+ var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta');
1452
+ config.keyCodes = new Proxy(config.keyCodes, {
1453
+ set: function set (target, key, value) {
1454
+ if (isBuiltInModifier(key)) {
1455
+ warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key));
1456
+ return false
1457
+ } else {
1458
+ target[key] = value;
1459
+ return true
1460
+ }
1461
+ }
1462
+ });
1463
+ }
1464
+
1439
1465
  var hasHandler = {
1440
1466
  has: function has (target, key) {
1441
1467
  var has = key in target;
@@ -1712,14 +1738,14 @@ Watcher.prototype.run = function run () {
1712
1738
  try {
1713
1739
  this.cb.call(this.vm, value, oldValue);
1714
1740
  } catch (e) {
1715
- "development" !== 'production' && warn(
1716
- ("Error in watcher \"" + (this.expression) + "\""),
1717
- this.vm
1718
- );
1719
1741
  /* istanbul ignore else */
1720
1742
  if (config.errorHandler) {
1721
1743
  config.errorHandler.call(null, e, this.vm);
1722
1744
  } else {
1745
+ "development" !== 'production' && warn(
1746
+ ("Error in watcher \"" + (this.expression) + "\""),
1747
+ this.vm
1748
+ );
1723
1749
  throw e
1724
1750
  }
1725
1751
  }
@@ -1812,13 +1838,13 @@ function _traverse (val, seen) {
1812
1838
  function initState (vm) {
1813
1839
  vm._watchers = [];
1814
1840
  initProps(vm);
1841
+ initMethods(vm);
1815
1842
  initData(vm);
1816
1843
  initComputed(vm);
1817
- initMethods(vm);
1818
1844
  initWatch(vm);
1819
1845
  }
1820
1846
 
1821
- var isReservedProp = makeMap('key,ref,slot');
1847
+ var isReservedProp = { key: 1, ref: 1, slot: 1 };
1822
1848
 
1823
1849
  function initProps (vm) {
1824
1850
  var props = vm.$options.props;
@@ -1832,7 +1858,7 @@ function initProps (vm) {
1832
1858
  var key = keys[i];
1833
1859
  /* istanbul ignore else */
1834
1860
  {
1835
- if (isReservedProp(key)) {
1861
+ if (isReservedProp[key]) {
1836
1862
  warn(
1837
1863
  ("\"" + key + "\" is a reserved attribute and cannot be used as component prop."),
1838
1864
  vm
@@ -1865,7 +1891,8 @@ function initData (vm) {
1865
1891
  if (!isPlainObject(data)) {
1866
1892
  data = {};
1867
1893
  "development" !== 'production' && warn(
1868
- 'data functions should return an object.',
1894
+ 'data functions should return an object:\n' +
1895
+ 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
1869
1896
  vm
1870
1897
  );
1871
1898
  }
@@ -1997,7 +2024,7 @@ function stateMixin (Vue) {
1997
2024
  }
1998
2025
  Object.defineProperty(Vue.prototype, '$data', dataDef);
1999
2026
 
2000
- Vue.prototype.$set = set;
2027
+ Vue.prototype.$set = set$1;
2001
2028
  Vue.prototype.$delete = del;
2002
2029
 
2003
2030
  Vue.prototype.$watch = function (
@@ -2041,7 +2068,6 @@ var VNode = function VNode (
2041
2068
  children,
2042
2069
  text,
2043
2070
  elm,
2044
- ns,
2045
2071
  context,
2046
2072
  componentOptions
2047
2073
  ) {
@@ -2050,7 +2076,7 @@ var VNode = function VNode (
2050
2076
  this.children = children;
2051
2077
  this.text = text;
2052
2078
  this.elm = elm;
2053
- this.ns = ns;
2079
+ this.ns = undefined;
2054
2080
  this.context = context;
2055
2081
  this.functionalContext = undefined;
2056
2082
  this.key = data && data.key;
@@ -2065,13 +2091,17 @@ var VNode = function VNode (
2065
2091
  this.isOnce = false;
2066
2092
  };
2067
2093
 
2068
- var emptyVNode = function () {
2094
+ var createEmptyVNode = function () {
2069
2095
  var node = new VNode();
2070
2096
  node.text = '';
2071
2097
  node.isComment = true;
2072
2098
  return node
2073
2099
  };
2074
2100
 
2101
+ function createTextVNode (val) {
2102
+ return new VNode(undefined, undefined, undefined, String(val))
2103
+ }
2104
+
2075
2105
  // optimized shallow clone
2076
2106
  // used for static nodes and slot nodes because they may be reused across
2077
2107
  // multiple renders, cloning them avoids errors when DOM manipulations rely
@@ -2083,10 +2113,10 @@ function cloneVNode (vnode) {
2083
2113
  vnode.children,
2084
2114
  vnode.text,
2085
2115
  vnode.elm,
2086
- vnode.ns,
2087
2116
  vnode.context,
2088
2117
  vnode.componentOptions
2089
2118
  );
2119
+ cloned.ns = vnode.ns;
2090
2120
  cloned.isStatic = vnode.isStatic;
2091
2121
  cloned.key = vnode.key;
2092
2122
  cloned.isCloned = true;
@@ -2103,162 +2133,6 @@ function cloneVNodes (vnodes) {
2103
2133
 
2104
2134
  /* */
2105
2135
 
2106
- function mergeVNodeHook (def, hookKey, hook, key) {
2107
- key = key + hookKey;
2108
- var injectedHash = def.__injected || (def.__injected = {});
2109
- if (!injectedHash[key]) {
2110
- injectedHash[key] = true;
2111
- var oldHook = def[hookKey];
2112
- if (oldHook) {
2113
- def[hookKey] = function () {
2114
- oldHook.apply(this, arguments);
2115
- hook.apply(this, arguments);
2116
- };
2117
- } else {
2118
- def[hookKey] = hook;
2119
- }
2120
- }
2121
- }
2122
-
2123
- /* */
2124
-
2125
- function updateListeners (
2126
- on,
2127
- oldOn,
2128
- add,
2129
- remove$$1,
2130
- vm
2131
- ) {
2132
- var name, cur, old, fn, event, capture;
2133
- for (name in on) {
2134
- cur = on[name];
2135
- old = oldOn[name];
2136
- if (!cur) {
2137
- "development" !== 'production' && warn(
2138
- "Invalid handler for event \"" + name + "\": got " + String(cur),
2139
- vm
2140
- );
2141
- } else if (!old) {
2142
- capture = name.charAt(0) === '!';
2143
- event = capture ? name.slice(1) : name;
2144
- if (Array.isArray(cur)) {
2145
- add(event, (cur.invoker = arrInvoker(cur)), capture);
2146
- } else {
2147
- if (!cur.invoker) {
2148
- fn = cur;
2149
- cur = on[name] = {};
2150
- cur.fn = fn;
2151
- cur.invoker = fnInvoker(cur);
2152
- }
2153
- add(event, cur.invoker, capture);
2154
- }
2155
- } else if (cur !== old) {
2156
- if (Array.isArray(old)) {
2157
- old.length = cur.length;
2158
- for (var i = 0; i < old.length; i++) { old[i] = cur[i]; }
2159
- on[name] = old;
2160
- } else {
2161
- old.fn = cur;
2162
- on[name] = old;
2163
- }
2164
- }
2165
- }
2166
- for (name in oldOn) {
2167
- if (!on[name]) {
2168
- event = name.charAt(0) === '!' ? name.slice(1) : name;
2169
- remove$$1(event, oldOn[name].invoker);
2170
- }
2171
- }
2172
- }
2173
-
2174
- function arrInvoker (arr) {
2175
- return function (ev) {
2176
- var arguments$1 = arguments;
2177
-
2178
- var single = arguments.length === 1;
2179
- for (var i = 0; i < arr.length; i++) {
2180
- single ? arr[i](ev) : arr[i].apply(null, arguments$1);
2181
- }
2182
- }
2183
- }
2184
-
2185
- function fnInvoker (o) {
2186
- return function (ev) {
2187
- var single = arguments.length === 1;
2188
- single ? o.fn(ev) : o.fn.apply(null, arguments);
2189
- }
2190
- }
2191
-
2192
- /* */
2193
-
2194
- function normalizeChildren (
2195
- children,
2196
- ns,
2197
- nestedIndex
2198
- ) {
2199
- if (isPrimitive(children)) {
2200
- return [createTextVNode(children)]
2201
- }
2202
- if (Array.isArray(children)) {
2203
- var res = [];
2204
- for (var i = 0, l = children.length; i < l; i++) {
2205
- var c = children[i];
2206
- var last = res[res.length - 1];
2207
- // nested
2208
- if (Array.isArray(c)) {
2209
- res.push.apply(res, normalizeChildren(c, ns, ((nestedIndex || '') + "_" + i)));
2210
- } else if (isPrimitive(c)) {
2211
- if (last && last.text) {
2212
- last.text += String(c);
2213
- } else if (c !== '') {
2214
- // convert primitive to vnode
2215
- res.push(createTextVNode(c));
2216
- }
2217
- } else if (c instanceof VNode) {
2218
- if (c.text && last && last.text) {
2219
- if (!last.isCloned) {
2220
- last.text += c.text;
2221
- }
2222
- } else {
2223
- // inherit parent namespace
2224
- if (ns) {
2225
- applyNS(c, ns);
2226
- }
2227
- // default key for nested array children (likely generated by v-for)
2228
- if (c.tag && c.key == null && nestedIndex != null) {
2229
- c.key = "__vlist" + nestedIndex + "_" + i + "__";
2230
- }
2231
- res.push(c);
2232
- }
2233
- }
2234
- }
2235
- return res
2236
- }
2237
- }
2238
-
2239
- function createTextVNode (val) {
2240
- return new VNode(undefined, undefined, undefined, String(val))
2241
- }
2242
-
2243
- function applyNS (vnode, ns) {
2244
- if (vnode.tag && !vnode.ns) {
2245
- vnode.ns = ns;
2246
- if (vnode.children) {
2247
- for (var i = 0, l = vnode.children.length; i < l; i++) {
2248
- applyNS(vnode.children[i], ns);
2249
- }
2250
- }
2251
- }
2252
- }
2253
-
2254
- /* */
2255
-
2256
- function getFirstComponentChild (children) {
2257
- return children && children.filter(function (c) { return c && c.componentOptions; })[0]
2258
- }
2259
-
2260
- /* */
2261
-
2262
2136
  var activeInstance = null;
2263
2137
 
2264
2138
  function initLifecycle (vm) {
@@ -2294,7 +2168,7 @@ function lifecycleMixin (Vue) {
2294
2168
  var vm = this;
2295
2169
  vm.$el = el;
2296
2170
  if (!vm.$options.render) {
2297
- vm.$options.render = emptyVNode;
2171
+ vm.$options.render = createEmptyVNode;
2298
2172
  {
2299
2173
  /* istanbul ignore if */
2300
2174
  if (vm.$options.template && vm.$options.template.charAt(0) !== '#') {
@@ -2332,15 +2206,21 @@ function lifecycleMixin (Vue) {
2332
2206
  callHook(vm, 'beforeUpdate');
2333
2207
  }
2334
2208
  var prevEl = vm.$el;
2209
+ var prevVnode = vm._vnode;
2335
2210
  var prevActiveInstance = activeInstance;
2336
2211
  activeInstance = vm;
2337
- var prevVnode = vm._vnode;
2338
2212
  vm._vnode = vnode;
2213
+ // Vue.prototype.__patch__ is injected in entry points
2214
+ // based on the rendering backend used.
2339
2215
  if (!prevVnode) {
2340
- // Vue.prototype.__patch__ is injected in entry points
2341
- // based on the rendering backend used.
2342
- vm.$el = vm.__patch__(vm.$el, vnode, hydrating);
2216
+ // initial render
2217
+ vm.$el = vm.__patch__(
2218
+ vm.$el, vnode, hydrating, false /* removeOnly */,
2219
+ vm.$options._parentElm,
2220
+ vm.$options._refElm
2221
+ );
2343
2222
  } else {
2223
+ // updates
2344
2224
  vm.$el = vm.__patch__(prevVnode, vnode);
2345
2225
  }
2346
2226
  activeInstance = prevActiveInstance;
@@ -2399,7 +2279,7 @@ function lifecycleMixin (Vue) {
2399
2279
  }
2400
2280
  // resolve slots + force update if has children
2401
2281
  if (hasChildren) {
2402
- vm.$slots = resolveSlots(renderChildren, vm._renderContext);
2282
+ vm.$slots = resolveSlots(renderChildren, parentVnode.context);
2403
2283
  vm.$forceUpdate();
2404
2284
  }
2405
2285
  };
@@ -2539,7 +2419,7 @@ function createComponent (
2539
2419
  var name = Ctor.options.name || tag;
2540
2420
  var vnode = new VNode(
2541
2421
  ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
2542
- data, undefined, undefined, undefined, undefined, context,
2422
+ data, undefined, undefined, undefined, context,
2543
2423
  { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }
2544
2424
  );
2545
2425
  return vnode
@@ -2559,19 +2439,17 @@ function createFunctionalComponent (
2559
2439
  props[key] = validateProp(key, propOptions, propsData);
2560
2440
  }
2561
2441
  }
2562
- var vnode = Ctor.options.render.call(
2563
- null,
2564
- // ensure the createElement function in functional components
2565
- // gets a unique context - this is necessary for correct named slot check
2566
- bind$1(createElement, { _self: Object.create(context) }),
2567
- {
2568
- props: props,
2569
- data: data,
2570
- parent: context,
2571
- children: normalizeChildren(children),
2572
- slots: function () { return resolveSlots(children, context); }
2573
- }
2574
- );
2442
+ // ensure the createElement function in functional components
2443
+ // gets a unique context - this is necessary for correct named slot check
2444
+ var _context = Object.create(context);
2445
+ var h = function (a, b, c, d) { return createElement(_context, a, b, c, d, true); };
2446
+ var vnode = Ctor.options.render.call(null, h, {
2447
+ props: props,
2448
+ data: data,
2449
+ parent: context,
2450
+ children: children,
2451
+ slots: function () { return resolveSlots(children, context); }
2452
+ });
2575
2453
  if (vnode instanceof VNode) {
2576
2454
  vnode.functionalContext = context;
2577
2455
  if (data.slot) {
@@ -2583,7 +2461,9 @@ function createFunctionalComponent (
2583
2461
 
2584
2462
  function createComponentInstanceForVnode (
2585
2463
  vnode, // we know it's MountedComponentVNode but flow doesn't
2586
- parent // activeInstance in lifecycle state
2464
+ parent, // activeInstance in lifecycle state
2465
+ parentElm,
2466
+ refElm
2587
2467
  ) {
2588
2468
  var vnodeComponentOptions = vnode.componentOptions;
2589
2469
  var options = {
@@ -2593,7 +2473,9 @@ function createComponentInstanceForVnode (
2593
2473
  _componentTag: vnodeComponentOptions.tag,
2594
2474
  _parentVnode: vnode,
2595
2475
  _parentListeners: vnodeComponentOptions.listeners,
2596
- _renderChildren: vnodeComponentOptions.children
2476
+ _renderChildren: vnodeComponentOptions.children,
2477
+ _parentElm: parentElm || null,
2478
+ _refElm: refElm || null
2597
2479
  };
2598
2480
  // check inline-template render functions
2599
2481
  var inlineTemplate = vnode.data.inlineTemplate;
@@ -2604,9 +2486,19 @@ function createComponentInstanceForVnode (
2604
2486
  return new vnodeComponentOptions.Ctor(options)
2605
2487
  }
2606
2488
 
2607
- function init (vnode, hydrating) {
2489
+ function init (
2490
+ vnode,
2491
+ hydrating,
2492
+ parentElm,
2493
+ refElm
2494
+ ) {
2608
2495
  if (!vnode.child || vnode.child._isDestroyed) {
2609
- var child = vnode.child = createComponentInstanceForVnode(vnode, activeInstance);
2496
+ var child = vnode.child = createComponentInstanceForVnode(
2497
+ vnode,
2498
+ activeInstance,
2499
+ parentElm,
2500
+ refElm
2501
+ );
2610
2502
  child.$mount(hydrating ? vnode.elm : undefined, hydrating);
2611
2503
  } else if (vnode.data.keepAlive) {
2612
2504
  // kept-alive components, treat as a patch
@@ -2722,50 +2614,189 @@ function extractProps (data, Ctor) {
2722
2614
  return res
2723
2615
  }
2724
2616
 
2725
- function checkProp (
2726
- res,
2727
- hash,
2728
- key,
2729
- altKey,
2730
- preserve
2731
- ) {
2732
- if (hash) {
2733
- if (hasOwn(hash, key)) {
2734
- res[key] = hash[key];
2735
- if (!preserve) {
2736
- delete hash[key];
2617
+ function checkProp (
2618
+ res,
2619
+ hash,
2620
+ key,
2621
+ altKey,
2622
+ preserve
2623
+ ) {
2624
+ if (hash) {
2625
+ if (hasOwn(hash, key)) {
2626
+ res[key] = hash[key];
2627
+ if (!preserve) {
2628
+ delete hash[key];
2629
+ }
2630
+ return true
2631
+ } else if (hasOwn(hash, altKey)) {
2632
+ res[key] = hash[altKey];
2633
+ if (!preserve) {
2634
+ delete hash[altKey];
2635
+ }
2636
+ return true
2637
+ }
2638
+ }
2639
+ return false
2640
+ }
2641
+
2642
+ function mergeHooks (data) {
2643
+ if (!data.hook) {
2644
+ data.hook = {};
2645
+ }
2646
+ for (var i = 0; i < hooksToMerge.length; i++) {
2647
+ var key = hooksToMerge[i];
2648
+ var fromParent = data.hook[key];
2649
+ var ours = hooks[key];
2650
+ data.hook[key] = fromParent ? mergeHook$1(ours, fromParent) : ours;
2651
+ }
2652
+ }
2653
+
2654
+ function mergeHook$1 (one, two) {
2655
+ return function (a, b, c, d) {
2656
+ one(a, b, c, d);
2657
+ two(a, b, c, d);
2658
+ }
2659
+ }
2660
+
2661
+ /* */
2662
+
2663
+ function mergeVNodeHook (def, hookKey, hook, key) {
2664
+ key = key + hookKey;
2665
+ var injectedHash = def.__injected || (def.__injected = {});
2666
+ if (!injectedHash[key]) {
2667
+ injectedHash[key] = true;
2668
+ var oldHook = def[hookKey];
2669
+ if (oldHook) {
2670
+ def[hookKey] = function () {
2671
+ oldHook.apply(this, arguments);
2672
+ hook.apply(this, arguments);
2673
+ };
2674
+ } else {
2675
+ def[hookKey] = hook;
2676
+ }
2677
+ }
2678
+ }
2679
+
2680
+ /* */
2681
+
2682
+ function updateListeners (
2683
+ on,
2684
+ oldOn,
2685
+ add,
2686
+ remove$$1,
2687
+ vm
2688
+ ) {
2689
+ var name, cur, old, fn, event, capture, once;
2690
+ for (name in on) {
2691
+ cur = on[name];
2692
+ old = oldOn[name];
2693
+ if (!cur) {
2694
+ "development" !== 'production' && warn(
2695
+ "Invalid handler for event \"" + name + "\": got " + String(cur),
2696
+ vm
2697
+ );
2698
+ } else if (!old) {
2699
+ once = name.charAt(0) === '~'; // Prefixed last, checked first
2700
+ event = once ? name.slice(1) : name;
2701
+ capture = event.charAt(0) === '!';
2702
+ event = capture ? event.slice(1) : event;
2703
+ if (Array.isArray(cur)) {
2704
+ add(event, (cur.invoker = arrInvoker(cur)), once, capture);
2705
+ } else {
2706
+ if (!cur.invoker) {
2707
+ fn = cur;
2708
+ cur = on[name] = {};
2709
+ cur.fn = fn;
2710
+ cur.invoker = fnInvoker(cur);
2711
+ }
2712
+ add(event, cur.invoker, once, capture);
2713
+ }
2714
+ } else if (cur !== old) {
2715
+ if (Array.isArray(old)) {
2716
+ old.length = cur.length;
2717
+ for (var i = 0; i < old.length; i++) { old[i] = cur[i]; }
2718
+ on[name] = old;
2719
+ } else {
2720
+ old.fn = cur;
2721
+ on[name] = old;
2722
+ }
2723
+ }
2724
+ }
2725
+ for (name in oldOn) {
2726
+ if (!on[name]) {
2727
+ once = name.charAt(0) === '~'; // Prefixed last, checked first
2728
+ event = once ? name.slice(1) : name;
2729
+ capture = event.charAt(0) === '!';
2730
+ event = capture ? event.slice(1) : event;
2731
+ remove$$1(event, oldOn[name].invoker, capture);
2732
+ }
2733
+ }
2734
+ }
2735
+
2736
+ function arrInvoker (arr) {
2737
+ return function (ev) {
2738
+ var arguments$1 = arguments;
2739
+
2740
+ var single = arguments.length === 1;
2741
+ for (var i = 0; i < arr.length; i++) {
2742
+ single ? arr[i](ev) : arr[i].apply(null, arguments$1);
2743
+ }
2744
+ }
2745
+ }
2746
+
2747
+ function fnInvoker (o) {
2748
+ return function (ev) {
2749
+ var single = arguments.length === 1;
2750
+ single ? o.fn(ev) : o.fn.apply(null, arguments);
2751
+ }
2752
+ }
2753
+
2754
+ /* */
2755
+
2756
+ function normalizeChildren (children) {
2757
+ return isPrimitive(children)
2758
+ ? [createTextVNode(children)]
2759
+ : Array.isArray(children)
2760
+ ? normalizeArrayChildren(children)
2761
+ : undefined
2762
+ }
2763
+
2764
+ function normalizeArrayChildren (children, nestedIndex) {
2765
+ var res = [];
2766
+ var i, c, last;
2767
+ for (i = 0; i < children.length; i++) {
2768
+ c = children[i];
2769
+ if (c == null || typeof c === 'boolean') { continue }
2770
+ last = res[res.length - 1];
2771
+ // nested
2772
+ if (Array.isArray(c)) {
2773
+ res.push.apply(res, normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i)));
2774
+ } else if (isPrimitive(c)) {
2775
+ if (last && last.text) {
2776
+ last.text += String(c);
2777
+ } else if (c !== '') {
2778
+ // convert primitive to vnode
2779
+ res.push(createTextVNode(c));
2737
2780
  }
2738
- return true
2739
- } else if (hasOwn(hash, altKey)) {
2740
- res[key] = hash[altKey];
2741
- if (!preserve) {
2742
- delete hash[altKey];
2781
+ } else {
2782
+ if (c.text && last && last.text) {
2783
+ res[res.length - 1] = createTextVNode(last.text + c.text);
2784
+ } else {
2785
+ // default key for nested array children (likely generated by v-for)
2786
+ if (c.tag && c.key == null && nestedIndex != null) {
2787
+ c.key = "__vlist" + nestedIndex + "_" + i + "__";
2788
+ }
2789
+ res.push(c);
2743
2790
  }
2744
- return true
2745
2791
  }
2746
2792
  }
2747
- return false
2793
+ return res
2748
2794
  }
2749
2795
 
2750
- function mergeHooks (data) {
2751
- if (!data.hook) {
2752
- data.hook = {};
2753
- }
2754
- for (var i = 0; i < hooksToMerge.length; i++) {
2755
- var key = hooksToMerge[i];
2756
- var fromParent = data.hook[key];
2757
- var ours = hooks[key];
2758
- data.hook[key] = fromParent ? mergeHook$1(ours, fromParent) : ours;
2759
- }
2760
- }
2796
+ /* */
2761
2797
 
2762
- function mergeHook$1 (a, b) {
2763
- // since all hooks have at most two args, use fixed args
2764
- // to avoid having to use fn.apply().
2765
- return function (_, __) {
2766
- a(_, __);
2767
- b(_, __);
2768
- }
2798
+ function getFirstComponentChild (children) {
2799
+ return children && children.filter(function (c) { return c && c.componentOptions; })[0]
2769
2800
  }
2770
2801
 
2771
2802
  /* */
@@ -2773,23 +2804,28 @@ function mergeHook$1 (a, b) {
2773
2804
  // wrapper function for providing a more flexible interface
2774
2805
  // without getting yelled at by flow
2775
2806
  function createElement (
2807
+ context,
2776
2808
  tag,
2777
2809
  data,
2778
- children
2810
+ children,
2811
+ needNormalization,
2812
+ alwaysNormalize
2779
2813
  ) {
2780
- if (data && (Array.isArray(data) || typeof data !== 'object')) {
2814
+ if (Array.isArray(data) || isPrimitive(data)) {
2815
+ needNormalization = children;
2781
2816
  children = data;
2782
2817
  data = undefined;
2783
2818
  }
2784
- // make sure to use real instance instead of proxy as context
2785
- return _createElement(this._self, tag, data, children)
2819
+ if (alwaysNormalize) { needNormalization = true; }
2820
+ return _createElement(context, tag, data, children, needNormalization)
2786
2821
  }
2787
2822
 
2788
2823
  function _createElement (
2789
2824
  context,
2790
2825
  tag,
2791
2826
  data,
2792
- children
2827
+ children,
2828
+ needNormalization
2793
2829
  ) {
2794
2830
  if (data && data.__ob__) {
2795
2831
  "development" !== 'production' && warn(
@@ -2797,11 +2833,11 @@ function _createElement (
2797
2833
  'Always create fresh vnode data objects in each render!',
2798
2834
  context
2799
2835
  );
2800
- return
2836
+ return createEmptyVNode()
2801
2837
  }
2802
2838
  if (!tag) {
2803
2839
  // in case of component :is set to falsy value
2804
- return emptyVNode()
2840
+ return createEmptyVNode()
2805
2841
  }
2806
2842
  // support single function children as default scoped slot
2807
2843
  if (Array.isArray(children) &&
@@ -2810,31 +2846,53 @@ function _createElement (
2810
2846
  data.scopedSlots = { default: children[0] };
2811
2847
  children.length = 0;
2812
2848
  }
2849
+ if (needNormalization) {
2850
+ children = normalizeChildren(children);
2851
+ }
2852
+ var vnode, ns;
2813
2853
  if (typeof tag === 'string') {
2814
2854
  var Ctor;
2815
- var ns = config.getTagNamespace(tag);
2855
+ ns = config.getTagNamespace(tag);
2816
2856
  if (config.isReservedTag(tag)) {
2817
2857
  // platform built-in elements
2818
- return new VNode(
2819
- tag, data, normalizeChildren(children, ns),
2820
- undefined, undefined, ns, context
2821
- )
2858
+ vnode = new VNode(
2859
+ config.parsePlatformTagName(tag), data, children,
2860
+ undefined, undefined, context
2861
+ );
2822
2862
  } else if ((Ctor = resolveAsset(context.$options, 'components', tag))) {
2823
2863
  // component
2824
- return createComponent(Ctor, data, context, children, tag)
2864
+ vnode = createComponent(Ctor, data, context, children, tag);
2825
2865
  } else {
2826
2866
  // unknown or unlisted namespaced elements
2827
2867
  // check at runtime because it may get assigned a namespace when its
2828
2868
  // parent normalizes children
2829
- var childNs = tag === 'foreignObject' ? 'xhtml' : ns;
2830
- return new VNode(
2831
- tag, data, normalizeChildren(children, childNs),
2832
- undefined, undefined, ns, context
2833
- )
2869
+ ns = tag === 'foreignObject' ? 'xhtml' : ns;
2870
+ vnode = new VNode(
2871
+ tag, data, children,
2872
+ undefined, undefined, context
2873
+ );
2834
2874
  }
2835
2875
  } else {
2836
2876
  // direct component options / constructor
2837
- return createComponent(tag, data, context, children)
2877
+ vnode = createComponent(tag, data, context, children);
2878
+ }
2879
+ if (vnode) {
2880
+ if (ns) { applyNS(vnode, ns); }
2881
+ return vnode
2882
+ } else {
2883
+ return createEmptyVNode()
2884
+ }
2885
+ }
2886
+
2887
+ function applyNS (vnode, ns) {
2888
+ vnode.ns = ns;
2889
+ if (vnode.children) {
2890
+ for (var i = 0, l = vnode.children.length; i < l; i++) {
2891
+ var child = vnode.children[i];
2892
+ if (child.tag && !child.ns) {
2893
+ applyNS(child, ns);
2894
+ }
2895
+ }
2838
2896
  }
2839
2897
  }
2840
2898
 
@@ -2844,12 +2902,18 @@ function initRender (vm) {
2844
2902
  vm.$vnode = null; // the placeholder node in parent tree
2845
2903
  vm._vnode = null; // the root of the child tree
2846
2904
  vm._staticTrees = null;
2847
- vm._renderContext = vm.$options._parentVnode && vm.$options._parentVnode.context;
2848
- vm.$slots = resolveSlots(vm.$options._renderChildren, vm._renderContext);
2905
+ var parentVnode = vm.$options._parentVnode;
2906
+ var renderContext = parentVnode && parentVnode.context;
2907
+ vm.$slots = resolveSlots(vm.$options._renderChildren, renderContext);
2849
2908
  vm.$scopedSlots = {};
2850
- // bind the public createElement fn to this instance
2909
+ // bind the createElement fn to this instance
2851
2910
  // so that we get proper render context inside it.
2852
- vm.$createElement = bind$1(createElement, vm);
2911
+ // args order: tag, data, children, needNormalization, alwaysNormalize
2912
+ // internal version is used by render functions compiled from templates
2913
+ vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
2914
+ // normalization is always applied for the public version, used in
2915
+ // user-written render functions.
2916
+ vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
2853
2917
  if (vm.$options.el) {
2854
2918
  vm.$mount(vm.$options.el);
2855
2919
  }
@@ -2889,18 +2953,14 @@ function renderMixin (Vue) {
2889
2953
  try {
2890
2954
  vnode = render.call(vm._renderProxy, vm.$createElement);
2891
2955
  } catch (e) {
2892
- {
2893
- warn(("Error when rendering " + (formatComponentName(vm)) + ":"));
2894
- }
2895
2956
  /* istanbul ignore else */
2896
2957
  if (config.errorHandler) {
2897
2958
  config.errorHandler.call(null, e, vm);
2898
2959
  } else {
2899
- if (isServerRendering()) {
2900
- throw e
2901
- } else {
2902
- console.error(e);
2960
+ {
2961
+ warn(("Error when rendering " + (formatComponentName(vm)) + ":"));
2903
2962
  }
2963
+ throw e
2904
2964
  }
2905
2965
  // return previous vnode to prevent render error causing blank component
2906
2966
  vnode = vm._vnode;
@@ -2914,21 +2974,21 @@ function renderMixin (Vue) {
2914
2974
  vm
2915
2975
  );
2916
2976
  }
2917
- vnode = emptyVNode();
2977
+ vnode = createEmptyVNode();
2918
2978
  }
2919
2979
  // set parent
2920
2980
  vnode.parent = _parentVnode;
2921
2981
  return vnode
2922
2982
  };
2923
2983
 
2924
- // shorthands used in render functions
2925
- Vue.prototype._h = createElement;
2926
2984
  // toString for mustaches
2927
2985
  Vue.prototype._s = _toString;
2986
+ // convert text to vnode
2987
+ Vue.prototype._v = createTextVNode;
2928
2988
  // number conversion
2929
2989
  Vue.prototype._n = toNumber;
2930
2990
  // empty vnode
2931
- Vue.prototype._e = emptyVNode;
2991
+ Vue.prototype._e = createEmptyVNode;
2932
2992
  // loose equal
2933
2993
  Vue.prototype._q = looseEqual;
2934
2994
  // loose indexOf
@@ -2982,7 +3042,6 @@ function renderMixin (Vue) {
2982
3042
  }
2983
3043
 
2984
3044
  // filter resolution helper
2985
- var identity = function (_) { return _; };
2986
3045
  Vue.prototype._f = function resolveFilter (id) {
2987
3046
  return resolveAsset(this.$options, 'filters', id, true) || identity
2988
3047
  };
@@ -3070,21 +3129,29 @@ function renderMixin (Vue) {
3070
3129
  return data
3071
3130
  };
3072
3131
 
3073
- // expose v-on keyCodes
3074
- Vue.prototype._k = function getKeyCodes (key) {
3075
- return config.keyCodes[key]
3132
+ // check v-on keyCodes
3133
+ Vue.prototype._k = function checkKeyCodes (
3134
+ eventKeyCode,
3135
+ key,
3136
+ builtInAlias
3137
+ ) {
3138
+ var keyCodes = config.keyCodes[key] || builtInAlias;
3139
+ if (Array.isArray(keyCodes)) {
3140
+ return keyCodes.indexOf(eventKeyCode) === -1
3141
+ } else {
3142
+ return keyCodes !== eventKeyCode
3143
+ }
3076
3144
  };
3077
3145
  }
3078
3146
 
3079
3147
  function resolveSlots (
3080
- renderChildren,
3148
+ children,
3081
3149
  context
3082
3150
  ) {
3083
3151
  var slots = {};
3084
- if (!renderChildren) {
3152
+ if (!children) {
3085
3153
  return slots
3086
3154
  }
3087
- var children = normalizeChildren(renderChildren) || [];
3088
3155
  var defaultSlot = [];
3089
3156
  var name, child;
3090
3157
  for (var i = 0, l = children.length; i < l; i++) {
@@ -3119,10 +3186,12 @@ function initEvents (vm) {
3119
3186
  vm._events = Object.create(null);
3120
3187
  // init parent attached events
3121
3188
  var listeners = vm.$options._parentListeners;
3122
- var on = bind$1(vm.$on, vm);
3123
- var off = bind$1(vm.$off, vm);
3189
+ var add = function (event, fn, once) {
3190
+ once ? vm.$once(event, fn) : vm.$on(event, fn);
3191
+ };
3192
+ var remove$$1 = bind$1(vm.$off, vm);
3124
3193
  vm._updateListeners = function (listeners, oldListeners) {
3125
- updateListeners(listeners, oldListeners || {}, on, off, vm);
3194
+ updateListeners(listeners, oldListeners || {}, add, remove$$1, vm);
3126
3195
  };
3127
3196
  if (listeners) {
3128
3197
  vm._updateListeners(listeners);
@@ -3237,6 +3306,8 @@ function initInternalComponent (vm, options) {
3237
3306
  opts._parentListeners = options._parentListeners;
3238
3307
  opts._renderChildren = options._renderChildren;
3239
3308
  opts._componentTag = options._componentTag;
3309
+ opts._parentElm = options._parentElm;
3310
+ opts._refElm = options._refElm;
3240
3311
  if (options.render) {
3241
3312
  opts.render = options.render;
3242
3313
  opts.staticRenderFns = options.staticRenderFns;
@@ -3334,7 +3405,8 @@ function initExtend (Vue) {
3334
3405
  if (!/^[a-zA-Z][\w-]*$/.test(name)) {
3335
3406
  warn(
3336
3407
  'Invalid component name: "' + name + '". Component names ' +
3337
- 'can only contain alphanumeric characaters and the hyphen.'
3408
+ 'can only contain alphanumeric characters and the hyphen, ' +
3409
+ 'and must start with a letter.'
3338
3410
  );
3339
3411
  }
3340
3412
  }
@@ -3488,7 +3560,7 @@ function initGlobalAPI (Vue) {
3488
3560
  }
3489
3561
  Object.defineProperty(Vue, 'config', configDef);
3490
3562
  Vue.util = util;
3491
- Vue.set = set;
3563
+ Vue.set = set$1;
3492
3564
  Vue.delete = del;
3493
3565
  Vue.nextTick = nextTick;
3494
3566
 
@@ -3515,14 +3587,15 @@ Object.defineProperty(Vue$3.prototype, '$isServer', {
3515
3587
  get: isServerRendering
3516
3588
  });
3517
3589
 
3518
- Vue$3.version = '2.1.3';
3590
+ Vue$3.version = '2.1.6';
3519
3591
 
3520
3592
  /* */
3521
3593
 
3522
3594
  // attributes that should be using props for binding
3595
+ var acceptValue = makeMap('input,textarea,option,select');
3523
3596
  var mustUseProp = function (tag, attr) {
3524
3597
  return (
3525
- (attr === 'value' && (tag === 'input' || tag === 'textarea' || tag === 'option')) ||
3598
+ (attr === 'value' && acceptValue(tag)) ||
3526
3599
  (attr === 'selected' && tag === 'option') ||
3527
3600
  (attr === 'checked' && tag === 'input') ||
3528
3601
  (attr === 'muted' && tag === 'video')
@@ -3540,24 +3613,6 @@ var isBooleanAttr = makeMap(
3540
3613
  'truespeed,typemustmatch,visible'
3541
3614
  );
3542
3615
 
3543
- var isAttr = makeMap(
3544
- 'accept,accept-charset,accesskey,action,align,alt,async,autocomplete,' +
3545
- 'autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,' +
3546
- 'checked,cite,class,code,codebase,color,cols,colspan,content,http-equiv,' +
3547
- 'name,contenteditable,contextmenu,controls,coords,data,datetime,default,' +
3548
- 'defer,dir,dirname,disabled,download,draggable,dropzone,enctype,method,for,' +
3549
- 'form,formaction,headers,<th>,height,hidden,high,href,hreflang,http-equiv,' +
3550
- 'icon,id,ismap,itemprop,keytype,kind,label,lang,language,list,loop,low,' +
3551
- 'manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,' +
3552
- 'muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,' +
3553
- 'preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,' +
3554
- 'scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,' +
3555
- 'spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,' +
3556
- 'target,title,type,usemap,value,width,wrap'
3557
- );
3558
-
3559
-
3560
-
3561
3616
  var xlinkNS = 'http://www.w3.org/1999/xlink';
3562
3617
 
3563
3618
  var isXlink = function (name) {
@@ -3666,34 +3721,10 @@ var isHTMLTag = makeMap(
3666
3721
  'content,element,shadow,template'
3667
3722
  );
3668
3723
 
3669
- var isUnaryTag = makeMap(
3670
- 'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
3671
- 'link,meta,param,source,track,wbr',
3672
- true
3673
- );
3674
-
3675
- // Elements that you can, intentionally, leave open
3676
- // (and which close themselves)
3677
- var canBeLeftOpenTag = makeMap(
3678
- 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source',
3679
- true
3680
- );
3681
-
3682
- // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
3683
- // Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
3684
- var isNonPhrasingTag = makeMap(
3685
- 'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
3686
- 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
3687
- 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
3688
- 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
3689
- 'title,tr,track',
3690
- true
3691
- );
3692
-
3693
3724
  // this map is intentionally selective, only covering SVG elements that may
3694
3725
  // contain child elements.
3695
3726
  var isSVG = makeMap(
3696
- 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font,' +
3727
+ 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,' +
3697
3728
  'font-face,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
3698
3729
  'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',
3699
3730
  true
@@ -3814,10 +3845,6 @@ function setTextContent (node, text) {
3814
3845
  node.textContent = text;
3815
3846
  }
3816
3847
 
3817
- function childNodes (node) {
3818
- return node.childNodes
3819
- }
3820
-
3821
3848
  function setAttribute (node, key, val) {
3822
3849
  node.setAttribute(key, val);
3823
3850
  }
@@ -3835,7 +3862,6 @@ var nodeOps = Object.freeze({
3835
3862
  nextSibling: nextSibling,
3836
3863
  tagName: tagName,
3837
3864
  setTextContent: setTextContent,
3838
- childNodes: childNodes,
3839
3865
  setAttribute: setAttribute
3840
3866
  });
3841
3867
 
@@ -3898,7 +3924,7 @@ function registerRef (vnode, isRemoval) {
3898
3924
 
3899
3925
  var emptyNode = new VNode('', {}, []);
3900
3926
 
3901
- var hooks$1 = ['create', 'update', 'remove', 'destroy'];
3927
+ var hooks$1 = ['create', 'activate', 'update', 'remove', 'destroy'];
3902
3928
 
3903
3929
  function isUndef (s) {
3904
3930
  return s == null
@@ -3963,26 +3989,23 @@ function createPatchFunction (backend) {
3963
3989
  }
3964
3990
  }
3965
3991
 
3966
- function createElm (vnode, insertedVnodeQueue, nested) {
3967
- var i;
3968
- var data = vnode.data;
3969
- vnode.isRootInsert = !nested;
3970
- if (isDef(data)) {
3971
- if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode); }
3972
- // after calling the init hook, if the vnode is a child component
3973
- // it should've created a child instance and mounted it. the child
3974
- // component also has set the placeholder vnode's elm.
3975
- // in that case we can just return the element and be done.
3976
- if (isDef(i = vnode.child)) {
3977
- initComponent(vnode, insertedVnodeQueue);
3978
- return vnode.elm
3979
- }
3992
+ var inPre = 0;
3993
+ function createElm (vnode, insertedVnodeQueue, parentElm, refElm, nested) {
3994
+ vnode.isRootInsert = !nested; // for transition enter check
3995
+ if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
3996
+ return
3980
3997
  }
3998
+
3999
+ var data = vnode.data;
3981
4000
  var children = vnode.children;
3982
4001
  var tag = vnode.tag;
3983
4002
  if (isDef(tag)) {
3984
4003
  {
4004
+ if (data && data.pre) {
4005
+ inPre++;
4006
+ }
3985
4007
  if (
4008
+ !inPre &&
3986
4009
  !vnode.ns &&
3987
4010
  !(config.ignoredElements && config.ignoredElements.indexOf(tag) > -1) &&
3988
4011
  config.isUnknownElement(tag)
@@ -3999,22 +4022,85 @@ function createPatchFunction (backend) {
3999
4022
  ? nodeOps.createElementNS(vnode.ns, tag)
4000
4023
  : nodeOps.createElement(tag, vnode);
4001
4024
  setScope(vnode);
4002
- createChildren(vnode, children, insertedVnodeQueue);
4003
- if (isDef(data)) {
4004
- invokeCreateHooks(vnode, insertedVnodeQueue);
4025
+
4026
+ /* istanbul ignore if */
4027
+ {
4028
+ createChildren(vnode, children, insertedVnodeQueue);
4029
+ if (isDef(data)) {
4030
+ invokeCreateHooks(vnode, insertedVnodeQueue);
4031
+ }
4032
+ insert(parentElm, vnode.elm, refElm);
4033
+ }
4034
+
4035
+ if ("development" !== 'production' && data && data.pre) {
4036
+ inPre--;
4005
4037
  }
4006
4038
  } else if (vnode.isComment) {
4007
4039
  vnode.elm = nodeOps.createComment(vnode.text);
4040
+ insert(parentElm, vnode.elm, refElm);
4008
4041
  } else {
4009
4042
  vnode.elm = nodeOps.createTextNode(vnode.text);
4043
+ insert(parentElm, vnode.elm, refElm);
4044
+ }
4045
+ }
4046
+
4047
+ function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
4048
+ var i = vnode.data;
4049
+ if (isDef(i)) {
4050
+ var isReactivated = isDef(vnode.child) && i.keepAlive;
4051
+ if (isDef(i = i.hook) && isDef(i = i.init)) {
4052
+ i(vnode, false /* hydrating */, parentElm, refElm);
4053
+ }
4054
+ // after calling the init hook, if the vnode is a child component
4055
+ // it should've created a child instance and mounted it. the child
4056
+ // component also has set the placeholder vnode's elm.
4057
+ // in that case we can just return the element and be done.
4058
+ if (isDef(vnode.child)) {
4059
+ initComponent(vnode, insertedVnodeQueue);
4060
+ if (isReactivated) {
4061
+ reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
4062
+ }
4063
+ return true
4064
+ }
4065
+ }
4066
+ }
4067
+
4068
+ function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
4069
+ var i;
4070
+ // hack for #4339: a reactivated component with inner transition
4071
+ // does not trigger because the inner node's created hooks are not called
4072
+ // again. It's not ideal to involve module-specific logic in here but
4073
+ // there doesn't seem to be a better way to do it.
4074
+ var innerNode = vnode;
4075
+ while (innerNode.child) {
4076
+ innerNode = innerNode.child._vnode;
4077
+ if (isDef(i = innerNode.data) && isDef(i = i.transition)) {
4078
+ for (i = 0; i < cbs.activate.length; ++i) {
4079
+ cbs.activate[i](emptyNode, innerNode);
4080
+ }
4081
+ insertedVnodeQueue.push(innerNode);
4082
+ break
4083
+ }
4084
+ }
4085
+ // unlike a newly created component,
4086
+ // a reactivated keep-alive component doesn't insert itself
4087
+ insert(parentElm, vnode.elm, refElm);
4088
+ }
4089
+
4090
+ function insert (parent, elm, ref) {
4091
+ if (parent) {
4092
+ if (ref) {
4093
+ nodeOps.insertBefore(parent, elm, ref);
4094
+ } else {
4095
+ nodeOps.appendChild(parent, elm);
4096
+ }
4010
4097
  }
4011
- return vnode.elm
4012
4098
  }
4013
4099
 
4014
4100
  function createChildren (vnode, children, insertedVnodeQueue) {
4015
4101
  if (Array.isArray(children)) {
4016
4102
  for (var i = 0; i < children.length; ++i) {
4017
- nodeOps.appendChild(vnode.elm, createElm(children[i], insertedVnodeQueue, true));
4103
+ createElm(children[i], insertedVnodeQueue, vnode.elm, null, true);
4018
4104
  }
4019
4105
  } else if (isPrimitive(vnode.text)) {
4020
4106
  nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(vnode.text));
@@ -4071,9 +4157,9 @@ function createPatchFunction (backend) {
4071
4157
  }
4072
4158
  }
4073
4159
 
4074
- function addVnodes (parentElm, before, vnodes, startIdx, endIdx, insertedVnodeQueue) {
4160
+ function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
4075
4161
  for (; startIdx <= endIdx; ++startIdx) {
4076
- nodeOps.insertBefore(parentElm, createElm(vnodes[startIdx], insertedVnodeQueue), before);
4162
+ createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm);
4077
4163
  }
4078
4164
  }
4079
4165
 
@@ -4142,7 +4228,7 @@ function createPatchFunction (backend) {
4142
4228
  var newEndIdx = newCh.length - 1;
4143
4229
  var newStartVnode = newCh[0];
4144
4230
  var newEndVnode = newCh[newEndIdx];
4145
- var oldKeyToIdx, idxInOld, elmToMove, before;
4231
+ var oldKeyToIdx, idxInOld, elmToMove, refElm;
4146
4232
 
4147
4233
  // removeOnly is a special flag used only by <transition-group>
4148
4234
  // to ensure removed elements stay in correct relative positions
@@ -4176,7 +4262,7 @@ function createPatchFunction (backend) {
4176
4262
  if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }
4177
4263
  idxInOld = isDef(newStartVnode.key) ? oldKeyToIdx[newStartVnode.key] : null;
4178
4264
  if (isUndef(idxInOld)) { // New element
4179
- nodeOps.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm);
4265
+ createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);
4180
4266
  newStartVnode = newCh[++newStartIdx];
4181
4267
  } else {
4182
4268
  elmToMove = oldCh[idxInOld];
@@ -4187,22 +4273,22 @@ function createPatchFunction (backend) {
4187
4273
  'Make sure each v-for item has a unique key.'
4188
4274
  );
4189
4275
  }
4190
- if (elmToMove.tag !== newStartVnode.tag) {
4191
- // same key but different element. treat as new element
4192
- nodeOps.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm);
4193
- newStartVnode = newCh[++newStartIdx];
4194
- } else {
4276
+ if (sameVnode(elmToMove, newStartVnode)) {
4195
4277
  patchVnode(elmToMove, newStartVnode, insertedVnodeQueue);
4196
4278
  oldCh[idxInOld] = undefined;
4197
4279
  canMove && nodeOps.insertBefore(parentElm, newStartVnode.elm, oldStartVnode.elm);
4198
4280
  newStartVnode = newCh[++newStartIdx];
4281
+ } else {
4282
+ // same key but different element. treat as new element
4283
+ createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);
4284
+ newStartVnode = newCh[++newStartIdx];
4199
4285
  }
4200
4286
  }
4201
4287
  }
4202
4288
  }
4203
4289
  if (oldStartIdx > oldEndIdx) {
4204
- before = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
4205
- addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
4290
+ refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
4291
+ addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
4206
4292
  } else if (newStartIdx > newEndIdx) {
4207
4293
  removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);
4208
4294
  }
@@ -4269,6 +4355,11 @@ function createPatchFunction (backend) {
4269
4355
  }
4270
4356
 
4271
4357
  var bailed = false;
4358
+ // list of modules that can skip create hook during hydration because they
4359
+ // are already rendered on the client or has no need for initialization
4360
+ var isRenderedModule = makeMap('attrs,style,class,staticClass,staticStyle,key');
4361
+
4362
+ // Note: this is a browser-only function so we can assume elms are DOM nodes.
4272
4363
  function hydrate (elm, vnode, insertedVnodeQueue) {
4273
4364
  {
4274
4365
  if (!assertNodeMatch(elm, vnode)) {
@@ -4289,36 +4380,40 @@ function createPatchFunction (backend) {
4289
4380
  }
4290
4381
  if (isDef(tag)) {
4291
4382
  if (isDef(children)) {
4292
- var childNodes = nodeOps.childNodes(elm);
4293
4383
  // empty element, allow client to pick up and populate children
4294
- if (!childNodes.length) {
4384
+ if (!elm.hasChildNodes()) {
4295
4385
  createChildren(vnode, children, insertedVnodeQueue);
4296
4386
  } else {
4297
4387
  var childrenMatch = true;
4298
- if (childNodes.length !== children.length) {
4299
- childrenMatch = false;
4300
- } else {
4301
- for (var i$1 = 0; i$1 < children.length; i$1++) {
4302
- if (!hydrate(childNodes[i$1], children[i$1], insertedVnodeQueue)) {
4303
- childrenMatch = false;
4304
- break
4305
- }
4388
+ var childNode = elm.firstChild;
4389
+ for (var i$1 = 0; i$1 < children.length; i$1++) {
4390
+ if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue)) {
4391
+ childrenMatch = false;
4392
+ break
4306
4393
  }
4394
+ childNode = childNode.nextSibling;
4307
4395
  }
4308
- if (!childrenMatch) {
4396
+ // if childNode is not null, it means the actual childNodes list is
4397
+ // longer than the virtual children list.
4398
+ if (!childrenMatch || childNode) {
4309
4399
  if ("development" !== 'production' &&
4310
4400
  typeof console !== 'undefined' &&
4311
4401
  !bailed) {
4312
4402
  bailed = true;
4313
4403
  console.warn('Parent: ', elm);
4314
- console.warn('Mismatching childNodes vs. VNodes: ', childNodes, children);
4404
+ console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
4315
4405
  }
4316
4406
  return false
4317
4407
  }
4318
4408
  }
4319
4409
  }
4320
4410
  if (isDef(data)) {
4321
- invokeCreateHooks(vnode, insertedVnodeQueue);
4411
+ for (var key in data) {
4412
+ if (!isRenderedModule(key)) {
4413
+ invokeCreateHooks(vnode, insertedVnodeQueue);
4414
+ break
4415
+ }
4416
+ }
4322
4417
  }
4323
4418
  }
4324
4419
  return true
@@ -4328,14 +4423,14 @@ function createPatchFunction (backend) {
4328
4423
  if (vnode.tag) {
4329
4424
  return (
4330
4425
  vnode.tag.indexOf('vue-component') === 0 ||
4331
- vnode.tag.toLowerCase() === nodeOps.tagName(node).toLowerCase()
4426
+ vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())
4332
4427
  )
4333
4428
  } else {
4334
4429
  return _toString(vnode.text) === node.data
4335
4430
  }
4336
4431
  }
4337
4432
 
4338
- return function patch (oldVnode, vnode, hydrating, removeOnly) {
4433
+ return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {
4339
4434
  if (!vnode) {
4340
4435
  if (oldVnode) { invokeDestroyHook(oldVnode); }
4341
4436
  return
@@ -4346,12 +4441,13 @@ function createPatchFunction (backend) {
4346
4441
  var insertedVnodeQueue = [];
4347
4442
 
4348
4443
  if (!oldVnode) {
4349
- // empty mount, create new root element
4444
+ // empty mount (likely as component), create new root element
4350
4445
  isInitialPatch = true;
4351
- createElm(vnode, insertedVnodeQueue);
4446
+ createElm(vnode, insertedVnodeQueue, parentElm, refElm);
4352
4447
  } else {
4353
4448
  var isRealElement = isDef(oldVnode.nodeType);
4354
4449
  if (!isRealElement && sameVnode(oldVnode, vnode)) {
4450
+ // patch existing root node
4355
4451
  patchVnode(oldVnode, vnode, insertedVnodeQueue, removeOnly);
4356
4452
  } else {
4357
4453
  if (isRealElement) {
@@ -4380,14 +4476,15 @@ function createPatchFunction (backend) {
4380
4476
  // create an empty node and replace it
4381
4477
  oldVnode = emptyNodeAt(oldVnode);
4382
4478
  }
4479
+
4480
+ // replacing existing element
4383
4481
  elm = oldVnode.elm;
4384
4482
  parent = nodeOps.parentNode(elm);
4483
+ createElm(vnode, insertedVnodeQueue, parent, nodeOps.nextSibling(elm));
4385
4484
 
4386
- createElm(vnode, insertedVnodeQueue);
4387
-
4388
- // component root element replaced.
4389
- // update parent placeholder node element, recursively
4390
4485
  if (vnode.parent) {
4486
+ // component root element replaced.
4487
+ // update parent placeholder node element, recursively
4391
4488
  var ancestor = vnode.parent;
4392
4489
  while (ancestor) {
4393
4490
  ancestor.elm = vnode.elm;
@@ -4401,7 +4498,6 @@ function createPatchFunction (backend) {
4401
4498
  }
4402
4499
 
4403
4500
  if (parent !== null) {
4404
- nodeOps.insertBefore(parent, vnode.elm, nodeOps.nextSibling(elm));
4405
4501
  removeVnodes(parent, [oldVnode], 0, 0);
4406
4502
  } else if (isDef(oldVnode.tag)) {
4407
4503
  invokeDestroyHook(oldVnode);
@@ -4424,13 +4520,13 @@ var directives = {
4424
4520
  }
4425
4521
  };
4426
4522
 
4427
- function updateDirectives (
4428
- oldVnode,
4429
- vnode
4430
- ) {
4431
- if (!oldVnode.data.directives && !vnode.data.directives) {
4432
- return
4523
+ function updateDirectives (oldVnode, vnode) {
4524
+ if (oldVnode.data.directives || vnode.data.directives) {
4525
+ _update(oldVnode, vnode);
4433
4526
  }
4527
+ }
4528
+
4529
+ function _update (oldVnode, vnode) {
4434
4530
  var isCreate = oldVnode === emptyNode;
4435
4531
  var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);
4436
4532
  var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);
@@ -4460,9 +4556,9 @@ function updateDirectives (
4460
4556
 
4461
4557
  if (dirsWithInsert.length) {
4462
4558
  var callInsert = function () {
4463
- dirsWithInsert.forEach(function (dir) {
4464
- callHook$1(dir, 'inserted', vnode, oldVnode);
4465
- });
4559
+ for (var i = 0; i < dirsWithInsert.length; i++) {
4560
+ callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);
4561
+ }
4466
4562
  };
4467
4563
  if (isCreate) {
4468
4564
  mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'insert', callInsert, 'dir-insert');
@@ -4473,9 +4569,9 @@ function updateDirectives (
4473
4569
 
4474
4570
  if (dirsWithPostpatch.length) {
4475
4571
  mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'postpatch', function () {
4476
- dirsWithPostpatch.forEach(function (dir) {
4477
- callHook$1(dir, 'componentUpdated', vnode, oldVnode);
4478
- });
4572
+ for (var i = 0; i < dirsWithPostpatch.length; i++) {
4573
+ callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
4574
+ }
4479
4575
  }, 'dir-postpatch');
4480
4576
  }
4481
4577
 
@@ -4549,6 +4645,11 @@ function updateAttrs (oldVnode, vnode) {
4549
4645
  setAttr(elm, key, cur);
4550
4646
  }
4551
4647
  }
4648
+ // #4391: in IE9, setting type can reset value for input[type=radio]
4649
+ /* istanbul ignore if */
4650
+ if (isIE9 && attrs.value !== oldAttrs.value) {
4651
+ setAttr(elm, 'value', attrs.value);
4652
+ }
4552
4653
  for (key in oldAttrs) {
4553
4654
  if (attrs[key] == null) {
4554
4655
  if (isXlink(key)) {
@@ -4622,8 +4723,26 @@ var klass = {
4622
4723
  update: updateClass
4623
4724
  };
4624
4725
 
4625
- // skip type checking this file because we need to attach private properties
4626
- // to elements
4726
+ /* */
4727
+
4728
+ var target;
4729
+
4730
+ function add$1 (event, handler, once, capture) {
4731
+ if (once) {
4732
+ var oldHandler = handler;
4733
+ handler = function (ev) {
4734
+ remove$2(event, handler, capture);
4735
+ arguments.length === 1
4736
+ ? oldHandler(ev)
4737
+ : oldHandler.apply(null, arguments);
4738
+ };
4739
+ }
4740
+ target.addEventListener(event, handler, capture);
4741
+ }
4742
+
4743
+ function remove$2 (event, handler, capture) {
4744
+ target.removeEventListener(event, handler, capture);
4745
+ }
4627
4746
 
4628
4747
  function updateDOMListeners (oldVnode, vnode) {
4629
4748
  if (!oldVnode.data.on && !vnode.data.on) {
@@ -4631,13 +4750,8 @@ function updateDOMListeners (oldVnode, vnode) {
4631
4750
  }
4632
4751
  var on = vnode.data.on || {};
4633
4752
  var oldOn = oldVnode.data.on || {};
4634
- var add = vnode.elm._v_add || (vnode.elm._v_add = function (event, handler, capture) {
4635
- vnode.elm.addEventListener(event, handler, capture);
4636
- });
4637
- var remove = vnode.elm._v_remove || (vnode.elm._v_remove = function (event, handler) {
4638
- vnode.elm.removeEventListener(event, handler);
4639
- });
4640
- updateListeners(on, oldOn, add, remove, vnode.context);
4753
+ target = vnode.elm;
4754
+ updateListeners(on, oldOn, add$1, remove$2, vnode.context);
4641
4755
  }
4642
4756
 
4643
4757
  var events = {
@@ -4680,7 +4794,10 @@ function updateDOMProps (oldVnode, vnode) {
4680
4794
  elm._value = cur;
4681
4795
  // avoid resetting cursor position when value is the same
4682
4796
  var strCur = cur == null ? '' : String(cur);
4683
- if (elm.value !== strCur && !elm.composing) {
4797
+ if (!elm.composing && (
4798
+ (document.activeElement !== elm && elm.value !== strCur) ||
4799
+ isValueChanged(vnode, strCur)
4800
+ )) {
4684
4801
  elm.value = strCur;
4685
4802
  }
4686
4803
  } else {
@@ -4689,6 +4806,18 @@ function updateDOMProps (oldVnode, vnode) {
4689
4806
  }
4690
4807
  }
4691
4808
 
4809
+ function isValueChanged (vnode, newVal) {
4810
+ var value = vnode.elm.value;
4811
+ var modifiers = vnode.elm._vModifiers; // injected by v-model runtime
4812
+ if ((modifiers && modifiers.number) || vnode.elm.type === 'number') {
4813
+ return toNumber(value) !== toNumber(newVal)
4814
+ }
4815
+ if (modifiers && modifiers.trim) {
4816
+ return value.trim() !== newVal.trim()
4817
+ }
4818
+ return value !== newVal
4819
+ }
4820
+
4692
4821
  var domProps = {
4693
4822
  create: updateDOMProps,
4694
4823
  update: updateDOMProps
@@ -4698,10 +4827,8 @@ var domProps = {
4698
4827
 
4699
4828
  var parseStyleText = cached(function (cssText) {
4700
4829
  var res = {};
4701
- var hasBackground = cssText.indexOf('background') >= 0;
4702
- // maybe with background-image: url(http://xxx) or base64 img
4703
- var listDelimiter = hasBackground ? /;(?![^(]*\))/g : ';';
4704
- var propertyDelimiter = hasBackground ? /:(.+)/ : ':';
4830
+ var listDelimiter = /;(?![^(]*\))/g;
4831
+ var propertyDelimiter = /:(.+)/;
4705
4832
  cssText.split(listDelimiter).forEach(function (item) {
4706
4833
  if (item) {
4707
4834
  var tmp = item.split(propertyDelimiter);
@@ -4766,10 +4893,13 @@ function getStyle (vnode, checkChild) {
4766
4893
  /* */
4767
4894
 
4768
4895
  var cssVarRE = /^--/;
4896
+ var importantRE = /\s*!important$/;
4769
4897
  var setProp = function (el, name, val) {
4770
4898
  /* istanbul ignore if */
4771
4899
  if (cssVarRE.test(name)) {
4772
4900
  el.style.setProperty(name, val);
4901
+ } else if (importantRE.test(val)) {
4902
+ el.style.setProperty(name, val.replace(importantRE, ''), 'important');
4773
4903
  } else {
4774
4904
  el.style[normalize(name)] = val;
4775
4905
  }
@@ -5032,7 +5162,7 @@ function toMs (s) {
5032
5162
 
5033
5163
  /* */
5034
5164
 
5035
- function enter (vnode) {
5165
+ function enter (vnode, toggleDisplay) {
5036
5166
  var el = vnode.elm;
5037
5167
 
5038
5168
  // call leave callback now
@@ -5070,10 +5200,12 @@ function enter (vnode) {
5070
5200
  // transition. One edge case to check is when the <transition> is placed
5071
5201
  // as the root node of a child component. In that case we need to check
5072
5202
  // <transition>'s parent for appear check.
5203
+ var context = activeInstance;
5073
5204
  var transitionNode = activeInstance.$vnode;
5074
- var context = transitionNode && transitionNode.parent
5075
- ? transitionNode.parent.context
5076
- : activeInstance;
5205
+ while (transitionNode && transitionNode.parent) {
5206
+ transitionNode = transitionNode.parent;
5207
+ context = transitionNode.context;
5208
+ }
5077
5209
 
5078
5210
  var isAppear = !context._isMounted || !vnode.isRootInsert;
5079
5211
 
@@ -5115,7 +5247,10 @@ function enter (vnode) {
5115
5247
  mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'insert', function () {
5116
5248
  var parent = el.parentNode;
5117
5249
  var pendingNode = parent && parent._pending && parent._pending[vnode.key];
5118
- if (pendingNode && pendingNode.tag === vnode.tag && pendingNode.elm._leaveCb) {
5250
+ if (pendingNode &&
5251
+ pendingNode.context === vnode.context &&
5252
+ pendingNode.tag === vnode.tag &&
5253
+ pendingNode.elm._leaveCb) {
5119
5254
  pendingNode.elm._leaveCb();
5120
5255
  }
5121
5256
  enterHook && enterHook(el, cb);
@@ -5136,6 +5271,7 @@ function enter (vnode) {
5136
5271
  }
5137
5272
 
5138
5273
  if (vnode.data.show) {
5274
+ toggleDisplay && toggleDisplay();
5139
5275
  enterHook && enterHook(el, cb);
5140
5276
  }
5141
5277
 
@@ -5270,12 +5406,15 @@ function once (fn) {
5270
5406
  }
5271
5407
  }
5272
5408
 
5409
+ function _enter (_, vnode) {
5410
+ if (!vnode.data.show) {
5411
+ enter(vnode);
5412
+ }
5413
+ }
5414
+
5273
5415
  var transition = inBrowser ? {
5274
- create: function create (_, vnode) {
5275
- if (!vnode.data.show) {
5276
- enter(vnode);
5277
- }
5278
- },
5416
+ create: _enter,
5417
+ activate: _enter,
5279
5418
  remove: function remove (vnode, rm) {
5280
5419
  /* istanbul ignore else */
5281
5420
  if (!vnode.data.show) {
@@ -5342,17 +5481,17 @@ var model = {
5342
5481
  if (isIE || isEdge) {
5343
5482
  setTimeout(cb, 0);
5344
5483
  }
5345
- } else if (
5346
- (vnode.tag === 'textarea' || el.type === 'text') &&
5347
- !binding.modifiers.lazy
5348
- ) {
5349
- if (!isAndroid) {
5350
- el.addEventListener('compositionstart', onCompositionStart);
5351
- el.addEventListener('compositionend', onCompositionEnd);
5352
- }
5353
- /* istanbul ignore if */
5354
- if (isIE9) {
5355
- el.vmodel = true;
5484
+ } else if (vnode.tag === 'textarea' || el.type === 'text') {
5485
+ el._vModifiers = binding.modifiers;
5486
+ if (!binding.modifiers.lazy) {
5487
+ if (!isAndroid) {
5488
+ el.addEventListener('compositionstart', onCompositionStart);
5489
+ el.addEventListener('compositionend', onCompositionEnd);
5490
+ }
5491
+ /* istanbul ignore if */
5492
+ if (isIE9) {
5493
+ el.vmodel = true;
5494
+ }
5356
5495
  }
5357
5496
  }
5358
5497
  },
@@ -5451,12 +5590,16 @@ var show = {
5451
5590
 
5452
5591
  vnode = locateNode(vnode);
5453
5592
  var transition = vnode.data && vnode.data.transition;
5593
+ var originalDisplay = el.__vOriginalDisplay =
5594
+ el.style.display === 'none' ? '' : el.style.display;
5454
5595
  if (value && transition && !isIE9) {
5455
- enter(vnode);
5596
+ vnode.data.show = true;
5597
+ enter(vnode, function () {
5598
+ el.style.display = originalDisplay;
5599
+ });
5600
+ } else {
5601
+ el.style.display = value ? originalDisplay : 'none';
5456
5602
  }
5457
- var originalDisplay = el.style.display === 'none' ? '' : el.style.display;
5458
- el.style.display = value ? originalDisplay : 'none';
5459
- el.__vOriginalDisplay = originalDisplay;
5460
5603
  },
5461
5604
  update: function update (el, ref, vnode) {
5462
5605
  var value = ref.value;
@@ -5467,9 +5610,11 @@ var show = {
5467
5610
  vnode = locateNode(vnode);
5468
5611
  var transition = vnode.data && vnode.data.transition;
5469
5612
  if (transition && !isIE9) {
5613
+ vnode.data.show = true;
5470
5614
  if (value) {
5471
- enter(vnode);
5472
- el.style.display = el.__vOriginalDisplay;
5615
+ enter(vnode, function () {
5616
+ el.style.display = el.__vOriginalDisplay;
5617
+ });
5473
5618
  } else {
5474
5619
  leave(vnode, function () {
5475
5620
  el.style.display = 'none';
@@ -5841,7 +5986,7 @@ setTimeout(function () {
5841
5986
  devtools.emit('init', Vue$3);
5842
5987
  } else if (
5843
5988
  "development" !== 'production' &&
5844
- inBrowser && /Chrome\/\d+/.test(window.navigator.userAgent)
5989
+ inBrowser && !isEdge && /Chrome\/\d+/.test(window.navigator.userAgent)
5845
5990
  ) {
5846
5991
  console.log(
5847
5992
  'Download the Vue Devtools for a better development experience:\n' +
@@ -5874,6 +6019,32 @@ function decode (html) {
5874
6019
  return decoder.textContent
5875
6020
  }
5876
6021
 
6022
+ /* */
6023
+
6024
+ var isUnaryTag = makeMap(
6025
+ 'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
6026
+ 'link,meta,param,source,track,wbr',
6027
+ true
6028
+ );
6029
+
6030
+ // Elements that you can, intentionally, leave open
6031
+ // (and which close themselves)
6032
+ var canBeLeftOpenTag = makeMap(
6033
+ 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source',
6034
+ true
6035
+ );
6036
+
6037
+ // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
6038
+ // Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
6039
+ var isNonPhrasingTag = makeMap(
6040
+ 'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
6041
+ 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
6042
+ 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
6043
+ 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
6044
+ 'title,tr,track',
6045
+ true
6046
+ );
6047
+
5877
6048
  /**
5878
6049
  * Not type-checking this file because it's mostly vendor code.
5879
6050
  */
@@ -6228,7 +6399,6 @@ function parseFilters (exp) {
6228
6399
  case 0x22: inDouble = true; break // "
6229
6400
  case 0x27: inSingle = true; break // '
6230
6401
  case 0x60: inTemplateString = true; break // `
6231
- case 0x2f: inRegex = true; break // /
6232
6402
  case 0x28: paren++; break // (
6233
6403
  case 0x29: paren--; break // )
6234
6404
  case 0x5B: square++; break // [
@@ -6236,6 +6406,18 @@ function parseFilters (exp) {
6236
6406
  case 0x7B: curly++; break // {
6237
6407
  case 0x7D: curly--; break // }
6238
6408
  }
6409
+ if (c === 0x2f) { // /
6410
+ var j = i - 1;
6411
+ var p = (void 0);
6412
+ // find first non-whitespace prev char
6413
+ for (; j >= 0; j--) {
6414
+ p = exp.charAt(j);
6415
+ if (p !== ' ') { break }
6416
+ }
6417
+ if (!p || !/[\w$]/.test(p)) {
6418
+ inRegex = true;
6419
+ }
6420
+ }
6239
6421
  }
6240
6422
  }
6241
6423
 
@@ -6356,6 +6538,10 @@ function addHandler (
6356
6538
  delete modifiers.capture;
6357
6539
  name = '!' + name; // mark the event as captured
6358
6540
  }
6541
+ if (modifiers && modifiers.once) {
6542
+ delete modifiers.once;
6543
+ name = '~' + name; // mark the event as once
6544
+ }
6359
6545
  var events;
6360
6546
  if (modifiers && modifiers.native) {
6361
6547
  delete modifiers.native;
@@ -6833,10 +7019,10 @@ function processIfConditions (el, parent) {
6833
7019
  }
6834
7020
 
6835
7021
  function addIfCondition (el, condition) {
6836
- if (!el.conditions) {
6837
- el.conditions = [];
7022
+ if (!el.ifConditions) {
7023
+ el.ifConditions = [];
6838
7024
  }
6839
- el.conditions.push(condition);
7025
+ el.ifConditions.push(condition);
6840
7026
  }
6841
7027
 
6842
7028
  function processOnce (el) {
@@ -6894,6 +7080,7 @@ function processAttrs (el) {
6894
7080
  if (bindRE.test(name)) { // v-bind
6895
7081
  name = name.replace(bindRE, '');
6896
7082
  value = parseFilters(value);
7083
+ isProp = false;
6897
7084
  if (modifiers) {
6898
7085
  if (modifiers.prop) {
6899
7086
  isProp = true;
@@ -7043,7 +7230,7 @@ var genStaticKeysCached = cached(genStaticKeys$1);
7043
7230
  function optimize (root, options) {
7044
7231
  if (!root) { return }
7045
7232
  isStaticKey = genStaticKeysCached(options.staticKeys || '');
7046
- isPlatformReservedTag = options.isReservedTag || (function () { return false; });
7233
+ isPlatformReservedTag = options.isReservedTag || no;
7047
7234
  // first pass: mark all non-static nodes.
7048
7235
  markStatic(root);
7049
7236
  // second pass: mark static roots.
@@ -7102,8 +7289,8 @@ function markStaticRoots (node, isInFor) {
7102
7289
  markStaticRoots(node.children[i], isInFor || !!node.for);
7103
7290
  }
7104
7291
  }
7105
- if (node.conditions) {
7106
- walkThroughConditionsBlocks(node.conditions, isInFor);
7292
+ if (node.ifConditions) {
7293
+ walkThroughConditionsBlocks(node.ifConditions, isInFor);
7107
7294
  }
7108
7295
  }
7109
7296
  }
@@ -7165,11 +7352,7 @@ var keyCodes = {
7165
7352
  var modifierCode = {
7166
7353
  stop: '$event.stopPropagation();',
7167
7354
  prevent: '$event.preventDefault();',
7168
- self: 'if($event.target !== $event.currentTarget)return;'
7169
- };
7170
-
7171
- var isMouseEventRE = /^mouse|^pointer|^(click|dblclick|contextmenu|wheel)$/;
7172
- var mouseEventModifierCode = {
7355
+ self: 'if($event.target !== $event.currentTarget)return;',
7173
7356
  ctrl: 'if(!$event.ctrlKey)return;',
7174
7357
  shift: 'if(!$event.shiftKey)return;',
7175
7358
  alt: 'if(!$event.altKey)return;',
@@ -7199,12 +7382,9 @@ function genHandler (
7199
7382
  } else {
7200
7383
  var code = '';
7201
7384
  var keys = [];
7202
- var isMouseEvnet = isMouseEventRE.test(name);
7203
7385
  for (var key in handler.modifiers) {
7204
7386
  if (modifierCode[key]) {
7205
7387
  code += modifierCode[key];
7206
- } else if (isMouseEvnet && mouseEventModifierCode[key]) {
7207
- code += mouseEventModifierCode[key];
7208
7388
  } else {
7209
7389
  keys.push(key);
7210
7390
  }
@@ -7220,22 +7400,16 @@ function genHandler (
7220
7400
  }
7221
7401
 
7222
7402
  function genKeyFilter (keys) {
7223
- var code = keys.length === 1
7224
- ? normalizeKeyCode(keys[0])
7225
- : Array.prototype.concat.apply([], keys.map(normalizeKeyCode));
7226
- if (Array.isArray(code)) {
7227
- return ("if(" + (code.map(function (c) { return ("$event.keyCode!==" + c); }).join('&&')) + ")return;")
7228
- } else {
7229
- return ("if($event.keyCode!==" + code + ")return;")
7230
- }
7403
+ return ("if(" + (keys.map(genFilterCode).join('&&')) + ")return;")
7231
7404
  }
7232
7405
 
7233
- function normalizeKeyCode (key) {
7234
- return (
7235
- parseInt(key, 10) || // number keyCode
7236
- keyCodes[key] || // built-in alias
7237
- ("_k(" + (JSON.stringify(key)) + ")") // custom alias
7238
- )
7406
+ function genFilterCode (key) {
7407
+ var keyVal = parseInt(key, 10);
7408
+ if (keyVal) {
7409
+ return ("$event.keyCode!==" + keyVal)
7410
+ }
7411
+ var alias = keyCodes[key];
7412
+ return ("_k($event.keyCode," + (JSON.stringify(key)) + (alias ? ',' + JSON.stringify(alias) : '') + ")")
7239
7413
  }
7240
7414
 
7241
7415
  /* */
@@ -7276,7 +7450,7 @@ function generate (
7276
7450
  transforms$1 = pluckModuleFunction(options.modules, 'transformCode');
7277
7451
  dataGenFns = pluckModuleFunction(options.modules, 'genData');
7278
7452
  platformDirectives$1 = options.directives || {};
7279
- var code = ast ? genElement(ast) : '_h("div")';
7453
+ var code = ast ? genElement(ast) : '_c("div")';
7280
7454
  staticRenderFns = prevStaticRenderFns;
7281
7455
  onceCount = prevOnceCount;
7282
7456
  return {
@@ -7306,8 +7480,8 @@ function genElement (el) {
7306
7480
  } else {
7307
7481
  var data = el.plain ? undefined : genData(el);
7308
7482
 
7309
- var children = el.inlineTemplate ? null : genChildren(el);
7310
- code = "_h('" + (el.tag) + "'" + (data ? ("," + data) : '') + (children ? ("," + children) : '') + ")";
7483
+ var children = el.inlineTemplate ? null : genChildren(el, true);
7484
+ code = "_c('" + (el.tag) + "'" + (data ? ("," + data) : '') + (children ? ("," + children) : '') + ")";
7311
7485
  }
7312
7486
  // module transforms
7313
7487
  for (var i = 0; i < transforms$1.length; i++) {
@@ -7353,7 +7527,7 @@ function genOnce (el) {
7353
7527
 
7354
7528
  function genIf (el) {
7355
7529
  el.ifProcessed = true; // avoid recursion
7356
- return genIfConditions(el.conditions)
7530
+ return genIfConditions(el.ifConditions.slice())
7357
7531
  }
7358
7532
 
7359
7533
  function genIfConditions (conditions) {
@@ -7368,7 +7542,7 @@ function genIfConditions (conditions) {
7368
7542
  return ("" + (genTernaryExp(condition.block)))
7369
7543
  }
7370
7544
 
7371
- // v-if with v-once shuold generate code like (a)?_m(0):_m(1)
7545
+ // v-if with v-once should generate code like (a)?_m(0):_m(1)
7372
7546
  function genTernaryExp (el) {
7373
7547
  return el.once ? genOnce(el) : genElement(el)
7374
7548
  }
@@ -7405,6 +7579,10 @@ function genData (el) {
7405
7579
  if (el.refInFor) {
7406
7580
  data += "refInFor:true,";
7407
7581
  }
7582
+ // pre
7583
+ if (el.pre) {
7584
+ data += "pre:true,";
7585
+ }
7408
7586
  // record original tag name for components using "is" attribute
7409
7587
  if (el.component) {
7410
7588
  data += "tag:\"" + (el.tag) + "\",";
@@ -7500,10 +7678,36 @@ function genScopedSlot (key, el) {
7500
7678
  : genElement(el)) + "}"
7501
7679
  }
7502
7680
 
7503
- function genChildren (el) {
7504
- if (el.children.length) {
7505
- return '[' + el.children.map(genNode).join(',') + ']'
7681
+ function genChildren (el, checkSkip) {
7682
+ var children = el.children;
7683
+ if (children.length) {
7684
+ var el$1 = children[0];
7685
+ // optimize single v-for
7686
+ if (children.length === 1 &&
7687
+ el$1.for &&
7688
+ el$1.tag !== 'template' &&
7689
+ el$1.tag !== 'slot') {
7690
+ return genElement(el$1)
7691
+ }
7692
+ return ("[" + (children.map(genNode).join(',')) + "]" + (checkSkip
7693
+ ? canSkipNormalization(children) ? '' : ',true'
7694
+ : ''))
7695
+ }
7696
+ }
7697
+
7698
+ function canSkipNormalization (children) {
7699
+ for (var i = 0; i < children.length; i++) {
7700
+ var el = children[i];
7701
+ if (needsNormalization(el) ||
7702
+ (el.if && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
7703
+ return false
7704
+ }
7506
7705
  }
7706
+ return true
7707
+ }
7708
+
7709
+ function needsNormalization (el) {
7710
+ return el.for || el.tag === 'template' || el.tag === 'slot'
7507
7711
  }
7508
7712
 
7509
7713
  function genNode (node) {
@@ -7515,9 +7719,9 @@ function genNode (node) {
7515
7719
  }
7516
7720
 
7517
7721
  function genText (text) {
7518
- return text.type === 2
7722
+ return ("_v(" + (text.type === 2
7519
7723
  ? text.expression // no need for () because already wrapped in _s()
7520
- : transformSpecialNewlines(JSON.stringify(text.text))
7724
+ : transformSpecialNewlines(JSON.stringify(text.text))) + ")")
7521
7725
  }
7522
7726
 
7523
7727
  function genSlot (el) {
@@ -7528,8 +7732,8 @@ function genSlot (el) {
7528
7732
 
7529
7733
  // componentName is el.component, take it as argument to shun flow's pessimistic refinement
7530
7734
  function genComponent (componentName, el) {
7531
- var children = el.inlineTemplate ? null : genChildren(el);
7532
- return ("_h(" + componentName + "," + (genData(el)) + (children ? ("," + children) : '') + ")")
7735
+ var children = el.inlineTemplate ? null : genChildren(el, true);
7736
+ return ("_c(" + componentName + "," + (genData(el)) + (children ? ("," + children) : '') + ")")
7533
7737
  }
7534
7738
 
7535
7739
  function genProps (props) {
@@ -7862,10 +8066,12 @@ function genDefaultModel (
7862
8066
  valueExpression = number || type === 'number'
7863
8067
  ? ("_n(" + valueExpression + ")")
7864
8068
  : valueExpression;
8069
+
7865
8070
  var code = genAssignmentCode(value, valueExpression);
7866
8071
  if (isNative && needCompositionGuard) {
7867
8072
  code = "if($event.target.composing)return;" + code;
7868
8073
  }
8074
+
7869
8075
  // inputs with type="file" are read only and setting the input's
7870
8076
  // value will throw an error.
7871
8077
  if ("development" !== 'production' &&
@@ -7875,8 +8081,12 @@ function genDefaultModel (
7875
8081
  "File inputs are read only. Use a v-on:change listener instead."
7876
8082
  );
7877
8083
  }
8084
+
7878
8085
  addProp(el, 'value', isNative ? ("_s(" + value + ")") : ("(" + value + ")"));
7879
8086
  addHandler(el, event, code, null, true);
8087
+ if (trim || number || type === 'number') {
8088
+ addHandler(el, 'blur', '$forceUpdate()');
8089
+ }
7880
8090
  }
7881
8091
 
7882
8092
  function genSelect (