You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by zs...@apache.org on 2017/08/01 02:54:28 UTC

[01/50] [abbrv] incubator-weex git commit: + [ios] update Protection code

Repository: incubator-weex
Updated Branches:
  refs/heads/dev af717020c -> 75101d59f


+ [ios] update Protection 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/1b7c25b6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/1b7c25b6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/1b7c25b6

Branch: refs/heads/dev
Commit: 1b7c25b694b1b2bcad9ee5864cde4ca54d34f267
Parents: 8c1bd67
Author: 齐山 <su...@163.com>
Authored: Wed Jul 19 16:14:18 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Wed Jul 19 16:14:18 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1b7c25b6/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
index 502cb31..ff55ee2 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
@@ -85,15 +85,14 @@
 
 - (void)animationDidStart:(CAAnimation *)anim
 {
-    if (!_animationInfo.target || ![_animationInfo.target isViewLoaded]) {
-        return;
-    }
-    
     [self applyTransform];
 }
 
 -(void)applyTransform
 {
+    if (!_animationInfo.target || ![_animationInfo.target isViewLoaded]) {
+        return;
+    }
     if ([_animationInfo.propertyName hasPrefix:@"transform"]) {
         WXTransform *transform = _animationInfo.target->_transform;
         [transform applyTransformForView:_animationInfo.target.view];


[48/50] [abbrv] incubator-weex git commit: * [ios] rid compiler warnings

Posted by zs...@apache.org.
* [ios] rid compiler warnings


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

Branch: refs/heads/dev
Commit: 6b9f86219f3871e36bad43ffd635218f24452759
Parents: 9050d48
Author: acton393 <zh...@gmail.com>
Authored: Fri Jul 28 21:38:19 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jul 28 21:38:19 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h | 1 -
 ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m | 1 +
 2 files changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6b9f8621/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h b/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h
index 52c291e..dd1d765 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h
@@ -19,7 +19,6 @@
 
 #import <Foundation/Foundation.h>
 #import "WXModuleProtocol.h"
-#import "SRWebSocket.h"
 
 @interface WXWebSocketModule : NSObject <WXModuleProtocol>
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6b9f8621/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m b/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m
index c752d9f..018103a 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m
@@ -23,6 +23,7 @@
 #import "WXHandlerFactory.h"
 #import "WXWebSocketLoader.h"
 #import "WXConvert.h"
+#import "SRWebSocket.h"
 
 @interface WXWebSocketModule()
 


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

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

Branch: refs/heads/dev
Commit: 821164cfa4e92d1a7b75ac799b168612a208063b
Parents: c4c77dc bf9fe0d
Author: 齐山 <su...@163.com>
Authored: Wed Jul 26 17:48:25 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Wed Jul 26 17:48:25 2017 +0800

----------------------------------------------------------------------
 android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------



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

Posted by zs...@apache.org.
Merge branch '0.15-dev' of https://git-wip-us.apache.org/repos/asf/incubator-weex into ios-tracing-0.15-dev

# Conflicts:
#	ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.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/cfa61185
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/cfa61185
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/cfa61185

Branch: refs/heads/dev
Commit: cfa61185e3b68c6bd7a5d4a38de0da3d3a9dda2e
Parents: 898b8a2 33a6bec
Author: 齐山 <su...@163.com>
Authored: Fri Jul 21 18:05:21 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Fri Jul 21 18:05:21 2017 +0800

----------------------------------------------------------------------
 README.md                                       |  51 +-
 .../weex/extend/component/WXParallax.java       |   4 +-
 .../java/com/taobao/weex/WXEnvironment.java     |   4 +
 .../com/taobao/weex/bridge/WXBridgeManager.java |  12 +-
 .../java/com/taobao/weex/common/WXConfig.java   |   1 +
 .../java/com/taobao/weex/dom/WXDomModule.java   |   1 -
 .../com/taobao/weex/dom/WXTextDomObject.java    |   4 +-
 .../com/taobao/weex/dom/action/Actions.java     |   4 +-
 .../taobao/weex/ui/component/WXComponent.java   |   8 +
 .../taobao/weex/ui/component/WXScroller.java    |  79 ++-
 .../com/taobao/weex/ui/component/WXSlider.java  |  10 +-
 .../ui/component/list/BasicListComponent.java   |  73 ++-
 .../taobao/weex/ui/component/list/WXCell.java   |   1 -
 .../weex/ui/view/WXHorizontalScrollView.java    |  27 +
 .../com/taobao/weex/ui/view/WXScrollView.java   |   1 -
 build/config.js                                 |   1 +
 build/karma.vue.conf.js                         |  16 +-
 doc/source/cn/references/modules/meta.md        |  96 +++
 doc/source/cn/references/modules/timer.md       |  47 ++
 doc/source/cn/references/weex-variable.md       |   1 +
 doc/source/references/modules/meta.md           |  97 +++
 doc/source/references/modules/timer.md          |  58 ++
 doc/source/references/weex-variable.md          |   1 +
 examples/vue/hello.vue                          |   2 +-
 .../vue/components/scrollable/list/index.js     |   3 +-
 .../vue/components/scrollable/scroller.js       |   3 +-
 .../vue/components/scrollable/waterfall.js      |   3 +-
 .../render/vue/components/slider/slideMixin.js  |  17 +-
 html5/render/vue/core/node.js                   | 172 +++--
 html5/render/vue/core/style.js                  |   1 -
 html5/render/vue/env/wx-env.js                  |   2 +-
 html5/render/vue/mixins/base.js                 |  16 +-
 html5/render/vue/mixins/scrollable.js           |  18 +-
 html5/render/vue/modules/websocket/websocket.js |   2 +
 html5/render/vue/utils/event.js                 |   6 +-
 html5/render/vue/utils/func.js                  | 136 +++-
 html5/render/vue/utils/index.js                 | 104 ---
 html5/render/vue/utils/perf.js                  |   3 +-
 html5/render/vue/utils/style.js                 |  30 +-
 html5/test/render/vue/core/node.js              |  22 +-
 html5/test/render/vue/helper/utils.js           |  10 +-
 html5/test/render/vue/modules/modal.js          | 225 +++++++
 html5/test/render/vue/modules/websocket.js      |  83 ++-
 html5/test/render/vue/utils/component.js        |  50 +-
 html5/test/render/vue/utils/event.js            |  78 +++
 html5/test/render/vue/utils/func.js             | 278 +++++++-
 html5/test/render/vue/utils/lazyload.js         | 106 ++++
 html5/test/render/vue/utils/perf.js             | 132 ++++
 html5/test/render/vue/utils/style.js            | 157 ++++-
 html5/test/render/vue/utils/type.js             |  49 ++
 html5/test/render/vue/validator/index.js        |  31 +-
 ios/sdk/WeexSDK-Dynamic/Info.plist              |  24 +
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       | 630 ++++++++++++++++++-
 .../xcschemes/WeexSDK-Dynamic.xcscheme          |  80 +++
 .../WeexSDK/Sources/Bridge/WXBridgeContext.h    |   2 +-
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    |  40 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |   2 +-
 .../Component/Recycler/WXRecyclerComponent.h    |   3 +-
 .../Component/Recycler/WXRecyclerComponent.m    |   5 +-
 .../Recycler/WXSectionDataController.h          |   2 +
 .../WeexSDK/Sources/Component/WXAComponent.m    |   2 +-
 .../Sources/Component/WXCanvasComponent.h       |   2 +-
 .../Sources/Component/WXCycleSliderComponent.m  |   6 +
 .../WeexSDK/Sources/Component/WXEditComponent.m |   2 +-
 .../Sources/Component/WXFooterComponent.h       |   2 +-
 .../Sources/Component/WXHeaderComponent.h       |   3 +-
 .../Sources/Component/WXImageComponent.m        |   4 +-
 .../WeexSDK/Sources/Component/WXListComponent.m |  57 +-
 .../WeexSDK/Sources/Component/WXTextComponent.m |  60 +-
 ios/sdk/WeexSDK/Sources/Component/WXTransform.m |  24 +-
 .../Sources/Component/WXVideoComponent.m        |   2 +-
 .../WeexSDK/Sources/Component/WXWebComponent.m  |   2 +-
 .../Sources/Controller/WXRootViewController.m   |   1 +
 .../Sources/Display/WXComponent+BoxShadow.h     |   4 -
 ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h  |   1 +
 ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h |   2 +-
 ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m    |  10 +-
 .../Sources/Handler/WXURLRewriteDefaultImpl.m   |   2 +-
 .../WeexSDK/Sources/Layout/WXComponent+Layout.m |   3 +-
 .../Sources/Manager/WXComponentManager.h        |   3 +
 .../Sources/Manager/WXComponentManager.m        |   1 +
 ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m |   2 +-
 .../WeexSDK/Sources/Manager/WXServiceFactory.h  |   2 +-
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |   2 +-
 .../WeexSDK/Sources/Model/WXJSExceptionInfo.m   |   1 +
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |   6 +-
 .../WeexSDK/Sources/Module/WXAnimationModule.m  |  14 +-
 ios/sdk/WeexSDK/Sources/Module/WXDomModule.m    |   8 +-
 ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m |  11 +-
 ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m |   2 +-
 .../Sources/Protocol/WXURLRewriteProtocol.h     |   2 +-
 ios/sdk/WeexSDK/Sources/Utility/WXUtility.m     |   1 +
 .../View/WXComponent+PseudoClassManagement.h    |   4 +-
 .../Sources/View/WXComponent+ViewManagement.m   |   4 +
 ios/sdk/WeexSDKTests/WXAnimationModuleTests.m   |  29 +
 ios/sdk/buildScripts.sh                         |   2 +
 package.json                                    |   4 +-
 packages/weex-vue-render/package.json           |   8 +-
 pre-build/native-bundle-main.js                 |  16 +-
 99 files changed, 2929 insertions(+), 506 deletions(-)
----------------------------------------------------------------------


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

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cfa61185/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cfa61185/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
----------------------------------------------------------------------

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

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

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cfa61185/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
----------------------------------------------------------------------
diff --cc ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
index 9fce3a4,cfb37b2..ea2d4a8
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
@@@ -34,7 -34,7 +34,8 @@@
  #import "WXHandlerFactory.h"
  #import "WXValidateProtocol.h"
  #import "WXPrerenderManager.h"
 +#import "WXTracingManager.h"
+ #import "WXLayoutDefine.h"
  
  static NSThread *WXComponentThread;
  

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

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cfa61185/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cfa61185/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m
----------------------------------------------------------------------

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


[05/50] [abbrv] incubator-weex git commit: * [html5] update code formate

Posted by zs...@apache.org.
* [html5] update code formate


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

Branch: refs/heads/dev
Commit: 2211546fb2b9532aabd9fe9cb2ff276f2403cf04
Parents: 5507e9f
Author: erha19 <fa...@gmail.com>
Authored: Thu Jul 20 11:07:48 2017 +0800
Committer: erha19 <fa...@gmail.com>
Committed: Thu Jul 20 11:07:48 2017 +0800

----------------------------------------------------------------------
 build/config.js                | 2 +-
 html5/render/vue/utils/func.js | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2211546f/build/config.js
----------------------------------------------------------------------
diff --git a/build/config.js b/build/config.js
index 4325f2b..e2de931 100644
--- a/build/config.js
+++ b/build/config.js
@@ -149,4 +149,4 @@ function now () {
   return (new Date(time)).toISOString().replace('T', ' ').substring(0, 16)
 }
 
-module.exports = getConfig
\ No newline at end of file
+module.exports = getConfig

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2211546f/html5/render/vue/utils/func.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/utils/func.js b/html5/render/vue/utils/func.js
index bfea8df..d4112c47 100644
--- a/html5/render/vue/utils/func.js
+++ b/html5/render/vue/utils/func.js
@@ -133,7 +133,7 @@ export function throttle (func: Function, wait: number, callLastTime: boolean) {
   let last = 0
   let lastTimer = null
   const lastTimeDuration = wait + (wait > 25 ? wait : 25) // plus half wait time.
-  return function (...args: Array <mixed>) {
+  return function (...args: Array<mixed>) {
     const context = this
     const time = new Date().getTime()
     if (time - last > wait) {


[24/50] [abbrv] incubator-weex git commit: * [android] fix NPE

Posted by zs...@apache.org.
* [android] fix NPE


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

Branch: refs/heads/dev
Commit: f63bf2cd87cc5845fca7b271e1e6e94def779743
Parents: c964a90
Author: 莫绪旻 <xu...@alibaba-inc.com>
Authored: Mon Jul 24 13:18:55 2017 +0800
Committer: 莫绪旻 <xu...@alibaba-inc.com>
Committed: Mon Jul 24 13:18:55 2017 +0800

----------------------------------------------------------------------
 .../com/taobao/weex/ui/component/list/WXListComponent.java    | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f63bf2cd/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 9a52dfb..3b89819 100644
--- 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
@@ -92,15 +92,14 @@ public class WXListComponent extends BasicListComponent<BounceRecyclerView> {
     setRefreshOrLoading(child);
 
     // Synchronize DomObject's attr to Component and Native View
-    if(mDomObject.getColumnWidth() != mColumnWidth ||
-            mDomObject.getColumnCount() != mColumnCount ||
-            mDomObject.getColumnGap() != mColumnGap) {
+    if(mDomObject != null && getHostView() != null && (mColumnWidth != mDomObject.getColumnWidth() ||
+            mColumnCount != mDomObject.getColumnCount() ||
+            mColumnGap != mDomObject.getColumnGap())) {
       updateRecyclerAttr();
       getHostView().getInnerView().initView(getContext(), mLayoutType,mColumnCount,mColumnGap,getOrientation());
     }
   }
 
-
   /**
    * Setting refresh view and loading view
    *


[43/50] [abbrv] incubator-weex git commit: + [android] add newNestedInstance method in WXSDKInstance

Posted by zs...@apache.org.
+ [android] add newNestedInstance method in WXSDKInstance


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

Branch: refs/heads/dev
Commit: bf9fe0dc284e7ba3881b2e6701127ce08572bdb5
Parents: ee9b1c7
Author: lybeen <il...@gmail.com>
Authored: Wed Jul 26 16:42:38 2017 +0800
Committer: lybeen <il...@gmail.com>
Committed: Wed Jul 26 16:42:38 2017 +0800

----------------------------------------------------------------------
 android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/bf9fe0dc/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
index a8d8a60..7f03cc2 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -250,14 +250,18 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
     mNestedInstanceInterceptor = interceptor;
   }
 
-  public WXSDKInstance createNestedInstance(NestedContainer container){
-    WXSDKInstance sdkInstance = new WXSDKInstance(mContext);
+  public final WXSDKInstance createNestedInstance(NestedContainer container){
+    WXSDKInstance sdkInstance = newNestedInstance();
     if(mNestedInstanceInterceptor != null){
       mNestedInstanceInterceptor.onCreateNestInstance(sdkInstance,container);
     }
     return sdkInstance;
   }
 
+  protected WXSDKInstance newNestedInstance() {
+    return new WXSDKInstance(mContext);
+  }
+
   public void addOnInstanceVisibleListener(OnInstanceVisibleListener l){
     mVisibleListeners.add(l);
   }


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

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

Branch: refs/heads/dev
Commit: 9e488adf8b4aff1c82e62fc6af3da3cb0395ca04
Parents: 6f087dc f63bf2c
Author: 齐山 <su...@163.com>
Authored: Mon Jul 24 17:36:19 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Mon Jul 24 17:36:19 2017 +0800

----------------------------------------------------------------------
 .../taobao/weex/dom/WXRecyclerDomObject.java    |  4 +++
 .../ui/component/list/BasicListComponent.java   | 30 +++++++++++++-------
 .../weex/ui/component/list/WXListComponent.java |  9 +++++-
 3 files changed, 32 insertions(+), 11 deletions(-)
----------------------------------------------------------------------



[33/50] [abbrv] incubator-weex git commit: + [ios] delete :

Posted by zs...@apache.org.
+ [ios] delete :


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

Branch: refs/heads/dev
Commit: da8cf4a94959a001f12ea462639299177501727d
Parents: 949c14f
Author: 齐山 <su...@163.com>
Authored: Tue Jul 25 14:37:59 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Tue Jul 25 14:37:59 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/da8cf4a9/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
index 06a486f..632d712 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
@@ -112,7 +112,7 @@ typedef enum : NSUInteger {
 
 /**
  *  @discusstion set bundle type
- *  @param jsBundleString: the bundle source.
+ *  @param jsBundleString the bundle source.
  *  @param iid the instance  id.
  */
 +(void)setBundleJSType:(NSString *)jsBundleString instanceId:(NSString *)iid;


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

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

Branch: refs/heads/dev
Commit: f35f97d8d3d2adad905871b5fc94156e957e4f51
Parents: 1b7c25b 9e488ad
Author: 齐山 <su...@163.com>
Authored: Mon Jul 24 17:39:12 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Mon Jul 24 17:39:12 2017 +0800

----------------------------------------------------------------------
 README.md                                       |  51 +-
 .../weex/extend/component/WXParallax.java       |   4 +-
 .../java/com/taobao/weex/dom/WXDomModule.java   |   1 -
 .../taobao/weex/dom/WXRecyclerDomObject.java    |   4 +
 .../ui/component/list/BasicListComponent.java   |  96 +--
 .../taobao/weex/ui/component/list/WXCell.java   |  10 -
 .../weex/ui/component/list/WXListComponent.java |   9 +-
 build/config.js                                 |   1 +
 build/karma.vue.conf.js                         |   7 +
 doc/source/cn/references/modules/timer.md       |   2 +-
 doc/source/references/modules/timer.md          |   3 +-
 html5/render/vue/modules/websocket/websocket.js |   1 +
 html5/render/vue/utils/event.js                 |   6 +-
 html5/render/vue/utils/func.js                  | 136 +++-
 html5/render/vue/utils/index.js                 | 104 ---
 html5/render/vue/utils/perf.js                  |   3 +-
 html5/test/render/vue/modules/websocket.js      |  90 +--
 html5/test/render/vue/utils/component.js        |  50 +-
 html5/test/render/vue/utils/event.js            |  78 +++
 html5/test/render/vue/utils/func.js             | 278 +++++++-
 html5/test/render/vue/utils/lazyload.js         | 106 +++
 html5/test/render/vue/utils/perf.js             | 132 ++++
 html5/test/render/vue/utils/style.js            | 157 ++++-
 html5/test/render/vue/utils/type.js             |  49 ++
 html5/test/render/vue/validator/index.js        |  31 +-
 .../WeexDemo.xcodeproj/project.pbxproj          |   4 +
 ios/playground/WeexDemo/WXDemoViewController.m  |   3 +-
 ios/sdk/WeexSDK-Dynamic/Info.plist              |  24 +
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       | 638 ++++++++++++++++++-
 .../xcschemes/WeexSDK-Dynamic.xcscheme          |  80 +++
 .../WeexSDK/Sources/Bridge/WXBridgeContext.h    |   2 +-
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    |  19 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |  19 +-
 .../Component/Recycler/WXRecyclerComponent.h    |   3 +-
 .../Component/Recycler/WXRecyclerComponent.m    |   5 +-
 .../Recycler/WXSectionDataController.h          |   2 +
 .../Sources/Component/WXCanvasComponent.h       |   2 +-
 .../Sources/Component/WXFooterComponent.h       |   2 +-
 .../Sources/Component/WXHeaderComponent.h       |   3 +-
 .../Sources/Component/WXImageComponent.m        |   1 +
 .../WeexSDK/Sources/Component/WXListComponent.m |   2 +-
 .../Sources/Component/WXScrollerComponent.m     |   1 +
 .../WeexSDK/Sources/Component/WXTextComponent.m |   1 +
 .../Sources/Controller/WXRootViewController.m   |   1 +
 .../Sources/Display/WXComponent+BoxShadow.h     |   4 -
 ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h  |   1 +
 ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h |   2 +-
 ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m    |  10 +-
 .../WeexSDK/Sources/Layout/WXComponent+Layout.m |   1 +
 .../Sources/Manager/WXComponentManager.h        |   3 +
 .../Sources/Manager/WXComponentManager.m        |   5 +-
 .../WeexSDK/Sources/Manager/WXServiceFactory.h  |   2 +-
 .../WeexSDK/Sources/Manager/WXTracingManager.h  | 125 ++++
 .../WeexSDK/Sources/Manager/WXTracingManager.m  | 382 +++++++++++
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |   5 +-
 .../WeexSDK/Sources/Model/WXJSExceptionInfo.h   |   1 +
 .../WeexSDK/Sources/Model/WXJSExceptionInfo.m   |   1 +
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |   7 +
 ios/sdk/WeexSDK/Sources/Module/WXDomModule.m    |   4 +-
 ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m |   4 +-
 ios/sdk/WeexSDK/Sources/Utility/WXLog.m         |   1 +
 .../View/WXComponent+PseudoClassManagement.h    |   4 +-
 .../Sources/View/WXComponent+ViewManagement.m   |   3 +-
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |   1 +
 ios/sdk/buildScripts.sh                         |   2 +
 pre-build/native-bundle-main.js                 |  16 +-
 66 files changed, 2428 insertions(+), 377 deletions(-)
----------------------------------------------------------------------



[44/50] [abbrv] incubator-weex git commit: + [ios] update pod file

Posted by zs...@apache.org.
+ [ios] update pod file


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

Branch: refs/heads/dev
Commit: c4c77dc902e5136887eae95af38cd106402375b5
Parents: ee9b1c7
Author: 齐山 <su...@163.com>
Authored: Wed Jul 26 17:47:04 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Wed Jul 26 17:47:04 2017 +0800

----------------------------------------------------------------------
 ios/playground/Podfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c4c77dc9/ios/playground/Podfile
----------------------------------------------------------------------
diff --git a/ios/playground/Podfile b/ios/playground/Podfile
index bda8b39..50afc6b 100644
--- a/ios/playground/Podfile
+++ b/ios/playground/Podfile
@@ -4,7 +4,7 @@ platform :ios, '7.0'
 
 def common
     pod 'WeexSDK', :path=>'../../'
-    pod 'WXDevtool', '0.9.5'
+    pod 'WXDevtool', '0.15.1'
     pod 'SDWebImage', '3.7.5'
     pod 'SocketRocket', '0.4.2'
     pod 'ATSDK-Weex', '0.0.1'


[42/50] [abbrv] incubator-weex git commit: Merge branch '0.15-dev' of https://github.com/apache/incubator-weex into 0.15-dev

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

Branch: refs/heads/dev
Commit: 0bf8ebe6b6078187971553dffe7a501d0f650405
Parents: b911649 ee9b1c7
Author: miomin <69...@qq.com>
Authored: Wed Jul 26 16:37:14 2017 +0800
Committer: miomin <69...@qq.com>
Committed: Wed Jul 26 16:37:14 2017 +0800

----------------------------------------------------------------------
 examples/vue/components/input.vue               |  17 +
 html5/test/render/vue/core/node.js              |  10 +-
 .../render/vue/data/dotvue/event-bubble-bar.vue |  11 -
 .../render/vue/data/dotvue/event-bubble.vue     |  11 -
 .../WeexDemo.xcodeproj/project.pbxproj          |   4 +
 ios/playground/WeexDemo/WXDemoViewController.m  |   2 +-
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       |   8 +
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    |  34 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m |  16 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |  33 +-
 .../WeexSDK/Sources/Component/WXEditComponent.m |   2 +-
 .../Sources/Component/WXImageComponent.m        |   1 +
 .../Sources/Component/WXScrollerComponent.m     |   1 +
 .../WeexSDK/Sources/Component/WXTextComponent.m |   1 +
 .../Sources/Manager/WXComponentManager.m        |   5 +-
 .../WeexSDK/Sources/Manager/WXTracingManager.h  | 126 ++++++
 .../WeexSDK/Sources/Manager/WXTracingManager.m  | 384 +++++++++++++++++++
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |   3 +
 .../WeexSDK/Sources/Model/WXJSExceptionInfo.h   |   1 +
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |   7 +
 .../WeexSDK/Sources/Module/WXAnimationModule.m  |   7 +-
 ios/sdk/WeexSDK/Sources/Module/WXDomModule.m    |   4 +-
 .../WeexSDK/Sources/Protocol/WXBridgeProtocol.h |   5 +
 ios/sdk/WeexSDK/Sources/Utility/WXLog.m         |   8 +
 .../Sources/View/WXComponent+ViewManagement.m   |   3 +-
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |   1 +
 pre-build/native-bundle-main.js                 |  12 +-
 27 files changed, 660 insertions(+), 57 deletions(-)
----------------------------------------------------------------------



[37/50] [abbrv] incubator-weex git commit: * [jsfm] genNativeModules NPE

Posted by zs...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b1ced32c/pre-build/native-bundle-main.js
----------------------------------------------------------------------
diff --git a/pre-build/native-bundle-main.js b/pre-build/native-bundle-main.js
index 6479a10..e24c730 100644
--- a/pre-build/native-bundle-main.js
+++ b/pre-build/native-bundle-main.js
@@ -1,8 +1,8 @@
-(this.nativeLog||function(e){console.log(e)})("START JS FRAMEWORK 0.21.1, Build 2017-06-30 15:37."),this.getJSFMVersion=function(){return"0.21.1"};var global=this,process={env:{}},setTimeout=global.setTimeout;!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(0,function(){"use strict";function e(e){Jn.Document=e.Document,Jn.Element=e.Element,Jn.Comment=e.Comment,Jn.sendTasks=e.sendTasks}function t(e){}function n(e){}function r(e){}function o(e,t,n){}function i(e,t,n,r,o){var i=new Jn.Document(e,n.bundleUrl),a={},s=0;i.addCallback=function(e){return s++,a[s]=e,s},i.handleCallback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},Hn[e]=i;var u=Object.assign({Document:Jn.Document,Element:Jn.Element,Comment:Jn.Comment,sendTasks:Jn.sendTasks,id:e,options:n,data:r,document:i},o),c=[],l=[];for(var f in u)c.push(f),l.push(u[f]);return c.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(c)))).apply
 (void 0,l)}function a(e,t){}function s(e){delete Hn[e]}function u(e){return Hn[e].body.toJSON()}function c(e,t){var n={fireEvent:function(e,t,n,r,o){var i=Hn[e],a=i.getRef(t);return i.fireEvent(a,n,r,o)},callback:function(e,t,n,r){return Hn[e].handleCallback(t,n,r)}};if(Hn[e]&&Array.isArray(t)){var r=[];return t.forEach(function(t){var o=n[t.method],i=[].concat(t.args);"function"==typeof o&&(i.unshift(e),r.push(o.apply(void 0,i)))}),r}}function l(e){return e&&e.__esModule?e.default:e}function f(e,t){return t={exports:{}},e(t,t.exports),t.exports}function d(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm}function p(e){var t=this._ids[e];if(t)return t.el}function h(e){var t=this._ids[e];if(t)return t.vm}function v(e){return this._app.differ.then(function(){e()})}function m(e,t){console.warn("[JS Framework] Vm#$scrollTo is deprecated, please use \"require('@weex-module/dom').scrollTo(el, options)\" instead");var n=this
 .$el(e);if(n){this._app.requireModule("dom").scrollToElement(n.ref,{offset:t})}}function y(e,t,n){var r=this,o=this.$el(e);if(o&&t&&t.styles){this._app.requireModule("animation").transition(o.ref,t,function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];r._setStyle(o,t.styles),n&&n.apply(void 0,e)})}}function _(e){var t=this._app.options;return"function"==typeof e&&(console.warn("[JS Framework] the callback of Vm#$getConfig(callback) is deprecated, this api now can directly RETURN config info."),e(t)),t}function g(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" instead"),this._app.requireModule("stream").sendHttp(e,t)}function b(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" instead"),this._app.requireModule("event").openURL(e)}function w(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require(
 '@weex-module/pageInfo').setTitle(title)\" instead"),this._app.requireModule("pageInfo").setTitle(e)}function O(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.warn("[JS Framework] Vm#$call is deprecated, please use \"require('@weex-module/moduleName')\" instead");var o=this._app.requireModule(e);o&&o[t]&&o[t].apply(o,n)}function E(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];if("function"==typeof Object.assign)Object.assign.apply(Object,[e].concat(t));else{var r=t.shift();for(var o in r)e[o]=r[o];t.length&&E.apply(void 0,[e].concat(t))}return e}function x(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function S(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function C(e,t){return wr.call(e,t)}function k(e,t){return function(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}}function j(e){return null!==e&&"object"==typeof e}function A(e){retur
 n Or.call(e)===Er}function I(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function T(){return"object"==typeof nativeSet?nativeSet.create():new zn}function N(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}function P(e){return e.replace(Sr,"").replace(Cr,"")}function M(e){return e.replace(jr,"")}function $(){this.id=Pr++,this.subs=[]}function R(e){$.target&&Mr.push($.target),$.target=e}function D(){$.target=Mr.pop()}function F(){$.target=null,Mr=[]}function L(e,t,n,r){r&&E(this,r);var o="function"==typeof t;this.vm=e,e._watchers.push(this),this.expression=t,this.cb=n,this.id=++$r,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=T(),this.newDepIds=T(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}function U(e,t){var n,r,o,i;if(t||(t=Rr,t.clear()),o=Array.isArray(e),i=j(e),o||i){if(e.__ob__){var a=e.__ob__.dep.id;if(t.has(a))return;t.add(a)}if(o)for(n=e.length;n--;)U(e[n
 ],t);else if(i)for(r=Object.keys(e),n=r.length;n--;)U(e[r[n]],t)}}function B(e){if(this.value=e,this.dep=new $,x(e,"__ob__",this),Array.isArray(e)){(xr?V:q)(e,Fr,Lr),this.observeArray(e)}else this.walk(e)}function V(e,t){e.__proto__=t}function q(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];x(e,i,t[i])}}function W(e,t){if(j(e)){var n;return C(e,"__ob__")&&e.__ob__ instanceof B?n=e.__ob__:(Array.isArray(e)||A(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new B(e)),n&&t&&n.addVm(t),n}}function z(e,t,n){var r=new $,o=Object.getOwnPropertyDescriptor(e,t);if(!o||!1!==o.configurable){var i=o&&o.get,a=o&&o.set,s=W(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=i?i.call(e):n;if($.target&&(r.depend(),s&&s.dep.depend(),Array.isArray(t)))for(var o=void 0,a=0,u=t.length;a<u;a++)(o=t[a])&&o.__ob__&&o.__ob__.dep.depend();return t},set:function(t){t!==(i?i.call(e):n)&&(a?a.call(e,t):n=t,s=W(t),r.notify())}})}}function J(e,t,n){if(Array.isArray(e))return e.splice(
 t,1,n);if(C(e,t))return void(e[t]=n);if(e._isVue)return void J(e._data,t,n);var r=e.__ob__;if(!r)return void(e[t]=n);if(r.convert(t,n),r.dep.notify(),r.vms)for(var o=r.vms.length;o--;){var i=r.vms[o];G(i,t)}return n}function H(e,t){if(C(e,t)){delete e[t];var n=e.__ob__;if(!n)return void(e._isVue&&delete e._data[t]);if(n.dep.notify(),n.vms)for(var r=n.vms.length;r--;){var o=n.vms[r];X(o,t)}}}function G(e,t){(Ur.indexOf(t)>-1||!I(t))&&Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function X(e,t){I(t)||delete e[t]}function K(e){e._watchers=[],Z(e),Y(e),te(e)}function Z(e){var t=e._data;A(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)G(e,n[r]);W(t,e)}function Q(){}function Y(e){var t=e._computed;if(t)for(var n in t){var r=t[n],o={enumerable:!0,configurable:!0};"function"==typeof r?(o.get=ee(r,e),o.set=Q):(o.get=r.get?!1!==r.cache?ee(r.get,e):k(r.get,e):Q,o.set=r.set?k(r.set,e):Q),Object.defineProperty(e,n
 ,o)}}function ee(e,t){var n=new L(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),$.target&&n.depend(),n.value}}function te(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}function ne(e){var t=e.type,n=Vr[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===N(e[r])&&"object"===N(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])}function re(e,t,n){ce(e,t,n.id,e),le(e,t,n.attr),de(e,t,n.classList),pe(e,t,n.style),ve(e,t,n.events)}function oe(e,t,n,r){t=t||{},n=n||{};var o=t._options||{},i=o.props;Array.isArray(i)&&(i=i.reduce(function(e,t){return e[t]=!0,e},{})),ae(r,i,e,t),ae(n.attr,i,e,t)}function ie(e,t,n,r){void 0===r&&(r={}),ue(n.classList,e,t),se(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function ae(e,t,n,r){if(e){for(var o in e)!function(o){if(!t||t[o]){var i=e[o];if("function"==typeof i){var a=_e(n,i,function(e){r[o]=e});r[o]=a}else r[o]=i}}(o)}}function se(e,t,n){for(var r in e)!function(r){
 var o=e[r];if("function"==typeof o){var i=_e(t,o,function(e){n._rootEl&&n._rootEl.setStyle(r,e)});n._rootEl.setStyle(r,i)}else n._rootEl&&n._rootEl.setStyle(r,o)}(r)}function ue(e,t,n){function r(e,t){"array"===N(e)&&e.unshift(t)}var o=t._options&&t._options.style||{};if(n._rootEl){var i="@originalRootEl";if(o[i]=n._rootEl.classStyle,"function"==typeof e){var a=_e(t,e,function(e){r(e,i),fe(n._rootEl,o,e)});r(a,i),fe(n._rootEl,o,a)}else null!=e&&(r(e,i),fe(n._rootEl,o,e))}}function ce(e,t,n,r){var o=Object.create(null);if(Object.defineProperties(o,{vm:{value:r,writable:!1,configurable:!1},el:{get:function(){return t||r._rootEl},configurable:!1}}),"function"==typeof n){var i=n;n=i.call(e),(n||0===n)&&(e._ids[n]=o),_e(e,i,function(t){t&&(e._ids[t]=o)})}else n&&"string"==typeof n&&(e._ids[n]=o)}function le(e,t,n){me(e,t,"attr",n)}function fe(e,t,n){for(var r={},o=n.length,i=0;i<o;i++)!function(e){var o=t[n[e]];o&&Object.keys(o).forEach(function(e){r[e]=o[e]})}(i);e.setClassStyle(r)}func
 tion de(e,t,n){if("function"==typeof n||Array.isArray(n)){if(Array.isArray(n)&&!n.length)return void t.setClassStyle({});var r=e._options&&e._options.style||{};if("function"==typeof n){var o=_e(e,n,function(e){fe(t,r,e)});fe(t,r,o)}else fe(t,r,n)}}function pe(e,t,n){me(e,t,"style",n)}function he(e,t,n,r){t.addEvent(n,k(r,e))}function ve(e,t,n){if(n)for(var r=Object.keys(n),o=r.length;o--;){var i=r[o],a=n[i];"string"==typeof a&&((a=e[a])||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),he(e,t,i,a)}}function me(e,t,n,r){if(r)for(var o=Object.keys(r),i=o.length;i--;){var a=o[i],s=r[a];"function"==typeof s?ye(e,t,n,a,s):t[qr[n]](a,s)}}function ye(e,t,n,r,o){var i=qr[n],a=_e(e,o,function(n){function o(){t[i](r,n)}var a=e&&e._app&&e._app.differ;a?a.append("element",t.depth,t.ref,o):o()});t[i](r,a)}function _e(e,t,n){return e._static?t.call(e,e):new L(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)}).value}function ge(e,t){return e._app.doc.createBody(t)}functio
 n be(e,t){return e._app.doc.createElement(t)}function we(e,t){var n=Oe(e),r=Ee(e),o=Wr++;if(t.element){var i=t.updateMark;i?(i.element&&(i=i.end),t.element.insertAfter(r,i),t.element.insertAfter(n,i),t.updateMark=r):(t.element.insertBefore(n,t.end),t.element.insertBefore(r,t.end)),t=t.element}else t.appendChild(n),t.appendChild(r);return{start:n,end:r,element:t,blockId:o}}function Oe(e){return e._app.doc.createComment("start")}function Ee(e){return e._app.doc.createComment("end")}function xe(e,t,n){if(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=Se(e,t,o);return n.updateMark=t.element?t.end:t,i}if(!t.element)return n.element.insertBefore(t,r);n.element.insertBefore(t.start,r),n.element.insertBefore(t.end,r)}else{if(!t.element)return n.appendChild(t);n.appendChild(t.start),n.appendChild(t.end)}}function Se(e,t,n){return t.element?ke(t,n):Ce(t,n)}function Ce(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}function ke(e,t){var n=t.parentNode;i
 f(n){for(var r,o=e.start,i=[o];o&&o!==e.end;)o=o.nextSibling,i.push(o);var a=t;return i.every(function(e){return r=n.insertAfter(e,a),a=e,-1!==r}),r}}function je(e,t,n){void 0===n&&(n=!1),t.element?Ie(t,n):Ae(t),t._vm&&t._vm.$emit("hook:destroyed")}function Ae(e){var t=e.parentNode;t&&t.removeChild(e)}function Ie(e,t){void 0===t&&(t=!1);for(var n=[],r=e.start.nextSibling;r&&r!==e.end;)n.push(r),r=r.nextSibling;t||Ae(e.start),n.forEach(function(e){Ae(e)}),t||Ae(e.end)}function Te(e){var t=e._options||{},n=t.template||{};t.replace?n.children&&1===n.children.length?Ne(e,n.children[0],e._parentEl):Ne(e,n.children,e._parentEl):Ne(e,n,e._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+e._type+")"),e.$emit("hook:ready"),e._ready=!0}function Ne(e,t,n,r){if(-1!==(e._app||{}).lastSignal){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),Pe(t))return void Le(e,t,n,r);if(r=r||{},Me(t))return console.debug('[JS Framework] compile "content" block by',t),void(e._content=
 we(e,n));if($e(t,r))return console.debug('[JS Framework] compile "repeat" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `repeat` directive!"):Ue(e,t,n));if(Re(t,r))return console.debug('[JS Framework] compile "if" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `if` directive!"):Be(e,t,n,r));var o=r.type||t.type;if(De(o,r))return void Ve(e,t,n,o,r);var i=o,a=Fe(e,t,i);if(a)return console.debug("[JS Framework] compile composed component by",t),void qe(e,a,t,n,i,r);console.debug("[JS Framework] compile native component by",t),We(e,t,n,i)}}function Pe(e){return Array.isArray(e)}function Me(e){return"content"===e.type||"slot"===e.type}function $e(e,t){return!t.hasOwnProperty("repeat")&&e.repeat}function Re(e,t){return!t.hasOwnProperty("shown")&&e.shown}function De(e,t){return"function"==typeof e&&!t.hasOwnProperty("type")}function Fe(e,t,n){var r;return e._app&&e._app.customComponentM
 ap&&(r=e._app.customComponentMap[n]),e._options&&e._options.components&&(r=e._options.components[n]),t.component&&(r=r||{}),r}function Le(e,t,n,r){var o=we(e,n);t.forEach(function(t){Ne(e,t,o,r)})}function Ue(e,t,n){var r=t.repeat,o="function"==typeof r,i=r.getter||r.expression||r;"function"!=typeof i&&(i=function(){return[]});var a=r.key||"$index",s=r.value||"$value",u=r.trackBy||t.trackBy||t.attr&&t.attr.trackBy,c=we(e,n);c.children=[],c.data=[],c.vms=[],Je(e,t,c,{getter:i,key:a,value:s,trackBy:u,oldStyle:o})}function Be(e,t,n,r){var o={shown:!0},i=we(e,n);n.element&&n.children&&n.children.push(i),r.repeat&&(o.repeat=r.repeat),He(e,t,i,o)}function Ve(e,t,n,r,o){var i=r.call(e),a=E({type:i},o),s=we(e,n);n.element&&n.children&&n.children.push(s),_e(e,r,function(n){var r=E({type:n},o);je(e,s,!0),Ne(e,t,s,r)}),Ne(e,t,s,a)}function qe(e,t,n,r,o,i){var a=e.constructor,s=new a(o,t,e,r,void 0,{"hook:init":function(){e._static&&(this._static=e._static),ce(e,null,n.id,this),this._externalBi
 nding={parent:e,template:n}},"hook:created":function(){oe(e,this,n,i.repeat)},"hook:ready":function(){this._content&&ze(e,n,this._content)}});ie(e,s,n,r)}function We(e,t,n,r){ne(t);var o;if("_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),o=ge(e,r)):(console.debug("[JS Framework] compile to create element for "+r),o=be(e,r)),!e._rootEl){e._rootEl=o;var i=e._externalBinding||{},a=i.template,s=i.parent;if(a&&a.events&&s&&o)for(var u in a.events){var c=s[a.events[u]];c&&o.addEvent(u,k(c,s))}}re(e,o,t),t.attr&&t.attr.append&&(t.append=t.attr.append),t.append&&(o.attr=o.attr||{},o.attr.append=t.append);var l="tree"===t.append,f=e._app||{};-1===f.lastSignal||l||(console.debug("[JS Framework] compile to append single node for",o),f.lastSignal=xe(e,o,n)),-1!==f.lastSignal&&ze(e,t,o),-1!==f.lastSignal&&l&&(console.debug("[JS Framework] compile to append whole tree for",o),f.lastSignal=xe(e,o,n))}function ze(e,t,n){var r=e._app||{},o=t.children;o&&o.le
 ngth&&o.every(function(t){return Ne(e,t,n),-1!==r.lastSignal})}function Je(e,t,n,r){function o(e,r,o){var a;c?(a=e,j(e)?(a[l]=r,a.hasOwnProperty("INDEX")||Object.defineProperty(a,"INDEX",{value:function(){console.warn('[JS Framework] "INDEX" in repeat is deprecated, please use "$index" instead')}})):(console.warn("[JS Framework] Each list item must be an object in old-style repeat, please use `repeat={{v in list}}` instead."),a={},a[l]=r,a[f]=e)):(a={},a[l]=r,a[f]=e);var s=Xe(o,a);i.push(s),Ne(s,t,n,{repeat:e})}var i=n.vms,a=n.children,s=r.getter,u=r.trackBy,c=r.oldStyle,l=r.key,f=r.value,d=Ge(e,n,s,"repeat",function(t){if(console.debug('[JS Framework] the "repeat" item has changed',t),n&&t){var r=a.slice(),s=i.slice(),d=n.data.slice(),p={},h={};t.forEach(function(e,t){var n=u?e[u]:c?e[l]:t;null!=n&&""!==n&&(p[n]=e)});var v=[];d.forEach(function(t,n){var o=u?t[u]:c?t[l]:n;p.hasOwnProperty(o)?(h[o]={item:t,index:n,key:o,target:r[n],vm:s[n]},v.push(t)):je(e,r[n])}),a.length=0,i.length
 =0,n.data=t.slice(),n.updateMark=n.start,t.forEach(function(t,r){var s=u?t[u]:c?t[l]:r,d=h[s];d?(d.item===v[0]?v.shift():(v.$remove(d.item),Se(e,d.target,n.updateMark,!0)),a.push(d.target),i.push(d.vm),c?d.vm=t:d.vm[f]=t,d.vm[l]=r,n.updateMark=d.target):o(t,r,e)}),delete n.updateMark}});n.data=d.slice(0),d.forEach(function(t,n){o(t,n,e)})}function He(e,t,n,r){var o=Ge(e,n,t.shown,"shown",function(o){console.debug('[JS Framework] the "if" item was changed',o),n&&!!n.display!=!!o&&(n.display=!!o,o?Ne(e,t,n,r):je(e,n,!0))});n.display=!!o,o&&Ne(e,t,n,r)}function Ge(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return _e(e,n,function(e){a.latestValue=e,i&&!a.recorded&&i.append(r,s,t.blockId,function(){var e=a.latestValue;o(e),a.recorded=!1,a.latestValue=void 0}),a.recorded=!0})}function Xe(e,t){var n=Object.create(e);return n._data=t,Z(n),Y(n),n._realParent=e,e._static&&(n._static=e._static),n}function Ke(e,t){if(t instanceof Ke)return t;this.timestamp=Date.now(
 ),this.detail=t,this.type=e;var n=!1;this.stop=function(){n=!0},this.hasStopped=function(){return n}}function Ze(e,t){var n=this,r=this._vmEvents,o=r[e];if(o){var i=new Ke(e,t);o.forEach(function(e){e.call(n,i)})}}function Qe(e,t){var n=new Ke(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Ye(e,t){var n=new Ke(e,t);this.$emit(e,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.forEach(function(t){t.$broadcast(e,n)})}function et(e,t){if(e&&"function"==typeof t){var n=this._vmEvents,r=n[e]||[];r.push(t),n[e]=r,"hook:ready"===e&&this._ready&&this.$emit("hook:ready")}}function tt(e,t){if(e){var n=this._vmEvents;if(!t)return void delete n[e];var r=n[e];r&&r.$remove(t)}}function nt(e,t){var n=e._options||{},r=n.events||{};for(var o in r)e.$on(o,r[o]);for(var i in t)e.$on(i,t[i]);zr.forEach(function(t){e.$on("hook:"+t,n[t])})}function rt(e,t,n,r,o,i){n=n||{},this._parent=n._realParent?n._realParent:n,this._app=n._app|
 |{},n._childrenVms&&n._childrenVms.push(this),!t&&this._app.customComponentMap&&(t=this._app.customComponentMap[e]),t=t||{};var a=t.data||{};this._options=t,this._methods=t.methods||{},this._computed=t.computed||{},this._css=t.style||{},this._ids={},this._vmEvents={},this._childrenVms=[],this._type=e,nt(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._type+")"),this.$emit("hook:init"),this._inited=!0,this._data="function"==typeof a?a():a,o&&E(this._data,o),K(this),console.debug('[JS Framework] "created" lifecycle in Vm('+this._type+")"),this.$emit("hook:created"),this._created=!0,t.methods&&t.methods.ready&&(console.warn('"exports.methods.ready" is deprecated, please use "exports.created" instead'),t.methods.ready.call(this)),this._app.doc&&(this._parentEl=r||this._app.doc.documentElement,Te(this))}function ot(e,t){for(var n in e)!function(n){var r=Jr[n];r||(r={},Jr[n]=r),e[n].forEach(function(e){"string"==typeof e&&(e={name:e}),r[e.name]&&!t||(r[e.name]=e)})}(n)
 }function it(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}function at(e,t){var n=Jr[t],r={};for(var o in n)!function(n){Object.defineProperty(r,n,{configurable:!0,enumerable:!0,get:function(){return function(){for(var r=[],o=arguments.length;o--;)r[o]=arguments[o];return e.callTasks({module:t,method:n,args:r})}},set:function(r){if("function"==typeof r)return e.callTasks({module:t,method:n,args:[r]})}})}(o);return r}function st(e,t){return e.customComponentMap[t]}function ut(e,t,n){var r=e.customComponentMap;if(r[t])return void console.error("[JS Framework] define a component("+t+") that already exists");r[t]=n}function ct(e){if(Hr.valid(e))return e;e="string"==typeof e?e:"";for(var t=e.split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function lt(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=e.toLowerCase();return r.errorMessage=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched cri
 teria "+n}(e,t,n),o.indexOf("osversion")>=0?r.code=1001:o.indexOf("appversion")>=0?r.code=1002:o.indexOf("weexversion")>=0?r.code=1003:o.indexOf("devicemodel")>=0&&(r.code=1004),r}function ft(e,t){t=t||global.WXEnvironment,t=A(t)?t:{};var n={isDowngrade:!1};if("function"===N(e)){var r=e.call(this,t,{semver:Hr,normalizeVersion:ct});r=!!r,n=r?lt("custom","","custom params"):n}else{e=A(e)?e:{};var o=t.platform||"unknow",i=o.toLowerCase(),a=e[i]||{};for(var s in t){var u=s,c=u.toLowerCase(),l=t[s],f=c.indexOf("version")>=0,d=c.indexOf("devicemodel")>=0,p=a[s];if(p&&f){var h=ct(p),v=ct(t[s]);if(Hr.satisfies(v,h)){n=lt(u,l,p);break}}else if(d){var m="array"===N(p)?p:[p];if(m.indexOf(l)>=0){n=lt(u,l,p);break}}}}return n}function dt(e,t){if(void 0===t&&(t={}),e&&e.callTasks)return e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}function pt(e,t,n,r){console.debug("[JS Framework] bootstrap for "+t);var o;if(Ar(t))o=P(t);else{if(!Nr(t))return new Error("Wrong component name: "+t);
 if(o=M(t),!st(e,o))return new Error("It's not a component: "+t)}if(n=A(n)?n:{},"string"==typeof n.transformerVersion&&"string"==typeof global.transformerVersion&&!Hr.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);var i=ft(n.downgrade);if(i.isDowngrade)return e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]}]),new Error("Downgrade["+i.code+"]: "+i.errorMessage);n.viewport&&dt(e,n.viewport),e.vm=new rt(o,null,{_app:e},null,r)}function ht(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),ut(e,t,n)}function vt(e,t){console.debug("[JS Framework] Refresh with",t,"in instance["+e.id+"]");var n=e.vm;return n&&t?("function"==typeof n.refreshData?n.refreshData(t):E(n,t),e.differ.flush(),void e.doc.taskCenter.send("dom",{action:"refreshFinish"},[])):new Error('invalid data "'+t+'"')}f
 unction mt(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&yt(e.vm),e.id="",e.options=null,e.blocks=null,e.vm=null,e.doc.taskCenter.destroyCallback(),e.doc.destroy(),e.doc=null,e.customComponentMap=null,e.commonModules=null}function yt(e){if(delete e._app,delete e._computed,delete e._css,delete e._data,delete e._ids,delete e._methods,delete e._options,delete e._parent,delete e._parentEl,delete e._rootEl,e._watchers){for(var t=e._watchers.length;t--;)e._watchers[t].teardown();delete e._watchers}if(e._childrenVms){for(var n=e._childrenVms.length;n--;)yt(e._childrenVms[n]);delete e._childrenVms}console.debug('[JS Framework] "destroyed" lifecycle in Vm('+e._type+")"),e.$emit("hook:destroyed"),delete e._type,delete e._vmEvents}function _t(e){var t=e.doc||{},n=t.body||{};return n.toJSON?n.toJSON():{}}function gt(e,t,n,r,o){if(console.debug('[JS Framework] Fire a "'+n+'" event on an element('+t+") in instance("+e.id+")"),Array.isArray(t))return void t.some(function(t
 ){return!1!==gt(e,t,n,r)});var i=e.doc.getRef(t);if(i){var a=e.doc.fireEvent(i,n,r,o);return e.differ.flush(),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),a}return new Error('invalid element reference "'+t+'"')}function bt(e,t,n,r){console.debug("[JS Framework] Invoke a callback("+t+") with",n,"in instance("+e.id+")");var o=e.doc.taskCenter.callback(t,n,r);return wt(e),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),o}function wt(e){e.differ.flush()}function Ot(e,t){var n;return"array"!==N(t)&&(t=[t]),t.forEach(function(t){n=e.doc.taskCenter.send("module",{module:t.module,method:t.method},t.args)}),n}function Et(e,t,n,r){console.debug("[JS Framework] Intialize an instance with:\n",n);var o,i=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return Gr.apply(void 0,[e].concat(t))},a=function(t,r,i){o=pt(e,t,r,i||n),wt(e),e.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+e.id+")")},s=rt,u=function(){for(var t=[
 ],n=arguments.length;n--;)t[n]=arguments[n];return ht.apply(void 0,[e].concat(t))},c=function(t,n){o=pt(e,t,{},n)},l=function(t){return function(n){o=pt(e,t,{},n)}},f=e.doc,d=function(t){return e.requireModule(P(t))},p={config:e.options,define:i,bootstrap:a,requireModule:d,document:f,Vm:s};Object.freeze(p);var h;"function"==typeof t?h=t.toString().substr(12):t&&(h=t.toString()),h='(function(global){\n\n"use strict";\n\n '+h+" \n\n})(Object.create(this))";var v=global.WXEnvironment,m={};if(v&&"Web"!==v.platform){var y=e.requireModule("timer");Object.assign(m,{setTimeout:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setTimeout(r,t[1]),e.doc.taskCenter.callbackManager.lastCallbackId.toString()},setInterval:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setInterval(r,t[1]),e.doc.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:f
 unction(e){y.clearTimeout(e)},clearInterval:function(e){y.clearInterval(e)}})}var _=Object.assign({define:i,require:l,bootstrap:a,register:u,render:c,__weex_define__:i,__weex_bootstrap__:a,__weex_document__:f,__weex_require__:d,__weex_viewmodel__:s,weex:p},m,r);return St(_,h)||xt(_,h),o}function xt(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);return n.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(n)))).apply(void 0,r)}function St(e,t){if("function"!=typeof compileAndRunBundle)return!1;var n=void 0,r=!1,o="(function (",i=[],a=[];for(var s in e)i.push(s),a.push(e[s]);for(var u=0;u<i.length-1;++u)o+=i[u],o+=",";o+=i[i.length-1],o+=") {",o+=t,o+="} )";try{var c=e.weex||{},l=c.config||{};n=compileAndRunBundle(o,l.bundleUrl,l.bundleDigest,l.codeCachePath),n&&"function"==typeof n&&(n.apply(void 0,a),r=!0)}catch(e){console.error(e)}return r}function Ct(e,t){var n=e[t];for(var r in n)n[r]()}function kt(e,t){var n=e[t];for(var r in n){n[r].forEach(function(e){e
 ()})}}function jt(e,t){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},this.doc=new Br.Document(e,this.options.bundleUrl,null,Br.Listener),this.differ=new Xr(e)}function At(e,t,n,r,o){var i=o||{},a=i.services;F();var s=Kr[e];n=n||{};var u;return s?u=new Error('invalid instance id "'+e+'"'):(s=new jt(e,n),Kr[e]=s,u=Et(s,t,r,a)),u}function It(e){Br.Document=e.Document,Br.Element=e.Element,Br.Comment=e.Comment,Br.sendTasks=e.sendTasks,Br.Listener=e.Listener}function Tt(e,t){var n=Kr[e];return n?vt(n,t):new Error('invalid instance id "'+e+'"')}function Nt(e){"function"==typeof markupState&&markupState(),F();var t=Kr[e];if(!t)return new Error('invalid instance id "'+e+'"');mt(t),delete Kr[e];var n=Math.round(e);if(n>0){n%18||"function"!=typeof notifyTrimMemory||notifyTrimMemory()}return Kr}function Pt(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?Zr[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(Zr[e.type]=e))})}function
  Mt(e){"object"==typeof e&&ot(e)}function $t(e){"object"==typeof e&&it(rt,e)}function Rt(e,t){if(Kr[e]&&Array.isArray(t)){var n=[];return t.forEach(function(t){var r=Qr[t.method],o=[].concat(t.args);"function"==typeof r&&(o.unshift(e),n.push(r.apply(void 0,o)))}),n}return new Error('invalid instance id "'+e+'" or tasks')}function Dt(e){var t=Kr[e];return t?_t(t):new Error('invalid instance id "'+e+'"')}function Ft(){if(Ut(),global.WXEnvironment&&"Web"!==global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("debug")&&global.nativeLog.apply(global,Vt(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("log")&&global.nativeLog.apply(global,Vt(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("info")&&global.nativeLog.apply(global,Vt(e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt
 ("warn")&&global.nativeLog.apply(global,Vt(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("error")&&global.nativeLog.apply(global,Vt(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,o=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:o},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("error")&&console.__ori__.error.apply(consol
 e,e)}}}function Lt(){$u={},global.console=Ru}function Ut(){Mu.forEach(function(e){var t=Mu.indexOf(e);$u[e]={},Mu.forEach(function(n){Mu.indexOf(n)<=t&&($u[e][n]=!0)})})}function Bt(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return $u[t]&&$u[t][e]}function Vt(e){return e.map(function(e){return e="[object object]"===Object.prototype.toString.call(e).toLowerCase()?JSON.stringify(e):String(e)})}function qt(){if(void 0===setTimeout&&"function"==typeof Fu){var e={},t=0;global.setTimeout=function(n,r){e[++t]=n,Fu(t.toString(),r)},global.setTimeoutCallback=function(t){"function"==typeof e[t]&&(e[t](),delete e[t])}}}function Wt(){global.setTimeout=Du,global.setTimeoutCallback=null}function zt(){Object.freeze(Object),Object.freeze(Array),Jt(),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype),Object.freeze(Boolean.prototype),Ht(),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype)}function Jt(){var e=Object.protot
 ype,t="Object.prototype";Gt(e,"__defineGetter__",t),Gt(e,"__defineSetter__",t),Gt(e,"__lookupGetter__",t),Gt(e,"__lookupSetter__",t),Gt(e,"constructor",t),Gt(e,"hasOwnProperty",t),Gt(e,"isPrototypeOf",t),Gt(e,"propertyIsEnumerable",t),Gt(e,"toLocaleString",t),Gt(e,"toString",t),Gt(e,"valueOf",t),Object.seal(e)}function Ht(){var e=Error.prototype,t="Error.prototype";Gt(e,"name",t),Gt(e,"message",t),Gt(e,"toString",t),Gt(e,"constructor",t),Object.seal(e)}function Gt(e,t,n){if(e.hasOwnProperty(t)){var r=e[t];Object.defineProperty(e,t,{get:function(){return r},set:function(r){if(this===e)throw Error("Cannot assign to read only property "+t+" of "+n);return Object.defineProperty(this,t,{value:r,writable:!0}),r}})}}function Xt(e,t){e&&(Uu[e]=t)}function Kt(e){return Uu[e]}function Zt(e){delete Uu[e]}function Qt(e){var t=Uu[e];return t&&t.taskCenter?t.taskCenter:null}function Yt(){return(Bu++).toString()}function en(e,t,n){var r=e.documentElement;if(!(r.pureChildren.length>0||t.parentNode)
 ){var o=r.children,i=o.indexOf(n);i<0?o.push(t):o.splice(i,0,t),1===t.nodeType?("body"===t.role?(t.docId=e.id,t.ownerDocument=e,t.parentNode=r,rn(t,r)):(t.children.forEach(function(e){e.parentNode=t}),nn(e,t),t.docId=e.id,t.ownerDocument=e,rn(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),tn(e,t)):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function tn(e,t){var n=t.toJSON(),r=n.children;delete n.children;var o=e.taskCenter.send("dom",{action:"createBody"},[n]);return r&&r.forEach(function(t){o=e.taskCenter.send("dom",{action:"addElement"},[n.ref,t,-1])}),o}function nn(e,t){t.role="body",t.depth=1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function rn(e,t){e.parentNode=t,t.docId&&(e.docId=t.docId,e.ownerDocument=t.ownerDocument,e.ownerDocument.nodeMap[e.nodeId]=e,e.depth=t.depth+1),e.children.forEach(function(t){rn(t,e)})}function on(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function an(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSiblin
 g}}function sn(e,t,n,r){n<0&&(n=0);var o=t[n-1],i=t[n];return t.splice(n,0,e),
+(this.nativeLog||function(e){console.log(e)})("START JS FRAMEWORK 0.21.4, Build 2017-07-26 11:48."),this.getJSFMVersion=function(){return"0.21.4"};var global=this,process={env:{}},setTimeout=global.setTimeout;!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(0,function(){"use strict";function e(e){Jn.Document=e.Document,Jn.Element=e.Element,Jn.Comment=e.Comment,Jn.sendTasks=e.sendTasks}function t(e){}function n(e){}function r(e){}function o(e,t,n){}function i(e,t,n,r,o){var i=new Jn.Document(e,n.bundleUrl),a={},s=0;i.addCallback=function(e){return s++,a[s]=e,s},i.handleCallback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},Hn[e]=i;var u=Object.assign({Document:Jn.Document,Element:Jn.Element,Comment:Jn.Comment,sendTasks:Jn.sendTasks,id:e,options:n,data:r,document:i},o),c=[],l=[];for(var f in u)c.push(f),l.push(u[f]);return c.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(c)))).apply
 (void 0,l)}function a(e,t){}function s(e){delete Hn[e]}function u(e){return Hn[e].body.toJSON()}function c(e,t){var n={fireEvent:function(e,t,n,r,o){var i=Hn[e],a=i.getRef(t);return i.fireEvent(a,n,r,o)},callback:function(e,t,n,r){return Hn[e].handleCallback(t,n,r)}};if(Hn[e]&&Array.isArray(t)){var r=[];return t.forEach(function(t){var o=n[t.method],i=[].concat(t.args);"function"==typeof o&&(i.unshift(e),r.push(o.apply(void 0,i)))}),r}}function l(e){return e&&e.__esModule?e.default:e}function f(e,t){return t={exports:{}},e(t,t.exports),t.exports}function d(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm}function p(e){var t=this._ids[e];if(t)return t.el}function h(e){var t=this._ids[e];if(t)return t.vm}function v(e){return this._app.differ.then(function(){e()})}function m(e,t){console.warn("[JS Framework] Vm#$scrollTo is deprecated, please use \"require('@weex-module/dom').scrollTo(el, options)\" instead");var n=this
 .$el(e);if(n){this._app.requireModule("dom").scrollToElement(n.ref,{offset:t})}}function y(e,t,n){var r=this,o=this.$el(e);if(o&&t&&t.styles){this._app.requireModule("animation").transition(o.ref,t,function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];r._setStyle(o,t.styles),n&&n.apply(void 0,e)})}}function _(e){var t=this._app.options;return"function"==typeof e&&(console.warn("[JS Framework] the callback of Vm#$getConfig(callback) is deprecated, this api now can directly RETURN config info."),e(t)),t}function g(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" instead"),this._app.requireModule("stream").sendHttp(e,t)}function b(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" instead"),this._app.requireModule("event").openURL(e)}function w(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require(
 '@weex-module/pageInfo').setTitle(title)\" instead"),this._app.requireModule("pageInfo").setTitle(e)}function O(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.warn("[JS Framework] Vm#$call is deprecated, please use \"require('@weex-module/moduleName')\" instead");var o=this._app.requireModule(e);o&&o[t]&&o[t].apply(o,n)}function E(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];if("function"==typeof Object.assign)Object.assign.apply(Object,[e].concat(t));else{var r=t.shift();for(var o in r)e[o]=r[o];t.length&&E.apply(void 0,[e].concat(t))}return e}function x(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function S(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function C(e,t){return wr.call(e,t)}function k(e,t){return function(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}}function j(e){return null!==e&&"object"==typeof e}function A(e){retur
 n Or.call(e)===Er}function I(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function T(){return"object"==typeof nativeSet?nativeSet.create():new zn}function N(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}function P(e){return e.replace(Sr,"").replace(Cr,"")}function M(e){return e.replace(jr,"")}function $(){this.id=Pr++,this.subs=[]}function R(e){$.target&&Mr.push($.target),$.target=e}function D(){$.target=Mr.pop()}function F(){$.target=null,Mr=[]}function L(e,t,n,r){r&&E(this,r);var o="function"==typeof t;this.vm=e,e._watchers.push(this),this.expression=t,this.cb=n,this.id=++$r,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=T(),this.newDepIds=T(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}function U(e,t){var n,r,o,i;if(t||(t=Rr,t.clear()),o=Array.isArray(e),i=j(e),o||i){if(e.__ob__){var a=e.__ob__.dep.id;if(t.has(a))return;t.add(a)}if(o)for(n=e.length;n--;)U(e[n
 ],t);else if(i)for(r=Object.keys(e),n=r.length;n--;)U(e[r[n]],t)}}function B(e){if(this.value=e,this.dep=new $,x(e,"__ob__",this),Array.isArray(e)){(xr?V:q)(e,Fr,Lr),this.observeArray(e)}else this.walk(e)}function V(e,t){e.__proto__=t}function q(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];x(e,i,t[i])}}function W(e,t){if(j(e)){var n;return C(e,"__ob__")&&e.__ob__ instanceof B?n=e.__ob__:(Array.isArray(e)||A(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new B(e)),n&&t&&n.addVm(t),n}}function z(e,t,n){var r=new $,o=Object.getOwnPropertyDescriptor(e,t);if(!o||!1!==o.configurable){var i=o&&o.get,a=o&&o.set,s=W(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=i?i.call(e):n;if($.target&&(r.depend(),s&&s.dep.depend(),Array.isArray(t)))for(var o=void 0,a=0,u=t.length;a<u;a++)(o=t[a])&&o.__ob__&&o.__ob__.dep.depend();return t},set:function(t){t!==(i?i.call(e):n)&&(a?a.call(e,t):n=t,s=W(t),r.notify())}})}}function J(e,t,n){if(Array.isArray(e))return e.splice(
 t,1,n);if(C(e,t))return void(e[t]=n);if(e._isVue)return void J(e._data,t,n);var r=e.__ob__;if(!r)return void(e[t]=n);if(r.convert(t,n),r.dep.notify(),r.vms)for(var o=r.vms.length;o--;){var i=r.vms[o];G(i,t)}return n}function H(e,t){if(C(e,t)){delete e[t];var n=e.__ob__;if(!n)return void(e._isVue&&delete e._data[t]);if(n.dep.notify(),n.vms)for(var r=n.vms.length;r--;){var o=n.vms[r];X(o,t)}}}function G(e,t){(Ur.indexOf(t)>-1||!I(t))&&Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function X(e,t){I(t)||delete e[t]}function K(e){e._watchers=[],Z(e),Y(e),te(e)}function Z(e){var t=e._data;A(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)G(e,n[r]);W(t,e)}function Q(){}function Y(e){var t=e._computed;if(t)for(var n in t){var r=t[n],o={enumerable:!0,configurable:!0};"function"==typeof r?(o.get=ee(r,e),o.set=Q):(o.get=r.get?!1!==r.cache?ee(r.get,e):k(r.get,e):Q,o.set=r.set?k(r.set,e):Q),Object.defineProperty(e,n
 ,o)}}function ee(e,t){var n=new L(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),$.target&&n.depend(),n.value}}function te(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}function ne(e){var t=e.type,n=Vr[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===N(e[r])&&"object"===N(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])}function re(e,t,n){ce(e,t,n.id,e),le(e,t,n.attr),de(e,t,n.classList),pe(e,t,n.style),ve(e,t,n.events)}function oe(e,t,n,r){t=t||{},n=n||{};var o=t._options||{},i=o.props;Array.isArray(i)&&(i=i.reduce(function(e,t){return e[t]=!0,e},{})),ae(r,i,e,t),ae(n.attr,i,e,t)}function ie(e,t,n,r){void 0===r&&(r={}),ue(n.classList,e,t),se(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function ae(e,t,n,r){if(e){for(var o in e)!function(o){if(!t||t[o]){var i=e[o];if("function"==typeof i){var a=_e(n,i,function(e){r[o]=e});r[o]=a}else r[o]=i}}(o)}}function se(e,t,n){for(var r in e)!function(r){
 var o=e[r];if("function"==typeof o){var i=_e(t,o,function(e){n._rootEl&&n._rootEl.setStyle(r,e)});n._rootEl.setStyle(r,i)}else n._rootEl&&n._rootEl.setStyle(r,o)}(r)}function ue(e,t,n){function r(e,t){"array"===N(e)&&e.unshift(t)}var o=t._options&&t._options.style||{};if(n._rootEl){var i="@originalRootEl";if(o[i]=n._rootEl.classStyle,"function"==typeof e){var a=_e(t,e,function(e){r(e,i),fe(n._rootEl,o,e)});r(a,i),fe(n._rootEl,o,a)}else null!=e&&(r(e,i),fe(n._rootEl,o,e))}}function ce(e,t,n,r){var o=Object.create(null);if(Object.defineProperties(o,{vm:{value:r,writable:!1,configurable:!1},el:{get:function(){return t||r._rootEl},configurable:!1}}),"function"==typeof n){var i=n;n=i.call(e),(n||0===n)&&(e._ids[n]=o),_e(e,i,function(t){t&&(e._ids[t]=o)})}else n&&"string"==typeof n&&(e._ids[n]=o)}function le(e,t,n){me(e,t,"attr",n)}function fe(e,t,n){for(var r={},o=n.length,i=0;i<o;i++)!function(e){var o=t[n[e]];o&&Object.keys(o).forEach(function(e){r[e]=o[e]})}(i);e.setClassStyle(r)}func
 tion de(e,t,n){if("function"==typeof n||Array.isArray(n)){if(Array.isArray(n)&&!n.length)return void t.setClassStyle({});var r=e._options&&e._options.style||{};if("function"==typeof n){var o=_e(e,n,function(e){fe(t,r,e)});fe(t,r,o)}else fe(t,r,n)}}function pe(e,t,n){me(e,t,"style",n)}function he(e,t,n,r){t.addEvent(n,k(r,e))}function ve(e,t,n){if(n)for(var r=Object.keys(n),o=r.length;o--;){var i=r[o],a=n[i];"string"==typeof a&&((a=e[a])||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),he(e,t,i,a)}}function me(e,t,n,r){if(r)for(var o=Object.keys(r),i=o.length;i--;){var a=o[i],s=r[a];"function"==typeof s?ye(e,t,n,a,s):t[qr[n]](a,s)}}function ye(e,t,n,r,o){var i=qr[n],a=_e(e,o,function(n){function o(){t[i](r,n)}var a=e&&e._app&&e._app.differ;a?a.append("element",t.depth,t.ref,o):o()});t[i](r,a)}function _e(e,t,n){return e._static?t.call(e,e):new L(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)}).value}function ge(e,t){return e._app.doc.createBody(t)}functio
 n be(e,t){return e._app.doc.createElement(t)}function we(e,t){var n=Oe(e),r=Ee(e),o=Wr++;if(t.element){var i=t.updateMark;i?(i.element&&(i=i.end),t.element.insertAfter(r,i),t.element.insertAfter(n,i),t.updateMark=r):(t.element.insertBefore(n,t.end),t.element.insertBefore(r,t.end)),t=t.element}else t.appendChild(n),t.appendChild(r);return{start:n,end:r,element:t,blockId:o}}function Oe(e){return e._app.doc.createComment("start")}function Ee(e){return e._app.doc.createComment("end")}function xe(e,t,n){if(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=Se(e,t,o);return n.updateMark=t.element?t.end:t,i}if(!t.element)return n.element.insertBefore(t,r);n.element.insertBefore(t.start,r),n.element.insertBefore(t.end,r)}else{if(!t.element)return n.appendChild(t);n.appendChild(t.start),n.appendChild(t.end)}}function Se(e,t,n){return t.element?ke(t,n):Ce(t,n)}function Ce(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}function ke(e,t){var n=t.parentNode;i
 f(n){for(var r,o=e.start,i=[o];o&&o!==e.end;)o=o.nextSibling,i.push(o);var a=t;return i.every(function(e){return r=n.insertAfter(e,a),a=e,-1!==r}),r}}function je(e,t,n){void 0===n&&(n=!1),t.element?Ie(t,n):Ae(t),t._vm&&t._vm.$emit("hook:destroyed")}function Ae(e){var t=e.parentNode;t&&t.removeChild(e)}function Ie(e,t){void 0===t&&(t=!1);for(var n=[],r=e.start.nextSibling;r&&r!==e.end;)n.push(r),r=r.nextSibling;t||Ae(e.start),n.forEach(function(e){Ae(e)}),t||Ae(e.end)}function Te(e){var t=e._options||{},n=t.template||{};t.replace?n.children&&1===n.children.length?Ne(e,n.children[0],e._parentEl):Ne(e,n.children,e._parentEl):Ne(e,n,e._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+e._type+")"),e.$emit("hook:ready"),e._ready=!0}function Ne(e,t,n,r){if(-1!==(e._app||{}).lastSignal){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),Pe(t))return void Le(e,t,n,r);if(r=r||{},Me(t))return console.debug('[JS Framework] compile "content" block by',t),void(e._content=
 we(e,n));if($e(t,r))return console.debug('[JS Framework] compile "repeat" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `repeat` directive!"):Ue(e,t,n));if(Re(t,r))return console.debug('[JS Framework] compile "if" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `if` directive!"):Be(e,t,n,r));var o=r.type||t.type;if(De(o,r))return void Ve(e,t,n,o,r);var i=o,a=Fe(e,t,i);if(a)return console.debug("[JS Framework] compile composed component by",t),void qe(e,a,t,n,i,r);console.debug("[JS Framework] compile native component by",t),We(e,t,n,i)}}function Pe(e){return Array.isArray(e)}function Me(e){return"content"===e.type||"slot"===e.type}function $e(e,t){return!t.hasOwnProperty("repeat")&&e.repeat}function Re(e,t){return!t.hasOwnProperty("shown")&&e.shown}function De(e,t){return"function"==typeof e&&!t.hasOwnProperty("type")}function Fe(e,t,n){var r;return e._app&&e._app.customComponentM
 ap&&(r=e._app.customComponentMap[n]),e._options&&e._options.components&&(r=e._options.components[n]),t.component&&(r=r||{}),r}function Le(e,t,n,r){var o=we(e,n);t.forEach(function(t){Ne(e,t,o,r)})}function Ue(e,t,n){var r=t.repeat,o="function"==typeof r,i=r.getter||r.expression||r;"function"!=typeof i&&(i=function(){return[]});var a=r.key||"$index",s=r.value||"$value",u=r.trackBy||t.trackBy||t.attr&&t.attr.trackBy,c=we(e,n);c.children=[],c.data=[],c.vms=[],Je(e,t,c,{getter:i,key:a,value:s,trackBy:u,oldStyle:o})}function Be(e,t,n,r){var o={shown:!0},i=we(e,n);n.element&&n.children&&n.children.push(i),r.repeat&&(o.repeat=r.repeat),He(e,t,i,o)}function Ve(e,t,n,r,o){var i=r.call(e),a=E({type:i},o),s=we(e,n);n.element&&n.children&&n.children.push(s),_e(e,r,function(n){var r=E({type:n},o);je(e,s,!0),Ne(e,t,s,r)}),Ne(e,t,s,a)}function qe(e,t,n,r,o,i){var a=e.constructor,s=new a(o,t,e,r,void 0,{"hook:init":function(){e._static&&(this._static=e._static),ce(e,null,n.id,this),this._externalBi
 nding={parent:e,template:n}},"hook:created":function(){oe(e,this,n,i.repeat)},"hook:ready":function(){this._content&&ze(e,n,this._content)}});ie(e,s,n,r)}function We(e,t,n,r){ne(t);var o;if("_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),o=ge(e,r)):(console.debug("[JS Framework] compile to create element for "+r),o=be(e,r)),!e._rootEl){e._rootEl=o;var i=e._externalBinding||{},a=i.template,s=i.parent;if(a&&a.events&&s&&o)for(var u in a.events){var c=s[a.events[u]];c&&o.addEvent(u,k(c,s))}}re(e,o,t),t.attr&&t.attr.append&&(t.append=t.attr.append),t.append&&(o.attr=o.attr||{},o.attr.append=t.append);var l="tree"===t.append,f=e._app||{};-1===f.lastSignal||l||(console.debug("[JS Framework] compile to append single node for",o),f.lastSignal=xe(e,o,n)),-1!==f.lastSignal&&ze(e,t,o),-1!==f.lastSignal&&l&&(console.debug("[JS Framework] compile to append whole tree for",o),f.lastSignal=xe(e,o,n))}function ze(e,t,n){var r=e._app||{},o=t.children;o&&o.le
 ngth&&o.every(function(t){return Ne(e,t,n),-1!==r.lastSignal})}function Je(e,t,n,r){function o(e,r,o){var a;c?(a=e,j(e)?(a[l]=r,a.hasOwnProperty("INDEX")||Object.defineProperty(a,"INDEX",{value:function(){console.warn('[JS Framework] "INDEX" in repeat is deprecated, please use "$index" instead')}})):(console.warn("[JS Framework] Each list item must be an object in old-style repeat, please use `repeat={{v in list}}` instead."),a={},a[l]=r,a[f]=e)):(a={},a[l]=r,a[f]=e);var s=Xe(o,a);i.push(s),Ne(s,t,n,{repeat:e})}var i=n.vms,a=n.children,s=r.getter,u=r.trackBy,c=r.oldStyle,l=r.key,f=r.value,d=Ge(e,n,s,"repeat",function(t){if(console.debug('[JS Framework] the "repeat" item has changed',t),n&&t){var r=a.slice(),s=i.slice(),d=n.data.slice(),p={},h={};t.forEach(function(e,t){var n=u?e[u]:c?e[l]:t;null!=n&&""!==n&&(p[n]=e)});var v=[];d.forEach(function(t,n){var o=u?t[u]:c?t[l]:n;p.hasOwnProperty(o)?(h[o]={item:t,index:n,key:o,target:r[n],vm:s[n]},v.push(t)):je(e,r[n])}),a.length=0,i.length
 =0,n.data=t.slice(),n.updateMark=n.start,t.forEach(function(t,r){var s=u?t[u]:c?t[l]:r,d=h[s];d?(d.item===v[0]?v.shift():(v.$remove(d.item),Se(e,d.target,n.updateMark,!0)),a.push(d.target),i.push(d.vm),c?d.vm=t:d.vm[f]=t,d.vm[l]=r,n.updateMark=d.target):o(t,r,e)}),delete n.updateMark}});n.data=d.slice(0),d.forEach(function(t,n){o(t,n,e)})}function He(e,t,n,r){var o=Ge(e,n,t.shown,"shown",function(o){console.debug('[JS Framework] the "if" item was changed',o),n&&!!n.display!=!!o&&(n.display=!!o,o?Ne(e,t,n,r):je(e,n,!0))});n.display=!!o,o&&Ne(e,t,n,r)}function Ge(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return _e(e,n,function(e){a.latestValue=e,i&&!a.recorded&&i.append(r,s,t.blockId,function(){var e=a.latestValue;o(e),a.recorded=!1,a.latestValue=void 0}),a.recorded=!0})}function Xe(e,t){var n=Object.create(e);return n._data=t,Z(n),Y(n),n._realParent=e,e._static&&(n._static=e._static),n}function Ke(e,t){if(t instanceof Ke)return t;this.timestamp=Date.now(
 ),this.detail=t,this.type=e;var n=!1;this.stop=function(){n=!0},this.hasStopped=function(){return n}}function Ze(e,t){var n=this,r=this._vmEvents,o=r[e];if(o){var i=new Ke(e,t);o.forEach(function(e){e.call(n,i)})}}function Qe(e,t){var n=new Ke(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Ye(e,t){var n=new Ke(e,t);this.$emit(e,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.forEach(function(t){t.$broadcast(e,n)})}function et(e,t){if(e&&"function"==typeof t){var n=this._vmEvents,r=n[e]||[];r.push(t),n[e]=r,"hook:ready"===e&&this._ready&&this.$emit("hook:ready")}}function tt(e,t){if(e){var n=this._vmEvents;if(!t)return void delete n[e];var r=n[e];r&&r.$remove(t)}}function nt(e,t){var n=e._options||{},r=n.events||{};for(var o in r)e.$on(o,r[o]);for(var i in t)e.$on(i,t[i]);zr.forEach(function(t){e.$on("hook:"+t,n[t])})}function rt(e,t,n,r,o,i){n=n||{},this._parent=n._realParent?n._realParent:n,this._app=n._app|
 |{},n._childrenVms&&n._childrenVms.push(this),!t&&this._app.customComponentMap&&(t=this._app.customComponentMap[e]),t=t||{};var a=t.data||{};this._options=t,this._methods=t.methods||{},this._computed=t.computed||{},this._css=t.style||{},this._ids={},this._vmEvents={},this._childrenVms=[],this._type=e,nt(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._type+")"),this.$emit("hook:init"),this._inited=!0,this._data="function"==typeof a?a():a,o&&E(this._data,o),K(this),console.debug('[JS Framework] "created" lifecycle in Vm('+this._type+")"),this.$emit("hook:created"),this._created=!0,t.methods&&t.methods.ready&&(console.warn('"exports.methods.ready" is deprecated, please use "exports.created" instead'),t.methods.ready.call(this)),this._app.doc&&(this._parentEl=r||this._app.doc.documentElement,Te(this))}function ot(e,t){for(var n in e)!function(n){var r=Jr[n];r||(r={},Jr[n]=r),e[n].forEach(function(e){"string"==typeof e&&(e={name:e}),r[e.name]&&!t||(r[e.name]=e)})}(n)
 }function it(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}function at(e,t){var n=Jr[t],r={};for(var o in n)!function(n){Object.defineProperty(r,n,{configurable:!0,enumerable:!0,get:function(){return function(){for(var r=[],o=arguments.length;o--;)r[o]=arguments[o];return e.callTasks({module:t,method:n,args:r})}},set:function(r){if("function"==typeof r)return e.callTasks({module:t,method:n,args:[r]})}})}(o);return r}function st(e,t){return e.customComponentMap[t]}function ut(e,t,n){var r=e.customComponentMap;if(r[t])return void console.error("[JS Framework] define a component("+t+") that already exists");r[t]=n}function ct(e){if(Hr.valid(e))return e;e="string"==typeof e?e:"";for(var t=e.split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function lt(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=e.toLowerCase();return r.errorMessage=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched cri
 teria "+n}(e,t,n),o.indexOf("osversion")>=0?r.code=1001:o.indexOf("appversion")>=0?r.code=1002:o.indexOf("weexversion")>=0?r.code=1003:o.indexOf("devicemodel")>=0&&(r.code=1004),r}function ft(e,t){t=t||global.WXEnvironment,t=A(t)?t:{};var n={isDowngrade:!1};if("function"===N(e)){var r=e.call(this,t,{semver:Hr,normalizeVersion:ct});r=!!r,n=r?lt("custom","","custom params"):n}else{e=A(e)?e:{};var o=t.platform||"unknow",i=o.toLowerCase(),a=e[i]||{};for(var s in t){var u=s,c=u.toLowerCase(),l=t[s],f=c.indexOf("version")>=0,d=c.indexOf("devicemodel")>=0,p=a[s];if(p&&f){var h=ct(p),v=ct(t[s]);if(Hr.satisfies(v,h)){n=lt(u,l,p);break}}else if(d){var m="array"===N(p)?p:[p];if(m.indexOf(l)>=0){n=lt(u,l,p);break}}}}return n}function dt(e,t){if(void 0===t&&(t={}),e&&e.callTasks)return e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}function pt(e,t,n,r){console.debug("[JS Framework] bootstrap for "+t);var o;if(Ar(t))o=P(t);else{if(!Nr(t))return new Error("Wrong component name: "+t);
 if(o=M(t),!st(e,o))return new Error("It's not a component: "+t)}if(n=A(n)?n:{},"string"==typeof n.transformerVersion&&"string"==typeof global.transformerVersion&&!Hr.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);var i=ft(n.downgrade);if(i.isDowngrade)return e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]}]),new Error("Downgrade["+i.code+"]: "+i.errorMessage);n.viewport&&dt(e,n.viewport),e.vm=new rt(o,null,{_app:e},null,r)}function ht(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),ut(e,t,n)}function vt(e,t){console.debug("[JS Framework] Refresh with",t,"in instance["+e.id+"]");var n=e.vm;return n&&t?("function"==typeof n.refreshData?n.refreshData(t):E(n,t),e.differ.flush(),void e.doc.taskCenter.send("dom",{action:"refreshFinish"},[])):new Error('invalid data "'+t+'"')}f
 unction mt(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&yt(e.vm),e.id="",e.options=null,e.blocks=null,e.vm=null,e.doc.taskCenter.destroyCallback(),e.doc.destroy(),e.doc=null,e.customComponentMap=null,e.commonModules=null}function yt(e){if(delete e._app,delete e._computed,delete e._css,delete e._data,delete e._ids,delete e._methods,delete e._options,delete e._parent,delete e._parentEl,delete e._rootEl,e._watchers){for(var t=e._watchers.length;t--;)e._watchers[t].teardown();delete e._watchers}if(e._childrenVms){for(var n=e._childrenVms.length;n--;)yt(e._childrenVms[n]);delete e._childrenVms}console.debug('[JS Framework] "destroyed" lifecycle in Vm('+e._type+")"),e.$emit("hook:destroyed"),delete e._type,delete e._vmEvents}function _t(e){var t=e.doc||{},n=t.body||{};return n.toJSON?n.toJSON():{}}function gt(e,t,n,r,o){if(console.debug('[JS Framework] Fire a "'+n+'" event on an element('+t+") in instance("+e.id+")"),Array.isArray(t))return void t.some(function(t
 ){return!1!==gt(e,t,n,r)});var i=e.doc.getRef(t);if(i){var a=e.doc.fireEvent(i,n,r,o);return e.differ.flush(),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),a}return new Error('invalid element reference "'+t+'"')}function bt(e,t,n,r){console.debug("[JS Framework] Invoke a callback("+t+") with",n,"in instance("+e.id+")");var o=e.doc.taskCenter.callback(t,n,r);return wt(e),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),o}function wt(e){e.differ.flush()}function Ot(e,t){var n;return"array"!==N(t)&&(t=[t]),t.forEach(function(t){n=e.doc.taskCenter.send("module",{module:t.module,method:t.method},t.args)}),n}function Et(e,t,n,r){console.debug("[JS Framework] Intialize an instance with:\n",n);var o,i=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return Gr.apply(void 0,[e].concat(t))},a=function(t,r,i){o=pt(e,t,r,i||n),wt(e),e.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+e.id+")")},s=rt,u=function(){for(var t=[
 ],n=arguments.length;n--;)t[n]=arguments[n];return ht.apply(void 0,[e].concat(t))},c=function(t,n){o=pt(e,t,{},n)},l=function(t){return function(n){o=pt(e,t,{},n)}},f=e.doc,d=function(t){return e.requireModule(P(t))},p={config:e.options,define:i,bootstrap:a,requireModule:d,document:f,Vm:s};Object.freeze(p);var h;"function"==typeof t?h=t.toString().substr(12):t&&(h=t.toString()),h='(function(global){\n\n"use strict";\n\n '+h+" \n\n})(Object.create(this))";var v=global.WXEnvironment,m={};if(v&&"Web"!==v.platform){var y=e.requireModule("timer");Object.assign(m,{setTimeout:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setTimeout(r,t[1]),e.doc.taskCenter.callbackManager.lastCallbackId.toString()},setInterval:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setInterval(r,t[1]),e.doc.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:f
 unction(e){y.clearTimeout(e)},clearInterval:function(e){y.clearInterval(e)}})}var _=Object.assign({define:i,require:l,bootstrap:a,register:u,render:c,__weex_define__:i,__weex_bootstrap__:a,__weex_document__:f,__weex_require__:d,__weex_viewmodel__:s,weex:p},m,r);return St(_,h)||xt(_,h),o}function xt(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);return n.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(n)))).apply(void 0,r)}function St(e,t){if("function"!=typeof compileAndRunBundle)return!1;var n=void 0,r=!1,o="(function (",i=[],a=[];for(var s in e)i.push(s),a.push(e[s]);for(var u=0;u<i.length-1;++u)o+=i[u],o+=",";o+=i[i.length-1],o+=") {",o+=t,o+="} )";try{var c=e.weex||{},l=c.config||{};n=compileAndRunBundle(o,l.bundleUrl,l.bundleDigest,l.codeCachePath),n&&"function"==typeof n&&(n.apply(void 0,a),r=!0)}catch(e){console.error(e)}return r}function Ct(e,t){var n=e[t];for(var r in n)n[r]()}function kt(e,t){var n=e[t];for(var r in n){n[r].forEach(function(e){e
 ()})}}function jt(e,t){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},this.doc=new Br.Document(e,this.options.bundleUrl,null,Br.Listener),this.differ=new Xr(e)}function At(e,t,n,r,o){var i=o||{},a=i.services;F();var s=Kr[e];n=n||{};var u;return s?u=new Error('invalid instance id "'+e+'"'):(s=new jt(e,n),Kr[e]=s,u=Et(s,t,r,a)),u}function It(e){Br.Document=e.Document,Br.Element=e.Element,Br.Comment=e.Comment,Br.sendTasks=e.sendTasks,Br.Listener=e.Listener}function Tt(e,t){var n=Kr[e];return n?vt(n,t):new Error('invalid instance id "'+e+'"')}function Nt(e){"function"==typeof markupState&&markupState(),F();var t=Kr[e];if(!t)return new Error('invalid instance id "'+e+'"');mt(t),delete Kr[e];var n=Math.round(e);if(n>0){n%18||"function"!=typeof notifyTrimMemory||notifyTrimMemory()}return Kr}function Pt(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?Zr[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(Zr[e.type]=e))})}function
  Mt(e){"object"==typeof e&&ot(e)}function $t(e){"object"==typeof e&&it(rt,e)}function Rt(e,t){if(Kr[e]&&Array.isArray(t)){var n=[];return t.forEach(function(t){var r=Qr[t.method],o=[].concat(t.args);"function"==typeof r&&(o.unshift(e),n.push(r.apply(void 0,o)))}),n}return new Error('invalid instance id "'+e+'" or tasks')}function Dt(e){var t=Kr[e];return t?_t(t):new Error('invalid instance id "'+e+'"')}function Ft(){if(Ut(),global.WXEnvironment&&"Web"!==global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("debug")&&global.nativeLog.apply(global,Vt(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("log")&&global.nativeLog.apply(global,Vt(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("info")&&global.nativeLog.apply(global,Vt(e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt
 ("warn")&&global.nativeLog.apply(global,Vt(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("error")&&global.nativeLog.apply(global,Vt(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,o=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:o},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Bt("error")&&console.__ori__.error.apply(consol
 e,e)}}}function Lt(){$u={},global.console=Ru}function Ut(){Mu.forEach(function(e){var t=Mu.indexOf(e);$u[e]={},Mu.forEach(function(n){Mu.indexOf(n)<=t&&($u[e][n]=!0)})})}function Bt(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return $u[t]&&$u[t][e]}function Vt(e){return e.map(function(e){return e="[object object]"===Object.prototype.toString.call(e).toLowerCase()?JSON.stringify(e):String(e)})}function qt(){if(void 0===setTimeout&&"function"==typeof Fu){var e={},t=0;global.setTimeout=function(n,r){e[++t]=n,Fu(t.toString(),r)},global.setTimeoutCallback=function(t){"function"==typeof e[t]&&(e[t](),delete e[t])}}}function Wt(){global.setTimeout=Du,global.setTimeoutCallback=null}function zt(){Object.freeze(Object),Object.freeze(Array),Jt(),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype),Object.freeze(Boolean.prototype),Ht(),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype)}function Jt(){var e=Object.protot
 ype,t="Object.prototype";Gt(e,"__defineGetter__",t),Gt(e,"__defineSetter__",t),Gt(e,"__lookupGetter__",t),Gt(e,"__lookupSetter__",t),Gt(e,"constructor",t),Gt(e,"hasOwnProperty",t),Gt(e,"isPrototypeOf",t),Gt(e,"propertyIsEnumerable",t),Gt(e,"toLocaleString",t),Gt(e,"toString",t),Gt(e,"valueOf",t),Object.seal(e)}function Ht(){var e=Error.prototype,t="Error.prototype";Gt(e,"name",t),Gt(e,"message",t),Gt(e,"toString",t),Gt(e,"constructor",t),Object.seal(e)}function Gt(e,t,n){if(e.hasOwnProperty(t)){var r=e[t];Object.defineProperty(e,t,{get:function(){return r},set:function(r){if(this===e)throw Error("Cannot assign to read only property "+t+" of "+n);return Object.defineProperty(this,t,{value:r,writable:!0}),r}})}}function Xt(e,t){e&&(Uu[e]=t)}function Kt(e){return Uu[e]}function Zt(e){delete Uu[e]}function Qt(e){var t=Uu[e];return t&&t.taskCenter?t.taskCenter:null}function Yt(){return(Bu++).toString()}function en(e,t,n){var r=e.documentElement;if(!(r.pureChildren.length>0||t.parentNode)
 ){var o=r.children,i=o.indexOf(n);i<0?o.push(t):o.splice(i,0,t),1===t.nodeType?("body"===t.role?(t.docId=e.id,t.ownerDocument=e,t.parentNode=r,rn(t,r)):(t.children.forEach(function(e){e.parentNode=t}),nn(e,t),t.docId=e.id,t.ownerDocument=e,rn(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),tn(e,t)):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function tn(e,t){var n=t.toJSON(),r=n.children;delete n.children;var o=e.taskCenter.send("dom",{action:"createBody"},[n]);return r&&r.forEach(function(t){o=e.taskCenter.send("dom",{action:"addElement"},[n.ref,t,-1])}),o}function nn(e,t){t.role="body",t.depth=1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function rn(e,t){e.parentNode=t,t.docId&&(e.docId=t.docId,e.ownerDocument=t.ownerDocument,e.ownerDocument.nodeMap[e.nodeId]=e,e.depth=t.depth+1),e.children.forEach(function(t){rn(t,e)})}function on(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function an(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSiblin
 g}}function sn(e,t,n,r){n<0&&(n=0);var o=t[n-1],i=t[n];return t.splice(n,0,e),
 r&&(o&&(o.nextSibling=e),e.previousSibling=o,e.nextSibling=i,i&&(i.previousSibling=e)),n}function un(e,t,n,r){var o=t.indexOf(e);if(o<0)return-1;if(r){var i=t[o-1],a=t[o+1];i&&(i.nextSibling=a),a&&(a.previousSibling=i)}t.splice(o,1);var s=n;o<=n&&(s=n-1);var u=t[s-1],c=t[s];return t.splice(s,0,e),r&&(u&&(u.nextSibling=e),e.previousSibling=u,e.nextSibling=c,c&&(c.previousSibling=e)),o===s?-1:n}function cn(e,t,n){var r=t.indexOf(e);if(!(r<0)){if(n){var o=t[r-1],i=t[r+1];o&&(o.nextSibling=i),i&&(i.previousSibling=o)}t.splice(r,1)}}function ln(){this.nodeId=Yt(),this.ref=this.nodeId,this.children=[],this.pureChildren=[],this.parentNode=null,this.nextSibling=null,this.previousSibling=null}function fn(e,t){if(t&&t.length){var n=function(t){Vu.call(this,e,t,!0)};n.prototype=Object.create(Vu.prototype),Object.defineProperty(n.prototype,"constructor",{configurable:!1,enumerable:!1,writable:!1,value:Vu}),t.forEach(function(t){n.prototype[t]=function(){for(var n=[],r=arguments.length;r--;)n[r]
 =arguments[r];var o=Qt(this.docId);if(o)return o.send("component",{ref:this.ref,component:e,method:t},n)}}),qu[e]=n}}function dn(e,t,n){void 0===e&&(e=Wu);var r=qu[e];if(r&&!n)return new r(t);t=t||{},this.nodeType=1,this.nodeId=Yt(),this.ref=this.nodeId,this.type=e,this.attr=t.attr||{},this.style=t.style||{},this.classStyle=t.classStyle||{},this.event={},this.children=[],this.pureChildren=[]}function pn(e,t){Kt(e).nodeMap[t.nodeId]=t}function hn(){var e={createFinish:global.callCreateFinish,updateFinish:global.callUpdateFinish,refreshFinish:global.callRefreshFinish,createBody:global.callCreateBody,addElement:global.callAddElement,removeElement:global.callRemoveElement,moveElement:global.callMoveElement,updateAttrs:global.callUpdateAttrs,updateStyle:global.callUpdateStyle,addEvent:global.callAddEvent,removeEvent:global.callRemoveEvent},t=Hu.prototype;for(var n in e)!function(n){var r=e[n];t[n]=r?function(e,t){return r.apply(void 0,[e].concat(t))}:function(e,t){return Ju(e,[{module:"d
 om",method:n,args:t}],"-1")}}(n);t.componentHandler=global.callNativeComponent||function(e,t,n,r,o){return Ju(e,[{component:o.component,ref:t,method:n,args:r}])},t.moduleHandler=global.callNativeModule||function(e,t,n,r){return Ju(e,[{module:t,method:n,args:r}])}}function vn(e,t){yn(e)?console.warn('Service "'+e+'" has been registered already!'):(t=Object.assign({},t),Ku.push({name:e,options:t}))}function mn(e){Ku.some(function(t,n){if(t.name===e)return Ku.splice(n,1),!0})}function yn(e){return _n(e)>=0}function _n(e){return Ku.map(function(e){return e.name}).indexOf(e)}function gn(e){var t,n=Zu.exec(e);if(n)try{t=JSON.parse(n[1])}catch(e){}return t}function bn(e,t,n){var r=Object.create(null);return r.service=Object.create(null),Ku.forEach(function(o){var i=(o.name,o.options),a=i.create;if(a){var s=a(e,t,n);Object.assign(r.service,s),Object.assign(r,s.instance)}}),delete r.service.instance,Object.freeze(r.service),r}function wn(e,t,n,r){var o=Qu[e];if(!o){o=gn(t)||{},Gu[o.framework
 ]||(o.framework="Weex"),n=JSON.parse(JSON.stringify(n||{})),n.bundleVersion=o.version,n.env=JSON.parse(JSON.stringify(global.WXEnvironment||{})),console.debug("[JS Framework] create an "+o.framework+"@"+n.bundleVersion+" instance from "+n.bundleVersion);var i={info:o,config:n,created:Date.now(),framework:o.framework};return i.services=bn(e,i,Xu),Qu[e]=i,Gu[o.framework].createInstance(e,t,n,r,i)}return new Error('invalid instance id "'+e+'"')}function On(e){Yu[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];"registerComponents"===e&&En(t[0]);for(var r in Gu){var o=Gu[r];o&&o[e]&&o[e].apply(o,t)}}}function En(e){Array.isArray(e)&&e.forEach(function(e){e&&e.type&&e.methods&&fn(e.type,e.methods)})}function xn(e){Yu[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=Qu[r];if(o&&Gu[o.framework]){var i=(a=Gu[o.framework])[e].apply(a,t);return"refreshInstance"===e?Ku.forEach(function(e){var t=e.options.refresh;t&&t(r,{info:o,runtime:Xu})})
 :"destroyInstance"===e&&(Ku.forEach(function(e){var t=e.options.destroy;t&&t(r,{info:o,runtime:Xu})}),delete Qu[r]),i}return new Error('invalid instance id "'+r+'"');var a}}function Sn(e,t){Yu[t]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=Qu[r];return o&&Gu[o.framework]?(i=Gu[o.framework])[e].apply(i,t):new Error('invalid instance id "'+r+'"');var i}}function Cn(e){Xu=e||{},Gu=Xu.frameworks||{},hn();for(var t in Gu){Gu[t].init(e)}return["registerComponents","registerModules","registerMethods"].forEach(On),["destroyInstance","refreshInstance","receiveTasks","getRoot"].forEach(xn),Sn("receiveTasks","callJS"),Yu}function kn(e){this.nodeType=8,this.nodeId=Yt(),this.ref=this.nodeId,this.type="comment",this.value=e,this.children=[],this.pureChildren=[]}function jn(e,t){this.id=e,this.batched=!1,this.updates=[],"function"==typeof t?Object.defineProperty(this,"handler",{configurable:!0,enumerable:!0,writable:!0,value:t}):console.error("[JS Runtime] invali
 d parameter, handler must be a function")}function An(e,t){return void 0===t&&(t=[]),{module:"dom",method:e,args:t}}function In(e,t){var n=t||global.callNative;return"function"!=typeof n&&console.error("[JS Runtime] no default handler"),function(t){Array.isArray(t)||(t=[t]);for(var r=0;r<t.length;r++){var o=Nn(e,t[r],n);if(-1===o)return o}}}function Tn(e,t){return"dom"===e&&ec[t]&&"function"==typeof global[ec[t]]}function Nn(e,t,n){var r=t.module,o=t.method,i=t.args;return Tn(r,o)?global[ec[o]].apply(global,[e].concat(i,["-1"])):n(e,[t],"-1")}function Pn(e,t,n){e=e?e.toString():"",this.id=e,this.URL=t,Xt(e,this),this.nodeMap={};var r=Pn.Listener||jn;this.listener=new r(e,n||In(e,Pn.handler)),this.taskCenter=new Hu(e,n?function(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return n.apply(void 0,t)}:Pn.handler),this.createDocumentElement()}function Mn(e,t){var n=t.attrs||{};for(var r in n)e.setAttr(r,n[r],!0);var o=t.style||{};for(var i in o)e.setStyle(i,o[i],!0)}fu
 nction $n(){zt(),Object.freeze(tc.Element),Object.freeze(tc.Comment),Object.freeze(tc.Listener),Object.freeze(tc.Document.prototype),Object.freeze(tc.Element.prototype),Object.freeze(tc.Comment.prototype),Object.freeze(tc.Listener.prototype)}function Rn(e,t){void 0===t&&(t={}),this.type=e||"message",this.data=t.data||null,this.origin=t.origin||"",this.source=t.source||null,this.ports=t.ports||[],this.target=null,this.timeStamp=Date.now()}function Dn(){}function Fn(e,t,n,r){console.warn("[Upgrade Warning] $userTrack will be removed in the next version!"),console.warn("[JS Framework] Vm#$userTrack is deprecated, please use \"require('@weex-module/userTrack').commit(type, name, comName, param)\" instead"),this._app.requireModule("userTrack").commit(e,t,n,r)}function Ln(e,t){if(console.warn("[Upgrade Warning] $sendMtop will be removed in the next version!"),console.warn("[JS Framework] Vm#$sendMtop is deprecated, please use \"require('@weex-module/stream').sendMtop(params, callback)\" i
 nstead"),"undefined"==typeof window){this._app.requireModule("windvane").call({class:"MtopWVPlugin",method:"send",data:e},t)}else{this._app.requireModule("stream").sendMtop(e,t)}}function Un(e,t){console.warn("[Upgrade Warning] $callWindvane will be removed in the next version!"),console.warn("[JS Framework] Vm#$callWindvane is deprecated, please use \"require('@weex-module/windvane').call(params, callback)\" instead"),this._app.requireModule("windvane").call(e,t)}function Bn(e,t){console.warn("[Upgrade Warning] $setSpm will be removed in the next version!"),console.warn("[JS Framework] Vm#$setSpm is deprecated, please use \"require('@weex-module/pageInfo').setSpm(a, b)\" instead"),this._app.requireModule("pageInfo").setSpm(e,t)}function Vn(e){console.warn("[Upgrade Warning] $getUserInfo will be removed in the next version!"),console.warn("[JS Framework] Vm#$getUserInfo is deprecated, please use \"require('@weex-module/user').getUserInfo(callback)\" instead"),this._app.requireModule
 ("user").getUserInfo(e)}function qn(e){console.warn("[Upgrade Warning] $login will be removed in the next version!"),console.warn("[JS Framework] Vm#$login is deprecated, please use \"require('@weex-module/user').login(callback)\" instead"),this._app.requireModule("user").login(e)}function Wn(e){console.warn("[Upgrade Warning] $logout will be removed in the next version!"),console.warn("[JS Framework] Vm#$logout is deprecated, please use \"require('@weex-module/user').logout(callback)\" instead"),this._app.requireModule("user").logout(e)}var zn,Jn={},Hn={},Gn=e,Xn=t,Kn=n,Zn=r,Qn=o,Yn=i,er=a,tr=s,nr=u,rr=c,or={init:Gn,registerComponents:Xn,registerModules:Kn,registerMethods:Zn,prepareInstance:Qn,createInstance:Yn,refreshInstance:er,destroyInstance:tr,getRoot:nr,receiveTasks:rr},ir=Object.freeze({default:or,__moduleExports:or,init:Gn,registerComponents:Xn,registerModules:Kn,registerMethods:Zn,prepareInstance:Qn,createInstance:Yn,refreshInstance:er,destroyInstance:tr,getRoot:nr,receive
 Tasks:rr}),ar="undefined"!=typeof window?window:void 0!==global?global:"undefined"!=typeof self?self:{},sr=function(e,t){function n(e){return void 0===e||null===e}function r(e){return void 0!==e&&null!==e}function o(e){return!0===e}function i(e){return!1===e}function a(e){return"string"==typeof e||"number"==typeof e}function s(e){return null!==e&&"object"==typeof e}function u(e){return"[object Object]"===mn.call(e)}function c(e){return"[object RegExp]"===mn.call(e)}function l(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function d(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}function p(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function h(e,t){return yn.call(e,t)}function v(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}function m(e,t){function
  n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function y(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function _(e,t){for(var n in t)e[n]=t[n];return e}function g(e){for(var t={},n=0;n<e.length;n++)e[n]&&_(t,e[n]);return t}function b(){}function w(e,t){var n=s(e),r=s(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{return JSON.stringify(e)===JSON.stringify(t)}catch(n){return e===t}}function O(e,t){for(var n=0;n<e.length;n++)if(w(e[n],t))return n;return-1}function E(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}function x(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function S(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function C(e){if(!In.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}function k(e,t,n){if(jn.errorHandler)jn.errorHandler.call(null,e,t,n)
 ;else{if(!Pn||"undefined"==typeof console)throw e;console.error(e)}}function j(e){return"function"==typeof e&&/native code/.test(e.toString())}function A(e){Jn.target&&Hn.push(Jn.target),Jn.target=e}function I(){Jn.target=Hn.pop()}function T(e,t){e.__proto__=t}function N(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];S(e,i,t[i])}}function P(e,t){if(s(e)){var n;return h(e,"__ob__")&&e.__ob__ instanceof Qn?n=e.__ob__:Zn.shouldConvert&&!Bn()&&(Array.isArray(e)||u(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Qn(e)),t&&n&&n.vmCount++,n}}function M(e,t,n,r){var o=new Jn,i=Object.getOwnPropertyDescriptor(e,t);if(!i||!1!==i.configurable){var a=i&&i.get,s=i&&i.set,u=P(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=a?a.call(e):n;return Jn.target&&(o.depend(),u&&u.dep.depend(),Array.isArray(t)&&D(t)),t},set:function(t){var r=a?a.call(e):n;t===r||t!==t&&r!==r||(s?s.call(e,t):n=t,u=P(t),o.notify())}})}}function $(e,t,n){if(Array.isArray(e)&&"number"==typeof
  t)return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(h(e,t))return e[t]=n,n;var r=e.__ob__;return e._isVue||r&&r.vmCount?n:r?(M(r.value,t,n),r.dep.notify(),n):(e[t]=n,n)}function R(e,t){if(Array.isArray(e)&&"number"==typeof t)return void e.splice(t,1);var n=e.__ob__;e._isVue||n&&n.vmCount||h(e,t)&&(delete e[t],n&&n.dep.notify())}function D(e){for(var t=void 0,n=0,r=e.length;n<r;n++)t=e[n],t&&t.__ob__&&t.__ob__.dep.depend(),Array.isArray(t)&&D(t)}function F(e,t){if(!t)return e;for(var n,r,o,i=Object.keys(t),a=0;a<i.length;a++)n=i[a],r=e[n],o=t[n],h(e,n)?u(r)&&u(o)&&F(r,o):$(e,n,o);return e}function L(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function U(e,t){var n=Object.create(e||null);return t?_(n,t):n}function B(e){var t=e.props;if(t){var n,r,o,i={};if(Array.isArray(t))for(n=t.length;n--;)"string"==typeof(r=t[n])&&(o=gn(r),i[o]={type:null});else if(u(t))for(var a in t)r=t[a],o=gn(a),i[o]=u(r)?r:{type:r};e.props=i}}function V(e){var t=e.directives;if(t)for(var n i
 n t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}function q(e,t,n){function r(r){var o=Yn[r]||er;u[r]=o(e[r],t[r],n,r)}"function"==typeof t&&(t=t.options),B(t),V(t);var o=t.extends;if(o&&(e=q(e,o,n)),t.mixins)for(var i=0,a=t.mixins.length;i<a;i++)e=q(e,t.mixins[i],n);var s,u={};for(s in e)r(s);for(s in t)h(e,s)||r(s);return u}function W(e,t,n,r){if("string"==typeof n){var o=e[t];if(h(o,n))return o[n];var i=gn(n);if(h(o,i))return o[i];var a=bn(i);if(h(o,a))return o[a];var s=o[n]||o[i]||o[a];return s}}function z(e,t,n,r){var o=t[e],i=!h(n,e),a=n[e];if(G(Boolean,o.type)&&(i&&!h(o,"default")?a=!1:G(String,o.type)||""!==a&&a!==On(e)||(a=!0)),void 0===a){a=J(r,o,e);var s=Zn.shouldConvert;Zn.shouldConvert=!0,P(a),Zn.shouldConvert=s}return a}function J(e,t,n){if(h(t,"default")){var r=t.default;return e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n]?e._props[n]:"function"==typeof r&&"Function"!==H(t.type)?r.call(e):r}}function H(e){var t=e&&e.toS
 tring().match(/^\s*function (\w+)/);return t?t[1]:""}function G(e,t){if(!Array.isArray(t))return H(t)===H(e);for(var n=0,r=t.length;n<r;n++)if(H(t[n])===H(e))return!0;return!1}function X(e){return new tr(void 0,void 0,void 0,String(e))}function K(e){var t=new tr(e.tag,e.data,e.children,e.text,e.elm,e.context,e.componentOptions);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.isCloned=!0,t}function Z(e){for(var t=e.length,n=new Array(t),r=0;r<t;r++)n[r]=K(e[r]);return n}function Q(e){function t(){var e=arguments,n=t.fns;if(!Array.isArray(n))return n.apply(null,arguments);for(var r=0;r<n.length;r++)n[r].apply(null,e)}return t.fns=e,t}function Y(e,t,r,o,i){var a,s,u,c;for(a in e)s=e[a],u=t[a],c=ir(a),n(s)||(n(u)?(n(s.fns)&&(s=e[a]=Q(s)),r(c.name,s,c.once,c.capture,c.passive)):s!==u&&(u.fns=s,e[a]=u));for(a in t)n(e[a])&&(c=ir(a),o(c.name,t[a],c.capture))}function ee(e,t,i){function a(){i.apply(this,arguments),p(s.fns,a)}var s,u=e[t];n(u)?s=Q([a]):r(u.fns)&&
 o(u.merged)?(s=u,s.fns.push(a)):s=Q([u,a]),s.merged=!0,e[t]=s}function te(e,t,o){var i=t.options.props;if(!n(i)){var a={},s=e.attrs,u=e.props;if(r(s)||r(u))for(var c in i){var l=On(c);ne(a,u,c,l,!0)||ne(a,s,c,l,!1)}return a}}function ne(e,t,n,o,i){if(r(t)){if(h(t,n))return e[n]=t[n],i||delete t[n],!0;if(h(t,o))return e[n]=t[o],i||delete t[o],!0}return!1}function re(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}function oe(e){return a(e)?[X(e)]:Array.isArray(e)?ae(e):void 0}function ie(e){return r(e)&&r(e.text)&&i(e.isComment)}function ae(e,t){var i,s,u,c=[];for(i=0;i<e.length;i++)s=e[i],n(s)||"boolean"==typeof s||(u=c[c.length-1],Array.isArray(s)?c.push.apply(c,ae(s,(t||"")+"_"+i)):a(s)?ie(u)?u.text+=String(s):""!==s&&c.push(X(s)):ie(s)&&ie(u)?c[c.length-1]=X(u.text+s.text):(o(e._isVList)&&r(s.tag)&&n(s.key)&&r(t)&&(s.key="__vlist"+t+"_"+i+"__"),c.push(s)));return c}function se(e,t){return s(e)?t.extend(e):e}function ue(e,t,i
 ){if(o(e.error)&&r(e.errorComp))return e.errorComp;if(r(e.resolved))return e.resolved;if(o(e.loading)&&r(e.loadingComp))return e.loadingComp;if(!r(e.contexts)){var a=e.contexts=[i],u=!0,c=function(){for(var e=0,t=a.length;e<t;e++)a[e].$forceUpdate()},l=E(function(n){e.resolved=se(n,t),u||c()}),f=E(function(t){r(e.errorComp)&&(e.error=!0,c())}),d=e(l,f);return s(d)&&("function"==typeof d.then?n(e.resolved)&&d.then(l,f):r(d.component)&&"function"==typeof d.component.then&&(d.component.then(l,f),r(d.error)&&(e.errorComp=se(d.error,t)),r(d.loading)&&(e.loadingComp=se(d.loading,t),0===d.delay?e.loading=!0:setTimeout(function(){n(e.resolved)&&n(e.error)&&(e.loading=!0,c())},d.delay||200)),r(d.timeout)&&setTimeout(function(){n(e.resolved)&&f(null)},d.timeout))),u=!1,e.loading?e.loadingComp:e.resolved}e.contexts.push(i)}function ce(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t];if(r(n)&&r(n.componentOptions))return n}}function le(e){e._events=Object.create(null),e._hasHookEve
 nt=!1;var t=e.$options._parentListeners;t&&pe(e,t)}function fe(e,t,n){n?rr.$once(e,t):rr.$on(e,t)}function de(e,t){rr.$off(e,t)}function pe(e,t,n){rr=e,Y(t,n||{},fe,de,e)}function he(e,t){var n={};if(!e)return n;for(var r=[],o=0,i=e.length;o<i;o++){var a=e[o];if(a.context!==t&&a.functionalContext!==t||!a.data||null==a.data.slot)r.push(a);else{var s=a.data.slot,u=n[s]||(n[s]=[]);"template"===a.tag?u.push.apply(u,a.children):u.push(a)}}return r.every(ve)||(n.default=r),n}function ve(e){return e.isComment||" "===e.text}function me(e,t){t=t||{};for(var n=0;n<e.length;n++)Array.isArray(e[n])?me(e[n],t):t[e[n].key]=e[n].fn;return t}function ye(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function _e(e,t,n){e.$el=t,e.$options.render||(e.$options.rende
 r=or),Ee(e,"beforeMount");var r;return r=function(){e._update(e._render(),n)},e._watcher=new vr(e,r,b),n=!1,null==e.$vnode&&(e._isMounted=!0,Ee(e,"mounted")),e}function ge(e,t,n,r,o){var i=!!(o||e.$options._renderChildren||r.data.scopedSlots||e.$scopedSlots!==An);if(e.$options._parentVnode=r,e.$vnode=r,e._vnode&&(e._vnode.parent=r),e.$options._renderChildren=o,t&&e.$options.props){Zn.shouldConvert=!1;for(var a=e._props,s=e.$options._propKeys||[],u=0;u<s.length;u++){var c=s[u];a[c]=z(c,e.$options.props,t,e)}Zn.shouldConvert=!0,e.$options.propsData=t}if(n){var l=e.$options._parentListeners;e.$options._parentListeners=n,pe(e,n,l)}i&&(e.$slots=he(o,r.context),e.$forceUpdate())}function be(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function we(e,t){if(t){if(e._directInactive=!1,be(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)we(e.$children[n]);Ee(e,"activated")}}function Oe(e,t){if(!(t&&
 (e._directInactive=!0,be(e))||e._inactive)){e._inactive=!0;for(var n=0;n<e.$children.length;n++)Oe(e.$children[n]);Ee(e,"deactivated")}}function Ee(e,t){var n=e.$options[t];if(n)for(var r=0,o=n.length;r<o;r++)try{n[r].call(e)}catch(n){k(n,e,t+" hook")}e._hasHookEvent&&e.$emit("hook:"+t)}function xe(){pr=ur.length=cr.length=0,lr={},fr=dr=!1}function Se(){dr=!0;var e,t;for(ur.sort(function(e,t){return e.id-t.id}),pr=0;pr<ur.length;pr++)e=ur[pr],t=e.id,lr[t]=null,e.run();var n=cr.slice(),r=ur.slice();xe(),je(n),Ce(r),Vn&&jn.devtools&&Vn.emit("flush")}function Ce(e){for(var t=e.length;t--;){var n=e[t],r=n.vm;r._watcher===n&&r._isMounted&&Ee(r,"updated")}}function ke(e){e._inactive=!1,cr.push(e)}function je(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,we(e[t],!0)}function Ae(e){var t=e.id;if(null==lr[t]){if(lr[t]=!0,dr){for(var n=ur.length-1;n>pr&&ur[n].id>e.id;)n--;ur.splice(n+1,0,e)}else ur.push(e);fr||(fr=!0,Wn(Se))}}function Ie(e){mr.clear(),Te(e,mr)}function Te(e,t){var n,r,o=Arr
 ay.isArray(e);if((o||s(e))&&Object.isExtensible(e)){if(e.__ob__){var i=e.__ob__.dep.id;if(t.has(i))return;t.add(i)}if(o)for(n=e.length;n--;)Te(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)Te(e[r[n]],t)}}function Ne(e,t,n){yr.get=function(){return this[t][n]},yr.set=function(e){this[t][n]=e},Object.defineProperty(e,n,yr)}function Pe(e){e._watchers=[];var t=e.$options;t.props&&Me(e,t.props),t.methods&&Ue(e,t.methods),t.data?$e(e):P(e._data={},!0),t.computed&&De(e,t.computed),t.watch&&Be(e,t.watch)}function Me(e,t){var n=e.$options.propsData||{},r=e._props={},o=e.$options._propKeys=[],i=!e.$parent;Zn.shouldConvert=i;for(var a in t)!function(i){o.push(i);var a=z(i,t,n,e);M(r,i,a),i in e||Ne(e,"_props",i)}(a);Zn.shouldConvert=!0}function $e(e){var t=e.$options.data;t=e._data="function"==typeof t?Re(t,e):t||{},u(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&h(r,n[o])||x(n[o])||Ne(e,"_data",n[o]);P(t,!0)}function Re(e,t){try{return e.call(t)}catch(e){return
  k(e,t,"data()"),{}}}function De(e,t){var n=e._computedWatchers=Object.create(null);for(var r in t){var o=t[r],i="function"==typeof o?o:o.get;n[r]=new vr(e,i,b,_r),r in e||Fe(e,r,o)}}function Fe(e,t,n){"function"==typeof n?(yr.get=Le(t),yr.set=b):(yr.get=n.get?!1!==n.cache?Le(t):n.get:b,yr.set=n.set?n.set:b),Object.defineProperty(e,t,yr)}function Le(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),Jn.target&&t.depend(),t.value}}function Ue(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?b:m(t[n],e)}function Be(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)Ve(e,n,r[o]);else Ve(e,n,r)}}function Ve(e,t,n){var r;u(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function qe(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}function We(e){var t=ze(e.$options.inject,e);t&&Object.keys(t).forEach(function(n){M(e,n,t[n])})}function ze(e,t){if(e){fo
 r(var n=Array.isArray(e),r=Object.create(null),o=n?e:qn?Reflect.ownKeys(e):Object.keys(e),i=0;i<o.length;i++)for(var a=o[i],s=n?a:e[a],u=t;u;){if(u._provided&&s in u._provided){r[a]=u._provided[s];break}u=u.$parent}return r}}function Je(e,t,n,o,i){var a={},s=e.options.props;if(r(s))for(var u in s)a[u]=z(u,s,t||{});else r(n.attrs)&&He(a,n.attrs),r(n.props)&&He(a,n.props);var c=Object.create(o),l=function(e,t,n,r){return Ye(c,e,t,n,r,!0)},f=e.options.render.call(null,l,{data:n,props:a,children:i,parent:o,listeners:n.on||{},injections:ze(e.options.inject,o),slots:function(){return he(i,o)}});return f instanceof tr&&(f.functionalContext=o,f.functionalOptions=e.options,n.slot&&((f.data||(f.data={})).slot=n.slot)),f}function He(e,t){for(var n in t)e[gn(n)]=t[n]}function Ge(e,t,i,a,u){if(!n(e)){var c=i.$options._base;if(s(e)&&(e=c.extend(e)),"function"==typeof e&&(!n(e.cid)||void 0!==(e=ue(e,c,i)))){pt(e),t=t||{},r(t.model)&&Qe(e.options,t);var l=te(t,e,u);if(o(e.options.functional))return
  Je(e,l,t,i,a);var f=t.on;t.on=t.nativeOn,o(e.options.abstract)&&(t={}),Ke(t);var d=e.options.name||u;return new tr("vue-component-"+e.cid+(d?"-"+d:""),t,void 0,void 0,void 0,i,{Ctor:e,propsData:l,listeners:f,tag:u,children:a})}}}function Xe(e,t,n,o){var i=e.componentOptions,a={_isComponent:!0,parent:t,propsData:i.propsData,_componentTag:i.tag,_parentVnode:e,_parentListeners:i.listeners,_renderChildren:i.children,_parentElm:n||null,_refElm:o||null},s=e.data.inlineTemplate;return r(s)&&(a.render=s.render,a.staticRenderFns=s.staticRenderFns),new i.Ctor(a)}function Ke(e){e.hook||(e.hook={});for(var t=0;t<br.length;t++){var n=br[t],r=e.hook[n],o=gr[n];e.hook[n]=r?Ze(o,r):o}}function Ze(e,t){return function(n,r,o,i){e(n,r,o,i),t(n,r,o,i)}}function Qe(e,t){var n=e.model&&e.model.prop||"value",o=e.model&&e.model.event||"input";(t.props||(t.props={}))[n]=t.model.value;var i=t.on||(t.on={});r(i[o])?i[o]=[t.model.callback].concat(i[o]):i[o]=t.model.callback}function Ye(e,t,n,r,i,s){return(Arr
 ay.isArray(n)||a(n))&&(i=r,r=n,n=void 0),o(s)&&(i=Or),et(e,t,n,r,i)}function et(e,t,n,o,i){if(r(n)&&r(n.__ob__))return or();if(!t)return or();Array.isArray(o)&&"function"==typeof o[0]&&(n=n||{},n.scopedSlots={default:o[0]},o.length=0),i===Or?o=oe(o):i===wr&&(o=re(o));var a,s;if("string"==typeof t){var u;s=jn.getTagNamespace(t),a=jn.isReservedTag(t)?new tr(jn.parsePlatformTagName(t),n,o,void 0,void 0,e):r(u=W(e.$options,"components",t))?Ge(u,n,e,o,t):new tr(t,n,o,void 0,void 0,e)}else a=Ge(t,n,e,o);return r(a)?(s&&tt(a,s),a):or()}function tt(e,t){if(e.ns=t,"foreignObject"!==e.tag&&r(e.children))for(var o=0,i=e.children.length;o<i;o++){var a=e.children[o];r(a.tag)&&n(a.ns)&&tt(a,t)}}function nt(e,t){var n,o,i,a,u;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),o=0,i=e.length;o<i;o++)n[o]=t(e[o],o);else if("number"==typeof e)for(n=new Array(e),o=0;o<e;o++)n[o]=t(o+1,o);else if(s(e))for(a=Object.keys(e),n=new Array(a.length),o=0,i=a.length;o<i;o++)u=a[o],n[o]=t(e[u],u,
 o);return r(n)&&(n._isVList=!0),n}function rt(e,t,n,r){var o=this.$scopedSlots[e];if(o)return n=n||{},r&&_(n,r),o(n)||t;var i=this.$slots[e];return i||t}function ot(e){return W(this.$options,"filters",e,!0)||xn}function it

<TRUNCATED>


[20/50] [abbrv] incubator-weex git commit: * [android] fix waterfall crash

Posted by zs...@apache.org.
* [android] fix waterfall crash


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

Branch: refs/heads/dev
Commit: 4ba3101b9f9097615a4086a788303167d8601e23
Parents: c0f99ea
Author: 莫绪旻 <xu...@alibaba-inc.com>
Authored: Fri Jul 21 17:55:33 2017 +0800
Committer: 莫绪旻 <xu...@alibaba-inc.com>
Committed: Fri Jul 21 17:55:33 2017 +0800

----------------------------------------------------------------------
 .../main/java/com/taobao/weex/dom/WXRecyclerDomObject.java   | 4 ++++
 .../com/taobao/weex/ui/component/list/WXListComponent.java   | 8 ++++++++
 2 files changed, 12 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/4ba3101b/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
index 62f4a22..7424a56 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
@@ -91,10 +91,14 @@ public class WXRecyclerDomObject extends WXDomObject{
             } else if (Constants.Value.AUTO != mColumnWidth && Constants.Value.AUTO == mColumnCount) {
                 mColumnCount = Math.round((mAvailableWidth + mColumnGap) / (mColumnWidth + mColumnGap)-0.5f);
                 mColumnCount = mColumnCount > 0 ? mColumnCount :1;
+                if (mColumnCount <= 0)
+                    mColumnCount = Constants.Value.COLUMN_COUNT_NORMAL;
                 mColumnWidth =((mAvailableWidth + mColumnGap) / mColumnCount) - mColumnGap;
             } else if(Constants.Value.AUTO != mColumnWidth && Constants.Value.AUTO != mColumnCount){
                 int columnCount = Math.round((mAvailableWidth + mColumnGap) / (mColumnWidth + mColumnGap)-0.5f);
                 mColumnCount = columnCount > mColumnCount ? mColumnCount :columnCount;
+                if (mColumnCount <= 0)
+                    mColumnCount = Constants.Value.COLUMN_COUNT_NORMAL;
                 mColumnWidth= ((mAvailableWidth + mColumnGap) / mColumnCount) - mColumnGap;
             }
             mIsPreCalculateCellWidth = true;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/4ba3101b/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 9b36be4..9a52dfb 100644
--- 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
@@ -90,6 +90,14 @@ public class WXListComponent extends BasicListComponent<BounceRecyclerView> {
       return;
     }
     setRefreshOrLoading(child);
+
+    // Synchronize DomObject's attr to Component and Native View
+    if(mDomObject.getColumnWidth() != mColumnWidth ||
+            mDomObject.getColumnCount() != mColumnCount ||
+            mDomObject.getColumnGap() != mColumnGap) {
+      updateRecyclerAttr();
+      getHostView().getInnerView().initView(getContext(), mLayoutType,mColumnCount,mColumnGap,getOrientation());
+    }
   }
 
 


[34/50] [abbrv] incubator-weex git commit: + [ios] public tracing manager

Posted by zs...@apache.org.
+ [ios] public tracing manager


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

Branch: refs/heads/dev
Commit: faaa8f893bb0a4dc96f09fc8d6dcca29ba3d9c0f
Parents: da8cf4a
Author: 齐山 <su...@163.com>
Authored: Tue Jul 25 16:21:36 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Tue Jul 25 16:21:36 2017 +0800

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


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/faaa8f89/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
index 898f080..4520dc1 100644
--- a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
+++ b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
@@ -250,7 +250,7 @@
 		C4D872261E5DDF7500E39BC1 /* WXBoxShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = C4D872241E5DDF7500E39BC1 /* WXBoxShadow.m */; };
 		C4E375371E5FCBD3009B2D9C /* WXComponent+BoxShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = C4E375351E5FCBD3009B2D9C /* WXComponent+BoxShadow.m */; };
 		C4E375381E5FCBD3009B2D9C /* WXComponent+BoxShadow.h in Headers */ = {isa = PBXBuildFile; fileRef = C4E375361E5FCBD3009B2D9C /* WXComponent+BoxShadow.h */; };
-		C4E97D331F1EF46D00ABC314 /* WXTracingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C4E97D311F1EF46D00ABC314 /* WXTracingManager.h */; };
+		C4E97D331F1EF46D00ABC314 /* WXTracingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C4E97D311F1EF46D00ABC314 /* WXTracingManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C4E97D341F1EF46D00ABC314 /* WXTracingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C4E97D321F1EF46D00ABC314 /* WXTracingManager.m */; };
 		C4F012791E1502A6003378D0 /* SRWebSocket+Weex.h in Headers */ = {isa = PBXBuildFile; fileRef = C4F012721E1502A6003378D0 /* SRWebSocket+Weex.h */; };
 		C4F0127A1E1502A6003378D0 /* SRWebSocket+Weex.m in Sources */ = {isa = PBXBuildFile; fileRef = C4F012731E1502A6003378D0 /* SRWebSocket+Weex.m */; };

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/faaa8f89/ios/sdk/WeexSDK/Sources/WeexSDK.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/WeexSDK.h b/ios/sdk/WeexSDK/Sources/WeexSDK.h
index b553fce..de1a82e 100644
--- a/ios/sdk/WeexSDK/Sources/WeexSDK.h
+++ b/ios/sdk/WeexSDK/Sources/WeexSDK.h
@@ -23,6 +23,7 @@
 #import "WXUtility.h"
 #import "WXURLRewriteProtocol.h"
 #import "WXType.h"
+#import "WXTracingManager.h"
 #import "WXScrollerProtocol.h"
 #import "WXScrollerComponent.h"
 #import "WXSDKManager.h"
@@ -62,6 +63,5 @@
 #import "WXAComponent.h"
 #import "NSObject+WXSwizzle.h"
 #import "Layout.h"
-#import "WXTracingManager.h"
 
 #endif /* __OBJC__ */


[17/50] [abbrv] incubator-weex git commit: * [ios] check whether the WXDebugLoggerBridge class is existed

Posted by zs...@apache.org.
* [ios]  check whether the WXDebugLoggerBridge class is existed


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

Branch: refs/heads/dev
Commit: 9b024080ac60c8fbf4c06b157044c72d503c0e87
Parents: 4d122d4
Author: acton393 <zh...@gmail.com>
Authored: Fri Jul 21 16:45:17 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jul 21 16:45:17 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9b024080/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
index f5ddc64..c96caef 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
@@ -589,7 +589,9 @@ _Pragma("clang diagnostic pop") \
 
 - (void)connectToWebSocket:(NSURL *)url
 {
-    _devToolSocketBridge = [[NSClassFromString(@"WXDebugLoggerBridge") alloc] initWithURL:url];
+    if (NSClassFromString(@"WXDebugLoggerBridge")) {
+        _devToolSocketBridge = [[NSClassFromString(@"WXDebugLoggerBridge") alloc] initWithURL:url];
+    }
 }
 
 - (void)logToWebSocket:(NSString *)flag message:(NSString *)message


[11/50] [abbrv] incubator-weex git commit: * [android] fix illegal value in scroll event for list

Posted by zs...@apache.org.
* [android] fix illegal value in scroll event for list


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

Branch: refs/heads/dev
Commit: 831cb26d33e3faa2047192e36fff9d67631569d2
Parents: da56268
Author: misakuo <mi...@apache.org>
Authored: Thu Jul 20 15:26:03 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Thu Jul 20 15:26:03 2017 +0800

----------------------------------------------------------------------
 .../ui/component/list/BasicListComponent.java   | 66 +++++++++-----------
 .../taobao/weex/ui/component/list/WXCell.java   | 10 ---
 2 files changed, 30 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/831cb26d/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
index f3f6ac6..cdff266 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
@@ -113,7 +113,6 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
 
   private int mOffsetAccuracy = 10;
   private Point mLastReport = new Point(-1, -1);
-  private boolean mStable = false;
 
   private RecyclerView.ItemAnimator mItemAnimator;
 
@@ -133,16 +132,6 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
   private static final boolean DEFAULT_EXCLUDED = false;
 
   private static final String DRAG_ANCHOR = "dragAnchor";
-  private float mContentHeight = 0;
-
-  public void recalculateSize() {
-    float height = 0;
-    for(int i=0, c = getChildCount(); i<=c-1 ; i++){
-      height += getChild(i).getLayoutHeight();
-    }
-    mContentHeight = height;
-    fireScrollEvent(0,0);
-  }
 
   /**
    * gesture type which can trigger drag&drop
@@ -191,12 +180,6 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
     mTriggerType = getTriggerType(getDomObject());
   }
 
-  @Override
-  protected void onFinishLayout() {
-    super.onFinishLayout();
-    recalculateSize();
-  }
-
   /**
    * Measure the size of the recyclerView.
    *
@@ -420,9 +403,6 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
         int accuracy = WXUtils.getInteger(param, 10);
         setOffsetAccuracy(accuracy);
         return true;
-      case Constants.Name.STABLE:
-        this.mStable = WXUtils.getBoolean(param, false);
-        return true;
       case Constants.Name.DRAGGABLE:
         boolean draggable = WXUtils.getBoolean(param,false);
         setDraggable(draggable);
@@ -1255,36 +1235,47 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
     if (Constants.Event.SCROLL.equals(type) && getHostView() != null && getHostView().getInnerView() != null) {
       WXRecyclerView innerView = getHostView().getInnerView();
       innerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
-        private int totalDy = 0;
+        private int offsetXCorrection, offsetYCorrection;
+        private boolean mFirstEvent = true;
 
         @Override
         public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
           super.onScrolled(recyclerView, dx, dy);
+//          WXLogUtils.e("SCROLL", dx + ", " + dy + ", " + recyclerView.computeHorizontalScrollRange()
+//          + ", " + recyclerView.computeVerticalScrollRange()
+//          + ", " + recyclerView.computeHorizontalScrollOffset()
+//          + ", " + recyclerView.computeVerticalScrollOffset());
+
           int offsetX = recyclerView.computeHorizontalScrollOffset();
-          int offsetY = 0;
-          if (mStable) {
-            totalDy -= dy;
-            offsetY = totalDy;
+          int offsetY = recyclerView.computeVerticalScrollOffset();
+
+          if (dx == 0 && dy == 0) {
+            offsetXCorrection = offsetX;
+            offsetYCorrection = offsetY;
+            offsetX = 0;
+            offsetY = 0;
           } else {
-            offsetY = recyclerView.computeVerticalScrollOffset();
+            offsetX = offsetX - offsetXCorrection;
+            offsetY = offsetY - offsetYCorrection;
+          }
+
+          if (mFirstEvent) {
+            //skip first event
+            mFirstEvent = false;
+            return;
           }
 
           if (shouldReport(offsetX, offsetY)) {
-            fireScrollEvent(offsetX, offsetY);
+            fireScrollEvent(recyclerView, offsetX, offsetY);
           }
         }
       });
     }
   }
 
-  private void fireScrollEvent(int offsetX, int offsetY){
-    ListComponentView view = getHostView();
-    if(view == null){
-      return;
-    }
-    WXRecyclerView innerView = view.getInnerView();
-    int contentWidth = innerView.getMeasuredWidth() + innerView.computeHorizontalScrollRange();
-    int contentHeight = (int)mContentHeight;
+  private void fireScrollEvent(RecyclerView recyclerView, int offsetX, int offsetY) {
+    int contentWidth = recyclerView.getMeasuredWidth() + recyclerView.computeHorizontalScrollRange();
+    int contentHeight = recyclerView.computeVerticalScrollRange();
 
     Map<String, Object> event = new HashMap<>(2);
     Map<String, Object> contentSize = new HashMap<>(2);
@@ -1308,7 +1299,10 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
       return true;
     }
 
-    if (Math.abs(mLastReport.x - offsetX) >= mOffsetAccuracy || Math.abs(mLastReport.y - offsetY) >= mOffsetAccuracy) {
+    int gapX = Math.abs(mLastReport.x - offsetX);
+    int gapY = Math.abs(mLastReport.y - offsetY);
+
+    if (gapX >= mOffsetAccuracy || gapY >= mOffsetAccuracy) {
       mLastReport.x = offsetX;
       mLastReport.y = offsetY;
       return true;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/831cb26d/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
index 172f19b..9a5e468 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
@@ -27,7 +27,6 @@ import android.widget.FrameLayout;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.annotation.Component;
 import com.taobao.weex.dom.WXDomObject;
-import com.taobao.weex.dom.flex.CSSLayout;
 import com.taobao.weex.ui.component.WXVContainer;
 import com.taobao.weex.ui.view.WXFrameLayout;
 
@@ -83,15 +82,6 @@ public class WXCell extends WXVContainer<WXFrameLayout> {
         }
     }
 
-    @Override
-    protected void onFinishLayout() {
-        super.onFinishLayout();
-        WXVContainer container = getParent();
-        if(container != null && container instanceof BasicListComponent){
-            ((BasicListComponent)container).recalculateSize();
-        }
-    }
-
     public int getLocationFromStart(){
         return mLastLocationY;
     }


[32/50] [abbrv] incubator-weex git commit: + [ios] update ,

Posted by zs...@apache.org.
+ [ios] update ,


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

Branch: refs/heads/dev
Commit: 949c14f93e6327e5a88b76f4f8c39d507a9a7793
Parents: c2d11a4
Author: 齐山 <su...@163.com>
Authored: Tue Jul 25 14:34:50 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Tue Jul 25 14:34:50 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/949c14f9/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
index 8eb6310..06a486f 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
@@ -85,7 +85,7 @@ typedef enum : NSUInteger {
 +(BOOL)isTracing;
 /**
  *  @discusstion  set weex perfermance  tracing state , you should use in debug environment
- *  @param isTracing , YES weex will be traced, NO weex will not be traced .
+ *  @param isTracing YES weex will be traced, NO weex will not be traced .
  */
 +(void)switchTracing:(BOOL)isTracing;
 /**
@@ -113,7 +113,7 @@ typedef enum : NSUInteger {
 /**
  *  @discusstion set bundle type
  *  @param jsBundleString: the bundle source.
- *  @param iid: the instance  id.
+ *  @param iid the instance  id.
  */
 +(void)setBundleJSType:(NSString *)jsBundleString instanceId:(NSString *)iid;
 /**


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

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

Branch: refs/heads/dev
Commit: 7ca3a1e379b0fea464b665f2deb292ee8b12bd5b
Parents: 50329bb f35f97d
Author: MrRaindrop <te...@gmail.com>
Authored: Mon Jul 24 17:58:28 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Mon Jul 24 17:58:28 2017 +0800

----------------------------------------------------------------------
 .../weex/ui/component/list/WXListComponent.java |   7 +-
 examples/vue/components/input.vue               |  17 +
 .../WeexDemo.xcodeproj/project.pbxproj          |   4 +
 ios/playground/WeexDemo/WXDemoViewController.m  |   3 +-
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       |   8 +
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    |  12 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m |  16 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |  19 +-
 .../WeexSDK/Sources/Component/WXEditComponent.m |   2 +-
 .../Sources/Component/WXImageComponent.m        |   1 +
 .../Sources/Component/WXScrollerComponent.m     |   1 +
 .../WeexSDK/Sources/Component/WXTextComponent.m |   1 +
 .../Sources/Manager/WXComponentManager.m        |   4 +-
 .../WeexSDK/Sources/Manager/WXTracingManager.h  | 125 ++++++
 .../WeexSDK/Sources/Manager/WXTracingManager.m  | 382 +++++++++++++++++++
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |   3 +
 .../WeexSDK/Sources/Model/WXJSExceptionInfo.h   |   1 +
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |   7 +
 .../WeexSDK/Sources/Module/WXAnimationModule.m  |   7 +-
 ios/sdk/WeexSDK/Sources/Module/WXDomModule.m    |   4 +-
 ios/sdk/WeexSDK/Sources/Utility/WXLog.m         |   1 +
 .../Sources/View/WXComponent+ViewManagement.m   |   3 +-
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |   1 +
 23 files changed, 602 insertions(+), 27 deletions(-)
----------------------------------------------------------------------



[21/50] [abbrv] incubator-weex git commit: + [ios] update tracing logic @notdanger

Posted by zs...@apache.org.
+ [ios] update tracing logic @notdanger


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

Branch: refs/heads/dev
Commit: 898b8a246652562195f35a4c401b5ad8679ed0b3
Parents: d3cadef
Author: 齐山 <su...@163.com>
Authored: Fri Jul 21 18:00:46 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Fri Jul 21 18:00:46 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/898b8a24/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
index a70a798..af801a3 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
@@ -280,9 +280,11 @@
             WXPerformBlockOnComponentThread(^{
                 WXSDKInstance *instance = [WXSDKManager instanceForID:task.iid];
                 WXComponent *com = [instance componentForRef:tracing.ref];
+                if(task.bundleUrl.length == 0){
+                    task.bundleUrl = [instance.scriptURL absoluteString];
+                }
                 if(com.supercomponent){
                     tracing.parentRef = com.supercomponent.ref;
-                    task.bundleUrl = [instance.scriptURL absoluteString];
                 }
             });
         }


[08/50] [abbrv] incubator-weex git commit: Merge branch '0.15-dev' of gitlab.alibaba-inc.com:weex/weex into 0.15-dev

Posted by zs...@apache.org.
Merge branch '0.15-dev' of gitlab.alibaba-inc.com:weex/weex into 0.15-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/da562689
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/da562689
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/da562689

Branch: refs/heads/dev
Commit: da562689aec6678bb8c7217b859d54e363c8e0ff
Parents: a679aab e1df3db
Author: sospartan <so...@apache.org>
Authored: Thu Jul 20 11:16:54 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Thu Jul 20 11:16:54 2017 +0800

----------------------------------------------------------------------
 android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------



[12/50] [abbrv] incubator-weex git commit: Merge branch '0.15-dev' of https://github.com/erha19/incubator-weex into 0.15-dev

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

Branch: refs/heads/dev
Commit: 9764e25ea1d8abdd803f6b2547f268d470d91ee0
Parents: 831cb26 2211546
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Jul 20 16:28:44 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Jul 20 16:28:44 2017 +0800

----------------------------------------------------------------------
 build/config.js                                 |   1 +
 build/karma.vue.conf.js                         |   7 +
 html5/render/vue/modules/websocket/websocket.js |   1 +
 html5/render/vue/utils/event.js                 |   6 +-
 html5/render/vue/utils/func.js                  | 136 +++++++--
 html5/render/vue/utils/index.js                 | 104 -------
 html5/render/vue/utils/perf.js                  |   3 +-
 html5/test/render/vue/modules/websocket.js      |  90 +++---
 html5/test/render/vue/utils/component.js        |  50 +++-
 html5/test/render/vue/utils/event.js            |  78 ++++++
 html5/test/render/vue/utils/func.js             | 278 +++++++++++++++++--
 html5/test/render/vue/utils/lazyload.js         | 106 +++++++
 html5/test/render/vue/utils/perf.js             | 132 +++++++++
 html5/test/render/vue/utils/style.js            | 157 +++++++++--
 html5/test/render/vue/utils/type.js             |  49 ++++
 html5/test/render/vue/validator/index.js        |  31 ++-
 16 files changed, 981 insertions(+), 248 deletions(-)
----------------------------------------------------------------------



[36/50] [abbrv] incubator-weex git commit: * [android] visibleCellCount need to be considered columnCount

Posted by zs...@apache.org.
* [android] visibleCellCount need to be considered columnCount


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

Branch: refs/heads/dev
Commit: b9116490531918754565f8b9fddd6e44393c6786
Parents: 1a87198
Author: miomin <69...@qq.com>
Authored: Tue Jul 25 17:04:17 2017 +0800
Committer: miomin <69...@qq.com>
Committed: Tue Jul 25 17:04:17 2017 +0800

----------------------------------------------------------------------
 .../com/taobao/weex/ui/component/list/BasicListComponent.java     | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b9116490/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
index b85ec21..c959351 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
@@ -1196,7 +1196,8 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
       direction = directionX > 0 ? Constants.Value.DIRECTION_LEFT : Constants.Value.DIRECTION_RIGHT;
     }
 
-    visibleCellCount = lastVisible - firstVisible;
+    if (mColumnCount > 0)
+      visibleCellCount = (lastVisible - firstVisible) * mColumnCount;
 
     while (it.hasNext()) {
       AppearanceHelper item = it.next();


[06/50] [abbrv] incubator-weex git commit: + [ios] change macro name @notdanger

Posted by zs...@apache.org.
+ [ios] change macro name @notdanger


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

Branch: refs/heads/dev
Commit: 5cbb83ebf8fe5c89cc6bd7d53361ec41df45e9d0
Parents: cd4ca94
Author: 齐山 <su...@163.com>
Authored: Thu Jul 20 11:08:19 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Thu Jul 20 11:08:19 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5cbb83eb/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
index 22d0286..3a40b2b 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
@@ -20,11 +20,11 @@
 #import <Foundation/Foundation.h>
 #import "WXSDKInstance.h"
 
-#define WXTNetworkHanding          @"WXTNetworkHanding"
-#define WXTDataHanding          @"WXTDataHanding"
+#define WXTNetworkHanding          @"loadjs"
+#define WXTExecJS          @"execjs"
 #define WXTJSCall          @"jsCall"
-#define WXTRender          @"WXTRender"
-#define WXTRenderFinish          @"WXTRenderFinish"
+#define WXTRender          @"render"
+#define WXTRenderFinish          @"RenderFinish"
 
 #define WXTracingBegin             @"B"
 #define WXTracingEnd               @"E"
@@ -68,6 +68,7 @@ typedef enum : NSUInteger {
 @property (nonatomic, copy) NSString *iid;
 @property (nonatomic) long long counter;
 @property (nonatomic, copy)  NSString *tag;
+@property (nonatomic, copy)  NSString *bundleUrl;
 @property (nonatomic, strong) NSMutableArray *tracings;
 @property (nonatomic, copy) NSString *bundleJSType; //
 


[02/50] [abbrv] incubator-weex git commit: * [doc] Change the doc of timer.

Posted by zs...@apache.org.
* [doc] Change the doc of timer.


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

Branch: refs/heads/dev
Commit: fb2ca329800a7d11d692f1f024ddb3caee4abd6f
Parents: 10a074f
Author: YorkShen <sh...@gmail.com>
Authored: Wed Jul 19 16:17:20 2017 +0800
Committer: YorkShen <sh...@gmail.com>
Committed: Wed Jul 19 16:17:20 2017 +0800

----------------------------------------------------------------------
 doc/source/cn/references/modules/timer.md | 2 +-
 doc/source/references/modules/timer.md    | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fb2ca329/doc/source/cn/references/modules/timer.md
----------------------------------------------------------------------
diff --git a/doc/source/cn/references/modules/timer.md b/doc/source/cn/references/modules/timer.md
index 7bc87bb..3ac0c71 100644
--- a/doc/source/cn/references/modules/timer.md
+++ b/doc/source/cn/references/modules/timer.md
@@ -8,7 +8,7 @@ version: 0.10
 Weex Timer可以用来延时启动一个一次性任务或者重复任务。Timer会尽最大努力提供精确的延时,但是延时可能并不精确,延时时间很可能会超过用户期望的时间。实际上,timer仅仅是为了支持HTML5中的polyfill,*不建议*开发者直接使用timer.
 
 ## API
-Timer中延时的单位是毫秒,且延时时间应该为一个非负的int值(int值最大为0x7FFFFF).如果延时时间为负数或者零,timer会将延时时间重置为0,即将该任务马上插入任务队列的尾部。
+Timer中延时的单位是毫秒,且延时时间应该为一个非负的**int**值(int值最大为0x7FFFFF).如果延时时间为零,会将该任务马上插入任务队列的尾部。对于其他非法值,timer的行为未定义。
 
 ### setTimeout(fn, timeout)    
 `setTimeout()`会等待指定的时间,然后执行给出的函数。

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/fb2ca329/doc/source/references/modules/timer.md
----------------------------------------------------------------------
diff --git a/doc/source/references/modules/timer.md b/doc/source/references/modules/timer.md
index 6813d28..9e7da63 100644
--- a/doc/source/references/modules/timer.md
+++ b/doc/source/references/modules/timer.md
@@ -11,8 +11,7 @@ Actually, this module is made for the polyfill of HTML5 timer APIs, developers *
 
 ## API
 
-All timeout or interval in this module are measured in milliseconds.    
-Also, timeout and interval should be a non-negative integer(the max of integer is 0x7FFFFFFF). If timeout or interval is negative, then it will be reset to zero, e.g. the task will be put in the task queue immediately.     
+All timeout or interval in this module are measured in milliseconds. Also, timeout and interval should be a non-negative **integer**(the max of integer is 0x7FFFFFFF). The behavior of invalid value for timeout or interval is undefined.
 
 ### setTimeout(fn, timeout)    
 


[26/50] [abbrv] incubator-weex git commit: * [html5] remove useless style code

Posted by zs...@apache.org.
* [html5] remove useless style 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/f31ecb35
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/f31ecb35
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/f31ecb35

Branch: refs/heads/dev
Commit: f31ecb3501462447a51e88f0221cd97195a0412b
Parents: c964a90
Author: erha19 <fa...@gmail.com>
Authored: Mon Jul 24 17:03:07 2017 +0800
Committer: erha19 <fa...@gmail.com>
Committed: Mon Jul 24 17:03:07 2017 +0800

----------------------------------------------------------------------
 html5/test/render/vue/data/dotvue/event-bubble-bar.vue | 11 -----------
 html5/test/render/vue/data/dotvue/event-bubble.vue     | 11 -----------
 2 files changed, 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f31ecb35/html5/test/render/vue/data/dotvue/event-bubble-bar.vue
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/data/dotvue/event-bubble-bar.vue b/html5/test/render/vue/data/dotvue/event-bubble-bar.vue
index 02f289d..5e68537 100644
--- a/html5/test/render/vue/data/dotvue/event-bubble-bar.vue
+++ b/html5/test/render/vue/data/dotvue/event-bubble-bar.vue
@@ -18,14 +18,3 @@
     }
   }
 </script>
-
-<style scoped>
-.event-bubble-outter {
-  height: 400px;
-  background-color: #f7f7f7;
-}
-.event-bubble-inner {
-  height: 200px;
-  background-color: #ccc;
-}
-</style>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f31ecb35/html5/test/render/vue/data/dotvue/event-bubble.vue
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/data/dotvue/event-bubble.vue b/html5/test/render/vue/data/dotvue/event-bubble.vue
index 3ee3be4..eea9b29 100644
--- a/html5/test/render/vue/data/dotvue/event-bubble.vue
+++ b/html5/test/render/vue/data/dotvue/event-bubble.vue
@@ -23,14 +23,3 @@
     }
   }
 </script>
-
-<style scoped>
-.ct {
-  height: 600px;
-  background-color: #fff;
-}
-.txt {
-  font-size: 32px;
-  padding: 20px;
-}
-</style>


[49/50] [abbrv] incubator-weex git commit: * [ios] add tracing manager to dynamic framework

Posted by zs...@apache.org.
* [ios] add tracing manager to dynamic framework


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

Branch: refs/heads/dev
Commit: eb48b94c7200a8515044755417a76ae63fef5b68
Parents: 6b9f862
Author: acton393 <zh...@gmail.com>
Authored: Fri Jul 28 22:15:05 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jul 28 22:15:05 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/eb48b94c/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
index 4520dc1..5785c45 100644
--- a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
+++ b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
@@ -530,6 +530,8 @@
 		DCC77C131D770AE300CE7288 /* WXSliderNeighborComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = DCC77C111D770AE300CE7288 /* WXSliderNeighborComponent.m */; };
 		DCC77C141D770AE300CE7288 /* WXSliderNeighborComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = DCC77C121D770AE300CE7288 /* WXSliderNeighborComponent.h */; };
 		DCDFED011E68238F00C228D7 /* WXJSExceptionProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = DCDFED001E68238F00C228D7 /* WXJSExceptionProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		DCEA54621F2B7DB4000ECB23 /* WXTracingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C4E97D311F1EF46D00ABC314 /* WXTracingManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		DCEA54631F2B7DBA000ECB23 /* WXTracingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C4E97D321F1EF46D00ABC314 /* WXTracingManager.m */; };
 		DCF087611DCAE161005CD6EB /* WXInvocationConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = DCF0875F1DCAE161005CD6EB /* WXInvocationConfig.h */; };
 		DCF087621DCAE161005CD6EB /* WXInvocationConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DCF087601DCAE161005CD6EB /* WXInvocationConfig.m */; };
 		DCF0CD9E1EAF3A6B0062CA8F /* native-bundle-main.js in Resources */ = {isa = PBXBuildFile; fileRef = DCF0CD9D1EAF3A6B0062CA8F /* native-bundle-main.js */; };
@@ -1746,6 +1748,7 @@
 				DCA445D91EFA59A100D0CFA8 /* WXEditComponent.h in Headers */,
 				DCA445FB1EFA5A3C00D0CFA8 /* WXStorageModule.h in Headers */,
 				DCA446051EFA5A5800D0CFA8 /* WXBoxShadow.h in Headers */,
+				DCEA54621F2B7DB4000ECB23 /* WXTracingManager.h in Headers */,
 				DCA445D11EFA594200D0CFA8 /* WXLayer.h in Headers */,
 				DCA4460A1EFA5A6F00D0CFA8 /* WXSimulatorShortcutManager.h in Headers */,
 				DCA445E11EFA59D100D0CFA8 /* WXSliderNeighborComponent.h in Headers */,
@@ -2196,6 +2199,7 @@
 				DCA445801EFA55B300D0CFA8 /* WXLength.m in Sources */,
 				DCA445811EFA55B300D0CFA8 /* WXDiffUtil.m in Sources */,
 				DCA445821EFA55B300D0CFA8 /* WXSDKEngine.m in Sources */,
+				DCEA54631F2B7DBA000ECB23 /* WXTracingManager.m in Sources */,
 				DCA445831EFA55B300D0CFA8 /* WXBridgeMethod.m in Sources */,
 				DCA445841EFA55B300D0CFA8 /* WXModuleMethod.m in Sources */,
 				DCA445851EFA55B300D0CFA8 /* WXComponentMethod.m in Sources */,


[31/50] [abbrv] incubator-weex git commit: + [ios] delete ,

Posted by zs...@apache.org.
+ [ios] delete ,


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

Branch: refs/heads/dev
Commit: c2d11a4756c6ae28ce031f5c67db26d94e4873eb
Parents: 7ca3a1e
Author: 齐山 <su...@163.com>
Authored: Tue Jul 25 14:30:18 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Tue Jul 25 14:30:18 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c2d11a47/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
index 767f79f..8eb6310 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
@@ -90,13 +90,13 @@ typedef enum : NSUInteger {
 +(void)switchTracing:(BOOL)isTracing;
 /**
  *  @discusstion  weex perfermance  tracing state
- *  @param iid, the instance id.
- *  @param ref, the component ref
- *  @param className, the module or component class name
- *  @param name,  the module or component name
- *  @param phase, the trace phase
- *  @param functionName, function name
- *  @param options, the optional refer:support ts,duration,parentRef
+ *  @param iid the instance id.
+ *  @param ref the component ref
+ *  @param className the module or component class name
+ *  @param name  the module or component name
+ *  @param phase the trace phase
+ *  @param functionName function name
+ *  @param options the optional refer:support ts,duration,parentRef
  */
 +(void)startTracingWithInstanceId:(NSString *)iid ref:(NSString*)ref className:(NSString *)className name:(NSString *)name phase:(NSString *)phase functionName:(NSString *)functionName options:(NSDictionary *)options;
 /**


[23/50] [abbrv] incubator-weex git commit: Merge branch '0.15-dev-bugfix into 0.15-dev

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

* 0.15-dev-bugfix:
  * [android] fix waterfall crash
  * [android] fix : set the upper limit for the viewHolder cache pool


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

Branch: refs/heads/dev
Commit: c964a90e42a722185078a339d7102e3af83c78a4
Parents: 33a6bec 4ba3101
Author: zshshr <zh...@gmail.com>
Authored: Fri Jul 21 18:27:02 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Fri Jul 21 18:27:02 2017 +0800

----------------------------------------------------------------------
 .../taobao/weex/dom/WXRecyclerDomObject.java    |  4 +++
 .../ui/component/list/BasicListComponent.java   | 30 +++++++++++++-------
 .../weex/ui/component/list/WXListComponent.java |  8 ++++++
 3 files changed, 32 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


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


[07/50] [abbrv] incubator-weex git commit: Merge branch '0.15-dev-feature-jsfm' of http://github.com/atomtong/incubator-weex into 0.15-dev

Posted by zs...@apache.org.
Merge branch '0.15-dev-feature-jsfm' of http://github.com/atomtong/incubator-weex into 0.15-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/a679aab2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/a679aab2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/a679aab2

Branch: refs/heads/dev
Commit: a679aab2dc60f06ee613b10250a30ffe3e39a1e0
Parents: fb2ca32 161f897
Author: sospartan <so...@apache.org>
Authored: Thu Jul 20 11:10:17 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Thu Jul 20 11:10:17 2017 +0800

----------------------------------------------------------------------
 pre-build/native-bundle-main.js | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------



[38/50] [abbrv] incubator-weex git commit: * [jsfm] genNativeModules NPE

Posted by zs...@apache.org.
* [jsfm] genNativeModules NPE


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

Branch: refs/heads/dev
Commit: b1ced32c22f0aa2333ff1e79ae165a3767e1c189
Parents: faaa8f8
Author: atomtong <to...@qq.com>
Authored: Wed Jul 26 12:03:38 2017 +0800
Committer: atomtong <to...@qq.com>
Committed: Wed Jul 26 12:03:38 2017 +0800

----------------------------------------------------------------------
 pre-build/native-bundle-main.js | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------



[27/50] [abbrv] incubator-weex git commit: * [html5] create one instance for test

Posted by zs...@apache.org.
* [html5] create one instance for test


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

Branch: refs/heads/dev
Commit: 50329bb59184deb6a45f24b6a05caeebc99bdb92
Parents: f31ecb3
Author: erha19 <fa...@gmail.com>
Authored: Mon Jul 24 17:05:36 2017 +0800
Committer: erha19 <fa...@gmail.com>
Committed: Mon Jul 24 17:05:36 2017 +0800

----------------------------------------------------------------------
 html5/test/render/vue/core/node.js | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/50329bb5/html5/test/render/vue/core/node.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/core/node.js b/html5/test/render/vue/core/node.js
index 562a9c7..ffd2355 100644
--- a/html5/test/render/vue/core/node.js
+++ b/html5/test/render/vue/core/node.js
@@ -25,9 +25,12 @@ import eventBubbleBundle from '../data/build/dotvue/event-bubble.js'
 
 init('core node', (Vue, helper) => {
   const id = 'test-event-bubble'
-
+  let vm = null
+  let el = null
   before(() => {
     helper.register('div', div)
+    vm = helper.createVm(eventBubbleBundle, id)
+    el = vm.$el.querySelector('.event-bubble-outter')
   })
 
   describe('stop event bubble', function () {
@@ -39,10 +42,7 @@ init('core node', (Vue, helper) => {
     }
 
     it('should trigger the closest parent.', function (done) {
-      const vm = helper.createVm(eventBubbleBundle, id)
-      const el = vm.$el.querySelector('.event-bubble-outter')
       expect(vm.tracker).to.equal('')
-
       /**
        * click outter div. should trigget event on the outter div.
        * and should execute handlers by the priority of:
@@ -60,9 +60,7 @@ init('core node', (Vue, helper) => {
     })
 
     it('should not bubble if already triggered.', function (done) {
-      const vm = helper.createVm(eventBubbleBundle, id)
       const inner = vm.$el.querySelector('.event-bubble-inner')
-
       /**
        * click inner div. should just trigget the inner handler and
        * shouldn't bubbe to outter div.


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

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

# Conflicts:
#	doc/source/cn/references/weex-variable.md
#	doc/source/references/weex-variable.md


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

Branch: refs/heads/dev
Commit: 75101d59ff2501a48852f68ffd0c2611ac2801ab
Parents: af71702 eb48b94
Author: zshshr <zh...@gmail.com>
Authored: Tue Aug 1 10:53:53 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Tue Aug 1 10:53:53 2017 +0800

----------------------------------------------------------------------
 README.md                                       |  51 +-
 WeexSDK.podspec                                 |   2 +-
 .../weex/extend/component/WXParallax.java       |   4 +-
 .../java/com/taobao/weex/WXEnvironment.java     |   4 +
 .../java/com/taobao/weex/WXSDKInstance.java     |  11 +-
 .../com/taobao/weex/bridge/WXBridgeManager.java |  12 +-
 .../java/com/taobao/weex/common/WXConfig.java   |   1 +
 .../com/taobao/weex/common/WXImageStrategy.java |   9 +-
 .../main/java/com/taobao/weex/dom/WXAttr.java   |  38 +-
 .../java/com/taobao/weex/dom/WXDomModule.java   |   1 -
 .../com/taobao/weex/dom/WXImageQuality.java     |   4 +-
 .../taobao/weex/dom/WXRecyclerDomObject.java    |   4 +
 .../com/taobao/weex/dom/WXTextDomObject.java    |   4 +-
 .../com/taobao/weex/dom/action/Actions.java     |   4 +-
 .../taobao/weex/ui/component/WXComponent.java   |  12 +-
 .../taobao/weex/ui/component/WXScroller.java    |  79 ++-
 .../com/taobao/weex/ui/component/WXSlider.java  |  10 +-
 .../ui/component/list/BasicListComponent.java   | 114 ++--
 .../taobao/weex/ui/component/list/WXCell.java   |   1 -
 .../weex/ui/component/list/WXListComponent.java |   9 +-
 .../weex/ui/view/WXHorizontalScrollView.java    |  27 +
 .../com/taobao/weex/ui/view/WXScrollView.java   |   1 -
 .../java/com/taobao/weex/dom/WXAttrTest.java    |  19 +-
 build/config.js                                 |   1 +
 build/karma.vue.conf.js                         |  16 +-
 build/webpack.examples.web.config.js            |   1 +
 build/webpack.test.web.config.js                |   1 +
 doc/source/cn/references/modules/meta.md        |  96 +++
 doc/source/cn/references/modules/timer.md       |  47 ++
 doc/source/cn/references/weex-variable.md       |   3 +-
 doc/source/references/modules/meta.md           |  97 +++
 doc/source/references/modules/timer.md          |  58 ++
 doc/source/references/weex-variable.md          |   3 +-
 examples/vue/components/input.vue               |  17 +
 examples/vue/hello.vue                          |   2 +-
 examples/vue/market/gcanvas.vue                 |  36 +-
 .../vue/components/scrollable/list/index.js     |   3 +-
 .../vue/components/scrollable/scroller.js       |   3 +-
 .../vue/components/scrollable/waterfall.js      |   3 +-
 .../render/vue/components/slider/slideMixin.js  |  17 +-
 html5/render/vue/core/node.js                   | 172 +++--
 html5/render/vue/core/style.js                  |  26 +-
 html5/render/vue/env/global.js                  |   2 +
 html5/render/vue/env/weex.js                    |   3 +
 html5/render/vue/env/wx-env.js                  |   2 +-
 html5/render/vue/mixins/base.js                 |  16 +-
 html5/render/vue/mixins/scrollable.js           |  18 +-
 html5/render/vue/mixins/style.js                |  58 +-
 html5/render/vue/modules/websocket/websocket.js |   2 +
 html5/render/vue/utils/event.js                 |   6 +-
 html5/render/vue/utils/func.js                  | 136 +++-
 html5/render/vue/utils/index.js                 | 104 ---
 html5/render/vue/utils/perf.js                  |   3 +-
 html5/render/vue/utils/style.js                 |  30 +-
 html5/shared/console.js                         |  10 +-
 html5/test/render/vue/core/node.js              |  32 +-
 html5/test/render/vue/core/scope-style-map.js   |   4 +
 .../render/vue/data/dotvue/event-bubble-bar.vue |  11 -
 .../render/vue/data/dotvue/event-bubble.vue     |  11 -
 html5/test/render/vue/helper/utils.js           |  10 +-
 html5/test/render/vue/modules/modal.js          | 225 +++++++
 html5/test/render/vue/modules/websocket.js      |  83 ++-
 html5/test/render/vue/utils/component.js        |  50 +-
 html5/test/render/vue/utils/event.js            |  78 +++
 html5/test/render/vue/utils/func.js             | 278 +++++++-
 html5/test/render/vue/utils/lazyload.js         | 106 +++
 html5/test/render/vue/utils/perf.js             | 132 ++++
 html5/test/render/vue/utils/style.js            | 157 ++++-
 html5/test/render/vue/utils/type.js             |  49 ++
 html5/test/render/vue/validator/index.js        |  31 +-
 ios/playground/Podfile                          |   2 +-
 .../WeexDemo.xcodeproj/project.pbxproj          |   4 +
 ios/playground/WeexDemo/WXDemoViewController.m  |   2 +-
 ios/sdk/WeexSDK-Dynamic/Info.plist              |  24 +
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       | 642 ++++++++++++++++++-
 .../xcschemes/WeexSDK-Dynamic.xcscheme          |  80 +++
 .../WeexSDK/Sources/Bridge/WXBridgeContext.h    |   2 +-
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    |  74 ++-
 ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m |  16 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |  35 +-
 .../Component/Recycler/WXRecyclerComponent.h    |   3 +-
 .../Component/Recycler/WXRecyclerComponent.m    |   5 +-
 .../Recycler/WXSectionDataController.h          |   2 +
 .../WeexSDK/Sources/Component/WXAComponent.m    |   2 +-
 .../Sources/Component/WXCanvasComponent.h       |   2 +-
 .../Sources/Component/WXCycleSliderComponent.m  |   6 +
 .../WeexSDK/Sources/Component/WXEditComponent.m |   4 +-
 .../Sources/Component/WXFooterComponent.h       |   2 +-
 .../Sources/Component/WXHeaderComponent.h       |   3 +-
 .../Sources/Component/WXImageComponent.m        |   5 +-
 .../WeexSDK/Sources/Component/WXListComponent.m |  60 +-
 .../Sources/Component/WXScrollerComponent.m     |   1 +
 .../WeexSDK/Sources/Component/WXTextComponent.m |  81 ++-
 ios/sdk/WeexSDK/Sources/Component/WXTransform.m |  24 +-
 .../Sources/Component/WXVideoComponent.m        |   2 +-
 .../WeexSDK/Sources/Component/WXWebComponent.m  |   2 +-
 .../Sources/Controller/WXRootViewController.m   |   1 +
 .../Sources/Display/WXComponent+BoxShadow.h     |   4 -
 ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h  |   1 +
 ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h |   2 +-
 ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m    |  10 +-
 .../WeexSDK/Sources/Events/WXComponent+Events.m |  19 +-
 .../Sources/Handler/WXURLRewriteDefaultImpl.m   |   2 +-
 .../WeexSDK/Sources/Layout/WXComponent+Layout.m |   3 +-
 .../Sources/Manager/WXComponentManager.h        |   3 +
 .../Sources/Manager/WXComponentManager.m        |   6 +-
 ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m |   2 +-
 .../WeexSDK/Sources/Manager/WXServiceFactory.h  |   2 +-
 .../WeexSDK/Sources/Manager/WXTracingManager.h  | 126 ++++
 .../WeexSDK/Sources/Manager/WXTracingManager.m  | 384 +++++++++++
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |   5 +-
 .../WeexSDK/Sources/Model/WXJSExceptionInfo.h   |   1 +
 .../WeexSDK/Sources/Model/WXJSExceptionInfo.m   |   1 +
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |  13 +-
 .../WeexSDK/Sources/Module/WXAnimationModule.m  |  15 +-
 ios/sdk/WeexSDK/Sources/Module/WXDomModule.m    |  28 +-
 ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m |  11 +-
 ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m |   2 +-
 .../WeexSDK/Sources/Module/WXWebSocketModule.h  |   1 -
 .../WeexSDK/Sources/Module/WXWebSocketModule.m  |   1 +
 .../WeexSDK/Sources/Protocol/WXBridgeProtocol.h |   5 +
 .../Sources/Protocol/WXURLRewriteProtocol.h     |   2 +-
 ios/sdk/WeexSDK/Sources/Utility/WXDefine.h      |   2 +-
 ios/sdk/WeexSDK/Sources/Utility/WXLog.m         |   8 +
 ios/sdk/WeexSDK/Sources/Utility/WXUtility.h     |   2 -
 ios/sdk/WeexSDK/Sources/Utility/WXUtility.m     |  16 +-
 .../View/WXComponent+PseudoClassManagement.h    |   4 +-
 .../Sources/View/WXComponent+ViewManagement.m   |   7 +-
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |   1 +
 ios/sdk/WeexSDKTests/WXAnimationModuleTests.m   |  29 +
 ios/sdk/buildScripts.sh                         |   2 +
 package.json                                    |   8 +-
 packages/weex-vue-render/package.json           |   8 +-
 pre-build/native-bundle-main.js                 |  16 +-
 134 files changed, 3833 insertions(+), 675 deletions(-)
----------------------------------------------------------------------



[39/50] [abbrv] incubator-weex git commit: + [ios] support muti instance show

Posted by zs...@apache.org.
+ [ios] support muti instance show


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

Branch: refs/heads/dev
Commit: 816e1d553d1fb4e2ab981c2d02e593c38aea64ac
Parents: faaa8f8
Author: 齐山 <su...@163.com>
Authored: Wed Jul 26 13:01:52 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Wed Jul 26 13:01:52 2017 +0800

----------------------------------------------------------------------
 .../WeexSDK/Sources/Manager/WXTracingManager.h    | 15 ++++++++-------
 .../WeexSDK/Sources/Manager/WXTracingManager.m    | 18 ++++++++++--------
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m     |  4 ++--
 ios/sdk/WeexSDK/Sources/Utility/WXLog.m           |  9 ++++++++-
 4 files changed, 28 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/816e1d55/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
index 632d712..f2becd2 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
@@ -21,17 +21,17 @@
 #import "WXSDKInstance.h"
 
 #define WXTNetworkHanding          @"loadjs"
-#define WXTExecJS          @"execjs"
-#define WXTJSCall          @"jsCall"
-#define WXTRender          @"render"
-#define WXTRenderFinish          @"RenderFinish"
+#define WXTExecJS                  @"execjs"
+#define WXTJSCall                  @"jsCall"
+#define WXTRender                  @"render"
+#define WXTRenderFinish            @"RenderFinish"
 
 #define WXTracingBegin             @"B"
 #define WXTracingEnd               @"E"
 #define WXTracingDuration          @"D"
-#define WXTracingInstant          @"i"
+#define WXTracingInstant           @"i"
 
-#define WXTracingDurationDefault 0
+#define WXTracingDurationDefault   0
 
 typedef enum : NSUInteger {
     // global
@@ -62,6 +62,7 @@ typedef enum : NSUInteger {
 @property (nonatomic, copy) NSString *fName; // functionName
 @property (nonatomic, copy) NSString *iid; // instance id
 @property (nonatomic, copy) NSString *parentId;// parent event id
+@property (nonatomic, copy) NSString *bundleUrl;
 -(NSDictionary *)dictionary;
 @end
 
@@ -103,7 +104,7 @@ typedef enum : NSUInteger {
  *  @discusstion  fetch tracing data
  *  @return  the tracing data
  */
-+(WXTracingTask*)getTracingData;
++(NSMutableDictionary*)getTracingData;
 
 /**
  *  @discusstion  clear tracing data

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/816e1d55/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
index eb51b7e..beb401b 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
@@ -93,6 +93,11 @@
             [[WXTracingManager sharedInstance].tracingTasks setObject:task forKey:tracing.iid];
         }
         WXTracingTask *task = [[WXTracingManager sharedInstance].tracingTasks objectForKey:tracing.iid];
+        if(task.bundleUrl.length == 0){
+            if(tracing.bundleUrl.length>0){
+                task.bundleUrl = tracing.bundleUrl;
+            }
+        }
         if(!task.tracings){
             task.tracings = [NSMutableArray new];
         }
@@ -172,6 +177,9 @@
         if(options && options[@"parentRef"]){
             tracing.parentRef = options[@"parentRef"];
         }
+        if(options && options[@"bundleUrl"]){
+            tracing.bundleUrl = options[@"bundleUrl"];
+        }
         [self startTracing:tracing];
     }
 }
@@ -312,18 +320,12 @@
     [task.tracings addObject:tracing];
 }
 
-+(WXTracingTask *)getTracingData
++(NSMutableDictionary *)getTracingData
 {
     if(![self isTracing]){
         return nil;
     }
-    NSArray *instanceIds = [[WXSDKManager bridgeMgr] getInstanceIdStack];
-    WXTracingTask *task = [[WXTracingManager sharedInstance].tracingTasks objectForKey:[instanceIds firstObject]];
-    NSMutableArray *ary = [NSMutableArray new];
-    for (WXTracing *tracing in task.tracings) {
-        [ary addObject:[tracing dictionary]];
-    }
-    return task;
+    return [WXTracingManager sharedInstance].tracingTasks;
 }
 
 +(NSDictionary *)getTacingApi

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/816e1d55/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 0ae2a69..579138b 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -147,7 +147,7 @@ typedef enum : NSUInteger {
     
     WXResourceRequest *request = [WXResourceRequest requestWithURL:url resourceType:WXResourceTypeMainBundle referrer:@"" cachePolicy:NSURLRequestUseProtocolCachePolicy];
     [self _renderWithRequest:request options:options data:data];
-    [WXTracingManager startTracingWithInstanceId:self.instanceId ref:nil className:nil name:WXTNetworkHanding phase:WXTracingBegin functionName:@"renderWithURL" options:nil];
+    [WXTracingManager startTracingWithInstanceId:self.instanceId ref:nil className:nil name:WXTNetworkHanding phase:WXTracingBegin functionName:@"renderWithURL" options:@{@"bundleUrl":url?[url absoluteString]:@""}];
 }
 
 - (void)renderView:(NSString *)source options:(NSDictionary *)options data:(id)data
@@ -202,7 +202,7 @@ typedef enum : NSUInteger {
     
     [[WXSDKManager bridgeMgr] createInstance:self.instanceId template:mainBundleString options:dictionary data:_jsData];
     
-    [WXTracingManager startTracingWithInstanceId:self.instanceId ref:nil className:nil name:WXTExecJS phase:WXTracingBegin functionName:@"renderWithMainBundleString" options:nil];
+    [WXTracingManager startTracingWithInstanceId:self.instanceId ref:nil className:nil name:WXTExecJS phase:WXTracingBegin functionName:@"renderWithMainBundleString" options:@{@"bundleUrl":self.scriptURL?[self.scriptURL absoluteString]:@""}];
     
     WX_MONITOR_PERF_SET(WXPTBundleSize, [mainBundleString lengthOfBytesUsingEncoding:NSUTF8StringEncoding], self);
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/816e1d55/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXLog.m b/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
index dd6794d..ae85c7b 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
@@ -85,7 +85,14 @@ static id<WXLogProtocol> _externalLog;
         
         [[WXSDKManager bridgeMgr] resetEnvironment];
     }
-    
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+    Class propertyClass = NSClassFromString(@"WXTracingViewControllerManager");
+    SEL sel =NSSelectorFromString(@"loadTracingView");
+    if(propertyClass && [propertyClass respondsToSelector:sel]){
+        [propertyClass performSelector:sel];
+    }
+#pragma clang diagnostic pop
 }
 
 + (WXLogLevel)logLevel


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

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

Branch: refs/heads/dev
Commit: ee9b1c7d2c5f6aabb3b2d9c6aa3be513dab44f87
Parents: 486d683 b1ced32
Author: 齐山 <su...@163.com>
Authored: Wed Jul 26 14:46:19 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Wed Jul 26 14:46:19 2017 +0800

----------------------------------------------------------------------
 pre-build/native-bundle-main.js | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------



[14/50] [abbrv] incubator-weex git commit: Merge branch '0.15-dev' of http://gitlab.alibaba-inc.com/weex/weex into 0.15-dev

Posted by zs...@apache.org.
Merge branch '0.15-dev' of http://gitlab.alibaba-inc.com/weex/weex into 0.15-dev

* '0.15-dev' of http://gitlab.alibaba-inc.com/weex/weex: (57 commits)
  * [android] fix illegal value in scroll event for list
  * [html5] update code formate
  * [html5] improve validater/index.js unit test case
  * [html5] fix copy right error
  * [html5] dispatch some event
  * [html5] fix collectStat test case
  * [html5] improve style unit test case
  * [html5] update function interface formate
  * [html5] improve unit test case
  * [html5] formate code style @notdanger
  * [html5] update style unit test case @notdanger
  * [html5] update to eslint formate @notdanger
  * [html5] improve style unit test case @notdanger
  * [html5] add copy right header@notdanger
  * [html5] fix component visible case
  * [html5] eslint formate for component
  * [html5] rebuild perf unit test code
  * [html5] improve component unit test case
  * [html5] improve lazyload unit test case
  * [html5] change code formate
  ...


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

Branch: refs/heads/dev
Commit: 92a1616b29468c3c8d2887e929749604c665f7c4
Parents: 1263066 9764e25
Author: zshshr <zh...@gmail.com>
Authored: Fri Jul 21 11:23:34 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Fri Jul 21 11:23:34 2017 +0800

----------------------------------------------------------------------
 .../ui/component/list/BasicListComponent.java   |  66 ++---
 .../taobao/weex/ui/component/list/WXCell.java   |  10 -
 build/config.js                                 |   1 +
 build/karma.vue.conf.js                         |   7 +
 html5/render/vue/modules/websocket/websocket.js |   1 +
 html5/render/vue/utils/event.js                 |   6 +-
 html5/render/vue/utils/func.js                  | 136 +++++++--
 html5/render/vue/utils/index.js                 | 104 -------
 html5/render/vue/utils/perf.js                  |   3 +-
 html5/test/render/vue/modules/websocket.js      |  90 +++---
 html5/test/render/vue/utils/component.js        |  50 +++-
 html5/test/render/vue/utils/event.js            |  78 ++++++
 html5/test/render/vue/utils/func.js             | 278 +++++++++++++++++--
 html5/test/render/vue/utils/lazyload.js         | 106 +++++++
 html5/test/render/vue/utils/perf.js             | 132 +++++++++
 html5/test/render/vue/utils/style.js            | 157 +++++++++--
 html5/test/render/vue/utils/type.js             |  49 ++++
 html5/test/render/vue/validator/index.js        |  31 ++-
 18 files changed, 1011 insertions(+), 294 deletions(-)
----------------------------------------------------------------------



[03/50] [abbrv] incubator-weex git commit: + [ios] provide isTracing method

Posted by zs...@apache.org.
+ [ios] provide isTracing 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/82e5421f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/82e5421f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/82e5421f

Branch: refs/heads/dev
Commit: 82e5421f6224ebd5364ac14d81dba0ce4850128e
Parents: 26c36c9
Author: 齐山 <su...@163.com>
Authored: Wed Jul 19 16:40:19 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Wed Jul 19 16:40:19 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/82e5421f/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
index 37e4d28..22d0286 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
@@ -74,6 +74,7 @@ typedef enum : NSUInteger {
 @end
 
 @interface WXTracingManager : NSObject
++(BOOL)isTracing;
 +(void)switchTracing:(BOOL)isTracing;
 +(void)startTracing:(NSString *)iid ref:(NSString*)ref parentRef:(NSString*)parentRef className:(NSString *)className name:(NSString *)name ph:(NSString *)ph fName:(NSString *)fName parentId:(NSString *)parentId;
 +(WXTracingTask*)getTracingData;


[16/50] [abbrv] incubator-weex git commit: + [ios] update tracing duration default value@notdanger

Posted by zs...@apache.org.
+ [ios] update tracing duration default value@notdanger


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

Branch: refs/heads/dev
Commit: 82c355958de97415902b383e368e1178a7199f7f
Parents: 45b6b48
Author: 齐山 <su...@163.com>
Authored: Fri Jul 21 16:41:00 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Fri Jul 21 16:41:00 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/82c35595/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
index e4ee462..9643a00 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
@@ -31,7 +31,7 @@
 #define WXTracingDuration          @"D"
 #define WXTracingInstant          @"i"
 
-#define WXTracingDurationDefault -1
+#define WXTracingDurationDefault 0
 
 typedef enum : NSUInteger {
     // global


[40/50] [abbrv] incubator-weex git commit: + [ios] add create finish

Posted by zs...@apache.org.
+ [ios] add create finish


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

Branch: refs/heads/dev
Commit: 486d6833f9929562b154a10524ba75380b27eb7c
Parents: 816e1d5
Author: 齐山 <su...@163.com>
Authored: Wed Jul 26 14:30:57 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Wed Jul 26 14:30:57 2017 +0800

----------------------------------------------------------------------
 ios/playground/WeexDemo/WXDemoViewController.m  |  1 -
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    | 22 ++++++++++++++++++++
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m | 14 +++++++++++++
 .../Sources/Manager/WXComponentManager.m        |  1 +
 .../WeexSDK/Sources/Protocol/WXBridgeProtocol.h |  5 +++++
 5 files changed, 42 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/486d6833/ios/playground/WeexDemo/WXDemoViewController.m
----------------------------------------------------------------------
diff --git a/ios/playground/WeexDemo/WXDemoViewController.m b/ios/playground/WeexDemo/WXDemoViewController.m
index c77650b..81a2dae 100644
--- a/ios/playground/WeexDemo/WXDemoViewController.m
+++ b/ios/playground/WeexDemo/WXDemoViewController.m
@@ -146,7 +146,6 @@
     
     _instance.renderFinish = ^(UIView *view) {
          WXLogDebug(@"%@", @"Render Finish...");
-        [WXTracingManager startTracingWithInstanceId:weakSelf.instance.instanceId ref:nil className:nil name:nil phase:WXTracingInstant functionName:WXTRenderFinish options:nil];
         [weakSelf updateInstanceState:WeexInstanceAppear];
     };
     

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/486d6833/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
index 526f64c..f04a0db 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
@@ -294,6 +294,28 @@ _Pragma("clang diagnostic pop") \
         return 0;
     }];
     
+    [_jsBridge registerCallCreateFinish:^NSInteger(NSString *instanceId) {
+        
+        // Temporary here , in order to improve performance, will be refactored next version.
+        WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
+        
+        if(![weakSelf checkInstance:instance]) {
+            return -1;
+        }
+        
+        WXPerformBlockOnComponentThread(^{
+            WXComponentManager *manager = instance.componentManager;
+            if (!manager.isValid) {
+                return;
+            }
+            [manager startComponentTasks];
+            [manager createFinish];
+            [WXTracingManager startTracingWithInstanceId:instanceId ref:nil className:nil name:WXTJSCall phase:WXTracingEnd functionName:@"createFinish" options:nil];
+        });
+        
+        return 0;
+    }];
+    
     [_jsBridge registerCallNativeModule:^NSInvocation*(NSString *instanceId, NSString *moduleName, NSString *methodName, NSArray *arguments, NSDictionary *options) {
         
         WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/486d6833/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
index 3bd0b07..13d8578 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
@@ -326,6 +326,20 @@
     
     _jsContext[@"callRemoveEvent"] = WXJSCallRemoveEventBlock;
 }
+    
+- (void)registerCallCreateFinish:(WXJSCallCreateFinish)callCreateFinish
+{
+    id WXJSCallCreateFinishBlock = ^(JSValue *instanceId, JSValue *ifCallback) {
+            
+        NSString *instanceIdString = [instanceId toString];
+        
+        WXLogDebug(@"callRCreateFinish...%@", instanceIdString);
+        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:nil className:nil name:WXTJSCall phase:WXTracingBegin functionName:@"createFinish" options:nil];
+        return [JSValue valueWithInt32:(int32_t)callCreateFinish(instanceIdString) inContext:[JSContext currentContext]];
+    };
+        
+    _jsContext[@"callCreateFinish"] = WXJSCallCreateFinishBlock;
+}
 
 - (void)registerCallNativeModule:(WXJSCallNativeModule)callNativeModuleBlock
 {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/486d6833/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 ea2d4a8..e1774dd 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
@@ -519,6 +519,7 @@ static css_node_t * rootNodeGetChild(void *context, int i)
         WX_MONITOR_SUCCESS(WXMTNativeRender);
         
         if(instance.renderFinish){
+            [WXTracingManager startTracingWithInstanceId:instance.instanceId ref:nil className:nil name:nil phase:WXTracingInstant functionName:WXTRenderFinish options:nil];
             instance.renderFinish(rootView);
         }
     }];

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/486d6833/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h
index 7cf115f..e883b20 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h
@@ -28,6 +28,7 @@ typedef NSInteger(^WXJSCallUpdateAttrs)(NSString *instanceId,NSString *ref,NSDic
 typedef NSInteger(^WXJSCallUpdateStyle)(NSString *instanceId,NSString *ref,NSDictionary *stylesData);
 typedef NSInteger(^WXJSCallAddEvent)(NSString *instanceId,NSString *ref,NSString *event);
 typedef NSInteger(^WXJSCallRemoveEvent)(NSString *instanceId,NSString *ref,NSString *event);
+typedef NSInteger(^WXJSCallCreateFinish)(NSString *instanceId);
 typedef NSInvocation *(^WXJSCallNativeModule)(NSString *instanceId, NSString *moduleName, NSString *methodName, NSArray *args, NSDictionary *options);
 typedef void (^WXJSCallNativeComponent)(NSString *instanceId, NSString *componentRef, NSString *methodName, NSArray *args, NSDictionary *options);
 
@@ -110,6 +111,10 @@ typedef void (^WXJSCallNativeComponent)(NSString *instanceId, NSString *componen
  */
 - (void)registerCallRemoveEvent:(WXJSCallRemoveEvent)callRemoveEvent;
 /**
+ * Register callback when createFinish tasks occur
+*/
+- (void)registerCallCreateFinish:(WXJSCallCreateFinish)callCreateFinish;
+/**
  * Register callback for global js function `callNativeModule`
  */
 - (void)registerCallNativeModule:(WXJSCallNativeModule)callNativeModuleBlock;


[10/50] [abbrv] incubator-weex git commit: + [ios] update tracing

Posted by zs...@apache.org.
+ [ios] update tracing


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

Branch: refs/heads/dev
Commit: 8c755b12122dc6a5bdd7c84c1320644dae50e825
Parents: af8c97d
Author: 齐山 <su...@163.com>
Authored: Thu Jul 20 14:06:15 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Thu Jul 20 14:06:15 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/8c755b12/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
index e5bfb65..f84dc8f 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
@@ -222,6 +222,7 @@
     if(![WXTJSCall isEqualToString:tracing.name]){
         tracing.className = [self getclassName:tracing];
     }
+    
     if([WXTNetworkHanding isEqualToString:task.tag]){
         if([WXTExecJS isEqualToString:tracing.name]){
             NSMutableArray *tracings = task.tracings;
@@ -260,8 +261,8 @@
             task.tag = WXTRender;
         }
     }
-    if([WXTracingEnd isEqualToString:tracing.ph]){  // deal end
-        
+    
+    if([WXTracingBegin isEqualToString:tracing.ph]){
         if(tracing.ref.length>0){
             WXPerformBlockOnComponentThread(^{
                 WXSDKInstance *instance = [WXSDKManager instanceForID:task.iid];
@@ -271,8 +272,9 @@
                     task.bundleUrl = [instance.scriptURL absoluteString];
                 }
             });
-            
         }
+    }
+    if([WXTracingEnd isEqualToString:tracing.ph]){  // deal end
         NSMutableArray *tracings = task.tracings;
         [tracings enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(WXTracing *bTracing, NSUInteger idx, BOOL *stop) {
             if(tracing.ref.length > 0 && bTracing.ref.length>0){
@@ -286,8 +288,8 @@
                 if(bTracing.ref.length > 0){
                     tracing.ref = bTracing.ref;
                 }
-                if(tracing.parentRef.length > 0){
-                    bTracing.parentRef = tracing.parentRef;
+                if(bTracing.parentRef.length > 0){
+                    tracing.parentRef = bTracing.parentRef;
                 }
                 tracing.duration = tracing.ts - bTracing.ts ;
                 tracing.traceId = bTracing.traceId;
@@ -351,7 +353,6 @@
         [dict setObject:moduleArray forKey:@"module"];
     }
     
-    
     NSDictionary *handleConfigs = [[WXHandlerFactory handlerConfigs] mutableCopy];
     void (^handleBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
         NSMutableDictionary *subDict = [NSMutableDictionary new];


[15/50] [abbrv] incubator-weex git commit: + [ios] add comment for tracing api

Posted by zs...@apache.org.
+ [ios] add comment for tracing api


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

Branch: refs/heads/dev
Commit: 45b6b48495fa1e679784730c781087673b8ac17e
Parents: 8c755b1
Author: 齐山 <su...@163.com>
Authored: Fri Jul 21 15:18:37 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Fri Jul 21 15:18:37 2017 +0800

----------------------------------------------------------------------
 ios/playground/WeexDemo/WXDemoViewController.m  |  2 +-
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    | 20 +++++-----
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m | 18 ++++-----
 .../WeexSDK/Sources/Manager/WXTracingManager.h  | 42 +++++++++++++++++++-
 .../WeexSDK/Sources/Manager/WXTracingManager.m  | 39 ++++++++++++------
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |  2 +-
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |  4 +-
 ios/sdk/WeexSDK/Sources/Module/WXDomModule.m    |  4 +-
 .../Sources/View/WXComponent+ViewManagement.m   |  2 +-
 9 files changed, 93 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/45b6b484/ios/playground/WeexDemo/WXDemoViewController.m
----------------------------------------------------------------------
diff --git a/ios/playground/WeexDemo/WXDemoViewController.m b/ios/playground/WeexDemo/WXDemoViewController.m
index d443418..c77650b 100644
--- a/ios/playground/WeexDemo/WXDemoViewController.m
+++ b/ios/playground/WeexDemo/WXDemoViewController.m
@@ -146,7 +146,7 @@
     
     _instance.renderFinish = ^(UIView *view) {
          WXLogDebug(@"%@", @"Render Finish...");
-        [WXTracingManager startTracing:weakSelf.instance.instanceId ref:nil parentRef:nil className:nil name:nil ph:WXTracingInstant fName:WXTRenderFinish parentId:nil];
+        [WXTracingManager startTracingWithInstanceId:weakSelf.instance.instanceId ref:nil className:nil name:nil phase:WXTracingInstant functionName:WXTRenderFinish options:nil];
         [weakSelf updateInstanceState:WeexInstanceAppear];
     };
     

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/45b6b484/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
index 1f0b5aa..1c1aac4 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
@@ -121,7 +121,7 @@ _Pragma("clang diagnostic pop") \
         }
         
         WXPerformBlockOnComponentThread(^{
-            [WXTracingManager startTracing:instanceId ref:elementData[@"ref"] parentRef:nil className:nil name:WXTJSCall ph:WXTracingEnd fName:@"addElement" parentId:nil];
+            [WXTracingManager startTracingWithInstanceId:instanceId ref:elementData[@"ref"] className:nil name:WXTJSCall phase:WXTracingEnd functionName:@"addElement" options:nil];
             WXComponentManager *manager = instance.componentManager;
             if (!manager.isValid) {
                 return;
@@ -150,7 +150,7 @@ _Pragma("clang diagnostic pop") \
             }
             [manager startComponentTasks];
             [manager createRoot:bodyData];
-            [WXTracingManager startTracing:instanceId ref:bodyData[@"ref"] parentRef:nil className:nil name:WXTJSCall ph:WXTracingEnd fName:@"createBody" parentId:nil];
+            [WXTracingManager startTracingWithInstanceId:instanceId ref:bodyData[@"ref"] className:nil name:WXTJSCall phase:WXTracingEnd functionName:@"createBody" options:nil];
         });
         
         return 0;
@@ -173,7 +173,7 @@ _Pragma("clang diagnostic pop") \
             }
             [manager startComponentTasks];
             [manager removeComponent:ref];
-            [WXTracingManager startTracing:instanceId ref:ref parentRef:nil className:nil name:WXTJSCall ph:WXTracingEnd fName:@"removeElement" parentId:nil];
+            [WXTracingManager startTracingWithInstanceId:instanceId ref:ref className:nil name:WXTJSCall phase:WXTracingEnd functionName:@"removeElement" options:nil];
         });
         
         return 0;
@@ -196,7 +196,7 @@ _Pragma("clang diagnostic pop") \
             }
             [manager startComponentTasks];
             [manager moveComponent:ref toSuper:parentRef atIndex:index];
-            [WXTracingManager startTracing:instanceId ref:ref parentRef:nil className:nil name:WXTJSCall ph:WXTracingEnd fName:@"moveElement" parentId:nil];
+            [WXTracingManager startTracingWithInstanceId:instanceId ref:ref className:nil name:WXTJSCall phase:WXTracingEnd functionName:@"moveElement" options:nil];
         });
         
         return 0;
@@ -219,7 +219,7 @@ _Pragma("clang diagnostic pop") \
             }
             [manager startComponentTasks];
             [manager updateAttributes:attrsData forComponent:ref];
-            [WXTracingManager startTracing:instanceId ref:ref parentRef:nil className:nil name:WXTJSCall ph:WXTracingEnd fName:@"updateAttrs" parentId:nil];
+            [WXTracingManager startTracingWithInstanceId:instanceId ref:ref className:nil name:WXTJSCall phase:WXTracingEnd functionName:@"updateAttrs" options:nil];
         });
         
         return 0;
@@ -242,7 +242,7 @@ _Pragma("clang diagnostic pop") \
             }
             [manager startComponentTasks];
             [manager updateStyles:stylesData forComponent:ref];
-            [WXTracingManager startTracing:instanceId ref:ref parentRef:nil className:nil name:WXTJSCall ph:WXTracingEnd fName:@"updateStyles" parentId:nil];
+            [WXTracingManager startTracingWithInstanceId:instanceId ref:ref className:nil name:WXTJSCall phase:WXTracingEnd functionName:@"updateStyles" options:nil];
         });
         
         return 0;
@@ -265,7 +265,7 @@ _Pragma("clang diagnostic pop") \
             }
             [manager startComponentTasks];
             [manager addEvent:event toComponent:ref];
-            [WXTracingManager startTracing:instanceId ref:ref parentRef:nil className:nil name:WXTJSCall ph:WXTracingEnd fName:@"addEvent" parentId:nil];
+            [WXTracingManager startTracingWithInstanceId:instanceId ref:ref className:nil name:WXTJSCall phase:WXTracingEnd functionName:@"addEvent" options:nil];
         });
         
         return 0;
