Selaa lähdekoodia

[release] 0.11.4

Evan You 11 vuotta sitten
vanhempi
commit
19e0223f5f
5 muutettua tiedostoa jossa 314 lisäystä ja 195 poistoa
  1. 1 1
      bower.json
  2. 1 1
      component.json
  3. 310 191
      dist/vue.js
  4. 1 1
      dist/vue.min.js
  5. 1 1
      package.json

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "vue",
-  "version": "0.11.3",
+  "version": "0.11.4",
   "main": "dist/vue.js",
   "description": "Simple, Fast & Composable MVVM for building interative interfaces",
   "authors": ["Evan You <yyx990803@gmail.com>"],

+ 1 - 1
component.json

@@ -1,6 +1,6 @@
 {
   "name": "vue",
-  "version": "0.11.3",
+  "version": "0.11.4",
   "main": "src/vue.js",
   "author": "Evan You <yyx990803@gmail.com>",
   "description": "Simple, Fast & Composable MVVM for building interative interfaces",

+ 310 - 191
dist/vue.js

@@ -1,5 +1,5 @@
 /**
- * Vue.js v0.11.3
+ * Vue.js v0.11.4
  * (c) 2014 Evan You
  * Released under the MIT License.
  */
@@ -174,16 +174,16 @@ return /******/ (function(modules) { // webpackBootstrap
 	exports.config = __webpack_require__(20)
 
 	exports.compiler = {
-	  compile: __webpack_require__(41),
-	  transclude: __webpack_require__(42)
+	  compile: __webpack_require__(42),
+	  transclude: __webpack_require__(43)
 	}
 
 	exports.parsers = {
-	  path: __webpack_require__(43),
-	  text: __webpack_require__(44),
-	  template: __webpack_require__(45),
-	  directive: __webpack_require__(46),
-	  expression: __webpack_require__(47)
+	  path: __webpack_require__(44),
+	  text: __webpack_require__(45),
+	  template: __webpack_require__(46),
+	  directive: __webpack_require__(47),
+	  expression: __webpack_require__(48)
 	}
 
 	/**
@@ -315,10 +315,10 @@ return /******/ (function(modules) { // webpackBootstrap
 
 	var _ = __webpack_require__(1)
 	var Watcher = __webpack_require__(21)
-	var Path = __webpack_require__(43)
-	var textParser = __webpack_require__(44)
-	var dirParser = __webpack_require__(46)
-	var expParser = __webpack_require__(47)
+	var Path = __webpack_require__(44)
+	var textParser = __webpack_require__(45)
+	var dirParser = __webpack_require__(47)
+	var expParser = __webpack_require__(48)
 	var filterRE = /[^|]\|[^|]/
 
 	/**
@@ -392,7 +392,10 @@ return /******/ (function(modules) { // webpackBootstrap
 	  }
 	  if (!watcher) {
 	    watcher = vm._userWatchers[key] =
-	      new Watcher(vm, exp, wrappedCb, null, false, deep)
+	      new Watcher(vm, exp, wrappedCb, {
+	        deep: deep,
+	        user: true
+	      })
 	  } else {
 	    watcher.addCb(wrappedCb)
 	  }
@@ -480,7 +483,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var transition = __webpack_require__(48)
+	var transition = __webpack_require__(49)
 
 	/**
 	 * Append instance to target
@@ -935,7 +938,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var compile = __webpack_require__(41)
+	var compile = __webpack_require__(42)
 
 	/**
 	 * Set instance target element and kick off the compilation
@@ -1026,13 +1029,16 @@ return /******/ (function(modules) { // webpackBootstrap
 
 	// event listener directives
 	exports.on         = __webpack_require__(33)
-	exports.model      = __webpack_require__(49)
+	exports.model      = __webpack_require__(50)
 
 	// child vm directives
 	exports.component  = __webpack_require__(34)
 	exports.repeat     = __webpack_require__(35)
 	exports['if']      = __webpack_require__(36)
+
+	// child vm communication directives
 	exports['with']    = __webpack_require__(37)
+	exports.events     = __webpack_require__(38)
 
 /***/ },
 /* 9 */
@@ -1172,7 +1178,7 @@ return /******/ (function(modules) { // webpackBootstrap
 	 * Install special array filters
 	 */
 
-	_.extend(exports, __webpack_require__(38))
+	_.extend(exports, __webpack_require__(39))
 
 /***/ },
 /* 10 */
@@ -1387,8 +1393,8 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var Observer = __webpack_require__(50)
-	var Dep = __webpack_require__(39)
+	var Observer = __webpack_require__(51)
+	var Dep = __webpack_require__(40)
 
 	/**
 	 * Setup the scope of an instance, which contains:
@@ -1609,9 +1615,9 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var Directive = __webpack_require__(40)
-	var compile = __webpack_require__(41)
-	var transclude = __webpack_require__(42)
+	var Directive = __webpack_require__(41)
+	var compile = __webpack_require__(42)
+	var transclude = __webpack_require__(43)
 
 	/**
 	 * Transclude, compile and link element.
@@ -1656,13 +1662,14 @@ return /******/ (function(modules) { // webpackBootstrap
 	      }
 	      // tranclude, this possibly replaces original
 	      el = transclude(el, options)
+	      this._initElement(el)
 	      // now call the container linker on the resolved el
 	      this._containerUnlinkFn = containerLinkFn(parent, el)
 	    } else {
 	      // simply transclude
 	      el = transclude(el, options)
+	      this._initElement(el)
 	    }
-	    this._initElement(el)
 	    var linkFn = compile(el, options)
 	    linkFn(this, el)
 	    if (options.replace) {
@@ -2371,8 +2378,14 @@ return /******/ (function(modules) { // webpackBootstrap
 	  exports.warn = function (msg) {
 	    if (hasConsole && !config.silent) {
 	      console.warn('[Vue warn]: ' + msg)
-	      if (config.debug && console.trace) {
-	        console.trace()
+	      /* istanbul ignore if */
+	      if (config.debug) {
+	        /* jshint debug: true */
+	        debugger
+	      } else {
+	        console.log(
+	          'Set `Vue.config.debug = true` to enable debug mode.'
+	        )
 	      }
 	    }
 	  }
@@ -2738,11 +2751,9 @@ return /******/ (function(modules) { // webpackBootstrap
 
 	var _ = __webpack_require__(1)
 	var config = __webpack_require__(20)
-	var Observer = __webpack_require__(50)
-	var expParser = __webpack_require__(47)
-	var Batcher = __webpack_require__(51)
-
-	var batcher = new Batcher()
+	var Observer = __webpack_require__(51)
+	var expParser = __webpack_require__(48)
+	var batcher = __webpack_require__(52)
 	var uid = 0
 
 	/**
@@ -2753,29 +2764,35 @@ return /******/ (function(modules) { // webpackBootstrap
 	 * @param {Vue} vm
 	 * @param {String} expression
 	 * @param {Function} cb
-	 * @param {Array} [filters]
-	 * @param {Boolean} [needSet]
-	 * @param {Boolean} [deep]
+	 * @param {Object} options
+	 *                 - {Array} filters
+	 *                 - {Boolean} twoWay
+	 *                 - {Boolean} deep
+	 *                 - {Boolean} user
 	 * @constructor
 	 */
 
-	function Watcher (vm, expression, cb, filters, needSet, deep) {
+	function Watcher (vm, expression, cb, options) {
 	  this.vm = vm
 	  vm._watcherList.push(this)
 	  this.expression = expression
 	  this.cbs = [cb]
 	  this.id = ++uid // uid for batching
 	  this.active = true
-	  this.deep = deep
+	  options = options || {}
+	  this.deep = options.deep
+	  this.user = options.user
 	  this.deps = Object.create(null)
 	  // setup filters if any.
 	  // We delegate directive filters here to the watcher
 	  // because they need to be included in the dependency
 	  // collection process.
-	  this.readFilters = filters && filters.read
-	  this.writeFilters = filters && filters.write
+	  if (options.filters) {
+	    this.readFilters = options.filters.read
+	    this.writeFilters = options.filters.write
+	  }
 	  // parse expression for getter/setter
-	  var res = expParser.parse(expression, needSet)
+	  var res = expParser.parse(expression, options.twoWay)
 	  this.getter = res.get
 	  this.setter = res.set
 	  this.value = this.get()
@@ -2811,7 +2828,10 @@ return /******/ (function(modules) { // webpackBootstrap
 	  try {
 	    value = this.getter.call(vm, vm)
 	  } catch (e) {
-	    _.warn(e)
+	    _.warn(
+	      'Error when evaluating expression "' +
+	      this.expression + '":\n   ' + e
+	    )
 	  }
 	  // "touch" every property so they are all tracked as
 	  // dependencies for deep watching
@@ -2836,7 +2856,12 @@ return /******/ (function(modules) { // webpackBootstrap
 	  )
 	  try {
 	    this.setter.call(vm, vm, value)
-	  } catch (e) {}
+	  } catch (e) {
+	    _.warn(
+	      'Error when evaluating setter "' +
+	      this.expression + '":\n   ' + e
+	    )
+	  }
 	}
 
 	/**
@@ -2868,10 +2893,10 @@ return /******/ (function(modules) { // webpackBootstrap
 	 */
 
 	p.update = function () {
-	  if (config.async) {
-	    batcher.push(this)
-	  } else {
+	  if (!config.async || config.debug) {
 	    this.run()
+	  } else {
+	    batcher.push(this)
 	  }
 	}
 
@@ -3002,7 +3027,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var templateParser = __webpack_require__(45)
+	var templateParser = __webpack_require__(46)
 
 	module.exports = {
 
@@ -3081,7 +3106,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /* 25 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var transition = __webpack_require__(48)
+	var transition = __webpack_require__(49)
 
 	module.exports = function (value) {
 	  var el = this.el
@@ -3142,19 +3167,20 @@ return /******/ (function(modules) { // webpackBootstrap
 	  isLiteral: true,
 
 	  bind: function () {
-	    if (this.el !== this.vm.$el) {
+	    var child = this.el.__vue__
+	    if (!child || this.vm !== child.$parent) {
 	      _.warn(
-	        'v-ref should only be used on instance root nodes.'
+	        'v-ref should only be used on a child component ' +
+	        'from the parent template.'
 	      )
 	      return
 	    }
-	    this.owner = this.vm.$parent
-	    this.owner.$[this.expression] = this.vm
+	    this.vm.$[this.expression] = child
 	  },
 
 	  unbind: function () {
-	    if (this.owner.$[this.expression] === this.vm) {
-	      delete this.owner.$[this.expression]
+	    if (this.vm.$[this.expression] === this.el.__vue__) {
+	      delete this.vm.$[this.expression]
 	    }
 	  }
 	  
@@ -3181,26 +3207,33 @@ return /******/ (function(modules) { // webpackBootstrap
 /* 30 */
 /***/ function(module, exports, __webpack_require__) {
 
+	var _ = __webpack_require__(1)
 	var prefixes = ['-webkit-', '-moz-', '-ms-']
+	var camelPrefixes = ['Webkit', 'Moz', 'ms']
 	var importantRE = /!important;?$/
+	var camelRE = /([a-z])([A-Z])/g
+	var testEl = null
+	var propCache = {}
 
 	module.exports = {
 
 	  deep: true,
 
-	  bind: function () {
-	    var prop = this.arg
-	    if (!prop) return
-	    this.prop = prop
-	  },
-
 	  update: function (value) {
-	    if (this.prop) {
-	      this.setCssProperty(this.prop, value)
+	    if (this.arg) {
+	      this.setProp(this.arg, value)
 	    } else {
 	      if (typeof value === 'object') {
+	        // cache object styles so that only changed props
+	        // are actually updated.
+	        if (!this.cache) this.cache = {}
 	        for (var prop in value) {
-	          this.setCssProperty(prop, value[prop])
+	          this.setProp(prop, value[prop])
+	          /* jshint eqeqeq: false */
+	          if (value[prop] != this.cache[prop]) {
+	            this.cache[prop] = value[prop]
+	            this.setProp(prop, value[prop])
+	          }
 	        }
 	      } else {
 	        this.el.style.cssText = value
@@ -3208,44 +3241,79 @@ return /******/ (function(modules) { // webpackBootstrap
 	    }
 	  },
 
-	  setCssProperty: function (prop, value) {
-	    var prefixed = false
-	    if (prop.charAt(0) === '$') {
-	      // properties that start with $ will be auto-prefixed
-	      prop = prop.slice(1)
-	      prefixed = true
-	    }
+	  setProp: function (prop, value) {
+	    prop = normalize(prop)
+	    if (!prop) return // unsupported prop
 	    // cast possible numbers/booleans into strings
-	    if (value != null) {
-	      value += ''
-	    }
-	    var isImportant = importantRE.test(value)
-	      ? 'important'
-	      : ''
-	    if (isImportant) {
-	      value = value.replace(importantRE, '').trim()
-	    }
-	    this.el.style.setProperty(prop, value, isImportant)
-	    if (prefixed) {
-	      var i = prefixes.length
-	      while (i--) {
-	        this.el.style.setProperty(
-	          prefixes[i] + prop,
-	          value,
-	          isImportant
-	        )
+	    if (value != null) value += ''
+	    if (value) {
+	      var isImportant = importantRE.test(value)
+	        ? 'important'
+	        : ''
+	      if (isImportant) {
+	        value = value.replace(importantRE, '').trim()
 	      }
+	      this.el.style.setProperty(prop, value, isImportant)
+	    } else {
+	      this.el.style.removeProperty(prop)
 	    }
 	  }
 
 	}
 
+	/**
+	 * Normalize a CSS property name.
+	 * - cache result
+	 * - auto prefix
+	 * - camelCase -> dash-case
+	 *
+	 * @param {String} prop
+	 * @return {String}
+	 */
+
+	function normalize (prop) {
+	  if (propCache[prop]) {
+	    return propCache[prop]
+	  }
+	  var res = prefix(prop)
+	  propCache[prop] = propCache[res] = res
+	  return res
+	}
+
+	/**
+	 * Auto detect the appropriate prefix for a CSS property.
+	 * https://gist.github.com/paulirish/523692
+	 *
+	 * @param {String} prop
+	 * @return {String}
+	 */
+
+	function prefix (prop) {
+	  prop = prop.replace(camelRE, '$1-$2').toLowerCase()
+	  var camel = _.camelize(prop)
+	  var upper = camel.charAt(0).toUpperCase() + camel.slice(1)
+	  if (!testEl) {
+	    testEl = document.createElement('div')
+	  }
+	  if (camel in testEl.style) {
+	    return prop
+	  }
+	  var i = prefixes.length
+	  var prefixed
+	  while (i--) {
+	    prefixed = camelPrefixes[i] + upper
+	    if (prefixed in testEl.style) {
+	      return prefixes[i] + prop
+	    }
+	  }
+	}
+
 /***/ },
 /* 31 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var templateParser = __webpack_require__(45)
+	var templateParser = __webpack_require__(46)
 	var vIf = __webpack_require__(36)
 
 	module.exports = {
@@ -3375,7 +3443,7 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var templateParser = __webpack_require__(45)
+	var templateParser = __webpack_require__(46)
 
 	module.exports = {
 
@@ -3577,11 +3645,11 @@ return /******/ (function(modules) { // webpackBootstrap
 
 	var _ = __webpack_require__(1)
 	var isObject = _.isObject
-	var textParser = __webpack_require__(44)
-	var expParser = __webpack_require__(47)
-	var templateParser = __webpack_require__(45)
-	var compile = __webpack_require__(41)
-	var transclude = __webpack_require__(42)
+	var textParser = __webpack_require__(45)
+	var expParser = __webpack_require__(48)
+	var templateParser = __webpack_require__(46)
+	var compile = __webpack_require__(42)
+	var transclude = __webpack_require__(43)
 	var mergeOptions = __webpack_require__(19)
 	var uid = 0
 
@@ -3689,7 +3757,7 @@ return /******/ (function(modules) { // webpackBootstrap
 	            $parent: this.vm
 	          })
 	          this.template = transclude(this.template, merged)
-	          this._linkFn = compile(this.template, merged)
+	          this._linkFn = compile(this.template, merged, false, true)
 	        }
 	      } else {
 	        // to be resolved later
@@ -4084,9 +4152,9 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var compile = __webpack_require__(41)
-	var templateParser = __webpack_require__(45)
-	var transition = __webpack_require__(48)
+	var compile = __webpack_require__(42)
+	var templateParser = __webpack_require__(46)
+	var transition = __webpack_require__(49)
 
 	module.exports = {
 
@@ -4228,7 +4296,39 @@ return /******/ (function(modules) { // webpackBootstrap
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var Path = __webpack_require__(43)
+
+	module.exports = { 
+
+	  bind: function () {
+	    var child = this.el.__vue__
+	    if (!child || this.vm !== child.$parent) {
+	      _.warn(
+	        '`v-events` should only be used on a child component ' +
+	        'from the parent template.'
+	      )
+	      return
+	    }
+	    var method = this.vm[this.expression]
+	    if (!method) {
+	      _.warn(
+	        '`v-events` cannot find method "' + this.expression +
+	        '" on the parent instance.'
+	      )
+	    }
+	    child.$on(this.arg, method)
+	  }
+
+	  // when child is destroyed, all events are turned off,
+	  // so no need for unbind here.
+
+	}
+
+/***/ },
+/* 39 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var _ = __webpack_require__(1)
+	var Path = __webpack_require__(44)
 
 	/**
 	 * Filter filter for v-repeat
@@ -4316,7 +4416,7 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 39 */
+/* 40 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var uid = 0
@@ -4371,14 +4471,14 @@ return /******/ (function(modules) { // webpackBootstrap
 	module.exports = Dep
 
 /***/ },
-/* 40 */
+/* 41 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
 	var config = __webpack_require__(20)
 	var Watcher = __webpack_require__(21)
-	var textParser = __webpack_require__(44)
-	var expParser = __webpack_require__(47)
+	var textParser = __webpack_require__(45)
+	var expParser = __webpack_require__(48)
 
 	/**
 	 * A directive links a DOM element with a piece of data,
@@ -4461,9 +4561,11 @@ return /******/ (function(modules) { // webpackBootstrap
 	        this.vm,
 	        this._watcherExp,
 	        update, // callback
-	        this.filters,
-	        this.twoWay, // need setter,
-	        this.deep
+	        {
+	          filters: this.filters,
+	          twoWay: this.twoWay,
+	          deep: this.deep
+	        }
 	      )
 	    } else {
 	      watcher.addCb(update)
@@ -4595,14 +4697,14 @@ return /******/ (function(modules) { // webpackBootstrap
 	module.exports = Directive
 
 /***/ },
-/* 41 */
+/* 42 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
 	var config = __webpack_require__(20)
-	var textParser = __webpack_require__(44)
-	var dirParser = __webpack_require__(46)
-	var templateParser = __webpack_require__(45)
+	var textParser = __webpack_require__(45)
+	var dirParser = __webpack_require__(47)
+	var templateParser = __webpack_require__(46)
 
 	/**
 	 * Compile a template and return a reusable composite link
@@ -5072,7 +5174,6 @@ return /******/ (function(modules) { // webpackBootstrap
 	      dirName = attrName.slice(config.prefix.length)
 	      if (asParent &&
 	          (dirName === 'with' ||
-	           dirName === 'ref' ||
 	           dirName === 'component')) {
 	        continue
 	      }
@@ -5154,11 +5255,11 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 42 */
+/* 43 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var templateParser = __webpack_require__(45)
+	var templateParser = __webpack_require__(46)
 
 	/**
 	 * Process an element or a DocumentFragment based on a
@@ -5305,11 +5406,11 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 43 */
+/* 44 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var Cache = __webpack_require__(52)
+	var Cache = __webpack_require__(53)
 	var pathCache = new Cache(1000)
 	var identRE = /^[$_a-zA-Z]+[\w$]*$/
 
@@ -5610,12 +5711,12 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 44 */
+/* 45 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var Cache = __webpack_require__(52)
+	var Cache = __webpack_require__(53)
 	var config = __webpack_require__(20)
-	var dirParser = __webpack_require__(46)
+	var dirParser = __webpack_require__(47)
 	var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g
 	var cache, tagRE, htmlRE, firstChar, lastChar
 
@@ -5793,11 +5894,11 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 45 */
+/* 46 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var Cache = __webpack_require__(52)
+	var Cache = __webpack_require__(53)
 	var templateCache = new Cache(1000)
 	var idSelectorCache = new Cache(1000)
 
@@ -5854,7 +5955,8 @@ return /******/ (function(modules) { // webpackBootstrap
 	  '</svg>'
 	]
 
-	var TAG_RE = /<([\w:]+)/
+	var tagRE = /<([\w:]+)/
+	var entityRE = /&\w+;/
 
 	/**
 	 * Convert a string template to a DocumentFragment.
@@ -5873,16 +5975,17 @@ return /******/ (function(modules) { // webpackBootstrap
 	  }
 
 	  var frag = document.createDocumentFragment()
-	  var tagMatch = TAG_RE.exec(templateString)
+	  var tagMatch = templateString.match(tagRE)
+	  var entityMatch = entityRE.test(templateString)
 
-	  if (!tagMatch) {
+	  if (!tagMatch && !entityMatch) {
 	    // text only, return a single text node.
 	    frag.appendChild(
 	      document.createTextNode(templateString)
 	    )
 	  } else {
 
-	    var tag    = tagMatch[1]
+	    var tag    = tagMatch && tagMatch[1]
 	    var wrap   = map[tag] || map._default
 	    var depth  = wrap[0]
 	    var prefix = wrap[1]
@@ -6046,11 +6149,11 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 46 */
+/* 47 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var Cache = __webpack_require__(52)
+	var Cache = __webpack_require__(53)
 	var cache = new Cache(1000)
 	var argRE = /^[^\{\?]+$|^'[^']*'$|^"[^"]*"$/
 	var filterTokenRE = /[^\s'"]+|'[^']+'|"[^"]+"/g
@@ -6210,12 +6313,12 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 47 */
+/* 48 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var Path = __webpack_require__(43)
-	var Cache = __webpack_require__(52)
+	var Path = __webpack_require__(44)
+	var Cache = __webpack_require__(53)
 	var expressionCache = new Cache(1000)
 
 	var keywords =
@@ -6441,12 +6544,12 @@ return /******/ (function(modules) { // webpackBootstrap
 	exports.pathTestRE = pathTestRE
 
 /***/ },
-/* 48 */
+/* 49 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
-	var applyCSSTransition = __webpack_require__(53)
-	var applyJSTransition = __webpack_require__(54)
+	var applyCSSTransition = __webpack_require__(54)
+	var applyJSTransition = __webpack_require__(55)
 
 	/**
 	 * Append with transition.
@@ -6597,16 +6700,16 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 49 */
+/* 50 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
 
 	var handlers = {
-	  _default: __webpack_require__(55),
-	  radio: __webpack_require__(56),
-	  select: __webpack_require__(57),
-	  checkbox: __webpack_require__(58)
+	  _default: __webpack_require__(56),
+	  radio: __webpack_require__(57),
+	  select: __webpack_require__(58),
+	  checkbox: __webpack_require__(59)
 	}
 
 	module.exports = {
@@ -6658,15 +6761,15 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 50 */
+/* 51 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
 	var config = __webpack_require__(20)
-	var Dep = __webpack_require__(39)
-	var arrayMethods = __webpack_require__(59)
+	var Dep = __webpack_require__(40)
+	var arrayMethods = __webpack_require__(60)
 	var arrayKeys = Object.getOwnPropertyNames(arrayMethods)
-	__webpack_require__(60)
+	__webpack_require__(61)
 
 	var uid = 0
 
@@ -6899,77 +7002,92 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ },
-/* 51 */
+/* 52 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
 
+	// we have two separate queues: one for directive updates
+	// and one for user watcher registered via $watch().
+	// we want to guarantee directive updates to be called
+	// before user watchers so that when user watchers are
+	// triggered, the DOM would have already been in updated
+	// state.
+	var queue = []
+	var userQueue = []
+	var has = {}
+	var waiting = false
+	var flushing = false
+
 	/**
-	 * The Batcher maintains a job queue to be run
-	 * async on the next event loop.
+	 * Reset the batcher's state.
 	 */
 
-	function Batcher () {
-	  this.reset()
+	function reset () {
+	  queue = []
+	  userQueue = []
+	  has = {}
+	  waiting = false
+	  flushing = false
 	}
 
-	var p = Batcher.prototype
-
 	/**
-	 * Push a job into the job queue.
-	 * Jobs with duplicate IDs will be skipped unless it's
-	 * pushed when the queue is being flushed.
-	 *
-	 * @param {Object} job
-	 *   properties:
-	 *   - {String|Number} id
-	 *   - {Function}      run
+	 * Flush both queues and run the jobs.
 	 */
 
-	p.push = function (job) {
-	  if (!job.id || !this.has[job.id] || this.flushing) {
-	    this.queue.push(job)
-	    this.has[job.id] = job
-	    if (!this.waiting) {
-	      this.waiting = true
-	      _.nextTick(this.flush, this)
-	    }
-	  }
+	function flush () {
+	  flushing = true
+	  run(queue)
+	  run(userQueue)
+	  reset()
 	}
 
 	/**
-	 * Flush the queue and run the jobs.
-	 * Will call a preFlush hook if has one.
+	 * Run the jobs in a single queue.
+	 *
+	 * @param {Array} queue
 	 */
 
-	p.flush = function () {
-	  this.flushing = true
+	function run (queue) {
 	  // do not cache length because more jobs might be pushed
 	  // as we run existing jobs
-	  for (var i = 0; i < this.queue.length; i++) {
-	    var job = this.queue[i]
-	    if (!job.cancelled) {
-	      job.run()
-	    }
+	  for (var i = 0; i < queue.length; i++) {
+	    queue[i].run()
 	  }
-	  this.reset()
 	}
 
 	/**
-	 * Reset the batcher's state.
+	 * Push a job into the job queue.
+	 * Jobs with duplicate IDs will be skipped unless it's
+	 * pushed when the queue is being flushed.
+	 *
+	 * @param {Object} job
+	 *   properties:
+	 *   - {String|Number} id
+	 *   - {Function}      run
 	 */
 
-	p.reset = function () {
-	  this.has = {}
-	  this.queue = []
-	  this.waiting = false
-	  this.flushing = false
+	exports.push = function (job) {
+	  if (!job.id || !has[job.id] || flushing) {
+	    // A user watcher callback could trigger another
+	    // directive update during the flushing; at that time
+	    // the directive queue would already have been run, so
+	    // we call that update immediately as it is pushed.
+	    if (flushing && !job.user) {
+	      job.run()
+	      return
+	    }
+	    ;(job.user ? userQueue : queue).push(job)
+	    has[job.id] = job
+	    if (!waiting) {
+	      waiting = true
+	      _.nextTick(flush)
+	    }
+	  }
 	}
 
-	module.exports = Batcher
-
 /***/ },
-/* 52 */
+/* 53 */
 /***/ function(module, exports, __webpack_require__) {
 
 	/**
@@ -7086,7 +7204,7 @@ return /******/ (function(modules) { // webpackBootstrap
 	module.exports = Cache
 
 /***/ },
-/* 53 */
+/* 54 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
@@ -7280,7 +7398,7 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 54 */
+/* 55 */
 /***/ function(module, exports, __webpack_require__) {
 
 	/**
@@ -7328,7 +7446,7 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 55 */
+/* 56 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
@@ -7456,7 +7574,7 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 56 */
+/* 57 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
@@ -7487,7 +7605,7 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 57 */
+/* 58 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
@@ -7561,7 +7679,8 @@ return /******/ (function(modules) { // webpackBootstrap
 	  this.optionWatcher = new Watcher(
 	    this.vm,
 	    expression,
-	    optionUpdateWatcher
+	    optionUpdateWatcher,
+	    { deep: true }
 	  )
 	  // update with initial value
 	  optionUpdateWatcher(this.optionWatcher.value)
@@ -7658,7 +7777,7 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 58 */
+/* 59 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
@@ -7688,7 +7807,7 @@ return /******/ (function(modules) { // webpackBootstrap
 	}
 
 /***/ },
-/* 59 */
+/* 60 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)
@@ -7783,7 +7902,7 @@ return /******/ (function(modules) { // webpackBootstrap
 	module.exports = arrayMethods
 
 /***/ },
-/* 60 */
+/* 61 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var _ = __webpack_require__(1)

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
dist/vue.min.js


+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "vue",
-  "version": "0.11.3",
+  "version": "0.11.4",
   "author": "Evan You <yyx990803@gmail.com>",
   "license": "MIT",
   "description": "Simple, Fast & Composable MVVM for building interative interfaces",

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä