vuejs 1.0.34 → 1.0.35

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d5c6c9edac113ae4bd1656d8a2cd6b20838f3437
4
- data.tar.gz: 7601868502a4a78527d23db450b374cd4ab88703
3
+ metadata.gz: 3fa23b8cab0da4e43e4f1612dcc4d3f3ad679f33
4
+ data.tar.gz: f006633d5db58048e5112ceaf94fffdef5b05592
5
5
  SHA512:
6
- metadata.gz: b81e2e921996d5d43a344c34972b196aeaef9300936c493128f7a918588665321b1483541c3212c5f9ed30c9273bec073afcf80d6a6973a3d2b526d362d13694
7
- data.tar.gz: 51a470745423d960a40460b1d9c77c0cf1c36a7caa45374829dc95d6b55ea5b19869012efd3544fa70ade66999ceb0b76c10ce007fc7cf59543c46e0ca7fc614
6
+ metadata.gz: 370919533736893068ed8b22f58791731144d4aadcbc3e349cbe5e37fad186d1ea2d86d202c39a43e1c4160eb661a786207d1fc5cd544f2b4b58975d2937b228
7
+ data.tar.gz: e51c32ed559dcc782bd8d59d005898c18dc9780ab3a017aa2d5e85f600ba04adcf734571f9d7fc74bedd0bb9d7cb946779e0888b96521188bae77050ca31e29a
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  gem `vuejs` ships with the 1.x & 2.x latest [Vue.js + vue-router + vue-resource + vue-validator + vuex](http://vuejs.org/) and integrate with Rails' asset pipeline. Vue.js is created by Evan You and the vuejs team.
6
6
 
7
- The current 2.x version is `Vue.js` (v2.1.6) + `vue-router` (v2.1.1) + `vue-validator` (v2.1.3) + `vuex` (v2.1.1).
7
+ The current 2.x version is `Vue.js` (v2.1.7) + `vue-router` (v2.1.1) + `vue-validator` (v2.1.3) + `vuex` (v2.1.1).
8
8
  > Note that Vue 2.x is not compatible with 1.x. vue-router 2.0 only works with Vue 2.x`
9
9
 
10
10
  ##### Legacy
@@ -12,8 +12,6 @@ The current 1.x version is `Vue.js` (v1.0.28) + `vue-router` (v0.7.13) + `vue-re
12
12
 
13
13
  # Requirement
14
14
 
15
-
16
-
17
15
  ## Installation
18
16
 
19
17
  Add this line to your application's Gemfile:
data/lib/vuejs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vuejs
2
- VERSION = "1.0.34"
2
+ VERSION = "1.0.35"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vue.js v2.1.6
2
+ * Vue.js v2.1.7
3
3
  * (c) 2014-2016 Evan You
4
4
  * Released under the MIT License.
5
5
  */
@@ -219,13 +219,15 @@ function genStaticKeys (modules) {
219
219
  * if they are plain objects, do they have the same shape?
220
220
  */
221
221
  function looseEqual (a, b) {
222
- /* eslint-disable eqeqeq */
223
- return a == b || (
224
- isObject(a) && isObject(b)
225
- ? JSON.stringify(a) === JSON.stringify(b)
226
- : false
227
- )
228
- /* eslint-enable eqeqeq */
222
+ var isObjectA = isObject(a);
223
+ var isObjectB = isObject(b);
224
+ if (isObjectA && isObjectB) {
225
+ return JSON.stringify(a) === JSON.stringify(b)
226
+ } else if (!isObjectA && !isObjectB) {
227
+ return String(a) === String(b)
228
+ } else {
229
+ return false
230
+ }
229
231
  }
230
232
 
231
233
  function looseIndexOf (arr, val) {
@@ -261,7 +263,7 @@ var config = {
261
263
  /**
262
264
  * Ignore certain custom elements
263
265
  */
264
- ignoredElements: null,
266
+ ignoredElements: [],
265
267
 
266
268
  /**
267
269
  * Custom user key aliases for v-on
@@ -734,7 +736,7 @@ function copyAugment (target, src, keys) {
734
736
  * returns the new observer if successfully observed,
735
737
  * or the existing observer if the value already has one.
736
738
  */
737
- function observe (value) {
739
+ function observe (value, asRootData) {
738
740
  if (!isObject(value)) {
739
741
  return
740
742
  }
@@ -750,6 +752,9 @@ function observe (value) {
750
752
  ) {
751
753
  ob = new Observer(value);
752
754
  }
755
+ if (asRootData && ob) {
756
+ ob.vmCount++;
757
+ }
753
758
  return ob
754
759
  }
755
760
 
@@ -1216,10 +1221,10 @@ function validateProp (
1216
1221
  var absent = !hasOwn(propsData, key);
1217
1222
  var value = propsData[key];
1218
1223
  // handle boolean props
1219
- if (isBooleanType(prop.type)) {
1224
+ if (isType(Boolean, prop.type)) {
1220
1225
  if (absent && !hasOwn(prop, 'default')) {
1221
1226
  value = false;
1222
- } else if (value === '' || value === hyphenate(key)) {
1227
+ } else if (!isType(String, prop.type) && (value === '' || value === hyphenate(key))) {
1223
1228
  value = true;
1224
1229
  }
1225
1230
  }
@@ -1360,12 +1365,12 @@ function getType (fn) {
1360
1365
  return match && match[1]
1361
1366
  }
1362
1367
 
1363
- function isBooleanType (fn) {
1368
+ function isType (type, fn) {
1364
1369
  if (!Array.isArray(fn)) {
1365
- return getType(fn) === 'Boolean'
1370
+ return getType(fn) === getType(type)
1366
1371
  }
1367
1372
  for (var i = 0, len = fn.length; i < len; i++) {
1368
- if (getType(fn[i]) === 'Boolean') {
1373
+ if (getType(fn[i]) === getType(type)) {
1369
1374
  return true
1370
1375
  }
1371
1376
  }
@@ -1610,16 +1615,17 @@ var Watcher = function Watcher (
1610
1615
  cb,
1611
1616
  options
1612
1617
  ) {
1613
- if ( options === void 0 ) options = {};
1614
-
1615
1618
  this.vm = vm;
1616
1619
  vm._watchers.push(this);
1617
1620
  // options
1618
- this.deep = !!options.deep;
1619
- this.user = !!options.user;
1620
- this.lazy = !!options.lazy;
1621
- this.sync = !!options.sync;
1622
- this.expression = expOrFn.toString();
1621
+ if (options) {
1622
+ this.deep = !!options.deep;
1623
+ this.user = !!options.user;
1624
+ this.lazy = !!options.lazy;
1625
+ this.sync = !!options.sync;
1626
+ } else {
1627
+ this.deep = this.user = this.lazy = this.sync = false;
1628
+ }
1623
1629
  this.cb = cb;
1624
1630
  this.id = ++uid$2; // uid for batching
1625
1631
  this.active = true;
@@ -1628,6 +1634,7 @@ var Watcher = function Watcher (
1628
1634
  this.newDeps = [];
1629
1635
  this.depIds = new _Set();
1630
1636
  this.newDepIds = new _Set();
1637
+ this.expression = expOrFn.toString();
1631
1638
  // parse expression for getter
1632
1639
  if (typeof expOrFn === 'function') {
1633
1640
  this.getter = expOrFn;
@@ -1723,8 +1730,8 @@ Watcher.prototype.update = function update () {
1723
1730
  Watcher.prototype.run = function run () {
1724
1731
  if (this.active) {
1725
1732
  var value = this.get();
1726
- if (
1727
- value !== this.value ||
1733
+ if (
1734
+ value !== this.value ||
1728
1735
  // Deep watchers and watchers on Object/Arrays should fire even
1729
1736
  // when the value is the same, because the value may
1730
1737
  // have mutated.
@@ -1837,50 +1844,52 @@ function _traverse (val, seen) {
1837
1844
 
1838
1845
  function initState (vm) {
1839
1846
  vm._watchers = [];
1840
- initProps(vm);
1841
- initMethods(vm);
1842
- initData(vm);
1843
- initComputed(vm);
1844
- initWatch(vm);
1847
+ var opts = vm.$options;
1848
+ if (opts.props) { initProps(vm, opts.props); }
1849
+ if (opts.methods) { initMethods(vm, opts.methods); }
1850
+ if (opts.data) {
1851
+ initData(vm);
1852
+ } else {
1853
+ observe(vm._data = {}, true /* asRootData */);
1854
+ }
1855
+ if (opts.computed) { initComputed(vm, opts.computed); }
1856
+ if (opts.watch) { initWatch(vm, opts.watch); }
1845
1857
  }
1846
1858
 
1847
1859
  var isReservedProp = { key: 1, ref: 1, slot: 1 };
1848
1860
 
1849
- function initProps (vm) {
1850
- var props = vm.$options.props;
1851
- if (props) {
1852
- var propsData = vm.$options.propsData || {};
1853
- var keys = vm.$options._propKeys = Object.keys(props);
1854
- var isRoot = !vm.$parent;
1855
- // root instance props should be converted
1856
- observerState.shouldConvert = isRoot;
1857
- var loop = function ( i ) {
1858
- var key = keys[i];
1859
- /* istanbul ignore else */
1860
- {
1861
- if (isReservedProp[key]) {
1861
+ function initProps (vm, props) {
1862
+ var propsData = vm.$options.propsData || {};
1863
+ var keys = vm.$options._propKeys = Object.keys(props);
1864
+ var isRoot = !vm.$parent;
1865
+ // root instance props should be converted
1866
+ observerState.shouldConvert = isRoot;
1867
+ var loop = function ( i ) {
1868
+ var key = keys[i];
1869
+ /* istanbul ignore else */
1870
+ {
1871
+ if (isReservedProp[key]) {
1872
+ warn(
1873
+ ("\"" + key + "\" is a reserved attribute and cannot be used as component prop."),
1874
+ vm
1875
+ );
1876
+ }
1877
+ defineReactive$$1(vm, key, validateProp(key, props, propsData, vm), function () {
1878
+ if (vm.$parent && !observerState.isSettingProps) {
1862
1879
  warn(
1863
- ("\"" + key + "\" is a reserved attribute and cannot be used as component prop."),
1880
+ "Avoid mutating a prop directly since the value will be " +
1881
+ "overwritten whenever the parent component re-renders. " +
1882
+ "Instead, use a data or computed property based on the prop's " +
1883
+ "value. Prop being mutated: \"" + key + "\"",
1864
1884
  vm
1865
1885
  );
1866
1886
  }
1867
- defineReactive$$1(vm, key, validateProp(key, props, propsData, vm), function () {
1868
- if (vm.$parent && !observerState.isSettingProps) {
1869
- warn(
1870
- "Avoid mutating a prop directly since the value will be " +
1871
- "overwritten whenever the parent component re-renders. " +
1872
- "Instead, use a data or computed property based on the prop's " +
1873
- "value. Prop being mutated: \"" + key + "\"",
1874
- vm
1875
- );
1876
- }
1877
- });
1878
- }
1879
- };
1887
+ });
1888
+ }
1889
+ };
1880
1890
 
1881
- for (var i = 0; i < keys.length; i++) loop( i );
1882
- observerState.shouldConvert = true;
1883
- }
1891
+ for (var i = 0; i < keys.length; i++) loop( i );
1892
+ observerState.shouldConvert = true;
1884
1893
  }
1885
1894
 
1886
1895
  function initData (vm) {
@@ -1912,8 +1921,7 @@ function initData (vm) {
1912
1921
  }
1913
1922
  }
1914
1923
  // observe data
1915
- observe(data);
1916
- data.__ob__ && data.__ob__.vmCount++;
1924
+ observe(data, true /* asRootData */);
1917
1925
  }
1918
1926
 
1919
1927
  var computedSharedDefinition = {
@@ -1923,26 +1931,23 @@ var computedSharedDefinition = {
1923
1931
  set: noop
1924
1932
  };
1925
1933
 
1926
- function initComputed (vm) {
1927
- var computed = vm.$options.computed;
1928
- if (computed) {
1929
- for (var key in computed) {
1930
- var userDef = computed[key];
1931
- if (typeof userDef === 'function') {
1932
- computedSharedDefinition.get = makeComputedGetter(userDef, vm);
1933
- computedSharedDefinition.set = noop;
1934
- } else {
1935
- computedSharedDefinition.get = userDef.get
1936
- ? userDef.cache !== false
1937
- ? makeComputedGetter(userDef.get, vm)
1938
- : bind$1(userDef.get, vm)
1939
- : noop;
1940
- computedSharedDefinition.set = userDef.set
1941
- ? bind$1(userDef.set, vm)
1942
- : noop;
1943
- }
1944
- Object.defineProperty(vm, key, computedSharedDefinition);
1934
+ function initComputed (vm, computed) {
1935
+ for (var key in computed) {
1936
+ var userDef = computed[key];
1937
+ if (typeof userDef === 'function') {
1938
+ computedSharedDefinition.get = makeComputedGetter(userDef, vm);
1939
+ computedSharedDefinition.set = noop;
1940
+ } else {
1941
+ computedSharedDefinition.get = userDef.get
1942
+ ? userDef.cache !== false
1943
+ ? makeComputedGetter(userDef.get, vm)
1944
+ : bind$1(userDef.get, vm)
1945
+ : noop;
1946
+ computedSharedDefinition.set = userDef.set
1947
+ ? bind$1(userDef.set, vm)
1948
+ : noop;
1945
1949
  }
1950
+ Object.defineProperty(vm, key, computedSharedDefinition);
1946
1951
  }
1947
1952
  }
1948
1953
 
@@ -1961,34 +1966,28 @@ function makeComputedGetter (getter, owner) {
1961
1966
  }
1962
1967
  }
1963
1968
 
1964
- function initMethods (vm) {
1965
- var methods = vm.$options.methods;
1966
- if (methods) {
1967
- for (var key in methods) {
1968
- vm[key] = methods[key] == null ? noop : bind$1(methods[key], vm);
1969
- if ("development" !== 'production' && methods[key] == null) {
1970
- warn(
1971
- "method \"" + key + "\" has an undefined value in the component definition. " +
1972
- "Did you reference the function correctly?",
1973
- vm
1974
- );
1975
- }
1969
+ function initMethods (vm, methods) {
1970
+ for (var key in methods) {
1971
+ vm[key] = methods[key] == null ? noop : bind$1(methods[key], vm);
1972
+ if ("development" !== 'production' && methods[key] == null) {
1973
+ warn(
1974
+ "method \"" + key + "\" has an undefined value in the component definition. " +
1975
+ "Did you reference the function correctly?",
1976
+ vm
1977
+ );
1976
1978
  }
1977
1979
  }
1978
1980
  }
1979
1981
 
1980
- function initWatch (vm) {
1981
- var watch = vm.$options.watch;
1982
- if (watch) {
1983
- for (var key in watch) {
1984
- var handler = watch[key];
1985
- if (Array.isArray(handler)) {
1986
- for (var i = 0; i < handler.length; i++) {
1987
- createWatcher(vm, key, handler[i]);
1988
- }
1989
- } else {
1990
- createWatcher(vm, key, handler);
1982
+ function initWatch (vm, watch) {
1983
+ for (var key in watch) {
1984
+ var handler = watch[key];
1985
+ if (Array.isArray(handler)) {
1986
+ for (var i = 0; i < handler.length; i++) {
1987
+ createWatcher(vm, key, handler[i]);
1991
1988
  }
1989
+ } else {
1990
+ createWatcher(vm, key, handler);
1992
1991
  }
1993
1992
  }
1994
1993
  }
@@ -2133,6 +2132,273 @@ function cloneVNodes (vnodes) {
2133
2132
 
2134
2133
  /* */
2135
2134
 
2135
+ function mergeVNodeHook (def, hookKey, hook, key) {
2136
+ key = key + hookKey;
2137
+ var injectedHash = def.__injected || (def.__injected = {});
2138
+ if (!injectedHash[key]) {
2139
+ injectedHash[key] = true;
2140
+ var oldHook = def[hookKey];
2141
+ if (oldHook) {
2142
+ def[hookKey] = function () {
2143
+ oldHook.apply(this, arguments);
2144
+ hook.apply(this, arguments);
2145
+ };
2146
+ } else {
2147
+ def[hookKey] = hook;
2148
+ }
2149
+ }
2150
+ }
2151
+
2152
+ /* */
2153
+
2154
+ function updateListeners (
2155
+ on,
2156
+ oldOn,
2157
+ add,
2158
+ remove$$1,
2159
+ vm
2160
+ ) {
2161
+ var name, cur, old, fn, event, capture, once;
2162
+ for (name in on) {
2163
+ cur = on[name];
2164
+ old = oldOn[name];
2165
+ if (!cur) {
2166
+ "development" !== 'production' && warn(
2167
+ "Invalid handler for event \"" + name + "\": got " + String(cur),
2168
+ vm
2169
+ );
2170
+ } else if (!old) {
2171
+ once = name.charAt(0) === '~'; // Prefixed last, checked first
2172
+ event = once ? name.slice(1) : name;
2173
+ capture = event.charAt(0) === '!';
2174
+ event = capture ? event.slice(1) : event;
2175
+ if (Array.isArray(cur)) {
2176
+ add(event, (cur.invoker = arrInvoker(cur)), once, capture);
2177
+ } else {
2178
+ if (!cur.invoker) {
2179
+ fn = cur;
2180
+ cur = on[name] = {};
2181
+ cur.fn = fn;
2182
+ cur.invoker = fnInvoker(cur);
2183
+ }
2184
+ add(event, cur.invoker, once, capture);
2185
+ }
2186
+ } else if (cur !== old) {
2187
+ if (Array.isArray(old)) {
2188
+ old.length = cur.length;
2189
+ for (var i = 0; i < old.length; i++) { old[i] = cur[i]; }
2190
+ on[name] = old;
2191
+ } else {
2192
+ old.fn = cur;
2193
+ on[name] = old;
2194
+ }
2195
+ }
2196
+ }
2197
+ for (name in oldOn) {
2198
+ if (!on[name]) {
2199
+ once = name.charAt(0) === '~'; // Prefixed last, checked first
2200
+ event = once ? name.slice(1) : name;
2201
+ capture = event.charAt(0) === '!';
2202
+ event = capture ? event.slice(1) : event;
2203
+ remove$$1(event, oldOn[name].invoker, capture);
2204
+ }
2205
+ }
2206
+ }
2207
+
2208
+ function arrInvoker (arr) {
2209
+ return function (ev) {
2210
+ var arguments$1 = arguments;
2211
+
2212
+ var single = arguments.length === 1;
2213
+ for (var i = 0; i < arr.length; i++) {
2214
+ single ? arr[i](ev) : arr[i].apply(null, arguments$1);
2215
+ }
2216
+ }
2217
+ }
2218
+
2219
+ function fnInvoker (o) {
2220
+ return function (ev) {
2221
+ var single = arguments.length === 1;
2222
+ single ? o.fn(ev) : o.fn.apply(null, arguments);
2223
+ }
2224
+ }
2225
+
2226
+ /* */
2227
+
2228
+ // The template compiler attempts to minimize the need for normalization by
2229
+ // statically analyzing the template at compile time.
2230
+ //
2231
+ // For plain HTML markup, normalization can be completely skipped because the
2232
+ // generated render function is guaranteed to return Array<VNode>. There are
2233
+ // two cases where extra normalization is needed:
2234
+
2235
+ // 1. When the children contains components - because a functional component
2236
+ // may return an Array instead of a single root. In this case, just a simple
2237
+ // nomralization is needed - if any child is an Array, we flatten the whole
2238
+ // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
2239
+ // because functional components already normalize their own children.
2240
+ function simpleNormalizeChildren (children) {
2241
+ for (var i = 0; i < children.length; i++) {
2242
+ if (Array.isArray(children[i])) {
2243
+ return Array.prototype.concat.apply([], children)
2244
+ }
2245
+ }
2246
+ return children
2247
+ }
2248
+
2249
+ // 2. When the children contains constrcuts that always generated nested Arrays,
2250
+ // e.g. <template>, <slot>, v-for, or when the children is provided by user
2251
+ // with hand-written render functions / JSX. In such cases a full normalization
2252
+ // is needed to cater to all possible types of children values.
2253
+ function normalizeChildren (children) {
2254
+ return isPrimitive(children)
2255
+ ? [createTextVNode(children)]
2256
+ : Array.isArray(children)
2257
+ ? normalizeArrayChildren(children)
2258
+ : undefined
2259
+ }
2260
+
2261
+ function normalizeArrayChildren (children, nestedIndex) {
2262
+ var res = [];
2263
+ var i, c, last;
2264
+ for (i = 0; i < children.length; i++) {
2265
+ c = children[i];
2266
+ if (c == null || typeof c === 'boolean') { continue }
2267
+ last = res[res.length - 1];
2268
+ // nested
2269
+ if (Array.isArray(c)) {
2270
+ res.push.apply(res, normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i)));
2271
+ } else if (isPrimitive(c)) {
2272
+ if (last && last.text) {
2273
+ last.text += String(c);
2274
+ } else if (c !== '') {
2275
+ // convert primitive to vnode
2276
+ res.push(createTextVNode(c));
2277
+ }
2278
+ } else {
2279
+ if (c.text && last && last.text) {
2280
+ res[res.length - 1] = createTextVNode(last.text + c.text);
2281
+ } else {
2282
+ // default key for nested array children (likely generated by v-for)
2283
+ if (c.tag && c.key == null && nestedIndex != null) {
2284
+ c.key = "__vlist" + nestedIndex + "_" + i + "__";
2285
+ }
2286
+ res.push(c);
2287
+ }
2288
+ }
2289
+ }
2290
+ return res
2291
+ }
2292
+
2293
+ /* */
2294
+
2295
+ function getFirstComponentChild (children) {
2296
+ return children && children.filter(function (c) { return c && c.componentOptions; })[0]
2297
+ }
2298
+
2299
+ /* */
2300
+
2301
+ function initEvents (vm) {
2302
+ vm._events = Object.create(null);
2303
+ vm._hasHookEvent = false;
2304
+ // init parent attached events
2305
+ var listeners = vm.$options._parentListeners;
2306
+ if (listeners) {
2307
+ updateComponentListeners(vm, listeners);
2308
+ }
2309
+ }
2310
+
2311
+ var target;
2312
+
2313
+ function add$1 (event, fn, once) {
2314
+ if (once) {
2315
+ target.$once(event, fn);
2316
+ } else {
2317
+ target.$on(event, fn);
2318
+ }
2319
+ }
2320
+
2321
+ function remove$2 (event, fn) {
2322
+ target.$off(event, fn);
2323
+ }
2324
+
2325
+ function updateComponentListeners (
2326
+ vm,
2327
+ listeners,
2328
+ oldListeners
2329
+ ) {
2330
+ target = vm;
2331
+ updateListeners(listeners, oldListeners || {}, add$1, remove$2, vm);
2332
+ }
2333
+
2334
+ function eventsMixin (Vue) {
2335
+ var hookRE = /^hook:/;
2336
+ Vue.prototype.$on = function (event, fn) {
2337
+ var vm = this;(vm._events[event] || (vm._events[event] = [])).push(fn);
2338
+ // optimize hook:event cost by using a boolean flag marked at registration
2339
+ // instead of a hash lookup
2340
+ if (hookRE.test(event)) {
2341
+ vm._hasHookEvent = true;
2342
+ }
2343
+ return vm
2344
+ };
2345
+
2346
+ Vue.prototype.$once = function (event, fn) {
2347
+ var vm = this;
2348
+ function on () {
2349
+ vm.$off(event, on);
2350
+ fn.apply(vm, arguments);
2351
+ }
2352
+ on.fn = fn;
2353
+ vm.$on(event, on);
2354
+ return vm
2355
+ };
2356
+
2357
+ Vue.prototype.$off = function (event, fn) {
2358
+ var vm = this;
2359
+ // all
2360
+ if (!arguments.length) {
2361
+ vm._events = Object.create(null);
2362
+ return vm
2363
+ }
2364
+ // specific event
2365
+ var cbs = vm._events[event];
2366
+ if (!cbs) {
2367
+ return vm
2368
+ }
2369
+ if (arguments.length === 1) {
2370
+ vm._events[event] = null;
2371
+ return vm
2372
+ }
2373
+ // specific handler
2374
+ var cb;
2375
+ var i = cbs.length;
2376
+ while (i--) {
2377
+ cb = cbs[i];
2378
+ if (cb === fn || cb.fn === fn) {
2379
+ cbs.splice(i, 1);
2380
+ break
2381
+ }
2382
+ }
2383
+ return vm
2384
+ };
2385
+
2386
+ Vue.prototype.$emit = function (event) {
2387
+ var vm = this;
2388
+ var cbs = vm._events[event];
2389
+ if (cbs) {
2390
+ cbs = cbs.length > 1 ? toArray(cbs) : cbs;
2391
+ var args = toArray(arguments, 1);
2392
+ for (var i = 0, l = cbs.length; i < l; i++) {
2393
+ cbs[i].apply(vm, args);
2394
+ }
2395
+ }
2396
+ return vm
2397
+ };
2398
+ }
2399
+
2400
+ /* */
2401
+
2136
2402
  var activeInstance = null;
2137
2403
 
2138
2404
  function initLifecycle (vm) {
@@ -2275,7 +2541,7 @@ function lifecycleMixin (Vue) {
2275
2541
  if (listeners) {
2276
2542
  var oldListeners = vm.$options._parentListeners;
2277
2543
  vm.$options._parentListeners = listeners;
2278
- vm._updateListeners(listeners, oldListeners);
2544
+ updateComponentListeners(vm, listeners, oldListeners);
2279
2545
  }
2280
2546
  // resolve slots + force update if has children
2281
2547
  if (hasChildren) {
@@ -2337,7 +2603,9 @@ function callHook (vm, hook) {
2337
2603
  handlers[i].call(vm);
2338
2604
  }
2339
2605
  }
2340
- vm.$emit('hook:' + hook);
2606
+ if (vm._hasHookEvent) {
2607
+ vm.$emit('hook:' + hook);
2608
+ }
2341
2609
  }
2342
2610
 
2343
2611
  /* */
@@ -2563,244 +2831,106 @@ function resolveAsyncComponent (
2563
2831
  // cache resolved
2564
2832
  factory.resolved = res;
2565
2833
  // invoke callbacks only if this is not a synchronous resolve
2566
- // (async resolves are shimmed as synchronous during SSR)
2567
- if (!sync) {
2568
- for (var i = 0, l = cbs.length; i < l; i++) {
2569
- cbs[i](res);
2570
- }
2571
- }
2572
- };
2573
-
2574
- var reject = function (reason) {
2575
- "development" !== 'production' && warn(
2576
- "Failed to resolve async component: " + (String(factory)) +
2577
- (reason ? ("\nReason: " + reason) : '')
2578
- );
2579
- };
2580
-
2581
- var res = factory(resolve, reject);
2582
-
2583
- // handle promise
2584
- if (res && typeof res.then === 'function' && !factory.resolved) {
2585
- res.then(resolve, reject);
2586
- }
2587
-
2588
- sync = false;
2589
- // return in case resolved synchronously
2590
- return factory.resolved
2591
- }
2592
- }
2593
-
2594
- function extractProps (data, Ctor) {
2595
- // we are only extracting raw values here.
2596
- // validation and default values are handled in the child
2597
- // component itself.
2598
- var propOptions = Ctor.options.props;
2599
- if (!propOptions) {
2600
- return
2601
- }
2602
- var res = {};
2603
- var attrs = data.attrs;
2604
- var props = data.props;
2605
- var domProps = data.domProps;
2606
- if (attrs || props || domProps) {
2607
- for (var key in propOptions) {
2608
- var altKey = hyphenate(key);
2609
- checkProp(res, props, key, altKey, true) ||
2610
- checkProp(res, attrs, key, altKey) ||
2611
- checkProp(res, domProps, key, altKey);
2612
- }
2613
- }
2614
- return res
2615
- }
2616
-
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
- }
2834
+ // (async resolves are shimmed as synchronous during SSR)
2835
+ if (!sync) {
2836
+ for (var i = 0, l = cbs.length; i < l; i++) {
2837
+ cbs[i](res);
2838
+ }
2839
+ }
2840
+ };
2735
2841
 
2736
- function arrInvoker (arr) {
2737
- return function (ev) {
2738
- var arguments$1 = arguments;
2842
+ var reject = function (reason) {
2843
+ "development" !== 'production' && warn(
2844
+ "Failed to resolve async component: " + (String(factory)) +
2845
+ (reason ? ("\nReason: " + reason) : '')
2846
+ );
2847
+ };
2739
2848
 
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);
2849
+ var res = factory(resolve, reject);
2850
+
2851
+ // handle promise
2852
+ if (res && typeof res.then === 'function' && !factory.resolved) {
2853
+ res.then(resolve, reject);
2743
2854
  }
2744
- }
2745
- }
2746
2855
 
2747
- function fnInvoker (o) {
2748
- return function (ev) {
2749
- var single = arguments.length === 1;
2750
- single ? o.fn(ev) : o.fn.apply(null, arguments);
2856
+ sync = false;
2857
+ // return in case resolved synchronously
2858
+ return factory.resolved
2751
2859
  }
2752
2860
  }
2753
2861
 
2754
- /* */
2755
-
2756
- function normalizeChildren (children) {
2757
- return isPrimitive(children)
2758
- ? [createTextVNode(children)]
2759
- : Array.isArray(children)
2760
- ? normalizeArrayChildren(children)
2761
- : undefined
2862
+ function extractProps (data, Ctor) {
2863
+ // we are only extracting raw values here.
2864
+ // validation and default values are handled in the child
2865
+ // component itself.
2866
+ var propOptions = Ctor.options.props;
2867
+ if (!propOptions) {
2868
+ return
2869
+ }
2870
+ var res = {};
2871
+ var attrs = data.attrs;
2872
+ var props = data.props;
2873
+ var domProps = data.domProps;
2874
+ if (attrs || props || domProps) {
2875
+ for (var key in propOptions) {
2876
+ var altKey = hyphenate(key);
2877
+ checkProp(res, props, key, altKey, true) ||
2878
+ checkProp(res, attrs, key, altKey) ||
2879
+ checkProp(res, domProps, key, altKey);
2880
+ }
2881
+ }
2882
+ return res
2762
2883
  }
2763
2884
 
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));
2885
+ function checkProp (
2886
+ res,
2887
+ hash,
2888
+ key,
2889
+ altKey,
2890
+ preserve
2891
+ ) {
2892
+ if (hash) {
2893
+ if (hasOwn(hash, key)) {
2894
+ res[key] = hash[key];
2895
+ if (!preserve) {
2896
+ delete hash[key];
2780
2897
  }
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);
2898
+ return true
2899
+ } else if (hasOwn(hash, altKey)) {
2900
+ res[key] = hash[altKey];
2901
+ if (!preserve) {
2902
+ delete hash[altKey];
2790
2903
  }
2904
+ return true
2791
2905
  }
2792
2906
  }
2793
- return res
2907
+ return false
2794
2908
  }
2795
2909
 
2796
- /* */
2910
+ function mergeHooks (data) {
2911
+ if (!data.hook) {
2912
+ data.hook = {};
2913
+ }
2914
+ for (var i = 0; i < hooksToMerge.length; i++) {
2915
+ var key = hooksToMerge[i];
2916
+ var fromParent = data.hook[key];
2917
+ var ours = hooks[key];
2918
+ data.hook[key] = fromParent ? mergeHook$1(ours, fromParent) : ours;
2919
+ }
2920
+ }
2797
2921
 
2798
- function getFirstComponentChild (children) {
2799
- return children && children.filter(function (c) { return c && c.componentOptions; })[0]
2922
+ function mergeHook$1 (one, two) {
2923
+ return function (a, b, c, d) {
2924
+ one(a, b, c, d);
2925
+ two(a, b, c, d);
2926
+ }
2800
2927
  }
2801
2928
 
2802
2929
  /* */
2803
2930
 
2931
+ var SIMPLE_NORMALIZE = 1;
2932
+ var ALWAYS_NORMALIZE = 2;
2933
+
2804
2934
  // wrapper function for providing a more flexible interface
2805
2935
  // without getting yelled at by flow
2806
2936
  function createElement (
@@ -2808,16 +2938,16 @@ function createElement (
2808
2938
  tag,
2809
2939
  data,
2810
2940
  children,
2811
- needNormalization,
2941
+ normalizationType,
2812
2942
  alwaysNormalize
2813
2943
  ) {
2814
2944
  if (Array.isArray(data) || isPrimitive(data)) {
2815
- needNormalization = children;
2945
+ normalizationType = children;
2816
2946
  children = data;
2817
2947
  data = undefined;
2818
2948
  }
2819
- if (alwaysNormalize) { needNormalization = true; }
2820
- return _createElement(context, tag, data, children, needNormalization)
2949
+ if (alwaysNormalize) { normalizationType = ALWAYS_NORMALIZE; }
2950
+ return _createElement(context, tag, data, children, normalizationType)
2821
2951
  }
2822
2952
 
2823
2953
  function _createElement (
@@ -2825,7 +2955,7 @@ function _createElement (
2825
2955
  tag,
2826
2956
  data,
2827
2957
  children,
2828
- needNormalization
2958
+ normalizationType
2829
2959
  ) {
2830
2960
  if (data && data.__ob__) {
2831
2961
  "development" !== 'production' && warn(
@@ -2846,8 +2976,10 @@ function _createElement (
2846
2976
  data.scopedSlots = { default: children[0] };
2847
2977
  children.length = 0;
2848
2978
  }
2849
- if (needNormalization) {
2979
+ if (normalizationType === ALWAYS_NORMALIZE) {
2850
2980
  children = normalizeChildren(children);
2981
+ } else if (normalizationType === SIMPLE_NORMALIZE) {
2982
+ children = simpleNormalizeChildren(children);
2851
2983
  }
2852
2984
  var vnode, ns;
2853
2985
  if (typeof tag === 'string') {
@@ -2866,7 +2998,6 @@ function _createElement (
2866
2998
  // unknown or unlisted namespaced elements
2867
2999
  // check at runtime because it may get assigned a namespace when its
2868
3000
  // parent normalizes children
2869
- ns = tag === 'foreignObject' ? 'xhtml' : ns;
2870
3001
  vnode = new VNode(
2871
3002
  tag, data, children,
2872
3003
  undefined, undefined, context
@@ -2886,6 +3017,10 @@ function _createElement (
2886
3017
 
2887
3018
  function applyNS (vnode, ns) {
2888
3019
  vnode.ns = ns;
3020
+ if (vnode.tag === 'foreignObject') {
3021
+ // use default namespace inside foreignObject
3022
+ return
3023
+ }
2889
3024
  if (vnode.children) {
2890
3025
  for (var i = 0, l = vnode.children.length; i < l; i++) {
2891
3026
  var child = vnode.children[i];
@@ -2908,7 +3043,7 @@ function initRender (vm) {
2908
3043
  vm.$scopedSlots = {};
2909
3044
  // bind the createElement fn to this instance
2910
3045
  // so that we get proper render context inside it.
2911
- // args order: tag, data, children, needNormalization, alwaysNormalize
3046
+ // args order: tag, data, children, normalizationType, alwaysNormalize
2912
3047
  // internal version is used by render functions compiled from templates
2913
3048
  vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
2914
3049
  // normalization is always applied for the public version, used in
@@ -3052,7 +3187,7 @@ function renderMixin (Vue) {
3052
3187
  render
3053
3188
  ) {
3054
3189
  var ret, i, l, keys, key;
3055
- if (Array.isArray(val)) {
3190
+ if (Array.isArray(val) || typeof val === 'string') {
3056
3191
  ret = new Array(val.length);
3057
3192
  for (i = 0, l = val.length; i < l; i++) {
3058
3193
  ret[i] = render(val[i], i);
@@ -3077,11 +3212,16 @@ function renderMixin (Vue) {
3077
3212
  Vue.prototype._t = function (
3078
3213
  name,
3079
3214
  fallback,
3080
- props
3215
+ props,
3216
+ bindObject
3081
3217
  ) {
3082
3218
  var scopedSlotFn = this.$scopedSlots[name];
3083
3219
  if (scopedSlotFn) { // scoped slot
3084
- return scopedSlotFn(props || {}) || fallback
3220
+ props = props || {};
3221
+ if (bindObject) {
3222
+ extend(props, bindObject);
3223
+ }
3224
+ return scopedSlotFn(props) || fallback
3085
3225
  } else {
3086
3226
  var slotNodes = this.$slots[name];
3087
3227
  // warn duplicate slot usage
@@ -3182,84 +3322,6 @@ function resolveSlots (
3182
3322
 
3183
3323
  /* */
3184
3324
 
3185
- function initEvents (vm) {
3186
- vm._events = Object.create(null);
3187
- // init parent attached events
3188
- var listeners = vm.$options._parentListeners;
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);
3193
- vm._updateListeners = function (listeners, oldListeners) {
3194
- updateListeners(listeners, oldListeners || {}, add, remove$$1, vm);
3195
- };
3196
- if (listeners) {
3197
- vm._updateListeners(listeners);
3198
- }
3199
- }
3200
-
3201
- function eventsMixin (Vue) {
3202
- Vue.prototype.$on = function (event, fn) {
3203
- var vm = this;(vm._events[event] || (vm._events[event] = [])).push(fn);
3204
- return vm
3205
- };
3206
-
3207
- Vue.prototype.$once = function (event, fn) {
3208
- var vm = this;
3209
- function on () {
3210
- vm.$off(event, on);
3211
- fn.apply(vm, arguments);
3212
- }
3213
- on.fn = fn;
3214
- vm.$on(event, on);
3215
- return vm
3216
- };
3217
-
3218
- Vue.prototype.$off = function (event, fn) {
3219
- var vm = this;
3220
- // all
3221
- if (!arguments.length) {
3222
- vm._events = Object.create(null);
3223
- return vm
3224
- }
3225
- // specific event
3226
- var cbs = vm._events[event];
3227
- if (!cbs) {
3228
- return vm
3229
- }
3230
- if (arguments.length === 1) {
3231
- vm._events[event] = null;
3232
- return vm
3233
- }
3234
- // specific handler
3235
- var cb;
3236
- var i = cbs.length;
3237
- while (i--) {
3238
- cb = cbs[i];
3239
- if (cb === fn || cb.fn === fn) {
3240
- cbs.splice(i, 1);
3241
- break
3242
- }
3243
- }
3244
- return vm
3245
- };
3246
-
3247
- Vue.prototype.$emit = function (event) {
3248
- var vm = this;
3249
- var cbs = vm._events[event];
3250
- if (cbs) {
3251
- cbs = cbs.length > 1 ? toArray(cbs) : cbs;
3252
- var args = toArray(arguments, 1);
3253
- for (var i = 0, l = cbs.length; i < l; i++) {
3254
- cbs[i].apply(vm, args);
3255
- }
3256
- }
3257
- return vm
3258
- };
3259
- }
3260
-
3261
- /* */
3262
-
3263
3325
  var uid = 0;
3264
3326
 
3265
3327
  function initMixin (Vue) {
@@ -3587,7 +3649,7 @@ Object.defineProperty(Vue$3.prototype, '$isServer', {
3587
3649
  get: isServerRendering
3588
3650
  });
3589
3651
 
3590
- Vue$3.version = '2.1.6';
3652
+ Vue$3.version = '2.1.7';
3591
3653
 
3592
3654
  /* */
3593
3655
 
@@ -3703,8 +3765,7 @@ function stringifyClass (value) {
3703
3765
 
3704
3766
  var namespaceMap = {
3705
3767
  svg: 'http://www.w3.org/2000/svg',
3706
- math: 'http://www.w3.org/1998/Math/MathML',
3707
- xhtml: 'http://www.w3.org/1999/xhtml'
3768
+ math: 'http://www.w3.org/1998/Math/MathML'
3708
3769
  };
3709
3770
 
3710
3771
  var isHTMLTag = makeMap(
@@ -3974,16 +4035,16 @@ function createPatchFunction (backend) {
3974
4035
  function createRmCb (childElm, listeners) {
3975
4036
  function remove$$1 () {
3976
4037
  if (--remove$$1.listeners === 0) {
3977
- removeElement(childElm);
4038
+ removeNode(childElm);
3978
4039
  }
3979
4040
  }
3980
4041
  remove$$1.listeners = listeners;
3981
4042
  return remove$$1
3982
4043
  }
3983
4044
 
3984
- function removeElement (el) {
4045
+ function removeNode (el) {
3985
4046
  var parent = nodeOps.parentNode(el);
3986
- // element may have already been removed due to v-html
4047
+ // element may have already been removed due to v-html / v-text
3987
4048
  if (parent) {
3988
4049
  nodeOps.removeChild(parent, el);
3989
4050
  }
@@ -4007,7 +4068,7 @@ function createPatchFunction (backend) {
4007
4068
  if (
4008
4069
  !inPre &&
4009
4070
  !vnode.ns &&
4010
- !(config.ignoredElements && config.ignoredElements.indexOf(tag) > -1) &&
4071
+ !(config.ignoredElements.length && config.ignoredElements.indexOf(tag) > -1) &&
4011
4072
  config.isUnknownElement(tag)
4012
4073
  ) {
4013
4074
  warn(
@@ -4185,7 +4246,7 @@ function createPatchFunction (backend) {
4185
4246
  removeAndInvokeRemoveHook(ch);
4186
4247
  invokeDestroyHook(ch);
4187
4248
  } else { // Text node
4188
- nodeOps.removeChild(parentElm, ch.elm);
4249
+ removeNode(ch.elm);
4189
4250
  }
4190
4251
  }
4191
4252
  }
@@ -4215,7 +4276,7 @@ function createPatchFunction (backend) {
4215
4276
  rm();
4216
4277
  }
4217
4278
  } else {
4218
- removeElement(vnode.elm);
4279
+ removeNode(vnode.elm);
4219
4280
  }
4220
4281
  }
4221
4282
 
@@ -4476,7 +4537,6 @@ function createPatchFunction (backend) {
4476
4537
  // create an empty node and replace it
4477
4538
  oldVnode = emptyNodeAt(oldVnode);
4478
4539
  }
4479
-
4480
4540
  // replacing existing element
4481
4541
  elm = oldVnode.elm;
4482
4542
  parent = nodeOps.parentNode(elm);
@@ -4528,6 +4588,7 @@ function updateDirectives (oldVnode, vnode) {
4528
4588
 
4529
4589
  function _update (oldVnode, vnode) {
4530
4590
  var isCreate = oldVnode === emptyNode;
4591
+ var isDestroy = vnode === emptyNode;
4531
4592
  var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);
4532
4593
  var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);
4533
4594
 
@@ -4579,7 +4640,7 @@ function _update (oldVnode, vnode) {
4579
4640
  for (key in oldDirs) {
4580
4641
  if (!newDirs[key]) {
4581
4642
  // no longer present, unbind
4582
- callHook$1(oldDirs[key], 'unbind', oldVnode);
4643
+ callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
4583
4644
  }
4584
4645
  }
4585
4646
  }
@@ -4611,10 +4672,10 @@ function getRawDirName (dir) {
4611
4672
  return dir.rawName || ((dir.name) + "." + (Object.keys(dir.modifiers || {}).join('.')))
4612
4673
  }
4613
4674
 
4614
- function callHook$1 (dir, hook, vnode, oldVnode) {
4675
+ function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {
4615
4676
  var fn = dir.def && dir.def[hook];
4616
4677
  if (fn) {
4617
- fn(vnode.elm, dir, vnode, oldVnode);
4678
+ fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
4618
4679
  }
4619
4680
  }
4620
4681
 
@@ -4725,23 +4786,23 @@ var klass = {
4725
4786
 
4726
4787
  /* */
4727
4788
 
4728
- var target;
4789
+ var target$1;
4729
4790
 
4730
- function add$1 (event, handler, once, capture) {
4791
+ function add$2 (event, handler, once, capture) {
4731
4792
  if (once) {
4732
4793
  var oldHandler = handler;
4733
4794
  handler = function (ev) {
4734
- remove$2(event, handler, capture);
4795
+ remove$3(event, handler, capture);
4735
4796
  arguments.length === 1
4736
4797
  ? oldHandler(ev)
4737
4798
  : oldHandler.apply(null, arguments);
4738
4799
  };
4739
4800
  }
4740
- target.addEventListener(event, handler, capture);
4801
+ target$1.addEventListener(event, handler, capture);
4741
4802
  }
4742
4803
 
4743
- function remove$2 (event, handler, capture) {
4744
- target.removeEventListener(event, handler, capture);
4804
+ function remove$3 (event, handler, capture) {
4805
+ target$1.removeEventListener(event, handler, capture);
4745
4806
  }
4746
4807
 
4747
4808
  function updateDOMListeners (oldVnode, vnode) {
@@ -4750,8 +4811,8 @@ function updateDOMListeners (oldVnode, vnode) {
4750
4811
  }
4751
4812
  var on = vnode.data.on || {};
4752
4813
  var oldOn = oldVnode.data.on || {};
4753
- target = vnode.elm;
4754
- updateListeners(on, oldOn, add$1, remove$2, vnode.context);
4814
+ target$1 = vnode.elm;
4815
+ updateListeners(on, oldOn, add$2, remove$3, vnode.context);
4755
4816
  }
4756
4817
 
4757
4818
  var events = {
@@ -4788,16 +4849,20 @@ function updateDOMProps (oldVnode, vnode) {
4788
4849
  if (vnode.children) { vnode.children.length = 0; }
4789
4850
  if (cur === oldProps[key]) { continue }
4790
4851
  }
4852
+ // #4521: if a click event triggers update before the change event is
4853
+ // dispatched on a checkbox/radio input, the input's checked state will
4854
+ // be reset and fail to trigger another update.
4855
+ /* istanbul ignore next */
4856
+ if (key === 'checked' && !isDirty(elm, cur)) {
4857
+ continue
4858
+ }
4791
4859
  if (key === 'value') {
4792
4860
  // store value as _value as well since
4793
4861
  // non-string values will be stringified
4794
4862
  elm._value = cur;
4795
4863
  // avoid resetting cursor position when value is the same
4796
4864
  var strCur = cur == null ? '' : String(cur);
4797
- if (!elm.composing && (
4798
- (document.activeElement !== elm && elm.value !== strCur) ||
4799
- isValueChanged(vnode, strCur)
4800
- )) {
4865
+ if (shouldUpdateValue(elm, vnode, strCur)) {
4801
4866
  elm.value = strCur;
4802
4867
  }
4803
4868
  } else {
@@ -4806,7 +4871,29 @@ function updateDOMProps (oldVnode, vnode) {
4806
4871
  }
4807
4872
  }
4808
4873
 
4809
- function isValueChanged (vnode, newVal) {
4874
+ // check platforms/web/util/attrs.js acceptValue
4875
+
4876
+
4877
+ function shouldUpdateValue (
4878
+ elm,
4879
+ vnode,
4880
+ checkVal
4881
+ ) {
4882
+ if (!elm.composing && (
4883
+ vnode.tag === 'option' ||
4884
+ isDirty(elm, checkVal) ||
4885
+ isInputChanged(vnode, checkVal)
4886
+ )) {
4887
+ return true
4888
+ }
4889
+ return false
4890
+ }
4891
+
4892
+ function isDirty (elm, checkVal) {
4893
+ return document.activeElement !== elm && elm.value !== checkVal
4894
+ }
4895
+
4896
+ function isInputChanged (vnode, newVal) {
4810
4897
  var value = vnode.elm.value;
4811
4898
  var modifiers = vnode.elm._vModifiers; // injected by v-model runtime
4812
4899
  if ((modifiers && modifiers.number) || vnode.elm.type === 'number') {
@@ -5261,9 +5348,9 @@ function enter (vnode, toggleDisplay) {
5261
5348
  beforeEnterHook && beforeEnterHook(el);
5262
5349
  if (expectsCSS) {
5263
5350
  addTransitionClass(el, startClass);
5264
- addTransitionClass(el, activeClass);
5265
5351
  nextFrame(function () {
5266
5352
  removeTransitionClass(el, startClass);
5353
+ addTransitionClass(el, activeClass);
5267
5354
  if (!cb.cancelled && !userWantsControl) {
5268
5355
  whenTransitionEnds(el, type, cb);
5269
5356
  }
@@ -5353,9 +5440,9 @@ function leave (vnode, rm) {
5353
5440
  beforeLeave && beforeLeave(el);
5354
5441
  if (expectsCSS) {
5355
5442
  addTransitionClass(el, leaveClass);
5356
- addTransitionClass(el, leaveActiveClass);
5357
5443
  nextFrame(function () {
5358
5444
  removeTransitionClass(el, leaveClass);
5445
+ addTransitionClass(el, leaveActiveClass);
5359
5446
  if (!cb.cancelled && !userWantsControl) {
5360
5447
  whenTransitionEnds(el, type, cb);
5361
5448
  }
@@ -5601,6 +5688,7 @@ var show = {
5601
5688
  el.style.display = value ? originalDisplay : 'none';
5602
5689
  }
5603
5690
  },
5691
+
5604
5692
  update: function update (el, ref, vnode) {
5605
5693
  var value = ref.value;
5606
5694
  var oldValue = ref.oldValue;
@@ -5623,6 +5711,18 @@ var show = {
5623
5711
  } else {
5624
5712
  el.style.display = value ? el.__vOriginalDisplay : 'none';
5625
5713
  }
5714
+ },
5715
+
5716
+ unbind: function unbind (
5717
+ el,
5718
+ binding,
5719
+ vnode,
5720
+ oldVnode,
5721
+ isDestroy
5722
+ ) {
5723
+ if (!isDestroy) {
5724
+ el.style.display = el.__vOriginalDisplay;
5725
+ }
5626
5726
  }
5627
5727
  };
5628
5728
 
@@ -6758,7 +6858,7 @@ function parse (
6758
6858
  "development" !== 'production' && warn$1(
6759
6859
  'Templates should only be responsible for mapping the state to the ' +
6760
6860
  'UI. Avoid placing tags with side-effects in your templates, such as ' +
6761
- "<" + tag + ">."
6861
+ "<" + tag + ">" + ', as they will not be parsed.'
6762
6862
  );
6763
6863
  }
6764
6864
 
@@ -6895,19 +6995,20 @@ function parse (
6895
6995
  currentParent.attrsMap.placeholder === text) {
6896
6996
  return
6897
6997
  }
6998
+ var children = currentParent.children;
6898
6999
  text = inPre || text.trim()
6899
7000
  ? decodeHTMLCached(text)
6900
7001
  // only preserve whitespace if its not right after a starting tag
6901
- : preserveWhitespace && currentParent.children.length ? ' ' : '';
7002
+ : preserveWhitespace && children.length ? ' ' : '';
6902
7003
  if (text) {
6903
7004
  var expression;
6904
7005
  if (!inVPre && text !== ' ' && (expression = parseText(text, delimiters))) {
6905
- currentParent.children.push({
7006
+ children.push({
6906
7007
  type: 2,
6907
7008
  expression: expression,
6908
7009
  text: text
6909
7010
  });
6910
- } else {
7011
+ } else if (text !== ' ' || children[children.length - 1].text !== ' ') {
6911
7012
  currentParent.children.push({
6912
7013
  type: 3,
6913
7014
  text: text
@@ -7018,6 +7119,23 @@ function processIfConditions (el, parent) {
7018
7119
  }
7019
7120
  }
7020
7121
 
7122
+ function findPrevElement (children) {
7123
+ var i = children.length;
7124
+ while (i--) {
7125
+ if (children[i].type === 1) {
7126
+ return children[i]
7127
+ } else {
7128
+ if ("development" !== 'production' && children[i].text !== ' ') {
7129
+ warn$1(
7130
+ "text \"" + (children[i].text.trim()) + "\" between v-if and v-else(-if) " +
7131
+ "will be ignored."
7132
+ );
7133
+ }
7134
+ children.pop();
7135
+ }
7136
+ }
7137
+ }
7138
+
7021
7139
  function addIfCondition (el, condition) {
7022
7140
  if (!el.ifConditions) {
7023
7141
  el.ifConditions = [];
@@ -7125,6 +7243,15 @@ function processAttrs (el) {
7125
7243
  }
7126
7244
  }
7127
7245
  addAttr(el, name, JSON.stringify(value));
7246
+ // #4530 also bind special attributes as props even if they are static
7247
+ // so that patches between dynamic/static are consistent
7248
+ if (platformMustUseProp(el.tag, name)) {
7249
+ if (name === 'value') {
7250
+ addProp(el, name, JSON.stringify(value));
7251
+ } else {
7252
+ addProp(el, name, 'true');
7253
+ }
7254
+ }
7128
7255
  }
7129
7256
  }
7130
7257
  }
@@ -7160,13 +7287,6 @@ function makeAttrsMap (attrs) {
7160
7287
  return map
7161
7288
  }
7162
7289
 
7163
- function findPrevElement (children) {
7164
- var i = children.length;
7165
- while (i--) {
7166
- if (children[i].tag) { return children[i] }
7167
- }
7168
- }
7169
-
7170
7290
  function isForbiddenTag (el) {
7171
7291
  return (
7172
7292
  el.tag === 'style' ||
@@ -7432,6 +7552,7 @@ var warn$2;
7432
7552
  var transforms$1;
7433
7553
  var dataGenFns;
7434
7554
  var platformDirectives$1;
7555
+ var isPlatformReservedTag$1;
7435
7556
  var staticRenderFns;
7436
7557
  var onceCount;
7437
7558
  var currentOptions;
@@ -7450,6 +7571,7 @@ function generate (
7450
7571
  transforms$1 = pluckModuleFunction(options.modules, 'transformCode');
7451
7572
  dataGenFns = pluckModuleFunction(options.modules, 'genData');
7452
7573
  platformDirectives$1 = options.directives || {};
7574
+ isPlatformReservedTag$1 = options.isReservedTag || no;
7453
7575
  var code = ast ? genElement(ast) : '_c("div")';
7454
7576
  staticRenderFns = prevStaticRenderFns;
7455
7577
  onceCount = prevOnceCount;
@@ -7689,27 +7811,40 @@ function genChildren (el, checkSkip) {
7689
7811
  el$1.tag !== 'slot') {
7690
7812
  return genElement(el$1)
7691
7813
  }
7814
+ var normalizationType = getNormalizationType(children);
7692
7815
  return ("[" + (children.map(genNode).join(',')) + "]" + (checkSkip
7693
- ? canSkipNormalization(children) ? '' : ',true'
7816
+ ? normalizationType ? ("," + normalizationType) : ''
7694
7817
  : ''))
7695
7818
  }
7696
7819
  }
7697
7820
 
7698
- function canSkipNormalization (children) {
7821
+ // determine the normalzation needed for the children array.
7822
+ // 0: no normalization needed
7823
+ // 1: simple normalization needed (possible 1-level deep nested array)
7824
+ // 2: full nomralization needed
7825
+ function getNormalizationType (children) {
7699
7826
  for (var i = 0; i < children.length; i++) {
7700
7827
  var el = children[i];
7701
7828
  if (needsNormalization(el) ||
7702
7829
  (el.if && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
7703
- return false
7830
+ return 2
7831
+ }
7832
+ if (maybeComponent(el) ||
7833
+ (el.if && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {
7834
+ return 1
7704
7835
  }
7705
7836
  }
7706
- return true
7837
+ return 0
7707
7838
  }
7708
7839
 
7709
7840
  function needsNormalization (el) {
7710
7841
  return el.for || el.tag === 'template' || el.tag === 'slot'
7711
7842
  }
7712
7843
 
7844
+ function maybeComponent (el) {
7845
+ return el.type === 1 && !isPlatformReservedTag$1(el.tag)
7846
+ }
7847
+
7713
7848
  function genNode (node) {
7714
7849
  if (node.type === 1) {
7715
7850
  return genElement(node)
@@ -7727,7 +7862,19 @@ function genText (text) {
7727
7862
  function genSlot (el) {
7728
7863
  var slotName = el.slotName || '"default"';
7729
7864
  var children = genChildren(el);
7730
- return ("_t(" + slotName + (children ? ("," + children) : '') + (el.attrs ? ((children ? '' : ',null') + ",{" + (el.attrs.map(function (a) { return ((camelize(a.name)) + ":" + (a.value)); }).join(',')) + "}") : '') + ")")
7865
+ var res = "_t(" + slotName + (children ? ("," + children) : '');
7866
+ var attrs = el.attrs && ("{" + (el.attrs.map(function (a) { return ((camelize(a.name)) + ":" + (a.value)); }).join(',')) + "}");
7867
+ var bind$$1 = el.attrsMap['v-bind'];
7868
+ if ((attrs || bind$$1) && !children) {
7869
+ res += ",null";
7870
+ }
7871
+ if (attrs) {
7872
+ res += "," + attrs;
7873
+ }
7874
+ if (bind$$1) {
7875
+ res += (attrs ? '' : ',null') + "," + bind$$1;
7876
+ }
7877
+ return res + ')'
7731
7878
  }
7732
7879
 
7733
7880
  // componentName is el.component, take it as argument to shun flow's pessimistic refinement