@@ -288,7 +288,7 @@ _Pragma("clang diagnostic pop") \
             }
             [manager startComponentTasks];
             [manager removeEvent:event fromComponent:ref];
-            [WXTracingManager startTracing:instanceId ref:ref parentRef:nil className:nil name:WXTJSCall ph:WXTracingEnd fName:@"removeEvent" parentId:nil];
+            [WXTracingManager startTracingWithInstanceId:instanceId ref:ref className:nil name:WXTJSCall phase:WXTracingEnd functionName:@"removeEvent" options:nil];
         });
         
         return 0;
@@ -371,11 +371,11 @@ _Pragma("clang diagnostic pop") \
             NSString *ref = task[@"ref"];
             WXComponentMethod *method = [[WXComponentMethod alloc] initWithComponentRef:ref methodName:methodName arguments:arguments instance:instance];
             [method invoke];
-            [WXTracingManager startTracing:instanceId ref:task[@"ref"] parentRef:nil className:nil name:task[@"component"] ph:WXTracingBegin fName:task[@"method"] parentId:task[@"method"]];
+            [WXTracingManager startTracingWithInstanceId:instanceId ref:task[@"ref"] className:nil name:task[@"component"] phase:WXTracingBegin functionName:task[@"method"] options:nil];
         } else {
             NSString *moduleName = task[@"module"];
             WXModuleMethod *method = [[WXModuleMethod alloc] initWithModuleName:moduleName methodName:methodName arguments:arguments instance:instance];
-            [WXTracingManager startTracing:instanceId ref:nil parentRef:nil className:nil name:task[@"module"] ph:WXTracingBegin fName:task[@"method"] parentId:nil];
+            [WXTracingManager startTracingWithInstanceId:instanceId ref:nil className:nil name:task[@"module"] phase:WXTracingBegin functionName:task[@"method"] options:nil];
             [method invoke];
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/45b6b484/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
index 686544f..b65a76f 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
@@ -207,7 +207,7 @@
         NSDictionary *componentData = [element toDictionary];
         NSString *parentRef = [ref toString];
         NSInteger insertIndex = [[index toNumber] integerValue];
-        [WXTracingManager startTracing:instanceIdString ref:componentData[@"ref"] parentRef:parentRef className:nil name:WXTJSCall ph:WXTracingBegin fName:@"addElement" parentId:nil];
+        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:componentData[@"ref"] className:nil name:WXTJSCall phase:WXTracingBegin functionName:@"addElement" options:nil];
          WXLogDebug(@"callAddElement...%@, %@, %@, %ld", instanceIdString, parentRef, componentData, (long)insertIndex);
         
         return [JSValue valueWithInt32:(int32_t)callAddElement(instanceIdString, parentRef, componentData, insertIndex) inContext:[JSContext currentContext]];
