Evan You пре 12 година
родитељ
комит
e78fb82212
9 измењених фајлова са 93 додато и 66 уклоњено
  1. 20 29
      Gruntfile.js
  2. 2 1
      bower.json
  3. 1 1
      component.json
  4. 26 14
      dist/vue.js
  5. 1 1
      dist/vue.min.js
  6. 5 4
      package.json
  7. 29 0
      tasks/banner.js
  8. 8 14
      tasks/jsc.js
  9. 1 2
      tasks/release.js

+ 20 - 29
Gruntfile.js

@@ -1,7 +1,3 @@
-var fs     = require('fs'),
-    path   = require('path'),
-    semver = require('semver')
-
 module.exports = function( grunt ) {
 module.exports = function( grunt ) {
 
 
     grunt.initConfig({
     grunt.initConfig({
@@ -17,7 +13,7 @@ module.exports = function( grunt ) {
                 src: '.',
                 src: '.',
                 dest: 'dist'
                 dest: 'dist'
             },
             },
-            unit: {
+            test: {
                 options: {
                 options: {
                     name: 'vue.test'
                     name: 'vue.test'
                 },
                 },
@@ -53,13 +49,7 @@ module.exports = function( grunt ) {
             build: {
             build: {
                 options: {
                 options: {
                     compress: true,
                     compress: true,
-                    mangle: true,
-                    banner:
-                        '/*\n' +
-                        ' VueJS v<%= version %>\n' +
-                        ' (c) 2013 Evan You\n' +
-                        ' License: MIT\n' +
-                        '*/\n'
+                    mangle: true
                 },
                 },
                 files: {
                 files: {
                     'dist/vue.min.js': 'dist/vue.js'
                     'dist/vue.min.js': 'dist/vue.js'
@@ -68,51 +58,52 @@ module.exports = function( grunt ) {
         },
         },
 
 
         watch: {
         watch: {
+            options: {
+                nospawn: true
+            },
             dev: {
             dev: {
-                files: ['src/**/*.js', 'component.json'],
+                files: ['src/**/*.js', './component.json'],
                 tasks: ['componentbuild', 'jsc']
                 tasks: ['componentbuild', 'jsc']
             }
             }
         }
         }
 
 
     })
     })
 
 
-    grunt.loadNpmTasks( 'grunt-contrib-watch' )
-    grunt.loadNpmTasks( 'grunt-contrib-jshint' )
-    grunt.loadNpmTasks( 'grunt-contrib-uglify' )
-    grunt.loadNpmTasks( 'grunt-component-build' )
-    grunt.loadNpmTasks( 'grunt-mocha' )
+    // load npm tasks
+    require('load-grunt-tasks')(grunt)
 
 
+    // load custom tasks
     grunt.file.recurse('tasks', function (path) {
     grunt.file.recurse('tasks', function (path) {
         require('./' + path)(grunt)
         require('./' + path)(grunt)
     })
     })
 
 
-    grunt.registerTask( 'build', [
-        'componentbuild:build',
+    grunt.registerTask( 'dist', [
         'uglify',
         'uglify',
+        'banner',
         'size'
         'size'
     ])
     ])
 
 
+    grunt.registerTask( 'build', [
+        'componentbuild:build',
+        'dist'
+    ])
+
     grunt.registerTask( 'unit', [
     grunt.registerTask( 'unit', [
-        'componentbuild:unit',
+        'componentbuild:test',
         'jsc',
         'jsc',
         'mocha'
         'mocha'
     ])
     ])
 
 
-    grunt.registerTask( 'e2e', [
-        'componentbuild:build',
-        'casper'
-    ])
-
     grunt.registerTask( 'test', [
     grunt.registerTask( 'test', [
         'unit',
         'unit',
-        'e2e'
+        'componentbuild:build',
+        'casper'
     ])
     ])
 
 
     grunt.registerTask( 'default', [
     grunt.registerTask( 'default', [
         'jshint',
         'jshint',
         'test',
         'test',
-        'uglify',
-        'size'
+        'dist'
     ])
     ])
     
     
 }
 }

+ 2 - 1
bower.json

@@ -1,12 +1,13 @@
 {
 {
     "name": "vue",
     "name": "vue",
-    "version": "0.7.1",
+    "version": "0.7.2",
     "main": "dist/vue.js",
     "main": "dist/vue.js",
     "ignore": [
     "ignore": [
         ".*",
         ".*",
         "examples",
         "examples",
         "src",
         "src",
         "test",
         "test",
+        "tasks",
         "Gruntfile.js",
         "Gruntfile.js",
         "*.json",
         "*.json",
         "*.md"
         "*.md"

+ 1 - 1
component.json

@@ -1,6 +1,6 @@
 {
 {
     "name": "vue",
     "name": "vue",
-    "version": "0.7.1",
+    "version": "0.7.2",
     "main": "src/main.js",
     "main": "src/main.js",
     "description": "Data-driven View Models",
     "description": "Data-driven View Models",
     "keywords": ["mvvm", "framework", "data binding"],
     "keywords": ["mvvm", "framework", "data binding"],

+ 26 - 14
dist/vue.js

@@ -1,3 +1,8 @@
+/*
+ VueJS v0.7.2
+ (c) 2013 Evan You
+ License: MIT
+*/
 ;(function(){
 ;(function(){
 
 
 /**
 /**
@@ -778,6 +783,9 @@ var utils = module.exports = {
     warn: function() {
     warn: function() {
         if (!config.silent && console) {
         if (!config.silent && console) {
             console.warn(join.call(arguments, ' '))
             console.warn(join.call(arguments, ' '))
+            if (config.debug) {
+                console.trace()
+            }
         }
         }
     },
     },
 
 
@@ -1262,25 +1270,27 @@ CompilerProto.define = function (key, binding) {
     log('    defined root binding: ' + key)
     log('    defined root binding: ' + key)
 
 
     var compiler = this,
     var compiler = this,
-        data = compiler.data,
-        vm = compiler.vm,
-        value = binding.value = data[key] // save the value before redefinening it
-
-    if (utils.typeOf(value) === 'Object' && value.$get) {
-        compiler.markComputed(binding)
-    }
+        data     = compiler.data,
+        vm       = compiler.vm,
+        ob       = data.__observer__
 
 
     if (!(key in data)) {
     if (!(key in data)) {
         data[key] = undefined
         data[key] = undefined
     }
     }
 
 
-    // if the data object is already observed, that means
-    // this binding is created late. we need to observe it now.
-    if (data.__observer__) {
+    // if the data object is already observed, but the key
+    // is not observed, we need to add it to the observed keys.
+    if (ob && !(key in ob.values)) {
         Observer.convert(data, key)
         Observer.convert(data, key)
     }
     }
 
 
+    var value = binding.value = data[key]
+    if (utils.typeOf(value) === 'Object' && value.$get) {
+        compiler.markComputed(binding)
+    }
+
     Object.defineProperty(vm, key, {
     Object.defineProperty(vm, key, {
+        enumerable: !binding.isComputed,
         get: binding.isComputed
         get: binding.isComputed
             ? function () {
             ? function () {
                 return compiler.data[key].$get()
                 return compiler.data[key].$get()
@@ -1821,14 +1831,16 @@ function convert (obj, key) {
     if ((keyPrefix === '$' || keyPrefix === '_') && key !== '$index') {
     if ((keyPrefix === '$' || keyPrefix === '_') && key !== '$index') {
         return
         return
     }
     }
-    var observer  = obj.__observer__,
-        val       = obj[key],
-        values    = observer.values
-    values[key] = val
     // emit set on bind
     // emit set on bind
     // this means when an object is observed it will emit
     // this means when an object is observed it will emit
     // a first batch of set events.
     // a first batch of set events.
+    var observer = obj.__observer__,
+        values   = observer.values,
+        val      = values[key] = obj[key]
     observer.emit('set', key, val)
     observer.emit('set', key, val)
+    if (Array.isArray(val)) {
+        observer.emit('set', key + '.length', val.length)
+    }
     Object.defineProperty(obj, key, {
     Object.defineProperty(obj, key, {
         get: function () {
         get: function () {
             var value = values[key]
             var value = values[key]

Разлика између датотеке није приказан због своје велике величине
+ 1 - 1
dist/vue.min.js


+ 5 - 4
package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "vue",
   "name": "vue",
-  "version": "0.7.1",
+  "version": "0.7.2",
   "author": {
   "author": {
     "name": "Evan You",
     "name": "Evan You",
     "email": "yyx990803@gmail.com",
     "email": "yyx990803@gmail.com",
@@ -25,12 +25,13 @@
     "grunt": "~0.4.2",
     "grunt": "~0.4.2",
     "grunt-contrib-watch": "~0.5.3",
     "grunt-contrib-watch": "~0.5.3",
     "grunt-component-build": "~0.4.1",
     "grunt-component-build": "~0.4.1",
-    "grunt-contrib-jshint": "~0.7.1",
+    "grunt-contrib-jshint": "~0.8.0",
     "grunt-contrib-uglify": "~0.2.7",
     "grunt-contrib-uglify": "~0.2.7",
     "grunt-mocha": "~0.4.6",
     "grunt-mocha": "~0.4.6",
     "jscoverage": "~0.3.8",
     "jscoverage": "~0.3.8",
-    "jshint-stylish": "0.1.3",
+    "jshint-stylish": "~0.1.4",
     "semver": "~2.2.1",
     "semver": "~2.2.1",
-    "shell-task": "~0.1.1"
+    "shell-task": "~0.1.1",
+    "load-grunt-tasks": "~0.2.1"
   }
   }
 }
 }

+ 29 - 0
tasks/banner.js

@@ -0,0 +1,29 @@
+var fs = require('fs')
+
+var bannerText =
+    '/*\n' +
+    ' VueJS v<%= version %>\n' +
+    ' (c) 2013 Evan You\n' +
+    ' License: MIT\n' +
+    '*/\n'
+
+module.exports = function (grunt) {
+
+    grunt.registerTask('banner', function () {
+        var done = this.async(),
+            banner = new Buffer(grunt.template.process(bannerText)),
+            written = 0
+        addBanner('dist/vue.js', banner, next)
+        addBanner('dist/vue.min.js', banner, next)
+        function next () {
+            if (written) return done()
+            written++
+        }
+    })
+
+    function addBanner (file, banner, next) {
+        fs.readFile(file, function (err, buf) {
+            fs.writeFile(file, Buffer.concat([banner, buf]), next)
+        })
+    }
+}

+ 8 - 14
tasks/jsc.js

@@ -1,19 +1,13 @@
-var fs = require('fs')
+var fs = require('fs'),
+    jsc = require('jscoverage')
 
 
 module.exports = function (grunt) {
 module.exports = function (grunt) {
     grunt.registerTask( 'jsc', function () {
     grunt.registerTask( 'jsc', function () {
-        var done = this.async()
-        grunt.util.spawn({
-            cmd: './node_modules/jscoverage/bin/jscoverage',
-            args: ['./test/vue.test.js'],
-            opts: {
-                stdio: 'inherit'
-            }
-        }, function (err, res) {
-            if (err) grunt.fail.fatal(res.stdout || 'Jscoverage instrumentation failed')
-            grunt.log.writeln(res.stdout)
-            fs.unlinkSync('./test/vue.test.js')
-            done()
-        })
+        jsc.processFile(
+            './test/vue.test.js',
+            './test/vue.test-cov.js',
+            null, {}
+        )
+        fs.unlink('./test/vue.test.js', this.async())
     })
     })
 }
 }

+ 1 - 2
tasks/release.js

@@ -52,8 +52,7 @@ module.exports = function (grunt) {
                     'jshint',
                     'jshint',
                     'test',
                     'test',
                     'version:' + next,
                     'version:' + next,
-                    'uglify',
-                    'size',
+                    'dist',
                     'git:' + next
                     'git:' + next
                 ])
                 ])
             }
             }

Неке датотеке нису приказане због велике количине промена