You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by zs...@apache.org on 2017/04/10 03:24:09 UTC

[01/10] incubator-weex git commit: Merge remote-tracking branch 'upstream/0.12-dev' into 0.12-dev

Repository: incubator-weex
Updated Branches:
  refs/heads/0.12-dev 35a3f8c21 -> 5b1126a56


Merge remote-tracking branch 'upstream/0.12-dev' into 0.12-dev


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/8d2411e4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/8d2411e4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/8d2411e4

Branch: refs/heads/0.12-dev
Commit: 8d2411e42fbe85047c05053fd515e184fce538d0
Parents: 20f0dc1 e1be952
Author: \u9690\u98ce <cx...@apache.org>
Authored: Mon Mar 27 15:36:15 2017 +0800
Committer: \u9690\u98ce <cx...@apache.org>
Committed: Mon Mar 27 15:36:15 2017 +0800

----------------------------------------------------------------------
 CHANGELOG.md                                    |    7 +
 .../java/com/taobao/weex/WXSDKInstance.java     |    6 +-
 .../main/java/com/taobao/weex/WXSDKManager.java |   10 +
 .../taobao/weex/adapter/DefaultUriAdapter.java  |    8 +-
 .../com/taobao/weex/bridge/WXBridgeManager.java |    3 +-
 .../com/taobao/weex/dom/ApplyStyleConsumer.java |  245 ++++
 .../java/com/taobao/weex/dom/DOMAction.java     |  216 +++
 .../com/taobao/weex/dom/DOMActionContext.java   |  255 ++++
 .../taobao/weex/dom/DOMActionContextImpl.java   |  620 +++++++++
 .../java/com/taobao/weex/dom/RenderAction.java  |  215 +++
 .../taobao/weex/dom/RenderActionContext.java    |  218 +++
 .../com/taobao/weex/dom/RenderActionTask.java   |  227 ++++
 .../java/com/taobao/weex/dom/WXDomHandler.java  |   82 +-
 .../java/com/taobao/weex/dom/WXDomManager.java  |  300 +----
 .../java/com/taobao/weex/dom/WXDomModule.java   |  439 +-----
 .../java/com/taobao/weex/dom/WXDomObject.java   |    4 +-
 .../com/taobao/weex/dom/WXDomStatement.java     | 1272 ------------------
 .../dom/action/AbstractAddElementAction.java    |  313 +++++
 .../dom/action/AbstractLayoutFinishAction.java  |  240 ++++
 .../java/com/taobao/weex/dom/action/Action.java |  212 +++
 .../com/taobao/weex/dom/action/Actions.java     |  350 +++++
 .../weex/dom/action/AddElementAction.java       |  295 ++++
 .../taobao/weex/dom/action/AddEventAction.java  |  262 ++++
 .../taobao/weex/dom/action/AddRuleAction.java   |  254 ++++
 .../taobao/weex/dom/action/AnimationAction.java |  463 +++++++
 .../weex/dom/action/CreateBodyAction.java       |  302 +++++
 .../weex/dom/action/CreateFinishAction.java     |  224 +++
 .../weex/dom/action/GetComponentRectAction.java |  299 ++++
 .../weex/dom/action/InvokeMethodAction.java     |  236 ++++
 .../weex/dom/action/MoveElementAction.java      |  281 ++++
 .../weex/dom/action/RefreshFinishAction.java    |  221 +++
 .../weex/dom/action/RemoveElementAction.java    |  286 ++++
 .../weex/dom/action/RemoveEventAction.java      |  264 ++++
 .../weex/dom/action/ScrollToElementAction.java  |  257 ++++
 .../weex/dom/action/UpdateAttributeAction.java  |  263 ++++
 .../weex/dom/action/UpdateFinishAction.java     |  237 ++++
 .../weex/dom/action/UpdateStyleAction.java      |  298 ++++
 .../taobao/weex/ui/RenderActionContextImpl.java |  299 ++++
 .../com/taobao/weex/ui/WXRenderManager.java     |  191 +--
 .../com/taobao/weex/ui/WXRenderStatement.java   |  556 --------
 .../ui/animation/DimensionUpdateListener.java   |    6 +-
 .../weex/ui/animation/WXAnimationBean.java      |    5 +-
 .../weex/ui/animation/WXAnimationModule.java    |  199 +--
 .../weex/ui/component/NestedContainer.java      |    2 +
 .../taobao/weex/ui/component/WXComponent.java   |   12 +-
 .../com/taobao/weex/ui/component/WXEmbed.java   |    6 +
 .../java/com/taobao/weex/WXSDKManagerTest.java  |    2 +-
 .../com/taobao/weex/dom/WXDomStatementTest.java |  119 +-
 .../com/taobao/weex/dom/action/TestActions.java |   59 +
 .../taobao/weex/ui/WXRenderStatementTest.java   |    4 +-
 .../ui/animation/WXAnimationModuleTest.java     |   18 +-
 build/webpack.ci.config.js                      |   53 +
 build/webpack.ci.web.config.js                  |   68 +
 build/webpack.deprecatedmacacatest.config.js    |   53 +
 build/webpack.macacatest.config.js              |   53 -
 circle.yml                                      |   37 -
 .../WeexSDK/Sources/Component/WXEditComponent.m |   30 +-
 package.json                                    |   10 +-
 test/.gitignore                                 |    2 +
 test/pages/components/scroller-fixed.vue        |   64 +
 test/pages/components/scroller-fixed.we         |   62 -
 test/pages/components/textarea-maxlength.vue    |   50 +
 test/pages/dom-operation.vue                    |   37 +
 test/pages/dom-operation.we                     |   32 -
 test/pages/image-onload.vue                     |   21 +
 test/pages/image-onload.we                      |   19 -
 test/pages/index.vue                            |   30 +
 test/pages/index.we                             |   27 -
 test/pages/list-scroll.vue                      |   34 +
 test/pages/list-scroll.we                       |   31 -
 test/pages/scroller-scroll.vue                  |   33 +
 test/pages/scroller-scroll.we                   |   31 -
 test/run.sh                                     |   10 +-
 test/scripts/components/image-onload.test.js    |    2 +-
 test/scripts/components/scroll-event.test.js    |    4 +-
 test/scripts/components/scroller-fixed.test.js  |    2 +-
 .../components/textarea-maxlength.test.js       |   36 +
 test/scripts/dom.test.js                        |   11 +-
 test/scripts/index.test.js                      |    2 +-
 test/scripts/util.js                            |   24 +
 test/serve.sh                                   |    6 +-
 81 files changed, 8742 insertions(+), 3294 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8d2411e4/build/webpack.deprecatedmacacatest.config.js
----------------------------------------------------------------------
diff --cc build/webpack.deprecatedmacacatest.config.js
index 0000000,ba154a8..30d5359
mode 000000,100644..100644
--- a/build/webpack.deprecatedmacacatest.config.js
+++ b/build/webpack.deprecatedmacacatest.config.js
@@@ -1,0 -1,57 +1,53 @@@
+ var path = require('path');
+ var fs = require('fs');
+ var webpack = require('webpack');
+ 
+ var entry = {};
+ var bannerExcludeFiles = [];
+ 
+ function walk(dir) {
+   dir = dir || '.'
+   var directory = path.join(__dirname, '../test/pages', dir);
+   fs.readdirSync(directory)
+     .forEach(function(file) {
+       var fullpath = path.join(directory, file);
+       var stat = fs.statSync(fullpath);
+       var extname = path.extname(fullpath);
+       if (stat.isFile() && (extname === '.we' || extname === '.vue')) {
+         var name = path.join('test', 'build', dir, path.basename(file, extname));
+         entry[name] = fullpath + '?entry=true';
+         if (extname === '.we') {
+           bannerExcludeFiles.push(name + '.js')
+         }
+       } else if (stat.isDirectory() && file !== 'build' && file !== 'include') {
+         var subdir = path.join(dir, file);
+         walk(subdir);
+       }
+     });
+ }
+ 
+ walk();
+ 
+ var banner = '// { "framework": "Vue" }\n'
+ 
+ var bannerPlugin = new webpack.BannerPlugin(banner, {
+   raw: true,
+   exclude: bannerExcludeFiles
+ })
+ 
+ module.exports = {
+   entry: entry,
+   output : {
+     path: '.',
+     filename: '[name].js'
+   },
+   module: {
+     loaders: [
+       {
 -        test: /\.we(\?[^?]+)?$/,
++        test: /\.(we|vue)(\?[^?]+)?$/,
+         loader: 'weex'
 -      },
 -      {
 -        test: /\.vue(\?[^?]+)?$/,
 -        loader: 'weex-vue-loader'
+       }
+     ]
+   },
+   plugins: [bannerPlugin]
+ }


[09/10] incubator-weex git commit: * [test] fix recycler test problems

Posted by zs...@apache.org.
* [test] fix recycler test problems


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/982da124
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/982da124
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/982da124

Branch: refs/heads/0.12-dev
Commit: 982da1245e64f518680b91356abf30a45005287d
Parents: 53b61da
Author: \u9690\u98ce <cx...@apache.org>
Authored: Fri Apr 7 11:58:24 2017 +0800
Committer: \u9690\u98ce <cx...@apache.org>
Committed: Fri Apr 7 11:58:24 2017 +0800

----------------------------------------------------------------------
 .../Component/Recycler/WXRecyclerComponent.m    |  1 +
 .../WeexSDK/Sources/Component/WXListComponent.m |  2 ++
 test/pages/components/recycler.vue              | 12 ++++------
 test/scripts/components/recycler.test.js        | 25 ++++++++++++--------
 4 files changed, 22 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/982da124/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m
index 842fa1f..92daf1c 100644
--- a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m
@@ -348,6 +348,7 @@ typedef enum : NSUInteger {
     }
     
     [cellView.contentView addSubview:contentView];
+    [cellView setAccessibilityIdentifier:contentView.accessibilityIdentifier];
     
     return cellView;
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/982da124/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
index c598a3d..8037799 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
@@ -610,6 +610,8 @@
     
     [cellView.contentView addSubview:cell.view];
     
+    [cellView setAccessibilityIdentifier:cell.view.accessibilityIdentifier];
+    
     WXLogDebug(@"Created cell:%@ view:%@ cellView:%@ at indexPath:%@", cell.ref, cell.view, cellView, indexPath);
     return cellView;
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/982da124/test/pages/components/recycler.vue
----------------------------------------------------------------------
diff --git a/test/pages/components/recycler.vue b/test/pages/components/recycler.vue
index 7a55136..ae52e7a 100644
--- a/test/pages/components/recycler.vue
+++ b/test/pages/components/recycler.vue
@@ -42,7 +42,7 @@
         <text class="stickyText">Content Offset:{{contentOffset}}</text>
       </div>
     </header>
-    <cell v-for="(item, index) in items" :key="item.src" class="cell" :test-id="item.testid" ref="index">
+    <cell v-for="(item, index) in items" :key="item.src" class="cell" :test-id="'cell' + index" ref="index">
       <div class="item" @click="onItemclick(item.behaviour, index)" @appear="itemAppear(item.src)" @disappear="itemDisappear(item.src)">
         <text v-if="item.name" class="itemName">{{item.name}}</text>
         <image class="itemPhoto" :src="item.src"></image>
@@ -304,14 +304,10 @@
       ]
 
       let repeatItems = [];