@@ -224,7 +224,7 @@
         NSDictionary *bodyData = [body toDictionary];
         
         WXLogDebug(@"callCreateBody...%@, %@,", instanceIdString, bodyData);
-        [WXTracingManager startTracing:instanceIdString ref:bodyData[@"ref"] parentRef:nil className:nil name:WXTJSCall ph:WXTracingBegin fName:@"createBody" parentId:nil];
+        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:bodyData[@"ref"] className:nil name:WXTJSCall phase:WXTracingBegin functionName:@"createBody" options:nil];
         return [JSValue valueWithInt32:(int32_t)callCreateBody(instanceIdString, bodyData) inContext:[JSContext currentContext]];
     };
     
@@ -239,7 +239,7 @@
         NSString *refString = [ref toString];
         
         WXLogDebug(@"callRemoveElement...%@, %@,", instanceIdString, refString);
-        [WXTracingManager startTracing:instanceIdString ref:nil parentRef:nil className:nil name:WXTJSCall ph:WXTracingBegin fName:@"removeElement" parentId:nil];
+        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:nil className:nil name:WXTJSCall phase:WXTracingBegin functionName:@"removeElement" options:nil];
         return [JSValue valueWithInt32:(int32_t)callRemoveElement(instanceIdString, refString) inContext:[JSContext currentContext]];
     };
     
