You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by so...@apache.org on 2017/06/09 01:52:12 UTC

[01/50] incubator-weex git commit: + [test] replace border screenshot image

Repository: incubator-weex
Updated Branches:
  refs/heads/master f08565b9e -> 83b7f792f


+ [test] replace border screenshot image


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

Branch: refs/heads/master
Commit: d273d679a29ed2e7fc42f6a4612cfb27044c7889
Parents: e47d27d
Author: moxun.ljf <fu...@foxmail.com>
Authored: Thu Jun 1 16:34:57 2017 +0800
Committer: moxun.ljf <fu...@foxmail.com>
Committed: Thu Jun 1 16:34:57 2017 +0800

----------------------------------------------------------------------
 test/screenshot/border-android.png | Bin 207443 -> 196752 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d273d679/test/screenshot/border-android.png
----------------------------------------------------------------------
diff --git a/test/screenshot/border-android.png b/test/screenshot/border-android.png
index 851e4b9..637bd99 100644
Binary files a/test/screenshot/border-android.png and b/test/screenshot/border-android.png differ


[26/50] incubator-weex git commit: Merge branch 'dev' of https://git-wip-us.apache.org/repos/asf/incubator-weex into example-bugfix-input-dev

Posted by so...@apache.org.
Merge branch 'dev' of https://git-wip-us.apache.org/repos/asf/incubator-weex into example-bugfix-input-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/466c4ee8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/466c4ee8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/466c4ee8

Branch: refs/heads/master
Commit: 466c4ee8a7d9876a96ce11cf42bccf27a0d906a6
Parents: 6baccbc c72b23a
Author: 齐山 <su...@163.com>
Authored: Tue Jun 6 13:46:29 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Tue Jun 6 13:46:29 2017 +0800

----------------------------------------------------------------------
 doc/themes/weex/languages/cn.yml              |  12 +++++++++
 doc/themes/weex/languages/en.yml              |  13 +++++++++-
 doc/themes/weex/layout/index.ejs              |  28 +++++++++++++++++++++
 doc/themes/weex/source/css/index.scss         |  17 ++++++++++++-
 doc/themes/weex/source/images/fliggy.png      | Bin 0 -> 19329 bytes
 doc/themes/weex/source/images/juhuasuan.png   | Bin 0 -> 46340 bytes
 doc/themes/weex/source/images/qianniu.png     | Bin 0 -> 19852 bytes
 doc/themes/weex/source/images/taopiaopiao.png | Bin 0 -> 12460 bytes
 8 files changed, 68 insertions(+), 2 deletions(-)
----------------------------------------------------------------------



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

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

Branch: refs/heads/master
Commit: 404f3cc149836932011c082c32552aafc51d5c3b
Parents: d2f4cfe 8b2ee21
Author: tancy <ro...@gmail.com>
Authored: Sun Jun 4 14:04:42 2017 +0800
Committer: tancy <ro...@gmail.com>
Committed: Sun Jun 4 14:04:42 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/README.md                      |  23 +-
 html5/render/vue/components/slider/index.js     | 137 +---
 .../render/vue/components/slider/slideMixin.js  | 647 ++++++++++++++-----
 .../vue/components/slider/slider-neighbor.css   |  19 -
 .../vue/components/slider/slider-neighbor.js    | 116 +---
 html5/render/vue/components/slider/slider.css   |  34 +
 html5/render/vue/core/style.js                  |   7 +-
 html5/render/vue/env/viewport.js                |   6 +-
 html5/render/vue/index.js                       |   6 +
 html5/render/vue/mixins/scrollable.js           |   7 +-
 html5/render/vue/modules/dom.js                 |  16 +-
 html5/render/vue/utils/style.js                 |  85 ++-
 package.json                                    |   2 +-
 packages/weex-vue-render/README.md              |  23 +-
 packages/weex-vue-render/package.json           |   2 +-
 15 files changed, 685 insertions(+), 445 deletions(-)
----------------------------------------------------------------------



[25/50] incubator-weex git commit: Merge branch 'dev' of https://git-wip-us.apache.org/repos/asf/incubator-weex into dev

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

Branch: refs/heads/master
Commit: c72b23aee30fd898d9764b506d8580e4c40afb2e
Parents: 648e272 38c4beb
Author: tancy <ro...@gmail.com>
Authored: Tue Jun 6 13:38:06 2017 +0800
Committer: tancy <ro...@gmail.com>
Committed: Tue Jun 6 13:38:06 2017 +0800

----------------------------------------------------------------------
 .../cn/v-0.10/references/components/input.md    | 216 +++++++++++++++--
 doc/source/references/components/input.md       | 231 +++++++++++++++----
 2 files changed, 381 insertions(+), 66 deletions(-)
----------------------------------------------------------------------



[37/50] incubator-weex git commit: * [test] test border case with another image

Posted by so...@apache.org.
* [test] test border case with another image


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

Branch: refs/heads/master
Commit: 8ed8ac62daff6487b3b560cfbb429f9100b07ce8
Parents: c9d16a8
Author: sospartan <so...@apache.org>
Authored: Tue Jun 6 20:50:42 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Wed Jun 7 16:54:17 2017 +0800

----------------------------------------------------------------------
 test/pages/css/border.vue          |  13 +++++++------
 test/screenshot/border-android.png | Bin 196752 -> 156247 bytes
 2 files changed, 7 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8ed8ac62/test/pages/css/border.vue
----------------------------------------------------------------------
diff --git a/test/pages/css/border.vue b/test/pages/css/border.vue
index 89947eb..4943056 100644
--- a/test/pages/css/border.vue
+++ b/test/pages/css/border.vue
@@ -62,12 +62,12 @@
         <text>transparent</text>
     </div>
     <div class="container">
-        <image class="box topleft" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
-        <image class="box topright" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
-        <image class="box bottomleft" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
-        <image class="box bottomright" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
-        <image class="box" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
-        <image class="circle" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
+        <image class="box topleft" :src="img"></image>
+        <image class="box topright" :src="img"></image>
+        <image class="box bottomleft" :src="img"></image>
+        <image class="box bottomright" :src="img"></image>
+        <image class="box" :src="img"></image>
+        <image class="circle" :src="img"></image>
         <text>image</text>
     </div>
   </scroller>
@@ -362,6 +362,7 @@
   module.exports = {
     data : function(){
       return {
+        img: 'http://gw.alicdn.com/tfs/TB1bg8SQFXXXXcHXXXXXXXXXXXX-85-170.png'
       }
     },
     methods : {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8ed8ac62/test/screenshot/border-android.png
----------------------------------------------------------------------
diff --git a/test/screenshot/border-android.png b/test/screenshot/border-android.png
index 637bd99..ae57be5 100644
Binary files a/test/screenshot/border-android.png and b/test/screenshot/border-android.png differ


[34/50] incubator-weex git commit: Merge branch '0.13-dev' into dev

Posted by so...@apache.org.
Merge branch '0.13-dev' into 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/536c38a2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/536c38a2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/536c38a2

Branch: refs/heads/master
Commit: 536c38a29abbece191987bfbf54c0bc0480a12ac
Parents: 3a39b78 404f3cc
Author: sospartan <so...@apache.org>
Authored: Wed Jun 7 16:04:24 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Wed Jun 7 16:04:24 2017 +0800

----------------------------------------------------------------------
 .gitignore                                      |   1 +
 .travis.yml                                     |  10 +-
 Dangerfile-ios                                  |   1 +
 WeexSDK.podspec                                 |   4 +-
 android/build.gradle                            |   9 +-
 android/commons/build.gradle                    |   1 +
 .../adapter/DefaultWebSocketAdapter.java        |  54 +-
 .../weex/commons/util/RequestIdGenerator.java   |  15 +
 .../weex/commons/util/WSEventReporter.java      | 192 ++++++
 .../gradle/wrapper/gradle-wrapper.properties    |   4 +-
 android/playground/app/build.gradle             |   4 +-
 .../java/com/alibaba/weex/WXApplication.java    |   2 +
 .../java/com/alibaba/weex/WXPageActivity.java   |   3 +-
 .../extend/adapter/InterceptWXHttpAdapter.java  |  57 +-
 .../weex/extend/module/WXEventModule.java       |  23 +-
 android/run-ci.sh                               |   5 +-
 android/sdk/assets/main.js                      |   8 -
 android/sdk/build.gradle                        |   6 +
 .../com/taobao/weex/LayoutFinishListener.java   |   8 +
 .../java/com/taobao/weex/WXEnvironment.java     |   1 +
 .../main/java/com/taobao/weex/WXSDKEngine.java  |   6 +
 .../java/com/taobao/weex/WXSDKInstance.java     |  48 ++
 .../main/java/com/taobao/weex/WXSDKManager.java |  15 +-
 .../taobao/weex/adapter/ICrashInfoReporter.java |   9 +
 .../taobao/weex/adapter/IDrawableLoader.java    |   3 +-
 .../weex/adapter/IWXUserTrackAdapter.java       |   2 +-
 .../com/taobao/weex/bridge/WXBridgeManager.java |  45 +-
 .../com/taobao/weex/bridge/WXModuleManager.java |  44 +-
 .../com/taobao/weex/common/WXPerformance.java   |   9 +-
 .../taobao/weex/dom/DOMActionContextImpl.java   |  15 +-
 .../com/taobao/weex/dom/TextDecorationSpan.java |  55 ++
 .../java/com/taobao/weex/dom/WXDomHandler.java  |   4 +
 .../java/com/taobao/weex/dom/WXDomManager.java  |  19 +
 .../main/java/com/taobao/weex/dom/WXStyle.java  |  32 +-
 .../com/taobao/weex/dom/WXSwitchDomObject.java  |  29 +-
 .../com/taobao/weex/dom/WXTextDomObject.java    |  11 +-
 .../com/taobao/weex/dom/action/Actions.java     |  12 +
 .../taobao/weex/dom/action/AnimationAction.java |   3 +
 .../weex/dom/action/CreateFinishAction.java     |  20 +
 .../weex/dom/action/ExecutableRenderAction.java |  30 +
 .../weex/dom/action/ModuleInvocationAction.java |  50 ++
 .../taobao/weex/ui/IExternalModuleGetter.java   |  30 +
 .../taobao/weex/ui/IExternalMoudleGetter.java   |  29 -
 .../ui/animation/DimensionUpdateListener.java   |  14 +
 .../weex/ui/animation/WXAnimationBean.java      |   1 +
 .../ui/component/AbstractEditComponent.java     |  16 +-
 .../taobao/weex/ui/component/WXComponent.java   |  60 +-
 .../weex/ui/component/WXTextDecoration.java     |   1 +
 .../ui/component/list/StickyHeaderHelper.java   |   2 +-
 .../taobao/weex/ui/module/WXTimerModule.java    |  42 +-
 .../com/taobao/weex/ui/view/WXImageView.java    |  31 +-
 .../weex/ui/view/border/BorderDrawable.java     |   3 +-
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |   4 +
 .../java/com/taobao/weex/utils/WXViewUtils.java |  34 +-
 .../java/com/taobao/weex/WXSDKEngineTest.java   |   1 -
 .../java/com/taobao/weex/utils/WXUtilsTest.java |  16 +-
 android/weex_debug/build.gradle                 |  10 +-
 build/config.js                                 |   4 +-
 build/webpack.examples.web.config.js            |  29 +-
 build/webpack.test.web.config.js                |  21 +-
 dangerfile.js                                   | 166 ++++-
 doc/source/cn/references/bubble.md              | 146 +++++
 doc/source/cn/references/downgrade.md           |  11 +
 doc/source/cn/references/index.md               |   4 +-
 doc/source/cn/v-0.10/references/bubble.md       | 150 +++++
 doc/source/references/bubble.md                 | 146 +++++
 doc/source/references/downgrade.md              |  11 +
 doc/source/references/index.md                  |   2 +
 doc/source/v-0.10/references/bubble.md          | 150 +++++
 examples/iconfont.we                            |  63 +-
 examples/index.we                               |   1 +
 examples/vue/iconfont.vue                       |  80 ++-
 examples/vue/index.vue                          |   3 +-
 examples/vue/market/gcanvas.vue                 |   2 +-
 html5/render/native/index.js                    |  33 +-
 html5/render/native/setup.js                    |  58 ++
 html5/render/vue/README.md                      |  23 +-
 html5/render/vue/components/a.js                |  19 +
 html5/render/vue/components/div.js              |   1 +
 html5/render/vue/components/image.js            |   1 +
 html5/render/vue/components/index.js            |   2 +-
 html5/render/vue/components/input.js            |   1 +
 .../render/vue/components/scrollable/header.js  |   1 +
 .../vue/components/scrollable/list/cell.js      |   1 +
 .../vue/components/scrollable/list/index.js     |   1 +
 .../components/scrollable/loading-indicator.js  |   1 +
 .../render/vue/components/scrollable/loading.js |   1 +
 .../render/vue/components/scrollable/refresh.js |   1 +
 .../vue/components/scrollable/scroller.js       |   1 +
 html5/render/vue/components/slider/index.js     | 155 +----
 html5/render/vue/components/slider/indicator.js |  37 +-
 .../render/vue/components/slider/slideMixin.js  | 646 +++++++++++++++----
 .../vue/components/slider/slider-neighbor.css   |  21 -
 .../vue/components/slider/slider-neighbor.js    | 138 +---
 html5/render/vue/components/slider/slider.css   |  34 +
 html5/render/vue/components/switch.js           |   1 +
 html5/render/vue/components/text.js             |   1 +
 html5/render/vue/components/textarea.js         |   1 +
 html5/render/vue/components/video.js            |  28 +-
 html5/render/vue/components/web.js              |   1 +
 html5/render/vue/core/node.js                   |  71 +-
 html5/render/vue/core/style.js                  |  33 +-
 html5/render/vue/env/index.js                   |   4 +-
 html5/render/vue/env/viewport.js                |   6 +-
 html5/render/vue/env/weex.js                    |  33 +-
 html5/render/vue/env/wx-env.js                  |   8 +-
 html5/render/vue/index.js                       |  15 +
 html5/render/vue/lib/envd/index.js              | 179 +++++
 html5/render/vue/lib/envd/params.js             |  17 +
 html5/render/vue/lib/envd/version.js            | 152 +++++
 html5/render/vue/lib/gesture.js                 | 512 +++++++++++++++
 html5/render/vue/mixins/base.js                 |  54 +-
 html5/render/vue/mixins/scrollable.js           |  13 +-
 html5/render/vue/mixins/style.js                |  22 +-
 html5/render/vue/modules/animation.js           |   3 +
 html5/render/vue/modules/dom.js                 |  40 +-
 html5/render/vue/modules/modal/style.js         |   2 +-
 html5/render/vue/modules/modal/toast.js         |   3 +-
 html5/render/vue/utils/component.js             |  20 +-
 html5/render/vue/utils/func.js                  |  19 +
 html5/render/vue/utils/lazyload.js              |  17 +-
 html5/render/vue/utils/perf.js                  | 123 +++-
 html5/render/vue/utils/style.js                 | 151 +++--
 html5/runtime/vdom/document.js                  |   4 +-
 html5/runtime/vdom/element.js                   |  25 +-
 .../render/vue/data/dotvue/event-bubble-bar.vue |  13 +-
 .../render/vue/data/dotvue/event-bubble.vue     |  17 +-
 html5/test/render/vue/utils/style.js            |   9 +-
 html5/test/unit/default/vm/vm.js                |   2 +-
 .../WeexDemo.xcodeproj/project.pbxproj          |   6 +
 ios/playground/WeexDemo/AppDelegate.m           |   4 +
 .../WeexDemo/WXConfigCenterDefaultImpl.h        |  25 +
 .../WeexDemo/WXConfigCenterDefaultImpl.m        |  45 ++
 ios/playground/WeexDemo/WXDemoViewController.m  |  16 +-
 .../WeexDemo/extend/module/WXEventModule.m      |  16 +
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       |  32 +-
 ios/sdk/WeexSDK/Resources/main.js               |   8 -
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    |   5 +
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |  85 ++-
 ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m |  13 +-
 .../WeexSDK/Sources/Component/WXAComponent.m    |  13 +-
 .../Sources/Component/WXComponent_internal.h    |   2 -
 .../Sources/Component/WXCycleSliderComponent.m  |  17 +-
 .../Sources/Component/WXEmbedComponent.m        |   2 +-
 .../Sources/Component/WXImageComponent.m        |  27 +-
 .../Sources/Component/WXIndicatorComponent.m    |   3 +
 .../WeexSDK/Sources/Component/WXListComponent.m |  64 +-
 .../Sources/Component/WXScrollerComponent.m     |  39 +-
 .../Sources/Component/WXSliderComponent.m       |   1 +
 .../Component/WXSliderNeighborComponent.m       |   9 +-
 .../WeexSDK/Sources/Component/WXTextComponent.m |  67 +-
 .../Sources/Component/WXVideoComponent.m        |  12 +-
 .../WeexSDK/Sources/Component/WXWebComponent.m  |  10 +-
 .../Sources/Controller/WXBaseViewController.m   |  19 +-
 ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m    |  13 +-
 .../WeexSDK/Sources/Events/WXComponent+Events.m |  34 +-
 .../WeexSDK/Sources/Layout/WXComponent+Layout.m |  24 +-
 .../WeexSDK/Sources/Loader/WXResourceLoader.m   |   2 +
 .../WeexSDK/Sources/Manager/WXBridgeManager.h   |   2 +
 .../Sources/Manager/WXComponentManager.h        |   2 +-
 .../Sources/Manager/WXComponentManager.m        |  32 +-
 ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m |   8 +-
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |  33 +-
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h   |  17 +-
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |  49 +-
 .../WeexSDK/Sources/Module/WXAnimationLayout.h  |  49 ++
 .../WeexSDK/Sources/Module/WXAnimationLayout.m  | 115 ++++
 .../WeexSDK/Sources/Module/WXAnimationModule.m  |  30 +-
 ios/sdk/WeexSDK/Sources/Module/WXDomModule.m    |   1 +
 .../WeexSDK/Sources/Module/WXModalUIModule.m    |   1 +
 .../WeexSDK/Sources/Module/WXPrerenderManager.h |  89 +++
 .../WeexSDK/Sources/Module/WXPrerenderManager.m | 314 +++++++++
 ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m |   6 +-
 .../Sources/Network/WXResourceRequestHandler.h  |   2 +
 .../WXResourceRequestHandlerDefaultImpl.m       |   5 +-
 .../Sources/Protocol/WXConfigCenterProtocol.h   |  20 +
 .../Sources/Protocol/WXScrollerProtocol.h       |   7 +
 .../Sources/Protocol/WXURLRewriteProtocol.h     |   5 +-
 ios/sdk/WeexSDK/Sources/Utility/WXConvert.m     |   6 +-
 ios/sdk/WeexSDK/Sources/Utility/WXDefine.h      |   4 +-
 ios/sdk/WeexSDK/Sources/Utility/WXUtility.h     |   7 +
 ios/sdk/WeexSDK/Sources/Utility/WXUtility.m     |  98 +--
 .../View/WXComponent+PseudoClassManagement.m    |   4 +-
 .../Sources/View/WXComponent+ViewManagement.m   |  96 ++-
 ios/sdk/WeexSDK/Sources/View/WXView.m           |   1 +
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |   3 +
 package.json                                    |  19 +-
 packages/weex-vue-render/README.md              |  23 +-
 packages/weex-vue-render/package.json           |   2 +-
 pre-build/native-bundle-main.js                 |   8 +
 test/.gitignore                                 |   3 +-
 test/mocha.opts                                 |   2 +-
 test/pages/components/hyperlink.vue             |  31 +
 test/pages/components/hyperlink_target.vue      |  22 +
 test/pages/components/scroller-fixed.vue        |  14 +-
 test/pages/components/slider-common.vue         | 229 +++++++
 test/pages/css/border.vue                       | 119 +++-
 test/pages/modules/globalEvent.vue              |  48 ++
 test/pages/modules/vue_timer.vue                |  75 +++
 test/pages/modules/we_timer.we                  |  73 +++
 test/screenshot/border-android.png              | Bin 0 -> 196752 bytes
 test/screenshot/border-ios.png                  | Bin 168396 -> 161202 bytes
 test/screenshot/compositing-ios.png             | Bin 228661 -> 228306 bytes
 test/scripts/components/hyperlink.test.js       |  44 ++
 test/scripts/components/recycler.test.js        |  16 +-
 test/scripts/components/scroller-fixed.test.js  |   5 +-
 test/scripts/components/slider-common.test.js   | 100 +++
 test/scripts/components/text.test.js            |   2 +-
 test/scripts/css/border.test.js                 |   7 +-
 test/scripts/modules/globalEvent.test.js        |  60 ++
 test/scripts/modules/timer.test.js              | 100 +++
 test/scripts/util.js                            |  30 +-
 212 files changed, 6404 insertions(+), 1174 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/536c38a2/.gitignore
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/536c38a2/android/build.gradle
----------------------------------------------------------------------
diff --cc android/build.gradle
index d5c17ec,746e508..3111d95
--- a/android/build.gradle
+++ b/android/build.gradle
@@@ -9,10 -9,6 +9,10 @@@ buildscript 
      }
  }
  
++
 +plugins {
 +    id "de.undercouch.download" version "3.2.0"
 +}
