You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by bo...@apache.org on 2017/03/28 03:37:17 UTC

[1/3] incubator-weex git commit: * [example] add demo for list & scroller with onScroll event (cherry picked from commit 7f60621)

Repository: incubator-weex
Updated Branches:
  refs/heads/0.11-dev 5721b5842 -> a396e7c6b


* [example] add demo for list & scroller with onScroll event
(cherry picked from commit 7f60621)


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

Branch: refs/heads/0.11-dev
Commit: bc723eb9012b93b30d82712cdf98c28b09b8342f
Parents: 373ae38
Author: moxun.ljf <mo...@alibaba-inc.com>
Authored: Thu Mar 23 13:45:38 2017 +0800
Committer: moxun.ljf <fu...@foxmail.com>
Committed: Mon Mar 27 10:35:00 2017 +0800

----------------------------------------------------------------------
 examples/component/list/list-basic.we | 75 +++++++++++++++++++++---------
 examples/component/scroller-demo.we   | 64 +++++++++++++++++--------
 2 files changed, 97 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/bc723eb9/examples/component/list/list-basic.we
----------------------------------------------------------------------
diff --git a/examples/component/list/list-basic.we b/examples/component/list/list-basic.we
index f7e0efc..37f9c25 100644
--- a/examples/component/list/list-basic.we
+++ b/examples/component/list/list-basic.we
@@ -1,8 +1,15 @@
 <template>
   <div>
-    <list class="list">
-      <refresh  class = "refresh-view" display="{{refresh_display}}" onrefresh="onrefresh">
-        <text if="{{(refresh_display==='hide')}}"> \u2193 pull to refresh </text>
+    <div style="background-color: #eeeeee">
+      <text class="count">Appear items:{{appearMin}} - {{appearMax}}</text>
+      <div style="height: 20px;width: 750px;border-color: black;border-width: 2px;justify-content: center">
+        <div style="height: 14px;width: {{progress_width}};margin-left:{{progress}};background-color: gray"></div>
+      </div>
+      <text style="width: 750px">{{event}}</text>
+    </div>
+    <list id="list" class="list" onscroll="{{onScroll}}" offset-accuracy="5">
+      <refresh class="refresh-view" display="{{refresh_display}}" onrefresh="onrefresh">
+        <text if="{{(refresh_display==='hide')}}"> \u2193 pull to refresh</text>
         <loading-indicator class="indicator"></loading-indicator>
       </refresh>
       <cell onappear="onappear" ondisappear="ondisappear" class="row" repeat="{{rows}}" index="{{$index}}">
@@ -11,26 +18,27 @@
         </div>
       </cell>
       <loading class="loading-view" display="{{loading_display}}" onloading="onloading">
-        <text if="{{(loading_display==='hide')}}">\u2191 Loadmore </text>
+        <text if="{{(loading_display==='hide')}}">\u2191 Loadmore</text>
         <loading-indicator class="indicator"></loading-indicator>
       </loading>
     </list>
-    <text class="count">Appear items:{{appearMin}} - {{appearMax}}</text>
   </div>
 </template>
 
 <style>
   .list {
-    height:850
+
   }
+
   .count {
     font-size: 48;
-    margin:10;
+    margin: 10;
   }