@@ -256,7 +256,7 @@
         NSInteger moveIndex = [[index toNumber] integerValue];
         
         WXLogDebug(@"callAddElement...%@, %@,", instanceIdString, refString);
-        [WXTracingManager startTracing:instanceIdString ref:refString parentRef:nil className:nil name:WXTJSCall ph:WXTracingBegin fName:@"moveElement" parentId:nil];
+        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:refString className:nil name:WXTJSCall phase:WXTracingBegin functionName:@"moveElement" options:nil];
         return [JSValue valueWithInt32:(int32_t)callMoveElement(instanceIdString, refString,parentRefString,moveIndex) inContext:[JSContext currentContext]];
     };
     
@@ -272,7 +272,7 @@
         NSDictionary *attrsData = [attrs toDictionary];
         
         WXLogDebug(@"callUpdateAttrs...%@, %@, %@", instanceIdString, refString,attrsData);
-        [WXTracingManager startTracing:instanceIdString ref:refString parentRef:nil className:nil name:WXTJSCall ph:WXTracingBegin fName:@"updateAttrs" parentId:nil];
+        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:refString className:nil name:WXTJSCall phase:WXTracingBegin functionName:@"updateAttrs" options:nil];
         return [JSValue valueWithInt32:(int32_t)callUpdateAttrs(instanceIdString, refString,attrsData) inContext:[JSContext currentContext]];
     };
     