- 
  repositories {
          mavenCentral()
          jcenter()

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/536c38a2/android/sdk/build.gradle
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/536c38a2/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/536c38a2/android/sdk/src/main/java/com/taobao/weex/ui/component/list/StickyHeaderHelper.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/536c38a2/dangerfile.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/536c38a2/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/536c38a2/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.m
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/536c38a2/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
----------------------------------------------------------------------

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


[33/50] incubator-weex git commit: * [doc] update document for animation

Posted by so...@apache.org.
* [doc] update document for animation


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

Branch: refs/heads/master
Commit: 2505d08400a5ec114665248a32d6435df0f703a9
Parents: 3a39b78
Author: acton393 <zh...@gmail.com>
Authored: Wed Jun 7 16:01:13 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Jun 7 16:01:13 2017 +0800

----------------------------------------------------------------------
 doc/source/cn/references/modules/animation.md |  4 ++--
 doc/source/references/modules/animation.md    | 12 ++++++------
 2 files changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2505d084/doc/source/cn/references/modules/animation.md
----------------------------------------------------------------------
diff --git a/doc/source/cn/references/modules/animation.md b/doc/source/cn/references/modules/animation.md
index 7e6def6..38f9bec 100644
--- a/doc/source/cn/references/modules/animation.md
+++ b/doc/source/cn/references/modules/animation.md
@@ -15,7 +15,7 @@ version: 2.1
 
 #### 参数
 
-* `el {Element}`:将要执行动画的元素,通常可以通过调用 [`this.$el(id)`](../api.html) 来获取元素的引用。
+* `el {Element}`:将要执行动画的元素,例如指定动画的元素 `ref` 属性为 `test` , 可以通过调用 `this.refs.test` 来获取元素的引用。
 * `options {Object}`:描述动画过程的对象。
   * `options.duration {number}`:指定动画的持续时间 (单位是毫秒),默认值是 `0`,表示没有动画效果。
   * `options.delay {number}`:指定请求动画操作到执行动画之间的时间间隔 (单位是毫秒),默认值是 `0`,表示没有延迟,在请求后立即执行动画。
@@ -44,7 +44,7 @@ version: 2.1
 
 | 名称 | 描述 | 值类型 | 默认值 | 示例 |
 | ---- | ---- | ---- | ---- | ---- |
-| `translate`/`translateX`/`translateY` | 指定元素移动的偏移量 | 像素值或百分比 | 无 |
+| `translate`/`translateX`/`translateY` | 指定元素要移动到的位置 | 像素值或百分比 | 无 |
 | `rotate` | 指定元素将被旋转的角度,单位是度 | number | 无 |
 | `scale`/`scaleX`/`scaleY` | 按比例放大或缩小元素 | number | 无 |
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2505d084/doc/source/references/modules/animation.md
----------------------------------------------------------------------
diff --git a/doc/source/references/modules/animation.md b/doc/source/references/modules/animation.md
index 4a9b7ec..2904898 100644
--- a/doc/source/references/modules/animation.md
+++ b/doc/source/references/modules/animation.md
@@ -13,13 +13,13 @@ Smooth and meaningful animation is very effective for enhancing the user experie
 ### transition(node, options, callback)
 
 #### Arguments
-##### node    
+- node
 
 **type:** node
 
-**position:** An element that will be animated, normally you can get this by calling `this.$el(id)`.   
+**position:** An element that will be animated, for example , specify the `ref` attribute for the element you want to animated as `element`, so you can get this element by calling `this.refs.element`.
 
-##### options    
+- options
 
 **type:** object   
 
@@ -51,11 +51,11 @@ properties of `transform`:
 
 | name | description | value type | default value |
 | :--- | :--- | :--- | :--- |
-|translate/translateX/translateY|Specifies the location of which the element will be translated.|pixel or percent|none|
+|translate/translateX/translateY|Specifies the location of which the element will be translated to.|pixel or percent|none|
 |rotate|Specifies the angle of which the element will be rotated, the unit is degree.|number|none|
 |scale/scaleX/scaleY|Stretch or shrink the element.|number|none|  
 
-#### callback    
+- callback
 **type:** function
 
 **position:** Callback which is called after the completion of transition.
@@ -103,4 +103,4 @@ properties of `transform`:
 </style>
 ```
 
-[try it](http://dotwe.org/vue/2d1b61bef061448c1a5a13eac9624410)
\ No newline at end of file
+[try it](http://dotwe.org/vue/2d1b61bef061448c1a5a13eac9624410)


[49/50] incubator-weex git commit: Merge branch '0.13-dev' into dev

Posted by so...@apache.org.
Merge branch '0.13-dev' into 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/c689a8ab
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/c689a8ab
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/c689a8ab

Branch: refs/heads/master
Commit: c689a8ab731b80519bb1e852cce39b2e54a5c36e
Parents: c5f94f2 2b43dc5
Author: sospartan <so...@apache.org>
Authored: Thu Jun 8 18:47:44 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Thu Jun 8 18:47:44 2017 +0800

----------------------------------------------------------------------
 .../java/com/alibaba/weex/WXApplication.java    |   2 +
 .../weex/extend/component/WXParallax.java       | 345 +++++++++++++++++++
 .../com/taobao/weex/bridge/WXBridgeManager.java |   2 +-
 .../weex/common/ICheckBindingScroller.java      |   9 +
 .../taobao/weex/ui/component/WXComponent.java   |  11 +
 .../taobao/weex/ui/component/WXScroller.java    |   9 +-
 .../taobao/weex/ui/component/WXVContainer.java  |  13 +
 .../ui/component/list/BasicListComponent.java   |   9 +-
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       |   2 +-
 .../Sources/Component/WXCycleSliderComponent.m  |   9 +-
 ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m  |   4 +-
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |   1 +
 12 files changed, 408 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c689a8ab/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c689a8ab/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
----------------------------------------------------------------------


[24/50] incubator-weex git commit: * [doc] update user App content

Posted by so...@apache.org.
* [doc] update user App content


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

Branch: refs/heads/master
Commit: 648e272cdc3c811046ac1139b56b38c96b04c933
Parents: 0aa1a6e
Author: tancy <ro...@gmail.com>
Authored: Tue Jun 6 13:33:31 2017 +0800
Committer: tancy <ro...@gmail.com>
Committed: Tue Jun 6 13:33:31 2017 +0800

----------------------------------------------------------------------
 doc/themes/weex/languages/en.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/648e272c/doc/themes/weex/languages/en.yml
----------------------------------------------------------------------
diff --git a/doc/themes/weex/languages/en.yml b/doc/themes/weex/languages/en.yml
index 8fadf37..dae9090 100644
--- a/doc/themes/weex/languages/en.yml
+++ b/doc/themes/weex/languages/en.yml
@@ -52,7 +52,7 @@ index:
       content: Youku is one of China's top online video and streaming service platforms.
     taopiaopiao:
       title: Tao Tickets Pro
-      content: Tao Tickets Pro is a product for the film to provide valuable data. Through the combination of Ali and the amount of user data, for the film people to provide a second real-time box office, film, theater business, release calendar and user portraits and other data services.
+      content: Tao Tickets Pro is an intelligent data application which offers film industry practitioners with valuable data and information. Base on the huge data from Alibaba group, it provides services of realtime box office statistic and prediction,film schedule , cinema management information and user profile etc.
     fliggy:
       title: Fliggy
       content: Fliggy is Alibaba Group's travel brand, designed to provide users with convenient, more cost-effective travel services. 


[30/50] incubator-weex git commit: + [ios] update websocket doc

Posted by so...@apache.org.
+ [ios] update websocket doc


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

Branch: refs/heads/master
Commit: c7dc1250af3f9b7470d8704c3474338d5c894db4
Parents: 2fca48b
Author: 齐山 <su...@163.com>
Authored: Wed Jun 7 14:21:34 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Wed Jun 7 14:21:34 2017 +0800

----------------------------------------------------------------------
 doc/source/cn/references/modules/websocket.md | 1 -
 doc/source/references/modules/websocket.md    | 1 -
 2 files changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c7dc1250/doc/source/cn/references/modules/websocket.md
----------------------------------------------------------------------
diff --git a/doc/source/cn/references/modules/websocket.md b/doc/source/cn/references/modules/websocket.md
index e83c15f..50223da 100644
--- a/doc/source/cn/references/modules/websocket.md
+++ b/doc/source/cn/references/modules/websocket.md
@@ -17,7 +17,6 @@ WebSockets 是一种先进的技术, 这使得在用户的 H5/iOS/Android 和一
   - [DefaultWebSocketAdapterFactory.java](https://github.com/apache/incubator-weex/blob/dev/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapterFactory.java);
   - 集成例子参考weex [playground](https://github.com/apache/incubator-weex/tree/dev/android/playground)
 
-- 只在.we文件支持,不支持vue2.0
 
 ## API
 ### `WebSocket(url, protocol)`

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c7dc1250/doc/source/references/modules/websocket.md
----------------------------------------------------------------------
diff --git a/doc/source/references/modules/websocket.md b/doc/source/references/modules/websocket.md
index 6edc8d8..295ee25 100644
--- a/doc/source/references/modules/websocket.md
+++ b/doc/source/references/modules/websocket.md
@@ -16,7 +16,6 @@ WebSockets is an advanced technology that makes it possible to open an interacti
   - [DefaultWebSocketAdapter.java](https://github.com/apache/incubator-weex/blob/dev/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapter.java);
   - [DefaultWebSocketAdapterFactory.java](https://github.com/apache/incubator-weex/blob/dev/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapterFactory.java);
   - refer:  [weex playground](https://github.com/apache/incubator-weex/tree/dev/android/playground)
-- only support in .we file,not support in vue2.0
 
 ## API
 ### `WebSocket(url, protocol)`


[10/50] incubator-weex git commit: Merge branch '0.13-dev' of https://github.com/acton393/incubator-weex into wip-us-0.13-dev

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

Branch: refs/heads/master
Commit: 311042242f3718daa8ed6a217e7d156345f30960
Parents: d273d67 1308ff1
Author: acton393 <zh...@gmail.com>
Authored: Fri Jun 2 11:35:53 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jun 2 11:35:53 2017 +0800

----------------------------------------------------------------------
 .../Sources/Component/WXCycleSliderComponent.m  |  6 ++--
 .../Sources/Component/WXSliderComponent.m       |  1 +
 .../WeexSDK/Sources/Component/WXTextComponent.m | 34 ++++++++++++++++----
 .../WeexSDK/Sources/Events/WXComponent+Events.m |  8 +++++
 4 files changed, 41 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/31104224/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/31104224/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
----------------------------------------------------------------------


[14/50] incubator-weex git commit: * [android] fix travis config

Posted by so...@apache.org.
* [android] fix travis config


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

Branch: refs/heads/master
Commit: d2f4cfe76ca0ec716a2c3182be34bcaf872292f1
Parents: 1216f81
Author: sospartan <so...@apache.org>
Authored: Fri Jun 2 12:19:11 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Fri Jun 2 14:00:34 2017 +0800

----------------------------------------------------------------------
 .travis.yml | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d2f4cfe7/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 132a085..d0b7675 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -41,6 +41,8 @@ matrix:
           components:
             - platform-tools
             - tools
+            - build-tools-23.0.2
+            - build-tools-23.0.3
             - build-tools-24.0.3
             - android-24
             - android-23


[09/50] incubator-weex git commit: * [ios] remove notification for text if needs

Posted by so...@apache.org.
* [ios] remove notification for text if needs


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

Branch: refs/heads/master
Commit: 1308ff195c4710a4aed7689fbb275f2aae31895a
Parents: a4cc8df
Author: acton393 <zh...@gmail.com>
Authored: Fri Jun 2 11:30:03 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jun 2 11:30:03 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1308ff19/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
index deeddd6..f3fbd93 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
@@ -116,6 +116,8 @@ CGFloat WXTextDefaultLineThroughWidth = 1.2;
     CGFloat _lineHeight;
     CGFloat _letterSpacing;
     BOOL _truncationLine; // support trunk tail
+    
+    BOOL _needsRemoveObserver;
 }
 
 + (void)setRenderUsingCoreText:(BOOL)usingCoreText
@@ -138,6 +140,7 @@ CGFloat WXTextDefaultLineThroughWidth = 1.2;
     self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
     if (self) {
         // just for coretext and textkit render replacement
+        _needsRemoveObserver = NO;
         if ([attributes objectForKey:@"coretext"]) {
             _useCoreTextAttr = [WXConvert NSString:attributes[@"coretext"]];
         } else {
@@ -169,7 +172,9 @@ CGFloat WXTextDefaultLineThroughWidth = 1.2;
 
 - (void)dealloc
 {
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
+    if (_needsRemoveObserver) {
+        [[NSNotificationCenter defaultCenter] removeObserver:self name:WX_ICONFONT_DOWNLOAD_NOTIFICATION object:nil];
+    }
 }
 
 #define WX_STYLE_FILL_TEXT(key, prop, type, needLayout)\
@@ -365,6 +370,7 @@ do {\
         //custom localSrc is cached
         if (!fontLocalSrc && fontSrc) {
             // if use custom font, when the custom font download finish, refresh text.
+            _needsRemoveObserver = YES;
             [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(repaintText:) name:WX_ICONFONT_DOWNLOAD_NOTIFICATION object:nil];
         }
     }
@@ -443,6 +449,7 @@ do {\
         //custom localSrc is cached
         if (!fontLocalSrc && fontSrc) {
             // if use custom font, when the custom font download finish, refresh text.
+            _needsRemoveObserver = YES;
             [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(repaintText:) name:WX_ICONFONT_DOWNLOAD_NOTIFICATION object:nil];
         }
     }


[27/50] incubator-weex git commit: * [doc] fix users app layout bug

Posted by so...@apache.org.
* [doc] fix users app layout bug


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

Branch: refs/heads/master
Commit: 9c73ec8ca3a0e3f0ec50a11580e39cf4dc30c10d
Parents: c72b23a
Author: tancy <ro...@gmail.com>
Authored: Tue Jun 6 16:14:38 2017 +0800
Committer: tancy <ro...@gmail.com>
Committed: Tue Jun 6 16:14:38 2017 +0800

----------------------------------------------------------------------
 doc/themes/weex/source/css/index.scss | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9c73ec8c/doc/themes/weex/source/css/index.scss
----------------------------------------------------------------------
diff --git a/doc/themes/weex/source/css/index.scss b/doc/themes/weex/source/css/index.scss
index 7b5454f..e1e744b 100644
--- a/doc/themes/weex/source/css/index.scss
+++ b/doc/themes/weex/source/css/index.scss
@@ -48,7 +48,7 @@
 
 .horizon{
   .textbox {
-    flex: 2;
+    flex: 1;
     display: flex;
     flex-direction: column;
     justify-content: center;


[11/50] incubator-weex git commit: * [html5] refactor slider & slider-neighbor.

Posted by so...@apache.org.
* [html5] refactor slider & slider-neighbor.


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

Branch: refs/heads/master
Commit: 776a74a234c92dd386feb0ace9714ebd33063760
Parents: 804178a
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Jun 2 11:47:29 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Jun 2 11:47:29 2017 +0800

----------------------------------------------------------------------
 .../render/vue/components/slider/slideMixin.js  | 389 ++++++++-----------
 .../vue/components/slider/slider-neighbor.js    |   3 +-
 html5/render/vue/utils/style.js                 |   2 +-
 3 files changed, 159 insertions(+), 235 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/776a74a2/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 7938a10..907687e 100644
--- a/html5/render/vue/components/slider/slideMixin.js
+++ b/html5/render/vue/components/slider/slideMixin.js
@@ -25,16 +25,15 @@ import {
   fireLazyload,
   addTransform,
   copyTransform,
+  getTransformObj,
   bind
 } from '../../utils'
 import { extractComponentStyle, createEventMap } from '../../core'
 
-// const TRANSITION_TIME = 200
-const TRANSITION_TIME = 1000
+const TRANSITION_TIME = 100
+const NEIGHBOR_SCALE_TIME = 50
 const MAIN_SLIDE_OPACITY = 1
-
-// trigger scroll event frequency.
-// const scrollDam = 16
+const THROTTLE_SCROLL_TIME = 16
 
 export default {
   created () {
@@ -48,7 +47,6 @@ export default {
 
   beforeUpdate () {
     this._updateLayout()
-    // this._reorder()
   },
 
   updated () {
@@ -62,13 +60,16 @@ export default {
       }
     }
     fireLazyload(this.$el, true)
+    this._preIndex = this._showNodes[0].index
+    if (this._preIndex !== this.currentIndex) {
+      this._slideTo(this.currentIndex)
+    }
   },
 
   mounted () {
     this._updateLayout()
     this._startAutoPlay()
     this._slideTo(this.currentIndex)
-    // this._reorder()
     fireLazyload(this.$el, true)
   },
 
@@ -127,7 +128,8 @@ export default {
           on: extend(createEventMap(this, ['scroll', 'scrollstart', 'scrollend']), {
             touchstart: this._handleTouchStart,
             touchmove: throttle(bind(this._handleTouchMove, this), 25),
-            touchend: this._handleTouchEnd
+            touchend: this._handleTouchEnd,
+            touchcancel: this._handleTouchCancel
           }),
           staticClass: 'weex-slider weex-slider-wrapper weex-ct',
           staticStyle: extractComponentStyle(this)
@@ -179,7 +181,7 @@ export default {
       }
     },
 
-    _slideTo (index) {
+    _slideTo (index, isTouchScroll) {
       if (!this.infinite || this.infinite === 'false') {
         if (index === -1 || index > (this.frameCount - 1)) {
           this._slideTo(this.currentIndex)
@@ -187,87 +189,103 @@ export default {
         }
       }
 
-      const newIndex = this._normalizeIndex(index)
-      const inner = this.$refs.inner
-      let step = this._step = this.frameCount <= 1 ? 0 : this.currentIndex - index
-      // newIndex: 0 -> 1, sign: -1; newIndex: 1 -> 0, sign: 1.
-      const sign = step === 0 ? 0 : step > 0 ? 1 : -1
-
-      if (Math.abs(step) > 1) {
-        if (process.env.NODE_ENV === 'development') {
-          console.warn('[vue-render] slider step should be no more than 1.')
+      if (!this._preIndex && this._preIndex !== 0) {
+        if (this._showNodes && this._showNodes[0]) {
+          this._preIndex = this._showNodes[0].index
+        }
+        else {
+          this._preIndex = this.currentIndex
         }
-        step = sign
       }
 
+      if (this._sliding) {
+        return
+      }
+      this._sliding = true
+
+      const newIndex = this._normalizeIndex(index)
+      const inner = this.$refs.inner
+      const step = this._step = this.frameCount <= 1 ? 0 : this._preIndex - index
+
       if (inner) {
         this._prepareNodes()
-
-        this.innerOffset += sign * this.wrapperWidth
+        const translate = getTransformObj(inner).translate
+        const match = translate && translate.match(/translate[^(]+\(([+-\d.]+)/)
+        const innerX = match && match[1] || 0
+        const dist = innerX - this.innerOffset
+        this.innerOffset += step * this.wrapperWidth
         // transform the whole slides group.
-        // inner.style.webkitTransition = `-webkit-transform ${TRANSITION_TIME / 1000}s ease-in-out`
-        // inner.style.transition = `transform ${TRANSITION_TIME / 1000}s ease-in-out`
-        // inner.style.webkitTransform = `translate3d(${this.innerOffset}px, 0, 0)`
-        // inner.style.transform = `translate3d(${this.innerOffset}px, 0, 0)`
-
-        this._loopShowNodes(step)
-
-        if (this.isNeighbor) {
-          // set neighbors
-          setTimeout(this._setNeighbors.bind(this), 0)
+        inner.style.webkitTransition = `-webkit-transform ${TRANSITION_TIME / 1000}s ease-in-out`
+        inner.style.transition = `transform ${TRANSITION_TIME / 1000}s ease-in-out`
+        inner.style.webkitTransform = `translate3d(${this.innerOffset}px, 0, 0)`
+        inner.style.transform = `translate3d(${this.innerOffset}px, 0, 0)`
+
+        // emit scroll events.
+        if (!isTouchScroll) {
+          this._emitScrollEvent('scrollstart')
         }
+        setTimeout(() => {
+          this._throttleEmitScroll(dist, () => {
+            this._emitScrollEvent('scrollend')
+          })
+        }, THROTTLE_SCROLL_TIME)
 
-        // current arrange index changed since the slides position begin to change.
-        // this._currentIndexInArrangeArray = this._currentIndexInArrangeArray - step
+        this._loopShowNodes(step)
 
         setTimeout(() => {
-          // inner.style.webkitTransition = ''
-          // inner.style.transition = ''
-          for (let i = this._showStartIdx; i <= this._showEndIdx; i++) {
-            const node = this._showNodes[i]
-            if (!node) { continue }
-            const elm = node.firstElementChild
-            elm.style.webkitTransition = ''
-            elm.style.transition = ''
+          if (this.isNeighbor) {
+            this._setNeighbors()
           }
 
-          // this._loopShowNodes(step)
-
-          // clean cloned nodes and rearrange slide cells.
-          this._rearrangeNodes(newIndex)
+          setTimeout(() => {
+            inner.style.webkitTransition = ''
+            inner.style.transition = ''
+            for (let i = this._showStartIdx; i <= this._showEndIdx; i++) {
+              const node = this._showNodes[i]
+              if (!node) { continue }
+              const elm = node.firstElementChild
+              elm.style.webkitTransition = ''
+              elm.style.transition = ''
+            }
+            // this._loopShowNodes(step)
+            // clean cloned nodes and rearrange slide cells.
+            this._rearrangeNodes(newIndex)
+          }, NEIGHBOR_SCALE_TIME)
         }, TRANSITION_TIME)
       }
 
       // TODO: emit scroll event.
       // nextFrame()
 
-      if (newIndex !== this.currentIndex) {
+      if (newIndex !== this._preIndex) {
         // replace $el with { attr, style } is a legacy usage. Is it necessary to
         // do this ? Or just tell devers to use inline functions to access attrs ?
         this.$emit('change', createEvent(this.$el, 'change', {
           index: newIndex
         }))
-        // setTimeout(() => { this._reorder(newIndex) }, TRANSITION_TIME)
+      }
+    },
+
+    _clearNodesOffset () {
+      const end = this._showEndIdx
+      for (let i = this._showStartIdx; i <= end; i++) {
+        addTransform(this._showNodes[i].firstElementChild, {
+          translate: 'translate3d(0px, 0px, 0px)'
+        })
       }
     },
 
     _loopShowNodes (step) {
-      const sign = step > 0 ? 1 : -1
-      let val = Math.abs(step)
-      while (val--) {
-        let i = sign < 0 ? this._showStartIdx : this._showEndIdx
-        const end = sign < 0 ? this._showEndIdx : this._showStartIdx
-        for (; i !== end - sign; i -= sign) {
-          const nextIdx = i + sign
-          this._positionNode(this._showNodes[i], nextIdx)
-          // this._showNodes[nextIdx] = this._showNodes[i]
-          // this._showNodes[nextIdx]._showIndex = nextIdx
-          // this._positionNode(this._showNodes[nextIdx], nextIdx)
-        }
+      if (!step) {
+        return
       }
-      const begin = sign < 0 ? this._showEndIdx : this._showStartIdx
-      const end = begin - step
-      for (let i = begin; i !== end; i -= sign) {
+      const sign = step > 0 ? 1 : -1
+      let i = step <= 0 ? this._showStartIdx : this._showEndIdx
+      const end = step <= 0 ? this._showEndIdx : this._showStartIdx
+      for (; i !== end - sign; i -= sign) {
+        const nextIdx = i + step
+        this._showNodes[nextIdx] = this._showNodes[i]
+        this._showNodes[nextIdx]._showIndex = nextIdx
         delete this._showNodes[i]
       }
       this._showStartIdx += step
@@ -283,22 +301,11 @@ export default {
         this._initNodes()
         this._inited = true
         this._showNodes = {}
-      //   // prepare nodes for the first time.
-      //   // just generate the arrangeArray.
-      //   for (let i = 0; i < total; i++) {
-      //     const node = cells[i].elm
-      //     node.index = i
-      //     node.style.zIndex = 0
-      //     node.style.opacity = 0
-      //     node._showIndex = i
-      //   }
-      //   // this._positionNodes(start, end, cellBeginIndex)
       }
 
       const showCount = this._showCount = Math.abs(step) + 3
-
-      this._showStartIdx = step <= 0 ? -1 : 1
-      this._showEndIdx = step <= 0 ? showCount - 2 : 2 - showCount
+      this._showStartIdx = step <= 0 ? -1 : 2 - showCount
+      this._showEndIdx = step <= 0 ? showCount - 2 : 1
       this._positionNodes(this._showStartIdx, this._showEndIdx, step)
     },
 
@@ -314,11 +321,13 @@ export default {
       }
     },
 
-    _positionNodes (begin, end, step) {
+    _positionNodes (begin, end, step, anim) {
       const cells = this._cells
+      const start = step <= 0 ? begin : end
+      const stop = step <= 0 ? end : begin
       const sign = step <= 0 ? -1 : 1
-      let cellIndex = this.currentIndex + sign
-      for (let i = begin; i !== end - sign; i = i - sign) {
+      let cellIndex = this._preIndex + sign
+      for (let i = start; i !== stop - sign; i = i - sign) {
         const node = cells[this._normalizeIndex(cellIndex)].elm
         cellIndex = cellIndex - sign
         this._positionNode(node, i)
@@ -329,9 +338,6 @@ export default {
      * index: position index in the showing cells' view.
      */
     _positionNode (node, index) {
-      // if (this._showNodes[index]) {
-      //   return
-      // }
       if (node._inShow && this._showNodes[index] !== node) {
         node = this._getClone(node.index)
       }
@@ -397,6 +403,7 @@ export default {
     _clearNodes (begin, end) {
       for (let i = begin; i <= end; i++) {
         const node = this._showNodes[i]
+        if (!node) { return }
         if (node._isClone) {
           this._removeClone(node)
         }
@@ -419,11 +426,19 @@ export default {
       origNode.style.left = clone.style.left
       origNode.style.opacity = clone.style.opacity
       origNode.style.zIndex = clone.style.zIndex
-      copyTransform(clone, origNode)
-      origNode.firstElementChild.style.left = clone.firstElementChild.style.left
+      // copyTransform(clone, origNode)
+      const transObj = getTransformObj(clone)
+      transObj.translate = transObj.translate.replace(/[+-\d.]+[pw]x/, ($0) => {
+        return pos * this.wrapperWidth - this.innerOffset + 'px'
+      })
+      addTransform(origNode, transObj)
+      copyTransform(clone.firstElementChild, origNode.firstElementChild)
+      // origNode.firstElementChild.style.left = clone.firstElementChild.style.left
       this._removeClone(clone)
-      delete this._showNodes[clone._showIndex]
+      // delete this._showNodes[clone._showIndex]
+      delete this._showNodes[origNode._showIndex]
       this._showNodes[pos] = origNode
+      origNode._showIndex = pos
     },
 
     _rearrangeNodes (newIndex) {
@@ -447,22 +462,14 @@ export default {
       }
 
       this._clearNodes(this._showStartIdx, -2)
+      this._showStartIdx = -1
       this._clearNodes(2, this._showEndIdx)
-
-      // const curNode = shows[0]
-      // if (curNode._isClone) {
-      //   // replace this cloned node with the original node.
-      //   const idx = curNode.index
-      //   for (let i = 0; i < nodesLen; i++) {
-      //     if (nodes[i].index === idx) {
-      //       break
-      //     }
-      //   }
-      //   this._replaceCloneNode(curNode, i)
-      // }
+      this._showEndIdx = 1
+      this._sliding = false
 
       // set current index to the new index.
       this.currentIndex = newIndex
+      this._preIndex = newIndex
     },
 
     /**
@@ -478,147 +485,29 @@ export default {
 
       for (let i = this._showStartIdx; i <= this._showEndIdx; i++) {
         const elm = this._showNodes[i].firstElementChild
-        elm.style.webkitTransition = `all ${TRANSITION_TIME / 1000}s ease`
-        elm.style.transition = `all ${TRANSITION_TIME / 1000}s ease`
+        elm.style.webkitTransition = `all ${NEIGHBOR_SCALE_TIME / 1000}s ease`
+        elm.style.transition = `all ${NEIGHBOR_SCALE_TIME / 1000}s ease`
         const transObj = {
           scale: `scale(${i === 0 ? this.currentItemScale : this.neighborScale})`
         }
-        addTransform(elm, transObj)
+        let translateX
         if (!this._neighborWidth) {
           this._neighborWidth = parseFloat(elm.style.width) || elm.getBoundingClientRect().width
         }
         // calculate position offsets according to neighbor scales.
         if (Math.abs(i) === 1) {
-          const dist = (this.wrapperWidth - this._neighborWidth * this.neighborScale) / 2
-            + this.neighborSpace * weex.config.env.scale
-          elm.style.left = `${-i * dist}px`
+          const dist = ((this.wrapperWidth - this._neighborWidth * this.neighborScale) / 2
+            + this.neighborSpace * weex.config.env.scale) / this.neighborScale
+          translateX = -i * dist
         }
-        // clear position offsets.
         else {
-          elm.style.left = ''
-        }
-      }
-    },
-
-    _order () {
-      this.$nextTick(() => {
-        for (let i = 1, l = this._cells.length; i < l; i++) {
-          const nextElm = this._cells[i].elm
-          const nextOffset = this.wrapperWidth * i
-          nextElm.style.webkitTransform = `translate3d(${nextOffset}px, 0, 0)`
-          nextElm.style.transform = `translate3d(${nextOffset}px, 0, 0)`
-        }
-        // this._reorder()
-      })
-    },
-
-    _reorder (newIndex) {
-      if (!newIndex && newIndex !== 0) {
-        newIndex = this.currentIndex
-      }
-      // dir: 'current' | 'prev' | 'next'
-      const setPosition = (elm, dir) => {
-        const scale = window.weex.config.env.scale
-        let neighborScale = this.neighborScale
-        let opacity = this.neighborAlpha
-        let offsetX = -this.innerOffset
-        let offsetY = 0
-        if (dir === 'current') {
-          elm.style.zIndex = 1
-          neighborScale = this.currentItemScale
-          opacity = MAIN_SLIDE_OPACITY
-        }
-
-        elm.style.visibility = 'visible'
-
-        const origin = dir === 'prev' ? '100% 0' : '0 0'
-        elm.style.webkitTransformOrigin = origin
-        elm.style.transformOrigin = origin
-
-        const sign = dir === 'current' ? 0 : dir === 'prev' ? -1 : 1
-        offsetX = -this.innerOffset + sign * this.wrapperWidth
-        if (this.isNeighbor) {
-          offsetY = (1 - neighborScale) * this.wrapperHeight / 2
-          elm.style.opacity = opacity
-          if (dir === 'current') {
-            offsetX += this.wrapperWidth * (1 - neighborScale) / 2
-          }
-          else {
-            // offsetX = offsetX - sign * this.neighborSpace * scale
-            offsetX = offsetX - sign * (
-              (this.wrapperWidth - this._origItemWidth * this.currentItemScale) / 2
-              - this.neighborSpace * scale)
-          }
-        }
-
-        elm.style.width = this.wrapperWidth + 'px'
-        const transObj = {
-          translate: `translate3d(${offsetX}px, ${offsetY}px, 0px)`
-        }
-        if (this.isNeighbor) {
-          transObj.scale = `scale(${neighborScale})`
+          // clear position offsets.
+          translateX = 0
         }
+        transObj.translate = `translate3d(${translateX}px, 0px, 0px)`
         addTransform(elm, transObj)
+        elm.style.opacity = i === 0 ? MAIN_SLIDE_OPACITY : this.neighborAlpha
       }
-
-      const removeClone = (clone, prevElm) => {
-        // switch current page.
-        setPosition(prevElm, 'current')
-        // const curTransform = `translate3d(${-this.innerOffset}px, 0, 0)`
-        // prevElm.style.transform = curTransform
-        // prevElm.style.webkitTransform = curTransform
-        // remove clone node.
-        clone && clone.parentElement.removeChild(clone)
-      }
-
-      this.$nextTick(() => {
-        if (this._cells.length <= 1) {
-          return
-        }
-        if (!this.infinite || this.infinite === 'false') {
-          this._order()
-          return
-        }
-        const lastPrev = this._prevElm
-        const prevIndex = this._normalizeIndex(newIndex - 1)
-        const nextIndex = this._normalizeIndex(newIndex + 1)
-        let prevElm = this._prevElm = this._cells[prevIndex].elm
-        const nextElm = this._cells[nextIndex].elm
-        const currentElm = this._cells[newIndex].elm
-
-        if (!this._origItemWidth) {
-          this._origItemWidth = currentElm.firstElementChild.getBoundingClientRect().width
-        }
-
-        // put current slide on the top.
-        setPosition(currentElm, 'current')
-        currentElm.style.webkitBoxAlign = 'center'
-        currentElm.style.webkitAlignItems = 'center'
-        currentElm.style.AlignItems = 'center'
-
-        // clone prevCell if there are only tow slides.
-        if (this._cells.length === 2) {
-          this._clonePrev && removeClone(this._clonePrev, lastPrev)
-          this._clonePrev = prevElm.cloneNode(true)
-          this._clonePrev.classList.add('weex-slide-clone-prev')
-          prevElm.parentElement.insertBefore(this._clonePrev, currentElm)
-          if (!this._prevFired) {
-            fireLazyload(this._clonePrev, true)
-            this._prevFired = true
-          }
-          prevElm = this._clonePrev
-        }
-
-        setPosition(prevElm, 'prev')
-        prevElm.style.webkitBoxAlign = 'end'
-        prevElm.style.webkitAlignItems = 'flex-end'
-        prevElm.style.AlignItems = 'flex-end'
-        setPosition(nextElm, 'next')
-        nextElm.style.webkitBoxAlign = 'start'
-        nextElm.style.webkitAlignItems = 'flex-start'
-        nextElm.style.AlignItems = 'flex-start'
-        this.currentIndex = newIndex
-      })
     },
 
     _next () {
@@ -630,7 +519,6 @@ export default {
     },
 
     _handleTouchStart (event) {
-      // event.stopPropagation()
       const touch = event.changedTouches[0]
       this._stopAutoPlay()
       this._touchParams = {
@@ -643,9 +531,14 @@ export default {
     },
 
     _handleTouchMove (event) {
-      // event.stopPropagation()
       const tp = this._touchParams
       if (!tp) { return }
+      if (this._sliding) {
+        if (process.env.NODE_ENV === 'development') {
+          console.warn(`[vue-render] warn: can't scroll the slider during sliding.`)
+        }
+        return
+      }
       const { startX, startY } = this._touchParams
       const touch = event.changedTouches[0]
       const offsetX = touch.pageX - startX
