You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ji...@apache.org on 2017/01/24 08:21:12 UTC
[01/50] [abbrv] incubator-weex git commit: Merge branch
'ios-feature-20170118' into ios-feature-navigator
Repository: incubator-weex
Updated Branches:
refs/heads/master 9ca297a31 -> d1d396e92
Merge branch 'ios-feature-20170118' into ios-feature-navigator
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/58a3ffc1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/58a3ffc1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/58a3ffc1
Branch: refs/heads/master
Commit: 58a3ffc12ba2ec196c68f1bdece8e48aeb4da94f
Parents: f65c42f 4f65b4d
Author: acton393 <ac...@users.noreply.github.com>
Authored: Tue Jan 10 19:55:41 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Tue Jan 10 19:55:41 2017 +0800
----------------------------------------------------------------------
.eslintignore | 3 +
.gitignore | 4 +-
.travis.yml | 2 +
.wwprc | 17 +-
README.md | 17 +-
android/commons/build.gradle | 1 +
.../weex/commons/AbstractWeexActivity.java | 56 +-
.../weex/commons/SimpleWeexActivity.java | 4 +-
.../weex/commons/WXAnalyzerDelegate.java | 379 +
.../alibaba/weex/commons/adapter/BlurTool.java | 512 ++
.../commons/adapter/BlurTransformation.java | 238 +
.../commons/adapter/FrescoImageComponent.java | 4 +-
.../weex/commons/adapter/ImageAdapter.java | 2 +-
android/playground/app/build.gradle | 11 +-
.../weex/uitest/TC_AG/AG_AHref_A_Href.java | 8 +-
.../TC_AG/AG_Border_A_Border_Bottom_Color.java | 8 +-
.../AG_Border_A_Border_Bottom_Left_Radius.java | 8 +-
.../AG_Border_A_Border_Bottom_Right_Radius.java | 8 +-
.../TC_AG/AG_Border_A_Border_Bottom_Width.java | 10 +-
.../uitest/TC_AG/AG_Border_A_Border_Color.java | 8 +-
.../TC_AG/AG_Border_A_Border_Left_Color.java | 8 +-
.../TC_AG/AG_Border_A_Border_Left_Width.java | 10 +-
.../uitest/TC_AG/AG_Border_A_Border_Radius.java | 8 +-
.../TC_AG/AG_Border_A_Border_Right_Color.java | 8 +-
.../TC_AG/AG_Border_A_Border_Right_Width.java | 10 +-
.../uitest/TC_AG/AG_Border_A_Border_Style.java | 10 +-
.../TC_AG/AG_Border_A_Border_Top_Color.java | 8 +-
.../AG_Border_A_Border_Top_Left_Radius.java | 8 +-
.../AG_Border_A_Border_Top_Right_Radius.java | 8 +-
.../TC_AG/AG_Border_A_Border_Top_Width.java | 10 +-
.../uitest/TC_AG/AG_Border_A_Border_Width.java | 10 +-
.../AG_Border_Div_Border_Bottom_Color.java | 8 +-
...AG_Border_Div_Border_Bottom_Left_Radius.java | 8 +-
...G_Border_Div_Border_Bottom_Right_Radius.java | 8 +-
.../AG_Border_Div_Border_Bottom_Width.java | 10 +-
.../TC_AG/AG_Border_Div_Border_Color.java | 8 +-
.../TC_AG/AG_Border_Div_Border_Left_Color.java | 8 +-
.../TC_AG/AG_Border_Div_Border_Left_Width.java | 10 +-
.../TC_AG/AG_Border_Div_Border_Radius.java | 8 +-
.../TC_AG/AG_Border_Div_Border_Right_Color.java | 8 +-
.../TC_AG/AG_Border_Div_Border_Right_Width.java | 10 +-
.../TC_AG/AG_Border_Div_Border_Style.java | 10 +-
.../TC_AG/AG_Border_Div_Border_Top_Color.java | 8 +-
.../AG_Border_Div_Border_Top_Left_Radius.java | 8 +-
.../AG_Border_Div_Border_Top_Right_Radius.java | 8 +-
.../TC_AG/AG_Border_Div_Border_Top_Width.java | 10 +-
.../TC_AG/AG_Border_Div_Border_Width.java | 10 +-
.../AG_Border_Image_Border_Bottom_Color.java | 8 +-
..._Border_Image_Border_Bottom_Left_Radius.java | 8 +-
...Border_Image_Border_Bottom_Right_Radius.java | 8 +-
.../AG_Border_Image_Border_Bottom_Width.java | 10 +-
.../TC_AG/AG_Border_Image_Border_Color.java | 8 +-
.../AG_Border_Image_Border_Left_Color.java | 8 +-
.../AG_Border_Image_Border_Left_Width.java | 10 +-
.../TC_AG/AG_Border_Image_Border_Radius.java | 8 +-
.../AG_Border_Image_Border_Right_Color.java | 8 +-
.../AG_Border_Image_Border_Right_Width.java | 10 +-
.../TC_AG/AG_Border_Image_Border_Style.java | 10 +-
.../TC_AG/AG_Border_Image_Border_Top_Color.java | 8 +-
.../AG_Border_Image_Border_Top_Left_Radius.java | 8 +-
...AG_Border_Image_Border_Top_Right_Radius.java | 8 +-
.../TC_AG/AG_Border_Image_Border_Top_Width.java | 10 +-
.../TC_AG/AG_Border_Image_Border_Width.java | 10 +-
.../AG_Border_Input_Border_Bottom_Color.java | 8 +-
..._Border_Input_Border_Bottom_Left_Radius.java | 8 +-
...Border_Input_Border_Bottom_Right_Radius.java | 8 +-
.../AG_Border_Input_Border_Bottom_Width.java | 10 +-
.../TC_AG/AG_Border_Input_Border_Color.java | 8 +-
.../AG_Border_Input_Border_Left_Color.java | 8 +-
.../AG_Border_Input_Border_Left_Width.java | 10 +-
.../TC_AG/AG_Border_Input_Border_Radius.java | 8 +-
.../AG_Border_Input_Border_Right_Color.java | 8 +-
.../AG_Border_Input_Border_Right_Width.java | 10 +-
.../TC_AG/AG_Border_Input_Border_Style.java | 10 +-
.../TC_AG/AG_Border_Input_Border_Top_Color.java | 8 +-
.../AG_Border_Input_Border_Top_Left_Radius.java | 8 +-
...AG_Border_Input_Border_Top_Right_Radius.java | 8 +-
.../TC_AG/AG_Border_Input_Border_Top_Width.java | 10 +-
.../TC_AG/AG_Border_Input_Border_Width.java | 10 +-
.../AG_Border_Switch_Border_Bottom_Color.java | 8 +-
...Border_Switch_Border_Bottom_Left_Radius.java | 8 +-
...order_Switch_Border_Bottom_Right_Radius.java | 8 +-
.../AG_Border_Switch_Border_Bottom_Width.java | 10 +-
.../TC_AG/AG_Border_Switch_Border_Color.java | 8 +-
.../AG_Border_Switch_Border_Left_Color.java | 8 +-
.../AG_Border_Switch_Border_Left_Width.java | 10 +-
.../TC_AG/AG_Border_Switch_Border_Radius.java | 8 +-
.../AG_Border_Switch_Border_Right_Color.java | 8 +-
.../AG_Border_Switch_Border_Right_Width.java | 10 +-
.../TC_AG/AG_Border_Switch_Border_Style.java | 10 +-
.../AG_Border_Switch_Border_Top_Color.java | 8 +-
...AG_Border_Switch_Border_Top_Left_Radius.java | 8 +-
...G_Border_Switch_Border_Top_Right_Radius.java | 8 +-
.../AG_Border_Switch_Border_Top_Width.java | 10 +-
.../TC_AG/AG_Border_Switch_Border_Width.java | 10 +-
.../AG_Border_Text_Border_Bottom_Color.java | 8 +-
...G_Border_Text_Border_Bottom_Left_Radius.java | 8 +-
..._Border_Text_Border_Bottom_Right_Radius.java | 8 +-
.../AG_Border_Text_Border_Bottom_Width.java | 10 +-
.../TC_AG/AG_Border_Text_Border_Color.java | 8 +-
.../TC_AG/AG_Border_Text_Border_Left_Color.java | 8 +-
.../TC_AG/AG_Border_Text_Border_Left_Width.java | 10 +-
.../TC_AG/AG_Border_Text_Border_Radius.java | 8 +-
.../AG_Border_Text_Border_Right_Color.java | 8 +-
.../AG_Border_Text_Border_Right_Width.java | 10 +-
.../TC_AG/AG_Border_Text_Border_Style.java | 10 +-
.../TC_AG/AG_Border_Text_Border_Top_Color.java | 8 +-
.../AG_Border_Text_Border_Top_Left_Radius.java | 8 +-
.../AG_Border_Text_Border_Top_Right_Radius.java | 8 +-
.../TC_AG/AG_Border_Text_Border_Top_Width.java | 10 +-
.../TC_AG/AG_Border_Text_Border_Width.java | 10 +-
.../AG_Border_Video_Border_Bottom_Color.java | 8 +-
..._Border_Video_Border_Bottom_Left_Radius.java | 8 +-
...Border_Video_Border_Bottom_Right_Radius.java | 8 +-
.../AG_Border_Video_Border_Bottom_Width.java | 10 +-
.../TC_AG/AG_Border_Video_Border_Color.java | 8 +-
.../AG_Border_Video_Border_Left_Color.java | 8 +-
.../AG_Border_Video_Border_Left_Width.java | 10 +-
.../TC_AG/AG_Border_Video_Border_Radius.java | 8 +-
.../AG_Border_Video_Border_Right_Color.java | 8 +-
.../AG_Border_Video_Border_Right_Width.java | 10 +-
.../TC_AG/AG_Border_Video_Border_Style.java | 10 +-
.../TC_AG/AG_Border_Video_Border_Top_Color.java | 8 +-
.../AG_Border_Video_Border_Top_Left_Radius.java | 8 +-
...AG_Border_Video_Border_Top_Right_Radius.java | 8 +-
.../TC_AG/AG_Border_Video_Border_Top_Width.java | 10 +-
.../TC_AG/AG_Border_Video_Border_Width.java | 10 +-
.../AG_Border_Web_Border_Bottom_Color.java | 8 +-
...AG_Border_Web_Border_Bottom_Left_Radius.java | 8 +-
...G_Border_Web_Border_Bottom_Right_Radius.java | 8 +-
.../AG_Border_Web_Border_Bottom_Width.java | 10 +-
.../TC_AG/AG_Border_Web_Border_Color.java | 8 +-
.../TC_AG/AG_Border_Web_Border_Left_Color.java | 8 +-
.../TC_AG/AG_Border_Web_Border_Left_Width.java | 10 +-
.../TC_AG/AG_Border_Web_Border_Radius.java | 8 +-
.../TC_AG/AG_Border_Web_Border_Right_Color.java | 8 +-
.../TC_AG/AG_Border_Web_Border_Right_Width.java | 10 +-
.../TC_AG/AG_Border_Web_Border_Style.java | 10 +-
.../TC_AG/AG_Border_Web_Border_Top_Color.java | 8 +-
.../AG_Border_Web_Border_Top_Left_Radius.java | 8 +-
.../AG_Border_Web_Border_Top_Right_Radius.java | 8 +-
.../TC_AG/AG_Border_Web_Border_Top_Width.java | 11 +-
.../TC_AG/AG_Border_Web_Border_Width.java | 10 +-
.../uitest/TC_AG/AG_CommonAttribute_A_If.java | 8 +-
.../uitest/TC_AG/AG_CommonAttribute_Div_If.java | 8 +-
.../TC_AG/AG_CommonAttribute_Image_If.java | 8 +-
.../TC_AG/AG_CommonAttribute_Input_If.java | 8 +-
.../TC_AG/AG_CommonAttribute_Switch_If.java | 8 +-
.../TC_AG/AG_CommonAttribute_Text_If.java | 8 +-
.../TC_AG/AG_CommonAttribute_Video_If.java | 8 +-
.../uitest/TC_AG/AG_CommonAttribute_Web_If.java | 8 +-
.../uitest/TC_AG/AG_CommonEvent_A_Onclick.java | 4 +-
.../TC_AG/AG_CommonEvent_Div_Onclick.java | 4 +-
.../TC_AG/AG_CommonEvent_Image_Onclick.java | 4 +-
.../TC_AG/AG_CommonEvent_Input_Onclick.java | 4 +-
.../TC_AG/AG_CommonEvent_Switch_Onclick.java | 4 +-
.../TC_AG/AG_CommonEvent_Text_Onclick.java | 4 +-
.../TC_AG/AG_CommonEvent_Video_Onclick.java | 4 +-
.../TC_AG/AG_CommonEvent_Web_Onclick.java | 4 +-
.../AG_CommonStyle_A_Background_Color.java | 8 +-
.../TC_AG/AG_CommonStyle_A_Widthandheight.java | 12 +-
.../AG_CommonStyle_Div_Background_Color.java | 8 +-
.../AG_CommonStyle_Div_Widthandheight.java | 12 +-
.../AG_CommonStyle_Image_Background_Color.java | 8 +-
.../AG_CommonStyle_Image_Widthandheight.java | 12 +-
.../AG_CommonStyle_Input_Background_Color.java | 8 +-
.../AG_CommonStyle_Input_Widthandheight.java | 12 +-
.../AG_CommonStyle_Switch_Background_Color.java | 8 +-
.../AG_CommonStyle_Switch_Widthandheight.java | 12 +-
.../AG_CommonStyle_Text_Background_Color.java | 8 +-
.../AG_CommonStyle_Text_Widthandheight.java | 12 +-
.../AG_CommonStyle_Video_Background_Color.java | 8 +-
.../AG_CommonStyle_Video_Widthandheight.java | 12 +-
.../AG_CommonStyle_Web_Background_Color.java | 8 +-
.../AG_CommonStyle_Web_Widthandheight.java | 12 +-
.../weex/uitest/TC_AG/AG_Gesture_Div_Click.java | 4 +-
.../uitest/TC_AG/AG_Gesture_Div_Conflict.java | 4 +-
.../uitest/TC_AG/AG_Gesture_Div_Longpress.java | 4 +-
.../weex/uitest/TC_AG/AG_Gesture_Div_Pan.java | 4 +-
.../weex/uitest/TC_AG/AG_Gesture_Div_Swipe.java | 4 +-
.../weex/uitest/TC_AG/AG_Gesture_Div_Touch.java | 4 +-
.../uitest/TC_AG/AG_Image_Image_Onload.java | 4 +-
.../uitest/TC_AG/AG_Image_Image_Resize.java | 10 +-
.../weex/uitest/TC_AG/AG_Image_Image_Src.java | 8 +-
.../uitest/TC_AG/AG_Input_Input_Autofocus.java | 8 +-
.../weex/uitest/TC_AG/AG_Input_Input_Color.java | 8 +-
.../uitest/TC_AG/AG_Input_Input_Disabled.java | 8 +-
.../weex/uitest/TC_AG/AG_Input_Input_Event.java | 4 +-
.../uitest/TC_AG/AG_Input_Input_Font_Size.java | 8 +-
.../uitest/TC_AG/AG_Input_Input_Font_Style.java | 8 +-
.../TC_AG/AG_Input_Input_Font_Weight.java | 8 +-
.../TC_AG/AG_Input_Input_Placeholder.java | 8 +-
.../TC_AG/AG_Input_Input_Placeholder_Color.java | 8 +-
.../uitest/TC_AG/AG_Input_Input_Text_Align.java | 10 +-
.../weex/uitest/TC_AG/AG_Input_Input_Type.java | 14 +-
.../weex/uitest/TC_AG/AG_Input_Input_Value.java | 10 +-
.../weex/uitest/TC_AG/AG_Margin_A_Margin.java | 8 +-
.../uitest/TC_AG/AG_Margin_A_Margin_Bottom.java | 8 +-
.../uitest/TC_AG/AG_Margin_A_Margin_Left.java | 8 +-
.../uitest/TC_AG/AG_Margin_A_Margin_Right.java | 8 +-
.../uitest/TC_AG/AG_Margin_A_Margin_Top.java | 8 +-
.../weex/uitest/TC_AG/AG_Margin_Div_Margin.java | 8 +-
.../TC_AG/AG_Margin_Div_Margin_Bottom.java | 8 +-
.../uitest/TC_AG/AG_Margin_Div_Margin_Left.java | 8 +-
.../TC_AG/AG_Margin_Div_Margin_Right.java | 8 +-
.../uitest/TC_AG/AG_Margin_Div_Margin_Top.java | 8 +-
.../uitest/TC_AG/AG_Margin_Image_Margin.java | 8 +-
.../TC_AG/AG_Margin_Image_Margin_Bottom.java | 8 +-
.../TC_AG/AG_Margin_Image_Margin_Left.java | 8 +-
.../TC_AG/AG_Margin_Image_Margin_Right.java | 8 +-
.../TC_AG/AG_Margin_Image_Margin_Top.java | 8 +-
.../uitest/TC_AG/AG_Margin_Input_Margin.java | 8 +-
.../TC_AG/AG_Margin_Input_Margin_Bottom.java | 8 +-
.../TC_AG/AG_Margin_Input_Margin_Left.java | 8 +-
.../TC_AG/AG_Margin_Input_Margin_Right.java | 8 +-
.../TC_AG/AG_Margin_Input_Margin_Top.java | 8 +-
.../uitest/TC_AG/AG_Margin_Switch_Margin.java | 8 +-
.../TC_AG/AG_Margin_Switch_Margin_Bottom.java | 8 +-
.../TC_AG/AG_Margin_Switch_Margin_Left.java | 8 +-
.../TC_AG/AG_Margin_Switch_Margin_Right.java | 8 +-
.../TC_AG/AG_Margin_Switch_Margin_Top.java | 8 +-
.../uitest/TC_AG/AG_Margin_Text_Margin.java | 8 +-
.../TC_AG/AG_Margin_Text_Margin_Bottom.java | 8 +-
.../TC_AG/AG_Margin_Text_Margin_Left.java | 8 +-
.../TC_AG/AG_Margin_Text_Margin_Right.java | 8 +-
.../uitest/TC_AG/AG_Margin_Text_Margin_Top.java | 8 +-
.../uitest/TC_AG/AG_Margin_Video_Margin.java | 8 +-
.../TC_AG/AG_Margin_Video_Margin_Bottom.java | 8 +-
.../TC_AG/AG_Margin_Video_Margin_Left.java | 8 +-
.../TC_AG/AG_Margin_Video_Margin_Right.java | 8 +-
.../TC_AG/AG_Margin_Video_Margin_Top.java | 8 +-
.../weex/uitest/TC_AG/AG_Margin_Web_Margin.java | 8 +-
.../TC_AG/AG_Margin_Web_Margin_Bottom.java | 8 +-
.../uitest/TC_AG/AG_Margin_Web_Margin_Left.java | 8 +-
.../TC_AG/AG_Margin_Web_Margin_Right.java | 8 +-
.../uitest/TC_AG/AG_Margin_Web_Margin_Top.java | 8 +-
.../uitest/TC_AG/AG_Switch_Switch_Checked.java | 8 +-
.../uitest/TC_AG/AG_Switch_Switch_Onchange.java | 4 +-
.../weex/uitest/TC_AG/AG_Text_Text_Color.java | 8 +-
.../uitest/TC_AG/AG_Text_Text_Font_Size.java | 8 +-
.../uitest/TC_AG/AG_Text_Text_Font_Style.java | 8 +-
.../uitest/TC_AG/AG_Text_Text_Font_Weight.java | 8 +-
.../uitest/TC_AG/AG_Text_Text_Line_Height.java | 12 +-
.../uitest/TC_AG/AG_Text_Text_Text_Align.java | 10 +-
.../TC_AG/AG_Text_Text_Text_Decoration.java | 10 +-
.../TC_AG/AG_Text_Text_Text_Overflow.java | 14 +-
.../weex/uitest/TC_AG/AG_Text_Text_Value.java | 10 +-
.../uitest/TC_AG/AG_Video_Video_Auto_Play.java | 8 +-
.../weex/uitest/TC_AG/AG_Video_Video_Event.java | 4 +-
.../TC_AG/AG_Video_Video_Play_Status.java | 8 +-
.../weex/uitest/TC_AG/AG_Video_Video_Src.java | 8 +-
.../weex/uitest/TC_AG/AG_Web_Web_Event.java | 4 +-
.../weex/uitest/TC_AG/AG_Web_Web_Src.java | 8 +-
.../TC_AHref/WeexUiTestCaseTCAHrefEvent.java | 3 +-
.../TC_AHref/WeexUiTestCaseTCAHrefStyle.java | 4 +-
.../TC_AHref/WeexUiTestCaseTCAHrefUpdate.java | 2 +
.../TC_Input/WeexUiTestCaseTcInputEvent.java | 6 +-
.../java/com/alibaba/weex/util/TestFlow.java | 114 +-
.../java/com/alibaba/weex/util/ViewUtil.java | 3 +-
.../playground/app/src/main/assets/animation.js | 1860 +++--
.../app/src/main/assets/component/a-demo.js | 1740 +++--
.../src/main/assets/component/countdown-demo.js | 2187 ++++--
.../app/src/main/assets/component/image-demo.js | 2211 ++++--
.../app/src/main/assets/component/input-demo.js | 2075 ++++--
.../main/assets/component/list/list-basic.js | 1370 +---
.../assets/component/list/list-demo-horizon.js | 620 +-
.../src/main/assets/component/list/list-demo.js | 2448 +++---
.../src/main/assets/component/marquee-demo.js | 1959 +++--
.../src/main/assets/component/navigator-demo.js | 3007 ++++++--
.../main/assets/component/process-bar-demo.js | 2158 ++++++
.../src/main/assets/component/scroller-demo.js | 2234 ++++--
.../slider-neighbor/silder-neighbor.js | 287 +
.../slider-neighbor/slider-neighbor-item.js | 133 +
.../slider-neighbor/slider-neighbor-page.js | 213 +
.../src/main/assets/component/slider/index.js | 3167 +++++---
.../main/assets/component/slider/slider-item.js | 88 +-
.../main/assets/component/slider/slider-page.js | 186 +-
.../main/assets/component/tabbar/tabbar-demo.js | 2731 +++++--
.../main/assets/component/tabbar/tabbar-item.js | 108 +-
.../app/src/main/assets/component/text-demo.js | 3641 +++++----
.../app/src/main/assets/component/video-demo.js | 1942 +++--
.../app/src/main/assets/component/web-demo.js | 2253 ++++--
android/playground/app/src/main/assets/hello.js | 34 +-
.../playground/app/src/main/assets/iconfont.js | 108 +-
.../app/src/main/assets/image-demo2.js | 83 -
android/playground/app/src/main/assets/index.js | 2935 ++++++--
.../app/src/main/assets/module/clipboard.js | 2072 ++++--
.../app/src/main/assets/module/componentRect.js | 468 ++
.../app/src/main/assets/module/instance-api.js | 1874 +++--
.../app/src/main/assets/module/modal.js | 2125 ++++--
.../app/src/main/assets/module/picker-demo.js | 2347 ++++++
.../app/src/main/assets/module/storage-demo.js | 2294 ++++--
.../app/src/main/assets/module/stream-demo.js | 2494 +++++--
.../app/src/main/assets/showcase/calculator.js | 2588 +++++--
.../assets/showcase/dropdown/dropdown-demo.js | 695 +-
.../assets/showcase/dropdown/we-dropdown.js | 229 +-
.../app/src/main/assets/showcase/minesweeper.js | 402 +-
.../main/assets/showcase/new-fashion/banner.js | 91 +-
.../main/assets/showcase/new-fashion/banners.js | 187 +-
.../main/assets/showcase/new-fashion/brand.js | 367 +-
.../assets/showcase/new-fashion/category.js | 1034 +--
.../main/assets/showcase/new-fashion/coupon.js | 99 +-
.../main/assets/showcase/new-fashion/fashion.js | 371 +-
.../main/assets/showcase/new-fashion/goods.js | 193 +-
.../assets/showcase/new-fashion/headlines.js | 505 +-
.../main/assets/showcase/new-fashion/index.js | 2839 +++++--
.../main/assets/showcase/new-fashion/link.js | 78 +-
.../main/assets/showcase/new-fashion/main.js | 6963 +++++++++++-------
.../main/assets/showcase/new-fashion/match.js | 211 +-
.../assets/showcase/new-fashion/resource.js | 315 +-
.../main/assets/showcase/new-fashion/scene.js | 560 +-
.../app/src/main/assets/showcase/ui.js | 2314 ++++--
.../app/src/main/assets/style/index.js | 2529 +++++--
.../app/src/main/assets/style/style-box.js | 2907 +++++---
.../app/src/main/assets/style/style-flex.js | 4387 ++++++-----
.../app/src/main/assets/style/style-item.js | 85 +-
.../app/src/main/assets/syntax/hello-world-1.js | 34 +-
.../app/src/main/assets/syntax/hello-world-2.js | 34 +-
.../app/src/main/assets/syntax/hello-world-3.js | 48 +-
.../app/src/main/assets/syntax/hello-world-4.js | 76 +-
.../app/src/main/assets/syntax/hello-world-5.js | 86 +-
.../app/src/main/assets/syntax/hello-world.js | 86 +-
.../app/src/main/assets/syntax/index.js | 3033 ++++++--
.../src/main/assets/syntax/script-component.js | 120 +-
.../app/src/main/assets/syntax/script-data.js | 125 +-
.../app/src/main/assets/syntax/script-events.js | 142 +-
.../src/main/assets/syntax/script-instance.js | 146 +-
.../src/main/assets/syntax/script-lifecycle.js | 96 +-
.../app/src/main/assets/syntax/script-module.js | 86 +-
.../src/main/assets/syntax/script-options.js | 128 +-
.../src/main/assets/syntax/template-class.js | 82 +-
.../src/main/assets/syntax/template-content.js | 78 +-
.../src/main/assets/syntax/template-event.js | 92 +-
.../app/src/main/assets/syntax/template-if.js | 82 +-
.../assets/syntax/template-repeat-update.js | 109 +-
.../src/main/assets/syntax/template-repeat.js | 92 +-
.../src/main/assets/syntax/template-style.js | 72 +-
.../playground/app/src/main/assets/template.js | 2163 ++++--
.../java/com/alibaba/weex/IndexActivity.java | 7 +-
.../java/com/alibaba/weex/WXPageActivity.java | 59 +-
.../com/alibaba/weex/constants/Constants.java | 2 +-
.../alibaba/weex/extend/component/RichText.java | 4 +-
.../weex/extend/module/WXEventModule.java | 6 +
.../alibaba/weex/https/WXOkHttpDispatcher.java | 2 -
.../com.taobao.taobao_2016.11.21_17.35.li | Bin 0 -> 2415126 bytes
android/sdk/assets/main.js | 14 +-
android/sdk/build.gradle | 2 +-
android/sdk/libs/armeabi/libweexv8.so | Bin 3579724 -> 3579724 bytes
android/sdk/libs/x86/libweexv8.so | Bin 4328576 -> 4328576 bytes
android/sdk/src/main/AndroidManifest.xml | 39 +-
.../main/java/com/taobao/weex/InitConfig.java | 13 +-
.../java/com/taobao/weex/WXEnvironment.java | 24 +-
.../com/taobao/weex/WXGlobalEventModule.java | 13 +-
.../com/taobao/weex/WXGlobalEventReceiver.java | 237 +
.../main/java/com/taobao/weex/WXSDKEngine.java | 45 +-
.../java/com/taobao/weex/WXSDKInstance.java | 162 +-
.../main/java/com/taobao/weex/WXSDKManager.java | 46 +-
.../taobao/weex/adapter/DefaultUriAdapter.java | 266 +
.../com/taobao/weex/adapter/URIAdapter.java | 265 +
.../com/taobao/weex/annotation/JSMethod.java | 225 +
.../appfram/navigator/WXNavigatorModule.java | 56 +-
.../weex/appfram/pickers/DatePickerImpl.java | 353 +
.../weex/appfram/pickers/WXPickersModule.java | 366 +
.../weex/appfram/storage/DefaultWXStorage.java | 127 +-
.../appfram/storage/WXSQLiteOpenHelper.java | 70 +-
.../taobao/weex/bridge/BaseMethodInvoker.java | 224 +
.../taobao/weex/bridge/JSCallbackCreator.java | 213 +
.../taobao/weex/bridge/SimpleJSCallback.java | 229 +
.../com/taobao/weex/bridge/WXBridgeManager.java | 171 +-
.../com/taobao/weex/bridge/WXModuleManager.java | 77 +-
.../java/com/taobao/weex/common/Constants.java | 20 +-
.../com/taobao/weex/common/WXErrorCode.java | 26 +-
.../com/taobao/weex/common/WXImageStrategy.java | 5 +
.../java/com/taobao/weex/common/WXModule.java | 359 +-
.../com/taobao/weex/common/WXPerformance.java | 35 +-
.../java/com/taobao/weex/dom/WXDomHandler.java | 20 +-
.../java/com/taobao/weex/dom/WXDomManager.java | 105 +-
.../java/com/taobao/weex/dom/WXDomModule.java | 97 +-
.../com/taobao/weex/dom/WXDomStatement.java | 83 +-
.../main/java/com/taobao/weex/dom/WXStyle.java | 23 +
.../java/com/taobao/weex/http/WXHttpUtil.java | 2 +
.../com/taobao/weex/http/WXStreamModule.java | 31 +-
.../com/taobao/weex/ui/ComponentCreator.java | 2 +-
.../weex/ui/ExternalLoaderComponentHolder.java | 59 +-
.../weex/ui/IExternalComponentGetter.java | 3 +-
.../com/taobao/weex/ui/IFComponentHolder.java | 6 +-
.../taobao/weex/ui/SimpleComponentHolder.java | 85 +-
.../com/taobao/weex/ui/WXComponentRegistry.java | 14 +-
.../com/taobao/weex/ui/WXRenderManager.java | 14 +
.../com/taobao/weex/ui/WXRenderStatement.java | 30 +-
.../ui/animation/DimensionUpdateListener.java | 6 +-
.../weex/ui/animation/WXAnimationBean.java | 2 +-
.../weex/ui/animation/WXAnimationModule.java | 1 -
.../ui/component/AbstractEditComponent.java | 197 +-
.../weex/ui/component/AppearanceHelper.java | 6 +-
.../com/taobao/weex/ui/component/Textarea.java | 7 +
.../java/com/taobao/weex/ui/component/WXA.java | 15 +-
.../taobao/weex/ui/component/WXComponent.java | 155 +-
.../weex/ui/component/WXComponentFactory.java | 25 +-
.../com/taobao/weex/ui/component/WXDiv.java | 10 +-
.../com/taobao/weex/ui/component/WXEmbed.java | 21 +-
.../com/taobao/weex/ui/component/WXHeader.java | 6 +-
.../com/taobao/weex/ui/component/WXImage.java | 73 +-
.../com/taobao/weex/ui/component/WXLoading.java | 4 +-
.../com/taobao/weex/ui/component/WXRefresh.java | 4 +-
.../taobao/weex/ui/component/WXScroller.java | 50 +-
.../com/taobao/weex/ui/component/WXSlider.java | 44 +-
.../weex/ui/component/WXSliderNeighbor.java | 120 +-
.../com/taobao/weex/ui/component/WXSwitch.java | 33 +-
.../com/taobao/weex/ui/component/WXText.java | 21 +-
.../taobao/weex/ui/component/WXVContainer.java | 41 +-
.../com/taobao/weex/ui/component/WXVideo.java | 4 +-
.../com/taobao/weex/ui/component/WXWeb.java | 6 +-
.../ui/component/helper/WXTimeInputHelper.java | 254 +
.../taobao/weex/ui/component/list/WXCell.java | 20 +-
.../weex/ui/component/list/WXListComponent.java | 153 +-
.../taobao/weex/ui/module/WXModalUIModule.java | 26 +-
.../weex/ui/view/WXBaseCircleIndicator.java | 7 +-
.../weex/ui/view/WXCirclePageAdapter.java | 93 +-
.../taobao/weex/ui/view/WXCircleViewPager.java | 200 +-
.../com/taobao/weex/ui/view/WXEditText.java | 24 +
.../taobao/weex/ui/view/WXLoadingLayout.java | 217 +
.../taobao/weex/ui/view/WXRefreshLayout.java | 217 +
.../com/taobao/weex/ui/view/WXSwitchView.java | 4 +-
.../com/taobao/weex/ui/view/WXTextView.java | 3 +
.../weex/ui/view/listview/WXRecyclerView.java | 28 +-
.../ui/view/refresh/wrapper/BaseBounceView.java | 21 +
.../refresh/wrapper/BounceRecyclerView.java | 35 +-
.../main/java/com/taobao/weex/utils/FontDO.java | 27 +-
.../com/taobao/weex/utils/FunctionParser.java | 6 +-
.../taobao/weex/utils/SingleFunctionParser.java | 23 +-
.../com/taobao/weex/utils/TypefaceUtil.java | 42 +-
.../taobao/weex/utils/WXReflectionUtils.java | 37 +
.../com/taobao/weex/utils/WXResourceUtils.java | 179 +-
.../taobao/weex/utils/WXSoInstallMgrSdk.java | 10 +-
.../java/com/taobao/weex/utils/WXUtils.java | 17 +
.../java/com/taobao/weex/utils/WXViewUtils.java | 30 +-
.../java/com/taobao/weex/WXSDKEngineTest.java | 2 +-
.../java/com/taobao/weex/WXSDKManagerTest.java | 4 +
.../weex/adapter/DefaultUriAdapterTest.java | 299 +
.../appfram/storage/DefaultWXStorageTest.java | 14 +-
.../java/com/taobao/weex/dom/WXStyleTest.java | 261 +
.../taobao/weex/http/WXStreamModuleTest.java | 18 +-
.../com/taobao/weex/ui/ComponentHolderTest.java | 14 +-
.../ui/animation/WXAnimationModuleTest.java | 2 +-
.../taobao/weex/ui/component/ComponentTest.java | 4 +-
.../weex/ui/component/EditComponentTest.java | 19 +-
.../taobao/weex/ui/component/TestComponent.java | 4 +-
.../com/taobao/weex/ui/component/WXDivTest.java | 10 +-
.../taobao/weex/ui/component/WXHeaderTest.java | 2 +-
.../taobao/weex/ui/component/WXImageTest.java | 2 +-
.../weex/ui/component/WXScrollerTest.java | 2 +-
.../taobao/weex/ui/component/WXSliderTest.java | 4 +-
.../taobao/weex/ui/component/WXTextTest.java | 4 +-
.../taobao/weex/ui/component/WXVideoTest.java | 2 +-
.../component/helper/WXTimeInputHelperTest.java | 254 +
.../ui/component/list/WXListComponentTest.java | 2 +-
.../weex/ui/view/WXCirclePageAdapterTest.java | 12 +-
.../com/taobao/weex/utils/TypefaceUtilTest.java | 6 +-
.../taobao/weex/utils/WXResourceUtilsTest.java | 4 +-
bin/commit-msg.sh | 4 +-
bin/dist-js-framework.sh | 2 +-
build/build.js | 180 +
build/config.frameworks.js | 51 -
build/rollup.browser.common.config.js | 35 +
build/rollup.browser.config.js | 38 +
build/rollup.config.js | 34 +
build/webpack.browser.config.js | 43 -
build/webpack.common.config.js | 50 -
build/webpack.examples.config.js | 21 +-
build/webpack.native.config.js | 42 -
circle.yml | 7 +-
dist/weex-js-framework/index.js | 2 +-
dist/weex-js-framework/package.json | 7 +-
doc/SUMMARY.md | 4 +
doc/_layouts/header.html | 24 +-
doc/advanced/extend-to-android.md | 1 -
doc/advanced/extend-to-html5.md | 1 -
doc/advanced/extend-to-ios.md | 9 +-
doc/advanced/how-data-binding-works.md | 1 -
doc/advanced/how-it-works.md | 5 +-
doc/advanced/integrate-to-android.md | 3 +-
doc/advanced/integrate-to-html5.md | 1 -
doc/advanced/integrate-to-ios.md | 5 +-
doc/ali_addition/weex_doc.css | 8 +-
doc/components/a.md | 8 +-
doc/components/cell.md | 1 -
doc/components/div.md | 1 -
doc/components/image.md | 1 -
doc/components/indicator.md | 1 -
doc/components/input.md | 1 -
doc/components/list.md | 1 -
doc/components/scroller.md | 1 -
doc/components/slider.md | 2 +-
doc/components/special-element.md | 3 +-
doc/components/switch.md | 1 -
doc/components/text.md | 3 +-
doc/components/textarea.md | 74 +
doc/components/video.md | 1 -
doc/components/web.md | 3 +-
doc/components/wxc-navpage.md | 1 -
doc/components/wxc-tabbar.md | 3 +-
doc/demo/animation.md | 2 +-
doc/demo/hello-world.md | 2 +-
doc/demo/list.md | 2 +-
doc/demo/modal.md | 2 +-
doc/demo/slider.md | 2 +-
doc/faq.md | 24 +-
doc/how-to/customize-a-native-component.md | 3 +-
doc/how-to/cuszomize-native-apis.md | 1 -
doc/how-to/debug-with-html5.md | 5 +-
doc/how-to/debug-with-native.md | 3 -
doc/how-to/maintain-your-component-code.md | 3 -
doc/how-to/manage-data-with-a-high-level-cms.md | 3 -
doc/how-to/manage-your-file-structure.md | 3 -
doc/how-to/preview-in-browser.md | 3 +-
doc/how-to/preview-in-playground-app.md | 7 +-
doc/how-to/require-3rd-party-libs.md | 1 -
doc/how-to/transform-code-into-js-bundle.md | 3 +-
doc/modules/animation.md | 14 +-
doc/modules/clipboard.md | 3 +-
doc/modules/dom.md | 1 -
doc/modules/globalevent.md | 76 +
doc/modules/main.md | 3 +-
doc/modules/modal.md | 1 -
doc/modules/navigator.md | 3 +-
doc/modules/storage.md | 3 +-
doc/modules/stream.md | 3 +-
doc/modules/webview.md | 1 -
doc/references/api.md | 5 +-
doc/references/bootstrap.md | 1 -
doc/references/color-names.md | 1 -
doc/references/common-attrs.md | 1 -
doc/references/common-event.md | 1 -
doc/references/common-style.md | 4 +-
doc/references/component-defs.md | 1 -
doc/references/styles/units/color.md | 6 +-
doc/references/text-style.md | 3 +-
doc/specs/js-framework-apis.md | 1 -
doc/specs/virtual-dom-apis.md | 5 +-
doc/syntax/comm.md | 7 +-
doc/syntax/composed-component.md | 1 -
doc/syntax/config-n-data.md | 27 +-
doc/syntax/data-binding.md | 27 +-
doc/syntax/display-logic.md | 3 +-
doc/syntax/events.md | 1 -
doc/syntax/id.md | 1 -
doc/syntax/main.md | 1 -
doc/syntax/render-logic.md | 3 +-
doc/syntax/style-n-class.md | 1 -
doc/tools/devtools-android.md | 15 +-
doc/tools/devtools-ios.md | 3 +-
doc/tools/devtools.md | 10 +-
doc/tools/how-to-debug.md | 6 +-
doc/tools/playground-app.md | 8 +-
doc/tutorial.md | 7 +-
examples/component/input-demo.we | 168 +-
examples/component/list/list-demo.we | 2 +-
examples/component/navigator-demo.we | 127 +-
examples/component/slider-neighbor/index.we | 74 +
.../slider-neighbor/silder-neighbor.we | 63 -
examples/component/web-demo.we | 14 +-
examples/index.we | 9 +-
examples/module/clipboard.we | 17 +-
examples/module/componentRect.we | 130 +
examples/module/picker-demo.we | 102 +
examples/module/stream-demo.we | 3 +-
examples/module/websocket-demo.we | 112 +
examples/showcase/minesweeper.we | 6 +-
examples/syntax/hello-world-2.we | 2 +-
examples/syntax/hello-world-3.we | 2 +-
examples/syntax/hello-world-4.we | 2 +-
examples/syntax/hello-world-5.we | 2 +-
examples/syntax/hello-world.we | 2 +-
examples/test.we | 25 +
examples/vanilla/index.js | 2 +-
examples/vue/animation.vue | 147 +
examples/vue/components/a.vue | 22 +
examples/vue/components/countdown.vue | 86 +
examples/vue/components/image.vue | 55 +
examples/vue/components/input.vue | 47 +
examples/vue/components/list.vue | 112 +
examples/vue/components/marquee.vue | 65 +
examples/vue/components/navigator.vue | 71 +
examples/vue/components/scroller.vue | 161 +
examples/vue/components/slider.vue | 262 +
examples/vue/components/tabbar.vue | 61 +
examples/vue/components/text.vue | 60 +
examples/vue/components/video.vue | 56 +
examples/vue/components/web.vue | 74 +
examples/vue/hello.vue | 5 +
examples/vue/iconfont.vue | 59 +
examples/vue/include/base-url.js | 30 +
examples/vue/include/example-list-item.vue | 30 +
examples/vue/include/example-list.vue | 35 +
examples/vue/include/foo.vue | 12 +
examples/vue/include/h1.vue | 13 +
examples/vue/include/h2.vue | 13 +
examples/vue/include/h3.vue | 13 +
examples/vue/include/slider-item.vue | 19 +
examples/vue/include/slider-page.vue | 27 +
examples/vue/include/wxc-list-item.vue | 47 +
examples/vue/index.vue | 49 +
examples/vue/modules/clipboard.vue | 59 +
examples/vue/modules/instance-api.vue | 23 +
examples/vue/modules/modal.vue | 71 +
examples/vue/modules/storage.vue | 80 +
examples/vue/modules/stream.vue | 168 +
examples/vue/showcase/calculator.vue | 100 +
examples/vue/showcase/include/banner.vue | 23 +
examples/vue/showcase/include/banners.vue | 22 +
examples/vue/showcase/include/brand.vue | 63 +
examples/vue/showcase/include/category.vue | 513 ++
examples/vue/showcase/include/coupon.vue | 85 +
examples/vue/showcase/include/goods.vue | 69 +
examples/vue/showcase/include/headlines.vue | 94 +
examples/vue/showcase/include/link.vue | 17 +
examples/vue/showcase/include/match.vue | 50 +
examples/vue/showcase/include/resource.vue | 43 +
examples/vue/showcase/include/scene.vue | 283 +
examples/vue/showcase/include/util.js | 149 +
examples/vue/showcase/itemlist.vue | 541 ++
examples/vue/showcase/new-fashion.vue | 605 ++
examples/vue/showcase/progress.vue | 42 +
examples/vue/style/index.vue | 41 +
examples/vue/style/style-box.vue | 70 +
examples/vue/style/style-flex.vue | 125 +
examples/vue/style/style-item.vue | 37 +
examples/vue/syntax/hello-world-1.vue | 7 +
examples/vue/syntax/hello-world-2.vue | 14 +
examples/vue/syntax/hello-world-3.vue | 21 +
examples/vue/syntax/hello-world-4.vue | 32 +
examples/vue/syntax/hello-world-5.vue | 35 +
examples/vue/syntax/hello-world.vue | 44 +
examples/vue/syntax/include/btn.vue | 9 +
examples/vue/syntax/include/sub.vue | 16 +
examples/vue/syntax/script-component.vue | 29 +
examples/vue/syntax/script-data.vue | 81 +
examples/vue/syntax/script-events.vue | 36 +
examples/vue/syntax/script-instance.vue | 69 +
examples/vue/syntax/script-lifecycle.vue | 28 +
examples/vue/syntax/script-module.vue | 28 +
examples/vue/syntax/script-options.vue | 60 +
examples/vue/syntax/template-class.vue | 29 +
examples/vue/syntax/template-content.vue | 20 +
examples/vue/syntax/template-event.vue | 36 +
examples/vue/syntax/template-if.vue | 29 +
examples/vue/syntax/template-repeat-update.vue | 50 +
examples/vue/syntax/template-repeat.vue | 41 +
examples/vue/syntax/template-style.vue | 24 +
examples/vue/template.vue | 40 +
examples/vue/test.vue | 16 +
examples/vue/test2.vue | 6 +
html5/browser/base/atomic.js | 32 -
html5/browser/base/component/flexbox.js | 54 -
html5/browser/base/component/index.js | 212 -
html5/browser/base/component/lazyload.js | 68 -
html5/browser/base/component/operate.js | 198 -
html5/browser/base/component/position.js | 82 -
html5/browser/base/component/sticky.js | 230 -
html5/browser/base/component/valueFilter.js | 36 -
html5/browser/base/div.js | 16 -
html5/browser/base/droot.js | 60 -
html5/browser/base/root.js | 77 -
html5/browser/bridge/index.js | 7 -
html5/browser/bridge/protocol.js | 112 -
html5/browser/bridge/receiver.js | 124 -
html5/browser/bridge/sender.js | 45 -
html5/browser/dom/appearWatcher.js | 150 -
html5/browser/dom/componentManager.js | 384 -
html5/browser/dom/index.js | 7 -
html5/browser/extend/api/animation/index.js | 51 -
html5/browser/extend/api/animation/lib.js | 35 -
html5/browser/extend/api/clipboard.js | 73 -
html5/browser/extend/api/dom.js | 69 -
html5/browser/extend/api/event.js | 25 -
html5/browser/extend/api/geolocation.js | 66 -
html5/browser/extend/api/globalEvent.js | 46 -
html5/browser/extend/api/modal.js | 71 -
html5/browser/extend/api/navigator.js | 38 -
html5/browser/extend/api/pageInfo.js | 26 -
html5/browser/extend/api/storage.js | 159 -
html5/browser/extend/api/stream.js | 304 -
html5/browser/extend/api/timer.js | 62 -
html5/browser/extend/api/webview.js | 57 -
html5/browser/extend/components/a.js | 61 -
html5/browser/extend/components/countdown.js | 72 -
html5/browser/extend/components/datepicker.js | 44 -
html5/browser/extend/components/embed.js | 82 -
html5/browser/extend/components/image/image.css | 5 -
html5/browser/extend/components/image/index.js | 84 -
.../extend/components/indicator/index.js | 186 -
.../extend/components/indicator/indicator.css | 8 -
html5/browser/extend/components/input.js | 133 -
html5/browser/extend/components/marquee.js | 284 -
.../extend/components/scrollable/index.js | 15 -
.../extend/components/scrollable/list/hlist.js | 18 -
.../extend/components/scrollable/list/index.js | 11 -
.../extend/components/scrollable/list/list.js | 67 -
.../extend/components/scrollable/list/vlist.js | 18 -
.../components/scrollable/loading/index.js | 129 -
.../components/scrollable/loading/loading.css | 15 -
.../extend/components/scrollable/motion.js | 81 -
.../components/scrollable/refresh/index.js | 141 -
.../components/scrollable/refresh/refresh.css | 16 -
.../extend/components/scrollable/scroll.js | 1200 ---
.../extend/components/scrollable/scrollable.css | 15 -
.../extend/components/scrollable/scrollable.js | 307 -
.../components/scrollable/scroller/index.js | 25 -
html5/browser/extend/components/select.js | 92 -
.../extend/components/slider/carrousel.css | 6 -
.../extend/components/slider/carrousel.js | 436 --
html5/browser/extend/components/slider/index.js | 349 -
.../browser/extend/components/slider/slider.css | 34 -
html5/browser/extend/components/slider/timer.js | 66 -
.../browser/extend/components/spinner/index.js | 139 -
.../extend/components/spinner/spinner.css | 79 -
html5/browser/extend/components/switch/index.js | 238 -
.../browser/extend/components/switch/switch.css | 24 -
.../extend/components/tabheader/index.js | 399 -
.../extend/components/tabheader/tabheader.css | 140 -
html5/browser/extend/components/text.js | 107 -
html5/browser/extend/components/textarea.js | 94 -
html5/browser/extend/components/timepicker.js | 43 -
html5/browser/extend/components/video/index.js | 116 -
html5/browser/extend/components/video/video.css | 3 -
html5/browser/extend/components/web.js | 102 -
html5/browser/extend/index.js | 11 -
html5/browser/index.js | 18 -
html5/browser/render/config.js | 12 -
html5/browser/render/gesture.js | 493 --
html5/browser/render/index.js | 240 -
html5/browser/render/loader.js | 65 -
html5/browser/render/register.js | 72 -
html5/browser/render/style/base.css | 38 -
html5/browser/runtime/app/bundle/bootstrap.js | 44 -
html5/browser/runtime/app/bundle/index.js | 16 -
html5/browser/runtime/app/ctrl/index.js | 22 -
html5/browser/runtime/app/ctrl/init.js | 94 -
html5/browser/runtime/app/index.js | 31 -
html5/browser/runtime/config.js | 5 -
html5/browser/runtime/default/.DS_Store | Bin 6148 -> 0 bytes
html5/browser/runtime/default/index.js | 19 -
html5/browser/runtime/index.js | 38 -
html5/browser/runtime/shared.js | 13 -
html5/browser/runtime/static/create.js | 26 -
html5/browser/utils/array.js | 15 -
html5/browser/utils/frameUpdater.js | 47 -
html5/browser/utils/index.js | 218 -
html5/default/api/methods.js | 185 -
html5/default/api/modules.js | 78 -
html5/default/app/bundle/bootstrap.js | 66 -
html5/default/app/bundle/define.js | 97 -
html5/default/app/bundle/index.js | 16 -
html5/default/app/ctrl/index.js | 22 -
html5/default/app/ctrl/init.js | 155 -
html5/default/app/ctrl/misc.js | 235 -
html5/default/app/differ.js | 73 -
html5/default/app/downgrade.js | 154 -
html5/default/app/index.js | 31 -
html5/default/app/instance.js | 29 -
html5/default/app/register.js | 100 -
html5/default/config.js | 16 -
html5/default/core/LICENSE | 21 -
html5/default/core/array.js | 93 -
html5/default/core/dep.js | 79 -
html5/default/core/object.js | 84 -
html5/default/core/observer.js | 317 -
html5/default/core/state.js | 90 -
html5/default/core/watcher.js | 265 -
html5/default/index.js | 9 -
html5/default/static/bridge.js | 37 -
html5/default/static/create.js | 28 -
html5/default/static/life.js | 52 -
html5/default/static/map.js | 1 -
html5/default/static/misc.js | 21 -
html5/default/static/register.js | 54 -
html5/default/util/LICENSE | 21 -
html5/default/util/index.js | 134 -
html5/default/vm/compiler.js | 618 --
html5/default/vm/directive.js | 356 -
html5/default/vm/dom-helper.js | 240 -
html5/default/vm/events.js | 160 -
html5/default/vm/index.js | 113 -
html5/frameworks/index.js | 9 +
html5/frameworks/legacy/api/methods.js | 204 +
html5/frameworks/legacy/api/modules.js | 78 +
html5/frameworks/legacy/app/bundle/bootstrap.js | 66 +
html5/frameworks/legacy/app/bundle/define.js | 97 +
html5/frameworks/legacy/app/bundle/index.js | 16 +
html5/frameworks/legacy/app/ctrl/index.js | 22 +
html5/frameworks/legacy/app/ctrl/init.js | 164 +
html5/frameworks/legacy/app/ctrl/misc.js | 237 +
html5/frameworks/legacy/app/differ.js | 73 +
html5/frameworks/legacy/app/downgrade.js | 154 +
html5/frameworks/legacy/app/index.js | 37 +
html5/frameworks/legacy/app/instance.js | 29 +
html5/frameworks/legacy/app/register.js | 100 +
html5/frameworks/legacy/config.js | 16 +
html5/frameworks/legacy/core/LICENSE | 21 +
html5/frameworks/legacy/core/array.js | 95 +
html5/frameworks/legacy/core/dep.js | 79 +
html5/frameworks/legacy/core/object.js | 84 +
html5/frameworks/legacy/core/observer.js | 322 +
html5/frameworks/legacy/core/state.js | 91 +
html5/frameworks/legacy/core/watcher.js | 253 +
html5/frameworks/legacy/index.js | 22 +
html5/frameworks/legacy/static/bridge.js | 38 +
html5/frameworks/legacy/static/create.js | 30 +
html5/frameworks/legacy/static/life.js | 54 +
html5/frameworks/legacy/static/map.js | 1 +
html5/frameworks/legacy/static/misc.js | 22 +
html5/frameworks/legacy/static/register.js | 57 +
html5/frameworks/legacy/util/LICENSE | 21 +
html5/frameworks/legacy/util/index.js | 138 +
html5/frameworks/legacy/util/shared.js | 144 +
html5/frameworks/legacy/vm/compiler.js | 618 ++
html5/frameworks/legacy/vm/directive.js | 353 +
html5/frameworks/legacy/vm/dom-helper.js | 240 +
html5/frameworks/legacy/vm/events.js | 161 +
html5/frameworks/legacy/vm/index.js | 113 +
html5/frameworks/vanilla/index.js | 108 +
html5/native/index.js | 24 -
html5/render/browser/base/atomic.js | 32 +
html5/render/browser/base/component/flexbox.js | 58 +
html5/render/browser/base/component/index.js | 212 +
html5/render/browser/base/component/lazyload.js | 68 +
html5/render/browser/base/component/operate.js | 198 +
html5/render/browser/base/component/position.js | 82 +
html5/render/browser/base/component/sticky.js | 230 +
.../browser/base/component/valueFilter.js | 36 +
html5/render/browser/base/div.js | 16 +
html5/render/browser/base/droot.js | 61 +
html5/render/browser/base/root.js | 52 +
html5/render/browser/bridge/index.js | 7 +
html5/render/browser/bridge/protocol.js | 112 +
html5/render/browser/bridge/receiver.js | 149 +
html5/render/browser/bridge/sender.js | 45 +
html5/render/browser/dom/appearWatcher.js | 150 +
html5/render/browser/dom/componentManager.js | 384 +
html5/render/browser/dom/index.js | 7 +
.../browser/extend/api/animation/index.js | 51 +
.../render/browser/extend/api/animation/lib.js | 31 +
html5/render/browser/extend/api/clipboard.js | 73 +
html5/render/browser/extend/api/dom.js | 107 +
html5/render/browser/extend/api/event.js | 25 +
html5/render/browser/extend/api/geolocation.js | 66 +
html5/render/browser/extend/api/globalEvent.js | 46 +
html5/render/browser/extend/api/index.js | 27 +
html5/render/browser/extend/api/modal.js | 71 +
html5/render/browser/extend/api/navigator.js | 38 +
html5/render/browser/extend/api/pageInfo.js | 26 +
html5/render/browser/extend/api/storage.js | 159 +
html5/render/browser/extend/api/stream.js | 310 +
html5/render/browser/extend/api/timer.js | 62 +
html5/render/browser/extend/api/webview.js | 57 +
html5/render/browser/extend/components/a.js | 61 +
.../browser/extend/components/countdown.js | 72 +
.../browser/extend/components/datepicker.js | 44 +
html5/render/browser/extend/components/embed.js | 82 +
.../browser/extend/components/image/image.css | 5 +
.../browser/extend/components/image/index.js | 94 +
html5/render/browser/extend/components/index.js | 52 +
.../extend/components/indicator/index.js | 186 +
.../extend/components/indicator/indicator.css | 8 +
html5/render/browser/extend/components/input.js | 141 +
.../render/browser/extend/components/marquee.js | 284 +
.../extend/components/scrollable/index.js | 19 +
.../extend/components/scrollable/list/hlist.js | 18 +
.../extend/components/scrollable/list/index.js | 11 +
.../extend/components/scrollable/list/list.js | 67 +
.../extend/components/scrollable/list/vlist.js | 18 +
.../components/scrollable/loading/index.js | 129 +
.../components/scrollable/loading/loading.css | 15 +
.../extend/components/scrollable/motion.js | 81 +
.../components/scrollable/refresh/index.js | 141 +
.../components/scrollable/refresh/refresh.css | 16 +
.../extend/components/scrollable/scroll.js | 1200 +++
.../extend/components/scrollable/scrollable.css | 15 +
.../extend/components/scrollable/scrollable.js | 307 +
.../components/scrollable/scroller/index.js | 25 +
.../render/browser/extend/components/select.js | 92 +
.../extend/components/slider/carrousel.css | 6 +
.../extend/components/slider/carrousel.js | 436 ++
.../browser/extend/components/slider/index.js | 349 +
.../browser/extend/components/slider/slider.css | 34 +
.../browser/extend/components/slider/timer.js | 60 +
.../browser/extend/components/spinner/index.js | 139 +
.../extend/components/spinner/spinner.css | 79 +
.../browser/extend/components/switch/index.js | 238 +
.../browser/extend/components/switch/switch.css | 24 +
.../extend/components/tabheader/index.js | 399 +
.../extend/components/tabheader/tabheader.css | 140 +
html5/render/browser/extend/components/text.js | 107 +
.../browser/extend/components/textarea.js | 94 +
.../browser/extend/components/timepicker.js | 43 +
.../browser/extend/components/video/index.js | 116 +
.../browser/extend/components/video/video.css | 3 +
html5/render/browser/extend/components/web.js | 102 +
html5/render/browser/extend/index.js | 14 +
html5/render/browser/index.js | 22 +
html5/render/browser/render/config.js | 12 +
html5/render/browser/render/gesture.js | 493 ++
html5/render/browser/render/index.js | 249 +
html5/render/browser/render/loader.js | 65 +
html5/render/browser/render/register.js | 72 +
html5/render/browser/render/style/base.css | 38 +
html5/render/browser/utils/array.js | 15 +
html5/render/browser/utils/frameUpdater.js | 47 +
html5/render/browser/utils/index.js | 218 +
html5/render/browser/utils/logger.js | 38 +
html5/render/native/index.js | 29 +
html5/runtime/.eslintrc | 5 -
html5/runtime/framework-vanilla.js | 1 -
html5/runtime/framework-weex.js | 1 -
html5/runtime/handler.js | 72 +
html5/runtime/index.js | 37 +-
html5/runtime/init.js | 12 +-
html5/runtime/listener.js | 208 +
html5/runtime/vdom/comment.js | 28 +
html5/runtime/vdom/document.js | 169 +
html5/runtime/vdom/element.js | 355 +
html5/runtime/vdom/index.js | 11 +
html5/runtime/vdom/node.js | 30 +
html5/runtime/vdom/operation.js | 241 +
html5/shared/arrayFrom.js | 3 +-
html5/shared/console.js | 98 +-
html5/shared/freeze.js | 18 +
html5/shared/index.js | 25 +-
html5/shared/objectSetPrototypeOf.js | 2 +
html5/shared/promise.js | 8 +-
html5/shared/setTimeout.js | 41 +-
html5/shared/utils.js | 132 -
html5/test/case/.eslintrc | 9 +
html5/test/case/basic/append-root.output.js | 36 +
html5/test/case/basic/append-root.source.js | 58 +
html5/test/case/basic/append.output.js | 79 +
html5/test/case/basic/append.source.js | 105 +
html5/test/case/basic/backward1.output.js | 57 +
html5/test/case/basic/backward1.source.js | 95 +
html5/test/case/basic/backward2.output.js | 57 +
html5/test/case/basic/backward2.source.js | 95 +
html5/test/case/basic/components.output.js | 20 +
html5/test/case/basic/components.source.js | 83 +
.../case/basic/computed-in-repeat.output.js | 19 +
.../case/basic/computed-in-repeat.source.js | 64 +
html5/test/case/basic/created.output.js | 11 +
html5/test/case/basic/created.source.js | 38 +
html5/test/case/basic/dynamic-id.output.js | 44 +
html5/test/case/basic/dynamic-id.source.js | 76 +
.../test/case/basic/dynamic-property.output.js | 24 +
.../test/case/basic/dynamic-property.source.js | 61 +
html5/test/case/basic/dynamic-type.output.js | 10 +
html5/test/case/basic/dynamic-type.source.js | 27 +
html5/test/case/basic/foo.output.js | 3 +
html5/test/case/basic/foo.source.js | 26 +
html5/test/case/basic/foo2.output.js | 10 +
html5/test/case/basic/foo2.source.js | 34 +
html5/test/case/basic/foo3.output.js | 9 +
html5/test/case/basic/foo3.source.js | 23 +
html5/test/case/basic/foo4.output.js | 12 +
html5/test/case/basic/foo4.source.js | 26 +
html5/test/case/basic/foo5.output.js | 14 +
html5/test/case/basic/foo5.source.js | 32 +
html5/test/case/basic/foo6.output.js | 28 +
html5/test/case/basic/foo6.source.js | 53 +
html5/test/case/basic/foo7.output.js | 26 +
html5/test/case/basic/foo7.source.js | 58 +
html5/test/case/basic/foo8.output.js | 60 +
html5/test/case/basic/foo8.source.js | 73 +
html5/test/case/basic/foo9.output.js | 57 +
html5/test/case/basic/foo9.source.js | 95 +
html5/test/case/basic/id.output.js | 32 +
html5/test/case/basic/id.source.js | 62 +
html5/test/case/basic/if-repeat.output.js | 13 +
html5/test/case/basic/if-repeat.source.js | 42 +
html5/test/case/basic/if-root.output.js | 1 +
html5/test/case/basic/if-root.source.js | 26 +
html5/test/case/basic/if.output.js | 13 +
html5/test/case/basic/if.source.js | 39 +
html5/test/case/basic/promise.output.js | 3 +
html5/test/case/basic/promise.source.js | 29 +
html5/test/case/basic/ready.output.js | 11 +
html5/test/case/basic/ready.source.js | 38 +
html5/test/case/basic/repeat-array-kv.output.js | 22 +
html5/test/case/basic/repeat-array-kv.source.js | 45 +
.../case/basic/repeat-array-no-kv.output.js | 22 +
.../case/basic/repeat-array-no-kv.source.js | 43 +
.../case/basic/repeat-array-non-obj.output.js | 22 +
.../case/basic/repeat-array-non-obj.source.js | 44 +
html5/test/case/basic/repeat-array-v.output.js | 22 +
html5/test/case/basic/repeat-array-v.source.js | 44 +
html5/test/case/basic/repeat-index.output.js | 22 +
html5/test/case/basic/repeat-index.source.js | 41 +
html5/test/case/basic/repeat-root.output.js | 1 +
html5/test/case/basic/repeat-root.source.js | 29 +
html5/test/case/basic/repeat-watch.output.js | 46 +
html5/test/case/basic/repeat-watch.source.js | 57 +
html5/test/case/basic/require.output.js | 9 +
html5/test/case/basic/require.source.js | 34 +
html5/test/case/basic/reset-style.output.js | 15 +
html5/test/case/basic/reset-style.source.js | 40 +
html5/test/case/basic/static1.output.js | 12 +
html5/test/case/basic/static1.source.js | 33 +
html5/test/case/basic/static2.output.js | 30 +
html5/test/case/basic/static2.source.js | 44 +
html5/test/case/basic/static3.output.js | 33 +
html5/test/case/basic/static3.source.js | 44 +
html5/test/case/basic/static4.output.js | 35 +
html5/test/case/basic/static4.source.js | 75 +
html5/test/case/basic/subvm.output.js | 20 +
html5/test/case/basic/subvm.source.js | 80 +
html5/test/case/basic/transformer1.output.js | 3 +
html5/test/case/basic/transformer1.source.js | 28 +
.../case/complex/append-root-event.output.js | 13 +
.../case/complex/append-root-event.source.js | 46 +
html5/test/case/complex/click.output.js | 26 +
html5/test/case/complex/click.source.js | 58 +
html5/test/case/complex/computed.output.js | 15 +
html5/test/case/complex/computed.source.js | 54 +
html5/test/case/complex/if-refresh.output.js | 3 +
html5/test/case/complex/if-refresh.source.js | 39 +
.../case/complex/if-repeat-refresh.output.js | 22 +
.../case/complex/if-repeat-refresh.source.js | 42 +
html5/test/case/complex/inline-click.output.js | 14 +
html5/test/case/complex/inline-click.source.js | 36 +
html5/test/case/complex/input-binding.output.js | 12 +
html5/test/case/complex/input-binding.source.js | 60 +
html5/test/case/complex/refresh2.output.js | 20 +
html5/test/case/complex/refresh2.source.js | 116 +
.../test/case/complex/repeat-track-by.output.js | 24 +
.../test/case/complex/repeat-track-by.source.js | 46 +
html5/test/case/complex/transformer2.output.js | 3 +
html5/test/case/complex/transformer2.source.js | 28 +
html5/test/case/complex/transformer3.output.js | 3 +
html5/test/case/complex/transformer3.source.js | 28 +
.../case/multi/clear-dep-target-error.source.js | 27 +
.../case/multi/clear-dep-target-fine.output.js | 11 +
.../case/multi/clear-dep-target-fine.source.js | 30 +
html5/test/case/multi/clear-moduleA.output.js | 12 +
html5/test/case/multi/clear-moduleA.source.js | 43 +
html5/test/case/multi/clear-moduleB.output.js | 11 +
html5/test/case/multi/clear-moduleB.source.js | 32 +
html5/test/case/prepare.js | 61 +
html5/test/case/signals/modal.output.js | 9 +
html5/test/case/signals/modal.source.js | 42 +
html5/test/case/signals/signals-long.source.js | 1205 +++
html5/test/case/signals/signals.source.js | 66 +
html5/test/case/signals/timer.output.js | 9 +
html5/test/case/signals/timer.source.js | 36 +
html5/test/case/tester.js | 489 ++
.../test/case/throws/global-variable1.source.js | 17 +
.../test/case/throws/global-variable2.source.js | 15 +
.../test/case/throws/global-variable3.source.js | 22 +
html5/test/unit/default/api/methods.js | 37 +-
html5/test/unit/default/api/modules.js | 4 +-
html5/test/unit/default/app/bundle.js | 10 +-
html5/test/unit/default/app/ctrl.js | 79 +-
html5/test/unit/default/app/downgrade.js | 8 +-
html5/test/unit/default/app/index.js | 10 +-
html5/test/unit/default/app/register.js | 43 +-
.../unit/default/assets/append-root-event.input | 46 -
.../default/assets/append-root-event.output | 13 -
.../test/unit/default/assets/append-root.input | 58 -
.../test/unit/default/assets/append-root.output | 36 -
html5/test/unit/default/assets/append.input | 105 -
html5/test/unit/default/assets/append.output | 79 -
html5/test/unit/default/assets/backward1.input | 95 -
html5/test/unit/default/assets/backward1.output | 57 -
html5/test/unit/default/assets/backward2.input | 95 -
html5/test/unit/default/assets/backward2.output | 57 -
.../default/assets/clear-dep-target-error.input | 27 -
.../default/assets/clear-dep-target-fine.input | 30 -
.../default/assets/clear-dep-target-fine.output | 11 -
.../unit/default/assets/clear-moduleA.input | 43 -
.../unit/default/assets/clear-moduleA.output | 12 -
.../unit/default/assets/clear-moduleB.input | 32 -
.../unit/default/assets/clear-moduleB.output | 11 -
html5/test/unit/default/assets/click.input | 58 -
html5/test/unit/default/assets/click.output | 26 -
html5/test/unit/default/assets/components.input | 83 -
.../test/unit/default/assets/components.output | 17 -
.../default/assets/computed-in-repeat.input | 64 -
.../default/assets/computed-in-repeat.output | 19 -
html5/test/unit/default/assets/computed.input | 54 -
html5/test/unit/default/assets/computed.output | 15 -
html5/test/unit/default/assets/created.input | 38 -
html5/test/unit/default/assets/created.output | 11 -
.../test/unit/default/assets/dynamic-type.input | 27 -
.../unit/default/assets/dynamic-type.output | 10 -
html5/test/unit/default/assets/foo.input | 26 -
html5/test/unit/default/assets/foo.output | 3 -
html5/test/unit/default/assets/foo2.input | 34 -
html5/test/unit/default/assets/foo2.output | 10 -
html5/test/unit/default/assets/foo3.input | 23 -
html5/test/unit/default/assets/foo3.output | 9 -
html5/test/unit/default/assets/foo4.input | 26 -
html5/test/unit/default/assets/foo4.output | 12 -
html5/test/unit/default/assets/foo5.input | 32 -
html5/test/unit/default/assets/foo5.output | 14 -
html5/test/unit/default/assets/foo6.input | 53 -
html5/test/unit/default/assets/foo6.output | 28 -
html5/test/unit/default/assets/foo7.input | 58 -
html5/test/unit/default/assets/foo7.output | 26 -
html5/test/unit/default/assets/foo8.input | 73 -
html5/test/unit/default/assets/foo8.output | 60 -
html5/test/unit/default/assets/foo9.input | 95 -
html5/test/unit/default/assets/foo9.output | 57 -
html5/test/unit/default/assets/if-refresh.input | 39 -
.../test/unit/default/assets/if-refresh.output | 3 -
.../unit/default/assets/if-repeat-refresh.input | 42 -
.../default/assets/if-repeat-refresh.output | 22 -
html5/test/unit/default/assets/if-repeat.input | 42 -
html5/test/unit/default/assets/if-repeat.output | 13 -
html5/test/unit/default/assets/if-root.input | 26 -
html5/test/unit/default/assets/if-root.output | 1 -
html5/test/unit/default/assets/if.input | 39 -
html5/test/unit/default/assets/if.output | 13 -
.../test/unit/default/assets/inline-click.input | 36 -
.../unit/default/assets/inline-click.output | 14 -
.../unit/default/assets/input-binding.input | 60 -
.../unit/default/assets/input-binding.output | 12 -
html5/test/unit/default/assets/promise.input | 29 -
html5/test/unit/default/assets/promise.output | 3 -
html5/test/unit/default/assets/ready.input | 38 -
html5/test/unit/default/assets/ready.output | 11 -
html5/test/unit/default/assets/refresh2.input | 116 -
html5/test/unit/default/assets/refresh2.output | 20 -
.../unit/default/assets/repeat-array-kv.input | 45 -
.../unit/default/assets/repeat-array-kv.output | 22 -
.../default/assets/repeat-array-no-kv.input | 43 -
.../default/assets/repeat-array-no-kv.output | 22 -
.../default/assets/repeat-array-non-obj.input | 44 -
.../default/assets/repeat-array-non-obj.output | 22 -
.../unit/default/assets/repeat-array-v.input | 44 -
.../unit/default/assets/repeat-array-v.output | 22 -
.../test/unit/default/assets/repeat-index.input | 41 -
.../unit/default/assets/repeat-index.output | 22 -
.../test/unit/default/assets/repeat-root.input | 29 -
.../test/unit/default/assets/repeat-root.output | 1 -
.../unit/default/assets/repeat-track-by.input | 46 -
.../unit/default/assets/repeat-track-by.output | 24 -
.../test/unit/default/assets/repeat-watch.input | 57 -
.../unit/default/assets/repeat-watch.output | 46 -
html5/test/unit/default/assets/require.input | 34 -
html5/test/unit/default/assets/require.output | 9 -
.../test/unit/default/assets/reset-style.input | 42 -
.../test/unit/default/assets/reset-style.output | 15 -
.../test/unit/default/assets/signals-long.input | 1205 ---
html5/test/unit/default/assets/signals.input | 66 -
html5/test/unit/default/assets/static1.input | 33 -
html5/test/unit/default/assets/static1.output | 12 -
html5/test/unit/default/assets/static2.input | 44 -
html5/test/unit/default/assets/static2.output | 30 -
html5/test/unit/default/assets/static3.input | 44 -
html5/test/unit/default/assets/static3.output | 33 -
html5/test/unit/default/assets/static4.input | 75 -
html5/test/unit/default/assets/static4.output | 35 -
html5/test/unit/default/assets/subvm.input | 80 -
html5/test/unit/default/assets/subvm.output | 17 -
.../test/unit/default/assets/transformer1.input | 28 -
.../unit/default/assets/transformer1.output | 3 -
.../test/unit/default/assets/transformer2.input | 28 -
.../unit/default/assets/transformer2.output | 3 -
.../test/unit/default/assets/transformer3.input | 28 -
.../unit/default/assets/transformer3.output | 3 -
html5/test/unit/default/runtime.js | 79 +-
html5/test/unit/default/test.js | 1122 ---
html5/test/unit/default/util/index.js | 9 +-
html5/test/unit/default/util/shared.js | 125 +
html5/test/unit/default/vm/compiler.js | 6 +-
html5/test/unit/default/vm/directive.js | 6 +-
html5/test/unit/default/vm/dom-helper.js | 6 +-
html5/test/unit/default/vm/events.js | 62 +-
html5/test/unit/default/vm/vm.js | 372 +-
html5/test/unit/shared/console.js | 211 +-
html5/test/unit/shared/index.js | 25 +-
html5/test/unit/vanilla/index.js | 157 +
html5/test/unit/vdom/index.js | 27 +-
html5/test/unit/vdom/listener.js | 177 +-
html5/test/unit/vdom/node.js | 21 +
html5/vanilla/index.js | 97 -
html5/vdom/helper.js | 7 -
html5/vdom/index.js | 569 --
html5/vdom/listener.js | 103 -
ios/playground/Podfile | 2 +-
.../WeexDemo.xcodeproj/project.pbxproj | 73 +-
.../contents.xcworkspacedata | 7 +
.../xcshareddata/xcschemes/WeexDemo.xcscheme | 2 +-
ios/playground/WeexDemo/AppDelegate.m | 3 +-
ios/playground/WeexDemo/Info.plist | 2 +-
ios/playground/WeexDemo/WXDemoViewController.m | 6 +
ios/playground/WeexDemo/WXSyncTestModule.h | 14 +
ios/playground/WeexDemo/WXSyncTestModule.m | 38 +
ios/playground/bundlejs/component/input-demo.js | 292 +-
.../bundlejs/component/navigator-demo.js | 26 +-
.../slider-neighbor/silder-neighbor.js | 2631 +------
.../slider-neighbor/slider-neighbor-page.js | 58 +-
.../bundlejs/component/slider/index.js | 46 +-
.../bundlejs/component/slider/slider-item.js | 12 +-
.../bundlejs/component/slider/slider-page.js | 28 +-
.../bundlejs/component/tabbar/tabbar-demo.js | 16 +-
.../bundlejs/component/tabbar/tabbar-item.js | 12 +-
ios/playground/bundlejs/component/text-demo.js | 14 +-
ios/playground/bundlejs/component/video-demo.js | 14 +-
ios/playground/bundlejs/component/web-demo.js | 23 +-
ios/playground/bundlejs/error.js | 2217 ++++++
ios/playground/bundlejs/geolocation.js | 183 +
ios/playground/bundlejs/hello.js | 4 +-
ios/playground/bundlejs/iconfont.js | 176 +
ios/playground/bundlejs/index.js | 50 +-
ios/playground/bundlejs/module/clipboard.js | 2311 ++++++
ios/playground/bundlejs/module/instance-api.js | 22 +-
ios/playground/bundlejs/module/modal.js | 14 +-
ios/playground/bundlejs/module/picker-demo.js | 2344 ++++++
ios/playground/bundlejs/module/storage-demo.js | 21 +-
ios/playground/bundlejs/module/stream-demo.js | 21 +-
ios/playground/bundlejs/showcase/calculator.js | 13 +-
.../bundlejs/showcase/dropdown/dropdown-demo.js | 38 +-
.../bundlejs/showcase/dropdown/we-dropdown.js | 12 +-
ios/playground/bundlejs/showcase/minesweeper.js | 12 +-
.../bundlejs/showcase/new-fashion/banner.js | 8 +-
.../bundlejs/showcase/new-fashion/banners.js | 20 +-
.../bundlejs/showcase/new-fashion/brand.js | 36 +-
.../bundlejs/showcase/new-fashion/category.js | 24 +-
.../bundlejs/showcase/new-fashion/coupon.js | 12 +-
.../bundlejs/showcase/new-fashion/fashion.js | 38 +-
.../bundlejs/showcase/new-fashion/goods.js | 24 +-
.../bundlejs/showcase/new-fashion/headlines.js | 48 +-
.../bundlejs/showcase/new-fashion/index.js | 21 +-
.../bundlejs/showcase/new-fashion/link.js | 8 +-
.../bundlejs/showcase/new-fashion/list-demo.js | 1222 ---
.../showcase/new-fashion/list/list-basic.js | 311 +
.../new-fashion/list/list-demo-horizon.js | 1222 +++
.../showcase/new-fashion/list/list-demo.js | 1222 +++
.../bundlejs/showcase/new-fashion/main.js | 191 +-
.../bundlejs/showcase/new-fashion/match.js | 24 +-
.../bundlejs/showcase/new-fashion/resource.js | 38 +-
.../bundlejs/showcase/new-fashion/scene.js | 24 +-
ios/playground/bundlejs/showcase/ui.js | 13 +-
ios/playground/bundlejs/style/index.js | 63 +-
ios/playground/bundlejs/style/style-box.js | 29 +-
ios/playground/bundlejs/style/style-flex.js | 31 +-
ios/playground/bundlejs/style/style-item.js | 12 +-
ios/playground/bundlejs/syntax/hello-world-1.js | 77 +
ios/playground/bundlejs/syntax/hello-world-2.js | 94 +
ios/playground/bundlejs/syntax/hello-world-3.js | 114 +
ios/playground/bundlejs/syntax/hello-world-4.js | 136 +
ios/playground/bundlejs/syntax/hello-world-5.js | 144 +
ios/playground/bundlejs/syntax/hello-world.js | 144 +
ios/playground/bundlejs/syntax/index.js | 3270 ++++++++
.../bundlejs/syntax/script-component.js | 180 +
ios/playground/bundlejs/syntax/script-data.js | 165 +
ios/playground/bundlejs/syntax/script-events.js | 176 +
.../bundlejs/syntax/script-instance.js | 145 +
.../bundlejs/syntax/script-lifecycle.js | 130 +
ios/playground/bundlejs/syntax/script-module.js | 129 +
.../bundlejs/syntax/script-options.js | 139 +
.../bundlejs/syntax/template-class.js | 142 +
.../bundlejs/syntax/template-content.js | 149 +
.../bundlejs/syntax/template-event.js | 195 +
ios/playground/bundlejs/syntax/template-if.js | 151 +
.../bundlejs/syntax/template-repeat-update.js | 177 +
.../bundlejs/syntax/template-repeat.js | 261 +
.../bundlejs/syntax/template-style.js | 121 +
ios/playground/bundlejs/template.js | 12 +-
ios/sdk/WeexSDK.xcodeproj/project.pbxproj | 129 +-
.../xcschemes/WeexSDKTests.xcscheme | 90 +
ios/sdk/WeexSDK/Resources/main.js | 11 +-
ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h | 15 +
ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.m | 90 +
.../WeexSDK/Sources/Bridge/WXBridgeContext.h | 11 +-
.../WeexSDK/Sources/Bridge/WXBridgeContext.m | 127 +-
ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h | 20 +
ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.m | 35 +
.../WeexSDK/Sources/Bridge/WXComponentMethod.h | 21 +
.../WeexSDK/Sources/Bridge/WXComponentMethod.m | 51 +
.../Sources/Bridge/WXDebugLoggerBridge.m | 5 +
ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m | 40 +-
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h | 28 +
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 101 +
.../WeexSDK/Sources/Component/WXCellComponent.h | 4 +-
.../WeexSDK/Sources/Component/WXCellComponent.m | 10 +
.../Component/WXComponent+GradientColor.h | 20 +
.../Component/WXComponent+GradientColor.m | 116 +
.../Sources/Component/WXComponent_internal.h | 20 +-
.../Sources/Component/WXImageComponent.m | 57 +-
.../WeexSDK/Sources/Component/WXListComponent.m | 46 +-
.../Sources/Component/WXScrollerComponent.h | 2 +
.../Sources/Component/WXScrollerComponent.m | 13 +-
.../Sources/Component/WXSliderComponent.m | 52 +-
.../Component/WXSliderNeighborComponent.m | 132 +-
.../Sources/Component/WXTextAreaComponent.m | 99 +-
.../WeexSDK/Sources/Component/WXTextComponent.m | 21 +-
.../Sources/Component/WXTextInputComponent.m | 254 +-
ios/sdk/WeexSDK/Sources/Component/WXTransform.m | 5 +-
.../Sources/Controller/WXBaseViewController.m | 48 +-
.../Sources/Display/WXComponent+Display.m | 10 +-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h | 49 +
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m | 42 +-
.../WeexSDK/Sources/Events/WXComponent+Events.m | 123 +-
.../WeexSDK/Sources/Loader/WXWebSocketLoader.h | 24 +
.../WeexSDK/Sources/Loader/WXWebSocketLoader.m | 131 +
.../WeexSDK/Sources/Manager/WXBridgeManager.h | 29 +-
.../WeexSDK/Sources/Manager/WXBridgeManager.m | 87 +-
.../Sources/Manager/WXComponentFactory.m | 6 +-
.../Sources/Manager/WXComponentManager.h | 12 +-
.../Sources/Manager/WXComponentManager.m | 56 +-
.../Sources/Manager/WXDatePickerManager.h | 1 -
.../Sources/Manager/WXDatePickerManager.m | 58 +-
.../Sources/Manager/WXInvocationConfig.h | 6 +-
.../Sources/Manager/WXInvocationConfig.m | 100 +-
.../WeexSDK/Sources/Manager/WXModuleFactory.h | 4 +-
.../WeexSDK/Sources/Manager/WXModuleFactory.m | 32 +-
.../WeexSDK/Sources/Manager/WXModuleManager.h | 16 -
.../WeexSDK/Sources/Manager/WXModuleManager.m | 111 -
ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m | 9 +-
ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h | 10 +-
ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.m | 19 +-
.../WeexSDK/Sources/Manager/WXServiceFactory.h | 38 +
.../WeexSDK/Sources/Manager/WXServiceFactory.m | 102 +
ios/sdk/WeexSDK/Sources/Model/WXBridgeMethod.h | 18 +-
ios/sdk/WeexSDK/Sources/Model/WXBridgeMethod.m | 85 +-
ios/sdk/WeexSDK/Sources/Model/WXComponent.h | 10 +
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 38 +-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h | 15 +
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 95 +-
.../Sources/Model/WXSDKInstance_private.h | 3 +
.../WeexSDK/Sources/Module/WXAnimationModule.m | 20 +-
ios/sdk/WeexSDK/Sources/Module/WXDomModule.m | 5 +-
.../Sources/Module/WXGlobalEventModule.m | 20 +-
.../WeexSDK/Sources/Module/WXLocationModule.h | 14 -
.../WeexSDK/Sources/Module/WXLocationModule.m | 31 -
ios/sdk/WeexSDK/Sources/Module/WXMetaModule.m | 4 +-
ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m | 22 +-
.../WeexSDK/Sources/Module/WXWebSocketModule.h | 15 +
.../WeexSDK/Sources/Module/WXWebSocketModule.m | 137 +
ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h | 2 +
.../WeexSDK/Sources/Network/WXResourceRequest.h | 1 +
.../WeexSDK/Sources/Protocol/WXBridgeProtocol.h | 28 +-
ios/sdk/WeexSDK/Sources/Utility/WXConvert.h | 3 +
ios/sdk/WeexSDK/Sources/Utility/WXConvert.m | 47 +-
ios/sdk/WeexSDK/Sources/Utility/WXDefine.h | 23 +-
ios/sdk/WeexSDK/Sources/Utility/WXType.h | 8 +
ios/sdk/WeexSDK/Sources/Utility/WXUtility.h | 8 +-
ios/sdk/WeexSDK/Sources/Utility/WXUtility.m | 25 +
.../View/WXComponent+PseudoClassManagement.h | 66 +
.../View/WXComponent+PseudoClassManagement.m | 144 +
.../Sources/View/WXComponent+ViewManagement.m | 12 +
ios/sdk/WeexSDK/Sources/View/WXErrorView.m | 3 +-
ios/sdk/WeexSDK/Sources/View/WXView.m | 2 +-
.../Sources/WebSocket/SRWebSocket+Weex.h | 18 +
.../Sources/WebSocket/SRWebSocket+Weex.m | 36 +
.../Sources/WebSocket/WXWebSocketDefaultImpl.h | 14 +
.../Sources/WebSocket/WXWebSocketDefaultImpl.m | 110 +
.../Sources/WebSocket/WXWebSocketHandler.h | 26 +
ios/sdk/WeexSDKTests/TestSupportUtils.h | 5 +
ios/sdk/WeexSDKTests/TestSupportUtils.m | 38 +-
ios/sdk/WeexSDKTests/WXAnimationModuleTests.m | 12 +-
ios/sdk/WeexSDKTests/WXBridgeMethodTests.m | 31 +-
ios/sdk/WeexSDKTests/WXConvertTests.m | 7 -
ios/sdk/WeexSDKTests/WXInstanceWrapTests.m | 7 -
ios/sdk/WeexSDKTests/WXRootViewTests.m | 22 +-
ios/sdk/WeexSDKTests/WXSDKEngineTests.m | 9 +-
ios/sdk/WeexSDKTests/WXSDKManagerTests.m | 11 -
ios/sdk/WeexSDKTests/WXStorageTests.m | 7 -
ios/sdk/WeexSDKTests/WXStreamModuleTests.m | 2 +-
ios/sdk/WeexSDKTests/WXTimerModuleTests.m | 7 -
ios/sdk/WeexSDKTests/WeexSDKTests.m | 6 -
package.json | 59 +-
start | 1 +
1371 files changed, 124569 insertions(+), 56349 deletions(-)
----------------------------------------------------------------------
[12/50] [abbrv] incubator-weex git commit: Merge remote-tracking
branch 'alibaba/ios-feature-20170118' into ios-feature-20170118
Posted by ji...@apache.org.
Merge remote-tracking branch 'alibaba/ios-feature-20170118' into ios-feature-20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/dcca37eb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/dcca37eb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/dcca37eb
Branch: refs/heads/master
Commit: dcca37eb472127d18b4e25fabb25033177f8cc01
Parents: 3f35b82 b25b16c
Author: \u9f50\u5c71 <su...@163.com>
Authored: Tue Jan 10 22:31:54 2017 +0800
Committer: \u9f50\u5c71 <su...@163.com>
Committed: Tue Jan 10 22:31:54 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Resources/main.js | 14 +++----
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 25 +++++-------
.../Sources/Component/WXImageComponent.m | 28 ++++++++++++-
.../WeexSDK/Sources/Component/WXListComponent.m | 6 +++
.../Sources/Component/WXScrollerComponent.h | 2 +
.../Sources/Component/WXScrollerComponent.m | 4 +-
ios/sdk/WeexSDK/Sources/Component/WXTransform.m | 5 ++-
.../Sources/Display/WXComponent+Display.m | 6 ++-
.../WeexSDK/Sources/Events/WXComponent+Events.m | 25 +++++++++---
.../WeexSDK/Sources/Loader/WXResourceLoader.m | 2 +-
.../Sources/Manager/WXComponentManager.m | 15 +++++++
ios/sdk/WeexSDK/Sources/Model/WXComponent.h | 5 +++
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 6 ++-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h | 4 ++
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 43 ++++++++++++++++++--
.../Sources/Model/WXSDKInstance_private.h | 3 ++
.../WeexSDK/Sources/Module/WXAnimationModule.m | 20 ++++++++-
.../WeexSDK/Sources/Module/WXNavigatorModule.m | 28 +++++++------
.../Sources/Protocol/WXNavigationProtocol.h | 31 +++++++++++---
19 files changed, 216 insertions(+), 56 deletions(-)
----------------------------------------------------------------------
[48/50] [abbrv] incubator-weex git commit: Merge pull request #2223
from alibaba/dev-release095
Posted by ji...@apache.org.
Merge pull request #2223 from alibaba/dev-release095
Release 095
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/1db33988
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/1db33988
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/1db33988
Branch: refs/heads/master
Commit: 1db33988b17601c78d3a53a6701fb7064c015a73
Parents: 966c17d 7b8cc46
Author: sospartan zheng <so...@apache.org>
Authored: Wed Jan 11 17:47:33 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Wed Jan 11 17:47:33 2017 +0800
----------------------------------------------------------------------
.eslintrc | 1 +
.gitignore | 1 +
android/commons/build.gradle | 4 +-
.../weex/commons/AbstractWeexActivity.java | 2 +
.../adapter/DefaultWebSocketAdapter.java | 326 +
.../adapter/DefaultWebSocketAdapterFactory.java | 219 +
android/playground/app/build.gradle | 19 +-
.../app/src/androidTest/AndroidManifest.xml | 212 +
.../benchmark/BenchmarkActivityTestRule.java | 239 +
.../alibaba/weex/benchmark/BenchmarkTest.java | 419 +
.../com/alibaba/weex/benchmark/BoxPlot.java | 270 +
.../java/com/alibaba/weex/benchmark/Repeat.java | 219 +
.../com/alibaba/weex/benchmark/RepeatRule.java | 242 +
.../weex/benchmark/WeexNativeCompareTest.java | 336 +
.../playground/app/src/main/AndroidManifest.xml | 41 +-
.../app/src/main/assets/hello_weex.js | 28 +
.../com/alibaba/weex/BenchmarkActivity.java | 413 +
.../java/com/alibaba/weex/IndexActivity.java | 77 +-
.../java/com/alibaba/weex/WXApplication.java | 62 +-
.../java/com/alibaba/weex/WXDebugActivity.java | 91 +
.../java/com/alibaba/weex/WXPageActivity.java | 215 +-
.../extend/adapter/InterceptWXHttpAdapter.java | 63 +
.../extend/component/WXComponentSyncTest.java | 29 +
.../weex/extend/module/GeolocationModule.java | 8 +-
.../alibaba/weex/extend/module/MyModule.java | 4 +-
.../weex/extend/module/RenderModule.java | 4 +-
.../weex/extend/module/SyncTestModule.java | 53 +
.../weex/extend/module/WXEventModule.java | 16 +-
.../zxing/client/android/CaptureActivity.java | 70 +-
.../src/main/res/layout/activity_dynamic.xml | 27 +
.../app/src/main/res/layout/activity_index.xml | 1 +
.../app/src/main/res/layout/content_dynamic.xml | 24 +
.../app/src/main/res/layout/hello_weex.xml | 223 +
.../app/src/main/res/values-zh-rCN/strings.xml | 2 +-
.../app/src/main/res/values/strings.xml | 10 +-
android/sdk/assets/main.js | 19932 ++++++++++++++++-
android/sdk/build.gradle | 7 +-
android/sdk/gradle.properties | 6 +-
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
android/sdk/libs/armeabi/libweexv8.so | Bin 3579724 -> 3583820 bytes
android/sdk/libs/x86/libweexv8.so | Bin 4328576 -> 4340864 bytes
android/sdk/src/main/AndroidManifest.xml | 2 +-
.../taobao/weex/IWXActivityStateListener.java | 2 +
.../main/java/com/taobao/weex/InitConfig.java | 26 +
.../java/com/taobao/weex/RenderContainer.java | 253 +
.../java/com/taobao/weex/WXEnvironment.java | 14 +-
.../com/taobao/weex/WXGlobalEventModule.java | 6 +-
.../com/taobao/weex/WXGlobalEventReceiver.java | 12 +-
.../main/java/com/taobao/weex/WXSDKEngine.java | 64 +-
.../java/com/taobao/weex/WXSDKInstance.java | 623 +-
.../main/java/com/taobao/weex/WXSDKManager.java | 48 +-
.../weex/adapter/DefaultWXHttpAdapter.java | 52 +-
.../taobao/weex/adapter/DrawableStrategy.java | 213 +
.../taobao/weex/adapter/IDrawableLoader.java | 219 +
.../com/taobao/weex/annotation/Component.java | 219 +
.../appfram/clipboard/WXClipboardModule.java | 16 +-
.../appfram/navigator/WXNavigatorModule.java | 182 +-
.../appfram/storage/WXSQLiteOpenHelper.java | 1 -
.../weex/appfram/storage/WXStorageModule.java | 17 +-
.../appfram/websocket/IWebSocketAdapter.java | 234 +
.../websocket/IWebSocketAdapterFactory.java | 213 +
.../appfram/websocket/WebSocketCloseCodes.java | 237 +
.../weex/appfram/websocket/WebSocketModule.java | 341 +
.../taobao/weex/bridge/BaseMethodInvoker.java | 224 -
.../java/com/taobao/weex/bridge/Invoker.java | 4 +-
.../taobao/weex/bridge/JSCallbackCreator.java | 213 -
.../taobao/weex/bridge/JavascriptInvokable.java | 214 +
.../com/taobao/weex/bridge/MethodInvoker.java | 18 +-
.../com/taobao/weex/bridge/ModuleFactory.java | 5 +-
.../taobao/weex/bridge/NativeInvokeHelper.java | 276 +
.../java/com/taobao/weex/bridge/WXBridge.java | 51 +-
.../com/taobao/weex/bridge/WXBridgeManager.java | 245 +-
.../java/com/taobao/weex/bridge/WXJSObject.java | 48 +-
.../com/taobao/weex/bridge/WXModuleManager.java | 227 +-
.../java/com/taobao/weex/bridge/WXParams.java | 19 +
.../taobao/weex/bridge/WXServiceManager.java | 236 +
.../java/com/taobao/weex/common/Component.java | 219 -
.../java/com/taobao/weex/common/Constants.java | 26 +
.../java/com/taobao/weex/common/IWXBridge.java | 6 +
.../com/taobao/weex/common/IWXDebugProxy.java | 4 +-
.../taobao/weex/common/TypeModuleFactory.java | 32 +-
.../com/taobao/weex/common/WXCompatModule.java | 270 +
.../java/com/taobao/weex/common/WXConfig.java | 1 +
.../com/taobao/weex/common/WXInstanceWrap.java | 4 +-
.../java/com/taobao/weex/common/WXModule.java | 379 +-
.../com/taobao/weex/common/WXModuleAnno.java | 5 +-
.../taobao/weex/dom/BasicEditTextDomObject.java | 6 +-
.../java/com/taobao/weex/dom/DomContext.java | 216 +
.../com/taobao/weex/dom/ImmutableDomObject.java | 228 +
.../main/java/com/taobao/weex/dom/WXAttr.java | 114 +-
.../com/taobao/weex/dom/WXCustomStyleSpan.java | 2 +-
.../java/com/taobao/weex/dom/WXDomHandler.java | 15 +-
.../java/com/taobao/weex/dom/WXDomManager.java | 9 +-
.../java/com/taobao/weex/dom/WXDomModule.java | 82 +-
.../java/com/taobao/weex/dom/WXDomObject.java | 415 +-
.../com/taobao/weex/dom/WXDomStatement.java | 546 +-
.../main/java/com/taobao/weex/dom/WXStyle.java | 211 +-
.../com/taobao/weex/dom/WXSwitchDomObject.java | 64 +-
.../com/taobao/weex/dom/WXTextDomObject.java | 104 +-
.../com/taobao/weex/http/WXStreamModule.java | 21 +-
.../com/taobao/weex/ui/IFComponentHolder.java | 6 +-
.../taobao/weex/ui/SimpleComponentHolder.java | 7 +-
.../com/taobao/weex/ui/WXRenderManager.java | 10 +-
.../com/taobao/weex/ui/WXRenderStatement.java | 76 +-
.../weex/ui/animation/WXAnimationBean.java | 60 +-
.../weex/ui/animation/WXAnimationModule.java | 33 +-
.../ui/component/AbstractEditComponent.java | 46 +-
.../taobao/weex/ui/component/Scrollable.java | 3 -
.../java/com/taobao/weex/ui/component/WXA.java | 15 +-
.../taobao/weex/ui/component/WXBaseRefresh.java | 12 +-
.../taobao/weex/ui/component/WXComponent.java | 635 +-
.../com/taobao/weex/ui/component/WXDiv.java | 5 +-
.../com/taobao/weex/ui/component/WXEmbed.java | 24 +-
.../com/taobao/weex/ui/component/WXHeader.java | 2 +-
.../com/taobao/weex/ui/component/WXImage.java | 302 +-
.../taobao/weex/ui/component/WXIndicator.java | 12 +-
.../com/taobao/weex/ui/component/WXInput.java | 2 +-
.../com/taobao/weex/ui/component/WXLoading.java | 22 +-
.../weex/ui/component/WXLoadingIndicator.java | 2 +-
.../com/taobao/weex/ui/component/WXRefresh.java | 27 +-
.../taobao/weex/ui/component/WXScroller.java | 66 +-
.../com/taobao/weex/ui/component/WXSlider.java | 136 +-
.../weex/ui/component/WXSliderNeighbor.java | 180 +-
.../com/taobao/weex/ui/component/WXSwitch.java | 22 +-
.../com/taobao/weex/ui/component/WXText.java | 10 +-
.../taobao/weex/ui/component/WXVContainer.java | 184 +-
.../com/taobao/weex/ui/component/WXVideo.java | 2 +-
.../com/taobao/weex/ui/component/WXWeb.java | 23 +-
.../ui/component/list/BasicListComponent.java | 1104 +
.../component/list/HorizontalListComponent.java | 2 +-
.../ui/component/list/ListComponentView.java | 223 +
.../ui/component/list/SimpleListComponent.java | 231 +
.../ui/component/list/SimpleRecyclerView.java | 329 +
.../taobao/weex/ui/component/list/WXCell.java | 6 +-
.../weex/ui/component/list/WXListComponent.java | 952 +-
.../component/pesudo/OnActivePseudoListner.java | 212 +
.../weex/ui/component/pesudo/PesudoStatus.java | 317 +
.../pesudo/TouchActivePseudoListener.java | 234 +
.../com/taobao/weex/ui/module/WXMetaModule.java | 246 +
.../taobao/weex/ui/module/WXModalUIModule.java | 95 +-
.../taobao/weex/ui/module/WXTimerModule.java | 10 +-
.../taobao/weex/ui/module/WXWebViewModule.java | 8 +-
.../com/taobao/weex/ui/view/IRenderStatus.java | 214 +
.../weex/ui/view/WXCirclePageAdapter.java | 4 +
.../taobao/weex/ui/view/WXCircleViewPager.java | 25 +
.../com/taobao/weex/ui/view/WXFrameLayout.java | 8 +
.../weex/ui/view/WXHorizontalScrollView.java | 12 +
.../com/taobao/weex/ui/view/WXImageView.java | 170 +-
.../com/taobao/weex/ui/view/WXScrollView.java | 12 +
.../com/taobao/weex/ui/view/WXSwitchView.java | 3 +
.../com/taobao/weex/ui/view/WXTextView.java | 18 +-
.../weex/ui/view/border/BorderDrawable.java | 338 +-
.../taobao/weex/ui/view/border/BorderUtil.java | 293 +
.../taobao/weex/ui/view/gesture/WXGesture.java | 219 +-
.../weex/ui/view/gesture/WXGestureType.java | 5 +-
.../weex/ui/view/listview/WXRecyclerView.java | 34 +-
.../refresh/circlebar/CircleProgressBar.java | 1 -
.../ui/view/refresh/core/WXRefreshView.java | 6 +
.../ui/view/refresh/core/WXSwipeLayout.java | 41 +-
.../ui/view/refresh/wrapper/BaseBounceView.java | 22 +
.../refresh/wrapper/BounceRecyclerView.java | 28 +-
.../java/com/taobao/weex/utils/ATagUtil.java | 224 +
.../com/taobao/weex/utils/FunctionParser.java | 15 +
.../com/taobao/weex/utils/ImageDrawable.java | 326 +
.../java/com/taobao/weex/utils/ImgURIUtil.java | 228 +
.../java/com/taobao/weex/utils/WXDomUtils.java | 268 +
.../java/com/taobao/weex/utils/WXFileUtils.java | 40 +-
.../java/com/taobao/weex/utils/WXJsonUtils.java | 15 +-
.../taobao/weex/utils/WXReflectionUtils.java | 38 -
.../com/taobao/weex/utils/WXResourceUtils.java | 111 +
.../taobao/weex/utils/WXSoInstallMgrSdk.java | 7 +-
.../java/com/taobao/weex/utils/WXViewUtils.java | 168 +-
.../java/com/taobao/weex/WXSDKEngineTest.java | 2 +
.../java/com/taobao/weex/WXSDKInstanceTest.java | 65 +-
.../clipboard/WXClipboardModuleTest.java | 261 +
.../navigator/WXNavigatorModuleTest.java | 26 +-
.../com/taobao/weex/bridge/WXBridgeTest.java | 263 +
.../com/taobao/weex/bridge/WXHashMapTest.java | 2 +-
.../taobao/weex/bridge/WXModuleManagerTest.java | 2 -
.../java/com/taobao/weex/common/TestModule.java | 5 +-
.../java/com/taobao/weex/dom/TestDomObject.java | 27 +-
.../java/com/taobao/weex/dom/WXAttrTest.java | 38 +-
.../com/taobao/weex/dom/WXDomModuleTest.java | 3 +-
.../com/taobao/weex/dom/WXDomStatementTest.java | 17 +-
.../java/com/taobao/weex/dom/WXStyleTest.java | 80 +
.../taobao/weex/dom/WXTextDomObjectTest.java | 276 +
.../taobao/weex/http/WXStreamModuleTest.java | 4 +
.../ui/animation/WXAnimationModuleTest.java | 6 -
.../taobao/weex/ui/component/ComponentTest.java | 23 +-
.../weex/ui/component/WXComponentTest.java | 65 +-
.../com/taobao/weex/ui/component/WXDivTest.java | 11 +-
.../taobao/weex/ui/component/WXEmbedTest.java | 259 +
.../taobao/weex/ui/component/WXImageTest.java | 30 +-
.../taobao/weex/ui/component/WXLoadingTest.java | 259 +
.../taobao/weex/ui/component/WXRefreshTest.java | 261 +
.../weex/ui/component/WXScrollerTest.java | 3 +-
.../weex/ui/component/WXSliderNeighborTest.java | 288 +
.../taobao/weex/ui/component/WXSliderTest.java | 27 +-
.../taobao/weex/ui/component/WXSwitchTest.java | 261 +
.../taobao/weex/ui/component/WXTextTest.java | 24 +-
.../com/taobao/weex/ui/component/WXWebTest.java | 336 +
.../ui/component/list/WXListComponentTest.java | 21 +-
.../taobao/weex/ui/module/WXMetaModuleTest.java | 263 +
.../weex/ui/module/WXModalUIModuleTest.java | 2 +-
.../weex/ui/view/border/BorderDrawableTest.java | 38 +-
.../weex/ui/view/gesture/WXGestureTest.java | 268 +
.../taobao/weex/utils/FunctionParserTest.java | 225 +
.../com/taobao/weex/utils/WXLogUtilsTest.java | 284 +
.../taobao/weex/utils/WXResourceUtilsTest.java | 18 +-
.../java/com/taobao/weex/utils/WXUtilsTest.java | 17 +
android/sdk/unittest.sh | 4 +
.../taobao/weex/bridge/WXWebsocketBridge.java | 15 +
build/build.js | 225 +-
build/config.js | 121 +
build/rollup.browser.config.js | 38 -
build/rollup.config.js | 34 -
build/webpack.examples.config.js | 6 +-
build/webpack.macacatest.config.js | 57 +
circle.yml | 19 +-
dist/weex-html5/LICENSE | 201 -
dist/weex-html5/NOTICE | 7 -
dist/weex-html5/README.md | 158 -
dist/weex-html5/demo/build/index.js | 111 -
dist/weex-html5/demo/index.we | 29 -
dist/weex-html5/index.html | 57 -
dist/weex-html5/package.json | 23 -
dist/weex-js-framework/LICENSE | 202 -
dist/weex-js-framework/NOTICE | 7 -
dist/weex-js-framework/README.md | 8 -
dist/weex-js-framework/index.js | 1 -
dist/weex-js-framework/package.json | 39 -
doc/advanced/integrate-to-android.md | 12 +-
examples/component/slider-neighbor/index.we | 74 +
.../slider-neighbor/silder-neighbor.we | 75 -
examples/component/slider/index.we | 7 +
examples/index.we | 2 +
examples/module/websocket-demo.we | 112 +
examples/vue/animation.vue | 24 +-
examples/vue/components/a.vue | 12 +-
examples/vue/components/countdown.vue | 36 +-
examples/vue/components/image.vue | 10 +-
examples/vue/components/input.vue | 21 +-
examples/vue/components/list.vue | 73 +-
examples/vue/components/marquee.vue | 32 +-
examples/vue/components/navigator.vue | 20 +-
examples/vue/components/scroller.vue | 118 +-
examples/vue/components/slider.vue | 160 +-
examples/vue/components/tabbar.vue | 72 +-
examples/vue/components/text.vue | 2 +-
examples/vue/components/video.vue | 14 +-
examples/vue/components/web.vue | 4 +-
examples/vue/include/button.vue | 162 +
examples/vue/include/countdown.vue | 93 +
examples/vue/include/example-list-item.vue | 2 +-
examples/vue/include/hn.vue | 47 +
examples/vue/include/list-item.vue | 46 +
examples/vue/include/marquee.vue | 78 +
examples/vue/include/navbar.vue | 121 +
examples/vue/include/navpage.vue | 62 +
examples/vue/include/panel.vue | 141 +
examples/vue/include/tabbar.vue | 92 +
examples/vue/include/tabitem.vue | 63 +
examples/vue/include/tip.vue | 65 +
examples/vue/index.vue | 70 +-
examples/vue/modules/clipboard.vue | 29 +-
examples/vue/modules/instance-api.vue | 8 +-
examples/vue/modules/modal.vue | 12 +-
examples/vue/modules/storage.vue | 16 +-
examples/vue/modules/stream.vue | 24 +-
examples/vue/showcase/calculator.vue | 10 +-
examples/vue/showcase/itemlist.vue | 588 +-
examples/vue/showcase/progress.vue | 10 +-
examples/vue/style/index.vue | 2 +-
examples/vue/style/style-box.vue | 4 +-
examples/vue/style/style-flex.vue | 2 +-
examples/vue/syntax/hello-world.vue | 1 +
examples/vue/syntax/script-component.vue | 14 +-
examples/vue/syntax/script-data.vue | 11 +-
examples/vue/syntax/script-events.vue | 7 +-
examples/vue/syntax/script-instance.vue | 8 +-
examples/vue/syntax/script-lifecycle.vue | 9 +-
examples/vue/syntax/template-class.vue | 1 +
examples/vue/syntax/template-event.vue | 10 +-
examples/vue/syntax/template-if.vue | 1 +
examples/vue/syntax/template-repeat-update.vue | 24 +-
examples/vue/syntax/template-repeat.vue | 36 +-
examples/vue/syntax/template-style.vue | 9 +-
examples/vue/template.vue | 20 +-
examples/vue/test.vue | 16 -
examples/vue/test2.vue | 6 -
html5/frameworks/index.js | 2 +
html5/frameworks/legacy/api/methods.js | 30 +-
html5/frameworks/legacy/app/bundle/bootstrap.js | 6 +
html5/frameworks/legacy/app/ctrl/init.js | 118 +-
html5/frameworks/legacy/app/ctrl/misc.js | 40 +-
html5/frameworks/legacy/app/index.js | 4 +-
html5/frameworks/legacy/app/instance.js | 18 +-
html5/frameworks/legacy/app/register.js | 25 +-
html5/frameworks/legacy/app/viewport.js | 38 +
html5/frameworks/legacy/static/create.js | 13 +-
html5/frameworks/vanilla/index.js | 43 +-
html5/render/native/index.js | 6 +-
html5/runtime/callback-manager.js | 37 +
html5/runtime/config.js | 17 +
html5/runtime/handler.js | 2 +-
html5/runtime/index.js | 32 +-
html5/runtime/init.js | 87 +-
html5/runtime/service.js | 58 +
html5/runtime/task-center.js | 72 +
html5/runtime/vdom/document.js | 4 +-
html5/runtime/vdom/element-types.js | 65 +
html5/runtime/vdom/element.js | 149 +-
html5/runtime/vdom/index.js | 8 +-
html5/runtime/vdom/operation.js | 29 +-
html5/services/amd/index.js | 70 +
html5/services/broadcast-channel/index.js | 106 +
.../services/broadcast-channel/message-event.js | 21 +
html5/services/index.js | 5 +
html5/shared/setTimeout.js | 2 +
.../case/basic/global-weex-object.output.js | 6 +
.../case/basic/global-weex-object.source.js | 19 +
html5/test/case/prepare.js | 10 +-
html5/test/case/tester.js | 50 +-
html5/test/unit/default/api/methods.js | 6 +-
html5/test/unit/default/app/bundle.js | 30 +-
html5/test/unit/default/app/ctrl.js | 31 +-
html5/test/unit/default/app/index.js | 54 +-
html5/test/unit/default/app/viewport.js | 61 +
html5/test/unit/default/runtime.js | 40 +-
html5/test/unit/default/vm/dom-helper.js | 9 +-
html5/test/unit/default/vm/events.js | 14 +-
html5/test/unit/default/vm/vm.js | 16 +-
html5/test/unit/shared/BroadcastChannel.js | 220 +
html5/test/unit/vanilla/index.js | 3 -
html5/test/unit/vdom/index.js | 76 +-
html5/test/unit/vdom/listener.js | 34 +-
.../WeexDemo.xcodeproj/project.pbxproj | 73 +-
.../contents.xcworkspacedata | 7 +
.../xcshareddata/xcschemes/WeexDemo.xcscheme | 2 +-
ios/playground/WeexDemo/AppDelegate.m | 4 +-
ios/playground/WeexDemo/Scanner/WXScannerVC.m | 2 +-
ios/playground/WeexDemo/WXDemoViewController.m | 6 +
ios/playground/WeexDemo/WXSyncTestModule.h | 14 +
ios/playground/WeexDemo/WXSyncTestModule.m | 38 +
ios/sdk/WeexSDK.podspec | 12 +-
ios/sdk/WeexSDK.xcodeproj/project.pbxproj | 192 +-
ios/sdk/WeexSDK/Resources/main.js | 14 +-
ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h | 15 +
ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.m | 90 +
.../WeexSDK/Sources/Bridge/WXBridgeContext.h | 11 +-
.../WeexSDK/Sources/Bridge/WXBridgeContext.m | 127 +-
ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h | 20 +
ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.m | 35 +
.../WeexSDK/Sources/Bridge/WXComponentMethod.h | 21 +
.../WeexSDK/Sources/Bridge/WXComponentMethod.m | 51 +
.../Sources/Bridge/WXDebugLoggerBridge.m | 5 +
ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m | 40 +-
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h | 28 +
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 99 +
.../Sources/Component/WXCanvasComponent.m | 16 +-
.../WeexSDK/Sources/Component/WXCellComponent.h | 4 +-
.../WeexSDK/Sources/Component/WXCellComponent.m | 10 +
.../Component/WXComponent+GradientColor.h | 20 +
.../Component/WXComponent+GradientColor.m | 116 +
.../Sources/Component/WXComponent_internal.h | 20 +-
.../Sources/Component/WXImageComponent.m | 58 +-
.../Sources/Component/WXIndicatorComponent.m | 5 +-
.../WeexSDK/Sources/Component/WXListComponent.m | 48 +-
.../Sources/Component/WXScrollerComponent.h | 2 +
.../Sources/Component/WXScrollerComponent.m | 18 +-
.../Sources/Component/WXSliderComponent.m | 48 +-
.../Component/WXSliderNeighborComponent.m | 103 +-
.../Sources/Component/WXTextAreaComponent.m | 199 +-
.../WeexSDK/Sources/Component/WXTextComponent.m | 40 +-
.../Sources/Component/WXTextInputComponent.m | 262 +-
ios/sdk/WeexSDK/Sources/Component/WXTransform.h | 3 +
ios/sdk/WeexSDK/Sources/Component/WXTransform.m | 25 +-
.../Sources/Component/WXVideoComponent.m | 2 +-
.../Sources/Controller/WXBaseViewController.m | 48 +-
ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m | 46 +-
.../Sources/Display/WXComponent+Display.m | 40 +-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h | 51 +-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m | 62 +-
ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h | 5 +-
.../WeexSDK/Sources/Events/WXComponent+Events.m | 141 +-
.../Sources/Handler/WXNetworkDefaultImpl.h | 14 -
.../Sources/Handler/WXNetworkDefaultImpl.m | 111 -
.../WeexSDK/Sources/Layout/WXComponent+Layout.m | 87 +-
.../WeexSDK/Sources/Loader/WXResourceLoader.h | 30 +
.../WeexSDK/Sources/Loader/WXResourceLoader.m | 174 +
.../WeexSDK/Sources/Loader/WXWebSocketLoader.h | 24 +
.../WeexSDK/Sources/Loader/WXWebSocketLoader.m | 131 +
.../WeexSDK/Sources/Manager/WXBridgeManager.h | 29 +-
.../WeexSDK/Sources/Manager/WXBridgeManager.m | 87 +-
.../Sources/Manager/WXComponentFactory.m | 6 +-
.../Sources/Manager/WXComponentManager.h | 12 +-
.../Sources/Manager/WXComponentManager.m | 58 +-
.../Sources/Manager/WXDatePickerManager.h | 1 -
.../Sources/Manager/WXDatePickerManager.m | 58 +-
.../WeexSDK/Sources/Manager/WXHandlerFactory.m | 1 -
.../Sources/Manager/WXInvocationConfig.h | 6 +-
.../Sources/Manager/WXInvocationConfig.m | 100 +-
.../WeexSDK/Sources/Manager/WXModuleFactory.h | 4 +-
.../WeexSDK/Sources/Manager/WXModuleFactory.m | 32 +-
.../WeexSDK/Sources/Manager/WXModuleManager.h | 16 -
.../WeexSDK/Sources/Manager/WXModuleManager.m | 111 -
ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m | 11 +-
ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h | 10 +-
ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.m | 19 +-
.../WeexSDK/Sources/Manager/WXServiceFactory.h | 38 +
.../WeexSDK/Sources/Manager/WXServiceFactory.m | 102 +
ios/sdk/WeexSDK/Sources/Model/WXBridgeMethod.h | 18 +-
ios/sdk/WeexSDK/Sources/Model/WXBridgeMethod.m | 85 +-
ios/sdk/WeexSDK/Sources/Model/WXComponent.h | 10 +
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 39 +-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h | 56 +-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 421 +-
.../Sources/Model/WXSDKInstance_private.h | 8 +
.../WeexSDK/Sources/Module/WXAnimationModule.m | 26 +-
ios/sdk/WeexSDK/Sources/Module/WXDomModule.m | 31 +-
.../Sources/Module/WXGlobalEventModule.m | 1 +
ios/sdk/WeexSDK/Sources/Module/WXMetaModule.h | 14 +
ios/sdk/WeexSDK/Sources/Module/WXMetaModule.m | 40 +
.../WeexSDK/Sources/Module/WXNavigatorModule.m | 28 +-
ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h | 2 +-
ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m | 220 +-
.../WeexSDK/Sources/Module/WXWebSocketModule.h | 15 +
.../WeexSDK/Sources/Module/WXWebSocketModule.m | 137 +
ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h | 2 +
.../WeexSDK/Sources/Network/WXResourceRequest.h | 35 +
.../WeexSDK/Sources/Network/WXResourceRequest.m | 57 +
.../Sources/Network/WXResourceRequestHandler.h | 45 +
.../WXResourceRequestHandlerDefaultImpl.h | 15 +
.../WXResourceRequestHandlerDefaultImpl.m | 90 +
.../Sources/Network/WXResourceResponse.h | 14 +
.../Sources/Network/WXResourceResponse.m | 14 +
.../WeexSDK/Sources/Protocol/WXBridgeProtocol.h | 28 +-
.../Sources/Protocol/WXNavigationProtocol.h | 31 +-
.../Sources/Protocol/WXNetworkProtocol.h | 1 +
.../Sources/Protocol/WXURLRewriteProtocol.h | 10 +-
ios/sdk/WeexSDK/Sources/Utility/WXConvert.h | 22 +-
ios/sdk/WeexSDK/Sources/Utility/WXConvert.m | 87 +-
ios/sdk/WeexSDK/Sources/Utility/WXDefine.h | 27 +-
ios/sdk/WeexSDK/Sources/Utility/WXType.h | 13 +-
ios/sdk/WeexSDK/Sources/Utility/WXUtility.h | 57 +-
ios/sdk/WeexSDK/Sources/Utility/WXUtility.m | 119 +-
.../View/WXComponent+PseudoClassManagement.h | 66 +
.../View/WXComponent+PseudoClassManagement.m | 144 +
.../Sources/View/WXComponent+ViewManagement.m | 14 +-
ios/sdk/WeexSDK/Sources/View/WXView.m | 2 +-
.../Sources/WebSocket/SRWebSocket+Weex.h | 18 +
.../Sources/WebSocket/SRWebSocket+Weex.m | 36 +
.../Sources/WebSocket/WXWebSocketDefaultImpl.h | 14 +
.../Sources/WebSocket/WXWebSocketDefaultImpl.m | 110 +
.../Sources/WebSocket/WXWebSocketHandler.h | 26 +
ios/sdk/WeexSDK/Sources/WeexSDK.h | 1 +
ios/sdk/WeexSDKTests/TestSupportUtils.m | 2 +-
ios/sdk/WeexSDKTests/WXBridgeMethodTests.m | 24 +-
ios/sdk/WeexSDKTests/WXNetworkTests.m | 109 -
ios/sdk/WeexSDKTests/WXRootViewTests.m | 4 +-
ios/sdk/WeexSDKTests/WXSDKEngineTests.m | 15 +-
ios/sdk/WeexSDKTests/WXSDKManagerTests.m | 4 -
ios/sdk/WeexSDKTests/WXStreamModuleTests.m | 4 +-
ios/sdk/WeexSDKTests/WXURLRewriteTests.m | 4 +-
package.json | 37 +-
test/README.md | 28 +
test/benchmark.html | 42 -
test/circleci-android/Constants.java | 16 -
test/event-bubble.we | 45 -
test/index-item.we | 26 -
test/index.we | 53 -
test/input-test.we | 27 -
test/pages/components/input.we | 0
test/pages/index.we | 27 +
test/run.sh | 28 +
test/scripts/index.test.js | 57 +
test/scripts/test.js | 1 +
test/scripts/weex-node-map.js | 17 +
test/scripts/weex.js | 129 +
test/scroller-demo.we | 168 -
test/serve.sh | 4 +
test/sticky-demo.we | 81 -
test/stream.json | 3 -
test/stream.we | 140 -
test/test.we | 85 -
test/text-word-wrap.we | 13 -
test/ui-list-item.we | 28 -
test/update-cli.sh | 5 +
test/web-demo.we | 30 -
test/web-inner.html | 42 -
490 files changed, 48554 insertions(+), 9027 deletions(-)
----------------------------------------------------------------------
[31/50] [abbrv] incubator-weex git commit: * [android] update jsfm to
v0.19.7 include RAX and Vue2.0 exclude strict mode (#136)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/405b6e67/android/sdk/assets/main.js
----------------------------------------------------------------------
diff --git a/android/sdk/assets/main.js b/android/sdk/assets/main.js
index 8cfe735..2fc8baf 100644
--- a/android/sdk/assets/main.js
+++ b/android/sdk/assets/main.js
@@ -1,5 +1,5 @@
-(this.nativeLog || function(s) {console.log(s)})('START JS FRAMEWORK 0.19.4, Build 2017-01-03 11:15.');
-(this.getJSFMVersion = function(){return "0.19.4"});var global = this, process = { env: {} };var setTimeout = global.setTimeout;
+(this.nativeLog || function(s) {console.log(s)})('START JS FRAMEWORK 0.19.7, Build 2017-01-10 10:50.');
+(this.getJSFMVersion = function(){return "0.19.7"});var global = this, process = { env: {} };var setTimeout = global.setTimeout;
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
@@ -7,7 +7,7 @@
(factory());
}(this, (function () { 'use strict';
-var subversion = {"browser":"0.5.0","framework":"0.19.4","transformer":">=0.1.5 <0.5"};
+var subversion = {"browser":"0.5.0","framework":"0.19.7","transformer":">=0.1.5 <0.5"};
/* eslint-disable */
@@ -319,7 +319,7 @@ $export$1.P = 8; // proto
$export$1.B = 16; // bind
$export$1.W = 32; // wrap
$export$1.U = 64; // safe
-$export$1.R = 128; // real proto method for `library`
+$export$1.R = 128; // real proto method for `library`
var _export = $export$1;
var toString$1 = {}.toString;
@@ -4985,804 +4985,951 @@ var initProxy;
/* */
+var VNode = function VNode (
+ tag,
+ data,
+ children,
+ text,
+ elm,
+ context,
+ componentOptions
+) {
+ this.tag = tag;
+ this.data = data;
+ this.children = children;
+ this.text = text;
+ this.elm = elm;
+ this.ns = undefined;
+ this.context = context;
+ this.functionalContext = undefined;
+ this.key = data && data.key;
+ this.componentOptions = componentOptions;
+ this.child = undefined;
+ this.parent = undefined;
+ this.raw = false;
+ this.isStatic = false;
+ this.isRootInsert = true;
+ this.isComment = false;
+ this.isCloned = false;
+ this.isOnce = false;
+};
-var queue = [];
-var has$1 = {};
-var circular = {};
-var waiting = false;
-var flushing = false;
-var index = 0;
+var createEmptyVNode = function () {
+ var node = new VNode();
+ node.text = '';
+ node.isComment = true;
+ return node
+};
-/**
- * Reset the scheduler's state.
- */
-function resetSchedulerState () {
- queue.length = 0;
- has$1 = {};
- {
- circular = {};
+function createTextVNode (val) {
+ return new VNode(undefined, undefined, undefined, String(val))
+}
+
+// optimized shallow clone
+// used for static nodes and slot nodes because they may be reused across
+// multiple renders, cloning them avoids errors when DOM manipulations rely
+// on their elm reference.
+function cloneVNode (vnode) {
+ var cloned = new VNode(
+ vnode.tag,
+ vnode.data,
+ vnode.children,
+ vnode.text,
+ vnode.elm,
+ vnode.context,
+ vnode.componentOptions
+ );
+ cloned.ns = vnode.ns;
+ cloned.isStatic = vnode.isStatic;
+ cloned.key = vnode.key;
+ cloned.isCloned = true;
+ return cloned
+}
+
+function cloneVNodes (vnodes) {
+ var res = new Array(vnodes.length);
+ for (var i = 0; i < vnodes.length; i++) {
+ res[i] = cloneVNode(vnodes[i]);
}
- waiting = flushing = false;
+ return res
}
-/**
- * Flush both queues and run the watchers.
- */
-function flushSchedulerQueue () {
- flushing = true;
+/* */
- // Sort queue before flush.
- // This ensures that:
- // 1. Components are updated from parent to child. (because parent is always
- // created before the child)
- // 2. A component's user watchers are run before its render watcher (because
- // user watchers are created before the render watcher)
- // 3. If a component is destroyed during a parent component's watcher run,
- // its watchers can be skipped.
- queue.sort(function (a, b) { return a.id - b.id; });
+var hooks = { init: init$1, prepatch: prepatch, insert: insert, destroy: destroy$1 };
+var hooksToMerge = Object.keys(hooks);
- // do not cache length because more watchers might be pushed
- // as we run existing watchers
- for (index = 0; index < queue.length; index++) {
- var watcher = queue[index];
- var id = watcher.id;
- has$1[id] = null;
- watcher.run();
- // in dev build, check and stop circular updates.
- if ("development" !== 'production' && has$1[id] != null) {
- circular[id] = (circular[id] || 0) + 1;
- if (circular[id] > config._maxUpdateCount) {
- warn(
- 'You may have an infinite update loop ' + (
- watcher.user
- ? ("in watcher with expression \"" + (watcher.expression) + "\"")
- : "in a component render function."
- ),
- watcher.vm
- );
- break
- }
- }
+function createComponent (
+ Ctor,
+ data,
+ context,
+ children,
+ tag
+) {
+ if (!Ctor) {
+ return
}
- // devtool hook
- /* istanbul ignore if */
- if (devtools && config.devtools) {
- devtools.emit('flush');
+ var baseCtor = context.$options._base;
+ if (isObject(Ctor)) {
+ Ctor = baseCtor.extend(Ctor);
}
- resetSchedulerState();
-}
+ if (typeof Ctor !== 'function') {
+ {
+ warn(("Invalid Component definition: " + (String(Ctor))), context);
+ }
+ return
+ }
-/**
- * Push a watcher into the watcher queue.
- * Jobs with duplicate IDs will be skipped unless it's
- * pushed when the queue is being flushed.
- */
-function queueWatcher (watcher) {
- var id = watcher.id;
- if (has$1[id] == null) {
- has$1[id] = true;
- if (!flushing) {
- queue.push(watcher);
+ // async component
+ if (!Ctor.cid) {
+ if (Ctor.resolved) {
+ Ctor = Ctor.resolved;
} else {
- // if already flushing, splice the watcher based on its id
- // if already past its id, it will be run next immediately.
- var i = queue.length - 1;
- while (i >= 0 && queue[i].id > watcher.id) {
- i--;
+ Ctor = resolveAsyncComponent(Ctor, baseCtor, function () {
+ // it's ok to queue this on every render because
+ // $forceUpdate is buffered by the scheduler.
+ context.$forceUpdate();
+ });
+ if (!Ctor) {
+ // return nothing if this is indeed an async component
+ // wait for the callback to trigger parent update.
+ return
}
- queue.splice(Math.max(i, index) + 1, 0, watcher);
- }
- // queue the flush
- if (!waiting) {
- waiting = true;
- nextTick(flushSchedulerQueue);
}
}
-}
-/* */
+ // resolve constructor options in case global mixins are applied after
+ // component constructor creation
+ resolveConstructorOptions(Ctor);
-var uid$2 = 0;
+ data = data || {};
-/**
- * A watcher parses an expression, collects dependencies,
- * and fires callback when the expression value changes.
- * This is used for both the $watch() api and directives.
- */
-var Watcher = function Watcher (
- vm,
- expOrFn,
- cb,
- options
-) {
- this.vm = vm;
- vm._watchers.push(this);
- // options
- if (options) {
- this.deep = !!options.deep;
- this.user = !!options.user;
- this.lazy = !!options.lazy;
- this.sync = !!options.sync;
- } else {
- this.deep = this.user = this.lazy = this.sync = false;
- }
- this.cb = cb;
- this.id = ++uid$2; // uid for batching
- this.active = true;
- this.dirty = this.lazy; // for lazy watchers
- this.deps = [];
- this.newDeps = [];
- this.depIds = new _Set();
- this.newDepIds = new _Set();
- this.expression = expOrFn.toString();
- // parse expression for getter
- if (typeof expOrFn === 'function') {
- this.getter = expOrFn;
- } else {
- this.getter = parsePath(expOrFn);
- if (!this.getter) {
- this.getter = function () {};
- "development" !== 'production' && warn(
- "Failed watching path: \"" + expOrFn + "\" " +
- 'Watcher only accepts simple dot-delimited paths. ' +
- 'For full control, use a function instead.',
- vm
- );
- }
- }
- this.value = this.lazy
- ? undefined
- : this.get();
-};
+ // extract props
+ var propsData = extractProps(data, Ctor);
-/**
- * Evaluate the getter, and re-collect dependencies.
- */
-Watcher.prototype.get = function get () {
- pushTarget(this);
- var value = this.getter.call(this.vm, this.vm);
- // "touch" every property so they are all tracked as
- // dependencies for deep watching
- if (this.deep) {
- traverse(value);
+ // functional component
+ if (Ctor.options.functional) {
+ return createFunctionalComponent(Ctor, propsData, data, context, children)
}
- popTarget();
- this.cleanupDeps();
- return value
-};
-/**
- * Add a dependency to this directive.
- */
-Watcher.prototype.addDep = function addDep (dep) {
- var id = dep.id;
- if (!this.newDepIds.has(id)) {
- this.newDepIds.add(id);
- this.newDeps.push(dep);
- if (!this.depIds.has(id)) {
- dep.addSub(this);
- }
+ // extract listeners, since these needs to be treated as
+ // child component listeners instead of DOM listeners
+ var listeners = data.on;
+ // replace with listeners with .native modifier
+ data.on = data.nativeOn;
+
+ if (Ctor.options.abstract) {
+ // abstract components do not keep anything
+ // other than props & listeners
+ data = {};
}
-};
-/**
- * Clean up for dependency collection.
- */
-Watcher.prototype.cleanupDeps = function cleanupDeps () {
- var this$1 = this;
+ // merge component management hooks onto the placeholder node
+ mergeHooks(data);
- var i = this.deps.length;
- while (i--) {
- var dep = this$1.deps[i];
- if (!this$1.newDepIds.has(dep.id)) {
- dep.removeSub(this$1);
+ // return a placeholder vnode
+ var name = Ctor.options.name || tag;
+ var vnode = new VNode(
+ ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
+ data, undefined, undefined, undefined, context,
+ { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }
+ );
+ return vnode
+}
+
+function createFunctionalComponent (
+ Ctor,
+ propsData,
+ data,
+ context,
+ children
+) {
+ var props = {};
+ var propOptions = Ctor.options.props;
+ if (propOptions) {
+ for (var key in propOptions) {
+ props[key] = validateProp(key, propOptions, propsData);
}
}
- var tmp = this.depIds;
- this.depIds = this.newDepIds;
- this.newDepIds = tmp;
- this.newDepIds.clear();
- tmp = this.deps;
- this.deps = this.newDeps;
- this.newDeps = tmp;
- this.newDeps.length = 0;
-};
+ // ensure the createElement function in functional components
+ // gets a unique context - this is necessary for correct named slot check
+ var _context = Object.create(context);
+ var h = function (a, b, c, d) { return createElement(_context, a, b, c, d, true); };
+ var vnode = Ctor.options.render.call(null, h, {
+ props: props,
+ data: data,
+ parent: context,
+ children: children,
+ slots: function () { return resolveSlots(children, context); }
+ });
+ if (vnode instanceof VNode) {
+ vnode.functionalContext = context;
+ if (data.slot) {
+ (vnode.data || (vnode.data = {})).slot = data.slot;
+ }
+ }
+ return vnode
+}
-/**
- * Subscriber interface.
- * Will be called when a dependency changes.
- */
-Watcher.prototype.update = function update () {
- /* istanbul ignore else */
- if (this.lazy) {
- this.dirty = true;
- } else if (this.sync) {
- this.run();
- } else {
- queueWatcher(this);
+function createComponentInstanceForVnode (
+ vnode, // we know it's MountedComponentVNode but flow doesn't
+ parent, // activeInstance in lifecycle state
+ parentElm,
+ refElm
+) {
+ var vnodeComponentOptions = vnode.componentOptions;
+ var options = {
+ _isComponent: true,
+ parent: parent,
+ propsData: vnodeComponentOptions.propsData,
+ _componentTag: vnodeComponentOptions.tag,
+ _parentVnode: vnode,
+ _parentListeners: vnodeComponentOptions.listeners,
+ _renderChildren: vnodeComponentOptions.children,
+ _parentElm: parentElm || null,
+ _refElm: refElm || null
+ };
+ // check inline-template render functions
+ var inlineTemplate = vnode.data.inlineTemplate;
+ if (inlineTemplate) {
+ options.render = inlineTemplate.render;
+ options.staticRenderFns = inlineTemplate.staticRenderFns;
}
-};
+ return new vnodeComponentOptions.Ctor(options)
+}
-/**
- * Scheduler job interface.
- * Will be called by the scheduler.
- */
-Watcher.prototype.run = function run () {
- if (this.active) {
- var value = this.get();
- if (
- value !== this.value ||
- // Deep watchers and watchers on Object/Arrays should fire even
- // when the value is the same, because the value may
- // have mutated.
- isObject(value) ||
- this.deep
- ) {
- // set new value
- var oldValue = this.value;
- this.value = value;
- if (this.user) {
- try {
- this.cb.call(this.vm, value, oldValue);
- } catch (e) {
- /* istanbul ignore else */
- if (config.errorHandler) {
- config.errorHandler.call(null, e, this.vm);
- } else {
- "development" !== 'production' && warn(
- ("Error in watcher \"" + (this.expression) + "\""),
- this.vm
- );
- throw e
- }
- }
- } else {
- this.cb.call(this.vm, value, oldValue);
- }
- }
+function init$1 (
+ vnode,
+ hydrating,
+ parentElm,
+ refElm
+) {
+ if (!vnode.child || vnode.child._isDestroyed) {
+ var child = vnode.child = createComponentInstanceForVnode(
+ vnode,
+ activeInstance,
+ parentElm,
+ refElm
+ );
+ child.$mount(hydrating ? vnode.elm : undefined, hydrating);
+ } else if (vnode.data.keepAlive) {
+ // kept-alive components, treat as a patch
+ var mountedNode = vnode; // work around flow
+ prepatch(mountedNode, mountedNode);
}
-};
+}
-/**
- * Evaluate the value of the watcher.
- * This only gets called for lazy watchers.
- */
-Watcher.prototype.evaluate = function evaluate () {
- this.value = this.get();
- this.dirty = false;
-};
+function prepatch (
+ oldVnode,
+ vnode
+) {
+ var options = vnode.componentOptions;
+ var child = vnode.child = oldVnode.child;
+ child._updateFromParent(
+ options.propsData, // updated props
+ options.listeners, // updated listeners
+ vnode, // new parent vnode
+ options.children // new children
+ );
+}
-/**
- * Depend on all deps collected by this watcher.
- */
-Watcher.prototype.depend = function depend () {
- var this$1 = this;
+function insert (vnode) {
+ if (!vnode.child._isMounted) {
+ vnode.child._isMounted = true;
+ callHook(vnode.child, 'mounted');
+ }
+ if (vnode.data.keepAlive) {
+ vnode.child._inactive = false;
+ callHook(vnode.child, 'activated');
+ }
+}
- var i = this.deps.length;
- while (i--) {
- this$1.deps[i].depend();
+function destroy$1 (vnode) {
+ if (!vnode.child._isDestroyed) {
+ if (!vnode.data.keepAlive) {
+ vnode.child.$destroy();
+ } else {
+ vnode.child._inactive = true;
+ callHook(vnode.child, 'deactivated');
+ }
}
-};
+}
-/**
- * Remove self from all dependencies' subscriber list.
- */
-Watcher.prototype.teardown = function teardown () {
- var this$1 = this;
+function resolveAsyncComponent (
+ factory,
+ baseCtor,
+ cb
+) {
+ if (factory.requested) {
+ // pool callbacks
+ factory.pendingCallbacks.push(cb);
+ } else {
+ factory.requested = true;
+ var cbs = factory.pendingCallbacks = [cb];
+ var sync = true;
- if (this.active) {
- // remove self from vm's watcher list
- // this is a somewhat expensive operation so we skip it
- // if the vm is being destroyed.
- if (!this.vm._isBeingDestroyed) {
- remove(this.vm._watchers, this);
- }
- var i = this.deps.length;
- while (i--) {
- this$1.deps[i].removeSub(this$1);
+ var resolve = function (res) {
+ if (isObject(res)) {
+ res = baseCtor.extend(res);
+ }
+ // cache resolved
+ factory.resolved = res;
+ // invoke callbacks only if this is not a synchronous resolve
+ // (async resolves are shimmed as synchronous during SSR)
+ if (!sync) {
+ for (var i = 0, l = cbs.length; i < l; i++) {
+ cbs[i](res);
+ }
+ }
+ };
+
+ var reject = function (reason) {
+ "development" !== 'production' && warn(
+ "Failed to resolve async component: " + (String(factory)) +
+ (reason ? ("\nReason: " + reason) : '')
+ );
+ };
+
+ var res = factory(resolve, reject);
+
+ // handle promise
+ if (res && typeof res.then === 'function' && !factory.resolved) {
+ res.then(resolve, reject);
}
- this.active = false;
- }
-};
-/**
- * Recursively traverse an object to evoke all converted
- * getters, so that every nested property inside the object
- * is collected as a "deep" dependency.
- */
-var seenObjects = new _Set();
-function traverse (val) {
- seenObjects.clear();
- _traverse(val, seenObjects);
+ sync = false;
+ // return in case resolved synchronously
+ return factory.resolved
+ }
}
-function _traverse (val, seen) {
- var i, keys;
- var isA = Array.isArray(val);
- if ((!isA && !isObject(val)) || !Object.isExtensible(val)) {
+function extractProps (data, Ctor) {
+ // we are only extracting raw values here.
+ // validation and default values are handled in the child
+ // component itself.
+ var propOptions = Ctor.options.props;
+ if (!propOptions) {
return
}
- if (val.__ob__) {
- var depId = val.__ob__.dep.id;
- if (seen.has(depId)) {
- return
+ var res = {};
+ var attrs = data.attrs;
+ var props = data.props;
+ var domProps = data.domProps;
+ if (attrs || props || domProps) {
+ for (var key in propOptions) {
+ var altKey = hyphenate(key);
+ checkProp(res, props, key, altKey, true) ||
+ checkProp(res, attrs, key, altKey) ||
+ checkProp(res, domProps, key, altKey);
}
- seen.add(depId);
- }
- if (isA) {
- i = val.length;
- while (i--) { _traverse(val[i], seen); }
- } else {
- keys = Object.keys(val);
- i = keys.length;
- while (i--) { _traverse(val[keys[i]], seen); }
- }
-}
-
-/* */
-
-function initState (vm) {
- vm._watchers = [];
- var opts = vm.$options;
- if (opts.props) { initProps(vm, opts.props); }
- if (opts.methods) { initMethods(vm, opts.methods); }
- if (opts.data) {
- initData(vm);
- } else {
- observe(vm._data = {}, true /* asRootData */);
}
- if (opts.computed) { initComputed(vm, opts.computed); }
- if (opts.watch) { initWatch(vm, opts.watch); }
+ return res
}
-var isReservedProp = { key: 1, ref: 1, slot: 1 };
-
-function initProps (vm, props) {
- var propsData = vm.$options.propsData || {};
- var keys = vm.$options._propKeys = Object.keys(props);
- var isRoot = !vm.$parent;
- // root instance props should be converted
- observerState.shouldConvert = isRoot;
- var loop = function ( i ) {
- var key = keys[i];
- /* istanbul ignore else */
- {
- if (isReservedProp[key]) {
- warn(
- ("\"" + key + "\" is a reserved attribute and cannot be used as component prop."),
- vm
- );
+function checkProp (
+ res,
+ hash,
+ key,
+ altKey,
+ preserve
+) {
+ if (hash) {
+ if (hasOwn(hash, key)) {
+ res[key] = hash[key];
+ if (!preserve) {
+ delete hash[key];
+ }
+ return true
+ } else if (hasOwn(hash, altKey)) {
+ res[key] = hash[altKey];
+ if (!preserve) {
+ delete hash[altKey];
}
- defineReactive$$1(vm, key, validateProp(key, props, propsData, vm), function () {
- if (vm.$parent && !observerState.isSettingProps) {
- warn(
- "Avoid mutating a prop directly since the value will be " +
- "overwritten whenever the parent component re-renders. " +
- "Instead, use a data or computed property based on the prop's " +
- "value. Prop being mutated: \"" + key + "\"",
- vm
- );
- }
- });
+ return true
}
- };
-
- for (var i = 0; i < keys.length; i++) { loop( i ); }
- observerState.shouldConvert = true;
+ }
+ return false
}
-function initData (vm) {
- var data = vm.$options.data;
- data = vm._data = typeof data === 'function'
- ? data.call(vm)
- : data || {};
- if (!isPlainObject(data)) {
- data = {};
- "development" !== 'production' && warn(
- 'data functions should return an object:\n' +
- 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
- vm
- );
+function mergeHooks (data) {
+ if (!data.hook) {
+ data.hook = {};
}
- // proxy data on instance
- var keys = Object.keys(data);
- var props = vm.$options.props;
- var i = keys.length;
- while (i--) {
- if (props && hasOwn(props, keys[i])) {
- "development" !== 'production' && warn(
- "The data property \"" + (keys[i]) + "\" is already declared as a prop. " +
- "Use prop default value instead.",
- vm
- );
- } else {
- proxy(vm, keys[i]);
- }
+ for (var i = 0; i < hooksToMerge.length; i++) {
+ var key = hooksToMerge[i];
+ var fromParent = data.hook[key];
+ var ours = hooks[key];
+ data.hook[key] = fromParent ? mergeHook$1(ours, fromParent) : ours;
}
- // observe data
- observe(data, true /* asRootData */);
}
-var computedSharedDefinition = {
- enumerable: true,
- configurable: true,
- get: noop,
- set: noop
-};
-
-function initComputed (vm, computed) {
- for (var key in computed) {
- /* istanbul ignore if */
- if ("development" !== 'production' && key in vm) {
- warn(
- "existing instance property \"" + key + "\" will be " +
- "overwritten by a computed property with the same name.",
- vm
- );
- }
- var userDef = computed[key];
- if (typeof userDef === 'function') {
- computedSharedDefinition.get = makeComputedGetter(userDef, vm);
- computedSharedDefinition.set = noop;
- } else {
- computedSharedDefinition.get = userDef.get
- ? userDef.cache !== false
- ? makeComputedGetter(userDef.get, vm)
- : bind(userDef.get, vm)
- : noop;
- computedSharedDefinition.set = userDef.set
- ? bind(userDef.set, vm)
- : noop;
- }
- Object.defineProperty(vm, key, computedSharedDefinition);
+function mergeHook$1 (one, two) {
+ return function (a, b, c, d) {
+ one(a, b, c, d);
+ two(a, b, c, d);
}
}
-function makeComputedGetter (getter, owner) {
- var watcher = new Watcher(owner, getter, noop, {
- lazy: true
- });
- return function computedGetter () {
- if (watcher.dirty) {
- watcher.evaluate();
- }
- if (Dep.target) {
- watcher.depend();
+/* */
+
+function mergeVNodeHook (def, hookKey, hook, key) {
+ key = key + hookKey;
+ var injectedHash = def.__injected || (def.__injected = {});
+ if (!injectedHash[key]) {
+ injectedHash[key] = true;
+ var oldHook = def[hookKey];
+ if (oldHook) {
+ def[hookKey] = function () {
+ oldHook.apply(this, arguments);
+ hook.apply(this, arguments);
+ };
+ } else {
+ def[hookKey] = hook;
}
- return watcher.value
}
}
-function initMethods (vm, methods) {
- for (var key in methods) {
- vm[key] = methods[key] == null ? noop : bind(methods[key], vm);
- if ("development" !== 'production' && methods[key] == null) {
- warn(
- "method \"" + key + "\" has an undefined value in the component definition. " +
- "Did you reference the function correctly?",
+/* */
+
+function updateListeners (
+ on,
+ oldOn,
+ add,
+ remove$$1,
+ vm
+) {
+ var name, cur, old, fn, event, capture, once;
+ for (name in on) {
+ cur = on[name];
+ old = oldOn[name];
+ if (!cur) {
+ "development" !== 'production' && warn(
+ "Invalid handler for event \"" + name + "\": got " + String(cur),
vm
);
+ } else if (!old) {
+ once = name.charAt(0) === '~'; // Prefixed last, checked first
+ event = once ? name.slice(1) : name;
+ capture = event.charAt(0) === '!';
+ event = capture ? event.slice(1) : event;
+ if (Array.isArray(cur)) {
+ add(event, (cur.invoker = arrInvoker(cur)), once, capture);
+ } else {
+ if (!cur.invoker) {
+ fn = cur;
+ cur = on[name] = {};
+ cur.fn = fn;
+ cur.invoker = fnInvoker(cur);
+ }
+ add(event, cur.invoker, once, capture);
+ }
+ } else if (cur !== old) {
+ if (Array.isArray(old)) {
+ old.length = cur.length;
+ for (var i = 0; i < old.length; i++) { old[i] = cur[i]; }
+ on[name] = old;
+ } else {
+ old.fn = cur;
+ on[name] = old;
+ }
+ }
+ }
+ for (name in oldOn) {
+ if (!on[name]) {
+ once = name.charAt(0) === '~'; // Prefixed last, checked first
+ event = once ? name.slice(1) : name;
+ capture = event.charAt(0) === '!';
+ event = capture ? event.slice(1) : event;
+ remove$$1(event, oldOn[name].invoker, capture);
}
}
}
-function initWatch (vm, watch) {
- for (var key in watch) {
- var handler = watch[key];
- if (Array.isArray(handler)) {
- for (var i = 0; i < handler.length; i++) {
- createWatcher(vm, key, handler[i]);
- }
- } else {
- createWatcher(vm, key, handler);
+function arrInvoker (arr) {
+ return function (ev) {
+ var arguments$1 = arguments;
+
+ var single = arguments.length === 1;
+ for (var i = 0; i < arr.length; i++) {
+ single ? arr[i](ev) : arr[i].apply(null, arguments$1);
}
}
}
-function createWatcher (vm, key, handler) {
- var options;
- if (isPlainObject(handler)) {
- options = handler;
- handler = handler.handler;
- }
- if (typeof handler === 'string') {
- handler = vm[handler];
+function fnInvoker (o) {
+ return function (ev) {
+ var single = arguments.length === 1;
+ single ? o.fn(ev) : o.fn.apply(null, arguments);
}
- vm.$watch(key, handler, options);
}
-function stateMixin (Vue) {
- // flow somehow has problems with directly declared definition object
- // when using Object.defineProperty, so we have to procedurally build up
- // the object here.
- var dataDef = {};
- dataDef.get = function () {
- return this._data
- };
- {
- dataDef.set = function (newData) {
- warn(
- 'Avoid replacing instance root $data. ' +
- 'Use nested data properties instead.',
- this
- );
- };
- }
- Object.defineProperty(Vue.prototype, '$data', dataDef);
+/* */
- Vue.prototype.$set = set$1;
- Vue.prototype.$delete = del;
+// The template compiler attempts to minimize the need for normalization by
+// statically analyzing the template at compile time.
+//
+// For plain HTML markup, normalization can be completely skipped because the
+// generated render function is guaranteed to return Array<VNode>. There are
+// two cases where extra normalization is needed:
- Vue.prototype.$watch = function (
- expOrFn,
- cb,
- options
- ) {
- var vm = this;
- options = options || {};
- options.user = true;
- var watcher = new Watcher(vm, expOrFn, cb, options);
- if (options.immediate) {
- cb.call(vm, watcher.value);
- }
- return function unwatchFn () {
- watcher.teardown();
+// 1. When the children contains components - because a functional component
+// may return an Array instead of a single root. In this case, just a simple
+// nomralization is needed - if any child is an Array, we flatten the whole
+// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
+// because functional components already normalize their own children.
+function simpleNormalizeChildren (children) {
+ for (var i = 0; i < children.length; i++) {
+ if (Array.isArray(children[i])) {
+ return Array.prototype.concat.apply([], children)
}
- };
+ }
+ return children
}
-function proxy (vm, key) {
- if (!isReserved(key)) {
- Object.defineProperty(vm, key, {
- configurable: true,
- enumerable: true,
- get: function proxyGetter () {
- return vm._data[key]
- },
- set: function proxySetter (val) {
- vm._data[key] = val;
+// 2. When the children contains constrcuts that always generated nested Arrays,
+// e.g. <template>, <slot>, v-for, or when the children is provided by user
+// with hand-written render functions / JSX. In such cases a full normalization
+// is needed to cater to all possible types of children values.
+function normalizeChildren (children) {
+ return isPrimitive(children)
+ ? [createTextVNode(children)]
+ : Array.isArray(children)
+ ? normalizeArrayChildren(children)
+ : undefined
+}
+
+function normalizeArrayChildren (children, nestedIndex) {
+ var res = [];
+ var i, c, last;
+ for (i = 0; i < children.length; i++) {
+ c = children[i];
+ if (c == null || typeof c === 'boolean') { continue }
+ last = res[res.length - 1];
+ // nested
+ if (Array.isArray(c)) {
+ res.push.apply(res, normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i)));
+ } else if (isPrimitive(c)) {
+ if (last && last.text) {
+ last.text += String(c);
+ } else if (c !== '') {
+ // convert primitive to vnode
+ res.push(createTextVNode(c));
}
- });
+ } else {
+ if (c.text && last && last.text) {
+ res[res.length - 1] = createTextVNode(last.text + c.text);
+ } else {
+ // default key for nested array children (likely generated by v-for)
+ if (c.tag && c.key == null && nestedIndex != null) {
+ c.key = "__vlist" + nestedIndex + "_" + i + "__";
+ }
+ res.push(c);
+ }
+ }
}
+ return res
}
/* */
-var VNode = function VNode (
+function getFirstComponentChild (children) {
+ return children && children.filter(function (c) { return c && c.componentOptions; })[0]
+}
+
+/* */
+
+var SIMPLE_NORMALIZE = 1;
+var ALWAYS_NORMALIZE = 2;
+
+// wrapper function for providing a more flexible interface
+// without getting yelled at by flow
+function createElement (
+ context,
tag,
data,
children,
- text,
- elm,
- context,
- componentOptions
+ normalizationType,
+ alwaysNormalize
) {
- this.tag = tag;
- this.data = data;
- this.children = children;
- this.text = text;
- this.elm = elm;
- this.ns = undefined;
- this.context = context;
- this.functionalContext = undefined;
- this.key = data && data.key;
- this.componentOptions = componentOptions;
- this.child = undefined;
- this.parent = undefined;
- this.raw = false;
- this.isStatic = false;
- this.isRootInsert = true;
- this.isComment = false;
- this.isCloned = false;
- this.isOnce = false;
-};
-
-var createEmptyVNode = function () {
- var node = new VNode();
- node.text = '';
- node.isComment = true;
- return node
-};
-
-function createTextVNode (val) {
- return new VNode(undefined, undefined, undefined, String(val))
+ if (Array.isArray(data) || isPrimitive(data)) {
+ normalizationType = children;
+ children = data;
+ data = undefined;
+ }
+ if (alwaysNormalize) { normalizationType = ALWAYS_NORMALIZE; }
+ return _createElement(context, tag, data, children, normalizationType)
}
-// optimized shallow clone
-// used for static nodes and slot nodes because they may be reused across
-// multiple renders, cloning them avoids errors when DOM manipulations rely
-// on their elm reference.
-function cloneVNode (vnode) {
- var cloned = new VNode(
- vnode.tag,
- vnode.data,
- vnode.children,
- vnode.text,
- vnode.elm,
- vnode.context,
- vnode.componentOptions
- );
- cloned.ns = vnode.ns;
- cloned.isStatic = vnode.isStatic;
- cloned.key = vnode.key;
- cloned.isCloned = true;
- return cloned
+function _createElement (
+ context,
+ tag,
+ data,
+ children,
+ normalizationType
+) {
+ if (data && data.__ob__) {
+ "development" !== 'production' && warn(
+ "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
+ 'Always create fresh vnode data objects in each render!',
+ context
+ );
+ return createEmptyVNode()
+ }
+ if (!tag) {
+ // in case of component :is set to falsy value
+ return createEmptyVNode()
+ }
+ // support single function children as default scoped slot
+ if (Array.isArray(children) &&
+ typeof children[0] === 'function') {
+ data = data || {};
+ data.scopedSlots = { default: children[0] };
+ children.length = 0;
+ }
+ if (normalizationType === ALWAYS_NORMALIZE) {
+ children = normalizeChildren(children);
+ } else if (normalizationType === SIMPLE_NORMALIZE) {
+ children = simpleNormalizeChildren(children);
+ }
+ var vnode, ns;
+ if (typeof tag === 'string') {
+ var Ctor;
+ ns = config.getTagNamespace(tag);
+ if (config.isReservedTag(tag)) {
+ // platform built-in elements
+ vnode = new VNode(
+ config.parsePlatformTagName(tag), data, children,
+ undefined, undefined, context
+ );
+ } else if ((Ctor = resolveAsset(context.$options, 'components', tag))) {
+ // component
+ vnode = createComponent(Ctor, data, context, children, tag);
+ } else {
+ // unknown or unlisted namespaced elements
+ // check at runtime because it may get assigned a namespace when its
+ // parent normalizes children
+ vnode = new VNode(
+ tag, data, children,
+ undefined, undefined, context
+ );
+ }
+ } else {
+ // direct component options / constructor
+ vnode = createComponent(tag, data, context, children);
+ }
+ if (vnode) {
+ if (ns) { applyNS(vnode, ns); }
+ return vnode
+ } else {
+ return createEmptyVNode()
+ }
}
-function cloneVNodes (vnodes) {
- var res = new Array(vnodes.length);
- for (var i = 0; i < vnodes.length; i++) {
- res[i] = cloneVNode(vnodes[i]);
+function applyNS (vnode, ns) {
+ vnode.ns = ns;
+ if (vnode.tag === 'foreignObject') {
+ // use default namespace inside foreignObject
+ return
+ }
+ if (vnode.children) {
+ for (var i = 0, l = vnode.children.length; i < l; i++) {
+ var child = vnode.children[i];
+ if (child.tag && !child.ns) {
+ applyNS(child, ns);
+ }
+ }
}
- return res
}
/* */
-function mergeVNodeHook (def, hookKey, hook, key) {
- key = key + hookKey;
- var injectedHash = def.__injected || (def.__injected = {});
- if (!injectedHash[key]) {
- injectedHash[key] = true;
- var oldHook = def[hookKey];
- if (oldHook) {
- def[hookKey] = function () {
- oldHook.apply(this, arguments);
- hook.apply(this, arguments);
- };
- } else {
- def[hookKey] = hook;
+function initRender (vm) {
+ vm.$vnode = null; // the placeholder node in parent tree
+ vm._vnode = null; // the root of the child tree
+ vm._staticTrees = null;
+ var parentVnode = vm.$options._parentVnode;
+ var renderContext = parentVnode && parentVnode.context;
+ vm.$slots = resolveSlots(vm.$options._renderChildren, renderContext);
+ vm.$scopedSlots = {};
+ // bind the createElement fn to this instance
+ // so that we get proper render context inside it.
+ // args order: tag, data, children, normalizationType, alwaysNormalize
+ // internal version is used by render functions compiled from templates
+ vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
+ // normalization is always applied for the public version, used in
+ // user-written render functions.
+ vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
+ if (vm.$options.el) {
+ vm.$mount(vm.$options.el);
+ }
+}
+
+function renderMixin (Vue) {
+ Vue.prototype.$nextTick = function (fn) {
+ return nextTick(fn, this)
+ };
+
+ Vue.prototype._render = function () {
+ var vm = this;
+ var ref = vm.$options;
+ var render = ref.render;
+ var staticRenderFns = ref.staticRenderFns;
+ var _parentVnode = ref._parentVnode;
+
+ if (vm._isMounted) {
+ // clone slot nodes on re-renders
+ for (var key in vm.$slots) {
+ vm.$slots[key] = cloneVNodes(vm.$slots[key]);
+ }
}
- }
-}
-/* */
+ if (_parentVnode && _parentVnode.data.scopedSlots) {
+ vm.$scopedSlots = _parentVnode.data.scopedSlots;
+ }
-function updateListeners (
- on,
- oldOn,
- add,
- remove$$1,
- vm
-) {
- var name, cur, old, fn, event, capture, once;
- for (name in on) {
- cur = on[name];
- old = oldOn[name];
- if (!cur) {
- "development" !== 'production' && warn(
- "Invalid handler for event \"" + name + "\": got " + String(cur),
- vm
- );
- } else if (!old) {
- once = name.charAt(0) === '~'; // Prefixed last, checked first
- event = once ? name.slice(1) : name;
- capture = event.charAt(0) === '!';
- event = capture ? event.slice(1) : event;
- if (Array.isArray(cur)) {
- add(event, (cur.invoker = arrInvoker(cur)), once, capture);
+ if (staticRenderFns && !vm._staticTrees) {
+ vm._staticTrees = [];
+ }
+ // set parent vnode. this allows render functions to have access
+ // to the data on the placeholder node.
+ vm.$vnode = _parentVnode;
+ // render self
+ var vnode;
+ try {
+ vnode = render.call(vm._renderProxy, vm.$createElement);
+ } catch (e) {
+ /* istanbul ignore else */
+ if (config.errorHandler) {
+ config.errorHandler.call(null, e, vm);
} else {
- if (!cur.invoker) {
- fn = cur;
- cur = on[name] = {};
- cur.fn = fn;
- cur.invoker = fnInvoker(cur);
+ {
+ warn(("Error when rendering " + (formatComponentName(vm)) + ":"));
}
- add(event, cur.invoker, once, capture);
+ throw e
}
- } else if (cur !== old) {
- if (Array.isArray(old)) {
- old.length = cur.length;
- for (var i = 0; i < old.length; i++) { old[i] = cur[i]; }
- on[name] = old;
- } else {
- old.fn = cur;
- on[name] = old;
+ // return previous vnode to prevent render error causing blank component
+ vnode = vm._vnode;
+ }
+ // return empty vnode in case the render function errored out
+ if (!(vnode instanceof VNode)) {
+ if ("development" !== 'production' && Array.isArray(vnode)) {
+ warn(
+ 'Multiple root nodes returned from render function. Render function ' +
+ 'should return a single root node.',
+ vm
+ );
}
+ vnode = createEmptyVNode();
}
- }
- for (name in oldOn) {
- if (!on[name]) {
- once = name.charAt(0) === '~'; // Prefixed last, checked first
- event = once ? name.slice(1) : name;
- capture = event.charAt(0) === '!';
- event = capture ? event.slice(1) : event;
- remove$$1(event, oldOn[name].invoker, capture);
+ // set parent
+ vnode.parent = _parentVnode;
+ return vnode
+ };
+
+ // toString for mustaches
+ Vue.prototype._s = _toString;
+ // convert text to vnode
+ Vue.prototype._v = createTextVNode;
+ // number conversion
+ Vue.prototype._n = toNumber;
+ // empty vnode
+ Vue.prototype._e = createEmptyVNode;
+ // loose equal
+ Vue.prototype._q = looseEqual;
+ // loose indexOf
+ Vue.prototype._i = looseIndexOf;
+
+ // render static tree by index
+ Vue.prototype._m = function renderStatic (
+ index,
+ isInFor
+ ) {
+ var tree = this._staticTrees[index];
+ // if has already-rendered static tree and not inside v-for,
+ // we can reuse the same tree by doing a shallow clone.
+ if (tree && !isInFor) {
+ return Array.isArray(tree)
+ ? cloneVNodes(tree)
+ : cloneVNode(tree)
}
- }
-}
+ // otherwise, render a fresh tree.
+ tree = this._staticTrees[index] = this.$options.staticRenderFns[index].call(this._renderProxy);
+ markStatic(tree, ("__static__" + index), false);
+ return tree
+ };
-function arrInvoker (arr) {
- return function (ev) {
- var arguments$1 = arguments;
+ // mark node as static (v-once)
+ Vue.prototype._o = function markOnce (
+ tree,
+ index,
+ key
+ ) {
+ markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
+ return tree
+ };
- var single = arguments.length === 1;
- for (var i = 0; i < arr.length; i++) {
- single ? arr[i](ev) : arr[i].apply(null, arguments$1);
+ function markStatic (tree, key, isOnce) {
+ if (Array.isArray(tree)) {
+ for (var i = 0; i < tree.length; i++) {
+ if (tree[i] && typeof tree[i] !== 'string') {
+ markStaticNode(tree[i], (key + "_" + i), isOnce);
+ }
+ }
+ } else {
+ markStaticNode(tree, key, isOnce);
}
}
-}
-function fnInvoker (o) {
- return function (ev) {
- var single = arguments.length === 1;
- single ? o.fn(ev) : o.fn.apply(null, arguments);
+ function markStaticNode (node, key, isOnce) {
+ node.isStatic = true;
+ node.key = key;
+ node.isOnce = isOnce;
}
-}
-/* */
+ // filter resolution helper
+ Vue.prototype._f = function resolveFilter (id) {
+ return resolveAsset(this.$options, 'filters', id, true) || identity
+ };
-// The template compiler attempts to minimize the need for normalization by
-// statically analyzing the template at compile time.
-//
-// For plain HTML markup, normalization can be completely skipped because the
-// generated render function is guaranteed to return Array<VNode>. There are
-// two cases where extra normalization is needed:
+ // render v-for
+ Vue.prototype._l = function renderList (
+ val,
+ render
+ ) {
+ var ret, i, l, keys, key;
+ if (Array.isArray(val) || typeof val === 'string') {
+ ret = new Array(val.length);
+ for (i = 0, l = val.length; i < l; i++) {
+ ret[i] = render(val[i], i);
+ }
+ } else if (typeof val === 'number') {
+ ret = new Array(val);
+ for (i = 0; i < val; i++) {
+ ret[i] = render(i + 1, i);
+ }
+ } else if (isObject(val)) {
+ keys = Object.keys(val);
+ ret = new Array(keys.length);
+ for (i = 0, l = keys.length; i < l; i++) {
+ key = keys[i];
+ ret[i] = render(val[key], key, i);
+ }
+ }
+ return ret
+ };
-// 1. When the children contains components - because a functional component
-// may return an Array instead of a single root. In this case, just a simple
-// nomralization is needed - if any child is an Array, we flatten the whole
-// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
-// because functional components already normalize their own children.
-function simpleNormalizeChildren (children) {
- for (var i = 0; i < children.length; i++) {
- if (Array.isArray(children[i])) {
- return Array.prototype.concat.apply([], children)
+ // renderSlot
+ Vue.prototype._t = function (
+ name,
+ fallback,
+ props,
+ bindObject
+ ) {
+ var scopedSlotFn = this.$scopedSlots[name];
+ if (scopedSlotFn) { // scoped slot
+ props = props || {};
+ if (bindObject) {
+ extend(props, bindObject);
+ }
+ return scopedSlotFn(props) || fallback
+ } else {
+ var slotNodes = this.$slots[name];
+ // warn duplicate slot usage
+ if (slotNodes && "development" !== 'production') {
+ slotNodes._rendered && warn(
+ "Duplicate presence of slot \"" + name + "\" found in the same render tree " +
+ "- this will likely cause render errors.",
+ this
+ );
+ slotNodes._rendered = true;
+ }
+ return slotNodes || fallback
+ }
+ };
+
+ // apply v-bind object
+ Vue.prototype._b = function bindProps (
+ data,
+ tag,
+ value,
+ asProp
+ ) {
+ if (value) {
+ if (!isObject(value)) {
+ "development" !== 'production' && warn(
+ 'v-bind without argument expects an Object or Array value',
+ this
+ );
+ } else {
+ if (Array.isArray(value)) {
+ value = toObject(value);
+ }
+ for (var key in value) {
+ if (key === 'class' || key === 'style') {
+ data[key] = value[key];
+ } else {
+ var hash = asProp || config.mustUseProp(tag, key)
+ ? data.domProps || (data.domProps = {})
+ : data.attrs || (data.attrs = {});
+ hash[key] = value[key];
+ }
+ }
+ }
}
- }
- return children
-}
+ return data
+ };
-// 2. When the children contains constrcuts that always generated nested Arrays,
-// e.g. <template>, <slot>, v-for, or when the children is provided by user
-// with hand-written render functions / JSX. In such cases a full normalization
-// is needed to cater to all possible types of children values.
-function normalizeChildren (children) {
- return isPrimitive(children)
- ? [createTextVNode(children)]
- : Array.isArray(children)
- ? normalizeArrayChildren(children)
- : undefined
+ // check v-on keyCodes
+ Vue.prototype._k = function checkKeyCodes (
+ eventKeyCode,
+ key,
+ builtInAlias
+ ) {
+ var keyCodes = config.keyCodes[key] || builtInAlias;
+ if (Array.isArray(keyCodes)) {
+ return keyCodes.indexOf(eventKeyCode) === -1
+ } else {
+ return keyCodes !== eventKeyCode
+ }
+ };
}
-function normalizeArrayChildren (children, nestedIndex) {
- var res = [];
- var i, c, last;
- for (i = 0; i < children.length; i++) {
- c = children[i];
- if (c == null || typeof c === 'boolean') { continue }
- last = res[res.length - 1];
- // nested
- if (Array.isArray(c)) {
- res.push.apply(res, normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i)));
- } else if (isPrimitive(c)) {
- if (last && last.text) {
- last.text += String(c);
- } else if (c !== '') {
- // convert primitive to vnode
- res.push(createTextVNode(c));
- }
- } else {
- if (c.text && last && last.text) {
- res[res.length - 1] = createTextVNode(last.text + c.text);
+function resolveSlots (
+ children,
+ context
+) {
+ var slots = {};
+ if (!children) {
+ return slots
+ }
+ var defaultSlot = [];
+ var name, child;
+ for (var i = 0, l = children.length; i < l; i++) {
+ child = children[i];
+ // named slots should only be respected if the vnode was rendered in the
+ // same context.
+ if ((child.context === context || child.functionalContext === context) &&
+ child.data && (name = child.data.slot)) {
+ var slot = (slots[name] || (slots[name] = []));
+ if (child.tag === 'template') {
+ slot.push.apply(slot, child.children);
} else {
- // default key for nested array children (likely generated by v-for)
- if (c.tag && c.key == null && nestedIndex != null) {
- c.key = "__vlist" + nestedIndex + "_" + i + "__";
- }
- res.push(c);
+ slot.push(child);
}
+ } else {
+ defaultSlot.push(child);
}
}
- return res
-}
-
-/* */
-
-function getFirstComponentChild (children) {
- return children && children.filter(function (c) { return c && c.componentOptions; })[0]
+ // ignore single whitespace
+ if (defaultSlot.length && !(
+ defaultSlot.length === 1 &&
+ (defaultSlot[0].text === ' ' || defaultSlot[0].isComment)
+ )) {
+ slots.default = defaultSlot;
+ }
+ return slots
}
/* */
@@ -5990,9 +6137,8 @@ function lifecycleMixin (Vue) {
if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {
vm.$parent.$el = vm.$el;
}
- if (vm._isMounted) {
- callHook(vm, 'updated');
- }
+ // updated hook is called by the scheduler to ensure that children are
+ // updated in a parent's updated hook.
};
Vue.prototype._updateFromParent = function (
@@ -6071,742 +6217,606 @@ function lifecycleMixin (Vue) {
if (vm._data.__ob__) {
vm._data.__ob__.vmCount--;
}
- // call the last hook...
- vm._isDestroyed = true;
- callHook(vm, 'destroyed');
- // turn off all instance listeners.
- vm.$off();
- // remove __vue__ reference
- if (vm.$el) {
- vm.$el.__vue__ = null;
- }
- // invoke destroy hooks on current rendered tree
- vm.__patch__(vm._vnode, null);
- };
-}
-
-function callHook (vm, hook) {
- var handlers = vm.$options[hook];
- if (handlers) {
- for (var i = 0, j = handlers.length; i < j; i++) {
- handlers[i].call(vm);
- }
- }
- if (vm._hasHookEvent) {
- vm.$emit('hook:' + hook);
- }
-}
-
-/* */
-
-var hooks = { init: init$1, prepatch: prepatch, insert: insert, destroy: destroy$1 };
-var hooksToMerge = Object.keys(hooks);
-
-function createComponent (
- Ctor,
- data,
- context,
- children,
- tag
-) {
- if (!Ctor) {
- return
- }
-
- var baseCtor = context.$options._base;
- if (isObject(Ctor)) {
- Ctor = baseCtor.extend(Ctor);
- }
-
- if (typeof Ctor !== 'function') {
- {
- warn(("Invalid Component definition: " + (String(Ctor))), context);
- }
- return
- }
-
- // async component
- if (!Ctor.cid) {
- if (Ctor.resolved) {
- Ctor = Ctor.resolved;
- } else {
- Ctor = resolveAsyncComponent(Ctor, baseCtor, function () {
- // it's ok to queue this on every render because
- // $forceUpdate is buffered by the scheduler.
- context.$forceUpdate();
- });
- if (!Ctor) {
- // return nothing if this is indeed an async component
- // wait for the callback to trigger parent update.
- return
- }
- }
- }
-
- // resolve constructor options in case global mixins are applied after
- // component constructor creation
- resolveConstructorOptions(Ctor);
-
- data = data || {};
-
- // extract props
- var propsData = extractProps(data, Ctor);
-
- // functional component
- if (Ctor.options.functional) {
- return createFunctionalComponent(Ctor, propsData, data, context, children)
- }
-
- // extract listeners, since these needs to be treated as
- // child component listeners instead of DOM listeners
- var listeners = data.on;
- // replace with listeners with .native modifier
- data.on = data.nativeOn;
-
- if (Ctor.options.abstract) {
- // abstract components do not keep anything
- // other than props & listeners
- data = {};
- }
-
- // merge component management hooks onto the placeholder node
- mergeHooks(data);
-
- // return a placeholder vnode
- var name = Ctor.options.name || tag;
- var vnode = new VNode(
- ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
- data, undefined, undefined, undefined, context,
- { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }
- );
- return vnode
-}
-
-function createFunctionalComponent (
- Ctor,
- propsData,
- data,
- context,
- children
-) {
- var props = {};
- var propOptions = Ctor.options.props;
- if (propOptions) {
- for (var key in propOptions) {
- props[key] = validateProp(key, propOptions, propsData);
- }
- }
- // ensure the createElement function in functional components
- // gets a unique context - this is necessary for correct named slot check
- var _context = Object.create(context);
- var h = function (a, b, c, d) { return createElement(_context, a, b, c, d, true); };
- var vnode = Ctor.options.render.call(null, h, {
- props: props,
- data: data,
- parent: context,
- children: children,
- slots: function () { return resolveSlots(children, context); }
- });
- if (vnode instanceof VNode) {
- vnode.functionalContext = context;
- if (data.slot) {
- (vnode.data || (vnode.data = {})).slot = data.slot;
- }
- }
- return vnode
-}
-
-function createComponentInstanceForVnode (
- vnode, // we know it's MountedComponentVNode but flow doesn't
- parent, // activeInstance in lifecycle state
- parentElm,
- refElm
-) {
- var vnodeComponentOptions = vnode.componentOptions;
- var options = {
- _isComponent: true,
- parent: parent,
- propsData: vnodeComponentOptions.propsData,
- _componentTag: vnodeComponentOptions.tag,
- _parentVnode: vnode,
- _parentListeners: vnodeComponentOptions.listeners,
- _renderChildren: vnodeComponentOptions.children,
- _parentElm: parentElm || null,
- _refElm: refElm || null
+ // call the last hook...
+ vm._isDestroyed = true;
+ callHook(vm, 'destroyed');
+ // turn off all instance listeners.
+ vm.$off();
+ // remove __vue__ reference
+ if (vm.$el) {
+ vm.$el.__vue__ = null;
+ }
+ // invoke destroy hooks on current rendered tree
+ vm.__patch__(vm._vnode, null);
};
- // check inline-template render functions
- var inlineTemplate = vnode.data.inlineTemplate;
- if (inlineTemplate) {
- options.render = inlineTemplate.render;
- options.staticRenderFns = inlineTemplate.staticRenderFns;
- }
- return new vnodeComponentOptions.Ctor(options)
}
-function init$1 (
- vnode,
- hydrating,
- parentElm,
- refElm
-) {
- if (!vnode.child || vnode.child._isDestroyed) {
- var child = vnode.child = createComponentInstanceForVnode(
- vnode,
- activeInstance,
- parentElm,
- refElm
- );
- child.$mount(hydrating ? vnode.elm : undefined, hydrating);
- } else if (vnode.data.keepAlive) {
- // kept-alive components, treat as a patch
- var mountedNode = vnode; // work around flow
- prepatch(mountedNode, mountedNode);
+function callHook (vm, hook) {
+ var handlers = vm.$options[hook];
+ if (handlers) {
+ for (var i = 0, j = handlers.length; i < j; i++) {
+ handlers[i].call(vm);
+ }
+ }
+ if (vm._hasHookEvent) {
+ vm.$emit('hook:' + hook);
}
}
-function prepatch (
- oldVnode,
- vnode
-) {
- var options = vnode.componentOptions;
- var child = vnode.child = oldVnode.child;
- child._updateFromParent(
- options.propsData, // updated props
- options.listeners, // updated listeners
- vnode, // new parent vnode
- options.children // new children
- );
+/* */
+
+
+var queue = [];
+var has$1 = {};
+var circular = {};
+var waiting = false;
+var flushing = false;
+var index = 0;
+
+/**
+ * Reset the scheduler's state.
+ */
+function resetSchedulerState () {
+ queue.length = 0;
+ has$1 = {};
+ {
+ circular = {};
+ }
+ waiting = flushing = false;
}
-function insert (vnode) {
- if (!vnode.child._isMounted) {
- vnode.child._isMounted = true;
- callHook(vnode.child, 'mounted');
+/**
+ * Flush both queues and run the watchers.
+ */
+function flushSchedulerQueue () {
+ flushing = true;
+ var watcher, id, vm;
+
+ // Sort queue before flush.
+ // This ensures that:
+ // 1. Components are updated from parent to child. (because parent is always
+ // created before the child)
+ // 2. A component's user watchers are run before its render watcher (because
+ // user watchers are created before the render watcher)
+ // 3. If a component is destroyed during a parent component's watcher run,
+ // its watchers can be skipped.
+ queue.sort(function (a, b) { return a.id - b.id; });
+
+ // do not cache length because more watchers might be pushed
+ // as we run existing watchers
+ for (index = 0; index < queue.length; index++) {
+ watcher = queue[index];
+ id = watcher.id;
+ has$1[id] = null;
+ watcher.run();
+ // in dev build, check and stop circular updates.
+ if ("development" !== 'production' && has$1[id] != null) {
+ circular[id] = (circular[id] || 0) + 1;
+ if (circular[id] > config._maxUpdateCount) {
+ warn(
+ 'You may have an infinite update loop ' + (
+ watcher.user
+ ? ("in watcher with expression \"" + (watcher.expression) + "\"")
+ : "in a component render function."
+ ),
+ watcher.vm
+ );
+ break
+ }
+ }
}
- if (vnode.data.keepAlive) {
- vnode.child._inactive = false;
- callHook(vnode.child, 'activated');
+
+ // call updated hooks
+ index = queue.length;
+ while (index--) {
+ watcher = queue[index];
+ vm = watcher.vm;
+ if (vm._watcher === watcher && vm._isMounted) {
+ callHook(vm, 'updated');
+ }
+ }
+
+ // devtool hook
+ /* istanbul ignore if */
+ if (devtools && config.devtools) {
+ devtools.emit('flush');
}
+
+ resetSchedulerState();
}
-function destroy$1 (vnode) {
- if (!vnode.child._isDestroyed) {
- if (!vnode.data.keepAlive) {
- vnode.child.$destroy();
+/**
+ * Push a watcher into the watcher queue.
+ * Jobs with duplicate IDs will be skipped unless it's
+ * pushed when the queue is being flushed.
+ */
+function queueWatcher (watcher) {
+ var id = watcher.id;
+ if (has$1[id] == null) {
+ has$1[id] = true;
+ if (!flushing) {
+ queue.push(watcher);
} else {
- vnode.child._inactive = true;
- callHook(vnode.child, 'deactivated');
+ // if already flushing, splice the watcher based on its id
+ // if already past its id, it will be run next immediately.
+ var i = queue.length - 1;
+ while (i >= 0 && queue[i].id > watcher.id) {
+ i--;
+ }
+ queue.splice(Math.max(i, index) + 1, 0, watcher);
+ }
+ // queue the flush
+ if (!waiting) {
+ waiting = true;
+ nextTick(flushSchedulerQueue);
}
}
}
-function resolveAsyncComponent (
- factory,
- baseCtor,
- cb
-) {
- if (factory.requested) {
- // pool callbacks
- factory.pendingCallbacks.push(cb);
- } else {
- factory.requested = true;
- var cbs = factory.pendingCallbacks = [cb];
- var sync = true;
+/* */
- var resolve = function (res) {
- if (isObject(res)) {
- res = baseCtor.extend(res);
- }
- // cache resolved
- factory.resolved = res;
- // invoke callbacks only if this is not a synchronous resolve
- // (async resolves are shimmed as synchronous during SSR)
- if (!sync) {
- for (var i = 0, l = cbs.length; i < l; i++) {
- cbs[i](res);
- }
- }
- };
+var uid$2 = 0;
- var reject = function (reason) {
+/**
+ * A watcher parses an expression, collects dependencies,
+ * and fires callback when the expression value changes.
+ * This is used for both the $watch() api and directives.
+ */
+var Watcher = function Watcher (
+ vm,
+ expOrFn,
+ cb,
+ options
+) {
+ this.vm = vm;
+ vm._watchers.push(this);
+ // options
+ if (options) {
+ this.deep = !!options.deep;
+ this.user = !!options.user;
+ this.lazy = !!options.lazy;
+ this.sync = !!options.sync;
+ } else {
+ this.deep = this.user = this.lazy = this.sync = false;
+ }
+ this.cb = cb;
+ this.id = ++uid$2; // uid for batching
+ this.active = true;
+ this.dirty = this.lazy; // for lazy watchers
+ this.deps = [];
+ this.newDeps = [];
+ this.depIds = new _Set();
+ this.newDepIds = new _Set();
+ this.expression = expOrFn.toString();
+ // parse expression for getter
+ if (typeof expOrFn === 'function') {
+ this.getter = expOrFn;
+ } else {
+ this.getter = parsePath(expOrFn);
+ if (!this.getter) {
+ this.getter = function () {};
"development" !== 'production' && warn(
- "Failed to resolve async component: " + (String(factory)) +
- (reason ? ("\nReason: " + reason) : '')
+ "Failed watching path: \"" + expOrFn + "\" " +
+ 'Watcher only accepts simple dot-delimited paths. ' +
+ 'For full control, use a function instead.',
+ vm
);
- };
-
- var res = factory(resolve, reject);
-
- // handle promise
- if (res && typeof res.then === 'function' && !factory.resolved) {
- res.then(resolve, reject);
}
+ }
+ this.value = this.lazy
+ ? undefined
+ : this.get();
+};
- sync = false;
- // return in case resolved synchronously
- return factory.resolved
+/**
+ * Evaluate the getter, and re-collect dependencies.
+ */
+Watcher.prototype.get = function get () {
+ pushTarget(this);
+ var value = this.getter.call(this.vm, this.vm);
+ // "touch" every property so they are all tracked as
+ // dependencies for deep watching
+ if (this.deep) {
+ traverse(value);
}
-}
+ popTarget();
+ this.cleanupDeps();
+ return value
+};
-function extractProps (data, Ctor) {
- // we are only extracting raw values here.
- // validation and default values are handled in the child
- // component itself.
- var propOptions = Ctor.options.props;
- if (!propOptions) {
- return
- }
- var res = {};
- var attrs = data.attrs;
- var props = data.props;
- var domProps = data.domProps;
- if (attrs || props || domProps) {
- for (var key in propOptions) {
- var altKey = hyphenate(key);
- checkProp(res, props, key, altKey, true) ||
- checkProp(res, attrs, key, altKey) ||
- checkProp(res, domProps, key, altKey);
+/**
+ * Add a dependency to this directive.
+ */
+Watcher.prototype.addDep = function addDep (dep) {
+ var id = dep.id;
+ if (!this.newDepIds.has(id)) {
+ this.newDepIds.add(id);
+ this.newDeps.push(dep);
+ if (!this.depIds.has(id)) {
+ dep.addSub(this);
}
}
- return res
-}
+};
-function checkProp (
- res,
- hash,
- key,
- altKey,
- preserve
-) {
- if (hash) {
- if (hasOwn(hash, key)) {
- res[key] = hash[key];
- if (!preserve) {
- delete hash[key];
- }
- return true
- } else if (hasOwn(hash, altKey)) {
- res[key] = hash[altKey];
- if (!preserve) {
- delete hash[altKey];
- }
- return true
+/**
+ * Clean up for dependency collection.
+ */
+Watcher.prototype.cleanupDeps = function cleanupDeps () {
+ var this$1 = this;
+
+ var i = this.deps.length;
+ while (i--) {
+ var dep = this$1.deps[i];
+ if (!this$1.newDepIds.has(dep.id)) {
+ dep.removeSub(this$1);
}
}
- return false
-}
+ var tmp = this.depIds;
+ this.depIds = this.newDepIds;
+ this.newDepIds = tmp;
+ this.newDepIds.clear();
+ tmp = this.deps;
+ this.deps = this.newDeps;
+ this.newDeps = tmp;
+ this.newDeps.length = 0;
+};
-function mergeHooks (data) {
- if (!data.hook) {
- data.hook = {};
- }
- for (var i = 0; i < hooksToMerge.length; i++) {
- var key = hooksToMerge[i];
- var fromParent = data.hook[key];
- var ours = hooks[key];
- data.hook[key] = fromParent ? mergeHook$1(ours, fromParent) : ours;
+/**
+ * Subscriber interface.
+ * Will be called when a dependency changes.
+ */
+Watcher.prototype.update = function update () {
+ /* istanbul ignore else */
+ if (this.lazy) {
+ this.dirty = true;
+ } else if (this.sync) {
+ this.run();
+ } else {
+ queueWatcher(this);
}
-}
+};
-function mergeHook$1 (one, two) {
- return function (a, b, c, d) {
- one(a, b, c, d);
- two(a, b, c, d);
+/**
+ * Scheduler job interface.
+ * Will be called by the scheduler.
+ */
+Watcher.prototype.run = function run () {
+ if (this.active) {
+ var value = this.get();
+ if (
+ value !== this.value ||
+ // Deep watchers and watchers on Object/Arrays should fire even
+ // when the value is the same, because the value may
+ // have mutated.
+ isObject(value) ||
+ this.deep
+ ) {
+ // set new value
+ var oldValue = this.value;
+ this.value = value;
+ if (this.user) {
+ try {
+ this.cb.call(this.vm, value, oldValue);
+ } catch (e) {
+ /* istanbul ignore else */
+ if (config.errorHandler) {
+ config.errorHandler.call(null, e, this.vm);
+ } else {
+ "development" !== 'production' && warn(
+ ("Error in watcher \"" + (this.expression) + "\""),
+ this.vm
+ );
+ throw e
+ }
+ }
+ } else {
+ this.cb.call(this.vm, value, oldValue);
+ }
+ }
}
-}
+};
-/* */
+/**
+ * Evaluate the value of the watcher.
+ * This only gets called for lazy watchers.
+ */
+Watcher.prototype.evaluate = function evaluate () {
+ this.value = this.get();
+ this.dirty = false;
+};
-var SIMPLE_NORMALIZE = 1;
-var ALWAYS_NORMALIZE = 2;
+/**
+ * Depend on all deps collected by this watcher.
+ */
+Watcher.prototype.depend = function depend () {
+ var this$1 = this;
-// wrapper function for providing a more flexible interface
-// without getting yelled at by flow
-function createElement (
- context,
- tag,
- data,
- children,
- normalizationType,
- alwaysNormalize
-) {
- if (Array.isArray(data) || isPrimitive(data)) {
- normalizationType = children;
- children = data;
- data = undefined;
+ var i = this.deps.length;
+ while (i--) {
+ this$1.deps[i].depend();
}
- if (alwaysNormalize) { normalizationType = ALWAYS_NORMALIZE; }
- return _createElement(context, tag, data, children, normalizationType)
-}
+};
-function _createElement (
- context,
- tag,
- data,
- children,
- normalizationType
-) {
- if (data && data.__ob__) {
- "development" !== 'production' && warn(
- "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
- 'Always create fresh vnode data objects in each render!',
- context
- );
- return createEmptyVNode()
- }
- if (!tag) {
- // in case of component :is set to falsy value
- return createEmptyVNode()
- }
- // support single function children as default scoped slot
- if (Array.isArray(children) &&
- typeof children[0] === 'function') {
- data = data || {};
- data.scopedSlots = { default: children[0] };
- children.length = 0;
- }
- if (normalizationType === ALWAYS_NORMALIZE) {
- children = normalizeChildren(children);
- } else if (normalizationType === SIMPLE_NORMALIZE) {
- children = simpleNormalizeChildren(children);
- }
- var vnode, ns;
- if (typeof tag === 'string') {
- var Ctor;
- ns = config.getTagNamespace(tag);
- if (config.isReservedTag(tag)) {
- // platform built-in elements
- vnode = new VNode(
- config.parsePlatformTagName(tag), data, children,
- undefined, undefined, context
- );
- } else if ((Ctor = resolveAsset(context.$options, 'components', tag))) {
- // component
- vnode = createComponent(Ctor, data, context, children, tag);
- } else {
- // unknown or unlisted namespaced elements
- // check at runtime because it may get assigned a namespace when its
- // parent normalizes children
- vnode = new VNode(
- tag, data, children,
- undefined, undefined, context
- );
+/**
+ * Remove self from all dependencies' subscriber list.
+ */
+Watcher.prototype.teardown = function teardown () {
+ var this$1 = this;
+
+ if (this.active) {
+ // remove self from vm's watcher list
+ // this is a somewhat expensive operation so we skip it
+ // if the vm is being destroyed.
+ if (!this.vm._isBeingDestroyed) {
+ remove(this.vm._watchers, this);
}
- } else {
- // direct component options / constructor
- vnode = createComponent(tag, data, context, children);
- }
- if (vnode) {
- if (ns) { applyNS(vnode, ns); }
- return vnode
- } else {
- return createEmptyVNode()
+ var i = this.deps.length;
+ while (i--) {
+ this$1.deps[i].removeSub(this$1);
+ }
+ this.active = false;
}
+};
+
+/**
+ * Recursively traverse an object to evoke all converted
+ * getters, so that every nested property inside the object
+ * is collected as a "deep" dependency.
+ */
+var seenObjects = new _Set();
+function traverse (val) {
+ seenObjects.clear();
+ _traverse(val, seenObjects);
}
-function applyNS (vnode, ns) {
- vnode.ns = ns;
- if (vnode.tag === 'foreignObject') {
- // use default namespace inside foreignObject
+function _traverse (val, seen) {
+ var i, keys;
+ var isA = Array.isArray(val);
+ if ((!isA && !isObject(val)) || !Object.isExtensible(val)) {
return
}
- if (vnode.children) {
- for (var i = 0, l = vnode.children.length; i < l; i++) {
- var child = vnode.children[i];
- if (child.tag && !child.ns) {
- applyNS(child, ns);
- }
+ if (val.__ob__) {
+ var depId = val.__ob__.dep.id;
+ if (seen.has(depId)) {
+ return
}
+ seen.add(depId);
+ }
+ if (isA) {
+ i = val.length;
+ while (i--) { _traverse(val[i], seen); }
+ } else {
+ keys = Object.keys(val);
+ i = keys.length;
+ while (i--) { _traverse(val[keys[i]], seen); }
}
}
/* */
-function initRender (vm) {
- vm.$vnode = null; // the placeholder node in parent tree
- vm._vnode = null; // the root of the child tree
- vm._staticTrees = null;
- var parentVnode = vm.$options._parentVnode;
- var renderContext = parentVnode && parentVnode.context;
- vm.$slots = resolveSlots(vm.$options._renderChildren, renderContext);
- vm.$scopedSlots = {};
- // bind the createElement fn to this instance
- // so that we get proper render context inside it.
- // args order: tag, data, children, normalizationType, alwaysNormalize
- // internal version is used by render functions compiled from templates
- vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
- // normalization is always applied for the public version, used in
- // user-written render functions.
- vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
- if (vm.$options.el) {
- vm.$mount(vm.$options.el);
+function initState (vm) {
+ vm._watchers = [];
+ var opts = vm.$options;
+ if (opts.props) { initProps(vm, opts.props); }
+ if (opts.methods) { initMethods(vm, opts.methods); }
+ if (opts.data) {
+ initData(vm);
+ } else {
+ observe(vm._data = {}, true /* asRootData */);
}
+ if (opts.computed) { initComputed(vm, opts.computed); }
+ if (opts.watch) { initWatch(vm, opts.watch); }
}
-function renderMixin (Vue) {
- Vue.prototype.$nextTick = function (fn) {
- return nextTick(fn, this)
- };
-
- Vue.prototype._render = function () {
- var vm = this;
- var ref = vm.$options;
- var render = ref.render;
- var staticRenderFns = ref.staticRenderFns;
- var _parentVnode = ref._parentVnode;
-
- if (vm._isMounted) {
- // clone slot nodes on re-renders
- for (var key in vm.$slots) {
- vm.$slots[key] = cloneVNodes(vm.$slots[key]);
- }
- }
-
- if (_parentVnode && _parentVnode.data.scopedSlots) {
- vm.$scopedSlots = _parentVnode.data.scopedSlots;
- }
+var isReservedProp = { key: 1, ref: 1, slot: 1 };
- if (staticRenderFns && !vm._staticTrees) {
- vm._staticTrees = [];
- }
- // set parent vnode. this allows render functions to have access
- // to the data on the placeholder node.
- vm.$vnode = _parentVnode;
- // render self
- var vnode;
- try {
- vnode = render.call(vm._renderProxy, vm.$createElement);
- } catch (e) {
- /* istanbul ignore else */
- if (config.errorHandler) {
- config.errorHandler.call(null, e, vm);
- } else {
- {
- warn(("Error when rendering " + (formatComponentName(vm)) + ":"));
- }
- throw e
- }
- // return previous vnode to prevent render error causing blank component
- vnode = vm._vnode;
- }
- // return empty vnode in case the render function errored out
- if (!(vnode instanceof VNode)) {
- if ("development" !== 'production' && Array.isArray(vnode)) {
+function initProps (vm, props) {
+ var propsData = vm.$options.propsData || {};
+ var keys = vm.$options._propKeys = Object.keys(props);
+ var isRoot = !vm.$parent;
+ // root instance props should be converted
+ observerState.shouldConvert = isRoot;
+ var loop = function ( i ) {
+ var key = keys[i];
+ /* istanbul ignore else */
+ {
+ if (isReservedProp[key]) {
warn(
- 'Multiple root nodes returned from render function. Render function ' +
- 'should return a single root node.',
+ ("\"" + key + "\" is a reserved attribute and cannot be used as component prop."),
vm
);
}
- vnode = createEmptyVNode();
+ defineReactive$$1(vm, key, validateProp(key, props, propsData, vm), function () {
+ if (vm.$parent && !observerState.isSettingProps) {
+ warn(
+ "Avoid mutating a prop directly since the value will be " +
+ "overwritten whenever the parent component re-renders. " +
+ "Instead, use a data or computed property based on the prop's " +
+ "value. Prop being mutated: \"" + key + "\"",
+ vm
+ );
+ }
+ });
}
- // set parent
- vnode.parent = _parentVnode;
- return vnode
};
- // toString for mustaches
- Vue.prototype._s = _toString;
- // convert text to vnode
- Vue.prototype._v = createTextVNode;
- // number conversion
- Vue.prototype._n = toNumber;
- // empty vnode
- Vue.prototype._e = createEmptyVNode;
- // loose equal
- Vue.prototype._q = looseEqual;
- // loose indexOf
- Vue.prototype._i = looseIndexOf;
+ for (var i = 0; i < keys.length; i++) { loop( i ); }
+ observerState.shouldConvert = true;
+}
- // render static tree by index
- Vue.prototype._m = function renderStatic (
- index,
- isInFor
- ) {
- var tree = this._staticTrees[index];
- // if has already-rendered static tree and not inside v-for,
- // we can reuse the same tree by doing a shallow clone.
- if (tree && !isInFor) {
- return Array.isArray(tree)
- ? cloneVNodes(tree)
- : cloneVNode(tree)
+function initData (vm) {
+ var data = vm.$options.data;
+ data = vm._data = typeof data === 'function'
+ ? data.call(vm)
+ : data || {};
+ if (!isPlainObject(data)) {
+ data = {};
+ "development" !== 'production' && warn(
+ 'data functions should return an object:\n' +
+ 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
+ vm
+ );
+ }
+ // proxy data on instance
+ var keys = Object.keys(data);
+ var props = vm.$options.props;
+ var i = keys.length;
+ while (i--) {
+ if (props && hasOwn(props, keys[i])) {
+ "development" !== 'production' && warn(
+ "The data property \"" + (keys[i]) + "\" is already declared as a prop. " +
+ "Use prop default value instead.",
+ vm
+ );
+ } else {
+ proxy(vm, keys[i]);
}
- // otherwise, render a fresh tree.
- tree = this._staticTrees[index] = this.$options.staticRenderFns[index].call(this._renderProxy);
- markStatic(tree, ("__static__" + index), false);
- return tree
- };
+ }
+ // observe data
+ observe(data, true /* asRootData */);
+}
- // mark node as static (v-once)
- Vue.prototype._o = function markOnce (
- tree,
- index,
- key
- ) {
- markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
- return tree
- };
+var computedSharedDefinition = {
+ enumerable: true,
+ configurable: true,
+ get: noop,
+ set: noop
+};
- function markStatic (tree, key, isOnce) {
- if (Array.isArray(tree)) {
- for (var i = 0; i < tree.length; i++) {
- if (tree[i] && typeof tree[i] !== 'string') {
- markStaticNode(tree[i], (key + "_" + i), isOnce);
- }
- }
+function initComputed (vm, computed) {
+ for (var key in computed) {
+ /* istanbul ignore if */
+ if ("development" !== 'production' && key in vm) {
+ warn(
+ "existing instance property \"" + key + "\" will be " +
+ "overwritten by a computed property with the same name.",
+ vm
+ );
+ }
+ var userDef = computed[key];
+ if (typeof userDef === 'function') {
+ computedSharedDefinition.get = makeComputedGetter(userDef, vm);
+ computedSharedDefinition.set = noop;
} else {
- markStaticNode(tree, key, isOnce);
+ computedSharedDefinition.get = userDef.get
+ ? userDef.cache !== false
+ ? makeComputedGetter(userDef.get, vm)
+ : bind(userDef.get, vm)
+ : noop;
+ computedSharedDefinition.set = userDef.set
+ ? bind(userDef.set, vm)
+ : noop;
}
+ Object.defineProperty(vm, key, computedSharedDefinition);
}
+}
- function markStaticNode (node, key, isOnce) {
- node.isStatic = true;
- node.key = key;
- node.isOnce = isOnce;
+function makeComputedGetter (getter, owner) {
+ var watcher = new Watcher(owner, getter, noop, {
+ lazy: true
+ });
+ return function computedGetter () {
+ if (watcher.dirty) {
+ watcher.evaluate();
+ }
+ if (Dep.target) {
+ watcher.depend();
+ }
+ return watcher.value
}
+}
- // filter resolution helper
- Vue.prototype._f = function resolveFilter (id) {
- return resolveAsset(this.$options, 'filters', id, true) || identity
- };
-
- // render v-for
- Vue.prototype._l = function renderList (
- val,
- render
- ) {
- var ret, i, l, keys, key;
- if (Array.isArray(val) || typeof val === 'string') {
- ret = new Array(val.length);
- for (i = 0, l = val.length; i < l; i++) {
- ret[i] = render(val[i], i);
- }
- } else if (typeof val === 'number') {
- ret = new Array(val);
- for (i = 0; i < val; i++) {
- ret[i] = render(i + 1, i);
- }
- } else if (isObject(val)) {
- keys = Object.keys(val);
- ret = new Array(keys.length);
- for (i = 0, l = keys.length; i < l; i++) {
- key = keys[i];
- ret[i] = render(val[key], key, i);
- }
+function initMethods (vm, methods) {
+ for (var key in methods) {
+ vm[key] = methods[key] == null ? noop : bind(methods[key], vm);
+ if ("development" !== 'production' && methods[key] == null) {
+ warn(
+ "method \"" + key + "\" has an undefined value in the component definition. " +
+ "Did you reference the function correctly?",
+ vm
+ );
}
- return ret
- };
+ }
+}
- // renderSlot
- Vue.prototype._t = function (
- name,
- fallback,
- props,
- bindObject
- ) {
- var scopedSlotFn = this.$scopedSlots[name];
- if (scopedSlotFn) { // scoped slot
- props = props || {};
- if (bindObject) {
- extend(props, bindObject);
+function initWatch (vm, watch) {
+ for (var key in watch) {
+ var handler = watch[key];
+ if (Array.isArray(handler)) {
+ for (var i = 0; i < handler.length; i++) {
+ createWatcher(vm, key, handler[i]);
}
- return scopedSlotFn(props) || fallback
} else {
- var slotNodes = this.$slots[name];
- // warn duplicate slot usage
- if (slotNodes && "development" !== 'production') {
- slotNodes._rendered && warn(
- "Duplicate presence of slot \"" + name + "\" found in the same render tree " +
- "- this will likely cause render errors.",
- this
- );
- slotNodes._rendered = true;
- }
- return slotNodes || fallback
+ createWatcher(vm, key, handler);
}
- };
+ }
+}
- // apply v-bind object
- Vue.prototype._b = function bindProps (
- data,
- tag,
- value,
- asProp
- ) {
- if (value) {
- if (!isObject(value)) {
- "development" !== 'production' && warn(
- 'v-bind without argument expects an Object or Array value',
- this
- );
- } else {
- if (Array.isArray(value)) {
- value = toObject(value);
- }
- for (var key in value) {
- if (key === 'class' || key === 'style') {
- data[key] = value[key];
- } else {
- var hash = asProp || config.mustUseProp(tag, key)
- ? data.domProps || (data.domProps = {})
- : data.attrs || (data.attrs = {});
- hash[key] = value[key];
- }
- }
- }
- }
- return data
+function createWatcher (vm, key, handler) {
+ var options;
+ if (isPlainObject(handler)) {
+ options = handler;
+ handler = handler.handler;
+ }
+ if (typeof handler === 'string') {
+ handler = vm[handler];
+ }
+ vm.$watch(key, handler, options);
+}
+
+function stateMixin (Vue) {
+ // flow somehow has problems with directly declared definition object
+ // when using Object.defineProperty, so we have to procedurally build up
+ // the object here.
+ var dataDef = {};
+ dataDef.get = function () {
+ return this._data
};
+ {
+ dataDef.set = function (newData) {
+ warn(
+ 'Avoid replacing instance root $data. ' +
+ 'Use nested data properties instead.',
+ this
+ );
+ };
+ }
+ Object.defineProperty(Vue.prototype, '$data', dataDef);
- // check v-on keyCodes
- Vue.prototype._k = function checkKeyCodes (
- eventKeyCode,
- key,
- builtInAlias
+ Vue.prototype.$set = set$1;
+ Vue.prototype.$delete = del;
+
+ Vue.prototype.$watch = function (
+ expOrFn,
+ cb,
+ options
) {
- var keyCodes = config.keyCodes[key] || builtInAlias;
- if (Array.isArray(keyCodes)) {
- return keyCodes.indexOf(eventKeyCode) === -1
- } else {
- return keyCodes !== eventKeyCode
+ var vm = this;
+ options = options || {};
+ options.user = true;
+ var watcher = new Watcher(vm, expOrFn, cb, options);
+ if (options.immediate) {
+ cb.call(vm, watcher.value);
+ }
+ return function unwatchFn () {
+ watcher.teardown();
}
};
}
-function resolveSlots (
- children,
- context
-) {
- var slots = {};
- if (!children) {
- return slots
- }
- var defaultSlot = [];
- var name, child;
- for (var i = 0, l = children.length; i < l; i++) {
- child = children[i];
- // named slots should only be respected if the vnode was rendered in the
- // same context.
- if ((child.context === context || child.functionalContext === context) &&
- child.data && (name = child.data.slot)) {
- var slot = (slots[name] || (slots[name] = []));
- if (child.tag === 'template') {
- slot.push.apply(slot, child.children);
- } else {
- slot.push(child);
+function proxy (vm, key) {
+ if (!isReserved(key)) {
+ Object.defineProperty(vm, key, {
+ configurable: true,
+ enumerable: true,
+ get: function proxyGetter () {
+ return vm._data[key]
+ },
+ set: function proxySetter (val) {
+ vm._data[key] = val;
}
- } else {
- defaultSlot.push(child);
- }
- }
- // ignore single whitespace
- if (defaultSlot.length && !(
- defaultSlot.length === 1 &&
- (defaultSlot[0].text === ' ' || defaultSlot[0].isComment)
- )) {
- slots.default = defaultSlot;
+ });
}
- return slots
}
/* */
@@ -7191,6 +7201,10 @@ function insertBefore (node, target, before) {
}
function removeChild (node, child) {
+ if (child.nodeType === 3) {
+ node.setAttr('value', '');
+ return
+ }
node.removeChild(child);
}
@@ -8355,7 +8369,7 @@ function createInstance (
var weexInstanceVar = {
config: config,
document: document,
- require: moduleGetter
+ requireModule: moduleGetter
};
Object.freeze(weexInstanceVar);
@@ -13423,8 +13437,8 @@ function init$5 (app, code, data, services) {
config: app.options,
define: bundleDefine,
bootstrap: bundleBootstrap,
- require: bundleDocument,
- document: bundleRequireModule,
+ requireModule: bundleRequireModule,
+ document: bundleDocument,
Vm: bundleVm
};
@@ -13443,7 +13457,7 @@ function init$5 (app, code, data, services) {
functionBody = code.toString();
}
// wrap IFFE and use strict mode
- functionBody = "(function(global){\n\n\"use strict\";\n\n " + functionBody + " \n\n})(Object.create(this))";
+ functionBody = "(function(global){\n\n " + functionBody + " \n\n})(Object.create(this))";
// run code and get result
var WXEnvironment = global.WXEnvironment;
@@ -13485,6 +13499,7 @@ function init$5 (app, code, data, services) {
var globalObjects = Object.assign({
define: bundleDefine,
require: bundleRequire,
+ document: bundleDocument,
bootstrap: bundleBootstrap,
register: bundleRegister,
render: bundleRender,
@@ -13939,16 +13954,20 @@ module.exports = /******/ (function(modules) { // webpackBootstrap
\**************************************************/
/***/ function(module, exports, __webpack_require__) {
- 'use strict';
-
+ "use strict";
+
Object.defineProperty(exports, "__esModule", {
value: true
});
-
+
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) { break; } } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) { _i["return"](); } } finally { if (_d) { throw _e; } } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
-
+
+ var _extends = Object.assign || function (target) {
+ var arguments$1 = arguments;
+ for (var i = 1; i < arguments.length; i++) { var source = arguments$1[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
+
exports.getInstance = getInstance;
exports.init = init;
exports.registerComponents = registerComponents;
@@ -13959,28 +13978,33 @@ module.exports = /******/ (function(modules) { // webpackBootstrap
exports.destroyInstance = destroyInstance;
exports.getRoot = getRoot;
exports.receiveTasks = receiveTasks;
-
+
var _builtin = __webpack_require__(/*! ./builtin */ 1);
-
+
var _emitter = __webpack_require__(/*! ./emitter */ 3);
-
+
var _emitter2 = _interopRequireDefault(_emitter);
-
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
- function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
-
+
var NativeComponents = {};
var NativeModules = {};
-
+
var Document = void 0;
var Element = void 0;
var Comment = void 0;
var Listener = void 0;
+ var TaskCenter = void 0;
+ var CallbackManager = void 0;
var sendTasks = void 0;
-
+
+ var MODULE_NAME_PREFIX = '@weex-module/';
+ var MODAL_MODULE = MODULE_NAME_PREFIX + 'modal';
+ var DOM_MODULE = MODULE_NAME_PREFIX + 'dom';
+ var NAVIGATOR_MODULE = MODULE_NAME_PREFIX + 'navigator';
+ // Instance hub
var instances = {};
-
+
function dispatchEventToInstance(event, targetOrigin) {
var instance;
for (var i in instances) {
@@ -13994,7 +14018,7 @@ module.exports = /******/ (function(modules) { // webpackBootstrap
}
}
}
-
+
function getInstance(instanceId) {
var instance = instances[instanceId];
if (!instance) {
@@ -14002,15 +14026,17 @@ module.exports = /******/ (function(modules) { // webpackBootstrap
}
return instance;
}
-
- function init(cfg) {
- Document = cfg.Document;
- Element = cfg.Element;
- Comment = cfg.Comment;
- Listener = cfg.Listener;
- sendTasks = cfg.sendTasks;
+
+ function init(config) {
+ Document = config.Document;
+ Element = config.Element;
+ Comment = config.Comment;
+ Listener = config.Listener;
+ TaskCenter = config.TaskCenter;
+ CallbackManager = config.CallbackManager;
+ sendTasks = config.sendTasks;
}
-
+
/**
* register the name of each native component
* @param {array} components array of name
@@ -14030,17 +14056,15 @@ module.exports = /******/ (function(modules) { // webpackBootstrap
});
}
}
-
+
/**
* register the name and methods of each api
* @param {object} apis a object of apis
*/
- function registerMethods(apis) {
- if ((typeof apis === 'undefined' ? 'undefined' : _typeof(apis)) === 'object') {
- // Noop
- }
- }
-
+ function registerMethods(apis) {}
+ // Noop
+
+
/**
* register the name and methods of each module
* @param {object} modules a object of modules
@@ -14054,63 +14078,49 @@ module.exports = /******/ (function(modules) { // webpackBootstrap
}
}
}
-
- function genBuiltinModules(modules,
- // ES
- Promise,
- // W3C
- window, screen, document, navigator, location, fetch, Headers, Response, Request, URL, URLSearchParams, setTimeout, clearTimeout, setInterval, clearInterval, requestAnimationFrame, cancelAnimationFrame, alert,
- // Weex
- __weex_define__, __weex_require__, __weex_options__, __weex_data__, __weex_downgrade__, __weex_document__) {
- for (var moduleName in _builtin.BuiltinModulesFactory) {
+
+ function genBuiltinModules(modules, moduleFactories,
<TRUNCATED>
[49/50] [abbrv] incubator-weex git commit: * [android] modify android
inspector version
Posted by ji...@apache.org.
* [android] modify android inspector version
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/5104026a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/5104026a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/5104026a
Branch: refs/heads/master
Commit: 5104026a89f836daee6779c6c6422d917e2e0031
Parents: 7b8cc46
Author: sospartan <so...@gmail.com>
Authored: Wed Jan 11 17:48:20 2017 +0800
Committer: sospartan <so...@gmail.com>
Committed: Wed Jan 11 17:48:20 2017 +0800
----------------------------------------------------------------------
android/playground/app/build.gradle | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5104026a/android/playground/app/build.gradle
----------------------------------------------------------------------
diff --git a/android/playground/app/build.gradle b/android/playground/app/build.gradle
index 535f7a9..54aa9b5 100755
--- a/android/playground/app/build.gradle
+++ b/android/playground/app/build.gradle
@@ -79,7 +79,6 @@ dependencies {
androidTestCompile 'com.squareup.picasso:picasso:2.5.2'
androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
- //compile 'com.taobao.android:weex_sdk:0.4.+'
/*source dependency*/
compile project(':weex_sdk')
debugCompile project(':weex_debug')
@@ -106,7 +105,6 @@ dependencies {
compile 'com.android.support:support-annotations:23.2.1'
compile 'com.jakewharton.scalpel:scalpel:1.1.2'
compile 'com.taobao.android.weex_inspection:urlconnection_interceptor:1.0.0'
- //compile 'com.google.android.gms:play-services-appindexing:8.1.0'
compile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2'
- //compile 'com.taobao.android:weex_inspector:0.8.0.0@aar'
+ compile 'com.taobao.android:weex_inspector:0.10.0.3@aar'
}
[44/50] [abbrv] incubator-weex git commit: Merge branch
'ios-feature-20170118' into dev-release095
Posted by ji...@apache.org.
Merge branch 'ios-feature-20170118' into dev-release095
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/1e837f38
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/1e837f38
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/1e837f38
Branch: refs/heads/master
Commit: 1e837f38a967798a2f3f6d948b2eb727470be5c9
Parents: 4d9dcc1 50641f1
Author: sospartan <so...@gmail.com>
Authored: Wed Jan 11 17:01:16 2017 +0800
Committer: sospartan <so...@gmail.com>
Committed: Wed Jan 11 17:01:16 2017 +0800
----------------------------------------------------------------------
examples/component/slider-neighbor/index.we | 74 ++++
.../slider-neighbor/silder-neighbor.we | 75 ----
examples/index.we | 2 +
examples/module/websocket-demo.we | 112 +++++
.../WeexDemo.xcodeproj/project.pbxproj | 73 ++--
.../contents.xcworkspacedata | 7 +
.../xcshareddata/xcschemes/WeexDemo.xcscheme | 2 +-
ios/playground/WeexDemo/AppDelegate.m | 4 +-
ios/playground/WeexDemo/Scanner/WXScannerVC.m | 2 +-
ios/playground/WeexDemo/WXDemoViewController.m | 6 +
ios/playground/WeexDemo/WXSyncTestModule.h | 14 +
ios/playground/WeexDemo/WXSyncTestModule.m | 38 ++
ios/sdk/WeexSDK.podspec | 12 +-
ios/sdk/WeexSDK.xcodeproj/project.pbxproj | 192 +++++++--
ios/sdk/WeexSDK/Resources/main.js | 14 +-
ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h | 15 +
ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.m | 90 ++++
.../WeexSDK/Sources/Bridge/WXBridgeContext.h | 11 +-
.../WeexSDK/Sources/Bridge/WXBridgeContext.m | 127 ++++--
ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h | 20 +
ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.m | 35 ++
.../WeexSDK/Sources/Bridge/WXComponentMethod.h | 21 +
.../WeexSDK/Sources/Bridge/WXComponentMethod.m | 51 +++
.../Sources/Bridge/WXDebugLoggerBridge.m | 5 +
ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m | 40 +-
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h | 28 ++
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 99 +++++
.../Sources/Component/WXCanvasComponent.m | 16 +-
.../WeexSDK/Sources/Component/WXCellComponent.h | 4 +-
.../WeexSDK/Sources/Component/WXCellComponent.m | 10 +
.../Component/WXComponent+GradientColor.h | 20 +
.../Component/WXComponent+GradientColor.m | 116 +++++
.../Sources/Component/WXComponent_internal.h | 20 +-
.../Sources/Component/WXImageComponent.m | 56 ++-
.../Sources/Component/WXIndicatorComponent.m | 5 +-
.../WeexSDK/Sources/Component/WXListComponent.m | 48 ++-
.../Sources/Component/WXScrollerComponent.h | 2 +
.../Sources/Component/WXScrollerComponent.m | 18 +-
.../Sources/Component/WXSliderComponent.m | 48 ++-
.../Component/WXSliderNeighborComponent.m | 103 ++---
.../Sources/Component/WXTextAreaComponent.m | 199 +++++----
.../WeexSDK/Sources/Component/WXTextComponent.m | 40 +-
.../Sources/Component/WXTextInputComponent.m | 262 ++++++------
ios/sdk/WeexSDK/Sources/Component/WXTransform.h | 3 +
ios/sdk/WeexSDK/Sources/Component/WXTransform.m | 25 +-
.../Sources/Component/WXVideoComponent.m | 2 +-
.../Sources/Controller/WXBaseViewController.m | 48 ++-
ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m | 46 +-
.../Sources/Display/WXComponent+Display.m | 40 +-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h | 51 ++-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m | 62 ++-
ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h | 5 +-
.../WeexSDK/Sources/Events/WXComponent+Events.m | 141 ++++++-
.../Sources/Handler/WXNetworkDefaultImpl.h | 14 -
.../Sources/Handler/WXNetworkDefaultImpl.m | 111 -----
.../WeexSDK/Sources/Layout/WXComponent+Layout.m | 87 ++--
.../WeexSDK/Sources/Loader/WXResourceLoader.h | 30 ++
.../WeexSDK/Sources/Loader/WXResourceLoader.m | 174 ++++++++
.../WeexSDK/Sources/Loader/WXWebSocketLoader.h | 24 ++
.../WeexSDK/Sources/Loader/WXWebSocketLoader.m | 131 ++++++
.../WeexSDK/Sources/Manager/WXBridgeManager.h | 29 +-
.../WeexSDK/Sources/Manager/WXBridgeManager.m | 87 +++-
.../Sources/Manager/WXComponentFactory.m | 6 +-
.../Sources/Manager/WXComponentManager.h | 12 +-
.../Sources/Manager/WXComponentManager.m | 58 +--
.../Sources/Manager/WXDatePickerManager.h | 1 -
.../Sources/Manager/WXDatePickerManager.m | 58 +--
.../WeexSDK/Sources/Manager/WXHandlerFactory.m | 1 -
.../Sources/Manager/WXInvocationConfig.h | 6 +-
.../Sources/Manager/WXInvocationConfig.m | 100 +----
.../WeexSDK/Sources/Manager/WXModuleFactory.h | 4 +-
.../WeexSDK/Sources/Manager/WXModuleFactory.m | 32 +-
.../WeexSDK/Sources/Manager/WXModuleManager.h | 16 -
.../WeexSDK/Sources/Manager/WXModuleManager.m | 111 -----
ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m | 11 +-
ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h | 10 +-
ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.m | 19 +-
.../WeexSDK/Sources/Manager/WXServiceFactory.h | 38 ++
.../WeexSDK/Sources/Manager/WXServiceFactory.m | 102 +++++
ios/sdk/WeexSDK/Sources/Model/WXBridgeMethod.h | 18 +-
ios/sdk/WeexSDK/Sources/Model/WXBridgeMethod.m | 85 +++-
ios/sdk/WeexSDK/Sources/Model/WXComponent.h | 10 +
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 39 +-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h | 56 ++-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 421 +++++++++++++------
.../Sources/Model/WXSDKInstance_private.h | 8 +
.../WeexSDK/Sources/Module/WXAnimationModule.m | 26 +-
ios/sdk/WeexSDK/Sources/Module/WXDomModule.m | 31 +-
.../Sources/Module/WXGlobalEventModule.m | 1 +
ios/sdk/WeexSDK/Sources/Module/WXMetaModule.h | 14 +
ios/sdk/WeexSDK/Sources/Module/WXMetaModule.m | 40 ++
.../WeexSDK/Sources/Module/WXNavigatorModule.m | 28 +-
ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h | 2 +-
ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m | 220 +++++-----
.../WeexSDK/Sources/Module/WXWebSocketModule.h | 15 +
.../WeexSDK/Sources/Module/WXWebSocketModule.m | 137 ++++++
ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h | 2 +
.../WeexSDK/Sources/Network/WXResourceRequest.h | 35 ++
.../WeexSDK/Sources/Network/WXResourceRequest.m | 57 +++
.../Sources/Network/WXResourceRequestHandler.h | 45 ++
.../WXResourceRequestHandlerDefaultImpl.h | 15 +
.../WXResourceRequestHandlerDefaultImpl.m | 90 ++++
.../Sources/Network/WXResourceResponse.h | 14 +
.../Sources/Network/WXResourceResponse.m | 14 +
.../WeexSDK/Sources/Protocol/WXBridgeProtocol.h | 28 +-
.../Sources/Protocol/WXNavigationProtocol.h | 31 +-
.../Sources/Protocol/WXNetworkProtocol.h | 1 +
.../Sources/Protocol/WXURLRewriteProtocol.h | 10 +-
ios/sdk/WeexSDK/Sources/Utility/WXConvert.h | 22 +-
ios/sdk/WeexSDK/Sources/Utility/WXConvert.m | 87 +++-
ios/sdk/WeexSDK/Sources/Utility/WXDefine.h | 27 +-
ios/sdk/WeexSDK/Sources/Utility/WXType.h | 13 +-
ios/sdk/WeexSDK/Sources/Utility/WXUtility.h | 57 ++-
ios/sdk/WeexSDK/Sources/Utility/WXUtility.m | 119 ++++--
.../View/WXComponent+PseudoClassManagement.h | 66 +++
.../View/WXComponent+PseudoClassManagement.m | 144 +++++++
.../Sources/View/WXComponent+ViewManagement.m | 14 +-
ios/sdk/WeexSDK/Sources/View/WXView.m | 2 +-
.../Sources/WebSocket/SRWebSocket+Weex.h | 18 +
.../Sources/WebSocket/SRWebSocket+Weex.m | 36 ++
.../Sources/WebSocket/WXWebSocketDefaultImpl.h | 14 +
.../Sources/WebSocket/WXWebSocketDefaultImpl.m | 110 +++++
.../Sources/WebSocket/WXWebSocketHandler.h | 26 ++
ios/sdk/WeexSDK/Sources/WeexSDK.h | 1 +
ios/sdk/WeexSDKTests/TestSupportUtils.m | 2 +-
ios/sdk/WeexSDKTests/WXBridgeMethodTests.m | 24 +-
ios/sdk/WeexSDKTests/WXNetworkTests.m | 109 -----
ios/sdk/WeexSDKTests/WXRootViewTests.m | 4 +-
ios/sdk/WeexSDKTests/WXSDKEngineTests.m | 15 +-
ios/sdk/WeexSDKTests/WXSDKManagerTests.m | 4 -
ios/sdk/WeexSDKTests/WXStreamModuleTests.m | 4 +-
ios/sdk/WeexSDKTests/WXURLRewriteTests.m | 4 +-
132 files changed, 4549 insertions(+), 1697 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1e837f38/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
----------------------------------------------------------------------
[08/50] [abbrv] incubator-weex git commit: * [ios] bugfix call
renderFinish
Posted by ji...@apache.org.
* [ios] bugfix call renderFinish
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/1fb2e0a5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/1fb2e0a5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/1fb2e0a5
Branch: refs/heads/master
Commit: 1fb2e0a5e923e4f77e7b0282f04d596934b7b478
Parents: 35e0084
Author: acton393 <zh...@gmail.com>
Authored: Tue Jan 10 21:34:47 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Tue Jan 10 21:34:47 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1fb2e0a5/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
index b2a47c8..5c070ed 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
@@ -298,6 +298,7 @@ static dispatch_queue_t WXImageUpdateQueue;
}
if ([strongSelf isViewLoaded]) {
+ strongSelf.imageDownloadFinish = YES;
((UIImageView *)strongSelf.view).image = image;
[strongSelf notifyRenderFinish];
}
[47/50] [abbrv] incubator-weex git commit: Android feature
urlconnection interceptor (#92)
Posted by ji...@apache.org.
Android feature urlconnection interceptor (#92)
* * [android] support inspection for default http adapter
* * [android] support inspection for default http adapter
* * [android] ignore inspector temporary
* + [android] add delegate
* * [android] for codacy
* * [android] add delegate interface
* * [android] do nothing
* * [android] add static nop delegate
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/7b8cc461
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/7b8cc461
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/7b8cc461
Branch: refs/heads/master
Commit: 7b8cc46167cb695e6b707f95193194f9a1129290
Parents: dc1cbae
Author: moxun <fu...@foxmail.com>
Authored: Fri Dec 30 11:49:11 2016 +0800
Committer: sospartan <so...@gmail.com>
Committed: Wed Jan 11 17:43:15 2017 +0800
----------------------------------------------------------------------
android/playground/app/build.gradle | 3 +-
.../extend/adapter/InterceptWXHttpAdapter.java | 63 ++++++++++++++++++++
.../weex/adapter/DefaultWXHttpAdapter.java | 52 +++++++++++++++-
3 files changed, 114 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7b8cc461/android/playground/app/build.gradle
----------------------------------------------------------------------
diff --git a/android/playground/app/build.gradle b/android/playground/app/build.gradle
index a29a04b..535f7a9 100755
--- a/android/playground/app/build.gradle
+++ b/android/playground/app/build.gradle
@@ -105,7 +105,8 @@ dependencies {
compile 'com.android.support:design:23.2.1'
compile 'com.android.support:support-annotations:23.2.1'
compile 'com.jakewharton.scalpel:scalpel:1.1.2'
+ compile 'com.taobao.android.weex_inspection:urlconnection_interceptor:1.0.0'
//compile 'com.google.android.gms:play-services-appindexing:8.1.0'
compile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2'
- compile 'com.taobao.android:weex_inspector:0.8.0.0@aar'
+ //compile 'com.taobao.android:weex_inspector:0.8.0.0@aar'
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7b8cc461/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java
new file mode 100644
index 0000000..8bf929d
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java
@@ -0,0 +1,63 @@
+package com.alibaba.weex.extend.adapter;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import com.taobao.weex.adapter.DefaultWXHttpAdapter;
+import com.taobao.weex.urlconnection.ByteArrayRequestEntity;
+import com.taobao.weex.urlconnection.SimpleRequestEntity;
+import com.taobao.weex.urlconnection.WeexURLConnectionManager;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+
+/**
+ * Created by moxun on 16/12/29.
+ */
+
+public class InterceptWXHttpAdapter extends DefaultWXHttpAdapter {
+
+ private IEventReporterDelegate eventReporterDelegate;
+
+ @NonNull
+ @Override
+ public IEventReporterDelegate getEventReporterDelegate() {
+ if (eventReporterDelegate == null) {
+ eventReporterDelegate = new IEventReporterDelegate() {
+
+ WeexURLConnectionManager manager = new WeexURLConnectionManager(null);
+
+ @Override
+ public void preConnect(HttpURLConnection connection, @Nullable String body) {
+ SimpleRequestEntity requestEntity = null;
+ if (body != null) {
+ requestEntity = new ByteArrayRequestEntity(body.getBytes());
+ }
+
+ manager.preConnect(connection, requestEntity);
+ }
+
+ @Override
+ public void postConnect() {
+ try {
+ manager.postConnect();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public InputStream interpretResponseStream(@Nullable InputStream inputStream) {
+ return manager.interpretResponseStream(inputStream);
+ }
+
+ @Override
+ public void httpExchangeFailed(IOException e) {
+ manager.httpExchangeFailed(e);
+ }
+ };
+ }
+ return eventReporterDelegate;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7b8cc461/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java
index fac3053..0a20a33 100755
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java
@@ -204,13 +204,19 @@
*/
package com.taobao.weex.adapter;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.taobao.weex.common.WXRequest;
import com.taobao.weex.common.WXResponse;
-import com.taobao.weex.utils.WXLogUtils;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
@@ -222,6 +228,7 @@ import java.util.concurrent.Executors;
public class DefaultWXHttpAdapter implements IWXHttpAdapter {
+ private static final IEventReporterDelegate DEFAULT_DELEGATE = new NOPEventReportDelegate();
private ExecutorService mExecutorService;
private void execute(Runnable runnable){
@@ -240,17 +247,22 @@ public class DefaultWXHttpAdapter implements IWXHttpAdapter {
@Override
public void run() {
WXResponse response = new WXResponse();
+ IEventReporterDelegate reporter = getEventReporterDelegate();
try {
HttpURLConnection connection = openConnection(request, listener);
+ reporter.preConnect(connection, request.body);
Map<String,List<String>> headers = connection.getHeaderFields();
int responseCode = connection.getResponseCode();
if(listener != null){
listener.onHeadersReceived(responseCode,headers);
}
+ reporter.postConnect();
response.statusCode = String.valueOf(responseCode);
if (responseCode >= 200 && responseCode<=299) {
- response.originalData = readInputStreamAsBytes(connection.getInputStream(), listener);
+ InputStream rawStream = connection.getInputStream();
+ rawStream = reporter.interpretResponseStream(rawStream);
+ response.originalData = readInputStreamAsBytes(rawStream, listener);
} else {
response.errorMsg = readInputStream(connection.getErrorStream(), listener);
}
@@ -265,6 +277,9 @@ public class DefaultWXHttpAdapter implements IWXHttpAdapter {
if(listener!=null){
listener.onHttpFinish(response);
}
+ if (e instanceof IOException) {
+ reporter.httpExchangeFailed((IOException) e);
+ }
}
}
});
@@ -366,5 +381,36 @@ public class DefaultWXHttpAdapter implements IWXHttpAdapter {
return (HttpURLConnection) url.openConnection();
}
+ public @NonNull IEventReporterDelegate getEventReporterDelegate() {
+ return DEFAULT_DELEGATE;
+ }
+
+ public interface IEventReporterDelegate {
+ void preConnect(HttpURLConnection connection, @Nullable String body);
+ void postConnect();
+ InputStream interpretResponseStream(@Nullable InputStream inputStream);
+ void httpExchangeFailed(IOException e);
+ }
+
+ private static class NOPEventReportDelegate implements IEventReporterDelegate {
+ @Override
+ public void preConnect(HttpURLConnection connection, @Nullable String body) {
+ //do nothing
+ }
+
+ @Override
+ public void postConnect() {
+ //do nothing
+ }
+
+ @Override
+ public InputStream interpretResponseStream(@Nullable InputStream inputStream) {
+ return inputStream;
+ }
+ @Override
+ public void httpExchangeFailed(IOException e) {
+ //do nothing
+ }
+ }
}
[21/50] [abbrv] incubator-weex git commit: * [ios] notify component
readyToShow
Posted by ji...@apache.org.
* [ios] notify component readyToShow
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/83bcadeb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/83bcadeb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/83bcadeb
Branch: refs/heads/master
Commit: 83bcadeb52c0fdc4a98f91193b1494ec99944a85
Parents: a1baf89
Author: acton393 <zh...@gmail.com>
Authored: Wed Jan 11 11:12:37 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Jan 11 11:12:37 2017 +0800
----------------------------------------------------------------------
.../Sources/Component/WXImageComponent.m | 23 +++++++-------------
.../WeexSDK/Sources/Component/WXTextComponent.m | 2 ++
.../Sources/Display/WXComponent+Display.m | 6 +----
.../Sources/Manager/WXComponentManager.m | 2 ++
ios/sdk/WeexSDK/Sources/Model/WXComponent.h | 2 +-
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 6 +++--
6 files changed, 18 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83bcadeb/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
index 5c070ed..569c900 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
@@ -225,7 +225,7 @@ static dispatch_queue_t WXImageUpdateQueue;
dispatch_async(dispatch_get_main_queue(), ^{
self.layer.contents = nil;
weakSelf.imageDownloadFinish = YES;
- [weakSelf notifyRenderFinish];
+ [weakSelf readyToShow];
});
}
});
@@ -249,7 +249,7 @@ static dispatch_queue_t WXImageUpdateQueue;
downloadFailedBlock(placeholderSrc,error);
if ([strongSelf isViewLoaded] && !viewImage) {
((UIImageView *)(strongSelf.view)).image = nil;
- [self notifyRenderFinish];
+ [self readyToShow];
}
return;
}
@@ -260,7 +260,7 @@ static dispatch_queue_t WXImageUpdateQueue;
if ([strongSelf isViewLoaded] && !viewImage) {
((UIImageView *)strongSelf.view).image = image;
weakSelf.imageDownloadFinish = YES;
- [self notifyRenderFinish];
+ [self readyToShow];
}
});
}];
@@ -289,7 +289,7 @@ static dispatch_queue_t WXImageUpdateQueue;
}
if (error) {
downloadFailedBlock(imageSrc, error);
- [strongSelf notifyRenderFinish];
+ [strongSelf readyToShow];
return ;
}
@@ -300,7 +300,7 @@ static dispatch_queue_t WXImageUpdateQueue;
if ([strongSelf isViewLoaded]) {
strongSelf.imageDownloadFinish = YES;
((UIImageView *)strongSelf.view).image = image;
- [strongSelf notifyRenderFinish];
+ [strongSelf readyToShow];
}
});
}];
@@ -308,18 +308,11 @@ static dispatch_queue_t WXImageUpdateQueue;
}
}
-- (void)renderFinish
+- (void)readyToShow
{
// when image download completely (success or failed)
- if (_imageDownloadFinish) {
- [super renderFinish];
- }
-}
-
-- (void)notifyRenderFinish
-{
- if (self.weexInstance.trackComponent) {
- [self renderFinish];
+ if (self.weexInstance.trackComponent && _imageDownloadFinish) {
+ [super readyToShow];
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83bcadeb/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 64958ae..960e253 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
@@ -406,6 +406,8 @@ do {\
pthread_mutex_unlock(&_textStorageMutex);
}
+ [self readyToShow]; // notify super component
+
return textStorage;
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83bcadeb/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m b/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
index cf8478d..b2fcb54 100644
--- a/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
+++ b/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
@@ -67,11 +67,7 @@
- (WXDisplayCompeletionBlock)displayCompeletionBlock
{
- return ^(CALayer *layer, BOOL finished) {
- if (self.weexInstance.trackComponent) {
- [self renderFinish];
- }
- };
+ return nil;
}
#pragma mark Private
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83bcadeb/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
index 475a367..152d671 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
@@ -374,6 +374,7 @@ static css_node_t * rootNodeGetChild(void *context, int i)
[self filterStyles:styles normalStyles:normalStyles resetStyles:resetStyles];
[component _updateStylesOnComponentThread:normalStyles resetStyles:resetStyles isUpdateStyles:isUpdateStyles];
[self _addUITask:^{
+ [component readyToShow];
[component _updateStylesOnMainThread:normalStyles resetStyles:resetStyles];
}];
}
@@ -388,6 +389,7 @@ static css_node_t * rootNodeGetChild(void *context, int i)
[component _updateAttributesOnComponentThread:attributes];
[self _addUITask:^{
+ [component readyToShow];
[component _updateAttributesOnMainThread:attributes];
}];
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83bcadeb/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.h b/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
index 63b3d85..c02eb9a 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
@@ -343,7 +343,7 @@ typedef void(^WXDisplayCompeletionBlock)(CALayer *layer, BOOL finished);
/**
* renderFinish
*/
-- (void)renderFinish;
+- (void)readyToShow;
/**
* @abstract Return a block to be called while drawing is finished.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83bcadeb/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
index 874a910..6953ee7 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
@@ -430,9 +430,11 @@
WXAssertMainThread();
}
-- (void)renderFinish
+- (void)readyToShow
{
- [self.supercomponent renderFinish];
+ if (self.weexInstance.trackComponent) {
+ [self.supercomponent readyToShow];
+ }
}
- (void)updateAttributes:(NSDictionary *)attributes
[16/50] [abbrv] incubator-weex git commit: Merge pull request #2205
from acton393/ios-feature-20170118
Posted by ji...@apache.org.
Merge pull request #2205 from acton393/ios-feature-20170118
* [ios] iOS feature 20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/00ca8aa9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/00ca8aa9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/00ca8aa9
Branch: refs/heads/master
Commit: 00ca8aa9ce2ba961a0be1f462e5235c89c5a6247
Parents: b25b16c a1baf89
Author: \u9f50\u5c71 <su...@163.com>
Authored: Tue Jan 10 23:19:20 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Tue Jan 10 23:19:20 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
[36/50] [abbrv] incubator-weex git commit: * [android] simplify ci
command
Posted by ji...@apache.org.
* [android] simplify ci command
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/0d992e47
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/0d992e47
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/0d992e47
Branch: refs/heads/master
Commit: 0d992e47cca5498fc8af0538d34dc802f91d77bc
Parents: 405b6e6
Author: sospartan <so...@gmail.com>
Authored: Wed Jan 11 16:10:21 2017 +0800
Committer: sospartan <so...@gmail.com>
Committed: Wed Jan 11 16:10:21 2017 +0800
----------------------------------------------------------------------
circle.yml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0d992e47/circle.yml
----------------------------------------------------------------------
diff --git a/circle.yml b/circle.yml
index 70f5817..ee399e2 100644
--- a/circle.yml
+++ b/circle.yml
@@ -12,8 +12,7 @@ machine:
test:
override:
# - npm run test
- - cd android/playground && ./gradlew assembleDebug -Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError" -Dfile.encoding=UTF-8
- - cd android/sdk && ./gradlew clean testDebugUnitTest -PdisableCov=true -PtargetSDK=19 -Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError" -Dfile.encoding=UTF-8
+ - cd android/playground && ./gradlew assembleDebug :weex_sdk:testDebugUnitTest -PdisableCov=true -PtargetSDK=19 -Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError" -Dfile.encoding=UTF-8
post:
- cp -r android/playground/app/build/outputs $CIRCLE_ARTIFACTS/playground # playground artifacts
- cp -r android/sdk/build/reports $CIRCLE_ARTIFACTS/sdk_reports
[41/50] [abbrv] incubator-weex git commit: Merge remote-tracking
branch 'upstream/ios-feature-20170118' into ios-jsframework-0.19.7
Posted by ji...@apache.org.
Merge remote-tracking branch 'upstream/ios-feature-20170118' into ios-jsframework-0.19.7
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/ee0f2bbb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/ee0f2bbb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/ee0f2bbb
Branch: refs/heads/master
Commit: ee0f2bbb55d14cd7095eb3d28d6c0db71c27a417
Parents: d0748c2 46332dd
Author: boboning <ni...@163.com>
Authored: Wed Jan 11 16:52:03 2017 +0800
Committer: boboning <ni...@163.com>
Committed: Wed Jan 11 16:52:03 2017 +0800
----------------------------------------------------------------------
examples/module/websocket-demo.we | 2 +-
ios/sdk/WeexSDK.podspec | 10 +-
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 25 ++--
.../Sources/Component/WXImageComponent.m | 24 ++--
.../Sources/Component/WXScrollerComponent.m | 2 +-
.../Sources/Component/WXTextAreaComponent.m | 113 ++++++++-----------
.../WeexSDK/Sources/Component/WXTextComponent.m | 1 +
.../Sources/Component/WXTextInputComponent.m | 14 +--
.../Sources/Display/WXComponent+Display.m | 6 +-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h | 7 +-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m | 14 ++-
.../WeexSDK/Sources/Events/WXComponent+Events.m | 25 +++-
.../WeexSDK/Sources/Loader/WXResourceLoader.m | 2 +-
.../Sources/Manager/WXComponentManager.m | 17 +++
ios/sdk/WeexSDK/Sources/Model/WXComponent.h | 4 +-
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 6 +-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h | 2 +-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 50 +++++++-
.../Sources/Model/WXSDKInstance_private.h | 3 +
.../WeexSDK/Sources/Module/WXNavigatorModule.m | 28 +++--
.../Sources/Protocol/WXNavigationProtocol.h | 31 ++++-
21 files changed, 235 insertions(+), 151 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ee0f2bbb/ios/sdk/WeexSDK.podspec
----------------------------------------------------------------------
diff --cc ios/sdk/WeexSDK.podspec
index f240ecd,057c435..17ec318
--- a/ios/sdk/WeexSDK.podspec
+++ b/ios/sdk/WeexSDK.podspec
@@@ -2,7 -2,7 +2,9 @@@
Pod::Spec.new do |s|
s.name = "WeexSDK"
- s.version = "0.10.0"
++
+ s.version = "0.9.5"
++
s.summary = "WeexSDK Source ."
s.description = <<-DESC
[46/50] [abbrv] incubator-weex git commit: * [test] revert android ci
command
Posted by ji...@apache.org.
* [test] revert android ci command
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/dc1cbae3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/dc1cbae3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/dc1cbae3
Branch: refs/heads/master
Commit: dc1cbae338664c7a763910a3e3f9ba268b1e0a41
Parents: 9e54e4d
Author: sospartan <so...@gmail.com>
Authored: Wed Jan 11 17:26:53 2017 +0800
Committer: sospartan <so...@gmail.com>
Committed: Wed Jan 11 17:26:53 2017 +0800
----------------------------------------------------------------------
circle.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/dc1cbae3/circle.yml
----------------------------------------------------------------------
diff --git a/circle.yml b/circle.yml
index 37fd785..77a922c 100644
--- a/circle.yml
+++ b/circle.yml
@@ -13,7 +13,8 @@ test:
override:
- npm run build
- npm run test
- - cd android/playground && ./gradlew assembleDebug :weex_sdk:testDebugUnitTest -PdisableCov=true -PtargetSDK=19 -Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError" -Dfile.encoding=UTF-8
+ - cd android/playground && ./gradlew assembleDebug -Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError" -Dfile.encoding=UTF-8
+ - cd android/sdk && ./gradlew testDebugUnitTest -PdisableCov=true -PtargetSDK=19 -Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError" -Dfile.encoding=UTF-8
post:
- cp -r android/playground/app/build/outputs $CIRCLE_ARTIFACTS/playground # playground artifacts
- cp -r android/sdk/build/reports $CIRCLE_ARTIFACTS/sdk_reports
[18/50] [abbrv] incubator-weex git commit: Merge pull request #2185
from kfeagle/ios-feature-20170118
Posted by ji...@apache.org.
Merge pull request #2185 from kfeagle/ios-feature-20170118
* [ios] bug fix: websocket module name is changed ,websocket used in playground should change
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/2371256b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/2371256b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/2371256b
Branch: refs/heads/master
Commit: 2371256b3db500e15cb8354a12d04899f18dc580
Parents: 00ca8aa 860b44f
Author: acton393 <ac...@users.noreply.github.com>
Authored: Tue Jan 10 23:19:46 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Tue Jan 10 23:19:46 2017 +0800
----------------------------------------------------------------------
examples/module/websocket-demo.we | 2 +-
.../Sources/Component/WXTextAreaComponent.m | 39 +++++++++++---------
.../Sources/Component/WXTextInputComponent.m | 14 +++----
3 files changed, 29 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
[42/50] [abbrv] incubator-weex git commit: Merge branch
'v0.10.0-stable' into dev-release095
Posted by ji...@apache.org.
Merge branch 'v0.10.0-stable' into dev-release095
# Conflicts:
# README.md
# android/commons/src/main/java/com/alibaba/weex/commons/AbstractWeexActivity.java
# android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXSQLiteOpenHelper.java
# android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
# examples/vanilla/index.js
# ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/4d9dcc1d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/4d9dcc1d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/4d9dcc1d
Branch: refs/heads/master
Commit: 4d9dcc1de20c56aed14467efc33328e56b083924
Parents: 966c17d 235b87f
Author: sospartan <so...@gmail.com>
Authored: Wed Jan 11 16:54:26 2017 +0800
Committer: sospartan <so...@gmail.com>
Committed: Wed Jan 11 16:54:26 2017 +0800
----------------------------------------------------------------------
.gitignore | 1 +
android/commons/build.gradle | 4 +-
.../weex/commons/AbstractWeexActivity.java | 2 +
.../adapter/DefaultWebSocketAdapter.java | 326 +
.../adapter/DefaultWebSocketAdapterFactory.java | 219 +
android/playground/app/build.gradle | 16 +-
.../app/src/androidTest/AndroidManifest.xml | 212 +
.../benchmark/BenchmarkActivityTestRule.java | 239 +
.../alibaba/weex/benchmark/BenchmarkTest.java | 419 +
.../com/alibaba/weex/benchmark/BoxPlot.java | 270 +
.../java/com/alibaba/weex/benchmark/Repeat.java | 219 +
.../com/alibaba/weex/benchmark/RepeatRule.java | 242 +
.../weex/benchmark/WeexNativeCompareTest.java | 336 +
.../playground/app/src/main/AndroidManifest.xml | 41 +-
.../app/src/main/assets/hello_weex.js | 28 +
.../com/alibaba/weex/BenchmarkActivity.java | 413 +
.../java/com/alibaba/weex/IndexActivity.java | 77 +-
.../java/com/alibaba/weex/WXApplication.java | 62 +-
.../java/com/alibaba/weex/WXDebugActivity.java | 91 +
.../java/com/alibaba/weex/WXPageActivity.java | 215 +-
.../extend/component/WXComponentSyncTest.java | 29 +
.../weex/extend/module/GeolocationModule.java | 8 +-
.../alibaba/weex/extend/module/MyModule.java | 4 +-
.../weex/extend/module/RenderModule.java | 4 +-
.../weex/extend/module/SyncTestModule.java | 53 +
.../weex/extend/module/WXEventModule.java | 16 +-
.../zxing/client/android/CaptureActivity.java | 70 +-
.../src/main/res/layout/activity_dynamic.xml | 27 +
.../app/src/main/res/layout/activity_index.xml | 1 +
.../app/src/main/res/layout/content_dynamic.xml | 24 +
.../app/src/main/res/layout/hello_weex.xml | 223 +
.../app/src/main/res/values-zh-rCN/strings.xml | 2 +-
.../app/src/main/res/values/strings.xml | 10 +-
android/sdk/assets/main.js | 19932 ++++++++++++++++-
android/sdk/build.gradle | 7 +-
android/sdk/gradle.properties | 6 +-
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
android/sdk/libs/armeabi/libweexv8.so | Bin 3579724 -> 3583820 bytes
android/sdk/libs/x86/libweexv8.so | Bin 4328576 -> 4340864 bytes
android/sdk/src/main/AndroidManifest.xml | 2 +-
.../taobao/weex/IWXActivityStateListener.java | 2 +
.../main/java/com/taobao/weex/InitConfig.java | 26 +
.../java/com/taobao/weex/RenderContainer.java | 253 +
.../java/com/taobao/weex/WXEnvironment.java | 14 +-
.../com/taobao/weex/WXGlobalEventModule.java | 6 +-
.../com/taobao/weex/WXGlobalEventReceiver.java | 12 +-
.../main/java/com/taobao/weex/WXSDKEngine.java | 64 +-
.../java/com/taobao/weex/WXSDKInstance.java | 623 +-
.../main/java/com/taobao/weex/WXSDKManager.java | 48 +-
.../taobao/weex/adapter/DrawableStrategy.java | 213 +
.../taobao/weex/adapter/IDrawableLoader.java | 219 +
.../com/taobao/weex/annotation/Component.java | 219 +
.../appfram/clipboard/WXClipboardModule.java | 16 +-
.../appfram/navigator/WXNavigatorModule.java | 182 +-
.../appfram/storage/WXSQLiteOpenHelper.java | 1 -
.../weex/appfram/storage/WXStorageModule.java | 17 +-
.../appfram/websocket/IWebSocketAdapter.java | 234 +
.../websocket/IWebSocketAdapterFactory.java | 213 +
.../appfram/websocket/WebSocketCloseCodes.java | 237 +
.../weex/appfram/websocket/WebSocketModule.java | 341 +
.../taobao/weex/bridge/BaseMethodInvoker.java | 224 -
.../java/com/taobao/weex/bridge/Invoker.java | 4 +-
.../taobao/weex/bridge/JSCallbackCreator.java | 213 -
.../taobao/weex/bridge/JavascriptInvokable.java | 214 +
.../com/taobao/weex/bridge/MethodInvoker.java | 18 +-
.../com/taobao/weex/bridge/ModuleFactory.java | 5 +-
.../taobao/weex/bridge/NativeInvokeHelper.java | 276 +
.../java/com/taobao/weex/bridge/WXBridge.java | 51 +-
.../com/taobao/weex/bridge/WXBridgeManager.java | 245 +-
.../java/com/taobao/weex/bridge/WXJSObject.java | 48 +-
.../com/taobao/weex/bridge/WXModuleManager.java | 227 +-
.../java/com/taobao/weex/bridge/WXParams.java | 19 +
.../taobao/weex/bridge/WXServiceManager.java | 236 +
.../java/com/taobao/weex/common/Component.java | 219 -
.../java/com/taobao/weex/common/Constants.java | 26 +
.../java/com/taobao/weex/common/IWXBridge.java | 6 +
.../com/taobao/weex/common/IWXDebugProxy.java | 4 +-
.../taobao/weex/common/TypeModuleFactory.java | 32 +-
.../com/taobao/weex/common/WXCompatModule.java | 270 +
.../java/com/taobao/weex/common/WXConfig.java | 1 +
.../com/taobao/weex/common/WXInstanceWrap.java | 4 +-
.../java/com/taobao/weex/common/WXModule.java | 379 +-
.../com/taobao/weex/common/WXModuleAnno.java | 5 +-
.../taobao/weex/dom/BasicEditTextDomObject.java | 6 +-
.../java/com/taobao/weex/dom/DomContext.java | 216 +
.../com/taobao/weex/dom/ImmutableDomObject.java | 228 +
.../main/java/com/taobao/weex/dom/WXAttr.java | 114 +-
.../com/taobao/weex/dom/WXCustomStyleSpan.java | 2 +-
.../java/com/taobao/weex/dom/WXDomHandler.java | 15 +-
.../java/com/taobao/weex/dom/WXDomManager.java | 9 +-
.../java/com/taobao/weex/dom/WXDomModule.java | 82 +-
.../java/com/taobao/weex/dom/WXDomObject.java | 415 +-
.../com/taobao/weex/dom/WXDomStatement.java | 546 +-
.../main/java/com/taobao/weex/dom/WXStyle.java | 211 +-
.../com/taobao/weex/dom/WXSwitchDomObject.java | 64 +-
.../com/taobao/weex/dom/WXTextDomObject.java | 104 +-
.../com/taobao/weex/http/WXStreamModule.java | 21 +-
.../com/taobao/weex/ui/IFComponentHolder.java | 6 +-
.../taobao/weex/ui/SimpleComponentHolder.java | 7 +-
.../com/taobao/weex/ui/WXRenderManager.java | 10 +-
.../com/taobao/weex/ui/WXRenderStatement.java | 76 +-
.../weex/ui/animation/WXAnimationBean.java | 60 +-
.../weex/ui/animation/WXAnimationModule.java | 33 +-
.../ui/component/AbstractEditComponent.java | 46 +-
.../taobao/weex/ui/component/Scrollable.java | 3 -
.../java/com/taobao/weex/ui/component/WXA.java | 15 +-
.../taobao/weex/ui/component/WXBaseRefresh.java | 12 +-
.../taobao/weex/ui/component/WXComponent.java | 635 +-
.../com/taobao/weex/ui/component/WXDiv.java | 5 +-
.../com/taobao/weex/ui/component/WXEmbed.java | 24 +-
.../com/taobao/weex/ui/component/WXHeader.java | 2 +-
.../com/taobao/weex/ui/component/WXImage.java | 302 +-
.../taobao/weex/ui/component/WXIndicator.java | 12 +-
.../com/taobao/weex/ui/component/WXInput.java | 2 +-
.../com/taobao/weex/ui/component/WXLoading.java | 22 +-
.../weex/ui/component/WXLoadingIndicator.java | 2 +-
.../com/taobao/weex/ui/component/WXRefresh.java | 27 +-
.../taobao/weex/ui/component/WXScroller.java | 66 +-
.../com/taobao/weex/ui/component/WXSlider.java | 136 +-
.../weex/ui/component/WXSliderNeighbor.java | 180 +-
.../com/taobao/weex/ui/component/WXSwitch.java | 22 +-
.../com/taobao/weex/ui/component/WXText.java | 10 +-
.../taobao/weex/ui/component/WXVContainer.java | 184 +-
.../com/taobao/weex/ui/component/WXVideo.java | 2 +-
.../com/taobao/weex/ui/component/WXWeb.java | 23 +-
.../ui/component/list/BasicListComponent.java | 1104 +
.../component/list/HorizontalListComponent.java | 2 +-
.../ui/component/list/ListComponentView.java | 223 +
.../ui/component/list/SimpleListComponent.java | 231 +
.../ui/component/list/SimpleRecyclerView.java | 329 +
.../taobao/weex/ui/component/list/WXCell.java | 6 +-
.../weex/ui/component/list/WXListComponent.java | 952 +-
.../component/pesudo/OnActivePseudoListner.java | 212 +
.../weex/ui/component/pesudo/PesudoStatus.java | 317 +
.../pesudo/TouchActivePseudoListener.java | 234 +
.../com/taobao/weex/ui/module/WXMetaModule.java | 246 +
.../taobao/weex/ui/module/WXModalUIModule.java | 95 +-
.../taobao/weex/ui/module/WXTimerModule.java | 10 +-
.../taobao/weex/ui/module/WXWebViewModule.java | 8 +-
.../com/taobao/weex/ui/view/IRenderStatus.java | 214 +
.../weex/ui/view/WXCirclePageAdapter.java | 4 +
.../taobao/weex/ui/view/WXCircleViewPager.java | 25 +
.../com/taobao/weex/ui/view/WXFrameLayout.java | 8 +
.../weex/ui/view/WXHorizontalScrollView.java | 12 +
.../com/taobao/weex/ui/view/WXImageView.java | 170 +-
.../com/taobao/weex/ui/view/WXScrollView.java | 12 +
.../com/taobao/weex/ui/view/WXSwitchView.java | 3 +
.../com/taobao/weex/ui/view/WXTextView.java | 18 +-
.../weex/ui/view/border/BorderDrawable.java | 338 +-
.../taobao/weex/ui/view/border/BorderUtil.java | 293 +
.../taobao/weex/ui/view/gesture/WXGesture.java | 219 +-
.../weex/ui/view/gesture/WXGestureType.java | 5 +-
.../weex/ui/view/listview/WXRecyclerView.java | 34 +-
.../refresh/circlebar/CircleProgressBar.java | 1 -
.../ui/view/refresh/core/WXRefreshView.java | 6 +
.../ui/view/refresh/core/WXSwipeLayout.java | 41 +-
.../ui/view/refresh/wrapper/BaseBounceView.java | 22 +
.../refresh/wrapper/BounceRecyclerView.java | 28 +-
.../java/com/taobao/weex/utils/ATagUtil.java | 224 +
.../com/taobao/weex/utils/FunctionParser.java | 15 +
.../com/taobao/weex/utils/ImageDrawable.java | 326 +
.../java/com/taobao/weex/utils/ImgURIUtil.java | 228 +
.../java/com/taobao/weex/utils/WXDomUtils.java | 268 +
.../java/com/taobao/weex/utils/WXFileUtils.java | 40 +-
.../java/com/taobao/weex/utils/WXJsonUtils.java | 15 +-
.../taobao/weex/utils/WXReflectionUtils.java | 38 -
.../com/taobao/weex/utils/WXResourceUtils.java | 111 +
.../taobao/weex/utils/WXSoInstallMgrSdk.java | 7 +-
.../java/com/taobao/weex/utils/WXViewUtils.java | 168 +-
.../java/com/taobao/weex/WXSDKEngineTest.java | 2 +
.../java/com/taobao/weex/WXSDKInstanceTest.java | 65 +-
.../clipboard/WXClipboardModuleTest.java | 261 +
.../navigator/WXNavigatorModuleTest.java | 26 +-
.../com/taobao/weex/bridge/WXBridgeTest.java | 263 +
.../com/taobao/weex/bridge/WXHashMapTest.java | 2 +-
.../taobao/weex/bridge/WXModuleManagerTest.java | 2 -
.../java/com/taobao/weex/common/TestModule.java | 5 +-
.../java/com/taobao/weex/dom/TestDomObject.java | 27 +-
.../java/com/taobao/weex/dom/WXAttrTest.java | 38 +-
.../com/taobao/weex/dom/WXDomModuleTest.java | 3 +-
.../com/taobao/weex/dom/WXDomStatementTest.java | 17 +-
.../java/com/taobao/weex/dom/WXStyleTest.java | 80 +
.../taobao/weex/dom/WXTextDomObjectTest.java | 276 +
.../taobao/weex/http/WXStreamModuleTest.java | 4 +
.../ui/animation/WXAnimationModuleTest.java | 6 -
.../taobao/weex/ui/component/ComponentTest.java | 23 +-
.../weex/ui/component/WXComponentTest.java | 65 +-
.../com/taobao/weex/ui/component/WXDivTest.java | 11 +-
.../taobao/weex/ui/component/WXEmbedTest.java | 259 +
.../taobao/weex/ui/component/WXImageTest.java | 30 +-
.../taobao/weex/ui/component/WXLoadingTest.java | 259 +
.../taobao/weex/ui/component/WXRefreshTest.java | 261 +
.../weex/ui/component/WXScrollerTest.java | 3 +-
.../weex/ui/component/WXSliderNeighborTest.java | 288 +
.../taobao/weex/ui/component/WXSliderTest.java | 27 +-
.../taobao/weex/ui/component/WXSwitchTest.java | 261 +
.../taobao/weex/ui/component/WXTextTest.java | 24 +-
.../com/taobao/weex/ui/component/WXWebTest.java | 336 +
.../ui/component/list/WXListComponentTest.java | 21 +-
.../taobao/weex/ui/module/WXMetaModuleTest.java | 263 +
.../weex/ui/module/WXModalUIModuleTest.java | 2 +-
.../weex/ui/view/border/BorderDrawableTest.java | 38 +-
.../weex/ui/view/gesture/WXGestureTest.java | 268 +
.../taobao/weex/utils/FunctionParserTest.java | 225 +
.../com/taobao/weex/utils/WXLogUtilsTest.java | 284 +
.../taobao/weex/utils/WXResourceUtilsTest.java | 18 +-
.../java/com/taobao/weex/utils/WXUtilsTest.java | 17 +
android/sdk/unittest.sh | 4 +
.../taobao/weex/bridge/WXWebsocketBridge.java | 15 +
build/webpack.macacatest.config.js | 57 +
circle.yml | 19 +-
doc/advanced/integrate-to-android.md | 12 +-
examples/component/slider/index.we | 7 +
.../Sources/Component/WXImageComponent.m | 2 +-
package.json | 6 +
test/README.md | 28 +
test/benchmark.html | 42 -
test/circleci-android/Constants.java | 16 -
test/event-bubble.we | 45 -
test/index-item.we | 26 -
test/index.we | 53 -
test/input-test.we | 27 -
test/pages/components/input.we | 0
test/pages/index.we | 27 +
test/run.sh | 28 +
test/scripts/index.test.js | 57 +
test/scripts/test.js | 1 +
test/scripts/weex-node-map.js | 17 +
test/scripts/weex.js | 129 +
test/scroller-demo.we | 168 -
test/serve.sh | 4 +
test/sticky-demo.we | 81 -
test/stream.json | 3 -
test/stream.we | 140 -
test/test.we | 85 -
test/text-word-wrap.we | 13 -
test/ui-list-item.we | 28 -
test/update-cli.sh | 5 +
test/web-demo.we | 30 -
test/web-inner.html | 42 -
240 files changed, 40522 insertions(+), 5092 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/4d9dcc1d/android/commons/src/main/java/com/alibaba/weex/commons/AbstractWeexActivity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/4d9dcc1d/doc/advanced/integrate-to-android.md
----------------------------------------------------------------------
[15/50] [abbrv] incubator-weex git commit: * [ios] fix bug: text
input padding is not right
Posted by ji...@apache.org.
* [ios] fix bug: text input padding is not right
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/f4accbac
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/f4accbac
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/f4accbac
Branch: refs/heads/master
Commit: f4accbac8ded9c1d2181ef0ca1a3472c732f04b6
Parents: dcca37e
Author: \u9f50\u5c71 <su...@163.com>
Authored: Tue Jan 10 23:03:22 2017 +0800
Committer: \u9f50\u5c71 <su...@163.com>
Committed: Tue Jan 10 23:03:22 2017 +0800
----------------------------------------------------------------------
.../Sources/Component/WXTextAreaComponent.m | 39 +++++++++++---------
.../Sources/Component/WXTextInputComponent.m | 14 +++----
2 files changed, 28 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f4accbac/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m
index b6c41af..c4e7b9a 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m
@@ -156,17 +156,6 @@ WX_EXPORT_METHOD(@selector(blur))
if (styles[@"textAlign"]) {
_textAlign = [WXConvert NSTextAlignment:styles[@"textAlign"]] ;
}
-
- _padding = UIEdgeInsetsZero;
- _border = UIEdgeInsetsZero;
- UIEdgeInsets padding = UIEdgeInsetsMake(self.cssNode->style.padding[CSS_TOP], self.cssNode->style.padding[CSS_LEFT], self.cssNode->style.padding[CSS_BOTTOM], self.cssNode->style.padding[CSS_RIGHT]);
- if (!UIEdgeInsetsEqualToEdgeInsets(padding, _padding)) {
- _padding = padding;
- }
- UIEdgeInsets border = UIEdgeInsetsMake(self.cssNode->style.border[CSS_TOP], self.cssNode->style.border[CSS_LEFT], self.cssNode->style.border[CSS_BOTTOM], self.cssNode->style.border[CSS_RIGHT]);
- if (!UIEdgeInsetsEqualToEdgeInsets(border, _border)) {
- _border = border;
- }
}
return self;
@@ -229,8 +218,9 @@ WX_EXPORT_METHOD(@selector(blur))
}
[_textView setTextAlignment:_textAlign];
[self setTextFont];
- [_textView setBorder:_border];
- [_textView setPadding:_padding];
+ _padding = UIEdgeInsetsZero;
+ _border = UIEdgeInsetsZero;
+ [self updatePattern];
[_textView setNeedsDisplay];
[_textView setClipsToBounds:YES];
@@ -251,6 +241,18 @@ WX_EXPORT_METHOD(@selector(blur))
}
}
+- (void)setPadding:(UIEdgeInsets)padding
+{
+ _padding = padding;
+ [_textView setPadding:padding];
+}
+
+- (void)setBorder:(UIEdgeInsets)border
+{
+ _border = border;
+ [_textView setBorder:border];
+}
+
#pragma mark - add-remove Event
- (void)addEvent:(NSString *)eventName
{
@@ -349,16 +351,19 @@ WX_EXPORT_METHOD(@selector(blur))
_placeholderColor = [UIColor colorWithRed:0x99/255.0 green:0x99/255.0 blue:0x99/255.0 alpha:1.0];
}
[self setPlaceholderAttributedString];
-
+ [self updatePattern];
+}
+
+-(void)updatePattern
+{
UIEdgeInsets padding = UIEdgeInsetsMake(self.cssNode->style.padding[CSS_TOP], self.cssNode->style.padding[CSS_LEFT], self.cssNode->style.padding[CSS_BOTTOM], self.cssNode->style.padding[CSS_RIGHT]);
if (!UIEdgeInsetsEqualToEdgeInsets(padding, _padding)) {
- _padding = padding;
+ [self setPadding:padding];
}
UIEdgeInsets border = UIEdgeInsetsMake(self.cssNode->style.border[CSS_TOP], self.cssNode->style.border[CSS_LEFT], self.cssNode->style.border[CSS_BOTTOM], self.cssNode->style.border[CSS_RIGHT]);
if (!UIEdgeInsetsEqualToEdgeInsets(border, _border)) {
- _border = border;
- [_textView setBorder:_border];
+ [self setBorder:border];
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f4accbac/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m
index 1fcea45..01d362a 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m
@@ -145,14 +145,6 @@ WX_EXPORT_METHOD(@selector(blur))
}else {
_placeholderColor = [UIColor colorWithRed:0x99/255.0 green:0x99/255.0 blue:0x99/255.0 alpha:1.0];
}
- UIEdgeInsets padding = UIEdgeInsetsMake(self.cssNode->style.padding[CSS_TOP], self.cssNode->style.padding[CSS_LEFT], self.cssNode->style.padding[CSS_BOTTOM], self.cssNode->style.padding[CSS_RIGHT]);
- if (!UIEdgeInsetsEqualToEdgeInsets(padding, _padding)) {
- [self setPadding:padding];
- }
- UIEdgeInsets border = UIEdgeInsetsMake(self.cssNode->style.border[CSS_TOP], self.cssNode->style.border[CSS_LEFT], self.cssNode->style.border[CSS_BOTTOM], self.cssNode->style.border[CSS_RIGHT]);
- if (!UIEdgeInsetsEqualToEdgeInsets(border, _border)) {
- [self setBorder:border];
- }
}
return self;
@@ -184,6 +176,7 @@ WX_EXPORT_METHOD(@selector(blur))
[_inputView setTextColor:_colorForStyle];
[_inputView setText:_value];
[_inputView setEnabled:!_disabled];
+ [self updatePattern];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeKeyboard)];
UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
@@ -319,7 +312,12 @@ WX_EXPORT_METHOD(@selector(blur))
_placeholderColor = [UIColor colorWithRed:0x99/255.0 green:0x99/255.0 blue:0x99/255.0 alpha:1.0];
}
[self setPlaceholderAttributedString];
+ [self updatePattern];
+}
+
+-(void)updatePattern
+{
UIEdgeInsets padding = UIEdgeInsetsMake(self.cssNode->style.padding[CSS_TOP], self.cssNode->style.padding[CSS_LEFT], self.cssNode->style.padding[CSS_BOTTOM], self.cssNode->style.padding[CSS_RIGHT]);
if (!UIEdgeInsetsEqualToEdgeInsets(padding, _padding)) {
[self setPadding:padding];
[45/50] [abbrv] incubator-weex git commit: Merge branch
'jsfm-feature-0.19' into dev-release095
Posted by ji...@apache.org.
Merge branch 'jsfm-feature-0.19' into dev-release095
# Conflicts:
# circle.yml
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/9e54e4d8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/9e54e4d8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/9e54e4d8
Branch: refs/heads/master
Commit: 9e54e4d81a074d7c2eb144f201723301919bcc08
Parents: 1e837f3 d88375a
Author: sospartan <so...@gmail.com>
Authored: Wed Jan 11 17:06:43 2017 +0800
Committer: sospartan <so...@gmail.com>
Committed: Wed Jan 11 17:06:43 2017 +0800
----------------------------------------------------------------------
.eslintrc | 1 +
build/build.js | 225 +++----
build/config.js | 121 ++++
build/rollup.browser.config.js | 38 --
build/rollup.config.js | 34 --
build/webpack.examples.config.js | 6 +-
circle.yml | 3 +-
dist/weex-html5/LICENSE | 201 -------
dist/weex-html5/NOTICE | 7 -
dist/weex-html5/README.md | 158 -----
dist/weex-html5/demo/build/index.js | 111 ----
dist/weex-html5/demo/index.we | 29 -
dist/weex-html5/index.html | 57 --
dist/weex-html5/package.json | 23 -
dist/weex-js-framework/LICENSE | 202 -------
dist/weex-js-framework/NOTICE | 7 -
dist/weex-js-framework/README.md | 8 -
dist/weex-js-framework/index.js | 1 -
dist/weex-js-framework/package.json | 39 --
examples/vue/animation.vue | 24 +-
examples/vue/components/a.vue | 12 +-
examples/vue/components/countdown.vue | 36 +-
examples/vue/components/image.vue | 10 +-
examples/vue/components/input.vue | 21 +-
examples/vue/components/list.vue | 73 +--
examples/vue/components/marquee.vue | 32 +-
examples/vue/components/navigator.vue | 20 +-
examples/vue/components/scroller.vue | 118 ++--
examples/vue/components/slider.vue | 160 ++---
examples/vue/components/tabbar.vue | 72 +--
examples/vue/components/text.vue | 2 +-
examples/vue/components/video.vue | 14 +-
examples/vue/components/web.vue | 4 +-
examples/vue/include/button.vue | 162 +++++
examples/vue/include/countdown.vue | 93 +++
examples/vue/include/example-list-item.vue | 2 +-
examples/vue/include/hn.vue | 47 ++
examples/vue/include/list-item.vue | 46 ++
examples/vue/include/marquee.vue | 78 +++
examples/vue/include/navbar.vue | 121 ++++
examples/vue/include/navpage.vue | 62 ++
examples/vue/include/panel.vue | 141 +++++
examples/vue/include/tabbar.vue | 92 +++
examples/vue/include/tabitem.vue | 63 ++
examples/vue/include/tip.vue | 65 ++
examples/vue/index.vue | 70 +--
examples/vue/modules/clipboard.vue | 29 +-
examples/vue/modules/instance-api.vue | 8 +-
examples/vue/modules/modal.vue | 12 +-
examples/vue/modules/storage.vue | 16 +-
examples/vue/modules/stream.vue | 24 +-
examples/vue/showcase/calculator.vue | 10 +-
examples/vue/showcase/itemlist.vue | 588 ++++++++++---------
examples/vue/showcase/progress.vue | 10 +-
examples/vue/style/index.vue | 2 +-
examples/vue/style/style-box.vue | 4 +-
examples/vue/style/style-flex.vue | 2 +-
examples/vue/syntax/hello-world.vue | 1 +
examples/vue/syntax/script-component.vue | 14 +-
examples/vue/syntax/script-data.vue | 11 +-
examples/vue/syntax/script-events.vue | 7 +-
examples/vue/syntax/script-instance.vue | 8 +-
examples/vue/syntax/script-lifecycle.vue | 9 +-
examples/vue/syntax/template-class.vue | 1 +
examples/vue/syntax/template-event.vue | 10 +-
examples/vue/syntax/template-if.vue | 1 +
examples/vue/syntax/template-repeat-update.vue | 24 +-
examples/vue/syntax/template-repeat.vue | 36 +-
examples/vue/syntax/template-style.vue | 9 +-
examples/vue/template.vue | 20 +-
examples/vue/test.vue | 16 -
examples/vue/test2.vue | 6 -
html5/frameworks/index.js | 2 +
html5/frameworks/legacy/api/methods.js | 30 +-
html5/frameworks/legacy/app/bundle/bootstrap.js | 6 +
html5/frameworks/legacy/app/ctrl/init.js | 118 ++--
html5/frameworks/legacy/app/ctrl/misc.js | 40 +-
html5/frameworks/legacy/app/index.js | 4 +-
html5/frameworks/legacy/app/instance.js | 18 +-
html5/frameworks/legacy/app/register.js | 25 +-
html5/frameworks/legacy/app/viewport.js | 38 ++
html5/frameworks/legacy/static/create.js | 13 +-
html5/frameworks/vanilla/index.js | 43 +-
html5/render/native/index.js | 6 +-
html5/runtime/callback-manager.js | 37 ++
html5/runtime/config.js | 17 +
html5/runtime/handler.js | 2 +-
html5/runtime/index.js | 32 +-
html5/runtime/init.js | 87 ++-
html5/runtime/service.js | 58 ++
html5/runtime/task-center.js | 72 +++
html5/runtime/vdom/document.js | 4 +-
html5/runtime/vdom/element-types.js | 65 ++
html5/runtime/vdom/element.js | 149 +++--
html5/runtime/vdom/index.js | 8 +-
html5/runtime/vdom/operation.js | 29 +-
html5/services/amd/index.js | 70 +++
html5/services/broadcast-channel/index.js | 106 ++++
.../services/broadcast-channel/message-event.js | 21 +
html5/services/index.js | 5 +
html5/shared/setTimeout.js | 2 +
.../case/basic/global-weex-object.output.js | 6 +
.../case/basic/global-weex-object.source.js | 19 +
html5/test/case/prepare.js | 10 +-
html5/test/case/tester.js | 50 +-
html5/test/unit/default/api/methods.js | 6 +-
html5/test/unit/default/app/bundle.js | 30 +-
html5/test/unit/default/app/ctrl.js | 31 +-
html5/test/unit/default/app/index.js | 54 +-
html5/test/unit/default/app/viewport.js | 61 ++
html5/test/unit/default/runtime.js | 40 +-
html5/test/unit/default/vm/dom-helper.js | 9 +-
html5/test/unit/default/vm/events.js | 14 +-
html5/test/unit/default/vm/vm.js | 16 +-
html5/test/unit/shared/BroadcastChannel.js | 220 +++++++
html5/test/unit/vanilla/index.js | 3 -
html5/test/unit/vdom/index.js | 76 ++-
html5/test/unit/vdom/listener.js | 34 +-
package.json | 31 +-
119 files changed, 3370 insertions(+), 2236 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9e54e4d8/circle.yml
----------------------------------------------------------------------
diff --cc circle.yml
index ee399e2,6ccabd5..37fd785
--- a/circle.yml
+++ b/circle.yml
@@@ -1,21 -1,12 +1,22 @@@
machine:
+ pre:
+ - sudo service mongodb stop
+ - sudo service mysql stop
+ - sudo service postgresql stop
+ - sudo service rabbitmq-server stop
+ - sudo service couchdb stop
node:
- version: 7
+ version: 7
+ java:
+ version: 'oraclejdk8'
test:
override:
- # - npm run test
+ - npm run build
+ - npm run test
- - npm run test:cover
+ - cd android/playground && ./gradlew assembleDebug :weex_sdk:testDebugUnitTest -PdisableCov=true -PtargetSDK=19 -Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError" -Dfile.encoding=UTF-8
post:
+ - cp -r android/playground/app/build/outputs $CIRCLE_ARTIFACTS/playground # playground artifacts
+ - cp -r android/sdk/build/reports $CIRCLE_ARTIFACTS/sdk_reports
dependencies:
cache_directories:
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9e54e4d8/package.json
----------------------------------------------------------------------
diff --cc package.json
index 21649af,bf85b7f..d4331be
--- a/package.json
+++ b/package.json
@@@ -76,14 -76,11 +78,15 @@@
"modals": "^0.1.6",
"scroll-to": "0.0.2",
"semver": "^5.1.0",
- "weex-vue-framework": "2.0.5-weex.1",
- "weex-components": "^0.2.0"
+ "weex-components": "^0.2.0",
+ "weex-rax-framework": "0.1.0",
+ "weex-vue-framework": "2.1.8-weex.1"
},
"devDependencies": {
+ "xml2map": "^1.0.2",
+ "macaca-cli": "^1.1.0",
+ "webdriver-client": "~1.0.0",
+ "macaca-utils": "^0.1.9",
"babel-core": "^6.17.0",
"babel-istanbul": "^0.11.0",
"babel-loader": "^6.2.5",
[34/50] [abbrv] incubator-weex git commit: * [android] new simplelist
component (#137)
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5a700270/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleRecyclerView.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleRecyclerView.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleRecyclerView.java
new file mode 100644
index 0000000..1523717
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleRecyclerView.java
@@ -0,0 +1,329 @@
+/**
+ *
+ * Apache License
+ * Version 2.0, January 2004
+ * http://www.apache.org/licenses/
+ *
+ * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ * 1. Definitions.
+ *
+ * "License" shall mean the terms and conditions for use, reproduction,
+ * and distribution as defined by Sections 1 through 9 of this document.
+ *
+ * "Licensor" shall mean the copyright owner or entity authorized by
+ * the copyright owner that is granting the License.
+ *
+ * "Legal Entity" shall mean the union of the acting entity and all
+ * other entities that control, are controlled by, or are under common
+ * control with that entity. For the purposes of this definition,
+ * "control" means (i) the power, direct or indirect, to cause the
+ * direction or management of such entity, whether by contract or
+ * otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ * outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ * "You" (or "Your") shall mean an individual or Legal Entity
+ * exercising permissions granted by this License.
+ *
+ * "Source" form shall mean the preferred form for making modifications,
+ * including but not limited to software source code, documentation
+ * source, and configuration files.
+ *
+ * "Object" form shall mean any form resulting from mechanical
+ * transformation or translation of a Source form, including but
+ * not limited to compiled object code, generated documentation,
+ * and conversions to other media types.
+ *
+ * "Work" shall mean the work of authorship, whether in Source or
+ * Object form, made available under the License, as indicated by a
+ * copyright notice that is included in or attached to the work
+ * (an example is provided in the Appendix below).
+ *
+ * "Derivative Works" shall mean any work, whether in Source or Object
+ * form, that is based on (or derived from) the Work and for which the
+ * editorial revisions, annotations, elaborations, or other modifications
+ * represent, as a whole, an original work of authorship. For the purposes
+ * of this License, Derivative Works shall not include works that remain
+ * separable from, or merely link (or bind by name) to the interfaces of,
+ * the Work and Derivative Works thereof.
+ *
+ * "Contribution" shall mean any work of authorship, including
+ * the original version of the Work and any modifications or additions
+ * to that Work or Derivative Works thereof, that is intentionally
+ * submitted to Licensor for inclusion in the Work by the copyright owner
+ * or by an individual or Legal Entity authorized to submit on behalf of
+ * the copyright owner. For the purposes of this definition, "submitted"
+ * means any form of electronic, verbal, or written communication sent
+ * to the Licensor or its representatives, including but not limited to
+ * communication on electronic mailing lists, source code control systems,
+ * and issue tracking systems that are managed by, or on behalf of, the
+ * Licensor for the purpose of discussing and improving the Work, but
+ * excluding communication that is conspicuously marked or otherwise
+ * designated in writing by the copyright owner as "Not a Contribution."
+ *
+ * "Contributor" shall mean Licensor and any individual or Legal Entity
+ * on behalf of whom a Contribution has been received by Licensor and
+ * subsequently incorporated within the Work.
+ *
+ * 2. Grant of Copyright License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * copyright license to reproduce, prepare Derivative Works of,
+ * publicly display, publicly perform, sublicense, and distribute the
+ * Work and such Derivative Works in Source or Object form.
+ *
+ * 3. Grant of Patent License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * (except as stated in this section) patent license to make, have made,
+ * use, offer to sell, sell, import, and otherwise transfer the Work,
+ * where such license applies only to those patent claims licensable
+ * by such Contributor that are necessarily infringed by their
+ * Contribution(s) alone or by combination of their Contribution(s)
+ * with the Work to which such Contribution(s) was submitted. If You
+ * institute patent litigation against any entity (including a
+ * cross-claim or counterclaim in a lawsuit) alleging that the Work
+ * or a Contribution incorporated within the Work constitutes direct
+ * or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate
+ * as of the date such litigation is filed.
+ *
+ * 4. Redistribution. You may reproduce and distribute copies of the
+ * Work or Derivative Works thereof in any medium, with or without
+ * modifications, and in Source or Object form, provided that You
+ * meet the following conditions:
+ *
+ * (a) You must give any other recipients of the Work or
+ * Derivative Works a copy of this License; and
+ *
+ * (b) You must cause any modified files to carry prominent notices
+ * stating that You changed the files; and
+ *
+ * (c) You must retain, in the Source form of any Derivative Works
+ * that You distribute, all copyright, patent, trademark, and
+ * attribution notices from the Source form of the Work,
+ * excluding those notices that do not pertain to any part of
+ * the Derivative Works; and
+ *
+ * (d) If the Work includes a "NOTICE" text file as part of its
+ * distribution, then any Derivative Works that You distribute must
+ * include a readable copy of the attribution notices contained
+ * within such NOTICE file, excluding those notices that do not
+ * pertain to any part of the Derivative Works, in at least one
+ * of the following places: within a NOTICE text file distributed
+ * as part of the Derivative Works; within the Source form or
+ * documentation, if provided along with the Derivative Works; or,
+ * within a display generated by the Derivative Works, if and
+ * wherever such third-party notices normally appear. The contents
+ * of the NOTICE file are for informational purposes only and
+ * do not modify the License. You may add Your own attribution
+ * notices within Derivative Works that You distribute, alongside
+ * or as an addendum to the NOTICE text from the Work, provided
+ * that such additional attribution notices cannot be construed
+ * as modifying the License.
+ *
+ * You may add Your own copyright statement to Your modifications and
+ * may provide additional or different license terms and conditions
+ * for use, reproduction, or distribution of Your modifications, or
+ * for any such Derivative Works as a whole, provided Your use,
+ * reproduction, and distribution of the Work otherwise complies with
+ * the conditions stated in this License.
+ *
+ * 5. Submission of Contributions. Unless You explicitly state otherwise,
+ * any Contribution intentionally submitted for inclusion in the Work
+ * by You to the Licensor shall be under the terms and conditions of
+ * this License, without any additional terms or conditions.
+ * Notwithstanding the above, nothing herein shall supersede or modify
+ * the terms of any separate license agreement you may have executed
+ * with Licensor regarding such Contributions.
+ *
+ * 6. Trademarks. This License does not grant permission to use the trade
+ * names, trademarks, service marks, or product names of the Licensor,
+ * except as required for reasonable and customary use in describing the
+ * origin of the Work and reproducing the content of the NOTICE file.
+ *
+ * 7. Disclaimer of Warranty. Unless required by applicable law or
+ * agreed to in writing, Licensor provides the Work (and each
+ * Contributor provides its Contributions) on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied, including, without limitation, any warranties or conditions
+ * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ * PARTICULAR PURPOSE. You are solely responsible for determining the
+ * appropriateness of using or redistributing the Work and assume any
+ * risks associated with Your exercise of permissions under this License.
+ *
+ * 8. Limitation of Liability. In no event and under no legal theory,
+ * whether in tort (including negligence), contract, or otherwise,
+ * unless required by applicable law (such as deliberate and grossly
+ * negligent acts) or agreed to in writing, shall any Contributor be
+ * liable to You for damages, including any direct, indirect, special,
+ * incidental, or consequential damages of any character arising as a
+ * result of this License or out of the use or inability to use the
+ * Work (including but not limited to damages for loss of goodwill,
+ * work stoppage, computer failure or malfunction, or any and all
+ * other commercial damages or losses), even if such Contributor
+ * has been advised of the possibility of such damages.
+ *
+ * 9. Accepting Warranty or Additional Liability. While redistributing
+ * the Work or Derivative Works thereof, You may choose to offer,
+ * and charge a fee for, acceptance of support, warranty, indemnity,
+ * or other liability obligations and/or rights consistent with this
+ * License. However, in accepting such obligations, You may act only
+ * on Your own behalf and on Your sole responsibility, not on behalf
+ * of any other Contributor, and only if You agree to indemnify,
+ * defend, and hold each Contributor harmless for any liability
+ * incurred by, or claims asserted against, such Contributor by reason
+ * of your accepting any such warranty or additional liability.
+ *
+ * END OF TERMS AND CONDITIONS
+ *
+ * APPENDIX: How to apply the Apache License to your work.
+ *
+ * To apply the Apache License to your work, attach the following
+ * boilerplate notice, with the fields enclosed by brackets "[]"
+ * replaced with your own identifying information. (Don't include
+ * the brackets!) The text should be enclosed in the appropriate
+ * comment syntax for the file format. We also recommend that a
+ * file or class name and description of purpose be included on the
+ * same "printed page" as the copyright notice for easier
+ * identification within third-party archives.
+ *
+ * Copyright 2016 Alibaba Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.taobao.weex.ui.component.list;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.taobao.weex.common.WXThread;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.view.listview.WXRecyclerView;
+import com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter;
+
+import java.util.Stack;
+
+/**
+ * Created by sospartan on 13/12/2016.
+ */
+
+class SimpleRecyclerView extends WXRecyclerView implements ListComponentView{
+ private RecyclerViewBaseAdapter mAdapter = null;
+ private Stack<View> headerViewStack = new Stack<>();
+ private Stack<WXCell> headComponentStack = new Stack<>();
+
+ public SimpleRecyclerView(Context context) {
+ super(context);
+ }
+
+ @Override
+ public WXRecyclerView getInnerView() {
+ return this;
+ }
+
+ @Override
+ public void setRecyclerViewBaseAdapter(RecyclerViewBaseAdapter adapter) {
+ setAdapter(adapter);
+ this.mAdapter = adapter;
+ }
+
+ /**
+ * @param component
+ */
+ public void notifyStickyShow(WXCell component) {
+ if (component == null)
+ return;
+ if (!headComponentStack.isEmpty()) {
+ WXCell oldCom = headComponentStack.pop();
+ if (!oldCom.getRef().equals(component.getRef())) {
+ headComponentStack.push(oldCom);
+ headComponentStack.push(component);
+ showSticky();
+ } else {
+ headComponentStack.push(oldCom);
+ return;
+ }
+ } else {
+ headComponentStack.push(component);
+ showSticky();
+ }
+ }
+
+ /**
+ * @param component
+ */
+ public void notifyStickyRemove(WXCell component) {
+ if (component == null)
+ return;
+ if (!headComponentStack.isEmpty() && !headerViewStack.isEmpty()) {
+ removeSticky(component);
+ }
+ }
+
+ /**
+ * Pop stickyView to stack
+ */
+ private void showSticky() {
+ WXCell headComponent = headComponentStack.pop();
+ headComponentStack.push(headComponent);
+ final View headerView = headComponent.getRealView();
+ if (headerView == null)
+ return;
+ headerViewStack.push(headerView);
+ headComponent.removeSticky();
+ final ViewGroup parent = (ViewGroup) getParent();
+ if(parent != null){
+ parent.post(WXThread.secure(new Runnable() {
+ @Override
+ public void run() {
+ ViewGroup existedParent;
+ if((existedParent = (ViewGroup)headerView.getParent())!= null){
+ existedParent.removeView(headerView);
+ }
+ parent.addView(headerView);
+ }
+ }));
+ }
+ }
+
+ /**
+ * remove top stickyView
+ * @param component
+ */
+ private void removeSticky(WXComponent component) {
+ final WXCell headComponent = headComponentStack.pop();
+ if (!component.getRef().equals(headComponent.getRef())) {
+ headComponentStack.push(headComponent);
+ return;
+ }
+ final View headerView = headerViewStack.pop();
+ final ViewGroup parent = (ViewGroup) getParent();
+ if(parent != null){
+ parent.post(WXThread.secure(new Runnable() {
+ @Override
+ public void run() {
+ parent.removeView(headerView);
+ headComponent.recoverySticky();
+ }
+ }));
+ }
+
+ }
+
+ @Override
+ public RecyclerViewBaseAdapter getRecyclerViewBaseAdapter() {
+ return mAdapter;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5a700270/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
index 93e7e83..3e68de1 100755
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
@@ -204,61 +204,19 @@
*/
package com.taobao.weex.ui.component.list;
-import android.annotation.TargetApi;
import android.content.Context;
-import android.graphics.Color;
-import android.graphics.PointF;
-import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.util.ArrayMap;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.text.TextUtils;
-import android.util.SparseArray;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import com.taobao.weex.WXEnvironment;
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.OnWXScrollListener;
-import com.taobao.weex.common.WXRuntimeException;
import com.taobao.weex.dom.WXDomObject;
-import com.taobao.weex.ui.component.AppearanceHelper;
-import com.taobao.weex.ui.component.Scrollable;
import com.taobao.weex.ui.component.WXBaseRefresh;
import com.taobao.weex.ui.component.WXComponent;
-import com.taobao.weex.ui.component.WXComponentProp;
import com.taobao.weex.ui.component.WXLoading;
import com.taobao.weex.ui.component.WXRefresh;
import com.taobao.weex.ui.component.WXVContainer;
-import com.taobao.weex.ui.component.helper.WXStickyHelper;
-import com.taobao.weex.ui.view.listview.WXRecyclerView;
-import com.taobao.weex.ui.view.listview.adapter.IOnLoadMoreListener;
-import com.taobao.weex.ui.view.listview.adapter.IRecyclerAdapterListener;
import com.taobao.weex.ui.view.listview.adapter.ListBaseViewHolder;
-import com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter;
-import com.taobao.weex.ui.view.listview.adapter.TransformItemDecoration;
-import com.taobao.weex.ui.view.listview.adapter.WXRecyclerViewOnScrollListener;
import com.taobao.weex.ui.view.refresh.wrapper.BounceRecyclerView;
import com.taobao.weex.utils.WXLogUtils;
-import com.taobao.weex.utils.WXUtils;
-import com.taobao.weex.utils.WXViewUtils;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
/**
* Unlike other components, there is immutable bi-directional association between View and
@@ -269,909 +227,113 @@ import java.util.regex.Pattern;
*/
@Component(lazyload = false)
-public class WXListComponent extends WXVContainer<BounceRecyclerView> implements
- IRecyclerAdapterListener<ListBaseViewHolder>,IOnLoadMoreListener,Scrollable {
-
- public static final String TRANSFORM = "transform";
- public static final String LOADMOREOFFSET = "loadmoreoffset";
+public class WXListComponent extends BasicListComponent<BounceRecyclerView> {
private String TAG = "WXListComponent";
- private int mListCellCount = 0;
- private String mLoadMoreRetry = "";
- private ArrayList<ListBaseViewHolder> recycleViewList = new ArrayList<>();
- private static final Pattern transformPattern = Pattern.compile("([a-z]+)\\(([0-9\\.]+),?([0-9\\.]+)?\\)");
-
- private Map<String, AppearanceHelper> mAppearComponents = new HashMap<>();
-
- private boolean scrollable = true;
- private ArrayMap<String, Long> mRefToViewType;
- private SparseArray<ArrayList<WXComponent>> mViewTypes;
- protected BounceRecyclerView bounceRecyclerView;
- private WXRecyclerViewOnScrollListener mViewOnScrollListener = new WXRecyclerViewOnScrollListener(this);
-
- private static final int MAX_VIEWTYPE_ALLOW_CACHE = 9;
- private static boolean mAllowCacheViewHolder = true;
- private static boolean mDownForBidCacheViewHolder = false;
-
- /**
- * Map for storing component that is sticky.
- **/
- private Map<String, HashMap<String, WXComponent>> mStickyMap = new HashMap<>();
- private WXStickyHelper stickyHelper;
@Deprecated
public WXListComponent(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
- this(instance,dom,parent,isLazy);
+ this(instance, dom, parent, isLazy);
}
- public WXListComponent(WXSDKInstance instance, WXDomObject node, WXVContainer parent, boolean lazy) {
- super(instance, node, parent, lazy);
- stickyHelper = new WXStickyHelper(this);
- }
-
- /**
- * Measure the size of the recyclerView.
- *
- * @param width the expected width
- * @param height the expected height
- * @return the result of measurement
- */
- @Override
- protected MeasureOutput measure(int width, int height) {
- int screenH = WXViewUtils.getScreenHeight(WXEnvironment.sApplication);
- int weexH = WXViewUtils.getWeexHeight(getInstanceId());
- int outHeight = height > (weexH >= screenH ? screenH : weexH) ? weexH - getAbsoluteY() : height;
- return super.measure(width, outHeight);
- }
-
- protected int getOrientation(){
- return Constants.Orientation.VERTICAL;
- }
-
- @Override
- public void destroy() {
- super.destroy();
- if (mStickyMap != null)
- mStickyMap.clear();
- if (mViewTypes != null)
- mViewTypes.clear();
- if (mRefToViewType != null)
- mRefToViewType.clear();
- }
-
- @Override
- public ViewGroup.LayoutParams getChildLayoutParams(WXComponent child,View hostView, int width, int height, int left, int right, int top, int bottom) {
- ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) hostView.getLayoutParams();
- if(child instanceof WXBaseRefresh && params == null) {
- params = new LinearLayout.LayoutParams(width,height);
- }else if(params == null) {
- params = new RecyclerView.LayoutParams(width, height);
- }else {
- params.width = width;
- params.height = height;
- params.setMargins(left, 0, right, 0);
- }
- return params;
- }
-
- /**
- * These transform functions are supported:
- - `scale(x,y)`: scale item, x and y should be a positive float number.
- - `translate(x,y)`: translate item, `x` and `y` shoule be integer numbers.
- - `opacity(n)`: change the transparency of item, `n` must in `[0,1.0]`.
- - `rotate(n)`: rotate item, n is integer number.
- * @param raw
- * @return
- */
- private RecyclerView.ItemDecoration parseTransforms(String raw){
- if(raw == null){
- return null;
- }
- float scaleX = 0f,scaleY = 0f;
- int translateX = 0,translateY = 0;
- float opacity = 0f;
- int rotate = 0;
- //public TransformItemDecoration(boolean isVertical,float alpha,int translateX,int translateY,int rotation,float scale)
- Matcher matcher = transformPattern.matcher(raw);
- while(matcher.find()){
- String match = matcher.group();
- String name = matcher.group(1);
- try {
- switch (name) {
- case "scale":
- scaleX = Float.parseFloat(matcher.group(2));
- scaleY = Float.parseFloat(matcher.group(3));
- break;
- case "translate":
- translateX = Integer.parseInt(matcher.group(2));
- translateY = Integer.parseInt(matcher.group(3));
- break;
- case "opacity":
- opacity = Float.parseFloat(matcher.group(2));
- break;
- case "rotate":
- rotate = Integer.parseInt(matcher.group(2));
- break;
- default:
- WXLogUtils.e(TAG, "Invaild transform expression:" + match);
- break;
- }
- }catch (NumberFormatException e){
- WXLogUtils.e("", e);
- WXLogUtils.e(TAG, "Invaild transform expression:" + match);
- }
- }
- return new TransformItemDecoration(getOrientation() == Constants.Orientation.VERTICAL, opacity, translateX, translateY, rotate, scaleX, scaleY);
- }
-
- @Override
- protected BounceRecyclerView initComponentHostView(@NonNull Context context) {
- bounceRecyclerView = new BounceRecyclerView(context, getOrientation());
-
- String transforms = (String) getDomObject().getAttrs().get(TRANSFORM);
- if (transforms != null) {
- bounceRecyclerView.getInnerView().addItemDecoration(parseTransforms(transforms));
- }
-
- RecyclerViewBaseAdapter recyclerViewBaseAdapter = new RecyclerViewBaseAdapter<>(this);
- recyclerViewBaseAdapter.setHasStableIds(true);
- bounceRecyclerView.setAdapter(recyclerViewBaseAdapter);
- bounceRecyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
- bounceRecyclerView.getInnerView().clearOnScrollListeners();
- bounceRecyclerView.getInnerView().addOnScrollListener(mViewOnScrollListener);
- bounceRecyclerView.getInnerView().addOnScrollListener(new RecyclerView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
- super.onScrollStateChanged(recyclerView, newState);
-
- if(newState == RecyclerView.SCROLL_STATE_IDLE ){
- for(ListBaseViewHolder holder:recycleViewList){
- if(holder!=null
- && holder.getComponent()!=null
- && !holder.getComponent().isUsing()) {
- recycleImage(holder.getView());
- }
- }
- recycleViewList.clear();
- }
- List<OnWXScrollListener> listeners = getInstance().getWXScrollListeners();
- if (listeners != null && listeners.size() > 0) {
- for (OnWXScrollListener listener : listeners) {
- if (listener != null) {
- View topView = recyclerView.getChildAt(0);
- if (topView != null) {
- int y = topView.getTop();
- listener.onScrollStateChanged(recyclerView, 0, y, newState);
- }
- }
- }
- }
- }
-
- @Override
- public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
- super.onScrolled(recyclerView, dx, dy);
- List<OnWXScrollListener> listeners = getInstance().getWXScrollListeners();
- if(listeners!=null && listeners.size()>0){
- for (OnWXScrollListener listener : listeners) {
- if (listener != null) {
- listener.onScrolled(recyclerView, dx, dy);
- }
- }
- }
- }
- });
- bounceRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
- @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
- @Override
- public void onGlobalLayout() {
- mViewOnScrollListener.onScrolled(bounceRecyclerView.getInnerView(),0,0);
- View view;
- if((view = getHostView()) == null)
- return;
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
- }else{
- view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
- }
- }
- });
- return bounceRecyclerView;
- }
-
- @Override
- public void bindStickStyle(WXComponent component) {
- stickyHelper.bindStickStyle(component,mStickyMap);
+ public WXListComponent(WXSDKInstance instance, WXDomObject node, WXVContainer parent, boolean lazy) {
+ super(instance, node, parent);
}
@Override
- public void unbindStickStyle(WXComponent component) {
- stickyHelper.unbindStickStyle(component,mStickyMap);
- }
-
- private @Nullable WXComponent findDirectListChild(WXComponent comp){
- WXComponent parent;
- if(comp == null || (parent = comp.getParent()) == null){
- return null;
- }
-
- if(parent instanceof WXListComponent){
- return comp;
- }
-
- return findDirectListChild(parent);
+ protected BounceRecyclerView generateListView(Context context, int orientation) {
+ return new BounceRecyclerView(context, orientation);
}
@Override
- protected boolean setProperty(String key, Object param) {
- switch (key){
- case LOADMOREOFFSET:
- return true;
- case Constants.Name.SCROLLABLE:
- boolean scrollable = WXUtils.getBoolean(param, true);
- setScrollable(scrollable);
- return true;
- }
- return super.setProperty(key, param);
- }
-
- @WXComponentProp(name = Constants.Name.SCROLLABLE)
- public void setScrollable(boolean scrollable) {
- View inner = getHostView().getInnerView();
- if(inner instanceof WXRecyclerView) {
- ((WXRecyclerView) inner).setScrollable(scrollable);
- };
- }
-
- private void setAppearanceWatch(WXComponent component, int event, boolean enable) {
- AppearanceHelper item = mAppearComponents.get(component.getRef());
- if (item != null) {
- item.setWatchEvent(event, enable);
- } else if (!enable) {
- //Do nothing if disable target not exist.
- } else {
- WXComponent dChild = findDirectListChild(component);
- int index = mChildren.indexOf(dChild);
- if (index != -1) {
- item = new AppearanceHelper(component, index);
- item.setWatchEvent(event, true);
- mAppearComponents.put(component.getRef(), item);
- }
+ public void addChild(WXComponent child, int index) {
+ super.addChild(child, index);
+ if (child == null || index < -1) {
+ return;
}
+ setRefreshOrLoading(child);
}
- @Override
- public void bindAppearEvent(WXComponent component) {
- setAppearanceWatch(component, AppearanceHelper.APPEAR,true);
- }
-
- @Override
- public void bindDisappearEvent(WXComponent component) {
- setAppearanceWatch(component, AppearanceHelper.DISAPPEAR,true);
- }
-
- @Override
- public void unbindAppearEvent(WXComponent component) {
- setAppearanceWatch(component, AppearanceHelper.APPEAR,false);
- }
-
- @Override
- public void unbindDisappearEvent(WXComponent component) {
- setAppearanceWatch(component, AppearanceHelper.DISAPPEAR,false);
- }
- @Override
- public void scrollTo(WXComponent component,final int offset) {
- if(bounceRecyclerView == null){
- return;
- }
+ /**
+ * Setting refresh view and loading view
+ *
+ * @param child the refresh_view or loading_view
+ */
+ private boolean setRefreshOrLoading(final WXComponent child) {
- WXComponent parent = component;
- WXCell cell = null;
- while(parent != null){
- if(parent instanceof WXCell){
- cell = (WXCell) parent;
- break;
- }
- parent = parent.getParent();
+ if (getHostView() == null) {
+ WXLogUtils.e(TAG, "setRefreshOrLoading: HostView == null !!!!!! check list attr has append =tree");
+ return true;
}
- if(cell !=null){
- int pos = mChildren.indexOf(cell);
- final WXRecyclerView view = bounceRecyclerView.getInnerView();
- view.scrollToPosition(pos);
- final WXComponent cellComp = cell;
- //scroll cell to top
- view.postDelayed(new Runnable() {
+ if (child instanceof WXRefresh) {
+ getHostView().setOnRefreshListener((WXRefresh) child);
+ getHostView().postDelayed(new Runnable() {
@Override
public void run() {
- if(cellComp.getHostView() == null){
- return;
- }
- View cellView = cellComp.getHostView();
- if(getOrientation() == Constants.Orientation.VERTICAL){
- int scrollY = cellView.getTop()+offset;
- view.smoothScrollBy(0,scrollY );
- }else{
- int scrollX = cellView.getLeft()+offset;
- view.smoothScrollBy(scrollX,0);
- }
+ getHostView().setHeaderView(child);
}
- },50);
-
+ }, 100);
+ return true;
}
- }
-
- @Override
- public void onBeforeScroll(int dx, int dy) {
- if (mStickyMap == null) {
- return;
- }
- HashMap<String, WXComponent> stickyMap = mStickyMap.get(getRef());
- if (stickyMap == null) {
- return;
- }
- Iterator<Map.Entry<String, WXComponent>> iterator = stickyMap.entrySet().iterator();
- Map.Entry<String, WXComponent> entry;
- WXComponent stickyComponent;
- while (iterator.hasNext()) {
- entry = iterator.next();
- stickyComponent = entry.getValue();
-
- if (stickyComponent != null && stickyComponent.getDomObject() != null
- && stickyComponent instanceof WXCell) {
-
- WXCell cell = (WXCell) stickyComponent;
- if (cell.getHostView() == null) {
- return;
- }
-
- if (stickyComponent != null && stickyComponent.getDomObject() != null
- && stickyComponent instanceof WXCell) {
- if (stickyComponent.getHostView() == null) {
- return;
- }
-
- RecyclerView.LayoutManager layoutManager;
- boolean beforeFirstVisibleItem = false;
- if ((layoutManager = getHostView().getInnerView().getLayoutManager()) instanceof LinearLayoutManager) {
- int fVisible = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition();
- int pos = mChildren.indexOf(cell);
-
- if (pos <= fVisible) {
- beforeFirstVisibleItem = true;
- }
- }
-
- int[] location = new int[2];
- stickyComponent.getHostView().getLocationOnScreen(location);
- int[] parentLocation = new int[2];
- stickyComponent.getParentScroller().getView().getLocationOnScreen(parentLocation);
-
- int top = location[1] - parentLocation[1];
-
- boolean showSticky = beforeFirstVisibleItem && cell.getLocationFromStart() >= 0 && top <= 0 && dy >= 0;
- boolean removeSticky = cell.getLocationFromStart() <= 0 && top > 0 && dy <= 0;
- if (showSticky) {
- bounceRecyclerView.notifyStickyShow(cell);
- } else if (removeSticky) {
- bounceRecyclerView.notifyStickyRemove(cell);
- }
- cell.setLocationFromStart(top);
- }
+ if (child instanceof WXLoading) {
+ getHostView().setOnLoadingListener((WXLoading) child);
+ getHostView().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ getHostView().setFooterView(child);
}
- }
+ }, 100);
+ return true;
}
- @Override
- public int getScrollY() {
- return bounceRecyclerView == null?0:bounceRecyclerView.getInnerView().getScrollY();
- }
-
- @Override
- public int getScrollX() {
- return bounceRecyclerView == null?0:bounceRecyclerView.getInnerView().getScrollX();
- }
-
- /**
- * Append a child component to the end of WXListComponent. This will not refresh the underlying
- * view immediately. The message of index of the inserted child is given to the adapter, and the
- * adapter will determine when to refresh. The default implementation of adapter will push the
- * message into a message and refresh the view in a period of time.
- *
- * @param child the inserted child
- */
- @Override
- public void addChild(WXComponent child) {
- addChild(child, -1);
- }
-
- @Override
- protected int getChildrenLayoutTopOffset() {
- return 0;
- }
-
- /**
- * @param child the inserted child
- * @param index the index of the child to be inserted.
- * @see #addChild(WXComponent)
- */
- @Override
- public void addChild(WXComponent child, int index) {
- super.addChild(child,index);
-
- if (child == null || index < -1) {
- return;
- }
- setRefreshOrLoading(child);
- int count = mChildren.size();
- index = index >= count ? -1 : index;
- bindViewType(child);
-
- int adapterPosition = index == -1 ? mChildren.size() - 1 : index;
- BounceRecyclerView view = getHostView();
- if (view != null) {
- view.getAdapter().notifyItemInserted(adapterPosition);
- }
- relocateAppearanceHelper();
+ return false;
}
@Override
public void createChildViewAt(int index) {
int indexToCreate = index;
- if(indexToCreate < 0){
- indexToCreate = childCount()-1;
- if(indexToCreate < 0 ){
+ if (indexToCreate < 0) {
+ indexToCreate = childCount() - 1;
+ if (indexToCreate < 0) {
return;
}
}
final WXComponent child = getChild(indexToCreate);
- if(child instanceof WXBaseRefresh){
+ if (child instanceof WXBaseRefresh) {
child.createView();
if (child instanceof WXRefresh) {
- getHostView().setOnRefreshListener((WXRefresh)child);
+ getHostView().setOnRefreshListener((WXRefresh) child);
getHostView().postDelayed(new Runnable() {
@Override
public void run() {
getHostView().setHeaderView(child);
}
- },100);
- }else if (child instanceof WXLoading) {
- getHostView().setOnLoadingListener((WXLoading)child);
+ }, 100);
+ } else if (child instanceof WXLoading) {
+ getHostView().setOnLoadingListener((WXLoading) child);
getHostView().postDelayed(new Runnable() {
@Override
public void run() {
getHostView().setFooterView(child);
}
- },100);
+ }, 100);
}
- }else {
+ } else {
super.createChildViewAt(indexToCreate);
}
}
- private void relocateAppearanceHelper() {
- Iterator<Map.Entry<String, AppearanceHelper>> iterator = mAppearComponents.entrySet().iterator();
- while(iterator.hasNext()){
- Map.Entry<String, AppearanceHelper> item = iterator.next();
- AppearanceHelper value = item.getValue();
- WXComponent dChild = findDirectListChild(value.getAwareChild());
- int index = mChildren.indexOf(dChild);
- value.setCellPosition(index);
- }
+ public void remove(WXComponent child, boolean destroy) {
+ super.remove(child, destroy);
+ removeFooterOrHeader(child);
}
- /**
- * Setting refresh view and loading view
- * @param child the refresh_view or loading_view
- */
- private boolean setRefreshOrLoading(final WXComponent child) {
-
- if(getHostView() == null){
- WXLogUtils.e(TAG, "setRefreshOrLoading: HostView == null !!!!!! check list attr has append =tree");
- return true;
- }
- if (child instanceof WXRefresh) {
- getHostView().setOnRefreshListener((WXRefresh)child);
- getHostView().postDelayed(new Runnable() {
- @Override
- public void run() {
- getHostView().setHeaderView(child);
- }
- },100);
- return true;
- }
-
- if (child instanceof WXLoading) {
- getHostView().setOnLoadingListener((WXLoading)child);
- getHostView().postDelayed(new Runnable() {
- @Override
- public void run() {
- getHostView().setFooterView(child);
- }
- },100);
- return true;
- }
-
- return false;
- }
-
- /**
- * RecyclerView manage its children in a way that different from {@link WXVContainer}. Therefore,
- * {@link WXVContainer#addSubView(View, int)} is an empty implementation in {@link
- * com.taobao.weex.ui.view.listview.WXRecyclerView}
- */
- @Override
- protected void addSubView(View child, int index) {
-
- }
-
- /**
- * Remove the child from WXListComponent. This method will use {@link
- * java.util.List#indexOf(Object)} to retrieve the component to be deleted. Like {@link
- * #addChild(WXComponent)}, this method will not refresh the view immediately, the adapter will
- * decide when to refresh.
- *
- * @param child the child to be removed
- */
- @Override
- public void remove(WXComponent child, boolean destroy) {
- int index = mChildren.indexOf(child);
- if (destroy) {
- child.detachViewAndClearPreInfo();
- }
- unBindViewType(child);
-
- BounceRecyclerView view = getHostView();
- if(view == null){
- return;
- }
- view.getAdapter().notifyItemRemoved(index);
- if (WXEnvironment.isApkDebugable()) {
- WXLogUtils.d(TAG, "removeChild child at " + index);
- }
- super.remove(child, destroy);
- if (child instanceof WXLoading) {
- getHostView().removeFooterView(child);
- } else if (child instanceof WXRefresh) {
- getHostView().removeHeaderView(child);
- }
- }
-
- @Override
- public void computeVisiblePointInViewCoordinate(PointF pointF) {
- RecyclerView view = getHostView().getInnerView();
- pointF.set(view.computeHorizontalScrollOffset(), view.computeVerticalScrollOffset());
- }
-
- /**
- * Recycle viewHolder and its underlying view. This may because the view is removed or reused.
- * Either case, this method will be called.
- *
- * @param holder The view holder to be recycled.
- */
- @Override
- public void onViewRecycled(ListBaseViewHolder holder) {
- long begin=System.currentTimeMillis();
- holder.setComponentUsing(false);
- recycleViewList.add(holder);
- if(WXEnvironment.isApkDebugable()) {
- WXLogUtils.d(TAG, "Recycle holder " + (System.currentTimeMillis() - begin) + " Thread:" + Thread.currentThread().getName());
- }
- }
-
- /**
- * Bind the component of the position to the holder. Then flush the view.
- *
- * @param holder viewHolder, which holds reference to the view
- * @param position position of component in WXListComponent
- */
- @Override
- public void onBindViewHolder(ListBaseViewHolder holder, int position) {
- if (holder == null) return;
- holder.setComponentUsing(true);
- WXComponent component = getChild(position);
- if ( component == null
- || (component instanceof WXRefresh)
- || (component instanceof WXLoading)
- || (component.getDomObject()!=null && component.getDomObject().isFixed())
- ) {
- if(WXEnvironment.isApkDebugable()) {
- WXLogUtils.d(TAG, "Bind WXRefresh & WXLoading " + holder);
- }
- return;
- }
-
- if (holder.getComponent() != null && holder.getComponent() instanceof WXCell) {
- holder.getComponent().bindData(component);
-// holder.getComponent().refreshData(component);
- }
-
- }
-
- /**
- * Create an instance of {@link ListBaseViewHolder} for the given viewType (not for the given
- * index). This method will look up for the first component that fits the viewType requirement and
- * doesn't be used. Then create the certain type of view, detach the view f[rom the component.
- *
- * @param parent the ViewGroup into which the new view will be inserted
- * @param viewType the type of the new view
- * @return the created view holder.
- */
- @Override
- public ListBaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- if (mChildren != null) {
- if (mViewTypes == null)
- return createVHForFakeComponent(viewType);
- ArrayList<WXComponent> mTypes = mViewTypes.get(viewType);
- checkRecycledViewPool(viewType);
- if (mTypes == null)
- return createVHForFakeComponent(viewType);
-
- for (int i = 0; i < mTypes.size(); i++) {
- WXComponent component = mTypes.get(i);
- if (component == null
- || component.isUsing()) {
- continue;
- }
- if (component.getDomObject()!=null && component.getDomObject().isFixed()) {
- return createVHForFakeComponent(viewType);
- } else {
- if (component instanceof WXCell) {
- if (component.getRealView() != null) {
- return new ListBaseViewHolder(component, viewType);
- } else {
- ((WXCell)component).lazy(false);
- component.createView();
- component.applyLayoutAndEvent(component);
- return new ListBaseViewHolder(component, viewType);
- }
- } else if (component instanceof WXBaseRefresh){
- return createVHForRefreshComponent(viewType);
- }else {
- WXLogUtils.e(TAG, "List cannot include element except cell\u3001header\u3001fixed\u3001refresh and loading");
- return createVHForFakeComponent(viewType);
- }
- }
- }
- }
- if(WXEnvironment.isApkDebugable()) {
- WXLogUtils.e(TAG, "Cannot find request viewType: " + viewType);
- }
- return createVHForFakeComponent(viewType);
- }
-
- /**
- * Forbid ViewHolder cache if viewType > MAX_VIEWTYPE_ALLOW_CACHE
- * @param viewType
- */
- private void checkRecycledViewPool(int viewType) {
- try {
- if (mViewTypes.size() > MAX_VIEWTYPE_ALLOW_CACHE)
- mAllowCacheViewHolder = false;
-
- if (mDownForBidCacheViewHolder)
- if (getHostView() != null && getHostView().getInnerView() != null)
- getHostView().getInnerView().getRecycledViewPool().setMaxRecycledViews(viewType, 0);
-
- if (!mDownForBidCacheViewHolder) {
- if (!mAllowCacheViewHolder) {
- if (getHostView() != null && getHostView().getInnerView() != null) {
- for (int i = 0; i < mViewTypes.size(); i++) {
- getHostView().getInnerView().getRecycledViewPool().setMaxRecycledViews(mViewTypes.keyAt(i), 0);
- }
- mDownForBidCacheViewHolder = true;
- }
- }
- }
- } catch (Exception e) {
- WXLogUtils.e(TAG, "Clear recycledViewPool error!");
- }
- }
-
- /**
- * Return the child component type. The type is defined by scopeValue in .we file.
- *
- * @param position the position of the child component.
- * @return the type of certain component.
- */
- @Override
- public int getItemViewType(int position) {
- return generateViewType(getChild(position));
- }
-
- /**
- * ViewType will be classified into {HashMap<Integer,ArrayList<Integer>> mViewTypes}
- * @param component
- */
- private void bindViewType(WXComponent component) {
- int id = generateViewType(component);
-
- if (mViewTypes == null) {
- mViewTypes = new SparseArray<>();
- }
-
- ArrayList<WXComponent> mTypes = mViewTypes.get(id);
-
- if (mTypes == null) {
- mTypes = new ArrayList<>();
- mViewTypes.put(id,mTypes);
- }
- mTypes.add(component);
- }
-
- private void unBindViewType(WXComponent component) {
- int id = generateViewType(component);
-
- if (mViewTypes == null)
- return;
- ArrayList<WXComponent> mTypes = mViewTypes.get(id);
- if (mTypes == null)
- return;
-
- mTypes.remove(component);
- }
-
- /**
- * generate viewtype by component
- * @param component
- * @return
- */
- private int generateViewType(WXComponent component) {
- long id;
- try {
- id = Integer.parseInt(component.getDomObject().getRef());
- String type = component.getDomObject().getAttrs().getScope();
-
- if (!TextUtils.isEmpty(type)) {
- if (mRefToViewType == null) {
- mRefToViewType = new ArrayMap<>();
- }
- if (!mRefToViewType.containsKey(type)) {
- mRefToViewType.put(type, id);
- }
- id = mRefToViewType.get(type);
-
- }
- } catch (RuntimeException e) {
- WXLogUtils.eTag(TAG, e);
- id = RecyclerView.NO_ID;
- WXLogUtils.e(TAG, "getItemViewType: NO ID, this will crash the whole render system of WXListRecyclerView");
- }
- return (int) id;
- }
-
- /**
- * Get child component num.
- *
- * @return return the size of {@link #mChildren} if mChildren is not empty, otherwise, return 0;
- */
- @Override
- public int getItemCount() {
- return getChildCount();
- }
-
- @Override
- public boolean onFailedToRecycleView(ListBaseViewHolder holder) {
- if(WXEnvironment.isApkDebugable()) {
- WXLogUtils.d(TAG, "Failed to recycle " + holder);
- }
- return false;
- }
-
- @Override
- public long getItemId(int position) {
- long id;
- try {
- id = Long.parseLong(getChild(position).getDomObject().getRef());
- } catch (RuntimeException e) {
- WXLogUtils.e(TAG, WXLogUtils.getStackTrace(e));
- id = RecyclerView.NO_ID;
- }
- return id;
- }
-
- @Override
- public void onLoadMore(int offScreenY) {
- try {
- String offset = getDomObject().getAttrs().getLoadMoreOffset();
-
- if (TextUtils.isEmpty(offset)) {
- offset="0";
- }
-
- if (offScreenY < Integer.parseInt(offset)) {
- String loadMoreRetry = getDomObject().getAttrs().getLoadMoreRetry();
- if (loadMoreRetry == null) {
- loadMoreRetry = mLoadMoreRetry;
- }
-
- if (mListCellCount != mChildren.size()
- || mLoadMoreRetry == null || !mLoadMoreRetry.equals(loadMoreRetry)) {
- fireEvent(Constants.Event.LOADMORE);
- mListCellCount = mChildren.size();
- mLoadMoreRetry = loadMoreRetry;
- }
- }
- } catch (Exception e) {
- WXLogUtils.d(TAG + "onLoadMore :", e);
- }
- }
-
- @Override
- public void notifyAppearStateChange(int firstVisible, int lastVisible, int directionX, int directionY) {
- //notify appear state
- Iterator<AppearanceHelper> it = mAppearComponents.values().iterator();
- String direction = directionY > 0 ? Constants.Value.DIRECTION_UP :
- directionY < 0 ? Constants.Value.DIRECTION_DOWN : null;
- if (getOrientation() == Constants.Orientation.HORIZONTAL && directionX != 0) {
- direction = directionX > 0 ? Constants.Value.DIRECTION_LEFT : Constants.Value.DIRECTION_RIGHT;
- }
-
- while (it.hasNext()) {
- AppearanceHelper item = it.next();
- WXComponent component = item.getAwareChild();
-
- if (!item.isWatch()) {
- continue;
- }
-
- boolean outOfVisibleRange = item.getCellPositionINScollable() < firstVisible || item.getCellPositionINScollable() > lastVisible;
-
- View view = component.getHostView();
- if (view == null) {
- continue;
- }
-
- boolean visible = (!outOfVisibleRange) && item.isViewVisible();
-
- int result = item.setAppearStatus(visible);
- if (WXEnvironment.isApkDebugable()) {
- WXLogUtils.d("appear", "item " + item.getCellPositionINScollable() + " result " + result);
- }
- if (result == AppearanceHelper.RESULT_NO_CHANGE) {
- continue;
- }
- component.notifyAppearStateChange(result == AppearanceHelper.RESULT_APPEAR ? Constants.Event.APPEAR : Constants.Event.DISAPPEAR, direction);
+ private void removeFooterOrHeader(WXComponent child) {
+ if (child instanceof WXLoading) {
+ getHostView().removeFooterView(child);
+ } else if (child instanceof WXRefresh) {
+ getHostView().removeHeaderView(child);
}
}
-
- private void recycleImage(View view) {
- if (view instanceof ImageView) {
- if (getInstance().getImgLoaderAdapter() != null) {
- getInstance().getImgLoaderAdapter().setImage(null, (ImageView) view,
- null, null);
- } else {
- if (WXEnvironment.isApkDebugable()) {
- throw new WXRuntimeException("getImgLoaderAdapter() == null");
- }
- WXLogUtils.e("Error getImgLoaderAdapter() == null");
- }
-
- } else if (view instanceof ViewGroup) {
- for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
- recycleImage(((ViewGroup) view).getChildAt(i));
- }
- }
- }
-
- @NonNull
- private ListBaseViewHolder createVHForFakeComponent(int viewType) {
- FrameLayout view = new FrameLayout(getContext());
- view.setBackgroundColor(Color.WHITE);
- view.setLayoutParams(new FrameLayout.LayoutParams(0, 0));
- return new ListBaseViewHolder(view, viewType);
- }
-
-
- private ListBaseViewHolder createVHForRefreshComponent(int viewType) {
- FrameLayout view = new FrameLayout(getContext());
- view.setBackgroundColor(Color.WHITE);
- view.setLayoutParams(new FrameLayout.LayoutParams(1, 1));
- view.setVisibility(View.GONE);
- return new ListBaseViewHolder(view, viewType);
- }
- @JSMethod
- public void resetLoadmore() {
- mLoadMoreRetry = "";
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5a700270/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceRecyclerView.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceRecyclerView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceRecyclerView.java
index 29a086a..7da09b5 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceRecyclerView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceRecyclerView.java
@@ -215,6 +215,7 @@ import android.view.ViewParent;
import com.taobao.weex.common.WXThread;
import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.list.ListComponentView;
import com.taobao.weex.ui.component.list.WXCell;
import com.taobao.weex.ui.view.gesture.WXGesture;
import com.taobao.weex.ui.view.gesture.WXGestureObservable;
@@ -223,7 +224,7 @@ import com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter;
import java.util.Stack;
-public class BounceRecyclerView extends BaseBounceView<WXRecyclerView> implements WXGestureObservable {
+public class BounceRecyclerView extends BaseBounceView<WXRecyclerView> implements ListComponentView,WXGestureObservable {
private RecyclerViewBaseAdapter adapter = null;
private Stack<View> headerViewStack = new Stack<>();
@@ -243,13 +244,17 @@ public class BounceRecyclerView extends BaseBounceView<WXRecyclerView> implement
super(context, attrs, OrientationHelper.VERTICAL);
}
- public void setAdapter(RecyclerViewBaseAdapter adapter) {
+ public void setRecyclerViewBaseAdapter(RecyclerViewBaseAdapter adapter) {
this.adapter = adapter;
if (getInnerView() != null) {
getInnerView().setAdapter(adapter);
}
}
+ public RecyclerViewBaseAdapter getRecyclerViewBaseAdapter() {
+ return adapter;
+ }
+
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean result = super.onTouchEvent(event);
@@ -258,11 +263,7 @@ public class BounceRecyclerView extends BaseBounceView<WXRecyclerView> implement
}
return result;
}
-
- public RecyclerViewBaseAdapter getAdapter() {
- return adapter;
- }
-
+
@Override
public WXRecyclerView setInnerView(Context context) {
WXRecyclerView wxRecyclerView = new WXRecyclerView(context);
[25/50] [abbrv] incubator-weex git commit: Merge pull request #2209
from acton393/ios-feature-20170118
Posted by ji...@apache.org.
Merge pull request #2209 from acton393/ios-feature-20170118
* [ios] iOS feature 20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/2cebd325
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/2cebd325
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/2cebd325
Branch: refs/heads/master
Commit: 2cebd325baf0cf8b128a86ca681f05edc625442f
Parents: 2371256 4d5bc33
Author: \u9690\u5c0f\u98ce <cx...@gmail.com>
Authored: Wed Jan 11 11:51:07 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Wed Jan 11 11:51:07 2017 +0800
----------------------------------------------------------------------
.../Sources/Component/WXImageComponent.m | 23 +++++++-------------
.../WeexSDK/Sources/Component/WXTextComponent.m | 1 +
.../Sources/Display/WXComponent+Display.m | 6 +----
.../Sources/Manager/WXComponentManager.m | 2 ++
ios/sdk/WeexSDK/Sources/Model/WXComponent.h | 2 +-
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 6 +++--
6 files changed, 17 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
[37/50] [abbrv] incubator-weex git commit: Merge branch
'v0.10.0-stable' of github.com:sospartan/weex into v0.10.0-stable
Posted by ji...@apache.org.
Merge branch 'v0.10.0-stable' of github.com:sospartan/weex into v0.10.0-stable
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/235b87fd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/235b87fd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/235b87fd
Branch: refs/heads/master
Commit: 235b87fd76f4d642533c02e7b181da839596b5fa
Parents: 0d992e4 5a70027
Author: sospartan <so...@gmail.com>
Authored: Wed Jan 11 16:10:33 2017 +0800
Committer: sospartan <so...@gmail.com>
Committed: Wed Jan 11 16:10:33 2017 +0800
----------------------------------------------------------------------
.../main/java/com/taobao/weex/WXSDKEngine.java | 4 +-
.../ui/component/list/BasicListComponent.java | 1104 ++++++++++++++++++
.../ui/component/list/ListComponentView.java | 223 ++++
.../ui/component/list/SimpleListComponent.java | 231 ++++
.../ui/component/list/SimpleRecyclerView.java | 329 ++++++
.../weex/ui/component/list/WXListComponent.java | 944 +--------------
.../refresh/wrapper/BounceRecyclerView.java | 15 +-
7 files changed, 1951 insertions(+), 899 deletions(-)
----------------------------------------------------------------------
[40/50] [abbrv] incubator-weex git commit: * [ios] update weexSDK
version number.
Posted by ji...@apache.org.
* [ios] update weexSDK version number.
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/d0748c2c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/d0748c2c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/d0748c2c
Branch: refs/heads/master
Commit: d0748c2c0b793deb1a732f3bdbb83c2d0e321cdb
Parents: 7668b27
Author: boboning <ni...@163.com>
Authored: Wed Jan 11 16:35:26 2017 +0800
Committer: boboning <ni...@163.com>
Committed: Wed Jan 11 16:35:26 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK.podspec | 2 +-
ios/sdk/WeexSDK/Sources/Utility/WXDefine.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d0748c2c/ios/sdk/WeexSDK.podspec
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK.podspec b/ios/sdk/WeexSDK.podspec
index ec2b810..f240ecd 100644
--- a/ios/sdk/WeexSDK.podspec
+++ b/ios/sdk/WeexSDK.podspec
@@ -2,7 +2,7 @@
Pod::Spec.new do |s|
s.name = "WeexSDK"
- s.version = "0.9.4"
+ s.version = "0.9.5"
s.summary = "WeexSDK Source ."
s.description = <<-DESC
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d0748c2c/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h b/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
index 80e7212..d743d53 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
@@ -9,7 +9,7 @@
#ifndef __WX_DEFINE_H__
#define __WX_DEFINE_H__
-#define WX_SDK_VERSION @"0.9.4"
+#define WX_SDK_VERSION @"0.9.5"
#if defined(__cplusplus)
#define WX_EXTERN extern "C" __attribute__((visibility("default")))
[43/50] [abbrv] incubator-weex git commit: Merge pull request #2220
from boboning/ios-jsframework-0.19.7
Posted by ji...@apache.org.
Merge pull request #2220 from boboning/ios-jsframework-0.19.7
ios update weexSDK Version to 0.9.5
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/50641f1c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/50641f1c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/50641f1c
Branch: refs/heads/master
Commit: 50641f1c98544a3dcfc2ead3c83992cfc1868725
Parents: 46332dd ee0f2bb
Author: \u9690\u5c0f\u98ce <cx...@gmail.com>
Authored: Wed Jan 11 16:54:43 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Wed Jan 11 16:54:43 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK.podspec | 4 +++-
ios/sdk/WeexSDK/Sources/Utility/WXDefine.h | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
[13/50] [abbrv] incubator-weex git commit: * [ios] fix compiler
complains
Posted by ji...@apache.org.
* [ios] fix compiler complains
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/9f966590
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/9f966590
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/9f966590
Branch: refs/heads/master
Commit: 9f966590ecc6e72f47784f2e696b479a6fdc361a
Parents: b25b16c
Author: acton393 <zh...@gmail.com>
Authored: Tue Jan 10 22:52:11 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Tue Jan 10 22:52:11 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9f966590/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index 0220ace..9f18941 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -395,7 +395,7 @@ typedef enum : NSUInteger {
#pragma mark Private Methods
-- (void)_addModuleEventObserversWith:(WXModuleMethod *)method
+- (void)_addModuleEventObserversWithModuleMethod:(WXModuleMethod *)method
{
if ([method.arguments count] < 2) {
WXLogError(@"please check your method parameter!!");
@@ -417,7 +417,7 @@ typedef enum : NSUInteger {
NSMutableDictionary * option = [methodArguments[3] mutableCopy];
[option setObject:method.moduleName forKey:@"moduleName"];
// the value for moduleName in option is for the need of callback
- [self addModuleEventObservers:methodArguments[0] callback:methodArguments[1] option:option moduleClassName:NSClassFromString(moduleClass)];
+ [self addModuleEventObservers:methodArguments[0] callback:methodArguments[1] option:option moduleClassName:NSStringFromClass(moduleClass)];
}
- (void)addModuleEventObservers:(NSString*)event callback:(NSString*)callbackId option:(NSDictionary *)option moduleClassName:(NSString*)moduleClassName
@@ -437,11 +437,13 @@ typedef enum : NSUInteger {
}
}
-- (void)_removeModuleEventObserverWithArguments:(NSArray*)arguments moduleClassName:(NSString*)moduleClassName {
- if (![arguments count] && [arguments[0] isKindOfClass:[NSString class]]) {
+- (void)_removeModuleEventObserverWithModuleMethod:(WXModuleMethod *)method
+{
+ if (![method.arguments count] && [method.arguments[0] isKindOfClass:[NSString class]]) {
return;
}
- [self removeModuleEventObserver:arguments[0] moduleClassName:moduleClassName];
+ Class moduleClass = [WXModuleFactory classWithModuleName:method.moduleName];
+ [self removeModuleEventObserver:method.arguments[0] moduleClassName:NSStringFromClass(moduleClass)];
}
- (void)removeModuleEventObserver:(NSString*)event moduleClassName:(NSString*)moduleClassName
@@ -465,7 +467,7 @@ typedef enum : NSUInteger {
NSDictionary * callbackInfo = listeners[i];
NSString *callbackId = callbackInfo[@"callbackId"];
BOOL once = [callbackInfo[@"once"] boolValue];
- NSMutableDictionary * retData = @{@"type":userInfo[@"eventName"],
+ NSDictionary * retData = @{@"type":userInfo[@"eventName"],
@"module":callbackInfo[@"moduleName"],
@"data":userInfo[@"param"]};
[[WXSDKManager bridgeMgr] callBack:self.instanceId funcId:callbackId params:retData keepAlive:!once];
[09/50] [abbrv] incubator-weex git commit: Merge pull request #2201
from acton393/ios-feature-20170118
Posted by ji...@apache.org.
Merge pull request #2201 from acton393/ios-feature-20170118
* [ios] moduleEvent support variable value
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/77d3fba2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/77d3fba2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/77d3fba2
Branch: refs/heads/master
Commit: 77d3fba2167497d7a5d46866135a6303438a074c
Parents: d26ef73 1fb2e0a
Author: \u9f50\u5c71 <su...@163.com>
Authored: Tue Jan 10 21:35:34 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Tue Jan 10 21:35:34 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 16 ++++++------
.../Sources/Component/WXImageComponent.m | 3 ++-
.../Sources/Display/WXComponent+Display.m | 2 +-
.../WeexSDK/Sources/Loader/WXResourceLoader.m | 2 +-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h | 2 +-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 26 +++++++++++++++++++-
.../Sources/Model/WXSDKInstance_private.h | 2 ++
7 files changed, 39 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
[28/50] [abbrv] incubator-weex git commit: * [ios] rename method
Posted by ji...@apache.org.
* [ios] rename method
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/a8720c24
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/a8720c24
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/a8720c24
Branch: refs/heads/master
Commit: a8720c24e1a5e20387d76d0343bf3d5840bb60eb
Parents: 6bccb06
Author: acton393 <zh...@gmail.com>
Authored: Wed Jan 11 13:12:14 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Jan 11 13:12:14 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m | 14 +++++++-------
ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m | 2 +-
ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m | 4 ++--
ios/sdk/WeexSDK/Sources/Model/WXComponent.h | 4 ++--
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 4 ++--
5 files changed, 14 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a8720c24/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
index 569c900..47040c7 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
@@ -225,7 +225,7 @@ static dispatch_queue_t WXImageUpdateQueue;
dispatch_async(dispatch_get_main_queue(), ^{
self.layer.contents = nil;
weakSelf.imageDownloadFinish = YES;
- [weakSelf readyToShow];
+ [weakSelf readyToRender];
});
}
});
@@ -249,7 +249,7 @@ static dispatch_queue_t WXImageUpdateQueue;
downloadFailedBlock(placeholderSrc,error);
if ([strongSelf isViewLoaded] && !viewImage) {
((UIImageView *)(strongSelf.view)).image = nil;
- [self readyToShow];
+ [self readyToRender];
}
return;
}
@@ -260,7 +260,7 @@ static dispatch_queue_t WXImageUpdateQueue;
if ([strongSelf isViewLoaded] && !viewImage) {
((UIImageView *)strongSelf.view).image = image;
weakSelf.imageDownloadFinish = YES;
- [self readyToShow];
+ [self readyToRender];
}
});
}];
@@ -289,7 +289,7 @@ static dispatch_queue_t WXImageUpdateQueue;
}
if (error) {
downloadFailedBlock(imageSrc, error);
- [strongSelf readyToShow];
+ [strongSelf readyToRender];
return ;
}
@@ -300,7 +300,7 @@ static dispatch_queue_t WXImageUpdateQueue;
if ([strongSelf isViewLoaded]) {
strongSelf.imageDownloadFinish = YES;
((UIImageView *)strongSelf.view).image = image;
- [strongSelf readyToShow];
+ [strongSelf readyToRender];
}
});
}];
@@ -308,11 +308,11 @@ static dispatch_queue_t WXImageUpdateQueue;
}
}
-- (void)readyToShow
+- (void)readyToRender
{
// when image download completely (success or failed)
if (self.weexInstance.trackComponent && _imageDownloadFinish) {
- [super readyToShow];
+ [super readyToRender];
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a8720c24/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 2f7f29c..256bda1 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
@@ -423,7 +423,7 @@ do {\
if (_isUsingTextStorageLock) {
pthread_mutex_unlock(&_textStorageMutex);
}
- [self readyToShow]; // notify super component
+ [self readyToRender]; // notify super component
[self setNeedsDisplay];
}
}];
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a8720c24/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
index 6c2c06d..65f6e69 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
@@ -375,7 +375,7 @@ static css_node_t * rootNodeGetChild(void *context, int i)
[component _updateStylesOnComponentThread:normalStyles resetStyles:resetStyles isUpdateStyles:isUpdateStyles];
[self _addUITask:^{
[component _updateStylesOnMainThread:normalStyles resetStyles:resetStyles];
- [component readyToShow];
+ [component readyToRender];
}];
}
@@ -390,7 +390,7 @@ static css_node_t * rootNodeGetChild(void *context, int i)
[component _updateAttributesOnComponentThread:attributes];
[self _addUITask:^{
[component _updateAttributesOnMainThread:attributes];
- [component readyToShow];
+ [component readyToRender];
}];
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a8720c24/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.h b/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
index c02eb9a..e8d7c0e 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
@@ -341,9 +341,9 @@ typedef void(^WXDisplayCompeletionBlock)(CALayer *layer, BOOL finished);
- (WXDisplayBlock)displayBlock;
/**
- * renderFinish
+ * readyToRender
*/
-- (void)readyToShow;
+- (void)readyToRender;
/**
* @abstract Return a block to be called while drawing is finished.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a8720c24/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
index 6953ee7..f35da20 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
@@ -430,10 +430,10 @@
WXAssertMainThread();
}
-- (void)readyToShow
+- (void)readyToRender
{
if (self.weexInstance.trackComponent) {
- [self.supercomponent readyToShow];
+ [self.supercomponent readyToRender];
}
}
[39/50] [abbrv] incubator-weex git commit: Merge pull request #2218
from acton393/ios-feature-20170118
Posted by ji...@apache.org.
Merge pull request #2218 from acton393/ios-feature-20170118
* [ios] update weexSDK version
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/46332dda
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/46332dda
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/46332dda
Branch: refs/heads/master
Commit: 46332dda60912472b14c316a9a42143e844287ee
Parents: 970e3b8 6163d27
Author: \u9690\u5c0f\u98ce <cx...@gmail.com>
Authored: Wed Jan 11 16:30:43 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Wed Jan 11 16:30:43 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK.podspec | 10 ++++++----
ios/sdk/WeexSDK/Sources/Utility/WXDefine.h | 2 +-
2 files changed, 7 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
[05/50] [abbrv] incubator-weex git commit: V0.10.0 stable sync bugfix
(#133)
Posted by ji...@apache.org.
V0.10.0 stable sync bugfix (#133)
* * [android] bugfix Dom module sync callback
* * [android] remove space
* * [android] set dirty flag
* Update WXDomModule.java
* Update WXBridgeManager.java
* * [android] return when callback ==undefined or -1
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/0c017703
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/0c017703
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/0c017703
Branch: refs/heads/master
Commit: 0c01770351df8edb1a10589ba396d137931a30e5
Parents: 80bcc0d
Author: zhengshihan <zh...@gmail.com>
Authored: Tue Jan 10 20:52:35 2017 +0800
Committer: sospartan zheng <so...@apache.org>
Committed: Tue Jan 10 20:52:35 2017 +0800
----------------------------------------------------------------------
.../main/java/com/taobao/weex/bridge/WXBridgeManager.java | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/0c017703/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 52f855f..be1bc51 100755
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -295,7 +295,9 @@ public class WXBridgeManager implements Callback,BactchExecutor {
public static final String MODULE = "module";
public static final String METHOD = "method";
public static final String ARGS = "args";
- private static final String UNDEFINED = "-1";
+ private static final String NON_CALLBACK = "-1";
+ private static final String UNDEFINED = "undefined";
+
private static final int INIT_FRAMEWORK_OK = 1;
private static long LOW_MEM_VALUE = 80;
@@ -579,7 +581,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
}
}
- if (UNDEFINED.equals(callback)) {
+ if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
return IWXBridge.INSTANCE_RENDERING_ERROR;
}
// get next tick
@@ -612,7 +614,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
domModule.addElement(ref, domObject, Integer.parseInt(index));
}
- if (UNDEFINED.equals(callback)) {
+ if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
return IWXBridge.INSTANCE_RENDERING_ERROR;
}
// get next tick
[24/50] [abbrv] incubator-weex git commit: * [ios] ensure default
modules/components/handlers are ready before create instance.
Posted by ji...@apache.org.
* [ios] ensure default modules/components/handlers are ready before create instance.
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/fdf5ed75
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/fdf5ed75
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/fdf5ed75
Branch: refs/heads/master
Commit: fdf5ed7533a15ff7126322a052bbf288cf249b87
Parents: 9b6f726
Author: \u9690\u98ce <cx...@gmail.com>
Authored: Wed Jan 11 11:33:55 2017 +0800
Committer: \u9690\u98ce <cx...@gmail.com>
Committed: Wed Jan 11 11:33:55 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h | 7 ++++++-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m | 14 +++++++++++---
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 4 ++++
3 files changed, 21 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fdf5ed75/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h
index 691573d..ad2f742 100644
--- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h
+++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h
@@ -13,7 +13,12 @@
@interface WXSDKEngine : NSObject
/**
- * @abstract Registers a module for a given name
+ * @abstract Register default modules/components/handlers, they will be reigstered only once.
+ **/
++ (void)registerDefaults;
+
+/**
+ * @abstract Register a module for a given name
*
* @param name The module name to register
*
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fdf5ed75/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
index 642cabc..a23e03e 100644
--- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
+++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
@@ -208,13 +208,21 @@
return;
}
- [self _registerDefaultComponents];
- [self _registerDefaultModules];
- [self _registerDefaultHandlers];
+ [self registerDefaults];
[[WXSDKManager bridgeMgr] executeJsFramework:script];
}
++ (void)registerDefaults
+{
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ [self _registerDefaultComponents];
+ [self _registerDefaultModules];
+ [self _registerDefaultHandlers];
+ });
+}
+
+ (NSString*)SDKEngineVersion
{
return WX_SDK_VERSION;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fdf5ed75/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index 50901bc..fd5a53b 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -25,6 +25,7 @@
#import "WXResourceRequest.h"
#import "WXResourceResponse.h"
#import "WXResourceLoader.h"
+#import "WXSDKEngine.h"
NSString *const bundleUrlOptionKey = @"bundleUrl";
@@ -173,6 +174,9 @@ typedef enum : NSUInteger {
}
});
+ // ensure default modules/components/handlers are ready before create instance
+ [WXSDKEngine registerDefaults];
+
[[WXSDKManager bridgeMgr] createInstance:self.instanceId template:mainBundleString options:dictionary data:_jsData];
WX_MONITOR_PERF_SET(WXPTBundleSize, [mainBundleString lengthOfBytesUsingEncoding:NSUTF8StringEncoding], self);
[02/50] [abbrv] incubator-weex git commit: V0.10.0 stable fixnpe
event (#132)
Posted by ji...@apache.org.
V0.10.0 stable fixnpe event (#132)
* * [android] fix switch case
* * [android] fix npe when add/remove event
* * [android] fix add/remove event
* * [android] fix npe when add/remove event
* * [android] fix add/remove event
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/80bcc0d7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/80bcc0d7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/80bcc0d7
Branch: refs/heads/master
Commit: 80bcc0d7f1e7dbbd8ee5f111e810cbc50578954e
Parents: 49b995a
Author: sospartan zheng <so...@apache.org>
Authored: Tue Jan 10 20:03:48 2017 +0800
Committer: YorkShen <sh...@gmail.com>
Committed: Tue Jan 10 20:03:48 2017 +0800
----------------------------------------------------------------------
.../com/taobao/weex/dom/WXDomStatement.java | 28 +++++++++++---------
.../com/taobao/weex/ui/WXRenderManager.java | 4 +--
.../com/taobao/weex/ui/WXRenderStatement.java | 4 +--
3 files changed, 20 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/80bcc0d7/android/sdk/src/main/java/com/taobao/weex/dom/WXDomStatement.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomStatement.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomStatement.java
index 171c232..4fd29be 100755
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomStatement.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomStatement.java
@@ -915,7 +915,7 @@ class WXDomStatement {
return;
}
WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
- WXDomObject domObject = mRegistry.get(ref);
+ final WXDomObject domObject = mRegistry.get(ref);
if (domObject == null) {
if (instance != null) {
instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_ADDEVENT);
@@ -923,15 +923,16 @@ class WXDomStatement {
return;
}
domObject.addEvent(type);
- //sync dom change to component
- AddDomInfo info = mAddDom.get(ref);
- WXComponent component = info.component;
- component.updateDom(domObject);
mNormalTasks.add(new IWXRenderTask() {
@Override
public void execute() {
- mWXRenderManager.addEvent(mInstanceId, ref, type);
+ WXComponent comp = mWXRenderManager.getWXComponent(mInstanceId,ref);
+ if(comp != null){
+ //sync dom change to component
+ comp.updateDom(domObject);
+ mWXRenderManager.addEvent(mInstanceId, ref, type);
+ }
}
@Override
@@ -959,7 +960,7 @@ class WXDomStatement {
return;
}
WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
- WXDomObject domObject = mRegistry.get(ref);
+ final WXDomObject domObject = mRegistry.get(ref);
if (domObject == null) {
if (instance != null) {
instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_REMOVEEVENT);
@@ -967,15 +968,18 @@ class WXDomStatement {
return;
}
domObject.removeEvent(type);
- //sync dom change to component
- AddDomInfo info = mAddDom.get(ref);
- WXComponent component = info.component;
- component.updateDom(domObject);
+
mNormalTasks.add(new IWXRenderTask() {
@Override
public void execute() {
- mWXRenderManager.removeEvent(mInstanceId, ref, type);
+ WXComponent comp = mWXRenderManager.getWXComponent(mInstanceId,ref);
+ if(comp != null){
+ //sync dom change to component
+ comp.updateDom(domObject);
+ mWXRenderManager.removeEvent(mInstanceId, ref, type);
+ }
+
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/80bcc0d7/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java
index 8a0440a..3fc130d 100755
--- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java
@@ -396,7 +396,7 @@ public class WXRenderManager {
public void addEvent(String instanceId, String ref, String type) {
WXRenderStatement statement = mRegistries.get(instanceId);
if (statement == null) {
- return;
+ return ;
}
statement.addEvent(ref, type);
}
@@ -404,7 +404,7 @@ public class WXRenderManager {
public void removeEvent(String instanceId, String ref, String type) {
WXRenderStatement statement = mRegistries.get(instanceId);
if (statement == null) {
- return;
+ return ;
}
statement.removeEvent(ref, type);
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/80bcc0d7/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java
index 9acf911..e05a6d0 100755
--- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java
@@ -424,7 +424,7 @@ class WXRenderStatement {
void addEvent(String ref, String type) {
WXComponent component = mRegistry.get(ref);
if (component == null) {
- return;
+ return ;
}
component.addEvent(type);
}
@@ -435,7 +435,7 @@ class WXRenderStatement {
void removeEvent(String ref, String type) {
WXComponent component = mRegistry.get(ref);
if (component == null) {
- return;
+ return ;
}
component.removeEvent(type);
}
[30/50] [abbrv] incubator-weex git commit: * [ios] support textarea
padding
Posted by ji...@apache.org.
* [ios] support textarea padding
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/7935c85f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/7935c85f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/7935c85f
Branch: refs/heads/master
Commit: 7935c85f7b1ec44607847a5c10521bd6c0689144
Parents: 4462c12
Author: acton393 <zh...@gmail.com>
Authored: Wed Jan 11 15:29:28 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Jan 11 15:29:28 2017 +0800
----------------------------------------------------------------------
.../Sources/Component/WXTextAreaComponent.m | 110 +++++++------------
1 file changed, 42 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7935c85f/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m
index c4e7b9a..90a688c 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m
@@ -15,44 +15,7 @@
#import "WXSDKInstance.h"
#import "WXComponent+PseudoClassManagement.h"
-@interface WXTextAreaView : UITextView
-@property (nonatomic, assign) UIEdgeInsets border;
-@property (nonatomic, assign) UIEdgeInsets padding;
-@end
-
-@implementation WXTextAreaView
-
-- (instancetype)init
-{
- self = [super init];
- if (self) {
- _padding = UIEdgeInsetsZero;
- _border = UIEdgeInsetsZero;
- }
- return self;
-}
-
-- (CGRect)textRectForBounds:(CGRect)bounds
-{
- bounds.size.width -= self.padding.left + self.border.left;
- bounds.origin.x += self.padding.left + self.border.left;
-
- bounds.size.height -= self.padding.top + self.border.top;
- bounds.origin.y += self.padding.top + self.border.top;
-
- bounds.size.width -= self.padding.right + self.border.right;
-
- bounds.size.height -= self.padding.bottom + self.border.bottom;
-
- return bounds;
-}
-
-- (CGRect)editingRectForBounds:(CGRect)bounds
-{
- return [self textRectForBounds:bounds];
-}
-
-@end
+typedef UITextView WXTextAreaView;
@interface WXTextAreaComponent()
@property (nonatomic, strong) WXTextAreaView *textView;
@@ -67,6 +30,7 @@
@property (nonatomic, strong)NSString *textValue;
@property (nonatomic) NSUInteger rows;
//style
+
@property (nonatomic) WXPixelType fontSize;
@property (nonatomic) WXTextStyle fontStyle;
@property (nonatomic) CGFloat fontWeight;
@@ -103,6 +67,8 @@ WX_EXPORT_METHOD(@selector(blur))
_blurEvent = NO;
_changeEvent = NO;
_clickEvent = NO;
+ _padding = UIEdgeInsetsZero;
+ _border = UIEdgeInsetsZero;
if (attributes[@"autofocus"]) {
_autofocus = [attributes[@"autofocus"] boolValue];
@@ -185,7 +151,7 @@ WX_EXPORT_METHOD(@selector(blur))
}
- (UIView *)loadView
{
- return [[WXTextAreaView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+ return [[WXTextAreaView alloc] init];
}
- (void)viewDidLoad
{
@@ -227,32 +193,20 @@ WX_EXPORT_METHOD(@selector(blur))
[self handlePseudoClass];
}
--(void)focus
+- (void)focus
{
if (self.textView) {
[self.textView becomeFirstResponder];
}
}
--(void)blur
+- (void)blur
{
if (self.textView) {
[self.textView resignFirstResponder];
}
}
-- (void)setPadding:(UIEdgeInsets)padding
-{
- _padding = padding;
- [_textView setPadding:padding];
-}
-
-- (void)setBorder:(UIEdgeInsets)border
-{
- _border = border;
- [_textView setBorder:border];
-}
-
#pragma mark - add-remove Event
- (void)addEvent:(NSString *)eventName
{
@@ -354,21 +308,8 @@ WX_EXPORT_METHOD(@selector(blur))
[self updatePattern];
}
--(void)updatePattern
-{
- UIEdgeInsets padding = UIEdgeInsetsMake(self.cssNode->style.padding[CSS_TOP], self.cssNode->style.padding[CSS_LEFT], self.cssNode->style.padding[CSS_BOTTOM], self.cssNode->style.padding[CSS_RIGHT]);
- if (!UIEdgeInsetsEqualToEdgeInsets(padding, _padding)) {
- [self setPadding:padding];
- }
-
- UIEdgeInsets border = UIEdgeInsetsMake(self.cssNode->style.border[CSS_TOP], self.cssNode->style.border[CSS_LEFT], self.cssNode->style.border[CSS_BOTTOM], self.cssNode->style.border[CSS_RIGHT]);
- if (!UIEdgeInsetsEqualToEdgeInsets(border, _border)) {
- [self setBorder:border];
- }
-}
-
#pragma mark update touch styles
--(void)handlePseudoClass
+- (void)handlePseudoClass
{
NSMutableDictionary *styles = [NSMutableDictionary new];
NSMutableDictionary *recordStyles = [NSMutableDictionary new];
@@ -474,7 +415,7 @@ WX_EXPORT_METHOD(@selector(blur))
}
}
-#pragma mark - set properties
+#pragma mark - private method
- (void)setPlaceholderAttributedString
{
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:_placeholderString];
@@ -498,6 +439,39 @@ WX_EXPORT_METHOD(@selector(blur))
_placeHolderLabel.attributedText = attributedString;
}
+- (void)updatePattern
+{
+ UIEdgeInsets padding = UIEdgeInsetsMake(self.cssNode->style.padding[CSS_TOP], self.cssNode->style.padding[CSS_LEFT], self.cssNode->style.padding[CSS_BOTTOM], self.cssNode->style.padding[CSS_RIGHT]);
+ if (!UIEdgeInsetsEqualToEdgeInsets(padding, _padding)) {
+ [self setPadding:padding];
+ }
+
+ UIEdgeInsets border = UIEdgeInsetsMake(self.cssNode->style.border[CSS_TOP], self.cssNode->style.border[CSS_LEFT], self.cssNode->style.border[CSS_BOTTOM], self.cssNode->style.border[CSS_RIGHT]);
+ if (!UIEdgeInsetsEqualToEdgeInsets(border, _border)) {
+ [self setBorder:border];
+ }
+}
+
+- (void)setPadding:(UIEdgeInsets)padding
+{
+ _padding = padding;
+ [self _updateTextContentInset];
+}
+
+- (void)setBorder:(UIEdgeInsets)border
+{
+ _border = border;
+ [self _updateTextContentInset];
+}
+
+- (void)_updateTextContentInset
+{
+ [_textView setTextContainerInset:UIEdgeInsetsMake(_padding.top + _border.top,
+ _padding.left + _border.left,
+ _padding.bottom + _border.bottom,
+ _border.right + _border.right)];
+}
+
- (void)setAutofocus
{
if (_autofocus) {
[11/50] [abbrv] incubator-weex git commit: Merge pull request #2204
from acton393/ios-feature-20170118
Posted by ji...@apache.org.
Merge pull request #2204 from acton393/ios-feature-20170118
* [ios] iOS feature 20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b25b16c1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b25b16c1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b25b16c1
Branch: refs/heads/master
Commit: b25b16c1c75abbb6b23066ea9c9407c8f67ce4a8
Parents: 77d3fba 83c747f
Author: \u9f50\u5c71 <su...@163.com>
Authored: Tue Jan 10 22:31:13 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Tue Jan 10 22:31:13 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 4 +--
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 30 ++++++++++++++------
.../Sources/Model/WXSDKInstance_private.h | 5 ++--
3 files changed, 26 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
[20/50] [abbrv] incubator-weex git commit: * [android] Add
screenDensity to WXEnvironment. (#98)
Posted by ji...@apache.org.
* [android] Add screenDensity to WXEnvironment. (#98)
* * [android] Add screenDensity to WXEnvironment.
* * [android] Add doc for scale exception.
* * [android] Change exception in WXEnvironment.scale
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b905c37f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b905c37f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b905c37f
Branch: refs/heads/master
Commit: b905c37f24e69e0718f8dc097044e921d8966cca
Parents: 0c01770
Author: YorkShen <sh...@gmail.com>
Authored: Wed Jan 11 11:00:56 2017 +0800
Committer: sospartan zheng <so...@apache.org>
Committed: Wed Jan 11 11:00:56 2017 +0800
----------------------------------------------------------------------
android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java | 6 ++++++
android/sdk/src/main/java/com/taobao/weex/common/WXConfig.java | 1 +
2 files changed, 7 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b905c37f/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java b/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
index 4149575..376a4d4 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
@@ -287,6 +287,12 @@ public class WXEnvironment {
configs.put(WXConfig.sysModel, SYS_MODEL);
configs.put(WXConfig.weexVersion, String.valueOf(WXSDK_VERSION));
configs.put(WXConfig.logLevel,sLogLevel.getName());
+ try {
+ options.put(WXConfig.scale, Float.toString(sApplication.getResources().getDisplayMetrics().density));
+ }catch (NullPointerException e){
+ //There is little chance of NullPointerException as sApplication may be null.
+ WXLogUtils.e("WXEnvironment scale Exception: ", e);
+ }
configs.putAll(options);
if(configs!=null&&configs.get(WXConfig.appName)==null && sApplication!=null){
configs.put(WXConfig.appName, sApplication.getPackageName());
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b905c37f/android/sdk/src/main/java/com/taobao/weex/common/WXConfig.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXConfig.java b/android/sdk/src/main/java/com/taobao/weex/common/WXConfig.java
index f7cc987..42a49e7 100755
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXConfig.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXConfig.java
@@ -216,4 +216,5 @@ public interface WXConfig {
String appGroup="appGroup";
String externalUserAgent="externalUserAgent";
String logLevel="logLevel";
+ String scale = "scale";
}
[33/50] [abbrv] incubator-weex git commit: Merge pull request #2215
from acton393/ios-feature-20170118
Posted by ji...@apache.org.
Merge pull request #2215 from acton393/ios-feature-20170118
* [ios] support textarea padding
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/970e3b86
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/970e3b86
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/970e3b86
Branch: refs/heads/master
Commit: 970e3b86bc76fad79529f803219a9e62d0af43d5
Parents: 4462c12 7935c85
Author: \u9f50\u5c71 <su...@163.com>
Authored: Wed Jan 11 16:04:44 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Wed Jan 11 16:04:44 2017 +0800
----------------------------------------------------------------------
.../Sources/Component/WXTextAreaComponent.m | 110 +++++++------------
1 file changed, 42 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
[35/50] [abbrv] incubator-weex git commit: * [android] new simplelist
component (#137)
Posted by ji...@apache.org.
* [android] new simplelist component (#137)
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/5a700270
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/5a700270
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/5a700270
Branch: refs/heads/master
Commit: 5a700270c9daf3288c3aaa93105a99884731252d
Parents: 405b6e6
Author: sospartan zheng <so...@apache.org>
Authored: Wed Jan 11 16:07:02 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Wed Jan 11 16:07:02 2017 +0800
----------------------------------------------------------------------
.../main/java/com/taobao/weex/WXSDKEngine.java | 4 +-
.../ui/component/list/BasicListComponent.java | 1104 ++++++++++++++++++
.../ui/component/list/ListComponentView.java | 223 ++++
.../ui/component/list/SimpleListComponent.java | 231 ++++
.../ui/component/list/SimpleRecyclerView.java | 329 ++++++
.../weex/ui/component/list/WXListComponent.java | 944 +--------------
.../refresh/wrapper/BounceRecyclerView.java | 15 +-
7 files changed, 1951 insertions(+), 899 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5a700270/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
index b30f289..a3266a9 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
@@ -145,6 +145,8 @@ import com.taobao.weex.dom.WXListDomObject;
import com.taobao.weex.dom.WXScrollerDomObject;
import com.taobao.weex.dom.WXSwitchDomObject;
import com.taobao.weex.dom.WXTextDomObject;
+import com.taobao.weex.ui.component.list.SimpleListComponent;
+import com.taobao.weex.ui.module.WXModalUIModule;
import com.taobao.weex.http.WXStreamModule;
import com.taobao.weex.ui.ExternalLoaderComponentHolder;
import com.taobao.weex.ui.IExternalComponentGetter;
@@ -176,7 +178,6 @@ import com.taobao.weex.ui.component.list.HorizontalListComponent;
import com.taobao.weex.ui.component.list.WXCell;
import com.taobao.weex.ui.component.list.WXListComponent;
import com.taobao.weex.ui.module.WXMetaModule;
-import com.taobao.weex.ui.module.WXModalUIModule;
import com.taobao.weex.ui.module.WXTimerModule;
import com.taobao.weex.ui.module.WXWebViewModule;
import com.taobao.weex.utils.WXLogUtils;
@@ -345,6 +346,7 @@ public class WXSDKEngine {
true,
WXBasicComponentType.SLIDER_NEIGHBOR
);
+ registerComponent(SimpleListComponent.class,false,"simplelist");
registerComponent(WXListComponent.class, false,WXBasicComponentType.LIST,WXBasicComponentType.VLIST);
registerComponent(HorizontalListComponent.class,false,WXBasicComponentType.HLIST);
registerComponent(WXBasicComponentType.CELL, WXCell.class, true);
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5a700270/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
new file mode 100644
index 0000000..226d0c5
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
@@ -0,0 +1,1104 @@
+/**
+ *
+ * Apache License
+ * Version 2.0, January 2004
+ * http://www.apache.org/licenses/
+ *
+ * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ * 1. Definitions.
+ *
+ * "License" shall mean the terms and conditions for use, reproduction,
+ * and distribution as defined by Sections 1 through 9 of this document.
+ *
+ * "Licensor" shall mean the copyright owner or entity authorized by
+ * the copyright owner that is granting the License.
+ *
+ * "Legal Entity" shall mean the union of the acting entity and all
+ * other entities that control, are controlled by, or are under common
+ * control with that entity. For the purposes of this definition,
+ * "control" means (i) the power, direct or indirect, to cause the
+ * direction or management of such entity, whether by contract or
+ * otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ * outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ * "You" (or "Your") shall mean an individual or Legal Entity
+ * exercising permissions granted by this License.
+ *
+ * "Source" form shall mean the preferred form for making modifications,
+ * including but not limited to software source code, documentation
+ * source, and configuration files.
+ *
+ * "Object" form shall mean any form resulting from mechanical
+ * transformation or translation of a Source form, including but
+ * not limited to compiled object code, generated documentation,
+ * and conversions to other media types.
+ *
+ * "Work" shall mean the work of authorship, whether in Source or
+ * Object form, made available under the License, as indicated by a
+ * copyright notice that is included in or attached to the work
+ * (an example is provided in the Appendix below).
+ *
+ * "Derivative Works" shall mean any work, whether in Source or Object
+ * form, that is based on (or derived from) the Work and for which the
+ * editorial revisions, annotations, elaborations, or other modifications
+ * represent, as a whole, an original work of authorship. For the purposes
+ * of this License, Derivative Works shall not include works that remain
+ * separable from, or merely link (or bind by name) to the interfaces of,
+ * the Work and Derivative Works thereof.
+ *
+ * "Contribution" shall mean any work of authorship, including
+ * the original version of the Work and any modifications or additions
+ * to that Work or Derivative Works thereof, that is intentionally
+ * submitted to Licensor for inclusion in the Work by the copyright owner
+ * or by an individual or Legal Entity authorized to submit on behalf of
+ * the copyright owner. For the purposes of this definition, "submitted"
+ * means any form of electronic, verbal, or written communication sent
+ * to the Licensor or its representatives, including but not limited to
+ * communication on electronic mailing lists, source code control systems,
+ * and issue tracking systems that are managed by, or on behalf of, the
+ * Licensor for the purpose of discussing and improving the Work, but
+ * excluding communication that is conspicuously marked or otherwise
+ * designated in writing by the copyright owner as "Not a Contribution."
+ *
+ * "Contributor" shall mean Licensor and any individual or Legal Entity
+ * on behalf of whom a Contribution has been received by Licensor and
+ * subsequently incorporated within the Work.
+ *
+ * 2. Grant of Copyright License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * copyright license to reproduce, prepare Derivative Works of,
+ * publicly display, publicly perform, sublicense, and distribute the
+ * Work and such Derivative Works in Source or Object form.
+ *
+ * 3. Grant of Patent License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * (except as stated in this section) patent license to make, have made,
+ * use, offer to sell, sell, import, and otherwise transfer the Work,
+ * where such license applies only to those patent claims licensable
+ * by such Contributor that are necessarily infringed by their
+ * Contribution(s) alone or by combination of their Contribution(s)
+ * with the Work to which such Contribution(s) was submitted. If You
+ * institute patent litigation against any entity (including a
+ * cross-claim or counterclaim in a lawsuit) alleging that the Work
+ * or a Contribution incorporated within the Work constitutes direct
+ * or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate
+ * as of the date such litigation is filed.
+ *
+ * 4. Redistribution. You may reproduce and distribute copies of the
+ * Work or Derivative Works thereof in any medium, with or without
+ * modifications, and in Source or Object form, provided that You
+ * meet the following conditions:
+ *
+ * (a) You must give any other recipients of the Work or
+ * Derivative Works a copy of this License; and
+ *
+ * (b) You must cause any modified files to carry prominent notices
+ * stating that You changed the files; and
+ *
+ * (c) You must retain, in the Source form of any Derivative Works
+ * that You distribute, all copyright, patent, trademark, and
+ * attribution notices from the Source form of the Work,
+ * excluding those notices that do not pertain to any part of
+ * the Derivative Works; and
+ *
+ * (d) If the Work includes a "NOTICE" text file as part of its
+ * distribution, then any Derivative Works that You distribute must
+ * include a readable copy of the attribution notices contained
+ * within such NOTICE file, excluding those notices that do not
+ * pertain to any part of the Derivative Works, in at least one
+ * of the following places: within a NOTICE text file distributed
+ * as part of the Derivative Works; within the Source form or
+ * documentation, if provided along with the Derivative Works; or,
+ * within a display generated by the Derivative Works, if and
+ * wherever such third-party notices normally appear. The contents
+ * of the NOTICE file are for informational purposes only and
+ * do not modify the License. You may add Your own attribution
+ * notices within Derivative Works that You distribute, alongside
+ * or as an addendum to the NOTICE text from the Work, provided
+ * that such additional attribution notices cannot be construed
+ * as modifying the License.
+ *
+ * You may add Your own copyright statement to Your modifications and
+ * may provide additional or different license terms and conditions
+ * for use, reproduction, or distribution of Your modifications, or
+ * for any such Derivative Works as a whole, provided Your use,
+ * reproduction, and distribution of the Work otherwise complies with
+ * the conditions stated in this License.
+ *
+ * 5. Submission of Contributions. Unless You explicitly state otherwise,
+ * any Contribution intentionally submitted for inclusion in the Work
+ * by You to the Licensor shall be under the terms and conditions of
+ * this License, without any additional terms or conditions.
+ * Notwithstanding the above, nothing herein shall supersede or modify
+ * the terms of any separate license agreement you may have executed
+ * with Licensor regarding such Contributions.
+ *
+ * 6. Trademarks. This License does not grant permission to use the trade
+ * names, trademarks, service marks, or product names of the Licensor,
+ * except as required for reasonable and customary use in describing the
+ * origin of the Work and reproducing the content of the NOTICE file.
+ *
+ * 7. Disclaimer of Warranty. Unless required by applicable law or
+ * agreed to in writing, Licensor provides the Work (and each
+ * Contributor provides its Contributions) on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied, including, without limitation, any warranties or conditions
+ * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ * PARTICULAR PURPOSE. You are solely responsible for determining the
+ * appropriateness of using or redistributing the Work and assume any
+ * risks associated with Your exercise of permissions under this License.
+ *
+ * 8. Limitation of Liability. In no event and under no legal theory,
+ * whether in tort (including negligence), contract, or otherwise,
+ * unless required by applicable law (such as deliberate and grossly
+ * negligent acts) or agreed to in writing, shall any Contributor be
+ * liable to You for damages, including any direct, indirect, special,
+ * incidental, or consequential damages of any character arising as a
+ * result of this License or out of the use or inability to use the
+ * Work (including but not limited to damages for loss of goodwill,
+ * work stoppage, computer failure or malfunction, or any and all
+ * other commercial damages or losses), even if such Contributor
+ * has been advised of the possibility of such damages.
+ *
+ * 9. Accepting Warranty or Additional Liability. While redistributing
+ * the Work or Derivative Works thereof, You may choose to offer,
+ * and charge a fee for, acceptance of support, warranty, indemnity,
+ * or other liability obligations and/or rights consistent with this
+ * License. However, in accepting such obligations, You may act only
+ * on Your own behalf and on Your sole responsibility, not on behalf
+ * of any other Contributor, and only if You agree to indemnify,
+ * defend, and hold each Contributor harmless for any liability
+ * incurred by, or claims asserted against, such Contributor by reason
+ * of your accepting any such warranty or additional liability.
+ *
+ * END OF TERMS AND CONDITIONS
+ *
+ * APPENDIX: How to apply the Apache License to your work.
+ *
+ * To apply the Apache License to your work, attach the following
+ * boilerplate notice, with the fields enclosed by brackets "[]"
+ * replaced with your own identifying information. (Don't include
+ * the brackets!) The text should be enclosed in the appropriate
+ * comment syntax for the file format. We also recommend that a
+ * file or class name and description of purpose be included on the
+ * same "printed page" as the copyright notice for easier
+ * identification within third-party archives.
+ *
+ * Copyright 2016 Alibaba Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.taobao.weex.ui.component.list;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.PointF;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.util.ArrayMap;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.util.SparseArray;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+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.OnWXScrollListener;
+import com.taobao.weex.common.WXRuntimeException;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.component.AppearanceHelper;
+import com.taobao.weex.ui.component.Scrollable;
+import com.taobao.weex.ui.component.WXBaseRefresh;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXComponentProp;
+import com.taobao.weex.ui.component.WXLoading;
+import com.taobao.weex.ui.component.WXRefresh;
+import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.ui.component.helper.WXStickyHelper;
+import com.taobao.weex.ui.view.listview.WXRecyclerView;
+import com.taobao.weex.ui.view.listview.adapter.IOnLoadMoreListener;
+import com.taobao.weex.ui.view.listview.adapter.IRecyclerAdapterListener;
+import com.taobao.weex.ui.view.listview.adapter.ListBaseViewHolder;
+import com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter;
+import com.taobao.weex.ui.view.listview.adapter.TransformItemDecoration;
+import com.taobao.weex.ui.view.listview.adapter.WXRecyclerViewOnScrollListener;
+import com.taobao.weex.ui.view.refresh.wrapper.BounceRecyclerView;
+import com.taobao.weex.utils.WXLogUtils;
+import com.taobao.weex.utils.WXUtils;
+import com.taobao.weex.utils.WXViewUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Created by sospartan on 13/12/2016.
+ */
+
+public abstract class BasicListComponent<T extends ViewGroup & ListComponentView> extends WXVContainer<T> implements
+ IRecyclerAdapterListener<ListBaseViewHolder>, IOnLoadMoreListener, Scrollable {
+ public static final String TRANSFORM = "transform";
+ public static final String LOADMOREOFFSET = "loadmoreoffset";
+ private String TAG = "BasicListComponent";
+ private int mListCellCount = 0;
+ private String mLoadMoreRetry = "";
+ private ArrayList<ListBaseViewHolder> recycleViewList = new ArrayList<>();
+ private static final Pattern transformPattern = Pattern.compile("([a-z]+)\\(([0-9\\.]+),?([0-9\\.]+)?\\)");
+
+ private Map<String, AppearanceHelper> mAppearComponents = new HashMap<>();
+
+ private boolean scrollable = true;
+ private ArrayMap<String, Long> mRefToViewType;
+ private SparseArray<ArrayList<WXComponent>> mViewTypes;
+ protected BounceRecyclerView bounceRecyclerView;
+ private WXRecyclerViewOnScrollListener mViewOnScrollListener = new WXRecyclerViewOnScrollListener(this);
+
+ private static final int MAX_VIEWTYPE_ALLOW_CACHE = 9;
+ private static boolean mAllowCacheViewHolder = true;
+ private static boolean mDownForBidCacheViewHolder = false;
+
+ /**
+ * Map for storing component that is sticky.
+ **/
+ private Map<String, HashMap<String, WXComponent>> mStickyMap = new HashMap<>();
+ private WXStickyHelper stickyHelper;
+
+
+ public BasicListComponent(WXSDKInstance instance, WXDomObject node, WXVContainer parent) {
+ super(instance, node, parent);
+ stickyHelper = new WXStickyHelper(this);
+ }
+
+ /**
+ * Measure the size of the recyclerView.
+ *
+ * @param width the expected width
+ * @param height the expected height
+ * @return the result of measurement
+ */
+ @Override
+ protected MeasureOutput measure(int width, int height) {
+ int screenH = WXViewUtils.getScreenHeight(WXEnvironment.sApplication);
+ int weexH = WXViewUtils.getWeexHeight(getInstanceId());
+ int outHeight = height > (weexH >= screenH ? screenH : weexH) ? weexH - getAbsoluteY() : height;
+ return super.measure(width, outHeight);
+ }
+
+ protected int getOrientation() {
+ return Constants.Orientation.VERTICAL;
+ }
+
+ @Override
+ public void destroy() {
+ super.destroy();
+ if (mStickyMap != null)
+ mStickyMap.clear();
+ if (mViewTypes != null)
+ mViewTypes.clear();
+ if (mRefToViewType != null)
+ mRefToViewType.clear();
+ }
+
+ @Override
+ public ViewGroup.LayoutParams getChildLayoutParams(WXComponent child, View hostView, int width, int height, int left, int right, int top, int bottom) {
+ ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) hostView.getLayoutParams();
+ if (child instanceof WXBaseRefresh && params == null) {
+ params = new LinearLayout.LayoutParams(width, height);
+ } else if (params == null) {
+ params = new RecyclerView.LayoutParams(width, height);
+ } else {
+ params.width = width;
+ params.height = height;
+ params.setMargins(left, 0, right, 0);
+ }
+ return params;
+ }
+
+ /**
+ * These transform functions are supported:
+ * - `scale(x,y)`: scale item, x and y should be a positive float number.
+ * - `translate(x,y)`: translate item, `x` and `y` shoule be integer numbers.
+ * - `opacity(n)`: change the transparency of item, `n` must in `[0,1.0]`.
+ * - `rotate(n)`: rotate item, n is integer number.
+ *
+ * @param raw
+ * @return
+ */
+ private RecyclerView.ItemDecoration parseTransforms(String raw) {
+ if (raw == null) {
+ return null;
+ }
+ float scaleX = 0f, scaleY = 0f;
+ int translateX = 0, translateY = 0;
+ float opacity = 0f;
+ int rotate = 0;
+ //public TransformItemDecoration(boolean isVertical,float alpha,int translateX,int translateY,int rotation,float scale)
+ Matcher matcher = transformPattern.matcher(raw);
+ while (matcher.find()) {
+ String match = matcher.group();
+ String name = matcher.group(1);
+ try {
+ switch (name) {
+ case "scale":
+ scaleX = Float.parseFloat(matcher.group(2));
+ scaleY = Float.parseFloat(matcher.group(3));
+ break;
+ case "translate":
+ translateX = Integer.parseInt(matcher.group(2));
+ translateY = Integer.parseInt(matcher.group(3));
+ break;
+ case "opacity":
+ opacity = Float.parseFloat(matcher.group(2));
+ break;
+ case "rotate":
+ rotate = Integer.parseInt(matcher.group(2));
+ break;
+ default:
+ WXLogUtils.e(TAG, "Invaild transform expression:" + match);
+ break;
+ }
+ } catch (NumberFormatException e) {
+ WXLogUtils.e("", e);
+ WXLogUtils.e(TAG, "Invaild transform expression:" + match);
+ }
+ }
+ return new TransformItemDecoration(getOrientation() == Constants.Orientation.VERTICAL, opacity, translateX, translateY, rotate, scaleX, scaleY);
+ }
+
+ abstract T generateListView(Context context, int orientation);
+
+ @Override
+ protected T initComponentHostView(@NonNull Context context) {
+ T bounceRecyclerView = generateListView(context, getOrientation());
+
+ String transforms = (String) getDomObject().getAttrs().get(TRANSFORM);
+ if (transforms != null) {
+ bounceRecyclerView.getInnerView().addItemDecoration(parseTransforms(transforms));
+ }
+
+ RecyclerViewBaseAdapter recyclerViewBaseAdapter = new RecyclerViewBaseAdapter<>(this);
+ recyclerViewBaseAdapter.setHasStableIds(true);
+ bounceRecyclerView.setRecyclerViewBaseAdapter(recyclerViewBaseAdapter);
+ bounceRecyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
+ bounceRecyclerView.getInnerView().clearOnScrollListeners();
+ bounceRecyclerView.getInnerView().addOnScrollListener(mViewOnScrollListener);
+ bounceRecyclerView.getInnerView().addOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+
+ if (newState == RecyclerView.SCROLL_STATE_IDLE) {
+ for (ListBaseViewHolder holder : recycleViewList) {
+ if (holder != null
+ && holder.getComponent() != null
+ && !holder.getComponent().isUsing()) {
+ recycleImage(holder.getView());
+ }
+ }
+ recycleViewList.clear();
+ }
+ List<OnWXScrollListener> listeners = getInstance().getWXScrollListeners();
+ if (listeners != null && listeners.size() > 0) {
+ for (OnWXScrollListener listener : listeners) {
+ if (listener != null) {
+ View topView = recyclerView.getChildAt(0);
+ if (topView != null) {
+ int y = topView.getTop();
+ listener.onScrollStateChanged(recyclerView, 0, y, newState);
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+ super.onScrolled(recyclerView, dx, dy);
+ List<OnWXScrollListener> listeners = getInstance().getWXScrollListeners();
+ if (listeners != null && listeners.size() > 0) {
+ for (OnWXScrollListener listener : listeners) {
+ if (listener != null) {
+ listener.onScrolled(recyclerView, dx, dy);
+ }
+ }
+ }
+ }
+ });
+ bounceRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
+ @Override
+ public void onGlobalLayout() {
+ T view;
+ if ((view = getHostView()) == null)
+ return;
+ mViewOnScrollListener.onScrolled(view.getInnerView(), 0, 0);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+ } else {
+ view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+ }
+ }
+ });
+ return bounceRecyclerView;
+ }
+
+ @Override
+ public void bindStickStyle(WXComponent component) {
+ stickyHelper.bindStickStyle(component, mStickyMap);
+ }
+
+ @Override
+ public void unbindStickStyle(WXComponent component) {
+ stickyHelper.unbindStickStyle(component, mStickyMap);
+ }
+
+ private
+ @Nullable
+ WXComponent findDirectListChild(WXComponent comp) {
+ WXComponent parent;
+ if (comp == null || (parent = comp.getParent()) == null) {
+ return null;
+ }
+
+ if (parent instanceof WXListComponent) {
+ return comp;
+ }
+
+ return findDirectListChild(parent);
+ }
+
+ @Override
+ protected boolean setProperty(String key, Object param) {
+ switch (key) {
+ case LOADMOREOFFSET:
+ return true;
+ case Constants.Name.SCROLLABLE:
+ boolean scrollable = WXUtils.getBoolean(param, true);
+ setScrollable(scrollable);
+ return true;
+ }
+ return super.setProperty(key, param);
+ }
+
+ @WXComponentProp(name = Constants.Name.SCROLLABLE)
+ public void setScrollable(boolean scrollable) {
+ View inner = getHostView().getInnerView();
+ if (inner instanceof WXRecyclerView) {
+ ((WXRecyclerView) inner).setScrollable(scrollable);
+ }
+ ;
+ }
+
+ private void setAppearanceWatch(WXComponent component, int event, boolean enable) {
+ AppearanceHelper item = mAppearComponents.get(component.getRef());
+ if (item != null) {
+ item.setWatchEvent(event, enable);
+ } else if (!enable) {
+ //Do nothing if disable target not exist.
+ } else {
+ WXComponent dChild = findDirectListChild(component);
+ int index = mChildren.indexOf(dChild);
+ if (index != -1) {
+ item = new AppearanceHelper(component, index);
+ item.setWatchEvent(event, true);
+ mAppearComponents.put(component.getRef(), item);
+ }
+ }
+ }
+
+ @Override
+ public void bindAppearEvent(WXComponent component) {
+ setAppearanceWatch(component, AppearanceHelper.APPEAR, true);
+ }
+
+ @Override
+ public void bindDisappearEvent(WXComponent component) {
+ setAppearanceWatch(component, AppearanceHelper.DISAPPEAR, true);
+ }
+
+ @Override
+ public void unbindAppearEvent(WXComponent component) {
+ setAppearanceWatch(component, AppearanceHelper.APPEAR, false);
+ }
+
+ @Override
+ public void unbindDisappearEvent(WXComponent component) {
+ setAppearanceWatch(component, AppearanceHelper.DISAPPEAR, false);
+ }
+
+ @Override
+ public void scrollTo(WXComponent component, final int offset) {
+ if (bounceRecyclerView == null) {
+ return;
+ }
+
+ WXComponent parent = component;
+ WXCell cell = null;
+ while (parent != null) {
+ if (parent instanceof WXCell) {
+ cell = (WXCell) parent;
+ break;
+ }
+ parent = parent.getParent();
+ }
+ if (cell != null) {
+ int pos = mChildren.indexOf(cell);
+ final WXRecyclerView view = bounceRecyclerView.getInnerView();
+ view.scrollToPosition(pos);
+ final WXComponent cellComp = cell;
+ //scroll cell to top
+ view.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ if (cellComp.getHostView() == null) {
+ return;
+ }
+ View cellView = cellComp.getHostView();
+ if (getOrientation() == Constants.Orientation.VERTICAL) {
+ int scrollY = cellView.getTop() + offset;
+ view.smoothScrollBy(0, scrollY);
+ } else {
+ int scrollX = cellView.getLeft() + offset;
+ view.smoothScrollBy(scrollX, 0);
+ }
+ }
+ }, 50);
+
+ }
+
+ }
+
+ @Override
+ public void onBeforeScroll(int dx, int dy) {
+ if (mStickyMap == null) {
+ return;
+ }
+ HashMap<String, WXComponent> stickyMap = mStickyMap.get(getRef());
+ if (stickyMap == null) {
+ return;
+ }
+ Iterator<Map.Entry<String, WXComponent>> iterator = stickyMap.entrySet().iterator();
+ Map.Entry<String, WXComponent> entry;
+ WXComponent stickyComponent;
+ while (iterator.hasNext()) {
+ entry = iterator.next();
+ stickyComponent = entry.getValue();
+
+ if (stickyComponent != null && stickyComponent.getDomObject() != null
+ && stickyComponent instanceof WXCell) {
+
+ WXCell cell = (WXCell) stickyComponent;
+ if (cell.getHostView() == null) {
+ return;
+ }
+
+ if (stickyComponent != null && stickyComponent.getDomObject() != null
+ && stickyComponent instanceof WXCell) {
+ if (stickyComponent.getHostView() == null) {
+ return;
+ }
+
+ RecyclerView.LayoutManager layoutManager;
+ boolean beforeFirstVisibleItem = false;
+ if ((layoutManager = getHostView().getInnerView().getLayoutManager()) instanceof LinearLayoutManager) {
+ int fVisible = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition();
+ int pos = mChildren.indexOf(cell);
+
+ if (pos <= fVisible) {
+ beforeFirstVisibleItem = true;
+ }
+ }
+
+ int[] location = new int[2];
+ stickyComponent.getHostView().getLocationOnScreen(location);
+ int[] parentLocation = new int[2];
+ stickyComponent.getParentScroller().getView().getLocationOnScreen(parentLocation);
+
+ int top = location[1] - parentLocation[1];
+
+ boolean showSticky = beforeFirstVisibleItem && cell.getLocationFromStart() >= 0 && top <= 0 && dy >= 0;
+ boolean removeSticky = cell.getLocationFromStart() <= 0 && top > 0 && dy <= 0;
+ if (showSticky) {
+ bounceRecyclerView.notifyStickyShow(cell);
+ } else if (removeSticky) {
+ bounceRecyclerView.notifyStickyRemove(cell);
+ }
+ cell.setLocationFromStart(top);
+ }
+ }
+ }
+ }
+
+ @Override
+ public int getScrollY() {
+ return bounceRecyclerView == null ? 0 : bounceRecyclerView.getInnerView().getScrollY();
+ }
+
+ @Override
+ public int getScrollX() {
+ return bounceRecyclerView == null ? 0 : bounceRecyclerView.getInnerView().getScrollX();
+ }
+
+ /**
+ * Append a child component to the end of WXListComponent. This will not refresh the underlying
+ * view immediately. The message of index of the inserted child is given to the adapter, and the
+ * adapter will determine when to refresh. The default implementation of adapter will push the
+ * message into a message and refresh the view in a period of time.
+ *
+ * @param child the inserted child
+ */
+ @Override
+ public void addChild(WXComponent child) {
+ addChild(child, -1);
+ }
+
+ @Override
+ protected int getChildrenLayoutTopOffset() {
+ return 0;
+ }
+
+ /**
+ * @param child the inserted child
+ * @param index the index of the child to be inserted.
+ * @see #addChild(WXComponent)
+ */
+ @Override
+ public void addChild(WXComponent child, int index) {
+ super.addChild(child, index);
+
+ if (child == null || index < -1) {
+ return;
+ }
+ int count = mChildren.size();
+ index = index >= count ? -1 : index;
+ bindViewType(child);
+
+ int adapterPosition = index == -1 ? mChildren.size() - 1 : index;
+ T view = getHostView();
+ if (view != null) {
+ view.getRecyclerViewBaseAdapter().notifyItemInserted(adapterPosition);
+ }
+ relocateAppearanceHelper();
+ }
+
+
+ private void relocateAppearanceHelper() {
+ Iterator<Map.Entry<String, AppearanceHelper>> iterator = mAppearComponents.entrySet().iterator();
+ while (iterator.hasNext()) {
+ Map.Entry<String, AppearanceHelper> item = iterator.next();
+ AppearanceHelper value = item.getValue();
+ WXComponent dChild = findDirectListChild(value.getAwareChild());
+ int index = mChildren.indexOf(dChild);
+ value.setCellPosition(index);
+ }
+ }
+
+
+ /**
+ * RecyclerView manage its children in a way that different from {@link WXVContainer}. Therefore,
+ * {@link WXVContainer#addSubView(View, int)} is an empty implementation in {@link
+ * com.taobao.weex.ui.view.listview.WXRecyclerView}
+ */
+ @Override
+ protected void addSubView(View child, int index) {
+
+ }
+
+ /**
+ * Remove the child from WXListComponent. This method will use {@link
+ * java.util.List#indexOf(Object)} to retrieve the component to be deleted. Like {@link
+ * #addChild(WXComponent)}, this method will not refresh the view immediately, the adapter will
+ * decide when to refresh.
+ *
+ * @param child the child to be removed
+ */
+ @Override
+ public void remove(WXComponent child, boolean destroy) {
+ int index = mChildren.indexOf(child);
+ if (destroy) {
+ child.detachViewAndClearPreInfo();
+ }
+ unBindViewType(child);
+
+ T view = getHostView();
+ if (view == null) {
+ return;
+ }
+ view.getRecyclerViewBaseAdapter().notifyItemRemoved(index);
+ if (WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(TAG, "removeChild child at " + index);
+ }
+ super.remove(child, destroy);
+ }
+
+
+ @Override
+ public void computeVisiblePointInViewCoordinate(PointF pointF) {
+ RecyclerView view = getHostView().getInnerView();
+ pointF.set(view.computeHorizontalScrollOffset(), view.computeVerticalScrollOffset());
+ }
+
+ /**
+ * Recycle viewHolder and its underlying view. This may because the view is removed or reused.
+ * Either case, this method will be called.
+ *
+ * @param holder The view holder to be recycled.
+ */
+ @Override
+ public void onViewRecycled(ListBaseViewHolder holder) {
+ long begin = System.currentTimeMillis();
+ holder.setComponentUsing(false);
+ recycleViewList.add(holder);
+ if (WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(TAG, "Recycle holder " + (System.currentTimeMillis() - begin) + " Thread:" + Thread.currentThread().getName());
+ }
+ }
+
+ /**
+ * Bind the component of the position to the holder. Then flush the view.
+ *
+ * @param holder viewHolder, which holds reference to the view
+ * @param position position of component in WXListComponent
+ */
+ @Override
+ public void onBindViewHolder(ListBaseViewHolder holder, int position) {
+ if (holder == null) return;
+ holder.setComponentUsing(true);
+ WXComponent component = getChild(position);
+ if (component == null
+ || (component instanceof WXRefresh)
+ || (component instanceof WXLoading)
+ || (component.getDomObject() != null && component.getDomObject().isFixed())
+ ) {
+ if (WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(TAG, "Bind WXRefresh & WXLoading " + holder);
+ }
+ return;
+ }
+
+ if (holder.getComponent() != null && holder.getComponent() instanceof WXCell) {
+ holder.getComponent().bindData(component);
+// holder.getComponent().refreshData(component);
+ }
+
+ }
+
+ /**
+ * Create an instance of {@link ListBaseViewHolder} for the given viewType (not for the given
+ * index). This method will look up for the first component that fits the viewType requirement and
+ * doesn't be used. Then create the certain type of view, detach the view f[rom the component.
+ *
+ * @param parent the ViewGroup into which the new view will be inserted
+ * @param viewType the type of the new view
+ * @return the created view holder.
+ */
+ @Override
+ public ListBaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ if (mChildren != null) {
+ if (mViewTypes == null)
+ return createVHForFakeComponent(viewType);
+ ArrayList<WXComponent> mTypes = mViewTypes.get(viewType);
+ checkRecycledViewPool(viewType);
+ if (mTypes == null)
+ return createVHForFakeComponent(viewType);
+
+ for (int i = 0; i < mTypes.size(); i++) {
+ WXComponent component = mTypes.get(i);
+ if (component == null
+ || component.isUsing()) {
+ continue;
+ }
+ if (component.getDomObject() != null && component.getDomObject().isFixed()) {
+ return createVHForFakeComponent(viewType);
+ } else {
+ if (component instanceof WXCell) {
+ if (component.getRealView() != null) {
+ return new ListBaseViewHolder(component, viewType);
+ } else {
+ ((WXCell) component).lazy(false);
+ component.createView();
+ component.applyLayoutAndEvent(component);
+ return new ListBaseViewHolder(component, viewType);
+ }
+ } else if (component instanceof WXBaseRefresh) {
+ return createVHForRefreshComponent(viewType);
+ } else {
+ WXLogUtils.e(TAG, "List cannot include element except cell\u3001header\u3001fixed\u3001refresh and loading");
+ return createVHForFakeComponent(viewType);
+ }
+ }
+ }
+ }
+ if (WXEnvironment.isApkDebugable()) {
+ WXLogUtils.e(TAG, "Cannot find request viewType: " + viewType);
+ }
+ return createVHForFakeComponent(viewType);
+ }
+
+ /**
+ * Forbid ViewHolder cache if viewType > MAX_VIEWTYPE_ALLOW_CACHE
+ *
+ * @param viewType
+ */
+ private void checkRecycledViewPool(int viewType) {
+ try {
+ if (mViewTypes.size() > MAX_VIEWTYPE_ALLOW_CACHE)
+ mAllowCacheViewHolder = false;
+
+ if (mDownForBidCacheViewHolder)
+ if (getHostView() != null && getHostView().getInnerView() != null)
+ getHostView().getInnerView().getRecycledViewPool().setMaxRecycledViews(viewType, 0);
+
+ if (!mDownForBidCacheViewHolder) {
+ if (!mAllowCacheViewHolder) {
+ if (getHostView() != null && getHostView().getInnerView() != null) {
+ for (int i = 0; i < mViewTypes.size(); i++) {
+ getHostView().getInnerView().getRecycledViewPool().setMaxRecycledViews(mViewTypes.keyAt(i), 0);
+ }
+ mDownForBidCacheViewHolder = true;
+ }
+ }
+ }
+ } catch (Exception e) {
+ WXLogUtils.e(TAG, "Clear recycledViewPool error!");
+ }
+ }
+
+ /**
+ * Return the child component type. The type is defined by scopeValue in .we file.
+ *
+ * @param position the position of the child component.
+ * @return the type of certain component.
+ */
+ @Override
+ public int getItemViewType(int position) {
+ return generateViewType(getChild(position));
+ }
+
+ /**
+ * ViewType will be classified into {HashMap<Integer,ArrayList<Integer>> mViewTypes}
+ *
+ * @param component
+ */
+ private void bindViewType(WXComponent component) {
+ int id = generateViewType(component);
+
+ if (mViewTypes == null) {
+ mViewTypes = new SparseArray<>();
+ }
+
+ ArrayList<WXComponent> mTypes = mViewTypes.get(id);
+
+ if (mTypes == null) {
+ mTypes = new ArrayList<>();
+ mViewTypes.put(id, mTypes);
+ }
+ mTypes.add(component);
+ }
+
+ private void unBindViewType(WXComponent component) {
+ int id = generateViewType(component);
+
+ if (mViewTypes == null)
+ return;
+ ArrayList<WXComponent> mTypes = mViewTypes.get(id);
+ if (mTypes == null)
+ return;
+
+ mTypes.remove(component);
+ }
+
+ /**
+ * generate viewtype by component
+ *
+ * @param component
+ * @return
+ */
+ private int generateViewType(WXComponent component) {
+ long id;
+ try {
+ id = Integer.parseInt(component.getDomObject().getRef());
+ String type = component.getDomObject().getAttrs().getScope();
+
+ if (!TextUtils.isEmpty(type)) {
+ if (mRefToViewType == null) {
+ mRefToViewType = new ArrayMap<>();
+ }
+ if (!mRefToViewType.containsKey(type)) {
+ mRefToViewType.put(type, id);
+ }
+ id = mRefToViewType.get(type);
+
+ }
+ } catch (RuntimeException e) {
+ WXLogUtils.eTag(TAG, e);
+ id = RecyclerView.NO_ID;
+ WXLogUtils.e(TAG, "getItemViewType: NO ID, this will crash the whole render system of WXListRecyclerView");
+ }
+ return (int) id;
+ }
+
+ /**
+ * Get child component num.
+ *
+ * @return return the size of {@link #mChildren} if mChildren is not empty, otherwise, return 0;
+ */
+ @Override
+ public int getItemCount() {
+ return getChildCount();
+ }
+
+ @Override
+ public boolean onFailedToRecycleView(ListBaseViewHolder holder) {
+ if (WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d(TAG, "Failed to recycle " + holder);
+ }
+ return false;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ long id;
+ try {
+ id = Long.parseLong(getChild(position).getDomObject().getRef());
+ } catch (RuntimeException e) {
+ WXLogUtils.e(TAG, WXLogUtils.getStackTrace(e));
+ id = RecyclerView.NO_ID;
+ }
+ return id;
+ }
+
+ @Override
+ public void onLoadMore(int offScreenY) {
+ try {
+ String offset = getDomObject().getAttrs().getLoadMoreOffset();
+
+ if (TextUtils.isEmpty(offset)) {
+ offset = "0";
+ }
+
+ if (offScreenY < Integer.parseInt(offset)) {
+ String loadMoreRetry = getDomObject().getAttrs().getLoadMoreRetry();
+ if (loadMoreRetry == null) {
+ loadMoreRetry = mLoadMoreRetry;
+ }
+
+ if (mListCellCount != mChildren.size()
+ || mLoadMoreRetry == null || !mLoadMoreRetry.equals(loadMoreRetry)) {
+ fireEvent(Constants.Event.LOADMORE);
+ mListCellCount = mChildren.size();
+ mLoadMoreRetry = loadMoreRetry;
+ }
+ }
+ } catch (Exception e) {
+ WXLogUtils.d(TAG + "onLoadMore :", e);
+ }
+ }
+
+ @Override
+ public void notifyAppearStateChange(int firstVisible, int lastVisible, int directionX, int directionY) {
+ //notify appear state
+ Iterator<AppearanceHelper> it = mAppearComponents.values().iterator();
+ String direction = directionY > 0 ? Constants.Value.DIRECTION_UP :
+ directionY < 0 ? Constants.Value.DIRECTION_DOWN : null;
+ if (getOrientation() == Constants.Orientation.HORIZONTAL && directionX != 0) {
+ direction = directionX > 0 ? Constants.Value.DIRECTION_LEFT : Constants.Value.DIRECTION_RIGHT;
+ }
+
+ while (it.hasNext()) {
+ AppearanceHelper item = it.next();
+ WXComponent component = item.getAwareChild();
+
+ if (!item.isWatch()) {
+ continue;
+ }
+
+ boolean outOfVisibleRange = item.getCellPositionINScollable() < firstVisible || item.getCellPositionINScollable() > lastVisible;
+
+ View view = component.getHostView();
+ if (view == null) {
+ continue;
+ }
+
+ boolean visible = (!outOfVisibleRange) && item.isViewVisible();
+
+ int result = item.setAppearStatus(visible);
+ if (WXEnvironment.isApkDebugable()) {
+ WXLogUtils.d("appear", "item " + item.getCellPositionINScollable() + " result " + result);
+ }
+ if (result == AppearanceHelper.RESULT_NO_CHANGE) {
+ continue;
+ }
+ component.notifyAppearStateChange(result == AppearanceHelper.RESULT_APPEAR ? Constants.Event.APPEAR : Constants.Event.DISAPPEAR, direction);
+ }
+ }
+
+ private void recycleImage(View view) {
+ if (view instanceof ImageView) {
+ if (getInstance().getImgLoaderAdapter() != null) {
+ getInstance().getImgLoaderAdapter().setImage(null, (ImageView) view,
+ null, null);
+ } else {
+ if (WXEnvironment.isApkDebugable()) {
+ throw new WXRuntimeException("getImgLoaderAdapter() == null");
+ }
+ WXLogUtils.e("Error getImgLoaderAdapter() == null");
+ }
+
+ } else if (view instanceof ViewGroup) {
+ for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
+ recycleImage(((ViewGroup) view).getChildAt(i));
+ }
+ }
+ }
+
+ @NonNull
+ private ListBaseViewHolder createVHForFakeComponent(int viewType) {
+ FrameLayout view = new FrameLayout(getContext());
+ view.setBackgroundColor(Color.WHITE);
+ view.setLayoutParams(new FrameLayout.LayoutParams(0, 0));
+ return new ListBaseViewHolder(view, viewType);
+ }
+
+
+ private ListBaseViewHolder createVHForRefreshComponent(int viewType) {
+ FrameLayout view = new FrameLayout(getContext());
+ view.setBackgroundColor(Color.WHITE);
+ view.setLayoutParams(new FrameLayout.LayoutParams(1, 1));
+ view.setVisibility(View.GONE);
+ return new ListBaseViewHolder(view, viewType);
+ }
+
+ @JSMethod
+ public void resetLoadmore() {
+ mLoadMoreRetry = "";
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5a700270/android/sdk/src/main/java/com/taobao/weex/ui/component/list/ListComponentView.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/ListComponentView.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/ListComponentView.java
new file mode 100644
index 0000000..648c747
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/ListComponentView.java
@@ -0,0 +1,223 @@
+/**
+ *
+ * Apache License
+ * Version 2.0, January 2004
+ * http://www.apache.org/licenses/
+ *
+ * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ * 1. Definitions.
+ *
+ * "License" shall mean the terms and conditions for use, reproduction,
+ * and distribution as defined by Sections 1 through 9 of this document.
+ *
+ * "Licensor" shall mean the copyright owner or entity authorized by
+ * the copyright owner that is granting the License.
+ *
+ * "Legal Entity" shall mean the union of the acting entity and all
+ * other entities that control, are controlled by, or are under common
+ * control with that entity. For the purposes of this definition,
+ * "control" means (i) the power, direct or indirect, to cause the
+ * direction or management of such entity, whether by contract or
+ * otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ * outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ * "You" (or "Your") shall mean an individual or Legal Entity
+ * exercising permissions granted by this License.
+ *
+ * "Source" form shall mean the preferred form for making modifications,
+ * including but not limited to software source code, documentation
+ * source, and configuration files.
+ *
+ * "Object" form shall mean any form resulting from mechanical
+ * transformation or translation of a Source form, including but
+ * not limited to compiled object code, generated documentation,
+ * and conversions to other media types.
+ *
+ * "Work" shall mean the work of authorship, whether in Source or
+ * Object form, made available under the License, as indicated by a
+ * copyright notice that is included in or attached to the work
+ * (an example is provided in the Appendix below).
+ *
+ * "Derivative Works" shall mean any work, whether in Source or Object
+ * form, that is based on (or derived from) the Work and for which the
+ * editorial revisions, annotations, elaborations, or other modifications
+ * represent, as a whole, an original work of authorship. For the purposes
+ * of this License, Derivative Works shall not include works that remain
+ * separable from, or merely link (or bind by name) to the interfaces of,
+ * the Work and Derivative Works thereof.
+ *
+ * "Contribution" shall mean any work of authorship, including
+ * the original version of the Work and any modifications or additions
+ * to that Work or Derivative Works thereof, that is intentionally
+ * submitted to Licensor for inclusion in the Work by the copyright owner
+ * or by an individual or Legal Entity authorized to submit on behalf of
+ * the copyright owner. For the purposes of this definition, "submitted"
+ * means any form of electronic, verbal, or written communication sent
+ * to the Licensor or its representatives, including but not limited to
+ * communication on electronic mailing lists, source code control systems,
+ * and issue tracking systems that are managed by, or on behalf of, the
+ * Licensor for the purpose of discussing and improving the Work, but
+ * excluding communication that is conspicuously marked or otherwise
+ * designated in writing by the copyright owner as "Not a Contribution."
+ *
+ * "Contributor" shall mean Licensor and any individual or Legal Entity
+ * on behalf of whom a Contribution has been received by Licensor and
+ * subsequently incorporated within the Work.
+ *
+ * 2. Grant of Copyright License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * copyright license to reproduce, prepare Derivative Works of,
+ * publicly display, publicly perform, sublicense, and distribute the
+ * Work and such Derivative Works in Source or Object form.
+ *
+ * 3. Grant of Patent License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * (except as stated in this section) patent license to make, have made,
+ * use, offer to sell, sell, import, and otherwise transfer the Work,
+ * where such license applies only to those patent claims licensable
+ * by such Contributor that are necessarily infringed by their
+ * Contribution(s) alone or by combination of their Contribution(s)
+ * with the Work to which such Contribution(s) was submitted. If You
+ * institute patent litigation against any entity (including a
+ * cross-claim or counterclaim in a lawsuit) alleging that the Work
+ * or a Contribution incorporated within the Work constitutes direct
+ * or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate
+ * as of the date such litigation is filed.
+ *
+ * 4. Redistribution. You may reproduce and distribute copies of the
+ * Work or Derivative Works thereof in any medium, with or without
+ * modifications, and in Source or Object form, provided that You
+ * meet the following conditions:
+ *
+ * (a) You must give any other recipients of the Work or
+ * Derivative Works a copy of this License; and
+ *
+ * (b) You must cause any modified files to carry prominent notices
+ * stating that You changed the files; and
+ *
+ * (c) You must retain, in the Source form of any Derivative Works
+ * that You distribute, all copyright, patent, trademark, and
+ * attribution notices from the Source form of the Work,
+ * excluding those notices that do not pertain to any part of
+ * the Derivative Works; and
+ *
+ * (d) If the Work includes a "NOTICE" text file as part of its
+ * distribution, then any Derivative Works that You distribute must
+ * include a readable copy of the attribution notices contained
+ * within such NOTICE file, excluding those notices that do not
+ * pertain to any part of the Derivative Works, in at least one
+ * of the following places: within a NOTICE text file distributed
+ * as part of the Derivative Works; within the Source form or
+ * documentation, if provided along with the Derivative Works; or,
+ * within a display generated by the Derivative Works, if and
+ * wherever such third-party notices normally appear. The contents
+ * of the NOTICE file are for informational purposes only and
+ * do not modify the License. You may add Your own attribution
+ * notices within Derivative Works that You distribute, alongside
+ * or as an addendum to the NOTICE text from the Work, provided
+ * that such additional attribution notices cannot be construed
+ * as modifying the License.
+ *
+ * You may add Your own copyright statement to Your modifications and
+ * may provide additional or different license terms and conditions
+ * for use, reproduction, or distribution of Your modifications, or
+ * for any such Derivative Works as a whole, provided Your use,
+ * reproduction, and distribution of the Work otherwise complies with
+ * the conditions stated in this License.
+ *
+ * 5. Submission of Contributions. Unless You explicitly state otherwise,
+ * any Contribution intentionally submitted for inclusion in the Work
+ * by You to the Licensor shall be under the terms and conditions of
+ * this License, without any additional terms or conditions.
+ * Notwithstanding the above, nothing herein shall supersede or modify
+ * the terms of any separate license agreement you may have executed
+ * with Licensor regarding such Contributions.
+ *
+ * 6. Trademarks. This License does not grant permission to use the trade
+ * names, trademarks, service marks, or product names of the Licensor,
+ * except as required for reasonable and customary use in describing the
+ * origin of the Work and reproducing the content of the NOTICE file.
+ *
+ * 7. Disclaimer of Warranty. Unless required by applicable law or
+ * agreed to in writing, Licensor provides the Work (and each
+ * Contributor provides its Contributions) on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied, including, without limitation, any warranties or conditions
+ * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ * PARTICULAR PURPOSE. You are solely responsible for determining the
+ * appropriateness of using or redistributing the Work and assume any
+ * risks associated with Your exercise of permissions under this License.
+ *
+ * 8. Limitation of Liability. In no event and under no legal theory,
+ * whether in tort (including negligence), contract, or otherwise,
+ * unless required by applicable law (such as deliberate and grossly
+ * negligent acts) or agreed to in writing, shall any Contributor be
+ * liable to You for damages, including any direct, indirect, special,
+ * incidental, or consequential damages of any character arising as a
+ * result of this License or out of the use or inability to use the
+ * Work (including but not limited to damages for loss of goodwill,
+ * work stoppage, computer failure or malfunction, or any and all
+ * other commercial damages or losses), even if such Contributor
+ * has been advised of the possibility of such damages.
+ *
+ * 9. Accepting Warranty or Additional Liability. While redistributing
+ * the Work or Derivative Works thereof, You may choose to offer,
+ * and charge a fee for, acceptance of support, warranty, indemnity,
+ * or other liability obligations and/or rights consistent with this
+ * License. However, in accepting such obligations, You may act only
+ * on Your own behalf and on Your sole responsibility, not on behalf
+ * of any other Contributor, and only if You agree to indemnify,
+ * defend, and hold each Contributor harmless for any liability
+ * incurred by, or claims asserted against, such Contributor by reason
+ * of your accepting any such warranty or additional liability.
+ *
+ * END OF TERMS AND CONDITIONS
+ *
+ * APPENDIX: How to apply the Apache License to your work.
+ *
+ * To apply the Apache License to your work, attach the following
+ * boilerplate notice, with the fields enclosed by brackets "[]"
+ * replaced with your own identifying information. (Don't include
+ * the brackets!) The text should be enclosed in the appropriate
+ * comment syntax for the file format. We also recommend that a
+ * file or class name and description of purpose be included on the
+ * same "printed page" as the copyright notice for easier
+ * identification within third-party archives.
+ *
+ * Copyright 2016 Alibaba Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.taobao.weex.ui.component.list;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+
+import com.taobao.weex.ui.view.listview.WXRecyclerView;
+import com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter;
+
+/**
+ * Created by sospartan on 13/12/2016.
+ */
+
+public interface ListComponentView {
+ WXRecyclerView getInnerView();
+ void setRecyclerViewBaseAdapter(RecyclerViewBaseAdapter adapter);
+ void notifyStickyShow(WXCell component);
+ void notifyStickyRemove(WXCell component);
+ RecyclerViewBaseAdapter getRecyclerViewBaseAdapter();
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5a700270/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleListComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleListComponent.java
new file mode 100644
index 0000000..4fb0e80
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleListComponent.java
@@ -0,0 +1,231 @@
+/**
+ *
+ * Apache License
+ * Version 2.0, January 2004
+ * http://www.apache.org/licenses/
+ *
+ * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ * 1. Definitions.
+ *
+ * "License" shall mean the terms and conditions for use, reproduction,
+ * and distribution as defined by Sections 1 through 9 of this document.
+ *
+ * "Licensor" shall mean the copyright owner or entity authorized by
+ * the copyright owner that is granting the License.
+ *
+ * "Legal Entity" shall mean the union of the acting entity and all
+ * other entities that control, are controlled by, or are under common
+ * control with that entity. For the purposes of this definition,
+ * "control" means (i) the power, direct or indirect, to cause the
+ * direction or management of such entity, whether by contract or
+ * otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ * outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ * "You" (or "Your") shall mean an individual or Legal Entity
+ * exercising permissions granted by this License.
+ *
+ * "Source" form shall mean the preferred form for making modifications,
+ * including but not limited to software source code, documentation
+ * source, and configuration files.
+ *
+ * "Object" form shall mean any form resulting from mechanical
+ * transformation or translation of a Source form, including but
+ * not limited to compiled object code, generated documentation,
+ * and conversions to other media types.
+ *
+ * "Work" shall mean the work of authorship, whether in Source or
+ * Object form, made available under the License, as indicated by a
+ * copyright notice that is included in or attached to the work
+ * (an example is provided in the Appendix below).
+ *
+ * "Derivative Works" shall mean any work, whether in Source or Object
+ * form, that is based on (or derived from) the Work and for which the
+ * editorial revisions, annotations, elaborations, or other modifications
+ * represent, as a whole, an original work of authorship. For the purposes
+ * of this License, Derivative Works shall not include works that remain
+ * separable from, or merely link (or bind by name) to the interfaces of,
+ * the Work and Derivative Works thereof.
+ *
+ * "Contribution" shall mean any work of authorship, including
+ * the original version of the Work and any modifications or additions
+ * to that Work or Derivative Works thereof, that is intentionally
+ * submitted to Licensor for inclusion in the Work by the copyright owner
+ * or by an individual or Legal Entity authorized to submit on behalf of
+ * the copyright owner. For the purposes of this definition, "submitted"
+ * means any form of electronic, verbal, or written communication sent
+ * to the Licensor or its representatives, including but not limited to
+ * communication on electronic mailing lists, source code control systems,
+ * and issue tracking systems that are managed by, or on behalf of, the
+ * Licensor for the purpose of discussing and improving the Work, but
+ * excluding communication that is conspicuously marked or otherwise
+ * designated in writing by the copyright owner as "Not a Contribution."
+ *
+ * "Contributor" shall mean Licensor and any individual or Legal Entity
+ * on behalf of whom a Contribution has been received by Licensor and
+ * subsequently incorporated within the Work.
+ *
+ * 2. Grant of Copyright License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * copyright license to reproduce, prepare Derivative Works of,
+ * publicly display, publicly perform, sublicense, and distribute the
+ * Work and such Derivative Works in Source or Object form.
+ *
+ * 3. Grant of Patent License. Subject to the terms and conditions of
+ * this License, each Contributor hereby grants to You a perpetual,
+ * worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ * (except as stated in this section) patent license to make, have made,
+ * use, offer to sell, sell, import, and otherwise transfer the Work,
+ * where such license applies only to those patent claims licensable
+ * by such Contributor that are necessarily infringed by their
+ * Contribution(s) alone or by combination of their Contribution(s)
+ * with the Work to which such Contribution(s) was submitted. If You
+ * institute patent litigation against any entity (including a
+ * cross-claim or counterclaim in a lawsuit) alleging that the Work
+ * or a Contribution incorporated within the Work constitutes direct
+ * or contributory patent infringement, then any patent licenses
+ * granted to You under this License for that Work shall terminate
+ * as of the date such litigation is filed.
+ *
+ * 4. Redistribution. You may reproduce and distribute copies of the
+ * Work or Derivative Works thereof in any medium, with or without
+ * modifications, and in Source or Object form, provided that You
+ * meet the following conditions:
+ *
+ * (a) You must give any other recipients of the Work or
+ * Derivative Works a copy of this License; and
+ *
+ * (b) You must cause any modified files to carry prominent notices
+ * stating that You changed the files; and
+ *
+ * (c) You must retain, in the Source form of any Derivative Works
+ * that You distribute, all copyright, patent, trademark, and
+ * attribution notices from the Source form of the Work,
+ * excluding those notices that do not pertain to any part of
+ * the Derivative Works; and
+ *
+ * (d) If the Work includes a "NOTICE" text file as part of its
+ * distribution, then any Derivative Works that You distribute must
+ * include a readable copy of the attribution notices contained
+ * within such NOTICE file, excluding those notices that do not
+ * pertain to any part of the Derivative Works, in at least one
+ * of the following places: within a NOTICE text file distributed
+ * as part of the Derivative Works; within the Source form or
+ * documentation, if provided along with the Derivative Works; or,
+ * within a display generated by the Derivative Works, if and
+ * wherever such third-party notices normally appear. The contents
+ * of the NOTICE file are for informational purposes only and
+ * do not modify the License. You may add Your own attribution
+ * notices within Derivative Works that You distribute, alongside
+ * or as an addendum to the NOTICE text from the Work, provided
+ * that such additional attribution notices cannot be construed
+ * as modifying the License.
+ *
+ * You may add Your own copyright statement to Your modifications and
+ * may provide additional or different license terms and conditions
+ * for use, reproduction, or distribution of Your modifications, or
+ * for any such Derivative Works as a whole, provided Your use,
+ * reproduction, and distribution of the Work otherwise complies with
+ * the conditions stated in this License.
+ *
+ * 5. Submission of Contributions. Unless You explicitly state otherwise,
+ * any Contribution intentionally submitted for inclusion in the Work
+ * by You to the Licensor shall be under the terms and conditions of
+ * this License, without any additional terms or conditions.
+ * Notwithstanding the above, nothing herein shall supersede or modify
+ * the terms of any separate license agreement you may have executed
+ * with Licensor regarding such Contributions.
+ *
+ * 6. Trademarks. This License does not grant permission to use the trade
+ * names, trademarks, service marks, or product names of the Licensor,
+ * except as required for reasonable and customary use in describing the
+ * origin of the Work and reproducing the content of the NOTICE file.
+ *
+ * 7. Disclaimer of Warranty. Unless required by applicable law or
+ * agreed to in writing, Licensor provides the Work (and each
+ * Contributor provides its Contributions) on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied, including, without limitation, any warranties or conditions
+ * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ * PARTICULAR PURPOSE. You are solely responsible for determining the
+ * appropriateness of using or redistributing the Work and assume any
+ * risks associated with Your exercise of permissions under this License.
+ *
+ * 8. Limitation of Liability. In no event and under no legal theory,
+ * whether in tort (including negligence), contract, or otherwise,
+ * unless required by applicable law (such as deliberate and grossly
+ * negligent acts) or agreed to in writing, shall any Contributor be
+ * liable to You for damages, including any direct, indirect, special,
+ * incidental, or consequential damages of any character arising as a
+ * result of this License or out of the use or inability to use the
+ * Work (including but not limited to damages for loss of goodwill,
+ * work stoppage, computer failure or malfunction, or any and all
+ * other commercial damages or losses), even if such Contributor
+ * has been advised of the possibility of such damages.
+ *
+ * 9. Accepting Warranty or Additional Liability. While redistributing
+ * the Work or Derivative Works thereof, You may choose to offer,
+ * and charge a fee for, acceptance of support, warranty, indemnity,
+ * or other liability obligations and/or rights consistent with this
+ * License. However, in accepting such obligations, You may act only
+ * on Your own behalf and on Your sole responsibility, not on behalf
+ * of any other Contributor, and only if You agree to indemnify,
+ * defend, and hold each Contributor harmless for any liability
+ * incurred by, or claims asserted against, such Contributor by reason
+ * of your accepting any such warranty or additional liability.
+ *
+ * END OF TERMS AND CONDITIONS
+ *
+ * APPENDIX: How to apply the Apache License to your work.
+ *
+ * To apply the Apache License to your work, attach the following
+ * boilerplate notice, with the fields enclosed by brackets "[]"
+ * replaced with your own identifying information. (Don't include
+ * the brackets!) The text should be enclosed in the appropriate
+ * comment syntax for the file format. We also recommend that a
+ * file or class name and description of purpose be included on the
+ * same "printed page" as the copyright notice for easier
+ * identification within third-party archives.
+ *
+ * Copyright 2016 Alibaba Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.taobao.weex.ui.component.list;
+
+import android.content.Context;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.ui.view.listview.WXRecyclerView;
+
+/**
+ * A simple list component based on regular recyclerview, do not support refreshing and loading.
+ * Created by sospartan on 13/12/2016.
+ *
+ */
+public class SimpleListComponent extends BasicListComponent<SimpleRecyclerView>{
+
+ public SimpleListComponent(WXSDKInstance instance, WXDomObject node, WXVContainer parent) {
+ super(instance, node, parent);
+ }
+
+ @Override
+ protected SimpleRecyclerView generateListView(Context context, int orientation) {
+ SimpleRecyclerView view = new SimpleRecyclerView(context);
+ view.initView(context, WXRecyclerView.TYPE_LINEAR_LAYOUT, orientation);
+ return view;
+ }
+}
[50/50] [abbrv] incubator-weex git commit: Merge branch
'dev-release095' into dev
Posted by ji...@apache.org.
Merge branch 'dev-release095' 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/d1d396e9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/d1d396e9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/d1d396e9
Branch: refs/heads/master
Commit: d1d396e925ac010e331269cf51ad110b3383d7aa
Parents: 1db3398 5104026
Author: sospartan <so...@gmail.com>
Authored: Wed Jan 11 17:48:50 2017 +0800
Committer: sospartan <so...@gmail.com>
Committed: Wed Jan 11 17:48:50 2017 +0800
----------------------------------------------------------------------
android/playground/app/build.gradle | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
----------------------------------------------------------------------
[26/50] [abbrv] incubator-weex git commit: Merge branch
'ios-feature-20170118' into ios-feature-20170118
Posted by ji...@apache.org.
Merge branch 'ios-feature-20170118' into ios-feature-20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/21cc795a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/21cc795a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/21cc795a
Branch: refs/heads/master
Commit: 21cc795af2ca2703bb0cdfcdbf8799df291ee8bb
Parents: fdf5ed7 2cebd32
Author: \u9690\u5c0f\u98ce <cx...@gmail.com>
Authored: Wed Jan 11 11:53:12 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Wed Jan 11 11:53:12 2017 +0800
----------------------------------------------------------------------
examples/module/websocket-demo.we | 2 +-
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 16 +++----
.../Sources/Component/WXImageComponent.m | 24 ++++------
.../Sources/Component/WXTextAreaComponent.m | 39 +++++++++--------
.../WeexSDK/Sources/Component/WXTextComponent.m | 1 +
.../Sources/Component/WXTextInputComponent.m | 14 +++---
.../Sources/Display/WXComponent+Display.m | 6 +--
.../WeexSDK/Sources/Loader/WXResourceLoader.m | 2 +-
.../Sources/Manager/WXComponentManager.m | 2 +
ios/sdk/WeexSDK/Sources/Model/WXComponent.h | 2 +-
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 6 ++-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h | 2 +-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 46 ++++++++++++++++++--
.../Sources/Model/WXSDKInstance_private.h | 3 ++
.../WeexSDK/Sources/Module/WXNavigatorModule.m | 28 +++++++-----
.../Sources/Protocol/WXNavigationProtocol.h | 31 ++++++++++---
16 files changed, 143 insertions(+), 81 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/21cc795a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
----------------------------------------------------------------------
[04/50] [abbrv] incubator-weex git commit: Merge branch
'ios-feature-20170118' into ios-feature-20170118
Posted by ji...@apache.org.
Merge branch 'ios-feature-20170118' into ios-feature-20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/ea798eb9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/ea798eb9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/ea798eb9
Branch: refs/heads/master
Commit: ea798eb9a4b641dc484cd6b9e84e86318726bb19
Parents: 2668ed7 d26ef73
Author: acton393 <ac...@users.noreply.github.com>
Authored: Tue Jan 10 20:30:53 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Tue Jan 10 20:30:53 2017 +0800
----------------------------------------------------------------------
.../WeexSDK/Sources/Module/WXNavigatorModule.m | 28 ++++++++++--------
.../Sources/Protocol/WXNavigationProtocol.h | 31 ++++++++++++++++----
2 files changed, 42 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
[07/50] [abbrv] incubator-weex git commit: Merge branch
'ios-feature-20170118' of github.com:acton393/weex into ios-feature-20170118
Posted by ji...@apache.org.
Merge branch 'ios-feature-20170118' of github.com:acton393/weex into ios-feature-20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/35e0084b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/35e0084b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/35e0084b
Branch: refs/heads/master
Commit: 35e0084b650b2ccb1565bc2b2bd05d1e7dbf105e
Parents: d04af5e ea798eb
Author: acton393 <zh...@gmail.com>
Authored: Tue Jan 10 21:15:12 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Tue Jan 10 21:15:12 2017 +0800
----------------------------------------------------------------------
----------------------------------------------------------------------
[03/50] [abbrv] incubator-weex git commit: Merge pull request #2203
from boboning/ios-feature-navigator
Posted by ji...@apache.org.
Merge pull request #2203 from boboning/ios-feature-navigator
* [ios] update navigator module, add open and close interface.
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/d26ef73e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/d26ef73e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/d26ef73e
Branch: refs/heads/master
Commit: d26ef73e0b121b5a6be5baddf41492697617c74e
Parents: 4f65b4d 58a3ffc
Author: acton393 <ac...@users.noreply.github.com>
Authored: Tue Jan 10 20:06:31 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Tue Jan 10 20:06:31 2017 +0800
----------------------------------------------------------------------
.../WeexSDK/Sources/Module/WXNavigatorModule.m | 28 ++++++++++--------
.../Sources/Protocol/WXNavigationProtocol.h | 31 ++++++++++++++++----
2 files changed, 42 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
[29/50] [abbrv] incubator-weex git commit: Merge pull request #2212
from acton393/ios-feature-20170118
Posted by ji...@apache.org.
Merge pull request #2212 from acton393/ios-feature-20170118
* [ios] iOS feature 20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/4462c12f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/4462c12f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/4462c12f
Branch: refs/heads/master
Commit: 4462c12f0672ab6d7e0136d6275971a1cb1204d5
Parents: 6bccb06 a8720c2
Author: boboning <ni...@163.com>
Authored: Wed Jan 11 13:16:33 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Wed Jan 11 13:16:33 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m | 14 +++++++-------
ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m | 2 +-
ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m | 4 ++--
ios/sdk/WeexSDK/Sources/Model/WXComponent.h | 4 ++--
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 4 ++--
5 files changed, 14 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
[38/50] [abbrv] incubator-weex git commit: * [ios] update weexSDK
version
Posted by ji...@apache.org.
* [ios] update weexSDK version
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/6163d27c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/6163d27c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/6163d27c
Branch: refs/heads/master
Commit: 6163d27c9fa2e231e5861fe1a8ec99f199eef615
Parents: 970e3b8
Author: acton393 <zh...@gmail.com>
Authored: Wed Jan 11 16:22:59 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Jan 11 16:22:59 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK.podspec | 10 ++++++----
ios/sdk/WeexSDK/Sources/Utility/WXDefine.h | 2 +-
2 files changed, 7 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6163d27c/ios/sdk/WeexSDK.podspec
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK.podspec b/ios/sdk/WeexSDK.podspec
index ec2b810..057c435 100644
--- a/ios/sdk/WeexSDK.podspec
+++ b/ios/sdk/WeexSDK.podspec
@@ -2,7 +2,7 @@
Pod::Spec.new do |s|
s.name = "WeexSDK"
- s.version = "0.9.4"
+ s.version = "0.10.0"
s.summary = "WeexSDK Source ."
s.description = <<-DESC
@@ -16,9 +16,11 @@ Pod::Spec.new do |s|
Alibaba-INC copyright
LICENSE
}
- s.authors = { "cxfeng1" => "cxfeng1@gmail.com",
- "boboning" => "ningli928@163.com",
- "acton393" =>"zhangxing610321@gmail.com"
+ s.authors = { "cxfeng1" => "cxfeng1@gmail.com",
+ "boboning" => "ningli928@163.com",
+ "yangshengtao" => "yangshengtao1314@163.com",
+ "kfeagle" => "sunjjbobo@163.com",
+ "acton393" => "zhangxing610321@gmail.com"
}
s.platform = :ios
s.ios.deployment_target = '7.0'
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6163d27c/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h b/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
index 80e7212..20d6a36 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
@@ -9,7 +9,7 @@
#ifndef __WX_DEFINE_H__
#define __WX_DEFINE_H__
-#define WX_SDK_VERSION @"0.9.4"
+#define WX_SDK_VERSION @"0.10.0"
#if defined(__cplusplus)
#define WX_EXTERN extern "C" __attribute__((visibility("default")))
[27/50] [abbrv] incubator-weex git commit: Merge pull request #2211
from cxfeng1/ios-feature-20170118
Posted by ji...@apache.org.
Merge pull request #2211 from cxfeng1/ios-feature-20170118
Ios feature 20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/6bccb062
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/6bccb062
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/6bccb062
Branch: refs/heads/master
Commit: 6bccb062bfadda3215191139f7f2f270081e6f4b
Parents: 2cebd32 21cc795
Author: \u9f50\u5c71 <su...@163.com>
Authored: Wed Jan 11 11:57:21 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Wed Jan 11 11:57:21 2017 +0800
----------------------------------------------------------------------
.../WeexSDK/Sources/Component/WXScrollerComponent.m | 2 +-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h | 7 ++++++-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m | 14 +++++++++++---
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 4 ++++
4 files changed, 22 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
[23/50] [abbrv] incubator-weex git commit: Merge branch
'ios-feature-20170118' into ios-feature-20170118
Posted by ji...@apache.org.
Merge branch 'ios-feature-20170118' into ios-feature-20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/4d5bc334
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/4d5bc334
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/4d5bc334
Branch: refs/heads/master
Commit: 4d5bc3344e65a5d2d3bfd06dea2d1c848ba1d9cd
Parents: b35086f 2371256
Author: acton393 <ac...@users.noreply.github.com>
Authored: Wed Jan 11 11:22:33 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Wed Jan 11 11:22:33 2017 +0800
----------------------------------------------------------------------
examples/module/websocket-demo.we | 2 +-
.../Sources/Component/WXTextAreaComponent.m | 39 +++++++++++---------
.../Sources/Component/WXTextInputComponent.m | 14 +++----
3 files changed, 29 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
[22/50] [abbrv] incubator-weex git commit: * [ios] adjust notify time
Posted by ji...@apache.org.
* [ios] adjust notify time
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b35086f5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b35086f5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b35086f5
Branch: refs/heads/master
Commit: b35086f5a7d1f3ee689621fbdb2eaadc7a273745
Parents: 83bcade
Author: acton393 <zh...@gmail.com>
Authored: Wed Jan 11 11:21:28 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Wed Jan 11 11:21:28 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m | 3 +--
ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m | 4 ++--
2 files changed, 3 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b35086f5/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 960e253..2f7f29c 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
@@ -406,8 +406,6 @@ do {\
pthread_mutex_unlock(&_textStorageMutex);
}
- [self readyToShow]; // notify super component
-
return textStorage;
}
@@ -425,6 +423,7 @@ do {\
if (_isUsingTextStorageLock) {
pthread_mutex_unlock(&_textStorageMutex);
}
+ [self readyToShow]; // notify super component
[self setNeedsDisplay];
}
}];
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b35086f5/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
index 152d671..6c2c06d 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
@@ -374,8 +374,8 @@ static css_node_t * rootNodeGetChild(void *context, int i)
[self filterStyles:styles normalStyles:normalStyles resetStyles:resetStyles];
[component _updateStylesOnComponentThread:normalStyles resetStyles:resetStyles isUpdateStyles:isUpdateStyles];
[self _addUITask:^{
- [component readyToShow];
[component _updateStylesOnMainThread:normalStyles resetStyles:resetStyles];
+ [component readyToShow];
}];
}
@@ -389,8 +389,8 @@ static css_node_t * rootNodeGetChild(void *context, int i)
[component _updateAttributesOnComponentThread:attributes];
[self _addUITask:^{
- [component readyToShow];
[component _updateAttributesOnMainThread:attributes];
+ [component readyToShow];
}];
}
[14/50] [abbrv] incubator-weex git commit: * [ios] format code
Posted by ji...@apache.org.
* [ios] format code
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/a1baf893
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/a1baf893
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/a1baf893
Branch: refs/heads/master
Commit: a1baf8935e7bfd5a8cb8a8e57364309123e49002
Parents: 9f96659
Author: acton393 <zh...@gmail.com>
Authored: Tue Jan 10 22:54:01 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Tue Jan 10 22:54:01 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a1baf893/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index 9f18941..b37f097 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -468,8 +468,8 @@ typedef enum : NSUInteger {
NSString *callbackId = callbackInfo[@"callbackId"];
BOOL once = [callbackInfo[@"once"] boolValue];
NSDictionary * retData = @{@"type":userInfo[@"eventName"],
- @"module":callbackInfo[@"moduleName"],
- @"data":userInfo[@"param"]};
+ @"module":callbackInfo[@"moduleName"],
+ @"data":userInfo[@"param"]};
[[WXSDKManager bridgeMgr] callBack:self.instanceId funcId:callbackId params:retData keepAlive:!once];
// if callback function is not once, then it is keepalive
if (once) {
[19/50] [abbrv] incubator-weex git commit: * [ios] prevent loadmore
event from being triggered while pulling down.
Posted by ji...@apache.org.
* [ios] prevent loadmore event from being triggered while pulling down.
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/9b6f726a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/9b6f726a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/9b6f726a
Branch: refs/heads/master
Commit: 9b6f726aa370a92dc10bb41673f40b6334846f9e
Parents: eb03cb0
Author: \u9690\u98ce <cx...@gmail.com>
Authored: Wed Jan 11 10:53:38 2017 +0800
Committer: \u9690\u98ce <cx...@gmail.com>
Committed: Wed Jan 11 10:53:38 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9b6f726a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
index c10f947..fa91d3e 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
@@ -333,7 +333,7 @@ WX_EXPORT_METHOD(@selector(resetLoadmore))
- (BOOL)isNeedLoadMore
{
- if (_loadMoreOffset >= 0.0) {
+ if (_loadMoreOffset >= 0.0 && ((UIScrollView *)self.view).contentOffset.y >= 0) {
return _previousLoadMoreContentHeight != ((UIScrollView *)self.view).contentSize.height && ((UIScrollView *)self.view).contentSize.height - ((UIScrollView *)self.view).contentOffset.y - self.view.frame.size.height <= _loadMoreOffset;
}
[17/50] [abbrv] incubator-weex git commit: Merge branch
'ios-feature-20170118' into ios-feature-20170118
Posted by ji...@apache.org.
Merge branch 'ios-feature-20170118' into ios-feature-20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/860b44fe
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/860b44fe
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/860b44fe
Branch: refs/heads/master
Commit: 860b44fee4f75984b4aa5496260b8f8c66347ecc
Parents: f4accba 00ca8aa
Author: acton393 <ac...@users.noreply.github.com>
Authored: Tue Jan 10 23:19:31 2017 +0800
Committer: GitHub <no...@github.com>
Committed: Tue Jan 10 23:19:31 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
[06/50] [abbrv] incubator-weex git commit: Merge remote-tracking
branch 'upstream/ios-feature-20170118' into ios-feature-20170118
Posted by ji...@apache.org.
Merge remote-tracking branch 'upstream/ios-feature-20170118' into ios-feature-20170118
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/d04af5e8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/d04af5e8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/d04af5e8
Branch: refs/heads/master
Commit: d04af5e81256033c432ba440ffd5b6ae44125627
Parents: becd631 d26ef73
Author: acton393 <zh...@gmail.com>
Authored: Tue Jan 10 21:14:04 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Tue Jan 10 21:14:04 2017 +0800
----------------------------------------------------------------------
.../WeexSDK/Sources/Events/WXComponent+Events.m | 25 ++++++++++++----
.../WeexSDK/Sources/Module/WXNavigatorModule.m | 28 ++++++++++--------
.../Sources/Protocol/WXNavigationProtocol.h | 31 ++++++++++++++++----
3 files changed, 61 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
[10/50] [abbrv] incubator-weex git commit: * [ios] format callback
ret data
Posted by ji...@apache.org.
* [ios] format callback ret data
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/83c747f3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/83c747f3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/83c747f3
Branch: refs/heads/master
Commit: 83c747f318a3d3bf5df9b8493c8f2cc65bab39f7
Parents: 1fb2e0a
Author: acton393 <zh...@gmail.com>
Authored: Tue Jan 10 22:21:12 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Tue Jan 10 22:21:12 2017 +0800
----------------------------------------------------------------------
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 4 +--
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 30 ++++++++++++++------
.../Sources/Model/WXSDKInstance_private.h | 5 ++--
3 files changed, 26 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83c747f3/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m b/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
index 37a75a3..de07eca 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
@@ -49,10 +49,10 @@
if (![moduleInstance respondsToSelector:selector]) {
// if not implement the selector, then dispatch default module method
if ([self.methodName isEqualToString:@"addEventListener"]) {
- [self.instance _addModuleEventObserversWithArguments:self.arguments moduleClassName:NSStringFromClass(moduleClass)];
+ [self.instance _addModuleEventObserversWithModuleMethod:self];
}
if ([self.methodName isEqualToString:@"removeAllEventListeners"]) {
- [self.instance _removeModuleEventObserverWithArguments:self.arguments moduleClassName:NSStringFromClass(moduleClass)];
+ [self.instance _removeModuleEventObserverWithModuleMethod:self];
}
return nil;
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83c747f3/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index f77e9d5..0220ace 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -307,7 +307,7 @@ typedef enum : NSUInteger {
[data setObject:[NSString stringWithFormat:@"%ld",(long)state] forKey:@"state"];
//[[WXSDKManager bridgeMgr] updateState:self.instanceId data:data];
- [[NSNotificationCenter defaultCenter]postNotificationName:WX_INSTANCE_NOTIFICATION_UPDATE_STATE object:self userInfo:data];
+ [[NSNotificationCenter defaultCenter] postNotificationName:WX_INSTANCE_NOTIFICATION_UPDATE_STATE object:self userInfo:data];
}
- (id)moduleForClass:(Class)moduleClass
@@ -395,28 +395,37 @@ typedef enum : NSUInteger {
#pragma mark Private Methods
-- (void)_addModuleEventObserversWithArguments:(NSArray*)arguments moduleClassName:(NSString*)moduleClassName
+- (void)_addModuleEventObserversWith:(WXModuleMethod *)method
{
- if ([arguments count] < 2) {
+ if ([method.arguments count] < 2) {
WXLogError(@"please check your method parameter!!");
return;
}
- if(![arguments[0] isKindOfClass:[NSString class]]) {
+ if(![method.arguments[0] isKindOfClass:[NSString class]]) {
// arguments[0] will be event name, so it must be a string type value here.
return;
}
- NSMutableArray * methodArguments = [arguments mutableCopy];
- if ([arguments count] == 2) {
+ NSMutableArray * methodArguments = [method.arguments mutableCopy];
+ if ([methodArguments count] == 2) {
[methodArguments addObject:@{@"once": @false}];
}
- [self addModuleEventObservers:methodArguments[0] callback:methodArguments[1] option:methodArguments[2] moduleClassName:moduleClassName];
+ if (![methodArguments[2] isKindOfClass:[NSDictionary class]]) {
+ //arguments[2] is the option value, so it must be a dictionary.
+ return;
+ }
+ Class moduleClass = [WXModuleFactory classWithModuleName:method.moduleName];
+ NSMutableDictionary * option = [methodArguments[3] mutableCopy];
+ [option setObject:method.moduleName forKey:@"moduleName"];
+ // the value for moduleName in option is for the need of callback
+ [self addModuleEventObservers:methodArguments[0] callback:methodArguments[1] option:option moduleClassName:NSClassFromString(moduleClass)];
}
- (void)addModuleEventObservers:(NSString*)event callback:(NSString*)callbackId option:(NSDictionary *)option moduleClassName:(NSString*)moduleClassName
{
BOOL once = [[option objectForKey:@"once"] boolValue];
+ NSString * moduleName = [option objectForKey:@"moduleName"];
NSMutableDictionary * observer = nil;
- NSDictionary * callbackInfo = @{@"callbackId":callbackId,@"once":@(once)};
+ NSDictionary * callbackInfo = @{@"callbackId":callbackId,@"once":@(once),@"moduleName":moduleName};
if(![self checkModuleEventRegistered:event moduleClassName:moduleClassName]) {
//had not registered yet
observer = [NSMutableDictionary new];
@@ -456,7 +465,10 @@ typedef enum : NSUInteger {
NSDictionary * callbackInfo = listeners[i];
NSString *callbackId = callbackInfo[@"callbackId"];
BOOL once = [callbackInfo[@"once"] boolValue];
- [[WXSDKManager bridgeMgr] callBack:self.instanceId funcId:callbackId params:userInfo[@"param"] keepAlive:!once];
+ NSMutableDictionary * retData = @{@"type":userInfo[@"eventName"],
+ @"module":callbackInfo[@"moduleName"],
+ @"data":userInfo[@"param"]};
+ [[WXSDKManager bridgeMgr] callBack:self.instanceId funcId:callbackId params:retData keepAlive:!once];
// if callback function is not once, then it is keepalive
if (once) {
NSMutableArray * moduleEventListener = [_moduleEventObservers[userInfo[@"moduleId"]] objectForKey:userInfo[@"eventName"]];
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/83c747f3/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
index 3505a60..0bddbf9 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
@@ -9,6 +9,7 @@
#import <Foundation/Foundation.h>
#import "WXSDKInstance.h"
#import "WXComponentManager.h"
+#import "WXModuleMethod.h"
@interface WXSDKInstance ()
@@ -22,8 +23,8 @@
@property (nonatomic, readonly, strong) WXComponentManager *componentManager;
- (void)addModuleEventObservers:(NSString*)event callback:(NSString*)callbackId option:(NSDictionary*)option moduleClassName:(NSString*)moduleClassName;
-- (void)_addModuleEventObserversWithArguments:(NSArray*)arguments moduleClassName:(NSString*)moduleClassName;
+- (void)_addModuleEventObserversWithModuleMethod:(WXModuleMethod*)method;
- (void)removeModuleEventObserver:(NSString*)event moduleClassName:(NSString*)moduleClassName;
-- (void)_removeModuleEventObserverWithArguments:(NSArray*)arguments moduleClassName:(NSString*)moduleClassName;
+- (void)_removeModuleEventObserverWithModuleMethod:(WXModuleMethod*)method;
@end
[32/50] [abbrv] incubator-weex git commit: * [android] update jsfm to
v0.19.7 include RAX and Vue2.0 exclude strict mode (#136)
Posted by ji...@apache.org.
* [android] update jsfm to v0.19.7 include RAX and Vue2.0 exclude strict mode (#136)
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/405b6e67
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/405b6e67
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/405b6e67
Branch: refs/heads/master
Commit: 405b6e67703c58a97bad5fa9b3965fa7b7f97c9a
Parents: b905c37
Author: atomtong <to...@qq.com>
Authored: Wed Jan 11 15:45:08 2017 +0800
Committer: sospartan zheng <so...@apache.org>
Committed: Wed Jan 11 15:45:08 2017 +0800
----------------------------------------------------------------------
android/sdk/assets/main.js | 5077 ++++++++++++++++++++-------------------
1 file changed, 2622 insertions(+), 2455 deletions(-)
----------------------------------------------------------------------