@@ -288,7 +288,7 @@
         NSDictionary *stylessData = [styles toDictionary];
         
         WXLogDebug(@"callUpdateStyle...%@, %@, %@", instanceIdString, refString,stylessData);
-        [WXTracingManager startTracing:instanceIdString ref:refString parentRef:nil className:nil name:WXTJSCall ph:WXTracingBegin fName:@"updateStyle" parentId:nil];
+        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:refString className:nil name:WXTJSCall phase:WXTracingBegin functionName:@"updateStyle" options:nil];
         return [JSValue valueWithInt32:(int32_t)callUpdateStyle(instanceIdString, refString,stylessData) inContext:[JSContext currentContext]];
     };
     
@@ -304,7 +304,7 @@
         NSString *eventString = [event toString];
         
         WXLogDebug(@"callAddEvent...%@, %@, %@", instanceIdString, refString,eventString);
-        [WXTracingManager startTracing:instanceIdString ref:refString parentRef:nil className:nil name:WXTJSCall ph:WXTracingBegin fName:@"addEvent" parentId:nil];
+        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:refString className:nil name:WXTJSCall phase:WXTracingBegin functionName:@"addEvent" options:nil];
         return [JSValue valueWithInt32:(int32_t)callAddEvent(instanceIdString, refString,eventString) inContext:[JSContext currentContext]];
     };
     