@@ -656,7 +549,7 @@ export default {
       if (typeof isV === 'undefined') {
         isV = tp.isVertical = Math.abs(offsetX) < Math.abs(offsetY)
         if (!isV) {
-          this.$emit('scrollstart', createEvent(this.$el, 'scrollstart', {}))
+          this._emitScrollEvent('scrollstart')
         }
       }
       // vertical scroll. just ignore it.
@@ -667,17 +560,20 @@ export default {
       event.preventDefault()
       const inner = this.$refs.inner
       if (inner && offsetX) {
+        if (!this._nodesOffsetCleared) {
+          this._nodesOffsetCleared = true
+          this._clearNodesOffset()
+        }
         // TODO: add throttle.
-        this.$emit('scroll', createEvent(this.$el, 'scroll', {
+        this._emitScrollEvent('scroll', {
           offsetXRatio: offsetX / this.wrapperWidth
-        }))
+        })
         inner.style.transform = `translate3d(${this.innerOffset + offsetX}px, 0, 0)`
         inner.style.webkitTransform = `translate3d(${this.innerOffset + offsetX}px, 0, 0)`
       }
     },
 
     _handleTouchEnd (event) {
-      // event.stopPropagation()
       this._startAutoPlay()
       const tp = this._touchParams
       if (!tp) { return }
@@ -688,14 +584,43 @@ export default {
       const inner = this.$refs.inner
       const { offsetX } = tp
       if (inner) {
-        this.$emit('scrollend', createEvent(this.$el, 'scrollend'))
+        this._nodesOffsetCleared = false
         // TODO: test the velocity if it's less than 0.2.
         const reset = Math.abs(offsetX / this.wrapperWidth) < 0.2
         const direction = offsetX > 0 ? 1 : -1
         const newIndex = reset ? this.currentIndex : (this.currentIndex - direction)
-        this._slideTo(newIndex)
+        this._slideTo(newIndex, true)
       }
       delete this._touchParams
+    },
+
+    _handleTouchCancel (event) {
+      return this._handleTouchEnd(event)
+    },
+
+    _emitScrollEvent (type, data = {}) {
+      this.$emit(type, createEvent(this.$el, type, data))
+    },
+
+    _throttleEmitScroll (offset, callback) {
+      let i = 0
+      const throttleTime = THROTTLE_SCROLL_TIME
+      const cnt = parseInt(TRANSITION_TIME / throttleTime) - 1
+      const sign = offset > 0 ? 1 : -1
+      const r = Math.abs(offset / this.wrapperWidth)
+      const throttledScroll = () => {
+        if (++i > cnt) {
+          return callback && callback.call(this)
+        }
+        const ratio = this._step === 0
+          ? sign * r * (1 - i / cnt)
+          : sign * (r + (1 - r) * i / cnt)
+        this._emitScrollEvent('scroll', {
+          offsetXRatio: ratio
+        })
+        setTimeout(throttledScroll, THROTTLE_SCROLL_TIME)
+      }
+      throttledScroll()
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/776a74a2/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 07ec2a7..7d691e1 100644
--- a/html5/render/vue/components/slider/slider-neighbor.js
+++ b/html5/render/vue/components/slider/slider-neighbor.js
@@ -18,7 +18,6 @@
  */
 import slideMixin from './slideMixin'
 
-const DEFAULT_MAIN_SLIDE_SCALE = 0.9
 const DEFAULT_NEIGHBOR_SPACE = 20
 const DEFAULT_NEIGHBOR_ALPHA = 0.6
 const DEFAULT_NEIGHBOR_SCALE = 0.8
@@ -73,7 +72,7 @@ export default {
         val = parseFloat(val)
         return !isNaN(val) && val >= 0 && val <= 1
       },
-      default: DEFAULT_MAIN_SLIDE_SCALE
+      default: DEFAULT_CURRENT_ITEM_SCALE
     }
   },
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/776a74a2/html5/render/vue/utils/style.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/utils/style.js b/html5/render/vue/utils/style.js
index 0a66285..bb12934 100644
--- a/html5/render/vue/utils/style.js
+++ b/html5/render/vue/utils/style.js
@@ -242,7 +242,7 @@ export function addTranslateX (elm: HTMLElement, toAdd: number): void {
 export function copyTransform (from: HTMLElement, to: HTMLElement, key: string | void): void {
   let str
   if (!key) {
-    str = to.style.webkitTransform || to.style.transform
+    str = from.style.webkitTransform || from.style.transform
   }
   else {
     const fromObj = getTransformObj(from)


[02/50] incubator-weex git commit: * [ios] use intersectionRange compare

Posted by so...@apache.org.
* [ios] use intersectionRange compare


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

Branch: refs/heads/master
Commit: 7274bdd726451deb8257c96d646ce02259e89419
Parents: 9778415
Author: acton393 <zh...@gmail.com>
Authored: Thu Jun 1 15:37:04 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jun 2 10:27:00 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7274bdd7/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
index 90ab4ce..deeddd6 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
@@ -748,9 +748,10 @@ do {\
         NSAttributedString * lastLineText = nil;
         NSRange lastLineTextRange = WXNSRangeFromCFRange(CTLineGetStringRange(lastLine));
         NSRange attributeStringRange = NSRangeFromString(attributedString.string);
-        if (!NSEqualRanges(NSUnionRange(lastLineTextRange, attributeStringRange), attributeStringRange)) {
+        NSRange interSectionRange = NSIntersectionRange(lastLineTextRange, attributeStringRange);
+        if (!NSEqualRanges(interSectionRange, lastLineTextRange)) {
             // out of bounds
-            lastLineTextRange = NSMakeRange(attributeStringRange.location, attributeStringRange.length);
+            lastLineTextRange = interSectionRange;
         }
         lastLineText = [attributedString attributedSubstringFromRange: lastLineTextRange];
         if (!lastLineText) {


[48/50] incubator-weex git commit: + [android] add parallax component as demo

Posted by so...@apache.org.
+ [android] add parallax component as demo


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

Branch: refs/heads/master
Commit: 87c80dedcc53782928d7dc798de5640400f2c0c9
Parents: 6428fab
Author: zshshr <zh...@gmail.com>
Authored: Tue Jun 6 10:24:42 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Thu Jun 8 18:45:41 2017 +0800

----------------------------------------------------------------------
 .../java/com/alibaba/weex/WXApplication.java    |   2 +
 .../weex/extend/component/WXParallax.java       | 345 +++++++++++++++++++
 2 files changed, 347 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/87c80ded/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java b/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
index 283a44f..561d292 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
@@ -30,6 +30,7 @@ import com.alibaba.weex.extend.adapter.InterceptWXHttpAdapter;
 import com.alibaba.weex.extend.component.RichText;
 import com.alibaba.weex.extend.component.WXComponentSyncTest;
 import com.alibaba.weex.extend.component.WXMask;
+import com.alibaba.weex.extend.component.WXParallax;
 import com.alibaba.weex.extend.component.dom.WXMaskDomObject;
 import com.alibaba.weex.extend.module.GeolocationModule;
 import com.alibaba.weex.extend.module.MyModule;
@@ -75,6 +76,7 @@ public class WXApplication extends Application {
     try {
       Fresco.initialize(this);
       WXSDKEngine.registerComponent("synccomponent", WXComponentSyncTest.class);
+      WXSDKEngine.registerComponent(WXParallax.PARALLAX, WXParallax.class);
 
       WXSDKEngine.registerComponent("richtext", RichText.class);
       WXSDKEngine.registerModule("render", RenderModule.class);

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/87c80ded/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXParallax.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXParallax.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXParallax.java
new file mode 100644
index 0000000..7cceebc
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXParallax.java
@@ -0,0 +1,345 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+package com.alibaba.weex.extend.component;
+
+import android.graphics.Color;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.view.animation.AnimationSet;
+import android.view.animation.RotateAnimation;
+import android.view.animation.ScaleAnimation;
+import android.view.animation.TranslateAnimation;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.common.Constants;
+import com.taobao.weex.common.ICheckBindingScroller;
+import com.taobao.weex.common.OnWXScrollListener;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.animation.WXAnimationBean;
+import com.taobao.weex.ui.component.Scrollable;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXDiv;
+import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.utils.WXLogUtils;
+import com.taobao.weex.utils.WXResourceUtils;
+
+import java.util.ArrayList;
+
+
+/**
+ * Created by zhengshihan on 2017/5/3.
+ */
+
+public class WXParallax extends WXDiv implements OnWXScrollListener, ICheckBindingScroller {
+
+  public final static String WX_TRANSFORM = "transform";
+  public final static String WX_OPACITY = "opacity";
+  public static final String PARALLAX = "parallax";
+  public static final String BINDING_SCROLLER = "bindingScroller";
+
+
+  ArrayList<TransformCreator> mTransformPropArrayList = new ArrayList<>();
+  BackgroundColorCreator mBackgroundColor;
+  String mBindingRef = "";
+
+  private int mBackGroundColor = 0;
+  private float mOffsetY = 0;
+
+  public WXParallax(WXSDKInstance instance, WXDomObject dom, WXVContainer parent) {
+    super(instance, dom, parent);
+    initTransform(dom.getAttrs().get(WX_TRANSFORM));
+    initOpacity(dom.getAttrs().get(Constants.Name.OPACITY));
+    initBackgroundColor(dom.getAttrs().get(Constants.Name.BACKGROUND_COLOR));
+
+    mBindingRef = (String) (dom.getAttrs().get(BINDING_SCROLLER));
+    instance.registerOnWXScrollListener(this);
+  }
+
+
+  private void initBackgroundColor(Object obj) {
+    if (obj == null)
+      return;
+
+    if (obj instanceof JSONObject) {
+      mBackgroundColor = new BackgroundColorCreator();
+      JSONObject object = (JSONObject) obj;
+
+      JSONArray in = object.getJSONArray("in");
+      mBackgroundColor.input = new int[in.size()];
+      for (int i = 0; i < in.size(); i++) {
+        mBackgroundColor.input[i] = in.getInteger(i);
+      }
+
+      JSONArray out = object.getJSONArray("out");
+      mBackgroundColor.output = new int[out.size()];
+      for (int i = 0; i < out.size(); i++) {
+        String colorStr = out.getString(i);
+        mBackgroundColor.output[i] = WXResourceUtils.getColor(colorStr);
+      }
+    }
+  }
+
+  private void initOpacity(Object obj) {
+    if (obj == null)
+      return;
+
+    if (obj instanceof JSONObject) {
+      mTransformPropArrayList.add(new TransformCreator(WX_OPACITY, (JSONObject) obj));
+    }
+
+  }
+
+  private void initTransform(Object propStr) {
+
+    if (propStr == null) {
+      WXLogUtils.w("WXParallax initAnimation propStr ==null");
+      return;
+    }
+    JSONArray jsonObject;
+    if (propStr instanceof JSONArray) {
+      jsonObject = (JSONArray) propStr;
+      for (int i = 0; i < jsonObject.size(); i++) {
+        JSONObject object = jsonObject.getJSONObject(i);
+        mTransformPropArrayList.add(i,
+            new TransformCreator(object.getString("type"), object));
+      }
+    }
+  }
+
+  @Override
+  public boolean isNeedScroller(String ref, Object option) {
+
+    mBindingRef = (String) (getDomObject().getAttrs().get(BINDING_SCROLLER));
+    if (TextUtils.isEmpty(mBindingRef)) {
+      WXComponent root = getInstance().getRootComponent();
+      if (root != null && root instanceof WXVContainer) {
+        Scrollable scrollable = root.getFirstScroller();
+        if (scrollable != null) {
+          mBindingRef = scrollable.getRef();
+        }
+      }
+    }
+    if (!TextUtils.isEmpty(mBindingRef)
+        && !TextUtils.isEmpty(ref)
+        && ref.equals(mBindingRef)) {
+      return true;
+    }
+    return false;
+  }
+
+  @Override
+  public void onScrolled(View view, int dx, int dy) {
+
+    mOffsetY = mOffsetY + dy;
+
+    AnimationSet animationSet = new AnimationSet(true);
+    boolean hasAnimation = false;
+    for (int i = 0; i < mTransformPropArrayList.size(); i++) {
+      TransformCreator creator = mTransformPropArrayList.get(i);
+      Animation animation = creator.getAnimation(dx, dy);
+      if (animation != null) {
+        animationSet.addAnimation(animation);
+        hasAnimation = true;
+      }
+    }
+
+    if (hasAnimation) {
+      animationSet.setFillAfter(true);
+      if (getHostView() != null) {
+        getHostView().startAnimation(animationSet);
+      }
+    }
+
+    if (mBackgroundColor != null) {
+      int color = mBackgroundColor.getColor(dx, dy);
+      if (mBackGroundColor != color) {
+        getHostView().setBackgroundColor(color);
+        mBackGroundColor = color;
+      }
+    }
+  }
+
+  @Override
+  public void onScrollStateChanged(View view, int x, int y, int newState) {
+
+  }
+
+
+  private class BackgroundColorCreator {
+
+    int[] input;
+    int[] output;
+
+    int getColor(int XDelta, int YDelta) {
+      if (WXEnvironment.isApkDebugable()) {
+        WXLogUtils.d("WXParallax:getColor: XDelta" + XDelta + " YDelta:" + YDelta + " mOffsetY" + mOffsetY);
+      }
+      int r1, g1, b1;
+
+      if (mOffsetY > input[1]) {
+        return output[1];
+      }
+
+      if (mOffsetY < input[0]) {
+        return output[0];
+      }
+
+      r1 = Color.red(output[0]) + (int) (mOffsetY - input[0]) * (Color.red(output[1]) - Color.red(output[0])) / (input[1] - input[0]);
+      g1 = Color.green(output[0]) + (int) (mOffsetY - input[0]) * (Color.green(output[1]) - Color.green(output[0])) / (input[1] - input[0]);
+      b1 = Color.blue(output[0]) + (int) (mOffsetY - input[0]) * (Color.blue(output[1]) - Color.blue(output[0])) / (input[1] - input[0]);
+
+      if (WXEnvironment.isApkDebugable()) {
+        WXLogUtils.d("WXParallax:getColor: r1" + r1 + " g1:" + g1 + " b1:" + b1);
+      }
+      return Color.rgb(r1, g1, b1);
+    }
+
+  }
+
+  private class TransformCreator {
+
+    String transformType;
+    float[] input, output;
+    float fromTranslateX, fromTranslateY;
+    float fromScaleX, fromScaleY;
+    float fromRotate, fromOpacity;
+
+    TransformCreator(String type, JSONObject object) {
+      transformType = type;
+      JSONArray in = object.getJSONArray("in");
+      input = parseParamArray(in);
+      JSONArray out = object.getJSONArray("out");
+      output = parseParamArray(out);
+
+      switch (transformType) {
+        case WXAnimationBean.Style.WX_TRANSLATE:
+          fromTranslateX = output[0];
+          fromTranslateY = output[1];
+          break;
+        case WXAnimationBean.Style.WX_SCALE:
+          fromScaleX = output[0];
+          fromScaleY = output[1];
+          break;
+        case WXAnimationBean.Style.WX_ROTATE:
+          fromRotate = output[0];
+          break;
+        case WX_OPACITY:
+          fromOpacity = output[0];
+          break;
+      }
+    }
+
+    float[] parseParamArray(JSONArray in) {
+
+      int size = in.size();
+      float[] param = new float[size];
+      for (int j = 0; j < size; j++) {
+        param[j] = in.getFloatValue(j);
+      }
+      return param;
+    }
+
+
+    @Nullable
+    Animation getAnimation(float XDelta, float YDelta) {
+
+      float offset = mOffsetY;
+      if (offset > input[1]) {
+        offset = input[1];
+      }
+      if (offset < input[0]) {
+        offset = input[0];
+      }
+      float toTranslateX, toTranslateY, toOpacity, toScaleX, toScaleY, toRotate;
+      Animation animation = null;
+
+      if (WXEnvironment.isApkDebugable()) {
+        WXLogUtils.d("WXParallax", "type:" + transformType + " XDelta:" + XDelta + " YDelta:" + YDelta);
+      }
+      switch (transformType) {
+
+        case WXAnimationBean.Style.WX_TRANSLATE:
+          toTranslateX = output[0] + (output[2] - output[0]) * (offset - input[0]) / (input[1] - input[0]);
+          toTranslateY = output[1] + (output[3] - output[1]) * (offset - input[0]) / (input[1] - input[0]);
+
+          if (fromTranslateX == toTranslateX && fromTranslateY == toTranslateY) {
+            return null;
+          }
+          animation = new TranslateAnimation(fromTranslateX, toTranslateX, fromTranslateY, toTranslateY);
+
+          fromTranslateX = toTranslateX;
+          fromTranslateY = toTranslateY;
+
+          if (WXEnvironment.isApkDebugable()) {
+            WXLogUtils.d("WXParallax", "XDelta:" + XDelta + " YDelta:" + YDelta);
+            WXLogUtils.d("WXParallax", " fromTranslateX:" + fromTranslateX + " toTranslateX:" + toTranslateX + " fromTranslateY:" + fromTranslateY + " toTranslateY:" + toTranslateY);
+          }
+
+          break;
+        case WXAnimationBean.Style.WX_SCALE:
+          toScaleX = output[0] + (output[2] - output[0]) * (offset - input[0]) / (input[1] - input[0]);
+          toScaleY = output[1] + (output[3] - output[1]) * (offset - input[0]) / (input[1] - input[0]);
+
+          if (fromScaleX == toScaleX && fromScaleY == toScaleY) {
+            return null;
+          }
+          animation = new ScaleAnimation(fromScaleX, toScaleX, fromScaleY, toScaleY);
+
+          if (WXEnvironment.isApkDebugable()) {
+            WXLogUtils.d("WXParallax", " fromScaleX:" + fromScaleX + " toScaleX:" + toScaleX + " fromScaleY:" + fromScaleY + " toScaleY:" + toScaleY);
+          }
+
+          fromScaleX = toScaleX;
+          fromScaleY = toScaleY;
+          break;
+
+        case WXAnimationBean.Style.WX_ROTATE:
+          toRotate = output[0] + (output[1] - output[0]) * (offset - input[0]) / (input[1] - input[0]);
+          if (fromRotate == toRotate) {
+            return null;
+          }
+          animation = new RotateAnimation(fromRotate, toRotate, output[2], output[3]);
+          fromRotate = toRotate;
+          break;
+
+        case WX_OPACITY:
+          toOpacity = output[0] + (output[1] - output[0]) * (offset - input[0]) / (input[1] - input[0]);
+          if (fromOpacity == toOpacity) {
+            return null;
+          }
+          animation = new AlphaAnimation(fromOpacity, toOpacity);
+
+          if (WXEnvironment.isApkDebugable()) {
+            WXLogUtils.d("WXParallax", "opacity fromOpacity:" + fromOpacity + " toOpacity:" + toOpacity);
+          }
+
+          fromOpacity = toOpacity;
+          break;
+      }
+
+      return animation;
+    }
+  }
+}


[42/50] incubator-weex git commit: * [doc] add 750 viewport concept

Posted by so...@apache.org.
* [doc] add 750 viewport concept


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

Branch: refs/heads/master
Commit: a279c232e1c8d160ff8685b908012ad4a6eb413e
Parents: d6a90e9
Author: acton393 <zh...@gmail.com>
Authored: Wed Jun 7 17:14:27 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Jun 7 17:14:27 2017 +0800

----------------------------------------------------------------------
 doc/source/cn/references/weex-variable.md | 4 ++--
 doc/source/references/weex-variable.md    | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a279c232/doc/source/cn/references/weex-variable.md
----------------------------------------------------------------------
diff --git a/doc/source/cn/references/weex-variable.md b/doc/source/cn/references/weex-variable.md
index d0bd406..4630681 100644
--- a/doc/source/cn/references/weex-variable.md
+++ b/doc/source/cn/references/weex-variable.md
@@ -22,7 +22,7 @@ has_chapter_content: true
     * `platform: string`: 平台信息,是 iOS、Android 还是 Web。
     * `osVersion: string`: 系统版本。
     * `deviceModel: string`: 设备型号 (仅原生应用)。
-    * `deviceWidth: number`: 设备宽度,默认为 750。
+    * `deviceWidth: number`: 设备宽度。Weex 默认以宽度为 750px 做适配渲染,要获得750px下的屏幕高度,可以通过 `height = 750/deviceWidth*deviceHeight`  公式获得,可以使用到 CSS 中,用来设置全屏尺寸
     * `deviceHeight: number`: 设备高度。
 
 ## `weex.requireModule(module: string): Object`
@@ -44,4 +44,4 @@ has_chapter_content: true
 
 ## `weex.document: Document`
 
-返回当前 Weex 页面的文档对象。
\ No newline at end of file
+返回当前 Weex 页面的文档对象。

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a279c232/doc/source/references/weex-variable.md
----------------------------------------------------------------------
diff --git a/doc/source/references/weex-variable.md b/doc/source/references/weex-variable.md
index 35b4da4..b55eef5 100644
--- a/doc/source/references/weex-variable.md
+++ b/doc/source/references/weex-variable.md
@@ -21,8 +21,8 @@ This variable contains all the environment information for the current Weex page
 + `Platform: string`: platform information, that is iOS, Android or Web.
 + `OsVersion: string`: system version.
 + `DeviceModel: string`: device model (native application only).
-+ `DeviceWidth: number`: device width, default 750.
-+ `DeviceHeight: number`: device height.    
++ `DeviceWidth: number`: device width
++ `DeviceHeight: number`: device height.  In Weex, the default width of viewport is 750px, thus you can obtain the height of screen by `height = 750/deviceWidth*deviceHeight` if the width of viewport remains its default value.
 
 `weex.requireModule(module: string): Object`     
 


[29/50] incubator-weex git commit: Merge branch 'dev' of https://git-wip-us.apache.org/repos/asf/incubator-weex into dev

Posted by so...@apache.org.
Merge branch 'dev' of https://git-wip-us.apache.org/repos/asf/incubator-weex into 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/2fca48bf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/2fca48bf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/2fca48bf

Branch: refs/heads/master
Commit: 2fca48bfac161bcc8be11fd82bbafce910b8054f
Parents: 9c73ec8 a643ded
Author: tancy <ro...@gmail.com>
Authored: Tue Jun 6 18:44:00 2017 +0800
Committer: tancy <ro...@gmail.com>
Committed: Tue Jun 6 18:44:00 2017 +0800

----------------------------------------------------------------------
 doc/source/cn/references/components/input.md | 241 +++++++++++++++++-----
 doc/source/references/components/input.md    |   2 +-
 2 files changed, 196 insertions(+), 47 deletions(-)
----------------------------------------------------------------------



[41/50] incubator-weex git commit: * [test] ignore android nav bar in screenshot diff test

Posted by so...@apache.org.
* [test] ignore android nav bar in screenshot diff test


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

Branch: refs/heads/master
Commit: d6a90e92723ba284b1097e8ab99b767be2ba430f
Parents: 168d168
Author: sospartan <so...@apache.org>
Authored: Mon Jun 5 16:05:44 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Wed Jun 7 17:06:00 2017 +0800

----------------------------------------------------------------------
 test/scripts/util.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d6a90e92/test/scripts/util.js
----------------------------------------------------------------------
diff --git a/test/scripts/util.js b/test/scripts/util.js
index 775426c..23c2cae 100644
--- a/test/scripts/util.js
+++ b/test/scripts/util.js
@@ -83,8 +83,8 @@ function diffImage(imageAPath, imageB, threshold, outputPath) {
       thresholdType: BlinkDiff.THRESHOLD_PIXEL,
       threshold: threshold,
       imageOutputPath: outputPath,
-      cropImageA:isIOS?{y:128}:{y:72,height:1700},
-      cropImageB:isIOS?{y:128}:{y:72,height:1700}
+      cropImageA:isIOS?{y:128}:{y:242,height:1530},//android: 242 - status bar(72)+navigator bar(170)
+      cropImageB:isIOS?{y:128}:{y:242,height:1530}
     });
 
     diff.run((err, result) => {


[08/50] incubator-weex git commit: + [ios] fixbug: cycle slider

Posted by so...@apache.org.
+ [ios] fixbug: cycle slider


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

Branch: refs/heads/master
Commit: a4cc8dfd9745aeb3efc4eabbffd1a00e771d5067
Parents: 8a1653c
Author: 齐山 <su...@163.com>
Authored: Fri May 26 18:03:48 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jun 2 11:10:04 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a4cc8dfd/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
index 3265308..517af72 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
@@ -586,9 +586,10 @@ typedef NS_ENUM(NSInteger, Direction) {
 
 - (void)recycleSliderView:(WXRecycleSliderView *)recycleSliderView didScrollToItemAtIndex:(NSInteger)index
 {
-    self.currentIndex = index;
-    if (_sliderChangeEvent) {
+    
+    if (_sliderChangeEvent && index != self.currentIndex) {
         [self fireEvent:@"change" params:@{@"index":@(index)} domChanges:@{@"attrs": @{@"index": @(index)}}];
+        self.currentIndex = index;
     }
 }
 


[04/50] incubator-weex git commit: * [ios] remove gesture in case of crash

Posted by so...@apache.org.
* [ios] remove gesture in case of crash


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

Branch: refs/heads/master
Commit: 99a9bbd92d48c7afd0a8f27ba14d8a314dc4f6a0
Parents: 41ee7b2
Author: acton393 <zh...@gmail.com>
Authored: Thu May 25 21:46:09 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jun 2 10:27:00 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m | 8 ++++++++
 1 file changed, 8 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/99a9bbd9/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
index 85c767c..7dd496b 100644
--- a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
+++ b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
@@ -270,6 +270,8 @@ if ([removeEventName isEqualToString:@#eventName]) {\
 - (void)removeClickEvent
 {
     if (_tapGesture) {
+        [_tapGesture removeTarget:self action:@selector(onClick:)];
+        [self.view removeGestureRecognizer:_tapGesture];
         _tapGesture.delegate = nil;
         _tapGesture = nil;
     }
@@ -341,6 +343,8 @@ if ([removeEventName isEqualToString:@#eventName]) {\
     }
   
     for (UISwipeGestureRecognizer *recognizer in _swipeGestures) {
+        [recognizer removeTarget:self action:@selector(onSwipe:)];
+        [self.view removeGestureRecognizer:recognizer];
         recognizer.delegate = nil;
     }
     
@@ -394,6 +398,8 @@ if ([removeEventName isEqualToString:@#eventName]) {\
 - (void)removeLongPressEvent
 {
     if (_longPressGesture) {
+        [_longPressGesture removeTarget:self action:@selector(onLongPress:)];
+        [self.view removeGestureRecognizer:_longPressGesture];
         _longPressGesture.delegate = nil;
         _longPressGesture = nil;
     }
@@ -539,6 +545,8 @@ if ([removeEventName isEqualToString:@#eventName]) {\
         && !_listenPanStart && !_listenPanMove && !_listenPanEnd
         && !_listenHorizontalPan && !_listenVerticalPan
         ) {
+        [_panGesture removeTarget:self action:@selector(onPan:)];
+        [self.view removeGestureRecognizer:_panGesture];
         _panGesture.delegate = nil;
         _panGesture = nil;
     }


[19/50] incubator-weex git commit: Merge branch '0.13-dev-web-no-slider-refactor' into 0.13-dev-web

Posted by so...@apache.org.
Merge branch '0.13-dev-web-no-slider-refactor' into 0.13-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/8b2ee21e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/8b2ee21e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/8b2ee21e

Branch: refs/heads/master
Commit: 8b2ee21e0d688e4c57462fba4cd2c8a1c26f42f6
Parents: c2a853b 6ddbab8
Author: MrRaindrop <te...@gmail.com>
Authored: Sun Jun 4 13:40:54 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Sun Jun 4 13:40:54 2017 +0800

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



[07/50] incubator-weex git commit: + [ios] fix bug: when add IndicatorView lazy . the IndicatorView can not create in slider successfully

Posted by so...@apache.org.
+ [ios] fix bug: when add IndicatorView  lazy . the IndicatorView can not create in slider successfully


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

Branch: refs/heads/master
Commit: 8a1653c0cbf382a543bde5b9ac431b73b0d24e2c
Parents: 7274bdd
Author: 齐山 <su...@163.com>
Authored: Thu Jun 1 21:43:39 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jun 2 11:09:51 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m | 1 +
 ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.m      | 1 +
 2 files changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8a1653c0/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
index 3b8adf8..3265308 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
@@ -431,6 +431,7 @@ typedef NS_ENUM(NSInteger, Direction) {
         if ([view isKindOfClass:[WXIndicatorView class]]) {
             ((WXIndicatorComponent *)subcomponent).delegate = self;
             [recycleSliderView addSubview:view];
+            [self setIndicatorView:(WXIndicatorView *)view];
             return;
         }
         

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8a1653c0/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.m
index 1077bc8..f6451cd 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.m
@@ -449,6 +449,7 @@
         if ([view isKindOfClass:[WXIndicatorView class]]) {
             ((WXIndicatorComponent *)subcomponent).delegate = self;
             [sliderView addSubview:view];
+            [self setIndicatorView:(WXIndicatorView *)view];
             return;
         }
         


[18/50] incubator-weex git commit: * [html5] update.

Posted by so...@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/6ddbab85
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/6ddbab85
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/6ddbab85

Branch: refs/heads/master
Commit: 6ddbab858458dc4c697bd06182d1940766a19d24
Parents: 19c0a78
Author: MrRaindrop <te...@gmail.com>
Authored: Sun Jun 4 13:39:39 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Sun Jun 4 13:39:39 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/core/style.js | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6ddbab85/html5/render/vue/core/style.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/core/style.js b/html5/render/vue/core/style.js
index 07e6e7b..8bb3029 100644
--- a/html5/render/vue/core/style.js
+++ b/html5/render/vue/core/style.js
@@ -42,6 +42,8 @@ export function getHeadStyleMap () {
        * why not using styleSheet.rules || styleSheet.cssRules to get css rules ?
        * because weex's components defined non-standard style attributes, which is
        * auto ignored when access rule.cssText.
+       * another reason not to use cssRules directy:
+       * @issue: https://stackoverflow.com/questions/21642277/security-error-the-operation-is-insecure-in-firefox-document-stylesheets
        */
       if ((styleSheet.ownerNode.tagName.toLowerCase() === 'link')
         || !styleSheet.ownerNode.textContent) {


[39/50] incubator-weex git commit: * [test] update base for border test

Posted by so...@apache.org.
* [test] update base for border test


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

Branch: refs/heads/master
Commit: a28f885549470ad78088ed6c471894e240057762
Parents: 8ed8ac6
Author: sospartan <so...@apache.org>
Authored: Wed Jun 7 10:11:25 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Wed Jun 7 16:54:29 2017 +0800

----------------------------------------------------------------------
 test/screenshot/border-ios.png | Bin 161202 -> 128206 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a28f8855/test/screenshot/border-ios.png
----------------------------------------------------------------------
diff --git a/test/screenshot/border-ios.png b/test/screenshot/border-ios.png
index bc811e9..bb2f990 100644
Binary files a/test/screenshot/border-ios.png and b/test/screenshot/border-ios.png differ


[13/50] incubator-weex git commit: Merge branch '0.13-dev' of https://github.com/acton393/incubator-weex into wip-us-0.13-dev

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

Branch: refs/heads/master
Commit: 1216f81b192b6cf44f9ca6deaec5af66242a5a54
Parents: 3110422 ee2cd69
Author: acton393 <zh...@gmail.com>
Authored: Fri Jun 2 12:53:53 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jun 2 12:53:53 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1216f81b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
----------------------------------------------------------------------


[06/50] incubator-weex git commit: * [ios] try to fix text crash

Posted by so...@apache.org.
* [ios] try to fix text crash


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

Branch: refs/heads/master
Commit: b1070991edd41a2e78eb55d204a2df16efb83d4d
Parents: 3a98c09
Author: acton393 <zh...@gmail.com>
Authored: Thu Jun 1 14:47:54 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jun 2 10:27:00 2017 +0800

----------------------------------------------------------------------
 .../WeexSDK/Sources/Component/WXTextComponent.m  | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1070991/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
index d370964..f560aef 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
@@ -349,9 +349,9 @@ do {\
     });
 }
 
-- (NSMutableAttributedString *)buildCTAttributeString {
-    
-    NSString *string = [self text] ?: @"";
+- (NSMutableAttributedString *)buildCTAttributeString
+{
+    NSMutableString *string = [NSMutableString stringWithFormat:@"%@", [self text] ?: @""];
     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
     if (_color) {
         [attributedString addAttribute:NSForegroundColorAttributeName value:_color range:NSMakeRange(0, string.length)];
@@ -745,7 +745,18 @@ do {\
         // default truncationType is kCTLineTruncationEnd
         CTLineTruncationType truncationType = kCTLineTruncationEnd;
         NSAttributedString *attributedString = [self buildCTAttributeString];
-        NSAttributedString * lastLineText = [attributedString attributedSubstringFromRange: WXNSRangeFromCFRange(CTLineGetStringRange(lastLine))];
+        NSAttributedString * lastLineText = nil;
+        @try {
+            lastLineText = [attributedString attributedSubstringFromRange: WXNSRangeFromCFRange(CTLineGetStringRange(lastLine))];
+        } @catch (NSException *exception) {
+            lastLineText = attributedString;
+        } @finally {
+            if (!lastLineText) {
+                lastLineText = attributedString;
+            }
+            //nothing
+        }
+        
         NSMutableAttributedString *mutableLastLineText = lastLineText.mutableCopy;
         [mutableLastLineText appendAttributedString:truncationToken];
         CTLineRef ctLastLineExtend = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)mutableLastLineText);


[03/50] incubator-weex git commit: * [ios] fix text description about coretext

Posted by so...@apache.org.
* [ios] fix text description about coretext


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

Branch: refs/heads/master
Commit: 3a98c094aa2d3667d13e4730030e6dd0584e0820
Parents: 99a9bbd
Author: acton393 <zh...@gmail.com>
Authored: Fri May 26 11:58:24 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jun 2 10:27:00 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3a98c094/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
index e6be027..d370964 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
@@ -64,7 +64,11 @@
 {
     NSString *superDescription = super.description;
     NSRange semicolonRange = [superDescription rangeOfString:@";"];
-    NSString *replacement = [NSString stringWithFormat:@"; text: %@; frame:%f,%f,%f,%f", _textStorage.string, self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height];
+    NSString * content = _textStorage.string;
+    if ([(WXTextComponent*)self.wx_component useCoreText]) {
+        content = [(WXTextComponent*)self.wx_component valueForKey:@"_text"];
+    }
+    NSString *replacement = [NSString stringWithFormat:@"; text: %@; frame:%f,%f,%f,%f", content, self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height];
     return [superDescription stringByReplacingCharactersInRange:semicolonRange withString:replacement];
 }
 


[16/50] incubator-weex git commit: * [html5] update

Posted by so...@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/c2a853b5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/c2a853b5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/c2a853b5

Branch: refs/heads/master
Commit: c2a853b55d76b2a90c7497c2cdfe5bf52e823af0
Parents: 776a74a
Author: MrRaindrop <te...@gmail.com>
Authored: Sat Jun 3 11:16:55 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Sat Jun 3 11:16:55 2017 +0800

----------------------------------------------------------------------
 .../render/vue/components/slider/slideMixin.js  | 145 ++++++++++---------
 html5/render/vue/components/slider/slider.css   |   6 +-
 2 files changed, 83 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c2a853b5/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 907687e..2655fbb 100644
--- a/html5/render/vue/components/slider/slideMixin.js
+++ b/html5/render/vue/components/slider/slideMixin.js
@@ -21,35 +21,34 @@ import {
   throttle,
   extend,
   createEvent,
-  /* nextFrame, */
   fireLazyload,
   addTransform,
   copyTransform,
   getTransformObj,
-  bind
+  bind,
+  extendKeys
 } from '../../utils'
 import { extractComponentStyle, createEventMap } from '../../core'
 
-const TRANSITION_TIME = 100
-const NEIGHBOR_SCALE_TIME = 50
+const TRANSITION_TIME = 400
+const NEIGHBOR_SCALE_TIME = 100
 const MAIN_SLIDE_OPACITY = 1
-const THROTTLE_SCROLL_TIME = 16
+const THROTTLE_SCROLL_TIME = 25
+const INTERVAL_MINIMUM = 200
 
 export default {
   created () {
     this._clones = []
     this.innerOffset = 0
     this._indicator = null
-    this.$nextTick(() => {
-      this._updateLayout()
-    })
   },
 
   beforeUpdate () {
-    this._updateLayout()
+    this._getWrapperSize()
   },
 
   updated () {
+    this._startAutoPlay()
     const children = this.$children
     const len = children && children.length
     if (children && len > 0) {
@@ -67,14 +66,14 @@ export default {
   },
 
   mounted () {
-    this._updateLayout()
+    this._getWrapperSize()
     this._startAutoPlay()
     this._slideTo(this.currentIndex)
     fireLazyload(this.$el, true)
   },
 
   methods: {
-    _computeWrapperSize () {
+    _getWrapperSize () {
       const wrapper = this.$refs.wrapper
       if (wrapper) {
         const rect = wrapper.getBoundingClientRect()
@@ -83,14 +82,6 @@ export default {
       }
     },
 
-    _updateLayout () {
-      this._computeWrapperSize()
-      // const inner = this.$refs.inner
-      // if (inner) {
-      //   inner.style.width = this.wrapperWidth * this.frameCount + 'px'
-      // }
-    },
-
     _formatChildren (createElement) {
       const children = this.$slots.default || []
       let indicatorVnode
@@ -104,7 +95,7 @@ export default {
       }).map(vnode => {
         return createElement('li', {
           ref: 'cells',
-          staticClass: 'weex-slider-cell weex-ct'
+          staticClass: `weex-slider-cell weex-ct${this.isNeighbor ? ' neighbor-cell' : ''}`
         }, [vnode])
       })
       if (indicatorVnode) {
@@ -158,20 +149,9 @@ export default {
         clearTimeout(this._autoPlayTimer)
         this._autoPlayTimer = null
       }
-      const interval = parseInt(this.interval)
-      this._lastSlideTime = Date.now()
-
-      const autoPlayFn = bind(function () {
-        clearTimeout(this._autoPlayTimer)
-        const now = Date.now()
-        let nextTick = this._lastSlideTime + interval - now
-        nextTick = nextTick > 100 ? nextTick : interval
-        this._next()
-        this._lastSlideTime = now
-        this._autoPlayTimer = setTimeout(autoPlayFn, nextTick)
-      }, this)
-
-      this._autoPlayTimer = setTimeout(autoPlayFn, interval)
+      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)
     },
 
     _stopAutoPlay () {
@@ -247,19 +227,13 @@ export default {
               elm.style.webkitTransition = ''
               elm.style.transition = ''
             }
-            // this._loopShowNodes(step)
             // clean cloned nodes and rearrange slide cells.
             this._rearrangeNodes(newIndex)
           }, NEIGHBOR_SCALE_TIME)
         }, TRANSITION_TIME)
       }
 
-      // TODO: emit scroll event.
-      // nextFrame()
-
       if (newIndex !== this._preIndex) {
-        // replace $el with { attr, style } is a legacy usage. Is it necessary to
-        // do this ? Or just tell devers to use inline functions to access attrs ?
         this.$emit('change', createEvent(this.$el, 'change', {
           index: newIndex
         }))
@@ -269,6 +243,9 @@ export default {
     _clearNodesOffset () {
       const end = this._showEndIdx
       for (let i = this._showStartIdx; i <= end; i++) {
+        let node = this._showNodes[i]
+        node = node && node.firstElementChild
+        if (!node) { continue }
         addTransform(this._showNodes[i].firstElementChild, {
           translate: 'translate3d(0px, 0px, 0px)'
         })
@@ -276,7 +253,7 @@ export default {
     },
 
     _loopShowNodes (step) {
-      if (!step) {
+      if (!step || this.frameCount <= 1) {
         return
       }
       const sign = step > 0 ? 1 : -1
@@ -302,10 +279,21 @@ export default {
         this._inited = true
         this._showNodes = {}
       }
-
+      if (this.frameCount <= 1) {
+        this._showStartIdx = this._showEndIdx = 0
+        const node = this._cells[0].elm
+        node.style.opacity = 1
+        node.style.zIndex = 99
+        node.index = 0
+        this._showNodes[0] = node
+        node._inShow = true
+        node._showIndex = 0
+        return
+      }
       const showCount = this._showCount = Math.abs(step) + 3
       this._showStartIdx = step <= 0 ? -1 : 2 - showCount
       this._showEndIdx = step <= 0 ? showCount - 2 : 1
+      this._clearNodesOffset()
       this._positionNodes(this._showStartIdx, this._showEndIdx, step)
     },
 
@@ -338,7 +326,9 @@ export default {
      * index: position index in the showing cells' view.
      */
     _positionNode (node, index) {
-      if (node._inShow && this._showNodes[index] !== node) {
+      const holder = this._showNodes[index]
+      if (node._inShow && holder !== node) {
+        if (holder) { this._removeClone(holder) }
         node = this._getClone(node.index)
       }
       else if (node._inShow) {
@@ -346,15 +336,10 @@ export default {
       }
 
       node._inShow = true
-      // else if (!this._showNodes[index]) {
-        // node = this._getClone(node.index)
-      // }
       const translateX = index * this.wrapperWidth - this.innerOffset
       addTransform(node, {
         translate: `translate3d(${translateX}px, 0px, 0px)`
       })
-      // node.style.left = (index + this._step) * this.wrapperWidth - this.innerOffset + 'px'
-      // node.style.left = index * this.wrapperWidth + 'px'
       node.style.zIndex = 99 - Math.abs(index)
       node.style.opacity = 1
       node._showIndex = index
@@ -372,7 +357,6 @@ export default {
         clone._isClone = true
         clone._inShow = origNode._inShow
         clone.index = origNode.index
-        clone.style.left = 0
         clone.style.opacity = 0
         clone.style.zIndex = 0
         const ct = this.$refs.inner
@@ -392,7 +376,6 @@ export default {
     _hideNode (node) {
       node._inShow = false
       node.style.opacity = 0
-      node.style.left = 0
       node.style.zIndex = 0
     },
 
@@ -415,6 +398,23 @@ export default {
     },
 
     /**
+     * copy node style props (opacity and zIndex) and transform status from
+     * one element to another.
+     */
+    _copyStyle (from, to, styles = ['opacity', 'zIndex'], transformExtra = {}) {
+      extendKeys(to.style, from.style, styles)
+      const transObj = getTransformObj(from)
+      for (const k in transformExtra) {
+        transObj[k] = transformExtra[k]
+      }
+      addTransform(to, transObj)
+      const fromInner = from.firstElementChild
+      const toInner = to.firstElementChild
+      toInner.style.opacity = fromInner.style.opacity
+      copyTransform(fromInner, toInner)
+    },
+
+    /**
      * replace a clone node with the original node if it's not in use.
      */
     _replaceClone (clone, pos) {
@@ -422,32 +422,40 @@ export default {
       if (origNode._inShow) {
         return
       }
+      const origShowIndex = origNode._showIndex
+      const styleProps = ['opacity', 'zIndex']
+      let cl
+      if (Math.abs(origShowIndex) <= 1) {
+        // leave a clone to replace the origNode in the show zone(-1 ~ 1).
+        cl = this._getClone(origNode.index)
+        this._copyStyle(origNode, cl)
+        this._showNodes[origShowIndex] = cl
+      }
       origNode._inShow = true
-      origNode.style.left = clone.style.left
-      origNode.style.opacity = clone.style.opacity
-      origNode.style.zIndex = clone.style.zIndex
-      // copyTransform(clone, origNode)
       const transObj = getTransformObj(clone)
       transObj.translate = transObj.translate.replace(/[+-\d.]+[pw]x/, ($0) => {
         return pos * this.wrapperWidth - this.innerOffset + 'px'
       })
-      addTransform(origNode, transObj)
-      copyTransform(clone.firstElementChild, origNode.firstElementChild)
-      // origNode.firstElementChild.style.left = clone.firstElementChild.style.left
+      this._copyStyle(clone, origNode, styleProps, transObj)
       this._removeClone(clone)
-      // delete this._showNodes[clone._showIndex]
-      delete this._showNodes[origNode._showIndex]
+      if (!cl) {
+        delete this._showNodes[origShowIndex]
+      }
       this._showNodes[pos] = origNode
       origNode._showIndex = pos
     },
 
     _rearrangeNodes (newIndex) {
+      if (this.frameCount <= 1) {
+        this._sliding = false
+        this.currentIndex = 0
+        return
+      }
       /**
        * clean nodes. replace current node with non-cloned node.
        * set current index to the new index.
        */
       const shows = this._showNodes
-
       for (let i = this._showStartIdx; i <= this._showEndIdx; i++) {
         shows[i]._inShow = false
       }
@@ -479,10 +487,6 @@ export default {
      * 3. set other cells' scale and alpha.
      */
     _setNeighbors () {
-      // const curIdx = this._currentIndexInArrangeArray
-      // const step = this._step
-      // const newBegin = -1 - step
-
       for (let i = this._showStartIdx; i <= this._showEndIdx; i++) {
         const elm = this._showNodes[i].firstElementChild
         elm.style.webkitTransition = `all ${NEIGHBOR_SCALE_TIME / 1000}s ease`
@@ -511,11 +515,19 @@ export default {
     },
 
     _next () {
-      this._slideTo(this.currentIndex + 1)
+      let next = this.currentIndex + 1
+      if (this.frameCount <= 1) {
+        next--
+      }
+      this._slideTo(next)
     },
 
     _prev () {
-      this._slideTo(this.currentIndex - 1)
+      let prev = this.currentIndex - 1
+      if (this.frameCount <= 1) {
+        prev++
+      }
+      this._slideTo(prev)
     },
 
     _handleTouchStart (event) {
@@ -564,7 +576,6 @@ export default {
           this._nodesOffsetCleared = true
           this._clearNodesOffset()
         }
-        // TODO: add throttle.
         this._emitScrollEvent('scroll', {
           offsetXRatio: offsetX / this.wrapperWidth
         })

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c2a853b5/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 dbcb999..4e0f9c2 100644
--- a/html5/render/vue/components/slider/slider.css
+++ b/html5/render/vue/components/slider/slider.css
@@ -20,7 +20,7 @@
   top: 0px;
   left: 0px;
   background: transparent !important;
-  overflow: visible !important;
+  overflow: hidden;
   -webkit-box-align: center;
   -webkit-align-items: center;
   align-items: center;
@@ -28,3 +28,7 @@
   -webkit-justify-content: center;
   justify-content: center;
 }
+
+.neighbor-cell {
+  overflow: visible !important;
+}
\ No newline at end of file


[32/50] incubator-weex git commit: Merge branch 'Mohamed3on-patch-1' of http://github.com/Mohamed3on/incubator-weex into dev This closes #398

Posted by so...@apache.org.
Merge branch 'Mohamed3on-patch-1' of http://github.com/Mohamed3on/incubator-weex into dev
This closes #398


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

Branch: refs/heads/master
Commit: 3a39b78f173a19cde9f8c59b752359a4ce9e3a0e
Parents: c0dc1a6 227cf22
Author: sospartan <so...@apache.org>
Authored: Wed Jun 7 15:54:37 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Wed Jun 7 15:54:37 2017 +0800

----------------------------------------------------------------------
 doc/source/guide/index.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------



[31/50] incubator-weex git commit: + [doc] update websocket doc

Posted by so...@apache.org.
+ [doc] update websocket doc


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

Branch: refs/heads/master
Commit: c0dc1a6eed8163742b4957a0bea6b335c49ee29b
Parents: c7dc125
Author: 齐山 <su...@163.com>
Authored: Wed Jun 7 14:34:01 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Wed Jun 7 14:34:01 2017 +0800

----------------------------------------------------------------------
 doc/source/cn/references/modules/websocket.md | 1 +
 doc/source/references/modules/websocket.md    | 1 +
 2 files changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c0dc1a6e/doc/source/cn/references/modules/websocket.md
----------------------------------------------------------------------
diff --git a/doc/source/cn/references/modules/websocket.md b/doc/source/cn/references/modules/websocket.md
index 50223da..701af41 100644
--- a/doc/source/cn/references/modules/websocket.md
+++ b/doc/source/cn/references/modules/websocket.md
@@ -6,6 +6,7 @@ version: 2.1
 ---
 
 # WebSocket
+<span class="weex-version">v0.12+</span>
 
 ## Summary
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c0dc1a6e/doc/source/references/modules/websocket.md
----------------------------------------------------------------------
diff --git a/doc/source/references/modules/websocket.md b/doc/source/references/modules/websocket.md
index 295ee25..cb36ed1 100644
--- a/doc/source/references/modules/websocket.md
+++ b/doc/source/references/modules/websocket.md
@@ -6,6 +6,7 @@ version: 2.1
 ---
 
 # WebSocket
+<span class="weex-version">v0.12+</span>
 
 ## Summary
 


[17/50] incubator-weex git commit: * [html5] release 0.11.44 & fix accessing stylesheet's cssRules causing error in firefox.

Posted by so...@apache.org.
* [html5] release 0.11.44 & fix accessing stylesheet's cssRules causing error in firefox.


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

Branch: refs/heads/master
Commit: 19c0a78f9215a2ca52211be26cb50629af55d8f7
Parents: 804178a
Author: MrRaindrop <te...@gmail.com>
Authored: Sun Jun 4 13:35:28 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Sun Jun 4 13:35:28 2017 +0800

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


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/19c0a78f/html5/render/vue/core/style.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/core/style.js b/html5/render/vue/core/style.js
index 5ea83a1..07e6e7b 100644
--- a/html5/render/vue/core/style.js
+++ b/html5/render/vue/core/style.js
@@ -43,11 +43,10 @@ export function getHeadStyleMap () {
        * because weex's components defined non-standard style attributes, which is
        * auto ignored when access rule.cssText.
        */
-      if (!styleSheet.cssRules
-        || (styleSheet.ownerNode.tagName.toLowerCase() === 'link')
+      if ((styleSheet.ownerNode.tagName.toLowerCase() === 'link')
         || !styleSheet.ownerNode.textContent) {
         /**
-         * no rules, or in a link. just ignore this. probably a link stylesheet.
+         * css in a link. just ignore this. probably a link stylesheet.
          */
         return pre
       }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/19c0a78f/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 502cede..0d543b7 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "subversion": {
     "browser": "0.5.0",
     "framework": "0.20.6",
-    "vue-render": "0.11.43",
+    "vue-render": "0.11.44",
     "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/19c0a78f/packages/weex-vue-render/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/package.json b/packages/weex-vue-render/package.json
index b165279..cac8980 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.43",
+  "version": "0.11.44",
   "description": "Weex built-in components for Vue 2.x.",
   "license": "Apache-2.0",
   "main": "dist/index.js",


[12/50] incubator-weex git commit: * [ios] fix text trunk line

Posted by so...@apache.org.
* [ios] fix text trunk line


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

Branch: refs/heads/master
Commit: ee2cd69077f071307ec5a6f2eb44992325bc1d54
Parents: 1308ff1
Author: acton393 <zh...@gmail.com>
Authored: Fri Jun 2 12:46:19 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jun 2 12:46:19 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee2cd690/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
index f3fbd93..362fce6 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
@@ -754,7 +754,7 @@ do {\
         NSAttributedString *attributedString = [self buildCTAttributeString];
         NSAttributedString * lastLineText = nil;
         NSRange lastLineTextRange = WXNSRangeFromCFRange(CTLineGetStringRange(lastLine));
-        NSRange attributeStringRange = NSRangeFromString(attributedString.string);
+        NSRange attributeStringRange = NSMakeRange(0, attributedString.string.length);
         NSRange interSectionRange = NSIntersectionRange(lastLineTextRange, attributeStringRange);
         if (!NSEqualRanges(interSectionRange, lastLineTextRange)) {
             // out of bounds


[44/50] incubator-weex git commit: + [ios] bugfix timer & slider

Posted by so...@apache.org.
+ [ios] bugfix timer & slider


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

Branch: refs/heads/master
Commit: b19047383bd5616dc70d82823db3748e29956078
Parents: 404f3cc
Author: 齐山 <su...@163.com>
Authored: Thu Jun 8 11:30:12 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Thu Jun 8 11:30:12 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m | 9 ++++++---
 ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m             | 4 +++-
 2 files changed, 9 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1904738/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
index 517af72..d17b7db 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
@@ -109,6 +109,7 @@ typedef NS_ENUM(NSInteger, Direction) {
     if (currentIndex >= _itemViews.count || currentIndex < 0) {
         currentIndex = 0;
     }
+    NSInteger oldIndex = _currentIndex;
     _currentIndex = currentIndex;
     if (_infinite) {
         if (_direction == DirectionRight) {
@@ -130,7 +131,9 @@ typedef NS_ENUM(NSInteger, Direction) {
     }
     [self resetIndicatorPoint];
     if (self.delegate && [self.delegate respondsToSelector:@selector(recycleSliderView:didScrollToItemAtIndex:)]) {
-        [self.delegate recycleSliderView:self didScrollToItemAtIndex:_currentIndex];
+        if (oldIndex != _currentIndex) {
+            [self.delegate recycleSliderView:self didScrollToItemAtIndex:_currentIndex];
+        }
     }
 }
 
@@ -179,7 +182,7 @@ typedef NS_ENUM(NSInteger, Direction) {
         _currentItemFrame = CGRectMake(self.width, 0, self.width, self.height);
         for (int i = 0; i < self.itemViews.count; i++) {
             UIView *view = [self.itemViews objectAtIndex:i];
-            if (i != self.currentIndex && i != self.nextIndex) {
+            if (i != self.currentIndex) {
                 view.frame = CGRectMake(self.frame.size.width * 3, 0, self.width, self.height);;
             }
         }
@@ -587,7 +590,7 @@ typedef NS_ENUM(NSInteger, Direction) {
 - (void)recycleSliderView:(WXRecycleSliderView *)recycleSliderView didScrollToItemAtIndex:(NSInteger)index
 {
     
-    if (_sliderChangeEvent && index != self.currentIndex) {
+    if (_sliderChangeEvent) {
         [self fireEvent:@"change" params:@{@"index":@(index)} domChanges:@{@"attrs": @{@"index": @(index)}}];
         self.currentIndex = index;
     }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1904738/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m b/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m
index 26a7481..6855466 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m
@@ -128,7 +128,9 @@ WX_EXPORT_METHOD(@selector(clearInterval:))
             NSTimer *timer = _timers[callbackID];
             [timer invalidate];
         }
-        [_timers removeAllObjects];
+        if([_timers count]>0){
+             [_timers removeAllObjects];
+        }
         _timers = nil;
     }
 }


[45/50] incubator-weex git commit: * [ios] public WXErrorView

Posted by so...@apache.org.
* [ios] public WXErrorView


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

Branch: refs/heads/master
Commit: a283e16aab3993ade6e9b06aa691e48df964d3f1
Parents: b190473
Author: lybeen <il...@gmail.com>
Authored: Mon Jun 5 15:54:39 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Thu Jun 8 14:17:42 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj | 2 +-
 ios/sdk/WeexSDK/Sources/WeexSDK.h         | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a283e16a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
index 4f2e73c..af53def 100644
--- a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
+++ b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
@@ -43,7 +43,7 @@
 		37B51EE51E97804D0040A743 /* WXCycleSliderComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 37B51EE31E97804D0040A743 /* WXCycleSliderComponent.m */; };
 		591324A31D49B7F1004E89ED /* WXTimerModuleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 591324A21D49B7F1004E89ED /* WXTimerModuleTests.m */; };
 		591DD3311D23AD5800BE8709 /* WXErrorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 591DD32F1D23AD5800BE8709 /* WXErrorView.m */; };
-		591DD3321D23AD5800BE8709 /* WXErrorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 591DD3301D23AD5800BE8709 /* WXErrorView.h */; };
+		591DD3321D23AD5800BE8709 /* WXErrorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 591DD3301D23AD5800BE8709 /* WXErrorView.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		594C28921CF9E61A009793A4 /* WXAnimationModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 594C28901CF9E61A009793A4 /* WXAnimationModule.m */; };
 		594C28931CF9E61A009793A4 /* WXAnimationModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 594C28911CF9E61A009793A4 /* WXAnimationModule.h */; };
 		59597F981D2A041700EE9317 /* WXDebugLoggerBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 59597F961D2A041700EE9317 /* WXDebugLoggerBridge.h */; };

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a283e16a/ios/sdk/WeexSDK/Sources/WeexSDK.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/WeexSDK.h b/ios/sdk/WeexSDK/Sources/WeexSDK.h
index 88af286..640dd02 100644
--- a/ios/sdk/WeexSDK/Sources/WeexSDK.h
+++ b/ios/sdk/WeexSDK/Sources/WeexSDK.h
@@ -47,6 +47,7 @@
 #import "WXIndicatorComponent.h"
 #import "WXImgLoaderProtocol.h"
 #import "WXEventModuleProtocol.h"
+#import "WXErrorView.h"
 #import "WXDefine.h"
 #import "WXDebugTool.h"
 #import "WXConvert.h"


[43/50] incubator-weex git commit: * [doc] update format

Posted by so...@apache.org.
* [doc] update format


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

Branch: refs/heads/master
Commit: c5f94f27e88801320642fc5cbfdac3034803bc83
Parents: a279c23
Author: acton393 <zh...@gmail.com>
Authored: Wed Jun 7 17:22:34 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Jun 7 17:22:34 2017 +0800

----------------------------------------------------------------------
 doc/source/references/modules/animation.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c5f94f27/doc/source/references/modules/animation.md
----------------------------------------------------------------------
diff --git a/doc/source/references/modules/animation.md b/doc/source/references/modules/animation.md
index 2904898..29de02b 100644
--- a/doc/source/references/modules/animation.md
+++ b/doc/source/references/modules/animation.md
@@ -13,13 +13,13 @@ Smooth and meaningful animation is very effective for enhancing the user experie
 ### transition(node, options, callback)
 
 #### Arguments
-- node
+##### node
 
 **type:** node
 
 **position:** An element that will be animated, for example , specify the `ref` attribute for the element you want to animated as `element`, so you can get this element by calling `this.refs.element`.
 
-- options
+##### options
 
 **type:** object   
 
@@ -55,7 +55,7 @@ properties of `transform`:
 |rotate|Specifies the angle of which the element will be rotated, the unit is degree.|number|none|
 |scale/scaleX/scaleY|Stretch or shrink the element.|number|none|  
 
-- callback
+##### callback
 **type:** function
 
 **position:** Callback which is called after the completion of transition.


[05/50] incubator-weex git commit: * [ios] use range compare

Posted by so...@apache.org.
* [ios] use range compare


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

Branch: refs/heads/master
Commit: 9778415ebbaac9e0004a01d2e9843c062594f284
Parents: b107099
Author: acton393 <zh...@gmail.com>
Authored: Thu Jun 1 15:26:30 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jun 2 10:27:00 2017 +0800

----------------------------------------------------------------------
 .../WeexSDK/Sources/Component/WXTextComponent.m    | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9778415e/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
index f560aef..90ab4ce 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
@@ -746,17 +746,16 @@ do {\
         CTLineTruncationType truncationType = kCTLineTruncationEnd;
         NSAttributedString *attributedString = [self buildCTAttributeString];
         NSAttributedString * lastLineText = nil;
-        @try {
-            lastLineText = [attributedString attributedSubstringFromRange: WXNSRangeFromCFRange(CTLineGetStringRange(lastLine))];
-        } @catch (NSException *exception) {
+        NSRange lastLineTextRange = WXNSRangeFromCFRange(CTLineGetStringRange(lastLine));
+        NSRange attributeStringRange = NSRangeFromString(attributedString.string);
+        if (!NSEqualRanges(NSUnionRange(lastLineTextRange, attributeStringRange), attributeStringRange)) {
+            // out of bounds
+            lastLineTextRange = NSMakeRange(attributeStringRange.location, attributeStringRange.length);
+        }
+        lastLineText = [attributedString attributedSubstringFromRange: lastLineTextRange];
+        if (!lastLineText) {
             lastLineText = attributedString;
-        } @finally {
-            if (!lastLineText) {
-                lastLineText = attributedString;
-            }
-            //nothing
         }
-        
         NSMutableAttributedString *mutableLastLineText = lastLineText.mutableCopy;
         [mutableLastLineText appendAttributedString:truncationToken];
         CTLineRef ctLastLineExtend = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)mutableLastLineText);


[40/50] incubator-weex git commit: Merge branch 'dev' of https://git-wip-us.apache.org/repos/asf/incubator-weex into dev

Posted by so...@apache.org.
Merge branch 'dev' of https://git-wip-us.apache.org/repos/asf/incubator-weex into 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/168d168c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/168d168c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/168d168c

Branch: refs/heads/master
Commit: 168d168c3389988850a428b691e6a2817ecc80d1
Parents: a28f885 67363b3
Author: sospartan <so...@apache.org>
Authored: Wed Jun 7 16:55:08 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Wed Jun 7 16:55:08 2017 +0800

----------------------------------------------------------------------
 doc/themes/weex/languages/cn.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------



[21/50] incubator-weex git commit: + [doc] add Users App

Posted by so...@apache.org.
+ [doc] add Users App


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

Branch: refs/heads/master
Commit: 0aa1a6e495de39e2ef7f5222fbfaeb4d7d51fc38
Parents: 1c0d992
Author: tancy <ro...@gmail.com>
Authored: Tue Jun 6 12:00:24 2017 +0800
Committer: tancy <ro...@gmail.com>
Committed: Tue Jun 6 12:00:24 2017 +0800

----------------------------------------------------------------------
 doc/themes/weex/languages/cn.yml              |  12 +++++++++
 doc/themes/weex/languages/en.yml              |  13 +++++++++-
 doc/themes/weex/layout/index.ejs              |  28 +++++++++++++++++++++
 doc/themes/weex/source/css/index.scss         |  17 ++++++++++++-
 doc/themes/weex/source/images/fliggy.png      | Bin 0 -> 19329 bytes
 doc/themes/weex/source/images/juhuasuan.png   | Bin 0 -> 46340 bytes
 doc/themes/weex/source/images/qianniu.png     | Bin 0 -> 19852 bytes
 doc/themes/weex/source/images/taopiaopiao.png | Bin 0 -> 12460 bytes
 8 files changed, 68 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0aa1a6e4/doc/themes/weex/languages/cn.yml
----------------------------------------------------------------------
diff --git a/doc/themes/weex/languages/cn.yml b/doc/themes/weex/languages/cn.yml
index 23b209a..5c87cc1 100644
--- a/doc/themes/weex/languages/cn.yml
+++ b/doc/themes/weex/languages/cn.yml
@@ -50,6 +50,18 @@ index:
     youku:
       title: 优酷
       content: 中国领先的视频服务平台,提供视频播放,视频发布,视频分享等服务。
+    taopiaopiao:
+      title: 淘票票
+      content: 淘票票专业版是一款为电影人提供有价值数据的产品。通过和阿里海量用户数据相结合,为电影人提供了秒级实时票房、排片、影院经营、上映日历和用户画像等数据服务。
+    fliggy:
+      title: 飞猪
+      content: 飞猪是阿里巴巴集团旗下旅行品牌,旨在为用户提供便捷、更高性价比的出行服务。 
+    juhuasuan:
+      title: 聚划算
+      content: 聚划算是阿里巴巴集团旗下平台,供淘宝、天猫商家从8亿商品中精挑细选优质商品,自主开展网络精选特卖活动,以更高的服务标准为你提供高性价比的商品。
+    qianniu: 
+      title: 千牛
+      content: 阿里巴巴官方出品的卖家移动工作台,服务淘宝、天猫、1688、线下门店等众多商家用户,商家管店必备。
   feedback:
     title: 他们说
     user1:

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0aa1a6e4/doc/themes/weex/languages/en.yml
----------------------------------------------------------------------
diff --git a/doc/themes/weex/languages/en.yml b/doc/themes/weex/languages/en.yml
index 6eea9fd..8fadf37 100644
--- a/doc/themes/weex/languages/en.yml
+++ b/doc/themes/weex/languages/en.yml
@@ -50,7 +50,18 @@ index:
     youku:
       title: Youku
       content: Youku is one of China's top online video and streaming service platforms.
-
+    taopiaopiao:
+      title: Tao Tickets Pro
+      content: Tao Tickets Pro is a product for the film to provide valuable data. Through the combination of Ali and the amount of user data, for the film people to provide a second real-time box office, film, theater business, release calendar and user portraits and other data services.
+    fliggy:
+      title: Fliggy
+      content: Fliggy is Alibaba Group's travel brand, designed to provide users with convenient, more cost-effective travel services. 
+    juhuasuan:
+      title: Juhuasuan
+      content: Juhuasuan is Alibaba Group's platform for Taobao, Lynx business from 800 million commodities in the carefully selected high-quality goods, independent network to carry out activities to sell, with higher service standards to provide you with cost-effective goods.
+    qianniu: 
+      title: Qianniu
+      content:  Alibaba produced for the seller stop working units, for the seller the integration of the shop management tools, business information and news, business partnerships, in order to enhance the operational efficiency of the sellers, in order to promote cooperation between the two win, so that the seller can...
   feedback:
     title: People say
     user1:

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0aa1a6e4/doc/themes/weex/layout/index.ejs
----------------------------------------------------------------------
diff --git a/doc/themes/weex/layout/index.ejs b/doc/themes/weex/layout/index.ejs
index 01c964a..4a1ad87 100644
--- a/doc/themes/weex/layout/index.ejs
+++ b/doc/themes/weex/layout/index.ejs
@@ -184,6 +184,34 @@
           <p><%= _p('index.users.youku.content') %></p>
         </div>
       </div>
+      <div class="user-logo taopiaopiao-logo">
+        <h3><%= _p('index.users.taopiaopiao.title') %></h3>
+        <div class="user-info">
+          <h4><%= _p('index.users.taopiaopiao.title') %></h4>
+          <p><%= _p('index.users.taopiaopiao.content') %></p>
+        </div>
+      </div>
+      <div class="user-logo fliggy-logo">
+        <h3><%= _p('index.users.fliggy.title') %></h3>
+        <div class="user-info">
+          <h4><%= _p('index.users.fliggy.title') %></h4>
+          <p><%= _p('index.users.fliggy.content') %></p>
+        </div>
+      </div>
+      <div class="user-logo juhuasuan-logo">
+        <h3><%= _p('index.users.juhuasuan.title') %></h3>
+        <div class="user-info">
+          <h4><%= _p('index.users.juhuasuan.title') %></h4>
+          <p><%= _p('index.users.juhuasuan.content') %></p>
+        </div>
+      </div>
+      <div class="user-logo qianniu-logo">
+        <h3><%= _p('index.users.qianniu.title') %></h3>
+        <div class="user-info">
+          <h4><%= _p('index.users.qianniu.title') %></h4>
+          <p><%= _p('index.users.qianniu.content') %></p>
+        </div>
+      </div>
     </div>
     <!--<div class="more">
       <a class="more" href="">More</a>

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0aa1a6e4/doc/themes/weex/source/css/index.scss
----------------------------------------------------------------------
diff --git a/doc/themes/weex/source/css/index.scss b/doc/themes/weex/source/css/index.scss
index 8eb4e76..7b5454f 100644
--- a/doc/themes/weex/source/css/index.scss
+++ b/doc/themes/weex/source/css/index.scss
@@ -426,11 +426,26 @@
       background: $bg-light-blue url("../images/youku.png") 50% 50% / 64px 64px no-repeat;
       background-origin: content-box;
     }
-
     .ding-logo {
       background: $bg-light-blue url("../images/ding.png") 50% 50% / 64px 64px no-repeat;
       background-origin: content-box;
     }
+    .taopiaopiao-logo {
+      background: $bg-light-blue url("../images/taopiaopiao.png") 50% 50% / 64px 64px no-repeat;
+      background-origin: content-box;
+    }
+    .fliggy-logo {
+      background: $bg-light-blue url("../images/fliggy.png") 50% 50% / 64px 64px no-repeat;
+      background-origin: content-box;
+    }
+    .juhuasuan-logo {
+      background: $bg-light-blue url("../images/juhuasuan.png") 50% 50% / 64px 64px no-repeat;
+      background-origin: content-box;
+    }
+    .qianniu-logo {
+      background: $bg-light-blue url("../images/qianniu.png") 50% 50% / 64px 64px no-repeat;
+      background-origin: content-box;
+    }
   }
 
   .user-info {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0aa1a6e4/doc/themes/weex/source/images/fliggy.png
----------------------------------------------------------------------
diff --git a/doc/themes/weex/source/images/fliggy.png b/doc/themes/weex/source/images/fliggy.png
new file mode 100644
index 0000000..5f290bb
Binary files /dev/null and b/doc/themes/weex/source/images/fliggy.png differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0aa1a6e4/doc/themes/weex/source/images/juhuasuan.png
----------------------------------------------------------------------
diff --git a/doc/themes/weex/source/images/juhuasuan.png b/doc/themes/weex/source/images/juhuasuan.png
new file mode 100644
index 0000000..948807d
Binary files /dev/null and b/doc/themes/weex/source/images/juhuasuan.png differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0aa1a6e4/doc/themes/weex/source/images/qianniu.png
----------------------------------------------------------------------
diff --git a/doc/themes/weex/source/images/qianniu.png b/doc/themes/weex/source/images/qianniu.png
new file mode 100644
index 0000000..138ae03
Binary files /dev/null and b/doc/themes/weex/source/images/qianniu.png differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0aa1a6e4/doc/themes/weex/source/images/taopiaopiao.png
----------------------------------------------------------------------
diff --git a/doc/themes/weex/source/images/taopiaopiao.png b/doc/themes/weex/source/images/taopiaopiao.png
new file mode 100644
index 0000000..ed52a66
Binary files /dev/null and b/doc/themes/weex/source/images/taopiaopiao.png differ


[15/50] incubator-weex git commit: * [doc] fix list demo bug

Posted by so...@apache.org.
* [doc] fix list demo bug


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

Branch: refs/heads/master
Commit: 1c0d992c31d55f0057660f95f5c91399d2d6e285
Parents: dcf9a83
Author: tancy <ro...@gmail.com>
Authored: Fri Jun 2 17:27:59 2017 +0800
Committer: tancy <ro...@gmail.com>
Committed: Fri Jun 2 17:27:59 2017 +0800

----------------------------------------------------------------------
 doc/source/cn/references/components/list.md | 2 +-
 doc/source/references/components/list.md    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1c0d992c/doc/source/cn/references/components/list.md
----------------------------------------------------------------------
diff --git a/doc/source/cn/references/components/list.md b/doc/source/cn/references/components/list.md
index 7c8b2b2..2175bfc 100644
--- a/doc/source/cn/references/components/list.md
+++ b/doc/source/cn/references/components/list.md
@@ -76,7 +76,7 @@ version: 2.1
 
 - `scroll` <sup class="wx-v">0.12+</sup>:列表滚动时触发这个事件。此事件回调中会给出当前`contentOffset`值。
 
-  [体验一下](http://dotwe.org/weex/5837c1b7f1f69e5adf1fc4cac0747c34)
+  [体验一下](http://dotwe.org/weex/7ba3b6222d912b4b0b4aafb8248ca22f)
 
 - 通用事件
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1c0d992c/doc/source/references/components/list.md
----------------------------------------------------------------------
diff --git a/doc/source/references/components/list.md b/doc/source/references/components/list.md
index fe7455e..1e69b94 100644
--- a/doc/source/references/components/list.md
+++ b/doc/source/references/components/list.md
@@ -93,7 +93,7 @@ onloadmore  0.5 used with loadmoreoffset attribute. if the view has less than lo
 
 scroll  <sup class="wx-v">0.12+</sup> used with offset-accuracy attribute. This event is fired when the list scrolls. The current contentOffset value is given in this event callback.
 
-[try](http://dotwe.org/weex/5837c1b7f1f69e5adf1fc4cac0747c34)
+[try](http://dotwe.org/weex/7ba3b6222d912b4b0b4aafb8248ca22f)
 
 common events: check out the [common events](../common-event.html)
 


[46/50] incubator-weex git commit: * [android] enlarge LOW_MEM_VALUE to avoid crash

Posted by so...@apache.org.
* [android] enlarge LOW_MEM_VALUE to avoid crash


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

Branch: refs/heads/master
Commit: 2b43dc5e6df362f99e50adf547de07d4858fe233
Parents: 87c80de
Author: zshshr <zh...@gmail.com>
Authored: Tue Jun 6 10:25:34 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Thu Jun 8 18:45:41 2017 +0800

----------------------------------------------------------------------
 .../sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2b43dc5e/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index 6a745f6..b8f68fa 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -117,7 +117,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
 
   private static final int INIT_FRAMEWORK_OK = 1;
 
-  private static long LOW_MEM_VALUE = 80;
+  private static long LOW_MEM_VALUE = 120;
 
   static volatile WXBridgeManager mBridgeManager;
 


[47/50] incubator-weex git commit: * [android] parallax multiple scroller binding

Posted by so...@apache.org.
* [android] parallax multiple scroller binding


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

Branch: refs/heads/master
Commit: 6428fab248b67264a5438cb1c4cf248ab60b8e17
Parents: a283e16
Author: zshshr <zh...@gmail.com>
Authored: Tue Jun 6 10:23:51 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Thu Jun 8 18:45:41 2017 +0800

----------------------------------------------------------------------
 .../com/taobao/weex/common/ICheckBindingScroller.java  |  9 +++++++++
 .../java/com/taobao/weex/ui/component/WXComponent.java | 11 +++++++++++
 .../java/com/taobao/weex/ui/component/WXScroller.java  |  9 ++++++++-
 .../com/taobao/weex/ui/component/WXVContainer.java     | 13 +++++++++++++
 .../weex/ui/component/list/BasicListComponent.java     |  9 ++++++++-
 5 files changed, 49 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6428fab2/android/sdk/src/main/java/com/taobao/weex/common/ICheckBindingScroller.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/ICheckBindingScroller.java b/android/sdk/src/main/java/com/taobao/weex/common/ICheckBindingScroller.java
new file mode 100644
index 0000000..967869d
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/common/ICheckBindingScroller.java
@@ -0,0 +1,9 @@
+package com.taobao.weex.common;
+
+/**
+ * Created by zhengshihan on 2017/6/5.
+ */
+
+public interface ICheckBindingScroller {
+  boolean isNeedScroller(String ref,Object option);
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6428fab2/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
index 659cb16..ba12251 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
@@ -850,6 +850,17 @@ public abstract class  WXComponent<T extends View> implements IWXObject, IWXActi
     }
   }
 
+  /**
+   * get Scroller components
+   */
+  @Nullable
+  public Scrollable getFirstScroller() {
+   if(this instanceof Scrollable){
+     return (Scrollable)this;
+   }
+   return null;
+  }
+
   public WXVContainer getParent() {
     return mParent;
   }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6428fab2/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
index ca2e174..24e4940 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
@@ -37,6 +37,7 @@ import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.annotation.Component;
 import com.taobao.weex.annotation.JSMethod;
 import com.taobao.weex.common.Constants;
+import com.taobao.weex.common.ICheckBindingScroller;
 import com.taobao.weex.common.OnWXScrollListener;
 import com.taobao.weex.common.WXThread;
 import com.taobao.weex.dom.WXDomObject;
@@ -397,7 +398,13 @@ public class WXScroller extends WXVContainer<ViewGroup> implements WXScrollViewL
           if(listeners!=null && listeners.size()>0){
             for (OnWXScrollListener listener : listeners) {
               if (listener != null) {
-                listener.onScrolled(scrollView, x, y);
+                if(listener instanceof ICheckBindingScroller){
+                  if(((ICheckBindingScroller) listener).isNeedScroller(getRef(),null)){
+                    listener.onScrolled(scrollView, x, y);
+                  }
+                }else {
+                  listener.onScrolled(scrollView, x, y);
+                }
               }
             }
           }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6428fab2/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
index 2e75f31..afdad86 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
@@ -126,6 +126,19 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
   }
 
 
+  public Scrollable getFirstScroller(){
+    if(this instanceof Scrollable){
+      return (Scrollable)this;
+    }else{
+      for (int i=0;i<getChildCount();i++){
+        Scrollable scrollable = getChild(i).getFirstScroller();
+        if(scrollable!=null){
+          return scrollable;
+        }
+      }
+    }
+    return null;
+  }
   @Override
   public void bindData(WXComponent component) {
     if(!isLazy()) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6428fab2/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
index efe9147..0d60fb9 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
@@ -43,6 +43,7 @@ import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.annotation.JSMethod;
 import com.taobao.weex.common.Constants;
+import com.taobao.weex.common.ICheckBindingScroller;
 import com.taobao.weex.common.OnWXScrollListener;
 import com.taobao.weex.dom.ImmutableDomObject;
 import com.taobao.weex.dom.WXDomObject;
@@ -273,7 +274,13 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
         if (listeners != null && listeners.size() > 0) {
           for (OnWXScrollListener listener : listeners) {
             if (listener != null) {
-              listener.onScrolled(recyclerView, dx, dy);
+              if(listener instanceof ICheckBindingScroller){
+                if(((ICheckBindingScroller) listener).isNeedScroller(getRef(),null)){
+                  listener.onScrolled(recyclerView, dx, dy);
+                }
+              }else {
+                listener.onScrolled(recyclerView, dx, dy);
+              }
             }
           }
         }


[38/50] incubator-weex git commit: * [doc] update Tao Tickets Pro chinese name

Posted by so...@apache.org.
* [doc] update Tao Tickets Pro chinese name


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

Branch: refs/heads/master
Commit: 67363b33c83ad4b1329588f7df2888e233d1689e
Parents: c9d16a8
Author: tancy <ro...@gmail.com>
Authored: Wed Jun 7 16:54:22 2017 +0800
Committer: tancy <ro...@gmail.com>
Committed: Wed Jun 7 16:54:22 2017 +0800

----------------------------------------------------------------------
 doc/themes/weex/languages/cn.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/67363b33/doc/themes/weex/languages/cn.yml
----------------------------------------------------------------------
diff --git a/doc/themes/weex/languages/cn.yml b/doc/themes/weex/languages/cn.yml
index 5c87cc1..67d0266 100644
--- a/doc/themes/weex/languages/cn.yml
+++ b/doc/themes/weex/languages/cn.yml
@@ -51,7 +51,7 @@ index:
       title: 优酷
       content: 中国领先的视频服务平台,提供视频播放,视频发布,视频分享等服务。
     taopiaopiao:
-      title: 淘票票
+      title: 淘票票专业版
       content: 淘票票专业版是一款为电影人提供有价值数据的产品。通过和阿里海量用户数据相结合,为电影人提供了秒级实时票房、排片、影院经营、上映日历和用户画像等数据服务。
     fliggy:
       title: 飞猪


[35/50] incubator-weex git commit: Merge branch 'dev' of https://git-wip-us.apache.org/repos/asf/incubator-weex into dev

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

Branch: refs/heads/master
Commit: a6edb3fad304b8bb837df3ba94d0e50e4ea6e6d9
Parents: 536c38a 2505d08
Author: sospartan <so...@apache.org>
Authored: Wed Jun 7 16:05:15 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Wed Jun 7 16:05:15 2017 +0800

----------------------------------------------------------------------
 doc/source/cn/references/modules/animation.md |  4 ++--
 doc/source/references/modules/animation.md    | 12 ++++++------
 2 files changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------



[36/50] incubator-weex git commit: * [android] fix arm so file

Posted by so...@apache.org.
* [android] fix arm so file


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

Branch: refs/heads/master
Commit: c9d16a82faa97f37371c20437cdde6e06e2215d8
Parents: a6edb3f
Author: sospartan <so...@apache.org>
Authored: Wed Jun 7 16:18:28 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Wed Jun 7 16:18:28 2017 +0800

----------------------------------------------------------------------
 android/sdk/libs/armeabi/libweexjsc.so | Bin 7558100 -> 7566292 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c9d16a82/android/sdk/libs/armeabi/libweexjsc.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsc.so b/android/sdk/libs/armeabi/libweexjsc.so
index 19e18b2..bf73161 100755
Binary files a/android/sdk/libs/armeabi/libweexjsc.so and b/android/sdk/libs/armeabi/libweexjsc.so differ


[50/50] incubator-weex git commit: Merge branch 'dev'

Posted by so...@apache.org.
Merge branch '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/83b7f792
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/83b7f792
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/83b7f792

Branch: refs/heads/master
Commit: 83b7f792f489c7d2c04743266279aa0e05090897
Parents: f08565b c689a8a
Author: sospartan <so...@apache.org>
Authored: Fri Jun 9 09:51:53 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Fri Jun 9 09:51:53 2017 +0800

----------------------------------------------------------------------
 .gitignore                                      |   1 +
 .travis.yml                                     |  10 +-
 Dangerfile-ios                                  |   1 +
 WeexSDK.podspec                                 |   4 +-
 android/build.gradle                            |   9 +-
 android/commons/build.gradle                    |   1 +
 .../adapter/DefaultWebSocketAdapter.java        |  54 +-
 .../weex/commons/util/RequestIdGenerator.java   |  15 +
 .../weex/commons/util/WSEventReporter.java      | 192 ++++++
 .../gradle/wrapper/gradle-wrapper.properties    |   4 +-
 android/playground/app/build.gradle             |   4 +-
 .../java/com/alibaba/weex/WXApplication.java    |   4 +
 .../java/com/alibaba/weex/WXPageActivity.java   |   3 +-
 .../extend/adapter/InterceptWXHttpAdapter.java  |  57 +-
 .../weex/extend/component/WXParallax.java       | 345 ++++++++++
 .../weex/extend/module/WXEventModule.java       |  23 +-
 android/run-ci.sh                               |   5 +-
 android/sdk/assets/main.js                      |   8 -
 android/sdk/build.gradle                        |   6 +
 android/sdk/libs/armeabi/libweexjsc.so          | Bin 7558100 -> 7566292 bytes
 .../com/taobao/weex/LayoutFinishListener.java   |   8 +
 .../java/com/taobao/weex/WXEnvironment.java     |   1 +
 .../main/java/com/taobao/weex/WXSDKEngine.java  |   6 +
 .../java/com/taobao/weex/WXSDKInstance.java     |  48 ++
 .../main/java/com/taobao/weex/WXSDKManager.java |  15 +-
 .../taobao/weex/adapter/ICrashInfoReporter.java |   9 +
 .../taobao/weex/adapter/IDrawableLoader.java    |   3 +-
 .../weex/adapter/IWXUserTrackAdapter.java       |   2 +-
 .../com/taobao/weex/bridge/WXBridgeManager.java |  47 +-
 .../com/taobao/weex/bridge/WXModuleManager.java |  44 +-
 .../weex/common/ICheckBindingScroller.java      |   9 +
 .../com/taobao/weex/common/WXPerformance.java   |   9 +-
 .../taobao/weex/dom/DOMActionContextImpl.java   |  15 +-
 .../com/taobao/weex/dom/TextDecorationSpan.java |  55 ++
 .../java/com/taobao/weex/dom/WXDomHandler.java  |   4 +
 .../java/com/taobao/weex/dom/WXDomManager.java  |  19 +
 .../main/java/com/taobao/weex/dom/WXStyle.java  |  32 +-
 .../com/taobao/weex/dom/WXSwitchDomObject.java  |  29 +-
 .../com/taobao/weex/dom/WXTextDomObject.java    |  11 +-
 .../com/taobao/weex/dom/action/Actions.java     |  12 +
 .../taobao/weex/dom/action/AnimationAction.java |   3 +
 .../weex/dom/action/CreateFinishAction.java     |  20 +
 .../weex/dom/action/ExecutableRenderAction.java |  30 +
 .../weex/dom/action/ModuleInvocationAction.java |  50 ++
 .../taobao/weex/ui/IExternalModuleGetter.java   |  30 +
 .../taobao/weex/ui/IExternalMoudleGetter.java   |  29 -
 .../ui/animation/DimensionUpdateListener.java   |  14 +
 .../weex/ui/animation/WXAnimationBean.java      |   1 +
 .../ui/component/AbstractEditComponent.java     |  16 +-
 .../taobao/weex/ui/component/WXComponent.java   |  71 +-
 .../taobao/weex/ui/component/WXScroller.java    |   9 +-
 .../weex/ui/component/WXTextDecoration.java     |   1 +
 .../taobao/weex/ui/component/WXVContainer.java  |  13 +
 .../ui/component/list/BasicListComponent.java   |   9 +-
 .../ui/component/list/StickyHeaderHelper.java   |   2 +-
 .../taobao/weex/ui/module/WXTimerModule.java    |  42 +-
 .../com/taobao/weex/ui/view/WXImageView.java    |  31 +-
 .../weex/ui/view/border/BorderDrawable.java     |   3 +-
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |   4 +
 .../java/com/taobao/weex/utils/WXViewUtils.java |  34 +-
 .../java/com/taobao/weex/WXSDKEngineTest.java   |   1 -
 .../java/com/taobao/weex/utils/WXUtilsTest.java |  16 +-
 android/weex_debug/build.gradle                 |  10 +-
 build/config.js                                 |   4 +-
 build/webpack.examples.web.config.js            |  29 +-
 build/webpack.test.web.config.js                |  21 +-
 dangerfile.js                                   | 166 ++++-
 doc/source/cn/references/bubble.md              | 146 +++++
 doc/source/cn/references/components/input.md    | 241 +++++--
 doc/source/cn/references/components/list.md     |   2 +-
 doc/source/cn/references/downgrade.md           |  11 +
 doc/source/cn/references/index.md               |   4 +-
 doc/source/cn/references/modules/animation.md   |   4 +-
 doc/source/cn/references/modules/websocket.md   |   2 +-
 doc/source/cn/references/weex-variable.md       |   4 +-
 doc/source/cn/v-0.10/references/bubble.md       | 150 +++++
 .../cn/v-0.10/references/components/input.md    | 216 ++++++-
 doc/source/references/bubble.md                 | 146 +++++
 doc/source/references/components/input.md       | 233 +++++--
 doc/source/references/components/list.md        |   2 +-
 doc/source/references/downgrade.md              |  11 +
 doc/source/references/index.md                  |   2 +
 doc/source/references/modules/animation.md      |  12 +-
 doc/source/references/modules/websocket.md      |   2 +-
 doc/source/references/weex-variable.md          |   4 +-
 doc/source/v-0.10/references/bubble.md          | 150 +++++
 doc/themes/weex/languages/cn.yml                |  12 +
 doc/themes/weex/languages/en.yml                |  13 +-
 doc/themes/weex/layout/index.ejs                |  28 +
 doc/themes/weex/source/css/index.scss           |  19 +-
 doc/themes/weex/source/images/fliggy.png        | Bin 0 -> 19329 bytes
 doc/themes/weex/source/images/juhuasuan.png     | Bin 0 -> 46340 bytes
 doc/themes/weex/source/images/qianniu.png       | Bin 0 -> 19852 bytes
 doc/themes/weex/source/images/taopiaopiao.png   | Bin 0 -> 12460 bytes
 examples/iconfont.we                            |  63 +-
 examples/index.we                               |   1 +
 examples/vue/iconfont.vue                       |  80 ++-
 examples/vue/index.vue                          |   3 +-
 examples/vue/market/gcanvas.vue                 |   2 +-
 html5/render/native/index.js                    |  33 +-
 html5/render/native/setup.js                    |  58 ++
 html5/render/vue/README.md                      |  23 +-
 html5/render/vue/components/a.js                |  19 +
 html5/render/vue/components/div.js              |   1 +
 html5/render/vue/components/image.js            |   1 +
 html5/render/vue/components/index.js            |   2 +-
 html5/render/vue/components/input.js            |   1 +
 .../render/vue/components/scrollable/header.js  |   1 +
 .../vue/components/scrollable/list/cell.js      |   1 +
 .../vue/components/scrollable/list/index.js     |   1 +
 .../components/scrollable/loading-indicator.js  |   1 +
 .../render/vue/components/scrollable/loading.js |   1 +
 .../render/vue/components/scrollable/refresh.js |   1 +
 .../vue/components/scrollable/scroller.js       |   1 +
 html5/render/vue/components/slider/index.js     | 155 +----
 html5/render/vue/components/slider/indicator.js |  37 +-
 .../render/vue/components/slider/slideMixin.js  | 646 +++++++++++++++----
 .../vue/components/slider/slider-neighbor.css   |  21 -
 .../vue/components/slider/slider-neighbor.js    | 138 +---
 html5/render/vue/components/slider/slider.css   |  34 +
 html5/render/vue/components/switch.js           |   1 +
 html5/render/vue/components/text.js             |   1 +
 html5/render/vue/components/textarea.js         |   1 +
 html5/render/vue/components/video.js            |  28 +-
 html5/render/vue/components/web.js              |   1 +
 html5/render/vue/core/node.js                   |  71 +-
 html5/render/vue/core/style.js                  |  33 +-
 html5/render/vue/env/index.js                   |   4 +-
 html5/render/vue/env/viewport.js                |   6 +-
 html5/render/vue/env/weex.js                    |  33 +-
 html5/render/vue/env/wx-env.js                  |   8 +-
 html5/render/vue/index.js                       |  15 +
 html5/render/vue/lib/envd/index.js              | 179 +++++
 html5/render/vue/lib/envd/params.js             |  17 +
 html5/render/vue/lib/envd/version.js            | 152 +++++
 html5/render/vue/lib/gesture.js                 | 512 +++++++++++++++
 html5/render/vue/mixins/base.js                 |  54 +-
 html5/render/vue/mixins/scrollable.js           |  13 +-
 html5/render/vue/mixins/style.js                |  22 +-
 html5/render/vue/modules/animation.js           |   3 +
 html5/render/vue/modules/dom.js                 |  40 +-
 html5/render/vue/modules/modal/style.js         |   2 +-
 html5/render/vue/modules/modal/toast.js         |   3 +-
 html5/render/vue/utils/component.js             |  20 +-
 html5/render/vue/utils/func.js                  |  19 +
 html5/render/vue/utils/lazyload.js              |  17 +-
 html5/render/vue/utils/perf.js                  | 123 +++-
 html5/render/vue/utils/style.js                 | 151 +++--
 html5/runtime/vdom/document.js                  |   4 +-
 html5/runtime/vdom/element.js                   |  25 +-
 .../render/vue/data/dotvue/event-bubble-bar.vue |  13 +-
 .../render/vue/data/dotvue/event-bubble.vue     |  17 +-
 html5/test/render/vue/utils/style.js            |   9 +-
 html5/test/unit/default/vm/vm.js                |   2 +-
 .../WeexDemo.xcodeproj/project.pbxproj          |   6 +
 ios/playground/WeexDemo/AppDelegate.m           |   4 +
 .../WeexDemo/WXConfigCenterDefaultImpl.h        |  25 +
 .../WeexDemo/WXConfigCenterDefaultImpl.m        |  45 ++
 ios/playground/WeexDemo/WXDemoViewController.m  |  16 +-
 .../WeexDemo/extend/module/WXEventModule.m      |  16 +
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       |  34 +-
 ios/sdk/WeexSDK/Resources/main.js               |   8 -
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    |   5 +
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |  85 ++-
 ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m |  13 +-
 .../WeexSDK/Sources/Component/WXAComponent.m    |  13 +-
 .../Sources/Component/WXComponent_internal.h    |   2 -
 .../Sources/Component/WXCycleSliderComponent.m  |  22 +-
 .../Sources/Component/WXEmbedComponent.m        |   2 +-
 .../Sources/Component/WXImageComponent.m        |  27 +-
 .../Sources/Component/WXIndicatorComponent.m    |   3 +
 .../WeexSDK/Sources/Component/WXListComponent.m |  64 +-
 .../Sources/Component/WXScrollerComponent.m     |  39 +-
 .../Sources/Component/WXSliderComponent.m       |   1 +
 .../Component/WXSliderNeighborComponent.m       |   9 +-
 .../WeexSDK/Sources/Component/WXTextComponent.m |  67 +-
 .../Sources/Component/WXVideoComponent.m        |  12 +-
 .../WeexSDK/Sources/Component/WXWebComponent.m  |  10 +-
 .../Sources/Controller/WXBaseViewController.m   |  19 +-
 ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m    |  13 +-
 .../WeexSDK/Sources/Events/WXComponent+Events.m |  34 +-
 .../WeexSDK/Sources/Layout/WXComponent+Layout.m |  24 +-
 .../WeexSDK/Sources/Loader/WXResourceLoader.m   |   2 +
 .../WeexSDK/Sources/Manager/WXBridgeManager.h   |   2 +
 .../Sources/Manager/WXComponentManager.h        |   2 +-
 .../Sources/Manager/WXComponentManager.m        |  32 +-
 ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m |   8 +-
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |  33 +-
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h   |  17 +-
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |  49 +-
 .../WeexSDK/Sources/Module/WXAnimationLayout.h  |  49 ++
 .../WeexSDK/Sources/Module/WXAnimationLayout.m  | 115 ++++
 .../WeexSDK/Sources/Module/WXAnimationModule.m  |  30 +-
 ios/sdk/WeexSDK/Sources/Module/WXDomModule.m    |   1 +
 .../WeexSDK/Sources/Module/WXModalUIModule.m    |   1 +
 .../WeexSDK/Sources/Module/WXPrerenderManager.h |  89 +++
 .../WeexSDK/Sources/Module/WXPrerenderManager.m | 314 +++++++++
 ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m |   6 +-
 ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m  |   4 +-
 .../Sources/Network/WXResourceRequestHandler.h  |   2 +
 .../WXResourceRequestHandlerDefaultImpl.m       |   5 +-
 .../Sources/Protocol/WXConfigCenterProtocol.h   |  20 +
 .../Sources/Protocol/WXScrollerProtocol.h       |   7 +
 .../Sources/Protocol/WXURLRewriteProtocol.h     |   5 +-
 ios/sdk/WeexSDK/Sources/Utility/WXConvert.m     |   6 +-
 ios/sdk/WeexSDK/Sources/Utility/WXDefine.h      |   4 +-
 ios/sdk/WeexSDK/Sources/Utility/WXUtility.h     |   7 +
 ios/sdk/WeexSDK/Sources/Utility/WXUtility.m     |  98 +--
 .../View/WXComponent+PseudoClassManagement.m    |   4 +-
 .../Sources/View/WXComponent+ViewManagement.m   |  96 ++-
 ios/sdk/WeexSDK/Sources/View/WXView.m           |   1 +
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |   4 +
 package.json                                    |  19 +-
 packages/weex-vue-render/README.md              |  23 +-
 packages/weex-vue-render/package.json           |   2 +-
 pre-build/native-bundle-main.js                 |   8 +
 test/.gitignore                                 |   3 +-
 test/mocha.opts                                 |   2 +-
 test/pages/components/hyperlink.vue             |  31 +
 test/pages/components/hyperlink_target.vue      |  22 +
 test/pages/components/scroller-fixed.vue        |  14 +-
 test/pages/components/slider-common.vue         | 229 +++++++
 test/pages/css/border.vue                       | 132 +++-
 test/pages/modules/globalEvent.vue              |  48 ++
 test/pages/modules/vue_timer.vue                |  75 +++
 test/pages/modules/we_timer.we                  |  73 +++
 test/screenshot/border-android.png              | Bin 0 -> 156247 bytes
 test/screenshot/border-ios.png                  | Bin 168396 -> 128206 bytes
 test/screenshot/compositing-ios.png             | Bin 228661 -> 228306 bytes
 test/scripts/components/hyperlink.test.js       |  44 ++
 test/scripts/components/recycler.test.js        |  16 +-
 test/scripts/components/scroller-fixed.test.js  |   5 +-
 test/scripts/components/slider-common.test.js   | 100 +++
 test/scripts/components/text.test.js            |   2 +-
 test/scripts/css/border.test.js                 |   7 +-
 test/scripts/modules/globalEvent.test.js        |  60 ++
 test/scripts/modules/timer.test.js              | 100 +++
 test/scripts/util.js                            |  30 +-
 238 files changed, 7479 insertions(+), 1318 deletions(-)
----------------------------------------------------------------------



[22/50] incubator-weex git commit: + [example] update input demo

Posted by so...@apache.org.
+ [example] update input demo


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

Branch: refs/heads/master
Commit: 38c4bebb3cf51d201a235f3ec502ff3d03e57e32
Parents: 1c0d992
Author: 齐山 <su...@163.com>
Authored: Tue Jun 6 12:43:55 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Tue Jun 6 12:43:55 2017 +0800

----------------------------------------------------------------------
 .../cn/v-0.10/references/components/input.md    | 216 +++++++++++++++--
 doc/source/references/components/input.md       | 231 +++++++++++++++----
 2 files changed, 381 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38c4bebb/doc/source/cn/v-0.10/references/components/input.md
----------------------------------------------------------------------
diff --git a/doc/source/cn/v-0.10/references/components/input.md b/doc/source/cn/v-0.10/references/components/input.md
index a1964f1..9a7b8ff 100644
--- a/doc/source/cn/v-0.10/references/components/input.md
+++ b/doc/source/cn/v-0.10/references/components/input.md
@@ -54,7 +54,7 @@ Weex 内置的 `<input>` 组件用来创建接收用户输入字符的输入组
   事件中 event 对象属性:
 
   - `value`: 触发事件的组件;
-  - `timestamp`: 事件发生时的时间戳。
+  - `timestamp`: 事件发生时的时间戳,仅支持Android。
   
 - `change`: 当用户输入完成时触发。通常在 `blur` 事件之后。
 
@@ -62,19 +62,19 @@ Weex 内置的 `<input>` 组件用来创建接收用户输入字符的输入组
 
   - `value`: 触发事件的组件;
   
-  - `timestamp`: 事件发生时的时间戳。
+  - `timestamp`: 事件发生时的时间戳,仅支持Android。
   
 - `focus`: 组件获得输入焦点。
 
   事件中 event 对象属性:
 
-  - `timestamp`: 事件发生时的时间戳。
+  - `timestamp`: 事件发生时的时间戳,仅支持Android。
   
 - `blur`: 组件失去输入焦点。
 
   事件中 event 对象属性:
 
-  - `timestamp`: 事件发生时的时间戳。
+  - `timestamp`: 事件发生时的时间戳,仅支持Android。
   
 - 通用事件
 
@@ -98,46 +98,212 @@ Weex 内置的 `<input>` 组件用来创建接收用户输入字符的输入组
 ```html
 <template>
   <div>
-    <input
-      type="text"
-      placeholder="Input Something"
-      class="input"
-      autofocus="true"
-      value=""
-      onchange="onchange"
-      oninput="oninput" 
-    />
-    <text>oninput: {{txtInput}}</text>
-    <text>onchange: {{txtChange}}</text>
+    <div>
+      <text style="font-size: 40px">oninput: {{txtInput}}</text>
+      <text style="font-size: 40px">onchange: {{txtChange}}</text>
+      <text style="font-size: 40px">onreturntype: {{txtReturnType}}</text>
+    </div>
+    <scroller>
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = text</text>
+        </div>
+        <input type="text" placeholder="Input Text" class="input" :autofocus=true value="" @change="onchange" @input="oninput" @focus="onfocus" @blur="onblur"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = password</text>
+        </div>
+        <input type="password" placeholder="Input Password" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = url</text>
+        </div>
+        <input type="url" placeholder="Input URL" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = email</text>
+        </div>
+        <input type="email" placeholder="Input Email" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = tel</text>
+        </div>
+        <input type="tel" placeholder="Input Tel" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = time</text>
+        </div>
+        <input type="time" placeholder="Input Time" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = date</text>
+        </div>
+        <input type="date" placeholder="Input Date" class="input" @change="onchange" @input="oninput" max="2017-12-12" min="2015-01-01"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = default</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="default" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = go</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="go" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = next</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="next" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = search</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="search" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = send</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="send" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = done</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="done" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">function focus() & blur()</text>
+        </div>
+        <div style="flex-direction: row;margin-bottom: 16px;justify-content: space-between">
+          <text class="button" value="Focus" type="primary" @click="focus"></text>
+          <text class="button" value="Blur" type="primary" @click="blur"></text>
+        </div>
+
+        <input type="text" placeholder="Input1" class="input" value="" ref="input1"/>
+      </div>
+
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input selection</text>
+        </div>
+        <div style="flex-direction: row;margin-bottom: 16px;justify-content: space-between">
+          <text class="button" value="setRange" type="primary" @click="setRange"></text>
+        </div>
+        <input type="text"  ref="inputselection" placeholder="please input" value="123456789"  class="input" @change="onchange" @return = "onreturn" @input="oninput"/>
+      </div>
+
+
+
+    </scroller>
   </div>
 </template>
 
-<style>
+<style scoped>
   .input {
-    font-size: 60;
-    height: 80;
-    width: 400;
+    font-size: 60px;
+    height: 80px;
+    width: 750px;
+  }
+  .button {
+    font-size: 36;
+    width: 200;
+    color: #41B883;
+    text-align: center;
+    padding-top: 10;
+    padding-bottom: 10;
+    border-width: 2;
+    border-style: solid;
+    margin-right: 20;
+    border-color: rgb(162, 217, 192);
+    background-color: rgba(162, 217, 192, 0.2);
   }
 </style>
 
 <script>
+  const modal = weex.requireModule('modal')
   module.exports = {
-    data: {
-      txtInput: '',
-      txtChange: ''
+    data: function () {
+      return {
+        txtInput: '',
+        txtChange: '',
+        txtReturnType: '',
+        txtSelection:'',
+        autofocus: false
+      };
     },
     methods: {
-      onchange: function(event) {
+      ready: function () {
+        var self = this;
+        setTimeout(function () {
+          self.autofocus = true;
+        }, 1000);
+      },
+      onchange: function (event) {
         this.txtChange = event.value;
         console.log('onchange', event.value);
       },
-      oninput: function(event) {
+      onreturn: function (event) {
+        this.txtReturnType = event.returnKeyType;
+        console.log('onreturn', event.type);
+      },
+      oninput: function (event) {
         this.txtInput = event.value;
         console.log('oninput', event.value);
+      },
+      focus: function () {
+        this.$refs['input1'].focus();
+      },
+      blur: function () {
+        this.$refs['input1'].blur();
+      },
+      setRange: function() {
+        console.log(this.$refs["inputselection"]);
+        this.$refs["inputselection"].setSelectionRange(2, 6);
+      },
+      onfocus () {
+        console.log('onfocus:');
+        modal.toast({
+          message: 'onfocus',
+          duration: 0.8
+        })
+      },
+      onblur () {
+        console.log('onblur:');
+        modal.toast({
+          message: 'input blur',
+          duration: 0.8
+        })
       }
     }
   };
 </script>
 ```
 
-[体验一下](http://dotwe.org/ccf22bec1766abca6a81fd4b658c8827)
+[体验一下](http://dotwe.org/vue/dd83d941d2364f2849e45dc3c5d91ab4)

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38c4bebb/doc/source/references/components/input.md
----------------------------------------------------------------------
diff --git a/doc/source/references/components/input.md b/doc/source/references/components/input.md
index 13d7469..0864817 100644
--- a/doc/source/references/components/input.md
+++ b/doc/source/references/components/input.md
@@ -108,64 +108,213 @@ does not support the common-event 'click'. Please listen to the 'input' or '
 
 ```html
 <template>
-  <div class="wrapper">
-    <input ref="input" class="input" type="text" @input="oninput" @change="onchange" @focus="onfocus" @blur="onblur"></input>
+  <div>
+    <div>
+      <text style="font-size: 40px">oninput: {{txtInput}}</text>
+      <text style="font-size: 40px">onchange: {{txtChange}}</text>
+      <text style="font-size: 40px">onreturntype: {{txtReturnType}}</text>
+    </div>
+    <scroller>
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = text</text>
+        </div>
+        <input type="text" placeholder="Input Text" class="input" :autofocus=true value="" @change="onchange" @input="oninput" @focus="onfocus" @blur="onblur"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = password</text>
+        </div>
+        <input type="password" placeholder="Input Password" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = url</text>
+        </div>
+        <input type="url" placeholder="Input URL" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = email</text>
+        </div>
+        <input type="email" placeholder="Input Email" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = tel</text>
+        </div>
+        <input type="tel" placeholder="Input Tel" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = time</text>
+        </div>
+        <input type="time" placeholder="Input Time" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = date</text>
+        </div>
+        <input type="date" placeholder="Input Date" class="input" @change="onchange" @input="oninput" max="2017-12-12" min="2015-01-01"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = default</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="default" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = go</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="go" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = next</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="next" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = search</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="search" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = send</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="send" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = done</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="done" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">function focus() & blur()</text>
+        </div>
+        <div style="flex-direction: row;margin-bottom: 16px;justify-content: space-between">
+          <text class="button" value="Focus" type="primary" @click="focus"></text>
+          <text class="button" value="Blur" type="primary" @click="blur"></text>
+        </div>
+
+        <input type="text" placeholder="Input1" class="input" value="" ref="input1"/>
+      </div>
+
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input selection</text>
+        </div>
+        <div style="flex-direction: row;margin-bottom: 16px;justify-content: space-between">
+          <text class="button" value="setRange" type="primary" @click="setRange"></text>
+        </div>
+        <input type="text"  ref="inputselection" placeholder="please input" value="123456789"  class="input" @change="onchange" @return = "onreturn" @input="oninput"/>
+      </div>
+
+
+
+    </scroller>
   </div>
 </template>
 
+<style scoped>
+  .input {
+    font-size: 60px;
+    height: 80px;
+    width: 750px;
+  }
+  .button {
+    font-size: 36;
+    width: 200;
+    color: #41B883;
+    text-align: center;
+    padding-top: 10;
+    padding-bottom: 10;
+    border-width: 2;
+    border-style: solid;
+    margin-right: 20;
+    border-color: rgb(162, 217, 192);
+    background-color: rgba(162, 217, 192, 0.2);
+  }
+</style>
+
 <script>
   const modal = weex.requireModule('modal')
-
-  export default {
+  module.exports = {
+    data: function () {
+      return {
+        txtInput: '',
+        txtChange: '',
+        txtReturnType: '',
+        txtSelection:'',
+        autofocus: false
+      };
+    },
     methods: {
-      oninput (event) {
-        console.log('oninput:', event.value)
-        modal.toast({
-          message: `oninput: ${event.value}`,
-          duration: 0.8
-        })
+      ready: function () {
+        var self = this;
+        setTimeout(function () {
+          self.autofocus = true;
+        }, 1000);
       },
-      onchange (event) {
-        console.log('onchange:', event.value)
-        modal.toast({
-          message: `onchange: ${event.value}`,
-          duration: 0.8
-        })
+      onchange: function (event) {
+        this.txtChange = event.value;
+        console.log('onchange', event.value);
+      },
+      onreturn: function (event) {
+        this.txtReturnType = event.returnKeyType;
+        console.log('onreturn', event.type);
+      },
+      oninput: function (event) {
+        this.txtInput = event.value;
+        console.log('oninput', event.value);
+      },
+      focus: function () {
+        this.$refs['input1'].focus();
+      },
+      blur: function () {
+        this.$refs['input1'].blur();
+      },
+      setRange: function() {
+        console.log(this.$refs["inputselection"]);
+        this.$refs["inputselection"].setSelectionRange(2, 6);
       },
-      onfocus (event) {
-        console.log('onfocus:', event.value)
+      onfocus () {
+        console.log('onfocus:');
         modal.toast({
-          message: `onfocus: ${event.value}`,
+          message: 'onfocus',
           duration: 0.8
         })
       },
-      onblur (event) {
-        console.log('onblur:', event.value)
+      onblur () {
+        console.log('onblur:');
         modal.toast({
-          message: `input blur: ${event.value}`,
+          message: 'input blur',
           duration: 0.8
         })
       }
     }
-  }
+  };
 </script>
-
-<style>
-  .input {
-    font-size: 50px;
-    width: 650px;
-    margin-top: 50px;
-    margin-left: 50px;
-    padding-top: 20px;
-    padding-bottom: 20px;
-    padding-left: 20px;
-    padding-right: 20px;
-    color: #666666;
-    border-width: 2px;
-    border-style: solid;
-    border-color: #41B883;
-  }
-</style>
 ```
 
-[try it](http://dotwe.org/vue/e56d9ebeede8f80bbc8b53637395d22f)
+[try it](http://dotwe.org/vue/dd83d941d2364f2849e45dc3c5d91ab4)


[28/50] incubator-weex git commit: + [doc] update input doc

Posted by so...@apache.org.
+ [doc] update input doc


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

Branch: refs/heads/master
Commit: a643dedf2b6421629218270d899acd95dd714e7b
Parents: 466c4ee
Author: 齐山 <su...@163.com>
Authored: Tue Jun 6 17:04:06 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Tue Jun 6 17:04:06 2017 +0800

----------------------------------------------------------------------
 doc/source/cn/references/components/input.md | 2 +-
 doc/source/references/components/input.md    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a643dedf/doc/source/cn/references/components/input.md
----------------------------------------------------------------------
diff --git a/doc/source/cn/references/components/input.md b/doc/source/cn/references/components/input.md
index 796fb1f..a0aecf8 100644
--- a/doc/source/cn/references/components/input.md
+++ b/doc/source/cn/references/components/input.md
@@ -19,7 +19,7 @@ Weex 内置的 `<input>` 组件用来创建接收用户输入字符的输入组
 
 ## 特性
 
-- `type {string}`:控件的类型,默认值是 `<text>`。`type` 值可以是 `text`,`password`,`url`,`email`,`tel` 。每个 `type` 值都符合 W3C 标准。
+- `type {string}`:控件的类型,默认值是 `<text>`。`type` 值可以是 `text`,`password`,`url`,`email`,`tel` ,`number` 。每个 `type` 值都符合 W3C 标准。
 - `value {string}`:组件的接收到的输入字符。
 - `placeholder {string}`:提示用户可以输入什么。 提示文本不能有回车或换行。
 - `disabled {boolean}`:布尔类型的数据,表示是否支持输入。通常 `click` 事件在 `disabled` 控件上是失效的。

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a643dedf/doc/source/references/components/input.md
----------------------------------------------------------------------
diff --git a/doc/source/references/components/input.md b/doc/source/references/components/input.md
index 0864817..8eea2ad 100644
--- a/doc/source/references/components/input.md
+++ b/doc/source/references/components/input.md
@@ -17,7 +17,7 @@ This component supports no child components.
 
 ## Attributes
 
-* `type`: the type of controls to display. The default value is `text`, if this attribute is not specified. Possible values are `text`, `password`, `tel`, `email`, `url` etc. each of which has the same meaning with W3C standard.
+* `type`: the type of controls to display. The default value is `text`, if this attribute is not specified. Possible values are `text`, `password`, `tel`, `email`, `url` , `number` etc. each of which has the same meaning with W3C standard.
 
 * `value`: the value(text) of the control.
 


[23/50] incubator-weex git commit: + [ios] update input doc

Posted by so...@apache.org.
+ [ios] update input doc


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

Branch: refs/heads/master
Commit: 6baccbca96e0f1afec5de673ca3002ad46ee1c22
Parents: 38c4beb
Author: 齐山 <su...@163.com>
Authored: Tue Jun 6 13:03:40 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Tue Jun 6 13:03:40 2017 +0800

----------------------------------------------------------------------
 doc/source/cn/references/components/input.md | 239 ++++++++++++++++++----
 1 file changed, 194 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6baccbca/doc/source/cn/references/components/input.md
----------------------------------------------------------------------
diff --git a/doc/source/cn/references/components/input.md b/doc/source/cn/references/components/input.md
index 83cea39..796fb1f 100644
--- a/doc/source/cn/references/components/input.md
+++ b/doc/source/cn/references/components/input.md
@@ -64,7 +64,7 @@ Weex 内置的 `<input>` 组件用来创建接收用户输入字符的输入组
   事件中 event 对象属性:
 
   - `value`: 触发事件的组件;
-  - `timestamp`: 事件发生时的时间戳。
+  - `timestamp`: 事件发生时的时间戳,仅支持Android。
 
 - `change`: 当用户输入完成时触发。通常在 `blur` 事件之后。
 
@@ -72,19 +72,19 @@ Weex 内置的 `<input>` 组件用来创建接收用户输入字符的输入组
 
   - `value`: 触发事件的组件;
 
-  - `timestamp`: 事件发生时的时间戳。
+  - `timestamp`: 事件发生时的时间戳,仅支持Android。
 
 - `focus`: 组件获得输入焦点。
 
   事件中 event 对象属性:
 
-  - `timestamp`: 事件发生时的时间戳。
+  - `timestamp`: 事件发生时的时间戳,仅支持Android。
 
 - `blur`: 组件失去输入焦点。
 
   事件中 event 对象属性:
 
-  - `timestamp`: 事件发生时的时间戳。
+  - `timestamp`: 事件发生时的时间戳,仅支持Android。
 - `return`: 键盘点击返回键。
 
     事件中 event 对象属性:
@@ -130,64 +130,213 @@ Weex 内置的 `<input>` 组件用来创建接收用户输入字符的输入组
 
 ```html
 <template>
-  <div class="wrapper">
-    <input ref="input" class="input" type="text" @input="oninput" @change="onchange" @focus="onfocus" @blur="onblur"></input>
+  <div>
+    <div>
+      <text style="font-size: 40px">oninput: {{txtInput}}</text>
+      <text style="font-size: 40px">onchange: {{txtChange}}</text>
+      <text style="font-size: 40px">onreturntype: {{txtReturnType}}</text>
+    </div>
+    <scroller>
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = text</text>
+        </div>
+        <input type="text" placeholder="Input Text" class="input" :autofocus=true value="" @change="onchange" @input="oninput" @focus="onfocus" @blur="onblur"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = password</text>
+        </div>
+        <input type="password" placeholder="Input Password" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = url</text>
+        </div>
+        <input type="url" placeholder="Input URL" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = email</text>
+        </div>
+        <input type="email" placeholder="Input Email" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = tel</text>
+        </div>
+        <input type="tel" placeholder="Input Tel" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = time</text>
+        </div>
+        <input type="time" placeholder="Input Time" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = date</text>
+        </div>
+        <input type="date" placeholder="Input Date" class="input" @change="onchange" @input="oninput" max="2017-12-12" min="2015-01-01"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = default</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="default" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = go</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="go" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = next</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="next" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = search</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="search" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = send</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="send" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = done</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="done" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">function focus() & blur()</text>
+        </div>
+        <div style="flex-direction: row;margin-bottom: 16px;justify-content: space-between">
+          <text class="button" value="Focus" type="primary" @click="focus"></text>
+          <text class="button" value="Blur" type="primary" @click="blur"></text>
+        </div>
+
+        <input type="text" placeholder="Input1" class="input" value="" ref="input1"/>
+      </div>
+
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input selection</text>
+        </div>
+        <div style="flex-direction: row;margin-bottom: 16px;justify-content: space-between">
+          <text class="button" value="setRange" type="primary" @click="setRange"></text>
+        </div>
+        <input type="text"  ref="inputselection" placeholder="please input" value="123456789"  class="input" @change="onchange" @return = "onreturn" @input="oninput"/>
+      </div>
+
+
+
+    </scroller>
   </div>
 </template>
 
+<style scoped>
+  .input {
+    font-size: 60px;
+    height: 80px;
+    width: 750px;
+  }
+  .button {
+    font-size: 36;
+    width: 200;
+    color: #41B883;
+    text-align: center;
+    padding-top: 10;
+    padding-bottom: 10;
+    border-width: 2;
+    border-style: solid;
+    margin-right: 20;
+    border-color: rgb(162, 217, 192);
+    background-color: rgba(162, 217, 192, 0.2);
+  }
+</style>
+
 <script>
   const modal = weex.requireModule('modal')
-
-  export default {
+  module.exports = {
+    data: function () {
+      return {
+        txtInput: '',
+        txtChange: '',
+        txtReturnType: '',
+        txtSelection:'',
+        autofocus: false
+      };
+    },
     methods: {
-      oninput (event) {
-        console.log('oninput:', event.value)
-        modal.toast({
-          message: `oninput: ${event.value}`,
-          duration: 0.8
-        })
+      ready: function () {
+        var self = this;
+        setTimeout(function () {
+          self.autofocus = true;
+        }, 1000);
       },
-      onchange (event) {
-        console.log('onchange:', event.value)
-        modal.toast({
-          message: `onchange: ${event.value}`,
-          duration: 0.8
-        })
+      onchange: function (event) {
+        this.txtChange = event.value;
+        console.log('onchange', event.value);
+      },
+      onreturn: function (event) {
+        this.txtReturnType = event.returnKeyType;
+        console.log('onreturn', event.type);
+      },
+      oninput: function (event) {
+        this.txtInput = event.value;
+        console.log('oninput', event.value);
+      },
+      focus: function () {
+        this.$refs['input1'].focus();
+      },
+      blur: function () {
+        this.$refs['input1'].blur();
+      },
+      setRange: function() {
+        console.log(this.$refs["inputselection"]);
+        this.$refs["inputselection"].setSelectionRange(2, 6);
       },
-      onfocus (event) {
-        console.log('onfocus:', event.value)
+      onfocus () {
+        console.log('onfocus:');
         modal.toast({
-          message: `onfocus: ${event.value}`,
+          message: 'onfocus',
           duration: 0.8
         })
       },
-      onblur (event) {
-        console.log('onblur:', event.value)
+      onblur () {
+        console.log('onblur:');
         modal.toast({
-          message: `input blur: ${event.value}`,
+          message: 'input blur',
           duration: 0.8
         })
       }
     }
-  }
+  };
 </script>
-
-<style>
-  .input {
-    font-size: 50px;
-    width: 650px;
-    margin-top: 50px;
-    margin-left: 50px;
-    padding-top: 20px;
-    padding-bottom: 20px;
-    padding-left: 20px;
-    padding-right: 20px;
-    color: #666666;
-    border-width: 2px;
-    border-style: solid;
-    border-color: #41B883;
-  }
-</style>
 ```
 
-[try it](http://dotwe.org/vue/e56d9ebeede8f80bbc8b53637395d22f)
+[体验一下](http://dotwe.org/vue/dd83d941d2364f2849e45dc3c5d91ab4)