vuejs 1.0.31 → 1.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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 (