@@ -320,7 +320,7 @@
         NSString *eventString = [event toString];
         
         WXLogDebug(@"callRemoveEvent...%@, %@, %@", instanceIdString, refString,eventString);
-        [WXTracingManager startTracing:instanceIdString ref:refString parentRef:nil className:nil name:WXTJSCall ph:WXTracingBegin fName:@"removeEvent" parentId:nil];
+        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:refString className:nil name:WXTJSCall phase:WXTracingBegin functionName:@"removeEvent" options:nil];
         return [JSValue valueWithInt32:(int32_t)callRemoveEvent(instanceIdString, refString,eventString) inContext:[JSContext currentContext]];
     };
     
@@ -340,7 +340,7 @@
         
         NSInvocation *invocation = callNativeModuleBlock(instanceIdString, moduleNameString, methodNameString, argsArray, optionsDic);
         JSValue *returnValue = [JSValue wx_valueWithReturnValueFromInvocation:invocation inContext:[JSContext currentContext]];
-        [WXTracingManager startTracing:instanceIdString ref:nil parentRef:nil className:nil name:moduleNameString ph:WXTracingInstant fName:methodNameString parentId:nil];
+        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:nil className:nil name:moduleNameString phase:WXTracingInstant functionName:methodNameString options:nil];
         return returnValue;
     };
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/45b6b484/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
index 3a40b2b..e4ee462 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
@@ -31,6 +31,8 @@
 #define WXTracingDuration          @"D"
 #define WXTracingInstant          @"i"
 