-      // for (let i = 0; i < 3; i++) {
+      for (let i = 0; i < 3; i++) {
         repeatItems.push(...items)
-      // }
-      
-       for(let i =0;i< repeatItems.length;i++ ){
-           repeatItems[i].testid = 'cell'+i;
-           console.log(repeatItems[i].testid)
-        }
+      }
+
       return {
         padding: 0,
         refreshing: false,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/982da124/test/scripts/components/recycler.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/components/recycler.test.js b/test/scripts/components/recycler.test.js
index ba75fa8..21e8f79 100644
--- a/test/scripts/components/recycler.test.js
+++ b/test/scripts/components/recycler.test.js
@@ -25,7 +25,7 @@ const isAndroid = platform === 'android';
 // const footerPath = '//recycler[1]/div[1]'
 
 const isApproximate = (x, y) =>  {
-  return Math.abs(x - y) <= isAndroid ? 1 : 0.5
+  return Math.abs(x - y) <= (isAndroid ? 1 : 1.5)
 }
 
 // if (isAndroid) {
@@ -130,7 +130,7 @@ describe('recycler', function () {
 
   it('#2 test column count', () => {
     return driver
-   .elementById('cell3')
+   .elementById('cell2')
     .click()
     .elementById('cell0')
     .getRect()
@@ -307,14 +307,14 @@ describe('recycler', function () {
 
   it('#9 test moving cell', () => {
     return driver
-    .elementById('cell28')
+    .elementById('cell29')
     .click()
     .elementById('fixed1')
     .click()
-    .elementById('cell28')
+    .elementById('cell27')
     .getRect()
     .then((rect)=>{
-      console.log(`cell 28 rect after moving cell 29 to 1:${JSON.stringify(rect)}`)
+      console.log(`cell 28 rect after moving cell 30 to 1:${JSON.stringify(rect)}`)
       assert.isOk(isApproximate(rect.x, 381 * scaleFactor))
       assert.isOk(isApproximate(rect.y, screenHeight - 94 * scaleFactor - rect.height))
       assert.isOk(isApproximate(rect.width, 369 * scaleFactor))
@@ -323,7 +323,7 @@ describe('recycler', function () {
 
   it('#10 test recycler padding', () => {
     return driver
-    .elementById('cell27')
+    .elementById('cell26')
     .click()
     .elementById('fixed1')
     .click()
@@ -348,14 +348,14 @@ describe('recycler', function () {
     .elementById('cell27')
     .getRect()
     .then((rect)=>{
-      console.log(`cell 28 rect after setting padding to 12:${JSON.stringify(rect)}`)
+      console.log(`cell 27 rect after setting padding to 12:${JSON.stringify(rect)}`)
       assert.isOk(isApproximate(rect.x, 12 * scaleFactor))
       assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
     })
     .elementById('cell28')
     .getRect()
     .then((rect)=>{
-      console.log(`cell 29 rect after setting padding to 12:${JSON.stringify(rect)}`)
+      console.log(`cell 28 rect after setting padding to 12:${JSON.stringify(rect)}`)
       assert.isOk(isApproximate(rect.x, 381 * scaleFactor))
       assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
     })
@@ -366,10 +366,15 @@ describe('recycler', function () {
   it('#11 test onscroll', () => {
     let originContentOffset = 0
     return driver
-     .elementById('cell28')
+    .elementById('cell28')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 29 rect:${JSON.stringify(rect)}`)
+    })
+    .elementById('cell28')
     .click()
     .elementById('stickyText1')
-    .text()
+    .text() 
     .then(text => {
       console.log(text)
       originContentOffset = Number.parseInt(text.replace('Content Offset:-',''))


[07/10] incubator-weex git commit: * [tc] recycler tc

Posted by zs...@apache.org.
* [tc] recycler tc


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/db99d41e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/db99d41e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/db99d41e

Branch: refs/heads/0.12-dev
Commit: db99d41eec8e5169df0e5a976f91294e420a1e02
Parents: b0a11a2
Author: zshshr <zh...@gmail.com>
Authored: Thu Apr 6 19:17:21 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Thu Apr 6 19:17:21 2017 +0800

----------------------------------------------------------------------
 test/pages/components/recycler.vue       |  39 ++++----
 test/scripts/components/recycler.test.js | 136 +++++++++++++-------------
 2 files changed, 90 insertions(+), 85 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/db99d41e/test/pages/components/recycler.vue
----------------------------------------------------------------------
diff --git a/test/pages/components/recycler.vue b/test/pages/components/recycler.vue
index ce4f21f..7a55136 100644
--- a/test/pages/components/recycler.vue
+++ b/test/pages/components/recycler.vue
@@ -1,5 +1,5 @@
 <template>
-  <waterfall class="page" ref="waterfall"
+  <waterfall class="page" ref="waterfall" test-id="waterfall"
   v-bind:style="{padding:padding}"
   :column-width="columnWidth" :column-count="columnCount" :column-gap="columnGap"
   :show-scrollbar="showScrollbar" :scrollable="scrollable"
@@ -9,7 +9,7 @@
       <loading-indicator class="indicator"></loading-indicator>
       <text class="refreshText">{{refreshText}}</text>
   </refresh>-->
-    <header class="header" ref="header" v-if="showHeader">
+    <header class="header" ref="header" test-id="header1" v-if="showHeader">
       <div class="banner">
        <image class="absolute" src="https://gw.alicdn.com/tps/TB1ESN1PFXXXXX1apXXXXXXXXXX-1000-600.jpg" resize="cover"></image>
        <div class="bannerInfo">
@@ -24,9 +24,9 @@
         </div>
       </div>
     </header>
-    <header class="stickyHeader" >
+    <header class="stickyHeader" test-id="header2">
       <div v-if="stickyHeaderType === 'none'" class="stickyWrapper">
-        <text class="stickyText">Sticky Header</text>
+        <text class="stickyText" test-id="stickyText1">Sticky Header</text>
       </div>
       <div v-if="stickyHeaderType === 'appear'" class="stickyWrapper">
         <div class="stickyTextImageWrapper">
@@ -42,7 +42,7 @@
         <text class="stickyText">Content Offset:{{contentOffset}}</text>
       </div>
     </header>
-    <cell v-for="(item, index) in items" :key="item.src" class="cell" ref="index">
+    <cell v-for="(item, index) in items" :key="item.src" class="cell" :test-id="item.testid" ref="index">
       <div class="item" @click="onItemclick(item.behaviour, index)" @appear="itemAppear(item.src)" @disappear="itemDisappear(item.src)">
         <text v-if="item.name" class="itemName">{{item.name}}</text>
         <image class="itemPhoto" :src="item.src"></image>
@@ -50,10 +50,10 @@
         <text v-if="item.behaviourName" class="itemClickBehaviour"> {{item.behaviourName}}</text>
       </div>
     </cell>
-    <header class="footer" ref="footer">
+    <header class="footer" ref="footer" test-id="footer1" >
       <text class="stickyText">Footer</text>
     </header>
-    <div ref="fixed" class="fixedItem" @click="scrollToNext">
+    <div ref="fixed" class="fixedItem" test-id="fixed1" @click="scrollToNext">
       <text class="fixedText">bot</text>
     </div>
   </waterfall>
@@ -244,7 +244,7 @@
           name: 'Thomas Carlyle',
           desc:'Genius only means hard-working all one\'s life',
           behaviourName: 'Change width',
-          behaviour: 'changeColumnWidth',
+          behaviour: 'changeColumnWidth'
         },
         {
           src:'https://gw.alicdn.com/tps/TB1Hv1JPFXXXXa3XXXXXXXXXXXX-370-370.jpg',
@@ -263,13 +263,13 @@
           name:'Addison',
           desc:'Cease to struggle and you cease to live',
           behaviourName: 'Show scrollbar',
-          behaviour: 'showScrollbar',
+          behaviour: 'showScrollbar'
         },
         {
           src:'https://gw.alicdn.com/tps/TB1ACygPFXXXXXwXVXXXXXXXXXX-370-370.jpg',
           desc:'A strong man will struggle with the storms of fate',
           behaviourName: 'Listen appear',
-          behaviour: 'listenAppear',
+          behaviour: 'listenAppear'
         },
         {
           src:'https://gw.alicdn.com/tps/TB1IGShPFXXXXaqXVXXXXXXXXXX-370-370.jpg',
@@ -281,32 +281,37 @@
         {
           src:'https://gw.alicdn.com/tps/TB1xU93PFXXXXXHaXXXXXXXXXXX-240-240.jpg',
           behaviourName: 'waterfall padding',
-          behaviour: 'setPadding',
+          behaviour: 'setPadding'
         },
         {
           src:'https://gw.alicdn.com/tps/TB19hu0PFXXXXaXaXXXXXXXXXXX-240-240.jpg',
           name:'Balzac',
           desc:'There is no such thing as a great talent without great will - power',
           behaviourName: 'listen scroll',
-          behaviour: 'listenScroll',
+          behaviour: 'listenScroll'
         },
         {
           src:'https://gw.alicdn.com/tps/TB1ux2vPFXXXXbkXXXXXXXXXXXX-240-240.jpg',
           behaviourName: 'Remove cell',
-          behaviour: 'removeCell',
+          behaviour: 'removeCell'
         },
         {
           src:'https://gw.alicdn.com/tps/TB1tCCWPFXXXXa7aXXXXXXXXXXX-240-240.jpg',
           behaviourName: 'Move cell',
-          behaviour: 'moveCell',
+          behaviour: 'moveCell'
+       
         }
       ]
 
       let repeatItems = [];
-      for (let i = 0; i < 3; i++) {
+      // for (let i = 0; i < 3; i++) {
         repeatItems.push(...items)
-      }
-
+      // }
+      
+       for(let i =0;i< repeatItems.length;i++ ){
+           repeatItems[i].testid = 'cell'+i;
+           console.log(repeatItems[i].testid)
+        }
       return {
         padding: 0,
         refreshing: false,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/db99d41e/test/scripts/components/recycler.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/components/recycler.test.js b/test/scripts/components/recycler.test.js
index 19f0ad3..6bc67ed 100644
--- a/test/scripts/components/recycler.test.js
+++ b/test/scripts/components/recycler.test.js
@@ -11,36 +11,36 @@ var util = require("../util.js");
 const platform = process.env.platform.toLowerCase() || 'android';
 const isAndroid = platform === 'android';
 
-const fixedPath = '//div[1]'
-const header1Path = '//recycler[1]/div[1]/'
-const header2Path = '//recycler[1]/div[2]/'
-const cell1Path = isAndroid ? '//recycler[1]/div[3]/' : '//recycler[1]/cell[1]/'
-const cell2Path = isAndroid ? '//recycler[1]/div[4]/' : '//recycler[1]/cell[2]/'
-const cell3Path = isAndroid ? '//recycler[1]/div[5]/' : '//recycler[1]/cell[3]/'
-const cell4Path = isAndroid ? '//recycler[1]/div[6]/' : '//recycler[1]/cell[4]/'
-const cell27Path = isAndroid ? '//recycler[1]/div[29]/' : '//recycler[1]/cell[27]/'
-const cell28Path = isAndroid ? '//recycler[1]/div[30]/' : '//recycler[1]/cell[28]/'
-const cell29Path = isAndroid ? '//recycler[1]/div[31]/' : '//recycler[1]/cell[29]/'
-const cell30Path = isAndroid ? '//recycler[1]/div[32]/' : '//recycler[1]/cell[30]/'
-const footerPath = '//recycler[1]/div[1]'
+// const fixedPath = '//div[1]'
+// const header1Path = '//recycler[1]/div[1]/'
+// const header2Path = '//recycler[1]/div[2]/'
+// const cell1Path = isAndroid ? '//recycler[1]/div[3]/' : '//recycler[1]/cell[1]/'
+// const cell2Path = isAndroid ? '//recycler[1]/div[4]/' : '//recycler[1]/cell[2]/'
+// const cell3Path = isAndroid ? '//recycler[1]/div[5]/' : '//recycler[1]/cell[3]/'
+// const cell4Path = isAndroid ? '//recycler[1]/div[6]/' : '//recycler[1]/cell[4]/'
+// const cell27Path = isAndroid ? '//recycler[1]/div[29]/' : '//recycler[1]/cell[27]/'
+// const cell28Path = isAndroid ? '//recycler[1]/div[30]/' : '//recycler[1]/cell[28]/'
+// const cell29Path = isAndroid ? '//recycler[1]/div[31]/' : '//recycler[1]/cell[29]/'
+// const cell30Path = isAndroid ? '//recycler[1]/div[32]/' : '//recycler[1]/cell[30]/'
+// const footerPath = '//recycler[1]/div[1]'
 
 const isApproximate = (x, y) =>  {
   return Math.abs(x - y) <= 1
 }
 
-if (isAndroid) {
-  return;
-}
+// if (isAndroid) {
+//   return;
+// }
 
 describe('recycler', function () {
   this.timeout(util.getTimeoutMills())
   const driver = util.createDriver(wd)
 
   before(function () {
-    console.log('wxpage://' + util.getDeviceHost() +'/components/recycler.js')
+    console.log(util.getPage('/components/recycler.js'))
     return util.init(driver)
-      .get('wxpage://' + util.getDeviceHost() +'/components/recycler.js')
-      .waitForElementByXPath('//recycler[1]',util.getGETActionWaitTimeMills(),1000)
+      .get(util.getPage('/components/recycler.js'))
+      .waitForElementById('waterfall',util.getGETActionWaitTimeMills(),1000)
   });
 
   after(function () {
@@ -64,7 +64,7 @@ describe('recycler', function () {
       console.log(`scale factor:${scaleFactor}`)
     })
     .sleep(2000)
-    .elementByXPath('//recycler[1]')
+    .elementById('waterfall')
     .getRect()
     .then((rect)=>{
       console.log(`recycler rect:${JSON.stringify(rect)}`)
@@ -73,7 +73,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.width, recyclerWidth))
       assert.isOk(isApproximate(rect.height, screenHeight - navBarHeight))
     })
-    .elementByXPath(header1Path)
+    .elementById('header1')
     .getRect()
     .then((rect)=>{
       console.log(`header 1 rect:${JSON.stringify(rect)}`)
@@ -82,7 +82,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.width, recyclerWidth))
       assert.isOk(isApproximate(rect.height, 377 * scaleFactor))
     })
-    .elementByXPath(header2Path)
+    .elementById('header2')
     .getRect()
     .then((rect)=>{
       console.log(`header 2 rect:${JSON.stringify(rect)}`)
@@ -91,7 +91,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.width, recyclerWidth))
       assert.isOk(isApproximate(rect.height, 94 * scaleFactor))
     })
-    .elementByXPath(cell1Path)
+    .elementById('cell0')
     .getRect()
     .then((rect)=>{
       console.log(`cell 1 rect:${JSON.stringify(rect)}`)
@@ -100,7 +100,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
       assert.isOk(isApproximate(rect.width, 369 * scaleFactor))
     })
-    .elementByXPath(cell2Path)
+    .elementById('cell1')
     .getRect()
     .then((rect)=>{
       console.log(`cell 2 rect:${JSON.stringify(rect)}`)
@@ -109,7 +109,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
       assert.isOk(isApproximate(rect.width, 369 * scaleFactor))
     })
-    .elementByXPath(cell3Path)
+    .elementById('cell2')
     .getRect()
     .then((rect)=>{
       console.log(`cell 3 rect:${JSON.stringify(rect)}`)
@@ -117,7 +117,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell2Height))
       assert.isOk(isApproximate(rect.width, 369 * scaleFactor))
     })
-    .elementByXPath(cell4Path)
+    .elementById('cell3')
     .getRect()
     .then((rect)=>{
       console.log(`cell 4 rect:${JSON.stringify(rect)}`)
@@ -129,9 +129,9 @@ describe('recycler', function () {
 
   it('#2 test column count', () => {
     return driver
-    .elementByXPath(cell3Path)
+   .elementById('cell3')
     .click()
-    .elementByXPath(cell1Path)
+    .elementById('cell0')
     .getRect()
     .then((rect)=>{
       console.log(`cell 1 rect after changing column count to 3:${JSON.stringify(rect)}`)
@@ -139,7 +139,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
       assert.isOk(isApproximate(rect.width, 242 * scaleFactor))
     })
-    .elementByXPath(cell2Path)
+    .elementById('cell1')
     .getRect()
     .then((rect)=>{
       console.log(`cell 2 rect after changing column count to 3:${JSON.stringify(rect)}`)
@@ -148,7 +148,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
       assert.isOk(isApproximate(rect.width, 242 * scaleFactor))
     })
-    .elementByXPath(cell3Path)
+   .elementById('cell2')
     .getRect()
     .then((rect)=>{
       console.log(`cell 3 rect after changing column count to 3:${JSON.stringify(rect)}`)
@@ -156,7 +156,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
       assert.isOk(isApproximate(rect.width, 242 * scaleFactor))
     })
-    .elementByXPath(cell4Path)
+   .elementById('cell3')
     .getRect()
     .then((rect)=>{
       console.log(`cell 4 rect after changing column count to 3:${JSON.stringify(rect)}`)
@@ -164,15 +164,15 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell2Height))
       assert.isOk(isApproximate(rect.width, 242 * scaleFactor))
     })
-    .elementByXPath(cell3Path)
+    .elementById('cell2')
     .click()
   })
 
   it('#3 test column gap', () => {
     return driver
-    .elementByXPath(cell2Path)
+    .elementById('cell1')
     .click()
-    .elementByXPath(cell1Path)
+    .elementById('cell0')
     .getRect()
     .then((rect)=>{
       console.log(`cell 1 rect after changing column gap to normal:${JSON.stringify(rect)}`)
@@ -181,7 +181,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
       assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
     })
-    .elementByXPath(cell2Path)
+     .elementById('cell1')
     .getRect()
     .then((rect)=>{
       console.log(`cell 2 rect after changing column gap to normal:${JSON.stringify(rect)}`)
@@ -190,7 +190,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
       assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
     })
-    .elementByXPath(cell3Path)
+    .elementById('cell2')
     .getRect()
     .then((rect)=>{
       console.log(`cell 3 rect after changing column gap to normal:${JSON.stringify(rect)}`)
@@ -198,7 +198,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell2Height))
       assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
     })
-    .elementByXPath(cell4Path)
+     .elementById('cell3')
     .getRect()
     .then((rect)=>{
       console.log(`cell 4 rect after changing column gap to normal:${JSON.stringify(rect)}`)
@@ -206,15 +206,15 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell1Height))
       assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
     })
-    .elementByXPath(cell2Path)
+    .elementById('cell1')
     .click()
   })
 
   it('#4 test column width', () => {
     return driver
-    .elementByXPath(cell1Path)
+     .elementById('cell0')
     .click()
-    .elementByXPath(cell1Path)
+    .elementById('cell0')
     .getRect()
     .then((rect)=>{
       console.log(`cell 1 rect after changing column width to 600:${JSON.stringify(rect)}`)
@@ -223,7 +223,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
       assert.isOk(isApproximate(rect.width, recyclerWidth))
     })
-    .elementByXPath(cell2Path)
+    .elementById('cell1')
     .getRect()
     .then((rect)=>{
       console.log(`cell 2 rect after changing column width to 600:${JSON.stringify(rect)}`)
@@ -232,15 +232,15 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell1Height))
       assert.isOk(isApproximate(rect.width, recyclerWidth))
     })
-    .elementByXPath(cell1Path)
+    .elementById('cell0')
     .click()
   })
 
   it('#5 test deleting header', () => {
     return driver
-    .elementByXPath(header2Path)
+    .elementById('header2')
     .click()
-    .elementByXPath(header1Path)
+     .elementById('header1')
     .getRect()
     .then((rect)=>{
       console.log(`header 2 rect after deleting header 1:${JSON.stringify(rect)}`)
@@ -248,16 +248,16 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.y, navBarHeight))
       assert.isOk(isApproximate(rect.width, recyclerWidth))
     })
-    .elementByXPath(header2Path)
+   .elementById('header2')
     .click()
   })
 
   it('#6 test footer', () => {
     return driver
-    .elementByXPath(fixedPath)
+   .elementById('fixed1')
     .click()
     .sleep(500)
-    .elementByXPath(footerPath)
+    .elementById('footer1')
     .getRect()
     .then((rect)=>{
       console.log(`footer rect:${JSON.stringify(rect)}`)
@@ -269,8 +269,8 @@ describe('recycler', function () {
   })
 
   it('#7 test sticky and fixed', () => {
-    return driver
-    .elementByXPath(fixedPath)
+    return driver  
+   .elementById('fixed1')
     .getRect()
     .then((rect)=>{
       console.log(`fixed rect:${JSON.stringify(rect)}`)
@@ -279,7 +279,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.width, 78 * scaleFactor))
       assert.isOk(isApproximate(rect.height, 78 * scaleFactor))
     })
-    .elementByXPath(header2Path)
+    .elementById('header2')
     .getRect()
     .then((rect)=>{
       console.log(`sticky header rect:${JSON.stringify(rect)}`)
@@ -292,9 +292,9 @@ describe('recycler', function () {
 
   it('#8 test removing cell', () => {
     return driver
-    .elementByXPath(cell29Path)
+    .elementById('cell28')
     .click()
-    .elementByXPath(cell28Path)
+    .elementById('cell27')
     .getRect()
     .then((rect)=>{
       console.log(`cell 28 rect after removing cell 29:${JSON.stringify(rect)}`)
@@ -306,11 +306,11 @@ describe('recycler', function () {
 
   it('#9 test moving cell', () => {
     return driver
-    .elementByXPath(cell29Path)
+    .elementById('cell28')
     .click()
-    .elementByXPath(fixedPath)
+    .elementById('fixed1')
     .click()
-    .elementByXPath(cell29Path)
+    .elementById('cell28')
     .getRect()
     .then((rect)=>{
       console.log(`cell 28 rect after moving cell 29 to 1:${JSON.stringify(rect)}`)
@@ -322,11 +322,11 @@ describe('recycler', function () {
 
   it('#10 test recycler padding', () => {
     return driver
-    .elementByXPath(cell28Path)
+    .elementById('cell27')
     .click()
-    .elementByXPath(fixedPath)
+    .elementById('fixed1')
     .click()
-    .elementByXPath(header2Path)
+    .elementById('header2')
     .getRect()
     .then((rect)=>{
       console.log(`sticking header rect after setting padding to 12:${JSON.stringify(rect)}`)
@@ -335,7 +335,7 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.width, recyclerWidth - 24 * scaleFactor))
       assert.isOk(isApproximate(rect.height, 94 * scaleFactor))
     })
-    .elementByXPath(footerPath)
+    .elementById('footer1')
     .getRect()
     .then((rect)=>{
       console.log(`footer rect after setting padding to 12:${JSON.stringify(rect)}`)
@@ -344,30 +344,30 @@ describe('recycler', function () {
       assert.isOk(isApproximate(rect.width, recyclerWidth - 24 * scaleFactor))
       assert.isOk(isApproximate(rect.height, 94 * scaleFactor))
     })
-    .elementByXPath(cell28Path)
+    .elementById('cell27')
     .getRect()
     .then((rect)=>{
       console.log(`cell 28 rect after setting padding to 12:${JSON.stringify(rect)}`)
       assert.isOk(isApproximate(rect.x, 12 * scaleFactor))
       assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
     })
-    .elementByXPath(cell29Path)
+    .elementById('cell28')
     .getRect()
     .then((rect)=>{
       console.log(`cell 29 rect after setting padding to 12:${JSON.stringify(rect)}`)
       assert.isOk(isApproximate(rect.x, 381 * scaleFactor))
       assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
     })
-    .elementByXPath(cell28Path)
+     .elementById('cell27')
     .click()
   })
 
   it('#11 test onscroll', () => {
     let originContentOffset = 0
     return driver
-    .elementByXPath(cell29Path)
+     .elementById('cell28')
     .click()
-    .elementByXPath(header2Path + '/div[1]/div[1]/text[1]')
+    .elementById('stickyText1')
     .text()
     .then(text => {
       console.log(text)
@@ -376,30 +376,30 @@ describe('recycler', function () {
     .touch('drag', {fromX:recyclerWidth / 2, fromY:screenHeight / 5, toX:recyclerWidth / 2, toY: screenHeight * 4 / 5})
     .sleep(1000)
     .touch('drag', {fromX:recyclerWidth / 2, fromY:screenHeight / 5, toX:recyclerWidth / 2, toY: screenHeight * 4 / 5})
-    .elementByXPath(header2Path + '/div[1]/div[1]/text[1]')
+    .elementById('stickyText1')
     .text()
     .then(text => {
       console.log(text)
       const contentOffset = Number.parseInt(text.replace('Content Offset:-',''))
       assert.isOk(originContentOffset - contentOffset > screenHeight / scaleFactor)
     })
-    .elementByXPath(fixedPath)
+    .elementById('fixed1')
     .click()
   })
 
   it('#12 test scrollable', () => {
     let originContentOffset = 0
     return driver
-    .elementByXPath(cell27Path)
+    .elementById('cell26')
     .click()
-    .elementByXPath(header2Path + '/div[1]/div[1]/text[1]')
+    .elementById('stickyText1')
     .text()
     .then(text => {
       console.log(text)
       originContentOffset = Number.parseInt(text.replace('Content Offset:-',''))
     })
     .touch('drag', {fromX:recyclerWidth / 2, fromY:screenHeight / 5, toX:recyclerWidth / 2, toY: screenHeight * 4 / 5})
-    .elementByXPath(header2Path + '/div[1]/div[1]/text[1]')
+    .elementById('stickyText1')
     .text()
     .then(text => {
       console.log(text)


[08/10] incubator-weex git commit: Merge branch '0.12-dev-recycler-tc' into 0.12-dev

Posted by zs...@apache.org.
Merge branch '0.12-dev-recycler-tc' into 0.12-dev

* 0.12-dev-recycler-tc: (209 commits)
  * [tc] recycler tc
  * [android] fix NPE in move fixed view
  * [doc] add scrollToElement animation support
  * [jsfm] fix function markupState
  * [example] fix banner
  * [jsfm] v0.20.2
  * [jsfm] update jsfm version to 0.19.17 for fixed Vue leak
  * [jsfm] v0.19.17
  * [jsfm] update weex-vue-framework to 2.2.1-weex.2 && destroy runtime document
  * [android] fix setSize when defaultHeight is use screen height
  * [jsfm] update vue framework to 2.2.2-weex.1
  * [test] Closes #141: invalid/pullrequest
  * [test] Closes #141: invalid/pullrequest
  * [test] fix CI
  * [android] update imageView
  * [android] avoid remove-readd view when fixed component view already moved
  * [android] avoid remove-readd view when fixed component view already moved
  * [html5] clear log.
  + [ios] change to color
  * [ios] fix box shadow  shadowColor get method circularly called
  ...

# Conflicts:
#	test/scripts/components/recycler.test.js


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/53b61da6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/53b61da6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/53b61da6

Branch: refs/heads/0.12-dev
Commit: 53b61da6ac1610fe3153d147c67114cd70d478fc
Parents: 5445c92 db99d41
Author: zshshr <zh...@gmail.com>
Authored: Thu Apr 6 19:23:40 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Thu Apr 6 19:23:40 2017 +0800

----------------------------------------------------------------------
 .eslintrc                                       |   16 +-
 .flowconfig                                     |   16 +
 README.md                                       |   50 +-
 android/commons/build.gradle                    |    3 +-
 .../weex/commons/AbstractWeexActivity.java      |   24 +
 android/playground/app/build.gradle             |    3 +-
 .../playground/app/src/main/assets/animation.js |   11 +-
 .../app/src/main/assets/component/a-demo.js     |   11 +-
 .../src/main/assets/component/countdown-demo.js |   11 +-
 .../app/src/main/assets/component/image-demo.js |   11 +-
 .../app/src/main/assets/component/input-demo.js |   11 +-
 .../main/assets/component/list/list-basic.js    |    8 +
 .../assets/component/list/list-demo-horizon.js  |    8 +
 .../src/main/assets/component/list/list-demo.js |    8 +
 .../src/main/assets/component/marquee-demo.js   |   11 +-
 .../src/main/assets/component/navigator-demo.js |   15 +-
 .../main/assets/component/process-bar-demo.js   |   11 +-
 .../src/main/assets/component/scroller-demo.js  |   11 +-
 .../slider-neighbor/slider-neighbor-item.js     |    8 +
 .../slider-neighbor/slider-neighbor-page.js     |    8 +
 .../src/main/assets/component/slider/index.js   |   11 +-
 .../main/assets/component/slider/slider-item.js |    8 +
 .../main/assets/component/slider/slider-page.js |    8 +
 .../main/assets/component/tabbar/tabbar-demo.js |   15 +-
 .../main/assets/component/tabbar/tabbar-item.js |    8 +
 .../app/src/main/assets/component/text-demo.js  |   11 +-
 .../app/src/main/assets/component/video-demo.js |   11 +-
 .../app/src/main/assets/component/web-demo.js   |   11 +-
 android/playground/app/src/main/assets/hello.js |    8 +
 .../playground/app/src/main/assets/iconfont.js  |    8 +
 .../app/src/main/assets/module/clipboard.js     |   11 +-
 .../java/com/alibaba/weex/IndexActivity.java    |    6 +
 .../src/main/java/com/alibaba/weex/Utility.java |  277 +
 .../java/com/alibaba/weex/WXApplication.java    |    4 +
 .../java/com/alibaba/weex/WXPageActivity.java   |   58 +
 .../extend/WXInstanceStatisticsListener.java    |  268 +
 .../app/src/main/res/layout/id_stub.xml         |   57 +
 android/sdk/assets/main.js                      |   14 +-
 android/sdk/build.gradle                        |    2 +
 android/sdk/libs/armeabi/libweexv8.so           |  Bin 3583820 -> 3563544 bytes
 android/sdk/libs/x86/libweexv8.so               |  Bin 4336768 -> 4545544 bytes
 .../com/taobao/weex/IWXStatisticsListener.java  |  252 +
 .../main/java/com/taobao/weex/InitConfig.java   |   14 +
 .../java/com/taobao/weex/WXEnvironment.java     |   18 +
 .../main/java/com/taobao/weex/WXSDKEngine.java  |    5 +-
 .../java/com/taobao/weex/WXSDKInstance.java     |   86 +-
 .../main/java/com/taobao/weex/WXSDKManager.java |   79 +-
 .../taobao/weex/adapter/IWXSoLoaderAdapter.java |  236 +
 .../java/com/taobao/weex/bridge/WXBridge.java   |    6 +
 .../com/taobao/weex/bridge/WXBridgeManager.java |   59 +-
 .../java/com/taobao/weex/bridge/WXParams.java   |   13 +
 .../java/com/taobao/weex/common/Constants.java  |    8 +
 .../java/com/taobao/weex/common/IWXBridge.java  |    7 +
 .../taobao/weex/common/WXJSBridgeMsgType.java   |    1 +
 .../taobao/weex/ui/IExternalMoudleGetter.java   |  215 +
 .../taobao/weex/ui/component/WXComponent.java   |    7 +-
 .../com/taobao/weex/ui/component/WXImage.java   |    6 +
 .../java/com/taobao/weex/utils/OsVersion.java   |  233 +
 .../main/java/com/taobao/weex/utils/Trace.java  |  301 +
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |   51 +-
 .../java/com/taobao/weex/utils/WXUtils.java     |   84 +-
 .../taobao/weex/bridge/WXWebsocketBridge.java   |    3 +
 bin/dist-vue.sh                                 |   42 +
 build/build.js                                  |    2 +
 build/config.js                                 |   13 +-
 build/examples-banner-plugin.js                 |   65 +
 build/karma.vue.conf.js                         |   69 +-
 build/webpack.examples.config.js                |    1 +
 build/webpack.examples.web.config.js            |   24 +-
 dangerfile.js                                   |   30 +
 doc/source/cn/references/modules/dom.md         |    3 +-
 doc/source/references/modules/dom.md            |    3 +-
 examples/module/componentRect.we                |    4 +-
 examples/vue/animation.vue                      |    4 +-
 examples/vue/components/countdown.vue           |    2 +-
 examples/vue/components/image.vue               |    2 +-
 examples/vue/components/list.vue                |   19 +-
 examples/vue/components/marquee.vue             |    3 +-
 examples/vue/components/navigator.vue           |    7 +-
 examples/vue/components/scroller.vue            |   34 +-
 examples/vue/components/slider.vue              |   22 +-
 examples/vue/components/text.vue                |    2 +-
 examples/vue/components/textarea.vue            |   57 +
 examples/vue/components/video.vue               |    2 +-
 examples/vue/components/web.vue                 |    2 +-
 examples/vue/iconfont.vue                       |    2 +-
 examples/vue/include/base-url.js                |    4 +-
 examples/vue/include/button.vue                 |    2 +-
 examples/vue/include/countdown.vue              |    2 +-
 examples/vue/include/example-list-item.vue      |    2 +-
 examples/vue/include/example-list.vue           |    2 +-
 examples/vue/include/h1.vue                     |    2 +-
 examples/vue/include/h2.vue                     |    2 +-
 examples/vue/include/h3.vue                     |    2 +-
 examples/vue/include/hn.vue                     |    2 +-
 examples/vue/include/list-item.vue              |    2 +-
 examples/vue/include/marquee.vue                |    4 +-
 examples/vue/include/navbar.vue                 |    2 +-
 examples/vue/include/navpage.vue                |    2 +-
 examples/vue/include/panel.vue                  |   10 +-
 examples/vue/include/slider-item.vue            |    2 +-
 examples/vue/include/slider-page.vue            |    5 +-
 examples/vue/include/tabbar.vue                 |    6 +-
 examples/vue/include/tabitem.vue                |    2 +-
 examples/vue/include/tip.vue                    |    2 +-
 examples/vue/include/wxc-list-item.vue          |    2 +-
 examples/vue/modules/stream.vue                 |    2 +-
 examples/vue/showcase/calculator.vue            |    2 +-
 examples/vue/showcase/include/banners.vue       |    4 +-
 examples/vue/showcase/include/brand.vue         |    2 +-
 examples/vue/showcase/include/category.vue      |    8 +-
 examples/vue/showcase/include/coupon.vue        |    2 +-
 examples/vue/showcase/include/goods.vue         |    4 +-
 examples/vue/showcase/include/headlines.vue     |    2 +-
 examples/vue/showcase/include/match.vue         |    4 +-
 examples/vue/showcase/include/resource.vue      |    2 +-
 examples/vue/showcase/include/scene.vue         |    4 +-
 examples/vue/showcase/itemlist.vue              |  246 +-
 examples/vue/showcase/new-fashion.vue           |    2 +-
 examples/vue/style/index.vue                    |    2 +-
 examples/vue/style/style-box.vue                |    2 +-
 examples/vue/style/style-flex.vue               |    2 +-
 examples/vue/style/style-item.vue               |    2 +-
 examples/vue/syntax/hello-world-3.vue           |    4 +-
 examples/vue/syntax/hello-world-4.vue           |    4 +-
 examples/vue/syntax/hello-world-5.vue           |    4 +-
 examples/vue/syntax/hello-world.vue             |    4 +-
 examples/vue/syntax/include/btn.vue             |    2 +-
 examples/vue/syntax/include/sub.vue             |    2 +-
 examples/vue/syntax/script-component.vue        |    2 +-
 examples/vue/syntax/script-data.vue             |    2 +-
 examples/vue/syntax/script-events.vue           |    4 +-
 examples/vue/syntax/script-instance.vue         |    2 +-
 examples/vue/syntax/script-lifecycle.vue        |    4 +-
 examples/vue/syntax/script-module.vue           |    2 +-
 examples/vue/syntax/script-options.vue          |    2 +-
 examples/vue/syntax/template-class.vue          |    2 +-
 examples/vue/syntax/template-event.vue          |    2 +-
 examples/vue/syntax/template-if.vue             |    2 +-
 examples/vue/syntax/template-repeat-update.vue  |    2 +-
 examples/vue/syntax/template-repeat.vue         |    8 +-
 flow-typed/npm/animationjs_vx.x.x.js            |   60 +
 flow-typed/npm/babel-core_vx.x.x.js             |  227 +
 flow-typed/npm/babel-eslint_vx.x.x.js           |   73 +
 flow-typed/npm/babel-istanbul_vx.x.x.js         |  353 +
 flow-typed/npm/babel-loader_vx.x.x.js           |   67 +
 flow-typed/npm/babel-plugin-coverage_vx.x.x.js  |   32 +
 flow-typed/npm/babel-preset-es2015_vx.x.x.js    |   32 +
 flow-typed/npm/babel-runtime_vx.x.x.js          | 1691 ++++
 flow-typed/npm/chai_v3.5.x.js                   |  212 +
 flow-typed/npm/chromedriver_vx.x.x.js           |   46 +
 flow-typed/npm/core-js_vx.x.x.js                | 9390 ++++++++++++++++++
 flow-typed/npm/cross-spawn_vx.x.x.js            |   59 +
 flow-typed/npm/css-loader_vx.x.x.js             |   87 +
 flow-typed/npm/cubicbezier_vx.x.x.js            |  109 +
 flow-typed/npm/danger_vx.x.x.js                 |  284 +
 flow-typed/npm/envd_vx.x.x.js                   |  109 +
 flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js |  319 +
 flow-typed/npm/eslint_vx.x.x.js                 | 1978 ++++
 flow-typed/npm/flow-bin_v0.x.x.js               |    6 +
 flow-typed/npm/fs-extra_vx.x.x.js               |  221 +
 flow-typed/npm/http-server_vx.x.x.js            |   39 +
 flow-typed/npm/httpurl_vx.x.x.js                |   67 +
 flow-typed/npm/inline-style-prefixer_vx.x.x.js  |  347 +
 flow-typed/npm/json-loader_vx.x.x.js            |   33 +
 flow-typed/npm/karma-coverage_vx.x.x.js         |   81 +
 flow-typed/npm/karma-mocha-reporter_vx.x.x.js   |   38 +
 flow-typed/npm/karma-mocha_vx.x.x.js            |   53 +
 .../npm/karma-phantomjs-launcher_vx.x.x.js      |   59 +
 flow-typed/npm/karma-sourcemap-loader_vx.x.x.js |   33 +
 flow-typed/npm/karma-webpack_vx.x.x.js          |   45 +
 flow-typed/npm/karma_vx.x.x.js                  |  445 +
 flow-typed/npm/lazyimg_vx.x.x.js                |   32 +
 flow-typed/npm/macaca-cli_vx.x.x.js             |  123 +
 flow-typed/npm/macaca-utils_vx.x.x.js           |   39 +
 flow-typed/npm/mocha_v2.4.x.js                  |   25 +
 flow-typed/npm/modals_vx.x.x.js                 |   81 +
 flow-typed/npm/nightwatch_vx.x.x.js             |  633 ++
 flow-typed/npm/phantomjs-prebuilt_vx.x.x.js     |  389 +
 flow-typed/npm/query-string_vx.x.x.js           |   33 +
 flow-typed/npm/reify_vx.x.x.js                  |   95 +
 flow-typed/npm/rollup-plugin-buble_vx.x.x.js    |   39 +
 flow-typed/npm/rollup-plugin-commonjs_vx.x.x.js |   81 +
 flow-typed/npm/rollup-plugin-eslint_vx.x.x.js   |   39 +
 .../rollup-plugin-flow-no-whitespace_vx.x.x.js  |   33 +
 flow-typed/npm/rollup-plugin-flow_vx.x.x.js     |   33 +
 flow-typed/npm/rollup-plugin-json_vx.x.x.js     |   46 +
 .../npm/rollup-plugin-node-resolve_vx.x.x.js    |   53 +
 flow-typed/npm/rollup-plugin-postcss_vx.x.x.js  |   38 +
 flow-typed/npm/rollup-plugin-replace_vx.x.x.js  |   46 +
 flow-typed/npm/rollup-plugin-uglify_vx.x.x.js   |   32 +
 flow-typed/npm/rollup-watch_vx.x.x.js           |   67 +
 flow-typed/npm/rollup_vx.x.x.js                 |   46 +
 flow-typed/npm/scroll-to_vx.x.x.js              |   33 +
 flow-typed/npm/selenium-server_vx.x.x.js        |   39 +
 flow-typed/npm/semver_v5.1.x.js                 |   81 +
 flow-typed/npm/serve_vx.x.x.js                  |   18 +
 flow-typed/npm/sinon-chai_vx.x.x.js             |   32 +
 flow-typed/npm/sinon_vx.x.x.js                  |  263 +
 flow-typed/npm/uglify-js_vx.x.x.js              |  116 +
 flow-typed/npm/vue-loader_vx.x.x.js             |  122 +
 flow-typed/npm/vue-template-compiler_vx.x.x.js  |   38 +
 flow-typed/npm/vue_vx.x.x.js                    | 1089 ++
 flow-typed/npm/webdriver-client_vx.x.x.js       |  129 +
 flow-typed/npm/webpack_vx.x.x.js                | 1523 +++
 flow-typed/npm/weex-components_vx.x.x.js        |   33 +
 flow-typed/npm/weex-loader_vx.x.x.js            |  108 +
 flow-typed/npm/weex-picker_vx.x.x.js            |   81 +
 flow-typed/npm/weex-rax-framework_vx.x.x.js     |  165 +
 flow-typed/npm/weex-styler_vx.x.x.js            |   66 +
 flow-typed/npm/weex-vdom-tester_vx.x.x.js       |  108 +
 flow-typed/npm/weex-vue-framework_vx.x.x.js     |   33 +
 flow-typed/npm/weex-wd_vx.x.x.js                |   38 +
 flow-typed/npm/wwp_vx.x.x.js                    |   39 +
 flow-typed/npm/xml2map_vx.x.x.js                |   45 +
 html5/frameworks/legacy/app/ctrl/init.js        |   55 +-
 html5/frameworks/legacy/static/create.js        |    5 +-
 html5/frameworks/legacy/static/life.js          |   19 +
 html5/render/browser/extend/api/stream.js       |    2 +-
 html5/render/browser/extend/components/input.js |   33 +
 .../browser/extend/components/textarea.js       |   32 +
 html5/render/browser/utils/index.js             |    9 +
 html5/render/vue/README.md                      |   51 +-
 html5/render/vue/components/a.js                |   18 +-
 html5/render/vue/components/div.js              |   25 +-
 html5/render/vue/components/image.js            |   81 +-
 html5/render/vue/components/index.js            |    9 +-
 html5/render/vue/components/input.js            |   31 +-
 .../render/vue/components/scrollable/header.js  |   40 +-
 .../vue/components/scrollable/list/cell.js      |   15 +-
 .../vue/components/scrollable/list/index.js     |   32 +-
 .../vue/components/scrollable/list/listMixin.js |  118 +-
 .../components/scrollable/loading-indicator.js  |    3 +-
 .../render/vue/components/scrollable/loading.js |   55 +-
 .../render/vue/components/scrollable/refresh.js |   64 +-
 .../vue/components/scrollable/scroller.js       |   30 +-
 .../render/vue/components/scrollable/shared.js  |   22 -
 html5/render/vue/components/slider/index.js     |   40 +-
 html5/render/vue/components/slider/indicator.js |  115 +-
 .../render/vue/components/slider/slideMixin.js  |  141 +-
 html5/render/vue/components/switch.js           |   11 +-
 html5/render/vue/components/text.js             |   45 +-
 html5/render/vue/components/textarea.js         |   29 +-
 html5/render/vue/components/video.js            |   14 +-
 html5/render/vue/components/web.js              |   19 +-
 html5/render/vue/env/WXEnvironment.js           |   39 -
 html5/render/vue/env/index.js                   |   17 +-
 html5/render/vue/env/viewport.js                |   56 +-
 html5/render/vue/env/weex.js                    |   30 +-
 html5/render/vue/env/wx-env.js                  |   48 +
 html5/render/vue/index.js                       |   64 +-
 html5/render/vue/mixins/base.js                 |  110 +-
 html5/render/vue/mixins/event.js                |   76 -
 html5/render/vue/mixins/index.js                |    8 +-
 html5/render/vue/mixins/input-common.js         |   47 +
 html5/render/vue/mixins/scrollable.js           |  110 +
 html5/render/vue/mixins/style.js                |  265 +-
 html5/render/vue/modules/dom.js                 |   69 +-
 html5/render/vue/modules/index.js               |   42 +-
 html5/render/vue/styles/components.css          |  225 +-
 html5/render/vue/styles/reset.css               |   44 +-
 html5/render/vue/utils/component.js             |   83 +-
 html5/render/vue/utils/event.js                 |   91 +-
 html5/render/vue/utils/func.js                  |   81 +-
 html5/render/vue/utils/index.js                 |   55 +-
 html5/render/vue/utils/lazyload.js              |  102 +
 html5/render/vue/utils/perf.js                  |  170 +
 html5/render/vue/utils/style.js                 |   21 +
 html5/render/vue/utils/type.js                  |   20 +
 html5/test/render/index.js                      |    3 -
 html5/test/render/vue/components/a.js           |   38 +
 html5/test/render/vue/components/div.js         |   29 +
 html5/test/render/vue/components/image.js       |   44 +-
 html5/test/render/vue/components/list.js        |   21 +-
 html5/test/render/vue/components/switch.js      |   35 +-
 html5/test/render/vue/components/text.js        |   42 +-
 html5/test/render/vue/components/web.js         |   14 +-
 html5/test/render/vue/examples/list-cell.js     |   16 +-
 html5/test/render/vue/helper.js                 |  157 +-
 html5/test/render/vue/utils.js                  |    1 -
 html5/test/render/vue/validator/check.js        |    1 -
 html5/test/render/vue/validator/index.js        |    1 -
 html5/test/render/vue/validator/prop.js         |    1 -
 html5/test/render/vue/validator/style.js        |    1 -
 index.html                                      |    3 +-
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       |    8 -
 ios/sdk/WeexSDK/Resources/main.js               |   14 +-
 .../Recycler/WXRecyclerDataController.m         |    2 +-
 .../Component/WXComponent+GradientColor.h       |   21 -
 .../Component/WXComponent+GradientColor.m       |  124 -
 .../Sources/Component/WXComponent_internal.h    |    3 +
 .../Sources/Display/WXComponent+BoxShadow.h     |    2 +-
 .../Sources/Display/WXComponent+BoxShadow.m     |   10 +-
 ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h  |    2 +-
 ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.m  |    4 +-
 .../WeexSDK/Sources/Layout/WXComponent+Layout.m |    3 +-
 .../Sources/Manager/WXComponentManager.m        |    4 +-
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |   29 +-
 ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h   |    2 +-
 ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m   |   21 +-
 ios/sdk/WeexSDK/Sources/Utility/WXUtility.h     |   27 +
 ios/sdk/WeexSDK/Sources/Utility/WXUtility.m     |  101 +
 .../Sources/View/WXComponent+ViewManagement.m   |    1 -
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |    1 +
 package.json                                    |   33 +-
 packages/weex-vue-render/README.md              |   51 +-
 packages/weex-vue-render/package.json           |   13 +-
 test/ci-funcs.sh                                |    3 +
 test/pages/components/recycler.vue              |   39 +-
 test/pages/image-onload.vue                     |    2 +-
 test/pages/index.vue                            |   10 +-
 test/scripts/components/recycler.test.js        |  134 +-
 test/scripts/index.test.js                      |   14 +-
 vue.html                                        |   53 +-
 314 files changed, 28744 insertions(+), 1781 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/53b61da6/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/53b61da6/test/scripts/components/recycler.test.js
----------------------------------------------------------------------
diff --cc test/scripts/components/recycler.test.js
index bbf20a8,6bc67ed..ba75fa8
--- a/test/scripts/components/recycler.test.js
+++ b/test/scripts/components/recycler.test.js
@@@ -11,35 -11,36 +11,37 @@@ var util = require("../util.js")
  const platform = process.env.platform.toLowerCase() || 'android';
  const isAndroid = platform === 'android';
  
- const fixedPath = '//div[1]'
- const header1Path = '//recycler[1]/div[1]/'
- const header2Path = '//recycler[1]/div[2]/'
- const cell1Path = isAndroid ? '//recycler[1]/div[3]/' : '//recycler[1]/cell[1]/'
- const cell2Path = isAndroid ? '//recycler[1]/div[4]/' : '//recycler[1]/cell[2]/'
- const cell3Path = isAndroid ? '//recycler[1]/div[5]/' : '//recycler[1]/cell[3]/'
- const cell4Path = isAndroid ? '//recycler[1]/div[6]/' : '//recycler[1]/cell[4]/'
- const cell27Path = isAndroid ? '//recycler[1]/div[29]/' : '//recycler[1]/cell[27]/'
- const cell28Path = isAndroid ? '//recycler[1]/div[30]/' : '//recycler[1]/cell[28]/'
- const cell29Path = isAndroid ? '//recycler[1]/div[31]/' : '//recycler[1]/cell[29]/'
- const cell30Path = isAndroid ? '//recycler[1]/div[32]/' : '//recycler[1]/cell[30]/'
- const footerPath = '//recycler[1]/div[1]'
+ // const fixedPath = '//div[1]'
+ // const header1Path = '//recycler[1]/div[1]/'
+ // const header2Path = '//recycler[1]/div[2]/'
+ // const cell1Path = isAndroid ? '//recycler[1]/div[3]/' : '//recycler[1]/cell[1]/'
+ // const cell2Path = isAndroid ? '//recycler[1]/div[4]/' : '//recycler[1]/cell[2]/'
+ // const cell3Path = isAndroid ? '//recycler[1]/div[5]/' : '//recycler[1]/cell[3]/'
+ // const cell4Path = isAndroid ? '//recycler[1]/div[6]/' : '//recycler[1]/cell[4]/'
+ // const cell27Path = isAndroid ? '//recycler[1]/div[29]/' : '//recycler[1]/cell[27]/'
+ // const cell28Path = isAndroid ? '//recycler[1]/div[30]/' : '//recycler[1]/cell[28]/'
+ // const cell29Path = isAndroid ? '//recycler[1]/div[31]/' : '//recycler[1]/cell[29]/'
+ // const cell30Path = isAndroid ? '//recycler[1]/div[32]/' : '//recycler[1]/cell[30]/'
+ // const footerPath = '//recycler[1]/div[1]'
  
  const isApproximate = (x, y) =>  {
 -  return Math.abs(x - y) <= 1
 +  return Math.abs(x - y) <= isAndroid ? 1 : 0.5
  }
  
- if (isAndroid) {
-   return;
- }
+ // if (isAndroid) {
+ //   return;
+ // }
  
  describe('recycler', function () {
    this.timeout(util.getTimeoutMills())
    const driver = util.createDriver(wd)
  
    before(function () {
++
+     console.log(util.getPage('/components/recycler.js'))
      return util.init(driver)
        .get(util.getPage('/components/recycler.js'))
-       .waitForElementByXPath('//recycler[1]',util.getGETActionWaitTimeMills(),1000)
+       .waitForElementById('waterfall',util.getGETActionWaitTimeMills(),1000)
    });
  
    after(function () {
@@@ -178,34 -179,34 +180,34 @@@
        cell1Height = rect.height
        assert.isOk(isApproximate(rect.x, 0))
        assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
 -      assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
 +      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
      })
-     .elementByXPath(cell2Path)
+      .elementById('cell1')
      .getRect()
      .then((rect)=>{
        console.log(`cell 2 rect after changing column gap to normal:${JSON.stringify(rect)}`)
        cell2Height = rect.height
 -      assert.isOk(isApproximate(rect.x, 393 * scaleFactor))
 +      assert.isOk(isApproximate(rect.x, 391 * scaleFactor))
        assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
 -      assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
 +      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
      })
-     .elementByXPath(cell3Path)
+     .elementById('cell2')
      .getRect()
      .then((rect)=>{
        console.log(`cell 3 rect after changing column gap to normal:${JSON.stringify(rect)}`)
 -      assert.isOk(isApproximate(rect.x, 393 * scaleFactor))
 +      assert.isOk(isApproximate(rect.x, 391 * scaleFactor))
        assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell2Height))
 -      assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
 +      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
      })
-     .elementByXPath(cell4Path)
+      .elementById('cell3')
      .getRect()
      .then((rect)=>{
        console.log(`cell 4 rect after changing column gap to normal:${JSON.stringify(rect)}`)
        assert.isOk(isApproximate(rect.x, 0))
        assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell1Height))
 -      assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
 +      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
      })
-     .elementByXPath(cell2Path)
+     .elementById('cell1')
      .click()
    })
  


[02/10] incubator-weex git commit: Merge branch '0.12-dev' into 0.12-dev

Posted by zs...@apache.org.
Merge branch '0.12-dev' into 0.12-dev

Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/44feea0e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/44feea0e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/44feea0e

Branch: refs/heads/0.12-dev
Commit: 44feea0e10602bbfb286f447e6f6b0796c50f7b8
Parents: 8d2411e d073636
Author: \u9690\u5c0f\u98ce <cx...@gmail.com>
Authored: Mon Mar 27 15:43:11 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Mon Mar 27 15:43:11 2017 +0800

----------------------------------------------------------------------
 .../app/src/main/assets/component/image-demo.js |    2 +-
 .../assets/component/slider-neighbor/index.js   |  264 ++
 .../slider-neighbor/silder-neighbor.js          |  287 --
 .../src/main/assets/component/slider/index.js   |   33 +
 .../app/src/main/assets/component/text-demo.js  |  108 +
 .../app/src/main/assets/component/web-demo.js   |    1 -
 android/playground/app/src/main/assets/error.js | 2217 ++++++++++++
 .../app/src/main/assets/geolocation.js          |  183 +
 .../app/src/main/assets/hello_weex.js           |   28 -
 android/playground/app/src/main/assets/index.js |    2 +-
 .../app/src/main/assets/linear-gradient.js      |  367 ++
 .../app/src/main/assets/module/clipboard.js     |   27 +-
 .../app/src/main/assets/module/componentRect.js |  107 +-
 .../app/src/main/assets/module/instance-api.js  |   14 +-
 .../app/src/main/assets/module/modal.js         |   18 +-
 .../app/src/main/assets/module/picker-demo.js   |   18 +-
 .../app/src/main/assets/module/storage-demo.js  |   14 +-
 .../app/src/main/assets/module/stream-demo.js   |   18 +-
 .../src/main/assets/module/websocket-demo.js    | 2412 +++++++++++++
 .../app/src/main/assets/showcase/calculator.js  |   21 +-
 .../assets/showcase/dropdown/dropdown-demo.js   |   30 +-
 .../assets/showcase/dropdown/we-dropdown.js     |   12 +-
 .../app/src/main/assets/showcase/minesweeper.js |   12 +-
 .../main/assets/showcase/new-fashion/banner.js  |    8 +-
 .../main/assets/showcase/new-fashion/banners.js |   20 +-
 .../main/assets/showcase/new-fashion/brand.js   |   36 +-
 .../assets/showcase/new-fashion/category.js     |   24 +-
 .../main/assets/showcase/new-fashion/coupon.js  |   12 +-
 .../main/assets/showcase/new-fashion/fashion.js |   38 +-
 .../main/assets/showcase/new-fashion/goods.js   |   24 +-
 .../assets/showcase/new-fashion/headlines.js    |   48 +-
 .../main/assets/showcase/new-fashion/index.js   |   21 +-
 .../main/assets/showcase/new-fashion/link.js    |    8 +-
 .../main/assets/showcase/new-fashion/main.js    |  209 +-
 .../main/assets/showcase/new-fashion/match.js   |   24 +-
 .../assets/showcase/new-fashion/resource.js     |   38 +-
 .../main/assets/showcase/new-fashion/scene.js   |   24 +-
 .../src/main/assets/showcase/pseudo-class.js    | 2425 +++++++++++++
 .../app/src/main/assets/showcase/ui.js          |   24 +-
 .../app/src/main/assets/style/index.js          |   76 +-
 .../app/src/main/assets/style/style-box.js      |   40 +-
 .../app/src/main/assets/style/style-flex.js     |   48 +-
 .../app/src/main/assets/style/style-item.js     |   12 +-
 .../app/src/main/assets/syntax/hello-world-1.js |    4 +-
 .../app/src/main/assets/syntax/hello-world-2.js |    6 +-
 .../app/src/main/assets/syntax/hello-world-3.js |   10 +-
 .../app/src/main/assets/syntax/hello-world-4.js |   14 +-
 .../app/src/main/assets/syntax/hello-world-5.js |   14 +-
 .../app/src/main/assets/syntax/hello-world.js   |   14 +-
 .../app/src/main/assets/syntax/index.js         |   20 +-
 .../src/main/assets/syntax/script-component.js  |   24 +-
 .../app/src/main/assets/syntax/script-data.js   |   12 +-
 .../app/src/main/assets/syntax/script-events.js |   12 +-
 .../src/main/assets/syntax/script-instance.js   |   12 +-
 .../src/main/assets/syntax/script-lifecycle.js  |   12 +-
 .../app/src/main/assets/syntax/script-module.js |   12 +-
 .../src/main/assets/syntax/script-options.js    |   12 +-
 .../src/main/assets/syntax/template-class.js    |   12 +-
 .../src/main/assets/syntax/template-content.js  |   20 +-
 .../src/main/assets/syntax/template-event.js    |   12 +-
 .../app/src/main/assets/syntax/template-if.js   |   12 +-
 .../assets/syntax/template-repeat-update.js     |   12 +-
 .../src/main/assets/syntax/template-repeat.js   |   12 +-
 .../src/main/assets/syntax/template-style.js    |    8 +-
 .../playground/app/src/main/assets/template.js  |   12 +-
 android/playground/app/src/main/assets/test.js  |  128 +
 .../app/src/main/assets/vue/animation.js        |  709 ++++
 .../app/src/main/assets/vue/components/a.js     |  438 +++
 .../src/main/assets/vue/components/countdown.js |  640 ++++
 .../app/src/main/assets/vue/components/image.js |  641 ++++
 .../app/src/main/assets/vue/components/input.js |  364 ++
 .../app/src/main/assets/vue/components/list.js  |  246 ++
 .../src/main/assets/vue/components/marquee.js   |  534 +++
 .../src/main/assets/vue/components/navigator.js | 1059 ++++++
 .../src/main/assets/vue/components/scroller.js  |  304 ++
 .../src/main/assets/vue/components/slider.js    |  898 +++++
 .../src/main/assets/vue/components/tabbar.js    |  599 ++++
 .../app/src/main/assets/vue/components/text.js  |  513 +++
 .../app/src/main/assets/vue/components/video.js |  396 +++
 .../app/src/main/assets/vue/components/web.js   |  459 +++
 .../playground/app/src/main/assets/vue/hello.js |   99 +
 .../app/src/main/assets/vue/iconfont.js         |  204 ++
 .../playground/app/src/main/assets/vue/index.js |  496 +++
 .../src/main/assets/vue/modules/clipboard.js    |  691 ++++
 .../src/main/assets/vue/modules/instance-api.js |  304 ++
 .../app/src/main/assets/vue/modules/modal.js    |  581 +++
 .../app/src/main/assets/vue/modules/storage.js  |  381 ++
 .../app/src/main/assets/vue/modules/stream.js   |  477 +++
 .../src/main/assets/vue/showcase/calculator.js  |  340 ++
 .../src/main/assets/vue/showcase/itemlist.js    | 1062 ++++++
 .../src/main/assets/vue/showcase/new-fashion.js | 3302 ++++++++++++++++++
 .../src/main/assets/vue/showcase/progress.js    |  336 ++
 .../app/src/main/assets/vue/style/index.js      | 1566 +++++++++
 .../app/src/main/assets/vue/style/style-box.js  |  780 +++++
 .../app/src/main/assets/vue/style/style-flex.js |  919 +++++
 .../app/src/main/assets/vue/style/style-item.js |  155 +
 .../src/main/assets/vue/syntax/hello-world-1.js |   95 +
 .../src/main/assets/vue/syntax/hello-world-2.js |  112 +
 .../src/main/assets/vue/syntax/hello-world-3.js |  127 +
 .../src/main/assets/vue/syntax/hello-world-4.js |  167 +
 .../src/main/assets/vue/syntax/hello-world-5.js |  173 +
 .../src/main/assets/vue/syntax/hello-world.js   |  183 +
 .../main/assets/vue/syntax/script-component.js  |  224 ++
 .../src/main/assets/vue/syntax/script-data.js   |  214 ++
 .../src/main/assets/vue/syntax/script-events.js |  161 +
 .../main/assets/vue/syntax/script-instance.js   |  196 ++
 .../main/assets/vue/syntax/script-lifecycle.js  |  155 +
 .../src/main/assets/vue/syntax/script-module.js |  156 +
 .../main/assets/vue/syntax/script-options.js    |  182 +
 .../main/assets/vue/syntax/template-class.js    |  161 +
 .../main/assets/vue/syntax/template-content.js  |  189 +
 .../main/assets/vue/syntax/template-event.js    |  197 ++
 .../src/main/assets/vue/syntax/template-if.js   |  165 +
 .../assets/vue/syntax/template-repeat-update.js |  195 ++
 .../main/assets/vue/syntax/template-repeat.js   |  170 +
 .../main/assets/vue/syntax/template-style.js    |  144 +
 .../app/src/main/assets/vue/template.js         |  796 +++++
 .../playground/app/src/main/ic_launcher-web.png |  Bin 0 -> 19935 bytes
 .../java/com/alibaba/weex/WXApplication.java    |    5 +
 .../alibaba/weex/extend/component/WXMask.java   |  167 +
 .../extend/component/dom/WXMaskDomObject.java   |  231 ++
 .../alibaba/weex/extend/view/WXMaskView.java    |  220 ++
 .../src/main/res/mipmap-hdpi/ic_launcher.png    |  Bin 5248 -> 1755 bytes
 .../src/main/res/mipmap-mdpi/ic_launcher.png    |  Bin 4303 -> 1221 bytes
 .../src/main/res/mipmap-xhdpi/ic_launcher.png   |  Bin 6354 -> 2451 bytes
 .../src/main/res/mipmap-xxhdpi/ic_launcher.png  |  Bin 7930 -> 3939 bytes
 .../src/main/res/mipmap-xxxhdpi/ic_launcher.png |  Bin 10633 -> 5608 bytes
 examples/component/image-demo.we                |    2 +-
 128 files changed, 33177 insertions(+), 863 deletions(-)
----------------------------------------------------------------------



[10/10] incubator-weex git commit: Merge branch '0.12-dev' of https://github.com/cxfeng1/incubator-weex into 0.12-dev

Posted by zs...@apache.org.
Merge branch '0.12-dev' of https://github.com/cxfeng1/incubator-weex into 0.12-dev

* '0.12-dev' of https://github.com/cxfeng1/incubator-weex:
  * [test] fix recycler test problems
  * [tc] recycler tc
  * [ios] fix issue that view unloading will delay if component thread is busy.     * invalidate component manager earlier to  remove all the component thread tasks.
  * [test] update page url
  * [test] fix recycler column gap test and reduce iOS pixel error


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/5b1126a5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/5b1126a5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/5b1126a5

Branch: refs/heads/0.12-dev
Commit: 5b1126a56c583b56baa491c67b23e45f6f409d2b
Parents: 35a3f8c 982da12
Author: zshshr <zh...@gmail.com>
Authored: Mon Apr 10 11:24:05 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Mon Apr 10 11:24:05 2017 +0800

----------------------------------------------------------------------
 .../Component/Recycler/WXRecyclerComponent.m    |   1 +
 .../WeexSDK/Sources/Component/WXListComponent.m |   2 +
 .../Sources/Manager/WXComponentManager.h        |   4 +
 .../Sources/Manager/WXComponentManager.m        |   5 +
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |   1 +
 test/pages/components/recycler.vue              |  29 ++--
 test/scripts/components/recycler.test.js        | 164 ++++++++++---------
 7 files changed, 113 insertions(+), 93 deletions(-)
----------------------------------------------------------------------



[06/10] incubator-weex git commit: * [ios] fix issue that view unloading will delay if component thread is busy. * invalidate component manager earlier to remove all the component thread tasks.

Posted by zs...@apache.org.
* [ios] fix issue that view unloading will delay if component thread is busy.
    * invalidate component manager earlier to  remove all the component thread tasks.


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/5445c921
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/5445c921
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/5445c921

Branch: refs/heads/0.12-dev
Commit: 5445c9210be48b8d0b379cff34516d3423d91cfe
Parents: f0f58f5
Author: \u9690\u98ce <cx...@apache.org>
Authored: Wed Mar 29 20:21:31 2017 +0800
Committer: \u9690\u98ce <cx...@apache.org>
Committed: Wed Mar 29 20:21:31 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h | 4 ++++
 ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m | 5 +++++
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m        | 1 +
 3 files changed, 10 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5445c921/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h
index 9e72f4b..3cdf573 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h
@@ -141,6 +141,10 @@ extern void WXPerformBlockOnComponentThread(void (^block)());
  **/
 - (void)unload;
 
+/**
+ * @abstract invalidate component management, this can be called on main thread.
+ **/
+- (void)invalidate;
 
 ///--------------------------------------
 /// @name Fixed

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5445c921/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
index f08c985..4d5d0b9 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
@@ -536,6 +536,11 @@ static css_node_t * rootNodeGetChild(void *context, int i)
     _isValid = NO;
 }
 
+- (void)invalidate
+{
+    _isValid = NO;
+}
+
 - (BOOL)isValid
 {
     return _isValid;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5445c921/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index afc6c53..83bcd7d 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -293,6 +293,7 @@ typedef enum : NSUInteger {
     
     [[WXSDKManager bridgeMgr] destroyInstance:self.instanceId];
 
+    [self.componentManager invalidate];
     __weak typeof(self) weakSelf = self;
     WXPerformBlockOnComponentThread(^{
         __strong typeof(self) strongSelf = weakSelf;


[04/10] incubator-weex git commit: * [test] update page url

Posted by zs...@apache.org.
* [test] update page url


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/8ebd1735
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/8ebd1735
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/8ebd1735

Branch: refs/heads/0.12-dev
Commit: 8ebd1735b72708f879db434ac203b475936450e0
Parents: 1185fbd
Author: sospartan <so...@apache.org>
Authored: Tue Mar 28 10:44:09 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Tue Mar 28 10:44:09 2017 +0800

----------------------------------------------------------------------
 test/scripts/components/recycler.test.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8ebd1735/test/scripts/components/recycler.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/components/recycler.test.js b/test/scripts/components/recycler.test.js
index bc5f867..bbf20a8 100644
--- a/test/scripts/components/recycler.test.js
+++ b/test/scripts/components/recycler.test.js
@@ -37,9 +37,8 @@ describe('recycler', function () {
   const driver = util.createDriver(wd)
 
   before(function () {
-    console.log('wxpage://' + util.getDeviceHost() +'/components/recycler.js')
     return util.init(driver)
-      .get('wxpage://' + util.getDeviceHost() +'/components/recycler.js')
+      .get(util.getPage('/components/recycler.js'))
       .waitForElementByXPath('//recycler[1]',util.getGETActionWaitTimeMills(),1000)
   });
 


[03/10] incubator-weex git commit: * [test] fix recycler column gap test and reduce iOS pixel error

Posted by zs...@apache.org.
* [test] fix recycler column gap test and reduce iOS pixel error


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/1185fbd6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/1185fbd6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/1185fbd6

Branch: refs/heads/0.12-dev
Commit: 1185fbd61bdc0fbd31b19a45911adc82cc7142b5
Parents: 44feea0
Author: \u9690\u98ce <cx...@apache.org>
Authored: Mon Mar 27 19:27:49 2017 +0800
Committer: \u9690\u98ce <cx...@apache.org>
Committed: Mon Mar 27 19:27:49 2017 +0800

----------------------------------------------------------------------
 test/scripts/components/recycler.test.js | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1185fbd6/test/scripts/components/recycler.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/components/recycler.test.js b/test/scripts/components/recycler.test.js
index 19f0ad3..bc5f867 100644
--- a/test/scripts/components/recycler.test.js
+++ b/test/scripts/components/recycler.test.js
@@ -25,7 +25,7 @@ const cell30Path = isAndroid ? '//recycler[1]/div[32]/' : '//recycler[1]/cell[30
 const footerPath = '//recycler[1]/div[1]'
 
 const isApproximate = (x, y) =>  {
-  return Math.abs(x - y) <= 1
+  return Math.abs(x - y) <= isAndroid ? 1 : 0.5
 }
 
 if (isAndroid) {
@@ -179,24 +179,24 @@ describe('recycler', function () {
       cell1Height = rect.height
       assert.isOk(isApproximate(rect.x, 0))
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
-      assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
     })
     .elementByXPath(cell2Path)
     .getRect()
     .then((rect)=>{
       console.log(`cell 2 rect after changing column gap to normal:${JSON.stringify(rect)}`)
       cell2Height = rect.height
-      assert.isOk(isApproximate(rect.x, 393 * scaleFactor))
+      assert.isOk(isApproximate(rect.x, 391 * scaleFactor))
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
-      assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
     })
     .elementByXPath(cell3Path)
     .getRect()
     .then((rect)=>{
       console.log(`cell 3 rect after changing column gap to normal:${JSON.stringify(rect)}`)
-      assert.isOk(isApproximate(rect.x, 393 * scaleFactor))
+      assert.isOk(isApproximate(rect.x, 391 * scaleFactor))
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell2Height))
-      assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
     })
     .elementByXPath(cell4Path)
     .getRect()
@@ -204,7 +204,7 @@ describe('recycler', function () {
       console.log(`cell 4 rect after changing column gap to normal:${JSON.stringify(rect)}`)
       assert.isOk(isApproximate(rect.x, 0))
       assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell1Height))
-      assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
     })
     .elementByXPath(cell2Path)
     .click()


[05/10] incubator-weex git commit: Merge remote-tracking branch 'upstream/0.12-dev' into 0.12-dev

Posted by zs...@apache.org.
Merge remote-tracking branch 'upstream/0.12-dev' into 0.12-dev


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/f0f58f5b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/f0f58f5b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/f0f58f5b

Branch: refs/heads/0.12-dev
Commit: f0f58f5bcaac15a531921330f97655b87e3d027e
Parents: 8ebd173 80df1aa
Author: \u9690\u98ce <cx...@apache.org>
Authored: Wed Mar 29 20:14:40 2017 +0800
Committer: \u9690\u98ce <cx...@apache.org>
Committed: Wed Mar 29 20:14:40 2017 +0800

----------------------------------------------------------------------
 .../java/com/taobao/weex/common/Constants.java  |    2 +
 .../taobao/weex/dom/WXRecyclerDomObject.java    |    4 +-
 .../taobao/weex/ui/component/WXComponent.java   |   25 +
 .../com/taobao/weex/ui/component/WXText.java    |    8 +
 .../com/taobao/weex/ui/view/WXTextView.java     |   18 +-
 examples/accessibilitySupport.we                |   57 +
 examples/component/input-demo.we                |  253 +-
 examples/component/list/list-basic.we           |   79 +-
 examples/component/scroller-demo.we             |   64 +-
 examples/component/slider-tab.we                |  100 +
 examples/include/example-list-item.we           |   30 +-
 examples/index.we                               |    4 +-
 examples/linear-gradient.we                     |    3 +
 examples/module/chatroom-demo.we                |  227 ++
 examples/module/websocket-demo.we               |   50 +-
 examples/showcase/boxshadow.we                  |   46 +
 examples/vue/components/input.vue               |  203 +-
 examples/vue/components/list.vue                |    3 +
 examples/vue/index.vue                          |    1 +
 examples/vue/showcase/boxshadow.vue             |   39 +
 ios/playground/bundlejs/component/image-demo.js |    2 +-
 ios/playground/bundlejs/component/input-demo.js | 2683 ++++--------------
 .../bundlejs/component/lengthunitwx-demo.js     |  329 +++
 .../bundlejs/component/list/list-basic.js       |  132 +-
 .../component/list/list-demo-horizon.js         |   12 +-
 .../bundlejs/component/list/list-demo.js        |   12 +-
 .../bundlejs/component/list/waterfall.js        |  877 ++++++
 .../bundlejs/component/marquee-demo.js          |   13 +-
 .../bundlejs/component/process-bar-demo.js      |   17 +-
 .../bundlejs/component/scroller-demo.js         |  219 +-
 .../bundlejs/component/slider-neighbor/index.js |    8 +-
 .../slider-neighbor/slider-neighbor-item.js     |   12 +-
 .../slider-neighbor/slider-neighbor-page.js     |   28 +-
 ios/playground/bundlejs/component/slider-tab.js |  633 +++++
 .../bundlejs/component/slider/index.js          |   56 +-
 .../bundlejs/component/slider/slider-item.js    |   12 +-
 .../bundlejs/component/slider/slider-page.js    |   28 +-
 ios/playground/bundlejs/component/text-demo.js  |   24 +-
 ios/playground/bundlejs/component/video-demo.js |   24 +-
 ios/playground/bundlejs/component/web-demo.js   |   25 +-
 ios/playground/bundlejs/error.js                |   20 +-
 ios/playground/bundlejs/geolocation.js          |   46 +-
 ios/playground/bundlejs/hello.js                |    4 +-
 ios/playground/bundlejs/iconfont.js             |   12 +-
 ios/playground/bundlejs/index.js                |  270 +-
 ios/playground/bundlejs/linear-gradient.js      |    8 +-
 ios/playground/bundlejs/module/chatroom-demo.js |  370 +++
 ios/playground/bundlejs/module/clipboard.js     |   61 +-
 ios/playground/bundlejs/module/componentRect.js |   28 +-
 ios/playground/bundlejs/module/instance-api.js  |   61 +-
 ios/playground/bundlejs/module/modal.js         |   27 +-
 ios/playground/bundlejs/module/picker-demo.js   |   27 +-
 ios/playground/bundlejs/module/storage-demo.js  |   61 +-
 ios/playground/bundlejs/module/stream-demo.js   |   61 +-
 .../bundlejs/module/websocket-demo.js           | 2661 +++++++----------
 ios/playground/bundlejs/showcase/boxshadow.js   |  269 ++
 ios/playground/bundlejs/showcase/calculator.js  |   30 +-
 .../bundlejs/showcase/dropdown/dropdown-demo.js |   38 +-
 .../bundlejs/showcase/dropdown/we-dropdown.js   |   12 +-
 ios/playground/bundlejs/showcase/minesweeper.js |   12 +-
 .../bundlejs/showcase/pseudo-class.js           |   30 +-
 ios/playground/bundlejs/showcase/ui.js          |   30 +-
 ios/playground/bundlejs/style/index.js          |   82 +-
 ios/playground/bundlejs/style/style-box.js      |   46 +-
 ios/playground/bundlejs/style/style-flex.js     |   54 +-
 ios/playground/bundlejs/style/style-item.js     |   12 +-
 ios/playground/bundlejs/syntax/hello-world-1.js |    4 +-
 ios/playground/bundlejs/syntax/hello-world-2.js |    4 +-
 ios/playground/bundlejs/syntax/hello-world-3.js |    8 +-
 ios/playground/bundlejs/syntax/hello-world-4.js |   12 +-
 ios/playground/bundlejs/syntax/hello-world-5.js |   12 +-
 ios/playground/bundlejs/syntax/hello-world.js   |   12 +-
 ios/playground/bundlejs/syntax/index.js         |  296 +-
 .../bundlejs/syntax/script-component.js         |   24 +-
 ios/playground/bundlejs/syntax/script-data.js   |   12 +-
 ios/playground/bundlejs/syntax/script-events.js |   20 +-
 .../bundlejs/syntax/script-instance.js          |   12 +-
 .../bundlejs/syntax/script-lifecycle.js         |   12 +-
 ios/playground/bundlejs/syntax/script-module.js |   12 +-
 .../bundlejs/syntax/script-options.js           |   12 +-
 .../bundlejs/syntax/template-class.js           |   12 +-
 .../bundlejs/syntax/template-content.js         |   20 +-
 .../bundlejs/syntax/template-event.js           |   12 +-
 ios/playground/bundlejs/syntax/template-if.js   |   12 +-
 .../bundlejs/syntax/template-repeat-update.js   |   12 +-
 .../bundlejs/syntax/template-repeat.js          |   12 +-
 .../bundlejs/syntax/template-style.js           |    8 +-
 ios/playground/bundlejs/template.js             |   12 +-
 ios/playground/bundlejs/test.js                 |    8 +-
 ios/playground/bundlejs/vue/animation.js        |  120 +-
 ios/playground/bundlejs/vue/components/a.js     |   97 +-
 .../bundlejs/vue/components/countdown.js        |  122 +-
 ios/playground/bundlejs/vue/components/image.js |  142 +-
 ios/playground/bundlejs/vue/components/input.js |  735 +++--
 ios/playground/bundlejs/vue/components/list.js  |   44 +-
 .../bundlejs/vue/components/marquee.js          |  105 +-
 .../bundlejs/vue/components/navigator.js        |  187 +-
 .../bundlejs/vue/components/scroller.js         |   48 +-
 .../bundlejs/vue/components/slider.js           |  341 +--
 .../bundlejs/vue/components/tabbar.js           |  133 +-
 ios/playground/bundlejs/vue/components/text.js  |  132 +-
 ios/playground/bundlejs/vue/components/video.js |   72 +-
 .../bundlejs/vue/components/waterfall.js        |  877 ++++++
 ios/playground/bundlejs/vue/components/web.js   |   74 +-
 ios/playground/bundlejs/vue/hello.js            |   19 +-
 ios/playground/bundlejs/vue/iconfont.js         |   36 +-
 ios/playground/bundlejs/vue/index.js            |  139 +-
 .../bundlejs/vue/modules/clipboard.js           |  147 +-
 .../bundlejs/vue/modules/instance-api.js        |   59 +-
 ios/playground/bundlejs/vue/modules/modal.js    |  105 +-
 ios/playground/bundlejs/vue/modules/storage.js  |   71 +-
 ios/playground/bundlejs/vue/modules/stream.js   |   95 +-
 .../bundlejs/vue/showcase/boxshadow.js          |  244 ++
 .../bundlejs/vue/showcase/calculator.js         |   72 +-
 .../bundlejs/vue/showcase/itemlist.js           |  166 +-
 .../bundlejs/vue/showcase/new-fashion.js        |  557 ++--
 .../bundlejs/vue/showcase/progress.js           |   63 +-
 ios/playground/bundlejs/vue/style/index.js      |  418 +--
 ios/playground/bundlejs/vue/style/style-box.js  |  180 +-
 ios/playground/bundlejs/vue/style/style-flex.js |  238 +-
 ios/playground/bundlejs/vue/style/style-item.js |   26 +-
 .../bundlejs/vue/syntax/hello-world-1.js        |   17 +-
 .../bundlejs/vue/syntax/hello-world-2.js        |   23 +-
 .../bundlejs/vue/syntax/hello-world-3.js        |   28 +-
 .../bundlejs/vue/syntax/hello-world-4.js        |   32 +-
 .../bundlejs/vue/syntax/hello-world-5.js        |   32 +-
 .../bundlejs/vue/syntax/hello-world.js          |   32 +-
 .../bundlejs/vue/syntax/script-component.js     |   64 +-
 .../bundlejs/vue/syntax/script-data.js          |   36 +-
 .../bundlejs/vue/syntax/script-events.js        |   32 +-
 .../bundlejs/vue/syntax/script-instance.js      |   30 +-
 .../bundlejs/vue/syntax/script-lifecycle.js     |   32 +-
 .../bundlejs/vue/syntax/script-module.js        |   30 +-
 .../bundlejs/vue/syntax/script-options.js       |   28 +-
 .../bundlejs/vue/syntax/template-class.js       |   34 +-
 .../bundlejs/vue/syntax/template-content.js     |   49 +-
 .../bundlejs/vue/syntax/template-event.js       |   36 +-
 .../bundlejs/vue/syntax/template-if.js          |   32 +-
 .../vue/syntax/template-repeat-update.js        |   40 +-
 .../bundlejs/vue/syntax/template-repeat.js      |   50 +-
 .../bundlejs/vue/syntax/template-style.js       |   27 +-
 ios/playground/bundlejs/vue/template.js         |  181 +-
 .../Component/Recycler/WXMultiColumnLayout.h    |    2 +
 .../Component/Recycler/WXMultiColumnLayout.m    |    5 +-
 .../Component/Recycler/WXRecyclerComponent.m    |   21 +-
 .../Recycler/WXRecyclerDataController.h         |    2 +
 .../Recycler/WXRecyclerDataController.m         |    6 +
 .../Component/WXComponent+GradientColor.m       |   56 +-
 .../Sources/Component/WXComponent_internal.h    |    9 +
 .../WeexSDK/Sources/Component/WXListComponent.m |    7 +-
 .../Sources/Component/WXScrollerComponent.m     |   10 +-
 .../WeexSDK/Sources/Component/WXTextComponent.m |    5 +
 .../WeexSDK/Sources/Layout/WXComponent+Layout.m |    2 +-
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |   29 +
 ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m   |   40 +-
 ios/sdk/WeexSDK/Sources/Utility/WXConvert.h     |    1 +
 ios/sdk/WeexSDK/Sources/Utility/WXConvert.m     |   22 +
 test/pages/components/recycler.vue              |   19 +-
 158 files changed, 10979 insertions(+), 7240 deletions(-)
----------------------------------------------------------------------