You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ta...@apache.org on 2017/07/28 09:11:40 UTC

[01/43] incubator-weex git commit: * [html5] bind click listener to event tap.

Repository: incubator-weex
Updated Branches:
  refs/heads/0.16-dev 495fc6b24 -> b11c4e113


* [html5] bind click listener to event tap.


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

Branch: refs/heads/0.16-dev
Commit: a35c690c1f4e3d43ed93151215bdbe9457942d91
Parents: d20e0d8
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jun 29 17:37:02 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jun 29 17:37:02 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/core/node.js | 122 +++++++++++++++++++++++++------------
 1 file changed, 84 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a35c690c/html5/render/vue/core/node.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/core/node.js b/html5/render/vue/core/node.js
index 87981d8..196d061 100644
--- a/html5/render/vue/core/node.js
+++ b/html5/render/vue/core/node.js
@@ -54,10 +54,25 @@ function getListeners (vnode, evt) {
 }
 
 const supportedEvents = [
-  'tap', 'click', 'longpress', 'appear', 'disappear',
+  'longpress', 'appear', 'disappear',
   // 'touchstart', 'touchmove', 'touchend',
   'panstart', 'panmove', 'panend', 'swipe', 'longpress'
 ]
+
+/**
+ * is a element in a '<a>' tag?
+ * @param {HTMLElement} el
+ */
+function isInANode (el) {
+  let parent = el.parentNode
+  while (parent && parent !== document.body) {
+    if (parent.tagName.toLowerCase() === 'a') {
+      return true
+    }
+    parent = parent.parentNode
+  }
+}
+
 /**
  * emit native events to enable v-on.
  * @param {VComponent} context: which one to emit a event on.
@@ -66,52 +81,83 @@ const supportedEvents = [
 export function createEventMap (context, extras = []) {
   const eventMap = {}
   /**
-   * bind name with evt event. e.g. bind 'click' with 'tap' event.
+   * Bind some original type event to your specified type event handler.
+   * e.g. bind 'tap' event to 'click' event listener: bindFunc('tap')('click').
+   * Or bind certian event with your specified handler: bindFunc('click', someFunction)
    */
-  const bindFunc = (evt) => {
-    return name => {
-      const evtType = evt || name
-      eventMap[evtType] = function (e) {
-        /**
-         * allow original bubbling.
-         * use '_triggered' to control actural bubbling.
-         */
-        if (e._triggered) {
-          return
-        }
-        // but should trigger the closest parent which has bound the
-        // event handler.
-        let vm = context
-        while (vm) {
-          const ons = getListeners(vm.$vnode, name)
-          const len = ons.length
-          let idx = 0
-          while (idx < len) {
-            let on = ons[idx]
-            if (on && on.fn) {
-              on = on.fn
-            }
-            on && on.call(vm,
-              evtType === name ? e : extend({}, e, { type: name })
-            )
-            idx++
+  const bindFunc = (originalType) => {
+    return listenTo => {
+      let handler
+      if (typeof listenTo === 'function') {
+        handler = listenTo
+      }
+      else if (typeof listenTo === 'string') {
+        if (!originalType) { originalType = listenTo }
+        handler = function (e) {
+          /**
+           * allow original bubbling.
+           * use '_triggered' to control actural bubbling.
+           */
+          if (e._triggered) {
+            return
           }
-
-          // once a parent node (or self node) has triggered the handler,
-          // then it stops bubble immediately, and a '_triggered' object is set.
-          if (len > 0) {
-            e._triggered = {
-              el: vm.$el
+          // but should trigger the closest parent which has bound the
+          // event handler.
+          let vm = context
+          while (vm) {
+            const ons = getListeners(vm.$vnode, listenTo)
+            const len = ons.length
+            if (len > 0) {
+              let idx = 0
+              while (idx < len) {
+                let on = ons[idx]
+                if (on && on.fn) {
+                  on = on.fn
+                }
+                on && on.call(vm,
+                  originalType === listenTo ? e : extend({}, e, { type: listenTo })
+                )
+                idx++
+              }
+              // once a parent node (or self node) has triggered the handler, then
+              // it stops bubbling immediately, and a '_triggered' object is set.
+              e._triggered = {
+                el: vm.$el
+              }
+              return
             }
-            return
+            vm = vm.$parent
           }
-          vm = vm.$parent
         }
       }
+      eventMap[originalType] = handler
     }
   }
   supportedEvents.concat(extras).forEach(bindFunc())
-  // bindFunc('tap')('click')
+  bindFunc('tap')('click')
+  /**
+   * Special treatment for click event:
+   * we already use tap to trigger click event, so the click event should:
+   * 1. trigger none of any vm's click listeners.
+   * 2. prevent default behaviour for a `<a>` element.
+   * This means the click event should always be swallowed in silence.
+   */
+  bindFunc('click')(function (e) {
+    if (e._triggered) {
+      return
+    }
+    let vm = context
+    while (vm) {
+      const ons = getListeners(vm.$vnode, 'click')
+      const len = ons.length
+      if (len > 0 && vm.$el && isInANode(vm.$el)) {
+        e.preventDefault()
+        e._triggered = { el: vm.$el }
+        return
+      }
+      vm = vm.$parent
+    }
+  })
 
   return eventMap
 }


[32/43] incubator-weex git commit: * [html5] clean debugger.

Posted by ta...@apache.org.
* [html5] clean debugger.


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

Branch: refs/heads/0.16-dev
Commit: 2ef0c5103bd093c1572edb679f5c2b67e9a00579
Parents: a2064a4
Author: MrRaindrop <te...@gmail.com>
Authored: Tue Jul 25 21:14:55 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Tue Jul 25 21:14:55 2017 +0800

----------------------------------------------------------------------
 html5/test/render/vue/utils/style.js | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2ef0c510/html5/test/render/vue/utils/style.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/utils/style.js b/html5/test/render/vue/utils/style.js
index c073987..2b2e321 100644
--- a/html5/test/render/vue/utils/style.js
+++ b/html5/test/render/vue/utils/style.js
@@ -122,7 +122,6 @@ describe('transform', () => {
     })
     it('should replace all transform properties', () => {
       addTransform(node, style, true)
-      debugger;
       expect(trimSpace(node.style.transform)).to.be.equal(
         trimSpace(style.translate + style.rotate))
       // webkitTransform will remove last whitespace automatically
@@ -151,7 +150,6 @@ describe('transform', () => {
       node.style.transform = nodeStyle.translate + ' ' + nodeStyle.scale + ' ' + nodeStyle.rotate
       node.style.webkitTransform = nodeStyle.translate + ' ' + nodeStyle.scale + ' ' + nodeStyle.rotate
       addTranslateX(node, toAdd)
-      debugger;
       // webkitTransform will reserved whitespace between translate value but transform will not.
       expect(trimSpace(node.style.transform)).to.be.equal(
         trimSpace(nodeStyle.translate.replace(translateReg, translateReplaceFunction)


[08/43] incubator-weex git commit: Merge branch '0.15-dev' into 0.15-dev-web

Posted by ta...@apache.org.
Merge branch '0.15-dev' into 0.15-dev-web


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

Branch: refs/heads/0.16-dev
Commit: 69365b3b41df8ea3c3b2a6504980dbefa431a938
Parents: 34f9f59 cc9ca19
Author: MrRaindrop <te...@gmail.com>
Authored: Mon Jul 3 17:40:21 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Mon Jul 3 17:40:21 2017 +0800

----------------------------------------------------------------------
 .../java/com/taobao/weex/WXEnvironment.java     |   4 +
 .../com/taobao/weex/bridge/WXBridgeManager.java |  12 +-
 .../java/com/taobao/weex/common/WXConfig.java   |   1 +
 .../taobao/weex/ui/component/WXComponent.java   |   8 +
 .../ui/component/list/BasicListComponent.java   |  57 +++--
 .../taobao/weex/ui/component/list/WXCell.java   |   9 +
 build/karma.vue.conf.js                         |   9 +-
 doc/source/cn/references/weex-variable.md       |   1 +
 doc/source/references/weex-variable.md          |   1 +
 html5/render/vue/core/style.js                  |   1 -
 html5/render/vue/modules/websocket/websocket.js |   1 +
 html5/test/render/vue/helper/utils.js           |  10 +-
 html5/test/render/vue/modules/modal.js          | 225 +++++++++++++++++++
 html5/test/render/vue/modules/websocket.js      | 109 ++++++++-
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |   2 +-
 .../WeexSDK/Sources/Component/WXTextComponent.m |  16 ++
 ios/sdk/WeexSDK/Sources/Utility/WXUtility.m     |   1 +
 package.json                                    |   2 +-
 18 files changed, 432 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/69365b3b/package.json
----------------------------------------------------------------------


[17/43] incubator-weex git commit: Merge branch '0.15-dev' into 0.15-dev-web

Posted by ta...@apache.org.
Merge branch '0.15-dev' into 0.15-dev-web


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

Branch: refs/heads/0.16-dev
Commit: 194a57d98b5462289b7a7329a3f59af84b27a6af
Parents: eb5dcb8 9764e25
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 16:29:52 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 16:29:52 2017 +0800

----------------------------------------------------------------------
 .../java/com/taobao/weex/dom/WXDomModule.java   |   1 -
 .../com/taobao/weex/dom/WXTextDomObject.java    |   4 +-
 .../com/taobao/weex/dom/action/Actions.java     |   4 +-
 .../taobao/weex/ui/component/WXScroller.java    |  79 +++---
 .../com/taobao/weex/ui/component/WXSlider.java  |  10 +-
 .../ui/component/list/BasicListComponent.java   |  66 ++---
 .../taobao/weex/ui/component/list/WXCell.java   |  10 -
 .../weex/ui/view/WXHorizontalScrollView.java    |  27 ++
 .../com/taobao/weex/ui/view/WXScrollView.java   |   1 -
 build/config.js                                 |   1 +
 build/karma.vue.conf.js                         |   7 +
 doc/source/cn/references/modules/meta.md        |  96 +++++++
 doc/source/cn/references/modules/timer.md       |  47 ++++
 doc/source/references/modules/meta.md           |  97 +++++++
 doc/source/references/modules/timer.md          |  58 ++++
 examples/vue/hello.vue                          |   2 +-
 html5/render/vue/modules/websocket/websocket.js |   1 +
 html5/render/vue/utils/event.js                 |   6 +-
 html5/render/vue/utils/func.js                  | 136 +++++++--
 html5/render/vue/utils/index.js                 | 104 -------
 html5/render/vue/utils/perf.js                  |   3 +-
 html5/test/render/vue/modules/websocket.js      |  90 +++---
 html5/test/render/vue/utils/component.js        |  50 +++-
 html5/test/render/vue/utils/event.js            |  78 ++++++
 html5/test/render/vue/utils/func.js             | 278 +++++++++++++++++--
 html5/test/render/vue/utils/lazyload.js         | 106 +++++++
 html5/test/render/vue/utils/perf.js             | 132 +++++++++
 html5/test/render/vue/utils/style.js            | 157 +++++++++--
 html5/test/render/vue/utils/type.js             |  49 ++++
 html5/test/render/vue/validator/index.js        |  31 ++-
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    |  33 +--
 .../WeexSDK/Sources/Component/WXAComponent.m    |   2 +-
 .../Sources/Component/WXCycleSliderComponent.m  |   6 +
 .../WeexSDK/Sources/Component/WXEditComponent.m |   2 +-
 .../Sources/Component/WXImageComponent.m        |   4 +-
 .../WeexSDK/Sources/Component/WXListComponent.m |  55 +++-
 .../WeexSDK/Sources/Component/WXTextComponent.m |  54 ++--
 ios/sdk/WeexSDK/Sources/Component/WXTransform.m |  24 +-
 .../Sources/Component/WXVideoComponent.m        |   2 +-
 .../WeexSDK/Sources/Component/WXWebComponent.m  |   2 +-
 .../Sources/Handler/WXURLRewriteDefaultImpl.m   |   2 +-
 .../WeexSDK/Sources/Layout/WXComponent+Layout.m |   2 +-
 ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m |   2 +-
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |   6 +-
 .../WeexSDK/Sources/Module/WXAnimationModule.m  |  14 +-
 ios/sdk/WeexSDK/Sources/Module/WXDomModule.m    |   8 +-
 ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m |   7 +
 ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m |   2 +-
 .../Sources/Protocol/WXURLRewriteProtocol.h     |   2 +-
 .../Sources/View/WXComponent+ViewManagement.m   |   4 +
 ios/sdk/WeexSDKTests/WXAnimationModuleTests.m   |  29 ++
 pre-build/native-bundle-main.js                 |  16 +-
 52 files changed, 1570 insertions(+), 439 deletions(-)
----------------------------------------------------------------------



[30/43] incubator-weex git commit: Merge branch '0.15-dev-web' into 0.16-dev-web

Posted by ta...@apache.org.
Merge branch '0.15-dev-web' into 0.16-dev-web


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

Branch: refs/heads/0.16-dev
Commit: 7e6c95b1cc3b044594d4a06434cb3dd85a93243b
Parents: 58aaee6 b50035e
Author: MrRaindrop <te...@gmail.com>
Authored: Tue Jul 25 16:09:08 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Tue Jul 25 16:09:08 2017 +0800

----------------------------------------------------------------------
 .gitignore                                      |   3 +
 build/build.js                                  | 105 +++-
 build/config.js                                 |  35 +-
 entry.js                                        |  11 +
 html5/render/vue/README.md                      |  77 +++
 html5/render/vue/components/a.js                |  90 +--
 html5/render/vue/components/div.js              |  43 +-
 html5/render/vue/components/image.js            |  18 +-
 html5/render/vue/components/index.js            |  37 +-
 html5/render/vue/components/input.js            | 130 +++--
 html5/render/vue/components/scrollable/cell.js  |  39 ++
 .../render/vue/components/scrollable/header.js  | 102 ++--
 html5/render/vue/components/scrollable/index.js |  29 +
 html5/render/vue/components/scrollable/list.js  |  82 +++
 .../vue/components/scrollable/list/cell.js      |  36 --
 .../vue/components/scrollable/list/index.js     |  77 ---
 .../vue/components/scrollable/list/listMixin.js |  47 --
 .../vue/components/scrollable/list/style.js     |  34 --
 .../components/scrollable/loading-indicator.js  |  17 +-
 .../render/vue/components/scrollable/loading.js | 141 ++---
 .../vue/components/scrollable/mixins/index.js   |   7 +
 .../vue/components/scrollable/mixins/list.js    |  46 ++
 .../components/scrollable/mixins/scrollable.js  | 267 +++++++++
 .../render/vue/components/scrollable/refresh.js | 157 ++---
 .../vue/components/scrollable/scroller.js       | 135 +++--
 .../render/vue/components/scrollable/style.css  |  66 +++
 .../vue/components/scrollable/waterfall.js      | 573 ++++++++++---------
 html5/render/vue/components/slider/index.js     |  69 +--
 html5/render/vue/components/slider/indicator.js |  18 +-
 .../render/vue/components/slider/slideMixin.js  |  46 +-
 .../vue/components/slider/slider-neighbor.js    |  12 +-
 html5/render/vue/components/slider/slider.js    |  75 +++
 html5/render/vue/components/switch.js           | 114 ++--
 html5/render/vue/components/text.js             |  52 +-
 html5/render/vue/components/textarea.js         | 104 ++--
 html5/render/vue/components/video.js            | 107 ++--
 html5/render/vue/components/web.js              |  98 ++--
 html5/render/vue/core/style.js                  |  35 --
 html5/render/vue/env/global.js                  |   6 +
 html5/render/vue/env/index.js                   |   5 -
 html5/render/vue/index.js                       |   6 -
 html5/render/vue/mixins/base.js                 |  26 -
 html5/render/vue/mixins/index.js                |   2 -
 html5/render/vue/mixins/scrollable.js           | 233 --------
 html5/render/vue/mixins/style.js                |   4 +-
 html5/render/vue/modules/animation.js           |  36 +-
 html5/render/vue/modules/dom.js                 |  21 +-
 html5/render/vue/modules/globalEvent.js         |   8 +-
 html5/render/vue/modules/index.js               |  36 +-
 html5/render/vue/modules/navigator.js           |  10 +-
 html5/render/vue/modules/webview.js             |  18 +-
 html5/render/vue/styles/base.css                |  67 ---
 package.json                                    |  15 +-
 packages/weex-vue-plugins/weex-vue-a/README.md  |   3 +
 .../weex-vue-plugins/weex-vue-a/package.json    |  26 +
 .../weex-vue-plugins/weex-vue-a/src/index.js    |   2 +
 .../weex-vue-animation/README.md                |   3 +
 .../weex-vue-animation/package.json             |  27 +
 .../weex-vue-animation/src/index.js             |   2 +
 .../weex-vue-clipboard/README.md                |   3 +
 .../weex-vue-clipboard/package.json             |  27 +
 .../weex-vue-clipboard/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-dom/README.md     |   3 +
 .../weex-vue-plugins/weex-vue-dom/package.json  |  27 +
 .../weex-vue-plugins/weex-vue-dom/src/index.js  |   2 +
 .../weex-vue-plugins/weex-vue-event/README.md   |   3 +
 .../weex-vue-event/package.json                 |  27 +
 .../weex-vue-event/src/index.js                 |   2 +
 .../weex-vue-geolocation/README.md              |   3 +
 .../weex-vue-geolocation/package.json           |  27 +
 .../weex-vue-geolocation/src/index.js           |   2 +
 .../weex-vue-global-event/README.md             |   3 +
 .../weex-vue-global-event/package.json          |  27 +
 .../weex-vue-global-event/src/index.js          |   2 +
 .../weex-vue-plugins/weex-vue-input/README.md   |   3 +
 .../weex-vue-input/package.json                 |  26 +
 .../weex-vue-input/src/index.js                 |   2 +
 .../weex-vue-plugins/weex-vue-modal/README.md   |   3 +
 .../weex-vue-modal/package.json                 |  27 +
 .../weex-vue-modal/src/index.js                 |   2 +
 .../weex-vue-navigator/README.md                |   3 +
 .../weex-vue-navigator/package.json             |  27 +
 .../weex-vue-navigator/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-slider/README.md  |   3 +
 .../weex-vue-slider/package.json                |  27 +
 .../weex-vue-slider/src/index.js                |   2 +
 .../weex-vue-plugins/weex-vue-storage/README.md |   3 +
 .../weex-vue-storage/package.json               |  27 +
 .../weex-vue-storage/src/index.js               |   2 +
 .../weex-vue-plugins/weex-vue-stream/README.md  |   3 +
 .../weex-vue-stream/package.json                |  27 +
 .../weex-vue-stream/src/index.js                |   2 +
 .../weex-vue-plugins/weex-vue-switch/README.md  |   3 +
 .../weex-vue-switch/package.json                |  26 +
 .../weex-vue-switch/src/index.js                |   2 +
 .../weex-vue-textarea/.DS_Store                 | Bin 0 -> 6148 bytes
 .../weex-vue-textarea/README.md                 |   3 +
 .../weex-vue-textarea/package.json              |  26 +
 .../weex-vue-textarea/src/index.js              |   2 +
 .../weex-vue-plugins/weex-vue-video/README.md   |   3 +
 .../weex-vue-video/package.json                 |  26 +
 .../weex-vue-video/src/index.js                 |   2 +
 .../weex-vue-plugins/weex-vue-web/README.md     |   3 +
 .../weex-vue-plugins/weex-vue-web/package.json  |  26 +
 .../weex-vue-plugins/weex-vue-web/src/index.js  |   2 +
 .../weex-vue-websocket/README.md                |   3 +
 .../weex-vue-websocket/package.json             |  27 +
 .../weex-vue-websocket/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-webview/README.md |   3 +
 .../weex-vue-webview/package.json               |  27 +
 .../weex-vue-webview/src/index.js               |   2 +
 packages/weex-vue-render/README.md              |  69 +++
 packages/weex-vue-render/package.json           |   9 +-
 packages/weex-vue-render/src/index.core.js      |  13 +
 packages/weex-vue-render/src/index.js           |  12 +
 scripts/dist-vue.sh                             |   2 +-
 vue.html                                        |   8 +-
 117 files changed, 2703 insertions(+), 1639 deletions(-)
----------------------------------------------------------------------



[23/43] incubator-weex git commit: * [html5] add src to weex-vue-render package.

Posted by ta...@apache.org.
* [html5] add src to weex-vue-render package.


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

Branch: refs/heads/0.16-dev
Commit: 8c8034e34885cbdc89a1043c4e819d7fe7a42b7f
Parents: 611cae8
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 18:33:54 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 18:33:54 2017 +0800

----------------------------------------------------------------------
 packages/weex-vue-render/src/index.core.js | 13 +++++++++++++
 packages/weex-vue-render/src/index.js      | 12 ++++++++++++
 2 files changed, 25 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8c8034e3/packages/weex-vue-render/src/index.core.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/src/index.core.js b/packages/weex-vue-render/src/index.core.js
new file mode 100644
index 0000000..3bc8edb
--- /dev/null
+++ b/packages/weex-vue-render/src/index.core.js
@@ -0,0 +1,13 @@
+import weex from '../../../html5/render/vue'
+
+import div from '../../../html5/render/vue/components/div'
+import text from '../../../html5/render/vue/components/text'
+import image from '../../../html5/render/vue/components/image'
+import scrollable from '../../../html5/render/vue/components/scrollable'
+
+weex.install(div)
+weex.install(text)
+weex.install(image)
+weex.install(scrollable)
+
+export default weex

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8c8034e3/packages/weex-vue-render/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/src/index.js b/packages/weex-vue-render/src/index.js
new file mode 100644
index 0000000..efbbaeb
--- /dev/null
+++ b/packages/weex-vue-render/src/index.js
@@ -0,0 +1,12 @@
+import weex from '../../../html5/render/vue'
+
+import components from '../../../html5/render/vue/components'
+import modules from '../../../html5/render/vue/modules'
+
+const plugins = components.concat(modules)
+
+plugins.forEach(function (plugin) {
+  weex.install(plugin)
+})
+
+export default weex


[21/43] incubator-weex git commit: * [html5] release vue-render v0.11.21 && render-core.

Posted by ta...@apache.org.
* [html5] release vue-render v0.11.21 && render-core.


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

Branch: refs/heads/0.16-dev
Commit: f9846a35518d286f9157c4b512fc8f301db9879a
Parents: 7f34d5b
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 18:29:39 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 18:29:39 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/README.md            | 69 ++++++++++++++++++++++++++++++
 package.json                          |  2 +-
 packages/weex-vue-render/README.md    | 69 ++++++++++++++++++++++++++++++
 packages/weex-vue-render/package.json |  2 +-
 scripts/dist-vue.sh                   |  2 +-
 5 files changed, 141 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f9846a35/html5/render/vue/README.md
----------------------------------------------------------------------
diff --git a/html5/render/vue/README.md b/html5/render/vue/README.md
index f0d3ba8..07286be 100644
--- a/html5/render/vue/README.md
+++ b/html5/render/vue/README.md
@@ -25,6 +25,75 @@ If you perfer cdn way, and use script tag to import a script link, just import i
 <script>{{your js bundle}}</script>
 ```
 
+## use render-core and plugins
+
+You can juse use a **render-core** in your page, and define your needs for the plugins (components and API modules) in your entry file, so that your would save a lot of bundle size and bandwidth. On the other hand, The full version contains all the built-in components and API modules, which will waste a lot of bundle size and bandwidth if you haven't use most of them.
+
+To use the render-core and the plugins, just install the plugins in your entry file.
+
+```javascript
+import Vue from 'vue'
+
+// import render-core.
+import weex from 'weex-vue-render/dist/index.core'
+
+// import the plugins (components and modules) you want to use.
+import slider from 'weex-vue-slider'
+import stream from 'weex-vue-stream'
+
+// init weex.
+weex.init(Vue)
+
+// install the plugins.
+weex.install(slider)
+weex.install(stream)
+
+import App from 'App.vue'
+new Vue(App)
+```
+
+#### built-in components in render-core
+
+These components have already integrated into render-core. You don't have to import and install them:
+
+* div
+* text
+* image
+* scrollable components (scroller, list, waterfall)
+
+#### available built-in components for you to install
+
+| npm module name | component name |
+| --- | --- |
+| weex-vue-a | a |
+| weex-vue-input | input |
+| weex-vue-slider | slider / slider-neighbor |
+| weex-vue-switch | switch |
+| weex-vue-textarea | textarea |
+| weex-vue-video | video |
+| weex-vue-web | web |
+
+#### available API modules for you to install
+
+| npm module name | API module name |
+| --- | --- |
+| weex-vue-animation | animation |
+| weex-vue-clipboard | clipboard |
+| weex-vue-dom | dom |
+| weex-vue-event | event |
+| weex-vue-geolocation | geolocation |
+| weex-vue-global-event | globalEvent |
+| weex-vue-modal | modal |
+| weex-vue-navigator | navigator |
+| weex-vue-storage | storage |
+| weex-vue-stream | stream |
+| weex-vue-websocket | websocket |
+| weex-vue-webview | webview |
+
+Some of the above plugins may not be mentioned in weex documents. Just ignore them if you have no idear about what they are and how to use them.
+
+You can develop more plugins for your app. Accordingly the same plugin for other two platforms (iOS and Android) should also be built and intergrated in your app if you want it run on all three platforms.
+
 ## use vue-loader to bundle .vue file
 
 NOTE: you should inject `$processStyle` to preprocess vnode's style in vue-loader's postTransformNode hook.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f9846a35/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 133be70..1d86f3b 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "subversion": {
     "browser": "0.5.0",
     "framework": "0.20.6",
-    "vue-render": "0.11.57",
+    "vue-render": "0.12.1",
     "transformer": ">=0.1.5 <0.5"
   },
   "description": "A framework for building Mobile cross-platform UI",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f9846a35/packages/weex-vue-render/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/README.md b/packages/weex-vue-render/README.md
index f0d3ba8..07286be 100644
--- a/packages/weex-vue-render/README.md
+++ b/packages/weex-vue-render/README.md
@@ -25,6 +25,75 @@ If you perfer cdn way, and use script tag to import a script link, just import i
 <script>{{your js bundle}}</script>
 ```
 
+## use render-core and plugins
+
+You can juse use a **render-core** in your page, and define your needs for the plugins (components and API modules) in your entry file, so that your would save a lot of bundle size and bandwidth. On the other hand, The full version contains all the built-in components and API modules, which will waste a lot of bundle size and bandwidth if you haven't use most of them.
+
+To use the render-core and the plugins, just install the plugins in your entry file.
+
+```javascript
+import Vue from 'vue'
+
+// import render-core.
+import weex from 'weex-vue-render/dist/index.core'
+
+// import the plugins (components and modules) you want to use.
+import slider from 'weex-vue-slider'
+import stream from 'weex-vue-stream'
+
+// init weex.
+weex.init(Vue)
+
+// install the plugins.
+weex.install(slider)
+weex.install(stream)
+
+import App from 'App.vue'
+new Vue(App)
+```
+
+#### built-in components in render-core
+
+These components have already integrated into render-core. You don't have to import and install them:
+
+* div
+* text
+* image
+* scrollable components (scroller, list, waterfall)
+
+#### available built-in components for you to install
+
+| npm module name | component name |
+| --- | --- |
+| weex-vue-a | a |
+| weex-vue-input | input |
+| weex-vue-slider | slider / slider-neighbor |
+| weex-vue-switch | switch |
+| weex-vue-textarea | textarea |
+| weex-vue-video | video |
+| weex-vue-web | web |
+
+#### available API modules for you to install
+
+| npm module name | API module name |
+| --- | --- |
+| weex-vue-animation | animation |
+| weex-vue-clipboard | clipboard |
+| weex-vue-dom | dom |
+| weex-vue-event | event |
+| weex-vue-geolocation | geolocation |
+| weex-vue-global-event | globalEvent |
+| weex-vue-modal | modal |
+| weex-vue-navigator | navigator |
+| weex-vue-storage | storage |
+| weex-vue-stream | stream |
+| weex-vue-websocket | websocket |
+| weex-vue-webview | webview |
+
+Some of the above plugins may not be mentioned in weex documents. Just ignore them if you have no idear about what they are and how to use them.
+
+You can develop more plugins for your app. Accordingly the same plugin for other two platforms (iOS and Android) should also be built and intergrated in your app if you want it run on all three platforms.
+
 ## use vue-loader to bundle .vue file
 
 NOTE: you should inject `$processStyle` to preprocess vnode's style in vue-loader's postTransformNode hook.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f9846a35/packages/weex-vue-render/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/package.json b/packages/weex-vue-render/package.json
index 35b80d1..9a186b2 100644
--- a/packages/weex-vue-render/package.json
+++ b/packages/weex-vue-render/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-render",
-  "version": "0.11.57",
+  "version": "0.12.1",
   "description": "Weex built-in components for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f9846a35/scripts/dist-vue.sh
----------------------------------------------------------------------
diff --git a/scripts/dist-vue.sh b/scripts/dist-vue.sh
index 60fce06..a172573 100644
--- a/scripts/dist-vue.sh
+++ b/scripts/dist-vue.sh
@@ -45,7 +45,7 @@ echo " => writing version number into weex-vue-render's package.json..."
 # get version of weex-html5 from subversion of main package.json.
 pkg=./package.json
 dist_pkg=${base_dir}/package.json
-version=$( grep -o -E "\"vue-render\": \"([0-9.]+)\"" ${pkg} | grep -o -E "[0-9.]+" )
+version=$( grep -o -E "\"vue-render\": \"([0-9]+[.a-z0-9-]+)\"" ${pkg} | grep -o -E "[0-9]+[.a-z0-9-]+" )
 echo " => version:" ${version}
 
 # update package.json for weex-html5 package.


[14/43] incubator-weex git commit: * [html5] implementate the integrated components as render's plugin, which should have no directly dependency on render core.

Posted by ta...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/slider/slideMixin.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/slider/slideMixin.js b/html5/render/vue/components/slider/slideMixin.js
index 2b7bfa1..f160d58 100644
--- a/html5/render/vue/components/slider/slideMixin.js
+++ b/html5/render/vue/components/slider/slideMixin.js
@@ -17,17 +17,6 @@
  * under the License.
  */
 import './slider.css'
-import {
-  throttle,
-  createEvent,
-  fireLazyload,
-  addTransform,
-  copyTransform,
-  getTransformObj,
-  bind,
-  extendKeys
-} from '../../utils'
-import { extractComponentStyle, createEventMap } from '../../core'
 
 const TRANSITION_TIME = 400
 const NEIGHBOR_SCALE_TIME = 100
@@ -59,7 +48,7 @@ export default {
         }
       }
     }
-    fireLazyload(this.$el, true)
+    weex.utils.fireLazyload(this.$el, true)
     if (this._preIndex !== this.currentIndex) {
       this._slideTo(this.currentIndex)
     }
@@ -68,7 +57,7 @@ export default {
   mounted () {
     this._getWrapperSize()
     this._slideTo(this.currentIndex)
-    fireLazyload(this.$el, true)
+    weex.utils.fireLazyload(this.$el, true)
   },
 
   methods: {
@@ -109,24 +98,23 @@ export default {
     _renderSlides (createElement) {
       this._cells = this._formatChildren(createElement)
       this.frameCount = this._cells.length
-      this._renderHook()
       return createElement(
         'nav',
         {
           ref: 'wrapper',
           attrs: { 'weex-type': this.isNeighbor ? 'slider-neighbor' : 'slider' },
-          on: createEventMap(
+          on: weex.createEventMap(
             this,
             ['scroll', 'scrollstart', 'scrollend'],
             {
               touchstart: this._handleTouchStart,
-              touchmove: throttle(bind(this._handleTouchMove, this), 25),
+              touchmove: weex.utils.throttle(weex.utils.bind(this._handleTouchMove, this), 25),
               touchend: this._handleTouchEnd,
               touchcancel: this._handleTouchCancel
             }
           ),
           staticClass: 'weex-slider weex-slider-wrapper weex-ct',
-          staticStyle: extractComponentStyle(this)
+          staticStyle: weex.extractComponentStyle(this)
         },
         [
           createElement('ul', {
@@ -154,7 +142,7 @@ export default {
       }
       let interval = parseInt(this.interval - TRANSITION_TIME - NEIGHBOR_SCALE_TIME)
       interval = interval > INTERVAL_MINIMUM ? interval : INTERVAL_MINIMUM
-      this._autoPlayTimer = setTimeout(bind(this._next, this), interval)
+      this._autoPlayTimer = setTimeout(weex.utils.bind(this._next, this), interval)
     },
 
     _stopAutoPlay () {
@@ -195,7 +183,7 @@ export default {
 
       if (inner) {
         this._prepareNodes()
-        const translate = getTransformObj(inner).translate
+        const translate = weex.utils.getTransformObj(inner).translate
         const match = translate && translate.match(/translate[^(]+\(([+-\d.]+)/)
         const innerX = match && match[1] || 0
         const dist = innerX - this.innerOffset
@@ -240,7 +228,7 @@ export default {
       }
 
       if (newIndex !== this._preIndex) {
-        this.$emit('change', createEvent(this.$el, 'change', {
+        this.$emit('change', weex.utils.createEvent(this.$el, 'change', {
           index: newIndex
         }))
       }
@@ -252,7 +240,7 @@ export default {
         let node = this._showNodes[i]
         node = node && node.firstElementChild
         if (!node) { continue }
-        addTransform(this._showNodes[i].firstElementChild, {
+        weex.utils.addTransform(this._showNodes[i].firstElementChild, {
           translate: 'translate3d(0px, 0px, 0px)'
         })
       }
@@ -343,7 +331,7 @@ export default {
 
       node._inShow = true
       const translateX = index * this._wrapperWidth - this.innerOffset
-      addTransform(node, {
+      weex.utils.addTransform(node, {
         translate: `translate3d(${translateX}px, 0px, 0px)`
       })
       node.style.zIndex = 99 - Math.abs(index)
@@ -408,16 +396,16 @@ export default {
      * one element to another.
      */
     _copyStyle (from, to, styles = ['opacity', 'zIndex'], transformExtra = {}) {
-      extendKeys(to.style, from.style, styles)
-      const transObj = getTransformObj(from)
+      weex.utils.extendKeys(to.style, from.style, styles)
+      const transObj = weex.utils.getTransformObj(from)
       for (const k in transformExtra) {
         transObj[k] = transformExtra[k]
       }
-      addTransform(to, transObj)
+      weex.utils.addTransform(to, transObj)
       const fromInner = from.firstElementChild
       const toInner = to.firstElementChild
       toInner.style.opacity = fromInner.style.opacity
-      copyTransform(fromInner, toInner)
+      weex.utils.copyTransform(fromInner, toInner)
     },
 
     /**
@@ -438,7 +426,7 @@ export default {
         this._showNodes[origShowIndex] = cl
       }
       origNode._inShow = true
-      const transObj = getTransformObj(clone)
+      const transObj = weex.utils.getTransformObj(clone)
       transObj.translate = transObj.translate.replace(/[+-\d.]+[pw]x/, ($0) => {
         return pos * this._wrapperWidth - this.innerOffset + 'px'
       })
@@ -519,7 +507,7 @@ export default {
           translateX = 0
         }
         transObj.translate = `translate3d(${translateX}px, 0px, 0px)`
-        addTransform(elm, transObj)
+        weex.utils.addTransform(elm, transObj)
         elm.style.opacity = i === 0 ? MAIN_SLIDE_OPACITY : this.neighborAlpha
       }
     },
@@ -620,7 +608,7 @@ export default {
     },
 
     _emitScrollEvent (type, data = {}) {
-      this.$emit(type, createEvent(this.$el, type, data))
+      this.$emit(type, weex.utils.createEvent(this.$el, type, data))
     },
 
     _throttleEmitScroll (offset, callback) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/slider/slider-neighbor.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/slider/slider-neighbor.js b/html5/render/vue/components/slider/slider-neighbor.js
index 7d691e1..ba8ec03 100644
--- a/html5/render/vue/components/slider/slider-neighbor.js
+++ b/html5/render/vue/components/slider/slider-neighbor.js
@@ -23,7 +23,7 @@ const DEFAULT_NEIGHBOR_ALPHA = 0.6
 const DEFAULT_NEIGHBOR_SCALE = 0.8
 const DEFAULT_CURRENT_ITEM_SCALE = 0.9
 
-export default {
+const sliderNeighbor = {
   mixins: [slideMixin],
   props: {
     index: {
@@ -95,10 +95,12 @@ export default {
   },
 
   render (createElement) {
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('slider', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
     return this._renderSlides(createElement)
   }
 }
+
+export default {
+  init (weex) {
+    weex.registerComponent('slider-neighbor', sliderNeighbor)
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/slider/slider.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/slider/slider.js b/html5/render/vue/components/slider/slider.js
new file mode 100644
index 0000000..f916799
--- /dev/null
+++ b/html5/render/vue/components/slider/slider.js
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// import { validateStyles } from '../../validator'
+// import indicator from './indicator'
+import slideMixin from './slideMixin'
+
+const slider = {
+  mixins: [slideMixin],
+  props: {
+    index: {
+      type: [String, Number],
+      default: 0
+    },
+    'auto-play': {
+      type: [String, Boolean],
+      default: false
+    },
+    interval: {
+      type: [String, Number],
+      default: 3000
+    },
+    infinite: {
+      type: [String, Boolean],
+      default: true
+    }
+  },
+
+  watch: {
+    index () {
+      this.currentIndex = this._normalizeIndex(this.index)
+    }
+  },
+
+  data () {
+    return {
+      frameCount: 0,
+      currentIndex: this.index
+    }
+  },
+
+  beforeCreate () {
+    this.weexType = 'slider'
+  },
+
+  render (createElement) {
+    /* istanbul ignore next */
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('slider', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
+    return this._renderSlides(createElement)
+  }
+}
+
+export default {
+  init (weex) {
+    weex.registerComponent('slider', slider)
+    weex.registerComponent('cycleslider', slider)
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/switch.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/switch.js b/html5/render/vue/components/switch.js
index 6780da9..508957b 100644
--- a/html5/render/vue/components/switch.js
+++ b/html5/render/vue/components/switch.js
@@ -16,8 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-// import { validateStyles } from '../validator'
-import { extractComponentStyle } from '../core'
 
 const _css = `
 .weex-switch {
@@ -76,58 +74,68 @@ const _css = `
 }
 `
 
-export default {
-  props: {
-    checked: {
-      type: [Boolean, String],
-      default: false
+function getSwitch (weex) {
+  const { extractComponentStyle } = weex
+
+  return {
+    name: 'weex-switch',
+    props: {
+      checked: {
+        type: [Boolean, String],
+        default: false
+      },
+      disabled: {
+        type: [Boolean, String],
+        default: false
+      }
     },
-    disabled: {
-      type: [Boolean, String],
-      default: false
-    }
-  },
-  data () {
-    return {
-      isChecked: (this.checked !== 'false' && this.checked !== false),
-      isDisabled: (this.disabled !== 'false' && this.disabled !== false)
-    }
-  },
-  computed: {
-    wrapperClass () {
-      const classArray = ['weex-switch']
-      this.isChecked && classArray.push('weex-switch-checked')
-      this.isDisabled && classArray.push('weex-switch-disabled')
-      return classArray.join(' ')
-    }
-  },
-  methods: {
-    toggle () {
-      // TODO: handle the events
-      if (!this.isDisabled) {
-        this.isChecked = !this.isChecked
-        this.$emit('change', { value: this.isChecked })
+    data () {
+      return {
+        isChecked: (this.checked !== 'false' && this.checked !== false),
+        isDisabled: (this.disabled !== 'false' && this.disabled !== false)
       }
-    }
-  },
-
-  render (createElement) {
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('switch', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
-    this._renderHook()
-    return createElement('span', {
-      attrs: { 'weex-type': 'switch' },
-      on: {
-        click: event => {
-          this.$emit('click', event)
-          this.toggle()
+    },
+    computed: {
+      wrapperClass () {
+        const classArray = ['weex-switch']
+        this.isChecked && classArray.push('weex-switch-checked')
+        this.isDisabled && classArray.push('weex-switch-disabled')
+        return classArray.join(' ')
+      }
+    },
+    methods: {
+      toggle () {
+        // TODO: handle the events
+        if (!this.isDisabled) {
+          this.isChecked = !this.isChecked
+          this.$emit('change', { value: this.isChecked })
         }
-      },
-      staticClass: this.wrapperClass,
-      staticStyle: extractComponentStyle(this)
-    }, [createElement('small', { staticClass: 'weex-switch-inner' })])
-  },
-  _css
+      }
+    },
+
+    render (createElement) {
+      /* istanbul ignore next */
+      // if (process.env.NODE_ENV === 'development') {
+      //   validateStyles('switch', this.$vnode.data && this.$vnode.data.staticStyle)
+      // }
+      return createElement('span', {
+        attrs: { 'weex-type': 'switch' },
+        on: {
+          click: event => {
+            this.$emit('click', event)
+            this.toggle()
+          }
+        },
+        staticClass: this.wrapperClass,
+        staticStyle: extractComponentStyle(this)
+      }, [createElement('small', { staticClass: 'weex-switch-inner' })])
+    },
+    _css
+  }
+}
+
+export default {
+  init (weex) {
+    weex.registerComponent('switch', getSwitch(weex))
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/text.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/text.js b/html5/render/vue/components/text.js
index e0f14ee..0ff66f4 100644
--- a/html5/render/vue/components/text.js
+++ b/html5/render/vue/components/text.js
@@ -25,9 +25,6 @@
  * be clipped according to the 'lines'. Otherwise, it'll be the 'height'.
  */
 
-import { extractComponentStyle, createEventMap } from '../core'
-import { extend } from '../utils'
-
 const _css = `
 .weex-text {
   display: -webkit-box;
@@ -55,26 +52,33 @@ function getTextSpecStyle (ms = {}) {
   }
 }
 
-export default {
-  props: {
-    lines: [Number, String],
-    value: [String]
-  },
+function getText (weex) {
+  const { extractComponentStyle, createEventMap } = weex
+  const { extend } = weex.utils
+
+  return {
+    name: 'weex-text',
+    props: {
+      lines: [Number, String],
+      value: [String]
+    },
+
+    render (createElement) {
+      const style = extractComponentStyle(this)
+      const textSpecStyle = getTextSpecStyle(style)
+      return createElement('p', {
+        attrs: { 'weex-type': 'text' },
+        on: createEventMap(this),
+        staticClass: 'weex-text weex-el',
+        staticStyle: extend(style, textSpecStyle)
+      }, this.$slots.default || [this.value])
+    },
+    _css
+  }
+}
 
-  render (createElement) {
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('text', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
-    const style = extractComponentStyle(this)
-    const textSpecStyle = getTextSpecStyle(style)
-    this._renderHook()
-    return createElement('p', {
-      attrs: { 'weex-type': 'text' },
-      on: createEventMap(this),
-      staticClass: 'weex-text weex-el',
-      staticStyle: extend(style, textSpecStyle)
-    }, this.$slots.default || [this.value])
-  },
-  _css
+export default {
+  init (weex) {
+    weex.registerComponent('text', getText(weex))
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/textarea.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/textarea.js b/html5/render/vue/components/textarea.js
index 63a2e3c..0a40ba5 100644
--- a/html5/render/vue/components/textarea.js
+++ b/html5/render/vue/components/textarea.js
@@ -16,12 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { extractComponentStyle, createEventMap } from '../core'
-import { inputCommon } from '../mixins'
-import { extend, mapFormEvents } from '../utils'
-
-// import { validateStyles } from '../validator'
-
 const _css = `
 .weex-textarea {
   font-size: 0.426667rem
@@ -31,50 +25,62 @@ const _css = `
 }
 `
 
-export default {
-  mixins: [inputCommon],
-  props: {
-    value: String,
-    placeholder: String,
-    disabled: {
-      type: [String, Boolean],
-      default: false
-    },
-    autofocus: {
-      type: [String, Boolean],
-      default: false
-    },
-    rows: {
-      type: [String, Number],
-      default: 2
-    },
-    returnKeyType: String
-  },
+function getTextarea (weex) {
+  const { extractComponentStyle, createEventMap } = weex
+  const { inputCommon } = weex.mixins
+  const { extend, mapFormEvents } = weex.utils
 
-  render (createElement) {
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('textarea', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
-    const events = extend(createEventMap(this), mapFormEvents(this))
-    this._renderHook()
-    return createElement('html:textarea', {
-      attrs: {
-        'weex-type': 'textarea',
-        value: this.value,
-        disabled: (this.disabled !== 'false' && this.disabled !== false),
-        autofocus: (this.autofocus !== 'false' && this.autofocus !== false),
-        placeholder: this.placeholder,
-        rows: this.rows,
-        'return-key-type': this.returnKeyType
+  return {
+    name: 'weex-textarea',
+    mixins: [inputCommon],
+    props: {
+      value: String,
+      placeholder: String,
+      disabled: {
+        type: [String, Boolean],
+        default: false
+      },
+      autofocus: {
+        type: [String, Boolean],
+        default: false
       },
-      domProps: {
-        value: this.value
+      rows: {
+        type: [String, Number],
+        default: 2
       },
-      on: this.createKeyboardEvent(events),
-      staticClass: 'weex-textarea weex-el',
-      staticStyle: extractComponentStyle(this)
-    })
-  },
-  _css
+      returnKeyType: String
+    },
+
+    render (createElement) {
+      /* istanbul ignore next */
+      // if (process.env.NODE_ENV === 'development') {
+      //   validateStyles('textarea', this.$vnode.data && this.$vnode.data.staticStyle)
+      // }
+      const events = extend(createEventMap(this), mapFormEvents(this))
+      return createElement('html:textarea', {
+        attrs: {
+          'weex-type': 'textarea',
+          value: this.value,
+          disabled: (this.disabled !== 'false' && this.disabled !== false),
+          autofocus: (this.autofocus !== 'false' && this.autofocus !== false),
+          placeholder: this.placeholder,
+          rows: this.rows,
+          'return-key-type': this.returnKeyType
+        },
+        domProps: {
+          value: this.value
+        },
+        on: this.createKeyboardEvent(events),
+        staticClass: 'weex-textarea weex-el',
+        staticStyle: extractComponentStyle(this)
+      })
+    },
+    _css
+  }
+}
+
+export default {
+  init (weex) {
+    weex.registerComponent('textarea', getTextarea(weex))
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/video.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/video.js b/html5/render/vue/components/video.js
index bd87a03..d292386 100644
--- a/html5/render/vue/components/video.js
+++ b/html5/render/vue/components/video.js
@@ -16,63 +16,70 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-// import { validateStyles } from '../validator'
-import { extractComponentStyle, createEventMap } from '../core'
 
-export default {
-  props: {
-    src: String,
-    playStatus: {
-      type: String,
-      default: 'pause',
-      validator (value) {
-        return ['play', 'pause'].indexOf(value) !== -1
+function getVideo (weex) {
+  const { extractComponentStyle, createEventMap } = weex
+
+  return {
+    name: 'weex-video',
+    props: {
+      src: String,
+      playStatus: {
+        type: String,
+        default: 'pause',
+        validator (value) {
+          return ['play', 'pause'].indexOf(value) !== -1
+        }
+      },
+      autoplay: {
+        type: [String, Boolean],
+        default: false
+      },
+      autoPlay: {
+        type: [String, Boolean],
+        default: false
+      },
+      playsinline: {
+        type: [String, Boolean],
+        default: true
+      },
+      controls: {
+        type: [String, Boolean],
+        default: false
       }
     },
-    autoplay: {
-      type: [String, Boolean],
-      default: false
-    },
-    autoPlay: {
-      type: [String, Boolean],
-      default: false
-    },
-    playsinline: {
-      type: [String, Boolean],
-      default: true
-    },
-    controls: {
-      type: [String, Boolean],
-      default: false
-    }
-  },
 
-  render (createElement) {
-    this._renderHook()
+    render (createElement) {
+      if (this.playStatus === 'play') {
+        this.$nextTick(function () {
+          this.$el && this.$el.play()
+        })
+      }
+      else if (this.playStatus === 'pause') {
+        this.$nextTick(function () {
+          this.$el && this.$el.pause()
+        })
+      }
 
-    if (this.playStatus === 'play') {
-      this.$nextTick(function () {
-        this.$el && this.$el.play()
-      })
-    }
-    else if (this.playStatus === 'pause') {
-      this.$nextTick(function () {
-        this.$el && this.$el.pause()
+      return createElement('html:video', {
+        attrs: {
+          'weex-type': 'video',
+          autoplay: ((this.autoplay !== 'false' && this.autoplay !== false)
+            || (this.autoPlay !== 'false' && this.autoPlay !== false)),
+          'webkit-playsinline': this.playsinline,
+          controls: this.controls,
+          src: this.src
+        },
+        on: createEventMap(this, ['start', 'pause', 'finish', 'fail']),
+        staticClass: 'weex-video weex-el',
+        staticStyle: extractComponentStyle(this)
       })
     }
+  }
+}
 
-    return createElement('html:video', {
-      attrs: {
-        'weex-type': 'video',
-        autoplay: ((this.autoplay !== 'false' && this.autoplay !== false)
-          || (this.autoPlay !== 'false' && this.autoPlay !== false)),
-        'webkit-playsinline': this.playsinline,
-        controls: this.controls,
-        src: this.src
-      },
-      on: createEventMap(this, ['start', 'pause', 'finish', 'fail']),
-      staticClass: 'weex-video weex-el',
-      staticStyle: extractComponentStyle(this)
-    })
+export default {
+  init (weex) {
+    weex.registerComponent('video', getVideo(weex))
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/web.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/web.js b/html5/render/vue/components/web.js
index c0f03a9..906fb03 100644
--- a/html5/render/vue/components/web.js
+++ b/html5/render/vue/components/web.js
@@ -16,9 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { extractComponentStyle, createEventMap } from '../core'
-import { createEvent } from '../utils'
-// import { validateStyles } from '../validator'
 
 const _css = `
 .weex-web {
@@ -30,54 +27,65 @@ const _css = `
 }
 `
 
-export default {
-  props: {
-    src: String
-  },
-  methods: {
-    // TODO: check cross-origin
-    goBack () {
-      if (this.$el) {
-        this.$el.contentWindow.history.back()
-      }
+function getWeb (weex) {
+  const { extractComponentStyle, createEventMap } = weex
+  const { createEvent } = weex.utils
+
+  return {
+    name: 'weex-web',
+    props: {
+      src: String
     },
-    goForward () {
-      if (this.$el) {
-        this.$el.contentWindow.history.forward()
+    methods: {
+      // TODO: check cross-origin
+      goBack () {
+        if (this.$el) {
+          this.$el.contentWindow.history.back()
+        }
+      },
+      goForward () {
+        if (this.$el) {
+          this.$el.contentWindow.history.forward()
+        }
+      },
+      reload () {
+        if (this.$el) {
+          this.$el.contentWindow.history.reload()
+        }
       }
     },
-    reload () {
+
+    mounted () {
       if (this.$el) {
-        this.$el.contentWindow.history.reload()
+        this.$emit('pagestart', createEvent(this.$el, 'pagestart', { url: this.src }))
+        this.$el.addEventListener('load', event => {
+          this.$emit('pagefinish', createEvent(this.$el, 'pagefinish', { url: this.src }))
+        })
       }
-    }
-  },
+    },
 
-  mounted () {
-    if (this.$el) {
-      this.$emit('pagestart', createEvent(this.$el, 'pagestart', { url: this.src }))
-      this.$el.addEventListener('load', event => {
-        this.$emit('pagefinish', createEvent(this.$el, 'pagefinish', { url: this.src }))
+    render (createElement) {
+      /* istanbul ignore next */
+      // if (process.env.NODE_ENV === 'development') {
+      //   validateStyles('web', this.$vnode.data && this.$vnode.data.staticStyle)
+      // }
+      return createElement('iframe', {
+        attrs: {
+          'weex-type': 'web',
+          src: this.src
+        },
+        on: createEventMap(this, ['error']),
+        staticClass: 'weex-web weex-el',
+        staticStyle: extractComponentStyle(this)
       })
-    }
-  },
-
-  render (createElement) {
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('web', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
+    },
+    _css
+  }
+}
 
-    this._renderHook()
-    return createElement('iframe', {
-      attrs: {
-        'weex-type': 'web',
-        src: this.src
-      },
-      on: createEventMap(this, ['error']),
-      staticClass: 'weex-web weex-el',
-      staticStyle: extractComponentStyle(this)
-    })
-  },
-  _css
+export default {
+  init (weex) {
+    weex.registerComponent('web', getWeb(weex))
+  }
 }
+

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/core/style.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/core/style.js b/html5/render/vue/core/style.js
index 0531a73..691849b 100644
--- a/html5/render/vue/core/style.js
+++ b/html5/render/vue/core/style.js
@@ -311,38 +311,3 @@ export function extractComponentStyle (context) {
   return getComponentStyle(context, true)
 }
 
-/**
- * process sticky children in scrollable components.
- * current only support list and vertical scroller.
- */
-export function processSticky (context) {
-  /**
-   * current browser support 'sticky' or '-webkit-sticky', so there's no need
-   * to do further more.
-   */
-  if (supportSticky()) {
-    return
-  }
-  // current only support list and vertical scroller.
-  if (context.scrollDirection === 'horizontal') {
-    return
-  }
-  const stickyChildren = context._stickyChildren
-  const len = stickyChildren && stickyChildren.length || 0
-  if (len <= 0) { return }
-
-  const container = context.$el
-  if (!container) { return }
-  const scrollTop = container.scrollTop
-
-  let stickyChild
-  for (let i = 0; i < len; i++) {
-    stickyChild = stickyChildren[i]
-    if (stickyChild._initOffsetTop < scrollTop) {
-      stickyChild._addSticky()
-    }
-    else {
-      stickyChild._removeSticky()
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/env/global.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/env/global.js b/html5/render/vue/env/global.js
index e872c4f..7d1a479 100644
--- a/html5/render/vue/env/global.js
+++ b/html5/render/vue/env/global.js
@@ -19,6 +19,8 @@
 import weex from './weex'
 import * as core from '../core'
 
+import { inputCommon } from '../mixins'
+
 window.global = window
 window.weex = weex
 
@@ -30,3 +32,7 @@ weex._styleMap = {}
   'trimTextVNodes'].forEach(function (method) {
     weex[method] = core[method].bind(weex)
   })
+
+weex.mixins = {
+  inputCommon
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/index.js b/html5/render/vue/index.js
index 5795c6b..8617f2f 100644
--- a/html5/render/vue/index.js
+++ b/html5/render/vue/index.js
@@ -46,9 +46,9 @@ function init (Vue/*, options = {}*/) {
   Vue.config.parsePlatformTagName = tag => tag.replace(htmlRegex, '')
 
   // register sdk components.
-  for (const name in components) {
-    weex.registerComponent(name, components[name])
-  }
+  components.forEach(function (comp) {
+    weex.install(comp)
+  })
 
   /* istanbul ignore next */
   // if (process.env.NODE_ENV === 'development') {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/mixins/base.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/mixins/base.js b/html5/render/vue/mixins/base.js
index ff31cd0..8fec215 100644
--- a/html5/render/vue/mixins/base.js
+++ b/html5/render/vue/mixins/base.js
@@ -121,12 +121,6 @@ export default {
   },
 
   methods: {
-    _renderHook () {
-      if (!window._first_screen_detected) {
-        window._component_count++
-      }
-    },
-
     _getScopeIds () {
       const arr = []
       let ctx = this

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/mixins/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/mixins/index.js b/html5/render/vue/mixins/index.js
index 7807b1a..e2d0ced 100644
--- a/html5/render/vue/mixins/index.js
+++ b/html5/render/vue/mixins/index.js
@@ -18,13 +18,11 @@
  */
 import base from './base'
 import style from './style'
-import scrollable from './scrollable'
 import inputCommon from './input-common'
 import sticky from './sticky'
 
 export {
   base,
-  scrollable,
   style,
   inputCommon,
   sticky

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/mixins/scrollable.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/mixins/scrollable.js b/html5/render/vue/mixins/scrollable.js
deleted file mode 100644
index 54c87dd..0000000
--- a/html5/render/vue/mixins/scrollable.js
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import { getThrottleLazyload, throttle, getRangeWidth } from '../utils'
-import { processSticky } from '../core'
-
-const DEFAULT_OFFSET_ACCURACY = 10
-const DEFAULT_LOADMORE_OFFSET = 0
-
-function getThrottledScroll (context) {
-  const scale = weex.config.env.scale
-  if (!context._throttleScroll) {
-    const wrapper = context.$refs.wrapper
-    const inner = context.$refs.inner
-    let preOffset = (context.scrollDirection === 'horizontal'
-        ? wrapper.scrollLeft
-        : wrapper.scrollTop)
-      || 0
-    context._throttleScroll = throttle(function (evt) {
-      const offset = context.scrollDirection === 'horizontal'
-        ? wrapper.scrollLeft
-        : wrapper.scrollTop
-      const indent = parseInt(context.offsetAccuracy) * scale
-      function triggerScroll () {
-        const rect = inner.getBoundingClientRect()
-        evt.contentSize = { width: rect.width, height: rect.height }
-        evt.contentOffset = {
-          x: wrapper.scrollLeft,
-          /**
-           * positive direciton for y-axis is down.
-           * so should use negative operation on scrollTop.
-           *
-           *  (0,0)---------------> x
-           *       |
-           *       |
-           *       |
-           *       |
-           *       v y
-           *
-           */
-          y: -wrapper.scrollTop
-        }
-        context.$emit('scroll', evt)
-      }
-      if (Math.abs(offset - preOffset) >= indent) {
-        triggerScroll()
-        preOffset = offset
-      }
-    }, 16, true)
-  }
-  return context._throttleScroll
-}
-
-export default {
-  props: {
-    loadmoreoffset: {
-      type: [String, Number],
-      default: DEFAULT_LOADMORE_OFFSET,
-      validator (value) {
-        const val = parseInt(value)
-        return !isNaN(val) && val >= DEFAULT_LOADMORE_OFFSET
-      }
-    },
-
-    offsetAccuracy: {
-      type: [Number, String],
-      default: DEFAULT_OFFSET_ACCURACY,
-      validator (value) {
-        const val = parseInt(value)
-        return !isNaN(val) && val >= DEFAULT_OFFSET_ACCURACY
-      }
-    }
-  },
-
-  created () {
-    // should call resetLoadmore() to enable loadmore event.
-    this._loadmoreReset = true
-  },
-
-  methods: {
-    updateLayout () {
-      const wrapper = this.$refs.wrapper
-      if (wrapper) {
-        const rect = wrapper.getBoundingClientRect()
-        this._wrapperWidth = rect.width
-        this._wrapperHeight = rect.height
-      }
-      const inner = this.$refs.inner
-      const children = inner && inner.children
-      if (inner) {
-        const rect = inner.getBoundingClientRect()
-        this._innerWidth = rect.width
-        this._innerHeight = rect.height
-      }
-      const loadingEl = this._loading && this._loading.$el
-      const refreshEl = this._refresh && this._refresh.$el
-      if (loadingEl) {
-        this._innerHeight -= loadingEl.getBoundingClientRect().height
-      }
-      if (refreshEl) {
-        this._innerHeight -= refreshEl.getBoundingClientRect().height
-      }
-      // inner width is always the viewport width somehow in horizontal
-      // scoller, therefore the inner width should be reclaculated.
-      if (this.scrollDirection === 'horizontal' && children) {
-        this._innerWidth = getRangeWidth(inner)
-      }
-    },
-
-    resetLoadmore () {
-      this._loadmoreReset = true
-    },
-
-    handleScroll (event) {
-      getThrottleLazyload(25, this.$el, 'scroll')()
-      getThrottledScroll(this)(event)
-
-      processSticky(this)
-
-      // fire loadmore event.
-      const inner = this.$refs.inner
-      if (inner) {
-        const innerLength = this.scrollDirection === 'horizontal'
-          ? this._innerWidth
-          : this._innerHeight
-        if (!this._innerLength) {
-          this._innerLength = innerLength
-        }
-        if (this._innerLength !== innerLength) {
-          this._innerLength = innerLength
-          this._loadmoreReset = true
-        }
-        if (this._loadmoreReset && this.reachBottom(this.loadmoreoffset)) {
-          this._loadmoreReset = false
-          this.$emit('loadmore', event)
-        }
-      }
-    },
-
-    reachTop () {
-      const wrapper = this.$refs.wrapper
-      return (!!wrapper) && (wrapper.scrollTop <= 0)
-    },
-
-    reachBottom (offset) {
-      const wrapper = this.$refs.wrapper
-      const inner = this.$refs.inner
-      offset = parseInt(offset || 0) * weex.config.env.scale
-
-      if (wrapper && inner) {
-        const key = this.scrollDirection === 'horizontal'
-          ? 'width'
-          : 'height'
-        const innerLength = this[`_inner${key[0].toUpperCase()}${key.substr(1)}`]
-        const wrapperLength = this[`_wrapper${key[0].toUpperCase()}${key.substr(1)}`]
-        const scrollOffset = this.scrollDirection === 'horizontal'
-          ? wrapper.scrollLeft
-          : wrapper.scrollTop
-        return scrollOffset >= innerLength - wrapperLength - offset
-      }
-      return false
-    },
-
-    handleTouchStart (event) {
-      // event.preventDefault()
-      // event.stopPropagation()
-      if (this._loading || this._refresh) {
-        const touch = event.changedTouches[0]
-        this._touchParams = {
-          reachTop: this.reachTop(),
-          reachBottom: this.reachBottom(),
-          startTouchEvent: touch,
-          startX: touch.pageX,
-          startY: touch.pageY,
-          timeStamp: event.timeStamp
-        }
-      }
-    },
-
-    handleTouchMove (event) {
-      // event.preventDefault()
-      // event.stopPropagation()
-      if (this._touchParams) {
-        const inner = this.$refs.inner
-        const { startY, reachTop, reachBottom } = this._touchParams
-        if (inner) {
-          const touch = event.changedTouches[0]
-          const offsetY = touch.pageY - startY
-          this._touchParams.offsetY = offsetY
-          if (reachTop && this._refresh) {
-            this._refresh.pullingDown(offsetY)
-          }
-          else if (reachBottom && this._loading) {
-            this._loading.pullingUp(-offsetY)
-          }
-        }
-      }
-    },
-
-    handleTouchEnd (event) {
-      // event.preventDefault()
-      // event.stopPropagation()
-      if (this._touchParams) {
-        const inner = this.$refs.inner
-        const { reachTop, reachBottom } = this._touchParams
-        if (inner) {
-          if (reachTop && this._refresh) {
-            this._refresh.pullingEnd()
-          }
-          else if (reachBottom && this._loading) {
-            this._loading.pullingEnd()
-          }
-        }
-      }
-      delete this._touchParams
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/styles/base.css
----------------------------------------------------------------------
diff --git a/html5/render/vue/styles/base.css b/html5/render/vue/styles/base.css
index a9a41ff..33cb37d 100644
--- a/html5/render/vue/styles/base.css
+++ b/html5/render/vue/styles/base.css
@@ -64,55 +64,6 @@
   min-width: 0;
 }
 
-body > .weex-list,
-body > .weex-scroller,
-body > .weex-waterfall {
-  max-height: 100%;
-}
-
-.weex-list-wrapper,
-.weex-scroller-wrapper,
-.weex-waterfall-wrapper {
-  -webkit-overflow-scrolling: touch;
-}
-
-.weex-list-wrapper,
-.weex-waterfall-wrapper {
-  overflow-y: scroll !important;
-  overflow-x: hidden !important;
-}
-
-.weex-list-inner,
-.weex-scroller-inner,
-.weex-waterfall-inner {
-  -webkit-overflow-scrolling: touch;
-}
-
-.weex-waterfall-inner-columns {
-  -webkit-flex-direction: row;
-      -ms-flex-direction: row;
-          flex-direction: row;
-  -webkit-box-orient: horizontal;
-}
-
-.weex-scroller-wrapper.weex-scroller-vertical {
-  overflow-x: hidden;
-  overflow-y: scroll;
-}
-
-.weex-scroller-wrapper.weex-scroller-horizontal {
-  overflow-x: scroll;
-  overflow-y: hidden;
-}
-
-.weex-scroller-horizontal .weex-scroller-inner {
-  -webkit-flex-direction: row;
-      -ms-flex-direction: row;
-          flex-direction: row;
-  -webkit-box-orient: horizontal;
-  height: 100%;
-}
-
 .weex-ios-sticky {
   position: -webkit-sticky !important;
   position: sticky !important;
@@ -130,21 +81,3 @@ body > .weex-waterfall {
   top: 0;
   z-index: 9999;
 }
-
-.weex-cell {
-  width: 100%;
-}
-
-.weex-refresh,
-.weex-loading {
-  -webkit-box-align: center;
-  -webkit-align-items: center;
-      -ms-flex-align: center;
-          align-items: center;
-  -webkit-box-pack: center;
-  -webkit-justify-content: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  width: 100%;
-  overflow: hidden;
-}



[11/43] incubator-weex git commit: * [html5] scan style when async component is loaded.

Posted by ta...@apache.org.
* [html5] scan style when async component is loaded.


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

Branch: refs/heads/0.16-dev
Commit: adac876414eb9214e7fa18930651f30fe4a42a58
Parents: 5537878
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Jul 14 11:11:05 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Jul 14 11:11:05 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/mixins/style.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/adac8764/html5/render/vue/mixins/style.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/mixins/style.js b/html5/render/vue/mixins/style.js
index 5be2edc..647119d 100644
--- a/html5/render/vue/mixins/style.js
+++ b/html5/render/vue/mixins/style.js
@@ -44,7 +44,9 @@ function getIdentifiedBeforeCreate () {
      * For vue-loader ^11.3.x, there's no injectStyle function. The styleSheet
      * is already injected into the head. Just scan it.
      */
-    if (this === this.$root && this.$options && !this._firstScanned) {
+    // async component.
+    if ((this.$vnode && this.$vnode.data && this.$vnode.data.tag === 'component')
+      || (this === this.$root && this.$options && !this._firstScanned)) {
       this._firstScanned = true
       extend(weex._styleMap, getHeadStyleMap())
     }


[02/43] incubator-weex git commit: * [html5] osName on android should be in lowercase

Posted by ta...@apache.org.
* [html5] osName on android should be in lowercase


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

Branch: refs/heads/0.16-dev
Commit: f8da7d99ddef22bccd0a17a208afe27b2b8a1dc1
Parents: a35c690
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Jun 30 11:03:03 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Jun 30 11:03:03 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/env/wx-env.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f8da7d99/html5/render/vue/env/wx-env.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/env/wx-env.js b/html5/render/vue/env/wx-env.js
index 4da3174..ecdf2ec 100644
--- a/html5/render/vue/env/wx-env.js
+++ b/html5/render/vue/env/wx-env.js
@@ -34,7 +34,7 @@ export function initEnv (viewportInfo, envInfo) {
     osName = 'iOS'
   }
   else if (osName.match(/Android/i)) {
-    osName = 'Android'
+    osName = 'android'
   }
   const osVersion = envInfo.os.version.val
   const env = {


[38/43] incubator-weex git commit: * [html5] fix test suit release.

Posted by ta...@apache.org.
* [html5] fix test suit release.


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

Branch: refs/heads/0.16-dev
Commit: 8b66fb8e114461515b0efc43ff0c10b7ebf1127b
Parents: 3b36889
Author: MrRaindrop <te...@gmail.com>
Authored: Wed Jul 26 22:33:26 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Wed Jul 26 22:33:26 2017 +0800

----------------------------------------------------------------------
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8b66fb8e/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 32285e8..b2316c2 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
     "postinstall": "bash ./scripts/install-hooks.sh",
     "build:native": "node build/build.js native",
     "build:runtime": "node build/build.js runtime",
-    "install:buildtools": "npm i rollup rollup-watch rollup-plugin-buble rollup-plugin-json rollup-plugin-eslint rollup-plugin-commonjs rollup-plugin-flow rollup-plugin-flow-no-whitespace rollup-plugin-postcss rollup-plugin-replace rollup-plugin-uglify rollup-plugin-node-resolve wwp flow-bin babel-core babel-eslint babel-istanbul babel-loader babel-plugin-coverage babel-preset-es2015 babel-runtime eslint-plugin-flowtype",
+    "install:buildtools": "npm i webpack@^1.0 rollup rollup-watch rollup-plugin-buble rollup-plugin-json rollup-plugin-eslint rollup-plugin-commonjs rollup-plugin-flow rollup-plugin-flow-no-whitespace rollup-plugin-postcss rollup-plugin-replace rollup-plugin-uglify rollup-plugin-node-resolve wwp flow-bin babel-core babel-eslint babel-istanbul babel-loader babel-plugin-coverage babel-preset-es2015 babel-runtime eslint-plugin-flowtype",
     "build:source": "npm run build:native && npm run build:browser && node build/build.js vue",
     "build:browser": "wwp && node build/build.js browser",
     "build:browser:common": "rollup -c build/rollup.browser.common.config.js",


[22/43] incubator-weex git commit: Merge branch 'feature/generate-packages' into 0.15-dev-web

Posted by ta...@apache.org.
Merge branch 'feature/generate-packages' into 0.15-dev-web


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

Branch: refs/heads/0.16-dev
Commit: 611cae85c82ca65b2f4b058ce12f26a07c10aa13
Parents: 6680352 f9846a3
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 18:31:13 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 18:31:13 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/README.md                      | 69 ++++++++++++++++++++
 package.json                                    |  2 +-
 packages/weex-vue-plugins/weex-vue-a/README.md  |  2 +-
 .../weex-vue-plugins/weex-vue-a/package.json    |  2 +-
 .../weex-vue-plugins/weex-vue-input/README.md   |  2 +-
 .../weex-vue-input/package.json                 |  2 +-
 .../weex-vue-plugins/weex-vue-slider/README.md  |  2 +-
 .../weex-vue-slider/package.json                |  2 +-
 .../weex-vue-plugins/weex-vue-switch/README.md  |  2 +-
 .../weex-vue-switch/package.json                |  2 +-
 .../weex-vue-textarea/README.md                 |  2 +-
 .../weex-vue-textarea/package.json              |  2 +-
 .../weex-vue-plugins/weex-vue-video/README.md   |  2 +-
 .../weex-vue-video/package.json                 |  2 +-
 .../weex-vue-plugins/weex-vue-web/README.md     |  2 +-
 .../weex-vue-plugins/weex-vue-web/package.json  |  2 +-
 packages/weex-vue-render/README.md              | 69 ++++++++++++++++++++
 packages/weex-vue-render/package.json           |  2 +-
 scripts/dist-vue.sh                             |  2 +-
 19 files changed, 155 insertions(+), 17 deletions(-)
----------------------------------------------------------------------



[03/43] incubator-weex git commit: * [html5] release vue-render 0.11.53

Posted by ta...@apache.org.
* [html5] release vue-render 0.11.53


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

Branch: refs/heads/0.16-dev
Commit: 85c92c95d2c87de6f0273c25b35e196f1068cd05
Parents: f8da7d9
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Jun 30 11:04:19 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Jun 30 11:04:19 2017 +0800

----------------------------------------------------------------------
 package.json                          | 2 +-
 packages/weex-vue-render/package.json | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/85c92c95/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 2888260..3a8febe 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "subversion": {
     "browser": "0.5.0",
     "framework": "0.20.6",
-    "vue-render": "0.11.52",
+    "vue-render": "0.11.53",
     "transformer": ">=0.1.5 <0.5"
   },
   "description": "A framework for building Mobile cross-platform UI",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/85c92c95/packages/weex-vue-render/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/package.json b/packages/weex-vue-render/package.json
index 485a099..585da06 100644
--- a/packages/weex-vue-render/package.json
+++ b/packages/weex-vue-render/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-render",
-  "version": "0.11.52",
+  "version": "0.11.53",
   "description": "Weex built-in components for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",


[33/43] incubator-weex git commit: * [html5] @notdanger.

Posted by ta...@apache.org.
* [html5] @notdanger.


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

Branch: refs/heads/0.16-dev
Commit: 20148324ff1718128f328faa92b5aef50faa4062
Parents: 2ef0c51
Author: MrRaindrop <te...@gmail.com>
Authored: Wed Jul 26 10:41:10 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Wed Jul 26 10:41:10 2017 +0800

----------------------------------------------------------------------

----------------------------------------------------------------------



[18/43] incubator-weex git commit: * [html5] publish plugins.

Posted by ta...@apache.org.
* [html5] publish plugins.


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

Branch: refs/heads/0.16-dev
Commit: fe406907a138f0d3bfee787da42dd7b39a3b0cef
Parents: 5298c11
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 17:38:16 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 17:38:16 2017 +0800

----------------------------------------------------------------------
 packages/weex-vue-plugins/weex-vue-a/package.json            | 2 +-
 packages/weex-vue-plugins/weex-vue-animation/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-clipboard/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-dom/package.json          | 2 +-
 packages/weex-vue-plugins/weex-vue-event/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-geolocation/package.json  | 2 +-
 packages/weex-vue-plugins/weex-vue-global-event/package.json | 2 +-
 packages/weex-vue-plugins/weex-vue-input/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-modal/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-navigator/package.json    | 4 ++--
 packages/weex-vue-plugins/weex-vue-slider/package.json       | 2 +-
 packages/weex-vue-plugins/weex-vue-storage/package.json      | 2 +-
 packages/weex-vue-plugins/weex-vue-stream/package.json       | 2 +-
 packages/weex-vue-plugins/weex-vue-switch/package.json       | 2 +-
 packages/weex-vue-plugins/weex-vue-textarea/package.json     | 2 +-
 packages/weex-vue-plugins/weex-vue-video/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-web/package.json          | 2 +-
 packages/weex-vue-plugins/weex-vue-websocket/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-webview/package.json      | 2 +-
 19 files changed, 20 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-a/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-a/package.json b/packages/weex-vue-plugins/weex-vue-a/package.json
index 55dcb1f..ce586e6 100644
--- a/packages/weex-vue-plugins/weex-vue-a/package.json
+++ b/packages/weex-vue-plugins/weex-vue-a/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-a",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in '<a>' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-animation/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-animation/package.json b/packages/weex-vue-plugins/weex-vue-animation/package.json
index 56f0e80..89a4af6 100644
--- a/packages/weex-vue-plugins/weex-vue-animation/package.json
+++ b/packages/weex-vue-plugins/weex-vue-animation/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-animation",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'animation' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-clipboard/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-clipboard/package.json b/packages/weex-vue-plugins/weex-vue-clipboard/package.json
index a4b07d1..f21df0e 100644
--- a/packages/weex-vue-plugins/weex-vue-clipboard/package.json
+++ b/packages/weex-vue-plugins/weex-vue-clipboard/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-clipboard",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'clipboard' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-dom/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-dom/package.json b/packages/weex-vue-plugins/weex-vue-dom/package.json
index 67e23dc..feb8eae 100644
--- a/packages/weex-vue-plugins/weex-vue-dom/package.json
+++ b/packages/weex-vue-plugins/weex-vue-dom/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-dom",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'dom' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-event/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-event/package.json b/packages/weex-vue-plugins/weex-vue-event/package.json
index e5d63c9..f343caf 100644
--- a/packages/weex-vue-plugins/weex-vue-event/package.json
+++ b/packages/weex-vue-plugins/weex-vue-event/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-event",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'event' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-geolocation/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-geolocation/package.json b/packages/weex-vue-plugins/weex-vue-geolocation/package.json
index 7f9f8af..64ec4eb 100644
--- a/packages/weex-vue-plugins/weex-vue-geolocation/package.json
+++ b/packages/weex-vue-plugins/weex-vue-geolocation/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-geolocation",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'geolocation' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-global-event/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-global-event/package.json b/packages/weex-vue-plugins/weex-vue-global-event/package.json
index 8019839..e5d1275 100644
--- a/packages/weex-vue-plugins/weex-vue-global-event/package.json
+++ b/packages/weex-vue-plugins/weex-vue-global-event/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-global-event",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'globalEvent' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-input/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-input/package.json b/packages/weex-vue-plugins/weex-vue-input/package.json
index 5839cc0..6515340 100644
--- a/packages/weex-vue-plugins/weex-vue-input/package.json
+++ b/packages/weex-vue-plugins/weex-vue-input/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-input",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in '<input>' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-modal/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-modal/package.json b/packages/weex-vue-plugins/weex-vue-modal/package.json
index bafe1a6..e49b6de 100644
--- a/packages/weex-vue-plugins/weex-vue-modal/package.json
+++ b/packages/weex-vue-plugins/weex-vue-modal/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-modal",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'modal' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-navigator/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-navigator/package.json b/packages/weex-vue-plugins/weex-vue-navigator/package.json
index 706d0bc..d16255b 100644
--- a/packages/weex-vue-plugins/weex-vue-navigator/package.json
+++ b/packages/weex-vue-plugins/weex-vue-navigator/package.json
@@ -1,6 +1,6 @@
 {
-  "name": "weex-vue-navigator",
-  "version": "0.1.0",
+  "name": "weex-vue-nav",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'navigator' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-slider/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-slider/package.json b/packages/weex-vue-plugins/weex-vue-slider/package.json
index 7d7f36d..433afed 100644
--- a/packages/weex-vue-plugins/weex-vue-slider/package.json
+++ b/packages/weex-vue-plugins/weex-vue-slider/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-slider",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in '<slider>' and '<slider-neighbor>' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-storage/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-storage/package.json b/packages/weex-vue-plugins/weex-vue-storage/package.json
index cd2ada4..5ade986 100644
--- a/packages/weex-vue-plugins/weex-vue-storage/package.json
+++ b/packages/weex-vue-plugins/weex-vue-storage/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-storage",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'storage' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-stream/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-stream/package.json b/packages/weex-vue-plugins/weex-vue-stream/package.json
index ddd6fe9..e7b61fd 100644
--- a/packages/weex-vue-plugins/weex-vue-stream/package.json
+++ b/packages/weex-vue-plugins/weex-vue-stream/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-stream",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'stream' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-switch/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-switch/package.json b/packages/weex-vue-plugins/weex-vue-switch/package.json
index 1a996c3..89eee92 100644
--- a/packages/weex-vue-plugins/weex-vue-switch/package.json
+++ b/packages/weex-vue-plugins/weex-vue-switch/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-switch",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in '<switch>' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-textarea/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-textarea/package.json b/packages/weex-vue-plugins/weex-vue-textarea/package.json
index 696f863..4787421 100644
--- a/packages/weex-vue-plugins/weex-vue-textarea/package.json
+++ b/packages/weex-vue-plugins/weex-vue-textarea/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-textarea",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in '<textarea>' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-video/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-video/package.json b/packages/weex-vue-plugins/weex-vue-video/package.json
index 13c6a5f..0b5c763 100644
--- a/packages/weex-vue-plugins/weex-vue-video/package.json
+++ b/packages/weex-vue-plugins/weex-vue-video/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-video",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in '<video>' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-web/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-web/package.json b/packages/weex-vue-plugins/weex-vue-web/package.json
index 51b1401..a1ef3c4 100644
--- a/packages/weex-vue-plugins/weex-vue-web/package.json
+++ b/packages/weex-vue-plugins/weex-vue-web/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-web",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in '<web>' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-websocket/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-websocket/package.json b/packages/weex-vue-plugins/weex-vue-websocket/package.json
index 5e03c12..ac911c7 100644
--- a/packages/weex-vue-plugins/weex-vue-websocket/package.json
+++ b/packages/weex-vue-plugins/weex-vue-websocket/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-websocket",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'websocket' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fe406907/packages/weex-vue-plugins/weex-vue-webview/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-webview/package.json b/packages/weex-vue-plugins/weex-vue-webview/package.json
index 5cc9028..9a71ad1 100644
--- a/packages/weex-vue-plugins/weex-vue-webview/package.json
+++ b/packages/weex-vue-plugins/weex-vue-webview/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-webview",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Weex built-in API module 'webview' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",


[41/43] incubator-weex git commit: * [html5] fix danger file wehn renaming files.

Posted by ta...@apache.org.
* [html5] fix danger file wehn renaming files.


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

Branch: refs/heads/0.16-dev
Commit: 83dd1e5e274a45c5d1b20f58fa14617e4ec32481
Parents: 30687e7
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Jul 28 10:29:17 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Jul 28 11:34:06 2017 +0800

----------------------------------------------------------------------
 dangerfile.js | 35 +++++++++++++++++++++--------------
 1 file changed, 21 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83dd1e5e/dangerfile.js
----------------------------------------------------------------------
diff --git a/dangerfile.js b/dangerfile.js
index ac3a5a7..fed5a9b 100644
--- a/dangerfile.js
+++ b/dangerfile.js
@@ -281,9 +281,10 @@ function findReviewer(resolve, reject) {
   var fileToDeletedLinesMap = {}
   var fileToNormalLinesMap = {}
   var fileToBlamesMap = {}
+  var repoName = danger.github.pr.base.repo && danger.github.pr.base.repo.name
   github.pullRequests.get({
     owner: danger.github.pr.base.user.login,
-    repo: danger.github.pr.base.repo.name,
+    repo: repoName,
     number: danger.github.pr.number,
     headers: {Accept: 'application/vnd.github.diff'}
   }, function (err, result) {
@@ -296,7 +297,6 @@ function findReviewer(resolve, reject) {
       let repoURL = danger.github.pr.base.repo.html_url
       let fileName = file.replace(/^.*[\\\/]/, '')
       let blameURL = repoURL + '/blame/' + danger.github.pr.base.ref + '/' + file
-      // console.log("Getting blame html: " + blameURL)
       return getContent(blameURL)
     });
 
@@ -315,18 +315,25 @@ function getContent(url) {
   return new Promise((resolve, reject) => {
     // select http or https module, depending on reqested url
     const lib = url.startsWith('https') ? require('https') : require('http');
-    const request = lib.get(url, (response) => {
-      // handle http errors
-      if (response.statusCode < 200 || response.statusCode > 299) {
-         reject(new Error('Failed to load page, status code: ' + response.statusCode));
-       }
-      // temporary data holder
-      const body = [];
-      // on every content chunk, push it to the data array
-      response.on('data', (chunk) => body.push(chunk));
-      // we are done, resolve promise with those joined chunks
-      response.on('end', () => resolve(body.join('')));
-    });
+    const request = lib.get(url, (function (url) {
+      return (response) => {
+        // handle http errors
+        if (response.statusCode < 200 || response.statusCode > 299) {
+          if (response.statusCode === 404) {
+            // ignore this, probably a renamed file.
+            return resolve('')
+          }
+          reject(new Error('Failed to load page, status code: ' + response.statusCode + ', '
+            + ' url: ' + url));
+        }
+        // temporary data holder
+        const body = [];
+        // on every content chunk, push it to the data array
+        response.on('data', (chunk) => body.push(chunk));
+        // we are done, resolve promise with those joined chunks
+        response.on('end', () => resolve(body.join('')));
+      }
+    })(url));
     // handle connection errors of the request
     request.on('error', (err) => reject(err))
     })


[04/43] incubator-weex git commit: * [html5] release v0.11.54 & rm click event object's tow methods.

Posted by ta...@apache.org.
* [html5] release v0.11.54 & rm click event object's tow methods.


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

Branch: refs/heads/0.16-dev
Commit: da1ca840417be5c85300bb099c7e19a21d29ec1d
Parents: 85c92c9
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Jun 30 17:46:14 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Jun 30 17:46:14 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/core/node.js         | 11 ++++++++---
 package.json                          |  2 +-
 packages/weex-vue-render/package.json |  2 +-
 3 files changed, 10 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/da1ca840/html5/render/vue/core/node.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/core/node.js b/html5/render/vue/core/node.js
index 196d061..8edc608 100644
--- a/html5/render/vue/core/node.js
+++ b/html5/render/vue/core/node.js
@@ -114,9 +114,14 @@ export function createEventMap (context, extras = []) {
                 if (on && on.fn) {
                   on = on.fn
                 }
-                on && on.call(vm,
-                  originalType === listenTo ? e : extend({}, e, { type: listenTo })
-                )
+                let evt = e
+                if (originalType === listenTo) {
+                  evt = extend({}, { type: listenTo })
+                  // weex didn't provide these two methods for event object.
+                  delete event.preventDefault
+                  delete event.stopPropagation
+                }
+                on && on.call(vm, evt)
                 idx++
               }
               // once a parent node (or self node) has triggered the handler, then

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/da1ca840/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 3a8febe..794b972 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "subversion": {
     "browser": "0.5.0",
     "framework": "0.20.6",
-    "vue-render": "0.11.53",
+    "vue-render": "0.11.54",
     "transformer": ">=0.1.5 <0.5"
   },
   "description": "A framework for building Mobile cross-platform UI",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/da1ca840/packages/weex-vue-render/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/package.json b/packages/weex-vue-render/package.json
index 585da06..a431e54 100644
--- a/packages/weex-vue-render/package.json
+++ b/packages/weex-vue-render/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-render",
-  "version": "0.11.53",
+  "version": "0.11.54",
   "description": "Weex built-in components for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",


[27/43] incubator-weex git commit: * [html5] update version.

Posted by ta...@apache.org.
* [html5] update version.


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

Branch: refs/heads/0.16-dev
Commit: 5225997d01796843308f48b4b9abad35a55b6170
Parents: b195a36
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 21:37:50 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 21:37:50 2017 +0800

----------------------------------------------------------------------
 packages/weex-vue-plugins/weex-vue-a/package.json            | 2 +-
 packages/weex-vue-plugins/weex-vue-animation/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-clipboard/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-dom/package.json          | 2 +-
 packages/weex-vue-plugins/weex-vue-event/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-geolocation/package.json  | 2 +-
 packages/weex-vue-plugins/weex-vue-global-event/package.json | 2 +-
 packages/weex-vue-plugins/weex-vue-input/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-modal/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-navigator/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-slider/package.json       | 2 +-
 packages/weex-vue-plugins/weex-vue-storage/package.json      | 2 +-
 packages/weex-vue-plugins/weex-vue-stream/package.json       | 2 +-
 packages/weex-vue-plugins/weex-vue-switch/package.json       | 2 +-
 packages/weex-vue-plugins/weex-vue-textarea/package.json     | 2 +-
 packages/weex-vue-plugins/weex-vue-video/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-web/package.json          | 2 +-
 packages/weex-vue-plugins/weex-vue-websocket/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-webview/package.json      | 2 +-
 19 files changed, 19 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-a/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-a/package.json b/packages/weex-vue-plugins/weex-vue-a/package.json
index c7495ad..b0d1d9a 100644
--- a/packages/weex-vue-plugins/weex-vue-a/package.json
+++ b/packages/weex-vue-plugins/weex-vue-a/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-a",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in 'a' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-animation/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-animation/package.json b/packages/weex-vue-plugins/weex-vue-animation/package.json
index bffde3e..94c7368 100644
--- a/packages/weex-vue-plugins/weex-vue-animation/package.json
+++ b/packages/weex-vue-plugins/weex-vue-animation/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-animation",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'animation' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-clipboard/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-clipboard/package.json b/packages/weex-vue-plugins/weex-vue-clipboard/package.json
index 91af538..10e6c01 100644
--- a/packages/weex-vue-plugins/weex-vue-clipboard/package.json
+++ b/packages/weex-vue-plugins/weex-vue-clipboard/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-clipboard",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'clipboard' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-dom/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-dom/package.json b/packages/weex-vue-plugins/weex-vue-dom/package.json
index c673808..d1df658 100644
--- a/packages/weex-vue-plugins/weex-vue-dom/package.json
+++ b/packages/weex-vue-plugins/weex-vue-dom/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-dom",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'dom' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-event/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-event/package.json b/packages/weex-vue-plugins/weex-vue-event/package.json
index 244ec39..abae404 100644
--- a/packages/weex-vue-plugins/weex-vue-event/package.json
+++ b/packages/weex-vue-plugins/weex-vue-event/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-event",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'event' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-geolocation/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-geolocation/package.json b/packages/weex-vue-plugins/weex-vue-geolocation/package.json
index e426a6b..0fb014e 100644
--- a/packages/weex-vue-plugins/weex-vue-geolocation/package.json
+++ b/packages/weex-vue-plugins/weex-vue-geolocation/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-geolocation",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'geolocation' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-global-event/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-global-event/package.json b/packages/weex-vue-plugins/weex-vue-global-event/package.json
index 1244c4f..40ae8e6 100644
--- a/packages/weex-vue-plugins/weex-vue-global-event/package.json
+++ b/packages/weex-vue-plugins/weex-vue-global-event/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-global-event",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'globalEvent' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-input/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-input/package.json b/packages/weex-vue-plugins/weex-vue-input/package.json
index f286171..ec5696f 100644
--- a/packages/weex-vue-plugins/weex-vue-input/package.json
+++ b/packages/weex-vue-plugins/weex-vue-input/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-input",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in 'input' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-modal/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-modal/package.json b/packages/weex-vue-plugins/weex-vue-modal/package.json
index 0d8b157..0665ec8 100644
--- a/packages/weex-vue-plugins/weex-vue-modal/package.json
+++ b/packages/weex-vue-plugins/weex-vue-modal/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-modal",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'modal' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-navigator/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-navigator/package.json b/packages/weex-vue-plugins/weex-vue-navigator/package.json
index c16e49b..74a92bd 100644
--- a/packages/weex-vue-plugins/weex-vue-navigator/package.json
+++ b/packages/weex-vue-plugins/weex-vue-navigator/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-nav",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'navigator' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-slider/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-slider/package.json b/packages/weex-vue-plugins/weex-vue-slider/package.json
index 75db88f..427fdc2 100644
--- a/packages/weex-vue-plugins/weex-vue-slider/package.json
+++ b/packages/weex-vue-plugins/weex-vue-slider/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-slider",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in 'slider' and 'slider-neighbor' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-storage/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-storage/package.json b/packages/weex-vue-plugins/weex-vue-storage/package.json
index 1016afc..6238a34 100644
--- a/packages/weex-vue-plugins/weex-vue-storage/package.json
+++ b/packages/weex-vue-plugins/weex-vue-storage/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-storage",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'storage' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-stream/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-stream/package.json b/packages/weex-vue-plugins/weex-vue-stream/package.json
index ef94e45..43c8355 100644
--- a/packages/weex-vue-plugins/weex-vue-stream/package.json
+++ b/packages/weex-vue-plugins/weex-vue-stream/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-stream",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'stream' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-switch/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-switch/package.json b/packages/weex-vue-plugins/weex-vue-switch/package.json
index 5d96737..4d963e6 100644
--- a/packages/weex-vue-plugins/weex-vue-switch/package.json
+++ b/packages/weex-vue-plugins/weex-vue-switch/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-switch",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in 'switch' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-textarea/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-textarea/package.json b/packages/weex-vue-plugins/weex-vue-textarea/package.json
index f9a31a5..0f05ad1 100644
--- a/packages/weex-vue-plugins/weex-vue-textarea/package.json
+++ b/packages/weex-vue-plugins/weex-vue-textarea/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-textarea",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in 'textarea' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-video/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-video/package.json b/packages/weex-vue-plugins/weex-vue-video/package.json
index e4106ad..6d8b5b1 100644
--- a/packages/weex-vue-plugins/weex-vue-video/package.json
+++ b/packages/weex-vue-plugins/weex-vue-video/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-video",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in 'video' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-web/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-web/package.json b/packages/weex-vue-plugins/weex-vue-web/package.json
index 9921e09..1373c55 100644
--- a/packages/weex-vue-plugins/weex-vue-web/package.json
+++ b/packages/weex-vue-plugins/weex-vue-web/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-web",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in 'web' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-websocket/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-websocket/package.json b/packages/weex-vue-plugins/weex-vue-websocket/package.json
index fbb2e38..92d974e 100644
--- a/packages/weex-vue-plugins/weex-vue-websocket/package.json
+++ b/packages/weex-vue-plugins/weex-vue-websocket/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-websocket",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'websocket' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5225997d/packages/weex-vue-plugins/weex-vue-webview/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-webview/package.json b/packages/weex-vue-plugins/weex-vue-webview/package.json
index fc7f063..d65b3e9 100644
--- a/packages/weex-vue-plugins/weex-vue-webview/package.json
+++ b/packages/weex-vue-plugins/weex-vue-webview/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-webview",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "Weex built-in API module 'webview' for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",


[35/43] incubator-weex git commit: * [html5] add LICENSE header.

Posted by ta...@apache.org.
* [html5] add LICENSE header.


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

Branch: refs/heads/0.16-dev
Commit: 5581f722d93842a4c19b248a81babbaa64257ff7
Parents: 75c1810
Author: MrRaindrop <te...@gmail.com>
Authored: Wed Jul 26 11:41:29 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Wed Jul 26 11:41:29 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/components/scrollable/index.js  | 19 +++++++++++++++++++
 .../vue/components/scrollable/mixins/index.js    | 19 +++++++++++++++++++
 html5/render/vue/components/scrollable/style.css | 19 +++++++++++++++++++
 html5/render/vue/components/slider/index.js      | 19 +++++++++++++++++++
 html5/render/vue/components/slider/slider.css    | 19 +++++++++++++++++++
 html5/render/vue/styles/base.css                 | 19 +++++++++++++++++++
 html5/render/vue/styles/reset.css                | 19 +++++++++++++++++++
 html5/test/render/vue/utils/lazyload.js          |  3 ---
 8 files changed, 133 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5581f722/html5/render/vue/components/scrollable/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/index.js b/html5/render/vue/components/scrollable/index.js
index 3c68404..8142786 100644
--- a/html5/render/vue/components/scrollable/index.js
+++ b/html5/render/vue/components/scrollable/index.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import list from './list'
 import scroller from './scroller'
 import waterfall from './waterfall'

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5581f722/html5/render/vue/components/scrollable/mixins/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/mixins/index.js b/html5/render/vue/components/scrollable/mixins/index.js
index 7b9b304..560f958 100644
--- a/html5/render/vue/components/scrollable/mixins/index.js
+++ b/html5/render/vue/components/scrollable/mixins/index.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import scrollable from './scrollable'
 import list from './list'
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5581f722/html5/render/vue/components/scrollable/style.css
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/style.css b/html5/render/vue/components/scrollable/style.css
index c026113..c4e1498 100644
--- a/html5/render/vue/components/scrollable/style.css
+++ b/html5/render/vue/components/scrollable/style.css
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 body > .weex-list,
 body > .weex-scroller,
 body > .weex-waterfall {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5581f722/html5/render/vue/components/slider/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/slider/index.js b/html5/render/vue/components/slider/index.js
index 90c8d6f..cd9d4ec 100644
--- a/html5/render/vue/components/slider/index.js
+++ b/html5/render/vue/components/slider/index.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import slider from './slider'
 import indicator from './indicator'
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5581f722/html5/render/vue/components/slider/slider.css
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/slider/slider.css b/html5/render/vue/components/slider/slider.css
index 4e0f9c2..8fe384b 100644
--- a/html5/render/vue/components/slider/slider.css
+++ b/html5/render/vue/components/slider/slider.css
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
 .weex-slider-wrapper {
   overflow-x: hidden;
   overflow-y: visible;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5581f722/html5/render/vue/styles/base.css
----------------------------------------------------------------------
diff --git a/html5/render/vue/styles/base.css b/html5/render/vue/styles/base.css
index 33cb37d..96beb83 100644
--- a/html5/render/vue/styles/base.css
+++ b/html5/render/vue/styles/base.css
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
 .weex-root * {
   border-width: 0;
   border-color: inherit;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5581f722/html5/render/vue/styles/reset.css
----------------------------------------------------------------------
diff --git a/html5/render/vue/styles/reset.css b/html5/render/vue/styles/reset.css
index 6a33a37..cb334a0 100644
--- a/html5/render/vue/styles/reset.css
+++ b/html5/render/vue/styles/reset.css
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
 .weex-root,
 .weex-root * {
   color: initial;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5581f722/html5/test/render/vue/utils/lazyload.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/utils/lazyload.js b/html5/test/render/vue/utils/lazyload.js
index b4e8251..3c5a5bd 100644
--- a/html5/test/render/vue/utils/lazyload.js
+++ b/html5/test/render/vue/utils/lazyload.js
@@ -36,7 +36,6 @@ describe('utils', function () {
     it('fireLazyload', (done) => {
       const node = document.createElement('figure')
       const urlReg = /http(s)?:\/\/(\S+):(\d+)\//
-      const IMG_REC_INDENT = 500
       node.setAttribute('img-src', invalidImage)
       node.setAttribute('img-placeholder', validImageBlack)
       node.style.height = '10px'
@@ -56,7 +55,6 @@ describe('utils', function () {
     })
     describe('getThrottleLazyload', () => {
       it('should use default value while params is undefined', (done) => {
-        const IMG_REC_INDENT = 500
         window._first_screen_detected = true
         getThrottleLazyload()()
         setTimeout(() => {
@@ -67,7 +65,6 @@ describe('utils', function () {
         const node = document.createElement('figure')
         const urlReg = /http(s)?:\/\/(\S+):(\d+)\//
         const wait = 100
-        const IMG_REC_INDENT = 500
         node.style.height = '10px'
         node.setAttribute('img-src', validImageTransparent)
         node.setAttribute('img-placeholder', validImageBlack)


[36/43] incubator-weex git commit: Merge branch '0.16-dev' into 0.16-dev-web

Posted by ta...@apache.org.
Merge branch '0.16-dev' into 0.16-dev-web


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

Branch: refs/heads/0.16-dev
Commit: 0fadfcc9bd2a3a9d5a4633cb82e58ccbd7876c1d
Parents: 5581f72 3afacf1
Author: MrRaindrop <te...@gmail.com>
Authored: Wed Jul 26 14:46:21 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Wed Jul 26 14:46:21 2017 +0800

----------------------------------------------------------------------
 dangerfile.js                                   |   8 +-
 html5/test/render/vue/core/node.js              |   5 +-
 .../render/vue/data/dotvue/event-bubble-bar.vue |   8 +-
 .../render/vue/data/dotvue/event-bubble.vue     |   4 +-
 html5/test/render/vue/modules/animation.js      |  61 +++++++++++
 html5/test/render/vue/modules/dom.js            | 109 +++++++++++++++++++
 html5/test/render/vue/modules/globalEvent.js    |  45 ++++++++
 html5/test/render/vue/modules/navigator.js      |  44 ++++++++
 html5/test/render/vue/modules/webview.js        |  53 +++++++++
 9 files changed, 329 insertions(+), 8 deletions(-)
----------------------------------------------------------------------



[29/43] incubator-weex git commit: + [html5] add render built with weex-vue-bundle-tool.

Posted by ta...@apache.org.
+ [html5] add render built with weex-vue-bundle-tool.


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

Branch: refs/heads/0.16-dev
Commit: b50035e0c579439d29e6b8ac3c1b2aeba6e9b4dc
Parents: ed20cdc
Author: MrRaindrop <te...@gmail.com>
Authored: Tue Jul 25 16:01:05 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Tue Jul 25 16:01:05 2017 +0800

----------------------------------------------------------------------
 .gitignore                 |  3 +++
 build/build.js             | 59 ++++++++++++++++++++++++++++++++++++++++-
 entry.js                   | 11 ++++++++
 html5/render/vue/README.md | 10 ++++++-
 package.json               |  1 +
 vue.html                   |  8 +++---
 6 files changed, 87 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b50035e0/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index ada18b8..d1469fc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,6 +39,9 @@ examples/vue/test/
 html5/browser/extend/packer.js
 html5/render/browser/extend/packer.js
 
+# Created by weex-vue-bundle-util
+weex-vue-plugins.js
+
 android/playground/app/gradlew
 android/playground/app/gradlew.bat
 android/playground/app/gradle/wrapper/gradle-wrapper.jar

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b50035e0/build/build.js
----------------------------------------------------------------------
diff --git a/build/build.js b/build/build.js
index c96fe66..ff2ef08 100644
--- a/build/build.js
+++ b/build/build.js
@@ -24,6 +24,10 @@ const gzip = require('zlib').createGzip()
 const pkg = require('../package.json')
 const rollup = require('rollup')
 const watch = require('rollup-watch')
+const webpack = require('webpack')
+const scan = require('weex-vue-bundle-util')
+const webExamplesWebpackConfig = require('./webpack.examples.web.config')
+const exec = require('child_process').execSync
 
 const getConfig = require('./config')
 
@@ -111,6 +115,55 @@ function getAllEntries (rootDir) {
     })
 }
 
+function absolutePath (p) {
+  return path.join(__dirname, p)
+}
+
+function buildForWebExamples (config, minifyConfig) {
+  config.entry = minifyConfig.entry = absolutePath('../entry.js')
+  config.dest = absolutePath('../dist/render.vue.js')
+  delete config.banner
+  config.plugins = config.plugins.filter(function (plugin) {
+    return plugin.name !== 'eslint'
+  })
+  minifyConfig.dest = absolutePath('../dist/render.vue.min.js')
+  delete minifyConfig.banner
+
+  // bundle web examples.
+  scan(webpack, webExamplesWebpackConfig)
+    .then(function (res) {
+      var pkgs = res.pkgs
+      var names = []
+      var str = pkgs.map(function (pkgName) {
+        var name = pkgName
+          .replace('weex-vue-', '')
+          .replace(/-(\w)/g, function ($0, $1) {
+            return $1.toUpperCase()
+          })
+          + 'Mod'
+        names.push(name)
+        try {
+          var version = require(`${pkgName}/package.json`).version
+        } catch (err) {
+          exec(`npm install ${pkgName}`)
+        }
+        return `import ${name} from '${pkgName}'\n`
+      }).join('')
+      str += `export default [\n${names.join(',  \n')}\n]\n`
+      return fs.writeFileSync(absolutePath('../weex-vue-plugins.js'), str)
+    })
+    .then(function () {
+      console.log(`\n => start to build weex-vue-render for examples.\n`)
+      return new Promise((resolve, reject) => {
+        runRollup(config).then(() => {
+          runRollup(minifyConfig).then(() => {
+            zip(minifyConfig.dest, resolve)
+          })
+        })
+      })
+    })
+}
+
 function build (name) {
   let pkgName = 'weex-js-framework'
   switch (name) {
@@ -120,12 +173,16 @@ function build (name) {
     case 'vue': pkgName = 'weex-vue-render'; break;
     case 'vue-plugins': pkgName = 'weex-vue-render-plugins'; break;
     case 'vue-core': pkgName = 'weex-vue-render-core'; break;
+    case 'web-examples': pkgName = 'weex-vue-render-core'; break;
   }
 
   const config = getConfig(pkgName)
   const minifyConfig = getConfig(pkgName, true)
 
-  if (pkgName === 'weex-vue-render-plugins') {
+  if (name === 'web-examples') {
+    buildForWebExamples(config, minifyConfig)
+  }
+  else if (pkgName === 'weex-vue-render-plugins') {
     // build multiple packages in a loop.
     console.log(`\n => start to build ${name} (${pkgName})\n`)
     const entries = getAllEntries(path.join(__dirname, '../packages/weex-vue-plugins'))

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b50035e0/entry.js
----------------------------------------------------------------------
diff --git a/entry.js b/entry.js
new file mode 100644
index 0000000..d53e897
--- /dev/null
+++ b/entry.js
@@ -0,0 +1,11 @@
+import weex from './packages/weex-vue-render/dist/index.core'
+import plugins from './weex-vue-plugins'
+
+// install plugins.
+plugins.forEach(function (plugin) {
+  weex.install(plugin)
+})
+
+weex.init()
+
+export default weex

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b50035e0/html5/render/vue/README.md
----------------------------------------------------------------------
diff --git a/html5/render/vue/README.md b/html5/render/vue/README.md
index 07286be..f9ac2de 100644
--- a/html5/render/vue/README.md
+++ b/html5/render/vue/README.md
@@ -84,7 +84,7 @@ These components have already integrated into render-core. You don't have to imp
 | weex-vue-geolocation | geolocation |
 | weex-vue-global-event | globalEvent |
 | weex-vue-modal | modal |
-| weex-vue-navigator | navigator |
+| weex-vue-nav | navigator |
 | weex-vue-storage | storage |
 | weex-vue-stream | stream |
 | weex-vue-websocket | websocket |
@@ -94,6 +94,14 @@ Some of the above plugins may not be mentioned in weex documents. Just ignore th
 
 You can develop more plugins for your app. Accordingly the same plugin for other two platforms (iOS and Android) should also be built and intergrated in your app if you want it run on all three platforms.
 
+#### scan your code
+
+Use `weex-vue-bundle-util` to scan you code, which will return a promise with a object to tell which components and modules you have used in your project, so that can generate a entry file accordingly to import those plugins.
+
+https://github.com/weexteam/weex-vue-bundle-util
+
+You can see the examples of weex built in this way by running the script `npm run build:vue:examples`, and use the `<script src="./dist/render.vue.js"></script>` as the render in the `vue.html` file.
+
 ## use vue-loader to bundle .vue file
 
 NOTE: you should inject `$processStyle` to preprocess vnode's style in vue-loader's postTransformNode hook.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b50035e0/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index f344475..fe8a269 100644
--- a/package.json
+++ b/package.json
@@ -47,6 +47,7 @@
     "build:vue": "flow check && node build/build.js vue && npm run build:vue:core && npm run build:vue:plugins",
     "build:vue:core": "node build/build.js vue-core",
     "build:vue:plugins": "node build/build.js vue-plugins",
+    "build:vue:examples": "node build/build.js web-examples",
     "build:examples": "npm run build:examples:native && npm run build:examples:web",
     "build:examples:native": "webpack --config build/webpack.examples.config.js",
     "build:examples:web": "webpack --config build/webpack.examples.web.config.js",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b50035e0/vue.html
----------------------------------------------------------------------
diff --git a/vue.html b/vue.html
index cf2e264..bccdd30 100644
--- a/vue.html
+++ b/vue.html
@@ -46,10 +46,12 @@
   </style>
 
   <!--<script src="./node_modules/vue/dist/vue.runtime.min.js"></script>-->
-   <script src="./node_modules/vue/dist/vue.runtime.js"></script> 
-   <!--<script src="dist/vue.runtime.js"></script> -->
+  <script src="./node_modules/vue/dist/vue.runtime.js"></script> 
+  <!--<script src="dist/vue.runtime.js"></script> -->
   <!-- <script src="./node_modules/weex-vue-render/index.min.js"></script> -->
-   <script src="./packages/weex-vue-render/dist/index.js"></script> 
+  <script src="./packages/weex-vue-render/dist/index.js"></script>
+  <!--<script src="./dist/render.vue.js"></script>-->
+  <!--<script src="./dist/render.vue.min.js"></script>-->
   <!--<script src="./packages/weex-vue-render/dist/index.min.js"></script>-->
 </head>
 <body>


[42/43] incubator-weex git commit: * [html5] fix release tests.

Posted by ta...@apache.org.
* [html5] fix release tests.


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

Branch: refs/heads/0.16-dev
Commit: c45b53cdbf11bc72f0124c05c4f461d1185d3c70
Parents: 83dd1e5
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Jul 28 15:22:24 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Jul 28 15:22:24 2017 +0800

----------------------------------------------------------------------
 build/build.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c45b53cd/build/build.js
----------------------------------------------------------------------
diff --git a/build/build.js b/build/build.js
index ff2ef08..d3b0559 100644
--- a/build/build.js
+++ b/build/build.js
@@ -26,7 +26,6 @@ const rollup = require('rollup')
 const watch = require('rollup-watch')
 const webpack = require('webpack')
 const scan = require('weex-vue-bundle-util')
-const webExamplesWebpackConfig = require('./webpack.examples.web.config')
 const exec = require('child_process').execSync
 
 const getConfig = require('./config')
@@ -120,6 +119,7 @@ function absolutePath (p) {
 }
 
 function buildForWebExamples (config, minifyConfig) {
+  const webExamplesWebpackConfig = require('./webpack.examples.web.config')
   config.entry = minifyConfig.entry = absolutePath('../entry.js')
   config.dest = absolutePath('../dist/render.vue.js')
   delete config.banner


[06/43] incubator-weex git commit: * [html5] add touch events & fix event mapping.

Posted by ta...@apache.org.
* [html5] add touch events & fix event mapping.


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

Branch: refs/heads/0.16-dev
Commit: c4f461f34929a6c2f733047698ee4d565db001c1
Parents: 736772b
Author: MrRaindrop <te...@gmail.com>
Authored: Mon Jul 3 17:37:04 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Mon Jul 3 17:37:04 2017 +0800

----------------------------------------------------------------------
 .../vue/components/scrollable/list/index.js     |  3 +-
 .../vue/components/scrollable/scroller.js       |  3 +-
 .../vue/components/scrollable/waterfall.js      |  3 +-
 .../render/vue/components/slider/slideMixin.js  | 17 ++++---
 html5/render/vue/core/node.js                   | 51 ++++++++++++++++----
 html5/test/render/vue/core/node.js              |  4 +-
 6 files changed, 57 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c4f461f3/html5/render/vue/components/scrollable/list/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/list/index.js b/html5/render/vue/components/scrollable/list/index.js
index e781fe9..79e6d7d 100644
--- a/html5/render/vue/components/scrollable/list/index.js
+++ b/html5/render/vue/components/scrollable/list/index.js
@@ -19,7 +19,6 @@
 import { extractComponentStyle, createEventMap } from '../../../core'
 import { scrollable } from '../../../mixins'
 // import { validateStyles } from '../../../validator'
-import { extend } from '../../../utils'
 import listMixin from './listMixin'
 
 export default {
@@ -66,7 +65,7 @@ export default {
       ref: 'wrapper',
       attrs: { 'weex-type': 'list' },
       staticClass: this.wrapperClass,
-      on: extend(createEventMap(this), {
+      on: createEventMap(this, {
         scroll: this.handleListScroll,
         touchstart: this.handleTouchStart,
         touchmove: this.handleTouchMove,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c4f461f3/html5/render/vue/components/scrollable/scroller.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/scroller.js b/html5/render/vue/components/scrollable/scroller.js
index 3151fae..1eebab3 100644
--- a/html5/render/vue/components/scrollable/scroller.js
+++ b/html5/render/vue/components/scrollable/scroller.js
@@ -19,7 +19,6 @@
 import { extractComponentStyle, createEventMap } from '../../core'
 import { scrollable } from '../../mixins'
 // import { validateStyles } from '../../validator'
-import { extend } from '../../utils'
 import listMixin from './list/listMixin'
 
 export default {
@@ -80,7 +79,7 @@ export default {
     return createElement('main', {
       ref: 'wrapper',
       attrs: { 'weex-type': 'scroller' },
-      on: extend(createEventMap(this), {
+      on: createEventMap(this, {
         scroll: this.handleScroll,
         touchstart: this.handleTouchStart,
         touchmove: this.handleTouchMove,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c4f461f3/html5/render/vue/components/scrollable/waterfall.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/waterfall.js b/html5/render/vue/components/scrollable/waterfall.js
index 2239f00..012c1d2 100644
--- a/html5/render/vue/components/scrollable/waterfall.js
+++ b/html5/render/vue/components/scrollable/waterfall.js
@@ -23,7 +23,6 @@
  */
 import { extractComponentStyle, createEventMap } from '../../core'
 import { scrollable } from '../../mixins'
-import { extend } from '../../utils'
 
 const NORMAL_GAP_SIZE = 32
 const DEFAULT_COLUMN_COUNT = 1
@@ -325,7 +324,7 @@ export default {
     return createElement('main', {
       ref: 'wrapper',
       attrs: { 'weex-type': 'waterfall' },
-      on: extend(createEventMap(this), {
+      on: createEventMap(this, {
         scroll: this.handleScroll,
         touchstart: this.handleTouchStart,
         touchmove: this.handleTouchMove,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c4f461f3/html5/render/vue/components/slider/slideMixin.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/slider/slideMixin.js b/html5/render/vue/components/slider/slideMixin.js
index 73960e5..2b7bfa1 100644
--- a/html5/render/vue/components/slider/slideMixin.js
+++ b/html5/render/vue/components/slider/slideMixin.js
@@ -19,7 +19,6 @@
 import './slider.css'
 import {
   throttle,
-  extend,
   createEvent,
   fireLazyload,
   addTransform,
@@ -116,12 +115,16 @@ export default {
         {
           ref: 'wrapper',
           attrs: { 'weex-type': this.isNeighbor ? 'slider-neighbor' : 'slider' },
-          on: extend(createEventMap(this, ['scroll', 'scrollstart', 'scrollend']), {
-            touchstart: this._handleTouchStart,
-            touchmove: throttle(bind(this._handleTouchMove, this), 25),
-            touchend: this._handleTouchEnd,
-            touchcancel: this._handleTouchCancel
-          }),
+          on: createEventMap(
+            this,
+            ['scroll', 'scrollstart', 'scrollend'],
+            {
+              touchstart: this._handleTouchStart,
+              touchmove: throttle(bind(this._handleTouchMove, this), 25),
+              touchend: this._handleTouchEnd,
+              touchcancel: this._handleTouchCancel
+            }
+          ),
           staticClass: 'weex-slider weex-slider-wrapper weex-ct',
           staticStyle: extractComponentStyle(this)
         },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c4f461f3/html5/render/vue/core/node.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/core/node.js b/html5/render/vue/core/node.js
index 8edc608..d07f3ed 100644
--- a/html5/render/vue/core/node.js
+++ b/html5/render/vue/core/node.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-import { extend } from '../utils'
+import { extend, isArray } from '../utils'
 
 /**
  * remove text nodes in the nodes array.
@@ -25,7 +25,7 @@ import { extend } from '../utils'
  * @return {Array} nodes without text nodes.
  */
 export function trimTextVNodes (vnodes) {
-  if (Array.isArray(vnodes)) {
+  if (isArray(vnodes)) {
     return vnodes.filter(vnode => !!vnode.tag)
   }
   return vnodes
@@ -55,7 +55,7 @@ function getListeners (vnode, evt) {
 
 const supportedEvents = [
   'longpress', 'appear', 'disappear',
-  // 'touchstart', 'touchmove', 'touchend',
+  'touchstart', 'touchmove', 'touchend',
   'panstart', 'panmove', 'panend', 'swipe', 'longpress'
 ]
 
@@ -76,9 +76,9 @@ function isInANode (el) {
 /**
  * emit native events to enable v-on.
  * @param {VComponent} context: which one to emit a event on.
- * @param {array} extras: extra events.
+ * @param {array | object} extras: extra events. You can pass in multiple arguments here.
  */
-export function createEventMap (context, extras = []) {
+export function createEventMap (context, ...extras) {
   const eventMap = {}
   /**
    * Bind some original type event to your specified type event handler.
@@ -88,11 +88,11 @@ export function createEventMap (context, extras = []) {
   const bindFunc = (originalType) => {
     return listenTo => {
       let handler
+      const evtName = originalType || listenTo
       if (typeof listenTo === 'function') {
         handler = listenTo
       }
       else if (typeof listenTo === 'string') {
-        if (!originalType) { originalType = listenTo }
         handler = function (e) {
           /**
            * allow original bubbling.
@@ -115,7 +115,7 @@ export function createEventMap (context, extras = []) {
                   on = on.fn
                 }
                 let evt = e
-                if (originalType === listenTo) {
+                if (originalType && evtName !== listenTo) {
                   evt = extend({}, { type: listenTo })
                   // weex didn't provide these two methods for event object.
                   delete event.preventDefault
@@ -135,10 +135,43 @@ export function createEventMap (context, extras = []) {
           }
         }
       }
-      eventMap[originalType] = handler
+      if (!eventMap[evtName]) {
+        eventMap[evtName] = []
+      }
+      eventMap[evtName].push(handler)
     }
   }
-  supportedEvents.concat(extras).forEach(bindFunc())
+
+  /**
+   * 1. Dispatch default supported events directly to user's event listeners. These
+   * listeners will be triggered before extras event handlers.
+   */
+  supportedEvents.forEach(bindFunc())
+
+  /**
+   * 2. component's extra event bindings. This is mostly for the needs of component's
+   * own special behaviours. These handlers will be processed after the user's
+   * corresponding event handlers.
+   */
+  if (extras) {
+    const len = extras.length
+    for (let i = 0; i < len; i++) {
+      const extra = extras[i]
+      if (isArray(extra)) {
+        extra.forEach(bindFunc())
+      }
+      else if (typeof extra === 'object') {
+        for (const key in extra) {
+          bindFunc(key)(extra[key])
+        }
+      }
+    }
+  }
+
+  /**
+   * 3. special binding for click event, which should be a fastclick event without
+   * 300ms latency.
+   */
   bindFunc('tap')('click')
   /**
    * Special treatment for click event:

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c4f461f3/html5/test/render/vue/core/node.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/core/node.js b/html5/test/render/vue/core/node.js
index 910e390..8076e4c 100644
--- a/html5/test/render/vue/core/node.js
+++ b/html5/test/render/vue/core/node.js
@@ -31,7 +31,7 @@ init('core node', (Vue, helper) => {
        * child vnode -> parent vnode.
        *  e.g.  div -> foo (whoes root element is the div.)
        */
-      const evt = new Event('click', { bubbles: true })
+      const evt = new Event('tap', { bubbles: true })
       el.dispatchEvent(evt)
 
       helper.registerDone(id, (tracker) => {
@@ -49,7 +49,7 @@ init('core node', (Vue, helper) => {
        * click inner div. should just trigget the inner handler and
        * shouldn't bubbe to outter div.
        */
-      const evt = new Event('click', { bubbles: true })
+      const evt = new Event('tap', { bubbles: true })
       inner.dispatchEvent(evt)
 
       helper.registerDone(id, (tracker) => {


[26/43] incubator-weex git commit: 0.12.2

Posted by ta...@apache.org.
0.12.2


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

Branch: refs/heads/0.16-dev
Commit: b195a369687fed999a77cc6de903188e232ed220
Parents: d1f619d
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 20:44:12 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 20:44:12 2017 +0800

----------------------------------------------------------------------
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b195a369/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index d08813d..f344475 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex",
-  "version": "0.12.1",
+  "version": "0.12.2",
   "subversion": {
     "browser": "0.5.0",
     "framework": "0.20.6",


[37/43] incubator-weex git commit: * [html5] fix tests.

Posted by ta...@apache.org.
* [html5] fix tests.


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

Branch: refs/heads/0.16-dev
Commit: 3b36889ccf1a9f9943efe7266fff5292a647d617
Parents: 0fadfcc
Author: MrRaindrop <te...@gmail.com>
Authored: Wed Jul 26 20:43:47 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Wed Jul 26 20:43:47 2017 +0800

----------------------------------------------------------------------
 html5/test/render/vue/modules/animation.js   | 12 ++++++------
 html5/test/render/vue/modules/dom.js         | 10 ++++++----
 html5/test/render/vue/modules/globalEvent.js |  8 +++++---
 html5/test/render/vue/modules/navigator.js   |  8 +++++---
 html5/test/render/vue/modules/webview.js     | 10 ++++++----
 5 files changed, 28 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3b36889c/html5/test/render/vue/modules/animation.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/modules/animation.js b/html5/test/render/vue/modules/animation.js
index 60188c2..a40d7fd 100644
--- a/html5/test/render/vue/modules/animation.js
+++ b/html5/test/render/vue/modules/animation.js
@@ -17,12 +17,13 @@
  * under the License.
  */
 /*global Event*/
-import * as animations from '../../../../render/vue/modules/animation'
+// import * as animations from '../../../../render/vue/modules/animation'
+import animation from '../../../../render/vue/modules/animation'
 describe('animation module', () => {
+  weex.install(animation)
+  const animationModule = weex.requireModule('animation')
   it('should transition be worked', (done) => {
-    const {
-      transition
-    } = animations.default
+    const { transition } = animationModule
     const config = {
       duration: 100,
       timingFunction: 'ease',
@@ -53,8 +54,7 @@ describe('animation module', () => {
       expect(vnode.$el.style['-webkit-box-align']).to.be.equal(config.styles['align-items'])
       expect(vnode.$el.style['-webkit-align-items']).to.be.equal(config.styles['align-items'])
       expect(vnode.$el.style['-webkit-box-flex']).to.be.equal(config.styles.flex + '')
-      expect(vnode.$el.style.top).to.be.equal(config.styles.top + 'px')
-      expect(vnode.$el.style['margin-left']).to.be.equal('0px')
+      expect(vnode.$el.style['margin-left']).to.be.equal(-10 * weex.config.env.scale + 'px')
       done()
     }, 100)
   })

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3b36889c/html5/test/render/vue/modules/dom.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/modules/dom.js b/html5/test/render/vue/modules/dom.js
index 2a0b3e4..5df77ba 100644
--- a/html5/test/render/vue/modules/dom.js
+++ b/html5/test/render/vue/modules/dom.js
@@ -16,13 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import * as dom from '../../../../render/vue/modules/dom'
+import dom from '../../../../render/vue/modules/dom'
 describe('dom module', () => {
   const callback = sinon.spy()
+  weex.install(dom)
+  const domModule = weex.requireModule('dom')
   it('should scrollToElement be worked', (done) => {
     const {
       scrollToElement
-    } = dom.default
+    } = domModule
     const node = document.createElement('div')
     const vnode = {
       $el: node
@@ -48,7 +50,7 @@ describe('dom module', () => {
   it('should getComponentRect be worked', () => {
     const {
       getComponentRect
-    } = dom.default
+    } = domModule
     const node = document.createElement('div')
     const vnode = {
       $el: node
@@ -96,7 +98,7 @@ describe('dom module', () => {
   it('should addRule be worked', () => {
     const {
       addRule
-    } = dom.default
+    } = domModule
     const key = 'font-face'
     const styles = {
       'font-family': 'iconfont'

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3b36889c/html5/test/render/vue/modules/globalEvent.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/modules/globalEvent.js b/html5/test/render/vue/modules/globalEvent.js
index ff285fc..1039ec0 100644
--- a/html5/test/render/vue/modules/globalEvent.js
+++ b/html5/test/render/vue/modules/globalEvent.js
@@ -17,13 +17,15 @@
  * under the License.
  */
 /*global Event*/
-import * as globalEvent from '../../../../render/vue/modules/globalEvent'
+import globalEvent from '../../../../render/vue/modules/globalEvent'
 describe('globalEvent module', () => {
+  weex.install(globalEvent)
+  const globalEventModule = weex.requireModule('globalEvent')
   const callback = sinon.spy()
   it('should addEventListener be worked', () => {
     const {
       addEventListener
-    } = globalEvent.default
+    } = globalEventModule
     const event = 'click'
     expect(addEventListener).to.be.a('function')
     addEventListener(event, callback)
@@ -35,7 +37,7 @@ describe('globalEvent module', () => {
   it('should removeEventListener be worked', () => {
     const {
       removeEventListener
-    } = globalEvent.default
+    } = globalEventModule
     const event = 'click'
     expect(removeEventListener).to.be.a('function')
     removeEventListener(event)

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3b36889c/html5/test/render/vue/modules/navigator.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/modules/navigator.js b/html5/test/render/vue/modules/navigator.js
index ce66a34..8197d9a 100644
--- a/html5/test/render/vue/modules/navigator.js
+++ b/html5/test/render/vue/modules/navigator.js
@@ -16,13 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import * as navigator from '../../../../render/vue/modules/navigator'
+import navigatorMod from '../../../../render/vue/modules/navigator'
 describe('navigator module', () => {
+  weex.install(navigatorMod)
+  const navigatorModule = weex.requireModule('navigator')
   const callback = sinon.spy()
   it('should push be worked', () => {
     const {
       push
-    } = navigator.default
+    } = navigatorModule
     const config = {
       url: '/'
     }
@@ -33,7 +35,7 @@ describe('navigator module', () => {
   it('should push be worked', () => {
     const {
       pop
-    } = navigator.default
+    } = navigatorModule
     const config = {
       url: '/'
     }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3b36889c/html5/test/render/vue/modules/webview.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/modules/webview.js b/html5/test/render/vue/modules/webview.js
index 15f39d5..4a77625 100644
--- a/html5/test/render/vue/modules/webview.js
+++ b/html5/test/render/vue/modules/webview.js
@@ -16,8 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import * as webview from '../../../../render/vue/modules/webview'
+import webview from '../../../../render/vue/modules/webview'
 describe('webview module', () => {
+  weex.install(webview)
+  const webviewModule = weex.requireModule('webview')
   const gobackSpy = sinon.spy()
   const reloadSpy = sinon.spy()
   const goforwardSpy = sinon.spy()
@@ -29,7 +31,7 @@ describe('webview module', () => {
   it('should goBack be worked', () => {
     const {
       goBack
-    } = webview.default
+    } = webviewModule
     expect(goBack).to.be.a('function')
     goBack([vnode])
     expect(gobackSpy.callCount).to.be.equal(1)
@@ -37,7 +39,7 @@ describe('webview module', () => {
   it('should reload be worked', () => {
     const {
       reload
-    } = webview.default
+    } = webviewModule
     expect(reload).to.be.a('function')
     reload([vnode])
     expect(reloadSpy.callCount).to.be.equal(1)
@@ -45,7 +47,7 @@ describe('webview module', () => {
   it('should goForward be worked', () => {
     const {
       goForward
-    } = webview.default
+    } = webviewModule
     expect(goForward).to.be.a('function')
     goForward([vnode])
     expect(goforwardSpy.callCount).to.be.equal(1)


[10/43] incubator-weex git commit: * [html5] fix loading & release v0.11.56

Posted by ta...@apache.org.
* [html5] fix loading & release v0.11.56


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

Branch: refs/heads/0.16-dev
Commit: 166513dca8deb32e9d6d948ad1577b20e70096d4
Parents: d6730ef
Author: MrRaindrop <te...@gmail.com>
Authored: Tue Jul 4 18:56:59 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Tue Jul 4 18:56:59 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/mixins/base.js       | 16 ++++++++--------
 html5/render/vue/mixins/scrollable.js | 18 +++++++++++-------
 package.json                          |  2 +-
 packages/weex-vue-render/package.json |  2 +-
 4 files changed, 21 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/166513dc/html5/render/vue/mixins/base.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/mixins/base.js b/html5/render/vue/mixins/base.js
index aa77d1f..ff31cd0 100644
--- a/html5/render/vue/mixins/base.js
+++ b/html5/render/vue/mixins/base.js
@@ -37,7 +37,7 @@ import {
 
 // import { extractComponentStyle } from '../core'
 
-import config from '../config'
+// import config from '../config'
 
 let lazyloadWatched = false
 function watchLazyload () {
@@ -139,13 +139,13 @@ export default {
       return arr
     },
 
-    _getParentScroller () {
-      let parent = this
-      while (parent && config.scrollableTypes.indexOf(parent.$options._componentTag) <= -1) {
-        parent = parent.$options.parent
-      }
-      return parent
-    },
+    // _getParentScroller () {
+    //   let parent = this
+    //   while (parent && config.scrollableTypes.indexOf(parent.$options._componentTag) <= -1) {
+    //     parent = parent.$options.parent
+    //   }
+    //   return parent
+    // },
 
     _fireLazyload (el) {
       if (process.env.NODE_ENV === 'development') {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/166513dc/html5/render/vue/mixins/scrollable.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/mixins/scrollable.js b/html5/render/vue/mixins/scrollable.js
index 4f7b03c..54c87dd 100644
--- a/html5/render/vue/mixins/scrollable.js
+++ b/html5/render/vue/mixins/scrollable.js
@@ -107,6 +107,14 @@ export default {
         this._innerWidth = rect.width
         this._innerHeight = rect.height
       }
+      const loadingEl = this._loading && this._loading.$el
+      const refreshEl = this._refresh && this._refresh.$el
+      if (loadingEl) {
+        this._innerHeight -= loadingEl.getBoundingClientRect().height
+      }
+      if (refreshEl) {
+        this._innerHeight -= refreshEl.getBoundingClientRect().height
+      }
       // inner width is always the viewport width somehow in horizontal
       // scoller, therefore the inner width should be reclaculated.
       if (this.scrollDirection === 'horizontal' && children) {
@@ -137,7 +145,7 @@ export default {
           this._innerLength = innerLength
           this._loadmoreReset = true
         }
-        if (this._loadmoreReset && this.reachBottom()) {
+        if (this._loadmoreReset && this.reachBottom(this.loadmoreoffset)) {
           this._loadmoreReset = false
           this.$emit('loadmore', event)
         }
@@ -149,19 +157,15 @@ export default {
       return (!!wrapper) && (wrapper.scrollTop <= 0)
     },
 
-    reachBottom () {
+    reachBottom (offset) {
       const wrapper = this.$refs.wrapper
       const inner = this.$refs.inner
-      const offset = parseInt(this.loadmoreoffset) * weex.config.env.scale
+      offset = parseInt(offset || 0) * weex.config.env.scale
 
       if (wrapper && inner) {
-        // const innerRect = inner.getBoundingClientRect()
-        // const wrapperRect = wrapper.getBoundingClientRect()
         const key = this.scrollDirection === 'horizontal'
           ? 'width'
           : 'height'
-        // const innerLength = innerRect[key]
-        // const wrapperLength = wrapperRect[key]
         const innerLength = this[`_inner${key[0].toUpperCase()}${key.substr(1)}`]
         const wrapperLength = this[`_wrapper${key[0].toUpperCase()}${key.substr(1)}`]
         const scrollOffset = this.scrollDirection === 'horizontal'

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/166513dc/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 1c9aa54..f99aec9 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "subversion": {
     "browser": "0.5.0",
     "framework": "0.20.6",
-    "vue-render": "0.11.55",
+    "vue-render": "0.11.56",
     "transformer": ">=0.1.5 <0.5"
   },
   "description": "A framework for building Mobile cross-platform UI",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/166513dc/packages/weex-vue-render/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/package.json b/packages/weex-vue-render/package.json
index 19b31c3..6356cca 100644
--- a/packages/weex-vue-render/package.json
+++ b/packages/weex-vue-render/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-render",
-  "version": "0.11.55",
+  "version": "0.11.56",
   "description": "Weex built-in components for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",


[16/43] incubator-weex git commit: * [html5] treat components and modules as plugins and bundle the codes into npm packages

Posted by ta...@apache.org.
* [html5] treat components and modules as plugins and bundle the codes into npm packages


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

Branch: refs/heads/0.16-dev
Commit: 5298c11df44965c8d8d12baeec190cf45ffc1e76
Parents: b1a7c02
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 11:16:39 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 11:16:39 2017 +0800

----------------------------------------------------------------------
 build/build.js                                  |  48 ++++++++++++++++++-
 build/config.js                                 |  35 +++++++++++++-
 html5/render/vue/components/index.js            |   3 +-
 html5/render/vue/env/index.js                   |   5 --
 html5/render/vue/index.js                       |   6 ---
 html5/render/vue/mixins/base.js                 |  20 --------
 html5/render/vue/modules/animation.js           |  36 ++++++++++----
 html5/render/vue/modules/dom.js                 |  21 +++++++-
 html5/render/vue/modules/globalEvent.js         |   8 +++-
 html5/render/vue/modules/index.js               |  36 ++++----------
 html5/render/vue/modules/navigator.js           |  10 ++--
 html5/render/vue/modules/webview.js             |  18 +++++--
 package.json                                    |  10 ++--
 packages/weex-vue-plugins/weex-vue-a/README.md  |   3 ++
 .../weex-vue-plugins/weex-vue-a/package.json    |  26 ++++++++++
 .../weex-vue-plugins/weex-vue-a/src/index.js    |   2 +
 .../weex-vue-animation/README.md                |   3 ++
 .../weex-vue-animation/package.json             |  27 +++++++++++
 .../weex-vue-animation/src/index.js             |   2 +
 .../weex-vue-clipboard/README.md                |   3 ++
 .../weex-vue-clipboard/package.json             |  27 +++++++++++
 .../weex-vue-clipboard/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-dom/README.md     |   3 ++
 .../weex-vue-plugins/weex-vue-dom/package.json  |  27 +++++++++++
 .../weex-vue-plugins/weex-vue-dom/src/index.js  |   2 +
 .../weex-vue-plugins/weex-vue-event/README.md   |   3 ++
 .../weex-vue-event/package.json                 |  27 +++++++++++
 .../weex-vue-event/src/index.js                 |   2 +
 .../weex-vue-geolocation/README.md              |   3 ++
 .../weex-vue-geolocation/package.json           |  27 +++++++++++
 .../weex-vue-geolocation/src/index.js           |   2 +
 .../weex-vue-global-event/README.md             |   3 ++
 .../weex-vue-global-event/package.json          |  27 +++++++++++
 .../weex-vue-global-event/src/index.js          |   2 +
 .../weex-vue-plugins/weex-vue-input/README.md   |   3 ++
 .../weex-vue-input/package.json                 |  26 ++++++++++
 .../weex-vue-input/src/index.js                 |   2 +
 .../weex-vue-plugins/weex-vue-modal/README.md   |   3 ++
 .../weex-vue-modal/package.json                 |  27 +++++++++++
 .../weex-vue-modal/src/index.js                 |   2 +
 .../weex-vue-navigator/README.md                |   3 ++
 .../weex-vue-navigator/package.json             |  27 +++++++++++
 .../weex-vue-navigator/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-slider/README.md  |   3 ++
 .../weex-vue-slider/package.json                |  27 +++++++++++
 .../weex-vue-slider/src/index.js                |   2 +
 .../weex-vue-plugins/weex-vue-storage/README.md |   3 ++
 .../weex-vue-storage/package.json               |  27 +++++++++++
 .../weex-vue-storage/src/index.js               |   2 +
 .../weex-vue-plugins/weex-vue-stream/README.md  |   3 ++
 .../weex-vue-stream/package.json                |  27 +++++++++++
 .../weex-vue-stream/src/index.js                |   2 +
 .../weex-vue-plugins/weex-vue-switch/README.md  |   3 ++
 .../weex-vue-switch/package.json                |  26 ++++++++++
 .../weex-vue-switch/src/index.js                |   2 +
 .../weex-vue-textarea/.DS_Store                 | Bin 0 -> 6148 bytes
 .../weex-vue-textarea/README.md                 |   3 ++
 .../weex-vue-textarea/package.json              |  26 ++++++++++
 .../weex-vue-textarea/src/index.js              |   2 +
 .../weex-vue-plugins/weex-vue-video/README.md   |   3 ++
 .../weex-vue-video/package.json                 |  26 ++++++++++
 .../weex-vue-video/src/index.js                 |   2 +
 .../weex-vue-plugins/weex-vue-web/README.md     |   3 ++
 .../weex-vue-plugins/weex-vue-web/package.json  |  26 ++++++++++
 .../weex-vue-plugins/weex-vue-web/src/index.js  |   2 +
 .../weex-vue-websocket/README.md                |   3 ++
 .../weex-vue-websocket/package.json             |  27 +++++++++++
 .../weex-vue-websocket/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-webview/README.md |   3 ++
 .../weex-vue-webview/package.json               |  27 +++++++++++
 .../weex-vue-webview/src/index.js               |   2 +
 packages/weex-vue-render/package.json           |   7 ++-
 72 files changed, 777 insertions(+), 88 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/build/build.js
----------------------------------------------------------------------
diff --git a/build/build.js b/build/build.js
index b74f102..c96fe66 100644
--- a/build/build.js
+++ b/build/build.js
@@ -45,6 +45,17 @@ else {
   console.log('\nPlease specify the package you want to build. [native, runtime, browser, vue]')
 }
 
+function extend(to, ...froms) {
+  froms.forEach(function (from) {
+    for (const key in from) {
+      if (from.hasOwnProperty(key)) {
+        to[key] = from[key]
+      }
+    }
+  })
+  return to
+}
+
 function runRollupOnWatch(config) {
   const watcher = watch(rollup, config)
   watcher.on('event', event => {
@@ -84,6 +95,22 @@ function runRollup (config) {
   })
 }
 
+function getAllEntries (rootDir) {
+  return fs.readdirSync(rootDir)
+    .filter(function (file) {
+      return fs.statSync(path.join(rootDir, file)).isDirectory()
+    })
+    .map(function (file) {
+      var fullpath = path.join(rootDir, file)
+      var entry = path.join(fullpath, 'src/index.js')
+      var dest = path.join(fullpath, 'dist/index.js')
+      var name = file.replace(/-(\w)/g, function ($0, $1) {
+        return $1.toUpperCase()
+      })
+      return { entry, dest, name }
+    })
+}
+
 function build (name) {
   let pkgName = 'weex-js-framework'
   switch (name) {
@@ -91,12 +118,31 @@ function build (name) {
     case 'runtime': pkgName = 'weex-js-runtime'; break;
     case 'browser': pkgName = 'weex-web-render'; break;
     case 'vue': pkgName = 'weex-vue-render'; break;
+    case 'vue-plugins': pkgName = 'weex-vue-render-plugins'; break;
+    case 'vue-core': pkgName = 'weex-vue-render-core'; break;
   }
 
   const config = getConfig(pkgName)
   const minifyConfig = getConfig(pkgName, true)
 
-  if (isWatch) {
+  if (pkgName === 'weex-vue-render-plugins') {
+    // build multiple packages in a loop.
+    console.log(`\n => start to build ${name} (${pkgName})\n`)
+    const entries = getAllEntries(path.join(__dirname, '../packages/weex-vue-plugins'))
+    entries.forEach(function (item) {
+      const info = {
+        moduleName: item.name,
+        entry: item.entry
+      }
+      const itemConfig = extend({}, config, info, { dest: item.dest })
+      const itemMinConfig = extend({}, minifyConfig, info, { dest: item.dest.replace(/\.js$/, '.min.js') })
+      runRollup(itemConfig)
+        .then(() => {
+          return runRollup(itemMinConfig)
+        })
+    })
+  }
+  else if (isWatch) {
     return runRollupOnWatch(config)
   }
   else {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/build/config.js
----------------------------------------------------------------------
diff --git a/build/config.js b/build/config.js
index ad178cd..c5d4410 100644
--- a/build/config.js
+++ b/build/config.js
@@ -81,7 +81,7 @@ const configs = {
   },
   'weex-vue-render': {
     moduleName: 'WeexVueRender',
-    entry: absolute('html5/render/vue/index.js'),
+    entry: absolute('packages/weex-vue-render/src/index.js'),
     dest: absolute('packages/weex-vue-render/dist/index.js'),
     banner:`
 console.log('START WEEX VUE RENDER: ${subversion['vue-render']}, Build ${now()}.');
@@ -98,6 +98,37 @@ window._jslib_init_start = window.performance && window.performance.now && windo
         'process.env.WEEX_VERSION': subversion['vue-render']
       })
     ]
+  },
+  'weex-vue-render-core': {
+    moduleName: 'WeexVueRenderCore',
+    entry: absolute('packages/weex-vue-render/src/index.core.js'),
+    dest: absolute('packages/weex-vue-render/dist/index.core.js'),
+    banner:`
+console.log('START WEEX VUE RENDER CORE: ${subversion['vue-render']}, Build ${now()}.');
+window._jslib_init_start = window.performance && window.performance.now && window.performance.now() || +new Date();\n\n`,
+    format: 'umd',
+    plugins: [
+      postcss(),
+      nodeResolve({
+        jsnext: true,
+        main: true,
+        browser: true
+      }),
+      replace({
+        'process.env.WEEX_VERSION': subversion['vue-render']
+      })
+    ]
+  },
+  'weex-vue-render-plugins': {
+    format: 'umd',
+    plugins: [
+      postcss(),
+      nodeResolve({
+        jsnext: true,
+        main: true,
+        browser: true
+      })
+    ]
   }
 }
 
@@ -106,7 +137,7 @@ function getConfig (name, minify) {
   const config = {
     moduleName: opt.moduleName,
     entry: opt.entry,
-    dest: minify ? opt.dest.replace(/\.js$/, '.min.js') : opt.dest,
+    dest: minify ? opt.dest && opt.dest.replace(/\.js$/, '.min.js') : opt.dest,
     format: opt.format,
     banner: opt.banner,
     plugins: opt.plugins.concat([

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/html5/render/vue/components/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/index.js b/html5/render/vue/components/index.js
index 5fdbc39..40219b8 100644
--- a/html5/render/vue/components/index.js
+++ b/html5/render/vue/components/index.js
@@ -16,12 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import _switch from './switch'
-
 import a from './a'
 import div from './div'
 import image from './image'
 import input from './input'
+import _switch from './switch'
 import scrollable from './scrollable'
 import slider from './slider'
 import text from './text'

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/html5/render/vue/env/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/env/index.js b/html5/render/vue/env/index.js
index bc2836a..6d287fd 100644
--- a/html5/render/vue/env/index.js
+++ b/html5/render/vue/env/index.js
@@ -19,7 +19,6 @@
 import '../styles/reset.css'
 import '../styles/base.css'
 
-// import '../../browser/render/gesture'
 import '../lib/gesture'
 
 import '../../../shared/arrayFrom'
@@ -31,12 +30,8 @@ import 'core-js/modules/es6.string.iterator'
 import 'core-js/modules/web.dom.iterable'
 import 'core-js/modules/es6.promise'
 
-import modules from '../modules'
 import './global'
 
-// register built-in modules.
-global.weex.install(modules)
-
 export function setVue (vue) {
   if (!vue) {
     throw new Error('[Vue Render] Vue not found. Please make sure vue 2.x runtime is imported.')

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/html5/render/vue/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/index.js b/html5/render/vue/index.js
index 8617f2f..a307e80 100644
--- a/html5/render/vue/index.js
+++ b/html5/render/vue/index.js
@@ -18,7 +18,6 @@
  */
 import weex from './env'
 import { setVue } from './env'
-import components from './components'
 import { base, style, sticky } from './mixins'
 // import styleMixin from './mixins/style'
 
@@ -45,11 +44,6 @@ function init (Vue/*, options = {}*/) {
   Vue.config.isReservedTag = tag => htmlRegex.test(tag)
   Vue.config.parsePlatformTagName = tag => tag.replace(htmlRegex, '')
 
-  // register sdk components.
-  components.forEach(function (comp) {
-    weex.install(comp)
-  })
-
   /* istanbul ignore next */
   // if (process.env.NODE_ENV === 'development') {
   //   if (semver.lt(Vue.version, '2.1.5')) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/html5/render/vue/mixins/base.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/mixins/base.js b/html5/render/vue/mixins/base.js
index 8fec215..3ecc1c8 100644
--- a/html5/render/vue/mixins/base.js
+++ b/html5/render/vue/mixins/base.js
@@ -121,26 +121,6 @@ export default {
   },
 
   methods: {
-    _getScopeIds () {
-      const arr = []
-      let ctx = this
-      let scopeId
-      while (ctx) {
-        scopeId = ctx.$options._scopeId
-        scopeId && arr.push(scopeId)
-        ctx = ctx.$options.parent
-      }
-      return arr
-    },
-
-    // _getParentScroller () {
-    //   let parent = this
-    //   while (parent && config.scrollableTypes.indexOf(parent.$options._componentTag) <= -1) {
-    //     parent = parent.$options.parent
-    //   }
-    //   return parent
-    // },
-
     _fireLazyload (el) {
       if (process.env.NODE_ENV === 'development') {
         tagBegin('base._fireLazyload')

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/html5/render/vue/modules/animation.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/modules/animation.js b/html5/render/vue/modules/animation.js
index d7e0b32..bf94447 100644
--- a/html5/render/vue/modules/animation.js
+++ b/html5/render/vue/modules/animation.js
@@ -16,16 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import {
-  nextFrame,
-  toCSSText,
-  autoPrefix,
-  camelizeKeys,
-  normalizeStyle,
-  isArray
-} from '../utils'
+const utils = {}
 
 function transitionOnce (vnode, config, callback) {
+  const {
+    nextFrame,
+    toCSSText,
+    autoPrefix,
+    camelizeKeys,
+    normalizeStyle,
+    isArray
+  } = utils
+
   if (isArray(vnode)) {
     if (process.env.NODE_ENV === 'development') {
       console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
@@ -64,7 +66,7 @@ function transitionOnce (vnode, config, callback) {
   })
 }
 
-export default {
+const animation = {
   /**
    * transition
    * @param  {String} vnode
@@ -78,3 +80,19 @@ export default {
     })
   }
 }
+
+export default {
+  init (weex) {
+    const extendKeys = weex.utils.extendKeys
+    extendKeys(utils, weex.utils, [
+      'nextFrame',
+      'toCSSText',
+      'autoPrefix',
+      'camelizeKeys',
+      'normalizeStyle',
+      'isArray'
+    ])
+
+    weex.registerModule('animation', animation)
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/html5/render/vue/modules/dom.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/modules/dom.js b/html5/render/vue/modules/dom.js
index c9241a7..92d65d9 100644
--- a/html5/render/vue/modules/dom.js
+++ b/html5/render/vue/modules/dom.js
@@ -16,9 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { camelToKebab, appendCss, isArray } from '../utils'
 import config from '../config'
 
+const utils = {}
+
 function getParentScroller (vnode) {
   if (!vnode) return null
   const vm = vnode.$el
@@ -86,7 +87,7 @@ function ease (k) {
   return 0.5 * (1 - Math.cos(Math.PI * k))
 }
 
-export default {
+const dom = {
   /**
    * scrollToElement
    * @param  {Vnode | VComponent} vnode
@@ -94,6 +95,7 @@ export default {
    *   ps: scroll-to has 'ease' and 'duration'(ms) as options.
    */
   scrollToElement: function (vnode, options) {
+    const { isArray } = utils
     if (isArray(vnode)) {
       if (process.env.NODE_ENV === 'development') {
         console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
@@ -165,6 +167,7 @@ export default {
    * @param {Function} callback
    */
   getComponentRect: function (vnode, callback) {
+    const { isArray } = utils
     if (isArray(vnode)) {
       if (process.env.NODE_ENV === 'development') {
         console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
@@ -215,6 +218,7 @@ export default {
    * @param {object} styles rules
    */
   addRule: function (key, styles) {
+    const { camelToKebab, appendCss } = utils
     key = camelToKebab(key)
     let stylesText = ''
     for (const k in styles) {
@@ -226,3 +230,16 @@ export default {
     appendCss(styleText, 'dom-added-rules')
   }
 }
+
+export default {
+  init (weex) {
+    const extendKeys = weex.utils.extendKeys
+    extendKeys(utils, weex.utils, [
+      'camelToKebab',
+      'appendCss',
+      'isArray'
+    ])
+
+    weex.registerModule('dom', dom)
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/html5/render/vue/modules/globalEvent.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/modules/globalEvent.js b/html5/render/vue/modules/globalEvent.js
index 638f244..9f57879 100644
--- a/html5/render/vue/modules/globalEvent.js
+++ b/html5/render/vue/modules/globalEvent.js
@@ -23,7 +23,7 @@
 // track varies kinds of events and listeners.
 const handlerTraker = {}
 
-export default {
+const globalEvent = {
   /**
    * addEventListener
    * NOTE: one callback can only be bound to the same event once. Bind a callback twice doesn't
@@ -67,3 +67,9 @@ export default {
     delete handlerTraker[evt]
   }
 }
+
+export default {
+  init (weex) {
+    weex.registerModule('globalEvent', globalEvent)
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/html5/render/vue/modules/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/modules/index.js b/html5/render/vue/modules/index.js
index 27f0592..c0e2fc1 100644
--- a/html5/render/vue/modules/index.js
+++ b/html5/render/vue/modules/index.js
@@ -17,50 +17,34 @@
  * under the License.
  */
 
-// modules from render/browesr
+// modules from render/browesr (legacy modules)
 
-import event from '../../browser/extend/api/event'
 import geolocation from '../../browser/extend/api/geolocation'
-import pageInfo from '../../browser/extend/api/pageInfo'
 import storage from '../../browser/extend/api/storage'
 import stream from '../../browser/extend/api/stream'
 import clipboard from '../../browser/extend/api/clipboard'
+import eventModule from '../../browser/extend/api/event'
 
 // custom modules
 import animation from './animation'
 import dom from './dom'
 import globalEvent from './globalEvent'
 import modal from './modal'
-import navigator from './navigator'
+import navigatorModule from './navigator'
 import webview from './webview'
 import websocket from './websocket'
 
-const legacyModules = {
-  event,
+export default [
   geolocation,
-  pageInfo,
   storage,
   stream,
-  clipboard
-}
-
-const modules = {
+  clipboard,
+  eventModule,
+  modal,
+  websocket,
   animation,
   dom,
   globalEvent,
-  navigator,
+  navigatorModule,
   webview
-}
-
-export default {
-  init (weex) {
-    for (const k in legacyModules) {
-      weex.install(legacyModules[k])
-    }
-    weex.install(modal)
-    weex.install(websocket)
-    for (const k in modules) {
-      weex.registerModule(k, modules[k])
-    }
-  }
-}
+]

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/html5/render/vue/modules/navigator.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/modules/navigator.js b/html5/render/vue/modules/navigator.js
index 2b1fd5b..54c3b4c 100644
--- a/html5/render/vue/modules/navigator.js
+++ b/html5/render/vue/modules/navigator.js
@@ -20,9 +20,7 @@
 /**
  * Navigator module
  */
-
-// TODO: config.animated
-export default {
+const navigatorModule = {
   push: function (config, callback) {
     window.location.href = config.url
     callback && callback()
@@ -33,3 +31,9 @@ export default {
     callback && callback()
   }
 }
+
+export default {
+  init (weex) {
+    weex.registerModule('navigator', navigatorModule)
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/html5/render/vue/modules/webview.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/modules/webview.js b/html5/render/vue/modules/webview.js
index f4aec49..3b12939 100644
--- a/html5/render/vue/modules/webview.js
+++ b/html5/render/vue/modules/webview.js
@@ -20,12 +20,13 @@
 /**
  * Webview module
  */
-import { isArray } from '../utils'
-export default {
+let isArray
+
+const webview = {
   goBack (vnode) {
     if (isArray(vnode)) {
       if (process.env.NODE_ENV === 'development') {
-        console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
+        console.warn('[vue-render] the ref passed to webview.goBack is a array.')
       }
       vnode = vnode[0]
     }
@@ -36,7 +37,7 @@ export default {
   goForward (vnode) {
     if (isArray(vnode)) {
       if (process.env.NODE_ENV === 'development') {
-        console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
+        console.warn('[vue-render] the ref passed to webview.goForward is a array.')
       }
       vnode = vnode[0]
     }
@@ -47,7 +48,7 @@ export default {
   reload (vnode) {
     if (isArray(vnode)) {
       if (process.env.NODE_ENV === 'development') {
-        console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
+        console.warn('[vue-render] the ref passed to webview.reload is a array.')
       }
       vnode = vnode[0]
     }
@@ -56,3 +57,10 @@ export default {
     }
   }
 }
+
+export default {
+  init (weex) {
+    isArray = weex.utils.isArray
+    weex.registerModule('webview', webview)
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 8aa7b32..133be70 100644
--- a/package.json
+++ b/package.json
@@ -44,7 +44,9 @@
     "build:source": "npm run build:native && npm run build:browser && node build/build.js vue",
     "build:browser": "wwp && node build/build.js browser",
     "build:browser:common": "rollup -c build/rollup.browser.common.config.js",
-    "build:vue": "flow check && node build/build.js vue",
+    "build:vue": "flow check && node build/build.js vue && npm run build:vue:core && npm run build:vue:plugins",
+    "build:vue:core": "node build/build.js vue-core",
+    "build:vue:plugins": "node build/build.js vue-plugins",
     "build:examples": "npm run build:examples:native && npm run build:examples:web",
     "build:examples:native": "webpack --config build/webpack.examples.config.js",
     "build:examples:web": "webpack --config build/webpack.examples.web.config.js",
@@ -147,13 +149,13 @@
     "rollup-plugin-node-resolve": "^2.0.0",
     "rollup-plugin-postcss": "^0.2.0",
     "rollup-plugin-replace": "^1.1.1",
-    "rollup-plugin-uglify": "^1.0.1",
+    "rollup-plugin-uglify": "^2.0.1",
     "rollup-watch": "^2.5.0",
     "selenium-server": "2.53.1",
     "serve": "^1.4.0",
     "sinon": "^2.1.0",
     "sinon-chai": "^2.8.0",
-    "uglify-js": "^2.6.4",
+    "uglify-js": "^2.8.29",
     "vue": "^2.2.6",
     "vue-loader": "^12.2.1",
     "vue-template-compiler": "^2.2.6",
@@ -166,4 +168,4 @@
     "wwp": "^0.3.5",
     "xmldom": "^0.1.27"
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-a/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-a/README.md b/packages/weex-vue-plugins/weex-vue-a/README.md
new file mode 100644
index 0000000..daf0942
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-a/README.md
@@ -0,0 +1,3 @@
+# weex-vue-a
+
+Weex built-in '<a>' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-a/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-a/package.json b/packages/weex-vue-plugins/weex-vue-a/package.json
new file mode 100644
index 0000000..55dcb1f
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-a/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "weex-vue-a",
+  "version": "0.1.0",
+  "description": "Weex built-in '<a>' component for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "component",
+    "a"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-a/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-a/src/index.js b/packages/weex-vue-plugins/weex-vue-a/src/index.js
new file mode 100644
index 0000000..7b08c91
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-a/src/index.js
@@ -0,0 +1,2 @@
+import a from '../../../../html5/render/vue/components/a'
+export default a

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-animation/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-animation/README.md b/packages/weex-vue-plugins/weex-vue-animation/README.md
new file mode 100644
index 0000000..9220162
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-animation/README.md
@@ -0,0 +1,3 @@
+# weex-vue-animation
+
+Weex built-in API module 'animation' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-animation/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-animation/package.json b/packages/weex-vue-plugins/weex-vue-animation/package.json
new file mode 100644
index 0000000..56f0e80
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-animation/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-animation",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'animation' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "animation"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-animation/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-animation/src/index.js b/packages/weex-vue-plugins/weex-vue-animation/src/index.js
new file mode 100644
index 0000000..334d13e
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-animation/src/index.js
@@ -0,0 +1,2 @@
+import animation from '../../../../html5/render/vue/modules/animation'
+export default animation

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-clipboard/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-clipboard/README.md b/packages/weex-vue-plugins/weex-vue-clipboard/README.md
new file mode 100644
index 0000000..7906105
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-clipboard/README.md
@@ -0,0 +1,3 @@
+# weex-vue-clipboard
+
+Weex built-in API module 'clipboard' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-clipboard/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-clipboard/package.json b/packages/weex-vue-plugins/weex-vue-clipboard/package.json
new file mode 100644
index 0000000..a4b07d1
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-clipboard/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-clipboard",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'clipboard' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "clipboard"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-clipboard/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-clipboard/src/index.js b/packages/weex-vue-plugins/weex-vue-clipboard/src/index.js
new file mode 100644
index 0000000..0511f78
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-clipboard/src/index.js
@@ -0,0 +1,2 @@
+import clipboard from '../../../../html5/render/browser/extend/api/clipboard'
+export default clipboard

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-dom/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-dom/README.md b/packages/weex-vue-plugins/weex-vue-dom/README.md
new file mode 100644
index 0000000..df7bd55
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-dom/README.md
@@ -0,0 +1,3 @@
+# weex-vue-dom
+
+Weex built-in API module 'dom' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-dom/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-dom/package.json b/packages/weex-vue-plugins/weex-vue-dom/package.json
new file mode 100644
index 0000000..67e23dc
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-dom/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-dom",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'dom' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "dom"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-dom/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-dom/src/index.js b/packages/weex-vue-plugins/weex-vue-dom/src/index.js
new file mode 100644
index 0000000..09374ca
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-dom/src/index.js
@@ -0,0 +1,2 @@
+import dom from '../../../../html5/render/vue/modules/dom'
+export default dom

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-event/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-event/README.md b/packages/weex-vue-plugins/weex-vue-event/README.md
new file mode 100644
index 0000000..4055115
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-event/README.md
@@ -0,0 +1,3 @@
+# weex-vue-event
+
+Weex built-in API module 'event' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-event/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-event/package.json b/packages/weex-vue-plugins/weex-vue-event/package.json
new file mode 100644
index 0000000..e5d63c9
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-event/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-event",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'event' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "event"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-event/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-event/src/index.js b/packages/weex-vue-plugins/weex-vue-event/src/index.js
new file mode 100644
index 0000000..9e89a1d
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-event/src/index.js
@@ -0,0 +1,2 @@
+import eventModule from '../../../../html5/render/browser/extend/api/event'
+export default eventModule

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-geolocation/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-geolocation/README.md b/packages/weex-vue-plugins/weex-vue-geolocation/README.md
new file mode 100644
index 0000000..057ba10
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-geolocation/README.md
@@ -0,0 +1,3 @@
+# weex-vue-geolocation
+
+Weex built-in API module 'geolocation' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-geolocation/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-geolocation/package.json b/packages/weex-vue-plugins/weex-vue-geolocation/package.json
new file mode 100644
index 0000000..7f9f8af
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-geolocation/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-geolocation",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'geolocation' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "geolocation"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-geolocation/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-geolocation/src/index.js b/packages/weex-vue-plugins/weex-vue-geolocation/src/index.js
new file mode 100644
index 0000000..f7846d8
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-geolocation/src/index.js
@@ -0,0 +1,2 @@
+import geolocation from '../../../../html5/render/browser/extend/api/geolocation'
+export default geolocation

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-global-event/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-global-event/README.md b/packages/weex-vue-plugins/weex-vue-global-event/README.md
new file mode 100644
index 0000000..5d0f287
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-global-event/README.md
@@ -0,0 +1,3 @@
+# weex-vue-global-event
+
+Weex built-in API module 'globalEvent' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-global-event/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-global-event/package.json b/packages/weex-vue-plugins/weex-vue-global-event/package.json
new file mode 100644
index 0000000..8019839
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-global-event/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-global-event",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'globalEvent' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "globalEvent"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-global-event/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-global-event/src/index.js b/packages/weex-vue-plugins/weex-vue-global-event/src/index.js
new file mode 100644
index 0000000..16442c3
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-global-event/src/index.js
@@ -0,0 +1,2 @@
+import globalEvent from '../../../../html5/render/vue/modules/globalEvent'
+export default globalEvent

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-input/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-input/README.md b/packages/weex-vue-plugins/weex-vue-input/README.md
new file mode 100644
index 0000000..5491fde
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-input/README.md
@@ -0,0 +1,3 @@
+# weex-vue-input
+
+Weex built-in '<input>' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-input/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-input/package.json b/packages/weex-vue-plugins/weex-vue-input/package.json
new file mode 100644
index 0000000..5839cc0
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-input/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "weex-vue-input",
+  "version": "0.1.0",
+  "description": "Weex built-in '<input>' component for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "component",
+    "input"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-input/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-input/src/index.js b/packages/weex-vue-plugins/weex-vue-input/src/index.js
new file mode 100644
index 0000000..eb1ac26
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-input/src/index.js
@@ -0,0 +1,2 @@
+import input from '../../../../html5/render/vue/components/input'
+export default input

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-modal/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-modal/README.md b/packages/weex-vue-plugins/weex-vue-modal/README.md
new file mode 100644
index 0000000..db84321
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-modal/README.md
@@ -0,0 +1,3 @@
+# weex-vue-modal
+
+Weex built-in API module 'modal' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-modal/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-modal/package.json b/packages/weex-vue-plugins/weex-vue-modal/package.json
new file mode 100644
index 0000000..bafe1a6
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-modal/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-modal",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'modal' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "modal"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-modal/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-modal/src/index.js b/packages/weex-vue-plugins/weex-vue-modal/src/index.js
new file mode 100644
index 0000000..300eee5
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-modal/src/index.js
@@ -0,0 +1,2 @@
+import modal from '../../../../html5/render/vue/modules/modal'
+export default modal

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-navigator/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-navigator/README.md b/packages/weex-vue-plugins/weex-vue-navigator/README.md
new file mode 100644
index 0000000..a941f77
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-navigator/README.md
@@ -0,0 +1,3 @@
+# weex-vue-navigator
+
+Weex built-in API module 'navigator' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-navigator/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-navigator/package.json b/packages/weex-vue-plugins/weex-vue-navigator/package.json
new file mode 100644
index 0000000..706d0bc
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-navigator/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-navigator",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'navigator' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "navigator"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-navigator/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-navigator/src/index.js b/packages/weex-vue-plugins/weex-vue-navigator/src/index.js
new file mode 100644
index 0000000..5cab68a
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-navigator/src/index.js
@@ -0,0 +1,2 @@
+import navigatorModule from '../../../../html5/render/vue/modules/navigator'
+export default navigatorModule

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-slider/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-slider/README.md b/packages/weex-vue-plugins/weex-vue-slider/README.md
new file mode 100644
index 0000000..fd9cd50
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-slider/README.md
@@ -0,0 +1,3 @@
+# weex-vue-slider
+
+Weex built-in '<slider>' and '<slider-neighbor>' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-slider/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-slider/package.json b/packages/weex-vue-plugins/weex-vue-slider/package.json
new file mode 100644
index 0000000..7d7f36d
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-slider/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-slider",
+  "version": "0.1.0",
+  "description": "Weex built-in '<slider>' and '<slider-neighbor>' component for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "component",
+    "slider",
+    "slider-neighbor"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-slider/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-slider/src/index.js b/packages/weex-vue-plugins/weex-vue-slider/src/index.js
new file mode 100644
index 0000000..e081335
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-slider/src/index.js
@@ -0,0 +1,2 @@
+import slider from '../../../../html5/render/vue/components/slider'
+export default slider

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-storage/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-storage/README.md b/packages/weex-vue-plugins/weex-vue-storage/README.md
new file mode 100644
index 0000000..360f85e
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-storage/README.md
@@ -0,0 +1,3 @@
+# weex-vue-storage
+
+Weex built-in API module 'storage' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-storage/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-storage/package.json b/packages/weex-vue-plugins/weex-vue-storage/package.json
new file mode 100644
index 0000000..cd2ada4
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-storage/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-storage",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'storage' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "storage"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-storage/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-storage/src/index.js b/packages/weex-vue-plugins/weex-vue-storage/src/index.js
new file mode 100644
index 0000000..1e03be4
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-storage/src/index.js
@@ -0,0 +1,2 @@
+import storage from '../../../../html5/render/browser/extend/api/storage'
+export default storage

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-stream/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-stream/README.md b/packages/weex-vue-plugins/weex-vue-stream/README.md
new file mode 100644
index 0000000..b9e08b3
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-stream/README.md
@@ -0,0 +1,3 @@
+# weex-vue-stream
+
+Weex built-in API module 'stream' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-stream/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-stream/package.json b/packages/weex-vue-plugins/weex-vue-stream/package.json
new file mode 100644
index 0000000..ddd6fe9
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-stream/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-stream",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'stream' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "stream"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-stream/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-stream/src/index.js b/packages/weex-vue-plugins/weex-vue-stream/src/index.js
new file mode 100644
index 0000000..1f4fa51
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-stream/src/index.js
@@ -0,0 +1,2 @@
+import stream from '../../../../html5/render/browser/extend/api/stream'
+export default stream

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-switch/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-switch/README.md b/packages/weex-vue-plugins/weex-vue-switch/README.md
new file mode 100644
index 0000000..5bce1af
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-switch/README.md
@@ -0,0 +1,3 @@
+# weex-vue-switch
+
+Weex built-in '<switch>' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-switch/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-switch/package.json b/packages/weex-vue-plugins/weex-vue-switch/package.json
new file mode 100644
index 0000000..1a996c3
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-switch/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "weex-vue-switch",
+  "version": "0.1.0",
+  "description": "Weex built-in '<switch>' component for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "component",
+    "switch"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-switch/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-switch/src/index.js b/packages/weex-vue-plugins/weex-vue-switch/src/index.js
new file mode 100644
index 0000000..0b4a262
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-switch/src/index.js
@@ -0,0 +1,2 @@
+import _switch from '../../../../html5/render/vue/components/switch'
+export default _switch

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-textarea/.DS_Store
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-textarea/.DS_Store b/packages/weex-vue-plugins/weex-vue-textarea/.DS_Store
new file mode 100644
index 0000000..c88a062
Binary files /dev/null and b/packages/weex-vue-plugins/weex-vue-textarea/.DS_Store differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-textarea/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-textarea/README.md b/packages/weex-vue-plugins/weex-vue-textarea/README.md
new file mode 100644
index 0000000..709d3ae
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-textarea/README.md
@@ -0,0 +1,3 @@
+# weex-vue-textarea
+
+Weex built-in '<textarea>' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-textarea/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-textarea/package.json b/packages/weex-vue-plugins/weex-vue-textarea/package.json
new file mode 100644
index 0000000..696f863
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-textarea/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "weex-vue-textarea",
+  "version": "0.1.0",
+  "description": "Weex built-in '<textarea>' component for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "component",
+    "textarea"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-textarea/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-textarea/src/index.js b/packages/weex-vue-plugins/weex-vue-textarea/src/index.js
new file mode 100644
index 0000000..eff9d80
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-textarea/src/index.js
@@ -0,0 +1,2 @@
+import textarea from '../../../../html5/render/vue/components/textarea'
+export default textarea

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-video/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-video/README.md b/packages/weex-vue-plugins/weex-vue-video/README.md
new file mode 100644
index 0000000..fd98fa6
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-video/README.md
@@ -0,0 +1,3 @@
+# weex-vue-video
+
+Weex built-in '<video>' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-video/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-video/package.json b/packages/weex-vue-plugins/weex-vue-video/package.json
new file mode 100644
index 0000000..13c6a5f
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-video/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "weex-vue-video",
+  "version": "0.1.0",
+  "description": "Weex built-in '<video>' component for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "component",
+    "video"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-video/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-video/src/index.js b/packages/weex-vue-plugins/weex-vue-video/src/index.js
new file mode 100644
index 0000000..30eab90
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-video/src/index.js
@@ -0,0 +1,2 @@
+import video from '../../../../html5/render/vue/components/video'
+export default video

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-web/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-web/README.md b/packages/weex-vue-plugins/weex-vue-web/README.md
new file mode 100644
index 0000000..0825c4c
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-web/README.md
@@ -0,0 +1,3 @@
+# weex-vue-web
+
+Weex built-in '<web>' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-web/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-web/package.json b/packages/weex-vue-plugins/weex-vue-web/package.json
new file mode 100644
index 0000000..51b1401
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-web/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "weex-vue-web",
+  "version": "0.1.0",
+  "description": "Weex built-in '<web>' component for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "component",
+    "web"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-web/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-web/src/index.js b/packages/weex-vue-plugins/weex-vue-web/src/index.js
new file mode 100644
index 0000000..e80e14c
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-web/src/index.js
@@ -0,0 +1,2 @@
+import web from '../../../../html5/render/vue/components/web'
+export default web

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-websocket/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-websocket/README.md b/packages/weex-vue-plugins/weex-vue-websocket/README.md
new file mode 100644
index 0000000..db3ca34
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-websocket/README.md
@@ -0,0 +1,3 @@
+# weex-vue-websocket
+
+Weex built-in API module 'websocket' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-websocket/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-websocket/package.json b/packages/weex-vue-plugins/weex-vue-websocket/package.json
new file mode 100644
index 0000000..5e03c12
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-websocket/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-websocket",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'websocket' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "websocket"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-websocket/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-websocket/src/index.js b/packages/weex-vue-plugins/weex-vue-websocket/src/index.js
new file mode 100644
index 0000000..009fd88
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-websocket/src/index.js
@@ -0,0 +1,2 @@
+import websocket from '../../../../html5/render/vue/modules/websocket'
+export default websocket

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-webview/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-webview/README.md b/packages/weex-vue-plugins/weex-vue-webview/README.md
new file mode 100644
index 0000000..8583f85
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-webview/README.md
@@ -0,0 +1,3 @@
+# weex-vue-webview
+
+Weex built-in API module 'webview' for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-webview/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-webview/package.json b/packages/weex-vue-plugins/weex-vue-webview/package.json
new file mode 100644
index 0000000..5cc9028
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-webview/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "weex-vue-webview",
+  "version": "0.1.0",
+  "description": "Weex built-in API module 'webview' for Vue 2.x.",
+  "license": "Apache-2.0",
+  "main": "dist/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git@github.com:apache/incubator-weex.git"
+  },
+  "homepage": "http://weex.apache.org/",
+  "bugs": {
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
+  },
+  "keywords": [
+    "weex",
+    "vue",
+    "web",
+    "API",
+    "module",
+    "webview"
+  ],
+  "peerDependencies": {
+    "weex-vue-render": "^0.12.0",
+    "weex-loader": "^12.0"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-plugins/weex-vue-webview/src/index.js
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-webview/src/index.js b/packages/weex-vue-plugins/weex-vue-webview/src/index.js
new file mode 100644
index 0000000..0ce8304
--- /dev/null
+++ b/packages/weex-vue-plugins/weex-vue-webview/src/index.js
@@ -0,0 +1,2 @@
+import webview from '../../../../html5/render/vue/modules/webview'
+export default webview

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5298c11d/packages/weex-vue-render/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/package.json b/packages/weex-vue-render/package.json
index ecf00c4..35b80d1 100644
--- a/packages/weex-vue-render/package.json
+++ b/packages/weex-vue-render/package.json
@@ -16,14 +16,17 @@
     "weex",
     "vue",
     "web",
-    "component"
+    "render"
   ],
   "dependencies": {
-    "vue": "^2.1.5",
     "core-js": "^2.4.1",
     "envd": "^0.1.1",
     "httpurl": "^0.1.1",
     "query-string": "^4.3.2",
     "inline-style-prefixer": "^3.0.2"
+  },
+  "peerDependencies": {
+    "vue": "^2.0",
+    "vue-loader": "^12.0"
   }
 }


[25/43] incubator-weex git commit: 0.12.1

Posted by ta...@apache.org.
0.12.1


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

Branch: refs/heads/0.16-dev
Commit: d1f619dd89c9386855dd0e4ef6e6fe4192e50aad
Parents: 8fe08a7
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 20:39:23 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 20:39:23 2017 +0800

----------------------------------------------------------------------
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d1f619dd/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 1d86f3b..d08813d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex",
-  "version": "0.12.0",
+  "version": "0.12.1",
   "subversion": {
     "browser": "0.5.0",
     "framework": "0.20.6",


[43/43] incubator-weex git commit: Merge branch '0.16-dev' of https://github.com/MrRaindrop/incubator-weex into 0.16-dev

Posted by ta...@apache.org.
Merge branch '0.16-dev' of https://github.com/MrRaindrop/incubator-weex into 0.16-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/b11c4e11
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b11c4e11
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b11c4e11

Branch: refs/heads/0.16-dev
Commit: b11c4e113da20e45f304934e39a869f137f0e750
Parents: 495fc6b c45b53c
Author: tancy <ro...@gmail.com>
Authored: Fri Jul 28 17:11:16 2017 +0800
Committer: tancy <ro...@gmail.com>
Committed: Fri Jul 28 17:11:16 2017 +0800

----------------------------------------------------------------------
 .gitignore                                      |   3 +
 build/build.js                                  | 105 +++-
 build/config.js                                 |  37 +-
 dangerfile.js                                   |  35 +-
 entry.js                                        |  11 +
 html5/render/vue/README.md                      |  77 +++
 html5/render/vue/components/a.js                |  90 +--
 html5/render/vue/components/div.js              |  43 +-
 html5/render/vue/components/image.js            |  18 +-
 html5/render/vue/components/index.js            |  37 +-
 html5/render/vue/components/input.js            | 130 +++--
 html5/render/vue/components/scrollable/cell.js  |  39 ++
 .../render/vue/components/scrollable/header.js  | 102 ++--
 html5/render/vue/components/scrollable/index.js |  48 ++
 html5/render/vue/components/scrollable/list.js  |  82 +++
 .../vue/components/scrollable/list/cell.js      |  36 --
 .../vue/components/scrollable/list/index.js     |  77 ---
 .../vue/components/scrollable/list/listMixin.js |  47 --
 .../vue/components/scrollable/list/style.js     |  34 --
 .../components/scrollable/loading-indicator.js  |  17 +-
 .../render/vue/components/scrollable/loading.js | 141 ++---
 .../vue/components/scrollable/mixins/index.js   |  26 +
 .../vue/components/scrollable/mixins/list.js    |  46 ++
 .../components/scrollable/mixins/scrollable.js  | 267 +++++++++
 .../render/vue/components/scrollable/refresh.js | 157 ++---
 .../vue/components/scrollable/scroller.js       | 135 +++--
 .../render/vue/components/scrollable/style.css  |  85 +++
 .../vue/components/scrollable/waterfall.js      | 573 ++++++++++---------
 html5/render/vue/components/slider/index.js     |  52 +-
 html5/render/vue/components/slider/indicator.js |  18 +-
 .../render/vue/components/slider/slideMixin.js  |  46 +-
 .../vue/components/slider/slider-neighbor.js    |  12 +-
 html5/render/vue/components/slider/slider.css   |  19 +
 html5/render/vue/components/slider/slider.js    |  75 +++
 html5/render/vue/components/switch.js           | 114 ++--
 html5/render/vue/components/text.js             |  52 +-
 html5/render/vue/components/textarea.js         | 104 ++--
 html5/render/vue/components/video.js            | 107 ++--
 html5/render/vue/components/web.js              |  98 ++--
 html5/render/vue/core/style.js                  |  35 --
 html5/render/vue/env/global.js                  |   6 +
 html5/render/vue/env/index.js                   |   5 -
 html5/render/vue/index.js                       |  25 -
 html5/render/vue/mixins/base.js                 |  71 ---
 html5/render/vue/mixins/index.js                |   2 -
 html5/render/vue/mixins/scrollable.js           | 233 --------
 html5/render/vue/mixins/style.js                |   4 +-
 html5/render/vue/modules/animation.js           |  36 +-
 html5/render/vue/modules/dom.js                 |  21 +-
 html5/render/vue/modules/globalEvent.js         |   8 +-
 html5/render/vue/modules/index.js               |  36 +-
 html5/render/vue/modules/navigator.js           |  10 +-
 html5/render/vue/modules/webview.js             |  18 +-
 html5/render/vue/styles/base.css                |  86 +--
 html5/render/vue/styles/reset.css               |  19 +
 html5/render/vue/utils/lazyload.js              |  24 +-
 html5/render/vue/utils/perf.js                  | 283 +--------
 html5/test/render/vue/components/list.js        |   2 +-
 html5/test/render/vue/components/switch.js      |   5 +-
 html5/test/render/vue/examples/list-cell.js     |   2 +-
 html5/test/render/vue/helper/index.js           |   2 +-
 html5/test/render/vue/helper/main.js            |   3 +-
 html5/test/render/vue/helper/utils.js           |   4 +
 html5/test/render/vue/modules/animation.js      |  12 +-
 html5/test/render/vue/modules/dom.js            |  10 +-
 html5/test/render/vue/modules/globalEvent.js    |   8 +-
 html5/test/render/vue/modules/navigator.js      |   8 +-
 html5/test/render/vue/modules/webview.js        |  10 +-
 html5/test/render/vue/utils/lazyload.js         |  59 +-
 html5/test/render/vue/utils/perf.js             |  94 +--
 html5/test/render/vue/utils/style.js            |  50 +-
 package.json                                    |  19 +-
 packages/weex-vue-plugins/weex-vue-a/README.md  |   3 +
 .../weex-vue-plugins/weex-vue-a/package.json    |  26 +
 .../weex-vue-plugins/weex-vue-a/src/index.js    |   2 +
 .../weex-vue-animation/README.md                |   3 +
 .../weex-vue-animation/package.json             |  27 +
 .../weex-vue-animation/src/index.js             |   2 +
 .../weex-vue-clipboard/README.md                |   3 +
 .../weex-vue-clipboard/package.json             |  27 +
 .../weex-vue-clipboard/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-dom/README.md     |   3 +
 .../weex-vue-plugins/weex-vue-dom/package.json  |  27 +
 .../weex-vue-plugins/weex-vue-dom/src/index.js  |   2 +
 .../weex-vue-plugins/weex-vue-event/README.md   |   3 +
 .../weex-vue-event/package.json                 |  27 +
 .../weex-vue-event/src/index.js                 |   2 +
 .../weex-vue-geolocation/README.md              |   3 +
 .../weex-vue-geolocation/package.json           |  27 +
 .../weex-vue-geolocation/src/index.js           |   2 +
 .../weex-vue-global-event/README.md             |   3 +
 .../weex-vue-global-event/package.json          |  27 +
 .../weex-vue-global-event/src/index.js          |   2 +
 .../weex-vue-plugins/weex-vue-input/README.md   |   3 +
 .../weex-vue-input/package.json                 |  26 +
 .../weex-vue-input/src/index.js                 |   2 +
 .../weex-vue-plugins/weex-vue-modal/README.md   |   3 +
 .../weex-vue-modal/package.json                 |  27 +
 .../weex-vue-modal/src/index.js                 |   2 +
 .../weex-vue-navigator/README.md                |   3 +
 .../weex-vue-navigator/package.json             |  27 +
 .../weex-vue-navigator/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-slider/README.md  |   3 +
 .../weex-vue-slider/package.json                |  27 +
 .../weex-vue-slider/src/index.js                |   2 +
 .../weex-vue-plugins/weex-vue-storage/README.md |   3 +
 .../weex-vue-storage/package.json               |  27 +
 .../weex-vue-storage/src/index.js               |   2 +
 .../weex-vue-plugins/weex-vue-stream/README.md  |   3 +
 .../weex-vue-stream/package.json                |  27 +
 .../weex-vue-stream/src/index.js                |   2 +
 .../weex-vue-plugins/weex-vue-switch/README.md  |   3 +
 .../weex-vue-switch/package.json                |  26 +
 .../weex-vue-switch/src/index.js                |   2 +
 .../weex-vue-textarea/.DS_Store                 | Bin 0 -> 6148 bytes
 .../weex-vue-textarea/README.md                 |   3 +
 .../weex-vue-textarea/package.json              |  26 +
 .../weex-vue-textarea/src/index.js              |   2 +
 .../weex-vue-plugins/weex-vue-video/README.md   |   3 +
 .../weex-vue-video/package.json                 |  26 +
 .../weex-vue-video/src/index.js                 |   2 +
 .../weex-vue-plugins/weex-vue-web/README.md     |   3 +
 .../weex-vue-plugins/weex-vue-web/package.json  |  26 +
 .../weex-vue-plugins/weex-vue-web/src/index.js  |   2 +
 .../weex-vue-websocket/README.md                |   3 +
 .../weex-vue-websocket/package.json             |  27 +
 .../weex-vue-websocket/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-webview/README.md |   3 +
 .../weex-vue-webview/package.json               |  27 +
 .../weex-vue-webview/src/index.js               |   2 +
 packages/weex-vue-render/README.md              |  77 +++
 packages/weex-vue-render/package.json           |   9 +-
 packages/weex-vue-render/src/index.core.js      |  13 +
 packages/weex-vue-render/src/index.js           |  12 +
 scripts/dist-vue.sh                             |   2 +-
 vue.html                                        |   8 +-
 136 files changed, 2952 insertions(+), 2176 deletions(-)
----------------------------------------------------------------------



[09/43] incubator-weex git commit: * [html5] update

Posted by ta...@apache.org.
* [html5] update


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

Branch: refs/heads/0.16-dev
Commit: d6730ef5fb6de6d92f731aeb79c4a191d7c016f2
Parents: 69365b3
Author: MrRaindrop <te...@gmail.com>
Authored: Mon Jul 3 17:49:27 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Mon Jul 3 17:49:27 2017 +0800

----------------------------------------------------------------------
 packages/weex-vue-render/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d6730ef5/packages/weex-vue-render/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/package.json b/packages/weex-vue-render/package.json
index d725d71..19b31c3 100644
--- a/packages/weex-vue-render/package.json
+++ b/packages/weex-vue-render/package.json
@@ -6,11 +6,11 @@
   "main": "dist/index.js",
   "repository": {
     "type": "git",
-    "url": "git@github.com:alibaba/weex.git"
+    "url": "git@github.com:apache/incubator-weex.git"
   },
-  "homepage": "http://alibaba.github.io/weex/",
+  "homepage": "http://weex.apache.org/",
   "bugs": {
-    "url": "https://github.com/alibaba/weex/issues"
+    "url": "https://issues.apache.org/jira/browse/WEEX/"
   },
   "keywords": [
     "weex",


[20/43] incubator-weex git commit: * [html5] update info.

Posted by ta...@apache.org.
* [html5] update info.


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

Branch: refs/heads/0.16-dev
Commit: 7f34d5b76bf9bff49e52be7838f610a8b4077e84
Parents: fe40690
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 17:53:43 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 17:53:43 2017 +0800

----------------------------------------------------------------------
 packages/weex-vue-plugins/weex-vue-a/README.md           | 2 +-
 packages/weex-vue-plugins/weex-vue-a/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-input/README.md       | 2 +-
 packages/weex-vue-plugins/weex-vue-input/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-slider/README.md      | 2 +-
 packages/weex-vue-plugins/weex-vue-slider/package.json   | 2 +-
 packages/weex-vue-plugins/weex-vue-switch/README.md      | 2 +-
 packages/weex-vue-plugins/weex-vue-switch/package.json   | 2 +-
 packages/weex-vue-plugins/weex-vue-textarea/README.md    | 2 +-
 packages/weex-vue-plugins/weex-vue-textarea/package.json | 2 +-
 packages/weex-vue-plugins/weex-vue-video/README.md       | 2 +-
 packages/weex-vue-plugins/weex-vue-video/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-web/README.md         | 2 +-
 packages/weex-vue-plugins/weex-vue-web/package.json      | 2 +-
 14 files changed, 14 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-a/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-a/README.md b/packages/weex-vue-plugins/weex-vue-a/README.md
index daf0942..9c1b20f 100644
--- a/packages/weex-vue-plugins/weex-vue-a/README.md
+++ b/packages/weex-vue-plugins/weex-vue-a/README.md
@@ -1,3 +1,3 @@
 # weex-vue-a
 
-Weex built-in '<a>' component for Vue 2.x.
+Weex built-in 'a' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-a/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-a/package.json b/packages/weex-vue-plugins/weex-vue-a/package.json
index ce586e6..aa9bfb2 100644
--- a/packages/weex-vue-plugins/weex-vue-a/package.json
+++ b/packages/weex-vue-plugins/weex-vue-a/package.json
@@ -1,7 +1,7 @@
 {
   "name": "weex-vue-a",
   "version": "0.1.1",
-  "description": "Weex built-in '<a>' component for Vue 2.x.",
+  "description": "Weex built-in 'a' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",
   "repository": {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-input/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-input/README.md b/packages/weex-vue-plugins/weex-vue-input/README.md
index 5491fde..408a156 100644
--- a/packages/weex-vue-plugins/weex-vue-input/README.md
+++ b/packages/weex-vue-plugins/weex-vue-input/README.md
@@ -1,3 +1,3 @@
 # weex-vue-input
 
-Weex built-in '<input>' component for Vue 2.x.
+Weex built-in 'input' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-input/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-input/package.json b/packages/weex-vue-plugins/weex-vue-input/package.json
index 6515340..ec1a3bf 100644
--- a/packages/weex-vue-plugins/weex-vue-input/package.json
+++ b/packages/weex-vue-plugins/weex-vue-input/package.json
@@ -1,7 +1,7 @@
 {
   "name": "weex-vue-input",
   "version": "0.1.1",
-  "description": "Weex built-in '<input>' component for Vue 2.x.",
+  "description": "Weex built-in 'input' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",
   "repository": {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-slider/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-slider/README.md b/packages/weex-vue-plugins/weex-vue-slider/README.md
index fd9cd50..ff1d8df 100644
--- a/packages/weex-vue-plugins/weex-vue-slider/README.md
+++ b/packages/weex-vue-plugins/weex-vue-slider/README.md
@@ -1,3 +1,3 @@
 # weex-vue-slider
 
-Weex built-in '<slider>' and '<slider-neighbor>' component for Vue 2.x.
+Weex built-in 'slider' and 'slider-neighbor' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-slider/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-slider/package.json b/packages/weex-vue-plugins/weex-vue-slider/package.json
index 433afed..b9f3be1 100644
--- a/packages/weex-vue-plugins/weex-vue-slider/package.json
+++ b/packages/weex-vue-plugins/weex-vue-slider/package.json
@@ -1,7 +1,7 @@
 {
   "name": "weex-vue-slider",
   "version": "0.1.1",
-  "description": "Weex built-in '<slider>' and '<slider-neighbor>' component for Vue 2.x.",
+  "description": "Weex built-in 'slider' and 'slider-neighbor' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",
   "repository": {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-switch/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-switch/README.md b/packages/weex-vue-plugins/weex-vue-switch/README.md
index 5bce1af..882d40f 100644
--- a/packages/weex-vue-plugins/weex-vue-switch/README.md
+++ b/packages/weex-vue-plugins/weex-vue-switch/README.md
@@ -1,3 +1,3 @@
 # weex-vue-switch
 
-Weex built-in '<switch>' component for Vue 2.x.
+Weex built-in 'switch' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-switch/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-switch/package.json b/packages/weex-vue-plugins/weex-vue-switch/package.json
index 89eee92..2e9dc8d 100644
--- a/packages/weex-vue-plugins/weex-vue-switch/package.json
+++ b/packages/weex-vue-plugins/weex-vue-switch/package.json
@@ -1,7 +1,7 @@
 {
   "name": "weex-vue-switch",
   "version": "0.1.1",
-  "description": "Weex built-in '<switch>' component for Vue 2.x.",
+  "description": "Weex built-in 'switch' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",
   "repository": {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-textarea/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-textarea/README.md b/packages/weex-vue-plugins/weex-vue-textarea/README.md
index 709d3ae..2018496 100644
--- a/packages/weex-vue-plugins/weex-vue-textarea/README.md
+++ b/packages/weex-vue-plugins/weex-vue-textarea/README.md
@@ -1,3 +1,3 @@
 # weex-vue-textarea
 
-Weex built-in '<textarea>' component for Vue 2.x.
+Weex built-in 'textarea' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-textarea/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-textarea/package.json b/packages/weex-vue-plugins/weex-vue-textarea/package.json
index 4787421..9bd12b0 100644
--- a/packages/weex-vue-plugins/weex-vue-textarea/package.json
+++ b/packages/weex-vue-plugins/weex-vue-textarea/package.json
@@ -1,7 +1,7 @@
 {
   "name": "weex-vue-textarea",
   "version": "0.1.1",
-  "description": "Weex built-in '<textarea>' component for Vue 2.x.",
+  "description": "Weex built-in 'textarea' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",
   "repository": {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-video/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-video/README.md b/packages/weex-vue-plugins/weex-vue-video/README.md
index fd98fa6..0ceb4f8 100644
--- a/packages/weex-vue-plugins/weex-vue-video/README.md
+++ b/packages/weex-vue-plugins/weex-vue-video/README.md
@@ -1,3 +1,3 @@
 # weex-vue-video
 
-Weex built-in '<video>' component for Vue 2.x.
+Weex built-in 'video' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-video/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-video/package.json b/packages/weex-vue-plugins/weex-vue-video/package.json
index 0b5c763..07a097a 100644
--- a/packages/weex-vue-plugins/weex-vue-video/package.json
+++ b/packages/weex-vue-plugins/weex-vue-video/package.json
@@ -1,7 +1,7 @@
 {
   "name": "weex-vue-video",
   "version": "0.1.1",
-  "description": "Weex built-in '<video>' component for Vue 2.x.",
+  "description": "Weex built-in 'video' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",
   "repository": {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-web/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-web/README.md b/packages/weex-vue-plugins/weex-vue-web/README.md
index 0825c4c..847db62 100644
--- a/packages/weex-vue-plugins/weex-vue-web/README.md
+++ b/packages/weex-vue-plugins/weex-vue-web/README.md
@@ -1,3 +1,3 @@
 # weex-vue-web
 
-Weex built-in '<web>' component for Vue 2.x.
+Weex built-in 'web' component for Vue 2.x.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7f34d5b7/packages/weex-vue-plugins/weex-vue-web/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-web/package.json b/packages/weex-vue-plugins/weex-vue-web/package.json
index a1ef3c4..867ab22 100644
--- a/packages/weex-vue-plugins/weex-vue-web/package.json
+++ b/packages/weex-vue-plugins/weex-vue-web/package.json
@@ -1,7 +1,7 @@
 {
   "name": "weex-vue-web",
   "version": "0.1.1",
-  "description": "Weex built-in '<web>' component for Vue 2.x.",
+  "description": "Weex built-in 'web' component for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",
   "repository": {


[12/43] incubator-weex git commit: * [html5] release 0.11.57

Posted by ta...@apache.org.
* [html5] release 0.11.57


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

Branch: refs/heads/0.16-dev
Commit: eb5dcb83c643b58536bbcfab1545ecec586031eb
Parents: adac876
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Jul 14 11:12:19 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Jul 14 11:12:19 2017 +0800

----------------------------------------------------------------------
 package.json                          | 2 +-
 packages/weex-vue-render/package.json | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/eb5dcb83/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index f99aec9..8aa7b32 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "subversion": {
     "browser": "0.5.0",
     "framework": "0.20.6",
-    "vue-render": "0.11.56",
+    "vue-render": "0.11.57",
     "transformer": ">=0.1.5 <0.5"
   },
   "description": "A framework for building Mobile cross-platform UI",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/eb5dcb83/packages/weex-vue-render/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/package.json b/packages/weex-vue-render/package.json
index 6356cca..ecf00c4 100644
--- a/packages/weex-vue-render/package.json
+++ b/packages/weex-vue-render/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-render",
-  "version": "0.11.56",
+  "version": "0.11.57",
   "description": "Weex built-in components for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",


[07/43] incubator-weex git commit: * [html5] release v0.11.55

Posted by ta...@apache.org.
* [html5] release v0.11.55


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

Branch: refs/heads/0.16-dev
Commit: 34f9f59cf7fdc3af97e5a689a7451355dd06a6fb
Parents: c4f461f
Author: MrRaindrop <te...@gmail.com>
Authored: Mon Jul 3 17:38:59 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Mon Jul 3 17:38:59 2017 +0800

----------------------------------------------------------------------
 package.json                          | 2 +-
 packages/weex-vue-render/package.json | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/34f9f59c/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 7feb65f..bad0c34 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "subversion": {
     "browser": "0.5.0",
     "framework": "0.20.6",
-    "vue-render": "0.11.54",
+    "vue-render": "0.11.55",
     "transformer": ">=0.1.5 <0.5"
   },
   "description": "A framework for building Mobile cross-platform UI",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/34f9f59c/packages/weex-vue-render/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/package.json b/packages/weex-vue-render/package.json
index a431e54..d725d71 100644
--- a/packages/weex-vue-render/package.json
+++ b/packages/weex-vue-render/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-vue-render",
-  "version": "0.11.54",
+  "version": "0.11.55",
   "description": "Weex built-in components for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",


[31/43] incubator-weex git commit: * [html5] fix test cases & rm perf utils.

Posted by ta...@apache.org.
* [html5] fix test cases & rm perf utils.


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

Branch: refs/heads/0.16-dev
Commit: a2064a49014b2200490f47f61158272ecf2bcd97
Parents: 7e6c95b
Author: MrRaindrop <te...@gmail.com>
Authored: Tue Jul 25 21:13:54 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Tue Jul 25 21:13:54 2017 +0800

----------------------------------------------------------------------
 build/config.js                             |   6 +-
 html5/render/vue/index.js                   |  19 --
 html5/render/vue/mixins/base.js             |  45 ----
 html5/render/vue/utils/lazyload.js          |  24 +-
 html5/render/vue/utils/perf.js              | 283 +----------------------
 html5/test/render/vue/components/list.js    |   2 +-
 html5/test/render/vue/components/switch.js  |   5 +-
 html5/test/render/vue/examples/list-cell.js |   2 +-
 html5/test/render/vue/helper/index.js       |   2 +-
 html5/test/render/vue/helper/main.js        |   3 +-
 html5/test/render/vue/helper/utils.js       |   4 +
 html5/test/render/vue/utils/lazyload.js     |  56 ++---
 html5/test/render/vue/utils/perf.js         |  94 +-------
 html5/test/render/vue/utils/style.js        |  52 +++--
 package.json                                |   3 +-
 packages/weex-vue-render/README.md          |  10 +-
 16 files changed, 89 insertions(+), 521 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/build/config.js
----------------------------------------------------------------------
diff --git a/build/config.js b/build/config.js
index 544ecd9..85470d7 100644
--- a/build/config.js
+++ b/build/config.js
@@ -85,8 +85,7 @@ const configs = {
     entry: absolute('packages/weex-vue-render/src/index.js'),
     dest: absolute('packages/weex-vue-render/dist/index.js'),
     banner:`
-console.log('START WEEX VUE RENDER: ${subversion['vue-render']}, Build ${now()}.');
-window._jslib_init_start = window.performance && window.performance.now && window.performance.now() || +new Date();\n\n`,
+console.log('START WEEX VUE RENDER: ${subversion['vue-render']}, Build ${now()}.');\n\n`,
     format: 'umd',
     plugins: [
       postcss(),
@@ -105,8 +104,7 @@ window._jslib_init_start = window.performance && window.performance.now && windo
     entry: absolute('packages/weex-vue-render/src/index.core.js'),
     dest: absolute('packages/weex-vue-render/dist/index.core.js'),
     banner:`
-console.log('START WEEX VUE RENDER CORE: ${subversion['vue-render']}, Build ${now()}.');
-window._jslib_init_start = window.performance && window.performance.now && window.performance.now() || +new Date();\n\n`,
+console.log('START WEEX VUE RENDER CORE: ${subversion['vue-render']}, Build ${now()}.');\n\n`,
     format: 'umd',
     plugins: [
       postcss(),

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/render/vue/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/index.js b/html5/render/vue/index.js
index a307e80..8a00a57 100644
--- a/html5/render/vue/index.js
+++ b/html5/render/vue/index.js
@@ -19,7 +19,6 @@
 import weex from './env'
 import { setVue } from './env'
 import { base, style, sticky } from './mixins'
-// import styleMixin from './mixins/style'
 
 /**
  * init weex.
@@ -44,18 +43,9 @@ function init (Vue/*, options = {}*/) {
   Vue.config.isReservedTag = tag => htmlRegex.test(tag)
   Vue.config.parsePlatformTagName = tag => tag.replace(htmlRegex, '')
 
-  /* istanbul ignore next */
-  // if (process.env.NODE_ENV === 'development') {
-  //   if (semver.lt(Vue.version, '2.1.5')) {
-  //     console.warn(`[Vue Render] The version of Vue should be ` +
-  //       `greater than 2.1.5, current is ${Vue.version}.`)
-  //   }
-  //   console.info(`[Vue Render] Registered components: `
-  //     + `[${Object.keys(components).join(', ')}].`)
   Vue.mixin(base)
   Vue.mixin(style)
   Vue.mixin(sticky)
-  // }
 }
 
 // auto init in dist mode.
@@ -65,13 +55,4 @@ if (typeof window !== 'undefined' && window.Vue) {
 
 weex.init = init
 
-// perf stat for componentCount.
-window._component_count = 0
-
-// perf stat for JSLibInitTime.
-window._jslib_init_end = window.performance && window.performance.now() || +new Date()
-window._weex_perf.stat.JSLibInitTime = parseInt(window._jslib_init_end - window._jslib_init_start)
-delete window._jslib_init_end
-delete window._jslib_init_start
-
 export default weex

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/render/vue/mixins/base.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/mixins/base.js b/html5/render/vue/mixins/base.js
index 3ecc1c8..06bc980 100644
--- a/html5/render/vue/mixins/base.js
+++ b/html5/render/vue/mixins/base.js
@@ -24,21 +24,6 @@ import {
   extend
 } from '../utils'
 
-import {
-  tagBeforeCreate,
-  // tagMounted,
-  tagRootMounted,
-  tagFirstScreen,
-  tagBeforeUpdate,
-  tagUpdated,
-  tagBegin,
-  tagEnd
-} from '../utils/perf'
-
-// import { extractComponentStyle } from '../core'
-
-// import config from '../config'
-
 let lazyloadWatched = false
 function watchLazyload () {
   lazyloadWatched = true
@@ -70,21 +55,9 @@ export default {
     if (!lazyloadWatched) {
       watchLazyload()
     }
-    if (process.env.NODE_ENV === 'development') {
-      tagBeforeCreate()
-    }
   },
 
   mounted () {
-    if (this.$options._componentTag === 'image') {
-      window._has_image_in_first_screen = true
-    }
-    if (this === this.$root) {
-      tagRootMounted()
-      if (!window._has_image_in_first_screen) {
-        tagFirstScreen()
-      }
-    }
     if (!weex._root) {
       weex._root = this.$root.$el
       weex._root.classList.add('weex-root')
@@ -104,31 +77,13 @@ export default {
     watchAppear(this)
   },
 
-  beforeUpdate () {
-    if (process.env.NODE_ENV === 'development') {
-      tagBeforeUpdate()
-    }
-  },
-
-  updated () {
-    if (process.env.NODE_ENV === 'development') {
-      tagUpdated()
-    }
-  },
-
   destroyed () {
     triggerDisappear(this)
   },
 
   methods: {
     _fireLazyload (el) {
-      if (process.env.NODE_ENV === 'development') {
-        tagBegin('base._fireLazyload')
-      }
       getThrottleLazyload(25)()
-      if (process.env.NODE_ENV === 'development') {
-        tagEnd('base._fireLazyload')
-      }
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/render/vue/utils/lazyload.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/utils/lazyload.js b/html5/render/vue/utils/lazyload.js
index 16fdc1e..158377b 100644
--- a/html5/render/vue/utils/lazyload.js
+++ b/html5/render/vue/utils/lazyload.js
@@ -22,10 +22,6 @@
 import { isElementVisible } from './component'
 import { createEvent, dispatchEvent } from './event'
 import { throttle } from './func'
-import { tagImg } from './perf'
-
-const SCREEN_REC_LIMIT = 3  // just record the first 3 times for screen-render finishing.
-let doRecord = true
 
 function preLoadImg (src: string,
     loadCallback: ?(Event) => void,
@@ -40,14 +36,9 @@ export function applySrc (item: any, src: ?string, placeholderSrc: ?string): voi
   if (!src) { return }
   function finallCb () {
     delete item._src_loading
-    if (doRecord) {
-      if (window._weex_perf.renderTime.length < SCREEN_REC_LIMIT) {
-        tagImg() // tag lastest img onload time.
-      }
-      else {
-        doRecord = false
-      }
-    }
+  }
+  if (item._src_loading) {
+    return
   }
   /**
    * 1. apply src immediately in case javscript blocks the image loading
@@ -59,9 +50,6 @@ export function applySrc (item: any, src: ?string, placeholderSrc: ?string): voi
    * 2. then load the img src with Image constructor (but would not post
    *  a request again), just to trigger the load event.
    */
-  if (item._src_loading) {
-    return
-  }
   item._src_loading = true
   preLoadImg(src, function (evt) {
     item.style.backgroundImage = `url(${src || ''})`
@@ -103,12 +91,6 @@ export function fireLazyload (el: Array<any> | any | null, ignoreVisibility: ?bo
     else if (isElementVisible(img, el)) {
       applySrc(img, img.getAttribute('img-src'), img.getAttribute('img-placeholder'))
     }
-    // In somecases there are images out of the screen in x-axis. There
-    // should not be a break point in these cases.
-    // else {
-    //   // alreay out of view, no need to compare any more.
-    //   break
-    // }
   }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/render/vue/utils/perf.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/utils/perf.js b/html5/render/vue/utils/perf.js
index 0ae04bd..d08bb54 100644
--- a/html5/render/vue/utils/perf.js
+++ b/html5/render/vue/utils/perf.js
@@ -22,298 +22,19 @@
  * @fileOverview: perf data recorder.
  */
 
-import { debounce, depress, extend } from './func'
-// performance tracker for weex.
 export const perf: {
-  earliestBeforeCreates: Array<number>,
-  latestMounts: Array<number>,
-  earliestBeforeUpdates: Array<number>,
-  latestUpdates: Array<number>,
-  latestRenderFinishes: Array<number>,
-  // createTime: earliest beforeCreate -> latest mounted.
-  createTime: Array<{ start: number, end: number, duration: number }>,
-  // updateTime: earliest beforeUpdate -> latest updated.
-  updateTime: Array<{ start: number, end: number, duration: number }>,
-  // renderTime: earliest beforeCreate/beforeUpdate -> latest img loaded.
-  renderTime: Array<{ start: number, end: number, duration: number }>,
-  entries: Array<{ requestStart: number, responseEnd: number }>,
-  time: {},
-  firstAllMountedTime: ?number,
-  stat: {
-    // info stat.
-    connectionType: string,
-    requestType: string,
-    pageName: string,
-    templateUrl: string,
-    WXSDKVersion: string,
-    bizType: string,
-    JSLibVersion: string,
-
-    // performance stat.
-    screenRenderTime: number,
-    JSTemplateSize: number,
-    componentCount: number,
-    networkTime: number,
-    JSLibInitTime: number,
-    totalTime: number
-  }
+  time: {}
 } = window._weex_perf = {
-  earliestBeforeCreates: [],
-  latestMounts: [],
-  earliestBeforeUpdates: [],
-  latestUpdates: [],
-  latestRenderFinishes: [],
-  createTime: [],
-  updateTime: [],
-  renderTime: [],
-  entries: [],
-  time: {},
-  firstAllMountedTime: null,
-  stat: {
-    // info stat.
-    connectionType: '',
-    requestType: '',
-    pageName: '',
-    templateUrl: '',
-    WXSDKVersion: '',
-    bizType: '',
-    JSLibVersion: '',
-    // performance stat.
-    screenRenderTime: 0,
-    JSTemplateSize: 0,
-    componentCount: 0,
-    networkTime: 0,
-    JSLibInitTime: 0,
-    totalTime: 0
-  }
+  time: {}
 }
 
 const tmp = {}
 
-const IMG_REC_INDENT: number = 500  // record loading events after 500ms towards last recording.
-const REGEXP_IMG_TYPE = /(.png|.jpg|.jpeg|.webp|.gif)$/  // image file type regexp.
-
-let earliestBeforeUpdateTime: number = 0
-let earliestBeforeCreateTime: number = 0
-
-let statCollected = false
-function collectStat (): void {
-  if (statCollected) {
-    return
-  }
-  statCollected = true
-  const version = window.weex.config.env.weexVersion
-  const protocol = location.protocol
-  extend(perf.stat, {
-    connectionType: protocol.substring(0, protocol.length - 1),
-    requestType: 'network',
-    pageName: location.href,
-    WXSDKVersion: version,
-    bizType: 'weex',
-    JSLibVersion: version
-  })
-  const performance = window.performance
-  // get templateUrl && JSTemplateSize
-  const entries = performance && performance.getEntries && performance.getEntries()
-  if (entries) {
-    const params = window.lib.httpurl(location.href).params
-    const bundle = params.page || params._wx_tpl
-    if (bundle) {
-      const len = entries.length
-      let i = 0
-      while (i < len) {
-        const entry = entries[i]
-        if (entry.entryType === 'resource'
-          && entry.name.indexOf(bundle.replace(/^[./]+/, '')) > -1) {
-          const res: any = extend({}, entry)
-          extend(perf.stat, {
-            templateUrl: res.name,
-            JSTemplateSize: (res.transferSize / 1024).toFixed(2),
-            networkTime: parseInt(res.duration)
-          })
-          break
-        }
-        i++
-      }
-    }
-  }
-}
-
-export function collectStatPerf (name: string, val: string | number): void {
-  if (!name) { return }
-  perf.stat[name] = val
-}
-
 function getNow (): number {
   const performance = window.performance
   return performance && performance.now ? performance.now() : new Date().getTime()
 }
 
-function getEntries (): Array<any> {
-  const performance = window.performance
-  return performance && performance.getEntries
-    ? performance.getEntries()
-      .filter(function (entry) {
-        return REGEXP_IMG_TYPE.test(entry.name)
-      })
-    : [{ responseEnd: getNow() - IMG_REC_INDENT }]
-}
-
-function _d (func: Function, wait: number) {
-  let timerId
-  let now
-  function later (now) {
-    timerId = null
-    func(now)
-  }
-  return function () {
-    now = getNow()
-    clearTimeout(timerId)
-    timerId = setTimeout(later.bind(null, now), wait)
-  }
-}
-
-export function tagFirstScreen (time?: number): void {
-  if (!time) {
-    time = getNow()
-  }
-  perf.latestRenderFinishes.push(time)
-  const start = Math.max(earliestBeforeCreateTime, earliestBeforeUpdateTime)
-  perf.renderTime.push({
-    start,
-    end: time,
-    duration: time - start
-  })
-
-  const num = perf.renderTime.length
-  perf[`screenTime${num}`] = time
-
-  if (!window._first_screen_detected) {
-    window._first_screen_detected = true
-    collectStat()
-    extend(perf.stat, {
-      screenRenderTime: parseInt(time),
-      componentCount: window._component_count
-    })
-    window.weex.emit('firstscreenfinish', time)
-  }
-
-  if (process.env.NODE_ENV === 'development') {
-    console.log(`screenTime[${num}]: ${time} ms.`)
-    console.log('_weex_perf:', window._weex_perf)
-  }
-
-  window.weex.emit('renderfinish', time)
-}
-
-/**
- * get first screen time.
- */
-const debouncedTagImg = debounce(function () {
-  const entries = getEntries()
-  const len = entries.length
-  if (!len) {
-    /**
-     * no image loaded. This probably happened because of the disabling of images' loading
-     * events. So just tag now as the first screen time.
-     */
-    return tagFirstScreen()
-  }
-  let i = 0
-  let end = 0
-  while (i < len) {
-    const responseEnd = entries[i].responseEnd
-    end = end < responseEnd ? responseEnd : end
-    perf.entries.push({
-      requestStart: entries[i].requestStart,
-      responseEnd
-    })
-    i++
-  }
-  tagFirstScreen(end)
-}, IMG_REC_INDENT)
-
-export function tagImg (): void {
-  debouncedTagImg()
-}
-
-/**
- * recording the earliest 'beforeCreate' time.
- */
-const depressedTagBeforeCreate = depress(function () {
-  const now = getNow()
-  earliestBeforeCreateTime = now
-  perf.earliestBeforeCreates.push(now)
-}, 25)
-
-export function tagBeforeCreate (): void {
-  depressedTagBeforeCreate()
-}
-
-export function tagRootMounted (): void {
-  const now = getNow()
-  perf.latestMounts.push(now)
-  if (!perf.firstAllMountedTime) {
-    perf.firstAllMountedTime = now
-    if (process.env.NODE_ENV === 'development') {
-      console.log(`first all mounted time: ${now} ms.`)
-    }
-  }
-  collectStatPerf('totalTime', parseInt(now))
-}
-
-/**
- * recording the latest 'mounted' time.
- */
-const debouncedTagMounted = _d(function (now) {
-  perf.latestMounts.push(now)
-  perf.createTime.push({
-    start: earliestBeforeCreateTime,
-    end: now,
-    duration: now - earliestBeforeCreateTime
-  })
-
-  if (!perf.firstAllMountedTime) {
-    perf.firstAllMountedTime = now
-    if (process.env.NODE_ENV === 'development') {
-      console.log(`first all mounted time: ${now} ms.`)
-    }
-  }
-}, 25)
-
-export function tagMounted (): void {
-  debouncedTagMounted()
-}
-
-/**
- * recording the earliest 'beforeUpdate' time.
- */
-const depressedTagBeforeUpdate = depress(function () {
-  const now = getNow()
-  earliestBeforeUpdateTime = now
-  perf.earliestBeforeUpdates.push(now)
-}, 25)
-
-export function tagBeforeUpdate (): void {
-  depressedTagBeforeUpdate()
-}
-
-/**
- * recording the latest 'updated' time.
- */
-const debouncedTagUpdated = _d(function (now) {
-  perf.latestUpdates.push(now)
-  perf.updateTime.push({
-    start: earliestBeforeUpdateTime,
-    end: now,
-    duration: now - earliestBeforeUpdateTime
-  })
-}, 25)
-
-export function tagUpdated (): void {
-  debouncedTagUpdated()
-}
-
 export function tagBegin (name: string): void {
   tmp[name] = getNow()
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/test/render/vue/components/list.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/components/list.js b/html5/test/render/vue/components/list.js
index 5174035..6cb3b16 100644
--- a/html5/test/render/vue/components/list.js
+++ b/html5/test/render/vue/components/list.js
@@ -18,7 +18,7 @@
  */
 import { init } from '../helper'
 import list from '../../../../render/vue/components/scrollable/list'
-import cell from '../../../../render/vue/components/scrollable/list/cell'
+import cell from '../../../../render/vue/components/scrollable/cell'
 
 init('<list> component', (Vue, helper) => {
   const { utils, compile } = helper

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/test/render/vue/components/switch.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/components/switch.js b/html5/test/render/vue/components/switch.js
index 6413b2d..89e3734 100644
--- a/html5/test/render/vue/components/switch.js
+++ b/html5/test/render/vue/components/switch.js
@@ -64,8 +64,7 @@ init('<switch> component', (Vue, helper) => {
   })
 
   it('toggle <switch>', () => {
-    const vm = new Vue(_switch)
-
+    const vm = compile(`<switch ref="switch"></switch>`).$refs.switch
     expect(vm.isChecked).to.not.be.true
     vm.toggle()
     expect(vm.isChecked).to.be.true
@@ -74,7 +73,7 @@ init('<switch> component', (Vue, helper) => {
   })
 
   it('toggle & disabled <switch>', () => {
-    const vm = new Vue(_switch)
+    const vm = compile(`<switch ref="switch"></switch>`).$refs.switch
     vm.isDisabled = true
 
     expect(vm.isChecked).to.not.be.true

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/test/render/vue/examples/list-cell.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/examples/list-cell.js b/html5/test/render/vue/examples/list-cell.js
index d7224dd..01ab8d5 100644
--- a/html5/test/render/vue/examples/list-cell.js
+++ b/html5/test/render/vue/examples/list-cell.js
@@ -18,7 +18,7 @@
  */
 import { init } from '../helper'
 import list from '../../../../render/vue/components/scrollable/list'
-import cell from '../../../../render/vue/components/scrollable/list/cell'
+import cell from '../../../../render/vue/components/scrollable/cell'
 import text from '../../../../render/vue/components/text'
 
 init('list & cell example', (Vue, helper) => {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/test/render/vue/helper/index.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/helper/index.js b/html5/test/render/vue/helper/index.js
index a0952f4..883b70c 100644
--- a/html5/test/render/vue/helper/index.js
+++ b/html5/test/render/vue/helper/index.js
@@ -58,7 +58,7 @@ export function init (title, fn) {
        * @param  {object} component.
        */
       register (name, component) {
-        global.weex.registerComponent(name, component)
+        global.weex.install(component)
       },
 
       /**

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/test/render/vue/helper/main.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/helper/main.js b/html5/test/render/vue/helper/main.js
index cff3ec8..ea1d10a 100644
--- a/html5/test/render/vue/helper/main.js
+++ b/html5/test/render/vue/helper/main.js
@@ -12,8 +12,7 @@ const helper = {
    * @param  {object} component.
    */
   register (name, component) {
-    weex.registerComponent(name, component)
-    // components[name] = component
+    weex.install(component)
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/test/render/vue/helper/utils.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/helper/utils.js b/html5/test/render/vue/helper/utils.js
index 01eb5ec..88820b3 100644
--- a/html5/test/render/vue/helper/utils.js
+++ b/html5/test/render/vue/helper/utils.js
@@ -32,3 +32,7 @@ export function nodeListToArray (obj) {
   }
   return array
 }
+
+export function isPhantom () {
+  return window.navigator.userAgent.indexOf('PhantomJS') !== -1
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/test/render/vue/utils/lazyload.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/utils/lazyload.js b/html5/test/render/vue/utils/lazyload.js
index b390468..b4e8251 100644
--- a/html5/test/render/vue/utils/lazyload.js
+++ b/html5/test/render/vue/utils/lazyload.js
@@ -20,25 +20,14 @@ import {
   fireLazyload,
   getThrottleLazyload
 } from '../../../../render/vue/utils/lazyload'
+import { isPhantom } from '../helper/utils'
+
 describe('utils', function () {
   describe('lazyload', function () {
     const validImageTransparent = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
     const validImageBlack = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='
-    const invalidImage = 'data:image/jpeg;base64,'
+    const invalidImage = isPhantom() ? 'data:image/gif;base64,' : 'http://invalid.img'
     before(() => {
-      // for test collectStat in utils/perf.js
-      window.performance = {
-        getEntries: () => {
-          return [{
-            entryType: 'resource',
-            name: 'weex-invalid.jpg'
-          }, {
-            entryType: 'resource',
-            name: 'weex-test.jpg'
-          }]
-        }
-      }
-      window.history.pushState(null, null, '?_wx_tpl=./weex-test.jpg')
       this.weexEmit = sinon.stub(window.weex, 'emit')
     })
     after(() => {
@@ -51,36 +40,30 @@ describe('utils', function () {
       node.setAttribute('img-src', invalidImage)
       node.setAttribute('img-placeholder', validImageBlack)
       node.style.height = '10px'
-        //  coverage branch if (item._src_loading)
+      document.body.appendChild(node)
+      //  coverage branch if (item._src_loading)
       node._src_loading = true
-        //  coverage branch if (Array.isArray(el))
+      //  coverage branch if (Array.isArray(el))
       fireLazyload([node])
       node._src_loading = false
-      fireLazyload(node, true)
+      fireLazyload(node)
       setTimeout(() => {
-        expect(node.style.backgroundImage.replace(urlReg, '')).to.be.equal('url(' + validImageBlack + ')')
-        setTimeout(() => {
-          expect(this.weexEmit.withArgs('renderfinish').callCount).to.be.equal(1)
-          expect(this.weexEmit.withArgs('firstscreenfinish').callCount).to.be.equal(0)
-          done()
-          document.body.removeChild(node)
-        }, IMG_REC_INDENT)
+        expect(node.style.backgroundImage.replace(/"/g, '')
+          .replace(urlReg, '')).to.be.equal('url(' + validImageBlack + ')')
+        done()
+        document.body.removeChild(node)
       }, 100)
     })
     describe('getThrottleLazyload', () => {
-      it('should use default value while parmas is undefined', (done) => {
+      it('should use default value while params is undefined', (done) => {
         const IMG_REC_INDENT = 500
         window._first_screen_detected = true
         getThrottleLazyload()()
         setTimeout(() => {
-          setTimeout(() => {
-            expect(this.weexEmit.withArgs('renderfinish').callCount).to.be.equal(1)
-            expect(this.weexEmit.withArgs('firstscreenfinish').callCount).to.be.equal(0)
-            done()
-          }, IMG_REC_INDENT)
+          done()
         }, 16)
       })
-      it('should be work', (done) => {
+      it('should be working', (done) => {
         const node = document.createElement('figure')
         const urlReg = /http(s)?:\/\/(\S+):(\d+)\//
         const wait = 100
@@ -92,13 +75,10 @@ describe('utils', function () {
         window._first_screen_detected = false
         getThrottleLazyload(wait, node)()
         setTimeout(() => {
-          expect(node.style.backgroundImage.replace(urlReg, '')).to.be.equal('url(' + validImageTransparent + ')')
-          setTimeout(() => {
-            expect(this.weexEmit.withArgs('renderfinish').callCount).to.be.equal(2)
-            expect(this.weexEmit.withArgs('firstscreenfinish').callCount).to.be.equal(1)
-            done()
-            document.body.removeChild(node)
-          }, IMG_REC_INDENT)
+          expect(node.style.backgroundImage.replace(/"/g, '')
+            .replace(urlReg, '')).to.be.equal('url(' + validImageTransparent + ')')
+          done()
+          document.body.removeChild(node)
         }, 100)
       })
     })

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/test/render/vue/utils/perf.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/utils/perf.js b/html5/test/render/vue/utils/perf.js
index 602da08..2c4857f 100644
--- a/html5/test/render/vue/utils/perf.js
+++ b/html5/test/render/vue/utils/perf.js
@@ -17,106 +17,24 @@
  * under the License.
  */
 import {
-  collectStatPerf,
-  tagFirstScreen,
-  tagImg,
-  tagBeforeCreate,
-  tagRootMounted,
-  tagMounted,
-  tagBeforeUpdate,
-  tagUpdated,
   tagBegin,
   tagEnd,
   perf
 } from '../../../../render/vue/utils/perf'
 describe('utils', function () {
   describe('pref', function () {
-    before(() => {
-      this.clock = sinon.useFakeTimers()
-    })
-    after(() => {
-      this.clock.restore()
-    })
+    // before(() => {
+    //   this.clock = sinon.useFakeTimers()
+    // })
+    // after(() => {
+    //   this.clock.restore()
+    // })
     beforeEach(() => {
       this.weexEmit = sinon.stub(window.weex, 'emit')
     })
     afterEach(() => {
       this.weexEmit.restore()
     })
-    it('collectStatPerf', () => {
-      window.performance = {
-        getEntries: () => {
-          return [{
-            entryType: 'resource',
-            name: 'weex-invalid.jpg'
-          }, {
-            entryType: 'resource',
-            name: 'weex-test.jpg'
-          }]
-        }
-      }
-      window.history.pushState(null, null, '?_wx_tpl=./weex-test.jpg')
-      const time = (new Date()).getTime()
-      collectStatPerf('totalTime', time)
-      expect(collectStatPerf).to.be.a('function')
-      expect(perf.stat['totalTime']).to.be.equal(time)
-      expect(collectStatPerf()).to.be.a('undefined')
-    })
-    it('tagFirstScreen', () => {
-      expect(tagFirstScreen).to.be.a('function')
-      tagFirstScreen()
-      expect(this.weexEmit.withArgs('renderfinish').callCount).to.be.equal(1)
-      expect(this.weexEmit.withArgs('firstscreenfinish').callCount).to.be.equal(0)
-      window._first_screen_detected = false
-      tagFirstScreen()
-      expect(this.weexEmit.withArgs('renderfinish').callCount).to.be.equal(2)
-      expect(this.weexEmit.withArgs('firstscreenfinish').callCount).to.be.equal(1)
-    })
-    it('tagImg', () => {
-      tagImg()
-      this.clock.tick(500)
-      expect(this.weexEmit.withArgs('renderfinish').callCount).to.be.equal(1)
-      expect(tagImg).to.be.a('function')
-    })
-    it('tagBeforeCreate', () => {
-      tagBeforeCreate()
-      this.clock.tick(25)
-      const time = perf.earliestBeforeCreates[perf.earliestBeforeCreates.length - 1]
-      expect(time).to.be.a('number')
-      expect(perf.earliestBeforeCreates).to.have.lengthOf(1)
-      expect(tagBeforeCreate).to.be.a('function')
-    })
-    it('tagRootMounted', () => {
-      tagRootMounted()
-      const time = perf.latestMounts[perf.latestMounts.length - 1]
-      expect(time).to.be.a('number')
-      expect(perf.stat['totalTime']).to.be.equal(parseInt(time))
-      expect(tagRootMounted).to.be.a('function')
-    })
-    it('tagMounted', () => {
-      perf.firstAllMountedTime = 0
-      tagMounted()
-      this.clock.tick(25)
-      expect(tagMounted).to.be.a('function')
-      expect(perf.latestMounts).to.have.lengthOf(2)
-      expect(perf.createTime).to.have.lengthOf(1)
-      expect(perf.createTime[perf.createTime.length - 1]).to.have.all.keys('start', 'end', 'duration')
-      expect(perf.firstAllMountedTime).to.be.above(0)
-    })
-    it('tagBeforeUpdate', () => {
-      tagBeforeUpdate()
-      this.clock.tick(25)
-      expect(tagBeforeUpdate).to.be.a('function')
-      expect(perf.earliestBeforeUpdates).to.have.lengthOf(1)
-    })
-    it('tagUpdated', () => {
-      tagUpdated()
-      this.clock.tick(25)
-      expect(tagUpdated).to.be.a('function')
-      expect(perf.latestUpdates).to.have.lengthOf(1)
-      expect(perf.updateTime).to.have.lengthOf(1)
-      expect(perf.updateTime[perf.updateTime.length - 1]).to.have.all.keys('start', 'end', 'duration')
-    })
     it('tagBegin', () => {
       const name = 'test'
       tagBegin(name)

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/html5/test/render/vue/utils/style.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/utils/style.js b/html5/test/render/vue/utils/style.js
index 2110f23..c073987 100644
--- a/html5/test/render/vue/utils/style.js
+++ b/html5/test/render/vue/utils/style.js
@@ -31,6 +31,11 @@ import {
 import {
   init
 } from '../../../../render/vue/env/viewport'
+
+function trimSpace (str) {
+  return str.replace(/\s/g, '')
+}
+
 describe('style', function () {
   // const rect = document.documentElement.getBoundingClientRect()
   // const info = {}
@@ -108,15 +113,21 @@ describe('transform', () => {
     })
     it('should inherit transform properties from element', () => {
       addTransform(node, style, false)
-      expect(node.style.transform).to.be.equal(style.translate + ' ' + nodeStyle.scale + ' ' + style.rotate + ' ')
-        // webkitTransform will remove last whitespace automatically
-      expect(node.style.webkitTransform).to.be.equal(style.translate + ' ' + nodeStyle.scale + ' ' + style.rotate)
+      expect(trimSpace(node.style.transform)).to.be.equal(
+        trimSpace(style.translate + nodeStyle.scale + style.rotate))
+      // webkitTransform will remove last whitespace automatically
+      expect(trimSpace(node.style.webkitTransform)).to.be.equal(
+        trimSpace(style.translate + nodeStyle.scale + style.rotate)
+      )
     })
     it('should replace all transform properties', () => {
       addTransform(node, style, true)
-      expect(node.style.transform).to.be.equal(style.translate + ' ' + style.rotate + ' ')
-        // webkitTransform will remove last whitespace automatically
-      expect(node.style.webkitTransform).to.be.equal(style.translate + ' ' + style.rotate)
+      debugger;
+      expect(trimSpace(node.style.transform)).to.be.equal(
+        trimSpace(style.translate + style.rotate))
+      // webkitTransform will remove last whitespace automatically
+      expect(trimSpace(node.style.webkitTransform)).to.be.equal(
+        trimSpace(style.translate + style.rotate))
     })
   })
   describe('should add translate X to the element', () => {
@@ -128,8 +139,8 @@ describe('transform', () => {
     let node = null
     beforeEach(() => {
       node = document.createElement('div')
-        // node.style.transform = nodeStyle.translate+' '+nodeStyle.scale+' '+ nodeStyle.rotate
-        // node.style.webkitTransform = nodeStyle.translate+' '+nodeStyle.scale+' '+ nodeStyle.rotate
+      // node.style.transform = nodeStyle.translate+' '+nodeStyle.scale+' '+ nodeStyle.rotate
+      // node.style.webkitTransform = nodeStyle.translate+' '+nodeStyle.scale+' '+ nodeStyle.rotate
     })
     it('should element has translate property', () => {
       const toAdd = 2
@@ -137,14 +148,20 @@ describe('transform', () => {
       const translateReplaceFunction = ($0) => {
         return (parseFloat($0) + toAdd) + 'px'
       }
-      const removeSpaceReg = /(\s?)/g
       node.style.transform = nodeStyle.translate + ' ' + nodeStyle.scale + ' ' + nodeStyle.rotate
       node.style.webkitTransform = nodeStyle.translate + ' ' + nodeStyle.scale + ' ' + nodeStyle.rotate
       addTranslateX(node, toAdd)
+      debugger;
       // webkitTransform will reserved whitespace between translate value but transform will not.
-      expect(node.style.transform).to.be.equal(nodeStyle.translate.replace(translateReg, translateReplaceFunction).replace(removeSpaceReg, '') + ' ' + nodeStyle.scale + ' ' + nodeStyle.rotate + ' ')
+      expect(trimSpace(node.style.transform)).to.be.equal(
+        trimSpace(nodeStyle.translate.replace(translateReg, translateReplaceFunction)
+        + nodeStyle.scale
+        + nodeStyle.rotate))
       // webkitTransform will remove last whitespace automatically
-      expect(node.style.webkitTransform).to.be.equal(nodeStyle.translate.replace(translateReg, translateReplaceFunction) + ' ' + nodeStyle.scale + ' ' + nodeStyle.rotate)
+      expect(trimSpace(node.style.webkitTransform)).to.be.equal(
+        trimSpace(nodeStyle.translate.replace(translateReg, translateReplaceFunction)
+        + nodeStyle.scale
+        + nodeStyle.rotate))
     })
     it('should element does not have translate property', () => {
       const toAdd = 2
@@ -157,17 +174,22 @@ describe('transform', () => {
       node.style.webkitTransform = nodeStyle.scale + ' ' + nodeStyle.rotate
       addTranslateX(node, toAdd)
       // transform will reserved whitespace when translate on the last position.
-      expect(node.style.transform).to.be.equal(nodeStyle.scale + ' ' + nodeStyle.rotate + ' ' + defaultTranslate.replace(translateReg, translateReplaceFunction) + ' ')
+      expect(trimSpace(node.style.transform)).to.be.equal(
+        trimSpace(nodeStyle.scale + nodeStyle.rotate + defaultTranslate.replace(translateReg, translateReplaceFunction)))
       // webkitTransform will remove last whitespace automatically
-      expect(node.style.webkitTransform).to.be.equal(nodeStyle.scale + ' ' + nodeStyle.rotate + ' ' + defaultTranslate.replace(translateReg, translateReplaceFunction))
+      expect(trimSpace(node.style.webkitTransform)).to.be.equal(
+        trimSpace(nodeStyle.scale + nodeStyle.rotate + defaultTranslate.replace(translateReg, translateReplaceFunction)))
     })
     it('should elemet remain', () => {
       const toAdd = 0
       node.style.transform = nodeStyle.scale + ' ' + nodeStyle.rotate
       node.style.webkitTransform = nodeStyle.scale + ' ' + nodeStyle.rotate
       addTranslateX(node, toAdd)
-      expect(node.style.transform).to.be.equal(nodeStyle.scale + ' ' + nodeStyle.rotate)
-      expect(node.style.webkitTransform).to.be.equal(nodeStyle.scale + ' ' + nodeStyle.rotate)
+      expect(trimSpace(node.style.transform)).to.be.equal(
+        trimSpace(nodeStyle.scale + nodeStyle.rotate))
+      expect(trimSpace(node.style.webkitTransform)).to.be.equal(
+        trimSpace(nodeStyle.scale + nodeStyle.rotate)
+      )
     })
   })
 })

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index fe8a269..ce7cc0f 100644
--- a/package.json
+++ b/package.json
@@ -44,7 +44,8 @@
     "build:source": "npm run build:native && npm run build:browser && node build/build.js vue",
     "build:browser": "wwp && node build/build.js browser",
     "build:browser:common": "rollup -c build/rollup.browser.common.config.js",
-    "build:vue": "flow check && node build/build.js vue && npm run build:vue:core && npm run build:vue:plugins",
+    "build:vue": "npm run build:vue:full && npm run build:vue:core && npm run build:vue:plugins",
+    "build:vue:full": "flow check && node build/build.js vue",
     "build:vue:core": "node build/build.js vue-core",
     "build:vue:plugins": "node build/build.js vue-plugins",
     "build:vue:examples": "node build/build.js web-examples",

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2064a49/packages/weex-vue-render/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/README.md b/packages/weex-vue-render/README.md
index 07286be..f9ac2de 100644
--- a/packages/weex-vue-render/README.md
+++ b/packages/weex-vue-render/README.md
@@ -84,7 +84,7 @@ These components have already integrated into render-core. You don't have to imp
 | weex-vue-geolocation | geolocation |
 | weex-vue-global-event | globalEvent |
 | weex-vue-modal | modal |
-| weex-vue-navigator | navigator |
+| weex-vue-nav | navigator |
 | weex-vue-storage | storage |
 | weex-vue-stream | stream |
 | weex-vue-websocket | websocket |
@@ -94,6 +94,14 @@ Some of the above plugins may not be mentioned in weex documents. Just ignore th
 
 You can develop more plugins for your app. Accordingly the same plugin for other two platforms (iOS and Android) should also be built and intergrated in your app if you want it run on all three platforms.
 
+#### scan your code
+
+Use `weex-vue-bundle-util` to scan you code, which will return a promise with a object to tell which components and modules you have used in your project, so that can generate a entry file accordingly to import those plugins.
+
+https://github.com/weexteam/weex-vue-bundle-util
+
+You can see the examples of weex built in this way by running the script `npm run build:vue:examples`, and use the `<script src="./dist/render.vue.js"></script>` as the render in the `vue.html` file.
+
 ## use vue-loader to bundle .vue file
 
 NOTE: you should inject `$processStyle` to preprocess vnode's style in vue-loader's postTransformNode hook.



[19/43] incubator-weex git commit: Merge branch 'feature/generate-packages' into 0.15-dev-web

Posted by ta...@apache.org.
Merge branch 'feature/generate-packages' into 0.15-dev-web


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

Branch: refs/heads/0.16-dev
Commit: 668035263df48a154ca64ad0f18b4143e8e072de
Parents: 194a57d fe40690
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 17:40:04 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 17:40:04 2017 +0800

----------------------------------------------------------------------
 build/build.js                                  |  48 +-
 build/config.js                                 |  35 +-
 html5/render/vue/components/a.js                |  90 +--
 html5/render/vue/components/div.js              |  43 +-
 html5/render/vue/components/image.js            |  18 +-
 html5/render/vue/components/index.js            |  37 +-
 html5/render/vue/components/input.js            | 130 +++--
 html5/render/vue/components/scrollable/cell.js  |  39 ++
 .../render/vue/components/scrollable/header.js  | 102 ++--
 html5/render/vue/components/scrollable/index.js |  29 +
 html5/render/vue/components/scrollable/list.js  |  82 +++
 .../vue/components/scrollable/list/cell.js      |  36 --
 .../vue/components/scrollable/list/index.js     |  77 ---
 .../vue/components/scrollable/list/listMixin.js |  47 --
 .../vue/components/scrollable/list/style.js     |  34 --
 .../components/scrollable/loading-indicator.js  |  17 +-
 .../render/vue/components/scrollable/loading.js | 141 ++---
 .../vue/components/scrollable/mixins/index.js   |   7 +
 .../vue/components/scrollable/mixins/list.js    |  46 ++
 .../components/scrollable/mixins/scrollable.js  | 267 +++++++++
 .../render/vue/components/scrollable/refresh.js | 157 ++---
 .../vue/components/scrollable/scroller.js       | 135 +++--
 .../render/vue/components/scrollable/style.css  |  66 +++
 .../vue/components/scrollable/waterfall.js      | 573 ++++++++++---------
 html5/render/vue/components/slider/index.js     |  69 +--
 html5/render/vue/components/slider/indicator.js |  18 +-
 .../render/vue/components/slider/slideMixin.js  |  46 +-
 .../vue/components/slider/slider-neighbor.js    |  12 +-
 html5/render/vue/components/slider/slider.js    |  75 +++
 html5/render/vue/components/switch.js           | 114 ++--
 html5/render/vue/components/text.js             |  52 +-
 html5/render/vue/components/textarea.js         | 104 ++--
 html5/render/vue/components/video.js            | 107 ++--
 html5/render/vue/components/web.js              |  98 ++--
 html5/render/vue/core/style.js                  |  35 --
 html5/render/vue/env/global.js                  |   6 +
 html5/render/vue/env/index.js                   |   5 -
 html5/render/vue/index.js                       |   6 -
 html5/render/vue/mixins/base.js                 |  26 -
 html5/render/vue/mixins/index.js                |   2 -
 html5/render/vue/mixins/scrollable.js           | 233 --------
 html5/render/vue/modules/animation.js           |  36 +-
 html5/render/vue/modules/dom.js                 |  21 +-
 html5/render/vue/modules/globalEvent.js         |   8 +-
 html5/render/vue/modules/index.js               |  36 +-
 html5/render/vue/modules/navigator.js           |  10 +-
 html5/render/vue/modules/webview.js             |  18 +-
 html5/render/vue/styles/base.css                |  67 ---
 package.json                                    |  10 +-
 packages/weex-vue-plugins/weex-vue-a/README.md  |   3 +
 .../weex-vue-plugins/weex-vue-a/package.json    |  26 +
 .../weex-vue-plugins/weex-vue-a/src/index.js    |   2 +
 .../weex-vue-animation/README.md                |   3 +
 .../weex-vue-animation/package.json             |  27 +
 .../weex-vue-animation/src/index.js             |   2 +
 .../weex-vue-clipboard/README.md                |   3 +
 .../weex-vue-clipboard/package.json             |  27 +
 .../weex-vue-clipboard/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-dom/README.md     |   3 +
 .../weex-vue-plugins/weex-vue-dom/package.json  |  27 +
 .../weex-vue-plugins/weex-vue-dom/src/index.js  |   2 +
 .../weex-vue-plugins/weex-vue-event/README.md   |   3 +
 .../weex-vue-event/package.json                 |  27 +
 .../weex-vue-event/src/index.js                 |   2 +
 .../weex-vue-geolocation/README.md              |   3 +
 .../weex-vue-geolocation/package.json           |  27 +
 .../weex-vue-geolocation/src/index.js           |   2 +
 .../weex-vue-global-event/README.md             |   3 +
 .../weex-vue-global-event/package.json          |  27 +
 .../weex-vue-global-event/src/index.js          |   2 +
 .../weex-vue-plugins/weex-vue-input/README.md   |   3 +
 .../weex-vue-input/package.json                 |  26 +
 .../weex-vue-input/src/index.js                 |   2 +
 .../weex-vue-plugins/weex-vue-modal/README.md   |   3 +
 .../weex-vue-modal/package.json                 |  27 +
 .../weex-vue-modal/src/index.js                 |   2 +
 .../weex-vue-navigator/README.md                |   3 +
 .../weex-vue-navigator/package.json             |  27 +
 .../weex-vue-navigator/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-slider/README.md  |   3 +
 .../weex-vue-slider/package.json                |  27 +
 .../weex-vue-slider/src/index.js                |   2 +
 .../weex-vue-plugins/weex-vue-storage/README.md |   3 +
 .../weex-vue-storage/package.json               |  27 +
 .../weex-vue-storage/src/index.js               |   2 +
 .../weex-vue-plugins/weex-vue-stream/README.md  |   3 +
 .../weex-vue-stream/package.json                |  27 +
 .../weex-vue-stream/src/index.js                |   2 +
 .../weex-vue-plugins/weex-vue-switch/README.md  |   3 +
 .../weex-vue-switch/package.json                |  26 +
 .../weex-vue-switch/src/index.js                |   2 +
 .../weex-vue-textarea/.DS_Store                 | Bin 0 -> 6148 bytes
 .../weex-vue-textarea/README.md                 |   3 +
 .../weex-vue-textarea/package.json              |  26 +
 .../weex-vue-textarea/src/index.js              |   2 +
 .../weex-vue-plugins/weex-vue-video/README.md   |   3 +
 .../weex-vue-video/package.json                 |  26 +
 .../weex-vue-video/src/index.js                 |   2 +
 .../weex-vue-plugins/weex-vue-web/README.md     |   3 +
 .../weex-vue-plugins/weex-vue-web/package.json  |  26 +
 .../weex-vue-plugins/weex-vue-web/src/index.js  |   2 +
 .../weex-vue-websocket/README.md                |   3 +
 .../weex-vue-websocket/package.json             |  27 +
 .../weex-vue-websocket/src/index.js             |   2 +
 .../weex-vue-plugins/weex-vue-webview/README.md |   3 +
 .../weex-vue-webview/package.json               |  27 +
 .../weex-vue-webview/src/index.js               |   2 +
 packages/weex-vue-render/package.json           |   7 +-
 108 files changed, 2448 insertions(+), 1631 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/66803526/build/config.js
----------------------------------------------------------------------


[28/43] incubator-weex git commit: Merge branch '0.15-dev' into 0.15-dev-web

Posted by ta...@apache.org.
Merge branch '0.15-dev' into 0.15-dev-web


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

Branch: refs/heads/0.16-dev
Commit: ed20cdc274515ff7a3334b76cf855856e12497e3
Parents: 5225997 7ca3a1e
Author: MrRaindrop <te...@gmail.com>
Authored: Tue Jul 25 15:50:54 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Tue Jul 25 15:50:54 2017 +0800

----------------------------------------------------------------------
 README.md                                       |  51 +-
 .../weex/extend/component/WXParallax.java       |   4 +-
 .../taobao/weex/dom/WXRecyclerDomObject.java    |   4 +
 .../ui/component/list/BasicListComponent.java   |  30 +-
 .../weex/ui/component/list/WXListComponent.java |   9 +-
 examples/vue/components/input.vue               |  17 +
 html5/test/render/vue/core/node.js              |  10 +-
 .../render/vue/data/dotvue/event-bubble-bar.vue |  11 -
 .../render/vue/data/dotvue/event-bubble.vue     |  11 -
 .../WeexDemo.xcodeproj/project.pbxproj          |   4 +
 ios/playground/WeexDemo/WXDemoViewController.m  |   3 +-
 ios/sdk/WeexSDK-Dynamic/Info.plist              |  24 +
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       | 638 ++++++++++++++++++-
 .../xcschemes/WeexSDK-Dynamic.xcscheme          |  80 +++
 .../WeexSDK/Sources/Bridge/WXBridgeContext.h    |   2 +-
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    |  19 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m |  16 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |  19 +-
 .../Component/Recycler/WXRecyclerComponent.h    |   3 +-
 .../Component/Recycler/WXRecyclerComponent.m    |   5 +-
 .../Recycler/WXSectionDataController.h          |   2 +
 .../Sources/Component/WXCanvasComponent.h       |   2 +-
 .../WeexSDK/Sources/Component/WXEditComponent.m |   2 +-
 .../Sources/Component/WXFooterComponent.h       |   2 +-
 .../Sources/Component/WXHeaderComponent.h       |   3 +-
 .../Sources/Component/WXImageComponent.m        |   1 +
 .../WeexSDK/Sources/Component/WXListComponent.m |   2 +-
 .../Sources/Component/WXScrollerComponent.m     |   1 +
 .../WeexSDK/Sources/Component/WXTextComponent.m |   1 +
 .../Sources/Controller/WXRootViewController.m   |   1 +
 .../Sources/Display/WXComponent+BoxShadow.h     |   4 -
 ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h  |   1 +
 ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h |   2 +-
 ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m    |  10 +-
 .../WeexSDK/Sources/Layout/WXComponent+Layout.m |   1 +
 .../Sources/Manager/WXComponentManager.h        |   3 +
 .../Sources/Manager/WXComponentManager.m        |   5 +-
 .../WeexSDK/Sources/Manager/WXServiceFactory.h  |   2 +-
 .../WeexSDK/Sources/Manager/WXTracingManager.h  | 125 ++++
 .../WeexSDK/Sources/Manager/WXTracingManager.m  | 382 +++++++++++
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |   5 +-
 .../WeexSDK/Sources/Model/WXJSExceptionInfo.h   |   1 +
 .../WeexSDK/Sources/Model/WXJSExceptionInfo.m   |   1 +
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |   7 +
 .../WeexSDK/Sources/Module/WXAnimationModule.m  |   7 +-
 ios/sdk/WeexSDK/Sources/Module/WXDomModule.m    |   4 +-
 ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m |   4 +-
 ios/sdk/WeexSDK/Sources/Utility/WXLog.m         |   1 +
 .../View/WXComponent+PseudoClassManagement.h    |   4 +-
 .../Sources/View/WXComponent+ViewManagement.m   |   3 +-
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |   1 +
 ios/sdk/buildScripts.sh                         |   2 +
 52 files changed, 1444 insertions(+), 108 deletions(-)
----------------------------------------------------------------------



[39/43] incubator-weex git commit: * [html5] fix release.

Posted by ta...@apache.org.
* [html5] fix release.


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

Branch: refs/heads/0.16-dev
Commit: 38c789e5313040acb41b82834e2d00e71c0ad8b7
Parents: 8b66fb8
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 27 11:22:49 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 27 11:22:49 2017 +0800

----------------------------------------------------------------------
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38c789e5/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index b2316c2..e76c35b 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
     "postinstall": "bash ./scripts/install-hooks.sh",
     "build:native": "node build/build.js native",
     "build:runtime": "node build/build.js runtime",
-    "install:buildtools": "npm i webpack@^1.0 rollup rollup-watch rollup-plugin-buble rollup-plugin-json rollup-plugin-eslint rollup-plugin-commonjs rollup-plugin-flow rollup-plugin-flow-no-whitespace rollup-plugin-postcss rollup-plugin-replace rollup-plugin-uglify rollup-plugin-node-resolve wwp flow-bin babel-core babel-eslint babel-istanbul babel-loader babel-plugin-coverage babel-preset-es2015 babel-runtime eslint-plugin-flowtype",
+    "install:buildtools": "npm i webpack@^1.0 weex-vue-bundle-util rollup rollup-watch rollup-plugin-buble rollup-plugin-json rollup-plugin-eslint rollup-plugin-commonjs rollup-plugin-flow rollup-plugin-flow-no-whitespace rollup-plugin-postcss rollup-plugin-replace rollup-plugin-uglify rollup-plugin-node-resolve wwp flow-bin babel-core babel-eslint babel-istanbul babel-loader babel-plugin-coverage babel-preset-es2015 babel-runtime eslint-plugin-flowtype",
     "build:source": "npm run build:native && npm run build:browser && node build/build.js vue",
     "build:browser": "wwp && node build/build.js browser",
     "build:browser:common": "rollup -c build/rollup.browser.common.config.js",


[13/43] incubator-weex git commit: Merge branch '0.15-dev-web' into feature/generate-packages

Posted by ta...@apache.org.
Merge branch '0.15-dev-web' into feature/generate-packages


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

Branch: refs/heads/0.16-dev
Commit: a83dfc2fb255f5a7b627471c9c59e1aee1bfcf58
Parents: 166513d eb5dcb8
Author: MrRaindrop <te...@gmail.com>
Authored: Mon Jul 17 11:33:03 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Mon Jul 17 11:33:03 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/mixins/style.js      |  4 +++-
 html5/render/vue/utils/style.js       | 30 +++++++++++++++++++++++++++++-
 html5/test/render/vue/core/node.js    | 18 ++++++++++++++++++
 package.json                          |  2 +-
 packages/weex-vue-render/package.json |  2 +-
 5 files changed, 52 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[40/43] incubator-weex git commit: Merge branch '0.16-dev' into 0.16-dev-web

Posted by ta...@apache.org.
Merge branch '0.16-dev' into 0.16-dev-web


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

Branch: refs/heads/0.16-dev
Commit: 30687e785226b31df450b4e82f80840018da91b4
Parents: 38c789e a54bcb9
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 27 17:59:19 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 27 17:59:19 2017 +0800

----------------------------------------------------------------------
 WeexSDK.podspec                                 |  2 +-
 ios/playground/Podfile                          |  2 +-
 ios/playground/WeexDemo/WXDemoViewController.m  |  1 -
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       |  2 +-
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    | 27 +++++++++++++--
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m | 14 ++++++++
 ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h |  2 ++
 ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 11 ++++--
 .../WeexSDK/Sources/Component/WXListComponent.m |  2 +-
 .../Sources/Manager/WXComponentManager.m        | 14 +++++---
 .../WeexSDK/Sources/Manager/WXTracingManager.h  | 35 ++++++++++----------
 .../WeexSDK/Sources/Manager/WXTracingManager.m  | 18 +++++-----
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |  6 ++--
 .../WeexSDK/Sources/Protocol/WXBridgeProtocol.h |  5 +++
 .../Sources/Protocol/WXValidateProtocol.h       |  4 +--
 ios/sdk/WeexSDK/Sources/Utility/WXDefine.h      |  2 +-
 ios/sdk/WeexSDK/Sources/Utility/WXLog.m         |  9 ++++-
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |  2 +-
 pre-build/native-bundle-main.js                 | 12 +++----
 19 files changed, 117 insertions(+), 53 deletions(-)
----------------------------------------------------------------------



[05/43] incubator-weex git commit: Merge branch '0.14-dev-web' into 0.15-dev-web

Posted by ta...@apache.org.
Merge branch '0.14-dev-web' into 0.15-dev-web


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

Branch: refs/heads/0.16-dev
Commit: 736772bcdab5b71cec6fd15b3076e3752e929d85
Parents: 3719136 da1ca84
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Jun 30 17:46:49 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Jun 30 17:46:49 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/core/node.js         | 127 ++++++++++++++++++++---------
 html5/render/vue/env/wx-env.js        |   2 +-
 package.json                          |   2 +-
 packages/weex-vue-render/package.json |   2 +-
 4 files changed, 92 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/736772bc/package.json
----------------------------------------------------------------------


[34/43] incubator-weex git commit: * [html5] add dep for weex-vue-bundle-util.

Posted by ta...@apache.org.
* [html5] add dep for weex-vue-bundle-util.


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

Branch: refs/heads/0.16-dev
Commit: 75c18105b851b849fd0bdd334d18e596def67ba3
Parents: 2014832
Author: MrRaindrop <te...@gmail.com>
Authored: Wed Jul 26 11:12:49 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Wed Jul 26 11:12:49 2017 +0800

----------------------------------------------------------------------
 package.json | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/75c18105/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index ce7cc0f..32285e8 100644
--- a/package.json
+++ b/package.json
@@ -166,6 +166,7 @@
     "weex-gcanvas": "^0.4.2",
     "weex-loader": "^0.4.0",
     "weex-vdom-tester": "^0.2.0",
+    "weex-vue-bundle-util": "^0.1.3",
     "weex-wd": "^1.0.23",
     "wwp": "^0.3.5",
     "xmldom": "^0.1.27"


[15/43] incubator-weex git commit: * [html5] implementate the integrated components as render's plugin, which should have no directly dependency on render core.

Posted by ta...@apache.org.
* [html5] implementate the integrated components as render's plugin, which should have no directly dependency on render core.


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

Branch: refs/heads/0.16-dev
Commit: b1a7c02a2903edceb705698cc2181e3d6569267a
Parents: a83dfc2
Author: MrRaindrop <te...@gmail.com>
Authored: Mon Jul 17 21:18:20 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Mon Jul 17 21:20:06 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/components/a.js                |  90 +--
 html5/render/vue/components/div.js              |  43 +-
 html5/render/vue/components/image.js            |  18 +-
 html5/render/vue/components/index.js            |  34 +-
 html5/render/vue/components/input.js            | 130 +++--
 html5/render/vue/components/scrollable/cell.js  |  39 ++
 .../render/vue/components/scrollable/header.js  | 102 ++--
 html5/render/vue/components/scrollable/index.js |  29 +
 html5/render/vue/components/scrollable/list.js  |  82 +++
 .../vue/components/scrollable/list/cell.js      |  36 --
 .../vue/components/scrollable/list/index.js     |  77 ---
 .../vue/components/scrollable/list/listMixin.js |  47 --
 .../vue/components/scrollable/list/style.js     |  34 --
 .../components/scrollable/loading-indicator.js  |  17 +-
 .../render/vue/components/scrollable/loading.js | 141 ++---
 .../vue/components/scrollable/mixins/index.js   |   7 +
 .../vue/components/scrollable/mixins/list.js    |  46 ++
 .../components/scrollable/mixins/scrollable.js  | 267 +++++++++
 .../render/vue/components/scrollable/refresh.js | 157 ++---
 .../vue/components/scrollable/scroller.js       | 135 +++--
 .../render/vue/components/scrollable/style.css  |  66 +++
 .../vue/components/scrollable/waterfall.js      | 573 ++++++++++---------
 html5/render/vue/components/slider/index.js     |  69 +--
 html5/render/vue/components/slider/indicator.js |  18 +-
 .../render/vue/components/slider/slideMixin.js  |  46 +-
 .../vue/components/slider/slider-neighbor.js    |  12 +-
 html5/render/vue/components/slider/slider.js    |  75 +++
 html5/render/vue/components/switch.js           | 114 ++--
 html5/render/vue/components/text.js             |  52 +-
 html5/render/vue/components/textarea.js         | 104 ++--
 html5/render/vue/components/video.js            | 107 ++--
 html5/render/vue/components/web.js              |  98 ++--
 html5/render/vue/core/style.js                  |  35 --
 html5/render/vue/env/global.js                  |   6 +
 html5/render/vue/index.js                       |   6 +-
 html5/render/vue/mixins/base.js                 |   6 -
 html5/render/vue/mixins/index.js                |   2 -
 html5/render/vue/mixins/scrollable.js           | 233 --------
 html5/render/vue/styles/base.css                |  67 ---
 39 files changed, 1674 insertions(+), 1546 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/a.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/a.js b/html5/render/vue/components/a.js
index b4b3ef0..1d8946f 100644
--- a/html5/render/vue/components/a.js
+++ b/html5/render/vue/components/a.js
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { extractComponentStyle, trimTextVNodes, createEventMap } from '../core'
 // import { validateStyles } from '../validator'
 
 const _css = `
@@ -26,43 +25,56 @@ const _css = `
 `
 let cnt = 0
 
-export default {
-  name: 'weex-a',
-  props: {
-    href: String
-  },
-  mounted () {
-    const $el = this.$el
-    const id = $el.id
+function getA (weex) {
+  const {
+    extractComponentStyle,
+    trimTextVNodes,
+    createEventMap
+  } = weex
+
+  return {
+    name: 'weex-a',
+    props: {
+      href: String
+    },
+    mounted () {
+      const $el = this.$el
+      const id = $el.id
 
-    /**
-     * if there is a child component already triggered a click handler, then
-     * this link jumping should be prevented.
-     */
-    $el.addEventListener('click', (e) => {
-      const el = e._triggered && e._triggered.el
-      if (el && (el !== $el) && !el.querySelector(`#${id}`)) {
-        e.preventDefault()
-      }
-    })
-  },
-  render (createElement) {
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('a', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
-    this._renderHook()
-    const id = cnt++
-    return createElement('html:a', {
-      attrs: {
-        'weex-type': 'a',
-        'id': `weex-a-${id}`,
-        href: this.href
-      },
-      on: createEventMap(this),
-      staticClass: 'weex-a weex-ct',
-      staticStyle: extractComponentStyle(this)
-    }, trimTextVNodes(this.$slots.default))
-  },
-  _css
+      /**
+       * if there is a child component already triggered a click handler, then
+       * this link jumping should be prevented.
+       */
+      $el.addEventListener('click', (e) => {
+        const el = e._triggered && e._triggered.el
+        if (el && (el !== $el) && !el.querySelector(`#${id}`)) {
+          e.preventDefault()
+        }
+      })
+    },
+    render (createElement) {
+      /* istanbul ignore next */
+      // if (process.env.NODE_ENV === 'development') {
+      //   validateStyles('a', this.$vnode.data && this.$vnode.data.staticStyle)
+      // }
+      const id = cnt++
+      return createElement('html:a', {
+        attrs: {
+          'weex-type': 'a',
+          'id': `weex-a-${id}`,
+          href: this.href
+        },
+        on: createEventMap(this),
+        staticClass: 'weex-a weex-ct',
+        staticStyle: extractComponentStyle(this)
+      }, trimTextVNodes(this.$slots.default))
+    },
+    _css
+  }
+}
+
+export default {
+  init (weex) {
+    weex.registerComponent('a', getA(weex))
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/div.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/div.js b/html5/render/vue/components/div.js
index 63cdbc1..8f05163 100644
--- a/html5/render/vue/components/div.js
+++ b/html5/render/vue/components/div.js
@@ -16,8 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-// import { validateStyles } from '../validator'
-import { extractComponentStyle, trimTextVNodes, createEventMap } from '../core'
 
 const _css = `
 body > .weex-div {
@@ -25,20 +23,31 @@ body > .weex-div {
 }
 `
 
+function getDiv (weex) {
+  const {
+    extractComponentStyle,
+    trimTextVNodes,
+    createEventMap
+  } = weex
+
+  return {
+    name: 'weex-div',
+    render (createElement) {
+      return createElement('html:div', {
+        attrs: { 'weex-type': 'div' },
+        on: createEventMap(this),
+        staticClass: 'weex-div weex-ct',
+        staticStyle: extractComponentStyle(this)
+      }, trimTextVNodes(this.$slots.default))
+    },
+    _css
+  }
+}
+
 export default {
-  name: 'weex-div',
-  render (createElement) {
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('div', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
-    this._renderHook()
-    return createElement('html:div', {
-      attrs: { 'weex-type': 'div' },
-      on: createEventMap(this),
-      staticClass: 'weex-div weex-ct',
-      staticStyle: extractComponentStyle(this)
-    }, trimTextVNodes(this.$slots.default))
-  },
-  _css
+  init (weex) {
+    const div = getDiv(weex)
+    weex.registerComponent('div', div)
+    weex.registerComponent('container', div)
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/image.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/image.js b/html5/render/vue/components/image.js
index ba44d2a..d1fe664 100644
--- a/html5/render/vue/components/image.js
+++ b/html5/render/vue/components/image.js
@@ -17,8 +17,7 @@
  * under the License.
  */
 
-import { extractComponentStyle, createEventMap } from '../core'
-import { extend } from '../utils'
+let extractComponentStyle, createEventMap, extend
 
 const _css = `
 .weex-image, .weex-img {
@@ -53,7 +52,8 @@ function preProcessSrc (context, url, mergedStyle) {
   }) || url
 }
 
-export default {
+const image = {
+  name: 'weex-image',
   props: {
     src: String,
     placeholder: String,
@@ -79,7 +79,6 @@ export default {
     // const style = this._normalizeInlineStyles(this.$vnode.data)
     const resizeStyle = getResizeStyle(this)
     const style = extractComponentStyle(this)
-    this._renderHook()
     return createElement('figure', {
       attrs: {
         'weex-type': 'image',
@@ -93,3 +92,14 @@ export default {
   },
   _css
 }
+
+export default {
+  init (weex) {
+    extractComponentStyle = weex.extractComponentStyle
+    createEventMap = weex.createEventMap
+    extend = weex.utils.extend
+
+    weex.registerComponent('image', image)
+    weex.registerComponent('img', image)
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/index.js b/html5/render/vue/components/index.js
index 87ddeb0..5fdbc39 100644
--- a/html5/render/vue/components/index.js
+++ b/html5/render/vue/components/index.js
@@ -22,47 +22,23 @@ import a from './a'
 import div from './div'
 import image from './image'
 import input from './input'
-import header from './scrollable/header'
-import list from './scrollable/list'
-import waterfall from './scrollable/waterfall'
-import cell from './scrollable/list/cell'
-import scroller from './scrollable/scroller'
+import scrollable from './scrollable'
 import slider from './slider'
-import neighbor from './slider/slider-neighbor'
-// import indicator from './warning'
-import indicator from './slider/indicator'
-// import refresh from './warning'
-// import loading from './warning'
-import refresh from './scrollable/refresh'
-import loading from './scrollable/loading'
-import loadingIndicator from './scrollable/loading-indicator'
 import text from './text'
 import textarea from './textarea'
 import video from './video'
 import web from './web'
 
-export default {
+export default [
   a,
   div,
-  container: div,
   image,
-  img: image,
   input,
-  switch: _switch,
-  header,
-  list,
-  waterfall,
-  cell,
-  scroller,
+  _switch,
+  scrollable,
   slider,
-  cycleslider: slider,
-  'slider-neighbor': neighbor,
-  indicator,
-  refresh,
-  loading,
-  'loading-indicator': loadingIndicator,
   text,
   textarea,
   video,
   web
-}
+]

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/input.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/input.js b/html5/render/vue/components/input.js
index 1454988..0e8d466 100644
--- a/html5/render/vue/components/input.js
+++ b/html5/render/vue/components/input.js
@@ -21,10 +21,8 @@
  * @fileOverview Input component.
  * Support v-model only if vue version is large than 2.2.0
  */
-import { extractComponentStyle, createEventMap } from '../core'
-import { inputCommon } from '../mixins'
-import { extend, mapFormEvents, appendCss } from '../utils'
-// import { validateStyles } from '../validator'
+let extractComponentStyle, createEventMap
+let extend, mapFormEvents, appendCss
 
 const ID_PREFIX_PLACEHOLDER_COLOR = 'wipt_plc_'
 const ID_PREFIX_INPUT = 'wipt_'
@@ -68,61 +66,77 @@ function processStyle (vm) {
   return styles
 }
 
-export default {
-  mixins: [inputCommon],
-  props: {
-    type: {
-      type: String,
-      default: 'text',
-      validator (value) {
-        return [
-          'email', 'number', 'password', 'search', 'tel', 'text', 'url', 'date',
-          'datetime', 'time'
-          // unsupported type:
-          // button, checkbox, color, file, hidden, image,
-          // month, radio, range, reset, submit, week,
-        ].indexOf(value) !== -1
-      }
-    },
-    value: String,
-    placeholder: String,
-    disabled: {
-      type: [String, Boolean],
-      default: false
-    },
-    autofocus: {
-      type: [String, Boolean],
-      default: false
-    },
-    maxlength: [String, Number],
-    returnKeyType: String
-  },
+function getInput (weex) {
+  const { inputCommon } = weex.mixins
 
-  render (createElement) {
-    if (!this._id) {
-      this._id = idCount++
-    }
-    const events = extend(createEventMap(this), mapFormEvents(this))
-    this._renderHook()
-    return createElement('html:input', {
-      attrs: {
-        'weex-type': 'input',
-        id: `${ID_PREFIX_INPUT}${this._id}`,
-        type: this.type,
-        value: this.value,
-        disabled: (this.disabled !== 'false' && this.disabled !== false),
-        autofocus: (this.autofocus !== 'false' && this.autofocus !== false),
-        placeholder: this.placeholder,
-        maxlength: this.maxlength,
-        'returnKeyType': this.returnKeyType
+  return {
+    name: 'weex-input',
+    mixins: [inputCommon],
+    props: {
+      type: {
+        type: String,
+        default: 'text',
+        validator (value) {
+          return [
+            'email', 'number', 'password', 'search', 'tel', 'text', 'url', 'date',
+            'datetime', 'time'
+            // unsupported type:
+            // button, checkbox, color, file, hidden, image,
+            // month, radio, range, reset, submit, week,
+          ].indexOf(value) !== -1
+        }
+      },
+      value: String,
+      placeholder: String,
+      disabled: {
+        type: [String, Boolean],
+        default: false
       },
-      domProps: {
-        value: this.value
+      autofocus: {
+        type: [String, Boolean],
+        default: false
       },
-      on: this.createKeyboardEvent(events),
-      staticClass: 'weex-input weex-el',
-      staticStyle: processStyle(this)
-    })
-  },
-  _css
+      maxlength: [String, Number],
+      returnKeyType: String
+    },
+
+    render (createElement) {
+      if (!this._id) {
+        this._id = idCount++
+      }
+      const events = extend(createEventMap(this), mapFormEvents(this))
+      return createElement('html:input', {
+        attrs: {
+          'weex-type': 'input',
+          id: `${ID_PREFIX_INPUT}${this._id}`,
+          type: this.type,
+          value: this.value,
+          disabled: (this.disabled !== 'false' && this.disabled !== false),
+          autofocus: (this.autofocus !== 'false' && this.autofocus !== false),
+          placeholder: this.placeholder,
+          maxlength: this.maxlength,
+          'returnKeyType': this.returnKeyType
+        },
+        domProps: {
+          value: this.value
+        },
+        on: this.createKeyboardEvent(events),
+        staticClass: 'weex-input weex-el',
+        staticStyle: processStyle(this)
+      })
+    },
+    _css
+  }
+}
+
+export default {
+  init (weex) {
+    extractComponentStyle = weex.extractComponentStyle
+    createEventMap = weex.createEventMap
+    extend = weex.utils.extend
+    mapFormEvents = weex.utils.mapFormEvents
+    appendCss = weex.utils.appendCss
+
+    weex.registerComponent('input', getInput(weex))
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/cell.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/cell.js b/html5/render/vue/components/scrollable/cell.js
new file mode 100644
index 0000000..fb6ca1e
--- /dev/null
+++ b/html5/render/vue/components/scrollable/cell.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+function getCell (weex) {
+  const { extractComponentStyle, createEventMap } = weex
+  return {
+    name: 'weex-cell',
+    render (createElement) {
+      return createElement('section', {
+        attrs: { 'weex-type': 'cell' },
+        on: createEventMap(this),
+        staticClass: 'weex-cell weex-ct',
+        staticStyle: extractComponentStyle(this)
+      }, this.$slots.default)
+    }
+  }
+}
+
+export default {
+  init (weex) {
+    weex.registerComponent('cell', getCell(weex))
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/header.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/header.js b/html5/render/vue/components/scrollable/header.js
index cbb4783..35fe72a 100644
--- a/html5/render/vue/components/scrollable/header.js
+++ b/html5/render/vue/components/scrollable/header.js
@@ -16,62 +16,70 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { supportSticky } from '../../utils/style'
-import { extractComponentStyle, createEventMap } from '../../core'
 
-export default {
-  data () {
-    return {
-      sticky: false,
-      initTop: 0,
-      placeholder: null,
-      supportSticky: supportSticky()
-    }
-  },
+function getHeader (weex) {
+  const { extractComponentStyle, createEventMap } = weex
+  const { supportSticky } = weex.utils
 
-  mounted () {
-    this.initTop = this.$el.offsetTop
-    this.placeholder = window.document.createElement('div')
-  },
+  return {
+    data () {
+      return {
+        sticky: false,
+        initTop: 0,
+        placeholder: null,
+        supportSticky: supportSticky()
+      }
+    },
 
-  updated () {
-    if (!this.sticky) {
+    mounted () {
       this.initTop = this.$el.offsetTop
-    }
-  },
-
-  methods: {
-    addSticky () {
-      this.sticky = true
-      this.placeholder.style.display = 'block'
-      this.placeholder.style.width = this.$el.offsetWidth + 'px'
-      this.placeholder.style.height = this.$el.offsetHeight + 'px'
-      this.$el.parentNode.insertBefore(this.placeholder, this.$el)
+      this.placeholder = window.document.createElement('div')
     },
 
-    removeSticky () {
-      this.sticky = false
-      try {
-        this.$el.parentNode.removeChild(this.placeholder)
+    updated () {
+      if (!this.sticky) {
+        this.initTop = this.$el.offsetTop
       }
-      catch (e) {
+    },
+
+    methods: {
+      addSticky () {
+        this.sticky = true
+        this.placeholder.style.display = 'block'
+        this.placeholder.style.width = this.$el.offsetWidth + 'px'
+        this.placeholder.style.height = this.$el.offsetHeight + 'px'
+        this.$el.parentNode.insertBefore(this.placeholder, this.$el)
+      },
+
+      removeSticky () {
+        this.sticky = false
+        try {
+          this.$el.parentNode.removeChild(this.placeholder)
+        }
+        catch (e) {
+        }
       }
+    },
+
+    render (createElement) {
+      /* istanbul ignore next */
+      // if (process.env.NODE_ENV === 'development') {
+      //   validateStyles('header', this.$vnode.data && this.$vnode.data.staticStyle)
+      // }
+      return createElement('html:header', {
+        attrs: { 'weex-type': 'header' },
+        on: createEventMap(this),
+        ref: 'header',
+        staticClass: 'weex-header weex-ct',
+        class: { 'weex-sticky': this.sticky, 'weex-ios-sticky': this.supportSticky },
+        staticStyle: extractComponentStyle(this)
+      }, this.$slots.default)
     }
-  },
+  }
+}
 
-  render (createElement) {
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('header', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
-    this._renderHook()
-    return createElement('html:header', {
-      attrs: { 'weex-type': 'header' },
-      on: createEventMap(this),
-      ref: 'header',
-      staticClass: 'weex-header weex-ct',
-      class: { 'weex-sticky': this.sticky, 'weex-ios-sticky': this.supportSticky },
-      staticStyle: extractComponentStyle(this)
-    }, this.$slots.default)
+export default {
+  init (weex) {
+    weex.registerComponent('header', getHeader(weex))
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/index.js b/html5/render/vue/components/scrollable/index.js
new file mode 100644
index 0000000..3c68404
--- /dev/null
+++ b/html5/render/vue/components/scrollable/index.js
@@ -0,0 +1,29 @@
+import list from './list'
+import scroller from './scroller'
+import waterfall from './waterfall'
+import cell from './cell'
+import header from './header'
+import loading from './loading'
+import refresh from './refresh'
+import loadingIndicator from './loading-indicator'
+
+import './style.css'
+
+const modules = [
+  list,
+  scroller,
+  waterfall,
+  cell,
+  header,
+  loading,
+  refresh,
+  loadingIndicator
+]
+
+export default {
+  init (weex) {
+    modules.forEach(function (mod) {
+      weex.install(mod)
+    })
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/list.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/list.js b/html5/render/vue/components/scrollable/list.js
new file mode 100644
index 0000000..aa6740b
--- /dev/null
+++ b/html5/render/vue/components/scrollable/list.js
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { scrollable, list as listMixin } from './mixins'
+
+function getList (weex) {
+  const {
+    extractComponentStyle,
+    createEventMap
+  } = weex
+
+  return {
+    name: 'weex-list',
+    mixins: [scrollable, listMixin],
+    computed: {
+      wrapperClass () {
+        const classArray = ['weex-list', 'weex-list-wrapper', 'weex-ct']
+        this._refresh && classArray.push('with-refresh')
+        this._loading && classArray.push('with-loading')
+        return classArray.join(' ')
+      }
+    },
+
+    methods: {
+      createChildren (h) {
+        const slots = this.$slots.default || []
+        this._cells = slots.filter(vnode => {
+          if (!vnode.tag || !vnode.componentOptions) return false
+          return true
+        })
+        return [
+          h('html:div', {
+            ref: 'inner',
+            staticClass: 'weex-list-inner weex-ct'
+          }, this._cells)
+        ]
+      }
+    },
+
+    render (createElement) {
+      this.weexType = 'list'
+
+      this.$nextTick(() => {
+        this.updateLayout()
+      })
+
+      return createElement('main', {
+        ref: 'wrapper',
+        attrs: { 'weex-type': 'list' },
+        staticClass: this.wrapperClass,
+        on: createEventMap(this, {
+          scroll: this.handleListScroll,
+          touchstart: this.handleTouchStart,
+          touchmove: this.handleTouchMove,
+          touchend: this.handleTouchEnd
+        }),
+        staticStyle: extractComponentStyle(this)
+      }, this.createChildren(createElement))
+    }
+  }
+}
+
+export default {
+  init (weex) {
+    weex.registerComponent('list', getList(weex))
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/list/cell.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/list/cell.js b/html5/render/vue/components/scrollable/list/cell.js
deleted file mode 100644
index d7ddbf7..0000000
--- a/html5/render/vue/components/scrollable/list/cell.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-// import { validateStyles } from '../../../validator'
-import { extractComponentStyle, createEventMap } from '../../../core'
-
-export default {
-  render (createElement) {
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('cell', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
-    this._renderHook()
-    return createElement('section', {
-      attrs: { 'weex-type': 'cell' },
-      on: createEventMap(this),
-      staticClass: 'weex-cell weex-ct',
-      staticStyle: extractComponentStyle(this)
-    }, this.$slots.default)
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/list/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/list/index.js b/html5/render/vue/components/scrollable/list/index.js
deleted file mode 100644
index 79e6d7d..0000000
--- a/html5/render/vue/components/scrollable/list/index.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import { extractComponentStyle, createEventMap } from '../../../core'
-import { scrollable } from '../../../mixins'
-// import { validateStyles } from '../../../validator'
-import listMixin from './listMixin'
-
-export default {
-  name: 'list',
-  mixins: [scrollable, listMixin],
-  computed: {
-    wrapperClass () {
-      const classArray = ['weex-list', 'weex-list-wrapper', 'weex-ct']
-      this._refresh && classArray.push('with-refresh')
-      this._loading && classArray.push('with-loading')
-      return classArray.join(' ')
-    }
-  },
-
-  methods: {
-    createChildren (h) {
-      const slots = this.$slots.default || []
-      this._cells = slots.filter(vnode => {
-        if (!vnode.tag || !vnode.componentOptions) return false
-        return true
-      })
-      return [
-        h('html:div', {
-          ref: 'inner',
-          staticClass: 'weex-list-inner weex-ct'
-        }, this._cells)
-      ]
-    }
-  },
-
-  render (createElement) {
-    this.weexType = 'list'
-
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('list', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
-    this.$nextTick(() => {
-      this.updateLayout()
-    })
-
-    this._renderHook()
-    return createElement('main', {
-      ref: 'wrapper',
-      attrs: { 'weex-type': 'list' },
-      staticClass: this.wrapperClass,
-      on: createEventMap(this, {
-        scroll: this.handleListScroll,
-        touchstart: this.handleTouchStart,
-        touchmove: this.handleTouchMove,
-        touchend: this.handleTouchEnd
-      }),
-      staticStyle: extractComponentStyle(this)
-    }, this.createChildren(createElement))
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/list/listMixin.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/list/listMixin.js b/html5/render/vue/components/scrollable/list/listMixin.js
deleted file mode 100644
index d32d406..0000000
--- a/html5/render/vue/components/scrollable/list/listMixin.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import { supportSticky } from '../../../utils/style'
-
-export default {
-  methods: {
-    handleListScroll (event) {
-      this.handleScroll(event)
-
-      if (supportSticky()) {
-        return
-      }
-
-      const scrollTop = this.$el.scrollTop
-      const h = this.$children.filter(vm => vm.$refs.header)
-
-      if (h.length <= 0) {
-        return
-      }
-
-      for (let i = 0; i < h.length; i++) {
-        if (h[i].initTop < scrollTop) {
-          h[i].addSticky()
-        }
-        else {
-          h[i].removeSticky()
-        }
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/list/style.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/list/style.js b/html5/render/vue/components/scrollable/list/style.js
deleted file mode 100644
index 0a6aec0..0000000
--- a/html5/render/vue/components/scrollable/list/style.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-export default `
-body > .weex-list {
-  max-height: 100%;
-}
-
-.weex-list-wrapper {
-  -webkit-overflow-scrolling: touch;
-  overflow-y: scroll !important;
-  overflow-x: hidden;
-}
-
-.weex-list-inner {
-  -webkit-overflow-scrolling: touch;
-  width: 100%;
-}
-`

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/loading-indicator.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/loading-indicator.js b/html5/render/vue/components/scrollable/loading-indicator.js
index 59f141e..aa289bd 100644
--- a/html5/render/vue/components/scrollable/loading-indicator.js
+++ b/html5/render/vue/components/scrollable/loading-indicator.js
@@ -16,8 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { extractComponentStyle } from '../../core'
-import { getRgb, loopArray, getStyleSheetById } from '../../utils'
+let extractComponentStyle, getRgb, loopArray, getStyleSheetById
 
 const _css = `
 .weex-refresh-indicator,
@@ -180,10 +179,10 @@ function processStyle (vm) {
   return style
 }
 
-export default {
+const loadingIndicator = {
+  name: 'weex-loading-indicator',
   render (createElement) {
     this.weexType = 'loading-indicator'
-    this._renderHook()
     return createElement('mark', {
       attrs: { 'weex-type': 'loading-indicator' },
       staticClass: 'weex-loading-indicator weex-ct',
@@ -192,3 +191,13 @@ export default {
   },
   _css
 }
+
+export default {
+  init (weex) {
+    extractComponentStyle = weex.extractComponentStyle
+    getRgb = weex.utils.getRgb
+    loopArray = weex.utils.loopArray
+    getStyleSheetById = weex.utils.getStyleSheetById
+    weex.registerComponent('loading-indicator', loadingIndicator)
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/loading.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/loading.js b/html5/render/vue/components/scrollable/loading.js
index 9e6fa04..cd37151 100644
--- a/html5/render/vue/components/scrollable/loading.js
+++ b/html5/render/vue/components/scrollable/loading.js
@@ -16,85 +16,92 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { extractComponentStyle } from '../../core'
-import LoadingIndicator from './loading-indicator'
 
-export default {
-  components: { LoadingIndicator },
-  props: {
-    display: {
-      type: String,
-      default: 'show',
-      validator (value) {
-        return ['show', 'hide'].indexOf(value) !== -1
+function getLoading () {
+  const { extractComponentStyle } = weex
+
+  return {
+    name: 'weex-loading',
+    props: {
+      display: {
+        type: String,
+        default: 'show',
+        validator (value) {
+          return ['show', 'hide'].indexOf(value) !== -1
+        }
+      }
+    },
+    data () {
+      return {
+        height: -1,
+        viewHeight: 0
       }
-    }
-  },
-  data () {
-    return {
-      height: -1,
-      viewHeight: 0
-    }
-  },
-  mounted () {
-    this.viewHeight = this.$el.offsetHeight
-    if (this.display === 'hide') {
-      this.height = 0
-    }
-    else {
-      this.height = this.viewHeight
-    }
-  },
-  watch: {
-    height (val) {
-      this.$el.style.height = `${val}px`
     },
-    display (val) {
-      if (val === 'hide') {
+    mounted () {
+      this.viewHeight = this.$el.offsetHeight
+      if (this.display === 'hide') {
         this.height = 0
       }
       else {
         this.height = this.viewHeight
       }
-    }
-  },
-  methods: {
-    pulling (offsetY = 0) {
-      this.height = offsetY
     },
-    pullingUp (offsetY) {
-      this.$el.style.transition = `height 0s`
-      this.pulling(offsetY)
-    },
-    pullingEnd () {
-      this.$el.style.transition = `height .2s`
-      if (this.height >= this.viewHeight) {
-        this.pulling(this.viewHeight)
-        this.$emit('loading')
-      }
-      else {
-        this.pulling(0)
+    watch: {
+      height (val) {
+        this.$el.style.height = `${val}px`
+      },
+      display (val) {
+        if (val === 'hide') {
+          this.height = 0
+        }
+        else {
+          this.height = this.viewHeight
+        }
       }
     },
-    getChildren () {
-      const children = this.$slots.default || []
-      if (this.display === 'show') {
-        return children
+    methods: {
+      pulling (offsetY = 0) {
+        this.height = offsetY
+      },
+      pullingUp (offsetY) {
+        this.$el.style.transition = `height 0s`
+        this.pulling(offsetY)
+      },
+      pullingEnd () {
+        this.$el.style.transition = `height .2s`
+        if (this.height >= this.viewHeight) {
+          this.pulling(this.viewHeight)
+          this.$emit('loading')
+        }
+        else {
+          this.pulling(0)
+        }
+      },
+      getChildren () {
+        const children = this.$slots.default || []
+        if (this.display === 'show') {
+          return children
+        }
+        return children.filter(vnode => {
+          return vnode.componentOptions
+            && vnode.componentOptions.tag !== 'loading-indicator'
+        })
       }
-      return children.filter(vnode => {
-        return vnode.componentOptions
-          && vnode.componentOptions.tag !== 'loading-indicator'
-      })
+    },
+    render (createElement) {
+      this.$parent._loading = this
+      return createElement('aside', {
+        ref: 'loading',
+        attrs: { 'weex-type': 'loading' },
+        staticClass: 'weex-loading weex-ct',
+        staticStyle: extractComponentStyle(this)
+      }, this.getChildren())
     }
-  },
-  render (createElement) {
-    this.$parent._loading = this
-    this._renderHook()
-    return createElement('aside', {
-      ref: 'loading',
-      attrs: { 'weex-type': 'loading' },
-      staticClass: 'weex-loading weex-ct',
-      staticStyle: extractComponentStyle(this)
-    }, this.getChildren())
+  }
+}
+
+export default {
+  init (weex) {
+    weex.registerComponent('loading', getLoading(weex))
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/mixins/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/mixins/index.js b/html5/render/vue/components/scrollable/mixins/index.js
new file mode 100644
index 0000000..7b9b304
--- /dev/null
+++ b/html5/render/vue/components/scrollable/mixins/index.js
@@ -0,0 +1,7 @@
+import scrollable from './scrollable'
+import list from './list'
+
+export {
+  scrollable,
+  list
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/mixins/list.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/mixins/list.js b/html5/render/vue/components/scrollable/mixins/list.js
new file mode 100644
index 0000000..9c5ca8f
--- /dev/null
+++ b/html5/render/vue/components/scrollable/mixins/list.js
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+export default {
+  methods: {
+    handleListScroll (event) {
+      this.handleScroll(event)
+
+      if (weex.utils.supportSticky()) {
+        return
+      }
+
+      const scrollTop = this.$el.scrollTop
+      const h = this.$children.filter(vm => vm.$refs.header)
+
+      if (h.length <= 0) {
+        return
+      }
+
+      for (let i = 0; i < h.length; i++) {
+        if (h[i].initTop < scrollTop) {
+          h[i].addSticky()
+        }
+        else {
+          h[i].removeSticky()
+        }
+      }
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/mixins/scrollable.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/mixins/scrollable.js b/html5/render/vue/components/scrollable/mixins/scrollable.js
new file mode 100644
index 0000000..0d78db9
--- /dev/null
+++ b/html5/render/vue/components/scrollable/mixins/scrollable.js
@@ -0,0 +1,267 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+const DEFAULT_OFFSET_ACCURACY = 10
+const DEFAULT_LOADMORE_OFFSET = 0
+
+function getThrottledScroll (context) {
+  const scale = weex.config.env.scale
+  if (!context._throttleScroll) {
+    const wrapper = context.$refs.wrapper
+    const inner = context.$refs.inner
+    let preOffset = (context.scrollDirection === 'horizontal'
+        ? wrapper.scrollLeft
+        : wrapper.scrollTop)
+      || 0
+    context._throttleScroll = weex.utils.throttle(function (evt) {
+      const offset = context.scrollDirection === 'horizontal'
+        ? wrapper.scrollLeft
+        : wrapper.scrollTop
+      const indent = parseInt(context.offsetAccuracy) * scale
+      function triggerScroll () {
+        const rect = inner.getBoundingClientRect()
+        evt.contentSize = { width: rect.width, height: rect.height }
+        evt.contentOffset = {
+          x: wrapper.scrollLeft,
+          /**
+           * positive direciton for y-axis is down.
+           * so should use negative operation on scrollTop.
+           *
+           *  (0,0)---------------> x
+           *       |
+           *       |
+           *       |
+           *       |
+           *       v y
+           *
+           */
+          y: -wrapper.scrollTop
+        }
+        context.$emit('scroll', evt)
+      }
+      if (Math.abs(offset - preOffset) >= indent) {
+        triggerScroll()
+        preOffset = offset
+      }
+    }, 16, true)
+  }
+  return context._throttleScroll
+}
+
+export default {
+  props: {
+    loadmoreoffset: {
+      type: [String, Number],
+      default: DEFAULT_LOADMORE_OFFSET,
+      validator (value) {
+        const val = parseInt(value)
+        return !isNaN(val) && val >= DEFAULT_LOADMORE_OFFSET
+      }
+    },
+
+    offsetAccuracy: {
+      type: [Number, String],
+      default: DEFAULT_OFFSET_ACCURACY,
+      validator (value) {
+        const val = parseInt(value)
+        return !isNaN(val) && val >= DEFAULT_OFFSET_ACCURACY
+      }
+    }
+  },
+
+  created () {
+    // should call resetLoadmore() to enable loadmore event.
+    this._loadmoreReset = true
+  },
+
+  methods: {
+    updateLayout () {
+      const wrapper = this.$refs.wrapper
+      if (wrapper) {
+        const rect = wrapper.getBoundingClientRect()
+        this._wrapperWidth = rect.width
+        this._wrapperHeight = rect.height
+      }
+      const inner = this.$refs.inner
+      const children = inner && inner.children
+      if (inner) {
+        const rect = inner.getBoundingClientRect()
+        this._innerWidth = rect.width
+        this._innerHeight = rect.height
+      }
+      const loadingEl = this._loading && this._loading.$el
+      const refreshEl = this._refresh && this._refresh.$el
+      if (loadingEl) {
+        this._innerHeight -= loadingEl.getBoundingClientRect().height
+      }
+      if (refreshEl) {
+        this._innerHeight -= refreshEl.getBoundingClientRect().height
+      }
+      // inner width is always the viewport width somehow in horizontal
+      // scoller, therefore the inner width should be reclaculated.
+      if (this.scrollDirection === 'horizontal' && children) {
+        this._innerWidth = weex.utils.getRangeWidth(inner)
+      }
+    },
+
+    resetLoadmore () {
+      this._loadmoreReset = true
+    },
+
+    /**
+     * process sticky children in scrollable components.
+     * current only support list and vertical scroller.
+     */
+    processSticky () {
+      /**
+       * current browser support 'sticky' or '-webkit-sticky', so there's no need
+       * to do further more.
+       */
+      if (weex.utils.supportSticky()) {
+        return
+      }
+      // current only support list and vertical scroller.
+      if (this.scrollDirection === 'horizontal') {
+        return
+      }
+      const stickyChildren = this._stickyChildren
+      const len = stickyChildren && stickyChildren.length || 0
+      if (len <= 0) { return }
+
+      const container = this.$el
+      if (!container) { return }
+      const scrollTop = container.scrollTop
+
+      let stickyChild
+      for (let i = 0; i < len; i++) {
+        stickyChild = stickyChildren[i]
+        if (stickyChild._initOffsetTop < scrollTop) {
+          stickyChild._addSticky()
+        }
+        else {
+          stickyChild._removeSticky()
+        }
+      }
+    },
+
+    handleScroll (event) {
+      weex.utils.getThrottleLazyload(25, this.$el, 'scroll')()
+      getThrottledScroll(this)(event)
+
+      this.processSticky()
+
+      // fire loadmore event.
+      const inner = this.$refs.inner
+      if (inner) {
+        const innerLength = this.scrollDirection === 'horizontal'
+          ? this._innerWidth
+          : this._innerHeight
+        if (!this._innerLength) {
+          this._innerLength = innerLength
+        }
+        if (this._innerLength !== innerLength) {
+          this._innerLength = innerLength
+          this._loadmoreReset = true
+        }
+        if (this._loadmoreReset && this.reachBottom(this.loadmoreoffset)) {
+          this._loadmoreReset = false
+          this.$emit('loadmore', event)
+        }
+      }
+    },
+
+    reachTop () {
+      const wrapper = this.$refs.wrapper
+      return (!!wrapper) && (wrapper.scrollTop <= 0)
+    },
+
+    reachBottom (offset) {
+      const wrapper = this.$refs.wrapper
+      const inner = this.$refs.inner
+      offset = parseInt(offset || 0) * weex.config.env.scale
+
+      if (wrapper && inner) {
+        const key = this.scrollDirection === 'horizontal'
+          ? 'width'
+          : 'height'
+        const innerLength = this[`_inner${key[0].toUpperCase()}${key.substr(1)}`]
+        const wrapperLength = this[`_wrapper${key[0].toUpperCase()}${key.substr(1)}`]
+        const scrollOffset = this.scrollDirection === 'horizontal'
+          ? wrapper.scrollLeft
+          : wrapper.scrollTop
+        return scrollOffset >= innerLength - wrapperLength - offset
+      }
+      return false
+    },
+
+    handleTouchStart (event) {
+      // event.preventDefault()
+      // event.stopPropagation()
+      if (this._loading || this._refresh) {
+        const touch = event.changedTouches[0]
+        this._touchParams = {
+          reachTop: this.reachTop(),
+          reachBottom: this.reachBottom(),
+          startTouchEvent: touch,
+          startX: touch.pageX,
+          startY: touch.pageY,
+          timeStamp: event.timeStamp
+        }
+      }
+    },
+
+    handleTouchMove (event) {
+      // event.preventDefault()
+      // event.stopPropagation()
+      if (this._touchParams) {
+        const inner = this.$refs.inner
+        const { startY, reachTop, reachBottom } = this._touchParams
+        if (inner) {
+          const touch = event.changedTouches[0]
+          const offsetY = touch.pageY - startY
+          this._touchParams.offsetY = offsetY
+          if (reachTop && this._refresh) {
+            this._refresh.pullingDown(offsetY)
+          }
+          else if (reachBottom && this._loading) {
+            this._loading.pullingUp(-offsetY)
+          }
+        }
+      }
+    },
+
+    handleTouchEnd (event) {
+      // event.preventDefault()
+      // event.stopPropagation()
+      if (this._touchParams) {
+        const inner = this.$refs.inner
+        const { reachTop, reachBottom } = this._touchParams
+        if (inner) {
+          if (reachTop && this._refresh) {
+            this._refresh.pullingEnd()
+          }
+          else if (reachBottom && this._loading) {
+            this._loading.pullingEnd()
+          }
+        }
+      }
+      delete this._touchParams
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/refresh.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/refresh.js b/html5/render/vue/components/scrollable/refresh.js
index f0afca4..214a189 100644
--- a/html5/render/vue/components/scrollable/refresh.js
+++ b/html5/render/vue/components/scrollable/refresh.js
@@ -16,93 +16,100 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { extractComponentStyle } from '../../core'
-import LoadingIndicator from './loading-indicator'
-import { createEvent } from '../../utils'
 
-export default {
-  components: { LoadingIndicator },
-  props: {
-    display: {
-      type: String,
-      default: 'show',
-      validator (value) {
-        return ['show', 'hide'].indexOf(value) !== -1
+function getRefresh (weex) {
+  const { extractComponentStyle } = weex
+  const { createEvent } = weex.utils
+
+  return {
+    name: 'weex-refresh',
+    props: {
+      display: {
+        type: String,
+        default: 'show',
+        validator (value) {
+          return ['show', 'hide'].indexOf(value) !== -1
+        }
+      }
+    },
+    data () {
+      return {
+        lastDy: 0,
+        viewHeight: 0,
+        height: -1
       }
-    }
-  },
-  data () {
-    return {
-      lastDy: 0,
-      viewHeight: 0,
-      height: -1
-    }
-  },
-  mounted () {
-    this.viewHeight = this.$el.offsetHeight
-    if (this.display === 'hide') {
-      this.height = 0
-    }
-    else {
-      this.height = this.viewHeight
-    }
-  },
-  watch: {
-    height (val) {
-      this.$el.style.height = `${val}px`
     },
-    display (val) {
-      if (val === 'hide') {
+    mounted () {
+      this.viewHeight = this.$el.offsetHeight
+      if (this.display === 'hide') {
         this.height = 0
       }
       else {
         this.height = this.viewHeight
       }
-    }
-  },
-  methods: {
-    pulling (offsetY = 0) {
-      this.height = offsetY
-      this.$emit('pullingdown', createEvent(this, 'pullingdown', {
-        dy: offsetY - this.lastDy,
-        pullingDistance: offsetY,
-        viewHeight: this.viewHeight
-      }))
-      this.lastDy = offsetY
     },
-    pullingDown (offsetY) {
-      this.$el.style.transition = `height 0s`
-      this.pulling(offsetY)
-    },
-    pullingEnd () {
-      this.$el.style.transition = `height .2s`
-      if (this.height >= this.viewHeight) {
-        this.pulling(this.viewHeight)
-        this.$emit('refresh')
-      }
-      else {
-        this.pulling(0)
+    watch: {
+      height (val) {
+        this.$el.style.height = `${val}px`
+      },
+      display (val) {
+        if (val === 'hide') {
+          this.height = 0
+        }
+        else {
+          this.height = this.viewHeight
+        }
       }
     },
-    getChildren () {
-      const children = this.$slots.default || []
-      if (this.display === 'show') {
-        return children
+    methods: {
+      pulling (offsetY = 0) {
+        this.height = offsetY
+        this.$emit('pullingdown', createEvent(this, 'pullingdown', {
+          dy: offsetY - this.lastDy,
+          pullingDistance: offsetY,
+          viewHeight: this.viewHeight
+        }))
+        this.lastDy = offsetY
+      },
+      pullingDown (offsetY) {
+        this.$el.style.transition = `height 0s`
+        this.pulling(offsetY)
+      },
+      pullingEnd () {
+        this.$el.style.transition = `height .2s`
+        if (this.height >= this.viewHeight) {
+          this.pulling(this.viewHeight)
+          this.$emit('refresh')
+        }
+        else {
+          this.pulling(0)
+        }
+      },
+      getChildren () {
+        const children = this.$slots.default || []
+        if (this.display === 'show') {
+          return children
+        }
+        return children.filter(vnode => {
+          return vnode.componentOptions
+            && vnode.componentOptions.tag !== 'loading-indicator'
+        })
       }
-      return children.filter(vnode => {
-        return vnode.componentOptions
-          && vnode.componentOptions.tag !== 'loading-indicator'
-      })
+    },
+    render (createElement) {
+      this.$parent._refresh = this
+      return createElement('aside', {
+        ref: 'refresh',
+        attrs: { 'weex-type': 'refresh' },
+        staticClass: 'weex-refresh weex-ct',
+        staticStyle: extractComponentStyle(this)
+      }, this.getChildren())
     }
-  },
-  render (createElement) {
-    this.$parent._refresh = this
-    this._renderHook()
-    return createElement('aside', {
-      ref: 'refresh',
-      attrs: { 'weex-type': 'refresh' },
-      staticClass: 'weex-refresh weex-ct',
-      staticStyle: extractComponentStyle(this)
-    }, this.getChildren())
+  }
+}
+
+export default {
+  init (weex) {
+    weex.registerComponent('refresh', getRefresh(weex))
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/scroller.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/scroller.js b/html5/render/vue/components/scrollable/scroller.js
index 1eebab3..cda95b8 100644
--- a/html5/render/vue/components/scrollable/scroller.js
+++ b/html5/render/vue/components/scrollable/scroller.js
@@ -16,77 +16,88 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { extractComponentStyle, createEventMap } from '../../core'
-import { scrollable } from '../../mixins'
-// import { validateStyles } from '../../validator'
-import listMixin from './list/listMixin'
 
-export default {
-  mixins: [scrollable, listMixin],
-  props: {
-    scrollDirection: {
-      type: [String],
-      default: 'vertical',
-      validator (value) {
-        return ['horizontal', 'vertical'].indexOf(value) !== -1
+import { scrollable, list as listMixin } from './mixins'
+
+function getScroller (weex) {
+  const {
+    extractComponentStyle,
+    createEventMap
+  } = weex
+
+  return {
+    name: 'weex-scroller',
+    mixins: [scrollable, listMixin],
+    props: {
+      scrollDirection: {
+        type: [String],
+        default: 'vertical',
+        validator (value) {
+          return ['horizontal', 'vertical'].indexOf(value) !== -1
+        }
       }
-    }
-  },
+    },
 
-  computed: {
-    wrapperClass () {
-      const classArray = ['weex-scroller', 'weex-scroller-wrapper', 'weex-ct']
-      if (this.scrollDirection === 'horizontal') {
-        classArray.push('weex-scroller-horizontal')
+    computed: {
+      wrapperClass () {
+        const classArray = ['weex-scroller', 'weex-scroller-wrapper', 'weex-ct']
+        if (this.scrollDirection === 'horizontal') {
+          classArray.push('weex-scroller-horizontal')
+        }
+        else {
+          classArray.push('weex-scroller-vertical')
+        }
+        return classArray.join(' ')
       }
-      else {
-        classArray.push('weex-scroller-vertical')
+    },
+
+    methods: {
+      createChildren (h) {
+        const slots = this.$slots.default || []
+        this._cells = slots.filter(vnode => {
+          if (!vnode.tag || !vnode.componentOptions) return false
+          return true
+        })
+        return [
+          h('html:div', {
+            ref: 'inner',
+            staticClass: 'weex-scroller-inner weex-ct'
+          }, this._cells)
+        ]
       }
-      return classArray.join(' ')
-    }
-  },
+    },
 
-  methods: {
-    createChildren (h) {
-      const slots = this.$slots.default || []
-      this._cells = slots.filter(vnode => {
-        if (!vnode.tag || !vnode.componentOptions) return false
-        return true
-      })
-      return [
-        h('html:div', {
-          ref: 'inner',
-          staticClass: 'weex-scroller-inner weex-ct'
-        }, this._cells)
-      ]
-    }
-  },
+    render (createElement) {
+      this.weexType = 'scroller'
 
-  render (createElement) {
-    this.weexType = 'scroller'
+      /* istanbul ignore next */
+      // if (process.env.NODE_ENV === 'development') {
+      //   validateStyles('scroller', this.$vnode.data && this.$vnode.data.staticStyle)
+      // }
 
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('scroller', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
+      this._cells = this.$slots.default || []
+      this.$nextTick(() => {
+        this.updateLayout()
+      })
 
-    this._cells = this.$slots.default || []
-    this.$nextTick(() => {
-      this.updateLayout()
-    })
+      return createElement('main', {
+        ref: 'wrapper',
+        attrs: { 'weex-type': 'scroller' },
+        on: createEventMap(this, {
+          scroll: this.handleScroll,
+          touchstart: this.handleTouchStart,
+          touchmove: this.handleTouchMove,
+          touchend: this.handleTouchEnd
+        }),
+        staticClass: this.wrapperClass,
+        staticStyle: extractComponentStyle(this)
+      }, this.createChildren(createElement))
+    }
+  }
+}
 
-    this._renderHook()
-    return createElement('main', {
-      ref: 'wrapper',
-      attrs: { 'weex-type': 'scroller' },
-      on: createEventMap(this, {
-        scroll: this.handleScroll,
-        touchstart: this.handleTouchStart,
-        touchmove: this.handleTouchMove,
-        touchend: this.handleTouchEnd
-      }),
-      staticClass: this.wrapperClass,
-      staticStyle: extractComponentStyle(this)
-    }, this.createChildren(createElement))
+export default {
+  init (weex) {
+    weex.registerComponent('scroller', getScroller(weex))
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/style.css
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/style.css b/html5/render/vue/components/scrollable/style.css
new file mode 100644
index 0000000..c026113
--- /dev/null
+++ b/html5/render/vue/components/scrollable/style.css
@@ -0,0 +1,66 @@
+body > .weex-list,
+body > .weex-scroller,
+body > .weex-waterfall {
+  max-height: 100%;
+}
+
+.weex-list-wrapper,
+.weex-scroller-wrapper,
+.weex-waterfall-wrapper {
+  -webkit-overflow-scrolling: touch;
+}
+
+.weex-list-wrapper,
+.weex-waterfall-wrapper {
+  overflow-y: scroll !important;
+  overflow-x: hidden !important;
+}
+
+.weex-list-inner,
+.weex-scroller-inner,
+.weex-waterfall-inner {
+  -webkit-overflow-scrolling: touch;
+}
+
+.weex-waterfall-inner-columns {
+  -webkit-flex-direction: row;
+      -ms-flex-direction: row;
+          flex-direction: row;
+  -webkit-box-orient: horizontal;
+}
+
+.weex-scroller-wrapper.weex-scroller-vertical {
+  overflow-x: hidden;
+  overflow-y: scroll;
+}
+
+.weex-scroller-wrapper.weex-scroller-horizontal {
+  overflow-x: scroll;
+  overflow-y: hidden;
+}
+
+.weex-scroller-horizontal .weex-scroller-inner {
+  -webkit-flex-direction: row;
+      -ms-flex-direction: row;
+          flex-direction: row;
+  -webkit-box-orient: horizontal;
+  height: 100%;
+}
+
+.weex-cell {
+  width: 100%;
+}
+
+.weex-refresh,
+.weex-loading {
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+  width: 100%;
+  overflow: hidden;
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/scrollable/waterfall.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/waterfall.js b/html5/render/vue/components/scrollable/waterfall.js
index 012c1d2..82b2295 100644
--- a/html5/render/vue/components/scrollable/waterfall.js
+++ b/html5/render/vue/components/scrollable/waterfall.js
@@ -21,317 +21,330 @@
  * @fileoverview waterfall
  * NOTE: only support full screen width waterfall.
  */
-import { extractComponentStyle, createEventMap } from '../../core'
-import { scrollable } from '../../mixins'
+
+import { scrollable } from './mixins'
 
 const NORMAL_GAP_SIZE = 32
 const DEFAULT_COLUMN_COUNT = 1
 
-export default {
-  mixins: [scrollable],
-  props: {
-    /**
-     * specified gap size.
-     * value can be number or 'normal'. 'normal' (32px) by default.
-     */
-    columnGap: {
-      type: [String, Number],
-      default: 'normal',
-      validator (val) {
-        if (!val || val === 'normal') {
-          return true
+function getWaterfall (weex) {
+  const {
+    extractComponentStyle,
+    createEventMap
+  } = weex
+
+  return {
+    name: 'weex-waterfall',
+    mixins: [scrollable],
+    props: {
+      /**
+       * specified gap size.
+       * value can be number or 'normal'. 'normal' (32px) by default.
+       */
+      columnGap: {
+        type: [String, Number],
+        default: 'normal',
+        validator (val) {
+          if (!val || val === 'normal') {
+            return true
+          }
+          val = parseInt(val)
+          return !isNaN(val) && val > 0
+        }
+      },
+      /**
+       * the maximum column counts.
+       * value can be number or 'auto'. 1 by default.
+       */
+      columnCount: {
+        type: [String, Number],
+        default: DEFAULT_COLUMN_COUNT,
+        validator (val) {
+          val = parseInt(val)
+          return !isNaN(val) && val > 0
+        }
+      },
+      /**
+       * the mimimum column width.
+       * value can be number or 'auto'. 'auto' by default.
+       */
+      columnWidth: {
+        type: [String, Number],
+        default: 'auto',
+        validator (val) {
+          if (!val || val === 'auto') {
+            return true
+          }
+          val = parseInt(val)
+          return !isNaN(val) && val > 0
         }
-        val = parseInt(val)
-        return !isNaN(val) && val > 0
       }
     },
-    /**
-     * the maximum column counts.
-     * value can be number or 'auto'. 1 by default.
-     */
-    columnCount: {
-      type: [String, Number],
-      default: DEFAULT_COLUMN_COUNT,
-      validator (val) {
-        val = parseInt(val)
-        return !isNaN(val) && val > 0
-      }
+
+    mounted () {
+      this._nextTick()
     },
-    /**
-     * the mimimum column width.
-     * value can be number or 'auto'. 'auto' by default.
-     */
-    columnWidth: {
-      type: [String, Number],
-      default: 'auto',
-      validator (val) {
-        if (!val || val === 'auto') {
-          return true
-        }
-        val = parseInt(val)
-        return !isNaN(val) && val > 0
-      }
-    }
-  },
 
-  mounted () {
-    this._nextTick()
-  },
+    updated () {
+      this.$nextTick(this._nextTick())
+    },
 
-  updated () {
-    this.$nextTick(this._nextTick())
-  },
+    methods: {
+      _createChildren (h, rootStyle) {
+        const slots = this.$slots.default || []
+        this._headers = []
+        this._others = []
+        this._cells = slots.filter(vnode => {
+          if (!vnode.tag || !vnode.componentOptions) return false
+          const tag = vnode.componentOptions.tag
+          if (tag === 'refresh' || tag === 'loading') {
+            this[`_${tag}`] = vnode
+            return false
+          }
+          if (tag === 'header') {
+            this._headers.push(vnode)
+            return false
+          }
+          if (tag !== 'cell') {
+            this._others.push(vnode)
+            return false
+          }
+          return true
+        })
+        this._reCalc(rootStyle)
+        this._genColumns(h)
+        let children = []
+        this._refresh && children.push(this._refresh)
+        children = children
+          .concat(this._headers)
+          .concat(this._others)
+        children.push(h('html:div', {
+          ref: 'columns',
+          staticClass: 'weex-waterfall-inner-columns weex-ct'
+        }, this._columns))
+        this._loading && children.push(this._loading)
+        return [
+          h('html:div', {
+            ref: 'inner',
+            staticClass: 'weex-waterfall-inner weex-ct'
+          }, children)
+        ]
+      },
 
-  methods: {
-    _createChildren (h, rootStyle) {
-      const slots = this.$slots.default || []
-      this._headers = []
-      this._others = []
-      this._cells = slots.filter(vnode => {
-        if (!vnode.tag || !vnode.componentOptions) return false
-        const tag = vnode.componentOptions.tag
-        if (tag === 'refresh' || tag === 'loading') {
-          this[`_${tag}`] = vnode
-          return false
+      _reCalc (rootStyle) {
+        /**
+         * NOTE: columnGap and columnWidth can't both be auto.
+         * NOTE: the formula:
+         *  totalWidth = n * w + (n - 1) * gap
+         * 1. if columnCount = n then calc w
+         * 2. if columnWidth = w then calc n
+         * 3. if columnWidth = w and columnCount = n then calc totalWidth
+         *    3.1 if totalWidth < ctWidth then increase columnWidth
+         *    3.2 if totalWidth > ctWidth then decrease columnCount
+         */
+        let width, gap, cnt, ctWidth
+        const scale = weex.config.env.scale
+        const el = this.$el
+        function getCtWidth (width, style) {
+          const padding = style.padding
+            ? parseInt(style.padding) * 2
+            : parseInt(style.paddingLeft || 0) + parseInt(style.paddingRight || 0)
+          return width - padding
         }
-        if (tag === 'header') {
-          this._headers.push(vnode)
-          return false
+        if (el && el.nodeType === 1) {  // already mounted
+          const cstyle = window.getComputedStyle(el)
+          ctWidth = getCtWidth(el.getBoundingClientRect().width, cstyle)
         }
-        if (tag !== 'cell') {
-          this._others.push(vnode)
-          return false
+        else {  // not mounted.
+          // only support full screen width for waterfall component.
+          ctWidth = getCtWidth(document.documentElement.clientWidth, rootStyle)
         }
-        return true
-      })
-      this._reCalc(rootStyle)
-      this._genColumns(h)
-      let children = []
-      this._refresh && children.push(this._refresh)
-      children = children
-        .concat(this._headers)
-        .concat(this._others)
-      children.push(h('html:div', {
-        ref: 'columns',
-        staticClass: 'weex-waterfall-inner-columns weex-ct'
-      }, this._columns))
-      this._loading && children.push(this._loading)
-      return [
-        h('html:div', {
-          ref: 'inner',
-          staticClass: 'weex-waterfall-inner weex-ct'
-        }, children)
-      ]
-    },
 
-    _reCalc (rootStyle) {
-      /**
-       * NOTE: columnGap and columnWidth can't both be auto.
-       * NOTE: the formula:
-       *  totalWidth = n * w + (n - 1) * gap
-       * 1. if columnCount = n then calc w
-       * 2. if columnWidth = w then calc n
-       * 3. if columnWidth = w and columnCount = n then calc totalWidth
-       *    3.1 if totalWidth < ctWidth then increase columnWidth
-       *    3.2 if totalWidth > ctWidth then decrease columnCount
-       */
-      let width, gap, cnt, ctWidth
-      const scale = weex.config.env.scale
-      const el = this.$el
-      function getCtWidth (width, style) {
-        const padding = style.padding
-          ? parseInt(style.padding) * 2
-          : parseInt(style.paddingLeft || 0) + parseInt(style.paddingRight || 0)
-        return width - padding
-      }
-      if (el && el.nodeType === 1) {  // already mounted
-        const cstyle = window.getComputedStyle(el)
-        ctWidth = getCtWidth(el.getBoundingClientRect().width, cstyle)
-      }
-      else {  // not mounted.
-        // only support full screen width for waterfall component.
-        ctWidth = getCtWidth(document.documentElement.clientWidth, rootStyle)
-      }
-
-      gap = this.columnGap
-      if (gap && gap !== 'normal') {
-        gap = parseInt(gap)
-      }
-      else {
-        gap = NORMAL_GAP_SIZE
-      }
-      gap = gap * scale
-
-      width = this.columnWidth
-      cnt = this.columnCount
-      if (width && width !== 'auto') {
-        width = parseInt(width) * scale
-      }
-      if (cnt && cnt !== 'auto') {
-        cnt = parseInt(cnt)
-      }
+        gap = this.columnGap
+        if (gap && gap !== 'normal') {
+          gap = parseInt(gap)
+        }
+        else {
+          gap = NORMAL_GAP_SIZE
+        }
+        gap = gap * scale
 
-      // 0. if !columnCount && !columnWidth
-      if (cnt === 'auto' && width === 'auto') {
-        if (process.env.NODE_ENV === 'development') {
-          console.warn(`[vue-render] waterfall's columnWidth and columnCount shouldn't`
-          + ` both be auto at the same time.`)
-          cnt = DEFAULT_COLUMN_COUNT
-          width = ctWidth
+        width = this.columnWidth
+        cnt = this.columnCount
+        if (width && width !== 'auto') {
+          width = parseInt(width) * scale
         }
-      }
-      // 1. if columnCount = n then calc w.
-      else if (cnt !== 'auto' && width === 'auto') {
-        width = (ctWidth - (cnt - 1) * gap) / cnt
-      }
-      // 2. if columnWidth = w then calc n.
-      else if (cnt === 'auto' && width !== 'auto') {
-        cnt = (ctWidth + gap) / (width + gap)
-      }
-      // 3. if columnWidth = w and columnCount = n then calc totalWidth
-      else if (cnt !== 'auto' && width !== 'auto') {
-        let totalWidth
-        const adjustCountAndWidth = () => {
-          totalWidth = cnt * width + (cnt - 1) * gap
-          if (totalWidth < ctWidth) {
-            width += (ctWidth - totalWidth) / cnt
-          }
-          else if (totalWidth > ctWidth && cnt > 1) {
-            cnt--
-            adjustCountAndWidth()
-          }
-          else if (totalWidth > ctWidth) {  // cnt === 1
+        if (cnt && cnt !== 'auto') {
+          cnt = parseInt(cnt)
+        }
+
+        // 0. if !columnCount && !columnWidth
+        if (cnt === 'auto' && width === 'auto') {
+          if (process.env.NODE_ENV === 'development') {
+            console.warn(`[vue-render] waterfall's columnWidth and columnCount shouldn't`
+            + ` both be auto at the same time.`)
+            cnt = DEFAULT_COLUMN_COUNT
             width = ctWidth
           }
         }
-        adjustCountAndWidth()
-      }
-      this._columnCount = cnt
-      this._columnWidth = width
-      this._columnGap = gap
-    },
-
-    _genColumns (createElement) {
-      this._columns = []
-      const cells = this._cells
-      const columnCnt = this._columnCount
-      const len = cells.length
-      const columnCells = this._columnCells = Array(columnCnt).join('.').split('.').map(function () { return [] })
-      // spread cells to the columns using simpole polling algorithm.
-      for (let i = 0; i < len; i++) {
-        (cells[i].data.attrs || (cells[i].data.attrs = {}))['data-cell'] = i
-        columnCells[i % columnCnt].push(cells[i])
-      }
-      for (let i = 0; i < columnCnt; i++) {
-        this._columns.push(createElement('html:div', {
-          ref: `column${i}`,
-          attrs: {
-            'data-column': i
-          },
-          staticClass: 'weex-ct',
-          staticStyle: {
-            width: this._columnWidth + 'px',
-            marginLeft: i === 0 ? 0 : this._columnGap + 'px'
+        // 1. if columnCount = n then calc w.
+        else if (cnt !== 'auto' && width === 'auto') {
+          width = (ctWidth - (cnt - 1) * gap) / cnt
+        }
+        // 2. if columnWidth = w then calc n.
+        else if (cnt === 'auto' && width !== 'auto') {
+          cnt = (ctWidth + gap) / (width + gap)
+        }
+        // 3. if columnWidth = w and columnCount = n then calc totalWidth
+        else if (cnt !== 'auto' && width !== 'auto') {
+          let totalWidth
+          const adjustCountAndWidth = () => {
+            totalWidth = cnt * width + (cnt - 1) * gap
+            if (totalWidth < ctWidth) {
+              width += (ctWidth - totalWidth) / cnt
+            }
+            else if (totalWidth > ctWidth && cnt > 1) {
+              cnt--
+              adjustCountAndWidth()
+            }
+            else if (totalWidth > ctWidth) {  // cnt === 1
+              width = ctWidth
+            }
           }
-        }, columnCells[i]))
-      }
-    },
+          adjustCountAndWidth()
+        }
+        this._columnCount = cnt
+        this._columnWidth = width
+        this._columnGap = gap
+      },
 
-    _nextTick () {
-      this._reLayoutChildren()
-    },
+      _genColumns (createElement) {
+        this._columns = []
+        const cells = this._cells
+        const columnCnt = this._columnCount
+        const len = cells.length
+        const columnCells = this._columnCells = Array(columnCnt).join('.').split('.').map(function () { return [] })
+        // spread cells to the columns using simpole polling algorithm.
+        for (let i = 0; i < len; i++) {
+          (cells[i].data.attrs || (cells[i].data.attrs = {}))['data-cell'] = i
+          columnCells[i % columnCnt].push(cells[i])
+        }
+        for (let i = 0; i < columnCnt; i++) {
+          this._columns.push(createElement('html:div', {
+            ref: `column${i}`,
+            attrs: {
+              'data-column': i
+            },
+            staticClass: 'weex-ct',
+            staticStyle: {
+              width: this._columnWidth + 'px',
+              marginLeft: i === 0 ? 0 : this._columnGap + 'px'
+            }
+          }, columnCells[i]))
+        }
+      },
 
-    _reLayoutChildren () {
-      /**
-       * treat the shortest column bottom as the match standard.
-       * whichever cell exceeded it would be rearranged.
-       * 1. m = shortest column bottom.
-       * 2. get all cell ids who is below m.
-       * 3. calculate which cell should be in which column.
-       */
-      const columnCnt = this._columnCount
-      const columnDoms = []
-      const columnAppendFragments = []
-      const columnBottoms = []
-      let minBottom = Number.MAX_SAFE_INTEGER
-      let minBottomColumnIndex = 0
+      _nextTick () {
+        this._reLayoutChildren()
+      },
 
-      // 1. find the shortest column bottom.
-      for (let i = 0; i < columnCnt; i++) {
-        const columnDom = this._columns[i].elm
-        const lastChild = columnDom.lastElementChild
-        const bottom = lastChild ? lastChild.getBoundingClientRect().bottom : 0
-        columnDoms.push(columnDom)
-        columnBottoms[i] = bottom
-        columnAppendFragments.push(document.createDocumentFragment())
-        if (bottom < minBottom) {
-          minBottom = bottom
-          minBottomColumnIndex = i
-        }
-      }
+      _reLayoutChildren () {
+        /**
+         * treat the shortest column bottom as the match standard.
+         * whichever cell exceeded it would be rearranged.
+         * 1. m = shortest column bottom.
+         * 2. get all cell ids who is below m.
+         * 3. calculate which cell should be in which column.
+         */
+        const columnCnt = this._columnCount
+        const columnDoms = []
+        const columnAppendFragments = []
+        const columnBottoms = []
+        let minBottom = Number.MAX_SAFE_INTEGER
+        let minBottomColumnIndex = 0
 
-      // 2. get all cell ids who is below m.
-      const belowCellIds = []
-      const belowCells = {}
-      for (let i = 0; i < columnCnt; i++) {
-        if (i === minBottomColumnIndex) {
-          continue
+        // 1. find the shortest column bottom.
+        for (let i = 0; i < columnCnt; i++) {
+          const columnDom = this._columns[i].elm
+          const lastChild = columnDom.lastElementChild
+          const bottom = lastChild ? lastChild.getBoundingClientRect().bottom : 0
+          columnDoms.push(columnDom)
+          columnBottoms[i] = bottom
+          columnAppendFragments.push(document.createDocumentFragment())
+          if (bottom < minBottom) {
+            minBottom = bottom
+            minBottomColumnIndex = i
+          }
         }
-        const columnDom = columnDoms[i]
-        const cellsInColumn = columnDom.querySelectorAll('section.weex-cell')
-        const len = cellsInColumn.length
-        for (let j = len - 1; j >= 0; j--) {
-          const cellDom = cellsInColumn[j]
-          const cellRect = cellDom.getBoundingClientRect()
-          if (cellRect.top > minBottom) {
-            const id = ~~cellDom.getAttribute('data-cell')
-            belowCellIds.push(id)
-            belowCells[id] = { elm: cellDom, height: cellRect.height }
-            columnBottoms[i] -= cellRect.height
+
+        // 2. get all cell ids who is below m.
+        const belowCellIds = []
+        const belowCells = {}
+        for (let i = 0; i < columnCnt; i++) {
+          if (i === minBottomColumnIndex) {
+            continue
+          }
+          const columnDom = columnDoms[i]
+          const cellsInColumn = columnDom.querySelectorAll('section.weex-cell')
+          const len = cellsInColumn.length
+          for (let j = len - 1; j >= 0; j--) {
+            const cellDom = cellsInColumn[j]
+            const cellRect = cellDom.getBoundingClientRect()
+            if (cellRect.top > minBottom) {
+              const id = ~~cellDom.getAttribute('data-cell')
+              belowCellIds.push(id)
+              belowCells[id] = { elm: cellDom, height: cellRect.height }
+              columnBottoms[i] -= cellRect.height
+            }
           }
         }
-      }
 
-      // 3. calculate which cell should be in which column and rearrange them
-      //  in the dom tree.
-      belowCellIds.sort(function (a, b) { return a > b })
-      const cellIdsLen = belowCellIds.length
-      function addToShortestColumn (belowCell) {
-        // find shortest bottom.
-        minBottom = Math.min(...columnBottoms)
-        minBottomColumnIndex = columnBottoms.indexOf(minBottom)
-        const { elm: cellElm, height: cellHeight } = belowCell
-        columnAppendFragments[minBottomColumnIndex].appendChild(cellElm)
-        columnBottoms[minBottomColumnIndex] += cellHeight
-      }
-      for (let i = 0; i < cellIdsLen; i++) {
-        addToShortestColumn(belowCells[belowCellIds[i]])
-      }
-      for (let i = 0; i < columnCnt; i++) {
-        columnDoms[i].appendChild(columnAppendFragments[i])
+        // 3. calculate which cell should be in which column and rearrange them
+        //  in the dom tree.
+        belowCellIds.sort(function (a, b) { return a > b })
+        const cellIdsLen = belowCellIds.length
+        function addToShortestColumn (belowCell) {
+          // find shortest bottom.
+          minBottom = Math.min(...columnBottoms)
+          minBottomColumnIndex = columnBottoms.indexOf(minBottom)
+          const { elm: cellElm, height: cellHeight } = belowCell
+          columnAppendFragments[minBottomColumnIndex].appendChild(cellElm)
+          columnBottoms[minBottomColumnIndex] += cellHeight
+        }
+        for (let i = 0; i < cellIdsLen; i++) {
+          addToShortestColumn(belowCells[belowCellIds[i]])
+        }
+        for (let i = 0; i < columnCnt; i++) {
+          columnDoms[i].appendChild(columnAppendFragments[i])
+        }
       }
+    },
+
+    render (createElement) {
+      this.weexType = 'waterfall'
+      this._cells = this.$slots.default || []
+      this.$nextTick(() => {
+        this.updateLayout()
+      })
+      const mergedStyle = extractComponentStyle(this)
+      return createElement('main', {
+        ref: 'wrapper',
+        attrs: { 'weex-type': 'waterfall' },
+        on: createEventMap(this, {
+          scroll: this.handleScroll,
+          touchstart: this.handleTouchStart,
+          touchmove: this.handleTouchMove,
+          touchend: this.handleTouchEnd
+        }),
+        staticClass: 'weex-waterfall weex-waterfall-wrapper weex-ct',
+        staticStyle: mergedStyle
+      }, this._createChildren(createElement, mergedStyle))
     }
-  },
+  }
+}
 
-  render (createElement) {
-    this.weexType = 'waterfall'
-    this._cells = this.$slots.default || []
-    this.$nextTick(() => {
-      this.updateLayout()
-    })
-    this._renderHook()
-    const mergedStyle = extractComponentStyle(this)
-    return createElement('main', {
-      ref: 'wrapper',
-      attrs: { 'weex-type': 'waterfall' },
-      on: createEventMap(this, {
-        scroll: this.handleScroll,
-        touchstart: this.handleTouchStart,
-        touchmove: this.handleTouchMove,
-        touchend: this.handleTouchEnd
-      }),
-      staticClass: 'weex-waterfall weex-waterfall-wrapper weex-ct',
-      staticStyle: mergedStyle
-    }, this._createChildren(createElement, mergedStyle))
+export default {
+  init (weex) {
+    weex.registerComponent('waterfall', getWaterfall(weex))
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/slider/index.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/slider/index.js b/html5/render/vue/components/slider/index.js
index f37be08..90c8d6f 100644
--- a/html5/render/vue/components/slider/index.js
+++ b/html5/render/vue/components/slider/index.js
@@ -1,68 +1,9 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-// import { validateStyles } from '../../validator'
-// import indicator from './indicator'
-import slideMixin from './slideMixin'
+import slider from './slider'
+import indicator from './indicator'
 
 export default {
-  mixins: [slideMixin],
-  props: {
-    index: {
-      type: [String, Number],
-      default: 0
-    },
-    'auto-play': {
-      type: [String, Boolean],
-      default: false
-    },
-    interval: {
-      type: [String, Number],
-      default: 3000
-    },
-    infinite: {
-      type: [String, Boolean],
-      default: true
-    }
-  },
-
-  watch: {
-    index () {
-      this.currentIndex = this._normalizeIndex(this.index)
-    }
-  },
-
-  data () {
-    return {
-      frameCount: 0,
-      currentIndex: this.index
-    }
-  },
-
-  beforeCreate () {
-    this.weexType = 'slider'
-  },
-
-  render (createElement) {
-    /* istanbul ignore next */
-    // if (process.env.NODE_ENV === 'development') {
-    //   validateStyles('slider', this.$vnode.data && this.$vnode.data.staticStyle)
-    // }
-    return this._renderSlides(createElement)
+  init (weex) {
+    weex.install(slider)
+    weex.install(indicator)
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1a7c02a/html5/render/vue/components/slider/indicator.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/slider/indicator.js b/html5/render/vue/components/slider/indicator.js
index e38bd6c..62b95a3 100644
--- a/html5/render/vue/components/slider/indicator.js
+++ b/html5/render/vue/components/slider/indicator.js
@@ -16,8 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { extractComponentStyle } from '../../core'
-import { extend, extendKeys } from '../../utils'
 
 const _css = `
 .weex-indicator {
@@ -48,6 +46,8 @@ const _css = `
 }
 `
 
+let extractComponentStyle, extend, extendKeys
+
 function getIndicatorItemStyle (spec, isActive) {
   const style = {}
   style['background-color'] = spec[isActive ? 'itemSelectedColor' : 'itemColor']
@@ -157,8 +157,8 @@ function _reLayout (context, virtualRect, ltbr) {
   })
 }
 
-export default {
-  name: 'indicator',
+const indicator = {
+  name: 'weex-indicator',
   methods: {
     show: function () {
       this.$el.style.visibility = 'visible'
@@ -175,8 +175,16 @@ export default {
     this.count = count
     this.active = active
     if (!this.count) { return }
-    this._renderHook()
     return _render(this, createElement)
   },
   _css
 }
+
+export default {
+  init (weex) {
+    extractComponentStyle = weex.extractComponentStyle
+    extend = weex.utils.extend
+    extendKeys = weex.utils.extendKeys
+    weex.registerComponent('indicator', indicator)
+  }
+}


[24/43] incubator-weex git commit: * [html5] update deps.

Posted by ta...@apache.org.
* [html5] update deps.


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

Branch: refs/heads/0.16-dev
Commit: 8fe08a7118b4bc3ad67919605bf80da7cad597b5
Parents: 8c8034e
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 20:39:07 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 20:39:07 2017 +0800

----------------------------------------------------------------------
 packages/weex-vue-plugins/weex-vue-a/package.json            | 2 +-
 packages/weex-vue-plugins/weex-vue-animation/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-clipboard/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-dom/package.json          | 2 +-
 packages/weex-vue-plugins/weex-vue-event/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-geolocation/package.json  | 2 +-
 packages/weex-vue-plugins/weex-vue-global-event/package.json | 2 +-
 packages/weex-vue-plugins/weex-vue-input/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-modal/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-navigator/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-slider/package.json       | 2 +-
 packages/weex-vue-plugins/weex-vue-storage/package.json      | 2 +-
 packages/weex-vue-plugins/weex-vue-stream/package.json       | 2 +-
 packages/weex-vue-plugins/weex-vue-switch/package.json       | 2 +-
 packages/weex-vue-plugins/weex-vue-textarea/package.json     | 2 +-
 packages/weex-vue-plugins/weex-vue-video/package.json        | 2 +-
 packages/weex-vue-plugins/weex-vue-web/package.json          | 2 +-
 packages/weex-vue-plugins/weex-vue-websocket/package.json    | 2 +-
 packages/weex-vue-plugins/weex-vue-webview/package.json      | 2 +-
 19 files changed, 19 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-a/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-a/package.json b/packages/weex-vue-plugins/weex-vue-a/package.json
index aa9bfb2..c7495ad 100644
--- a/packages/weex-vue-plugins/weex-vue-a/package.json
+++ b/packages/weex-vue-plugins/weex-vue-a/package.json
@@ -21,6 +21,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-animation/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-animation/package.json b/packages/weex-vue-plugins/weex-vue-animation/package.json
index 89a4af6..bffde3e 100644
--- a/packages/weex-vue-plugins/weex-vue-animation/package.json
+++ b/packages/weex-vue-plugins/weex-vue-animation/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-clipboard/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-clipboard/package.json b/packages/weex-vue-plugins/weex-vue-clipboard/package.json
index f21df0e..91af538 100644
--- a/packages/weex-vue-plugins/weex-vue-clipboard/package.json
+++ b/packages/weex-vue-plugins/weex-vue-clipboard/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-dom/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-dom/package.json b/packages/weex-vue-plugins/weex-vue-dom/package.json
index feb8eae..c673808 100644
--- a/packages/weex-vue-plugins/weex-vue-dom/package.json
+++ b/packages/weex-vue-plugins/weex-vue-dom/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-event/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-event/package.json b/packages/weex-vue-plugins/weex-vue-event/package.json
index f343caf..244ec39 100644
--- a/packages/weex-vue-plugins/weex-vue-event/package.json
+++ b/packages/weex-vue-plugins/weex-vue-event/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-geolocation/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-geolocation/package.json b/packages/weex-vue-plugins/weex-vue-geolocation/package.json
index 64ec4eb..e426a6b 100644
--- a/packages/weex-vue-plugins/weex-vue-geolocation/package.json
+++ b/packages/weex-vue-plugins/weex-vue-geolocation/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-global-event/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-global-event/package.json b/packages/weex-vue-plugins/weex-vue-global-event/package.json
index e5d1275..1244c4f 100644
--- a/packages/weex-vue-plugins/weex-vue-global-event/package.json
+++ b/packages/weex-vue-plugins/weex-vue-global-event/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-input/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-input/package.json b/packages/weex-vue-plugins/weex-vue-input/package.json
index ec1a3bf..f286171 100644
--- a/packages/weex-vue-plugins/weex-vue-input/package.json
+++ b/packages/weex-vue-plugins/weex-vue-input/package.json
@@ -21,6 +21,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-modal/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-modal/package.json b/packages/weex-vue-plugins/weex-vue-modal/package.json
index e49b6de..0d8b157 100644
--- a/packages/weex-vue-plugins/weex-vue-modal/package.json
+++ b/packages/weex-vue-plugins/weex-vue-modal/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-navigator/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-navigator/package.json b/packages/weex-vue-plugins/weex-vue-navigator/package.json
index d16255b..c16e49b 100644
--- a/packages/weex-vue-plugins/weex-vue-navigator/package.json
+++ b/packages/weex-vue-plugins/weex-vue-navigator/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-slider/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-slider/package.json b/packages/weex-vue-plugins/weex-vue-slider/package.json
index b9f3be1..75db88f 100644
--- a/packages/weex-vue-plugins/weex-vue-slider/package.json
+++ b/packages/weex-vue-plugins/weex-vue-slider/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-storage/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-storage/package.json b/packages/weex-vue-plugins/weex-vue-storage/package.json
index 5ade986..1016afc 100644
--- a/packages/weex-vue-plugins/weex-vue-storage/package.json
+++ b/packages/weex-vue-plugins/weex-vue-storage/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-stream/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-stream/package.json b/packages/weex-vue-plugins/weex-vue-stream/package.json
index e7b61fd..ef94e45 100644
--- a/packages/weex-vue-plugins/weex-vue-stream/package.json
+++ b/packages/weex-vue-plugins/weex-vue-stream/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-switch/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-switch/package.json b/packages/weex-vue-plugins/weex-vue-switch/package.json
index 2e9dc8d..5d96737 100644
--- a/packages/weex-vue-plugins/weex-vue-switch/package.json
+++ b/packages/weex-vue-plugins/weex-vue-switch/package.json
@@ -21,6 +21,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-textarea/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-textarea/package.json b/packages/weex-vue-plugins/weex-vue-textarea/package.json
index 9bd12b0..f9a31a5 100644
--- a/packages/weex-vue-plugins/weex-vue-textarea/package.json
+++ b/packages/weex-vue-plugins/weex-vue-textarea/package.json
@@ -21,6 +21,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-video/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-video/package.json b/packages/weex-vue-plugins/weex-vue-video/package.json
index 07a097a..e4106ad 100644
--- a/packages/weex-vue-plugins/weex-vue-video/package.json
+++ b/packages/weex-vue-plugins/weex-vue-video/package.json
@@ -21,6 +21,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-web/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-web/package.json b/packages/weex-vue-plugins/weex-vue-web/package.json
index 867ab22..9921e09 100644
--- a/packages/weex-vue-plugins/weex-vue-web/package.json
+++ b/packages/weex-vue-plugins/weex-vue-web/package.json
@@ -21,6 +21,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-websocket/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-websocket/package.json b/packages/weex-vue-plugins/weex-vue-websocket/package.json
index ac911c7..fbb2e38 100644
--- a/packages/weex-vue-plugins/weex-vue-websocket/package.json
+++ b/packages/weex-vue-plugins/weex-vue-websocket/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8fe08a71/packages/weex-vue-plugins/weex-vue-webview/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-plugins/weex-vue-webview/package.json b/packages/weex-vue-plugins/weex-vue-webview/package.json
index 9a71ad1..fc7f063 100644
--- a/packages/weex-vue-plugins/weex-vue-webview/package.json
+++ b/packages/weex-vue-plugins/weex-vue-webview/package.json
@@ -22,6 +22,6 @@
   ],
   "peerDependencies": {
     "weex-vue-render": "^0.12.0",
-    "weex-loader": "^12.0"
+    "vue-loader": "^12.0"
   }
 }