+#define WXTracingDurationDefault -1
+
 typedef enum : NSUInteger {
     // global
     WXTracingNetworkHanding = 0,
@@ -75,11 +77,49 @@ typedef enum : NSUInteger {
 @end
 
 @interface WXTracingManager : NSObject
+
+/**
+ *  @discusstion  weex perfermance  tracing state
+ *  @return isTracing , NO in the release environment.
+ */
 +(BOOL)isTracing;
+/**
+ *  @discusstion  set weex perfermance  tracing state
+ *  @param isTracing , YES weex will be traced, NO weex will not be traced in DEBUG environment.
+ */
 +(void)switchTracing:(BOOL)isTracing;
-+(void)startTracing:(NSString *)iid ref:(NSString*)ref parentRef:(NSString*)parentRef className:(NSString *)className name:(NSString *)name ph:(NSString *)ph fName:(NSString *)fName parentId:(NSString *)parentId;
+/**
+ *  @discusstion  weex perfermance  tracing state
+ *  @param iid, the instance id.
+ *  @param ref, the component ref
+ *  @param className, the module or component class name
+ *  @param name,  the module or component name
+ *  @param phase, the trace phase
+ *  @param functionName, function name
+ *  @param options, the optional refer:support ts,duration,parentRef
+ */
++(void)startTracingWithInstanceId:(NSString *)iid ref:(NSString*)ref className:(NSString *)className name:(NSString *)name phase:(NSString *)phase functionName:(NSString *)functionName options:(NSDictionary *)options;
+/**
+ *  @discusstion  fetch tracing data
+ *  @return  the tracing data
+ */
 +(WXTracingTask*)getTracingData;
+
+/**
+ *  @discusstion  clear tracing data
+ */
++(void)clearTracingData;
+
+/**
+ *  @discusstion set bundle type
+ *  @param jsBundleString: the bundle source.
+ *  @param iid: the instance  id.
+ */
 +(void)setBundleJSType:(NSString *)jsBundleString instanceId:(NSString *)iid;
+/**
+ *  @discusstion  fetch the weex moudle component handler info
+ *  @return  the weex moudle component handler info
+ */
 +(NSDictionary *)getTacingApi;
 
 @end

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/45b6b484/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
index f84dc8f..f7c167b 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
@@ -100,8 +100,13 @@
         if(!task.tracings){
             task.tracings = [NSMutableArray new];
         }
-        NSTimeInterval time=[[NSDate date] timeIntervalSince1970]*1000;
-        tracing.ts = time;
+        if(WXFloatEqual(tracing.ts,0)){
+            NSTimeInterval time=[[NSDate date] timeIntervalSince1970]*1000;
+            tracing.ts = time;
+        }
+        if(WXFloatEqual(tracing.duration,0)){
+            tracing.duration = WXTracingDurationDefault;
+        }
         if(![WXTracingEnd isEqualToString:tracing.ph]){ // end is should not update
             tracing.traceId = task.counter++;
         }
@@ -134,33 +139,42 @@
     }
 }
 