+
   .indicator {
     height: 40;
     width: 40;
-    color:#45b5f0;
+    color: #45b5f0;
   }
 
   .refresh-arrow {
@@ -41,16 +49,18 @@
   .row {
     width: 750;
   }
-  
+
   .item {
     justify-content: center;
     border-bottom-width: 2;
     border-bottom-color: #c0c0c0;
     height: 100;
-    padding:20;
+    padding: 20;
   }
+
   .item-title {
   }
+
   .refresh-view {
     width: 750;
     height: 100;
@@ -62,6 +72,7 @@
     -webkit-box-align: center;
     align-items: center;
   }
+
   .loading-view {
     width: 750;
     height: 100;
@@ -73,6 +84,7 @@
     -webkit-box-align: center;
     align-items: center;
   }
+
   .indicator {
     height: 60;
     width: 60;
@@ -81,7 +93,8 @@
 </style>
 
 <script>
-
+  var dom = weex.requireModule('dom');
+  var isFirst = true;
   module.exports = {
     methods: {
       onappear: function (e) {
@@ -91,7 +104,7 @@
         appearIds.push(appearId);
         this.getMinAndMaxIds(appearIds);
       },
-      ondisappear:function (e) {
+      ondisappear: function (e) {
         var disAppearId = this.rows[e.target.attr.index].id;
         nativeLog('+++++', disAppearId);
         var appearIds = this.appearIds;
@@ -101,15 +114,15 @@
         }
         this.getMinAndMaxIds(appearIds);
       },
-      getMinAndMaxIds:function (appearIds) {
-        appearIds.sort(function(a, b) {
+      getMinAndMaxIds: function (appearIds) {
+        appearIds.sort(function (a, b) {
           return a - b;
         });
         this.appearIds = appearIds;
         this.appearMax = appearIds[appearIds.length - 1];
         this.appearMin = appearIds[0];
       },
-      onrefresh: function(e) {
+      onrefresh: function (e) {
         var self = this;
         self.refresh_display = 'show';
         self.$call('modal', 'toast', {
@@ -121,7 +134,7 @@
         }, 3000);
       },
 
-      onloading: function() {
+      onloading: function () {
         var self = this;
         self.loading_display = 'show';
         self.$call('modal', 'toast', {
@@ -130,19 +143,37 @@
 
         this.$call('timer', 'setTimeout', function () {
           if (self.rows.length <= 33) {
-              self.rows.push(self.moreRows[self.rows.length - 29]);
-            }
+            self.rows.push(self.moreRows[self.rows.length - 29]);
+          }
           self.loading_display = 'hide';
         }, 3000);
       },
+
+      onScroll: function (e) {
+        var self = this;
+        this.event = 'contentOffset: ' + JSON.stringify(e.contentOffset) + '\ncontentSize: ' + JSON.stringify(e.contentSize);
+        dom.getComponentRect(this.$el('list'), function (ret) {
+          if (e.contentOffset.x == 0 && e.contentOffset.y == 0 && isFirst) {
+            isFirst = false;
+            return;
+          }
+          var listHeight = ret.size.height;
+          self.progress_width = (listHeight / e.contentSize.height) * 750;
+          var offsetY = e.contentOffset.y > 0 ? 0 : Math.abs(e.contentOffset.y);
+          self.progress = (offsetY / (e.contentSize.height - listHeight)) * (750 - self.progress_width);
+        });
+      }
     },
     data: {
+      progress_width: 0,
+      progress:0,
+      event:'-',
       refresh_display: 'hide',
       loading_display: 'hide',
-      appearMin:1,
-      appearMax:1,
-      appearIds:[],
-      rows:[
+      appearMin: 1,
+      appearMax: 1,
+      appearIds: [],
+      rows: [
         {id: 1},
         {id: 2},
         {id: 3},

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/bc723eb9/examples/component/scroller-demo.we
----------------------------------------------------------------------
diff --git a/examples/component/scroller-demo.we b/examples/component/scroller-demo.we
index 750fd78..a484bb0 100644
--- a/examples/component/scroller-demo.we
+++ b/examples/component/scroller-demo.we
@@ -1,25 +1,34 @@
 <template>
-  <scroller class="list" append="tree">
+  <div>
+    <div style="height: 20px;width: 750px;border-color: black;border-width: 2px;justify-content: center">
+      <div style="height: 14px;width: {{progress_width}};margin-left:{{progress}};background-color: gray"></div>
+    </div>
+    <text style="width: 750px">{{event}}</text>
 
-    <refresh class="refresh-view" display="{{refresh_display}}" onrefresh="onrefresh">
-      <loading-indicator class="indicator" ></loading-indicator>
-      <text class="refresh-arrow" style="text-align: center; color:rgb(238, 162, 54)" if="{{(refresh_display==='hide')}}">Pull To Refresh</text>
-    </refresh>
+    <scroller id="scroller" onscroll="{{onScroll}}">
 
-    <div class="section" repeat="{{sections}}">
-      <div class="header">
-        <text class="header-title">{{title}}</text>
-      </div>
-      <div class="item" repeat="{{items}}">
-        <text class="item-title">row {{id}}</text>
+      <refresh class="refresh-view" display="{{refresh_display}}" onrefresh="onrefresh">
+        <loading-indicator class="indicator"></loading-indicator>
+        <text class="refresh-arrow" style="text-align: center; color:rgb(238, 162, 54)"
+              if="{{(refresh_display==='hide')}}">Pull To Refresh
+        </text>
+      </refresh>
+
+      <div class="section" repeat="{{sections}}">
+        <div class="header">
+          <text class="header-title">{{title}}</text>
+        </div>
+        <div class="item" repeat="{{items}}">
+          <text class="item-title">row {{id}}</text>
+        </div>
       </div>
-    </div>
 
-    <loading class="loading-view" display="{{loading_display}}" onloading="onloading">
-      <loading-indicator class="indicator" ></loading-indicator>
-    </loading>
+      <loading class="loading-view" display="{{loading_display}}" onloading="onloading">
+        <loading-indicator class="indicator"></loading-indicator>
+      </loading>
 
-  </scroller>
+    </scroller>
+  </div>
 </template>
 
 <style>
@@ -85,33 +94,48 @@
 
 <script>
   require('weex-components');
+  var dom = weex.requireModule('dom');
   module.exports = {
     methods: {
-      onrefresh: function(e) {
+      onrefresh: function (e) {
         var self = this;
         self.refresh_display = 'show';
         self.$call('modal', 'toast', {
           'message': 'onrefresh'
         });
-        this.$call('timer', 'setTimeout', function() {
+        this.$call('timer', 'setTimeout', function () {
           self.refresh_display = 'hide';
         }, 3000);
       },
-      onloading: function(e) {
+      onloading: function (e) {
         var self = this;
         self.loading_display = 'show';
         self.$call('modal', 'toast', {
           'message': 'onloading'
         });
-        this.$call('timer', 'setTimeout', function() {
+        this.$call('timer', 'setTimeout', function () {
           if (self.sections.length <= 6) {
             self.sections.push(self.moreSections[self.sections.length - 2]);
           }
           self.loading_display = 'hide';
         }, 3000);
+      },
+      onScroll: function (e) {
+        var self = this;
+        this.event = 'contentOffset: ' + JSON.stringify(e.contentOffset) + '\ncontentSize: ' + JSON.stringify(e.contentSize);
+        dom.getComponentRect(this.$el('scroller'), function (ret) {
+          console.log(ret.size.height);
+          var listHeight = ret.size.height;
+          self.progress_width = (listHeight / e.contentSize.height) * 750;
+          var offsetY = e.contentOffset.y > 0 ? 0 : Math.abs(e.contentOffset.y);
+          self.progress = (offsetY / (e.contentSize.height - listHeight)) * (750 - self.progress_width);
+        });
       }
     },
     data: {
+      event: '-',
+      progress_width: 0,
+      progress:0,
       refresh_display: 'hide',
       loading_display: 'hide',
       sections: [


[2/3] incubator-weex git commit: * [example] add slider scroll event demo

Posted by bo...@apache.org.
* [example] add slider scroll event demo


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

Branch: refs/heads/0.11-dev
Commit: ece44ec720f58a7b32c77e8bda7440ccd7514d74
Parents: bc723eb
Author: moxun.ljf <fu...@foxmail.com>
Authored: Mon Mar 27 13:01:02 2017 +0800
Committer: moxun.ljf <fu...@foxmail.com>
Committed: Mon Mar 27 13:01:02 2017 +0800

----------------------------------------------------------------------
 examples/component/slider-tab.we | 100 ++++++++++++++++++++++++++++++++++
 1 file changed, 100 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ece44ec7/examples/component/slider-tab.we
----------------------------------------------------------------------
diff --git a/examples/component/slider-tab.we b/examples/component/slider-tab.we
new file mode 100644
index 0000000..7a3bf8a
--- /dev/null
+++ b/examples/component/slider-tab.we
@@ -0,0 +1,100 @@
+<template>
+  <div style="padding: 25px">
+    <div style="height: 80px; flex-direction: row;">
+      <div style="flex: 1;background-color: darkcyan;justify-content: center;align-items: center" onclick="goto(0)">
+        <text class="page-title">Page 1</text>
+      </div>
+      <div style="flex: 1;background-color: aquamarine;justify-content: center;align-items: center" onclick="goto(1)">
+        <text class="page-title">Page 2</text>
+      </div>
+      <div style="flex: 1;background-color: darkcyan;justify-content: center;align-items: center" onclick="goto(2)">
+        <text class="page-title">Page 3</text>
+      </div>
+    </div>
+    <div style="height: 10px;background-color: skyblue">
+      <div style="width: 233px;height: 10px;margin-left:{{progress}}; background-color:darkblue"></div>
+    </div>
+    <slider class="slider" interval="4500" onchange="onchange" append="tree" index="{{index}}" onscroll="onscroll"
+            onchange="onchange" offset-x-accuracy="0.01">
+      <div class="frame" repeat="{{img in imageList}}">
+        <image class="image" resize="cover" src="{{img.src}}"></image>
+        <text class="title">{{img.title}}</text>
+      </div>
+      <indicator style="height: 20px"></indicator>
+    </slider>
+  </div>
+</template>
+<style>
+  .page-title {
+    color: black;
+    font-size: 40px;
+    font-weight: bold;
+  }
+
+  .image {
+    width: 700px;
+    height: 700px;
+  }
+
+  .slider {
+    width: 700px;
+    height: 700px;
+    position: absolute;
+    border-width: 2px;
+    border-style: solid;
+    border-color: #41B883;
+  }
+
+  .title {
+    position: absolute;
+    top: 20px;
+    left: 20px;
+    padding-left: 20px;
+    width: 200px;
+    color: #FFFFFF;
+    font-size: 36px;
+    line-height: 60px;
+    background-color: rgba(0, 0, 0, 0.3);
+  }
+
+  .frame {
+    width: 700px;
+    height: 700px;
+  }
+</style>
+<script>
+  export default {
+    data: {
+      imageList: [
+        {title: 'Page 1', src: 'https://gd2.alicdn.com/bao/uploaded/i2/T14H1LFwBcXXXXXXXX_!!0-item_pic.jpg'},
+        {
+          title: 'Page 2',
+          src: 'https://gd1.alicdn.com/bao/uploaded/i1/TB1PXJCJFXXXXciXFXXXXXXXXXX_!!0-item_pic.jpg'
+        },
+        {
+          title: 'Page 3',
+          src: 'https://gd3.alicdn.com/bao/uploaded/i3/TB1x6hYLXXXXXazXVXXXXXXXXXX_!!0-item_pic.jpg'
+        }
+      ],
+      index: 0,
+      progress: 0,
+    },
+    methods: {
+      onchange (event) {
+        console.log('changed:', event.index)
+      },
+      goto (i) {
+        this.index = i;
+        this.progress = i * 233;
+      },
+      onscroll (e) {
+        var ratio = parseFloat(e.offsetXRatio);
+        this.progress = 233 * this.index + (233 * -ratio);
+      },
+      onchange (e) {
+        this.goto(parseInt(e.index));
+      }
+    }
+  }
+</script>
+


[3/3] incubator-weex git commit: Merge branch '0.11-dev' into example-feature-scroll

Posted by bo...@apache.org.
Merge branch '0.11-dev' into example-feature-scroll

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

Branch: refs/heads/0.11-dev
Commit: a396e7c6bee7714e5c9eb4493640c6297f30bd2e
Parents: ece44ec 5721b58
Author: moxun <fu...@foxmail.com>
Authored: Tue Mar 28 09:59:50 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Tue Mar 28 09:59:50 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
 .../taobao/weex/dom/WXRecyclerDomObject.java    |    4 +-
 build/webpack.macacatest.config.js              |    6 +-
 examples/component/image-demo.we                |    2 +-
 examples/component/list/list-basic.we           |    6 +-
 examples/module/chatroom-demo.we                |  227 ++
 examples/module/websocket-demo.we               |   50 +-
 examples/vue/components/input.vue               |  203 +-
 examples/vue/components/list.vue                |    3 +
 examples/vue/index.vue                          |    1 +
 examples/vue/showcase/boxshadow.vue             |   39 +
 .../bundlejs/vue/components/waterfall.js        |  873 +++++
 .../Component/Recycler/WXMultiColumnLayout.h    |    2 +
 .../Component/Recycler/WXMultiColumnLayout.m    |    5 +-
 .../Component/Recycler/WXRecyclerComponent.m    |   45 +-
 .../Recycler/WXRecyclerDataController.h         |    4 +
 .../Recycler/WXRecyclerDataController.m         |   18 +
 ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m   |   40 +-
 test/pages/components/recycler.vue              |  480 +++
 test/scripts/components/recycler.test.js        |  412 +++
 146 files changed, 35546 insertions(+), 912 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a396e7c6/examples/component/list/list-basic.we
----------------------------------------------------------------------
diff --cc examples/component/list/list-basic.we
index 37f9c25,7efc5a0..e87d75c
--- a/examples/component/list/list-basic.we
+++ b/examples/component/list/list-basic.we
@@@ -27,14 -21,12 +27,14 @@@
  
  <style>
    .list {
- 
+     height:850;
    }
 +
    .count {
      font-size: 48;
 -    margin:10;
 +    margin: 10;
    }
 +
    .indicator {
      height: 40;
      width: 40;
@@@ -55,12 -47,13 +55,16 @@@
      border-bottom-width: 2;
      border-bottom-color: #c0c0c0;
      height: 100;
 -    padding:20;
 +    padding: 20;
    }
 +
+   .item:active {
+     background-color: #00BFFF;
+   }
++
    .item-title {
    }
 +
    .refresh-view {
      width: 750;
      height: 100;