-+(void)startTracing:(NSString *)iid ref:(NSString*)ref parentRef:(NSString*)parentRef className:(NSString *)className name:(NSString *)name ph:(NSString *)ph fName:(NSString *)fName parentId:(NSString *)parentId
+-(void)clearTracingData
+{
+    [WXTracingManager sharedInstance].tracingTasks = nil;
+}
+
++(void)startTracingWithInstanceId:(NSString *)iid ref:(NSString*)ref className:(NSString *)className name:(NSString *)name phase:(NSString *)phase functionName:(NSString *)functionName options:(NSDictionary *)options
 {
     if([self isTracing]){
         WXTracing *tracing = [WXTracing new];
         if(ref.length>0){
             tracing.ref = ref;
         }
-        if(parentRef.length>0){
-            tracing.parentRef = parentRef;
-        }
         if(className.length>0){
             tracing.className = className;
         }
         if(name.length>0){
             tracing.name = name;
         }
-        if(fName.length>0){
-            tracing.fName = fName;
+        if(functionName.length>0){
+            tracing.fName = functionName;
         }
-        if(ph.length>0){
-            tracing.ph = ph;
+        if(phase.length>0){
+            tracing.ph = phase;
         }
         if(iid.length>0){
             tracing.iid = iid;
         }
-        if(parentId.length>0){
-            tracing.parentId = parentId;
+        
+        if(options && options[@"ts"]){
+            tracing.ts = [options[@"ts"] floatValue];
+        }
+        if(options && options[@"duration"]){
+            tracing.duration =  [options[@"duration"] floatValue];
+        }
+        if(options && options[@"parentRef"]){
+            tracing.parentRef = options[@"parentRef"];
         }
         [self startTracing:tracing];
     }
@@ -254,7 +268,6 @@
                     newTracing.duration = newTracing.ts - bTracing.ts ;
                     bTracing.duration = newTracing.duration;
                     [task.tracings addObject:newTracing];
-                    NSLog(@"jerry1 %f,%f",bTracing.ts,bTracing.duration);
                     *stop = YES;
                 }
             }];

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/45b6b484/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 75ca81a..190537d 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
@@ -126,7 +126,7 @@
         [self _initCompositingAttribute:_attributes];
         [self _handleBorders:styles isUpdating:NO];
         
-        [WXTracingManager startTracing:self.weexInstance.instanceId ref:ref parentRef:self.supercomponent.ref className:nil name:type ph:WXTracingBegin fName:WXTRender parentId:self.supercomponent.ref];
+        [WXTracingManager startTracingWithInstanceId:self.weexInstance.instanceId ref:ref className:nil name:type phase:WXTracingBegin functionName:WXTRender options:nil];
     }
     
     return self;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/45b6b484/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 d81e4a7..f8894bb 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -147,7 +147,7 @@ typedef enum : NSUInteger {
     
     WXResourceRequest *request = [WXResourceRequest requestWithURL:url resourceType:WXResourceTypeMainBundle referrer:@"" cachePolicy:NSURLRequestUseProtocolCachePolicy];
     [self _renderWithRequest:request options:options data:data];
-    [WXTracingManager startTracing:self.instanceId ref:nil parentRef:nil className:nil name:WXTNetworkHanding ph:WXTracingBegin fName:@"renderWithURL" parentId:nil];
+    [WXTracingManager startTracingWithInstanceId:self.instanceId ref:nil className:nil name:WXTNetworkHanding phase:WXTracingBegin functionName:@"renderWithURL" options:nil];
 }
 
 - (void)renderView:(NSString *)source options:(NSDictionary *)options data:(id)data
@@ -202,7 +202,7 @@ typedef enum : NSUInteger {
     
     [[WXSDKManager bridgeMgr] createInstance:self.instanceId template:mainBundleString options:dictionary data:_jsData];
     
-    [WXTracingManager startTracing:self.instanceId ref:nil parentRef:nil className:nil name:WXTExecJS ph:WXTracingBegin fName:@"renderWithMainBundleString" parentId:nil];
+    [WXTracingManager startTracingWithInstanceId:self.instanceId ref:nil className:nil name:WXTExecJS phase:WXTracingBegin functionName:@"renderWithMainBundleString" options:nil];
     
     WX_MONITOR_PERF_SET(WXPTBundleSize, [mainBundleString lengthOfBytesUsingEncoding:NSUTF8StringEncoding], self);
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/45b6b484/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m b/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m
index 5128caa..332bcfc 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m
@@ -94,7 +94,7 @@ WX_EXPORT_METHOD(@selector(getComponentRect:callback:))
     [self performBlockOnComponentManager:^(WXComponentManager *manager) {
         [manager addComponent:element toSupercomponent:parentRef atIndex:index appendingInTree:NO];
     }];
-    [WXTracingManager startTracing:self.weexInstance.instanceId ref:nil parentRef:nil className:nil name:@"dom" ph:WXTracingEnd fName:@"addElement" parentId:nil];
+    [WXTracingManager startTracingWithInstanceId:self.weexInstance.instanceId ref:nil className:nil name:@"dom" phase:WXTracingEnd functionName:@"addElement" options:nil];
 }
 
 - (void)removeElement:(NSString *)ref
@@ -130,7 +130,7 @@ WX_EXPORT_METHOD(@selector(getComponentRect:callback:))
     [self performBlockOnComponentManager:^(WXComponentManager *manager) {
         [manager createFinish];
     }];
-    [WXTracingManager startTracing:self.weexInstance.instanceId ref:nil parentRef:nil className:nil name:@"dom" ph:WXTracingEnd fName:@"createFinish" parentId:nil];
+    [WXTracingManager startTracingWithInstanceId:self.weexInstance.instanceId ref:nil className:nil name:@"dom" phase:WXTracingEnd functionName:@"createFinish" options:nil];
 }
 
 - (void)updateFinish

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/45b6b484/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
index f605681..38606ab 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
+++ b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
@@ -138,7 +138,7 @@ do {\
 
 - (void)viewDidLoad
 {
-    [WXTracingManager startTracing:self.weexInstance.instanceId ref:self.ref parentRef:self.supercomponent.ref className:nil name:_type ph:WXTracingEnd fName:WXTRender parentId:nil];
+    [WXTracingManager startTracingWithInstanceId:self.weexInstance.instanceId ref:self.ref className:nil name:_type phase:WXTracingEnd functionName:WXTRender options:nil];
     WXAssertMainThread();
 }
 


[25/50] [abbrv] incubator-weex git commit: + [ios] delete debug macro

Posted by zs...@apache.org.
+ [ios] delete debug  macro


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

Branch: refs/heads/dev
Commit: 6f087dc0592e294e1063b9e4fd1ee49d2ae73baa
Parents: cfa6118
Author: 齐山 <su...@163.com>
Authored: Mon Jul 24 16:53:02 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Mon Jul 24 16:53:02 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h | 4 ++--
 ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m | 4 ----
 2 files changed, 2 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6f087dc0/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
index 9643a00..767f79f 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
@@ -84,8 +84,8 @@ typedef enum : NSUInteger {
  */
 +(BOOL)isTracing;
 /**
- *  @discusstion  set weex perfermance  tracing state
- *  @param isTracing , YES weex will be traced, NO weex will not be traced in DEBUG environment.
+ *  @discusstion  set weex perfermance  tracing state , you should use in debug environment
+ *  @param isTracing , YES weex will be traced, NO weex will not be traced .
  */
 +(void)switchTracing:(BOOL)isTracing;
 /**

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6f087dc0/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
index af801a3..eb51b7e 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
@@ -78,11 +78,7 @@
 
 +(BOOL)isTracing
 {
-#if DEBUG
     return [WXTracingManager sharedInstance].isTracing;
-#else
-    return NO;
-#endif
 }
 
 +(void)startTracing:(WXTracing *)tracing


[04/50] [abbrv] incubator-weex git commit: + [ios] add wxtracingmanager.h to weexsdk.h

Posted by zs...@apache.org.
+ [ios] add wxtracingmanager.h to weexsdk.h


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

Branch: refs/heads/dev
Commit: cd4ca944244103ed1db608dd0df7d394db03b12c
Parents: 82e5421
Author: 齐山 <su...@163.com>
Authored: Thu Jul 20 10:26:28 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Thu Jul 20 10:26:28 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/WeexSDK.h | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/cd4ca944/ios/sdk/WeexSDK/Sources/WeexSDK.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/WeexSDK.h b/ios/sdk/WeexSDK/Sources/WeexSDK.h
index 640dd02..b553fce 100644
--- a/ios/sdk/WeexSDK/Sources/WeexSDK.h
+++ b/ios/sdk/WeexSDK/Sources/WeexSDK.h
@@ -62,5 +62,6 @@
 #import "WXAComponent.h"
 #import "NSObject+WXSwizzle.h"
 #import "Layout.h"
+#import "WXTracingManager.h"
 
 #endif /* __OBJC__ */


[13/50] [abbrv] incubator-weex git commit: * [android] parallax bugfix

Posted by zs...@apache.org.
* [android] parallax bugfix


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

Branch: refs/heads/dev
Commit: 126306604543c201c3c557f0029364e76b3aa9c1
Parents: da56268
Author: zshshr <zh...@gmail.com>
Authored: Fri Jul 21 11:23:09 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Fri Jul 21 11:23:09 2017 +0800

----------------------------------------------------------------------
 .../main/java/com/alibaba/weex/extend/component/WXParallax.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/12630660/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXParallax.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXParallax.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXParallax.java
index 7cceebc..cf248d3 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXParallax.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXParallax.java
@@ -22,7 +22,6 @@ import android.graphics.Color;
 import android.support.annotation.Nullable;
 import android.text.TextUtils;
 import android.view.View;
-import android.view.animation.AlphaAnimation;
 import android.view.animation.Animation;
 import android.view.animation.AnimationSet;
 import android.view.animation.RotateAnimation;
@@ -329,7 +328,8 @@ public class WXParallax extends WXDiv implements OnWXScrollListener, ICheckBindi
           if (fromOpacity == toOpacity) {
             return null;
           }
-          animation = new AlphaAnimation(fromOpacity, toOpacity);
+          setOpacity(toOpacity);
+//        animation = new AlphaAnimation(fromOpacity, toOpacity);
 
           if (WXEnvironment.isApkDebugable()) {
             WXLogUtils.d("WXParallax", "opacity fromOpacity:" + fromOpacity + " toOpacity:" + toOpacity);


[09/50] [abbrv] incubator-weex git commit: + [ios] add super view for scrollcomponent

Posted by zs...@apache.org.
+ [ios] add super view for scrollcomponent


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

Branch: refs/heads/dev
Commit: af8c97d7b2d8b128ca7f36c2e5133fa3d3b01186
Parents: 5cbb83e
Author: 齐山 <su...@163.com>
Authored: Thu Jul 20 12:06:41 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Thu Jul 20 12:06:41 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m |  1 +
 ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m      | 10 +++++-----
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m           |  2 +-
 3 files changed, 7 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/af8c97d7/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 9798b41..c4c324a 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
@@ -135,6 +135,7 @@ WX_EXPORT_METHOD(@selector(resetLoadmore))
 
 - (void)viewDidLoad
 {
+    [super viewDidLoad];
     [self setContentSize:_contentSize];
     UIScrollView* scrollView = (UIScrollView *)self.view;
     scrollView.delegate = self;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/af8c97d7/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
index 653c192..e5bfb65 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
@@ -223,7 +223,7 @@
         tracing.className = [self getclassName:tracing];
     }
     if([WXTNetworkHanding isEqualToString:task.tag]){
-        if([WXTDataHanding isEqualToString:tracing.name]){
+        if([WXTExecJS isEqualToString:tracing.name]){
             NSMutableArray *tracings = task.tracings;
             [tracings enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(WXTracing *bTracing, NSUInteger idx, BOOL *stop) {
                 if(([WXTNetworkHanding isEqualToString:bTracing.name] || [bTracing.ref isEqualToString:tracing.ref])&&[WXTracingBegin isEqualToString:bTracing.ph]){
@@ -234,19 +234,18 @@
                     newTracing.duration = newTracing.ts - bTracing.ts ;
                     bTracing.duration = newTracing.duration;
                     [task.tracings addObject:newTracing];
-                    NSLog(@"jerry0 %f,%f",bTracing.ts,bTracing.duration);
                     *stop = YES;
                 }
             }];
-            task.tag = WXTDataHanding;
+            task.tag = WXTExecJS;
         }
     }
     
-    if([WXTDataHanding isEqualToString:task.tag]){
+    if([WXTExecJS isEqualToString:task.tag]){
         if([WXTJSCall isEqualToString:tracing.name]){
             NSMutableArray *tracings = task.tracings;
             [tracings enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(WXTracing *bTracing, NSUInteger idx, BOOL *stop) {
-                if(([WXTDataHanding isEqualToString:bTracing.name] || [bTracing.ref isEqualToString:tracing.ref])&&[WXTracingBegin isEqualToString:bTracing.ph]){
+                if(([WXTExecJS isEqualToString:bTracing.name] || [bTracing.ref isEqualToString:tracing.ref])&&[WXTracingBegin isEqualToString:bTracing.ph]){
                     WXTracing *newTracing = [self copyTracing:bTracing];
                     newTracing.iid = tracing.iid;
                     newTracing.ph = WXTracingEnd;
@@ -269,6 +268,7 @@
                 WXComponent *com = [instance componentForRef:tracing.ref];
                 if(com.supercomponent){
                     tracing.parentRef = com.supercomponent.ref;
+                    task.bundleUrl = [instance.scriptURL absoluteString];
                 }
             });
             

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/af8c97d7/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 4e2b8a7..d81e4a7 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -202,7 +202,7 @@ typedef enum : NSUInteger {
     
     [[WXSDKManager bridgeMgr] createInstance:self.instanceId template:mainBundleString options:dictionary data:_jsData];
     
-    [WXTracingManager startTracing:self.instanceId ref:nil parentRef:nil className:nil name:WXTDataHanding ph:WXTracingBegin fName:@"renderWithMainBundleString" parentId:nil];
+    [WXTracingManager startTracing:self.instanceId ref:nil parentRef:nil className:nil name:WXTExecJS ph:WXTracingBegin fName:@"renderWithMainBundleString" parentId:nil];
     
     WX_MONITOR_PERF_SET(WXPTBundleSize, [mainBundleString lengthOfBytesUsingEncoding:NSUTF8StringEncoding], self);
 }


[19/50] [abbrv] incubator-weex git commit: + [ios] update method to class method

Posted by zs...@apache.org.
+ [ios] update method to class 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/d3cadef3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/d3cadef3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/d3cadef3

Branch: refs/heads/dev
Commit: d3cadef3a441cd8f3c005cdf0a611f08a1c49559
Parents: 82c3559
Author: 齐山 <su...@163.com>
Authored: Fri Jul 21 17:26:20 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Fri Jul 21 17:26:20 2017 +0800

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


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d3cadef3/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
index f7c167b..a70a798 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
@@ -139,7 +139,7 @@
     }
 }
 
--(void)clearTracingData
++(void)clearTracingData
 {
     [WXTracingManager sharedInstance].tracingTasks = nil;
 }


[46/50] [abbrv] incubator-weex git commit: Merge branch '0.15-dev-xy' into 0.15-dev

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

* 0.15-dev-xy:
  * [android] visibleCellCount need to be considered columnCount
  * [android] RecyclerView Memory optimization


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

Branch: refs/heads/dev
Commit: 5cb9fc7eb37f5edbc62d17246082f2fae5ff13d1
Parents: 821164c 0bf8ebe
Author: zshshr <zh...@gmail.com>
Authored: Thu Jul 27 10:27:28 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Thu Jul 27 10:27:28 2017 +0800

----------------------------------------------------------------------
 .../weex/ui/component/list/BasicListComponent.java   | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)
----------------------------------------------------------------------



[47/50] [abbrv] incubator-weex git commit: * [android] fix WXSDKInstance filed mComponentObserver memory leak

Posted by zs...@apache.org.
* [android] fix WXSDKInstance filed mComponentObserver memory leak


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

Branch: refs/heads/dev
Commit: 9050d48cd8d15273a5101574025c90aff62cbe9e
Parents: 5cb9fc7
Author: atomtong <to...@qq.com>
Authored: Thu Jul 27 15:55:32 2017 +0800
Committer: atomtong <to...@qq.com>
Committed: Thu Jul 27 15:55:32 2017 +0800

----------------------------------------------------------------------
 android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/9050d48c/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
index 7f03cc2..4a1b06e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -1212,6 +1212,9 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
       mGlobalEvents.clear();
     }
 
+    if(mComponentObserver != null){
+        mComponentObserver = null;
+    }
 
     mNestedInstanceInterceptor = null;
     mUserTrackAdapter = null;


[35/50] [abbrv] incubator-weex git commit: * [android] RecyclerView Memory optimization

Posted by zs...@apache.org.
* [android] RecyclerView Memory optimization


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

Branch: refs/heads/dev
Commit: 1a871981d0d8af344f4abb8ca1fe927f0d4848c7
Parents: f63bf2c
Author: miomin <69...@qq.com>
Authored: Tue Jul 25 16:51:32 2017 +0800
Committer: miomin <69...@qq.com>
Committed: Tue Jul 25 16:51:32 2017 +0800

----------------------------------------------------------------------
 .../weex/ui/component/list/BasicListComponent.java    | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1a871981/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
index bdec22e..b85ec21 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
@@ -92,6 +92,7 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
   private int mListCellCount = 0;
   private boolean mForceLoadmoreNextTime = false;
   private ArrayList<ListBaseViewHolder> recycleViewList = new ArrayList<>();
+  private static int visibleCellCount = 6;
   private static final Pattern transformPattern = Pattern.compile("([a-z]+)\\(([0-9\\.]+),?([0-9\\.]+)?\\)");
 
   private Map<String, AppearanceHelper> mAppearComponents = new HashMap<>();
@@ -818,11 +819,18 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
     if(holder.canRecycled()) {
       recycleViewList.add(holder);
 
+      // recycleViewList allowed max size
+      int threshold = visibleCellCount >= 6 ? (visibleCellCount * 6) : (6*6);
+
       /**
-       * Recycle cache{@link recycleViewList} when recycleViewList.size() > list max child count
+       * Recycle cache{@link recycleViewList} when recycleViewList.size() > list max child count or threshold
        */
-      if (recycleViewList.size() > getChildCount() + 1)
+      if (recycleViewList.size() > getChildCount() + 1 || recycleViewList.size() >= threshold) {
+        WXLogUtils.d(TAG, "Recycle holder list recycled : cache size is " + recycleViewList.size() +
+                ", visibleCellCount is " + visibleCellCount + ", threshold is " + threshold +
+                ", child count is " + getChildCount());
         recycleViewHolderList();
+      }
     } else {
       WXLogUtils.w(TAG, "this holder can not be allowed to  recycled" );
     }
@@ -1188,6 +1196,8 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView
       direction = directionX > 0 ? Constants.Value.DIRECTION_LEFT : Constants.Value.DIRECTION_RIGHT;
     }
 
+    visibleCellCount = lastVisible - firstVisible;
+
     while (it.hasNext()) {
       AppearanceHelper item = it.next();
       WXComponent component = item.getAwareChild();


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

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

Branch: refs/heads/dev
Commit: 33a6becd52fa3950ab3ab47a9375973a0f00083b
Parents: 9b02408 92a1616
Author: acton393 <zh...@gmail.com>
Authored: Fri Jul 21 16:59:51 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Jul 21 16:59:51 2017 +0800

----------------------------------------------------------------------
 .../weex/extend/component/WXParallax.java       |   4 +-
 .../java/com/taobao/weex/dom/WXDomModule.java   |   1 -
 .../ui/component/list/BasicListComponent.java   |  66 ++---
 .../taobao/weex/ui/component/list/WXCell.java   |  10 -
 build/config.js                                 |   1 +
 build/karma.vue.conf.js                         |   7 +
 doc/source/cn/references/modules/timer.md       |   2 +-
 doc/source/references/modules/timer.md          |   3 +-
 html5/render/vue/modules/websocket/websocket.js |   1 +
 html5/render/vue/utils/event.js                 |   6 +-
 html5/render/vue/utils/func.js                  | 136 +++++++--
 html5/render/vue/utils/index.js                 | 104 -------
 html5/render/vue/utils/perf.js                  |   3 +-
 html5/test/render/vue/modules/websocket.js      |  90 +++---
 html5/test/render/vue/utils/component.js        |  50 +++-
 html5/test/render/vue/utils/event.js            |  78 ++++++
 html5/test/render/vue/utils/func.js             | 278 +++++++++++++++++--
 html5/test/render/vue/utils/lazyload.js         | 106 +++++++
 html5/test/render/vue/utils/perf.js             | 132 +++++++++
 html5/test/render/vue/utils/style.js            | 157 +++++++++--
 html5/test/render/vue/utils/type.js             |  49 ++++
 html5/test/render/vue/validator/index.js        |  31 ++-
 pre-build/native-bundle-main.js                 |  16 +-
 23 files changed, 1023 insertions(+), 308 deletions(-)
----------------------------------------------------------------------